gnu: python-argcomplete: Update to 1.11.1.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 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 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 ;;;
82 ;;; This file is part of GNU Guix.
83 ;;;
84 ;;; GNU Guix is free software; you can redistribute it and/or modify it
85 ;;; under the terms of the GNU General Public License as published by
86 ;;; the Free Software Foundation; either version 3 of the License, or (at
87 ;;; your option) any later version.
88 ;;;
89 ;;; GNU Guix is distributed in the hope that it will be useful, but
90 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
91 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
92 ;;; GNU General Public License for more details.
93 ;;;
94 ;;; You should have received a copy of the GNU General Public License
95 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
96
97 (define-module (gnu packages python-xyz)
98 #:use-module ((guix licenses) #:prefix license:)
99 #:use-module (gnu packages)
100 #:use-module (gnu packages algebra)
101 #:use-module (gnu packages adns)
102 #:use-module (gnu packages attr)
103 #:use-module (gnu packages backup)
104 #:use-module (gnu packages bash)
105 #:use-module (gnu packages check)
106 #:use-module (gnu packages compression)
107 #:use-module (gnu packages crypto)
108 #:use-module (gnu packages databases)
109 #:use-module (gnu packages dbm)
110 #:use-module (gnu packages enchant)
111 #:use-module (gnu packages file)
112 #:use-module (gnu packages fontutils)
113 #:use-module (gnu packages gcc)
114 #:use-module (gnu packages geo)
115 #:use-module (gnu packages ghostscript)
116 #:use-module (gnu packages gl)
117 #:use-module (gnu packages glib)
118 #:use-module (gnu packages gnome)
119 #:use-module (gnu packages graphviz)
120 #:use-module (gnu packages graphics)
121 #:use-module (gnu packages gsasl)
122 #:use-module (gnu packages gstreamer)
123 #:use-module (gnu packages gtk)
124 #:use-module (gnu packages icu4c)
125 #:use-module (gnu packages image)
126 #:use-module (gnu packages imagemagick)
127 #:use-module (gnu packages kerberos)
128 #:use-module (gnu packages libevent)
129 #:use-module (gnu packages libffi)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages llvm)
132 #:use-module (gnu packages man)
133 #:use-module (gnu packages maths)
134 #:use-module (gnu packages monitoring)
135 #:use-module (gnu packages multiprecision)
136 #:use-module (gnu packages networking)
137 #:use-module (gnu packages ncurses)
138 #:use-module (gnu packages openstack)
139 #:use-module (gnu packages pcre)
140 #:use-module (gnu packages perl)
141 #:use-module (gnu packages photo)
142 #:use-module (gnu packages pkg-config)
143 #:use-module (gnu packages python)
144 #:use-module (gnu packages python-check)
145 #:use-module (gnu packages python-compression)
146 #:use-module (gnu packages python-crypto)
147 #:use-module (gnu packages python-science)
148 #:use-module (gnu packages python-web)
149 #:use-module (gnu packages qt)
150 #:use-module (gnu packages readline)
151 #:use-module (gnu packages sdl)
152 #:use-module (gnu packages search)
153 #:use-module (gnu packages shells)
154 #:use-module (gnu packages sphinx)
155 #:use-module (gnu packages ssh)
156 #:use-module (gnu packages terminals)
157 #:use-module (gnu packages tex)
158 #:use-module (gnu packages texinfo)
159 #:use-module (gnu packages time)
160 #:use-module (gnu packages tls)
161 #:use-module (gnu packages version-control)
162 #:use-module (gnu packages video)
163 #:use-module (gnu packages web)
164 #:use-module (gnu packages base)
165 #:use-module (gnu packages xml)
166 #:use-module (gnu packages xorg)
167 #:use-module (gnu packages xdisorg)
168 #:use-module (gnu packages tcl)
169 #:use-module (gnu packages bdw-gc)
170 #:use-module (gnu packages serialization)
171 #:use-module (guix packages)
172 #:use-module (guix download)
173 #:use-module (guix git-download)
174 #:use-module (guix hg-download)
175 #:use-module (guix utils)
176 #:use-module (guix build-system gnu)
177 #:use-module (guix build-system cmake)
178 #:use-module (guix build-system python)
179 #:use-module (guix build-system trivial)
180 #:use-module (srfi srfi-1)
181 #:use-module (srfi srfi-26))
182
183 (define-public python-tenacity
184 (package
185 (name "python-tenacity")
186 (version "6.1.0")
187 (source (origin
188 (method url-fetch)
189 (uri (pypi-uri "tenacity" version))
190 (sha256
191 (base32
192 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
193 (build-system python-build-system)
194 (native-inputs
195 `(("python-setuptools-scm" ,python-setuptools-scm)
196 ("python-sphinx" ,python-sphinx)
197 ("python-tornado" ,python-tornado)
198 ("python-pytest" ,python-pytest)))
199 (propagated-inputs
200 `(("python-six" ,python-six)))
201 (arguments
202 `(#:phases (modify-phases %standard-phases
203 (replace 'check
204 (lambda _
205 (invoke "pytest")
206 #t)))))
207 (home-page "https://github.com/jd/tenacity")
208 (synopsis "Retrying library for python")
209 (description "Tenacity is a general-purpose python library to simplify the
210 task of adding retry behavior to just about anything.")
211 (license license:asl2.0)))
212
213 (define-public python-colorlog
214 (package
215 (name "python-colorlog")
216 (version "4.1.0")
217 (source (origin
218 (method url-fetch)
219 (uri (pypi-uri "colorlog" version))
220 (sha256
221 (base32
222 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
223 (build-system python-build-system)
224 (native-inputs
225 `(("python-pytest" ,python-pytest)))
226 (arguments
227 `(#:phases (modify-phases %standard-phases
228 (replace 'check
229 (lambda _
230 ;; Extend PYTHONPATH so the built package will be found.
231 (setenv "PYTHONPATH"
232 (string-append (getcwd) "/build/lib:"
233 (getenv "PYTHONPATH")))
234 (invoke "pytest" "-p" "no:logging")
235 #t)))))
236 (home-page "https://github.com/borntyping/python-colorlog")
237 (synopsis "Log formatting with colors for python")
238 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
239 with Python's logging module that outputs records using terminal colors.")
240 (license license:expat)))
241
242 (define-public python-pyprind
243 (package
244 (name "python-pyprind")
245 (version "2.11.2")
246 (source (origin
247 (method url-fetch)
248 (uri (pypi-uri "PyPrind" version))
249 (sha256
250 (base32
251 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
252 (build-system python-build-system)
253 (propagated-inputs
254 `(("python-psutil" ,python-psutil)))
255 (home-page "https://github.com/rasbt/pyprind")
256 (synopsis "Python Progress Bar and Percent Indicator Utility")
257 (description "The PyPrind (Python Progress Indicator) module provides a
258 progress bar and a percentage indicator object that let you track the progress
259 of a loop structure or other iterative computation.")
260 (license license:bsd-3)))
261
262 (define-public python-gphoto2
263 (package
264 (name "python-gphoto2")
265 (version "2.2.1")
266 (source (origin
267 (method url-fetch)
268 (uri (pypi-uri "gphoto2" version))
269 (sha256
270 (base32
271 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
272 (build-system python-build-system)
273 (native-inputs
274 `(("pkg-config" ,pkg-config)))
275 (inputs
276 `(("libgphoto2" ,libgphoto2)))
277 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
278 (synopsis "Python interface to libgphoto2")
279 (description "@code{python-gphoto2} is a comprehensive Python interface
280 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
281 automatically generate the interface code.")
282 (license license:gpl3+)))
283
284 (define-public python-colour
285 (package
286 (name "python-colour")
287 (version "0.1.5")
288 (source (origin
289 (method url-fetch)
290 (uri (pypi-uri "colour" version))
291 (sha256
292 (base32
293 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
294 (build-system python-build-system)
295 (native-inputs
296 `(("python-d2to1" ,python-d2to1)))
297 (home-page "https://github.com/vaab/colour")
298 (synopsis "Convert and manipulate various color representations")
299 (description "Pythonic way to manipulate color representations (HSL, RVB,
300 web, X11, ...).")
301 (license license:expat)))
302
303 (define-public python-d2to1
304 (package
305 (name "python-d2to1")
306 (version "0.2.12.post1")
307 (source (origin
308 (method url-fetch)
309 (uri (pypi-uri "d2to1" version))
310 (sha256
311 (base32
312 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
313 (build-system python-build-system)
314 (native-inputs
315 `(("python-nose" ,python-nose)))
316 (home-page "https://github.com/embray/d2to1")
317 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
318 in python")
319 (description "The python package d2to1 (the d is for distutils) allows
320 using distutils2-like setup.cfg files for a package's metadata with a
321 distribute/setuptools setup.py script.")
322 (license license:bsd-2)))
323
324 (define-public python-rawkit
325 (package
326 (name "python-rawkit")
327 (version "0.6.0")
328 (source (origin
329 (method url-fetch)
330 (uri (pypi-uri "rawkit" version))
331 (sha256
332 (base32
333 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
334 (build-system python-build-system)
335 (native-inputs
336 `(("python-pytest" ,python-pytest)
337 ("python-mock" ,python-mock)))
338 (inputs
339 `(("libraw" ,libraw)))
340 (home-page "https://rawkit.readthedocs.io")
341 (synopsis "Ctypes-based LibRaw binding for Python")
342 (description "The rawkit package provides two modules: rawkit and libraw.
343 The rawkit module provides a high-level Pythonic interface for developing raw
344 photos, while the libraw module provides a CTypes based interface for
345 interacting with the low-level LibRaw C APIs.")
346 (license license:expat)))
347
348 (define-public python-easygui
349 (package
350 (name "python-easygui")
351 (version "0.98.1")
352 (source (origin
353 (method url-fetch)
354 (uri (pypi-uri "easygui" version))
355 (sha256
356 (base32
357 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
358 (build-system python-build-system)
359 (propagated-inputs
360 `(("python-tkinter" ,python "tk")))
361 (home-page "https://github.com/robertlugg/easygui")
362 (synopsis "GUI programming module for Python")
363 (description "EasyGUI is a module for very simple, very easy GUI
364 programming in Python. EasyGUI is different from other GUI generators in that
365 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
366 simple function calls.")
367 (license license:bsd-3)))
368
369 (define-public python-pymediainfo
370 (package
371 (name "python-pymediainfo")
372 (version "4.1")
373 (source
374 (origin
375 (method url-fetch)
376 (uri (pypi-uri "pymediainfo" version))
377 (sha256
378 (base32
379 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
380 (build-system python-build-system)
381 (native-inputs
382 `(("python-setuptools-scm" ,python-setuptools-scm)
383 ("python-pytest" ,python-pytest)))
384 (inputs
385 `(("libmediainfo" ,libmediainfo)))
386 (arguments
387 `(#:phases
388 (modify-phases %standard-phases
389 (add-after 'unpack 'patch-libmediainfo
390 (lambda _
391 (substitute* "pymediainfo/__init__.py"
392 (("libmediainfo.so.0")
393 (string-append (assoc-ref %build-inputs "libmediainfo")
394 "/lib/libmediainfo.so.0")))
395 #t))
396 (replace 'check
397 (lambda _
398 ;; Extend PYTHONPATH so the built package will be found.
399 (setenv "PYTHONPATH"
400 (string-append (getcwd) "/build/lib:"
401 (getenv "PYTHONPATH")))
402 ;; Skip the only failing test "test_parse_url"
403 (invoke "pytest" "-vv" "-k" "not test_parse_url")
404 #t)))))
405 (home-page
406 "https://github.com/sbraz/pymediainfo")
407 (synopsis
408 "Python wrapper for the mediainfo library")
409 (description
410 "Python wrapper for the mediainfo library to access the technical and tag
411 data for video and audio files.")
412 (license license:expat)))
413
414 (define-public python-psutil
415 (package
416 (name "python-psutil")
417 (version "5.7.0")
418 (source
419 (origin
420 (method url-fetch)
421 (uri (pypi-uri "psutil" version))
422 (sha256
423 (base32 "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"))))
424 (build-system python-build-system)
425 (arguments
426 ;; FIXME: some tests do not return and time out. Some tests fail because
427 ;; some processes survive kill().
428 '(#:tests? #f))
429 (home-page "https://www.github.com/giampaolo/psutil")
430 (synopsis "Library for retrieving information on running processes")
431 (description
432 "psutil (Python system and process utilities) is a library for retrieving
433 information on running processes and system utilization (CPU, memory, disks,
434 network) in Python. It is useful mainly for system monitoring, profiling and
435 limiting process resources and management of running processes. It implements
436 many functionalities offered by command line tools such as: ps, top, lsof,
437 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
438 pidof, tty, taskset, pmap.")
439 (properties `((python2-variant . ,(delay python2-psutil))))
440 (license license:bsd-3)))
441
442 (define-public python2-psutil
443 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
444 (package
445 (inherit base)
446 (propagated-inputs
447 `(("python2-enum34" ,python2-enum34) ;optional
448 ,@(package-propagated-inputs base))))))
449
450 (define-public python-shapely
451 (package
452 (name "python-shapely")
453 (version "1.6.4.post2")
454 (source
455 (origin
456 (method url-fetch)
457 (uri (pypi-uri "Shapely" version))
458 (sha256
459 (base32
460 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
461 (build-system python-build-system)
462 (native-inputs
463 `(("python-cython" ,python-cython)
464 ("python-matplotlib" ,python-matplotlib)
465 ("python-pytest" ,python-pytest)
466 ("python-pytest-cov" ,python-pytest-cov)))
467 (inputs
468 `(("geos" ,geos)))
469 (propagated-inputs
470 `(("python-numpy" ,python-numpy)))
471 (arguments
472 `(#:phases
473 (modify-phases %standard-phases
474 (add-after 'unpack 'patch-geos-path
475 (lambda* (#:key inputs #:allow-other-keys)
476 (let ((geos (assoc-ref inputs "geos"))
477 (glibc (assoc-ref inputs ,(if (%current-target-system)
478 "cross-libc" "libc"))))
479 (substitute* "shapely/geos.py"
480 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
481 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
482 geos "/lib/libgeos_c.so'])"))
483 (("free = load_dll\\('c'\\)\\.free")
484 (string-append "free = load_dll('c', fallbacks=['"
485 glibc "/lib/libc.so.6']).free"))))
486 #t)))))
487 (home-page "https://github.com/Toblerity/Shapely")
488 (synopsis "Library for the manipulation and analysis of geometric objects")
489 (description "Shapely is a Python package for manipulation and analysis of
490 planar geometric objects. It is based on the @code{GEOS} library.")
491 (license license:bsd-3)))
492
493 (define-public python-shortuuid
494 (package
495 (name "python-shortuuid")
496 (version "0.5.0")
497 (source
498 (origin
499 (method url-fetch)
500 (uri (pypi-uri "shortuuid" version))
501 (sha256
502 (base32
503 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
504 (build-system python-build-system)
505 (native-inputs
506 `(("python-pep8" ,python-pep8)))
507 (home-page "https://github.com/skorokithakis/shortuuid")
508 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
509 (description
510 "@code{shortuuid} is a Python library for generating concise, unambiguous
511 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
512 module and then similar looking characters are removed.")
513 (license license:bsd-3)))
514
515 (define-public python-logwrap
516 (package
517 (name "python-logwrap")
518 (version "3.2.1")
519 (source
520 (origin
521 (method url-fetch)
522 (uri (pypi-uri "logwrap" version ".zip"))
523 (sha256
524 (base32
525 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
526 (build-system python-build-system)
527 (propagated-inputs
528 `(("python-six" ,python-six)
529 ("python-typing" ,python-typing)))
530 (native-inputs
531 `(("unzip" ,unzip)
532 ("python-cython" ,python-cython)
533 ("python-pytest" ,python-pytest)
534 ("python-pytest-cov" ,python-pytest-cov)
535 ("python-pytest-runner" ,python-pytest-runner)))
536 (home-page "https://github.com/penguinolog/logwrap")
537 (synopsis "Decorator for logging function arguments")
538 (description "This package provides a decorator to log function arguments
539 and function call return values in a human-readable way.")
540 (license license:asl2.0)))
541
542 (define-public python2-shapely
543 (package-with-python2 python-shapely))
544
545 (define-public python-clyent
546 (package
547 (name "python-clyent")
548 (version "1.2.1")
549 (source
550 (origin
551 (method url-fetch)
552 (uri (pypi-uri "clyent" version))
553 (sha256
554 (base32
555 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
556 (build-system python-build-system)
557 (native-inputs
558 `(("python-mock" ,python-mock)))
559 (home-page "https://github.com/binstar/clyent")
560 (synopsis "Command line client library")
561 (description "Clyent is a Python command line utiliy library. It is used
562 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
563 (license license:bsd-3)))
564
565 (define-public python2-clyent
566 (package-with-python2 python-clyent))
567
568 (define-public python-babel
569 (package
570 (name "python-babel")
571 (version "2.8.0")
572 (source
573 (origin
574 (method url-fetch)
575 (uri (pypi-uri "Babel" version))
576 (sha256
577 (base32
578 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
579 (build-system python-build-system)
580 (native-inputs
581 `(("python-freezegun" ,python-freezegun)
582 ("python-pytest" ,python-pytest)))
583 (propagated-inputs
584 `(("python-pytz" ,python-pytz)))
585 (arguments
586 `(#:phases (modify-phases %standard-phases
587 (replace 'check
588 (lambda _
589 (invoke "pytest" "-vv" "-k"
590 (string-append
591 ;; XXX: These tests fail when using Pytest 4.x and
592 ;; Babel 2.6.0. Try removing this for later versions.
593 "not test_no_inherit_metazone_marker_never_in_output"
594 " and not test_smoke_dates"
595 " and not test_smoke_numbers")))))))
596 (home-page "http://babel.pocoo.org/")
597 (synopsis
598 "Tools for internationalizing Python applications")
599 (description
600 "Babel is composed of two major parts:
601 - tools to build and work with gettext message catalogs
602 - a Python interface to the CLDR (Common Locale Data Repository), providing
603 access to various locale display names, localized number and date formatting,
604 etc. ")
605 (license license:bsd-3)))
606
607 (define-public python2-babel
608 (package-with-python2 python-babel))
609
610 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
611 (define-public python2-babel-2.6
612 (package
613 (inherit python2-babel)
614 (version "2.6.0")
615 (source (origin
616 (method url-fetch)
617 (uri (pypi-uri "Babel" version))
618 (sha256
619 (base32
620 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
621
622 (define-public python2-backport-ssl-match-hostname
623 (package
624 (name "python2-backport-ssl-match-hostname")
625 (version "3.5.0.1")
626 (source
627 (origin
628 (method url-fetch)
629 (uri (pypi-uri "backports.ssl_match_hostname" version))
630 (sha256
631 (base32
632 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
633 (build-system python-build-system)
634 (arguments
635 `(#:python ,python-2
636 #:tests? #f)) ; no test target
637 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
638 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
639 (description
640 "This backport brings the ssl.match_hostname() function to users of
641 earlier versions of Python. The function checks the hostname in the
642 certificate returned by the server to which a connection has been established,
643 and verifies that it matches the intended target hostname.")
644 (license license:psfl)))
645
646 (define-public python-bitarray
647 (package
648 (name "python-bitarray")
649 (version "1.2.1")
650 (source (origin
651 (method url-fetch)
652 (uri (pypi-uri "bitarray" version))
653 (sha256
654 (base32
655 "1kxrlxfj9nrx512sfwifwl9z4v6ky3qschl0zmk3s3dvc3s7bmif"))))
656 (build-system python-build-system)
657 (home-page "https://github.com/ilanschnell/bitarray")
658 (synopsis "Efficient arrays of booleans")
659 (description "This package provides an object type which efficiently
660 represents an array of booleans. Bitarrays are sequence types and behave very
661 much like usual lists. Eight bits are represented by one byte in a contiguous
662 block of memory. The user can select between two representations:
663 little-endian and big-endian. All of the functionality is implemented in C.
664 Methods for accessing the machine representation are provided. This can be
665 useful when bit level access to binary files is required, such as portable
666 bitmap image files. Also, when dealing with compressed data which uses
667 variable bit length encoding, you may find this module useful.")
668 (license license:psfl)))
669
670 (define-public python-boolean.py
671 (package
672 (name "python-boolean.py")
673 (version "3.6")
674 (source
675 (origin
676 ;; There's no source tarball on PyPI.
677 (method git-fetch)
678 (uri (git-reference
679 (url "https://github.com/bastikr/boolean.py")
680 (commit (string-append "v" version))))
681 (file-name (git-file-name name version))
682 (sha256
683 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
684 (build-system python-build-system)
685 (home-page "https://github.com/bastikr/boolean.py")
686 (synopsis "Boolean algebra in one Python module")
687 (description
688 "This is a small Python library that implements boolean algebra.
689 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
690 @code{Symbol} class that can take on one of these two values. Calculations
691 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
692 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
693 Expressions are constructed from parsed strings or directly in Python.")
694 (license license:bsd-2)))
695
696 (define-public python-hdf4
697 (package
698 (name "python-hdf4")
699 (version "0.9")
700 (source
701 (origin
702 (method url-fetch)
703 (uri (pypi-uri name version))
704 (sha256
705 (base32
706 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
707 (build-system python-build-system)
708 (native-inputs `(("nose" ,python-nose)))
709 (propagated-inputs `(("numpy" ,python-numpy)))
710 (inputs
711 `(("hdf4" ,hdf4)
712 ("libjpeg" ,libjpeg-turbo)
713 ("zlib" ,zlib)))
714 (arguments
715 `(#:phases
716 (modify-phases %standard-phases
717 (replace 'check
718 (lambda _
719 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
720 ;; on to import numpy. Somehow this works on their CI system.
721 ;; Let's just manage PYTHONPATH here instead.
722 (substitute* "runexamples.sh"
723 (("export PYTHONPATH=.*") ""))
724 (setenv "PYTHONPATH"
725 (string-append (getcwd) ":"
726 (getenv "PYTHONPATH")))
727 (invoke "./runexamples.sh")
728 (invoke "nosetests" "-v"))))))
729 (home-page "https://github.com/fhs/python-hdf4")
730 (synopsis "Python interface to the NCSA HDF4 library")
731 (description
732 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
733 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
734 NetCDF files can also be read and modified. Python-HDF4 is a fork of
735 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
736 (license license:expat)))
737
738 (define-public python2-hdf4
739 (package-with-python2 python-hdf4))
740
741 (define-public python-h5py
742 (package
743 (name "python-h5py")
744 (version "2.10.0")
745 (source
746 (origin
747 (method url-fetch)
748 (uri (pypi-uri "h5py" version))
749 (sha256
750 (base32
751 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
752 (build-system python-build-system)
753 (arguments
754 `(#:tests? #f ; no test target
755 #:phases
756 (modify-phases %standard-phases
757 (add-after 'unpack 'fix-hdf5-paths
758 (lambda* (#:key inputs #:allow-other-keys)
759 (let ((prefix (assoc-ref inputs "hdf5")))
760 (substitute* "setup_build.py"
761 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
762 (string-append "['" prefix "/lib" "']"))
763 (("'/opt/local/include', '/usr/local/include'")
764 (string-append "'" prefix "/include" "'")))
765 (substitute* "setup_configure.py"
766 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
767 (string-append "['" prefix "/lib" "']")))
768 #t))))))
769 (propagated-inputs
770 `(("python-six" ,python-six)
771 ("python-numpy" ,python-numpy)))
772 (inputs
773 `(("hdf5" ,hdf5-1.10)))
774 (native-inputs
775 `(("python-cython" ,python-cython)
776 ("python-pkgconfig" ,python-pkgconfig)
777 ("pkg-config" ,pkg-config)))
778 (home-page "https://www.h5py.org/")
779 (synopsis "Read and write HDF5 files from Python")
780 (description
781 "The h5py package provides both a high- and low-level interface to the
782 HDF5 library from Python. The low-level interface is intended to be a
783 complete wrapping of the HDF5 API, while the high-level component supports
784 access to HDF5 files, datasets and groups using established Python and NumPy
785 concepts.")
786 (license license:bsd-3)))
787
788 (define-public python2-h5py
789 (package-with-python2 python-h5py))
790
791 (define-public python-sh
792 (package
793 (name "python-sh")
794 (version "1.12.14")
795 (source
796 (origin
797 (method url-fetch)
798 (uri (pypi-uri "sh" version))
799 (sha256
800 (base32
801 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
802 (build-system python-build-system)
803 (arguments
804 '(#:phases
805 (modify-phases %standard-phases
806 (replace 'check
807 (lambda _
808 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
809 (setenv "HOME" "/tmp")
810 (invoke "python" "sh.py" "test"))))))
811 (native-inputs
812 `(("python-coverage" ,python-coverage)))
813 (home-page "https://github.com/amoffat/sh")
814 (synopsis "Python subprocess replacement")
815 (description "This package provides a replacement for Python's
816 @code{subprocess} feature.")
817 (license license:expat)))
818
819 (define-public python2-sh
820 (package-with-python2 python-sh))
821
822 (define-public python-cftime
823 (package
824 (name "python-cftime")
825 (version "1.0.4.2")
826 (source
827 (origin
828 (method url-fetch)
829 (uri (pypi-uri "cftime" version))
830 (sha256
831 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
832 (build-system python-build-system)
833 (propagated-inputs
834 `(("python-numpy" ,python-numpy)))
835 (native-inputs
836 `(("python-coveralls" ,python-coveralls)
837 ("python-cython" ,python-cython)
838 ("python-pytest-cov" ,python-pytest-cov)))
839 (home-page "https://github.com/Unidata/cftime")
840 (synopsis "Library for time handling")
841 (description
842 "This package provides time-handling functionality that used to be part
843 of the netcdf4 package before.")
844 ;; This package claims to include code under the GPLv3 but is released
845 ;; under ISC.
846 (license (list license:isc license:gpl3+))))
847
848 (define-public python-netcdf4
849 (package
850 (name "python-netcdf4")
851 (version "1.4.2")
852 (source
853 (origin
854 (method url-fetch)
855 (uri (pypi-uri "netCDF4" version))
856 (sha256
857 (base32
858 "0c0sklgrmv15ygliin8qq0hp7vanmbi74m6zpi0r1ksr0hssyd5r"))))
859 (build-system python-build-system)
860 (arguments
861 '(#:phases
862 (modify-phases %standard-phases
863 (add-after 'unpack 'configure-locations
864 (lambda* (#:key inputs #:allow-other-keys)
865 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
866 #t)))))
867 (native-inputs
868 `(("python-cython" ,python-cython)))
869 (propagated-inputs
870 `(("python-numpy" ,python-numpy)
871 ("python-cftime" ,python-cftime)))
872 (inputs
873 `(("netcdf" ,netcdf)
874 ("hdf4" ,hdf4)
875 ("hdf5" ,hdf5)))
876 (home-page "https://github.com/Unidata/netcdf4-python")
877 (synopsis "Python/numpy interface to the netCDF library")
878 (description "Netcdf4-python is a Python interface to the netCDF C
879 library. netCDF version 4 has many features not found in earlier
880 versions of the library and is implemented on top of HDF5. This module
881 can read and write files in both the new netCDF 4 and the old netCDF 3
882 format, and can create files that are readable by HDF5 clients. The
883 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
884 to users of that module.")
885 ;; The software is mainly ISC, but includes some files covered
886 ;; by the Expat license.
887 (license (list license:isc license:expat))))
888
889 (define-public python2-netcdf4
890 (package-with-python2 python-netcdf4))
891
892 (define-public python-license-expression
893 (package
894 (name "python-license-expression")
895 (version "0.999")
896 (source
897 (origin
898 (method url-fetch)
899 (uri (pypi-uri "license-expression" version))
900 (sha256
901 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
902 (build-system python-build-system)
903 (propagated-inputs
904 `(("python-boolean.py" ,python-boolean.py)))
905 (home-page "https://github.com/nexB/license-expression")
906 (synopsis "Apply boolean logic to license expressions")
907 (description
908 "This Python module defines a tiny language to evaluate and compare
909 license expressions using boolean logic. Logical combinations of licenses can
910 be tested for equality, containment, and equivalence. They can be normalised
911 and simplified. It supports SPDX license expressions as well as other naming
912 conventions and aliases in the same expression.")
913 (license license:gpl2+)))
914
915 (define-public python-lockfile
916 (package
917 (name "python-lockfile")
918 (version "0.12.2")
919 (source
920 (origin
921 (method url-fetch)
922 (uri (pypi-uri "lockfile" version))
923 (sha256
924 (base32
925 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
926 (build-system python-build-system)
927 (arguments '(#:test-target "check"))
928 (native-inputs
929 `(("python-pbr" ,python-pbr)))
930 (home-page "https://launchpad.net/pylockfile")
931 (synopsis "Platform-independent file locking module")
932 (description
933 "The lockfile package exports a LockFile class which provides a simple
934 API for locking files.")
935 (license license:expat)))
936
937 (define-public python2-lockfile
938 (package-with-python2 python-lockfile))
939
940 (define-public python-filelock
941 (package
942 (name "python-filelock")
943 (version "3.0.12")
944 (source
945 (origin
946 (method url-fetch)
947 (uri (pypi-uri "filelock" version))
948 (sha256
949 (base32
950 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
951 (build-system python-build-system)
952 (home-page
953 "https://github.com/benediktschmitt/py-filelock")
954 (synopsis "Platform independent file lock")
955 (description "@code{filelock} contains a single module implementing
956 a platform independent file lock in Python, which provides a simple way of
957 inter-process communication.")
958 (license license:unlicense)))
959
960 (define-public python-semantic-version
961 (package
962 (name "python-semantic-version")
963 (version "2.6.0")
964 (source
965 (origin
966 (method url-fetch)
967 (uri (pypi-uri "semantic_version" version))
968 (sha256
969 (base32
970 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
971 (build-system python-build-system)
972 (arguments
973 `(#:tests? #f)) ; PyPI tarball lacks tests
974 (home-page "https://github.com/rbarrois/python-semanticversion")
975 (synopsis "Semantic versioning module for Python")
976 (description
977 "The @code{semantic_version} class is a small library for handling
978 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
979
980 It can compare versions, generate a new version that represents a bump in one of
981 the version levels, and check whether any given string is a proper semantic
982 version identifier.")
983 (license license:bsd-3)))
984
985 (define-public python2-semantic-version
986 (package-with-python2 python-semantic-version))
987
988 (define-public python-serpent
989 (package
990 (name "python-serpent")
991 (version "1.28")
992 (source
993 (origin
994 (method url-fetch)
995 (uri (pypi-uri "serpent" version))
996 (sha256
997 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
998 (build-system python-build-system)
999 (native-inputs
1000 `(("python-attrs" ,python-attrs)
1001 ("python-pytz" ,python-pytz)))
1002 (home-page "https://github.com/irmen/Serpent")
1003 (synopsis "Serializer for literal Python expressions")
1004 (description
1005 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1006 serialization. It serializes an object tree into bytes (an utf-8 encoded
1007 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1008 to rebuild the original object tree.
1009
1010 Because only safe literals are encoded, it is safe to send serpent data to
1011 other machines, such as over the network.")
1012 (properties `((python2-variant . ,(delay python2-serpent))))
1013 (license license:expat)))
1014
1015 (define-public python2-serpent
1016 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1017 (package
1018 (inherit base)
1019 (propagated-inputs
1020 `(("python-enum34" ,python2-enum34)
1021 ,@(package-propagated-inputs base))))))
1022
1023 (define-public python-setuptools
1024 (package
1025 (name "python-setuptools")
1026 (version "41.0.1")
1027 (source
1028 (origin
1029 (method url-fetch)
1030 (uri (pypi-uri "setuptools" version ".zip"))
1031 (sha256
1032 (base32
1033 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1034 (modules '((guix build utils)))
1035 (snippet
1036 '(begin
1037 ;; Remove included binaries which are used to build self-extracting
1038 ;; installers for Windows.
1039 ;; TODO: Find some way to build them ourself so we can include them.
1040 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1041 #t))))
1042 (build-system python-build-system)
1043 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1044 ;; One could bootstrap with an internal untested setuptools.
1045 (arguments
1046 `(#:tests? #f))
1047 (home-page "https://pypi.org/project/setuptools/")
1048 (synopsis
1049 "Library designed to facilitate packaging Python projects")
1050 (description
1051 "Setuptools is a fully-featured, stable library designed to facilitate
1052 packaging Python projects, where packaging includes:
1053 Python package and module definitions,
1054 distribution package metadata,
1055 test hooks,
1056 project installation,
1057 platform-specific details,
1058 Python 3 support.")
1059 ;; TODO: setuptools now bundles the following libraries:
1060 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1061 (license (list license:psfl ; setuptools itself
1062 license:expat ; six, appdirs, pyparsing
1063 license:asl2.0 ; packaging is dual ASL2/BSD-2
1064 license:bsd-2))))
1065
1066 (define-public python2-setuptools
1067 (package-with-python2 python-setuptools))
1068
1069 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1070 (define-public python-setuptools-for-tensorflow
1071 (hidden-package
1072 (package
1073 (inherit python-setuptools)
1074 (version "39.1.0")
1075 (source (origin
1076 (inherit (package-source python-setuptools))
1077 (uri (pypi-uri "setuptools" version ".zip"))
1078 (sha256
1079 (base32
1080 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1081
1082 (define-public python-uniseg
1083 (package
1084 (name "python-uniseg")
1085 (version "0.7.1")
1086 (source
1087 (origin
1088 (method url-fetch)
1089 (uri (pypi-uri "uniseg" version ".zip"))
1090 (sha256
1091 (base32
1092 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1093 (build-system python-build-system)
1094 (arguments
1095 '(#:tests? #f)) ; The test suite requires network access.
1096 (native-inputs
1097 `(("unzip" ,unzip)))
1098 (home-page
1099 "https://bitbucket.org/emptypage/uniseg-python")
1100 (synopsis
1101 "Python library to determine Unicode text segmentations")
1102 (description
1103 "Uniseg is a Python package used to determine Unicode text segmentations.
1104 Supported segmentations include:
1105 @enumerate
1106 @item @dfn{Code point} (any value in the Unicode codespace)
1107 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1108 multiple Unicode code points, e.g. \"G\" + acute-accent)
1109 @item Word break
1110 @item Sentence break
1111 @item Line break
1112 @end enumerate")
1113 (license license:expat)))
1114
1115 (define-public python2-uniseg
1116 (package-with-python2 python-uniseg))
1117
1118 (define-public python-humanfriendly
1119 (package
1120 (name "python-humanfriendly")
1121 (version "4.4.1")
1122 (source
1123 (origin
1124 (method url-fetch)
1125 (uri (pypi-uri "humanfriendly" version))
1126 (sha256
1127 (base32
1128 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1129 (build-system python-build-system)
1130 (arguments
1131 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1132 #:tests? #f))
1133 (propagated-inputs
1134 `(("python-monotonic" ,python-monotonic)))
1135 (home-page "https://humanfriendly.readthedocs.io")
1136 (synopsis "Human-friendly input and output in Python")
1137 (description
1138 "The functions and classes in @code{humanfriendly} can be used to make
1139 text interfaces more user-friendly. It includes tools to parse and format
1140 numbers, file sizes, and timespans, timers for long-running operations, menus
1141 to allow the user to choose from a list of options, and terminal interaction
1142 helpers.")
1143 (license license:expat)))
1144
1145 (define-public python2-humanfriendly
1146 (package-with-python2 python-humanfriendly))
1147
1148 (define-public python-textparser
1149 (package
1150 (name "python-textparser")
1151 (version "0.23.0")
1152 (source
1153 (origin
1154 (method url-fetch)
1155 (uri (pypi-uri "textparser" version))
1156 (sha256
1157 (base32
1158 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1159 (build-system python-build-system)
1160 (home-page "https://github.com/eerimoq/textparser")
1161 (synopsis "Fast text parser for Python")
1162 (description "This library provides a text parser written in the Python
1163 language. It aims to be fast.")
1164 (license license:expat)))
1165
1166 (define-public python-aenum
1167 (package
1168 (name "python-aenum")
1169 (version "2.2.3")
1170 (source
1171 (origin
1172 (method url-fetch)
1173 (uri (pypi-uri "aenum" version))
1174 (sha256
1175 (base32
1176 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1177 (build-system python-build-system)
1178 (arguments
1179 `(#:phases (modify-phases %standard-phases
1180 (replace 'check
1181 (lambda _
1182 (format #t "current working dir ~s~%" (getcwd))
1183 (setenv "PYTHONPATH"
1184 (string-append ".:" (getenv "PYTHONPATH")))
1185 ;; We must run the test suite module directly, as it
1186 ;; fails to define the 'tempdir' variable in scope for
1187 ;; the tests otherwise
1188 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1189 ;; issues/32/running-tests-with-python-setuppy-test).
1190 (invoke "python3" "aenum/test.py")
1191 ;; This one fails with "NameError: name
1192 ;; 'test_pickle_dump_load' is not defined" (see:
1193 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1194 ;; /error-running-the-test_v3py-test-suite).
1195 ;; (invoke "python3" "aenum/test_v3.py")
1196 #t)))))
1197 (home-page "https://bitbucket.org/stoneleaf/aenum")
1198 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1199 (description "The aenum library includes an @code{Enum} base class, a
1200 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1201 class.")
1202 (license license:bsd-3)))
1203
1204 (define-public python-can
1205 (package
1206 (name "python-can")
1207 (version "3.3.2")
1208 (source
1209 (origin
1210 (method url-fetch)
1211 (uri (pypi-uri "python-can" version))
1212 (sha256
1213 (base32
1214 "0bkbxi45sckzir6s0j3h01pkfn4vkz3ymih2zjp7zw77wz0vbvsz"))))
1215 (build-system python-build-system)
1216 (arguments
1217 `(#:phases (modify-phases %standard-phases
1218 (add-after 'unpack 'fix-broken-tests
1219 ;; The tests try to run two scripts it expects should be
1220 ;; in PATH, but they aren't at this time (see:
1221 ;; https://github.com/hardbyte/python-can/issues/805).
1222 (lambda _
1223 (substitute* "test/test_scripts.py"
1224 (("\"can_logger\\.py --help\"") "")
1225 (("\"can_player\\.py --help\"") ""))
1226 #t)))))
1227 (propagated-inputs
1228 `(("python-aenum" ,python-aenum)
1229 ("python-wrapt" ,python-wrapt)))
1230 (native-inputs
1231 `(("python-codecov" ,python-codecov)
1232 ("python-future" ,python-future)
1233 ("python-hypothesis" ,python-hypothesis)
1234 ("python-mock" ,python-mock)
1235 ("python-pyserial" ,python-pyserial)
1236 ("python-pytest" ,python-pytest)
1237 ("python-pytest-cov" ,python-pytest-cov)
1238 ("python-pytest-runner" ,python-pytest-runner)
1239 ("python-pytest-timeout" ,python-pytest-timeout)))
1240 (home-page "https://github.com/hardbyte/python-can")
1241 (synopsis "Controller Area Network (CAN) interface module for Python")
1242 (description "This package defines the @code{can} module, which provides
1243 controller area network (CAN) support for Python developers; providing common
1244 abstractions to different hardware devices, and a suite of utilities for
1245 sending and receiving messages on a CAN bus.")
1246 (license license:gpl3+)))
1247
1248 (define-public python-diskcache
1249 (package
1250 (name "python-diskcache")
1251 (version "4.1.0")
1252 (source
1253 (origin
1254 (method url-fetch)
1255 (uri (pypi-uri "diskcache" version))
1256 (sha256
1257 (base32
1258 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1259 (build-system python-build-system)
1260 (arguments
1261 `(#:tests? #f)) ;test suite not included in the release
1262 (home-page "http://www.grantjenks.com/docs/diskcache/")
1263 (synopsis "Disk and file backed cache library")
1264 (description "DiskCache is a disk and file backed persistent cache.")
1265 (license license:asl2.0)))
1266
1267 (define-public python-bitstruct
1268 (package
1269 (name "python-bitstruct")
1270 (version "8.9.0")
1271 (source
1272 (origin
1273 (method url-fetch)
1274 (uri (pypi-uri "bitstruct" version))
1275 (sha256
1276 (base32
1277 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1278 (build-system python-build-system)
1279 (home-page "https://github.com/eerimoq/bitstruct")
1280 (synopsis "Python values to and C bit field structs converter")
1281 (description "This module performs conversions between Python values and C
1282 bit field structs represented as Python byte strings. It is intended to have
1283 a similar interface as the @code{struct} module from Python, but working on
1284 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1285 (license license:expat)))
1286
1287 (define-public python-cantools
1288 (package
1289 (name "python-cantools")
1290 (version "33.1.1")
1291 (source
1292 (origin
1293 ;; We take the sources from the Git repository as the documentation is
1294 ;; not included with the PyPI archive.
1295 (method git-fetch)
1296 (uri (git-reference
1297 (url "https://github.com/eerimoq/cantools.git")
1298 (commit version)))
1299 (file-name (git-file-name name version))
1300 (sha256
1301 (base32
1302 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1303 (build-system python-build-system)
1304 (arguments
1305 `(#:phases
1306 (modify-phases %standard-phases
1307 (add-after 'build 'build-doc
1308 (lambda _
1309 ;; See: https://github.com/eerimoq/cantools/issues/190.
1310 (substitute* "README.rst"
1311 (("https://github.com/eerimoq/cantools/raw/master\
1312 /docs/monitor.png")
1313 "monitor.png"))
1314 (with-directory-excursion "docs"
1315 (invoke "make" "man" "info"))))
1316 (add-after 'install 'install-doc
1317 (lambda* (#:key outputs #:allow-other-keys)
1318 (let* ((out (assoc-ref outputs "out"))
1319 (info (string-append out "/share/info"))
1320 (man1 (string-append out "/share/man/man1")))
1321 (format #t "CWD: ~s~%" (getcwd))
1322 (install-file "docs/_build/texinfo/cantools.info" info)
1323 (install-file "docs/_build/man/cantools.1" man1)
1324 #t))))))
1325 (native-inputs
1326 `(("sphinx" ,python-sphinx)
1327 ("texinfo" ,texinfo)))
1328 (propagated-inputs
1329 `(("python-bitstruct" ,python-bitstruct)
1330 ("python-can" ,python-can)
1331 ("python-diskcache" ,python-diskcache)
1332 ("python-textparser" ,python-textparser)))
1333 (home-page "https://github.com/eerimoq/cantools")
1334 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1335 (description "This package includes Controller Area Network (CAN) related
1336 tools that can be used to:
1337 @itemize
1338 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1339 @item encode and decode CAN messages
1340 @item multiplex simple and extended signals
1341 @item diagnose DID encoding and decoding
1342 @item dump the CAN decoder output
1343 @item test CAN nodes
1344 @item generate C source code
1345 @item monitor the CAN bus
1346 @end itemize")
1347 (license license:expat)))
1348
1349 (define-public python-capturer
1350 (package
1351 (name "python-capturer")
1352 (version "2.4")
1353 (source
1354 (origin
1355 (method url-fetch)
1356 (uri (pypi-uri "capturer" version))
1357 (sha256
1358 (base32
1359 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1360 (build-system python-build-system)
1361 (arguments
1362 `(#:tests? #f))
1363 (propagated-inputs
1364 `(("python-humanfriendly" ,python-humanfriendly)))
1365 (home-page "https://capturer.readthedocs.io")
1366 (synopsis "Capture stdout and stderr streams of the current process")
1367 (description
1368 "The capturer package makes it easy to capture the stdout and stderr
1369 streams of the current process and subprocesses. Output can be relayed
1370 to the terminal in real time but is also available to the Python program
1371 for additional processing.")
1372 (license license:expat)))
1373
1374 (define-public python2-capturer
1375 (package-with-python2 python-capturer))
1376
1377 (define-public python-case
1378 (package
1379 (name "python-case")
1380 (version "1.5.3")
1381 (source
1382 (origin
1383 (method url-fetch)
1384 (uri (pypi-uri "case" version))
1385 (sha256
1386 (base32
1387 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1388 (build-system python-build-system)
1389 (propagated-inputs
1390 `(("python-mock" ,python-mock)
1391 ("python-nose" ,python-nose)
1392 ("python-six" ,python-six)
1393 ("python-unittest2" ,python-unittest2)))
1394 (native-inputs
1395 `(("python-coverage" ,python-coverage)))
1396 (home-page "https://github.com/celery/case")
1397 (synopsis "Unittest utilities and convenience methods")
1398 (description
1399 "The @code{case} package provides utilities on top of unittest, including
1400 some helpful Python 2 compatibility convenience methods.")
1401 (license license:bsd-3)))
1402
1403 (define-public python-verboselogs
1404 (package
1405 (name "python-verboselogs")
1406 (version "1.7")
1407 (source
1408 (origin
1409 (method url-fetch)
1410 (uri (pypi-uri "verboselogs" version))
1411 (sha256
1412 (base32
1413 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1414 (build-system python-build-system)
1415 (arguments
1416 `(#:phases
1417 (modify-phases %standard-phases
1418 (replace 'check
1419 (lambda _
1420 ;; Do not run pylint plugin test, as astroid is an old
1421 ;; unsupported version.
1422 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1423 "verboselogs/tests.py"))))))
1424 (native-inputs
1425 `(("python-mock" ,python-mock)
1426 ("python-pytest" ,python-pytest)))
1427 (home-page "https://verboselogs.readthedocs.io")
1428 (synopsis "Verbose logging level for Python's logging module")
1429 (description
1430 "The @code{verboselogs} package extends Python's @code{logging} module to
1431 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1432 (license license:expat)))
1433
1434 (define-public python2-verboselogs
1435 (package-with-python2 python-verboselogs))
1436
1437 (define-public python-coloredlogs
1438 (package
1439 (name "python-coloredlogs")
1440 (version "10.0")
1441 (source
1442 (origin
1443 (method url-fetch)
1444 (uri (pypi-uri "coloredlogs" version))
1445 (sha256
1446 (base32
1447 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1448 (build-system python-build-system)
1449 (arguments
1450 `(;Tests require some updated modules
1451 #:tests? #f))
1452 (propagated-inputs
1453 `(("python-capturer" ,python-capturer)))
1454 (home-page "https://coloredlogs.readthedocs.io")
1455 (synopsis "Colored stream handler for Python's logging module")
1456 (description
1457 "The @code{coloredlogs} package enables colored terminal output for
1458 Python's logging module. The @code{ColoredFormatter} class inherits from
1459 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1460 messages in color.")
1461 (license license:expat)))
1462
1463 (define-public python2-coloredlogs
1464 (package-with-python2 python-coloredlogs))
1465
1466 (define-public python-editorconfig
1467 (package
1468 (name "python-editorconfig")
1469 (version "0.12.2")
1470 (source
1471 (origin
1472 (method url-fetch)
1473 (uri (pypi-uri "EditorConfig" version))
1474 (sha256
1475 (base32
1476 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1477 (build-system python-build-system)
1478 (home-page "https://editorconfig.org/")
1479 (synopsis "EditorConfig bindings for python")
1480 (description "The EditorConfig project consists of a file format for
1481 defining coding styles and a collection of text editor plugins that enable
1482 editors to read the file format and adhere to defined styles. EditorConfig
1483 files are easily readable and they work nicely with version control systems.")
1484 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1485 (license (list license:bsd-2 license:psfl))))
1486
1487 (define-public python-et-xmlfile
1488 (package
1489 (name "python-et-xmlfile")
1490 (version "1.0.1")
1491 (source
1492 (origin
1493 (method url-fetch)
1494 (uri (pypi-uri "et_xmlfile" version))
1495 (sha256
1496 (base32
1497 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1498 (build-system python-build-system)
1499 (arguments
1500 `(#:phases (modify-phases %standard-phases
1501 (replace 'check
1502 (lambda _
1503 (invoke "pytest"))))))
1504 (native-inputs
1505 `(("python-pytest" ,python-pytest)
1506 ("python-lxml" ,python-lxml))) ;used for the tests
1507 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1508 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1509 (description "This Python library is based upon the @code{xmlfile} module
1510 from @code{lxml}. It aims to provide a low memory, compatible implementation
1511 of @code{xmlfile}.")
1512 (license license:expat)))
1513
1514 (define-public python2-et-xmlfile
1515 (package-with-python2 python-et-xmlfile))
1516
1517 (define-public python-openpyxl
1518 (package
1519 (name "python-openpyxl")
1520 (version "2.6.2")
1521 (source
1522 (origin
1523 ;; We use the upstream repository, as the tests are not included in the
1524 ;; PyPI releases.
1525 (method hg-fetch)
1526 (uri (hg-reference
1527 (url "https://bitbucket.org/openpyxl/openpyxl")
1528 (changeset version)))
1529 (file-name (string-append name "-" version "-checkout"))
1530 (sha256
1531 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1532 (build-system python-build-system)
1533 (arguments
1534 `(#:phases (modify-phases %standard-phases
1535 (replace 'check
1536 (lambda _
1537 (invoke "pytest"))))))
1538 (native-inputs
1539 ;; For the test suite.
1540 `(("python-lxml" ,python-lxml)
1541 ("python-pillow" ,python-pillow)
1542 ("python-pytest" ,python-pytest)))
1543 (propagated-inputs
1544 `(("python-et-xmlfile" ,python-et-xmlfile)
1545 ("python-jdcal" ,python-jdcal)))
1546 (home-page "https://openpyxl.readthedocs.io")
1547 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1548 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1549 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1550 standard.")
1551 (license license:expat)))
1552
1553 (define-public python-eventlet
1554 (package
1555 (name "python-eventlet")
1556 (version "0.25.1")
1557 (source
1558 (origin
1559 (method url-fetch)
1560 (uri (pypi-uri "eventlet" version))
1561 (sha256
1562 (base32
1563 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1564 (build-system python-build-system)
1565 (propagated-inputs
1566 `(("python-greenlet" ,python-greenlet)))
1567 (arguments
1568 ;; TODO: Requires unpackaged 'enum-compat'.
1569 '(#:tests? #f))
1570 (home-page "https://eventlet.net")
1571 (synopsis "Concurrent networking library for Python")
1572 (description
1573 "Eventlet is a concurrent networking library for Python that
1574 allows you to change how you run your code, not how you write it.
1575 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1576 Coroutines ensure that the developer uses a blocking style of programming
1577 that is similar to threading, but provide the benefits of non-blocking I/O.
1578 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1579 from the Python interpreter, or as a small part of a larger application.")
1580 (license license:expat)))
1581
1582 (define-public python2-eventlet
1583 (let ((base (package-with-python2
1584 (strip-python2-variant python-eventlet))))
1585 (package (inherit base)
1586 (propagated-inputs
1587 `(("python2-enum34" ,python2-enum34)
1588 ,@(package-propagated-inputs base))))))
1589
1590 (define-public python-six
1591 (package
1592 (name "python-six")
1593 (version "1.14.0")
1594 (source
1595 (origin
1596 (method url-fetch)
1597 (uri (pypi-uri "six" version))
1598 (sha256
1599 (base32
1600 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1601 (build-system python-build-system)
1602 (arguments
1603 `(#:phases
1604 (modify-phases %standard-phases
1605 (replace 'check
1606 (lambda _
1607 (invoke "py.test" "-v"))))))
1608 (native-inputs
1609 `(("python-pytest" ,python-pytest-bootstrap)))
1610 (home-page "https://pypi.org/project/six/")
1611 (synopsis "Python 2 and 3 compatibility utilities")
1612 (description
1613 "Six is a Python 2 and 3 compatibility library. It provides utility
1614 functions for smoothing over the differences between the Python versions with
1615 the goal of writing Python code that is compatible on both Python versions.
1616 Six supports every Python version since 2.5. It is contained in only one
1617 Python file, so it can be easily copied into your project.")
1618 (license license:x11)))
1619
1620 (define-public python2-six
1621 (package-with-python2 python-six))
1622
1623 (define-public python-six-bootstrap
1624 (package
1625 (inherit python-six)
1626 (name "python-six-bootstrap")
1627 (native-inputs `())
1628 (arguments `(#:tests? #f))))
1629
1630 (define-public python2-six-bootstrap
1631 (package-with-python2 python-six-bootstrap))
1632
1633 (define-public python-schedule
1634 (package
1635 (name "python-schedule")
1636 (version "0.4.3")
1637 (source
1638 (origin
1639 (method url-fetch)
1640 (uri (pypi-uri "schedule" version))
1641 (sha256
1642 (base32
1643 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1644 (build-system python-build-system)
1645 (native-inputs
1646 `(("python-pytest" ,python-pytest)
1647 ("python-mock" ,python-mock)))
1648 (home-page "https://github.com/dbader/schedule")
1649 (synopsis "Schedule periodic function calls in Python")
1650 (description
1651 "Schedule is an in-process scheduler for periodic jobs that uses the
1652 builder pattern for configuration. Schedule lets you run Python functions (or
1653 any other callable) periodically at pre-determined intervals using a simple,
1654 human-friendly syntax.")
1655 (license license:expat)))
1656
1657 (define-public python2-schedule
1658 (package-with-python2 python-schedule))
1659
1660 (define-public python2-mechanize
1661 (package
1662 (name "python2-mechanize")
1663 (version "0.2.5")
1664 (source
1665 (origin
1666 (method url-fetch)
1667 (uri (pypi-uri "mechanize" version))
1668 (sha256
1669 (base32
1670 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1671 (build-system python-build-system)
1672 (arguments
1673 `(#:python ,python-2 ; apparently incompatible with Python 3
1674 #:tests? #f))
1675 ;; test fails with message
1676 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1677 ;; (python-3.3.2) or
1678 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1679 ;; (python-2.7.5).
1680 ;; The source code is from March 2011 and probably not up-to-date
1681 ;; with respect to python unit tests.
1682 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1683 (synopsis
1684 "Stateful programmatic web browsing in Python")
1685 (description
1686 "Mechanize implements stateful programmatic web browsing in Python,
1687 after Andy Lester’s Perl module WWW::Mechanize.")
1688 (license (license:non-copyleft
1689 "file://COPYING"
1690 "See COPYING in the distribution."))))
1691
1692
1693 (define-public python-simplejson
1694 (package
1695 (name "python-simplejson")
1696 (version "3.14.0")
1697 (source
1698 (origin
1699 (method url-fetch)
1700 (uri (pypi-uri "simplejson" version))
1701 (sha256
1702 (base32
1703 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1704 (build-system python-build-system)
1705 (home-page "http://simplejson.readthedocs.org/en/latest/")
1706 (synopsis
1707 "Json library for Python")
1708 (description
1709 "JSON (JavaScript Object Notation) is a subset of JavaScript
1710 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1711 format.
1712
1713 Simplejson exposes an API familiar to users of the standard library marshal
1714 and pickle modules. It is the externally maintained version of the json
1715 library contained in Python 2.6, but maintains compatibility with Python 2.5
1716 and (currently) has significant performance advantages, even without using
1717 the optional C extension for speedups. Simplejson is also supported on
1718 Python 3.3+.")
1719 (license license:x11)))
1720
1721 (define-public python2-simplejson
1722 (package-with-python2 python-simplejson))
1723
1724
1725 (define-public python-pyicu
1726 (package
1727 (name "python-pyicu")
1728 (version "2.4.3")
1729 (source
1730 (origin
1731 (method url-fetch)
1732 (uri (pypi-uri "PyICU" version))
1733 (sha256
1734 (base32
1735 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1736 (build-system python-build-system)
1737 (inputs
1738 `(("icu4c" ,icu4c)))
1739 (native-inputs
1740 `(("python-pytest" ,python-pytest)
1741 ("python-six" ,python-six)))
1742 (home-page "https://github.com/ovalhub/pyicu")
1743 (synopsis "Python extension wrapping the ICU C++ API")
1744 (description
1745 "PyICU is a python extension wrapping the ICU C++ API.")
1746 (license license:x11)))
1747
1748 (define-public python2-pyicu
1749 (package-with-python2 python-pyicu))
1750
1751 (define-public python2-dogtail
1752 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1753 ;; spaces in indentation" with Python 3.
1754 (package
1755 (name "python2-dogtail")
1756 (version "0.9.9")
1757 (source (origin
1758 (method url-fetch)
1759 (uri (pypi-uri "dogtail" version))
1760 (sha256
1761 (base32
1762 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1763 (build-system python-build-system)
1764 (arguments `(#:python ,python-2
1765 #:tests? #f)) ; invalid command "test"
1766 ;; Currently no offical homepage.
1767 (home-page "https://pypi.org/project/dogtail/")
1768 (synopsis "GUI test tool and automation framework written in Python")
1769 (description
1770 "Dogtail is a GUI test tool and automation framework written in Python.
1771 It uses Accessibility (a11y) technologies to communicate with desktop
1772 applications. dogtail scripts are written in Python and executed like any
1773 other Python program.")
1774 (license license:gpl2+)))
1775
1776 (define-public python-empy
1777 (package
1778 (name "python-empy")
1779 (version "3.3.3")
1780 (source (origin
1781 (method url-fetch)
1782 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1783 version ".tar.gz"))
1784 (sha256
1785 (base32
1786 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1787 (build-system python-build-system)
1788 (arguments
1789 `(#:tests? #f)) ; python2 only
1790 (home-page "http://www.alcyone.com/software/empy/")
1791 (synopsis "Templating system for Python")
1792 (description
1793 "EmPy is a system for embedding Python expressions and statements in
1794 template text; it takes an EmPy source file, processes it, and produces
1795 output. This is accomplished via expansions, which are special signals to the
1796 EmPy system and are set off by a special prefix (by default the at sign, @@).
1797 EmPy can expand arbitrary Python expressions and statements in this way, as
1798 well as a variety of special forms. Textual data not explicitly delimited in
1799 this way is sent unaffected to the output, allowing Python to be used in
1800 effect as a markup language. Also supported are callbacks via hooks,
1801 recording and playback via diversions, and dynamic, chainable filters. The
1802 system is highly configurable via command line options and embedded
1803 commands.")
1804 (license license:lgpl2.1+)))
1805
1806 (define-public python2-empy
1807 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1808 (package
1809 (inherit base)
1810 (arguments `(,@(package-arguments base)
1811 #:tests? #t)))))
1812
1813 (define-public python2-element-tree
1814 (package
1815 (name "python2-element-tree")
1816 (version "1.2.6")
1817 (source (origin
1818 (method url-fetch)
1819 (uri (string-append
1820 "http://effbot.org/media/downloads/elementtree-"
1821 version "-20050316.tar.gz"))
1822 (sha256
1823 (base32
1824 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1825 (build-system python-build-system)
1826 (arguments
1827 `(#:python ,python-2 ; seems to be part of Python 3
1828 #:tests? #f)) ; no 'test' sub-command
1829 (synopsis "Toolkit for XML processing in Python")
1830 (description
1831 "ElementTree is a Python library supporting lightweight XML processing.")
1832 (home-page "https://effbot.org/zone/element-index.htm")
1833 (license (license:x11-style
1834 "http://docs.python.org/2/license.html"
1835 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1836
1837 (define-public python2-pybugz
1838 (package
1839 (name "python2-pybugz")
1840 (version "0.6.11")
1841 (source (origin
1842 (method url-fetch)
1843 (uri (string-append
1844 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1845 version ".tar.gz"))
1846 (sha256
1847 (base32
1848 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1849 (patches (search-patches "pybugz-stty.patch"
1850 "pybugz-encode-error.patch"))))
1851 (build-system python-build-system)
1852 (arguments
1853 `(#:python ,python-2 ; SyntaxError with Python 3
1854 #:tests? #f)) ; no 'test' sub-command
1855 (propagated-inputs
1856 `(("element-tree" ,python2-element-tree)))
1857 (synopsis "Python and command-line interface to Bugzilla")
1858 (description
1859 "PyBugz is a Python library and command-line tool to query the Bugzilla
1860 bug tracking system. It is meant as an aid to speed up interaction with the
1861 bug tracker.")
1862 (home-page "http://www.liquidx.net/pybugz/")
1863 (license license:gpl2)))
1864
1865 (define-public python2-enum
1866 (package
1867 (name "python2-enum")
1868 (version "0.4.6")
1869 (source (origin
1870 (method url-fetch)
1871 (uri (pypi-uri "enum" version))
1872 (sha256
1873 (base32
1874 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1875 (build-system python-build-system)
1876 (arguments
1877 `(#:python ,python-2))
1878 (home-page "https://pypi.org/project/enum/")
1879 (synopsis "Robust enumerated type support in Python")
1880 (description
1881 "This provides a module for robust enumerations in Python. It has
1882 been superseded by the Python standard library and is provided only for
1883 compatibility.")
1884 ;; Choice of either license.
1885 (license (list license:gpl3+ license:psfl))))
1886
1887 (define-public python-enum34
1888 (package
1889 (name "python-enum34")
1890 (version "1.1.6")
1891 (source
1892 (origin
1893 (method url-fetch)
1894 (uri (pypi-uri "enum34" version))
1895 (sha256
1896 (base32
1897 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1898 (build-system python-build-system)
1899 (home-page "https://pypi.org/project/enum34/")
1900 (synopsis "Backported Python 3.4 Enum")
1901 (description
1902 "Enum34 is the new Python stdlib enum module available in Python 3.4
1903 backported for previous versions of Python from 2.4 to 3.3.")
1904 (license license:bsd-3)))
1905
1906 (define-public python2-enum34
1907 (package-with-python2 python-enum34))
1908
1909 (define-public python-parse-type
1910 (package
1911 (name "python-parse-type")
1912 (version "0.4.2")
1913 (source
1914 (origin
1915 (method url-fetch)
1916 (uri (pypi-uri "parse_type" version))
1917 (sha256
1918 (base32
1919 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1920 (build-system python-build-system)
1921 (propagated-inputs
1922 `(("python-six" ,python-six)
1923 ("python-parse" ,python-parse)))
1924 (native-inputs
1925 `(("python-pytest" ,python-pytest)
1926 ("python-pytest-runner" ,python-pytest-runner)))
1927 (home-page "https://github.com/jenisys/parse_type")
1928 (synopsis "Extended parse module")
1929 (description
1930 "Parse_type extends the python parse module.")
1931 (properties
1932 `((python2-variant . ,(delay python2-parse-type))))
1933 (license license:bsd-3)))
1934
1935 (define-public python2-parse-type
1936 (let ((base (package-with-python2
1937 (strip-python2-variant python-parse-type))))
1938 (package (inherit base)
1939 (propagated-inputs
1940 `(("python2-enum34" ,python2-enum34)
1941 ,@(package-propagated-inputs base))))))
1942
1943 (define-public python-parse
1944 (package
1945 (name "python-parse")
1946 (version "1.8.4")
1947 (source
1948 (origin
1949 (method url-fetch)
1950 (uri (pypi-uri "parse" version))
1951 (sha256
1952 (base32
1953 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1954 (build-system python-build-system)
1955 (arguments
1956 `(#:phases
1957 (modify-phases %standard-phases
1958 (replace 'check
1959 (lambda _ (invoke "python" "test_parse.py"))))))
1960 (home-page "https://github.com/r1chardj0n3s/parse")
1961 (synopsis "Parse strings")
1962 (description
1963 "Parse strings using a specification based on the Python @code{format()}
1964 syntax.")
1965 (license license:x11)))
1966
1967 (define-public python-polib
1968 (package
1969 (name "python-polib")
1970 (version "1.0.8")
1971 (source (origin
1972 (method url-fetch)
1973 (uri (pypi-uri "polib" version))
1974 (sha256
1975 (base32
1976 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1977 (build-system python-build-system)
1978 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1979 (synopsis "Manipulate, create and modify gettext files")
1980 (description "Polib can manipulate any gettext format (po, pot and mo)
1981 files. It can be used to create po files from scratch or to modify
1982 existing ones.")
1983 (license license:expat)))
1984
1985 (define-public python2-polib
1986 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1987 (package
1988 (inherit base)
1989 (arguments `(,@(package-arguments base)
1990 ;; Tests don't work with python2.
1991 #:tests? #f)))))
1992
1993 (define-public python-poyo
1994 (package
1995 (name "python-poyo")
1996 (version "0.5.0")
1997 (source
1998 (origin
1999 (method url-fetch)
2000 (uri (pypi-uri "poyo" version))
2001 (sha256
2002 (base32
2003 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2004 (build-system python-build-system)
2005 (home-page "https://github.com/hackebrot/poyo")
2006 (synopsis "Lightweight YAML Parser for Python")
2007 (description
2008 "This package provides a lightweight YAML Parser for Python. It supports
2009 only a chosen subset of the YAML format that is required to parse cookiecutter
2010 user configuration files. It does not have support for serializing into YAML
2011 and is not compatible with JSON.")
2012 (license license:expat)))
2013
2014 (define-public scons
2015 (package
2016 (name "scons")
2017 (version "3.0.4")
2018 (source (origin
2019 (method git-fetch)
2020 (uri (git-reference
2021 (url "https://github.com/SCons/scons.git")
2022 (commit version)))
2023 (file-name (git-file-name name version))
2024 (sha256
2025 (base32
2026 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2027 (build-system python-build-system)
2028 (arguments
2029 `(#:use-setuptools? #f ; still relies on distutils
2030 #:tests? #f ; no 'python setup.py test' command
2031 #:phases
2032 (modify-phases %standard-phases
2033 (add-before 'build 'bootstrap
2034 (lambda _
2035 (substitute* "src/engine/SCons/compat/__init__.py"
2036 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2037 "sys.modules[new] = __import__(old)"))
2038 (substitute* "src/engine/SCons/Platform/__init__.py"
2039 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2040 "mod = __import__(full_name)"))
2041 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2042 (chdir "build/scons")
2043 #t)))))
2044 (home-page "https://scons.org/")
2045 (synopsis "Software construction tool written in Python")
2046 (description
2047 "SCons is a software construction tool. Think of SCons as an improved,
2048 cross-platform substitute for the classic Make utility with integrated
2049 functionality similar to autoconf/automake and compiler caches such as ccache.
2050 In short, SCons is an easier, more reliable and faster way to build
2051 software.")
2052 (license license:x11)))
2053
2054 (define-public scons-python2
2055 (package
2056 (inherit (package-with-python2 scons))
2057 (name "scons-python2")))
2058
2059 (define-public python-extras
2060 (package
2061 (name "python-extras")
2062 (version "1.0.0")
2063 (source
2064 (origin
2065 (method url-fetch)
2066 (uri (pypi-uri "extras" version))
2067 (sha256
2068 (base32
2069 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2070 (build-system python-build-system)
2071 (arguments
2072 ;; FIXME: Circular dependency on testtools.
2073 '(#:tests? #f))
2074 (home-page "https://github.com/testing-cabal/extras")
2075 (synopsis "Useful extensions to the Python standard library")
2076 (description
2077 "Extras is a set of extensions to the Python standard library.")
2078 (license license:expat)))
2079
2080 (define-public python2-extras
2081 (package-with-python2 python-extras))
2082
2083 (define-public python-mimeparse
2084 (package
2085 (name "python-mimeparse")
2086 (version "1.6.0")
2087 (source
2088 (origin
2089 (method url-fetch)
2090 (uri (pypi-uri "python-mimeparse" version))
2091 (sha256
2092 (base32
2093 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2094 (build-system python-build-system)
2095 (arguments
2096 '(#:phases
2097 (modify-phases %standard-phases
2098 (replace 'check
2099 (lambda _
2100 (invoke "./mimeparse_test.py"))))))
2101 (home-page
2102 "https://github.com/dbtsai/python-mimeparse")
2103 (synopsis "Python library for parsing MIME types")
2104 (description
2105 "Mimeparse provides basic functions for parsing MIME type names and
2106 matching them against a list of media-ranges.")
2107 (license license:expat)))
2108
2109 (define-public python2-mimeparse
2110 (package-with-python2 python-mimeparse))
2111
2112 (define-public python-miniboa
2113 (package
2114 (name "python-miniboa")
2115 (version "1.0.7")
2116 (source
2117 (origin
2118 (method url-fetch)
2119 (uri (pypi-uri "miniboa" version))
2120 (sha256
2121 (base32
2122 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2123 (build-system python-build-system)
2124 (home-page "https://github.com/shmup/miniboa")
2125 (synopsis "Simple, single-threaded Telnet server")
2126 (description
2127 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2128 server.")
2129 (license license:asl2.0)))
2130
2131 (define-public python2-miniboa
2132 (package-with-python2 python-miniboa))
2133
2134 (define-public python-pafy
2135 (package
2136 (name "python-pafy")
2137 (version "0.5.3.1")
2138 (source
2139 (origin
2140 (method url-fetch)
2141 (uri (pypi-uri "pafy" version))
2142 (sha256
2143 (base32
2144 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2145 (build-system python-build-system)
2146 (arguments
2147 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2148 (propagated-inputs
2149 ;; Youtube-dl is a python package which is imported in the file
2150 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2151 `(("youtube-dl" ,youtube-dl)))
2152 (home-page "https://np1.github.io/pafy/")
2153 (synopsis "Retrieve YouTube content and metadata")
2154 (description
2155 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2156 (license license:lgpl3+)))
2157
2158 (define-public python2-funcsigs
2159 (package
2160 (name "python2-funcsigs")
2161 (version "1.0.2")
2162 (source (origin
2163 (method url-fetch)
2164 (uri (pypi-uri "funcsigs" version))
2165 (sha256
2166 (base32
2167 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2168 (build-system python-build-system)
2169 (arguments
2170 `(#:python ,python-2))
2171 (native-inputs
2172 `(("python2-unittest2" ,python2-unittest2)))
2173 (home-page "http://funcsigs.readthedocs.org")
2174 (synopsis "Python function signatures from PEP362")
2175 (description
2176 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2177 (license license:asl2.0)))
2178
2179 (define-public python2-funcsigs-bootstrap
2180 (package
2181 (inherit python2-funcsigs)
2182 (name "python2-funcsigs-bootstrap")
2183 (native-inputs `())
2184 (arguments
2185 `(#:tests? #f
2186 ,@(package-arguments python2-funcsigs)))))
2187
2188 (define-public python-py
2189 (package
2190 (name "python-py")
2191 (version "1.8.1")
2192 (source
2193 (origin
2194 (method url-fetch)
2195 (uri (pypi-uri "py" version))
2196 (sha256
2197 (base32
2198 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2199 (build-system python-build-system)
2200 (arguments
2201 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2202 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2203 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2204 ;; Is this module globally installed?"
2205 '(#:tests? #f))
2206 (native-inputs
2207 `(("python-setuptools-scm" ,python-setuptools-scm)))
2208 (home-page "https://github.com/pytest-dev/py")
2209 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2210 (description
2211 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2212 code introspection, and logging.")
2213 (license license:expat)))
2214
2215 (define-public python2-py
2216 (package-with-python2 python-py))
2217
2218 ;; Recent versions of python-fixtures and python-testrepository need
2219 ;; python-pbr for packaging, which itself needs these two packages for
2220 ;; testing.
2221 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2222 ;; same source, just without any test dependencies and with tests disabled.
2223 ;; python-pbr-minmal is then used to package python-fixtures and
2224 ;; python-testrepository.
2225 ;; Strictly speaking we currently could remove the test-requirements from the
2226 ;; normal python-pbr package (and save this package) since test are disabled
2227 ;; there anyway. But this may change in future.
2228 (define-public python-pbr-minimal
2229 (package
2230 (name "python-pbr-minimal")
2231 (version "3.0.1")
2232 (source
2233 (origin
2234 (method url-fetch)
2235 (uri (pypi-uri "pbr" version))
2236 (sha256
2237 (base32
2238 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2239 (build-system python-build-system)
2240 (arguments
2241 `(#:tests? #f))
2242 (home-page "https://docs.openstack.org/pbr/latest/")
2243 (synopsis "Minimal build of python-pbr used for bootstrapping")
2244 (description
2245 "Used only for bootstrapping python2-pbr, you should not need this.")
2246 (license license:asl2.0)))
2247
2248 (define-public python2-pbr-minimal
2249 (package-with-python2 python-pbr-minimal))
2250
2251 (define-public python-pbr
2252 (package
2253 (inherit python-pbr-minimal)
2254 (name "python-pbr")
2255 (arguments
2256 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2257 (propagated-inputs
2258 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2259 (native-inputs
2260 `(("python-fixtures" ,python-fixtures-bootstrap)
2261 ;; discover, coverage, hacking, subunit
2262 ("python-mock" ,python-mock)
2263 ("python-six" ,python-six)
2264 ("python-sphinx" ,python-sphinx)
2265 ("python-testrepository" ,python-testrepository-bootstrap)
2266 ("python-testresources" ,python-testresources-bootstrap)
2267 ("python-testscenarios" ,python-testscenarios-bootstrap)
2268 ("python-testtools" ,python-testtools-bootstrap)
2269 ("python-virtualenv" ,python-virtualenv)))
2270 (synopsis "Enhance the default behavior of Python’s setuptools")
2271 (description
2272 "Python Build Reasonableness (PBR) is a library that injects some useful
2273 and sensible default behaviors into your setuptools run. It will set
2274 versions, process requirements files and generate AUTHORS and ChangeLog file
2275 from git information.
2276 ")))
2277
2278 (define-public python2-pbr
2279 (package-with-python2 python-pbr))
2280
2281 (define-public python-pyrsistent
2282 (package
2283 (name "python-pyrsistent")
2284 (version "0.16.0")
2285 (home-page "https://github.com/tobgu/pyrsistent")
2286 (source (origin
2287 (method url-fetch)
2288 (uri (pypi-uri "pyrsistent" version))
2289 (sha256
2290 (base32
2291 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2292 (build-system python-build-system)
2293 (arguments
2294 '(#:phases (modify-phases %standard-phases
2295 ;; The package works fine with newer Pytest and Hypothesis, but
2296 ;; has pinned older versions to stay compatible with Python 2.
2297 (add-before 'check 'loosen-pytest-requirement
2298 (lambda _
2299 (substitute* "setup.py"
2300 (("pytest<5") "pytest")
2301 (("hypothesis<5") "hypothesis"))
2302 #t)))))
2303 (native-inputs
2304 `(("python-hypothesis" ,python-hypothesis)
2305 ("python-pytest" ,python-pytest)
2306 ("python-pytest-runner" ,python-pytest-runner)))
2307 (propagated-inputs
2308 `(("python-six" ,python-six)))
2309 (synopsis "Persistent data structures for Python")
2310 (description
2311 "Pyrsistent is a number of persistent collections (by some referred to as
2312 functional data structures). Persistent in the sense that they are immutable.
2313
2314 All methods on a data structure that would normally mutate it instead return a
2315 new copy of the structure containing the requested updates. The original
2316 structure is left untouched.")
2317 (license license:expat)))
2318
2319 (define-public python2-pyrsistent
2320 (package-with-python2 python-pyrsistent))
2321
2322 (define-public python-exif-read
2323 (package
2324 (name "python-exif-read")
2325 (version "2.1.2")
2326 (source (origin
2327 (method url-fetch)
2328 (uri (pypi-uri "ExifRead" version))
2329 (sha256
2330 (base32
2331 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2332 (build-system python-build-system)
2333 (arguments `(#:tests? #f)) ; no tests
2334 (home-page "https://github.com/ianare/exif-py")
2335 (synopsis "Python library to extract EXIF data from image files")
2336 (description
2337 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2338 files.")
2339 (license license:bsd-3)))
2340
2341 (define-public python2-exif-read
2342 (package-with-python2 python-exif-read))
2343
2344 (define-public python-pyld
2345 (package
2346 (name "python-pyld")
2347 (version "1.0.5")
2348 (source (origin
2349 (method url-fetch)
2350 (uri (pypi-uri "PyLD" version))
2351 (sha256
2352 (base32
2353 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2354 (build-system python-build-system)
2355 (home-page "https://github.com/digitalbazaar/pyld")
2356 (synopsis "Python implementation of the JSON-LD specification")
2357 (description
2358 "PyLD is an implementation of the JSON-LD specification.")
2359 (license license:bsd-3)))
2360
2361 (define-public python2-pyld
2362 (package-with-python2 python-pyld))
2363
2364 (define-public python-click
2365 (package
2366 (name "python-click")
2367 (version "7.0")
2368 (source
2369 (origin
2370 (method url-fetch)
2371 (uri (pypi-uri "click" version))
2372 (sha256
2373 (base32
2374 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2375 (build-system python-build-system)
2376 (arguments
2377 `(#:phases
2378 (modify-phases %standard-phases
2379 (add-after 'unpack 'fix-paths
2380 (lambda* (#:key inputs #:allow-other-keys)
2381 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2382 "cross-libc" "libc"))))
2383 (substitute* "click/_unicodefun.py"
2384 (("'locale'")
2385 (string-append "'" glibc "/bin/locale'"))))
2386 #t))
2387 (replace 'check
2388 (lambda _
2389 (invoke "python" "-m" "pytest"))))))
2390 (native-inputs
2391 `(("python-pytest" ,python-pytest)))
2392 (home-page "https://palletsprojects.com/p/click/")
2393 (synopsis "Command line library for Python")
2394 (description
2395 "Click is a Python package for creating command line interfaces in a
2396 composable way with as little code as necessary. Its name stands for
2397 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2398 with sensible defaults out of the box.")
2399 (license license:bsd-3)))
2400
2401 (define-public python2-click
2402 (package-with-python2 python-click))
2403
2404 (define-public python-wheel
2405 (package
2406 (name "python-wheel")
2407 (version "0.33.6")
2408 (source
2409 (origin
2410 (method url-fetch)
2411 (uri (pypi-uri "wheel" version))
2412 (sha256
2413 (base32
2414 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2415 (build-system python-build-system)
2416 (arguments
2417 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2418 ;; fails to find the newly-built bdist_wheel library, even though it is
2419 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2420 '(#:tests? #f))
2421 (home-page "https://bitbucket.org/pypa/wheel/")
2422 (synopsis "Format for built Python packages")
2423 (description
2424 "A wheel is a ZIP-format archive with a specially formatted filename and
2425 the @code{.whl} extension. It is designed to contain all the files for a PEP
2426 376 compatible install in a way that is very close to the on-disk format. Many
2427 packages will be properly installed with only the @code{Unpack} step and the
2428 unpacked archive preserves enough information to @code{Spread} (copy data and
2429 scripts to their final locations) at any later time. Wheel files can be
2430 installed with a newer @code{pip} or with wheel's own command line utility.")
2431 (license license:expat)))
2432
2433 (define-public python2-wheel
2434 (package-with-python2 python-wheel))
2435
2436 (define-public python-vcversioner
2437 (package
2438 (name "python-vcversioner")
2439 (version "2.16.0.0")
2440 (source
2441 (origin
2442 (method url-fetch)
2443 (uri (pypi-uri "vcversioner" version))
2444 (sha256
2445 (base32
2446 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2447 (build-system python-build-system)
2448 (synopsis "Python library for version number discovery")
2449 (description "Vcversioner is a Python library that inspects tagging
2450 information in a variety of version control systems in order to discover
2451 version numbers.")
2452 (home-page "https://github.com/habnabit/vcversioner")
2453 (license license:isc)))
2454
2455 (define-public python2-vcversioner
2456 (package-with-python2 python-vcversioner))
2457
2458 (define-public python-jdcal
2459 (package
2460 (name "python-jdcal")
2461 (version "1.4")
2462 (source
2463 (origin
2464 (method url-fetch)
2465 (uri (pypi-uri "jdcal" version))
2466 (sha256
2467 (base32
2468 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2469 (build-system python-build-system)
2470 (arguments
2471 `(#:phases (modify-phases %standard-phases
2472 (replace 'check
2473 (lambda _
2474 (invoke "pytest"))))))
2475 (native-inputs
2476 `(("python-pytest" ,python-pytest)))
2477 (home-page "https://github.com/phn/jdcal")
2478 (synopsis "Functions to convert between Julian dates Gregorian dates")
2479 (description "This Python library provides functions for converting
2480 between Julian dates and Gregorian dates.")
2481 (license license:bsd-2)))
2482
2483 (define-public python2-jdcal
2484 (package-with-python2 python-jdcal))
2485
2486 (define-public python-jsondiff
2487 (package
2488 (name "python-jsondiff")
2489 (version "1.2.0")
2490 (source
2491 (origin
2492 (method url-fetch)
2493 (uri (pypi-uri "jsondiff" version))
2494 (sha256
2495 (base32
2496 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2497 (build-system python-build-system)
2498 (native-inputs
2499 `(("python-nose" ,python-nose)
2500 ("python-nose-random" ,python-nose-random)))
2501 (home-page
2502 "https://github.com/fzumstein/jsondiff")
2503 (synopsis "Compare JSON and JSON-like structures in Python")
2504 (description "@code{jsondiff} is a Python library which lets you
2505 compare, diff, and patch JSON and JSON-like structures in Python.")
2506 (license license:expat)))
2507
2508 (define-public python-jsonschema
2509 (package
2510 (name "python-jsonschema")
2511 (version "3.2.0")
2512 (source (origin
2513 (method url-fetch)
2514 (uri (pypi-uri "jsonschema" version))
2515 (sha256
2516 (base32
2517 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2518 (build-system python-build-system)
2519 (arguments
2520 '(#:phases
2521 (modify-phases %standard-phases
2522 (replace 'check
2523 (lambda* (#:key inputs outputs #:allow-other-keys)
2524 (add-installed-pythonpath inputs outputs)
2525 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2526 (invoke "trial" "jsonschema"))))))
2527 (native-inputs
2528 `(("python-setuptools_scm" ,python-setuptools-scm)
2529 ("python-twisted" ,python-twisted)))
2530 (propagated-inputs
2531 `(("python-attrs" ,python-attrs)
2532 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2533 ("python-pyrsistent" ,python-pyrsistent)
2534 ("python-six" ,python-six)))
2535 (home-page "https://github.com/Julian/jsonschema")
2536 (synopsis "Implementation of JSON Schema for Python")
2537 (description
2538 "Jsonschema is an implementation of JSON Schema for Python.")
2539 (license license:expat)
2540 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2541
2542 (define-public python2-jsonschema
2543 (let ((jsonschema (package-with-python2
2544 (strip-python2-variant python-jsonschema))))
2545 (package (inherit jsonschema)
2546 (propagated-inputs
2547 `(("python2-functools32" ,python2-functools32)
2548 ,@(package-propagated-inputs jsonschema))))))
2549
2550 (define-public python-schema
2551 (package
2552 (name "python-schema")
2553 (version "0.6.6")
2554 (source
2555 (origin
2556 (method url-fetch)
2557 (uri (pypi-uri "schema" version))
2558 (sha256
2559 (base32
2560 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2561 (build-system python-build-system)
2562 (native-inputs
2563 `(("python-pytest" ,python-pytest)))
2564 (home-page "https://github.com/keleshev/schema")
2565 (synopsis "Simple data validation library")
2566 (description
2567 "@code{python-schema} is a library for validating Python data
2568 structures, such as those obtained from config-files, forms, external
2569 services or command-line parsing, converted from JSON/YAML (or
2570 something else) to Python data-types.")
2571 (license license:psfl)))
2572
2573 (define-public python2-schema
2574 (package-with-python2 python-schema))
2575
2576 (define-public python-schema-0.5
2577 (package (inherit python-schema)
2578 (version "0.5.0")
2579 (source
2580 (origin
2581 (method url-fetch)
2582 (uri (pypi-uri "schema" version))
2583 (sha256
2584 (base32
2585 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2586
2587 (define-public python2-schema-0.5
2588 (package-with-python2 python-schema-0.5))
2589
2590 (define-public python-kitchen
2591 (package
2592 (name "python-kitchen")
2593 (version "1.2.5")
2594 (source
2595 (origin
2596 (method url-fetch)
2597 (uri (pypi-uri "kitchen" version))
2598 (sha256
2599 (base32
2600 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2601 (build-system python-build-system)
2602 (propagated-inputs
2603 `(("python-chardet" ,python-chardet)))
2604 (home-page "https://github.com/fedora-infra/kitchen")
2605 (synopsis "Python API for snippets")
2606 (description "@code{kitchen} module provides a python API for all sorts of
2607 little useful snippets of code that everybody ends up writing for their projects
2608 but never seem big enough to build an independent release. Use kitchen and stop
2609 cutting and pasting that code over and over.")
2610 (license (list license:lgpl2.1+
2611 ;; subprocess.py, test_subprocess.py,
2612 ;; kitchen/pycompat25/defaultdict.py:
2613 license:psfl))))
2614
2615 (define-public python2-kitchen
2616 (package-with-python2 python-kitchen))
2617
2618 (define-public python-unidecode
2619 (package
2620 (name "python-unidecode")
2621 (version "1.1.1")
2622 (source (origin
2623 (method url-fetch)
2624 (uri (pypi-uri "Unidecode" version))
2625 (sha256
2626 (base32
2627 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2628 (build-system python-build-system)
2629 (home-page "https://pypi.org/project/Unidecode/")
2630 (synopsis "ASCII transliterations of Unicode text")
2631 (description
2632 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2633 useful when integrating with legacy code that doesn't support Unicode, or for
2634 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2635 machine identifiers from human-readable Unicode strings that should still be
2636 somewhat intelligible.")
2637 (license license:gpl2+)))
2638
2639 (define-public python2-unidecode
2640 (package-with-python2 python-unidecode))
2641
2642 (define-public python-text-unidecode
2643 (package
2644 (name "python-text-unidecode")
2645 (version "1.3")
2646 (source (origin
2647 (method url-fetch)
2648 (uri (pypi-uri "text-unidecode" version))
2649 (sha256
2650 (base32
2651 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2652 (build-system python-build-system)
2653 (arguments
2654 '(#:phases (modify-phases %standard-phases
2655 (replace 'check
2656 (lambda _
2657 (setenv "PYTHONPATH"
2658 (string-append "./build/lib:"
2659 (getenv "PYTHONPATH")))
2660 (invoke "pytest" "-vv"))))))
2661 (native-inputs
2662 `(("python-pytest" ,python-pytest)))
2663 (home-page "https://github.com/kmike/text-unidecode/")
2664 (synopsis "Decode Unicode data")
2665 (description
2666 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2667 Perl library. It can create ASCII representations of Unicode data. In general
2668 users should prefer the @code{python-unidecode} package which offers better
2669 memory usage and transliteration quality.")
2670 ;; The user can choose either license.
2671 (license (list license:clarified-artistic license:gpl2+))))
2672
2673 (define-public python2-text-unidecode
2674 (package-with-python2 python-text-unidecode))
2675
2676 (define-public python-pyjwt
2677 (package
2678 (name "python-pyjwt")
2679 (version "1.7.1")
2680 (source
2681 (origin
2682 (method url-fetch)
2683 (uri (pypi-uri "PyJWT" version))
2684 (sha256
2685 (base32
2686 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2687 (modules '((guix build utils)))
2688 (snippet
2689 '(begin
2690 (for-each delete-file-recursively
2691 (find-files "." "\\.pyc$"))
2692 #t))))
2693 (build-system python-build-system)
2694 (arguments
2695 '(#:phases (modify-phases %standard-phases
2696 (replace 'check
2697 (lambda _
2698 ;; Mimic upstream commit 3a20892442b34c7 to get
2699 ;; rid of dependency on pytest-runner < 5.0.
2700 ;; Remove substitution for PyJWT > 1.7.1.
2701 (substitute* "setup.py"
2702 ((".*pytest-runner.*")
2703 ""))
2704 (invoke "pytest" "-vv"))))))
2705 (native-inputs
2706 `(("python-pytest" ,python-pytest)
2707 ("python-pytest-cov" ,python-pytest-cov)))
2708 (home-page "https://github.com/progrium/pyjwt")
2709 (synopsis "JSON Web Token implementation in Python")
2710 (description
2711 "PyJWT is a JSON Web Token implementation written in Python.")
2712 (license license:expat)))
2713
2714 (define-public python2-pyjwt
2715 (package-with-python2 python-pyjwt))
2716
2717 (define-public python-pykka
2718 (package
2719 (name "python-pykka")
2720 (version "1.2.1")
2721 (source
2722 (origin
2723 (method url-fetch)
2724 (uri (pypi-uri "Pykka" version))
2725 (sha256
2726 (base32
2727 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2728 (build-system python-build-system)
2729 (native-inputs
2730 `(("python-mock" ,python-mock)
2731 ("python-nose" ,python-nose)
2732 ("python-gevent" ,python-gevent)
2733 ("python-eventlet" ,python-eventlet)))
2734 (home-page "https://www.pykka.org/")
2735 (synopsis "Pykka is a Python implementation of the actor model")
2736 (description
2737 "Pykka is a Python implementation of the actor model.
2738 The actor model introduces some simple rules to control the sharing
2739 of state and cooperation between execution units, which makes it
2740 easier to build concurrent applications.")
2741 (license license:asl2.0)))
2742
2743 (define-public python2-pykka
2744 (package-with-python2 python-pykka))
2745
2746 (define-public python-pymsgbox
2747 (package
2748 (name "python-pymsgbox")
2749 (version "1.0.6")
2750 (source
2751 (origin
2752 (method git-fetch)
2753 (uri (git-reference
2754 ;; LICENSE.txt is not present on pypi
2755 (url "https://github.com/asweigart/PyMsgBox")
2756 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2757 (file-name (git-file-name name version))
2758 (sha256
2759 (base32
2760 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2761 (arguments
2762 ;; Circular dependency to run tests:
2763 ;; Tests need pyautogui, which depends on pymsgbox.
2764 '(#:tests? #f))
2765 (build-system python-build-system)
2766 (home-page "https://github.com/asweigart/PyMsgBox")
2767 (synopsis "Python module for JavaScript-like message boxes")
2768 (description
2769 "PyMsgBox is a simple, cross-platform, pure Python module for
2770 JavaScript-like message boxes. Types of dialog boxes include:
2771 @enumerate
2772 @item alert
2773 @item confirm
2774 @item prompt
2775 @item password
2776 @end enumerate
2777 ")
2778 (license license:bsd-3)))
2779
2780 (define-public python-pympler
2781 (package
2782 (name "python-pympler")
2783 (home-page "https://pythonhosted.org/Pympler/")
2784 (version "0.8")
2785 (source (origin
2786 (method url-fetch)
2787 (uri (pypi-uri "Pympler" version))
2788 (sha256
2789 (base32
2790 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2791 (build-system python-build-system)
2792 (arguments
2793 `(#:phases (modify-phases %standard-phases
2794 (delete 'check)
2795 (add-after 'install 'check
2796 (lambda* (#:key inputs outputs #:allow-other-keys)
2797 (add-installed-pythonpath inputs outputs)
2798 (invoke "python" "setup.py" "test"))))))
2799 (synopsis "Measure, monitor and analyze memory behavior")
2800 (description
2801 "Pympler is a development tool to measure, monitor and analyze
2802 the memory behavior of Python objects in a running Python application.
2803
2804 By pympling a Python application, detailed insight in the size and the
2805 lifetime of Python objects can be obtained. Undesirable or unexpected
2806 runtime behavior like memory bloat and other @samp{pymples} can easily
2807 be identified.
2808
2809 A web profiling frontend exposes process statistics, garbage
2810 visualisation and class tracker statistics.")
2811 (license license:asl2.0)))
2812
2813 (define-public python2-pympler
2814 (package-with-python2 python-pympler))
2815
2816 (define-public python-itsdangerous
2817 (package
2818 (name "python-itsdangerous")
2819 (version "1.1.0")
2820 (source
2821 (origin
2822 (method url-fetch)
2823 (uri (pypi-uri "itsdangerous" version))
2824 (sha256
2825 (base32
2826 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2827 (build-system python-build-system)
2828 (home-page "https://palletsprojects.com/p/itsdangerous/")
2829 (synopsis "Python library for passing data to/from untrusted environments")
2830 (description
2831 "Itsdangerous provides various helpers to pass trusted data to untrusted
2832 environments and back.")
2833 (license license:bsd-3)))
2834
2835 (define-public python2-itsdangerous
2836 (package-with-python2 python-itsdangerous))
2837
2838 (define-public python-pyyaml
2839 (package
2840 (name "python-pyyaml")
2841 (version "5.3.1")
2842 (source
2843 (origin
2844 (method url-fetch)
2845 (uri (pypi-uri "PyYAML" version))
2846 (sha256
2847 (base32
2848 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2849 (build-system python-build-system)
2850 (inputs
2851 `(("libyaml" ,libyaml)))
2852 (home-page "https://pyyaml.org")
2853 (synopsis "YAML parser and emitter for Python")
2854 (description
2855 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2856 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2857 API, and sensible error messages. PyYAML supports standard YAML tags and
2858 provides Python-specific tags that represent an arbitrary Python object.")
2859 (license license:expat)))
2860
2861 (define-public python2-pyyaml
2862 (package-with-python2 python-pyyaml))
2863
2864 (define-public python-vine
2865 (package
2866 (name "python-vine")
2867 (version "1.1.4")
2868 (source
2869 (origin
2870 (method url-fetch)
2871 (uri (pypi-uri "vine" version))
2872 (sha256
2873 (base32
2874 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2875 (build-system python-build-system)
2876 (native-inputs
2877 `(("python-pytest" ,python-pytest)
2878 ("python-case" ,python-case)))
2879 (home-page "https://github.com/celery/vine")
2880 (synopsis "Promises for Python")
2881 (description
2882 "@code{vine} provides a special implementation of promises in that it can
2883 be used both for \"promise of a value\" and lazy evaluation. The biggest
2884 upside for this is that everything in a promise can also be a promise,
2885 e.g. filters, callbacks and errbacks can all be promises.")
2886 (license license:bsd-3)))
2887
2888 (define-public python-virtualenv
2889 (package
2890 (name "python-virtualenv")
2891 (version "20.0.10")
2892 (source
2893 (origin
2894 (method url-fetch)
2895 (uri (pypi-uri "virtualenv" version))
2896 (sha256
2897 (base32
2898 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2899 (build-system python-build-system)
2900 (native-inputs
2901 `(("python-mock" ,python-mock)
2902 ("python-pytest" ,python-pytest)
2903 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2904 ;; be an input at all". However, removing the input makes the build error:
2905 ;; File "setup.py", line 4, in <module>
2906 ;; raise RuntimeError("setuptools >= 41 required to build")
2907 ("python-setuptools" ,python-setuptools)
2908 ("python-setuptools-scm" ,python-setuptools-scm)))
2909 (propagated-inputs
2910 `(("python-appdirs" ,python-appdirs)
2911 ("python-distlib" ,python-distlib)
2912 ("python-filelock" ,python-filelock)
2913 ("python-six" ,python-six)
2914 ("python-importlib-metadata" ,python-importlib-metadata)))
2915 (home-page "https://virtualenv.pypa.io/")
2916 (synopsis "Virtual Python environment builder")
2917 (description
2918 "Virtualenv is a tool to create isolated Python environments.")
2919 (properties `((python2-variant . ,(delay python2-virtualenv))))
2920 (license license:expat)))
2921
2922 (define-public python2-virtualenv
2923 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2924 (package
2925 (inherit base)
2926 (arguments
2927 `(#:python ,python-2
2928 #:phases
2929 (modify-phases %standard-phases
2930 (add-after 'set-paths 'adjust-PYTHONPATH
2931 (lambda* (#:key inputs #:allow-other-keys)
2932 (let* ((python (assoc-ref inputs "python"))
2933 (python-sitedir (string-append python "/lib/python2.7"
2934 "/site-packages")))
2935 ;; XXX: 'python2' always comes first on PYTHONPATH
2936 ;; and shadows the 'setuptools' input. Move python2
2937 ;; last: this should be fixed in python-build-system
2938 ;; in a future rebuild cycle.
2939 (setenv "PYTHONPATH"
2940 (string-append (string-join (delete python-sitedir
2941 (string-split
2942 (getenv "PYTHONPATH")
2943 #\:))
2944 ":")
2945 ":" python-sitedir))
2946 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2947 (getenv "PYTHONPATH"))
2948 #t))))))
2949 (propagated-inputs
2950 `(("python-contextlib2" ,python2-contextlib2)
2951 ,@(package-propagated-inputs base))))))
2952
2953 (define-public python-markupsafe
2954 (package
2955 (name "python-markupsafe")
2956 (version "1.1.1")
2957 (source
2958 (origin
2959 (method url-fetch)
2960 (uri (pypi-uri "MarkupSafe" version))
2961 (sha256
2962 (base32
2963 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2964 (build-system python-build-system)
2965 (arguments
2966 `(#:modules ((ice-9 ftw)
2967 (srfi srfi-1)
2968 (srfi srfi-26)
2969 (guix build utils)
2970 (guix build python-build-system))
2971 #:phases (modify-phases %standard-phases
2972 (replace 'check
2973 (lambda _
2974 (let ((cwd (getcwd))
2975 (libdir (find (cut string-prefix? "lib." <>)
2976 (scandir "build"))))
2977 (setenv "PYTHONPATH"
2978 (string-append cwd "/build/" libdir ":"
2979 (getenv "PYTHONPATH")))
2980 (invoke "pytest" "-vv")))))))
2981 (native-inputs
2982 `(("python-pytest" ,python-pytest)))
2983 (home-page "https://github.com/mitsuhiko/markupsafe")
2984 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
2985 (description
2986 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
2987 for Python.")
2988 (license license:bsd-3)))
2989
2990 (define-public python2-markupsafe
2991 (package-with-python2 python-markupsafe))
2992
2993 (define-public python-jinja2
2994 (package
2995 (name "python-jinja2")
2996 (version "2.11.1")
2997 (source
2998 (origin
2999 (method url-fetch)
3000 (uri (pypi-uri "Jinja2" version))
3001 (sha256
3002 (base32
3003 "0l72c11n959yzb8d3ankckb6yhjhm6x729zm7rkpk040qzxpy64k"))))
3004 (build-system python-build-system)
3005 (arguments
3006 '(#:phases (modify-phases %standard-phases
3007 (replace 'check
3008 (lambda* (#:key tests? #:allow-other-keys)
3009 (if tests?
3010 (begin
3011 (setenv "PYTHONPATH"
3012 (string-append "./build/lib:"
3013 (getenv "PYTHONPATH")))
3014 (invoke "pytest" "-vv"))
3015 (format #t "test suite not run~%"))
3016 #t)))))
3017 (native-inputs
3018 `(("python-pytest" ,python-pytest)))
3019 (propagated-inputs
3020 `(("python-markupsafe" ,python-markupsafe)))
3021 (home-page "http://jinja.pocoo.org/")
3022 (synopsis "Python template engine")
3023 (description
3024 "Jinja2 is a small but fast and easy to use stand-alone template engine
3025 written in pure Python.")
3026 (license license:bsd-3)))
3027
3028 (define-public python2-jinja2
3029 (package-with-python2 python-jinja2))
3030
3031 (define-public python-jinja2-time
3032 (package
3033 (name "python-jinja2-time")
3034 (version "0.2.0")
3035 (source
3036 (origin
3037 (method url-fetch)
3038 (uri (pypi-uri "jinja2-time" version))
3039 (sha256
3040 (base32
3041 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3042 (build-system python-build-system)
3043 (propagated-inputs
3044 `(("python-arrow" ,python-arrow)
3045 ("python-jinja2" ,python-jinja2)))
3046 (home-page
3047 "https://github.com/hackebrot/jinja2-time")
3048 (synopsis "Jinja2 Extension for Dates and Times")
3049 (description
3050 "This package provides an extension for the template engine Jinja2. It
3051 adds a 'now' tag providing a convenient access to the arrow.now() API from
3052 templates. A format string can be provided to control the output.")
3053 (license license:expat)))
3054
3055 (define-public python-pystache
3056 (package
3057 (name "python-pystache")
3058 (version "0.5.4")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "pystache" version))
3062 (sha256
3063 (base32
3064 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3065 (build-system python-build-system)
3066 (arguments
3067 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3068 (home-page "http://defunkt.io/pystache/")
3069 (synopsis "Python logic-less template engine")
3070 (description
3071 "Pystache is a Python implementation of the framework agnostic,
3072 logic-free templating system Mustache.")
3073 (license license:expat)
3074 (properties `((python2-variant . ,(delay python2-pystache))))))
3075
3076 (define-public python2-pystache
3077 (package (inherit (package-with-python2
3078 (strip-python2-variant python-pystache)))
3079 (arguments
3080 `(#:python ,python-2
3081 #:phases
3082 (modify-phases %standard-phases
3083 (replace 'check
3084 (lambda _
3085 (invoke "python" "test_pystache.py"))))))))
3086
3087 (define-public python-joblib
3088 (package
3089 (name "python-joblib")
3090 (version "0.14.1")
3091 (source (origin
3092 (method url-fetch)
3093 (uri (pypi-uri "joblib" version))
3094 (sha256
3095 (base32
3096 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3097 (build-system python-build-system)
3098 (arguments
3099 `(#:phases
3100 (modify-phases %standard-phases
3101 (replace 'check
3102 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3103 (native-inputs
3104 `(("python-pytest" ,python-pytest)))
3105 (home-page "https://joblib.readthedocs.io/")
3106 (synopsis "Using Python functions as pipeline jobs")
3107 (description
3108 "Joblib is a set of tools to provide lightweight pipelining in Python.
3109 In particular, joblib offers: transparent disk-caching of the output values
3110 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3111 logging and tracing of the execution.")
3112 (license license:bsd-3)))
3113
3114 (define-public python2-joblib
3115 (package-with-python2 python-joblib))
3116
3117 (define-public python-daemon
3118 (package
3119 (name "python-daemon")
3120 (version "2.2.3")
3121 (source
3122 (origin
3123 (method url-fetch)
3124 (uri (pypi-uri "python-daemon" version))
3125 (sha256
3126 (base32
3127 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3128 (build-system python-build-system)
3129 (arguments
3130 `(#:phases
3131 (modify-phases %standard-phases
3132 (add-before 'check 'disable-tests
3133 (lambda _
3134 ;; FIXME: Determine why test fails
3135 (substitute* "test/test_daemon.py"
3136 (("test_detaches_process_context")
3137 "skip_test_detaches_process_context"))
3138 #t)))))
3139 (propagated-inputs
3140 `(("python-lockfile" ,python-lockfile)))
3141 (native-inputs
3142 `(("python-unittest2" ,python-unittest2)
3143 ("python-testtools" ,python-testtools)
3144 ("python-testscenarios" ,python-testscenarios)
3145 ("python-mock" ,python-mock)
3146 ("python-docutils" ,python-docutils)))
3147 (home-page "https://pagure.io/python-daemon/")
3148 (synopsis "Python library for making a Unix daemon process")
3149 (description "Python-daemon is a library that assists a Python program to
3150 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3151
3152 This library provides a @code{DaemonContext} class that manages the following
3153 important tasks for becoming a daemon process:
3154 @enumerate
3155 @item Detach the process into its own process group.
3156 @item Set process environment appropriate for running inside a chroot.
3157 @item Renounce suid and sgid privileges.
3158 @item Close all open file descriptors.
3159 @item Change the working directory, uid, gid, and umask.
3160 @item Set appropriate signal handlers.
3161 @item Open new file descriptors for stdin, stdout, and stderr.
3162 @item Manage a specified PID lock file.
3163 @item Register cleanup functions for at-exit processing.
3164 @end enumerate")
3165 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3166 (license (list license:asl2.0 license:gpl3+))))
3167
3168 (define-public python-anytree
3169 (package
3170 (name "python-anytree")
3171 (version "2.8.0")
3172 (source (origin
3173 (method url-fetch)
3174 (uri (pypi-uri "anytree" version))
3175 (sha256
3176 (base32
3177 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3178 (build-system python-build-system)
3179 (propagated-inputs
3180 `(("python-six" ,python-six)))
3181 (native-inputs
3182 `(;; For tests.
3183 ("graphviz" ,graphviz) ;for 'dot'
3184 ("python-nose" ,python-nose)))
3185 (home-page "https://github.com/c0fec0de/anytree")
3186 (synopsis "Lightweight tree data library")
3187 (description
3188 "@code{anytree} is a simple, lightweight, and extensible tree data
3189 structure for Python.")
3190 (license license:asl2.0)))
3191
3192 (define-public python-docutils
3193 (package
3194 (name "python-docutils")
3195 (version "0.16")
3196 (source
3197 (origin
3198 (method url-fetch)
3199 (uri (pypi-uri "docutils" version))
3200 (sha256
3201 (base32
3202 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3203 (build-system python-build-system)
3204 (arguments
3205 '(#:phases (modify-phases %standard-phases
3206 (replace 'check
3207 (lambda* (#:key tests? #:allow-other-keys)
3208 (if tests?
3209 (invoke "python" "test/alltests.py")
3210 (format #t "test suite not run~%"))
3211 #t)))))
3212 (home-page "http://docutils.sourceforge.net/")
3213 (synopsis "Python Documentation Utilities")
3214 (description
3215 "Docutils is a modular system for processing documentation into useful
3216 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3217 reStructuredText.")
3218 ;; Most of the source code is public domain, but some source files are
3219 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3220 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3221
3222 (define-public python2-docutils
3223 (package-with-python2 python-docutils))
3224
3225 ;; python2-sphinx fails its test suite with newer versions.
3226 (define-public python2-docutils-0.14
3227 (package
3228 (inherit python2-docutils)
3229 (version "0.14")
3230 (source (origin
3231 (method url-fetch)
3232 (uri (pypi-uri "docutils" version))
3233 (sha256
3234 (base32
3235 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3236
3237 (define-public python-restructuredtext-lint
3238 (package
3239 (name "python-restructuredtext-lint")
3240 (version "1.3.0")
3241 (source
3242 (origin
3243 (method url-fetch)
3244 (uri (pypi-uri "restructuredtext-lint" version))
3245 (sha256
3246 (base32
3247 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3248 (build-system python-build-system)
3249 (arguments
3250 `(#:phases
3251 (modify-phases %standard-phases
3252 (delete 'check)
3253 (add-after 'install 'check
3254 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3255 (when tests?
3256 (add-installed-pythonpath inputs outputs)
3257 (invoke "nosetests" "-v"))
3258 #t)))))
3259 (propagated-inputs
3260 `(("python-docutils" ,python-docutils)))
3261 (native-inputs
3262 `(("python-nose" ,python-nose)))
3263 (home-page "https://github.com/twolfson/restructuredtext-lint")
3264 (synopsis "reStructuredText linter")
3265 (description "This package provides a linter for the reStructuredText
3266 format.")
3267 (license license:unlicense)))
3268
3269 (define-public python-doc8
3270 (package
3271 (name "python-doc8")
3272 (version "0.8.0")
3273 (source
3274 (origin
3275 (method url-fetch)
3276 (uri (pypi-uri "doc8" version))
3277 (sha256
3278 (base32
3279 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3280 (build-system python-build-system)
3281 (arguments
3282 `(#:phases
3283 (modify-phases %standard-phases
3284 (delete 'check)
3285 (add-after 'install 'check
3286 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3287 (when tests?
3288 (add-installed-pythonpath inputs outputs)
3289 (invoke "pytest" "-v"))
3290 #t)))))
3291 (propagated-inputs
3292 `(("python-chardet" ,python-chardet)
3293 ("python-docutils" ,python-docutils)
3294 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3295 ("python-six" ,python-six)
3296 ("python-stevedore" ,python-stevedore)))
3297 (native-inputs
3298 `(("python-testtools" ,python-testtools)
3299 ("python-pytest" ,python-pytest)))
3300 (home-page "https://launchpad.net/doc8")
3301 (synopsis
3302 "Style checker for Sphinx (or other) RST documentation")
3303 (description
3304 "Doc8 is an opinionated style checker for reStructured Text and plain
3305 text styles of documentation.")
3306 (license license:asl2.0)))
3307
3308 (define-public python-pygments
3309 (package
3310 (name "python-pygments")
3311 (version "2.5.2")
3312 (source
3313 (origin
3314 (method url-fetch)
3315 (uri (pypi-uri "Pygments" version))
3316 (sha256
3317 (base32
3318 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3319 (build-system python-build-system)
3320 (arguments
3321 ;; FIXME: Tests require sphinx, which depends on this.
3322 '(#:tests? #f))
3323 (home-page "https://pygments.org/")
3324 (synopsis "Syntax highlighting")
3325 (description
3326 "Pygments is a syntax highlighting package written in Python.")
3327 (license license:bsd-2)))
3328
3329 (define-public python2-pygments
3330 (package-with-python2 python-pygments))
3331
3332 (define-public python-bumpversion
3333 (package
3334 (name "python-bumpversion")
3335 (version "0.5.3")
3336 (source
3337 (origin
3338 (method url-fetch)
3339 (uri (pypi-uri "bumpversion" version))
3340 (sha256
3341 (base32
3342 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3343 (build-system python-build-system)
3344 (home-page "https://github.com/peritus/bumpversion")
3345 (synopsis "Tool to bump software version")
3346 (description "This tool provides a command-line interface (CLI) to bump a
3347 software version simply.")
3348 (license license:expat)))
3349
3350 (define-public python-deprecated
3351 (package
3352 (name "python-deprecated")
3353 (version "1.2.5")
3354 (source
3355 (origin
3356 (method git-fetch)
3357 (uri (git-reference
3358 (url "https://github.com/tantale/deprecated.git")
3359 (commit (string-append "v" version))))
3360 (file-name (git-file-name name version))
3361 (sha256
3362 (base32
3363 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3364 (build-system python-build-system)
3365 (arguments
3366 `(#:phases (modify-phases %standard-phases
3367 (replace 'check
3368 (lambda _
3369 (invoke "pytest"))))))
3370 (propagated-inputs
3371 `(("python-wrapt" ,python-wrapt)))
3372 (native-inputs
3373 `(("python-bumpversion" ,python-bumpversion)
3374 ("python-pytest" ,python-pytest)
3375 ("python-pytest-cov" ,python-pytest-cov)
3376 ("python-sphinx" ,python-sphinx)
3377 ("python-tox" ,python-tox)))
3378 (home-page "https://github.com/tantale/deprecated")
3379 (synopsis "Python decorator to deprecate classes, functions or methods")
3380 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3381 to deprecate classes, functions or methods.")
3382 (license license:expat)))
3383
3384 (define-public python-pygithub
3385 (package
3386 (name "python-pygithub")
3387 (version "1.43.8")
3388 (source
3389 ;; We fetch from the Git repo because there are no tests in the PyPI
3390 ;; archive.
3391 (origin
3392 (method git-fetch)
3393 (uri (git-reference
3394 (url "https://github.com/PyGithub/PyGithub.git")
3395 (commit (string-append "v" version))))
3396 (file-name (git-file-name name version))
3397 (sha256
3398 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3399 (build-system python-build-system)
3400 (arguments
3401 `(#:phases (modify-phases %standard-phases
3402 ;; Some tests rely on the network.
3403 (add-after 'unpack 'disable-failing-tests
3404 (lambda _
3405 (substitute* "tests/Issue142.py"
3406 (("testDecodeJson") "disabled_testDecodeJson"))
3407 #t))
3408 (add-before 'check 'prepare-for-tests
3409 (lambda _
3410 (for-each (lambda (f)
3411 (chmod f #o666))
3412 (find-files "./tests"))
3413 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3414 (setenv "PYTHONPATH"
3415 (string-append "./tests:" (getenv "PYTHONPATH")))
3416 #t)))))
3417 (propagated-inputs
3418 `(("python-deprecated" ,python-deprecated)
3419 ("python-pyjwt" ,python-pyjwt)
3420 ("python-requests" ,python-requests)))
3421 (native-inputs `(("python-httpretty" ,python-httpretty)))
3422 (home-page "https://pygithub.readthedocs.io/en/latest/")
3423 (synopsis "Python library for the GitHub API")
3424 (description "This library allows managing GitHub resources such as
3425 repositories, user profiles, and organizations in your Python applications,
3426 using version 3 of the GitHub application programming interface (API).")
3427 (license license:lgpl3+)))
3428
3429 (define-public python-rellu
3430 (package
3431 (name "python-rellu")
3432 (version "0.7")
3433 (source
3434 (origin
3435 (method url-fetch)
3436 (uri (pypi-uri "rellu" version))
3437 (sha256
3438 (base32
3439 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3440 (build-system python-build-system)
3441 (propagated-inputs
3442 `(("python-invoke" ,python-invoke)
3443 ("python-pygithub" ,python-pygithub)))
3444 (home-page "https://github.com/robotframework/rellu")
3445 (synopsis "Utilities to create PyPI releases")
3446 (description "This collection of utilities contains tooling and templates
3447 to assist in creating releases on GitHub and publishing them on PyPI. It is
3448 designed to be used by Robot Framework and tools and libraries in its
3449 ecosystem, but can naturally be used also by other projects.")
3450 (license license:asl2.0)))
3451
3452 (define-public python-robotframework
3453 (package
3454 (name "python-robotframework")
3455 (version "3.1.2")
3456 ;; There are no tests in the PyPI archive.
3457 (source
3458 (origin
3459 (method git-fetch)
3460 (uri (git-reference
3461 (url "https://github.com/robotframework/robotframework.git")
3462 (commit (string-append "v" version))))
3463 (file-name (git-file-name name version))
3464 (sha256
3465 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3466 (patches (search-patches
3467 "python-robotframework-honor-source-date-epoch.patch"))))
3468 (build-system python-build-system)
3469 (arguments
3470 `(#:phases (modify-phases %standard-phases
3471 (add-before 'build 'build-and-install-doc
3472 (lambda* (#:key outputs #:allow-other-keys)
3473 (let* ((doc-output (assoc-ref outputs "doc"))
3474 (doc (string-append doc-output "/share/"
3475 ,name "-" ,version "/")))
3476 (invoke "invoke" "library-docs" "all")
3477 (mkdir-p doc)
3478 (copy-recursively "doc/libraries"
3479 (string-append doc "/libraries"))
3480 #t)))
3481 (replace 'check
3482 (lambda _
3483 (invoke "python" "utest/run.py"))))))
3484 (native-inputs
3485 `(("python-invoke" ,python-invoke)
3486 ("python-rellu" ,python-rellu)
3487 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3488 (outputs '("out" "doc"))
3489 (home-page "https://robotframework.org")
3490 (synopsis "Generic automation framework")
3491 (description "Robot Framework is a generic automation framework for
3492 acceptance testing, acceptance test driven development (ATDD), and robotic
3493 process automation (RPA).")
3494 (license license:asl2.0)))
3495
3496 (define-public python-robotframework-lint
3497 ;; There is no properly tagged release; the commit below seems to correspond
3498 ;; to the 0.9 stable release available from PyPI. The tests are not
3499 ;; included in the PyPI archive, so we fetch the sources from the upstream
3500 ;; Git repo.
3501 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3502 (revision "1"))
3503 (package
3504 (name "python-robotframework-lint")
3505 (version (git-version "0.9.0" revision commit))
3506 (source
3507 (origin
3508 (method git-fetch)
3509 (uri (git-reference
3510 (url "https://github.com/boakley/robotframework-lint.git")
3511 (commit commit)))
3512 (file-name (git-file-name name version))
3513 (sha256
3514 (base32
3515 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3516 (build-system python-build-system)
3517 (arguments
3518 `(#:phases
3519 (modify-phases %standard-phases
3520 (replace 'check
3521 (lambda _
3522 (invoke "python" "-m" "robot" "-A"
3523 "tests/conf/default.args" "tests"))))))
3524 (propagated-inputs
3525 `(("python-robotframework" ,python-robotframework)))
3526 (home-page "https://github.com/boakley/robotframework-lint/")
3527 (synopsis "Static analysis tool (linter) for Robot Framework")
3528 (description "This package provides the @code{rflint} command-line
3529 utility, a static analysis tool (linter) for Robot Framework source files.")
3530 (license license:asl2.0))))
3531
3532 (define-public python-robotframework-sshlibrary
3533 (package
3534 (name "python-robotframework-sshlibrary")
3535 (version "3.3.0")
3536 ;; There are no tests in the PyPI archive.
3537 (source
3538 (origin
3539 (method git-fetch)
3540 (uri (git-reference
3541 (url "https://github.com/robotframework/SSHLibrary.git")
3542 (commit (string-append "v" version))))
3543 (file-name (git-file-name name version))
3544 (sha256
3545 (base32
3546 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3547 (build-system python-build-system)
3548 (arguments
3549 `(#:phases
3550 (modify-phases %standard-phases
3551 (add-before 'build 'build-and-install-doc
3552 (lambda* (#:key outputs #:allow-other-keys)
3553 (let* ((doc-output (assoc-ref outputs "doc"))
3554 (doc (string-append doc-output "/share/"
3555 ,name "-" ,version "/")))
3556 (invoke "chmod" "-R" "+w" "docs")
3557 (invoke "invoke" "kw-docs" "project-docs")
3558 (mkdir-p doc)
3559 (for-each delete-file (find-files "docs" "\\.rst"))
3560 (copy-recursively "docs" doc)
3561 #t)))
3562 (replace 'check
3563 (lambda _
3564 ;; Some tests require an SSH server; we remove them.
3565 (delete-file "utest/test_client_api.py")
3566 (delete-file "utest/test_scp.py")
3567 (invoke "python" "utest/run.py"))))))
3568 (propagated-inputs
3569 `(("python-robotframework" ,python-robotframework)
3570 ("python-paramiko" ,python-paramiko)
3571 ("python-scp" ,python-scp)))
3572 (native-inputs
3573 `(("openssh" ,openssh)
3574 ("which" ,which)
3575 ;; To generate the documentation
3576 ("python-docutils" ,python-docutils)
3577 ("python-invoke" ,python-invoke)
3578 ("python-pygments" ,python-pygments)
3579 ("python-rellu" ,python-rellu)))
3580 (outputs '("out" "doc"))
3581 (home-page "https://github.com/robotframework/SSHLibrary")
3582 (synopsis "Robot Framework library for SSH and SFTP")
3583 (description "SSHLibrary is a Robot Framework library providing support
3584 for SSH and SFTP. It has the following main usages:
3585 @itemize @bullet
3586 @item Executing commands on the remote machine, either blocking or non-blocking.
3587 @item Writing and reading in an interactive shell.
3588 @item Transferring files and directories over SFTP.
3589 @item Ensuring that files and directories exist on the remote machine.
3590 @end itemize")
3591 (license license:asl2.0)))
3592
3593 (define-public python-rstr
3594 (package
3595 (name "python-rstr")
3596 (version "2.2.6")
3597 (source
3598 (origin
3599 (method url-fetch)
3600 (uri (pypi-uri "rstr" version))
3601 (sha256
3602 (base32
3603 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3604 (build-system python-build-system)
3605 (home-page
3606 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3607 (synopsis "Generate random strings in Python")
3608 (description "This package provides a python module for generating
3609 random strings of various types. It could be useful for fuzz testing,
3610 generating dummy data, or other applications. It has no dependencies
3611 outside the standard library.")
3612 (license license:bsd-3)))
3613
3614 (define-public python-scp
3615 (package
3616 (name "python-scp")
3617 (version "0.13.2")
3618 (source
3619 (origin
3620 (method url-fetch)
3621 (uri (pypi-uri "scp" version))
3622 (sha256
3623 (base32
3624 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3625 (build-system python-build-system)
3626 (arguments
3627 '(#:tests? #f)) ;tests require an SSH server
3628 (propagated-inputs
3629 `(("python-paramiko" ,python-paramiko)))
3630 (home-page "https://github.com/jbardin/scp.py")
3631 (synopsis "SCP protocol module for Python and Paramiko")
3632 (description "The scp module extends the Paramiko library to send and
3633 receive files via the SCP1 protocol, as implemented by the OpenSSH
3634 @command{scp} program.")
3635 (license license:gpl2+)))
3636
3637 (define-public python-rst.linker
3638 (package
3639 (name "python-rst.linker")
3640 (version "1.11")
3641 (source
3642 (origin
3643 (method url-fetch)
3644 (uri (pypi-uri "rst.linker" version))
3645 (sha256
3646 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3647 (build-system python-build-system)
3648 (propagated-inputs
3649 `(("python-dateutil" ,python-dateutil)
3650 ("python-six" ,python-six)))
3651 (native-inputs
3652 `(("python-setuptools-scm" ,python-setuptools-scm)))
3653 ;; Test would require path.py, which would introduce a cyclic dependence.
3654 (arguments `(#:tests? #f))
3655 ;; Note: As of version 1.7 the documentation is not worth building.
3656 (home-page "https://github.com/jaraco/rst.linker")
3657 (synopsis "Sphinx plugin to add links and timestamps")
3658 (description "rst.linker automatically replaces text by a
3659 reStructuredText external reference or timestamps. It's primary purpose is to
3660 augment the changelog, but it can be used for other documents, too.")
3661 (license license:expat)))
3662
3663 (define-public python2-rst.linker
3664 (package-with-python2 python-rst.linker))
3665
3666 (define-public python-feedgenerator
3667 (package
3668 (name "python-feedgenerator")
3669 (version "1.9")
3670 (source
3671 (origin
3672 (method url-fetch)
3673 (uri (pypi-uri "feedgenerator" version))
3674 (sha256
3675 (base32
3676 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3677 (modules '((guix build utils)))
3678 (snippet
3679 '(begin
3680 ;; Remove pre-compiled .pyc files from source.
3681 (for-each delete-file-recursively
3682 (find-files "." "__pycache__" #:directories? #t))
3683 (for-each delete-file (find-files "." "\\.pyc$"))
3684 #t))))
3685 (build-system python-build-system)
3686 (propagated-inputs
3687 `(("python-pytz" ,python-pytz)
3688 ("python-six" ,python-six)))
3689 (home-page "https://github.com/getpelican/feedgenerator")
3690 (synopsis
3691 "Standalone version of Django's Atom/RSS feed generator")
3692 (description
3693 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3694 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3695 (license license:bsd-3)))
3696
3697 (define-public python2-feedgenerator
3698 (package-with-python2 python-feedgenerator))
3699
3700 (define-public python-toml
3701 (package
3702 (name "python-toml")
3703 (version "0.9.4")
3704 (source
3705 (origin
3706 (method url-fetch)
3707 (uri (pypi-uri "toml" version))
3708 (sha256
3709 (base32
3710 "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf"))))
3711 (build-system python-build-system)
3712 (arguments
3713 `(#:tests? #f)) ;no tests suite in release
3714 (home-page "https://github.com/uiri/toml")
3715 (synopsis "Library for TOML")
3716 (description
3717 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3718 Language (TOML) configuration files.")
3719 (license license:expat)))
3720
3721 (define-public python-jsonrpc-server
3722 (package
3723 (name "python-jsonrpc-server")
3724 (version "0.3.4")
3725 (source
3726 (origin
3727 (method url-fetch)
3728 (uri (pypi-uri "python-jsonrpc-server" version))
3729 (sha256
3730 (base32
3731 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3732 (build-system python-build-system)
3733 (propagated-inputs
3734 `(("python-mock" ,python-mock)
3735 ("python-pytest" ,python-pytest)
3736 ("python-ujson" ,python-ujson-1)))
3737 (home-page
3738 "https://github.com/palantir/python-jsonrpc-server")
3739 (synopsis "JSON RPC 2.0 server library")
3740 (description
3741 "This package provides a JSON RPC 2.0 server library for Python.")
3742 (license license:expat)))
3743
3744 (define-public python-pydocstyle
3745 (package
3746 (name "python-pydocstyle")
3747 (version "3.0.0")
3748 (source
3749 (origin
3750 (method url-fetch)
3751 (uri (pypi-uri "pydocstyle" version))
3752 (sha256
3753 (base32
3754 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3755 (build-system python-build-system)
3756 (propagated-inputs
3757 `(("python-six" ,python-six)
3758 ("python-snowballstemmer" ,python-snowballstemmer)))
3759 (home-page
3760 "https://github.com/PyCQA/pydocstyle/")
3761 (synopsis "Python docstring style checker")
3762 (description
3763 "This package provides a style checker for the Python Language
3764 Server (PLS).")
3765 (license license:expat)))
3766
3767 (define-public python-language-server
3768 (package
3769 (name "python-language-server")
3770 (version "0.32.0")
3771 (source
3772 (origin
3773 (method url-fetch)
3774 (uri (pypi-uri "python-language-server" version))
3775 (sha256
3776 (base32
3777 "0j5swacmjps9sas1gfwg0xi84rmjhfhz20cwg3k4058d20rs20ip"))))
3778 (build-system python-build-system)
3779 (propagated-inputs
3780 `(("python-pluggy" ,python-pluggy)
3781 ("python-jsonrpc-server" ,python-jsonrpc-server)
3782 ;; Note: Remove the special versions of Jedi and Parso when updating
3783 ;; this package.
3784 ("python-jedi" ,python-jedi)
3785 ("python-yapf" ,python-yapf)
3786 ("python-pyflakes" ,python-pyflakes)
3787 ("python-pydocstyle" ,python-pydocstyle)
3788 ("python-pycodestyle" ,python-pycodestyle)
3789 ("python-mccabe" ,python-mccabe)
3790 ("python-rope" ,python-rope)
3791 ("python-autopep8" ,python-autopep8)
3792 ("python-flake8" ,python-flake8)
3793 ("python-pylint" ,python-pylint)))
3794 (home-page "https://github.com/palantir/python-language-server")
3795 (synopsis "Python implementation of the Language Server Protocol")
3796 (description
3797 "The Python Language Server (pyls) is an implementation of the Python 3
3798 language specification for the Language Server Protocol (LSP). This tool is
3799 used in text editing environments to provide a complete and integrated
3800 feature-set for programming Python effectively.")
3801 (license license:expat)))
3802
3803 (define-public python-pathspec
3804 (package
3805 (name "python-pathspec")
3806 (version "0.7.0")
3807 (source
3808 (origin
3809 (method url-fetch)
3810 (uri (pypi-uri "pathspec" version))
3811 (sha256
3812 (base32
3813 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3814 (build-system python-build-system)
3815 (home-page "https://github.com/cpburnz/python-path-specification")
3816 (synopsis "Utility library for gitignore style pattern matching of file paths")
3817 (description
3818 "This package provides a utility library for gitignore style pattern
3819 matching of file paths.")
3820 (license license:mpl2.0)))
3821
3822 (define-public python-black
3823 (package
3824 (name "python-black")
3825 (version "19.10b0")
3826 (source
3827 (origin
3828 (method url-fetch)
3829 (uri (pypi-uri "black" version))
3830 (sha256
3831 (base32
3832 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3833 (build-system python-build-system)
3834 (arguments
3835 `(#:phases
3836 (modify-phases %standard-phases
3837 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3838 (lambda _
3839 (let ((python3 (which "python3")))
3840 (substitute* '("tests/data/fmtonoff.py"
3841 "tests/data/string_prefixes.py"
3842 "tests/data/function.py"
3843 "tests/data/python37.py")
3844 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3845 (string-append "#!" python3 (if (string? minor-version)
3846 minor-version
3847 "")))))
3848 #t))
3849 (add-after 'unpack 'disable-broken-tests
3850 (lambda _
3851 ;; These tests are supposed to be skipped when the blackd
3852 ;; dependencies are missing, but this doesn't quite work.
3853 (substitute* "tests/test_black.py"
3854 (("( *)class BlackDTestCase.*" match indent)
3855 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3856 indent "class BlackDTestCase(unittest.TestCase):\n"))
3857 (("web.Application") "False")
3858 (("@unittest_run_loop") ""))
3859
3860 ;; Patching the above file breaks the self test
3861 (substitute* "tests/test_black.py"
3862 (("( *)def test_self" match indent)
3863 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3864 #t)))))
3865 (propagated-inputs
3866 `(("python-click" ,python-click)
3867 ("python-attrs" ,python-attrs)
3868 ("python-appdirs" ,python-appdirs)
3869 ("python-pathspec" ,python-pathspec)
3870 ("python-regex" ,python-regex)
3871 ("python-toml" ,python-toml)
3872 ("python-typed-ast" ,python-typed-ast)))
3873 (native-inputs
3874 `(("python-setuptools-scm" ,python-setuptools-scm)))
3875 (home-page "https://github.com/ambv/black")
3876 (synopsis "The uncompromising code formatter")
3877 (description "Black is the uncompromising Python code formatter.")
3878 (license license:expat)))
3879
3880 (define-public python-blinker
3881 (package
3882 (name "python-blinker")
3883 (version "1.4")
3884 (source
3885 (origin
3886 (method url-fetch)
3887 (uri (pypi-uri "blinker" version))
3888 (sha256
3889 (base32
3890 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3891 (build-system python-build-system)
3892 (home-page "https://pythonhosted.org/blinker/")
3893 (synopsis "Fast, simple object-to-object and broadcast signaling")
3894 (description
3895 "Blinker provides a fast dispatching system that allows any number of
3896 interested parties to subscribe to events, or \"signals\".")
3897 (license license:expat)))
3898
3899 (define-public python2-blinker
3900 (package-with-python2 python-blinker))
3901
3902 (define-public pelican
3903 (package
3904 (name "pelican")
3905 (version "4.2.0")
3906 (source
3907 (origin
3908 (method url-fetch)
3909 (uri (pypi-uri "pelican" version))
3910 (sha256
3911 (base32
3912 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3913 (build-system python-build-system)
3914 (propagated-inputs
3915 `(("python-blinker" ,python-blinker)
3916 ("python-dateutil" ,python-dateutil)
3917 ("python-docutils" ,python-docutils)
3918 ("python-feedgenerator" ,python-feedgenerator)
3919 ("python-jinja2" ,python-jinja2)
3920 ("python-markdown" ,python-markdown)
3921 ("python-pygments" ,python-pygments)
3922 ("python-pytz" ,python-pytz)
3923 ("python-six" ,python-six)
3924 ("python-unidecode" ,python-unidecode)))
3925 (home-page "https://getpelican.com/")
3926 (arguments
3927 `(;; XXX Requires a lot more packages to do unit tests :P
3928 #:tests? #f))
3929 (synopsis "Python-based static site publishing system")
3930 (description
3931 "Pelican is a tool to generate a static blog from reStructuredText,
3932 Markdown input files, and more. Pelican uses Jinja2 for templating
3933 and is very extensible.")
3934 (license license:agpl3+)))
3935
3936 (define-public mallard-ducktype
3937 (package
3938 (name "mallard-ducktype")
3939 (version "1.0.2")
3940 (source
3941 (origin
3942 (method git-fetch)
3943 ;; git-reference because tests are not included in pypi source tarball
3944 ;; https://issues.guix.gnu.org/issue/36755#2
3945 (uri (git-reference
3946 (url "https://github.com/projectmallard/mallard-ducktype.git")
3947 (commit version)))
3948 (file-name (git-file-name name version))
3949 (sha256
3950 (base32
3951 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3952 (build-system python-build-system)
3953 (arguments
3954 '(#:phases
3955 (modify-phases %standard-phases
3956 (replace 'check
3957 (lambda _
3958 (with-directory-excursion "tests"
3959 (invoke "sh" "runtests")))))))
3960 (home-page "http://projectmallard.org")
3961 (synopsis "Convert Ducktype to Mallard documentation markup")
3962 (description
3963 "Ducktype is a lightweight syntax that can represent all the semantics
3964 of the Mallard XML documentation system. Ducktype files can be converted to
3965 Mallard using the @command{ducktype} tool. The yelp-tools package
3966 provides additional functionality on the produced Mallard documents.")
3967 (license license:expat)))
3968
3969 (define-public python-cython
3970 (package
3971 (name "python-cython")
3972 (version "0.29.16")
3973 (source
3974 (origin
3975 (method url-fetch)
3976 (uri (pypi-uri "Cython" version))
3977 (sha256
3978 (base32
3979 "01gs10myw0rw4jsikvqs0859fg7gficxhv508cxvnb4l9wl5a9r3"))))
3980 (build-system python-build-system)
3981 ;; we need the full python package and not just the python-wrapper
3982 ;; because we need libpython3.3m.so
3983 (inputs
3984 `(("python" ,python)))
3985 (arguments
3986 `(#:phases
3987 (modify-phases %standard-phases
3988 (add-before 'check 'set-HOME
3989 ;; some tests require access to "$HOME/.cython"
3990 (lambda _ (setenv "HOME" "/tmp") #t))
3991 (replace 'check
3992 (lambda _
3993 ;; Disable compiler optimizations to greatly reduce the running
3994 ;; time of the test suite.
3995 (setenv "CFLAGS" "-O0")
3996
3997 (invoke "python" "runtests.py" "-vv"
3998 "-j" (number->string (parallel-job-count))
3999 ;; XXX: On 32-bit architectures, running the parallel tests
4000 ;; fails on many-core systems, see
4001 ;; <https://github.com/cython/cython/issues/2807>.
4002 ,@(if (not (target-64bit?))
4003 '("-x" "run.parallel")
4004 '())))))))
4005 (home-page "https://cython.org/")
4006 (synopsis "C extensions for Python")
4007 (description "Cython is an optimising static compiler for both the Python
4008 programming language and the extended Cython programming language. It makes
4009 writing C extensions for Python as easy as Python itself.")
4010 (license license:asl2.0)
4011 (properties `((python2-variant . ,(delay python2-cython))))))
4012
4013 (define-public python2-cython
4014 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4015 (package
4016 (inherit base)
4017 (name "python2-cython")
4018 (inputs
4019 `(("python-2" ,python-2))) ;this is not automatically changed
4020 (arguments
4021 (substitute-keyword-arguments (package-arguments base)
4022 ((#:phases phases)
4023 `(modify-phases ,phases
4024 (add-before 'check 'adjust-test_embed
4025 (lambda _
4026 (substitute* "runtests.py"
4027 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4028 ;; so it can give the right -L flag to GCC when embedding static
4029 ;; builds of Python. It is unaware that the Python "config"
4030 ;; directory (where the static library lives) was renamed in
4031 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4032 ;; which works fine, because that is where the shared library is.
4033 ;;
4034 ;; It also appears to be unaware that the Makefile in Demos/embed
4035 ;; already unconditionally pass the static library location to GCC,
4036 ;; after checking sysconfig.get_config_var('LIBPL).
4037 ;;
4038 ;; The effect is that the linker is unable to resolve libexpat
4039 ;; symbols when building for Python 2, because neither the Python 2
4040 ;; shared library nor Expat is available. To fix it, we can either
4041 ;; add Expat as an input and make it visible to the linker, or just
4042 ;; prevent it from overriding the Python shared library location.
4043 ;; The end result is identical, so we take the easy route.
4044 ((" or libname not in os\\.listdir\\(libdir\\)")
4045 ""))
4046 #t)))))))))
4047
4048 ;; The RPython toolchain currently does not support Python 3.
4049 (define-public python2-rpython
4050 (package
4051 (name "python2-rpython")
4052 (version "0.2.1")
4053 (source
4054 (origin
4055 (method url-fetch)
4056 (uri (pypi-uri "rpython" version))
4057 (sha256
4058 (base32
4059 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4060 (build-system python-build-system)
4061 (arguments `(#:python ,python-2))
4062 (native-inputs
4063 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4064 (home-page "https://rpython.readthedocs.org")
4065 (synopsis "Framework for implementing interpreters and virtual machines")
4066 (description "RPython is a translation and support framework for
4067 producing implementations of dynamic languages, emphasizing a clean separation
4068 between language specification and implementation aspects.")
4069 (license license:expat)))
4070
4071 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4072 ;; python-scipy still build, as these three packages are often used together.
4073 (define-public python-numpy
4074 (package
4075 (name "python-numpy")
4076 (version "1.17.3")
4077 (source
4078 (origin
4079 (method url-fetch)
4080 (uri (string-append
4081 "https://github.com/numpy/numpy/releases/download/v"
4082 version "/numpy-" version ".tar.gz"))
4083 (sha256
4084 (base32
4085 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4086 (build-system python-build-system)
4087 (inputs
4088 `(("openblas" ,openblas)
4089 ("lapack" ,lapack)))
4090 (native-inputs
4091 `(("python-cython" ,python-cython)
4092 ("python-pytest" ,python-pytest)
4093 ("gfortran" ,gfortran)))
4094 (arguments
4095 `(#:phases
4096 (modify-phases %standard-phases
4097 (add-before 'build 'configure-blas-lapack
4098 (lambda* (#:key inputs #:allow-other-keys)
4099 (call-with-output-file "site.cfg"
4100 (lambda (port)
4101 (format port
4102 "[openblas]
4103 libraries = openblas
4104 library_dirs = ~a/lib
4105 include_dirs = ~a/include
4106
4107 # backslash-n to make emacs happy
4108 \n[lapack]
4109 lapack_libs = lapack
4110 library_dirs = ~a/lib
4111 include_dirs = ~a/include
4112 "
4113 (assoc-ref inputs "openblas")
4114 (assoc-ref inputs "openblas")
4115 (assoc-ref inputs "lapack")
4116 (assoc-ref inputs "lapack"))))
4117 #t))
4118 (add-before 'build 'fix-executable-paths
4119 (lambda* (#:key inputs #:allow-other-keys)
4120 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4121 ;; instead of /bin/sh.
4122 (substitute* "numpy/distutils/exec_command.py"
4123 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4124 (string-append match-start (assoc-ref inputs "bash") match-end)))
4125 ;; Use "gcc" executable, not "cc".
4126 (substitute* "numpy/distutils/system_info.py"
4127 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4128 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4129 #t))
4130 ;; Tests can only be run after the library has been installed and not
4131 ;; within the source directory.
4132 (delete 'check)
4133 (add-after 'install 'check
4134 (lambda* (#:key outputs inputs #:allow-other-keys)
4135 ;; Make installed package available for running the tests
4136 (add-installed-pythonpath inputs outputs)
4137 ;; Make sure "f2py" etc is found.
4138 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4139 ":" (getenv "PATH")))
4140 (with-directory-excursion "/tmp"
4141 (invoke "python" "-c"
4142 "import numpy; numpy.test(verbose=2)")))))))
4143 (home-page "https://numpy.org")
4144 (synopsis "Fundamental package for scientific computing with Python")
4145 (description "NumPy is the fundamental package for scientific computing
4146 with Python. It contains among other things: a powerful N-dimensional array
4147 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4148 and Fortran code, useful linear algebra, Fourier transform, and random number
4149 capabilities.")
4150 (properties `((python2-variant . ,(delay python2-numpy))))
4151 (license license:bsd-3)))
4152
4153 ;; Numpy 1.16.x are the last versions that support Python 2.
4154 (define-public python2-numpy
4155 (let ((numpy (package-with-python2
4156 (strip-python2-variant python-numpy))))
4157 (package/inherit
4158 numpy
4159 (version "1.16.5")
4160 (source (origin
4161 (method url-fetch)
4162 (uri (string-append
4163 "https://github.com/numpy/numpy/releases/download/v"
4164 version "/numpy-" version ".tar.gz"))
4165 (sha256
4166 (base32
4167 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4168
4169 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4170 ;; interest only for legacy code going back to NumPy's predecessor
4171 ;; Numeric.
4172 (define-public python2-numpy-1.8
4173 (package (inherit python2-numpy)
4174 (version "1.8.2")
4175 (source
4176 (origin
4177 (method git-fetch)
4178 (uri (git-reference
4179 (url "https://github.com/numpy/numpy")
4180 (commit (string-append "v" version))))
4181 (file-name (git-file-name "numpy" version))
4182 (sha256
4183 (base32
4184 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4185 (arguments
4186 (substitute-keyword-arguments (package-arguments python2-numpy)
4187 ((#:phases phases)
4188 `(modify-phases ,phases
4189 (replace 'configure-blas-lapack
4190 (lambda* (#:key inputs #:allow-other-keys)
4191 (call-with-output-file "site.cfg"
4192 (lambda (port)
4193 (format port
4194 "[openblas]
4195 libraries = openblas,lapack
4196 library_dirs = ~a/lib:~a/lib
4197 include_dirs = ~a/include:~a/include
4198 "
4199 (assoc-ref inputs "openblas")
4200 (assoc-ref inputs "lapack")
4201 (assoc-ref inputs "openblas")
4202 (assoc-ref inputs "lapack"))))
4203 #t))))))
4204 (native-inputs
4205 `(("python2-nose" ,python2-nose)))
4206 (description "NumPy is the fundamental package for scientific computing
4207 with Python. It contains among other things: a powerful N-dimensional array
4208 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4209 and Fortran code, useful linear algebra, Fourier transform, and random number
4210 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4211 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4212 Numeric.")
4213 (license license:bsd-3)))
4214
4215 (define-public python-munch
4216 (package
4217 (name "python-munch")
4218 (version "2.0.4")
4219 (source
4220 (origin
4221 (method url-fetch)
4222 (uri (pypi-uri "munch" version))
4223 (sha256
4224 (base32
4225 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4226 (build-system python-build-system)
4227 (home-page "https://github.com/Infinidat/munch")
4228 (synopsis "Dot-accessible dictionary")
4229 (description "Munch is a dot-accessible dictionary similar to JavaScript
4230 objects.")
4231 (license license:expat)))
4232
4233 (define-public python2-munch
4234 (package-with-python2 python-munch))
4235
4236 (define-public python-colormath
4237 (package
4238 (name "python-colormath")
4239 (version "3.0.0")
4240 (source
4241 (origin
4242 (method url-fetch)
4243 (uri (pypi-uri "colormath" version))
4244 (sha256
4245 (base32
4246 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4247 (build-system python-build-system)
4248 (propagated-inputs
4249 `(("python-networkx" ,python-networkx)
4250 ("python-numpy" ,python-numpy)))
4251 (home-page "https://github.com/gtaylor/python-colormath")
4252 (synopsis "Color math and conversion library")
4253 (description
4254 "This is a Python library for color math and conversions.")
4255 (license license:bsd-3)))
4256
4257 (define-public python2-colormath
4258 (package-with-python2 python-colormath))
4259
4260 (define-public python-spectra
4261 (package
4262 (name "python-spectra")
4263 (version "0.0.11")
4264 (source
4265 (origin
4266 (method url-fetch)
4267 (uri (pypi-uri "spectra" version))
4268 (sha256
4269 (base32
4270 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4271 (build-system python-build-system)
4272 (arguments
4273 `(#:phases
4274 (modify-phases %standard-phases
4275 (replace 'check
4276 (lambda _ (invoke "nosetests" "-v"))))))
4277 (propagated-inputs
4278 `(("python-colormath" ,python-colormath)))
4279 (native-inputs
4280 `(("python-nose" ,python-nose)))
4281 (home-page "https://github.com/jsvine/spectra")
4282 (synopsis "Color scales and color conversion")
4283 (description
4284 "This package provides a Python library intended to make color math,
4285 color scales, and color space conversion easy. It has support for:
4286
4287 @enumerate
4288 @item Color scales
4289 @item Color ranges
4290 @item Color blending
4291 @item Brightening/darkening colors
4292 @item Saturating/desaturating colors
4293 @item Conversion to/from multiple color spaces.
4294 @end enumerate\n")
4295 (license license:expat)))
4296
4297 (define-public python2-spectra
4298 (package-with-python2 python-spectra))
4299
4300 (define-public python-numpy-documentation
4301 (package
4302 (name "python-numpy-documentation")
4303 (version (package-version python-numpy))
4304 (source (package-source python-numpy))
4305 (build-system python-build-system)
4306 (native-inputs
4307 `(("python-matplotlib" ,python-matplotlib)
4308 ("python-numpy" ,python-numpy)
4309 ("pkg-config" ,pkg-config)
4310 ("python-sphinx" ,python-sphinx)
4311 ("python-numpydoc" ,python-numpydoc)
4312 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4313 texlive-fonts-ec
4314 texlive-generic-ifxetex
4315 texlive-generic-pdftex
4316 texlive-amsfonts
4317 texlive-latex-capt-of
4318 texlive-latex-cmap
4319 texlive-latex-environ
4320 texlive-latex-eqparbox
4321 texlive-latex-etoolbox
4322 texlive-latex-expdlist
4323 texlive-latex-fancyhdr
4324 texlive-latex-fancyvrb
4325 texlive-latex-fncychap
4326 texlive-latex-float
4327 texlive-latex-framed
4328 texlive-latex-geometry
4329 texlive-latex-graphics
4330 texlive-latex-hyperref
4331 texlive-latex-mdwtools
4332 texlive-latex-multirow
4333 texlive-latex-needspace
4334 texlive-latex-oberdiek
4335 texlive-latex-parskip
4336 texlive-latex-preview
4337 texlive-latex-tabulary
4338 texlive-latex-threeparttable
4339 texlive-latex-titlesec
4340 texlive-latex-trimspaces
4341 texlive-latex-ucs
4342 texlive-latex-upquote
4343 texlive-latex-url
4344 texlive-latex-varwidth
4345 texlive-latex-wrapfig)))
4346 ("texinfo" ,texinfo)
4347 ("perl" ,perl)
4348 ("scipy-sphinx-theme"
4349 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4350 (method git-fetch)
4351 (uri (git-reference
4352 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4353 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4354 (sha256
4355 (base32
4356 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4357 ,@(package-native-inputs python-numpy)))
4358 (arguments
4359 `(#:tests? #f ; we're only generating the documentation
4360 #:phases
4361 (modify-phases %standard-phases
4362 (delete 'build)
4363 (replace 'install
4364 (lambda* (#:key inputs outputs #:allow-other-keys)
4365 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4366 (doc (string-append
4367 data "/doc/" ,name "-"
4368 ,(package-version python-numpy)))
4369 (info-reader (string-append data "/info"))
4370 (html (string-append doc "/html"))
4371 (scipy-sphinx-theme "scipy-sphinx-theme")
4372 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4373 (pyver ,(string-append "PYVER=")))
4374
4375 ;; FIXME: this is needed to for texlive-union to generate
4376 ;; fonts, which are not found.
4377 (setenv "HOME" "/tmp")
4378
4379 (with-directory-excursion "doc"
4380 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4381 (mkdir-p html)
4382 (invoke "make" "html" pyver)
4383 (invoke "make" "latex" "PAPER=a4" pyver)
4384 (invoke "make" "-C" "build/latex"
4385 "all-pdf" "PAPER=a4" pyver)
4386 ;; FIXME: Generation of the info file fails.
4387 ;; (invoke "make" "info" pyver)
4388 ;; (mkdir-p info)
4389 ;; (copy-file "build/texinfo/numpy.info"
4390 ;; (string-append info "/numpy.info"))
4391 (for-each (lambda (file)
4392 (copy-file (string-append "build/latex" file)
4393 (string-append doc file)))
4394 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4395 (with-directory-excursion "build/html"
4396 (for-each (lambda (file)
4397 (let* ((dir (dirname file))
4398 (tgt-dir (string-append html "/" dir)))
4399 (unless (equal? "." dir)
4400 (mkdir-p tgt-dir))
4401 (install-file file html)))
4402 (find-files "." ".*")))))
4403 #t)))))
4404 (home-page (package-home-page python-numpy))
4405 (synopsis "Documentation for the python-numpy package")
4406 (description (package-description python-numpy))
4407 (license (package-license python-numpy))))
4408
4409 (define-public python2-numpy-documentation
4410 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4411 (package
4412 (inherit numpy-documentation)
4413 (native-inputs `(("python2-functools32" ,python2-functools32)
4414 ,@(package-native-inputs numpy-documentation))))))
4415
4416 (define-public python-pygit2
4417 (package
4418 (name "python-pygit2")
4419 (version "1.1.0")
4420 (source
4421 (origin
4422 (method url-fetch)
4423 (uri (pypi-uri "pygit2" version))
4424 (sha256
4425 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4426 (build-system python-build-system)
4427 (arguments
4428 '(#:tests? #f)) ; tests don't run correctly in our environment
4429 (propagated-inputs
4430 `(("python-cached-property" ,python-cached-property)
4431 ("python-cffi" ,python-cffi)
4432 ("libgit2" ,libgit2)))
4433 (native-inputs
4434 `(("python-pytest" ,python-pytest)))
4435 (home-page "https://github.com/libgit2/pygit2")
4436 (synopsis "Python bindings for libgit2")
4437 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4438 library, libgit2 implements Git plumbing.")
4439 ;; GPL2.0 only, with linking exception.
4440 (license license:gpl2)))
4441
4442 (define-public python-pyparsing
4443 (package
4444 (name "python-pyparsing")
4445 (version "2.4.6")
4446 (source
4447 (origin
4448 (method url-fetch)
4449 (uri (pypi-uri "pyparsing" version))
4450 (sha256
4451 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4452 (build-system python-build-system)
4453 (outputs '("out" "doc"))
4454 (arguments
4455 `(#:tests? #f ; no test target
4456 #:phases
4457 (modify-phases %standard-phases
4458 (add-after 'install 'install-doc
4459 (lambda* (#:key outputs #:allow-other-keys)
4460 (let* ((doc (string-append (assoc-ref outputs "doc")
4461 "/share/doc/" ,name "-" ,version))
4462 (html-doc (string-append doc "/html"))
4463 (examples (string-append doc "/examples")))
4464 (mkdir-p html-doc)
4465 (mkdir-p examples)
4466 (for-each
4467 (lambda (dir tgt)
4468 (map (lambda (file)
4469 (install-file file tgt))
4470 (find-files dir ".*")))
4471 (list "docs" "htmldoc" "examples")
4472 (list doc html-doc examples))
4473 #t))))))
4474 (home-page "https://github.com/pyparsing/pyparsing")
4475 (synopsis "Python parsing class library")
4476 (description
4477 "The pyparsing module is an alternative approach to creating and
4478 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4479 of regular expressions. The pyparsing module provides a library of classes
4480 that client code uses to construct the grammar directly in Python code.")
4481 (license license:expat)))
4482
4483 (define-public python2-pyparsing
4484 (package-with-python2 python-pyparsing))
4485
4486 (define-public python-numpydoc
4487 (package
4488 (name "python-numpydoc")
4489 (version "0.8.0")
4490 (source
4491 (origin
4492 (method url-fetch)
4493 (uri (pypi-uri "numpydoc" version))
4494 (sha256
4495 (base32
4496 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4497 (build-system python-build-system)
4498 (propagated-inputs
4499 `(("python-sphinx" ,python-sphinx)))
4500 (native-inputs
4501 `(("python-nose" ,python-nose)))
4502 (home-page "https://pypi.org/project/numpydoc/")
4503 (synopsis
4504 "Numpy's Sphinx extensions")
4505 (description
4506 "Sphinx extension to support docstrings in Numpy format.")
4507 (license license:bsd-2)))
4508
4509 (define-public python2-numpydoc
4510 (package-with-python2 python-numpydoc))
4511
4512 (define-public python-numexpr
4513 (package
4514 (name "python-numexpr")
4515 (version "2.6.5")
4516 (source
4517 (origin
4518 (method url-fetch)
4519 (uri (pypi-uri "numexpr" version))
4520 (sha256
4521 (base32
4522 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4523 (build-system python-build-system)
4524 (arguments `(#:tests? #f)) ; no tests included
4525 (propagated-inputs
4526 `(("python-numpy" ,python-numpy)))
4527 (home-page "https://github.com/pydata/numexpr")
4528 (synopsis "Fast numerical expression evaluator for NumPy")
4529 (description
4530 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4531 expressions that operate on arrays are accelerated and use less memory than
4532 doing the same calculation in Python. In addition, its multi-threaded
4533 capabilities can make use of all your cores, which may accelerate
4534 computations, most specially if they are not memory-bounded (e.g. those using
4535 transcendental functions).")
4536 (license license:expat)))
4537
4538 (define-public python2-numexpr
4539 (package-with-python2 python-numexpr))
4540
4541 (define-public python-cycler
4542 (package
4543 (name "python-cycler")
4544 (version "0.10.0")
4545 (source (origin
4546 (method url-fetch)
4547 (uri (pypi-uri "cycler" version))
4548 (sha256
4549 (base32
4550 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4551 (build-system python-build-system)
4552 (arguments
4553 ;; XXX: The current version requires 'coveralls' which we don't have.
4554 ;; Enable this for the next release which uses 'python-pytest'.
4555 '(#:tests? #f))
4556 (propagated-inputs
4557 `(("python-six" ,python-six)))
4558 (home-page "http://matplotlib.org/cycler/")
4559 (synopsis "Composable keyword argument iterator")
4560 (description
4561 "When using @code{matplotlib} and plotting more than one line, it is
4562 common to want to be able to want to be able to cycle over one or more artist
4563 styles; but the plotting logic can quickly become involved.
4564 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4565 @code{Cycler} class was developed.")
4566 (license license:bsd-3)))
4567
4568 (define-public python2-cycler
4569 (package-with-python2 python-cycler))
4570
4571 (define-public python-colorspacious
4572 (package
4573 (name "python-colorspacious")
4574 (version "1.1.2")
4575 (source
4576 (origin
4577 (method git-fetch)
4578 (uri (git-reference
4579 (url "https://github.com/njsmith/colorspacious.git")
4580 (commit (string-append "v" version))))
4581 (file-name (git-file-name name version))
4582 (sha256
4583 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4584 (build-system python-build-system)
4585 (propagated-inputs
4586 `(("python-numpy" ,python-numpy)))
4587 (native-inputs
4588 `(("python-nose" ,python-nose)))
4589 (arguments
4590 `(#:phases
4591 (modify-phases %standard-phases
4592 (replace 'check
4593 (lambda _
4594 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4595 (home-page "https://github.com/njsmith/colorspacious")
4596 (synopsis "Python library for colorspace conversions")
4597 (description "@code{colorspacious} is a Python library that lets you
4598 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4599 (license license:expat)))
4600
4601 (define-public python2-colorspacious
4602 (package-with-python2 python-colorspacious))
4603
4604 (define-public python-matplotlib
4605 (package
4606 (name "python-matplotlib")
4607 (version "3.1.2")
4608 (source
4609 (origin
4610 (method url-fetch)
4611 (uri (pypi-uri "matplotlib" version))
4612 (sha256
4613 (base32
4614 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4615 (build-system python-build-system)
4616 (propagated-inputs ; the following packages are all needed at run time
4617 `(("python-cycler" ,python-cycler)
4618 ("python-kiwisolver" ,python-kiwisolver)
4619 ("python-pyparsing" ,python-pyparsing)
4620 ("python-pygobject" ,python-pygobject)
4621 ("gobject-introspection" ,gobject-introspection)
4622 ("python-tkinter" ,python "tk")
4623 ("python-dateutil" ,python-dateutil)
4624 ("python-numpy" ,python-numpy)
4625 ("python-pillow" ,python-pillow)
4626 ("python-pytz" ,python-pytz)
4627 ("python-six" ,python-six)
4628 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4629 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4630 ;; object. For this reason we need to import both libraries.
4631 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4632 ("python-pycairo" ,python-pycairo)
4633 ("python-cairocffi" ,python-cairocffi)))
4634 (inputs
4635 `(("libpng" ,libpng)
4636 ("imagemagick" ,imagemagick)
4637 ("freetype" ,freetype)
4638 ("cairo" ,cairo)
4639 ("glib" ,glib)
4640 ;; FIXME: Add backends when available.
4641 ;("python-wxpython" ,python-wxpython)
4642 ("tcl" ,tcl)
4643 ("tk" ,tk)))
4644 (native-inputs
4645 `(("pkg-config" ,pkg-config)
4646 ("python-pytest" ,python-pytest)
4647 ("python-mock" ,python-mock)
4648 ("unzip" ,unzip)
4649 ("jquery-ui"
4650 ,(origin
4651 (method url-fetch)
4652 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4653 (sha256
4654 (base32
4655 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4656 (arguments
4657 `(#:phases
4658 (modify-phases %standard-phases
4659 ;; XXX We disable all image comparison tests because we're using a
4660 ;; newer version of FreeType than matplotlib expects. This leads to
4661 ;; minor differences throughout the tests.
4662 (add-after 'unpack 'fix-and-disable-failing-tests
4663 (lambda _
4664 (substitute* (append (find-files "lib/matplotlib/tests/"
4665 "test_.*\\.py$")
4666 (find-files "lib/mpl_toolkits/tests"
4667 "test_.*\\.py$"))
4668 (("^from matplotlib" match)
4669 (string-append "import pytest\n" match))
4670 (("( *)@image_comparison" match indent)
4671 (string-append indent
4672 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4673 match)))
4674 (substitute* "lib/matplotlib/tests/test_animation.py"
4675 (("/bin/sh") (which "sh")))
4676 (for-each delete-file
4677 ;; test_normal_axes, test_get_tightbbox_polar
4678 '("lib/matplotlib/tests/test_axes.py"
4679 ;; We don't use the webagg backend and this test forces it.
4680 "lib/matplotlib/tests/test_backend_webagg.py"
4681 ;; test_outward_ticks
4682 "lib/matplotlib/tests/test_tightlayout.py"
4683 ;; test_hidden_axes fails with minor extent
4684 ;; differences, possibly due to the use of a
4685 ;; different version of FreeType.
4686 "lib/matplotlib/tests/test_constrainedlayout.py"
4687 ;; Fontconfig returns no fonts.
4688 "lib/matplotlib/tests/test_font_manager.py"))
4689 #t))
4690 (add-before 'install 'install-jquery-ui
4691 (lambda* (#:key outputs inputs #:allow-other-keys)
4692 (let ((dir (string-append (assoc-ref outputs "out")
4693 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4694 (mkdir-p dir)
4695 (invoke "unzip"
4696 (assoc-ref inputs "jquery-ui")
4697 "-d" dir))
4698 #t))
4699 (replace 'check
4700 (lambda* (#:key outputs inputs #:allow-other-keys)
4701 (add-installed-pythonpath inputs outputs)
4702 (invoke "python" "tests.py" "-v"
4703 "-m" "not network and not webagg")))
4704 (add-before 'build 'configure-environment
4705 (lambda* (#:key outputs inputs #:allow-other-keys)
4706 (let ((cairo (assoc-ref inputs "cairo")))
4707 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4708 ;; has not effect.
4709 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4710 (setenv "HOME" (getcwd))
4711 (call-with-output-file "setup.cfg"
4712 (lambda (port)
4713 (format port "[directories]~%
4714 basedirlist = ~a,~a~%
4715 [packages]~%
4716 tests = True~%"
4717 (assoc-ref inputs "tcl")
4718 (assoc-ref inputs "tk")))))
4719 #t)))))
4720 (home-page "https://matplotlib.org/")
4721 (synopsis "2D plotting library for Python")
4722 (description
4723 "Matplotlib is a Python 2D plotting library which produces publication
4724 quality figures in a variety of hardcopy formats and interactive environments
4725 across platforms. Matplotlib can be used in Python scripts, the python and
4726 ipython shell, web application servers, and six graphical user interface
4727 toolkits.")
4728 (license license:psfl)
4729 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4730
4731 (define-public python2-matplotlib
4732 (let ((matplotlib (package-with-python2
4733 (strip-python2-variant python-matplotlib))))
4734 (package (inherit matplotlib)
4735 (version "2.2.4")
4736 (source
4737 (origin
4738 (method url-fetch)
4739 (uri (pypi-uri "matplotlib" version))
4740 (sha256
4741 (base32
4742 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4743 (arguments
4744 (substitute-keyword-arguments (package-arguments matplotlib)
4745 ((#:phases phases)
4746 `(modify-phases ,phases
4747 (replace 'install-jquery-ui
4748 (lambda* (#:key outputs inputs #:allow-other-keys)
4749 (let ((dir (string-append (assoc-ref outputs "out")
4750 "/lib/python2.7/site-packages/"
4751 "matplotlib/backends/web_backend/")))
4752 (mkdir-p dir)
4753 (invoke "unzip"
4754 (assoc-ref inputs "jquery-ui")
4755 "-d" dir))
4756 #t))
4757 (delete 'fix-and-disable-failing-tests)
4758 (delete 'check))))) ; These tests weren't run the the past.
4759 ;; Make sure to use special packages for Python 2 instead
4760 ;; of those automatically rewritten by package-with-python2.
4761 (propagated-inputs
4762 `(("python2-pycairo" ,python2-pycairo)
4763 ("python2-backports-functools-lru-cache"
4764 ,python2-backports-functools-lru-cache)
4765 ("python2-functools32" ,python2-functools32)
4766 ("python2-pygobject-2" ,python2-pygobject-2)
4767 ("python2-subprocess32" ,python2-subprocess32)
4768 ("python2-tkinter" ,python-2 "tk")
4769 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4770 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4771
4772 (define-public python-matplotlib-documentation
4773 (package
4774 (name "python-matplotlib-documentation")
4775 (version (package-version python-matplotlib))
4776 (source (package-source python-matplotlib))
4777 (build-system python-build-system)
4778 (native-inputs
4779 `(("python-matplotlib" ,python-matplotlib)
4780 ("python-colorspacious" ,python-colorspacious)
4781 ("python-sphinx" ,python-sphinx)
4782 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4783 ("python-sphinx-gallery" ,python-sphinx-gallery)
4784 ("python-numpydoc" ,python-numpydoc)
4785 ("python-ipython" ,python-ipython)
4786 ("python-ipykernel" ,python-ipykernel)
4787 ("python-mock" ,python-mock)
4788 ("graphviz" ,graphviz)
4789 ("texlive" ,(texlive-union (list texlive-amsfonts
4790 texlive-latex-amsmath
4791 texlive-latex-enumitem
4792 texlive-latex-expdlist
4793 texlive-latex-geometry
4794 texlive-latex-preview
4795 texlive-latex-type1cm
4796 texlive-latex-ucs
4797
4798 texlive-generic-pdftex
4799
4800 texlive-fonts-ec
4801 texlive-fonts-adobe-times
4802 texlive-fonts-txfonts)))
4803 ("texinfo" ,texinfo)
4804 ,@(package-native-inputs python-matplotlib)))
4805 (arguments
4806 `(#:tests? #f ; we're only generating documentation
4807 #:phases
4808 (modify-phases %standard-phases
4809 ;; The tests in python-matplotlib are run after the install phase, so
4810 ;; we need to delete the extra phase here.
4811 (delete 'check)
4812 (replace 'build
4813 (lambda _
4814 (chdir "doc")
4815 (setenv "PYTHONPATH"
4816 (string-append (getenv "PYTHONPATH")
4817 ":" (getcwd) "/../examples/units"))
4818 (substitute* "conf.py"
4819 ;; Don't use git.
4820 (("^SHA = check_output.*")
4821 (string-append "SHA = \"" ,version "\"\n"))
4822 ;; Don't fetch intersphinx files from the Internet
4823 (("^explicit_order_folders" m)
4824 (string-append "intersphinx_mapping = {}\n" m))
4825 (("'sphinx.ext.intersphinx',") "")
4826 ;; Disable URL embedding which requires internet access.
4827 (("'https://docs.scipy.org/doc/numpy'") "None")
4828 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4829 (invoke "make"
4830 "SPHINXBUILD=sphinx-build"
4831 "SPHINXOPTS=" ; don't abort on warnings
4832 "html" "texinfo")))
4833 (replace 'install
4834 (lambda* (#:key inputs outputs #:allow-other-keys)
4835 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4836 (doc (string-append data "/doc/python-matplotlib-" ,version))
4837 (info (string-append data "/info"))
4838 (html (string-append doc "/html")))
4839 (mkdir-p html)
4840 (mkdir-p info)
4841 (copy-recursively "build/html" html)
4842 (symlink (string-append html "/_images")
4843 (string-append info "/matplotlib-figures"))
4844 (with-directory-excursion "build/texinfo"
4845 (substitute* "matplotlib.texi"
4846 (("@image\\{([^,]*)" all file)
4847 (string-append "@image{matplotlib-figures/" file)))
4848 (symlink (string-append html "/_images")
4849 "./matplotlib-figures")
4850 (invoke "makeinfo" "--no-split"
4851 "-o" "matplotlib.info" "matplotlib.texi"))
4852 (install-file "build/texinfo/matplotlib.info" info))
4853 #t)))))
4854 (home-page (package-home-page python-matplotlib))
4855 (synopsis "Documentation for the python-matplotlib package")
4856 (description (package-description python-matplotlib))
4857 (license (package-license python-matplotlib))))
4858
4859 (define-public python2-matplotlib-documentation
4860 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4861 (package
4862 (inherit parent)
4863 (native-inputs
4864 (alist-delete "python-sphinx-copybutton"
4865 (package-native-inputs parent))))))
4866
4867 (define-public python-matplotlib-venn
4868 (package
4869 (name "python-matplotlib-venn")
4870 (version "0.11.5")
4871 (source
4872 (origin
4873 (method url-fetch)
4874 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4875 (sha256
4876 (base32
4877 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4878 (build-system python-build-system)
4879 (arguments '(#:tests? #f)) ; tests are not included
4880 (propagated-inputs
4881 `(("python-matplotlib" ,python-matplotlib)
4882 ("python-numpy" ,python-numpy)
4883 ("python-scipy" ,python-scipy)))
4884 (native-inputs
4885 `(("unzip" ,unzip)))
4886 (home-page "https://github.com/konstantint/matplotlib-venn")
4887 (synopsis "Plot area-proportional Venn diagrams")
4888 (description
4889 "This package provides tools for plotting area-proportional two- and
4890 three-way Venn diagrams in @code{matplotlib}.")
4891 (license license:expat)))
4892
4893 (define-public python-pysnptools
4894 (package
4895 (name "python-pysnptools")
4896 (version "0.4.11")
4897 (source
4898 (origin
4899 (method url-fetch)
4900 (uri (pypi-uri "pysnptools" version))
4901 (sha256
4902 (base32
4903 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4904 (build-system python-build-system)
4905 (arguments
4906 `(#:tests? #f ; no test data are included
4907 #:phases
4908 (modify-phases %standard-phases
4909 (replace 'check
4910 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4911 (if tests?
4912 (begin
4913 (add-installed-pythonpath inputs outputs)
4914 (invoke "python3" "pysnptools/test.py"))
4915 #t))))))
4916 (propagated-inputs
4917 `(("python-dill" ,python-dill)
4918 ("python-h5py" ,python-h5py)
4919 ("python-numpy" ,python-numpy)
4920 ("python-pandas" ,python-pandas)
4921 ("python-psutil" ,python-psutil)
4922 ("python-scipy" ,python-scipy)))
4923 (native-inputs
4924 `(("python-cython" ,python-cython)))
4925 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4926 (synopsis "Library for reading and manipulating genetic data")
4927 (description
4928 "PySnpTools is a library for reading and manipulating genetic data. It
4929 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4930 those files. It can also efficiently manipulate ranges of integers using set
4931 operators such as union, intersection, and difference.")
4932 (license license:asl2.0)))
4933
4934 (define-public python2-pysnptools
4935 (package-with-python2 python-pysnptools))
4936
4937 (define-public python-socksipy-branch
4938 (package
4939 (name "python-socksipy-branch")
4940 (version "1.01")
4941 (source
4942 (origin
4943 (method url-fetch)
4944 (uri (pypi-uri "SocksiPy-branch" version))
4945 (sha256
4946 (base32
4947 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4948 (build-system python-build-system)
4949 (arguments
4950 `(#:tests? #f)) ; There are no tests
4951 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4952 (synopsis "Python SOCKS module")
4953 (description
4954 "SocksiPy - A Python SOCKS client module. It provides a
4955 socket-like interface that supports connections to any TCP
4956 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4957 The original version was developed by Dan Haim, this is a
4958 branch created by Mario Vilas to address some open issues,
4959 as the original project seems to have been abandoned circa 2007.")
4960 (license license:bsd-3)))
4961
4962 (define-public python2-socksipy-branch
4963 (package-with-python2 python-socksipy-branch))
4964
4965 (define-public python-socksipychain
4966 (let ((commit "eb5ee8741ce006ac0c5c3e2e83204062c348c155")
4967 (revision "1")
4968 (version "2.1.1"))
4969 (package
4970 (name "python-socksipychain")
4971 (version (git-version version revision commit))
4972 (source
4973 (origin
4974 (method git-fetch)
4975 (uri (git-reference
4976 (url "https://github.com/pagekite/PySocksipyChain.git")
4977 (commit commit)))
4978 (file-name (git-file-name name version))
4979 (sha256
4980 (base32
4981 "0fpphn6xnpm7qk8a914s4abycsbq9w6qkci07my632v0fylnm5n7"))))
4982 (build-system python-build-system)
4983 (arguments
4984 `(#:tests? #f)) ; Tests try to access the network.
4985 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
4986 (synopsis "Python SOCKS module with chained proxies support")
4987 (description
4988 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
4989 adds support for arbitrary chaining of proxy servers and various modes of
4990 TLS/SSL encryption. It was developed for use in PageKite, and also includes
4991 a simple netcat replacement with chaining support.")
4992 (license license:bsd-3))))
4993
4994 (define-public python-pycodestyle
4995 (package
4996 (name "python-pycodestyle")
4997 (version "2.5.0")
4998 (source
4999 (origin
5000 (method url-fetch)
5001 (uri (pypi-uri "pycodestyle" version))
5002 (sha256
5003 (base32
5004 "0v4prb05n21bm8650v0a01k1nyqjdmkrsm3zycfxh2j5k9n962p4"))))
5005 (build-system python-build-system)
5006 (home-page "https://pycodestyle.readthedocs.io/")
5007 (synopsis "Python style guide checker")
5008 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5009 Python code against some of the style conventions in
5010 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5011 (license license:expat)))
5012
5013 (define-public python2-pycodestyle
5014 (package-with-python2 python-pycodestyle))
5015
5016 (define-public python-multidict
5017 (package
5018 (name "python-multidict")
5019 (version "4.7.5")
5020 (source
5021 (origin
5022 (method url-fetch)
5023 (uri (pypi-uri "multidict" version))
5024 (sha256
5025 (base32
5026 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5027 (build-system python-build-system)
5028 (arguments
5029 '(#:modules ((ice-9 ftw)
5030 (srfi srfi-1)
5031 (srfi srfi-26)
5032 (guix build utils)
5033 (guix build python-build-system))
5034 #:phases (modify-phases %standard-phases
5035 (replace 'check
5036 (lambda* (#:key tests? #:allow-other-keys)
5037 (if tests?
5038 (begin
5039 (let ((libdir (find (cut string-prefix? "lib." <>)
5040 (scandir "build"))))
5041 (setenv "PYTHONPATH"
5042 (string-append "./build/" libdir ":"
5043 (getenv "PYTHONPATH")))
5044 (invoke "pytest" "-vv")))
5045 (format #t "test suite not run~%"))
5046 #t)))))
5047 (native-inputs
5048 `(("python-pytest" ,python-pytest)
5049 ("python-pytest-cov" ,python-pytest-cov)))
5050 (home-page "https://github.com/aio-libs/multidict/")
5051 (synopsis "Multidict implementation")
5052 (description "Multidict is dict-like collection of key-value pairs
5053 where key might be occurred more than once in the container.")
5054 (license license:asl2.0)))
5055
5056 (define-public python-orderedmultidict
5057 (package
5058 (name "python-orderedmultidict")
5059 (version "0.7.11")
5060 (source
5061 (origin
5062 (method url-fetch)
5063 (uri (pypi-uri "orderedmultidict" version))
5064 (sha256
5065 (base32
5066 "0dls862ibm7qbq4fnvwx0xn1v9hwyzywbff8xjjdr42dd75208yw"))))
5067 (build-system python-build-system)
5068 (arguments
5069 `(#:phases
5070 (modify-phases %standard-phases
5071 (add-after 'unpack 'fix-tests
5072 (lambda _
5073 ;; The package uses nosetest for running the tests.
5074 ;; Adding this initfile allows to run the test suite
5075 ;; without requiring nosetest.
5076 (with-output-to-file "tests/__init__.py" newline)
5077 #t)))))
5078 (propagated-inputs
5079 `(("python-six" ,python-six)))
5080 (native-inputs
5081 `(("python-pycodestyle" ,python-pycodestyle)))
5082 (home-page "https://github.com/gruns/orderedmultidict")
5083 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5084 (description "This package contains a library for ordered multivalue
5085 dictionaries. A multivalue dictionary is a dictionary that can store
5086 multiple values for the same key. An ordered multivalue dictionary is a
5087 multivalue dictionary that retains the order of insertions and deletions.")
5088 (license license:unlicense)))
5089
5090 (define-public python2-orderedmultidict
5091 (package-with-python2 python-orderedmultidict))
5092
5093 (define-public python-autopep8
5094 (package
5095 (name "python-autopep8")
5096 (version "1.3.5")
5097 (source
5098 (origin
5099 (method url-fetch)
5100 (uri (pypi-uri "autopep8" version))
5101 (sha256
5102 (base32
5103 "192bvhzi4d0claqxgzymvv7k3qnj627742bc8sgxpzjj42pd9112"))))
5104 (build-system python-build-system)
5105 (propagated-inputs
5106 `(("python-pycodestyle" ,python-pycodestyle)))
5107 (home-page "https://github.com/hhatto/autopep8")
5108 (synopsis "Format Python code according to the PEP 8 style guide")
5109 (description
5110 "@code{autopep8} automatically formats Python code to conform to
5111 the PEP 8 style guide. It uses the pycodestyle utility to determine
5112 what parts of the code needs to be formatted. @code{autopep8} is
5113 capable of fixing most of the formatting issues that can be reported
5114 by pycodestyle.")
5115 (license (license:non-copyleft
5116 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5117
5118 (define-public python2-autopep8
5119 (package-with-python2 python-autopep8))
5120
5121 (define-public python-distlib
5122 (package
5123 (name "python-distlib")
5124 (version "0.3.0")
5125 (source
5126 (origin
5127 (method url-fetch)
5128 (uri (pypi-uri "distlib" version ".zip"))
5129 (sha256
5130 (base32
5131 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5132 (build-system python-build-system)
5133 (arguments
5134 `(#:phases
5135 (modify-phases %standard-phases
5136 (add-before 'build 'no-/bin/sh
5137 (lambda _
5138 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5139 (("/bin/sh") (which "sh")))
5140 #t))
5141 (add-before 'check 'prepare-test-env
5142 (lambda _
5143 (setenv "HOME" "/tmp")
5144 ;; NOTE: Any value works, the variable just has to be present.
5145 (setenv "SKIP_ONLINE" "1")
5146 #t)))))
5147 (native-inputs `(("unzip" ,unzip)))
5148 (home-page "https://bitbucket.org/pypa/distlib")
5149 (synopsis "Distribution utilities")
5150 (description "Distlib is a library which implements low-level functions that
5151 relate to packaging and distribution of Python software. It is intended to be
5152 used as the basis for third-party packaging tools.")
5153 (license license:psfl)))
5154
5155 (define-public python-distutils-extra
5156 (package
5157 (name "python-distutils-extra")
5158 (version "2.38")
5159 (source
5160 (origin
5161 (method url-fetch)
5162 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5163 version "/+download/python-distutils-extra-"
5164 version ".tar.gz"))
5165 (sha256
5166 (base32
5167 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5168 (build-system python-build-system)
5169 (home-page "https://launchpad.net/python-distutils-extra/")
5170 (synopsis "Enhancements to Python's distutils")
5171 (description
5172 "The python-distutils-extra module enables you to easily integrate
5173 gettext support, themed icons, and scrollkeeper-based documentation into
5174 Python's distutils.")
5175 (license license:gpl2)))
5176
5177 (define-public python2-distutils-extra
5178 (package-with-python2 python-distutils-extra))
5179
5180 (define-public python2-elib.intl
5181 (package
5182 (name "python2-elib.intl")
5183 (version "0.0.3")
5184 (source
5185 (origin
5186 ;; This project doesn't tag releases or publish tarballs, so we take
5187 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5188 (method git-fetch)
5189 (uri (git-reference
5190 (url "https://github.com/dieterv/elib.intl.git")
5191 (commit "d09997cfef")))
5192 (file-name (string-append name "-" version "-checkout"))
5193 (sha256
5194 (base32
5195 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5196 (build-system python-build-system)
5197 (arguments
5198 ;; incompatible with Python 3 (exception syntax)
5199 `(#:python ,python-2
5200 #:tests? #f))
5201 (home-page "https://github.com/dieterv/elib.intl")
5202 (synopsis "Enhanced internationalization for Python")
5203 (description
5204 "The elib.intl module provides enhanced internationalization (I18N)
5205 services for your Python modules and applications.")
5206 (license license:lgpl3+)))
5207
5208 (define-public python-olefile
5209 (package
5210 (name "python-olefile")
5211 (version "0.46")
5212 (source
5213 (origin
5214 (method url-fetch)
5215 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5216 "download/v" version "/olefile-" version ".tar.gz"))
5217 (file-name (string-append name "-" version ".tar.gz"))
5218 (sha256
5219 (base32
5220 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5221 (build-system python-build-system)
5222 (home-page "https://www.decalage.info/python/olefileio")
5223 (synopsis "Read and write Microsoft OLE2 files.")
5224 (description
5225 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5226 Storage or Compound Document, Microsoft Office). It is an improved version of
5227 the OleFileIO module from PIL, the Python Image Library.")
5228 (license license:bsd-3)))
5229
5230 (define-public python2-olefile
5231 (package-with-python2 python-olefile))
5232
5233 (define-public python-pillow
5234 (package
5235 (name "python-pillow")
5236 (version "6.2.1")
5237 (source
5238 (origin
5239 (method url-fetch)
5240 (uri (pypi-uri "Pillow" version))
5241 (sha256
5242 (base32
5243 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5244 (build-system python-build-system)
5245 (native-inputs
5246 `(("python-pytest" ,python-pytest)))
5247 (inputs
5248 `(("freetype" ,freetype)
5249 ("lcms" ,lcms)
5250 ("libjpeg" ,libjpeg-turbo)
5251 ("libtiff" ,libtiff)
5252 ("libwebp" ,libwebp)
5253 ("openjpeg" ,openjpeg)
5254 ("zlib" ,zlib)))
5255 (propagated-inputs
5256 `(("python-olefile" ,python-olefile)))
5257 (arguments
5258 `(#:phases
5259 (modify-phases %standard-phases
5260 (add-after 'unpack 'patch-ldconfig
5261 (lambda _
5262 (substitute* "setup.py"
5263 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5264 (replace 'check
5265 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5266 (if tests?
5267 (begin
5268 (setenv "HOME" (getcwd))
5269 ;; Make installed package available for running the tests.
5270 (add-installed-pythonpath inputs outputs)
5271 (invoke "python" "selftest.py" "--installed")
5272 (invoke "python" "-m" "pytest" "-vv"))
5273 #t))))))
5274 (home-page "https://python-pillow.org")
5275 (synopsis "Fork of the Python Imaging Library")
5276 (description
5277 "The Python Imaging Library adds image processing capabilities to your
5278 Python interpreter. This library provides extensive file format support, an
5279 efficient internal representation, and fairly powerful image processing
5280 capabilities. The core image library is designed for fast access to data
5281 stored in a few basic pixel formats. It should provide a solid foundation for
5282 a general image processing tool.")
5283 (license (license:x11-style
5284 "http://www.pythonware.com/products/pil/license.htm"
5285 "The PIL Software License"))))
5286
5287 (define-public python2-pillow
5288 (package-with-python2 python-pillow))
5289
5290 (define-public python-pycparser
5291 (package
5292 (name "python-pycparser")
5293 (version "2.19")
5294 (source
5295 (origin
5296 (method url-fetch)
5297 (uri (pypi-uri "pycparser" version))
5298 (sha256
5299 (base32
5300 "1cr5dcj9628lkz1qlwq3fv97c25363qppkmcayqvd05dpy573259"))))
5301 (outputs '("out" "doc"))
5302 (build-system python-build-system)
5303 (native-inputs
5304 `(("pkg-config" ,pkg-config)))
5305 (arguments
5306 `(#:phases
5307 (modify-phases %standard-phases
5308 (replace 'check
5309 (lambda _
5310 (with-directory-excursion "tests"
5311 (invoke "python" "all_tests.py"))
5312 #t))
5313 (add-after 'install 'install-doc
5314 (lambda* (#:key outputs #:allow-other-keys)
5315 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5316 (doc (string-append data "/doc/" ,name "-" ,version))
5317 (examples (string-append doc "/examples")))
5318 (mkdir-p examples)
5319 (for-each (lambda (file)
5320 (copy-file (string-append "." file)
5321 (string-append doc file)))
5322 '("/README.rst" "/CHANGES" "/LICENSE"))
5323 (copy-recursively "examples" examples)
5324 #t))))))
5325 (home-page "https://github.com/eliben/pycparser")
5326 (synopsis "C parser in Python")
5327 (description
5328 "Pycparser is a complete parser of the C language, written in pure Python
5329 using the PLY parsing library. It parses C code into an AST and can serve as
5330 a front-end for C compilers or analysis tools.")
5331 (license license:bsd-3)))
5332
5333 (define-public python2-pycparser
5334 (package-with-python2 python-pycparser))
5335
5336 (define-public python-pywavelets
5337 (package
5338 (name "python-pywavelets")
5339 (version "1.0.1")
5340 (home-page "https://github.com/PyWavelets/pywt")
5341 (source (origin
5342 (method url-fetch)
5343 (uri (pypi-uri "PyWavelets" version))
5344 (sha256
5345 (base32
5346 "1p3qv2v66ghnqrb1f98wyyhp9dz71jwcd6kfpsax65sfdpiyqp1w"))))
5347 (build-system python-build-system)
5348 (arguments
5349 '(#:modules ((ice-9 ftw)
5350 (srfi srfi-1)
5351 (srfi srfi-26)
5352 (guix build utils)
5353 (guix build python-build-system))
5354 #:phases (modify-phases %standard-phases
5355 (replace 'check
5356 (lambda _
5357 (let ((cwd (getcwd))
5358 (libdir (find (cut string-prefix? "lib." <>)
5359 (scandir "build"))))
5360 (with-directory-excursion (string-append cwd "/build/" libdir)
5361 (invoke "nosetests" "-v" "."))))))))
5362 (native-inputs
5363 `(("python-matplotlib" ,python-matplotlib) ;for tests
5364 ("python-nose" ,python-nose)))
5365 (propagated-inputs
5366 `(("python-numpy" ,python-numpy)))
5367 (synopsis "Wavelet transforms in Python")
5368 (description
5369 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5370 mathematical basis functions that are localized in both time and frequency.
5371 Wavelet transforms are time-frequency transforms employing wavelets. They are
5372 similar to Fourier transforms, the difference being that Fourier transforms are
5373 localized only in frequency instead of in time and frequency.")
5374 (license license:expat)))
5375
5376 (define-public python2-pywavelets
5377 (package-with-python2 python-pywavelets))
5378
5379 (define-public python-pywinrm
5380 (package
5381 (name "python-pywinrm")
5382 (version "0.4.1")
5383 (source
5384 (origin
5385 (method url-fetch)
5386 (uri (pypi-uri "pywinrm" version))
5387 (sha256
5388 (base32
5389 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5390 (build-system python-build-system)
5391 (propagated-inputs
5392 `(("python-six" ,python-six)
5393 ("python-requests_ntlm" ,python-requests_ntlm)
5394 ("python-xmltodict" ,python-xmltodict)
5395 ("python-kerberos" ,python-kerberos)))
5396 (native-inputs
5397 `(("python-mock" ,python-mock)
5398 ("python-pytest" ,python-pytest)))
5399 (home-page "https://github.com/diyan/pywinrm/")
5400 (synopsis
5401 "Python library for Windows Remote Management (WinRM)")
5402 (description
5403 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5404 service. It allows you to invoke commands on target Windows machines from
5405 any machine that can run Python.")
5406 (license license:expat)))
5407
5408 (define-public python-xcffib
5409 (package
5410 (name "python-xcffib")
5411 (version "0.6.0")
5412 (source
5413 (origin
5414 (method url-fetch)
5415 (uri (pypi-uri "xcffib" version))
5416 (sha256
5417 (base32
5418 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5419 (build-system python-build-system)
5420 (inputs
5421 `(("libxcb" ,libxcb)))
5422 (propagated-inputs
5423 `(("python-cffi" ,python-cffi) ; used at run time
5424 ("python-six" ,python-six)))
5425 (arguments
5426 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5427 #:tests? #f
5428 #:phases
5429 (modify-phases %standard-phases
5430 (add-after 'unpack 'fix-libxcb-path
5431 (lambda* (#:key inputs #:allow-other-keys)
5432 (let ((libxcb (assoc-ref inputs "libxcb")))
5433 (substitute* '("xcffib/__init__.py")
5434 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5435 #t)))
5436 (add-after 'install 'install-doc
5437 (lambda* (#:key outputs #:allow-other-keys)
5438 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5439 "/doc/" ,name "-" ,version)))
5440 (mkdir-p doc)
5441 (copy-file "README.md"
5442 (string-append doc "/README.md"))
5443 #t))))))
5444 (home-page "https://github.com/tych0/xcffib")
5445 (synopsis "XCB Python bindings")
5446 (description
5447 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5448 support for Python 3 and PyPy. It is based on cffi.")
5449 (license license:expat)))
5450
5451 (define-public python2-xcffib
5452 (package-with-python2 python-xcffib))
5453
5454 (define-public python-cairocffi
5455 (package
5456 (name "python-cairocffi")
5457 (version "0.9.0")
5458 (source
5459 (origin
5460 (method url-fetch)
5461 (uri (pypi-uri "cairocffi" version))
5462 (sha256
5463 (base32
5464 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5465 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5466 (build-system python-build-system)
5467 (outputs '("out" "doc"))
5468 (inputs
5469 `(("glib" ,glib)
5470 ("gtk+" ,gtk+)
5471 ("gdk-pixbuf" ,gdk-pixbuf)
5472 ("cairo" ,cairo)
5473 ("pango" ,pango)))
5474 (native-inputs
5475 `(("pkg-config" ,pkg-config)
5476 ("python-pytest" ,python-pytest)
5477 ("python-pytest-cov" ,python-pytest-cov)
5478 ("python-pytest-runner" ,python-pytest-runner)
5479 ("python-sphinx" ,python-sphinx)
5480 ("python-docutils" ,python-docutils)))
5481 (propagated-inputs
5482 `(("python-xcffib" ,python-xcffib))) ; used at run time
5483 (arguments
5484 `(#:phases
5485 (modify-phases %standard-phases
5486 (add-after 'unpack 'patch-paths
5487 (lambda* (#:key inputs outputs #:allow-other-keys)
5488 (substitute* (find-files "." "\\.py$")
5489 (("dlopen\\(ffi, 'cairo'")
5490 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5491 "/lib/libcairo.so.2'"))
5492 (("dlopen\\(ffi, 'gdk-3'")
5493 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5494 "/lib/libgtk-3.so.0'"))
5495 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5496 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5497 "/lib/libgdk_pixbuf-2.0.so.0'"))
5498 (("dlopen\\(ffi, 'glib-2.0'")
5499 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5500 "/lib/libglib-2.0.so.0'"))
5501 (("dlopen\\(ffi, 'gobject-2.0'")
5502 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5503 "/lib/libgobject-2.0.so.0'"))
5504 (("dlopen\\(ffi, 'pangocairo-1.0'")
5505 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5506 "/lib/libpangocairo-1.0.so.0'"))
5507 (("dlopen\\(ffi, 'pango-1.0'")
5508 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5509 "/lib/libpango-1.0.so.0'")))
5510 #t))
5511 (add-after 'install 'install-doc
5512 (lambda* (#:key inputs outputs #:allow-other-keys)
5513 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5514 (doc (string-append data "/doc/" ,name "-" ,version))
5515 (html (string-append doc "/html")))
5516 (setenv "LD_LIBRARY_PATH"
5517 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5518 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5519 (setenv "LANG" "en_US.UTF-8")
5520 (mkdir-p html)
5521 (for-each (lambda (file)
5522 (copy-file (string-append "." file)
5523 (string-append doc file)))
5524 '("/README.rst" "/CHANGES" "/LICENSE"))
5525 (system* "python" "setup.py" "build_sphinx")
5526 (copy-recursively "docs/_build/html" html)
5527 #t))))))
5528 (home-page "https://github.com/Kozea/cairocffi")
5529 (synopsis "Python bindings and object-oriented API for Cairo")
5530 (description
5531 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5532 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5533 graphics library with support for multiple backends including image buffers,
5534 PNG, PostScript, PDF, and SVG file output.")
5535 (license license:bsd-3)))
5536
5537 (define-public python2-cairocffi
5538 (package-with-python2 python-cairocffi))
5539
5540 (define-public python-decorator
5541 (package
5542 (name "python-decorator")
5543 (version "4.3.0")
5544 (source
5545 (origin
5546 (method url-fetch)
5547 (uri (pypi-uri "decorator" version))
5548 (sha256
5549 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5550 (build-system python-build-system)
5551 (home-page "https://pypi.org/project/decorator/")
5552 (synopsis "Python module to simplify usage of decorators")
5553 (description
5554 "The aim of the decorator module is to simplify the usage of decorators
5555 for the average programmer, and to popularize decorators usage giving examples
5556 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5557 etc. The core of this module is a decorator factory.")
5558 (license license:expat)))
5559
5560 (define-public python2-decorator
5561 (package-with-python2 python-decorator))
5562
5563 (define-public python-drmaa
5564 (package
5565 (name "python-drmaa")
5566 (version "0.7.7")
5567 (source
5568 (origin
5569 (method url-fetch)
5570 (uri (pypi-uri "drmaa" version))
5571 (sha256
5572 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5573 (build-system python-build-system)
5574 ;; The test suite requires libdrmaa which is provided by the cluster
5575 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5576 ;; should be set to the path of the libdrmaa library.
5577 (arguments '(#:tests? #f))
5578 (native-inputs
5579 `(("python-nose" ,python-nose)))
5580 (home-page "https://pypi.org/project/drmaa/")
5581 (synopsis "Python bindings for the DRMAA library")
5582 (description
5583 "A Python package for Distributed Resource Management (DRM) job
5584 submission and control. This package is an implementation of the DRMAA 1.0
5585 Python language binding specification.")
5586 (license license:bsd-3)))
5587
5588 (define-public python2-drmaa
5589 (package-with-python2 python-drmaa))
5590
5591 (define-public python-grako
5592 (package
5593 (name "python-grako")
5594 (version "3.99.9")
5595 (source
5596 (origin
5597 (method url-fetch)
5598 (uri
5599 (pypi-uri "grako" version ".zip"))
5600 (sha256
5601 (base32
5602 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5603 (build-system python-build-system)
5604 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5605 (native-inputs
5606 `(("unzip" ,unzip)
5607 ("python-pytest" ,python-pytest)
5608 ("python-pytest-runner" ,python-pytest-runner)))
5609 (home-page "https://bitbucket.org/neogeny/grako")
5610 (synopsis "EBNF parser generator")
5611 (description
5612 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5613 memoizing PEG/Packrat parser in Python.")
5614 (license license:bsd-3)))
5615
5616 (define-public python2-grako
5617 (package-with-python2 python-grako))
5618
5619 (define-public python-gridmap
5620 (package
5621 (name "python-gridmap")
5622 (version "0.13.0")
5623 (source
5624 (origin
5625 (method git-fetch)
5626 (uri (git-reference
5627 (url "https://github.com/pygridtools/gridmap.git")
5628 (commit (string-append "v" version))))
5629 (file-name (git-file-name name version))
5630 (sha256
5631 (base32 "1478lbwsr1w24cii2x01m2910fvh8r43ghnb78nc972a96hqiknm"))))
5632 (build-system python-build-system)
5633 (arguments
5634 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5635 (propagated-inputs
5636 `(("python-psutil" ,python-psutil)
5637 ("python-drmaa" ,python-drmaa)
5638 ("python-pyzmq" ,python-pyzmq)))
5639 (home-page "https://github.com/pygridtools/gridmap")
5640 (synopsis "Create jobs on a cluster directly from Python")
5641 (description
5642 "Gridmap is a Python package to allow you to easily create jobs on the
5643 cluster directly from Python. You can directly map Python functions onto the
5644 cluster without needing to write any wrapper code yourself.")
5645 (license license:gpl3+)))
5646
5647 (define-public python2-gridmap
5648 (package-with-python2 python-gridmap))
5649
5650 (define-public python-honcho
5651 (package
5652 (name "python-honcho")
5653 (version "1.0.1")
5654 (source
5655 (origin
5656 (method git-fetch)
5657 (uri (git-reference
5658 (url "https://github.com/nickstenning/honcho.git")
5659 (commit (string-append "v" version))))
5660 (file-name (git-file-name name version))
5661 (sha256
5662 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5663 (build-system python-build-system)
5664 (native-inputs
5665 `(("python-pytest" ,python-pytest)
5666 ("python-mock" ,python-mock)
5667 ("python-tox" ,python-tox)
5668 ("which" ,which))) ;for tests
5669 (propagated-inputs
5670 `(("python-jinja2" ,python-jinja2)))
5671 (arguments
5672 `(#:phases
5673 (modify-phases %standard-phases
5674 (delete 'check)
5675 (add-after 'install 'check
5676 (lambda* (#:key outputs inputs #:allow-other-keys)
5677 ;; fix honcho path in testsuite
5678 (substitute* "tests/conftest.py"
5679 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5680 "/bin/honcho" "'")))
5681 ;; It's easier to run tests after install.
5682 ;; Make installed package available for running the tests
5683 (add-installed-pythonpath inputs outputs)
5684 (invoke "py.test" "-v"))))))
5685 (home-page "https://github.com/nickstenning/honcho")
5686 (synopsis "Manage Procfile-based applications")
5687 (description
5688 "A Procfile is a file which describes how to run an application
5689 consisting of several processes. honcho starts all listed processes.
5690 The output of all running processes is collected by honcho and
5691 displayed.")
5692 (license license:expat)))
5693
5694 (define-public python2-honcho
5695 (package-with-python2 python-honcho))
5696
5697 (define-public python-pexpect
5698 (package
5699 (name "python-pexpect")
5700 (version "4.8.0")
5701 (source
5702 (origin
5703 (method url-fetch)
5704 (uri (pypi-uri "pexpect" version))
5705 (sha256
5706 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5707 (build-system python-build-system)
5708 (arguments
5709 `(#:phases
5710 (modify-phases %standard-phases
5711 (add-before 'check 'prepare-tests
5712 (lambda _
5713 (substitute* (find-files "tests")
5714 (("/bin/ls") (which "ls"))
5715 (("/bin/echo") (which "echo"))
5716 (("/bin/which") (which "which"))
5717 ;; Many tests try to use the /bin directory which
5718 ;; is not present in the build environment.
5719 ;; Use one that's non-empty and unlikely to change.
5720 (("/bin'") "/dev'")
5721 ;; Disable failing test. See upstream bug report
5722 ;; https://github.com/pexpect/pexpect/issues/568
5723 (("def test_bash") "def _test_bash"))
5724 ;; XXX: Socket connection test gets "Connection reset by peer".
5725 ;; Why does it not work? Delete for now.
5726 (delete-file "tests/test_socket.py")
5727 #t))
5728 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5729 (native-inputs
5730 `(("python-nose" ,python-nose)
5731 ("python-pytest" ,python-pytest)
5732 ("man-db" ,man-db)
5733 ("which" ,which)
5734 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5735 (propagated-inputs
5736 `(("python-ptyprocess" ,python-ptyprocess)))
5737 (home-page "http://pexpect.readthedocs.org/")
5738 (synopsis "Controlling interactive console applications")
5739 (description
5740 "Pexpect is a pure Python module for spawning child applications;
5741 controlling them; and responding to expected patterns in their output.
5742 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5743 child application and control it as if a human were typing commands.")
5744 (license license:isc)))
5745
5746 (define-public python2-pexpect
5747 (package-with-python2 python-pexpect))
5748
5749 (define-public python-setuptools-scm
5750 (package
5751 (name "python-setuptools-scm")
5752 (version "3.4.3")
5753 (source (origin
5754 (method url-fetch)
5755 (uri (pypi-uri "setuptools_scm" version))
5756 (sha256
5757 (base32
5758 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5759 (build-system python-build-system)
5760 (home-page "https://github.com/pypa/setuptools_scm/")
5761 (synopsis "Manage Python package versions in SCM metadata")
5762 (description
5763 "Setuptools_scm handles managing your Python package versions in
5764 @dfn{software configuration management} (SCM) metadata instead of declaring
5765 them as the version argument or in a SCM managed file.")
5766 (license license:expat)))
5767
5768 (define-public python2-setuptools-scm
5769 (package-with-python2 python-setuptools-scm))
5770
5771 (define-public python-sexpdata
5772 (package
5773 (name "python-sexpdata")
5774 (version "0.0.3")
5775 (source
5776 (origin
5777 (method url-fetch)
5778 (uri (pypi-uri "sexpdata" version))
5779 (sha256
5780 (base32
5781 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
5782 (build-system python-build-system)
5783 (home-page "https://github.com/jd-boyd/sexpdata")
5784 (synopsis "S-expression parser for Python")
5785 (description
5786 "Sexpdata is an S-expression parser/serializer. It has load and dump
5787 functions like pickle, json or PyYAML module.")
5788 (license license:bsd-3)))
5789
5790 (define-public python-pathlib2
5791 (package
5792 (name "python-pathlib2")
5793 (version "2.3.3")
5794 (source
5795 (origin
5796 (method url-fetch)
5797 (uri (pypi-uri "pathlib2" version))
5798 (sha256
5799 (base32
5800 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5801 (build-system python-build-system)
5802 (propagated-inputs
5803 `(("python-scandir" ,python-scandir)
5804 ("python-six" ,python-six)))
5805 (home-page "https://pypi.org/project/pathlib2/")
5806 (synopsis "Object-oriented file system paths")
5807 (description "The goal of pathlib2 is to provide a backport of the
5808 standard @code{pathlib} module which tracks the standard library module, so
5809 all the newest features of the standard @code{pathlib} can be used also on
5810 older Python versions.")
5811 (license license:expat)))
5812
5813 (define-public python2-importlib-resources
5814 (package
5815 (name "python2-importlib-resources")
5816 (version "1.0.2")
5817 (source (origin
5818 (method url-fetch)
5819 (uri (pypi-uri "importlib_resources" version))
5820 (sha256
5821 (base32
5822 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5823 (build-system python-build-system)
5824 (arguments
5825 `(#:python ,python-2
5826 #:phases (modify-phases %standard-phases
5827 ;; The build system tests for python-wheel, but it is
5828 ;; not required for Guix nor the test suite. Just drop
5829 ;; it to make bootstrapping pytest easier.
5830 (add-after 'unpack 'drop-wheel-dependency
5831 (lambda _
5832 (substitute* "setup.cfg"
5833 (("^[[:blank:]]+wheel")
5834 ""))
5835 #t)))))
5836 (propagated-inputs
5837 `(("python-pathlib2" ,python2-pathlib2)
5838 ("python-typing" ,python2-typing)))
5839 (home-page "https://gitlab.com/python-devs/importlib_resources")
5840 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5841 (description
5842 "This package provides an implementation of @code{importlib.resources}
5843 for older versions of Python.")
5844 (license license:asl2.0)))
5845
5846 ;; For importlib-metadata-bootstrap below.
5847 (define-public python2-importlib-resources-bootstrap
5848 (hidden-package
5849 (package/inherit
5850 python2-importlib-resources
5851 (name "python2-importlib-resources-bootstrap")
5852 (propagated-inputs
5853 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
5854 ("python-typing" ,python2-typing))))))
5855
5856 (define-public python-importlib-metadata
5857 (package
5858 (name "python-importlib-metadata")
5859 (version "1.5.0")
5860 (source
5861 (origin
5862 (method url-fetch)
5863 (uri (pypi-uri "importlib_metadata" version))
5864 (sha256
5865 (base32
5866 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
5867 (build-system python-build-system)
5868 (propagated-inputs
5869 `(("python-zipp" ,python-zipp)))
5870 (native-inputs
5871 `(("python-setuptools-scm" ,python-setuptools-scm)
5872 ("python-pyfakefs" ,python-pyfakefs)
5873 ("python-packaging" ,python-packaging)))
5874 (home-page "https://importlib-metadata.readthedocs.io/")
5875 (synopsis "Read metadata from Python packages")
5876 (description
5877 "@code{importlib_metadata} is a library which provides an API for
5878 accessing an installed Python package's metadata, such as its entry points or
5879 its top-level name. This functionality intends to replace most uses of
5880 @code{pkg_resources} entry point API and metadata API. Along with
5881 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5882 need to use the older and less efficient @code{pkg_resources} package.")
5883 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5884 (license license:asl2.0)))
5885
5886 (define-public python2-importlib-metadata
5887 (let ((base (package-with-python2 (strip-python2-variant
5888 python-importlib-metadata))))
5889 (package/inherit
5890 base
5891 (name "python2-importlib-metadata")
5892 (native-inputs
5893 `(("python-setuptools-scm" ,python2-setuptools-scm)
5894 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
5895 ("python-packaging" ,python2-packaging-bootstrap)))
5896 (propagated-inputs
5897 `(("python-configparser" ,python2-configparser)
5898 ("python-contextlib2" ,python2-contextlib2)
5899 ("python-importlib-resources" ,python2-importlib-resources)
5900 ("python-pathlib2" ,python2-pathlib2)
5901 ,@(package-propagated-inputs base))))))
5902
5903 ;; This package is used by python2-pytest, and thus must not depend on it.
5904 (define-public python2-importlib-metadata-bootstrap
5905 (hidden-package
5906 (package/inherit
5907 python2-importlib-metadata
5908 (name "python2-importlib-metadata-bootstrap")
5909 (arguments
5910 `(#:tests? #f
5911 ,@(package-arguments python2-importlib-metadata)))
5912 (propagated-inputs
5913 `(("python-zipp" ,python2-zipp-bootstrap)
5914 ("python-pathlib2" ,python2-pathlib2-bootstrap)
5915 ("python-configparser" ,python2-configparser)
5916 ("python-contextlib2" ,python2-contextlib2-bootstrap)
5917 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
5918
5919 (define-public python-importmagic
5920 (package
5921 (name "python-importmagic")
5922 (version "0.1.7")
5923 (source
5924 (origin
5925 (method url-fetch)
5926 (uri (pypi-uri "importmagic" version))
5927 (sha256
5928 (base32
5929 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
5930 (build-system python-build-system)
5931 (home-page "https://github.com/alecthomas/importmagic")
5932 (synopsis "Library for adding, removing and managing Python imports")
5933 (description
5934 "Importmagic is a Python library for automatically managing imports by
5935 finding unresolved symbols in Python code and their corresponding imports.")
5936 (license license:bsd-3)))
5937
5938 (define-public python-jaraco-packaging
5939 (package
5940 (name "python-jaraco-packaging")
5941 (version "6.1")
5942 (source
5943 (origin
5944 (method url-fetch)
5945 (uri (pypi-uri "jaraco.packaging" version))
5946 (sha256
5947 (base32
5948 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5949 (build-system python-build-system)
5950 (propagated-inputs
5951 `(("python-pytest" ,python-pytest)
5952 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5953 ("python-pytest-flake8" ,python-pytest-flake8)
5954 ("python-rst.linker" ,python-rst.linker)
5955 ("python-setuptools" ,python-setuptools)
5956 ("python-setuptools-scm" ,python-setuptools-scm)
5957 ("python-six" ,python-six)
5958 ("python-sphinx" ,python-sphinx)))
5959 (home-page "https://github.com/jaraco/jaraco.packaging")
5960 (synopsis "Tools to supplement packaging Python releases")
5961 (description
5962 "This package provides various tools to supplement packaging Python
5963 releases.")
5964 (license license:expat)))
5965
5966 (define-public python-pathpy
5967 (package
5968 (name "python-pathpy")
5969 (version "11.5.1")
5970 (source
5971 (origin
5972 (method url-fetch)
5973 (uri (pypi-uri "path.py" version))
5974 (sha256
5975 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
5976 (outputs '("out" "doc"))
5977 (build-system python-build-system)
5978 (propagated-inputs
5979 `(("python-appdirs" ,python-appdirs)
5980 ("python-importlib-metadata" ,python-importlib-metadata)))
5981 (native-inputs
5982 `(("python-setuptools-scm" ,python-setuptools-scm)
5983 ("python-sphinx" ,python-sphinx)
5984 ("python-rst.linker" ,python-rst.linker)
5985 ("python-pytest" ,python-pytest)
5986 ("python-pytest-runner" ,python-pytest-runner)
5987 ("python-jaraco-packaging" ,python-jaraco-packaging)))
5988 (arguments
5989 `(#:phases
5990 (modify-phases %standard-phases
5991 (add-after 'build 'build-doc
5992 (lambda _
5993 (setenv "LANG" "en_US.UTF-8")
5994 (invoke "python" "setup.py" "build_sphinx")))
5995 (add-after 'install 'install-doc
5996 (lambda* (#:key outputs #:allow-other-keys)
5997 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5998 (doc (string-append data "/doc/" ,name "-" ,version))
5999 (html (string-append doc "/html")))
6000 (mkdir-p html)
6001 (for-each (lambda (file)
6002 (copy-file file (string-append doc "/" file)))
6003 '("README.rst" "CHANGES.rst"))
6004 (copy-recursively "build/sphinx/html" html)
6005 #t)))
6006 (replace 'check
6007 (lambda _
6008 ;; The import time test aborts if an import takes longer than
6009 ;; 100ms. It may very well take a little longer than that.
6010 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6011 (home-page "https://github.com/jaraco/path.py")
6012 (synopsis "Python module wrapper for built-in os.path")
6013 (description
6014 "@code{path.py} implements path objects as first-class entities, allowing
6015 common operations on files to be invoked on those path objects directly.")
6016 (license license:expat)))
6017
6018 (define-public python2-pathpy
6019 (package-with-python2 python-pathpy))
6020
6021 (define-public python-simplegeneric
6022 (package
6023 (name "python-simplegeneric")
6024 (version "0.8.1")
6025 (source
6026 (origin
6027 (method url-fetch)
6028 (uri (pypi-uri "simplegeneric" version ".zip"))
6029 (sha256
6030 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6031 (build-system python-build-system)
6032 (native-inputs
6033 `(("unzip" ,unzip)))
6034 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6035 (synopsis "Python module for simple generic functions")
6036 (description
6037 "The simplegeneric module lets you define simple single-dispatch generic
6038 functions, akin to Python’s built-in generic functions like @code{len()},
6039 @code{iter()} and so on. However, instead of using specially-named methods,
6040 these generic functions use simple lookup tables, akin to those used by
6041 e.g. @code{pickle.dump()} and other generic functions found in the Python
6042 standard library.")
6043 (license license:zpl2.1)))
6044
6045 (define-public python2-simplegeneric
6046 (package-with-python2 python-simplegeneric))
6047
6048 (define-public python-ipython-genutils
6049 ;; TODO: This package is retired, check if can be removed, see description.
6050 (package
6051 (name "python-ipython-genutils")
6052 (version "0.1.0")
6053 (source
6054 (origin
6055 (method url-fetch)
6056 (uri (pypi-uri "ipython_genutils" version))
6057 (sha256
6058 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6059 (build-system python-build-system)
6060 (arguments `(#:tests? #f)) ; no tests
6061 (home-page "https://ipython.org")
6062 (synopsis "Vestigial utilities from IPython")
6063 (description
6064 "This package provides retired utilities from IPython. No packages
6065 outside IPython/Jupyter should depend on it.
6066
6067 This package shouldn't exist. It contains some common utilities shared by
6068 Jupyter and IPython projects during The Big Split. As soon as possible, those
6069 packages will remove their dependency on this, and this package will go
6070 away.")
6071 (license license:bsd-3)))
6072
6073 (define-public python2-ipython-genutils
6074 (package-with-python2 python-ipython-genutils))
6075
6076 (define-public python-ipyparallel
6077 (package
6078 (name "python-ipyparallel")
6079 (version "6.2.4")
6080 (source
6081 (origin
6082 (method url-fetch)
6083 (uri (pypi-uri "ipyparallel" version))
6084 (sha256
6085 (base32
6086 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6087 (build-system python-build-system)
6088 (arguments
6089 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6090 #:phases
6091 (modify-phases %standard-phases
6092 (add-before 'check 'prepare-for-tests
6093 (lambda _
6094 (setenv "HOME" (getcwd))
6095 #t)))))
6096 (propagated-inputs
6097 `(("python-dateutil" ,python-dateutil)
6098 ("python-decorator" ,python-decorator)
6099 ("python-ipykernel" ,python-ipykernel)
6100 ("python-ipython" ,python-ipython)
6101 ("python-ipython-genutils" ,python-ipython-genutils)
6102 ("python-jupyter-client" ,python-jupyter-client)
6103 ("python-pyzmq" ,python-pyzmq)
6104 ("python-tornado" ,python-tornado)
6105 ("python-traitlets" ,python-traitlets)))
6106 (native-inputs
6107 `(("python-ipython" ,python-ipython)
6108 ("python-mock" ,python-mock)
6109 ("python-nose" ,python-nose)
6110 ("python-pytest" ,python-pytest)
6111 ("python-pytest-cov" ,python-pytest-cov)
6112 ("python-testpath" ,python-testpath)))
6113 (home-page "https://ipython.org/")
6114 (synopsis "Interactive Parallel Computing with IPython")
6115 (description
6116 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6117 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6118 CLI scripts:
6119 @enumerate
6120 @item ipcluster - start/stop a cluster
6121 @item ipcontroller - start a scheduler
6122 @item ipengine - start an engine
6123 @end enumerate")
6124 (license license:bsd-3)))
6125
6126 (define-public python2-ipyparallel
6127 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6128 (package
6129 (inherit ipyparallel)
6130 (propagated-inputs
6131 `(("python2-futures" ,python2-futures)
6132 ,@(package-propagated-inputs ipyparallel))))))
6133
6134 (define-public python-ipython-cluster-helper
6135 (package
6136 (name "python-ipython-cluster-helper")
6137 (version "0.6.4")
6138 (source
6139 (origin
6140 (method url-fetch)
6141 (uri (pypi-uri "ipython-cluster-helper" version))
6142 (sha256
6143 (base32
6144 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6145 (modules '((guix build utils)))
6146 (snippet
6147 '(begin (substitute* "requirements.txt"
6148 (("ipython.*") "ipython\n"))
6149 #t))))
6150 (build-system python-build-system)
6151 (arguments
6152 `(#:tests? #f ; Test suite can't find IPython.
6153 #:phases
6154 (modify-phases %standard-phases
6155 (replace 'check
6156 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6157 (if tests?
6158 (begin
6159 (setenv "HOME" (getcwd))
6160 (add-installed-pythonpath inputs outputs)
6161 (invoke "python" "example/example.py" "--local"))
6162 #t))))))
6163 (propagated-inputs
6164 `(("python-ipyparallel" ,python-ipyparallel)
6165 ("python-ipython" ,python-ipython)
6166 ("python-netifaces" ,python-netifaces)
6167 ("python-pyzmq" ,python-pyzmq)
6168 ("python-setuptools" ,python-setuptools)
6169 ("python-six" ,python-six)))
6170 (home-page "https://github.com/roryk/ipython-cluster-helper")
6171 (synopsis
6172 "Simplify IPython cluster start up and use for multiple schedulers")
6173 (description
6174 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6175 profile, launches a cluster and returns a view. On program exit it shuts the
6176 cluster down and deletes the throwaway profile.")
6177 (license license:expat)))
6178
6179 (define-public python2-ipython-cluster-helper
6180 (package-with-python2 python-ipython-cluster-helper))
6181
6182 (define-public python-traitlets
6183 (package
6184 (name "python-traitlets")
6185 (version "4.3.3")
6186 (source
6187 (origin
6188 (method url-fetch)
6189 (uri (pypi-uri "traitlets" version))
6190 (sha256
6191 (base32
6192 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6193 (build-system python-build-system)
6194 (arguments
6195 `(#:phases
6196 (modify-phases %standard-phases
6197 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6198 (propagated-inputs
6199 `(("python-ipython-genutils" ,python-ipython-genutils)
6200 ("python-decorator" ,python-decorator)))
6201 (native-inputs
6202 `(("python-pytest" ,python-pytest)))
6203 (properties `((python2-variant . ,(delay python2-traitlets))))
6204 (home-page "https://ipython.org")
6205 (synopsis "Configuration system for Python applications")
6206 (description
6207 "Traitlets is a framework that lets Python classes have attributes with
6208 type checking, dynamically calculated default values, and ‘on change’
6209 callbacks. The package also includes a mechanism to use traitlets for
6210 configuration, loading values from files or from command line arguments. This
6211 is a distinct layer on top of traitlets, so you can use traitlets in your code
6212 without using the configuration machinery.")
6213 (license license:bsd-3)))
6214
6215 (define-public python2-traitlets
6216 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6217 (package
6218 (inherit traitlets)
6219 (propagated-inputs
6220 `(("python2-enum34" ,python2-enum34)
6221 ,@(package-propagated-inputs traitlets))))))
6222
6223 (define-public python-jupyter-core
6224 (package
6225 (name "python-jupyter-core")
6226 (version "4.4.0")
6227 (source
6228 (origin
6229 (method url-fetch)
6230 (uri (string-append (pypi-uri "jupyter_core" version)))
6231 (sha256
6232 (base32
6233 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6234 (build-system python-build-system)
6235 ;; FIXME: not sure how to run the tests
6236 (arguments `(#:tests? #f))
6237 (propagated-inputs
6238 `(("python-traitlets" ,python-traitlets)))
6239 (home-page "http://jupyter.org/")
6240 (synopsis "Jupyter base package")
6241 (description
6242 "Jupyter core is the base package on which Jupyter projects rely.")
6243 (license license:bsd-3)))
6244
6245 (define-public python2-jupyter-core
6246 (package-with-python2 python-jupyter-core))
6247
6248 (define-public python-jupyter-client
6249 (package
6250 (name "python-jupyter-client")
6251 (version "5.2.4")
6252 (source
6253 (origin
6254 (method url-fetch)
6255 (uri (pypi-uri "jupyter_client" version))
6256 (sha256
6257 (base32
6258 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6259 (build-system python-build-system)
6260 ;; Tests fail because of missing native python kernel which I assume is
6261 ;; provided by the ipython package, which we cannot use because it would
6262 ;; cause a dependency cycle.
6263 (arguments
6264 `(#:tests? #f
6265
6266 #:phases (modify-phases %standard-phases
6267 (add-after 'unpack 'set-tool-file-names
6268 (lambda* (#:key inputs #:allow-other-keys)
6269 (let ((iproute (assoc-ref inputs "iproute")))
6270 (substitute* "jupyter_client/localinterfaces.py"
6271 (("'ip'")
6272 (string-append "'" iproute "/sbin/ip'")))
6273 #t))))))
6274 (inputs
6275 `(("iproute" ,iproute)))
6276 (propagated-inputs
6277 `(("python-pyzmq" ,python-pyzmq)
6278 ("python-traitlets" ,python-traitlets)
6279 ("python-jupyter-core" ,python-jupyter-core)))
6280 (home-page "http://jupyter.org/")
6281 (synopsis "Jupyter protocol implementation and client libraries")
6282 (description
6283 "The @code{jupyter_client} package contains the reference implementation
6284 of the Jupyter protocol. It also provides client and kernel management APIs
6285 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6286 installing @code{kernelspec}s for use with Jupyter frontends.")
6287 (license license:bsd-3)))
6288
6289 (define-public python2-jupyter-client
6290 (package-with-python2 python-jupyter-client))
6291
6292 (define-public python-ipykernel
6293 (package
6294 (name "python-ipykernel")
6295 (version "5.1.3")
6296 (source
6297 (origin
6298 (method url-fetch)
6299 (uri (pypi-uri "ipykernel" version))
6300 (sha256
6301 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6302 (build-system python-build-system)
6303 (arguments
6304 `(#:phases
6305 (modify-phases %standard-phases
6306 (replace 'check
6307 (lambda _
6308 (setenv "HOME" "/tmp")
6309 (invoke "pytest" "-v")
6310 #t))
6311 (add-after 'install 'set-python-file-name
6312 (lambda* (#:key outputs #:allow-other-keys)
6313 ;; Record the absolute file name of the 'python' executable in
6314 ;; 'kernel.json'.
6315 (let ((out (assoc-ref outputs "out")))
6316 (substitute* (string-append out "/share/jupyter"
6317 "/kernels/python3/kernel.json")
6318 (("\"python\"")
6319 (string-append "\"" (which "python") "\"")))
6320 #t))))))
6321 (propagated-inputs
6322 `(("python-ipython" ,python-ipython)
6323 ;; imported at runtime during connect
6324 ("python-jupyter-client" ,python-jupyter-client)))
6325 (native-inputs
6326 `(("python-flaky" ,python-flaky)
6327 ("python-nose" ,python-nose)
6328 ("python-pytest" ,python-pytest)))
6329 (home-page "https://ipython.org")
6330 (synopsis "IPython Kernel for Jupyter")
6331 (description
6332 "This package provides the IPython kernel for Jupyter.")
6333 (properties `((python2-variant . ,(delay python2-ipykernel))))
6334 (license license:bsd-3)))
6335
6336 ;; Version 5.x and above no longer support Python 2.
6337 (define-public python2-ipykernel
6338 (package
6339 (name "python2-ipykernel")
6340 (version "4.10.1")
6341 (source
6342 (origin
6343 (method url-fetch)
6344 (uri (pypi-uri "ipykernel" version))
6345 (sha256
6346 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6347 (build-system python-build-system)
6348 (arguments
6349 `(#:python ,python-2))
6350 (propagated-inputs
6351 `(("python2-ipython" ,python2-ipython)
6352 ;; imported at runtime during connect
6353 ("python2-jupyter-client" ,python2-jupyter-client)
6354 ("python2-tornado" ,python2-tornado)
6355 ("python2-traitlets" ,python2-traitlets)))
6356 (native-inputs
6357 `(("python2-mock" ,python2-mock)
6358 ("python2-nose" ,python2-nose)
6359 ("python2-pytest" ,python2-pytest)
6360 ("python2-pytest-cov" ,python2-pytest-cov)))
6361 (home-page "https://ipython.org")
6362 (synopsis "IPython Kernel for Jupyter")
6363 (description
6364 "This package provides the IPython kernel for Jupyter.")
6365 (license license:bsd-3)))
6366
6367 (define-public python-pari-jupyter
6368 (package
6369 (name "python-pari-jupyter")
6370 (version "1.3.2")
6371 (source
6372 (origin
6373 (method url-fetch)
6374 (uri (pypi-uri "pari_jupyter" version))
6375 (sha256
6376 (base32
6377 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6378 (build-system python-build-system)
6379 (propagated-inputs
6380 `(("python-ipykernel" ,python-ipykernel)))
6381 (inputs
6382 `(("pari-gp" ,pari-gp)
6383 ("readline" ,readline)))
6384 (arguments
6385 `(#:tests? #f)) ; no test suite
6386 (home-page
6387 "https://github.com/jdemeyer/pari_jupyter")
6388 (synopsis "A Jupyter kernel for PARI/GP")
6389 (description "The package provides a PARI/GP kernel for Jupyter.")
6390 (license license:gpl3+)))
6391
6392 (define-public python-backcall
6393 (package
6394 (name "python-backcall")
6395 (version "0.1.0")
6396 (source
6397 (origin
6398 (method url-fetch)
6399 (uri (pypi-uri "backcall" version))
6400 (sha256
6401 (base32
6402 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6403 (build-system python-build-system)
6404 (home-page "https://github.com/takluyver/backcall/")
6405 (synopsis "Specifications for callback functions passed in to an API")
6406 (description
6407 "If your code lets other people supply callback functions, it's important
6408 to specify the function signature you expect, and check that functions support
6409 that. Adding extra parameters later would break other peoples code unless
6410 you're careful. The @code{backcall} package provides a way of specifying the
6411 callback signature using a prototype function.")
6412 (license license:bsd-3)))
6413
6414 (define-public python-ipython
6415 (package
6416 (name "python-ipython")
6417 (version "7.9.0")
6418 (source
6419 (origin
6420 (method url-fetch)
6421 (uri (pypi-uri "ipython" version ".tar.gz"))
6422 (sha256
6423 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6424 (build-system python-build-system)
6425 (propagated-inputs
6426 `(("python-backcall" ,python-backcall)
6427 ("python-pyzmq" ,python-pyzmq)
6428 ("python-prompt-toolkit" ,python-prompt-toolkit)
6429 ("python-terminado" ,python-terminado)
6430 ("python-matplotlib" ,python-matplotlib)
6431 ("python-numpy" ,python-numpy)
6432 ("python-numpydoc" ,python-numpydoc)
6433 ("python-jedi" ,python-jedi)
6434 ("python-jinja2" ,python-jinja2)
6435 ("python-mistune" ,python-mistune)
6436 ("python-pexpect" ,python-pexpect)
6437 ("python-pickleshare" ,python-pickleshare)
6438 ("python-simplegeneric" ,python-simplegeneric)
6439 ("python-jsonschema" ,python-jsonschema)
6440 ("python-traitlets" ,python-traitlets)
6441 ("python-nbformat" ,python-nbformat)
6442 ("python-pygments" ,python-pygments)))
6443 (inputs
6444 `(("readline" ,readline)
6445 ("which" ,which)))
6446 (native-inputs
6447 `(("graphviz" ,graphviz)
6448 ("pkg-config" ,pkg-config)
6449 ("python-requests" ,python-requests) ;; for tests
6450 ("python-testpath" ,python-testpath)
6451 ("python-nose" ,python-nose)))
6452 (arguments
6453 `(#:phases
6454 (modify-phases %standard-phases
6455 (add-after 'unpack 'make-docs-reproducible
6456 (lambda _
6457 (substitute* "IPython/sphinxext/ipython_directive.py"
6458 ((".*import datetime") "")
6459 ((".*datetime.datetime.now\\(\\)") "")
6460 (("%timeit") "# %timeit"))
6461 #t))
6462 ;; Tests can only be run after the library has been installed and not
6463 ;; within the source directory.
6464 (delete 'check)
6465 (add-after 'install 'check
6466 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6467 (if tests?
6468 (begin
6469 ;; Make installed package available for running the tests
6470 (add-installed-pythonpath inputs outputs)
6471 (setenv "HOME" "/tmp/") ;; required by a test
6472 ;; We only test the core because one of the other tests
6473 ;; tries to import ipykernel.
6474 (invoke "python" "IPython/testing/iptest.py"
6475 "-v" "IPython/core/tests"))
6476 #t)))
6477 (add-before 'check 'fix-tests
6478 (lambda* (#:key inputs #:allow-other-keys)
6479 (substitute* "./IPython/utils/_process_posix.py"
6480 (("/usr/bin/env', 'which") (which "which")))
6481 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6482 (("#!/usr/bin/env python")
6483 (string-append "#!" (which "python"))))
6484 ;; This test introduces a circular dependency on ipykernel
6485 ;; (which depends on ipython).
6486 (delete-file "IPython/core/tests/test_display.py")
6487 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6488 (delete-file "IPython/core/tests/test_interactiveshell.py")
6489 #t)))))
6490 (home-page "https://ipython.org")
6491 (synopsis "IPython is a tool for interactive computing in Python")
6492 (description
6493 "IPython provides a rich architecture for interactive computing with:
6494 Powerful interactive shells, a browser-based notebook, support for interactive
6495 data visualization, embeddable interpreters and tools for parallel
6496 computing.")
6497 (properties `((python2-variant . ,(delay python2-ipython))))
6498 (license license:bsd-3)))
6499
6500 ;; This is the latest release of the LTS version of ipython with support for
6501 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6502 ;; dropped support for Python 2.7.
6503 (define-public python2-ipython
6504 (package
6505 (name "python2-ipython")
6506 (version "5.8.0")
6507 (source
6508 (origin
6509 (method url-fetch)
6510 (uri (pypi-uri "ipython" version ".tar.gz"))
6511 (sha256
6512 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6513 (build-system python-build-system)
6514 (propagated-inputs
6515 `(("python2-backports-shutil-get-terminal-size"
6516 ,python2-backports-shutil-get-terminal-size)
6517 ("python2-pathlib2" ,python2-pathlib2)
6518 ("python2-pyzmq" ,python2-pyzmq)
6519 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6520 ("python2-terminado" ,python2-terminado)
6521 ("python2-matplotlib" ,python2-matplotlib)
6522 ("python2-numpy" ,python2-numpy)
6523 ("python2-numpydoc" ,python2-numpydoc)
6524 ("python2-jinja2" ,python2-jinja2)
6525 ("python2-mistune" ,python2-mistune)
6526 ("python2-pexpect" ,python2-pexpect)
6527 ("python2-pickleshare" ,python2-pickleshare)
6528 ("python2-simplegeneric" ,python2-simplegeneric)
6529 ("python2-jsonschema" ,python2-jsonschema)
6530 ("python2-traitlets" ,python2-traitlets)
6531 ("python2-nbformat" ,python2-nbformat)
6532 ("python2-pygments" ,python2-pygments)))
6533 (inputs
6534 `(("readline" ,readline)
6535 ("which" ,which)))
6536 (native-inputs
6537 `(("graphviz" ,graphviz)
6538 ("pkg-config" ,pkg-config)
6539 ("python2-requests" ,python2-requests) ;; for tests
6540 ("python2-testpath" ,python2-testpath)
6541 ("python2-mock" ,python2-mock)
6542 ("python2-nose" ,python2-nose)))
6543 (arguments
6544 `(#:python ,python-2
6545 #:phases
6546 (modify-phases %standard-phases
6547 (add-before 'check 'delete-broken-tests
6548 (lambda* (#:key inputs #:allow-other-keys)
6549 ;; These tests throw errors for unknown reasons.
6550 (delete-file "IPython/core/tests/test_displayhook.py")
6551 (delete-file "IPython/core/tests/test_magic_terminal.py")
6552 (delete-file "IPython/core/tests/test_profile.py")
6553 #t)))))
6554 (home-page "https://ipython.org")
6555 (synopsis "IPython is a tool for interactive computing in Python")
6556 (description
6557 "IPython provides a rich architecture for interactive computing with:
6558 Powerful interactive shells, a browser-based notebook, support for interactive
6559 data visualization, embeddable interpreters and tools for parallel
6560 computing.")
6561 (license license:bsd-3)))
6562
6563 (define-public python-ipython-documentation
6564 (package
6565 (inherit python-ipython)
6566 (name "python-ipython-documentation")
6567 (version (package-version python-ipython))
6568 (arguments
6569 `(#:phases
6570 (modify-phases %standard-phases
6571 (delete 'build)
6572 (delete 'check)
6573 (replace 'install
6574 (lambda* (#:key outputs #:allow-other-keys)
6575 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6576 (doc (string-append data "/doc/" ,name "-" ,version))
6577 (html (string-append doc "/html"))
6578 (man1 (string-append data "/man/man1"))
6579 (info (string-append data "/info"))
6580 (examples (string-append doc "/examples"))
6581 (python-arg (string-append "PYTHON=" (which "python"))))
6582 (setenv "LANG" "en_US.utf8")
6583 (with-directory-excursion "docs"
6584 ;; FIXME: pdf fails to build
6585 ;;(system* "make" "pdf" "PAPER=a4")
6586 (system* "make" python-arg "html")
6587 ;; FIXME: the generated texi file contains ^@^@, which trips
6588 ;; up the parser.
6589 ;; (system* "make" python-arg "info")
6590 )
6591 (copy-recursively "docs/man" man1)
6592 (copy-recursively "examples" examples)
6593 (copy-recursively "docs/build/html" html)
6594 ;; (copy-file "docs/build/latex/ipython.pdf"
6595 ;; (string-append doc "/ipython.pdf"))
6596 (mkdir-p info)
6597 ;; (copy-file "docs/build/texinfo/ipython.info"
6598 ;; (string-append info "/ipython.info"))
6599 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6600 #t)))))
6601 (inputs
6602 `(("python-ipython" ,python-ipython)
6603 ("python-ipykernel" ,python-ipykernel)))
6604 (native-inputs
6605 `(("python-sphinx" ,python-sphinx)
6606 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6607 ;; FIXME: It's possible that a smaller union would work just as well.
6608 ("texlive" ,(texlive-union (list texlive-amsfonts
6609 texlive-fonts-ec
6610 texlive-generic-ifxetex
6611 texlive-generic-pdftex
6612 texlive-latex-capt-of
6613 texlive-latex-cmap
6614 texlive-latex-environ
6615 texlive-latex-eqparbox
6616 texlive-latex-etoolbox
6617 texlive-latex-expdlist
6618 texlive-latex-fancyhdr
6619 texlive-latex-fancyvrb
6620 texlive-latex-fncychap
6621 texlive-latex-float
6622 texlive-latex-framed
6623 texlive-latex-geometry
6624 texlive-latex-graphics
6625 texlive-latex-hyperref
6626 texlive-latex-mdwtools
6627 texlive-latex-multirow
6628 texlive-latex-needspace
6629 texlive-latex-oberdiek
6630 texlive-latex-parskip
6631 texlive-latex-preview
6632 texlive-latex-tabulary
6633 texlive-latex-threeparttable
6634 texlive-latex-titlesec
6635 texlive-latex-trimspaces
6636 texlive-latex-ucs
6637 texlive-latex-upquote
6638 texlive-latex-url
6639 texlive-latex-varwidth
6640 texlive-latex-wrapfig)))
6641 ("texinfo" ,texinfo)))))
6642
6643 (define-public python-urwid
6644 (package
6645 (name "python-urwid")
6646 (version "2.1.0")
6647 (source
6648 (origin
6649 (method url-fetch)
6650 (uri (pypi-uri "urwid" version))
6651 (sha256
6652 (base32
6653 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6654 (build-system python-build-system)
6655 (home-page "http://urwid.org")
6656 (synopsis "Console user interface library for Python")
6657 (description
6658 "Urwid is a curses-based UI/widget library for Python. It includes many
6659 features useful for text console applications.")
6660 (license license:lgpl2.1+)))
6661
6662 (define-public python2-urwid
6663 (package-with-python2 python-urwid))
6664
6665 (define-public python-urwidtrees
6666 (package
6667 (name "python-urwidtrees")
6668 (version "1.0.2")
6669 (source
6670 (origin
6671 (method git-fetch)
6672 ;; package author intends on distributing via github rather than pypi:
6673 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6674 (uri (git-reference
6675 (url "https://github.com/pazz/urwidtrees")
6676 (commit version)))
6677 (file-name (git-file-name name version))
6678 (sha256
6679 (base32
6680 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6681 (build-system python-build-system)
6682 (arguments
6683 '(#:use-setuptools? #f
6684 #:tests? #f)) ; no tests
6685 (propagated-inputs `(("python-urwid" ,python-urwid)))
6686 (home-page "https://github.com/pazz/urwidtrees")
6687 (synopsis "Tree widgets for urwid")
6688 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6689 toolkit. Use it to build trees of widgets.")
6690 (license license:gpl3+)))
6691
6692 (define-public python2-urwidtrees
6693 (package-with-python2 python-urwidtrees))
6694
6695 (define-public python-ua-parser
6696 (package
6697 (name "python-ua-parser")
6698 (version "0.8.0")
6699 (source
6700 (origin
6701 (method url-fetch)
6702 (uri (pypi-uri "ua-parser" version))
6703 (sha256
6704 (base32
6705 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6706 (build-system python-build-system)
6707 (arguments
6708 `(#:tests? #f)) ;no test suite in release
6709 (native-inputs
6710 `(("python-pyyaml" ,python-pyyaml)))
6711 (home-page "https://github.com/ua-parser/uap-python")
6712 (synopsis "User agent parser")
6713 (description
6714 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6715 (license license:asl2.0)))
6716
6717 (define-public python2-ua-parser
6718 (package-with-python2 python-ua-parser))
6719
6720 (define-public python-user-agents
6721 (package
6722 (name "python-user-agents")
6723 (version "1.1.0")
6724 (source
6725 (origin
6726 (method url-fetch)
6727 (uri (pypi-uri "user-agents" version))
6728 (sha256
6729 (base32
6730 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6731 (build-system python-build-system)
6732 (arguments
6733 `(#:tests? #f)) ;missing devices.json test file in release
6734 (propagated-inputs
6735 `(("python-ua-parser" ,python-ua-parser)))
6736 (home-page "https://github.com/selwin/python-user-agents")
6737 (synopsis "User Agent strings parsing library")
6738 (description
6739 "A library to identify devices (phones, tablets) and their capabilities by
6740 parsing (browser/HTTP) user agent strings.")
6741 (license license:expat)))
6742
6743 (define-public python2-user-agents
6744 (package-with-python2 python-user-agents))
6745
6746 (define-public python-dbus
6747 (package
6748 (name "python-dbus")
6749 (version "1.2.14")
6750 (source
6751 (origin
6752 (method url-fetch)
6753 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6754 "dbus-python-" version ".tar.gz"))
6755 (sha256
6756 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6757 (build-system gnu-build-system)
6758 (native-inputs
6759 `(("pkg-config" ,pkg-config)))
6760 (inputs
6761 `(("python" ,python-wrapper)
6762 ("dbus-glib" ,dbus-glib)))
6763 (synopsis "Python bindings for D-bus")
6764 (description "python-dbus provides bindings for libdbus, the reference
6765 implementation of D-Bus.")
6766 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6767 (license license:expat)))
6768
6769 (define-public python2-dbus
6770 (package (inherit python-dbus)
6771 (name "python2-dbus")
6772 (inputs `(("python" ,python-2)
6773 ,@(alist-delete "python"
6774 (package-inputs python-dbus)
6775 equal?)))))
6776
6777 (define-public python-notify2
6778 (package
6779 (name "python-notify2")
6780 (version "0.3.1")
6781 (source
6782 (origin
6783 (method url-fetch)
6784 (uri (pypi-uri "notify2" version))
6785 (sha256
6786 (base32
6787 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6788 (build-system python-build-system)
6789 (arguments `(#:tests? #f)) ; tests depend on system state
6790 (native-inputs
6791 `(("python-dbus" ,python-dbus)))
6792 (home-page "https://bitbucket.org/takluyver/pynotify2")
6793 (synopsis "Python interface to D-Bus notifications")
6794 (description
6795 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6796 It is a reimplementation of pynotify in pure Python, and an alternative to
6797 the GObject Introspection bindings to libnotify for non-GTK applications.")
6798 (license (list license:bsd-2
6799 license:lgpl2.1+))))
6800
6801 (define-public python2-notify2
6802 (package-with-python2 python-notify2))
6803
6804 ;; beautifulsoup4 has a totally different namespace than 3.x,
6805 ;; and pypi seems to put it under its own name, so I guess we should too
6806 (define-public python-beautifulsoup4
6807 (package
6808 (name "python-beautifulsoup4")
6809 (version "4.7.1")
6810 (source
6811 (origin
6812 (method url-fetch)
6813 (uri (pypi-uri "beautifulsoup4" version))
6814 (sha256
6815 (base32
6816 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6817 (build-system python-build-system)
6818 (arguments
6819 `(#:phases
6820 (modify-phases %standard-phases
6821 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6822 ;; must use this conversion script when building with Python 3. The
6823 ;; conversion script also runs the tests.
6824 ;; For more information, see the file 'convert-py3k' in the source
6825 ;; distribution.
6826 (replace 'check
6827 (lambda _ (invoke "./convert-py3k"))))))
6828 (propagated-inputs
6829 `(("python-soupsieve" ,python-soupsieve)))
6830 (home-page
6831 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6832 (synopsis
6833 "Python screen-scraping library")
6834 (description
6835 "Beautiful Soup is a Python library designed for rapidly setting up
6836 screen-scraping projects. It offers Pythonic idioms for navigating,
6837 searching, and modifying a parse tree, providing a toolkit for
6838 dissecting a document and extracting what you need. It automatically
6839 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6840 (license license:expat)
6841 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6842
6843 (define-public python2-beautifulsoup4
6844 (package
6845 (inherit (package-with-python2
6846 (strip-python2-variant python-beautifulsoup4)))
6847 (arguments `(#:python ,python-2))))
6848
6849 (define-public python-soupsieve
6850 (package
6851 (name "python-soupsieve")
6852 (version "1.9.5")
6853 (source
6854 (origin
6855 (method url-fetch)
6856 (uri (pypi-uri "soupsieve" version))
6857 (sha256
6858 (base32
6859 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6860 (build-system python-build-system)
6861 (arguments `(#:tests? #f))
6862 ;;XXX: 2 tests fail currently despite claming they were to be
6863 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6864 ;;don't want to create a circular dependency.
6865 (home-page "https://github.com/facelessuser/soupsieve")
6866 (synopsis "CSS selector library")
6867 (description
6868 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6869 Soup 4. It aims to provide selecting, matching, and filtering using modern
6870 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6871 specifications up through the latest CSS level 4 drafts and beyond (though
6872 some are not yet implemented).")
6873 (properties `((python2-variant . ,(delay python2-soupsieve))))
6874 (license license:expat)))
6875
6876 (define-public python2-soupsieve
6877 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6878 (package
6879 (inherit base)
6880 (propagated-inputs
6881 `(("python2-backports-functools-lru-cache"
6882 ,python2-backports-functools-lru-cache)
6883 ,@(package-propagated-inputs base))))))
6884
6885 (define-public python-netifaces
6886 (package
6887 (name "python-netifaces")
6888 (version "0.10.7")
6889 (source
6890 (origin
6891 (method url-fetch)
6892 (uri (pypi-uri "netifaces" version))
6893 (sha256
6894 (base32
6895 "1gccklrcplbbqh81g1mdgpa5y8na7kkf29cq2ka3f5a2fp5hyndx"))))
6896 (build-system python-build-system)
6897 (home-page "https://github.com/al45tair/netifaces")
6898 (synopsis
6899 "Python module for portable network interface information")
6900 (description
6901 "Netifaces is a Python module providing information on network
6902 interfaces in an easy and portable manner.")
6903 (license license:expat)))
6904
6905 (define-public python2-netifaces
6906 (package-with-python2 python-netifaces))
6907
6908 (define-public python-networkx
6909 (package
6910 (name "python-networkx")
6911 (version "2.4")
6912 (source
6913 (origin
6914 (method url-fetch)
6915 (uri (pypi-uri "networkx" version))
6916 (sha256
6917 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6918 (build-system python-build-system)
6919 (arguments
6920 '(#:phases (modify-phases %standard-phases
6921 (replace 'check
6922 (lambda* (#:key tests? #:allow-other-keys)
6923 (if tests?
6924 (invoke "pytest" "-vv" "--pyargs" "networkx")
6925 (format #t "test suite not run~%"))
6926 #t)))))
6927 ;; python-decorator is needed at runtime.
6928 (propagated-inputs
6929 `(("python-decorator" ,python-decorator)))
6930 (native-inputs
6931 `(("python-pytest" ,python-pytest)))
6932 (home-page "https://networkx.github.io/")
6933 (synopsis "Python module for creating and manipulating graphs and networks")
6934 (description
6935 "NetworkX is a Python package for the creation, manipulation, and study
6936 of the structure, dynamics, and functions of complex networks.")
6937 (properties `((python2-variant . ,(delay python2-networkx))))
6938 (license license:bsd-3)))
6939
6940 ;; NetworkX 2.2 is the last version with support for Python 2.
6941 (define-public python2-networkx
6942 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6943 (package
6944 (inherit base)
6945 (version "2.2")
6946 (source (origin
6947 (method url-fetch)
6948 (uri (pypi-uri "networkx" version ".zip"))
6949 (sha256
6950 (base32
6951 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6952 (arguments
6953 `(#:python ,python-2))
6954 (native-inputs
6955 `(("python-nose" ,python2-nose)
6956 ("unzip" ,unzip))))))
6957
6958 (define-public python-datrie
6959 (package
6960 (name "python-datrie")
6961 (version "0.8.2")
6962 (source
6963 (origin
6964 (method url-fetch)
6965 (uri (pypi-uri "datrie" version))
6966 (sha256
6967 (base32
6968 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6969 (build-system python-build-system)
6970 (native-inputs
6971 `(("python-cython" ,python-cython)
6972 ("python-hypothesis" ,python-hypothesis)
6973 ("python-pytest" ,python-pytest)
6974 ("python-pytest-runner" ,python-pytest-runner)))
6975 (home-page "https://github.com/kmike/datrie")
6976 (synopsis "Fast, efficiently stored trie for Python")
6977 (description
6978 "This package provides a fast, efficiently stored trie implementation for
6979 Python.")
6980 (license license:lgpl2.1+)))
6981
6982 (define-public snakemake
6983 (package
6984 (name "snakemake")
6985 (version "5.7.1")
6986 (source
6987 (origin
6988 (method url-fetch)
6989 (uri (pypi-uri "snakemake" version))
6990 (sha256
6991 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
6992 (build-system python-build-system)
6993 (arguments
6994 ;; TODO: Package missing test dependencies.
6995 '(#:tests? #f
6996 #:phases
6997 (modify-phases %standard-phases
6998 ;; For cluster execution Snakemake will call Python. Since there is
6999 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7000 ;; this by calling the snakemake wrapper instead.
7001 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7002 (lambda* (#:key outputs #:allow-other-keys)
7003 (substitute* "snakemake/executors.py"
7004 (("\\{sys.executable\\} -m snakemake")
7005 (string-append (assoc-ref outputs "out")
7006 "/bin/snakemake")))
7007 #t)))))
7008 (propagated-inputs
7009 `(("python-appdirs" ,python-appdirs)
7010 ("python-configargparse" ,python-configargparse)
7011 ("python-datrie" ,python-datrie)
7012 ("python-docutils" ,python-docutils)
7013 ("python-gitpython" ,python-gitpython)
7014 ("python-jinja2" ,python-jinja2)
7015 ("python-jsonschema" ,python-jsonschema)
7016 ("python-networkx" ,python-networkx)
7017 ("python-psutil" ,python-psutil)
7018 ("python-pyyaml" ,python-pyyaml)
7019 ("python-ratelimiter" ,python-ratelimiter)
7020 ("python-requests" ,python-requests)
7021 ("python-wrapt" ,python-wrapt)))
7022 (home-page "https://snakemake.readthedocs.io")
7023 (synopsis "Python-based execution environment for make-like workflows")
7024 (description
7025 "Snakemake aims to reduce the complexity of creating workflows by
7026 providing a clean and modern domain specific specification language (DSL) in
7027 Python style, together with a fast and comfortable execution environment.")
7028 (license license:expat)))
7029
7030 (define-public python-pyqrcode
7031 (package
7032 (name "python-pyqrcode")
7033 (version "1.2.1")
7034 (source
7035 (origin
7036 (method url-fetch)
7037 (uri (pypi-uri "PyQRCode" version))
7038 (sha256
7039 (base32
7040 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7041 (build-system python-build-system)
7042 (home-page
7043 "https://github.com/mnooner256/pyqrcode")
7044 (synopsis "QR code generator")
7045 (description
7046 "Pyqrcode is a QR code generator written purely in Python with
7047 SVG, EPS, PNG and terminal output.")
7048 (license license:bsd-3)))
7049
7050 (define-public python-seaborn
7051 (package
7052 (name "python-seaborn")
7053 (version "0.10.0")
7054 (source
7055 (origin
7056 (method url-fetch)
7057 (uri (pypi-uri "seaborn" version))
7058 (sha256
7059 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7060 (build-system python-build-system)
7061 (arguments
7062 `(#:phases
7063 (modify-phases %standard-phases
7064 (add-before 'check 'start-xserver
7065 (lambda* (#:key inputs #:allow-other-keys)
7066 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7067 ;; There must be a running X server and make check doesn't
7068 ;; start one. Therefore we must do it.
7069 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7070 (setenv "DISPLAY" ":1")
7071 #t)))
7072 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7073 (propagated-inputs
7074 `(("python-pandas" ,python-pandas)
7075 ("python-matplotlib" ,python-matplotlib)
7076 ("python-numpy" ,python-numpy)
7077 ("python-scipy" ,python-scipy)))
7078 (native-inputs
7079 `(("python-pytest" ,python-pytest)
7080 ("xorg-server" ,xorg-server-for-tests)))
7081 (home-page "https://seaborn.pydata.org/")
7082 (synopsis "Statistical data visualization")
7083 (description
7084 "Seaborn is a library for making attractive and informative statistical
7085 graphics in Python. It is built on top of matplotlib and tightly integrated
7086 with the PyData stack, including support for numpy and pandas data structures
7087 and statistical routines from scipy and statsmodels.")
7088 (properties `((python2-variant . ,(delay python2-seaborn))))
7089 (license license:bsd-3)))
7090
7091 ;; 0.9.1 is the last release with support for Python 2.
7092 (define-public python2-seaborn
7093 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7094 (package
7095 (inherit base)
7096 (version "0.9.1")
7097 (source (origin
7098 (method url-fetch)
7099 (uri (pypi-uri "seaborn" version))
7100 (sha256
7101 (base32
7102 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7103
7104 (define-public python-mpmath
7105 (package
7106 (name "python-mpmath")
7107 (version "0.19")
7108 (source (origin
7109 (method url-fetch)
7110 (uri (string-append "http://mpmath.org/files/mpmath-"
7111 version ".tar.gz"))
7112 (sha256
7113 (base32
7114 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7115 (build-system python-build-system)
7116 (arguments
7117 '(#:phases
7118 (modify-phases %standard-phases
7119 (replace 'check
7120 (lambda _
7121 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7122 (home-page "http://mpmath.org")
7123 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7124 (description
7125 "@code{mpmath} can be used as an arbitrary-precision substitute for
7126 Python's float/complex types and math/cmath modules, but also does much
7127 more advanced mathematics.")
7128 (license license:bsd-3)))
7129
7130 (define-public python2-mpmath
7131 (package-with-python2 python-mpmath))
7132
7133 (define-public python-bigfloat
7134 (package
7135 (name "python-bigfloat")
7136 (version "0.3.0")
7137 (source
7138 (origin
7139 (method url-fetch)
7140 (uri (pypi-uri "bigfloat" version))
7141 (sha256
7142 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7143 (build-system python-build-system)
7144 (inputs
7145 `(("mpfr" ,mpfr)))
7146 (home-page "https://github.com/mdickinson/bigfloat")
7147 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7148 (description
7149 "This package provides a Python interface to the MPFR library for
7150 multiprecision arithmetic.")
7151 (license license:lgpl3+)))
7152
7153 (define-public python2-bigfloat
7154 (package-with-python2 python-bigfloat))
7155
7156 (define-public python-sympy
7157 (package
7158 (name "python-sympy")
7159 (version "1.1.1")
7160 (source
7161 (origin
7162 (method url-fetch)
7163 (uri (string-append
7164 "https://github.com/sympy/sympy/releases/download/sympy-"
7165 version "/sympy-" version ".tar.gz"))
7166 (sha256
7167 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7168 (build-system python-build-system)
7169 (arguments
7170 `(#:phases
7171 (modify-phases %standard-phases
7172 ;; Run the core tests after installation. By default it would run
7173 ;; *all* tests, which take a very long time to complete and are known
7174 ;; to be flaky.
7175 (delete 'check)
7176 (add-after 'install 'check
7177 (lambda* (#:key outputs #:allow-other-keys)
7178 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7179 #t)))))
7180 (propagated-inputs
7181 `(("python-mpmath" ,python-mpmath)))
7182 (home-page "https://www.sympy.org/")
7183 (synopsis "Python library for symbolic mathematics")
7184 (description
7185 "SymPy is a Python library for symbolic mathematics. It aims to become a
7186 full-featured computer algebra system (CAS) while keeping the code as simple
7187 as possible in order to be comprehensible and easily extensible.")
7188 (license license:bsd-3)))
7189
7190 (define-public python2-sympy
7191 (package
7192 (inherit (package-with-python2 python-sympy))
7193 (arguments
7194 `(#:phases
7195 (modify-phases %standard-phases
7196 ;; Run the core tests after installation. By default it would run
7197 ;; *all* tests, which take a very long time to complete and are known
7198 ;; to be flaky.
7199 (delete 'check)
7200 (add-after 'install 'check
7201 (lambda* (#:key outputs #:allow-other-keys)
7202 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7203 #t)))))))
7204
7205 (define-public python-q
7206 (package
7207 (name "python-q")
7208 (version "2.6")
7209 (source
7210 (origin
7211 (method url-fetch)
7212 (uri (pypi-uri "q" version))
7213 (sha256
7214 (base32
7215 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7216 (build-system python-build-system)
7217 (home-page "https://github.com/zestyping/q")
7218 (synopsis "Quick-and-dirty debugging output for tired programmers")
7219 (description
7220 "q is a Python module for \"print\" style of debugging Python code. It
7221 provides convenient short API for print out of values, tracebacks, and
7222 falling into the Python interpreter.")
7223 (license license:asl2.0)))
7224
7225 (define-public python2-q
7226 (package-with-python2 python-q))
7227
7228 (define-public python2-xlib
7229 (package
7230 (name "python2-xlib")
7231 (version "0.14")
7232 (source (origin
7233 (method url-fetch)
7234 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7235 "/" version "/"
7236 "python-xlib-" version ".tar.gz"))
7237 (sha256
7238 (base32
7239 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7240 (build-system python-build-system)
7241 (arguments
7242 `(#:python ,python-2 ;Python 2 only
7243 #:tests? #f)) ;no tests
7244 (home-page "http://python-xlib.sourceforge.net/")
7245 (synopsis "Python X11 client library")
7246 (description
7247 "The Python X Library is intended to be a fully functional X client
7248 library for Python programs. It is useful to implement low-level X clients.
7249 It is written entirely in Python.")
7250 (license license:gpl2+)))
7251
7252 (define-public python-singledispatch
7253 (package
7254 (name "python-singledispatch")
7255 (version "3.4.0.3")
7256 (source
7257 (origin
7258 (method url-fetch)
7259 (uri (pypi-uri "singledispatch" version))
7260 (sha256
7261 (base32
7262 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7263 (build-system python-build-system)
7264 (native-inputs
7265 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7266 (home-page
7267 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7268 (synopsis "Backport of singledispatch feature from Python 3.4")
7269 (description
7270 "This library brings functools.singledispatch from Python 3.4 to Python
7271 2.6-3.3.")
7272 (license license:expat)))
7273
7274 (define-public python2-singledispatch
7275 (package-with-python2 python-singledispatch))
7276
7277 ;; the python- version can be removed with python-3.5
7278 (define-public python-backports-abc
7279 (package
7280 (name "python-backports-abc")
7281 (version "0.5")
7282 (source
7283 (origin
7284 (method url-fetch)
7285 (uri (pypi-uri "backports_abc" version))
7286 (sha256
7287 (base32
7288 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7289 (build-system python-build-system)
7290 (home-page "https://github.com/cython/backports_abc")
7291 (synopsis "Backport of additions to the 'collections.abc' module")
7292 (description
7293 "Python-backports-abc provides a backport of additions to the
7294 @code{collections.abc} module in Python-3.5.")
7295 (license license:psfl)))
7296
7297 (define-public python2-backports-abc
7298 (package-with-python2 python-backports-abc))
7299
7300 (define-public python-backports-csv
7301 (package
7302 (name "python-backports-csv")
7303 (version "1.0.5")
7304 (source
7305 (origin
7306 (method url-fetch)
7307 (uri (pypi-uri "backports.csv" version))
7308 (sha256
7309 (base32
7310 "1imzbrradkfn8s2m1qcimyn74dn1mz2p3j381jljn166rf2i6hlc"))))
7311 (build-system python-build-system)
7312 (home-page "https://github.com/ryanhiebert/backports.csv")
7313 (synopsis "Backport of Python 3's csv module for Python 2")
7314 (description
7315 "Provides a backport of Python 3's @code{csv} module for parsing
7316 comma separated values. The API of the @code{csv} module in Python 2
7317 is drastically different from the @code{csv} module in Python 3.
7318 This is due, for the most part, to the difference between str in
7319 Python 2 and Python 3.")
7320 (license license:psfl)))
7321
7322 (define-public python2-backports-csv
7323 (package-with-python2 python-backports-csv))
7324
7325 (define-public python2-backports-shutil-get-terminal-size
7326 (package
7327 (name "python2-backports-shutil-get-terminal-size")
7328 (version "1.0.0")
7329 (source
7330 (origin
7331 (method url-fetch)
7332 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7333 (sha256
7334 (base32
7335 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7336 (build-system python-build-system)
7337 (arguments
7338 `(#:python ,python-2
7339 #:phases
7340 (modify-phases %standard-phases
7341 (replace 'check
7342 (lambda _
7343 (setenv "PYTHONPATH" (string-append "./build/lib:"
7344 (getenv "PYTHONPATH")))
7345 (invoke "py.test" "-v"))))))
7346 (native-inputs
7347 `(("python2-pytest" ,python2-pytest)))
7348 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7349 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7350 (description
7351 "This package provides a backport of the @code{get_terminal_size
7352 function} from Python 3.3's @code{shutil}.
7353 Unlike the original version it is written in pure Python rather than C,
7354 so it might be a tiny bit slower.")
7355 (license license:expat)))
7356
7357 (define-public python-waf
7358 (package
7359 (name "python-waf")
7360 (version "2.0.19")
7361 (source (origin
7362 (method url-fetch)
7363 (uri (string-append "https://waf.io/"
7364 "waf-" version ".tar.bz2"))
7365 (sha256
7366 (base32
7367 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7368 (build-system python-build-system)
7369 (arguments
7370 '(#:phases
7371 (modify-phases %standard-phases
7372 (replace 'build
7373 (lambda _
7374 ;; XXX: Find a way to add all extra tools.
7375 (let ((tools '("gccdeps"
7376 "clang_compilation_database")))
7377 (invoke "python" "waf-light" "configure" "build"
7378 (string-append "--tools="
7379 (string-join tools ","))))))
7380 (replace 'check
7381 (lambda _
7382 (invoke "python" "waf" "--version")))
7383 (replace 'install
7384 (lambda* (#:key outputs #:allow-other-keys)
7385 (let ((out (assoc-ref outputs "out")))
7386 (install-file "waf" (string-append out "/bin")))
7387 #t))
7388 ;; waf breaks when it is wrapped.
7389 (delete 'wrap))))
7390 (home-page "https://waf.io/")
7391 (synopsis "Python-based build system")
7392 (description
7393 "Waf is a Python-based framework for configuring, compiling and installing
7394 applications.")
7395 (license license:bsd-3)))
7396
7397 (define-public python2-waf
7398 (package-with-python2 python-waf))
7399
7400 (define-public python-pyzmq
7401 (package
7402 (name "python-pyzmq")
7403 (version "17.1.2")
7404 (source
7405 (origin
7406 (method url-fetch)
7407 (uri (pypi-uri "pyzmq" version))
7408 (sha256
7409 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7410 (build-system python-build-system)
7411 (arguments
7412 `(#:configure-flags
7413 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7414 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7415 ;; --inplace' for 'python setup.py test' to work.
7416 #:tests? #f))
7417 (inputs
7418 `(("zeromq" ,zeromq)))
7419 (native-inputs
7420 `(("pkg-config" ,pkg-config)
7421 ("python-nose" ,python-nose)))
7422 (home-page "https://github.com/zeromq/pyzmq")
7423 (synopsis "Python bindings for 0MQ")
7424 (description
7425 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7426 (license license:bsd-4)))
7427
7428 (define-public python2-pyzmq
7429 (package-with-python2 python-pyzmq))
7430
7431 (define-public python-pep8
7432 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7433 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7434 ;; some dependents' test suites, and nothing more.
7435 (package
7436 (name "python-pep8")
7437 (version "1.7.0")
7438 (source
7439 (origin
7440 (method url-fetch)
7441 (uri (pypi-uri "pep8" version))
7442 (sha256
7443 (base32
7444 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7445 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7446 (build-system python-build-system)
7447 (home-page "https://pep8.readthedocs.org/")
7448 (synopsis "Python style guide checker")
7449 (description
7450 "This tools checks Python code against some of the style conventions in
7451 PEP 8.")
7452 (license license:expat)))
7453
7454 (define-public python2-pep8
7455 (package-with-python2 python-pep8))
7456
7457 (define-public python-pyflakes
7458 (package
7459 (name "python-pyflakes")
7460 (version "2.1.1")
7461 (source
7462 (origin
7463 (method url-fetch)
7464 (uri (pypi-uri "pyflakes" version))
7465 (sha256
7466 (base32
7467 "18pq95a1xj2dgdd0m85gyfsn40jajj4xc3lp8wfv7igqhrc86xnr"))))
7468 (build-system python-build-system)
7469 (home-page
7470 "https://github.com/pyflakes/pyflakes")
7471 (synopsis "Passive checker of Python programs")
7472 (description
7473 "Pyflakes statically checks Python source code for common errors.")
7474 (license license:expat)))
7475
7476 (define-public python2-pyflakes
7477 (package-with-python2 python-pyflakes))
7478
7479 ;; Flake8 2.6 requires an older version of pyflakes.
7480 ;; This should be removed ASAP.
7481 (define-public python-pyflakes-1.2
7482 (package (inherit python-pyflakes)
7483 (version "1.2.3")
7484 (source
7485 (origin
7486 (method url-fetch)
7487 (uri (pypi-uri "pyflakes" version))
7488 (sha256
7489 (base32
7490 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7491 (arguments
7492 '(#:phases
7493 (modify-phases %standard-phases
7494 ;; This one test fails.
7495 (replace 'check
7496 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7497 (native-inputs
7498 `(("python-pytest" ,python-pytest)))))
7499
7500 (define-public python-mccabe
7501 (package
7502 (name "python-mccabe")
7503 (version "0.6.1")
7504 (source
7505 (origin
7506 (method url-fetch)
7507 (uri (pypi-uri "mccabe" version))
7508 (sha256
7509 (base32
7510 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7511 (build-system python-build-system)
7512 (native-inputs
7513 `(("python-pytest" ,python-pytest-bootstrap)
7514 ("python-pytest-runner" ,python-pytest-runner)))
7515 (home-page "https://github.com/flintwork/mccabe")
7516 (synopsis "McCabe checker, plugin for flake8")
7517 (description
7518 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7519 complexity of Python source code.")
7520 (license license:expat)))
7521
7522 (define-public python2-mccabe
7523 (package-with-python2 python-mccabe))
7524
7525 (define-public python-mccabe-0.2.1
7526 (package (inherit python-mccabe)
7527 (version "0.2.1")
7528 (source
7529 (origin
7530 (method url-fetch)
7531 (uri (pypi-uri "mccabe" version))
7532 (sha256
7533 (base32
7534 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7535
7536 (define-public python2-mccabe-0.2.1
7537 (package-with-python2 python-mccabe-0.2.1))
7538
7539 ;; Flake8 2.4.1 requires an older version of pep8.
7540 ;; This should be removed ASAP.
7541 (define-public python-pep8-1.5.7
7542 (package (inherit python-pep8)
7543 (version "1.5.7")
7544 (source
7545 (origin
7546 (method url-fetch)
7547 (uri (pypi-uri "pep8" version))
7548 (sha256
7549 (base32
7550 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7551 (arguments
7552 ;; XXX Tests not compatible with Python 3.5.
7553 '(#:tests? #f))))
7554
7555 (define-public python2-pep8-1.5.7
7556 (package-with-python2 python-pep8-1.5.7))
7557
7558 (define-public python-flake8
7559 (package
7560 (name "python-flake8")
7561 (version "3.7.9")
7562 (source (origin
7563 (method url-fetch)
7564 (uri (pypi-uri "flake8" version))
7565 (sha256
7566 (base32
7567 "1yscj6avirm6m12bjh4fn2lfgxaamqsjh9pirdqfi0fcgq8ils25"))))
7568 (build-system python-build-system)
7569 (arguments
7570 `(#:phases
7571 (modify-phases %standard-phases
7572 (delete 'check)
7573 (add-after 'install 'check
7574 (lambda* (#:key inputs outputs #:allow-other-keys)
7575 (add-installed-pythonpath inputs outputs)
7576 (invoke "pytest" "-v")
7577 #t)))))
7578 (propagated-inputs
7579 `(("python-pycodestyle" ,python-pycodestyle)
7580 ("python-entrypoints" ,python-entrypoints)
7581 ("python-pyflakes" ,python-pyflakes)
7582 ("python-mccabe" ,python-mccabe)))
7583 (native-inputs
7584 `(("python-mock" ,python-mock)
7585 ("python-pytest" ,python-pytest-bootstrap)))
7586 (home-page "https://gitlab.com/pycqa/flake8")
7587 (synopsis
7588 "The modular source code checker: pep8, pyflakes and co")
7589 (description
7590 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7591 (properties `((python2-variant . ,(delay python2-flake8))))
7592 (license license:expat)))
7593
7594 (define-public python2-flake8
7595 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7596 (package (inherit base)
7597 (propagated-inputs
7598 `(("python2-configparser" ,python2-configparser)
7599 ("python2-enum34" ,python2-enum34)
7600 ("python2-functools32" ,python2-functools32)
7601 ("python2-typing" ,python2-typing)
7602 ,@(package-propagated-inputs base))))))
7603
7604 ;; python-hacking requires flake8 <2.7.0.
7605 (define-public python-flake8-2.6
7606 (package
7607 (inherit python-flake8)
7608 (version "2.6.2")
7609 (source (origin
7610 (method url-fetch)
7611 (uri (pypi-uri "flake8" version))
7612 (sha256
7613 (base32
7614 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7615 (arguments
7616 `(#:phases
7617 (modify-phases %standard-phases
7618 (add-after 'unpack 'use-later-pycodestyles
7619 (lambda __
7620 (substitute* '("flake8.egg-info/requires.txt"
7621 "setup.py")
7622 (("pycodestyle >= 2.0, < 2.1")
7623 "pycodestyle >= 2.0"))
7624 #t))
7625 (delete 'check)
7626 (add-after 'install 'check
7627 (lambda* (#:key inputs outputs #:allow-other-keys)
7628 (add-installed-pythonpath inputs outputs)
7629 (invoke "pytest" "-v")
7630 #t)))))
7631 (propagated-inputs
7632 `(("python-pep8" ,python-pep8)
7633 ("python-pycodestyle" ,python-pycodestyle)
7634 ("python-entrypoints" ,python-entrypoints)
7635 ("python-pyflakes" ,python-pyflakes-1.2)
7636 ("python-mccabe" ,python-mccabe)))))
7637
7638 (define-public python-flake8-polyfill
7639 (package
7640 (name "python-flake8-polyfill")
7641 (version "1.0.2")
7642 (source
7643 (origin
7644 (method url-fetch)
7645 (uri (pypi-uri "flake8-polyfill" version))
7646 (sha256
7647 (base32
7648 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7649 (build-system python-build-system)
7650 (arguments
7651 '(#:phases
7652 (modify-phases %standard-phases
7653 (replace 'check
7654 (lambda _
7655 ;; Be compatible with Pytest 4:
7656 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7657 (substitute* "setup.cfg"
7658 (("\\[pytest\\]")
7659 "[tool:pytest]"))
7660
7661 (setenv "PYTHONPATH"
7662 (string-append (getcwd) "/build/lib:"
7663 (getenv "PYTHONPATH")))
7664 (invoke "py.test" "-v"))))))
7665 (native-inputs
7666 `(("python-flake8" ,python-flake8)
7667 ("python-mock" ,python-mock)
7668 ("python-pep8" ,python-pep8)
7669 ("python-pycodestyle" ,python-pycodestyle)
7670 ("python-pytest" ,python-pytest)))
7671 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7672 (synopsis "Polyfill package for Flake8 plugins")
7673 (description
7674 "This package that provides some compatibility helpers for Flake8
7675 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7676 (license license:expat)))
7677
7678 (define-public python2-flake8-polyfill
7679 (package-with-python2 python-flake8-polyfill))
7680
7681 (define-public python-mistune
7682 (package
7683 (name "python-mistune")
7684 (version "0.8.4")
7685 (source
7686 (origin
7687 (method url-fetch)
7688 (uri (pypi-uri "mistune" version))
7689 (sha256
7690 (base32
7691 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7692 (build-system python-build-system)
7693 (native-inputs
7694 `(("python-nose" ,python-nose)
7695 ("python-cython" ,python-cython)))
7696 (home-page "https://github.com/lepture/mistune")
7697 (synopsis "Markdown parser in pure Python")
7698 (description "This package provides a fast markdown parser in pure
7699 Python.")
7700 (license license:bsd-3)))
7701
7702 (define-public python2-mistune
7703 (package-with-python2 python-mistune))
7704
7705 (define-public python-markdown
7706 (package
7707 (name "python-markdown")
7708 (version "3.2.1")
7709 (source
7710 (origin
7711 (method url-fetch)
7712 (uri (pypi-uri "Markdown" version))
7713 (sha256
7714 (base32
7715 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7716 (build-system python-build-system)
7717 (native-inputs
7718 `(("python-nose" ,python-nose)
7719 ("python-pyyaml" ,python-pyyaml)))
7720 (home-page "https://python-markdown.github.io/")
7721 (synopsis "Python implementation of Markdown")
7722 (description
7723 "This package provides a Python implementation of John Gruber's
7724 Markdown. The library features international input, various Markdown
7725 extensions, and several HTML output formats. A command line wrapper
7726 markdown_py is also provided to convert Markdown files to HTML.")
7727 (properties `((python2-variant . ,(delay python2-markdown))))
7728 (license license:bsd-3)))
7729
7730 ;; Markdown 3.2 dropped support for Python 2.
7731 (define-public python2-markdown
7732 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7733 (package/inherit
7734 base
7735 (version "3.1.1")
7736 (source (origin
7737 (method url-fetch)
7738 (uri (pypi-uri "Markdown" version))
7739 (sha256
7740 (base32
7741 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7742
7743 (define-public python-ptyprocess
7744 (package
7745 (name "python-ptyprocess")
7746 (version "0.5.2")
7747 (source
7748 (origin
7749 (method url-fetch)
7750 (uri (pypi-uri "ptyprocess" version))
7751 (sha256
7752 (base32
7753 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7754 (build-system python-build-system)
7755 (native-inputs
7756 `(("python-nose" ,python-nose)))
7757 (arguments
7758 `(#:phases
7759 (modify-phases %standard-phases
7760 (replace 'check
7761 (lambda _ (invoke "nosetests"))))))
7762 (home-page "https://github.com/pexpect/ptyprocess")
7763 (synopsis "Run a subprocess in a pseudo terminal")
7764 (description
7765 "This package provides a Python library used to launch a subprocess in a
7766 pseudo terminal (pty), and interact with both the process and its pty.")
7767 (license license:isc)))
7768
7769 (define-public python2-ptyprocess
7770 (package-with-python2 python-ptyprocess))
7771
7772 (define-public python-cram
7773 (package
7774 (name "python-cram")
7775 (version "0.7")
7776 (home-page "https://bitheap.org/cram/")
7777 (source (origin
7778 (method url-fetch)
7779 (uri (list (string-append home-page "cram-"
7780 version ".tar.gz")
7781 (pypi-uri "cram" version)))
7782 (sha256
7783 (base32
7784 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7785 (arguments
7786 '(#:phases
7787 (modify-phases %standard-phases
7788 (add-after 'unpack 'patch-source
7789 (lambda _
7790 (substitute* (find-files "cram" ".*\\.py$")
7791 ;; Replace default shell path.
7792 (("/bin/sh") (which "sh")))
7793 (substitute* (find-files "tests" ".*\\.t$")
7794 (("md5") "md5sum")
7795 (("/bin/bash") (which "bash"))
7796 (("/bin/sh") (which "sh")))
7797 (substitute* "cram/_test.py"
7798 ;; This hack works around a bug triggered by substituting
7799 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7800 ;; "cram -h", which breaks the output at 80 characters. This
7801 ;; causes the line showing the default shell to break into two
7802 ;; lines, but the test expects a single line...
7803 (("env\\['COLUMNS'\\] = '80'")
7804 "env['COLUMNS'] = '160'"))
7805
7806 (substitute* "Makefile"
7807 ;; Recent versions of python-coverage have caused the test
7808 ;; coverage to decrease (as of version 0.7). Allow that.
7809 (("--fail-under=100")
7810 "--fail-under=90"))
7811
7812 #t))
7813 (replace 'check
7814 ;; The test phase uses the built library and executable.
7815 (lambda* (#:key inputs outputs #:allow-other-keys)
7816 (add-installed-pythonpath inputs outputs)
7817 (setenv "PATH" (string-append (getenv "PATH") ":"
7818 (assoc-ref outputs "out") "/bin"))
7819 (invoke "make" "test"))))))
7820 (build-system python-build-system)
7821 (native-inputs
7822 `(("python-coverage" ,python-coverage)
7823 ("which" ,which)))
7824 (synopsis "Simple testing framework for command line applications")
7825 (description
7826 "Cram is a functional testing framework for command line applications.
7827 Cram tests look like snippets of interactive shell sessions. Cram runs each
7828 command and compares the command output in the test with the command’s actual
7829 output.")
7830 (license license:gpl2+)))
7831
7832 (define-public python2-cram
7833 (package-with-python2 python-cram))
7834
7835 (define-public python-straight-plugin
7836 (package
7837 (name "python-straight-plugin")
7838 (version "1.4.1")
7839 (source
7840 (origin
7841 (method url-fetch)
7842 (uri (pypi-uri "straight.plugin" version))
7843 (sha256
7844 (base32
7845 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7846 (build-system python-build-system)
7847 (home-page "https://github.com/ironfroggy/straight.plugin")
7848 (synopsis "Simple namespaced plugin facility")
7849 (description "Straight Plugin provides a type of plugin you can create from
7850 almost any existing Python modules, and an easy way for outside developers to
7851 add functionality and customization to your projects with their own plugins.")
7852 (license license:expat)))
7853
7854 (define-public python2-straight-plugin
7855 (package-with-python2 python-straight-plugin))
7856
7857 (define-public python-fonttools
7858 (package
7859 (name "python-fonttools")
7860 (version "4.6.0")
7861 (source (origin
7862 (method url-fetch)
7863 (uri (pypi-uri "fonttools" version ".zip"))
7864 (sha256
7865 (base32
7866 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
7867 (build-system python-build-system)
7868 (native-inputs
7869 `(("unzip" ,unzip)
7870 ("python-pytest" ,python-pytest)
7871 ("python-pytest-runner" ,python-pytest-runner)))
7872 (home-page "https://github.com/fonttools/fonttools")
7873 (synopsis "Tools to manipulate font files")
7874 (description
7875 "FontTools/TTX is a library to manipulate font files from Python. It
7876 supports reading and writing of TrueType/OpenType fonts, reading and writing
7877 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7878 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7879 from an XML-based format.")
7880 (license license:expat)))
7881
7882 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
7883 (define-public python2-fonttools
7884 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
7885 (package/inherit
7886 base
7887 (version "3.44.0")
7888 (source (origin
7889 (method url-fetch)
7890 (uri (pypi-uri "fonttools" version ".zip"))
7891 (sha256
7892 (base32
7893 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
7894
7895 (define-public python-ly
7896 (package
7897 (name "python-ly")
7898 (version "0.9.5")
7899 (source
7900 (origin
7901 (method url-fetch)
7902 (uri (pypi-uri name version))
7903 (sha256
7904 (base32
7905 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7906 (build-system python-build-system)
7907 (arguments
7908 ;; FIXME: Some tests need network access.
7909 '(#:tests? #f))
7910 (synopsis "Tool and library for manipulating LilyPond files")
7911 (description "This package provides a Python library to parse, manipulate
7912 or create documents in LilyPond format. A command line program ly is also
7913 provided that can be used to do various manipulations with LilyPond files.")
7914 (home-page "https://pypi.org/project/python-ly/")
7915 (license license:gpl2+)))
7916
7917 (define-public python-appdirs
7918 (package
7919 (name "python-appdirs")
7920 (version "1.4.3")
7921 (source
7922 (origin
7923 (method url-fetch)
7924 (uri (pypi-uri "appdirs" version))
7925 (sha256
7926 (base32
7927 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7928 (build-system python-build-system)
7929 (home-page "https://github.com/ActiveState/appdirs")
7930 (synopsis
7931 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7932 (description
7933 "This module provides a portable way of finding out where user data
7934 should be stored on various operating systems.")
7935 (license license:expat)))
7936
7937 (define-public python2-appdirs
7938 (package-with-python2 python-appdirs))
7939
7940 (define-public python-llfuse
7941 (package
7942 (name "python-llfuse")
7943 (version "1.3.5")
7944 (source (origin
7945 (method url-fetch)
7946 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7947 (sha256
7948 (base32
7949 "1n7a90jww3ly49fm7x27m3xw3la3qfrnykcakga654g6kcyjlhbf"))))
7950 (build-system python-build-system)
7951 (inputs
7952 `(("fuse" ,fuse)
7953 ("attr" ,attr)))
7954 (native-inputs
7955 `(("pkg-config" ,pkg-config)))
7956 (synopsis "Python bindings for FUSE")
7957 (description
7958 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7959 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7960 (license license:lgpl2.0+)
7961 (properties `((python2-variant . ,(delay python2-llfuse))))))
7962
7963 (define-public python2-llfuse
7964 (package (inherit (package-with-python2
7965 (strip-python2-variant python-llfuse)))
7966 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7967
7968 ;; For attic-0.16
7969 (define-public python-llfuse-0.41
7970 (package (inherit python-llfuse)
7971 (version "0.41.1")
7972 (source (origin
7973 (method url-fetch)
7974 (uri (string-append
7975 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
7976 "llfuse-" version ".tar.bz2"))
7977 (sha256
7978 (base32
7979 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
7980 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
7981 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
7982 (license (list license:expat license:lgpl2.0+))))
7983
7984 (define-public python-msgpack
7985 (package
7986 (name "python-msgpack")
7987 (version "1.0.0")
7988 (source (origin
7989 (method url-fetch)
7990 (uri (pypi-uri "msgpack" version))
7991 (sha256
7992 (base32
7993 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
7994 (build-system python-build-system)
7995 (arguments
7996 `(#:modules ((guix build utils)
7997 (guix build python-build-system)
7998 (ice-9 ftw)
7999 (srfi srfi-1)
8000 (srfi srfi-26))
8001 #:phases
8002 (modify-phases %standard-phases
8003 (replace 'check
8004 (lambda _
8005 (let ((cwd (getcwd)))
8006 (setenv "PYTHONPATH"
8007 (string-append cwd "/build/"
8008 (find (cut string-prefix? "lib" <>)
8009 (scandir (string-append cwd "/build")))
8010 ":"
8011 (getenv "PYTHONPATH")))
8012 (invoke "pytest" "-v" "test")))))))
8013 (native-inputs
8014 `(("python-pytest" ,python-pytest)))
8015 (synopsis "MessagePack (de)serializer")
8016 (description "MessagePack is a fast, compact binary serialization format,
8017 suitable for similar data to JSON. This package provides CPython bindings for
8018 reading and writing MessagePack data.")
8019 (home-page "https://pypi.org/project/msgpack/")
8020 (license license:asl2.0)))
8021
8022 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8023 ;; release 0.5. Some packages like borg still call it by the old name for now.
8024 ;; <https://bugs.gnu.org/30662>
8025 (define-public python-msgpack-transitional
8026 (package
8027 (inherit python-msgpack)
8028 (name "python-msgpack-transitional")
8029 (version "0.5.6")
8030 (source (origin
8031 (method url-fetch)
8032 (uri (pypi-uri "msgpack" version))
8033 (sha256
8034 (base32
8035 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8036 (arguments
8037 (substitute-keyword-arguments (package-arguments python-msgpack)
8038 ((#:phases phases)
8039 `(modify-phases ,phases
8040 (add-after 'unpack 'configure-transitional
8041 (lambda _
8042 ;; Keep using the old name.
8043 (substitute* "setup.py"
8044 (("TRANSITIONAL = False")
8045 "TRANSITIONAL = 1"))
8046 #t))))))))
8047
8048 (define-public python2-msgpack
8049 (package-with-python2 python-msgpack))
8050
8051 (define-public python-netaddr
8052 (package
8053 (name "python-netaddr")
8054 (version "0.7.19")
8055 (source
8056 (origin
8057 (method url-fetch)
8058 (uri (pypi-uri "netaddr" version))
8059 (sha256
8060 (base32
8061 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8062 (build-system python-build-system)
8063 (arguments `(#:tests? #f)) ;; No tests.
8064 (home-page "https://github.com/drkjam/netaddr/")
8065 (synopsis "Pythonic manipulation of network addresses")
8066 (description
8067 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8068 and MAC network addresses.")
8069 (license license:bsd-3)))
8070
8071 (define-public python2-netaddr
8072 (package-with-python2 python-netaddr))
8073
8074 (define-public python2-pyroute2
8075 (package
8076 (name "python2-pyroute2")
8077 (version "0.5.6")
8078 (source
8079 (origin
8080 (method url-fetch)
8081 (uri (pypi-uri "pyroute2" version))
8082 (sha256
8083 (base32
8084 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8085 (build-system python-build-system)
8086 (arguments
8087 `(#:python ,python-2)) ;Python 3.x is not supported
8088 (home-page "https://github.com/svinota/pyroute2")
8089 (synopsis "Python netlink library")
8090 (description
8091 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8092 Supported netlink families and protocols include:
8093 @itemize
8094 @item rtnl, network settings - addresses, routes, traffic controls
8095 @item nfnetlink - netfilter API: ipset, nftables, ...
8096 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8097 @item devlink - manage and monitor devlink-enabled hardware
8098 @item generic - generic netlink families
8099 @itemize
8100 @item nl80211 - wireless functions API (basic support)
8101 @item taskstats - extended process statistics
8102 @item acpi_events - ACPI events monitoring
8103 @item thermal_events - thermal events monitoring
8104 @item VFS_DQUOT - disk quota events monitoring
8105 @end itemize
8106 @end itemize")
8107 (license license:gpl2+)))
8108
8109 (define-public python-wrapt
8110 (package
8111 (name "python-wrapt")
8112 (version "1.11.2")
8113 (source
8114 (origin
8115 (method url-fetch)
8116 (uri (pypi-uri "wrapt" version))
8117 (sha256
8118 (base32
8119 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8120 (build-system python-build-system)
8121 (arguments
8122 ;; Tests are not included in the tarball, they are only available in the
8123 ;; git repository.
8124 `(#:tests? #f))
8125 (home-page "https://github.com/GrahamDumpleton/wrapt")
8126 (synopsis "Module for decorators, wrappers and monkey patching")
8127 (description
8128 "The aim of the wrapt module is to provide a transparent object proxy for
8129 Python, which can be used as the basis for the construction of function
8130 wrappers and decorator functions.")
8131 (license license:bsd-2)))
8132
8133 (define-public python2-wrapt
8134 (package-with-python2 python-wrapt))
8135
8136 (define-public python-xlrd
8137 (package
8138 (name "python-xlrd")
8139 (version "1.2.0")
8140 (source (origin
8141 (method url-fetch)
8142 (uri (pypi-uri "xlrd" version))
8143 (sha256
8144 (base32
8145 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8146 (build-system python-build-system)
8147 (arguments
8148 `(#:phases
8149 (modify-phases %standard-phases
8150 ;; Some tests depend on writing a temporary file to the user's home
8151 ;; directory.
8152 (add-after 'unpack 'fix-tests
8153 (lambda _
8154 (delete-file "tests/test_open_workbook.py")
8155 #t)))))
8156 (home-page "http://www.python-excel.org/")
8157 (synopsis "Library for extracting data from Excel files")
8158 (description "This package provides a library to extract data from
8159 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8160 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8161 Unicode-aware. It is not intended as an end-user tool.")
8162 (license license:bsd-3)))
8163
8164 (define-public python2-xlrd
8165 (package-with-python2 python-xlrd))
8166
8167 (define-public python-prettytable
8168 (package
8169 (name "python-prettytable")
8170 (version "0.7.2")
8171 (source
8172 (origin
8173 (method url-fetch)
8174 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8175 (sha256
8176 (base32
8177 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8178 (build-system python-build-system)
8179 (home-page "https://code.google.com/archive/p/prettytable/")
8180 (synopsis "Display tabular data in an ASCII table format")
8181 (description
8182 "A library designed to represent tabular data in visually appealing ASCII
8183 tables. PrettyTable allows for selection of which columns are to be printed,
8184 independent alignment of columns (left or right justified or centred) and
8185 printing of sub-tables by specifying a row range.")
8186 (license license:bsd-3)))
8187
8188 (define-public python2-prettytable
8189 (package-with-python2 python-prettytable))
8190
8191 (define-public python-tables
8192 (package
8193 (name "python-tables")
8194 (version "3.6.1")
8195 (source
8196 (origin
8197 (method url-fetch)
8198 (uri (pypi-uri "tables" version))
8199 (sha256
8200 (base32
8201 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8202 (modules '((guix build utils)))
8203 (snippet
8204 '(begin
8205 ;; Remove pre-compiled .pyc files from source.
8206 (for-each delete-file-recursively
8207 (find-files "." "__pycache__" #:directories? #t))
8208 (for-each delete-file (find-files "." "\\.pyc$"))
8209 #t))))
8210 (build-system python-build-system)
8211 (arguments
8212 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8213 ;; or "check", so we must override the build and check phases.
8214 #:phases
8215 (modify-phases %standard-phases
8216 (add-after 'unpack 'use-gcc
8217 (lambda _
8218 (substitute* "setup.py"
8219 (("^( +)compiler = new_compiler\\(\\)" line indent)
8220 (string-append line
8221 "\n"
8222 indent
8223 "compiler.set_executables(compiler='gcc',"
8224 "compiler_so='gcc',"
8225 "linker_exe='gcc',"
8226 "linker_so='gcc -shared')")))
8227 #t))
8228 (add-after 'unpack 'disable-tuning
8229 (lambda _
8230 (substitute* "setup.py"
8231 (("cpu_flags = .*")
8232 "cpu_flags = ['sse2']\n"))
8233 #t))
8234 (replace 'build
8235 (lambda* (#:key inputs #:allow-other-keys)
8236 (invoke "python" "setup.py" "build"
8237 (string-append "--hdf5="
8238 (assoc-ref inputs "hdf5")))))
8239 (replace 'check
8240 (lambda* (#:key inputs #:allow-other-keys)
8241 (invoke "python" "setup.py" "check"
8242 (string-append "--hdf5="
8243 (assoc-ref inputs "hdf5"))))))))
8244 (propagated-inputs
8245 `(("python-numexpr" ,python-numexpr)
8246 ("python-numpy" ,python-numpy)))
8247 (native-inputs
8248 `(("python-cython" ,python-cython)
8249 ("pkg-config" ,pkg-config)))
8250 (inputs
8251 `(("hdf5" ,hdf5-1.10)
8252 ("bzip2" ,bzip2)
8253 ("zlib" ,zlib)))
8254 (home-page "https://www.pytables.org/")
8255 (synopsis "Hierarchical datasets for Python")
8256 (description "PyTables is a package for managing hierarchical datasets and
8257 designed to efficiently cope with extremely large amounts of data.")
8258 (license license:bsd-3)))
8259
8260 (define-public python2-tables
8261 (package-with-python2 python-tables))
8262
8263 (define-public python-pytest-black
8264 (package
8265 (name "python-pytest-black")
8266 (version "0.3.8")
8267 (source
8268 (origin
8269 (method url-fetch)
8270 (uri (pypi-uri "pytest-black" version))
8271 (sha256
8272 (base32
8273 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8274 (build-system python-build-system)
8275 (propagated-inputs
8276 `(("python-pytest" ,python-pytest)
8277 ("python-black" ,python-black)
8278 ("python-toml" ,python-toml)))
8279 (native-inputs
8280 `(("python-setuptools-scm" ,python-setuptools-scm)))
8281 (home-page "https://github.com/shopkeep/pytest-black")
8282 (synopsis "Pytest plugin to enable format checking with black")
8283 (description
8284 "This package provides a pytest plugin to enable format checking with the
8285 Python code formatter \"black\".")
8286 (license license:expat)))
8287
8288 (define-public python-get-version
8289 (package
8290 (name "python-get-version")
8291 (version "2.1")
8292 (source
8293 (origin
8294 (method url-fetch)
8295 (uri (pypi-uri "get_version" version))
8296 (sha256
8297 (base32
8298 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8299 (build-system python-build-system)
8300 (propagated-inputs
8301 `(("python-pygments" ,python-pygments)
8302 ("python-pytest" ,python-pytest)
8303 ("python-pytest-black" ,python-pytest-black)
8304 ("python-pytest-cov" ,python-pytest-cov)
8305 ("python-setuptools" ,python-setuptools)
8306 ("python-testpath" ,python-testpath)))
8307 (home-page "https://github.com/flying-sheep/get_version")
8308 (synopsis "Version helper in the spirit of versioneer")
8309 (description
8310 "This package provides a version helper that lets you automatically use
8311 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8312 also supports getting the version from Python source distributions or, once
8313 your package is installed, via @code{pkg_resources} (part of
8314 @code{setuptools}).")
8315 (license license:gpl3+)))
8316
8317 (define-public python-legacy-api-wrap
8318 (package
8319 (name "python-legacy-api-wrap")
8320 (version "1.2")
8321 (source
8322 (origin
8323 (method url-fetch)
8324 (uri (pypi-uri "legacy-api-wrap" version))
8325 (sha256
8326 (base32
8327 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8328 (build-system python-build-system)
8329 (propagated-inputs
8330 `(("python-get-version" ,python-get-version)
8331 ("python-pytest" ,python-pytest)
8332 ("python-pytest-black" ,python-pytest-black)
8333 ("python-pytest-cov" ,python-pytest-cov)
8334 ("python-setuptools" ,python-setuptools)))
8335 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8336 (synopsis "Legacy API wrapper")
8337 (description "This module defines a decorator to wrap legacy APIs. The
8338 primary use case is APIs defined before keyword-only parameters existed.")
8339 (license license:gpl3+)))
8340
8341 (define-public python-pyasn1
8342 (package
8343 (name "python-pyasn1")
8344 (version "0.4.8")
8345 (source
8346 (origin
8347 (method url-fetch)
8348 (uri (pypi-uri "pyasn1" version))
8349 (sha256
8350 (base32
8351 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8352 (build-system python-build-system)
8353 (home-page "http://pyasn1.sourceforge.net/")
8354 (synopsis "ASN.1 types and codecs")
8355 (description
8356 "This is an implementation of ASN.1 types and codecs in Python. It is
8357 suitable for a wide range of protocols based on the ASN.1 specification.")
8358 (license license:bsd-2)))
8359
8360 (define-public python2-pyasn1
8361 (package-with-python2 python-pyasn1))
8362
8363 (define-public python-pyasn1-modules
8364 (package
8365 (name "python-pyasn1-modules")
8366 (version "0.2.2")
8367 (source
8368 (origin
8369 (method url-fetch)
8370 (uri (pypi-uri "pyasn1-modules" version))
8371 (sha256
8372 (base32
8373 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8374 (build-system python-build-system)
8375 (propagated-inputs
8376 `(("python-pyasn1" ,python-pyasn1)))
8377 (home-page "https://sourceforge.net/projects/pyasn1/")
8378 (synopsis "ASN.1 codec implementations")
8379 (description
8380 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8381 implementations of ASN.1-based codecs and protocols.")
8382 (license license:bsd-3)))
8383
8384 (define-public python2-pyasn1-modules
8385 (package-with-python2 python-pyasn1-modules))
8386
8387 (define-public python-ipaddress
8388 (package
8389 (name "python-ipaddress")
8390 (version "1.0.22")
8391 (source (origin
8392 (method url-fetch)
8393 (uri (pypi-uri "ipaddress" version))
8394 (sha256
8395 (base32
8396 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8397 (build-system python-build-system)
8398 (home-page "https://github.com/phihag/ipaddress")
8399 (synopsis "IP address manipulation library")
8400 (description
8401 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8402 in Python. This library is used to create, poke at, and manipulate IPv4 and
8403 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8404 module to older versions of Python.")
8405 (license license:psfl)))
8406
8407 (define-public python2-ipaddress
8408 (package-with-python2 python-ipaddress))
8409
8410 (define-public python2-ipaddr
8411 (package
8412 (name "python2-ipaddr")
8413 (version "2.1.11")
8414 (source
8415 (origin
8416 (method url-fetch)
8417 (uri (pypi-uri "ipaddr" version))
8418 (sha256
8419 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8420 (build-system python-build-system)
8421 (arguments
8422 `(#:python ,python-2 ;version 2 only
8423 #:phases
8424 (modify-phases %standard-phases
8425 (replace 'check
8426 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8427 (home-page "https://github.com/google/ipaddr-py")
8428 (synopsis "IP address manipulation library")
8429 (description
8430 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8431 IPv6 addresses and networks.
8432
8433 For new implementations you may prefer to use the standard module
8434 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8435 versions of Python.")
8436 (license license:asl2.0)))
8437
8438 (define-public python-idna
8439 (package
8440 (name "python-idna")
8441 (version "2.8")
8442 (source
8443 (origin
8444 (method url-fetch)
8445 (uri (pypi-uri "idna" version))
8446 (sha256
8447 (base32
8448 "01rlkigdxg17sf9yar1jl8n18ls59367wqh59hnawlyg53vb6my3"))))
8449 (build-system python-build-system)
8450 (home-page "https://github.com/kjd/idna")
8451 (synopsis "Internationalized domain names in applications")
8452 (description
8453 "This is a library to support the Internationalised Domain Names in
8454 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8455 protocol is often referred to as “IDNA2008” and can produce different results
8456 from the earlier standard from 2003. The library is also intended to act as a
8457 suitable drop-in replacement for the “encodings.idna” module that comes with
8458 the Python standard library but currently only supports the older 2003
8459 specification.")
8460 (license license:bsd-4)))
8461
8462 (define-public python-idna-2.7
8463 (package (inherit python-idna)
8464 (version "2.7")
8465 (source (origin
8466 (method url-fetch)
8467 (uri (pypi-uri "idna" version))
8468 (sha256
8469 (base32
8470 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8471
8472
8473 (define-public python2-idna
8474 (package-with-python2 python-idna))
8475
8476 (define-public python-idna-ssl
8477 (package
8478 (name "python-idna-ssl")
8479 (version "1.0.1")
8480 (source
8481 (origin
8482 (method url-fetch)
8483 (uri (pypi-uri "idna-ssl" version))
8484 (sha256
8485 (base32
8486 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8487 (build-system python-build-system)
8488 (arguments
8489 `(#:tests? #f)) ;circular dependency with python-aiohttp
8490 (home-page "https://github.com/aio-libs/idna-ssl")
8491 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8492 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8493 domains support.")
8494 (license license:expat)))
8495
8496 (define-public python-pretend
8497 (package
8498 (name "python-pretend")
8499 (version "1.0.9")
8500 (source
8501 (origin
8502 (method url-fetch)
8503 (uri (pypi-uri "pretend" version))
8504 (sha256
8505 (base32
8506 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8507 (build-system python-build-system)
8508 (home-page "https://github.com/alex/pretend")
8509 (synopsis "Library for stubbing in Python")
8510 (description
8511 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8512 technique for writing tests. You may hear the term mixed up with mocks,
8513 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8514 responses, rather than doing any computation.")
8515 (license license:bsd-3)))
8516
8517 (define-public python2-pretend
8518 (package-with-python2 python-pretend))
8519
8520 (define-public python-pip
8521 (package
8522 (name "python-pip")
8523 (version "20.0.2")
8524 (source
8525 (origin
8526 (method url-fetch)
8527 (uri (pypi-uri "pip" version))
8528 (sha256
8529 (base32
8530 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8531 (build-system python-build-system)
8532 (arguments
8533 '(#:tests? #f)) ; there are no tests in the pypi archive.
8534 (home-page "https://pip.pypa.io/")
8535 (synopsis "Package manager for Python software")
8536 (description
8537 "Pip is a package manager for Python software, that finds packages on the
8538 Python Package Index (PyPI).")
8539 (license license:expat)))
8540
8541 (define-public python2-pip
8542 (package-with-python2 python-pip))
8543
8544 (define-public python-tlsh
8545 (package
8546 (name "python-tlsh")
8547 (version "3.4.5")
8548 (home-page "https://github.com/trendmicro/tlsh")
8549 (source
8550 (origin
8551 (method git-fetch)
8552 (uri (git-reference
8553 (url "https://github.com/trendmicro/tlsh.git")
8554 (commit (string-append "v" version))))
8555 (file-name (git-file-name name version))
8556 (sha256
8557 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8558 (build-system cmake-build-system)
8559 (arguments
8560 '(#:out-of-source? #f
8561 #:phases (modify-phases %standard-phases
8562 (replace
8563 'install
8564 (lambda* (#:key outputs #:allow-other-keys)
8565 ;; Build and install the Python bindings. The underlying
8566 ;; C++ library is apparently not meant to be installed.
8567 (let ((out (assoc-ref outputs "out")))
8568 (with-directory-excursion "py_ext"
8569 (and (system* "python" "setup.py" "build")
8570 (system* "python" "setup.py" "install"
8571 (string-append "--prefix=" out))))))))))
8572 (inputs `(("python" ,python-wrapper))) ;for the bindings
8573 (synopsis "Fuzzy matching library for Python")
8574 (description
8575 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8576 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8577 value which can be used for similarity comparisons. Similar objects have
8578 similar hash values, which allows for the detection of similar objects by
8579 comparing their hash values. The byte stream should have a sufficient amount
8580 of complexity; for example, a byte stream of identical bytes will not generate
8581 a hash value.")
8582 (license license:asl2.0)))
8583
8584 (define-public python2-tlsh
8585 (package
8586 (inherit python-tlsh)
8587 (name "python2-tlsh")
8588 (inputs `(("python" ,python-2)))))
8589
8590 (define-public python-termcolor
8591 (package
8592 (name "python-termcolor")
8593 (version "1.1.0")
8594 (source
8595 (origin
8596 (method url-fetch)
8597 (uri (pypi-uri "termcolor" version))
8598 (sha256
8599 (base32
8600 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8601 (build-system python-build-system)
8602 (arguments
8603 ;; There are no tests.
8604 `(#:tests? #f))
8605 (home-page "https://pypi.org/project/termcolor/")
8606 (synopsis "ANSII Color formatting for terminal output")
8607 (description
8608 "This package provides ANSII Color formatting for output in terminals.")
8609 (license license:expat)))
8610
8611 (define-public python2-termcolor
8612 (package-with-python2 python-termcolor))
8613
8614 (define-public python-libarchive-c
8615 (package
8616 (name "python-libarchive-c")
8617 (version "2.9")
8618 (source (origin
8619 (method url-fetch)
8620 (uri (pypi-uri "libarchive-c" version))
8621 (sha256
8622 (base32
8623 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8624 (build-system python-build-system)
8625 (arguments
8626 '(#:phases (modify-phases %standard-phases
8627 (add-before
8628 'build 'reference-libarchive
8629 (lambda* (#:key inputs #:allow-other-keys)
8630 ;; Retain the absolute file name of libarchive.so.
8631 (let ((libarchive (assoc-ref inputs "libarchive")))
8632 (substitute* "libarchive/ffi.py"
8633 (("find_library\\('archive'\\)")
8634 (string-append "'" libarchive
8635 "/lib/libarchive.so'"))))))
8636 (replace 'check
8637 (lambda _ (invoke "pytest" "-vv"))))))
8638 (native-inputs
8639 `(("python-mock" ,python-mock)
8640 ("python-pytest" ,python-pytest)))
8641 (inputs
8642 `(("libarchive" ,libarchive)))
8643 (home-page "https://github.com/Changaco/python-libarchive-c")
8644 (synopsis "Python interface to libarchive")
8645 (description
8646 "This package provides Python bindings to libarchive, a C library to
8647 access possibly compressed archives in many different formats. It uses
8648 Python's @code{ctypes} foreign function interface (FFI).")
8649 (license license:lgpl2.0+)))
8650
8651 (define-public python2-libarchive-c
8652 (package-with-python2 python-libarchive-c))
8653
8654 (define-public python-file
8655 (package
8656 (inherit file)
8657 (name "python-file")
8658 (build-system python-build-system)
8659 (arguments
8660 '(#:tests? #f ;no tests
8661 #:configure-flags '("--single-version-externally-managed" "--root=/")
8662 #:phases (modify-phases %standard-phases
8663 (add-before 'build 'change-directory
8664 (lambda _
8665 (chdir "python")
8666 #t))
8667 (add-before 'build 'set-library-file-name
8668 (lambda* (#:key inputs #:allow-other-keys)
8669 (let ((file (assoc-ref inputs "file")))
8670 (substitute* "magic.py"
8671 (("find_library\\('magic'\\)")
8672 (string-append "'" file "/lib/libmagic.so'")))
8673 #t))))))
8674 (inputs `(("file" ,file)))
8675 (native-inputs (if (%current-target-system)
8676 `(("self" ,this-package))
8677 '()))
8678 (synopsis "Python bindings to the libmagic file type guesser. Note that
8679 this module and the python-magic module both provide a \"magic.py\" file;
8680 these two modules, which are different and were developed separately, both
8681 serve the same purpose: provide Python bindings for libmagic.")))
8682
8683 (define-public python2-file
8684 (package-with-python2 python-file))
8685
8686 (define-public python-debian
8687 (package
8688 (name "python-debian")
8689 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8690 (version "0.1.36")
8691 (source
8692 (origin
8693 ;; Use git-fetch, as pypi doesn't include test suite.
8694 (method git-fetch)
8695 (uri (git-reference
8696 (url home-page)
8697 (commit version)))
8698 (file-name (git-file-name name version))
8699 (sha256
8700 (base32
8701 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8702 (build-system python-build-system)
8703 (arguments
8704 `(#:phases (modify-phases %standard-phases
8705 (add-after 'unpack 'remove-debian-specific-tests
8706 ;; python-apt, apt and dpkg are not yet available in guix,
8707 ;; and these tests heavily depend on them.
8708 (lambda _
8709 (delete-file "lib/debian/tests/test_deb822.py")
8710 (delete-file "lib/debian/tests/test_debfile.py")
8711 #t)))))
8712 (propagated-inputs
8713 `(("python-six" ,python-six)
8714 ("python-chardet" ,python-chardet)))
8715 (synopsis "Debian package related modules")
8716 (description
8717 ;; XXX: Use @enumerate instead of @itemize to work around
8718 ;; <http://bugs.gnu.org/21772>.
8719 "This package provides Python modules that abstract many formats of
8720 Debian-related files, such as:
8721
8722 @enumerate
8723 @item Debtags information;
8724 @item @file{debian/changelog} files;
8725 @item packages files, pdiffs;
8726 @item control files of single or multiple RFC822-style paragraphs---e.g.
8727 @file{debian/control}, @file{.changes}, @file{.dsc};
8728 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8729 contained files and meta-information.
8730 @end enumerate\n")
8731
8732 ;; Modules are either GPLv2+ or GPLv3+.
8733 (license license:gpl3+)))
8734
8735 (define-public python-nbformat
8736 (package
8737 (name "python-nbformat")
8738 (version "4.4.0")
8739 (source
8740 (origin
8741 (method url-fetch)
8742 (uri (pypi-uri "nbformat" version))
8743 (sha256
8744 (base32
8745 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8746 (build-system python-build-system)
8747 (arguments `(#:tests? #f)) ; no test target
8748 (propagated-inputs
8749 `(("python-ipython-genutils" ,python-ipython-genutils)
8750 ("python-jsonschema" ,python-jsonschema)
8751 ("python-jupyter-core" ,python-jupyter-core)
8752 ("python-traitlets" ,python-traitlets)))
8753 (home-page "http://jupyter.org")
8754 (synopsis "Jupyter Notebook format")
8755 (description "This package provides the reference implementation of the
8756 Jupyter Notebook format and Python APIs for working with notebooks.")
8757 (license license:bsd-3)))
8758
8759 (define-public python2-nbformat
8760 (package-with-python2 python-nbformat))
8761
8762 (define-public python-bleach
8763 (package
8764 (name "python-bleach")
8765 (version "3.1.3")
8766 (source
8767 (origin
8768 (method url-fetch)
8769 (uri (pypi-uri "bleach" version))
8770 (sha256
8771 (base32
8772 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8773 (build-system python-build-system)
8774 (propagated-inputs
8775 `(("python-webencodings" ,python-webencodings)
8776 ("python-six" ,python-six)))
8777 (native-inputs
8778 `(("python-datrie" ,python-datrie)
8779 ("python-genshi" ,python-genshi)
8780 ("python-lxml" ,python-lxml)
8781 ("python-pytest" ,python-pytest)))
8782 (home-page "https://github.com/mozilla/bleach")
8783 (synopsis "Whitelist-based HTML-sanitizing tool")
8784 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8785 (license license:asl2.0)))
8786
8787 (define-public python2-bleach
8788 (package-with-python2 python-bleach))
8789
8790 (define-public python-entrypoints
8791 (package
8792 (name "python-entrypoints")
8793 (version "0.3")
8794 (source
8795 (origin
8796 (method url-fetch)
8797 (uri (pypi-uri "entrypoints" version))
8798 (sha256
8799 (base32
8800 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8801 (build-system python-build-system)
8802 ;; The package does not come with a setup.py file, so we have to generate
8803 ;; one ourselves.
8804 (arguments
8805 `(#:tests? #f
8806 #:phases
8807 (modify-phases %standard-phases
8808 (add-after 'unpack 'create-setup.py
8809 (lambda _
8810 (call-with-output-file "setup.py"
8811 (lambda (port)
8812 (format port "\
8813 from setuptools import setup
8814 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8815 " ,version))))))))
8816 (home-page "https://github.com/takluyver/entrypoints")
8817 (synopsis "Discover and load entry points from installed Python packages")
8818 (description "Entry points are a way for Python packages to advertise
8819 objects with some common interface. The most common examples are
8820 @code{console_scripts} entry points, which define shell commands by
8821 identifying a Python function to run. The @code{entrypoints} module contains
8822 functions to find and load entry points.")
8823 (license license:expat)))
8824
8825 (define-public python2-entrypoints
8826 (package-with-python2 python-entrypoints))
8827
8828 (define-public python-epc
8829 (package
8830 (name "python-epc")
8831 (version "0.0.5")
8832 (source
8833 (origin
8834 (method url-fetch)
8835 (uri (pypi-uri "epc" version))
8836 (sha256
8837 (base32
8838 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
8839 (build-system python-build-system)
8840 (propagated-inputs
8841 `(("python-sexpdata" ,python-sexpdata)))
8842 (native-inputs
8843 `(("python-nose" ,python-nose)))
8844 (home-page "https://github.com/tkf/python-epc")
8845 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
8846 (description
8847 "Python-EPC can call elisp functions from Python and Python functions
8848 from elisp.")
8849 (license license:gpl3)))
8850
8851 (define-public python-nbconvert
8852 (package
8853 (name "python-nbconvert")
8854 (version "5.0.0b1")
8855 (source
8856 (origin
8857 (method url-fetch)
8858 (uri (pypi-uri "nbconvert" version))
8859 (sha256
8860 (base32
8861 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8862 (build-system python-build-system)
8863 (arguments
8864 `(;; The "bdist_egg" target is disabled by default, causing the installation
8865 ;; to fail.
8866 #:configure-flags (list "bdist_egg")
8867 ;; FIXME: 5 failures, 40 errors.
8868 #:tests? #f))
8869 ;; #:phases
8870 ;; (modify-phases %standard-phases
8871 ;; (replace 'check
8872 ;; (lambda _
8873 ;; (zero? (system* "py.test" "-v")))))
8874 (native-inputs
8875 `(("python-pytest" ,python-pytest)))
8876 (propagated-inputs
8877 `(("python-bleach" ,python-bleach)
8878 ("python-entrypoints" ,python-entrypoints)
8879 ("python-jinja2" ,python-jinja2)
8880 ("python-jupyter-core" ,python-jupyter-core)
8881 ("python-mistune" ,python-mistune)
8882 ("python-nbformat" ,python-nbformat)
8883 ("python-pygments" ,python-pygments)
8884 ("python-traitlets" ,python-traitlets)))
8885 (home-page "http://jupyter.org")
8886 (synopsis "Converting Jupyter Notebooks")
8887 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8888 notebooks to various other formats via Jinja templates. It allows you to
8889 convert an @code{.ipynb} notebook file into various static formats including:
8890
8891 @enumerate
8892 @item HTML
8893 @item LaTeX
8894 @item PDF
8895 @item Reveal JS
8896 @item Markdown (md)
8897 @item ReStructured Text (rst)
8898 @item executable script
8899 @end enumerate\n")
8900 (license license:bsd-3)))
8901
8902 (define-public python2-nbconvert
8903 (package-with-python2 python-nbconvert))
8904
8905 (define-public python-notebook
8906 (package
8907 (name "python-notebook")
8908 (version "5.7.4")
8909 (source (origin
8910 (method url-fetch)
8911 (uri (pypi-uri "notebook" version))
8912 (sha256
8913 (base32
8914 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8915 (build-system python-build-system)
8916 (arguments
8917 `(#:phases
8918 (modify-phases %standard-phases
8919 (replace 'check
8920 (lambda _
8921 ;; These tests require a browser
8922 (delete-file-recursively "notebook/tests/selenium")
8923 ;; Some tests need HOME
8924 (setenv "HOME" "/tmp")
8925 ;; This file contains "warningfilters", which are not supported
8926 ;; by this version of nose.
8927 (delete-file "setup.cfg")
8928 (with-directory-excursion "/tmp"
8929 (invoke "nosetests" "-v"))
8930 #t)))))
8931 (propagated-inputs
8932 `(("python-jupyter-core" ,python-jupyter-core)
8933 ("python-nbformat" ,python-nbformat)
8934 ("python-nbconvert" ,python-nbconvert)
8935 ("python-prometheus-client" ,python-prometheus-client)
8936 ("python-send2trash" ,python-send2trash)
8937 ("python-terminado" ,python-terminado)))
8938 (native-inputs
8939 `(("python-nose" ,python-nose)
8940 ("python-sphinx" ,python-sphinx)
8941 ("python-requests" ,python-requests)))
8942 (home-page "http://jupyter.org/")
8943 (synopsis "Web-based notebook environment for interactive computing")
8944 (description
8945 "The Jupyter HTML notebook is a web-based notebook environment for
8946 interactive computing.")
8947 (properties `((python2-variant . ,(delay python2-notebook))))
8948 (license license:bsd-3)))
8949
8950 (define-public python2-notebook
8951 (let ((base (package-with-python2
8952 (strip-python2-variant python-notebook))))
8953 (package (inherit base)
8954 (native-inputs
8955 `(("python2-mock" ,python2-mock)
8956 ,@(package-native-inputs base)))
8957 (arguments
8958 (substitute-keyword-arguments (package-arguments base)
8959 ((#:phases phases)
8960 `(modify-phases ,phases
8961 (add-before 'check 'disable-test-case
8962 ;; The test requires network access to localhost. Curiously it
8963 ;; fails with Python 2 only. Simply make the test-case return
8964 ;; immediately.
8965 (lambda _
8966 (substitute*
8967 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8968 (("formats = self.nbconvert_api") "return #")))))))))))
8969
8970 (define-public python-widgetsnbextension
8971 (package
8972 (name "python-widgetsnbextension")
8973 (version "3.4.2")
8974 (source
8975 (origin
8976 (method url-fetch)
8977 (uri (pypi-uri "widgetsnbextension" version))
8978 (sha256
8979 (base32
8980 "0rc2nivdy7k4m3vljx7wdh2jh11djapcgwhvzlbs0isl8gl8nqgs"))))
8981 (build-system python-build-system)
8982 (propagated-inputs
8983 `(("python-ipykernel" ,python-ipykernel)
8984 ("python-notebook" ,python-notebook)))
8985 (native-inputs
8986 `(("python-certifi" ,python-certifi)
8987 ("python-nose" ,python-nose)))
8988 (home-page "https://ipython.org")
8989 (synopsis "IPython HTML widgets for Jupyter")
8990 (description "This package provides interactive HTML widgets for Jupyter
8991 notebooks.")
8992 (license license:bsd-3)))
8993
8994 (define-public python2-widgetsnbextension
8995 (package-with-python2 python-widgetsnbextension))
8996
8997 (define-public python-ipywidgets
8998 (package
8999 (name "python-ipywidgets")
9000 (version "5.2.2")
9001 (source
9002 (origin
9003 (method url-fetch)
9004 (uri (pypi-uri "ipywidgets" version))
9005 (sha256
9006 (base32
9007 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
9008 (build-system python-build-system)
9009 (propagated-inputs
9010 `(("python-ipython" ,python-ipython)
9011 ("python-traitlets" ,python-traitlets)
9012 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9013 (native-inputs
9014 `(("python-nose" ,python-nose)
9015 ("python-pytest" ,python-pytest)))
9016 (home-page "https://ipython.org")
9017 (synopsis "IPython HTML widgets for Jupyter")
9018 (description "Ipywidgets are interactive HTML widgets for Jupyter
9019 notebooks and the IPython kernel. Notebooks come alive when interactive
9020 widgets are used. Users gain control of their data and can visualize changes
9021 in the data.")
9022 (license license:bsd-3)))
9023
9024 (define-public python2-ipywidgets
9025 (package-with-python2 python-ipywidgets))
9026
9027 (define-public python-jupyter-console
9028 (package
9029 (name "python-jupyter-console")
9030 (version "6.0.0")
9031 (source
9032 (origin
9033 (method url-fetch)
9034 (uri (pypi-uri "jupyter_console" version))
9035 (sha256
9036 (base32
9037 "1xdjw11cppf1fxvwkw2bk13ckkwas3bdah8baingn9296mvfi31h"))))
9038 (build-system python-build-system)
9039 (propagated-inputs
9040 `(("python-ipykernel" ,python-ipykernel)
9041 ("python-jupyter-client" ,python-jupyter-client)
9042 ("python-prompt-toolkit" ,python-prompt-toolkit)
9043 ("python-pygments" ,python-pygments)))
9044 (native-inputs
9045 `(("python-nose" ,python-nose)))
9046 (home-page "https://jupyter.org")
9047 (synopsis "Jupyter terminal console")
9048 (description "This package provides a terminal-based console frontend for
9049 Jupyter kernels. It also allows for console-based interaction with non-Python
9050 Jupyter kernels such as IJulia and IRKernel.")
9051 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9052 (license license:bsd-3)))
9053
9054 (define-public python2-jupyter-console
9055 (package
9056 (name "python2-jupyter-console")
9057 (version "5.2.0")
9058 (source
9059 (origin
9060 (method url-fetch)
9061 (uri (pypi-uri "jupyter_console" version))
9062 (sha256
9063 (base32
9064 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9065 (build-system python-build-system)
9066 (arguments
9067 `(#:python ,python-2
9068 #:tests? #f)) ; Tests only run in a TTY.
9069 (propagated-inputs
9070 `(("python2-ipykernel" ,python2-ipykernel)
9071 ("python2-jupyter-client" ,python2-jupyter-client)
9072 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9073 ("python2-pygments" ,python2-pygments)))
9074 (native-inputs
9075 `(("python2-nose" ,python2-nose)))
9076 (home-page "https://jupyter.org")
9077 (synopsis "Jupyter terminal console")
9078 (description "This package provides a terminal-based console frontend for
9079 Jupyter kernels. It also allows for console-based interaction with non-Python
9080 Jupyter kernels such as IJulia and IRKernel.")
9081 (license license:bsd-3)))
9082
9083 ;; The python-ipython and python-jupyter-console require each other. To get
9084 ;; the functionality in both packages working, strip down the
9085 ;; python-jupyter-console package when using it as an input to python-ipython.
9086 (define python-jupyter-console-minimal
9087 (package
9088 (inherit python-jupyter-console)
9089 (name "python-jupyter-console-minimal")
9090 (arguments
9091 (substitute-keyword-arguments
9092 (package-arguments python-jupyter-console)
9093 ((#:phases phases)
9094 `(modify-phases ,phases
9095 (add-after 'install 'delete-bin
9096 (lambda* (#:key outputs #:allow-other-keys)
9097 ;; Delete the bin files, to avoid conflicts in profiles
9098 ;; where python-ipython and python-jupyter-console are
9099 ;; both present.
9100 (delete-file-recursively
9101 (string-append
9102 (assoc-ref outputs "out") "/bin"))))))))
9103 ;; Remove the python-ipython propagated input, to avoid the cycle
9104 (propagated-inputs
9105 (alist-delete
9106 "python-ipython"
9107 (package-propagated-inputs python-jupyter-console)))))
9108
9109 (define-public python-qtconsole
9110 (package
9111 (name "python-qtconsole")
9112 (version "4.4.3")
9113 (source
9114 (origin
9115 (method url-fetch)
9116 (uri (pypi-uri "qtconsole" version))
9117 (sha256
9118 (base32
9119 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9120 (build-system python-build-system)
9121 (arguments
9122 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9123 ;; but we only have the LTS version 5.x. This means that there might be
9124 ;; runtime errors, but since this is a dependency of the Jupyter package,
9125 ;; and Jupyter can be used without the qtconsole we can overlook this for
9126 ;; now.
9127 `(#:tests? #f
9128 #:phases
9129 (modify-phases %standard-phases
9130 (add-before 'check 'pre-check
9131 (lambda _
9132 (setenv "QT_QPA_PLATFORM" "offscreen")
9133 #t)))))
9134 (propagated-inputs
9135 `(("python-ipykernel" ,python-ipykernel)
9136 ("python-ipython" ,python-ipython)))
9137 (native-inputs
9138 `(("python-pytest" ,python-pytest)))
9139 (home-page "http://jupyter.org")
9140 (synopsis "Jupyter Qt console")
9141 (description "This package provides a Qt-based console for Jupyter with
9142 support for rich media output.")
9143 (license license:bsd-3)))
9144
9145 (define-public python-jsbeautifier
9146 (package
9147 (name "python-jsbeautifier")
9148 (version "1.10.2")
9149 (home-page "https://github.com/beautify-web/js-beautify")
9150 (source (origin
9151 (method git-fetch)
9152 (uri (git-reference
9153 (url home-page)
9154 (commit (string-append "v" version))))
9155 (file-name (git-file-name name version))
9156 (sha256
9157 (base32
9158 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9159 (build-system python-build-system)
9160 (arguments
9161 `(#:phases (modify-phases %standard-phases
9162 (add-after 'unpack 'chdir
9163 (lambda _
9164 ;; The upstream Git repository contains all the code,
9165 ;; but this package only builds the python code.
9166 (chdir "python")
9167 #t))
9168 (add-after 'unpack 'patch-python-six-requirements
9169 (lambda _
9170 (substitute* "python/setup.py"
9171 (("six>=1.12.0")
9172 "six>=1.11.0"))
9173 #t)))))
9174 (propagated-inputs
9175 `(("python-editorconfig" ,python-editorconfig)
9176 ("python-six" ,python-six)))
9177 (native-inputs
9178 `(("python-pytest" ,python-pytest)))
9179 (synopsis "JavaScript unobfuscator and beautifier")
9180 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9181 popular online obfuscators.")
9182 (license license:expat)))
9183
9184 (define-public jupyter
9185 (package
9186 (name "jupyter")
9187 (version "1.0.0")
9188 (source
9189 (origin
9190 (method url-fetch)
9191 (uri (pypi-uri "jupyter" version))
9192 (sha256
9193 (base32
9194 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9195 (build-system python-build-system)
9196 (arguments '(#:tests? #f)) ; there are none.
9197 (propagated-inputs
9198 `(("python-ipykernel" ,python-ipykernel)
9199 ("python-ipywidgets" ,python-ipywidgets)
9200 ("python-jupyter-console" ,python-jupyter-console)
9201 ("python-nbconvert" ,python-nbconvert)
9202 ("python-notebook" ,python-notebook)
9203 ("python-qtconsole" ,python-qtconsole)))
9204 (native-search-paths
9205 (list (search-path-specification
9206 (variable "JUPYTER_PATH")
9207 (files '("share/jupyter")))))
9208 (home-page "https://jupyter.org")
9209 (synopsis "Web application for interactive documents")
9210 (description
9211 "The Jupyter Notebook is a web application that allows you to create and
9212 share documents that contain live code, equations, visualizations and
9213 explanatory text. Uses include: data cleaning and transformation, numerical
9214 simulation, statistical modeling, machine learning and much more.")
9215 (license license:bsd-3)))
9216
9217 (define-public python-chardet
9218 (package
9219 (name "python-chardet")
9220 (version "3.0.4")
9221 (source
9222 (origin
9223 (method url-fetch)
9224 (uri (pypi-uri "chardet" version))
9225 (sha256
9226 (base32
9227 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9228 (native-inputs
9229 `(("python-hypothesis" ,python-hypothesis)
9230 ("python-pytest" ,python-pytest)
9231 ("python-pytest-runner" ,python-pytest-runner)))
9232 (build-system python-build-system)
9233 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9234 (arguments `(#:tests? #f))
9235 (home-page "https://github.com/chardet/chardet")
9236 (synopsis "Universal encoding detector for Python 2 and 3")
9237 (description
9238 "This package provides @code{chardet}, a Python module that can
9239 automatically detect a wide range of file encodings.")
9240 (license license:lgpl2.1+)))
9241
9242 (define-public python2-chardet
9243 (package-with-python2 python-chardet))
9244
9245 (define-public python-docopt
9246 (package
9247 (name "python-docopt")
9248 (version "0.6.2")
9249 (source
9250 (origin
9251 (method git-fetch)
9252 ;; The release on PyPI does not include tests.
9253 (uri (git-reference
9254 (url "https://github.com/docopt/docopt")
9255 (commit version)))
9256 (file-name (git-file-name name version))
9257 (sha256
9258 (base32
9259 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9260 (build-system python-build-system)
9261 (native-inputs
9262 `(("python-pytest" ,python-pytest)))
9263 (arguments
9264 `(#:phases
9265 (modify-phases %standard-phases
9266 (replace 'check
9267 (lambda _ (invoke "py.test"))))))
9268 (home-page "http://docopt.org")
9269 (synopsis "Command-line interface description language for Python")
9270 (description "This library allows the user to define a command-line
9271 interface from a program's help message rather than specifying it
9272 programmatically with command-line parsers like @code{getopt} and
9273 @code{argparse}.")
9274 (license license:expat)))
9275
9276 (define-public python2-docopt
9277 (package-with-python2 python-docopt))
9278
9279 (define-public python-pythondialog
9280 (package
9281 (name "python-pythondialog")
9282 (version "3.4.0")
9283 (source
9284 (origin
9285 (method url-fetch)
9286 (uri (pypi-uri "pythondialog" version))
9287 (sha256
9288 (base32
9289 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9290 (build-system python-build-system)
9291 (arguments
9292 `(#:phases
9293 (modify-phases %standard-phases
9294 (add-after 'unpack 'patch-path
9295 (lambda* (#:key inputs #:allow-other-keys)
9296 (let* ((dialog (assoc-ref inputs "dialog")))
9297 ;; Since this library really wants to grovel the search path, we
9298 ;; must hardcode dialog's store path into it.
9299 (substitute* "dialog.py"
9300 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9301 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9302 #t))))
9303 #:tests? #f)) ; no test suite
9304 (propagated-inputs
9305 `(("dialog" ,dialog)))
9306 (home-page "http://pythondialog.sourceforge.net/")
9307 (synopsis "Python interface to the UNIX dialog utility")
9308 (description "A Python wrapper for the dialog utility. Its purpose is to
9309 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9310 This allows one to make simple text-mode user interfaces on Unix-like systems")
9311 (license license:lgpl2.1)
9312 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9313
9314 (define-public python2-pythondialog
9315 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9316 (package
9317 (inherit base)
9318 (version (package-version python-pythondialog))
9319 (source (origin
9320 (method url-fetch)
9321 (uri (pypi-uri "python2-pythondialog" version))
9322 (sha256
9323 (base32
9324 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9325
9326 (define-public python-configobj
9327 (package
9328 (name "python-configobj")
9329 (version "5.0.6")
9330 (source (origin
9331 (method url-fetch)
9332 (uri (pypi-uri "configobj" version))
9333 (sha256
9334 (base32
9335 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9336 ;; Patch setup.py so it looks for python-setuptools, which is
9337 ;; required to parse the keyword 'install_requires' in setup.py.
9338 (patches (search-patches "python-configobj-setuptools.patch"))))
9339 (build-system python-build-system)
9340 (propagated-inputs
9341 `(("python-six" ,python-six)))
9342 (synopsis "Config file reading, writing and validation")
9343 (description "ConfigObj is a simple but powerful config file reader and
9344 writer: an ini file round tripper. Its main feature is that it is very easy to
9345 use, with a straightforward programmer’s interface and a simple syntax for
9346 config files.")
9347 (home-page "https://github.com/DiffSK/configobj")
9348 (license license:bsd-3)))
9349
9350 (define-public python2-configobj
9351 (package-with-python2 python-configobj))
9352
9353 (define-public python-configargparse
9354 (package
9355 (name "python-configargparse")
9356 (version "0.14.0")
9357 (source (origin
9358 (method url-fetch)
9359 (uri (pypi-uri "ConfigArgParse" version))
9360 (sha256
9361 (base32
9362 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9363 (build-system python-build-system)
9364 (native-inputs
9365 `(("python-pyyaml" ,python-pyyaml)))
9366 (arguments
9367 `(#:phases
9368 (modify-phases %standard-phases
9369 (replace 'check
9370 (lambda _
9371 ;; Bypass setuptools-shim because one test relies on "setup.py"
9372 ;; being the first argument passed to the python call.
9373 ;;
9374 ;; NOTE: Many tests do not run because they rely on Python's
9375 ;; built-in test.test_argparse, but we remove the unit tests from
9376 ;; our Python installation.
9377 (invoke "python" "setup.py" "test"))))))
9378 (synopsis "Replacement for argparse")
9379 (description "A drop-in replacement for argparse that allows options to also
9380 be set via config files and/or environment variables.")
9381 (home-page "https://github.com/bw2/ConfigArgParse")
9382 (license license:expat)))
9383
9384 (define-public python2-configargparse
9385 (package-with-python2 python-configargparse))
9386
9387 (define-public python-argparse-manpage
9388 (package
9389 (name "python-argparse-manpage")
9390 (version "1.1")
9391 (source
9392 (origin
9393 (method url-fetch)
9394 (uri (pypi-uri "argparse-manpage" version))
9395 (sha256
9396 (base32
9397 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9398 (build-system python-build-system)
9399 (home-page "https://github.com/praiskup/argparse-manpage")
9400 (synopsis "Build manual page from Python's ArgumentParser object")
9401 (description
9402 "This package provides tools to build manual pages from Python's
9403 @code{ArgumentParser} object.")
9404 (license license:asl2.0)))
9405
9406 (define-public python-contextlib2
9407 (package
9408 (name "python-contextlib2")
9409 (version "0.6.0.post1")
9410 (source
9411 (origin
9412 (method url-fetch)
9413 (uri (pypi-uri "contextlib2" version))
9414 (sha256
9415 (base32
9416 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9417 (build-system python-build-system)
9418 (home-page "https://contextlib2.readthedocs.org/")
9419 (synopsis "Tools for decorators and context managers")
9420 (description "This module is primarily a backport of the Python
9421 3.2 contextlib to earlier Python versions. Like contextlib, it
9422 provides utilities for common tasks involving decorators and context
9423 managers. It also contains additional features that are not part of
9424 the standard library.")
9425 (properties `((python2-variant . ,(delay python2-contextlib2))))
9426 (license license:psfl)))
9427
9428 (define-public python2-contextlib2
9429 (let ((base (package-with-python2
9430 (strip-python2-variant python-contextlib2))))
9431 (package
9432 (inherit base)
9433 (arguments
9434 (substitute-keyword-arguments (package-arguments base)
9435 ((#:phases phases)
9436 `(modify-phases ,phases
9437 (replace 'check
9438 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9439 (native-inputs
9440 `(("python2-unittest2" ,python2-unittest2))))))
9441
9442 ;; This package is used by python2-pytest via python2-importlib-metadata,
9443 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9444 (define-public python2-contextlib2-bootstrap
9445 (hidden-package
9446 (package/inherit
9447 python2-contextlib2
9448 (name "python2-contextlib2-bootstrap")
9449 (arguments
9450 `(#:tests? #f
9451 ,@(package-arguments python2-contextlib2)))
9452 (native-inputs '()))))
9453
9454 (define-public python-texttable
9455 (package
9456 (name "python-texttable")
9457 (version "1.6.2")
9458 (source
9459 (origin
9460 (method url-fetch)
9461 (uri (pypi-uri "texttable" version))
9462 (sha256
9463 (base32
9464 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9465 (build-system python-build-system)
9466 (arguments
9467 `(#:phases
9468 (modify-phases %standard-phases
9469 (replace 'check
9470 (lambda _ (invoke "pytest" "tests.py"))))))
9471 (native-inputs
9472 `(("python-pytest" ,python-pytest)))
9473 (home-page "https://github.com/foutaise/texttable/")
9474 (synopsis "Python module for creating simple ASCII tables")
9475 (description "Texttable is a Python module for creating simple ASCII
9476 tables.")
9477 (license license:expat)))
9478
9479 (define-public python2-texttable
9480 (package-with-python2 python-texttable))
9481
9482 (define-public python-atomicwrites
9483 (package
9484 (name "python-atomicwrites")
9485 (version "1.3.0")
9486 (source (origin
9487 (method url-fetch)
9488 (uri (pypi-uri "atomicwrites" version))
9489 (sha256
9490 (base32
9491 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9492 (build-system python-build-system)
9493 (synopsis "Atomic file writes in Python")
9494 (description "Library for atomic file writes using platform dependent tools
9495 for atomic file system operations.")
9496 (home-page "https://github.com/untitaker/python-atomicwrites")
9497 (license license:expat)))
9498
9499 (define-public python2-atomicwrites
9500 (package-with-python2 python-atomicwrites))
9501
9502 (define-public python-click-threading
9503 (package
9504 (name "python-click-threading")
9505 (version "0.4.4")
9506 (source (origin
9507 (method url-fetch)
9508 (uri (pypi-uri "click-threading" version))
9509 (sha256
9510 (base32
9511 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9512 (build-system python-build-system)
9513 (propagated-inputs
9514 `(("python-click" ,python-click)))
9515 (synopsis "Utilities for multithreading in Click")
9516 (description "This package provides utilities for multithreading in Click
9517 applications.")
9518 (home-page "https://github.com/click-contrib/click-threading")
9519 (license license:expat)))
9520
9521 (define-public python-click-log
9522 (package
9523 (name "python-click-log")
9524 (version "0.3.2")
9525 (source (origin
9526 (method url-fetch)
9527 (uri (pypi-uri "click-log" version))
9528 (sha256
9529 (base32
9530 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9531 (build-system python-build-system)
9532 (propagated-inputs
9533 `(("python-click" ,python-click)))
9534 (synopsis "Logging for click applications")
9535 (description "This package provides a Python library for logging Click
9536 applications.")
9537 (home-page "https://github.com/click-contrib/click-log")
9538 (license license:expat)))
9539
9540 (define-public python-apipkg
9541 (package
9542 (name "python-apipkg")
9543 (version "1.5")
9544 (source (origin
9545 (method url-fetch)
9546 (uri (pypi-uri "apipkg" version))
9547 (sha256
9548 (base32
9549 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9550 (build-system python-build-system)
9551 (native-inputs
9552 `(("python-pytest" ,python-pytest)
9553 ("python-setuptools-scm" ,python-setuptools-scm)))
9554 (synopsis "Namespace control and lazy-import mechanism")
9555 (description "With apipkg you can control the exported namespace of a Python
9556 package and greatly reduce the number of imports for your users. It is a small
9557 pure Python module that works on virtually all Python versions.")
9558 (home-page "https://github.com/pytest-dev/apipkg")
9559 (license license:expat)))
9560
9561 (define-public python-execnet
9562 (package
9563 (name "python-execnet")
9564 (version "1.4.1")
9565 (source (origin
9566 (method url-fetch)
9567 (uri (pypi-uri "execnet" version))
9568 (sha256
9569 (base32
9570 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9571 (build-system python-build-system)
9572 (arguments
9573 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9574 ;; The two test failures are caused by the lack of an `ssh` executable.
9575 ;; The test suite can be run with pytest after the 'install' phase.
9576 #:tests? #f))
9577 (native-inputs
9578 `(("python-pytest" ,python-pytest)
9579 ("python-setuptools-scm" ,python-setuptools-scm)))
9580 (propagated-inputs
9581 `(("python-apipkg" ,python-apipkg)))
9582 (synopsis "Rapid multi-Python deployment")
9583 (description "Execnet provides a share-nothing model with
9584 channel-send/receive communication for distributing execution across many
9585 Python interpreters across version, platform and network barriers. It has a
9586 minimal and fast API targeting the following uses:
9587 @enumerate
9588 @item distribute tasks to (many) local or remote CPUs
9589 @item write and deploy hybrid multi-process applications
9590 @item write scripts to administer multiple environments
9591 @end enumerate")
9592 (home-page "https://codespeak.net/execnet/")
9593 (license license:expat)))
9594
9595 (define-public python2-execnet
9596 (package-with-python2 python-execnet))
9597
9598 (define-public python-icalendar
9599 (package
9600 (name "python-icalendar")
9601 (version "4.0.5")
9602 (source (origin
9603 (method url-fetch)
9604 (uri (pypi-uri "icalendar" version))
9605 (sha256
9606 (base32
9607 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9608 (build-system python-build-system)
9609 (propagated-inputs
9610 `(("python-dateutil" ,python-dateutil)
9611 ("python-pytz" ,python-pytz)))
9612 (synopsis "Python library for parsing iCalendar files")
9613 (description "The icalendar package is a parser/generator of iCalendar
9614 files for use with Python.")
9615 (home-page "https://github.com/collective/icalendar")
9616 (license license:bsd-2)))
9617
9618 (define-public python-args
9619 (package
9620 (name "python-args")
9621 (version "0.1.0")
9622 (source (origin
9623 (method url-fetch)
9624 (uri (pypi-uri "args" version))
9625 (sha256
9626 (base32
9627 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9628 (build-system python-build-system)
9629 (home-page "https://github.com/kennethreitz/args")
9630 (synopsis "Command-line argument parser")
9631 (description
9632 "This library provides a Python module to parse command-line arguments.")
9633 (license license:bsd-3)))
9634
9635 (define-public python2-args
9636 (package-with-python2 python-args))
9637
9638 (define-public python-clint
9639 (package
9640 (name "python-clint")
9641 (version "0.5.1")
9642 (source (origin
9643 (method url-fetch)
9644 (uri (pypi-uri "clint" version))
9645 (sha256
9646 (base32
9647 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9648 (build-system python-build-system)
9649 (arguments
9650 '(#:phases
9651 (modify-phases %standard-phases
9652 (replace 'check
9653 (lambda _ (invoke "py.test" "-v"))))))
9654 (native-inputs
9655 `(("python-pytest" ,python-pytest)))
9656 (propagated-inputs
9657 `(("python-args" ,python-args)))
9658 (home-page "https://github.com/kennethreitz/clint")
9659 (synopsis "Command-line interface tools")
9660 (description
9661 "Clint is a Python module filled with a set of tools for developing
9662 command-line applications, including tools for colored and indented
9663 output, progress bar display, and pipes.")
9664 (license license:isc)))
9665
9666 (define-public python2-clint
9667 (package-with-python2 python-clint))
9668
9669 (define-public python-rply
9670 (package
9671 (name "python-rply")
9672 (version "0.7.5")
9673 (source (origin
9674 (method url-fetch)
9675 (uri (pypi-uri "rply" version))
9676 (sha256
9677 (base32
9678 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9679 (build-system python-build-system)
9680 (propagated-inputs
9681 `(("python-appdirs" ,python-appdirs)))
9682 (home-page "https://github.com/alex/rply")
9683 (synopsis "Parser generator for Python")
9684 (description
9685 "This package provides a pure Python based parser generator, that also
9686 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9687 with a new public API, and RPython support.")
9688 (license license:bsd-3)))
9689
9690 (define-public python2-rply
9691 (package-with-python2 python-rply))
9692
9693 (define-public python-hy
9694 (package
9695 (name "python-hy")
9696 (version "0.18.0")
9697 (source (origin
9698 (method url-fetch)
9699 (uri (pypi-uri "hy" version))
9700 (sha256
9701 (base32
9702 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9703 (build-system python-build-system)
9704 (arguments
9705 '(#:phases
9706 (modify-phases %standard-phases
9707 (add-before 'install 'set-HOME
9708 (lambda _
9709 (setenv "HOME" "/tmp") #t))
9710 (replace 'check
9711 (lambda _
9712 ;; Tests require write access to HOME.
9713 (setenv "HOME" "/tmp")
9714 (invoke "nosetests"))))))
9715 (native-inputs
9716 `(("python-coverage" ,python-coverage)
9717 ("python-nose" ,python-nose)))
9718 (propagated-inputs
9719 `(("python-astor" ,python-astor)
9720 ("python-colorama" ,python-colorama)
9721 ("python-rply" ,python-rply)
9722 ("python-funcparserlib"
9723 ,python-funcparserlib)))
9724 (home-page "http://hylang.org/")
9725 (synopsis "Lisp frontend to Python")
9726 (description
9727 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9728 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9729 Python at your fingertips, in Lisp form.")
9730 (license license:expat)))
9731
9732 (define-public python2-functools32
9733 (package
9734 (name "python2-functools32")
9735 (version "3.2.3-2")
9736 (source
9737 (origin
9738 (method url-fetch)
9739 (uri (pypi-uri "functools32" version))
9740 (sha256
9741 (base32
9742 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9743 (build-system python-build-system)
9744 (arguments
9745 `(#:python ,python-2
9746 #:tests? #f)) ; no test target
9747 (home-page "https://github.com/MiCHiLU/python-functools32")
9748 (synopsis
9749 "Backport of the functools module from Python 3.2.3")
9750 (description
9751 "This package is a backport of the @code{functools} module from Python
9752 3.2.3 for use with older versions of Python and PyPy.")
9753 (license license:expat)))
9754
9755 (define-public python2-subprocess32
9756 (package
9757 (name "python2-subprocess32")
9758 (version "3.2.7")
9759 (source (origin
9760 (method url-fetch)
9761 (uri (pypi-uri "subprocess32" version))
9762 (sha256
9763 (base32
9764 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9765 (patches
9766 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9767 (build-system python-build-system)
9768 (arguments
9769 `(#:python ,python-2
9770 ;; The test suite fails with Python > 2.7.13:
9771 ;; import test.support
9772 ;; ImportError: No module named support
9773 #:tests? #f
9774 #:phases
9775 (modify-phases %standard-phases
9776 (add-after 'unpack 'patch-/bin/sh
9777 (lambda _
9778 (substitute* '("subprocess32.py"
9779 "test_subprocess32.py")
9780 (("/bin/sh") (which "sh")))
9781 #t)))))
9782 (home-page "https://github.com/google/python-subprocess32")
9783 (synopsis "Backport of the subprocess module from Python 3.2")
9784 (description
9785 "This is a backport of the @code{subprocess} standard library module
9786 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9787 new features. On POSIX systems it is guaranteed to be reliable when used
9788 in threaded applications. It includes timeout support from Python 3.3 but
9789 otherwise matches 3.2’s API.")
9790 (license license:psfl)))
9791
9792 (define-public python2-futures
9793 (package
9794 (name "python2-futures")
9795 (version "3.2.0")
9796 (source
9797 (origin
9798 (method url-fetch)
9799 (uri (pypi-uri "futures" version))
9800 (sha256
9801 (base32
9802 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9803 (build-system python-build-system)
9804 (arguments
9805 `(#:python ,python-2
9806 #:phases
9807 (modify-phases %standard-phases
9808 (replace 'check
9809 (lambda _
9810 (invoke "python" "test_futures.py")
9811 #t)))))
9812 (home-page "https://github.com/agronholm/pythonfutures")
9813 (synopsis
9814 "Backport of the concurrent.futures package from Python 3.2")
9815 (description
9816 "The concurrent.futures module provides a high-level interface for
9817 asynchronously executing callables. This package backports the
9818 concurrent.futures package from Python 3.2")
9819 (license license:bsd-3)))
9820
9821 (define-public python-promise
9822 (package
9823 (name "python-promise")
9824 (version "0.4.2")
9825 (source
9826 (origin
9827 (method url-fetch)
9828 (uri (pypi-uri "promise" version))
9829 (sha256
9830 (base32
9831 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9832 (build-system python-build-system)
9833 ;; Tests wants python-futures, which is a python2 only program, and
9834 ;; can't be found by python-promise at test time.
9835 (arguments `(#:tests? #f))
9836 (home-page "https://github.com/syrusakbary/promise")
9837 (synopsis "Promises/A+ implementation for Python")
9838 (description
9839 "Promises/A+ implementation for Python")
9840 (properties `((python2-variant . ,(delay python2-promise))))
9841 (license license:expat)))
9842
9843 (define-public python2-promise
9844 (let ((promise (package-with-python2
9845 (strip-python2-variant python-promise))))
9846 (package (inherit promise)
9847 (arguments (substitute-keyword-arguments (package-arguments promise)
9848 ((#:tests? _) #t)))
9849 (native-inputs
9850 `(("python2-futures" ,python2-futures)
9851 ("python2-pytest" ,python2-pytest)
9852 ,@(package-native-inputs promise))))))
9853
9854 (define-public python-progressbar33
9855 (package
9856 (name "python-progressbar33")
9857 (version "2.4")
9858 (source
9859 (origin
9860 (method url-fetch)
9861 (uri (pypi-uri "progressbar33" version))
9862 (sha256
9863 (base32
9864 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9865 (build-system python-build-system)
9866 (home-page "http://github.com/germangh/python-progressbar")
9867 (synopsis "Text progress bar library for Python")
9868 (description
9869 "This package provides a text progress bar library for Python. This
9870 version only differs from the original @code{progressbar} package in that it
9871 uses relative package imports instead of absolute imports, which is necessary
9872 for the module to work under Python 3.3.")
9873 ;; Either or both of these licenses may be selected.
9874 (license (list license:lgpl2.1+ license:bsd-3))))
9875
9876 (define-public python-colorama
9877 (package
9878 (name "python-colorama")
9879 (version "0.4.3")
9880 (source
9881 (origin
9882 (method url-fetch)
9883 (uri (pypi-uri "colorama" version))
9884 (sha256
9885 (base32
9886 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9887 (build-system python-build-system)
9888 (synopsis "Colored terminal text rendering for Python")
9889 (description "Colorama is a Python library for rendering colored terminal
9890 text.")
9891 (home-page "https://pypi.org/project/colorama/")
9892 (license license:bsd-3)))
9893
9894 (define-public python2-colorama
9895 (package-with-python2 python-colorama))
9896
9897 (define-public python-rsa
9898 (package
9899 (name "python-rsa")
9900 (version "3.4.2")
9901 (source
9902 (origin
9903 (method url-fetch)
9904 (uri (pypi-uri "rsa" version))
9905 (sha256
9906 (base32
9907 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9908 (build-system python-build-system)
9909 (propagated-inputs
9910 `(("python-pyasn1" ,python-pyasn1)))
9911 (synopsis "Pure-Python RSA implementation")
9912 (description "Python-RSA is a pure-Python RSA implementation. It supports
9913 encryption and decryption, signing and verifying signatures, and key
9914 generation according to PKCS#1 version 1.5. It can be used as a Python
9915 library as well as on the command line.")
9916 (home-page "https://stuvel.eu/rsa")
9917 (license license:asl2.0)))
9918
9919 (define-public python2-rsa
9920 (package-with-python2 python-rsa))
9921
9922 (define-public python-pluggy
9923 (package
9924 (name "python-pluggy")
9925 (version "0.13.1")
9926 (source
9927 (origin
9928 (method url-fetch)
9929 (uri (pypi-uri "pluggy" version))
9930 (sha256
9931 (base32
9932 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
9933 (build-system python-build-system)
9934 (native-inputs
9935 `(("python-setuptools-scm" ,python-setuptools-scm)))
9936 (synopsis "Plugin and hook calling mechanism for Python")
9937 (description "Pluggy is an extraction of the plugin manager as used by
9938 Pytest but stripped of Pytest specific details.")
9939 (home-page "https://pypi.org/project/pluggy/")
9940 (properties `((python2-variant . ,(delay python2-pluggy))))
9941 (license license:expat)))
9942
9943 (define-public python2-pluggy
9944 (let ((base (package-with-python2 (strip-python2-variant
9945 python-pluggy))))
9946 (package/inherit
9947 base
9948 (propagated-inputs
9949 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
9950
9951 ;; This package requires python2-importlib-metadata, but that package
9952 ;; ends up needing python2-pluggy via python2-pytest, so we need this
9953 ;; variant to solve the circular dependency.
9954 (define-public python2-pluggy-bootstrap
9955 (hidden-package
9956 (package/inherit
9957 python2-pluggy
9958 (name "python2-pluggy-bootstrap")
9959 (arguments
9960 `(#:tests? #f
9961 ,@(package-arguments python2-pluggy)))
9962 (propagated-inputs
9963 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
9964
9965 (define-public python-tox
9966 (package
9967 (name "python-tox")
9968 (version "2.8.1")
9969 (source
9970 (origin
9971 (method url-fetch)
9972 (uri (pypi-uri "tox" version))
9973 (sha256
9974 (base32
9975 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
9976 (build-system python-build-system)
9977 (arguments
9978 ;; FIXME: Tests require pytest-timeout, which itself requires
9979 ;; pytest>=2.8.0 for installation.
9980 '(#:tests? #f))
9981 (propagated-inputs
9982 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9983 ("python-py" ,python-py)
9984 ("python-virtualenv" ,python-virtualenv)))
9985 (native-inputs
9986 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9987 ("python-pytest" ,python-pytest) ; >= 2.3.5
9988 ("python-setuptools-scm" ,python-setuptools-scm)))
9989 (home-page "https://tox.readthedocs.io")
9990 (synopsis "Virtualenv-based automation of test activities")
9991 (description "Tox is a generic virtualenv management and test command line
9992 tool. It can be used to check that a package installs correctly with
9993 different Python versions and interpreters, or run tests in each type of
9994 supported environment, or act as a frontend to continuous integration
9995 servers.")
9996 (license license:expat)))
9997
9998 (define-public python2-tox
9999 (package-with-python2 python-tox))
10000
10001 (define-public python-jmespath
10002 (package
10003 (name "python-jmespath")
10004 (version "0.9.4")
10005 (source
10006 (origin
10007 (method url-fetch)
10008 (uri (pypi-uri "jmespath" version))
10009 (sha256
10010 (base32
10011 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10012 (build-system python-build-system)
10013 (native-inputs
10014 `(("python-nose" ,python-nose)))
10015 (synopsis "JSON Matching Expressions")
10016 (description "JMESPath (pronounced “james path”) is a Python library that
10017 allows one to declaratively specify how to extract elements from a JSON
10018 document.")
10019 (home-page "https://github.com/jmespath/jmespath.py")
10020 (license license:expat)))
10021
10022 (define-public python2-jmespath
10023 (package-with-python2 python-jmespath))
10024
10025 (define-public python-botocore
10026 (package
10027 (name "python-botocore")
10028 (version "1.15.26")
10029 (source
10030 (origin
10031 (method url-fetch)
10032 (uri (pypi-uri "botocore" version))
10033 (sha256
10034 (base32
10035 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10036 (build-system python-build-system)
10037 (arguments
10038 ;; FIXME: Many tests are failing.
10039 '(#:tests? #f))
10040 (propagated-inputs
10041 `(("python-dateutil" ,python-dateutil)
10042 ("python-docutils" ,python-docutils)
10043 ("python-jmespath" ,python-jmespath)))
10044 (native-inputs
10045 `(("python-mock" ,python-mock)
10046 ("python-nose" ,python-nose)
10047 ("behave" ,behave)
10048 ("python-tox" ,python-tox)
10049 ("python-urllib3" ,python-urllib3)
10050 ("python-wheel" ,python-wheel)))
10051 (home-page "https://github.com/boto/botocore")
10052 (synopsis "Low-level interface to AWS")
10053 (description "Botocore is a Python library that provides a low-level
10054 interface to the Amazon Web Services (AWS) API.")
10055 (license license:asl2.0)))
10056
10057 (define-public python2-botocore
10058 (package-with-python2 python-botocore))
10059
10060 (define-public python-xdo
10061 (package
10062 (name "python-xdo")
10063 (version "0.3")
10064 (source (origin
10065 (method url-fetch)
10066 (uri (string-append
10067 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10068 "python-xdo_" version ".orig.tar.gz"))
10069 (sha256
10070 (base32
10071 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10072 (build-system python-build-system)
10073 (arguments
10074 '(#:phases
10075 (modify-phases %standard-phases
10076 (add-before 'install 'patch-libxdo-path
10077 ;; Hardcode the path of dynamically loaded libxdo library.
10078 (lambda* (#:key inputs #:allow-other-keys)
10079 (let ((libxdo (string-append
10080 (assoc-ref inputs "xdotool")
10081 "/lib/libxdo.so")))
10082 (substitute* "xdo/_xdo.py"
10083 (("find_library\\(\"xdo\"\\)")
10084 (simple-format #f "\"~a\"" libxdo)))
10085 #t))))
10086 #:tests? #f)) ; no tests provided
10087 (propagated-inputs
10088 `(("python-six" ,python-six)))
10089 (inputs
10090 `(("xdotool" ,xdotool)
10091 ("libX11" ,libx11)))
10092 (home-page "https://tracker.debian.org/pkg/python-xdo")
10093 (synopsis "Python library for simulating X11 keyboard/mouse input")
10094 (description "Provides bindings to libxdo for manipulating X11 via simulated
10095 input. (Note that this is mostly a legacy library; you may wish to look at
10096 python-xdo for newer bindings.)")
10097 (license license:bsd-3)))
10098
10099 (define-public python2-xdo
10100 (package-with-python2 python-xdo))
10101
10102 (define-public python-mako
10103 (package
10104 (name "python-mako")
10105 (version "1.1.1")
10106 (source
10107 (origin
10108 (method url-fetch)
10109 (uri (pypi-uri "Mako" version))
10110 (sha256
10111 (base32
10112 "193mds7lv91pphnvn6c1n55rhjkgq94asdzgrsb2fiqx7rrsd119"))))
10113 (build-system python-build-system)
10114 (arguments
10115 `(#:phases (modify-phases %standard-phases
10116 (replace 'check
10117 (lambda* (#:key tests? #:allow-other-keys)
10118 (if tests?
10119 (invoke "nosetests" "-v")
10120 (format #t "test suite not run~%"))
10121 #t)))))
10122 (propagated-inputs
10123 `(("python-markupsafe" ,python-markupsafe)))
10124 (native-inputs
10125 `(("python-mock" ,python-mock)
10126 ("python-nose" ,python-nose)))
10127 (home-page "https://www.makotemplates.org/")
10128 (synopsis "Templating language for Python")
10129 (description "Mako is a templating language for Python that compiles
10130 templates into Python modules.")
10131 (license license:expat)))
10132
10133 (define-public python2-mako
10134 (package-with-python2 python-mako))
10135
10136 (define-public python-waitress
10137 (package
10138 (name "python-waitress")
10139 (version "1.1.0")
10140 (source
10141 (origin
10142 (method url-fetch)
10143 (uri (pypi-uri "waitress" version))
10144 (patches (search-patches "python-waitress-fix-tests.patch"))
10145 (sha256
10146 (base32
10147 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10148 (build-system python-build-system)
10149 (home-page "https://github.com/Pylons/waitress")
10150 (synopsis "Waitress WSGI server")
10151 (description "Waitress is meant to be a production-quality pure-Python WSGI
10152 server with very acceptable performance.")
10153 (license license:zpl2.1)))
10154
10155 (define-public python2-waitress
10156 (package-with-python2 python-waitress))
10157
10158 (define-public python-whichcraft
10159 (package
10160 (name "python-whichcraft")
10161 (version "0.6.1")
10162 (source
10163 (origin
10164 (method url-fetch)
10165 (uri (pypi-uri "whichcraft" version))
10166 (sha256
10167 (base32
10168 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10169 (build-system python-build-system)
10170 (native-inputs
10171 `(("python-pytest" ,python-pytest)))
10172 (home-page "https://github.com/pydanny/whichcraft")
10173 (synopsis "Cross-platform cross-python shutil.which functionality")
10174 (description
10175 "This package provides a shim of the shutil.which function that's
10176 designed to work across multiple versions of Python.")
10177 (license license:bsd-3)))
10178
10179 (define-public python-cookiecutter
10180 (package
10181 (name "python-cookiecutter")
10182 (version "1.6.0")
10183 (source
10184 (origin
10185 (method url-fetch)
10186 (uri (pypi-uri "cookiecutter" version))
10187 (sha256
10188 (base32
10189 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10190 (build-system python-build-system)
10191 (native-inputs
10192 `(("python-freezegun" ,python-freezegun)
10193 ("python-pytest" ,python-pytest)
10194 ("python-pytest-catchlog" ,python-pytest-catchlog)
10195 ("python-pytest-cov" ,python-pytest-cov)
10196 ("python-pytest-mock" ,python-pytest-mock)))
10197 (propagated-inputs
10198 `(("python-binaryornot" ,python-binaryornot)
10199 ("python-click" ,python-click)
10200 ("python-future" ,python-future)
10201 ("python-jinja2" ,python-jinja2)
10202 ("python-jinja2-time" ,python-jinja2-time)
10203 ("python-poyo" ,python-poyo)
10204 ("python-requests" ,python-requests)
10205 ("python-whichcraft" ,python-whichcraft)))
10206 (home-page "https://github.com/audreyr/cookiecutter")
10207 (synopsis
10208 "Command-line utility that creates projects from project templates")
10209 (description
10210 "This package provides a command-line utility that creates projects from
10211 project templates, e.g. creating a Python package project from a Python package
10212 project template.")
10213 (license license:bsd-3)))
10214
10215 (define-public python-pyquery
10216 (package
10217 (name "python-pyquery")
10218 (version "1.2.17")
10219 (source
10220 (origin
10221 (method url-fetch)
10222 (uri (pypi-uri "pyquery" version))
10223 (sha256
10224 (base32
10225 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10226 (build-system python-build-system)
10227 (native-inputs
10228 `(("python-webob" ,python-webob)
10229 ("python-webtest" ,python-webtest)))
10230 (propagated-inputs
10231 `(("python-lxml" ,python-lxml)
10232 ("python-cssselect" ,python-cssselect)))
10233 (home-page "https://github.com/gawel/pyquery")
10234 (synopsis "Make jQuery-like queries on xml documents")
10235 (description "pyquery allows you to make jQuery queries on xml documents.
10236 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10237 fast xml and html manipulation.")
10238 (license license:bsd-3)))
10239
10240 (define-public python-anyjson
10241 (package
10242 (name "python-anyjson")
10243 (version "0.3.3")
10244 (source
10245 (origin
10246 (method url-fetch)
10247 (uri (pypi-uri "anyjson" version))
10248 (sha256
10249 (base32
10250 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10251 (build-system python-build-system)
10252 (arguments
10253 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10254 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10255 ;; whatever) so this transformation needs to be done before the tests
10256 ;; can be run. Maybe we could add a build step to transform beforehand
10257 ;; but it could be annoying/difficult.
10258 ;; We can enable tests for the Python 2 version, though, and do below.
10259 #:tests? #f))
10260 (home-page "https://bitbucket.org/runeh/anyjson/")
10261 (synopsis
10262 "Wraps best available JSON implementation in a common interface")
10263 (description
10264 "Anyjson loads whichever is the fastest JSON module installed
10265 and provides a uniform API regardless of which JSON implementation is used.")
10266 (license license:bsd-3)
10267 (properties `((python2-variant . ,(delay python2-anyjson))))))
10268
10269 (define-public python2-anyjson
10270 (let ((anyjson (package-with-python2
10271 (strip-python2-variant python-anyjson))))
10272 (package
10273 (inherit anyjson)
10274 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10275 #:tests? #t
10276 ,@(package-arguments anyjson)))
10277 (native-inputs `(("python2-nose" ,python2-nose))))))
10278
10279 (define-public python-amqp
10280 (package
10281 (name "python-amqp")
10282 (version "2.3.2")
10283 (source
10284 (origin
10285 (method url-fetch)
10286 (uri (pypi-uri "amqp" version))
10287 (sha256
10288 (base32
10289 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10290 (build-system python-build-system)
10291 (native-inputs
10292 `(("python-case" ,python-case)
10293 ("python-pytest-sugar" ,python-pytest-sugar)
10294 ("python-mock" ,python-mock)))
10295 (propagated-inputs
10296 `(("python-vine" ,python-vine)))
10297 (home-page "https://github.com/celery/py-amqp")
10298 (synopsis
10299 "Low-level AMQP client for Python (fork of amqplib)")
10300 (description
10301 "This is a fork of amqplib which was originally written by Barry Pederson.
10302 It is maintained by the Celery project, and used by kombu as a pure python
10303 alternative when librabbitmq is not available.")
10304 (license license:lgpl2.1+)
10305 (properties `((python2-variant . ,(delay python2-amqp))))))
10306
10307 (define-public python2-amqp
10308 (let ((amqp (package-with-python2
10309 (strip-python2-variant python-amqp))))
10310 (package
10311 (inherit amqp)
10312 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10313 ;; unmaintained. Weirdly, does not do this on the python 3
10314 ;; version?
10315 #:tests? #f
10316 ,@(package-arguments amqp))))))
10317
10318 (define-public python-txamqp
10319 (package
10320 (name "python-txamqp")
10321 (version "0.8.2")
10322 (source
10323 (origin
10324 (method url-fetch)
10325 (uri (pypi-uri "txAMQP" version))
10326 (sha256
10327 (base32
10328 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10329 (build-system python-build-system)
10330 (propagated-inputs
10331 `(("python-six" ,python-six)
10332 ("python-twisted" ,python-twisted)))
10333 (home-page "https://github.com/txamqp/txamqp")
10334 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10335 (description
10336 "This package provides a Python library for communicating with AMQP peers
10337 and brokers using the asynchronous networking framework Twisted. It contains
10338 all the necessary code to connect, send and receive messages to/from an
10339 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10340 also includes support for using Thrift RPC over AMQP in Twisted
10341 applications.")
10342 (license license:asl2.0)))
10343
10344 (define-public python2-txamqp
10345 (package-with-python2 python-txamqp))
10346
10347 (define-public python-kombu
10348 (package
10349 (name "python-kombu")
10350 (version "4.2.2")
10351 (source
10352 (origin
10353 (method url-fetch)
10354 (uri (pypi-uri "kombu" version))
10355 (sha256
10356 (base32
10357 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10358 (build-system python-build-system)
10359 (native-inputs
10360 `(("python-mock" ,python-mock)
10361 ("python-case" ,python-case)
10362 ("python-pyro4" ,python-pyro4)
10363 ("python-pytest-sugar" ,python-pytest-sugar)
10364 ("python-pytz" ,python-pytz)))
10365 (propagated-inputs
10366 `(("python-anyjson" ,python-anyjson)
10367 ("python-amqp" ,python-amqp)
10368 ("python-redis" ,python-redis)))
10369 (home-page "https://kombu.readthedocs.io")
10370 (synopsis "Message passing library for Python")
10371 (description "The aim of Kombu is to make messaging in Python as easy as
10372 possible by providing an idiomatic high-level interface for the AMQ protocol,
10373 and also provide proven and tested solutions to common messaging problems.
10374 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10375 message orientation, queuing, routing, reliability and security, for which the
10376 RabbitMQ messaging server is the most popular implementation.")
10377 (license license:bsd-3)
10378 (properties `((python2-variant . ,(delay python2-kombu))))))
10379
10380 (define-public python2-kombu
10381 (let ((kombu (package-with-python2
10382 (strip-python2-variant python-kombu))))
10383 (package
10384 (inherit kombu)
10385 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10386 ;; It works fine on the python3 variant.
10387 #:tests? #f
10388 ,@(package-arguments kombu)))
10389 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10390 ,@(package-native-inputs kombu))))))
10391
10392 (define-public python-billiard
10393 (package
10394 (name "python-billiard")
10395 (version "3.5.0.5")
10396 (source
10397 (origin
10398 (method url-fetch)
10399 (uri (pypi-uri "billiard" version))
10400 (sha256
10401 (base32
10402 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10403 (build-system python-build-system)
10404 (native-inputs
10405 `(("python-case" ,python-case)
10406 ("python-pytest" ,python-pytest)))
10407 (home-page "https://github.com/celery/billiard")
10408 (synopsis
10409 "Python multiprocessing fork with improvements and bugfixes")
10410 (description
10411 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10412 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10413 pyprocessing package. This standalone variant is intended to be compatible with
10414 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10415 (license license:bsd-3)
10416 (properties `((python2-variant . ,(delay python2-billiard))))))
10417
10418 (define-public python2-billiard
10419 (let ((billiard (package-with-python2
10420 (strip-python2-variant python-billiard))))
10421 (package
10422 (inherit billiard)
10423 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10424 ("python2-mock" ,python2-mock)
10425 ,@(package-native-inputs billiard))))))
10426
10427 (define-public python-celery
10428 (package
10429 (name "python-celery")
10430 (version "4.2.1")
10431 (source
10432 (origin
10433 (method url-fetch)
10434 (uri (pypi-uri "celery" version))
10435 (sha256
10436 (base32
10437 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10438 (build-system python-build-system)
10439 (arguments
10440 '(;; TODO The tests fail with Python 3.7
10441 ;; https://github.com/celery/celery/issues/4849
10442 #:tests? #f
10443 #:phases
10444 (modify-phases %standard-phases
10445 (add-after 'unpack 'patch-requirements
10446 (lambda _
10447 (substitute* "requirements/test.txt"
10448 (("pytest>=3\\.0,<3\\.3")
10449 "pytest>=3.0"))
10450 #t)))))
10451 (native-inputs
10452 `(("python-case" ,python-case)
10453 ("python-pytest" ,python-pytest)))
10454 (propagated-inputs
10455 `(("python-pytz" ,python-pytz)
10456 ("python-billiard" ,python-billiard)
10457 ("python-kombu" ,python-kombu)))
10458 (home-page "https://celeryproject.org")
10459 (synopsis "Distributed Task Queue")
10460 (description "Celery is an asynchronous task queue/job queue based on
10461 distributed message passing. It is focused on real-time operation, but
10462 supports scheduling as well. The execution units, called tasks, are executed
10463 concurrently on a single or more worker servers using multiprocessing,
10464 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10465 synchronously (wait until ready).")
10466 (license license:bsd-3)
10467 (properties `((python2-variant . ,(delay python2-celery))))))
10468
10469 (define-public python2-celery
10470 (let ((celery (package-with-python2
10471 (strip-python2-variant python-celery))))
10472 (package
10473 (inherit celery)
10474 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10475 ("python2-mock" ,python2-mock)
10476 ,@(package-native-inputs celery))))))
10477
10478 (define-public python-translitcodec
10479 (package
10480 (name "python-translitcodec")
10481 (version "0.4.0")
10482 (source
10483 (origin
10484 (method url-fetch)
10485 (uri (pypi-uri "translitcodec" version))
10486 (sha256
10487 (base32
10488 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10489 (build-system python-build-system)
10490 (arguments
10491 `(#:tests? #f)) ; no tests provided
10492 (home-page
10493 "https://github.com/claudep/translitcodec")
10494 (synopsis
10495 "Unicode to 8-bit charset transliteration codec")
10496 (description
10497 "This package contains codecs for transliterating ISO 10646 texts into
10498 best-effort representations using smaller coded character sets (ASCII,
10499 ISO 8859, etc.).")
10500 (license license:expat)))
10501
10502 (define-public python2-translitcodec
10503 (package-with-python2 python-translitcodec))
10504
10505 (define-public python-editor
10506 (package
10507 (name "python-editor")
10508 (version "1.0.4")
10509 (source
10510 (origin
10511 (method url-fetch)
10512 (uri (pypi-uri "python-editor" version))
10513 (sha256
10514 (base32
10515 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10516 (build-system python-build-system)
10517 (arguments
10518 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10519 (home-page "https://github.com/fmoo/python-editor")
10520 (synopsis "Programmatically open an editor, capture the result")
10521 (description
10522 "python-editor is a library that provides the editor module for
10523 programmatically interfacing with your system's $EDITOR.")
10524 (license license:asl2.0)))
10525
10526 (define-public python2-editor
10527 (package-with-python2 python-editor))
10528
10529 (define-public python-vobject
10530 (package
10531 (name "python-vobject")
10532 (version "0.9.6.1")
10533 (source (origin
10534 (method url-fetch)
10535 (uri (pypi-uri "vobject" version))
10536 (sha256
10537 (base32
10538 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10539 (build-system python-build-system)
10540 (arguments
10541 '(;; The test suite relies on some non-portable Windows interfaces.
10542 #:tests? #f))
10543 (propagated-inputs
10544 `(("python-dateutil" ,python-dateutil)
10545 ("python-pyicu" ,python-pyicu)))
10546 (synopsis "Parse and generate vCard and vCalendar files")
10547 (description "Vobject is intended to be a full featured Python package for
10548 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10549 are supported and well tested. vCard 3.0 files are supported, and all data
10550 should be imported, but only a few components are understood in a sophisticated
10551 way.")
10552 (home-page "https://eventable.github.io/vobject/")
10553 (license license:asl2.0)))
10554
10555 (define-public python2-vobject
10556 (package-with-python2 python-vobject))
10557
10558 (define-public python-munkres
10559 (package
10560 (name "python-munkres")
10561 (version "1.0.8")
10562 (source (origin
10563 (method url-fetch)
10564 (uri (pypi-uri "munkres" version))
10565 (sha256
10566 (base32
10567 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10568 (build-system python-build-system)
10569 (arguments
10570 '(#:tests? #f)) ; no test suite
10571 (home-page "https://software.clapper.org/munkres/")
10572 (synopsis "Implementation of the Munkres algorithm")
10573 (description "The Munkres module provides an implementation of the Munkres
10574 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10575 useful for solving the Assignment Problem.")
10576 (license license:bsd-3)))
10577
10578 (define-public python2-munkres
10579 (package-with-python2 python-munkres))
10580
10581 (define-public python-whoosh
10582 (package
10583 (name "python-whoosh")
10584 (version "2.7.4")
10585 (source
10586 (origin
10587 (method url-fetch)
10588 (uri (pypi-uri "Whoosh" version))
10589 (sha256
10590 (base32
10591 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10592 (build-system python-build-system)
10593 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10594 (native-inputs
10595 `(("python-pytest" ,python-pytest)))
10596 (home-page "https://bitbucket.org/mchaput/whoosh")
10597 (synopsis "Full text indexing, search, and spell checking library")
10598 (description
10599 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10600 checking library.")
10601 (license license:bsd-2)))
10602
10603 (define-public python2-whoosh
10604 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10605 (package (inherit whoosh)
10606 (propagated-inputs
10607 `(("python2-backport-ssl-match-hostname"
10608 ,python2-backport-ssl-match-hostname)
10609 ,@(package-propagated-inputs whoosh))))))
10610
10611 (define-public python-pathlib
10612 (package
10613 (name "python-pathlib")
10614 (version "1.0.1")
10615 (source (origin
10616 (method url-fetch)
10617 (uri (pypi-uri "pathlib" version))
10618 (sha256
10619 (base32
10620 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10621 (build-system python-build-system)
10622 ;; The tests depend on the internal "test" module, which does not provide
10623 ;; a stable interface.
10624 (arguments `(#:tests? #f))
10625 (home-page "https://pathlib.readthedocs.org/")
10626 (synopsis "Object-oriented file system paths")
10627 (description "Pathlib offers a set of classes to handle file system paths.
10628 It offers the following advantages over using string objects:
10629
10630 @enumerate
10631 @item No more cumbersome use of os and os.path functions. Everything can
10632 be done easily through operators, attribute accesses, and method calls.
10633 @item Embodies the semantics of different path types. For example,
10634 comparing Windows paths ignores casing.
10635 @item Well-defined semantics, eliminating any inconsistencies or
10636 ambiguities (forward vs. backward slashes, etc.).
10637 @end enumerate
10638
10639 Note: In Python 3.4, pathlib is now part of the standard library. For other
10640 Python versions please consider python-pathlib2 instead, which tracks the
10641 standard library module. This module (python-pathlib) isn't maintained
10642 anymore.")
10643 (license license:expat)))
10644
10645 (define-public python2-pathlib
10646 (package-with-python2 python-pathlib))
10647
10648 (define-public python2-pathlib2
10649 (package
10650 (name "python2-pathlib2")
10651 (version "2.3.5")
10652 (source (origin
10653 (method url-fetch)
10654 (uri (pypi-uri "pathlib2" version))
10655 (sha256
10656 (base32
10657 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10658 (build-system python-build-system)
10659 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10660 ;; version is 3.4 which already includes this package as part of the
10661 ;; standard library.
10662 (arguments
10663 `(#:python ,python-2))
10664 (propagated-inputs
10665 `(("python2-scandir" ,python2-scandir)
10666 ("python2-six" ,python2-six)))
10667 (home-page "https://pypi.org/project/pathlib2/")
10668 (synopsis "Object-oriented file system paths - backport of standard
10669 pathlib module")
10670 (description "The goal of pathlib2 is to provide a backport of standard
10671 pathlib module which tracks the standard library module, so all the newest
10672 features of the standard pathlib can be used also on older Python versions.
10673
10674 Pathlib offers a set of classes to handle file system paths. It offers the
10675 following advantages over using string objects:
10676
10677 @enumerate
10678 @item No more cumbersome use of os and os.path functions. Everything can
10679 be done easily through operators, attribute accesses, and method calls.
10680 @item Embodies the semantics of different path types. For example,
10681 comparing Windows paths ignores casing.
10682 @item Well-defined semantics, eliminating any inconsistencies or
10683 ambiguities (forward vs. backward slashes, etc.).
10684 @end enumerate")
10685 (license license:expat)))
10686
10687 (define-public python2-pathlib2-bootstrap
10688 (hidden-package
10689 (package
10690 (inherit python2-pathlib2)
10691 (name "python2-pathlib2-bootstrap")
10692 (propagated-inputs
10693 `(("python2-scandir" ,python2-scandir)
10694 ("python2-six" ,python2-six-bootstrap))))))
10695
10696 (define-public python-jellyfish
10697 (package
10698 (name "python-jellyfish")
10699 (version "0.5.6")
10700 (source (origin
10701 (method url-fetch)
10702 (uri (pypi-uri "jellyfish" version))
10703 (sha256
10704 (base32
10705 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10706 (build-system python-build-system)
10707 (native-inputs
10708 `(("python-pytest" ,python-pytest)))
10709 (home-page "https://github.com/jamesturk/jellyfish")
10710 (synopsis "Approximate and phonetic matching of strings")
10711 (description "Jellyfish uses a variety of string comparison and phonetic
10712 encoding algorithms to do fuzzy string matching.")
10713 (license license:bsd-2)
10714 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10715
10716 (define-public python2-jellyfish
10717 (let ((jellyfish (package-with-python2
10718 (strip-python2-variant python-jellyfish))))
10719 (package (inherit jellyfish)
10720 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10721 ,@(package-native-inputs jellyfish))))))
10722
10723 (define-public python2-unicodecsv
10724 (package
10725 (name "python2-unicodecsv")
10726 (version "0.14.1")
10727 (source (origin
10728 (method git-fetch)
10729 ;; The test suite is not included in the PyPi release.
10730 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10731 (uri (git-reference
10732 (url "https://github.com/jdunck/python-unicodecsv")
10733 (commit version)))
10734 (file-name (git-file-name name version))
10735 (sha256
10736 (base32
10737 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10738 (build-system python-build-system)
10739 (arguments
10740 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10741 #:python ,python-2))
10742 (native-inputs
10743 `(("python2-unittest2" ,python2-unittest2)))
10744 (home-page "https://github.com/jdunck/python-unicodecsv")
10745 (synopsis "Unicode CSV module for Python 2")
10746 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10747 module, adding support for Unicode strings.")
10748 (license license:bsd-2)))
10749
10750 (define-public python-rarfile
10751 (package
10752 (name "python-rarfile")
10753 (version "2.8")
10754 (source (origin
10755 (method url-fetch)
10756 (uri (pypi-uri "rarfile" version))
10757 (sha256
10758 (base32
10759 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10760 (build-system python-build-system)
10761 (arguments
10762 '(#:phases
10763 (modify-phases %standard-phases
10764 (replace 'check
10765 ;; Many tests fail, but the installation proceeds.
10766 (lambda _ (invoke "make" "-C" "test" "test"))))))
10767 (native-inputs
10768 `(("which" ,which))) ; required for tests
10769 (propagated-inputs
10770 `(("libarchive" ,libarchive)))
10771 (home-page "https://github.com/markokr/rarfile")
10772 (synopsis "RAR archive reader for Python")
10773 (description "This is Python module for RAR archive reading. The interface
10774 is made as zipfile like as possible.")
10775 (license license:isc)))
10776
10777 (define-public python2-rarfile
10778 (package-with-python2 python-rarfile))
10779
10780 (define-public python-magic
10781 (package
10782 (name "python-magic")
10783 (version "0.4.15")
10784 (source
10785 (origin
10786 (method url-fetch)
10787 (uri (pypi-uri "python-magic" version))
10788 (sha256
10789 (base32
10790 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10791 (file-name (string-append name "-" version "-checkout"))))
10792 (build-system python-build-system)
10793 (arguments
10794 ;; The tests are unreliable, so don't run them. The tests fail
10795 ;; under Python3 because they were written for Python2 and
10796 ;; contain import statements that do not work in Python3. One of
10797 ;; the tests fails under Python2 because its assertions are
10798 ;; overly stringent; it relies on comparing output strings which
10799 ;; are brittle and can change depending on the version of
10800 ;; libmagic being used and the system on which the test is
10801 ;; running. In my case, under GuixSD 0.10.0, only one test
10802 ;; failed, and it seems to have failed only because the version
10803 ;; of libmagic that is packaged in Guix outputs a slightly
10804 ;; different (but not wrong) string than the one that the test
10805 ;; expected.
10806 '(#:tests? #f
10807 #:phases (modify-phases %standard-phases
10808 ;; Replace a specific method call with a hard-coded
10809 ;; path to the necessary libmagic.so file in the
10810 ;; store. If we don't do this, then the method call
10811 ;; will fail to find the libmagic.so file, which in
10812 ;; turn will cause any application using
10813 ;; python-magic to fail.
10814 (add-before 'build 'hard-code-path-to-libmagic
10815 (lambda* (#:key inputs #:allow-other-keys)
10816 (let ((file (assoc-ref inputs "file")))
10817 (substitute* "magic.py"
10818 (("ctypes.util.find_library\\('magic'\\)")
10819 (string-append "'" file "/lib/libmagic.so'")))
10820 #t)))
10821 (add-before 'install 'disable-egg-compression
10822 (lambda _
10823 (let ((port (open-file "setup.cfg" "a")))
10824 (display "\n[easy_install]\nzip_ok = 0\n"
10825 port)
10826 (close-port port)
10827 #t))))))
10828 (inputs
10829 ;; python-magic needs to be able to find libmagic.so.
10830 `(("file" ,file)))
10831 (home-page
10832 "https://github.com/ahupp/python-magic")
10833 (synopsis
10834 "File type identification using libmagic")
10835 (description
10836 "This module uses ctypes to access the libmagic file type
10837 identification library. It makes use of the local magic database and
10838 supports both textual and MIME-type output. Note that this module and
10839 the python-file module both provide a \"magic.py\" file; these two
10840 modules, which are different and were developed separately, both serve
10841 the same purpose: to provide Python bindings for libmagic.")
10842 (license license:expat)))
10843
10844 (define-public python2-magic
10845 (package-with-python2 python-magic))
10846
10847 (define-public python2-s3cmd
10848 (package
10849 (name "python2-s3cmd")
10850 (version "1.6.1")
10851 (source
10852 (origin
10853 (method url-fetch)
10854 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10855 "s3cmd-" version ".tar.gz"))
10856 (sha256
10857 (base32
10858 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10859 (build-system python-build-system)
10860 (arguments
10861 ;; s3cmd is written for python2 only and contains no tests.
10862 `(#:python ,python-2
10863 #:tests? #f))
10864 (propagated-inputs
10865 `(("python2-dateutil" ,python2-dateutil)
10866 ;; The python-file package also provides a magic.py module.
10867 ;; This is an unfortunate state of affairs; however, s3cmd
10868 ;; fails to install if it cannot find specifically the
10869 ;; python-magic package. Thus we include it, instead of using
10870 ;; python-file. Ironically, s3cmd sometimes works better
10871 ;; without libmagic bindings at all:
10872 ;; https://github.com/s3tools/s3cmd/issues/198
10873 ("python2-magic" ,python2-magic)))
10874 (home-page "https://s3tools.org/s3cmd")
10875 (synopsis "Command line tool for S3-compatible storage services")
10876 (description
10877 "S3cmd is a command line tool for uploading, retrieving and managing data
10878 in storage services that are compatible with the Amazon Simple Storage
10879 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10880 GnuPG encryption, and more. It also supports management of Amazon's
10881 CloudFront content delivery network.")
10882 (license license:gpl2+)))
10883
10884 (define-public python-pkgconfig
10885 (package
10886 (name "python-pkgconfig")
10887 (version "1.3.1")
10888 (source
10889 (origin
10890 (method url-fetch)
10891 (uri (pypi-uri "pkgconfig" version))
10892 (sha256
10893 (base32
10894 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10895 (build-system python-build-system)
10896 (native-inputs
10897 `(("python-nose" ,python-nose)))
10898 (inputs
10899 `(("pkg-config" ,pkg-config)))
10900 (arguments
10901 `(#:phases
10902 (modify-phases %standard-phases
10903 (add-before 'build 'patch
10904 ;; Hard-code the path to pkg-config.
10905 (lambda _
10906 (substitute* "pkgconfig/pkgconfig.py"
10907 (("cmd = 'pkg-config")
10908 (string-append "cmd = '" (which "pkg-config"))))
10909 #t))
10910 (replace 'check
10911 (lambda _
10912 (invoke "nosetests" "test.py"))))))
10913 (home-page "https://github.com/matze/pkgconfig")
10914 (synopsis "Python interface for pkg-config")
10915 (description "This module provides a Python interface to pkg-config. It
10916 can be used to find all pkg-config packages, check if a package exists,
10917 check if a package meets certain version requirements, query CFLAGS and
10918 LDFLAGS and parse the output to build extensions with setup.py.")
10919 (license license:expat)))
10920
10921 (define-public python2-pkgconfig
10922 (package-with-python2 python-pkgconfig))
10923
10924 (define-public python-bz2file
10925 (package
10926 (name "python-bz2file")
10927 (version "0.98")
10928 (source
10929 (origin
10930 (method url-fetch)
10931 (uri (pypi-uri "bz2file" version))
10932 (sha256
10933 (base32
10934 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10935 (build-system python-build-system)
10936 (arguments
10937 `(#:tests? #f)) ; Tests use deprecated python modules.
10938 (home-page "https://github.com/nvawda/bz2file")
10939 (synopsis "Read and write bzip2-compressed files")
10940 (description
10941 "Bz2file is a Python library for reading and writing bzip2-compressed
10942 files. It contains a drop-in replacement for the I/O interface in the
10943 standard library's @code{bz2} module, including features from the latest
10944 development version of CPython that are not available in older releases.")
10945 (license license:asl2.0)))
10946
10947 (define-public python2-bz2file
10948 (package-with-python2 python-bz2file))
10949
10950 (define-public python-future
10951 (package
10952 (name "python-future")
10953 (version "0.17.1")
10954 (source
10955 (origin
10956 (method url-fetch)
10957 (uri (pypi-uri "future" version))
10958 (sha256
10959 (base32
10960 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
10961 (build-system python-build-system)
10962 ;; Many tests connect to the network or are otherwise flawed.
10963 ;; https://github.com/PythonCharmers/python-future/issues/210
10964 (arguments
10965 `(#:tests? #f))
10966 (home-page "https://python-future.org")
10967 (synopsis "Single-source support for Python 3 and 2")
10968 (description
10969 "@code{python-future} is the missing compatibility layer between Python 2 and
10970 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10971 to support both Python 2 and Python 3 with minimal overhead.")
10972 (license license:expat)))
10973
10974 (define-public python2-future
10975 (package-with-python2 python-future))
10976
10977 (define-public python-cysignals
10978 (package
10979 (name "python-cysignals")
10980 (version "1.9.0")
10981 (source
10982 (origin
10983 (method url-fetch)
10984 (uri (pypi-uri "cysignals" version))
10985 (sha256
10986 (base32
10987 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
10988 (build-system python-build-system)
10989 (native-inputs
10990 `(("python-cython" ,python-cython)
10991 ("python-sphinx" ,python-sphinx)))
10992 (inputs
10993 `(("pari-gp" ,pari-gp)))
10994 (arguments
10995 `(#:modules ((guix build python-build-system)
10996 ((guix build gnu-build-system) #:prefix gnu:)
10997 (guix build utils))
10998 ;; FIXME: Tests are executed after installation and currently fail
10999 ;; when not installing into standard locations; the author is working
11000 ;; on a fix.
11001 #:tests? #f
11002 #:phases
11003 (modify-phases %standard-phases
11004 (add-before
11005 'build 'configure
11006 (assoc-ref gnu:%standard-phases 'configure)))))
11007 (home-page
11008 "https://github.com/sagemath/cysignals")
11009 (synopsis
11010 "Handling of interrupts and signals for Cython")
11011 (description
11012 "The cysignals package provides mechanisms to handle interrupts (and
11013 other signals and errors) in Cython code, using two related approaches,
11014 for mixed Cython/Python code or external C libraries and pure Cython code,
11015 respectively.")
11016 (license license:lgpl3+)))
11017
11018 (define-public python2-cysignals
11019 (package-with-python2 python-cysignals))
11020
11021 (define-public python2-shedskin
11022 (package
11023 (name "python2-shedskin")
11024 (version "0.9.4")
11025 (source
11026 (origin
11027 (method url-fetch)
11028 (uri (string-append "https://github.com/shedskin/shedskin/"
11029 "releases/download/v" version
11030 "/shedskin-" version ".tgz"))
11031 (sha256
11032 (base32
11033 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11034 (build-system python-build-system)
11035 (arguments
11036 `(#:python ,python-2
11037 #:phases (modify-phases %standard-phases
11038 (add-after 'unpack 'fix-resulting-include-libs
11039 (lambda* (#:key inputs #:allow-other-keys)
11040 (let ((libgc (assoc-ref inputs "libgc"))
11041 (pcre (assoc-ref inputs "pcre")))
11042 (substitute* "shedskin/makefile.py"
11043 (("variable == 'CCFLAGS':[ ]*")
11044 (string-append "variable == 'CCFLAGS':\n"
11045 " line += ' -I " pcre "/include"
11046 " -I " libgc "/include'"))
11047 (("variable == 'LFLAGS':[ ]*")
11048 (string-append "variable == 'LFLAGS':\n"
11049 " line += ' -L" pcre "/lib"
11050 " -L " libgc "/lib'")))
11051 #t))))))
11052 (inputs `(("pcre" ,pcre)
11053 ("libgc" ,libgc)))
11054 (home-page "https://shedskin.github.io/")
11055 (synopsis "Experimental Python-2 to C++ Compiler")
11056 (description (string-append "This is an experimental compiler for a subset of
11057 Python. It generates C++ code and a Makefile."))
11058 (license (list license:gpl3 license:bsd-3 license:expat))))
11059
11060 (define-public python2-rope
11061 (package
11062 (name "python2-rope")
11063 (version "0.11.0")
11064 (source
11065 (origin
11066 (method url-fetch)
11067 (uri (pypi-uri "rope" version))
11068 (sha256
11069 (base32
11070 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11071 (arguments
11072 ;; Rope has only partial python3 support, see `python-rope'
11073 `(#:python ,python-2))
11074 (build-system python-build-system)
11075 (native-inputs
11076 `(("python2-unittest2" ,python2-unittest2)))
11077 (home-page "https://github.com/python-rope/rope")
11078 (synopsis "Refactoring library for Python")
11079 (description "Rope is a refactoring library for Python. It facilitates
11080 the renaming, moving and extracting of attributes, functions, modules, fields
11081 and parameters in Python 2 source code. These refactorings can also be applied
11082 to occurrences in strings and comments.")
11083 (license license:gpl2)))
11084
11085 (define-public python-rope
11086 (package
11087 (inherit python2-rope)
11088 (name "python-rope")
11089 (arguments `(#:python ,python-wrapper
11090 ;; XXX: Only partial python3 support, results in some failing
11091 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11092 #:tests? #f))
11093 (properties `((python2-variant . ,(delay python2-rope))))))
11094
11095 (define-public python-py3status
11096 (package
11097 (name "python-py3status")
11098 (version "3.21")
11099 (source
11100 (origin
11101 (method url-fetch)
11102 (uri (pypi-uri "py3status" version))
11103 (sha256
11104 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11105 (build-system python-build-system)
11106 (inputs
11107 `(("file" ,file)))
11108 (arguments
11109 '(#:phases
11110 (modify-phases %standard-phases
11111 ;; 'file' is used for detection of configuration file encoding
11112 ;; let's make link the dependency to particular input
11113 (add-before 'build 'patch-file-path
11114 (lambda* (#:key inputs #:allow-other-keys)
11115 (let ((file-path (assoc-ref inputs "file")))
11116 (substitute* "py3status/parse_config.py"
11117 (("\\[\"file\", \"-b\"")
11118 (string-append "['" file-path "/bin/file', '-b'")))
11119 #t))))
11120 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11121 (home-page "https://github.com/ultrabug/py3status")
11122 (synopsis "Extensible i3status wrapper written in Python")
11123 (description "py3status is an i3status wrapper which extends i3status
11124 functionality in a modular way, allowing you to extend your panel with your
11125 own code, responding to click events and updating clock every second.")
11126 (license license:bsd-3)))
11127
11128 (define-public python-tblib
11129 (package
11130 (name "python-tblib")
11131 (version "1.6.0")
11132 (source (origin
11133 (method url-fetch)
11134 (uri (pypi-uri "tblib" version))
11135 (sha256
11136 (base32
11137 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11138 (build-system python-build-system)
11139 (arguments
11140 `(#:phases
11141 (modify-phases %standard-phases
11142 (replace 'check
11143 (lambda _
11144 ;; Upstream runs tests after installation and the package itself
11145 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11146 ;; found.
11147 (setenv "PYTHONPATH"
11148 (string-append (getcwd) "/build/lib:"
11149 (getenv "PYTHONPATH")))
11150 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11151 (native-inputs
11152 `(("python-pytest" ,python-pytest)
11153 ("python-six" ,python-six)))
11154 (home-page "https://github.com/ionelmc/python-tblib")
11155 (synopsis "Traceback serialization library")
11156 (description
11157 "Traceback serialization allows you to:
11158
11159 @enumerate
11160 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11161 different processes. This allows better error handling when running code over
11162 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11163
11164 @item Parse traceback strings and raise with the parsed tracebacks.
11165 @end enumerate\n")
11166 (license license:bsd-3)))
11167
11168 (define-public python2-tblib
11169 (package-with-python2 python-tblib))
11170
11171 (define-public python-greenlet
11172 (package
11173 (name "python-greenlet")
11174 (version "0.4.15")
11175 (source (origin
11176 (method url-fetch)
11177 (uri (pypi-uri "greenlet" version))
11178 (sha256
11179 (base32
11180 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
11181 (build-system python-build-system)
11182 (home-page "https://greenlet.readthedocs.io/")
11183 (synopsis "Lightweight in-process concurrent programming")
11184 (description
11185 "Greenlet package is a spin-off of Stackless, a version of CPython
11186 that supports micro-threads called \"tasklets\". Tasklets run
11187 pseudo-concurrently (typically in a single or a few OS-level threads) and
11188 are synchronized with data exchanges on \"channels\".")
11189 (license (list license:psfl license:expat))))
11190
11191 (define-public python2-greenlet
11192 (package-with-python2 python-greenlet))
11193
11194 (define-public python-objgraph
11195 (package
11196 (name "python-objgraph")
11197 (version "3.4.1")
11198 (source
11199 (origin
11200 (method url-fetch)
11201 (uri (pypi-uri "objgraph" version))
11202 (sha256
11203 (base32
11204 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11205 (build-system python-build-system)
11206 (propagated-inputs
11207 `(("python-graphviz" ,python-graphviz)))
11208 (native-inputs
11209 `(("python-mock" ,python-mock)
11210 ("graphviz" ,graphviz)))
11211 (home-page "https://mg.pov.lt/objgraph/")
11212 (synopsis "Draw Python object reference graphs with graphviz")
11213 (description
11214 "This package provides tools to draw Python object reference graphs with
11215 graphviz.")
11216 (license license:expat)))
11217
11218 (define-public python2-objgraph
11219 (package-with-python2 python-objgraph))
11220
11221 (define-public python-gevent
11222 (package
11223 (name "python-gevent")
11224 (version "20.5.0")
11225 (source (origin
11226 (method url-fetch)
11227 (uri (pypi-uri "gevent" version))
11228 (sha256
11229 (base32
11230 "1yppsrs0ccld9j9zfbsd0bxb987b2zkh2ar7whjxcrqzpkvg3iqx"))
11231 (modules '((guix build utils)))
11232 (snippet
11233 '(begin
11234 ;; unbunding libev and c-ares
11235 (delete-file-recursively "deps")
11236 #t))))
11237 (build-system python-build-system)
11238 (arguments
11239 `(#:modules ((ice-9 ftw)
11240 (ice-9 match)
11241 (srfi srfi-26)
11242 (guix build utils)
11243 (guix build python-build-system))
11244 #:phases (modify-phases %standard-phases
11245 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11246 (lambda _
11247 (substitute* "src/gevent/subprocess.py"
11248 (("/bin/sh") (which "sh")))
11249 (for-each (lambda (file)
11250 (substitute* file
11251 (("/bin/sh") (which "sh"))
11252 (("/bin/true") (which "true"))))
11253 (find-files "src/greentest" "\\.py$"))
11254 #t))
11255 (add-before 'build 'do-not-use-bundled-sources
11256 (lambda _
11257 (setenv "GEVENTSETUP_EMBED" "0")
11258
11259 ;; Prevent building bundled libev.
11260 (substitute* "setup.py"
11261 (("run_make=_BUILDING")
11262 "run_make=False"))
11263 #t))
11264 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11265 (lambda* (#:key inputs #:allow-other-keys)
11266 (let ((greenlet (string-append
11267 (assoc-ref inputs "python-greenlet")
11268 "/include")))
11269 (match (scandir greenlet
11270 (lambda (item)
11271 (string-prefix? "python" item)))
11272 ((python)
11273 (setenv "C_INCLUDE_PATH"
11274 (string-append greenlet "/" python ":"
11275 (or (getenv "C_INCLUDE_PATH")
11276 ""))))))
11277 #t))
11278 (add-before 'check 'pretend-to-be-CI
11279 (lambda _
11280 ;; A few tests are skipped due to network constraints or
11281 ;; get longer timeouts when running in a CI environment.
11282 ;; Piggy-back on that, as we need the same adjustments.
11283 (setenv "TRAVIS" "1")
11284 (setenv "APPVEYOR" "1")
11285 #t))
11286 (add-before 'check 'adjust-tests
11287 (lambda _
11288 (let ((disabled-tests
11289 '(;; These tests rely on networking which is not
11290 ;; available in the build container.
11291 "test_urllib2net.py"
11292 "test__server.py"
11293 "test__server_pywsgi.py"
11294 "test_socket.py"
11295 "test__socket.py"
11296 "test__socket_ssl.py"
11297 "test__socket_dns.py"
11298 "test__socket_dns6.py"
11299 "test___example_servers.py"
11300 "test__getaddrinfo_import.py"
11301 "test__examples.py"
11302 "test_httplib.py"
11303 "test_https.py"
11304 "test_urllib2_localnet.py"
11305 "test_ssl.py"
11306 "test__ssl.py"
11307 ;; XXX: These tests borrow functionality from the
11308 ;; Python builtin 'test' module, but it is not
11309 ;; installed with the Guix Python distribution.
11310 "test_smtpd.py"
11311 "test_wsgiref.py"
11312 "test_urllib2.py"
11313 "test_thread.py"
11314 "test_threading.py"
11315 "test__threading_2.py"
11316 ;; These tests rely on KeyboardInterrupts which do not
11317 ;; work inside the build container for some reason
11318 ;; (lack of controlling terminal?).
11319 "test_subprocess.py"
11320 "test__issues461_471.py"
11321 ;; TODO: Patch out the tests that use getprotobyname, etc
11322 ;; instead of disabling all the tests from these files.
11323 "test__resolver_dnspython.py"
11324 "test__doctests.py"
11325 "test__all__.py"
11326 "test___config.py"
11327 "test__execmodules.py")))
11328 (call-with-output-file "skipped_tests.txt"
11329 (lambda (port)
11330 (format port "~a~%"
11331 (string-join disabled-tests "\n"))))
11332 #t)))
11333 (replace 'check
11334 (lambda _
11335 ;; Make sure the build directory is on PYTHONPATH.
11336 (setenv "PYTHONPATH"
11337 (string-append
11338 (getenv "PYTHONPATH") ":"
11339 (getcwd) "/build/"
11340 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11341
11342 ;; Use the build daemons configured number of workers.
11343 (setenv "NWORKERS" (number->string (parallel-job-count)))
11344
11345 (invoke "python" "-m" "gevent.tests" "--config"
11346 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11347 (propagated-inputs
11348 `(("python-greenlet" ,python-greenlet)
11349 ("python-objgraph" ,python-objgraph)))
11350 (native-inputs
11351 `(("python-six" ,python-six)
11352
11353 ;; For tests.
11354 ("python-dnspython" ,python-dnspython)
11355 ("python-psutil" ,python-psutil)
11356 ("python-zope.event" ,python-zope-event)
11357 ("python-zope.interface" ,python-zope-interface)))
11358 (inputs
11359 `(("c-ares" ,c-ares)
11360 ("libev" ,libev)))
11361 (home-page "http://www.gevent.org/")
11362 (synopsis "Coroutine-based network library")
11363 (description
11364 "gevent is a coroutine-based Python networking library that uses greenlet
11365 to provide a high-level synchronous API on top of the libev event loop.")
11366 (license license:expat)
11367 (properties `((python2-variant . ,(delay python2-gevent))))))
11368
11369 (define-public python2-gevent
11370 (let ((base (package-with-python2
11371 (strip-python2-variant python-gevent))))
11372 (package
11373 (inherit base)
11374 (native-inputs `(,@(package-native-inputs base)
11375 ("python-mock" ,python2-mock))))))
11376
11377 (define-public python-fastimport
11378 (package
11379 (name "python-fastimport")
11380 (version "0.9.6")
11381 (source
11382 (origin
11383 (method url-fetch)
11384 (uri (pypi-uri "fastimport" version))
11385 (sha256
11386 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11387 (build-system python-build-system)
11388 (home-page "https://github.com/jelmer/python-fastimport")
11389 (synopsis "VCS fastimport parser and generator in Python")
11390 (description "This package provides a parser for and generator of the Git
11391 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11392 format.")
11393 (license license:gpl2+)))
11394
11395 (define-public python2-fastimport
11396 (package-with-python2 python-fastimport))
11397
11398 (define-public python-twisted
11399 (package
11400 (name "python-twisted")
11401 (version "19.7.0")
11402 (source (origin
11403 (method url-fetch)
11404 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11405 (sha256
11406 (base32
11407 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11408 (build-system python-build-system)
11409 (arguments
11410 '(#:tests? #f)) ; FIXME: some tests fail
11411 (propagated-inputs
11412 `(("python-zope-interface" ,python-zope-interface)
11413 ("python-pyhamcrest" ,python-pyhamcrest)
11414 ("python-incremental" ,python-incremental)
11415 ("python-hyperlink" ,python-hyperlink)
11416 ("python-constantly" ,python-constantly)
11417 ("python-automat" ,python-automat)))
11418 (home-page "https://twistedmatrix.com/")
11419 (synopsis "Asynchronous networking framework written in Python")
11420 (description
11421 "Twisted is an extensible framework for Python programming, with special
11422 focus on event-based network programming and multiprotocol integration.")
11423 (license license:expat)))
11424
11425 (define-public python2-twisted
11426 (package-with-python2 python-twisted))
11427
11428 (define-public python-pika
11429 (package
11430 (name "python-pika")
11431 (version "0.12.0")
11432 (source
11433 (origin
11434 (method url-fetch)
11435 (uri (pypi-uri "pika" version))
11436 (sha256
11437 (base32
11438 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11439 (build-system python-build-system)
11440 (native-inputs
11441 `(("python-pyev" ,python-pyev)
11442 ("python-tornado" ,python-tornado)
11443 ("python-twisted" ,python-twisted)))
11444 (home-page "https://pika.readthedocs.org")
11445 (synopsis "Pure Python AMQP Client Library")
11446 (description
11447 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11448 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11449 network support library.")
11450 (license license:bsd-3)))
11451
11452 (define-public python2-pika
11453 (package-with-python2 python-pika))
11454
11455 (define-public python-ply
11456 (package
11457 (name "python-ply")
11458 (version "3.11")
11459 (source
11460 (origin
11461 (method url-fetch)
11462 (uri (pypi-uri "ply" version))
11463 (sha256
11464 (base32
11465 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11466 (build-system python-build-system)
11467 (home-page "http://www.dabeaz.com/ply/")
11468 (synopsis "Python Lex & Yacc")
11469 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11470 It uses LR parsing and does extensive error checking.")
11471 (license license:bsd-3)))
11472
11473 (define-public python-tabulate
11474 (package
11475 (name "python-tabulate")
11476 (version "0.7.7")
11477 (source (origin
11478 (method url-fetch)
11479 (uri (pypi-uri "tabulate" version))
11480 (sha256
11481 (base32
11482 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11483 (build-system python-build-system)
11484 (arguments
11485 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11486 ;; and the latest release is not tagged in the upstream repository.
11487 '(#:tests? #f))
11488 (home-page "https://bitbucket.org/astanin/python-tabulate")
11489 (synopsis "Pretty-print tabular data")
11490 (description
11491 "Tabulate is a library and command-line utility to pretty-print tabular
11492 data in Python.")
11493 (license license:expat)))
11494
11495 (define-public python2-tabulate
11496 (package-with-python2 python-tabulate))
11497
11498 (define-public python-kazoo
11499 (package
11500 (name "python-kazoo")
11501 (version "2.4.0")
11502 (source
11503 (origin
11504 (method url-fetch)
11505 (uri (pypi-uri "kazoo" version))
11506 (sha256
11507 (base32
11508 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11509 (build-system python-build-system)
11510 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11511 (propagated-inputs
11512 `(("python-six" ,python-six)))
11513 (home-page "https://kazoo.readthedocs.org")
11514 (synopsis "High-level Zookeeper client library")
11515 (description
11516 "Kazoo is a Python client library for the Apache Zookeeper distributed
11517 application service. It is designed to be easy to use and to avoid common
11518 programming errors.")
11519 (license license:asl2.0)))
11520
11521 (define-public python2-kazoo
11522 (package-with-python2 python-kazoo))
11523
11524 (define-public python-pykafka
11525 (package
11526 (name "python-pykafka")
11527 (version "2.4.0")
11528 (source (origin
11529 (method url-fetch)
11530 (uri (pypi-uri "pykafka" version))
11531 (sha256
11532 (base32
11533 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11534 (build-system python-build-system)
11535 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11536 (propagated-inputs
11537 `(("python-gevent" ,python-gevent)
11538 ("python-kazoo" ,python-kazoo)
11539 ("python-tabulate" ,python-tabulate)))
11540 (inputs
11541 `(("librdkafka" ,librdkafka)))
11542 (home-page "https://pykafka.readthedocs.io/")
11543 (synopsis "Apache Kafka client for Python")
11544 (description
11545 "PyKafka is a client for the Apache Kafka distributed messaging system.
11546 It includes Python implementations of Kafka producers and consumers, which
11547 are optionally backed by a C extension built on librdkafka.")
11548 (license license:asl2.0)))
11549
11550 (define-public python2-pykafka
11551 (package-with-python2 python-pykafka))
11552
11553 (define-public python-wcwidth
11554 (package
11555 (name "python-wcwidth")
11556 (version "0.1.8")
11557 (source (origin
11558 (method url-fetch)
11559 (uri (pypi-uri "wcwidth" version))
11560 (sha256
11561 (base32
11562 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11563 (build-system python-build-system)
11564 (home-page "https://github.com/jquast/wcwidth")
11565 (synopsis "Measure number of terminal column cells of wide-character codes")
11566 (description "Wcwidth measures the number of terminal column cells of
11567 wide-character codes. It is useful for those implementing a terminal emulator,
11568 or programs that carefully produce output to be interpreted by one. It is a
11569 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11570 specified in POSIX.1-2001 and POSIX.1-2008.")
11571 (license license:expat)))
11572
11573 (define-public python2-wcwidth
11574 (package-with-python2 python-wcwidth))
11575
11576 (define-public python2-jsonrpclib
11577 (package
11578 (name "python2-jsonrpclib")
11579 (version "0.1.7")
11580 (source (origin
11581 (method url-fetch)
11582 (uri (pypi-uri "jsonrpclib" version))
11583 (sha256
11584 (base32
11585 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11586 (build-system python-build-system)
11587 (arguments
11588 `(#:tests? #f
11589 #:python ,python-2))
11590 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11591 (synopsis "Implementation of JSON-RPC specification for Python")
11592 (description
11593 "This library is an implementation of the JSON-RPC specification.
11594 It supports both the original 1.0 specification, as well as the
11595 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11596 etc.")
11597 (license license:asl2.0)))
11598
11599 (define-public python-chai
11600 (package
11601 (name "python-chai")
11602 (version "1.1.2")
11603 (source (origin
11604 (method url-fetch)
11605 (uri (pypi-uri "chai" version))
11606 (sha256
11607 (base32
11608 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11609 (build-system python-build-system)
11610 (home-page "https://github.com/agoragames/chai")
11611 (synopsis "Mocking framework for Python")
11612 (description
11613 "Chai provides an api for mocking, stubbing and spying your python
11614 objects, patterned after the Mocha library for Ruby.")
11615 (license license:bsd-3)))
11616
11617 (define-public python2-chai
11618 (package-with-python2 python-chai))
11619
11620 (define-public python-inflection
11621 (package
11622 (name "python-inflection")
11623 (version "0.3.1")
11624 (source
11625 (origin (method url-fetch)
11626 (uri (pypi-uri "inflection" version))
11627 (sha256
11628 (base32
11629 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11630 (build-system python-build-system)
11631 (native-inputs
11632 `(("python-pytest" ,python-pytest)))
11633 (home-page "https://github.com/jpvanhal/inflection")
11634 (synopsis "Python string transformation library")
11635 (description
11636 "Inflection is a string transformation library. It singularizes
11637 and pluralizes English words, and transforms strings from CamelCase to
11638 underscored string.")
11639 (license license:expat)))
11640
11641 (define-public python2-inflection
11642 (package-with-python2 python-inflection))
11643
11644 (define-public python-pylev
11645 (package
11646 (name "python-pylev")
11647 (version "1.3.0")
11648 (source (origin
11649 (method url-fetch)
11650 (uri (pypi-uri "pylev" version))
11651 (sha256
11652 (base32
11653 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11654 (build-system python-build-system)
11655 (home-page "https://github.com/toastdriven/pylev")
11656 (synopsis "Levenshtein distance implementation in Python")
11657 (description "Pure Python Levenshtein implementation, based off the
11658 Wikipedia code samples at
11659 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11660 (license license:bsd-3)))
11661
11662 (define-public python2-pylev
11663 (package-with-python2 python-pylev))
11664
11665 (define-public python-cleo
11666 (package
11667 (name "python-cleo")
11668 (version "0.7.6")
11669 (source (origin
11670 (method url-fetch)
11671 (uri (pypi-uri "cleo" version))
11672 (sha256
11673 (base32
11674 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11675 (build-system python-build-system)
11676 (native-inputs
11677 `( ;; For testing
11678 ("python-mock" ,python-mock)
11679 ("python-pytest-mock" ,python-pytest-mock)
11680 ("python-pytest" ,python-pytest)))
11681 (propagated-inputs
11682 `(("python-backpack" ,python-backpack)
11683 ("python-clikit" ,python-clikit)
11684 ("python-pastel" ,python-pastel)
11685 ("python-pylev" ,python-pylev)))
11686 (home-page "https://github.com/sdispater/cleo")
11687 (synopsis "Command-line arguments library for Python")
11688 (description
11689 "Cleo allows you to create command-line commands with signature in
11690 docstring and colored output.")
11691 (license license:expat)))
11692
11693 (define-public python2-cleo
11694 (package-with-python2 python-cleo))
11695
11696 (define-public python-tomlkit
11697 (package
11698 (name "python-tomlkit")
11699 (version "0.5.11")
11700 (source
11701 (origin
11702 (method url-fetch)
11703 (uri (pypi-uri "tomlkit" version))
11704 (sha256
11705 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11706 (build-system python-build-system)
11707 (native-inputs
11708 `(("python-pytest" ,python-pytest)))
11709 (home-page "https://github.com/sdispater/tomlkit")
11710 (synopsis "Style-preserving TOML library")
11711 (description
11712 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11713 preserves all comments, indentations, whitespace and internal element ordering,
11714 and makes them accessible and editable via an intuitive API. It can also
11715 create new TOML documents from scratch using the provided helpers. Part of the
11716 implementation has been adapted, improved, and fixed from Molten.")
11717 (license license:expat)))
11718
11719 (define-public python-shellingham
11720 (package
11721 (name "python-shellingham")
11722 (version "1.3.1")
11723 (source
11724 (origin
11725 (method url-fetch)
11726 (uri (pypi-uri "shellingham" version))
11727 (sha256
11728 (base32
11729 "1q7kws7w4x2hji3g7y0ni9ddk4sd676ylrb3db54gbpys6xj6nwq"))))
11730 (build-system python-build-system)
11731 (home-page
11732 "https://github.com/sarugaku/shellingham")
11733 (synopsis "Tool to detect surrounding shell")
11734 (description
11735 "Shellingham detects what shell the current Python executable is
11736 running in.")
11737 (license license:isc)))
11738
11739 (define-public python-memcached
11740 (package
11741 (name "python-memcached")
11742 (version "1.59")
11743 (source
11744 (origin
11745 (method url-fetch)
11746 (uri (pypi-uri "python-memcached" version))
11747 (sha256
11748 (base32
11749 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))))
11750 (build-system python-build-system)
11751 (propagated-inputs `(("python-six" ,python-six)))
11752 (home-page
11753 "https://github.com/linsomniac/python-memcached")
11754 (synopsis "Pure python memcached client")
11755 (description
11756 "This software is a pure Python interface to the memcached memory cache
11757 daemon. It is the client side software which allows storing values in one or
11758 more, possibly remote, memcached servers.")
11759 (license license:psfl)))
11760
11761 (define-public python-clikit
11762 (package
11763 (name "python-clikit")
11764 (version "0.4.2")
11765 (source
11766 (origin
11767 (method url-fetch)
11768 (uri (pypi-uri "clikit" version))
11769 (sha256
11770 (base32
11771 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11772 (build-system python-build-system)
11773 (propagated-inputs
11774 `(("python-pastel" ,python-pastel)
11775 ("python-pylev" ,python-pylev)))
11776 (home-page "https://github.com/sdispater/clikit")
11777 (synopsis "Group of utilities to build command line interfaces")
11778 (description
11779 "CliKit is a group of utilities to build testable command line
11780 interfaces.")
11781 (properties `((python2-variant . ,(delay python2-clikit))))
11782 (license license:expat)))
11783
11784 (define-public python2-clikit
11785 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11786 (package/inherit
11787 base
11788 (propagated-inputs
11789 `(("python-enum34" ,python2-enum34)
11790 ("python-typing" ,python2-typing)
11791 ,@(package-propagated-inputs base))))))
11792
11793 (define-public python-msgpack-python
11794 (package
11795 (name "python-msgpack-python")
11796 (version "0.5.6")
11797 (source
11798 (origin
11799 (method url-fetch)
11800 (uri (pypi-uri "msgpack-python" version))
11801 (sha256
11802 (base32
11803 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11804 (build-system python-build-system)
11805 (home-page "http://msgpack.org/")
11806 (synopsis "Package to deserialize messages in MessagePack binary format")
11807 (description
11808 "MessagePack is an efficient binary serialization format. It lets you
11809 exchange data among multiple languages like JSON. But it's faster and
11810 smaller. Small integers are encoded into a single byte, and typical short
11811 strings require only one extra byte in addition to the strings themselves.")
11812 (license license:asl2.0)))
11813
11814 (define-public python-cachy
11815 (package
11816 (name "python-cachy")
11817 (version "0.3.0")
11818 (source
11819 (origin
11820 (method url-fetch)
11821 (uri (pypi-uri "cachy" version))
11822 (sha256
11823 (base32
11824 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11825 (build-system python-build-system)
11826 (arguments
11827 '(#:phases
11828 (modify-phases %standard-phases
11829 (replace 'check
11830 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11831 "pytest"))))))
11832 (native-inputs
11833 `(("memcached" ,memcached)
11834 ("python-fakeredis" ,python-fakeredis)
11835 ("python-flexmock" ,python-flexmock)
11836 ("python-pifpaf" ,python-pifpaf)
11837 ("python-pytest" ,python-pytest)))
11838 (propagated-inputs
11839 `(("python-memcached" ,python-memcached)
11840 ("python-msgpack-python" ,python-msgpack-python)
11841 ("python-redis" ,python-redis)))
11842 (home-page "https://github.com/sdispater/cachy")
11843 (synopsis "Simple yet effective caching library")
11844 (description
11845 "Cachy provides a simple yet effective caching library. A simple but
11846 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11847 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11848 (license license:expat)))
11849
11850 (define-public poetry
11851 (package
11852 (name "poetry")
11853 (version "1.0.5")
11854 ;; Poetry can only be built from source with Poetry.
11855 (source
11856 (origin
11857 (method url-fetch)
11858 (uri (pypi-uri "poetry" version))
11859 (sha256
11860 (base32
11861 "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf"))))
11862 (build-system python-build-system)
11863 (arguments
11864 `(#:tests? #f ;; Pypi does not have tests.
11865 #:phases
11866 (modify-phases %standard-phases
11867 (add-before 'build 'patch-setup-py
11868 (lambda _
11869 (substitute* "setup.py"
11870 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11871 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11872 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0")
11873 (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0"))
11874 #t)))))
11875 (propagated-inputs
11876 `(("python-cachecontrol" ,python-cachecontrol)
11877 ("python-cachy" ,python-cachy)
11878 ("python-cleo" ,python-cleo)
11879 ("python-clikit" ,python-clikit)
11880 ("python-html5lib" ,python-html5lib)
11881 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
11882 ("python-jsonschema" ,python-jsonschema)
11883 ("python-keyring" ,python-keyring)
11884 ("python-pexpect" ,python-pexpect)
11885 ("python-pkginfo" ,python-pkginfo)
11886 ("python-pyparsing" ,python-pyparsing)
11887 ("python-pyrsistent" ,python-pyrsistent)
11888 ("python-requests" ,python-requests)
11889 ("python-requests-toolbelt" ,python-requests-toolbelt)
11890 ("python-shellingham" ,python-shellingham)
11891 ("python-tomlkit" ,python-tomlkit)
11892 ("python-virtualenv" ,python-virtualenv)))
11893 (home-page "https://python-poetry.org")
11894 (synopsis "Python dependency management and packaging made easy")
11895 (description "Poetry is a tool for dependency management and packaging
11896 in Python. It allows you to declare the libraries your project depends on and
11897 it will manage (install/update) them for you.")
11898 (license license:expat)))
11899
11900 (define-public python-lazy-object-proxy
11901 (package
11902 (name "python-lazy-object-proxy")
11903 (version "1.4.3")
11904 (source (origin
11905 (method url-fetch)
11906 (uri (pypi-uri "lazy-object-proxy" version))
11907 (sha256
11908 (base32
11909 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11910 (native-inputs
11911 `(("python-setuptools-scm" ,python-setuptools-scm)))
11912 (build-system python-build-system)
11913 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11914 (synopsis "Lazy object proxy for python")
11915 (description
11916 "Lazy object proxy is an object that wraps a callable but defers the call
11917 until the object is actually required, and caches the result of said call.")
11918 (license license:bsd-2)))
11919
11920 (define-public python2-lazy-object-proxy
11921 (package-with-python2 python-lazy-object-proxy))
11922
11923 (define-public python-dnspython
11924 (package
11925 (name "python-dnspython")
11926 (version "1.16.0")
11927 (source (origin
11928 (method url-fetch)
11929 (uri (string-append "http://www.dnspython.org/kits/"
11930 version "/dnspython-" version ".tar.gz"))
11931 (sha256
11932 (base32
11933 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11934 (build-system python-build-system)
11935 (arguments '(#:tests? #f)) ; XXX: requires internet access
11936 (home-page "http://www.dnspython.org")
11937 (synopsis "DNS toolkit for Python")
11938 (description
11939 "dnspython is a DNS toolkit for Python. It supports almost all record
11940 types. It can be used for queries, zone transfers, and dynamic updates.
11941 It supports TSIG authenticated messages and EDNS0.")
11942 (license license:expat)))
11943
11944 (define-public python2-dnspython
11945 (package-with-python2 python-dnspython))
11946
11947 (define-public python-email-validator
11948 (package
11949 (name "python-email-validator")
11950 (version "1.0.2")
11951 (source
11952 (origin (method url-fetch)
11953 (uri (pypi-uri "email_validator" version))
11954 (sha256
11955 (base32
11956 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11957 (build-system python-build-system)
11958 (arguments
11959 '(#:phases
11960 (modify-phases %standard-phases
11961 (add-before 'build 'use-dnspython
11962 (lambda _
11963 (substitute* "setup.py"
11964 (("dnspython3") "dnspython"))
11965 #t)))))
11966 (propagated-inputs
11967 `(("python-dnspython" ,python-dnspython)
11968 ("python-idna" ,python-idna)))
11969 (home-page "https://github.com/JoshData/python-email-validator")
11970 (synopsis "Email address validation library for Python")
11971 (description
11972 "This library validates email address syntax and deliverability.")
11973 (license license:cc0)))
11974
11975 (define-public python2-email-validator
11976 (package-with-python2 python-email-validator))
11977
11978 (define-public python-ukpostcodeparser
11979 (package
11980 (name "python-ukpostcodeparser")
11981 (version "1.0.3")
11982 (source (origin
11983 (method url-fetch)
11984 (uri (pypi-uri "UkPostcodeParser" version))
11985 (sha256
11986 (base32
11987 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
11988 (build-system python-build-system)
11989 (home-page "https://github.com/hamstah/ukpostcodeparser")
11990 (synopsis "UK Postcode parser for Python")
11991 (description
11992 "This library provides the @code{parse_uk_postcode} function for
11993 parsing UK postcodes.")
11994 (license license:expat)))
11995
11996 (define-public python2-ukpostcodeparser
11997 (package-with-python2 python-ukpostcodeparser))
11998
11999 (define-public python-faker
12000 (package
12001 (name "python-faker")
12002 (version "4.0.2")
12003 (source (origin
12004 (method url-fetch)
12005 (uri (pypi-uri "Faker" version))
12006 (sha256
12007 (base32
12008 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12009 (build-system python-build-system)
12010 (arguments
12011 '(#:phases
12012 (modify-phases %standard-phases
12013 (replace 'check
12014 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12015 (native-inputs
12016 `(;; For testing
12017 ("python-freezegun" ,python-freezegun)
12018 ("python-pytest" ,python-pytest)
12019 ("python-random2" ,python-random2)
12020 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12021 ("python-validators" ,python-validators)))
12022 (propagated-inputs
12023 `(("python-dateutil" ,python-dateutil)
12024 ("python-text-unidecode" ,python-text-unidecode)))
12025 (home-page "https://github.com/joke2k/faker")
12026 (synopsis "Python package that generates fake data")
12027 (description
12028 "Faker is a Python package that generates fake data such as names,
12029 addresses, and phone numbers.")
12030 (license license:expat)
12031 (properties `((python2-variant . ,(delay python2-faker))))))
12032
12033 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12034 (define-public python2-faker
12035 (let ((base (package-with-python2 (strip-python2-variant
12036 python-faker))))
12037 (package
12038 (inherit base)
12039 (version "3.0.1")
12040 (source (origin
12041 (method url-fetch)
12042 (uri (pypi-uri "Faker" version))
12043 (sha256
12044 (base32
12045 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12046 (native-inputs
12047 `(("python-mock" ,python2-mock)
12048 ,@(package-native-inputs base)))
12049 (propagated-inputs
12050 `(("python2-ipaddress" ,python2-ipaddress)
12051 ("python2-six" ,python2-six)
12052 ,@(package-propagated-inputs base))))))
12053
12054 (define-public python-pyaml
12055 (package
12056 (name "python-pyaml")
12057 (version "18.11.0")
12058 (source (origin
12059 (method url-fetch)
12060 (uri (pypi-uri "pyaml" version))
12061 (sha256
12062 (base32
12063 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12064 (build-system python-build-system)
12065 (native-inputs
12066 `(("python-unidecode" ,python-unidecode)))
12067 (propagated-inputs
12068 `(("python-pyyaml" ,python-pyyaml)))
12069 (home-page "https://github.com/mk-fg/pretty-yaml")
12070 (synopsis "YAML pretty-print library for Python")
12071 (description
12072 "pyaml is a PyYAML based python module to produce pretty and readable
12073 YAML-serialized data.")
12074 (license license:wtfpl2)))
12075
12076 (define-public python2-pyaml
12077 (package-with-python2 python-pyaml))
12078
12079 (define-public python-backpack
12080 (package
12081 (name "python-backpack")
12082 (version "0.1")
12083 (source
12084 (origin
12085 (method url-fetch)
12086 (uri (pypi-uri "backpack" version))
12087 (sha256
12088 (base32
12089 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12090 (build-system python-build-system)
12091 (native-inputs
12092 `(("python-pytest" ,python-pytest)
12093 ("python-nose" ,python-nose)))
12094 (propagated-inputs
12095 `(("python-simplejson" ,python-simplejson)))
12096 (home-page "https://github.com/sdispater/backpack")
12097 (synopsis "Utilities for working with Python collections")
12098 (description "Backpack provides some useful utilities for working with
12099 collections of data.")
12100 (license license:expat)))
12101
12102 (define-public python2-backpack
12103 (package-with-python2 python-backpack))
12104
12105 (define-public python-prompt-toolkit
12106 (package
12107 (name "python-prompt-toolkit")
12108 (version "2.0.7")
12109 (source
12110 (origin
12111 (method url-fetch)
12112 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12113 (sha256
12114 (base32
12115 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12116 (build-system python-build-system)
12117 (arguments
12118 `(#:phases
12119 (modify-phases %standard-phases
12120 (delete 'check)
12121 (add-after 'install 'post-install-check
12122 (lambda* (#:key inputs outputs #:allow-other-keys)
12123 ;; HOME is needed for the test
12124 ;; "test_pathcompleter_can_expanduser".
12125 (setenv "HOME" "/tmp")
12126 (add-installed-pythonpath inputs outputs)
12127 (invoke "py.test"))))))
12128 (propagated-inputs
12129 `(("python-wcwidth" ,python-wcwidth)
12130 ("python-six" ,python-six)
12131 ("python-pygments" ,python-pygments)))
12132 (native-inputs
12133 `(("python-pytest" ,python-pytest)))
12134 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
12135 (synopsis "Library for building command line interfaces in Python")
12136 (description
12137 "Prompt-Toolkit is a library for building interactive command line
12138 interfaces in Python. It's like GNU Readline but it also features syntax
12139 highlighting while typing, out-of-the-box multi-line input editing, advanced
12140 code completion, incremental search, support for Chinese double-width
12141 characters, mouse support, and auto suggestions.")
12142 (license license:bsd-3)))
12143
12144 (define-public python2-prompt-toolkit
12145 (package-with-python2 python-prompt-toolkit))
12146
12147 (define-public python-prompt-toolkit-1
12148 (package (inherit python-prompt-toolkit)
12149 (version "1.0.15")
12150 (source
12151 (origin
12152 (method url-fetch)
12153 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12154 (sha256
12155 (base32
12156 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12157
12158 (define-public python2-prompt-toolkit-1
12159 (package-with-python2 python-prompt-toolkit-1))
12160
12161 (define-public python-jedi
12162 (package
12163 (name "python-jedi")
12164 (version "0.17.0")
12165 (source
12166 (origin
12167 (method url-fetch)
12168 (uri (pypi-uri "jedi" version))
12169 (patches (search-patches "python-jedi-sort-project-test.patch"))
12170 (sha256
12171 (base32
12172 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12173 (build-system python-build-system)
12174 (arguments
12175 `(#:phases
12176 (modify-phases %standard-phases
12177 (add-before 'check 'adjust-test-for-python-3.8
12178 (lambda _
12179 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12180 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12181 (substitute* "test/test_utils.py"
12182 (("assert len\\(difference\\) < 20")
12183 "assert len(difference) < 22"))
12184 #t))
12185 (replace 'check
12186 (lambda _
12187 (setenv "HOME" "/tmp")
12188 (invoke "python" "-m" "pytest" "-vv"))))))
12189 (native-inputs
12190 `(("python-pytest" ,python-pytest)
12191 ("python-docopt" ,python-docopt)))
12192 (propagated-inputs
12193 `(("python-parso" ,python-parso)))
12194 (home-page "https://github.com/davidhalter/jedi")
12195 (synopsis "Autocompletion and static analysis library for Python")
12196 (description
12197 "Jedi is a static analysis tool for Python that can be used in Integrated
12198 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12199 on a deeper level than many other static analysis frameworks for Python.
12200
12201 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12202 well.")
12203 (license license:expat)))
12204
12205 (define-public python2-jedi
12206 (package-with-python2 python-jedi))
12207
12208 (define-public ptpython
12209 (package
12210 (name "ptpython")
12211 (version "0.34")
12212 (source (origin
12213 (method url-fetch)
12214 (uri (pypi-uri "ptpython" version))
12215 (sha256
12216 (base32
12217 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12218 (build-system python-build-system)
12219 (arguments
12220 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12221 (propagated-inputs
12222 `(("python-docopt" ,python-docopt)
12223 ("python-jedi" ,python-jedi)
12224 ("python-prompt-toolkit" ,python-prompt-toolkit)
12225 ("python-pygments" ,python-pygments)))
12226 (home-page "https://github.com/jonathanslenders/ptpython")
12227 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12228 (description
12229 "ptpython is a Python read-eval-print loop with IDE-like features.
12230 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12231 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12232 etc.")
12233 (license license:bsd-3)
12234 (properties `((python2-variant . ,(delay ptpython-2))))))
12235
12236 (define-public ptpython-2
12237 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12238 (package
12239 (inherit base)
12240 (name "ptpython2"))))
12241
12242 (define-public python-stem
12243 (package
12244 (name "python-stem")
12245 (version "1.8.0")
12246 (source
12247 (origin
12248 (method url-fetch)
12249 (uri (pypi-uri "stem" version))
12250 (sha256
12251 (base32
12252 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12253 (build-system python-build-system)
12254 (arguments
12255 `(#:phases
12256 (modify-phases %standard-phases
12257 (replace 'check
12258 (lambda _
12259 (invoke "./run_tests.py" "--unit")
12260 #t)))))
12261 (native-inputs
12262 `(("python-mock" ,python-mock)
12263 ("python-pycodestyle" ,python-pycodestyle)
12264 ("python-pyflakes" ,python-pyflakes)))
12265 (home-page "https://stem.torproject.org/")
12266 (synopsis
12267 "Python controller library that allows applications to interact with Tor")
12268 (description
12269 "Stem is a Python controller library for Tor. With it you can use Tor's
12270 control protocol to script against the Tor process and read descriptor data
12271 relays publish about themselves.")
12272 (license license:lgpl3)))
12273
12274 (define-public python2-stem
12275 (package-with-python2 python-stem))
12276
12277 (define-public python-pyserial
12278 (package
12279 (name "python-pyserial")
12280 (version "3.4")
12281 (source
12282 (origin
12283 (method url-fetch)
12284 (uri (pypi-uri "pyserial" version))
12285 (sha256
12286 (base32
12287 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12288 (build-system python-build-system)
12289 (arguments
12290 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12291 ;; #:phases
12292 ;; (modify-phases %standard-phases
12293 ;; (replace 'check
12294 ;; (lambda _
12295 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12296 (home-page
12297 "https://github.com/pyserial/pyserial")
12298 (synopsis "Python Serial Port Bindings")
12299 (description "@code{pyserial} provide serial port bindings for Python. It
12300 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12301 and/or Xon/Xoff. The port is accessed in RAW mode.")
12302 (license license:bsd-3)))
12303
12304 (define-public python2-pyserial
12305 (package-with-python2 python-pyserial))
12306
12307 (define-public python-kivy
12308 (package
12309 (name "python-kivy")
12310 (version "1.10.1")
12311 (source
12312 (origin
12313 (method url-fetch)
12314 (uri (pypi-uri "Kivy" version))
12315 (file-name (string-append name "-" version ".tar.gz"))
12316 (sha256
12317 (base32
12318 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12319 (build-system python-build-system)
12320 (arguments
12321 `(#:tests? #f ; Tests require many optional packages
12322 #:phases
12323 (modify-phases %standard-phases
12324 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12325 (lambda* (#:key inputs #:allow-other-keys)
12326 (setenv "KIVY_SDL2_PATH"
12327 (string-append (assoc-ref inputs "sdl-union")
12328 "/include/SDL2"))
12329 #t)))))
12330 (native-inputs
12331 `(("pkg-config" ,pkg-config)
12332 ("python-cython" ,python-cython)))
12333 (inputs
12334 `(("gstreamer" ,gstreamer)
12335 ("mesa" ,mesa)
12336 ("sdl-union"
12337 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12338 (home-page "https://kivy.org")
12339 (synopsis
12340 "Multitouch application framework")
12341 (description
12342 "A software library for rapid development of
12343 hardware-accelerated multitouch applications.")
12344 (license license:expat)))
12345
12346 (define-public python2-kivy
12347 (package-with-python2 python-kivy))
12348
12349 (define-public python-binaryornot
12350 (package
12351 (name "python-binaryornot")
12352 (version "0.4.4")
12353 (source (origin
12354 (method url-fetch)
12355 (uri (pypi-uri "binaryornot" version))
12356 (sha256
12357 (base32
12358 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12359 (build-system python-build-system)
12360 (arguments
12361 `(#:phases
12362 (modify-phases %standard-phases
12363 (add-after 'unpack 'patch-tests
12364 (lambda _
12365 ;; TypeError: binary() got an unexpected keyword argument
12366 ;; 'average_size'.
12367 (substitute* "tests/test_check.py"
12368 (("average_size=512") ""))
12369 #t)))))
12370 (propagated-inputs
12371 `(("python-chardet" ,python-chardet)
12372 ("python-hypothesis" ,python-hypothesis)))
12373 (home-page "https://github.com/audreyr/binaryornot")
12374 (synopsis "Package to check if a file is binary or text")
12375 (description "Ultra-lightweight pure Python package to check if a file is
12376 binary or text.")
12377 (license license:bsd-3)
12378 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12379
12380 (define-public python2-binaryornot
12381 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12382 (package (inherit base)
12383 (propagated-inputs
12384 `(("python2-enum34" ,python2-enum34)
12385 ,@(package-propagated-inputs base))))))
12386
12387 (define-public python-binwalk
12388 (package
12389 (name "python-binwalk")
12390 (version "2.2.0")
12391 (source
12392 (origin
12393 (method git-fetch)
12394 (uri (git-reference
12395 (url "https://github.com/ReFirmLabs/binwalk")
12396 (commit (string-append "v" version))))
12397 (file-name (git-file-name name version))
12398 (sha256
12399 (base32
12400 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12401 (build-system python-build-system)
12402 (arguments
12403 `(#:phases
12404 (modify-phases %standard-phases
12405 (add-before 'check 'set-pythonpath
12406 (lambda _
12407 (setenv "PYTHONPATH"
12408 (string-append
12409 (getcwd) "/src/"
12410 ":" (getenv "PYTHONPATH")))
12411 (setenv "HOME" "")
12412 #t)))))
12413 (native-inputs
12414 `(("python-coverage" ,python-coverage)
12415 ("python-nose" ,python-nose)))
12416 (home-page "https://github.com/ReFirmLabs/binwalk")
12417 (synopsis "Firmware analysis tool")
12418 (description "Binwalk is a tool for analyzing, reverse engineering, and
12419 extracting firmware images")
12420 (license license:expat)))
12421
12422 (define-public python-nltk
12423 (package
12424 (name "python-nltk")
12425 (version "3.2.1")
12426 (source (origin
12427 (method url-fetch)
12428 (uri (pypi-uri "nltk" version))
12429 (sha256
12430 (base32
12431 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12432 (build-system python-build-system)
12433 (arguments
12434 '(;; The tests require some extra resources to be downloaded.
12435 ;; TODO Try packaging these resources.
12436 #:tests? #f))
12437 (home-page "http://nltk.org/")
12438 (synopsis "Natural Language Toolkit")
12439 (description "It provides interfaces to over 50 corpora and lexical
12440 resources such as WordNet, along with a suite of text processing libraries
12441 for classification, tokenization, stemming, tagging, parsing, and semantic
12442 reasoning, wrappers for natural language processing libraries.")
12443 (license license:asl2.0)))
12444
12445 (define-public python2-nltk
12446 (package-with-python2 python-nltk))
12447
12448 (define-public python-pymongo
12449 (package
12450 (name "python-pymongo")
12451 (version "3.7.2")
12452 (source (origin
12453 (method url-fetch)
12454 (uri (pypi-uri "pymongo" version))
12455 (sha256
12456 (base32
12457 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12458 (build-system python-build-system)
12459 (propagated-inputs
12460 `(("python-certifi" ,python-certifi)))
12461 (home-page "https://github.com/mongodb/mongo-python-driver")
12462 (synopsis "Python driver for MongoDB")
12463 (description "Python driver for MongoDB.")
12464 (license license:asl2.0)))
12465
12466 (define-public python2-pymongo
12467 (package-with-python2 python-pymongo))
12468
12469 (define-public python-consul
12470 (package
12471 (name "python-consul")
12472 (version "0.6.1")
12473 (source
12474 (origin
12475 (method url-fetch)
12476 (uri (pypi-uri "python-consul" version))
12477 (sha256
12478 (base32
12479 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12480 (build-system python-build-system)
12481 (arguments
12482 '(#:tests? #f)) ; The tests are not distributed
12483 (propagated-inputs
12484 `(("python-requests" ,python-requests)
12485 ("python-six" ,python-six)))
12486 (home-page "https://github.com/cablehead/python-consul")
12487 (synopsis "Python client for Consul")
12488 (description
12489 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12490 discovery, monitoring and configuration.")
12491 (license license:expat)))
12492
12493 (define-public python2-consul
12494 (package-with-python2 python-consul))
12495
12496 (define-public python-schematics
12497 (package
12498 (name "python-schematics")
12499 (version "1.1.1")
12500 (source
12501 (origin
12502 (method git-fetch)
12503 (uri (git-reference
12504 (url "https://github.com/schematics/schematics.git")
12505 (commit (string-append "v" version))))
12506 (file-name (git-file-name name version))
12507 (sha256
12508 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12509 (build-system python-build-system)
12510 (propagated-inputs
12511 `(("python-six" ,python-six)))
12512 (arguments
12513 ;; The tests require a bunch of not very nice packages with fixed
12514 ;; version requirements (e.g. python-coveralls).
12515 `(#:tests? #f))
12516 (home-page "https://github.com/schematics/schematics")
12517 (synopsis "Python Data Structures for Humans")
12518 (description "Python Data Structures for Humans.")
12519 (license license:bsd-3)))
12520
12521 (define-public python2-schematics
12522 (package-with-python2 python-schematics))
12523
12524 (define-public python-odfpy
12525 (package
12526 (name "python-odfpy")
12527 (version "1.3.3")
12528 (source (origin
12529 (method url-fetch)
12530 (uri (pypi-uri "odfpy" version))
12531 (sha256
12532 (base32
12533 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12534 (arguments
12535 `(#:modules ((srfi srfi-1)
12536 (guix build python-build-system)
12537 (guix build utils))
12538 #:phases
12539 (modify-phases %standard-phases
12540 (replace 'check
12541 ;; The test runner invokes python2 and python3 for test*.py.
12542 ;; To avoid having both in inputs, we replicate it here.
12543 (lambda _
12544 (for-each (lambda (test-file) (invoke "python" test-file))
12545 (find-files "tests" "^test.*\\.py$"))
12546 #t)))))
12547 (build-system python-build-system)
12548 (home-page "https://github.com/eea/odfpy")
12549 (synopsis "Python API and tools to manipulate OpenDocument files")
12550 (description "Collection of libraries and utility programs written in
12551 Python to manipulate OpenDocument 1.2 files.")
12552 (license
12553 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12554 ;; number of files with other licenses.
12555 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12556
12557 (define-public python2-odfpy
12558 (package-with-python2 python-odfpy))
12559
12560 (define-public python-natsort
12561 (package
12562 (name "python-natsort")
12563 (version "7.0.1")
12564 (source (origin
12565 (method url-fetch)
12566 (uri (pypi-uri "natsort" version))
12567 (sha256
12568 (base32
12569 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12570 (build-system python-build-system)
12571 (arguments
12572 `(#:modules ((guix build utils)
12573 (guix build python-build-system)
12574 (srfi srfi-1)
12575 (srfi srfi-26)
12576 (ice-9 ftw))
12577 #:phases
12578 (modify-phases %standard-phases
12579 (add-before 'check 'set-cachedir
12580 ;; Tests require write access to $HOME by default
12581 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12582 (replace 'check
12583 (lambda _
12584 (let ((cwd (getcwd)))
12585 (setenv "PYTHONPATH"
12586 (string-append
12587 cwd "/build/"
12588 (find (cut string-prefix? "lib" <>)
12589 (scandir (string-append cwd "/build")))
12590 ":"
12591 (getenv "PYTHONPATH")))
12592 (invoke "pytest" "-v")))))))
12593 (native-inputs
12594 `(("python-hypothesis" ,python-hypothesis)
12595 ("python-pytest-cov" ,python-pytest-cov)
12596 ("python-pytest-mock" ,python-pytest-mock)
12597 ("python-pytest" ,python-pytest)))
12598 (propagated-inputs ; TODO: Add python-fastnumbers.
12599 `(("python-pyicu" ,python-pyicu)))
12600 (home-page "https://github.com/SethMMorton/natsort")
12601 (synopsis "Natural sorting for python and shell")
12602 (description
12603 "Natsort lets you apply natural sorting on lists instead of
12604 lexicographical. If you use the built-in @code{sorted} method in python
12605 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12606 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12607 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12608 identifies numbers and sorts them separately from strings. It can also sort
12609 version numbers, real numbers, mixed types and more, and comes with a shell
12610 command @command{natsort} that exposes this functionality in the command line.")
12611 (license license:expat)
12612 (properties `((python2-variant . ,(delay python2-natsort))))))
12613
12614 ;; Natsort 6.x are the last versions with support for Python 2.
12615 (define-public python2-natsort
12616 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12617 (package (inherit base)
12618 (version "6.2.1")
12619 (source (origin
12620 (method url-fetch)
12621 (uri (pypi-uri "natsort" version))
12622 (sha256
12623 (base32
12624 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12625 (native-inputs
12626 `(("python2-pathlib" ,python2-pathlib)
12627 ,@(package-native-inputs base))))))
12628
12629 (define-public glances
12630 (package
12631 (name "glances")
12632 (version "3.1.4")
12633 (source
12634 (origin
12635 (method url-fetch)
12636 (uri (pypi-uri "Glances" version))
12637 (sha256
12638 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12639 (modules '((guix build utils)))
12640 (snippet
12641 '(begin
12642 ;; Glances phones PyPI for weekly update checks by default.
12643 ;; Disable these. The user can re-enable them if desired.
12644 (substitute* "glances/outdated.py"
12645 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12646 (string-append indentation
12647 "self.args.disable_check_update = True\n"
12648 line)))
12649 #t))))
12650 (build-system python-build-system)
12651 (propagated-inputs
12652 `(("python-future" ,python-future)
12653 ("python-psutil" ,python-psutil)))
12654 (home-page "https://github.com/nicolargo/glances")
12655 (synopsis "Cross-platform curses-based monitoring tool")
12656 (description
12657 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12658 Glances uses the PsUtil library to get information from your system. It
12659 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12660 (license license:lgpl3+)))
12661
12662 (define-public python-glances
12663 (deprecated-package "python-glances" glances))
12664
12665 (define-public python-graphql-core
12666 (package
12667 (name "python-graphql-core")
12668 (version "0.5.3")
12669 (source
12670 (origin
12671 (method url-fetch)
12672 (uri (pypi-uri "graphql-core" version))
12673 (sha256
12674 (base32
12675 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12676 (build-system python-build-system)
12677 (arguments
12678 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12679 #:phases
12680 (modify-phases %standard-phases
12681 (add-after 'unpack 'patch-hardcoded-version
12682 (lambda _ (substitute*
12683 "setup.py"
12684 (("'gevent==1.1rc1'") "'gevent'"))
12685 #t)))))
12686 (native-inputs
12687 `(("python-gevent" ,python-gevent)
12688 ("python-mock" ,python-mock)
12689 ("python-pytest-mock" ,python-pytest-mock)))
12690 (propagated-inputs
12691 `(("python-promise" ,python-promise)
12692 ("python-six" ,python-six)))
12693 (home-page "https://github.com/graphql-python/graphql-core")
12694 (synopsis "GraphQL implementation for Python")
12695 (description
12696 "GraphQL implementation for Python. GraphQL is a data query language and
12697 runtime designed and used to request and deliver data to mobile and web apps.
12698 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12699 to Python.")
12700 (license license:expat)))
12701
12702 (define-public python2-graphql-core
12703 (package-with-python2 python-graphql-core))
12704
12705 (define-public python-graphql-relay
12706 (package
12707 (name "python-graphql-relay")
12708 (version "0.4.5")
12709 (source
12710 (origin
12711 (method url-fetch)
12712 (uri (pypi-uri "graphql-relay" version))
12713 (sha256
12714 (base32
12715 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12716 (build-system python-build-system)
12717 (arguments
12718 '(#:tests? #f)) ; The tests are not distributed
12719 (propagated-inputs
12720 `(("python-graphql-core" ,python-graphql-core)
12721 ("python-promise" ,python-promise)
12722 ("python-six" ,python-six)))
12723 (home-page "https://github.com/graphql-python/graphql-relay-py")
12724 (synopsis "Relay implementation for Python")
12725 (description
12726 "This is a library to allow the easy creation of Relay-compliant servers
12727 using the GraphQL Python reference implementation of a GraphQL server. It
12728 should be noted that the code is a exact port of the original
12729 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12730 from Facebook.")
12731 (license license:expat)))
12732
12733 (define-public python2-graphql-relay
12734 (package-with-python2 python-graphql-relay))
12735
12736 (define-public python-graphene
12737 (package
12738 (name "python-graphene")
12739 (version "0.10.2")
12740 (source
12741 (origin
12742 (method url-fetch)
12743 (uri (pypi-uri "graphene" version))
12744 (sha256
12745 (base32
12746 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12747 (build-system python-build-system)
12748 (propagated-inputs
12749 `(("python-graphql-core" ,python-graphql-core)
12750 ("python-graphql-relay" ,python-graphql-relay)
12751 ("python-iso8601" ,python-iso8601)
12752 ("python-promise" ,python-promise)
12753 ("python-six" ,python-six)))
12754 (arguments
12755 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12756 (home-page "https://graphene-python.org/")
12757 (synopsis "GraphQL Framework for Python")
12758 (description
12759 "Graphene is a Python library for building GraphQL schemas/types.
12760 A GraphQL schema describes your data model, and provides a GraphQL server
12761 with an associated set of resolve methods that know how to fetch data.")
12762 (properties `((python2-variant . ,(delay python2-graphene))))
12763 (license license:expat)))
12764
12765 (define-public python2-graphene
12766 (let ((base (package-with-python2
12767 (strip-python2-variant python-graphene))))
12768 (package (inherit base)
12769 (native-inputs
12770 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12771 ,@(package-native-inputs base))))))
12772
12773 (define-public python-nautilus
12774 (package
12775 (name "python-nautilus")
12776 (version "0.4.9")
12777 (source
12778 (origin
12779 (method url-fetch)
12780 (uri (pypi-uri "nautilus" version))
12781 (sha256
12782 (base32
12783 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12784 (build-system python-build-system)
12785 (arguments `(#:tests? #f)) ; fails to import test modules
12786 (propagated-inputs
12787 `(("python-bcrypt" ,python-bcrypt)
12788 ("python-click" ,python-click)
12789 ("python-consul" ,python-consul)
12790 ("python-graphene" ,python-graphene)
12791 ("python-jinja2" ,python-jinja2)
12792 ("python-peewee" ,python-peewee)
12793 ("python-pika" ,python-pika)
12794 ("python-tornado" ,python-tornado)
12795 ("python-wtforms" ,python-wtforms)))
12796 (native-inputs
12797 `(("python-nose2" ,python-nose2)))
12798 (home-page "https://github.com/AlecAivazis/nautilus")
12799 (synopsis "Library for creating microservice applications")
12800 (description
12801 "Nautilus is a framework for flux based microservices that looks to
12802 provide extendible implementations of common aspects of a cloud so that you can
12803 focus on building massively scalable web applications.")
12804 (license license:expat)))
12805
12806 (define-public python-random2
12807 (package
12808 (name "python-random2")
12809 (version "1.0.1")
12810 (source (origin
12811 (method url-fetch)
12812 (uri (pypi-uri "random2" version ".zip"))
12813 (sha256
12814 (base32
12815 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12816 (build-system python-build-system)
12817 (native-inputs `(("unzip" ,unzip)))
12818 (home-page "http://pypi.python.org/pypi/random2")
12819 (synopsis "Python 3 version of the Python 2 @code{random} module")
12820 (description
12821 "This package provides a Python 3 ported version of Python 2.7’s
12822 @code{random} module. It has also been back-ported to work in Python 2.6.
12823
12824 In Python 3, the implementation of @code{randrange()} was changed, so that
12825 even with the same seed you get different sequences in Python 2 and 3.
12826
12827 This package closes that gap, allowing stable random number generation
12828 between the different Python versions.")
12829 (license license:psfl)))
12830
12831 (define-public python2-random2
12832 (package-with-python2 python-random2))
12833
12834 (define-public python-snowballstemmer
12835 (package
12836 (name "python-snowballstemmer")
12837 (version "2.0.0")
12838 (source (origin
12839 (method url-fetch)
12840 (uri (pypi-uri "snowballstemmer" version))
12841 (sha256
12842 (base32
12843 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12844 (build-system python-build-system)
12845 (arguments
12846 `(;; No tests exist
12847 #:tests? #f))
12848 (home-page "https://github.com/shibukawa/snowball_py")
12849 (synopsis "Snowball stemming library collection for Python")
12850 (description "This package provides 16 word stemmer algorithms generated
12851 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12852 English stemmer.")
12853 (license license:bsd-3)))
12854
12855 (define-public python2-snowballstemmer
12856 (package-with-python2 python-snowballstemmer))
12857
12858 (define-public python-setproctitle
12859 (package
12860 (name "python-setproctitle")
12861 (version "1.1.10")
12862 (source
12863 (origin
12864 (method url-fetch)
12865 (uri (pypi-uri "setproctitle" version))
12866 (sha256
12867 (base32
12868 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12869 (build-system python-build-system)
12870 (arguments
12871 '(#:phases
12872 (modify-phases %standard-phases
12873 (add-before 'check 'patch-Makefile
12874 ;; Stricly this is only required for the python2 variant.
12875 ;; But adding a phase in an inherited package seems to be
12876 ;; cumbersum. So we patch even for python3.
12877 (lambda _
12878 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12879 (when nose
12880 (substitute* "Makefile"
12881 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12882 (string-append nose "/bin/nosetests "))))
12883 #t)))
12884 (replace 'check
12885 (lambda _
12886 (setenv "PYTHON" (or (which "python3") (which "python")))
12887 (setenv "PYCONFIG" (or (which "python3-config")
12888 (which "python-config")))
12889 (setenv "CC" "gcc")
12890 ;; No need to extend PYTHONPATH to find the built package, since
12891 ;; the Makefile will build anyway
12892 (invoke "make" "check"))))))
12893 (native-inputs
12894 `(("procps" ,procps))) ; required for tests
12895 (home-page
12896 "https://github.com/dvarrazzo/py-setproctitle")
12897 (synopsis
12898 "Setproctitle implementation for Python to customize the process title")
12899 (description "The library allows a process to change its title (as displayed
12900 by system tools such as ps and top).
12901
12902 Changing the title is mostly useful in multi-process systems, for
12903 example when a master process is forked: changing the children's title
12904 allows identifying the task each process is busy with. The technique
12905 is used by PostgreSQL and the OpenSSH Server for example.")
12906 (license license:bsd-3)
12907 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12908
12909 (define-public python2-setproctitle
12910 (let ((base (package-with-python2
12911 (strip-python2-variant python-setproctitle))))
12912 (package
12913 (inherit base)
12914 (native-inputs `(("python2-nose" ,python2-nose)
12915 ,@(package-native-inputs base))))))
12916
12917 (define-public python-validictory
12918 (package
12919 (name "python-validictory")
12920 (version "1.0.1")
12921 (source
12922 (origin
12923 (method url-fetch)
12924 (uri (pypi-uri "validictory" version))
12925 (sha256
12926 (base32
12927 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12928 (build-system python-build-system)
12929 (arguments
12930 '(#:phases
12931 (modify-phases %standard-phases
12932 (add-after 'unpack 'bootstrap
12933 ;; Move the tests out of the package directory to avoid
12934 ;; packaging them.
12935 (lambda* _
12936 (rename-file "validictory/tests" "tests")
12937 (delete-file "tests/__init__.py")))
12938 (replace 'check
12939 (lambda _
12940 ;; Extend PYTHONPATH so the built package will be found.
12941 (setenv "PYTHONPATH"
12942 (string-append (getcwd) "/build/lib:"
12943 (getenv "PYTHONPATH")))
12944 (invoke "py.test" "-vv" ))))))
12945 (native-inputs
12946 `(("python-pytest" ,python-pytest)))
12947 (home-page
12948 "https://github.com/jamesturk/validictory")
12949 (synopsis "General purpose Python data validator")
12950 (description "It allows validation of arbitrary Python data structures.
12951
12952 The schema format is based on the JSON Schema
12953 proposal (http://json-schema.org), so combined with json the library is also
12954 useful as a validator for JSON data.")
12955 (license license:expat)))
12956
12957 (define-public python2-validictory
12958 (package-with-python2 python-validictory))
12959
12960 (define-public python-pyelftools
12961 (package
12962 (name "python-pyelftools")
12963 (version "0.25")
12964 (source
12965 (origin
12966 (method url-fetch)
12967 (uri (pypi-uri "pyelftools" version))
12968 (sha256
12969 (base32
12970 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
12971 (build-system python-build-system)
12972 (arguments
12973 `(#:phases
12974 (modify-phases %standard-phases
12975 (add-before 'check 'set-pythonpath
12976 (lambda _
12977 (setenv "PYTHONPATH"
12978 (string-append
12979 (getcwd) "/test/"
12980 ":" (getenv "PYTHONPATH")))
12981 #t)))))
12982 (home-page
12983 "https://github.com/eliben/pyelftools")
12984 (synopsis
12985 "Analyze binary and library file information")
12986 (description "This Python library provides interfaces for parsing and
12987 analyzing two binary and library file formats; the Executable and Linking
12988 Format (ELF), and debugging information in the Debugging With Attributed
12989 Record Format (DWARF).")
12990 (license license:public-domain)))
12991
12992 (define-public python-pyev
12993 (package
12994 (name "python-pyev")
12995 (version "0.9.0")
12996 (source
12997 (origin
12998 (method url-fetch)
12999 (uri (pypi-uri "pyev" version))
13000 (sha256
13001 (base32
13002 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13003 (build-system python-build-system)
13004 (arguments
13005 `(#:tests? #f ; no test suite
13006 #:phases
13007 (modify-phases %standard-phases
13008 (add-after 'unpack 'patch
13009 (lambda* (#:key inputs #:allow-other-keys)
13010 (let ((libev (string-append (assoc-ref inputs "libev")
13011 "/lib/libev.so.4")))
13012 (substitute* "setup.py"
13013 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13014 (string-append "libev_dll_name = \"" libev "\"")))))))))
13015 (inputs
13016 `(("libev" ,libev)))
13017 (home-page "http://pythonhosted.org/pyev/")
13018 (synopsis "Python libev interface")
13019 (description "Pyev provides a Python interface to libev.")
13020 (license license:gpl3)))
13021
13022 (define-public python2-pyev
13023 (package-with-python2 python-pyev))
13024
13025 (define-public python-imagesize
13026 (package
13027 (name "python-imagesize")
13028 (version "1.2.0")
13029 (source
13030 (origin
13031 (method url-fetch)
13032 (uri (pypi-uri "imagesize" version))
13033 (sha256
13034 (base32
13035 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13036 (build-system python-build-system)
13037 (home-page "https://github.com/shibukawa/imagesize_py")
13038 (synopsis "Gets image size of files in various formats in Python")
13039 (description
13040 "This package allows determination of image size from
13041 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13042 (license license:expat)))
13043
13044 (define-public python2-imagesize
13045 (package-with-python2 python-imagesize))
13046
13047 (define-public python-termstyle
13048 (package
13049 (name "python-termstyle")
13050 (version "0.1.11")
13051 (source
13052 (origin
13053 (method url-fetch)
13054 (uri (pypi-uri "termstyle" version))
13055 (sha256
13056 (base32
13057 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13058 (build-system python-build-system)
13059 (arguments
13060 '(#:phases
13061 (modify-phases %standard-phases
13062 (replace 'check
13063 (lambda _
13064 (invoke "python" "test3.py"))))))
13065 (home-page "https://github.com/gfxmonk/termstyle")
13066 (synopsis "Console text coloring for Python")
13067 (description "This package provides console text coloring for Python.")
13068 (license license:bsd-3)))
13069
13070 (define-public python-argcomplete
13071 (package
13072 (name "python-argcomplete")
13073 (version "1.11.1")
13074 (source
13075 (origin
13076 (method url-fetch)
13077 (uri (pypi-uri "argcomplete" version))
13078 (sha256
13079 (base32
13080 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13081 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13082 (build-system python-build-system)
13083 (native-inputs
13084 `(("python-coverage" ,python-coverage)
13085 ("python-flake8" ,python-flake8)
13086 ("python-pexpect" ,python-pexpect)
13087 ("python-wheel" ,python-wheel)
13088 ("tcsh" ,tcsh)
13089 ("fish" ,fish)
13090 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13091 (home-page "https://github.com/kislyuk/argcomplete")
13092 (synopsis "Shell tab completion for Python argparse")
13093 (description "argcomplete provides extensible command line tab completion
13094 of arguments and options for Python scripts using @code{argparse}. It's
13095 particularly useful for programs with many options or sub-parsers that can
13096 dynamically suggest completions; for example, when browsing resources over the
13097 network.")
13098 (license license:asl2.0)))
13099
13100 (define-public python2-argcomplete
13101 (package-with-python2 python-argcomplete))
13102
13103 (define-public python-xopen
13104 (package
13105 (name "python-xopen")
13106 (version "0.5.0")
13107 (source
13108 (origin
13109 (method url-fetch)
13110 (uri (pypi-uri "xopen" version))
13111 (sha256
13112 (base32
13113 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13114 (build-system python-build-system)
13115 (propagated-inputs
13116 `(("python-setuptools-scm" ,python-setuptools-scm)))
13117 (home-page "https://github.com/marcelm/xopen/")
13118 (synopsis "Open compressed files transparently")
13119 (description "This module provides an @code{xopen} function that works like
13120 Python's built-in @code{open} function, but can also deal with compressed files.
13121 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13122 recognized by their file extensions. The focus is on being as efficient as
13123 possible on all supported Python versions.")
13124 (license license:expat)))
13125
13126 (define-public python2-xopen
13127 (let ((base (package-with-python2
13128 (strip-python2-variant python-xopen))))
13129 (package
13130 (inherit base)
13131 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13132 ,@(package-propagated-inputs base))))))
13133
13134 (define-public python-cheetah
13135 (package
13136 (name "python-cheetah")
13137 (version "3.2.4")
13138 (source
13139 (origin
13140 (method url-fetch)
13141 (uri (pypi-uri "Cheetah3" version))
13142 (sha256
13143 (base32
13144 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13145 (build-system python-build-system)
13146 (arguments
13147 `(#:modules ((guix build utils)
13148 (guix build python-build-system)
13149 (ice-9 ftw)
13150 (srfi srfi-1)
13151 (srfi srfi-26))
13152 #:phases (modify-phases %standard-phases
13153 (add-after 'unpack 'use-absolute-python
13154 (lambda _
13155 (substitute* "Cheetah/CheetahWrapper.py"
13156 (("#!/usr/bin/env python")
13157 (string-append "#!" (which "python"))))
13158 #t))
13159 (add-after 'unpack 'fix-tests
13160 (lambda _
13161 (substitute* "Cheetah/Tests/ImportHooks.py"
13162 (("os.path.dirname\\(__file__\\)")
13163 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13164 #t))
13165 (replace 'check
13166 (lambda _
13167 (let ((cwd (getcwd)))
13168 (setenv "PYTHONPATH"
13169 (string-append
13170 cwd "/build/"
13171 (find (cut string-prefix? "lib" <>)
13172 (scandir (string-append cwd "/build")))
13173 ":" (getenv "PYTHONPATH")))
13174 (setenv "PATH"
13175 (string-append (getenv "PATH")
13176 ":" cwd "/bin"))
13177 (setenv "TMPDIR" "/tmp")
13178
13179 (substitute* "Cheetah/Tests/Test.py"
13180 (("unittest.TextTestRunner\\(\\)")
13181 "unittest.TextTestRunner(verbosity=2)"))
13182
13183 (invoke "python" "Cheetah/Tests/Test.py")))))))
13184 (propagated-inputs
13185 `(("python-markdown" ,python-markdown))) ;optional
13186 (home-page "https://cheetahtemplate.org/")
13187 (synopsis "Template engine")
13188 (description "Cheetah is a text-based template engine and Python code
13189 generator.
13190
13191 Cheetah can be used as a standalone templating utility or referenced as
13192 a library from other Python applications. It has many potential uses,
13193 but web developers looking for a viable alternative to ASP, JSP, PHP and
13194 PSP are expected to be its principle user group.
13195
13196 Features:
13197 @enumerate
13198 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13199 text-based format.
13200 @item Cleanly separates content, graphic design, and program code.
13201 @item Blends the power and flexibility of Python with a simple template language
13202 that non-programmers can understand.
13203 @item Gives template writers full access to any Python data structure, module,
13204 function, object, or method in their templates.
13205 @item Makes code reuse easy by providing an object-orientated interface to
13206 templates that is accessible from Python code or other Cheetah templates.
13207 One template can subclass another and selectively reimplement sections of it.
13208 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13209 improve the performance of a dynamic website.
13210 @item Compiles templates into optimized, yet readable, Python code.
13211 @end enumerate")
13212 (license (license:x11-style "file://LICENSE"))))
13213
13214 (define-public python2-cheetah
13215 (package-with-python2 python-cheetah))
13216
13217 (define-public python-dulwich
13218 (package
13219 (name "python-dulwich")
13220 (version "0.19.16")
13221 (source
13222 (origin
13223 (method url-fetch)
13224 (uri (list (string-append "https://www.dulwich.io/releases/"
13225 "dulwich-" version ".tar.gz")
13226 (pypi-uri "dulwich" version)))
13227 (sha256
13228 (base32
13229 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13230 (build-system python-build-system)
13231 (arguments
13232 `(#:phases
13233 (modify-phases %standard-phases
13234 (add-before 'check 'fix-tests
13235 (lambda* (#:key inputs #:allow-other-keys)
13236 ;; The tests use Popen with a custom environment which doesn't
13237 ;; include PATH.
13238 (substitute* "dulwich/tests/compat/utils.py"
13239 (("'git'") (string-append "'"
13240 (which "git")
13241 "'")))
13242 (substitute* '("dulwich/tests/test_repository.py"
13243 "dulwich/tests/test_hooks.py")
13244 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13245 (setenv "TEST_RUNNER" "unittest")
13246 (setenv "PYTHONHASHSEED" "random")
13247 #t)))))
13248 (propagated-inputs
13249 `(("python-fastimport" ,python-fastimport)
13250 ("python-urllib3" ,python-urllib3)))
13251 (native-inputs
13252 `(("python-mock" ,python-mock)
13253 ("python-geventhttpclient" ,python-geventhttpclient)
13254 ("git" ,git)))
13255 (home-page "https://www.dulwich.io/")
13256 (synopsis "Git implementation in Python")
13257 (description "Dulwich is an implementation of the Git file formats and
13258 protocols written in pure Python.")
13259 ;; Can be used with either license.
13260 (license (list license:asl2.0 license:gpl2+))))
13261
13262 (define-public python2-dulwich
13263 (package-with-python2 python-dulwich))
13264
13265 (define-public python-pbkdf2
13266 (package
13267 (name "python-pbkdf2")
13268 (version "1.3")
13269 (source
13270 (origin
13271 (method url-fetch)
13272 (uri (pypi-uri "pbkdf2" version))
13273 (sha256
13274 (base32
13275 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13276 (build-system python-build-system)
13277 (arguments
13278 '(#:phases
13279 (modify-phases %standard-phases
13280 (replace 'check
13281 (lambda _
13282 (setenv "PYTHONPATH"
13283 (string-append (getcwd) "/build/lib:"
13284 (getenv "PYTHONPATH")))
13285 (invoke "python" "test/test_pbkdf2.py"))))))
13286 (propagated-inputs
13287 `(("python-pycrypto" ,python-pycrypto))) ; optional
13288 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13289 (synopsis "Password-based key derivation")
13290 (description "This module implements the password-based key derivation
13291 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13292
13293 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13294 is part of the RSA Public Key Cryptography Standards series. The provided
13295 implementation takes a password or a passphrase and a salt value (and
13296 optionally a iteration count, a digest module, and a MAC module) and provides
13297 a file-like object from which an arbitrarly-sized key can be read.")
13298 (license license:expat)))
13299
13300 (define-public python2-pbkdf2
13301 (package-with-python2 python-pbkdf2))
13302
13303 (define-public python-qrcode
13304 (package
13305 (name "python-qrcode")
13306 (version "6.1")
13307 (source
13308 (origin
13309 (method url-fetch)
13310 (uri (pypi-uri "qrcode" version))
13311 (sha256
13312 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13313 (build-system python-build-system)
13314 (arguments
13315 ;; FIXME: Tests require packaging 'pymaging'.
13316 '(#:tests? #f))
13317 (propagated-inputs
13318 `(("python-lxml" ,python-lxml) ; for SVG output
13319 ("python-pillow" ,python-pillow) ; for PNG output
13320 ("python-six" ,python-six)))
13321 (home-page "https://github.com/lincolnloop/python-qrcode")
13322 (synopsis "QR Code image generator")
13323 (description "This package provides a pure Python QR Code generator
13324 module. It uses the Python Imaging Library (PIL) to allow for the generation
13325 of QR Codes.
13326
13327 In addition this package provides a command line tool to generate QR codes and
13328 either write these QR codes to a file or do the output as ascii art at the
13329 console.")
13330 (license license:bsd-3)))
13331
13332 (define-public python2-qrcode
13333 (package-with-python2 python-qrcode))
13334
13335 (define-public python-rst2ansi
13336 (package
13337 (name "python-rst2ansi")
13338 (version "0.1.5")
13339 (source
13340 (origin
13341 (method url-fetch)
13342 (uri (pypi-uri "rst2ansi" version))
13343 (sha256
13344 (base32
13345 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13346 (build-system python-build-system)
13347 (propagated-inputs
13348 `(("python-docutils" ,python-docutils)))
13349 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13350 (synopsis "Convert RST to ANSI-decorated console output")
13351 (description
13352 "Python module dedicated to rendering RST (reStructuredText) documents
13353 to ansi-escaped strings suitable for display in a terminal.")
13354 (license license:expat)))
13355
13356 (define-public python-ansi2html
13357 (package
13358 (name "python-ansi2html")
13359 (version "1.2.0")
13360 (source
13361 (origin
13362 (method url-fetch)
13363 (uri (pypi-uri "ansi2html" version))
13364 (sha256
13365 (base32
13366 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13367 (build-system python-build-system)
13368 (native-inputs
13369 `(("python-mock" ,python-mock)
13370 ("python-nose" ,python-nose)))
13371 (propagated-inputs
13372 `(("python-six" ,python-six)))
13373 (home-page "https://github.com/ralphbean/ansi2html")
13374 (synopsis "Convert ANSI-decorated console output to HTML")
13375 (description
13376 "@command{ansi2html} is a Python library and command line utility for
13377 convering text with ANSI color codes to HTML or LaTeX.")
13378 (license license:gpl3+)))
13379
13380 (define-public python2-ansi2html
13381 (package-with-python2 python-ansi2html))
13382
13383 (define-public python-ddt
13384 (package
13385 (name "python-ddt")
13386 (version "1.1.3")
13387 (source
13388 (origin
13389 (method url-fetch)
13390 (uri (pypi-uri "ddt" version))
13391 (sha256
13392 (base32
13393 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13394 (build-system python-build-system)
13395 (native-inputs
13396 `(("python-mock" ,python-mock)
13397 ("python-nose" ,python-nose)))
13398 (propagated-inputs
13399 `(("python-six" ,python-six)
13400 ("python-pyyaml" ,python-pyyaml)))
13401 (home-page "https://github.com/txels/ddt")
13402 (synopsis "Data-Driven Tests")
13403 (description
13404 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13405 running it with different test data, and make it appear as multiple test
13406 cases.")
13407 (license license:expat)))
13408
13409 (define-public python2-ddt
13410 (package-with-python2 python-ddt))
13411
13412 (define-public python-pycountry
13413 (package
13414 (name "python-pycountry")
13415 (version "18.5.26")
13416 (source
13417 (origin
13418 (method url-fetch)
13419 (uri (pypi-uri "pycountry" version))
13420 (sha256
13421 (base32
13422 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13423 (build-system python-build-system)
13424 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13425 (synopsis "ISO databases for languages, countries, currencies, etc.")
13426 (description
13427 "@code{pycountry} provides the ISO databases for the standards:
13428 @enumerate
13429 @item 639-3 (Languages)
13430 @item 3166 (Countries)
13431 @item 3166-3 (Deleted Countries)
13432 @item 3166-2 (Subdivisions of countries)
13433 @item 4217 (Currencies)
13434 @item 15924 (Scripts)
13435 @end enumerate
13436 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13437 through a Python API.")
13438 (license license:lgpl2.1+)))
13439
13440 (define-public python2-pycountry
13441 (package-with-python2 python-pycountry))
13442
13443 (define-public python-pycosat
13444 (package
13445 (name "python-pycosat")
13446 (version "0.6.1")
13447 (source
13448 (origin
13449 (method url-fetch)
13450 (uri (pypi-uri "pycosat" version))
13451 (sha256
13452 (base32
13453 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13454 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13455 (build-system python-build-system)
13456 (home-page "https://github.com/ContinuumIO/pycosat")
13457 (synopsis "Bindings to picosat (a SAT solver)")
13458 (description
13459 "This package provides efficient Python bindings to @code{picosat} on
13460 the C level. When importing pycosat, the @code{picosat} solver becomes part
13461 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13462 Problem} (SAT) solver.")
13463 (license license:expat)))
13464
13465 (define-public python2-pycosat
13466 (package-with-python2 python-pycosat))
13467
13468 (define-public python2-ruamel.ordereddict
13469 (package
13470 (name "python2-ruamel.ordereddict")
13471 (version "0.4.9")
13472 (source
13473 (origin
13474 (method url-fetch)
13475 (uri (pypi-uri "ruamel.ordereddict" version))
13476 (sha256
13477 (base32
13478 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13479 (build-system python-build-system)
13480 (arguments
13481 `(#:python ,python-2
13482 #:phases
13483 (modify-phases %standard-phases
13484 (delete 'check)
13485 (add-after 'install 'check
13486 (lambda* (#:key inputs outputs #:allow-other-keys)
13487 (add-installed-pythonpath inputs outputs)
13488 (invoke "python" "test/testordereddict.py"))))))
13489 (home-page "https://bitbucket.org/ruamel/ordereddict")
13490 (synopsis "Version of dict that keeps keys in insertion order")
13491 (description
13492 "This is an implementation of an ordered dictionary with @dfn{Key
13493 Insertion Order} (KIO: updates of values do not affect the position of the
13494 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13495 removed and put at the back). The standard library module @code{OrderedDict},
13496 implemented later, implements a subset of @code{ordereddict} functionality.
13497 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13498 Order} (KSO, no sorting function can be specified, but a transform can be
13499 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13500 (license license:expat)))
13501
13502 (define-public python-pypeg2
13503 (package
13504 (name "python-pypeg2")
13505 (version "2.15.2")
13506 (source
13507 (origin
13508 (method url-fetch)
13509 (uri (pypi-uri "pyPEG2" version))
13510 (sha256
13511 (base32
13512 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13513 (build-system python-build-system)
13514 (propagated-inputs `(("python-lxml" ,python-lxml)))
13515 (arguments
13516 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13517 '(#:tests? #f))
13518 (home-page "https://fdik.org/pyPEG/")
13519 (synopsis "Parsering Expression Grammars in Python")
13520 (description "PyPEG is an intrinsic parser interpreter framework for
13521 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13522 parse many formal languages.")
13523 (license license:gpl2)))
13524
13525 (define-public python-incremental
13526 (package
13527 (name "python-incremental")
13528 (version "17.5.0")
13529 (source
13530 (origin
13531 (method url-fetch)
13532 (uri (pypi-uri "incremental" version))
13533 (sha256
13534 (base32
13535 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13536 (build-system python-build-system)
13537 (home-page "https://github.com/hawkowl/incremental")
13538 (synopsis "Library for versioning Python projects")
13539 (description "Incremental is a small library that versions your Python
13540 projects.")
13541 (license license:expat)))
13542
13543 (define-public python2-incremental
13544 (package-with-python2 python-incremental))
13545
13546 (define-public python-invoke
13547 (package
13548 (name "python-invoke")
13549 (home-page "https://www.pyinvoke.org/")
13550 (version "1.3.0")
13551 (source (origin
13552 (method url-fetch)
13553 (uri (pypi-uri "invoke" version))
13554 (sha256
13555 (base32
13556 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13557 (build-system python-build-system)
13558 (arguments
13559 ;; XXX: Requires many dependencies that are not yet in Guix.
13560 `(#:tests? #f))
13561 (synopsis "Pythonic task execution")
13562 (description
13563 "Invoke is a Python task execution tool and library, drawing inspiration
13564 from various sources to arrive at a powerful and clean feature set. It is
13565 evolved from the Fabric project, but focuses on local and abstract concerns
13566 instead of servers and network commands.")
13567 (license license:bsd-3)))
13568
13569 (define-public python2-invoke
13570 (package-with-python2 python-invoke))
13571
13572 (define-public python-automat
13573 (package
13574 (name "python-automat")
13575 (version "20.2.0")
13576 (source (origin
13577 (method url-fetch)
13578 (uri (pypi-uri "Automat" version))
13579 (sha256
13580 (base32
13581 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13582 (build-system python-build-system)
13583 ;; We disable the tests because they require python-twisted, while
13584 ;; python-twisted depends on python-automat. Twisted is optional, but the
13585 ;; tests fail if it is not available. Also see
13586 ;; <https://github.com/glyph/automat/issues/71>.
13587 (arguments '(#:tests? #f))
13588 (native-inputs
13589 `(("python-m2r" ,python-m2r)
13590 ("python-setuptools-scm" ,python-setuptools-scm)
13591 ("python-graphviz" ,python-graphviz)))
13592 (propagated-inputs
13593 `(("python-six" ,python-six)
13594 ("python-attrs" ,python-attrs)))
13595 (home-page "https://github.com/glyph/Automat")
13596 (synopsis "Self-service finite-state machines")
13597 (description "Automat is a library for concise, idiomatic Python
13598 expression of finite-state automata (particularly deterministic finite-state
13599 transducers).")
13600 (license license:expat)))
13601
13602 (define-public python2-automat
13603 (package-with-python2 python-automat))
13604
13605 (define-public python-m2r
13606 (package
13607 (name "python-m2r")
13608 (version "0.2.1")
13609 (source (origin
13610 (method url-fetch)
13611 (uri (pypi-uri "m2r" version))
13612 (sha256
13613 (base32
13614 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13615 (build-system python-build-system)
13616 (propagated-inputs
13617 `(("python-docutils" ,python-docutils)
13618 ("python-mistune" ,python-mistune)))
13619 (native-inputs
13620 `(("python-pygments" ,python-pygments)
13621 ("python-mock" ,python-mock)))
13622 (home-page "https://github.com/miyakogi/m2r")
13623 (synopsis "Markdown to reStructuredText converter")
13624 (description "M2R converts a markdown file including reST markups to valid
13625 reST format.")
13626 (license license:expat)))
13627
13628 (define-public python2-m2r
13629 (package-with-python2 python-m2r))
13630
13631 (define-public python-constantly
13632 (package
13633 (name "python-constantly")
13634 (version "15.1.0")
13635 (source (origin
13636 (method url-fetch)
13637 (uri (pypi-uri "constantly" version))
13638 (sha256
13639 (base32
13640 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13641 (build-system python-build-system)
13642 (home-page "https://github.com/twisted/constantly")
13643 (synopsis "Symbolic constants in Python")
13644 (description "Constantly is a Python library that provides symbolic
13645 constant support. It includes collections and constants with text, numeric,
13646 and bit flag values.")
13647 (license license:expat)))
13648
13649 (define-public python2-constantly
13650 (package-with-python2 python-constantly))
13651
13652 (define-public python-attrs
13653 (package
13654 (name "python-attrs")
13655 (version "19.3.0")
13656 (source (origin
13657 (method url-fetch)
13658 (uri (pypi-uri "attrs" version))
13659 (sha256
13660 (base32
13661 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13662 (build-system python-build-system)
13663 (arguments
13664 `(#:modules ((guix build utils)
13665 (guix build python-build-system)
13666 (ice-9 ftw)
13667 (srfi srfi-1)
13668 (srfi srfi-26))
13669 #:phases (modify-phases %standard-phases
13670 (replace 'check
13671 (lambda _
13672 (let ((cwd (getcwd)))
13673 (setenv "PYTHONPATH"
13674 (string-append
13675 cwd "/build/"
13676 (find (cut string-prefix? "lib" <>)
13677 (scandir (string-append cwd "/build")))
13678 ":"
13679 (getenv "PYTHONPATH")))
13680 (invoke "python" "-m" "pytest")))))))
13681 (native-inputs
13682 `(("python-coverage" ,python-coverage)
13683 ("python-hypothesis" ,python-hypothesis)
13684 ("python-pympler" ,python-pympler)
13685 ("python-pytest" ,python-pytest)
13686 ("python-six" ,python-six)
13687 ("python-sphinx" ,python-sphinx)
13688 ("python-zope-interface" ,python-zope-interface)))
13689 (home-page "https://github.com/python-attrs/attrs/")
13690 (synopsis "Attributes without boilerplate")
13691 (description "@code{attrs} is a Python package with class decorators that
13692 ease the chores of implementing the most common attribute-related object
13693 protocols.")
13694 (license license:expat)))
13695
13696 (define-public python2-attrs
13697 (package-with-python2 python-attrs))
13698
13699 (define-public python-attrs-bootstrap
13700 (package
13701 (inherit python-attrs)
13702 (name "python-attrs-bootstrap")
13703 (native-inputs `())
13704 (arguments `(#:tests? #f))))
13705
13706 (define-public python2-attrs-bootstrap
13707 (package-with-python2 python-attrs-bootstrap))
13708
13709 (define-public python2-cliapp
13710 (package
13711 (name "python2-cliapp")
13712 (version "1.20180812.1")
13713 (source
13714 (origin
13715 (method url-fetch)
13716 (uri (string-append
13717 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13718 version ".tar.gz"))
13719 (sha256
13720 (base32
13721 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13722 (build-system python-build-system)
13723 (arguments
13724 `(#:python ,python-2
13725 #:phases
13726 (modify-phases %standard-phases
13727 ;; check phase needs to be run before the build phase. If not,
13728 ;; coverage-test-runner looks for tests for the built source files,
13729 ;; and fails.
13730 (delete 'check)
13731 (add-before 'build 'check
13732 (lambda _
13733 ;; Disable python3 tests
13734 (substitute* "check"
13735 (("python3") "# python3"))
13736 (invoke "./check"))))))
13737 (native-inputs
13738 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13739 ("python2-pep8" ,python2-pep8)))
13740 (propagated-inputs
13741 `(("python2-pyaml" ,python2-pyaml)))
13742 (home-page "https://liw.fi/cliapp/")
13743 (synopsis "Python framework for command line programs")
13744 (description "@code{python2-cliapp} is a python framework for
13745 command line programs. It contains the typical stuff such programs
13746 need to do, such as parsing the command line for options, and
13747 iterating over input files.")
13748 (license license:gpl2+)))
13749
13750 (define-public python2-ttystatus
13751 (package
13752 (name "python2-ttystatus")
13753 (version "0.36")
13754 (source
13755 (origin
13756 (method url-fetch)
13757 (uri (string-append
13758 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13759 version ".tar.gz"))
13760 (sha256
13761 (base32
13762 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13763 (build-system python-build-system)
13764 (native-inputs
13765 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13766 ("python2-pep8" ,python2-pep8)))
13767 (arguments
13768 `(#:python ,python-2
13769 #:phases
13770 (modify-phases %standard-phases
13771 ;; check phase needs to be run before the build phase. If not,
13772 ;; coverage-test-runner looks for tests for the built source files,
13773 ;; and fails.
13774 (delete 'check)
13775 (add-before 'build 'check
13776 (lambda _ (invoke "make" "check"))))))
13777 (home-page "https://liw.fi/ttystatus/")
13778 (synopsis "Python library for showing progress reporting and
13779 status updates on terminals")
13780 (description "@code{python2-ttystatus} is a python library for
13781 showing progress reporting and status updates on terminals, for
13782 command line programs. Output is automatically adapted to the width
13783 of the terminal: truncated if it does not fit, and resized if the
13784 terminal size changes.")
13785 (license license:gpl3+)))
13786
13787 (define-public python2-tracing
13788 (package
13789 (name "python2-tracing")
13790 (version "0.10")
13791 (source
13792 (origin
13793 (method url-fetch)
13794 (uri (string-append
13795 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13796 version ".tar.gz"))
13797 (sha256
13798 (base32
13799 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13800 (build-system python-build-system)
13801 (arguments
13802 `(#:python ,python-2))
13803 (home-page "https://liw.fi/tracing/")
13804 (synopsis "Python debug logging helper")
13805 (description "@code{python2-tracing} is a python library for
13806 logging debug messages. It provides a way to turn debugging messages
13807 on and off, based on the filename they occur in. It is much faster
13808 than using @code{logging.Filter} to accomplish the same thing, which
13809 matters when code is run in production mode. The actual logging still
13810 happens using the @code{logging} library.")
13811 (license license:gpl3+)))
13812
13813 (define-public python2-larch
13814 (package
13815 (name "python2-larch")
13816 (version "1.20151025")
13817 (source
13818 (origin
13819 (method url-fetch)
13820 (uri (string-append
13821 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13822 version ".tar.gz"))
13823 (patches (search-patches
13824 "python2-larch-coverage-4.0a6-compatibility.patch"))
13825 (sha256
13826 (base32
13827 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13828 (build-system python-build-system)
13829 (arguments
13830 `(#:python ,python-2
13831 #:phases
13832 (modify-phases %standard-phases
13833 ;; check phase needs to be run before the build phase. If not,
13834 ;; coverage-test-runner looks for tests for the built source files,
13835 ;; and fails.
13836 (delete 'check)
13837 (add-before 'build 'check
13838 (lambda _ (invoke "make" "check"))))))
13839 (native-inputs
13840 `(("cmdtest" ,cmdtest)
13841 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13842 (propagated-inputs
13843 `(("python2-tracing" ,python2-tracing)))
13844 (home-page "https://liw.fi/larch/")
13845 (synopsis "Python copy-on-write B-tree library")
13846 (description "@code{python2-larch} is an implementation of
13847 particular kind of B-tree, based on research by Ohad Rodeh. See
13848 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13849 on the data structure.
13850
13851 The distinctive feature of this B-tree is that a node is never
13852 (conceptually) modified. Instead, all updates are done by
13853 copy-on-write. This makes it easy to clone a tree, and modify only the
13854 clone, while other processes access the original tree.")
13855 (license license:gpl3+)))
13856
13857 (define-public python-astroid
13858 (package
13859 (name "python-astroid")
13860 (version "2.3.3")
13861 (source
13862 (origin
13863 (method url-fetch)
13864 (uri (pypi-uri "astroid" version))
13865 (sha256
13866 (base32 "0fnibsl2cb5mvzbfm7sycj85smx48f8w8m7ks1sqlmpr9ps0gski"))))
13867 (build-system python-build-system)
13868 (propagated-inputs
13869 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13870 ("python-six" ,python-six)
13871 ("python-typed-ast" ,python-typed-ast)
13872 ("python-wrapt" ,python-wrapt)))
13873 (native-inputs
13874 `(("python-dateutil" ,python-dateutil)
13875 ("python-nose" ,python-nose)
13876 ("python-pytest" ,python-pytest)
13877 ("python-pytest-runner" ,python-pytest-runner)))
13878 (arguments
13879 `(#:phases
13880 (modify-phases %standard-phases
13881 (add-after 'unpack 'remove-spurious-test
13882 (lambda _
13883 ;; This can be removed after upgrading from python-3.7
13884 ;; https://github.com/PyCQA/astroid/issues/593
13885 ;; https://bugs.python.org/issue34056
13886 (delete-file "astroid/tests/unittest_modutils.py")
13887 #t))
13888 (replace 'check
13889 (lambda _
13890 (invoke "pytest" "astroid"))))))
13891 (home-page "https://github.com/PyCQA/astroid")
13892 (synopsis "Common base representation of python source code for pylint and
13893 other projects")
13894 (description "@code{python-astroid} provides a common base representation
13895 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13896
13897 It provides a compatible representation which comes from the _ast module. It
13898 rebuilds the tree generated by the builtin _ast module by recursively walking
13899 down the AST and building an extended ast. The new node classes have
13900 additional methods and attributes for different usages. They include some
13901 support for static inference and local name scopes. Furthermore, astroid
13902 builds partial trees by inspecting living objects.")
13903 (license license:lgpl2.1+)
13904 (properties `((python2-variant . ,(delay python2-astroid))))))
13905
13906 (define-public python2-astroid
13907 (let ((base (package-with-python2
13908 (strip-python2-variant python-astroid))))
13909 (package (inherit base)
13910 ;; Version 2.x removes python2 support.
13911 (version "1.6.5")
13912 (source
13913 (origin
13914 (method url-fetch)
13915 (uri (pypi-uri "astroid" version))
13916 (sha256
13917 (base32
13918 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13919 (arguments
13920 (substitute-keyword-arguments (package-arguments base)
13921 ((#:phases phases)
13922 `(modify-phases ,phases
13923 (add-after 'unpack 'remove-spurious-test
13924 (lambda _
13925 ;; https://github.com/PyCQA/astroid/issues/276
13926 (delete-file "astroid/tests/unittest_brain.py")
13927 #t))
13928 (replace 'check
13929 (lambda _
13930 (invoke"python" "-m" "unittest" "discover"
13931 "-p" "unittest*.py")))))))
13932 (native-inputs `())
13933 (propagated-inputs
13934 `(("python2-backports-functools-lru-cache"
13935 ,python2-backports-functools-lru-cache)
13936 ("python2-enum34" ,python2-enum34)
13937 ("python2-singledispatch" ,python2-singledispatch)
13938 ,@(alist-delete "python-typed-ast"
13939 (package-propagated-inputs base)))))))
13940
13941 (define-public python-isort
13942 (package
13943 (name "python-isort")
13944 (version "4.3.4")
13945 (source
13946 (origin
13947 (method git-fetch)
13948 (uri (git-reference
13949 ;; Tests pass only from the Github sources
13950 (url "https://github.com/timothycrosley/isort")
13951 (commit version)))
13952 (file-name (git-file-name name version))
13953 (sha256
13954 (base32
13955 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
13956 (build-system python-build-system)
13957 (native-inputs
13958 `(("python-mock" ,python-mock)
13959 ("python-pytest" ,python-pytest)))
13960 (home-page "https://github.com/timothycrosley/isort")
13961 (synopsis "Python utility/library to sort python imports")
13962 (description "@code{python-isort} is a python utility/library to sort
13963 imports alphabetically, and automatically separated into sections. It
13964 provides a command line utility, a python library and plugins for various
13965 editors.")
13966 (license license:expat)
13967 (properties `((python2-variant . ,(delay python2-isort))))))
13968
13969 (define-public python2-isort
13970 (let ((base (package-with-python2
13971 (strip-python2-variant python-isort))))
13972 (package (inherit base)
13973 (native-inputs
13974 `(("python2-futures" ,python2-futures)
13975 ,@(package-native-inputs base))))))
13976
13977 (define-public python2-backports-functools-lru-cache
13978 (package
13979 (name "python2-backports-functools-lru-cache")
13980 (version "1.5")
13981 (source
13982 (origin
13983 (method url-fetch)
13984 ;; only the pypi tarballs contain the necessary metadata
13985 (uri (pypi-uri "backports.functools_lru_cache" version))
13986 (sha256
13987 (base32
13988 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
13989 (build-system python-build-system)
13990 (native-inputs
13991 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
13992 (arguments
13993 `(#:python ,python-2))
13994 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
13995 (synopsis "Backport of functools.lru_cache from Python 3.3")
13996 (description "@code{python2-backports-functools-lru-cache} is a backport
13997 of @code{functools.lru_cache} from python 3.3.")
13998 (license license:expat)))
13999
14000 (define-public python-configparser
14001 (package
14002 (name "python-configparser")
14003 (version "4.0.2")
14004 (source
14005 (origin
14006 (method url-fetch)
14007 (uri (pypi-uri "configparser" version))
14008 (sha256
14009 (base32
14010 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14011 (native-inputs
14012 `(("python-setuptools_scm" ,python-setuptools-scm)))
14013 (build-system python-build-system)
14014 (home-page "https://github.com/jaraco/configparser/")
14015 (synopsis "Backport of configparser from python 3.5")
14016 (description "@code{python-configparser} is a backport of
14017 @code{configparser} from Python 3.5 so that it can be used directly
14018 in other versions.")
14019 (license license:expat)))
14020
14021 (define-public python2-configparser
14022 (package-with-python2 python-configparser))
14023
14024 (define-public python-mando
14025 (package
14026 (name "python-mando")
14027 (version "0.6.4")
14028 (source (origin
14029 (method url-fetch)
14030 (uri (pypi-uri "mando" version))
14031 (sha256
14032 (base32
14033 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14034 (build-system python-build-system)
14035 (propagated-inputs
14036 `(("python-rst2ansi" ,python-rst2ansi)
14037 ("python-six" ,python-six)))
14038 (native-inputs
14039 `(("python-pytest" ,python-pytest)))
14040 (home-page "https://mando.readthedocs.org/")
14041 (synopsis
14042 "Wrapper around argparse, allowing creation of complete CLI applications")
14043 (description
14044 "This package is a wrapper around argparse, allowing you to write complete CLI
14045 applications in seconds while maintaining all the flexibility.")
14046 (license license:expat)))
14047
14048 (define-public python2-mando
14049 (package-with-python2 python-mando))
14050
14051 (define-public python2-argparse
14052 (package
14053 (name "python2-argparse")
14054 (version "1.4.0")
14055 (source
14056 (origin
14057 (method url-fetch)
14058 (uri (pypi-uri "argparse" version))
14059 (sha256
14060 (base32
14061 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14062 (build-system python-build-system)
14063 (arguments
14064 `(#:python ,python-2))
14065 (home-page "https://github.com/ThomasWaldmann/argparse/")
14066 (synopsis "Python command-line parsing library")
14067 (description
14068 "This package is mostly for people who want to have @code{argparse} on
14069 older Pythons because it was not part of the standard library back then.")
14070 (license license:psfl)))
14071
14072 (define-public python-fudge
14073 (package
14074 (name "python-fudge")
14075 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14076 ;; package, which is currently the only use of this package.
14077 (version "0.9.6")
14078 (source
14079 (origin
14080 (method url-fetch)
14081 (uri (pypi-uri "fudge" version))
14082 (sha256
14083 (base32
14084 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14085 (build-system python-build-system)
14086 (arguments
14087 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14088 (home-page "https://github.com/fudge-py/fudge")
14089 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14090 (description
14091 "Fudge is a Python module for using fake objects (mocks and stubs) to
14092 test real ones.
14093
14094 In readable Python code, you declare the methods available on your fake object
14095 and how they should be called. Then you inject that into your application and
14096 start testing. This declarative approach means you don’t have to record and
14097 playback actions and you don’t have to inspect your fakes after running code.
14098 If the fake object was used incorrectly then you’ll see an informative
14099 exception message with a traceback that points to the culprit.")
14100 (license license:expat)))
14101
14102 (define-public python2-fudge
14103 (package-with-python2 python-fudge))
14104
14105 (define-public python-mwclient
14106 (package
14107 (name "python-mwclient")
14108 (version "0.10.0")
14109 (source
14110 (origin
14111 (method git-fetch)
14112 ;; The PyPI version wouldn't contain tests.
14113 (uri (git-reference
14114 (url "https://github.com/mwclient/mwclient")
14115 (commit (string-append "v" version))))
14116 (file-name (git-file-name name version))
14117 (sha256
14118 (base32
14119 "1c3q6lwmb05yqywc4ya98ca7hsl15niili8rccl4n1yqp77c103v"))))
14120 (build-system python-build-system)
14121 (propagated-inputs
14122 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14123 ("python-six" ,python-six)))
14124 (native-inputs
14125 `(("python-mock" ,python-mock)
14126 ("python-pytest" ,python-pytest)
14127 ("python-pytest-cov" ,python-pytest-cov)
14128 ("python-pytest-runner" ,python-pytest-runner)
14129 ("python-responses" ,python-responses)))
14130 (home-page "https://github.com/btongminh/mwclient")
14131 (synopsis "MediaWiki API client")
14132 (description "This package provides a MediaWiki API client.")
14133 (license license:expat)))
14134
14135 (define-public python2-mwclient
14136 (package-with-python2 python-mwclient))
14137
14138 (define-public python-utils
14139 (package
14140 (name "python-utils")
14141 (version "2.1.0")
14142 (source (origin
14143 (method url-fetch)
14144 (uri (pypi-uri "python-utils" version))
14145 (sha256
14146 (base32
14147 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14148 (build-system python-build-system)
14149 (native-inputs
14150 `(("pytest-runner" ,python-pytest-runner)
14151 ("pytest" ,python-pytest)
14152 ("six" ,python-six)))
14153 (home-page "https://github.com/WoLpH/python-utils")
14154 (synopsis "Convenient utilities not included with the standard Python install")
14155 (description
14156 "Python Utils is a collection of small Python functions and classes which
14157 make common patterns shorter and easier.")
14158 (license license:bsd-2)))
14159
14160 (define-public python2-utils
14161 (package-with-python2 python-utils))
14162
14163 (define-public python-diff-match-patch
14164 (package
14165 (name "python-diff-match-patch")
14166 (version "20121119")
14167 (source
14168 (origin
14169 (method url-fetch)
14170 (uri (pypi-uri "diff-match-patch" version))
14171 (sha256
14172 (base32
14173 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14174 (build-system python-build-system)
14175 (home-page "https://code.google.com/p/google-diff-match-patch")
14176 (synopsis "Synchronize plain text")
14177 (description "Diff Match and Patch libraries offer robust algorithms to
14178 perform the operations required for synchronizing plain text.")
14179 (license license:asl2.0)))
14180
14181 (define-public python2-diff-match-patch
14182 (package-with-python2 python-diff-match-patch))
14183
14184 (define-public python-dirsync
14185 (package
14186 (name "python-dirsync")
14187 (version "2.2.3")
14188 (source
14189 (origin
14190 (method url-fetch)
14191 (uri (pypi-uri "dirsync" version))
14192 (sha256
14193 (base32
14194 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14195 (build-system python-build-system)
14196 (propagated-inputs
14197 `(("six" ,python-six)))
14198 (home-page "https://bitbucket.org/tkhyn/dirsync")
14199 (synopsis "Advanced directory tree synchronisation tool")
14200 (description "Advanced directory tree synchronisation tool.")
14201 (license license:expat)))
14202
14203 (define-public python2-dirsync
14204 (package-with-python2 python-dirsync))
14205
14206 (define-public python-levenshtein
14207 (package
14208 (name "python-levenshtein")
14209 (version "0.12.0")
14210 (source
14211 (origin
14212 (method url-fetch)
14213 (uri (pypi-uri "python-Levenshtein" version))
14214 (sha256
14215 (base32
14216 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14217 (build-system python-build-system)
14218 (home-page "https://github.com/ztane/python-Levenshtein")
14219 (synopsis "Fast computation of Levenshtein distance and string similarity")
14220 (description
14221 "The Levenshtein Python C extension module contains functions for fast computation of
14222 @enumerate
14223 @item Levenshtein (edit) distance, and edit operations
14224 @item string similarity
14225 @item approximate median strings, and generally string averaging
14226 @item string sequence and set similarity
14227 @end enumerate
14228 It supports both normal and Unicode strings.")
14229 (license license:gpl2+)))
14230
14231 (define-public python2-levenshtein
14232 (package-with-python2 python-levenshtein))
14233
14234 (define-public python-scandir
14235 (package
14236 (name "python-scandir")
14237 (version "1.10.0")
14238 (source
14239 (origin
14240 (method url-fetch)
14241 (uri (pypi-uri "scandir" version))
14242 (sha256
14243 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14244 (build-system python-build-system)
14245 (arguments
14246 `(#:phases (modify-phases %standard-phases
14247 (replace 'check
14248 (lambda _
14249 (invoke "python" "test/run_tests.py"))))))
14250 (home-page "https://github.com/benhoyt/scandir")
14251 (synopsis "Directory iteration function")
14252 (description
14253 "Directory iteration function like os.listdir(), except that instead of
14254 returning a list of bare filenames, it yields DirEntry objects that include
14255 file type and stat information along with the name. Using scandir() increases
14256 the speed of os.walk() by 2-20 times (depending on the platform and file
14257 system) by avoiding unnecessary calls to os.stat() in most cases.
14258
14259 This package is part of the Python standard library since version 3.5.")
14260 (license license:bsd-3)))
14261
14262 (define-public python2-scandir
14263 (package-with-python2 python-scandir))
14264
14265 (define-public python2-stemming
14266 (package
14267 (name "python2-stemming")
14268 (version "1.0.1")
14269 (source
14270 (origin
14271 (method url-fetch)
14272 (uri (pypi-uri "stemming" version))
14273 (sha256
14274 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14275 (build-system python-build-system)
14276 (arguments
14277 `(#:python ,python-2))
14278 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14279 (synopsis "Python implementations of various stemming algorithms")
14280 (description
14281 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14282 stemming algorithms for English. These implementations are straightforward and
14283 efficient, unlike some Python versions of the same algorithms available on the
14284 Web. This package is an extraction of the stemming code included in the Whoosh
14285 search engine.")
14286 (license license:public-domain)))
14287
14288 (define-public python-factory-boy
14289 (package
14290 (name "python-factory-boy")
14291 (version "2.8.1")
14292 (source
14293 (origin
14294 (method url-fetch)
14295 (uri (pypi-uri "factory_boy" version))
14296 (sha256
14297 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14298 (build-system python-build-system)
14299 (arguments
14300 ;; Tests are not included in the tarball.
14301 `(#:tests? #f))
14302 (propagated-inputs
14303 `(("faker" ,python-faker)))
14304 (home-page "https://github.com/benhoyt/scandir")
14305 (synopsis "Versatile test fixtures replacement")
14306 (description
14307 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14308
14309 As a fixtures replacement tool, it aims to replace static, hard to maintain
14310 fixtures with easy-to-use factories for complex object.
14311
14312 Instead of building an exhaustive test setup with every possible combination
14313 of corner cases, factory_boy allows you to use objects customized for the
14314 current test, while only declaring the test-specific fields")
14315 (license license:expat)))
14316
14317 (define-public python2-factory-boy
14318 (package-with-python2 python-factory-boy))
14319
14320 (define-public python-translate-toolkit
14321 (package
14322 (name "python-translate-toolkit")
14323 (version "2.1.0")
14324 (source
14325 (origin
14326 (method url-fetch)
14327 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14328 (sha256
14329 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14330 (build-system python-build-system)
14331 (native-inputs
14332 `(("python-pytest" ,python-pytest)
14333 ("python-sphinx" ,python-sphinx)))
14334 (propagated-inputs
14335 `(("python-babel" ,python-babel)
14336 ("python-beautifulsoup4" ,python-beautifulsoup4)
14337 ("python-chardet" ,python-chardet)
14338 ("python-diff-match-patch" ,python-diff-match-patch)
14339 ("python-levenshtein" ,python-levenshtein)
14340 ("python-lxml" ,python-lxml)
14341 ("python-six" ,python-six)
14342 ("python-vobject" ,python-vobject)
14343 ("python-pyyaml" ,python-pyyaml)))
14344 (arguments
14345 ;; TODO: tests are not run, because they end with
14346 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14347 ;; 'parse_funcs'
14348 ;; during test setup.
14349 `(#:tests? #f))
14350 (home-page "https://toolkit.translatehouse.org")
14351 (synopsis "Tools and API for translation and localization engineering")
14352 (description
14353 "Tools and API for translation and localization engineering. It contains
14354 several utilities, as well as an API for building localization tools.")
14355 (license license:gpl2+)))
14356
14357 (define-public python2-translate-toolkit
14358 (package-with-python2 python-translate-toolkit))
14359
14360 (define-public python-packaging
14361 (package
14362 (name "python-packaging")
14363 (version "20.0")
14364 (source
14365 (origin
14366 (method url-fetch)
14367 (uri (pypi-uri "packaging" version))
14368 ;; XXX: The URL in the patch file is wrong, it should be
14369 ;; <https://github.com/pypa/packaging/pull/256>.
14370 (patches (search-patches "python-packaging-test-arch.patch"))
14371 (sha256
14372 (base32
14373 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14374 (build-system python-build-system)
14375 (arguments
14376 `(#:phases (modify-phases %standard-phases
14377 (replace 'check
14378 (lambda* (#:key tests? #:allow-other-keys)
14379 (if tests?
14380 (invoke "py.test" "-vv")
14381 (format #t "test suite not run~%"))
14382 #t)))))
14383 (native-inputs
14384 `(("python-pretend" ,python-pretend)
14385 ("python-pytest" ,python-pytest)))
14386 (propagated-inputs
14387 `(("python-pyparsing" ,python-pyparsing)
14388 ("python-six" ,python-six)))
14389 (home-page "https://github.com/pypa/packaging")
14390 (synopsis "Core utilities for Python packages")
14391 (description "Packaging is a Python module for dealing with Python packages.
14392 It offers an interface for working with package versions, names, and dependency
14393 information.")
14394 ;; From 'LICENSE': This software is made available under the terms of
14395 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14396 ;; Contributions to this software is made under the terms of *both* these
14397 ;; licenses.
14398 (license (list license:asl2.0 license:bsd-2))))
14399
14400 (define-public python2-packaging
14401 (package-with-python2 python-packaging))
14402
14403 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14404 (define-public python-packaging-bootstrap
14405 (hidden-package
14406 (package/inherit
14407 python-packaging
14408 (name "python-packaging-bootstrap")
14409 (native-inputs '())
14410 (propagated-inputs
14411 `(("python-pyparsing" ,python-pyparsing)))
14412 (arguments '(#:tests? #f)))))
14413
14414 (define-public python2-packaging-bootstrap
14415 (hidden-package
14416 (package/inherit
14417 python2-packaging
14418 (name "python2-packaging-bootstrap")
14419 (native-inputs '())
14420 (propagated-inputs
14421 `(("python-pyparsing" ,python2-pyparsing)))
14422 (arguments
14423 `(#:tests? #f
14424 ,@(package-arguments python2-packaging))))))
14425
14426 (define-public python-relatorio
14427 (package
14428 (name "python-relatorio")
14429 (version "0.8.0")
14430 (source
14431 (origin
14432 (method url-fetch)
14433 (uri (pypi-uri "relatorio" version))
14434 (sha256
14435 (base32
14436 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14437 (build-system python-build-system)
14438 (propagated-inputs
14439 `(("python-lxml" ,python-lxml)
14440 ("python-genshi" ,python-genshi)))
14441 (native-inputs
14442 `(("python-magic" ,python-magic)))
14443 (home-page "https://relatorio.tryton.org/")
14444 (synopsis "Templating library able to output ODT and PDF files")
14445 (description "Relatorio is a templating library which provides a way to
14446 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14447 for more filetypes can be easily added by creating plugins for them.")
14448 (license license:gpl3+)))
14449
14450 (define-public python2-relatorio
14451 (package-with-python2 python-relatorio))
14452
14453 (define-public python-radon
14454 (package
14455 (name "python-radon")
14456 (version "4.1.0")
14457 (source
14458 (origin
14459 (method url-fetch)
14460 (uri (pypi-uri "radon" version))
14461 (sha256
14462 (base32
14463 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14464 (build-system python-build-system)
14465 (arguments
14466 `(#:phases (modify-phases %standard-phases
14467 (replace 'check
14468 (lambda _
14469 (invoke "python" "radon/tests/run.py"))))))
14470 (propagated-inputs
14471 `(("python-colorama" ,python-colorama)
14472 ("python-flake8-polyfill" ,python-flake8-polyfill)
14473 ("python-mando" ,python-mando)))
14474 (native-inputs
14475 `(("python-pytest" ,python-pytest)
14476 ("python-pytest-mock" ,python-pytest-mock)))
14477 (home-page "https://radon.readthedocs.org/")
14478 (synopsis "Code Metrics in Python")
14479 (description "Radon is a Python tool which computes various code metrics.
14480 Supported metrics are:
14481 @itemize @bullet
14482 @item raw metrics: SLOC, comment lines, blank lines, &c.
14483 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14484 @item Halstead metrics (all of them)
14485 @item the Maintainability Index (a Visual Studio metric)
14486 @end itemize")
14487 (properties `((python2-variant . ,(delay python2-radon))))
14488 (license license:expat)))
14489
14490 (define-public python2-radon
14491 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14492 (package
14493 (inherit base)
14494 (propagated-inputs
14495 `(("python-configparser" ,python2-configparser)
14496 ("python-future" ,python2-future)
14497 ,@(package-propagated-inputs base))))))
14498
14499 (define-public python-sure
14500 (package
14501 (name "python-sure")
14502 (version "1.4.11")
14503 (source
14504 (origin
14505 (method url-fetch)
14506 (uri (pypi-uri "sure" version))
14507 (sha256
14508 (base32
14509 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14510 (build-system python-build-system)
14511 (propagated-inputs
14512 `(("python-mock" ,python-mock)
14513 ("python-six" ,python-six)))
14514 (native-inputs
14515 `(("python-nose" ,python-nose)))
14516 (home-page "https://github.com/gabrielfalcao/sure")
14517 (synopsis "Automated testing library in python for python")
14518 (description
14519 "Sure is a python library that leverages a DSL for writing assertions.
14520 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14521 (license license:gpl3+)))
14522
14523 (define-public python2-sure
14524 (package-with-python2 python-sure))
14525
14526 (define-public python2-couleur
14527 ;; This package does not seem to support python3 at all, hence,
14528 ;; only the python2 variant definition is provided.
14529 (package
14530 (name "python2-couleur")
14531 (version "0.6.2")
14532 (source
14533 (origin
14534 (method url-fetch)
14535 (uri (pypi-uri "couleur" version))
14536 (sha256
14537 (base32
14538 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14539 (build-system python-build-system)
14540 (arguments
14541 `(#:python ,python-2))
14542 (home-page "https://github.com/gabrielfalcao/couleur")
14543 (synopsis
14544 "ANSI terminal tool for python, colored shell and other handy fancy features")
14545 (description
14546 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14547 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14548 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14549 ;; https://github.com/gabrielfalcao/couleur/issues/11
14550 (license license:lgpl3+)))
14551
14552 (define-public python-misaka
14553 (package
14554 (name "python-misaka")
14555 (version "2.1.1")
14556 (source
14557 (origin
14558 (method url-fetch)
14559 (uri (pypi-uri "misaka" version))
14560 (sha256
14561 (base32
14562 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14563 (build-system python-build-system)
14564 (arguments
14565 `(;; Line 37 of setup.py calls self.run_command('develop')
14566 ;; in the 'check' phase. This command seems to be trying
14567 ;; to write to
14568 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14569 ;; for which it does not have the permission to write.
14570 #:tests? #f))
14571 (propagated-inputs
14572 `(("python-cffi" ,python-cffi)))
14573 (home-page "https://github.com/FSX/misaka")
14574 (synopsis "Python binding for Hoedown")
14575 (description
14576 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14577 library written in C. It features a fast HTML renderer and functionality to make custom
14578 renderers (e.g. man pages or LaTeX).")
14579 (license license:expat)))
14580
14581 (define-public python2-misaka
14582 (package-with-python2 python-misaka))
14583
14584 (define-public python2-steadymark
14585 ;; This is forced into being a python2 only variant
14586 ;; due to its dependence on couleur that has no support
14587 ;; for python3
14588 (package
14589 (name "python2-steadymark")
14590 (version "0.7.3")
14591 (source
14592 (origin
14593 (method url-fetch)
14594 (uri (pypi-uri "steadymark" version))
14595 (sha256
14596 (base32
14597 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14598 (build-system python-build-system)
14599 (native-inputs
14600 `(("python-couleur" ,python2-couleur)
14601 ("python-sure" ,python2-sure)
14602 ("python-misaka" ,python2-misaka)))
14603 (arguments
14604 `(#:python ,python-2
14605 #:phases
14606 (modify-phases %standard-phases
14607 (add-before 'build 'patch-setup-py
14608 (lambda _
14609 ;; Update requirements from dependency==version
14610 ;; to dependency>=version
14611 (substitute* "setup.py"
14612 (("==") ">="))
14613 #t)))))
14614 (home-page "https://github.com/gabrielfalcao/steadymark")
14615 (synopsis "Markdown-based test runner for python")
14616 (description
14617 "@code{Steadymark} allows documentation to be written in github-flavoured
14618 markdown. The documentation may contain snippets of code surrounded by python
14619 code blocks and @code{Steadymark} will find these snippets and run them, making
14620 sure that there are no old malfunctional examples in the documentation examples.")
14621 (license license:expat)))
14622
14623 (define-public python-jsonpointer
14624 (package
14625 (name "python-jsonpointer")
14626 (version "1.10")
14627 (source
14628 (origin
14629 (method url-fetch)
14630 (uri (pypi-uri "jsonpointer" version))
14631 (sha256
14632 (base32
14633 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14634 (build-system python-build-system)
14635 (home-page "https://github.com/stefankoegl/python-json-pointer")
14636 (synopsis "Identify specific nodes in a JSON document")
14637 (description "@code{jsonpointer} allows you to access specific nodes
14638 by path in a JSON document (see RFC 6901).")
14639 (license license:bsd-3)))
14640
14641 (define-public python2-jsonpointer
14642 (package-with-python2 python-jsonpointer))
14643
14644 (define-public python-jsonpatch
14645 (package
14646 (name "python-jsonpatch")
14647 (version "1.16")
14648 (source
14649 (origin
14650 (method git-fetch)
14651 ;; pypi version lacks tests.js
14652 (uri (git-reference
14653 (url "https://github.com/stefankoegl/python-json-patch")
14654 (commit (string-append "v" version))))
14655 (file-name (git-file-name name version))
14656 (sha256
14657 (base32
14658 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14659 (build-system python-build-system)
14660 (native-inputs
14661 `(("python-jsonpointer" ,python-jsonpointer)))
14662 (home-page "https://github.com/stefankoegl/python-json-patch")
14663 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14664 (description "@code{jsonpatch} is a library and program that allows
14665 applying JSON Patches according to RFC 6902.")
14666 (license license:bsd-3)))
14667
14668 (define-public python2-jsonpatch
14669 (package-with-python2 python-jsonpatch))
14670
14671 (define-public python-jsonpatch-0.4
14672 (package (inherit python-jsonpatch)
14673 (name "python-jsonpatch")
14674 (version "0.4")
14675 (source
14676 (origin
14677 (method git-fetch)
14678 (uri (git-reference
14679 (url "https://github.com/stefankoegl/python-json-patch")
14680 (commit (string-append "v" version))))
14681 (file-name (git-file-name name version))
14682 (sha256
14683 (base32
14684 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14685
14686 (define-public python2-jsonpatch-0.4
14687 (package-with-python2 python-jsonpatch-0.4))
14688
14689 (define-public python-rfc3986
14690 (package
14691 (name "python-rfc3986")
14692 (version "1.1.0")
14693 (source (origin
14694 (method url-fetch)
14695 (uri (pypi-uri "rfc3986" version))
14696 (sha256
14697 (base32
14698 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14699 (build-system python-build-system)
14700 (arguments
14701 `(#:modules ((guix build utils)
14702 (guix build python-build-system)
14703 (ice-9 ftw)
14704 (srfi srfi-1)
14705 (srfi srfi-26))
14706 #:phases
14707 (modify-phases %standard-phases
14708 (replace 'check
14709 (lambda _
14710 (let ((cwd (getcwd)))
14711 (setenv "PYTHONPATH"
14712 (string-append cwd "/build/"
14713 (find (cut string-prefix? "lib" <>)
14714 (scandir (string-append cwd "/build")))
14715 ":"
14716 (getenv "PYTHONPATH")))
14717 (invoke "pytest" "-v")))))))
14718 (native-inputs
14719 `(("python-pytest" ,python-pytest)))
14720 (home-page "https://rfc3986.readthedocs.io/")
14721 (synopsis "Parse and validate URI references")
14722 (description
14723 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14724 validation and authority parsing. This module also supports RFC@tie{}6874
14725 which adds support for zone identifiers to IPv6 addresses.")
14726 (license license:asl2.0)))
14727
14728 (define-public python2-rfc3986
14729 (package-with-python2 python-rfc3986))
14730
14731 (define-public python-rfc3987
14732 (package
14733 (name "python-rfc3987")
14734 (version "1.3.7")
14735 (source
14736 (origin
14737 (method url-fetch)
14738 (uri (pypi-uri "rfc3987" version))
14739 (sha256
14740 (base32
14741 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14742 (build-system python-build-system)
14743 (home-page "https://pypi.org/project/rfc3987/")
14744 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14745 (description "@code{rfc3987} provides routines for parsing and
14746 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14747 (license license:gpl3+)))
14748
14749 (define-public python2-rfc3987
14750 (package-with-python2 python-rfc3987))
14751
14752 (define-public python-validators
14753 (package
14754 (name "python-validators")
14755 (version "0.14.2")
14756 (source (origin
14757 (method url-fetch)
14758 (uri (pypi-uri "validators" version))
14759 (sha256
14760 (base32
14761 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14762 (build-system python-build-system)
14763 (arguments
14764 '(#:phases (modify-phases %standard-phases
14765 (replace 'check
14766 (lambda _
14767 (invoke "pytest" "-vv"))))))
14768 (propagated-inputs
14769 `(("python-decorator" ,python-decorator)
14770 ("python-six" ,python-six)))
14771 (native-inputs
14772 `(("python-flake8" ,python-flake8)
14773 ("python-isort" ,python-isort)
14774 ("python-pytest" ,python-pytest)))
14775 (home-page "https://github.com/kvesteri/validators")
14776 (synopsis "Data validation library")
14777 (description
14778 "This package contains validators for different things such as email
14779 addresses, IP addresses, URLs, hashes and more. It has been designed to
14780 be easy to use and not require defining a schema or form just to validate
14781 some input.")
14782 (license license:expat)))
14783
14784 (define-public python2-validators
14785 (package-with-python2 python-validators))
14786
14787 (define-public python-validate-email
14788 (package
14789 (name "python-validate-email")
14790 (version "1.3")
14791 (source
14792 (origin
14793 (method url-fetch)
14794 (uri (pypi-uri "validate_email" version))
14795 (sha256
14796 (base32
14797 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14798 (build-system python-build-system)
14799 (home-page "https://github.com/syrusakbary/validate_email")
14800 (synopsis "Verifies if an email address is valid and really exists")
14801 (description "@code{validate_email} can be used to verify if an email
14802 address is valid and really exists.")
14803 (license license:lgpl3+)))
14804
14805 (define-public python2-validate-email
14806 (package-with-python2 python-validate-email))
14807
14808 (define-public python-flex
14809 (package
14810 (name "python-flex")
14811 (version "6.10.0")
14812 (source
14813 (origin
14814 (method url-fetch)
14815 (uri (pypi-uri "flex" version))
14816 (sha256
14817 (base32
14818 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14819 (build-system python-build-system)
14820 (propagated-inputs
14821 `(("python-click" ,python-click)
14822 ("python-iso8601" ,python-iso8601)
14823 ("python-jsonpointer" ,python-jsonpointer)
14824 ("python-pyyaml" ,python-pyyaml)
14825 ("python-requests" ,python-requests)
14826 ("python-rfc3987" ,python-rfc3987)
14827 ("python-six" ,python-six)
14828 ("python-validate-email" ,python-validate-email)))
14829 (home-page "https://github.com/pipermerriam/flex")
14830 (synopsis "Validates Swagger schemata")
14831 (description "@code{flex} can be used to validate Swagger schemata.")
14832 (license license:bsd-3)))
14833
14834 (define-public python2-flex
14835 (package-with-python2 python-flex))
14836
14837 (define-public python-marshmallow
14838 (package
14839 (name "python-marshmallow")
14840 (version "3.0.0b14")
14841 (source
14842 (origin
14843 (method url-fetch)
14844 (uri (pypi-uri "marshmallow" version))
14845 (sha256
14846 (base32
14847 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14848 (build-system python-build-system)
14849 (propagated-inputs
14850 `(("python-dateutil" ,python-dateutil)
14851 ("python-simplejson" ,python-simplejson)))
14852 (native-inputs
14853 `(("python-pytest" ,python-pytest)
14854 ("python-pytz" ,python-pytz)))
14855 (home-page "https://github.com/marshmallow-code/marshmallow")
14856 (synopsis "Convert complex datatypes to and from native
14857 Python datatypes.")
14858 (description "@code{marshmallow} provides a library for converting
14859 complex datatypes to and from native Python datatypes.")
14860 (license license:expat)))
14861
14862 (define-public python2-marshmallow
14863 (package-with-python2 python-marshmallow))
14864
14865 (define-public python-apispec
14866 (package
14867 (name "python-apispec")
14868 (version "0.25.3")
14869 (source
14870 (origin
14871 (method url-fetch)
14872 (uri (pypi-uri "apispec" version))
14873 (sha256
14874 (base32
14875 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14876 (build-system python-build-system)
14877 (propagated-inputs
14878 `(("python-pyyaml" ,python-pyyaml)))
14879 (native-inputs
14880 `(("python-pytest" ,python-pytest)
14881 ("python-flask" ,python-flask)
14882 ("python-marshmallow" ,python-marshmallow)
14883 ("python-tornado" ,python-tornado)
14884 ("python-bottle" ,python-bottle)
14885 ("python-mock" ,python-mock)))
14886 (home-page "https://github.com/marshmallow-code/apispec")
14887 (synopsis "Swagger 2.0 API specification generator")
14888 (description "@code{python-apispec} is a pluggable API specification
14889 generator. Currently supports the OpenAPI specification (f.k.a.
14890 Swagger 2.0).")
14891 (license license:expat)))
14892
14893 (define-public python2-apispec
14894 (package-with-python2 python-apispec))
14895
14896 (define-public python-flasgger
14897 (package
14898 (name "python-flasgger")
14899 (version "0.6.3")
14900 (source
14901 (origin
14902 (method git-fetch)
14903 (uri (git-reference
14904 (url "https://github.com/rochacbruno/flasgger.git")
14905 (commit version)))
14906 (file-name (git-file-name name version))
14907 (sha256
14908 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14909 (build-system python-build-system)
14910 (arguments
14911 `(#:phases
14912 (modify-phases %standard-phases
14913 (replace 'check
14914 (lambda* (#:key inputs outputs #:allow-other-keys)
14915 (substitute* "Makefile"
14916 (("flake8 flasgger --ignore=F403")
14917 "flake8 flasgger --ignore=E731,F403"))
14918 (setenv "PYTHONPATH" (string-append (getcwd)
14919 ":"
14920 (getenv "PYTHONPATH")))
14921 (invoke "py.test"))))))
14922 (propagated-inputs
14923 `(("python-flask" ,python-flask)
14924 ("python-pyyaml" ,python-pyyaml)
14925 ("python-jsonschema" ,python-jsonschema)
14926 ("python-mistune" ,python-mistune)
14927 ("python-six" ,python-six)))
14928 (native-inputs
14929 `(("python-decorator" ,python-decorator)
14930 ("python-flake8" ,python-flake8)
14931 ("python-flask-restful" ,python-flask-restful)
14932 ("python-flex" ,python-flex)
14933 ("python-pytest" ,python-pytest)
14934 ("python-pytest-cov" ,python-pytest-cov)
14935 ("python-marshmallow" ,python-marshmallow)
14936 ("python-apispec" ,python-apispec)))
14937 (home-page "https://github.com/rochacbruno/flasgger/")
14938 (synopsis "Extract Swagger specs from your Flask project")
14939 (description "@code{python-flasgger} allows extracting Swagger specs
14940 from your Flask project. It is a fork of Flask-Swagger.")
14941 (license license:expat)))
14942
14943 (define-public python2-flasgger
14944 (package-with-python2 python-flasgger))
14945
14946 (define-public python-swagger-spec-validator
14947 (package
14948 (name "python-swagger-spec-validator")
14949 (version "2.4.3")
14950 (source
14951 (origin
14952 (method url-fetch)
14953 (uri (pypi-uri "swagger-spec-validator" version))
14954 (sha256
14955 (base32
14956 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
14957 (build-system python-build-system)
14958 (propagated-inputs
14959 `(("python-jsonschema" ,python-jsonschema)
14960 ("python-pyyaml" ,python-pyyaml)
14961 ("python-six" ,python-six)))
14962 (home-page
14963 "https://github.com/Yelp/swagger_spec_validator")
14964 (synopsis "Validation of Swagger specifications")
14965 (description "@code{swagger_spec_validator} provides a library for
14966 validating Swagger API specifications.")
14967 (license license:asl2.0)))
14968
14969 (define-public python2-swagger-spec-validator
14970 (package-with-python2 python-swagger-spec-validator))
14971
14972 (define-public python-apache-libcloud
14973 (package
14974 (name "python-apache-libcloud")
14975 (version "2.4.0")
14976 (source
14977 (origin
14978 (method url-fetch)
14979 (uri (pypi-uri "apache-libcloud" version))
14980 (sha256
14981 (base32
14982 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
14983 (build-system python-build-system)
14984 (arguments
14985 `(#:phases
14986 (modify-phases %standard-phases
14987 (add-after 'unpack 'patch-ssh
14988 (lambda* (#:key inputs #:allow-other-keys)
14989 (substitute* "libcloud/compute/ssh.py"
14990 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
14991 "/bin/ssh" "'")))
14992 #t))
14993 (add-after 'unpack 'patch-tests
14994 (lambda _
14995 (substitute* "./libcloud/test/test_file_fixtures.py"
14996 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
14997 (("def _ascii") "def _raw_data(self, method, url, body, headers):
14998 return (httplib.OK,
14999 \"1234abcd\",
15000 {\"test\": \"value\"},
15001 httplib.responses[httplib.OK])
15002 def _ascii"))
15003 (substitute* "libcloud/test/compute/test_ssh_client.py"
15004 (("class ShellOutSSHClientTests")
15005 "@unittest.skip(\"Guix container doesn't have ssh service\")
15006 class ShellOutSSHClientTests")
15007 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15008 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15009 (("'.xF0', '.x90', '.x8D', '.x88'")
15010 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15011 #t))
15012 (add-before 'check 'copy-secret
15013 (lambda _
15014 (copy-file "libcloud/test/secrets.py-dist"
15015 "libcloud/test/secrets.py")
15016 #t)))))
15017 (inputs
15018 `(("openssh" ,openssh)))
15019 (propagated-inputs
15020 `(("python-paramiko" ,python-paramiko)
15021 ("python-requests" ,python-requests)))
15022 (native-inputs
15023 `(("python-lockfile" ,python-lockfile)
15024 ("python-mock" ,python-mock)
15025 ("python-pytest" ,python-pytest)
15026 ("python-pytest-runner" ,python-pytest-runner)
15027 ("python-requests-mock" ,python-requests-mock)))
15028 (home-page "https://libcloud.apache.org/")
15029 (synopsis "Unified Cloud API")
15030 (description "@code{libcloud} is a Python library for interacting with
15031 many of the popular cloud service providers using a unified API.")
15032 (license license:asl2.0)))
15033
15034 (define-public python2-apache-libcloud
15035 (package-with-python2 python-apache-libcloud))
15036
15037 (define-public python-smmap
15038 (package
15039 (name "python-smmap")
15040 (version "3.0.1")
15041 (source
15042 (origin
15043 (method url-fetch)
15044 (uri (pypi-uri "smmap" version))
15045 (sha256
15046 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15047 (build-system python-build-system)
15048 (native-inputs
15049 `(("python-nosexcover" ,python-nosexcover)))
15050 (home-page "https://github.com/Byron/smmap")
15051 (synopsis "Python sliding window memory map manager")
15052 (description "@code{smmap} is a pure Python implementation of a sliding
15053 window memory map manager.")
15054 (license license:bsd-3)))
15055
15056 (define-public python-smmap2
15057 (deprecated-package "python-smmap2" python-smmap))
15058
15059 (define-public python2-smmap
15060 (package-with-python2 python-smmap))
15061
15062 (define-public python2-smmap2
15063 (deprecated-package "python2-smmap2" python2-smmap))
15064
15065 (define-public python-regex
15066 (package
15067 (name "python-regex")
15068 (version "2019.04.14")
15069 (source (origin
15070 (method url-fetch)
15071 (uri (pypi-uri "regex" version))
15072 (sha256
15073 (base32
15074 "1a6hhfs6l6snr1z654ay6wzbmwdkmv282fzfkd5hk2d1n73y8v6m"))))
15075 ;; TODO: Fix and enable regex_test.py tests that complain about the
15076 ;; test.support module not existing.
15077 (build-system python-build-system)
15078 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15079 (synopsis "Alternative regular expression module")
15080 (description "This regular expression implementation is backwards-
15081 compatible with the standard @code{re} module, but offers additional
15082 functionality like full case-folding for case-insensitive matches in Unicode.")
15083 (license license:psfl)))
15084
15085 (define-public python2-regex
15086 (package-with-python2 python-regex))
15087
15088 (define-public python2-pyopengl
15089 (package
15090 (name "python2-pyopengl")
15091 (version "3.1.0")
15092 (source
15093 (origin
15094 (method url-fetch)
15095 (uri (pypi-uri "PyOpenGL" version))
15096 (sha256
15097 (base32
15098 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
15099 (arguments
15100 `(#:python ,python-2))
15101 (build-system python-build-system)
15102 (home-page "http://pyopengl.sourceforge.net")
15103 (synopsis "Standard OpenGL bindings for Python")
15104 (description
15105 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15106 related APIs. The binding is created using the standard @code{ctypes}
15107 library.")
15108 (license license:bsd-3)))
15109
15110 (define-public python2-pyopengl-accelerate
15111 (package
15112 (inherit python2-pyopengl)
15113 (name "python2-pyopengl-accelerate")
15114 (version "3.1.0")
15115 (source
15116 (origin
15117 (method url-fetch)
15118 (uri (pypi-uri "PyOpenGL-accelerate" version))
15119 (sha256
15120 (base32
15121 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
15122 (synopsis "Acceleration code for PyOpenGL")
15123 (description
15124 "This is the Cython-coded accelerator module for PyOpenGL.")))
15125
15126 (define-public python-rencode
15127 (package
15128 (name "python-rencode")
15129 (version "1.0.5")
15130 (source
15131 (origin
15132 (method url-fetch)
15133 (uri (pypi-uri "rencode" version))
15134 (sha256
15135 (base32
15136 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15137 (build-system python-build-system)
15138 (arguments
15139 `(#:phases
15140 (modify-phases %standard-phases
15141 (add-before 'check 'delete-bogus-test
15142 ;; This test requires /home/aresch/Downloads, which is not provided by
15143 ;; the build environment.
15144 (lambda _
15145 (delete-file "rencode/t.py")
15146 #t)))))
15147 (native-inputs `(("pkg-config" ,pkg-config)
15148 ("python-cython" ,python-cython)))
15149 (home-page "https://github.com/aresch/rencode")
15150 (synopsis "Serialization of heterogeneous data structures")
15151 (description
15152 "The @code{rencode} module is a data structure serialization library,
15153 similar to @code{bencode} from the BitTorrent project. For complex,
15154 heterogeneous data structures with many small elements, r-encoding stake up
15155 significantly less space than b-encodings. This version of rencode is a
15156 complete rewrite in Cython to attempt to increase the performance over the
15157 pure Python module.")
15158 (license license:bsd-3)))
15159
15160 (define-public python2-rencode
15161 (package-with-python2 python-rencode))
15162
15163 (define-public python-xenon
15164 (package
15165 (name "python-xenon")
15166 (version "0.7.0")
15167 (source
15168 (origin
15169 (method url-fetch)
15170 (uri (pypi-uri "xenon" version))
15171 (sha256
15172 (base32
15173 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15174 (build-system python-build-system)
15175 (native-inputs
15176 `(("python-pyyaml" ,python-pyyaml)
15177 ("python-radon" ,python-radon)
15178 ("python-requests" ,python-requests)
15179 ("python-flake8" ,python-flake8)
15180 ("python-tox" ,python-tox)))
15181 (arguments
15182 `(#:tests? #f ;test suite not shipped with the PyPI archive
15183 #:phases
15184 (modify-phases %standard-phases
15185 (add-before 'build 'patch-test-requirements
15186 (lambda _
15187 ;; Remove httpretty dependency for tests.
15188 (substitute* "setup.py"
15189 (("httpretty") ""))
15190 #t)))))
15191 (home-page "https://xenon.readthedocs.org/")
15192 (synopsis "Monitor code metrics for Python on your CI server")
15193 (description
15194 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15195 Ideally, @code{xenon} is run every time code is committed. Through command
15196 line options, various thresholds can be set for the complexity of code. It
15197 will fail (i.e. it will exit with a non-zero exit code) when any of these
15198 requirements is not met.")
15199 (license license:expat)))
15200
15201 (define-public python2-xenon
15202 (package-with-python2 python-xenon))
15203
15204 (define-public python-pysocks
15205 (package
15206 (name "python-pysocks")
15207 (version "1.7.0")
15208 (source
15209 (origin
15210 (method url-fetch)
15211 (uri (pypi-uri "PySocks" version))
15212 (sha256
15213 (base32
15214 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15215 (build-system python-build-system)
15216 (arguments `(#:tests? #f))
15217 (home-page "https://github.com/Anorov/PySocks")
15218 (synopsis "SOCKS client module")
15219 (description "@code{pysocks} is an updated and semi-actively maintained
15220 version of @code{SocksiPy} with bug fixes and extra features.")
15221 (license license:bsd-3)))
15222
15223 (define-public python2-pysocks
15224 (package-with-python2 python-pysocks))
15225
15226 (define-public python-pydiff
15227 (package
15228 (name "python-pydiff")
15229 (version "0.2")
15230 (source
15231 (origin
15232 (method url-fetch)
15233 (uri (pypi-uri "pydiff" version))
15234 (sha256
15235 (base32
15236 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15237 (build-system python-build-system)
15238 (home-page "https://github.com/myint/pydiff")
15239 (synopsis "Library to diff two Python files at the bytecode level")
15240 (description
15241 "@code{pydiff} makes it easy to look for actual code changes while
15242 ignoring formatting changes.")
15243 (license license:expat)))
15244
15245 (define-public python2-pydiff
15246 (package-with-python2 python-pydiff))
15247
15248 (define-public python-tqdm
15249 (package
15250 (name "python-tqdm")
15251 (version "4.43.0")
15252 (source
15253 (origin
15254 (method url-fetch)
15255 (uri (pypi-uri "tqdm" version))
15256 (sha256
15257 (base32
15258 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15259 (build-system python-build-system)
15260 (arguments
15261 '(#:phases (modify-phases %standard-phases
15262 (replace 'check
15263 (lambda* (#:key inputs outputs #:allow-other-keys)
15264 (add-installed-pythonpath inputs outputs)
15265 ;; This invokation is taken from tox.ini.
15266 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15267 "-d" "-v" "tqdm/"))))))
15268 (native-inputs
15269 `(("python-nose" ,python-nose)))
15270 (home-page "https://github.com/tqdm/tqdm")
15271 (synopsis "Fast, extensible progress meter")
15272 (description
15273 "Make loops show a progress bar on the console by just wrapping any
15274 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15275 design and layout.")
15276 (license (list license:mpl2.0 license:expat))))
15277
15278 (define-public python2-tqdm
15279 (package-with-python2 python-tqdm))
15280
15281 (define-public python-pkginfo
15282 (package
15283 (name "python-pkginfo")
15284 (version "1.4.2")
15285 (source
15286 (origin
15287 (method url-fetch)
15288 (uri (pypi-uri "pkginfo" version))
15289 (sha256
15290 (base32
15291 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15292 (build-system python-build-system)
15293 (arguments
15294 ;; The tests are broken upstream.
15295 '(#:tests? #f))
15296 (home-page
15297 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15298 (synopsis
15299 "Query metadatdata from sdists, bdists, and installed packages")
15300 (description
15301 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15302 source distriubtion (an sdist) or a binary distribution (e.g., created by
15303 running bdist_egg). It can also query the EGG-INFO directory of an installed
15304 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15305 created by running @code{python setup.py develop}).")
15306 (license license:expat)))
15307
15308 (define-public python2-pkginfo
15309 (package-with-python2 python-pkginfo))
15310
15311 (define-public python-twine
15312 (package
15313 (name "python-twine")
15314 (version "1.9.1")
15315 (source
15316 (origin
15317 (method url-fetch)
15318 (uri (pypi-uri "twine" version))
15319 (sha256
15320 (base32
15321 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15322 (build-system python-build-system)
15323 (propagated-inputs
15324 `(("python-tqdm" ,python-tqdm)
15325 ("python-pkginfo" ,python-pkginfo)
15326 ("python-requests" ,python-requests)
15327 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15328 (home-page "https://github.com/pypa/twine")
15329 (synopsis "Collection of utilities for interacting with PyPI")
15330 (description
15331 "@code{twine} currently supports registering projects and uploading
15332 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15333 their files and supports any packaging format (including wheels).")
15334 (license license:asl2.0)))
15335
15336 (define-public python2-twine
15337 (package-with-python2 python-twine))
15338
15339 (define-public python-linecache2
15340 (package
15341 (name "python-linecache2")
15342 (version "1.0.0")
15343 (source
15344 (origin
15345 (method url-fetch)
15346 (uri (pypi-uri "linecache2" version))
15347 (sha256
15348 (base32
15349 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15350 (build-system python-build-system)
15351 (arguments
15352 `(;; The tests depend on unittest2, and our version is a bit too old.
15353 #:tests? #f))
15354 (native-inputs
15355 `(("python-pbr" ,python-pbr-minimal)))
15356 (home-page
15357 "https://github.com/testing-cabal/linecache2")
15358 (synopsis "Backports of the linecache module")
15359 (description
15360 "The linecache module allows one to get any line from any file, while
15361 attempting to optimize internally, using a cache, the common case where many
15362 lines are read from a single file.")
15363 (license license:psfl)))
15364
15365 (define-public python2-linecache2
15366 (package-with-python2 python-linecache2))
15367
15368 (define-public python-traceback2
15369 (package
15370 (name "python-traceback2")
15371 (version "1.4.0")
15372 (source
15373 (origin
15374 (method url-fetch)
15375 (uri (pypi-uri "traceback2" version))
15376 (sha256
15377 (base32
15378 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15379 (build-system python-build-system)
15380 (arguments
15381 `(;; python-traceback2 and python-unittest2 depend on one another.
15382 #:tests? #f))
15383 (native-inputs
15384 `(("python-pbr" ,python-pbr-minimal)))
15385 (propagated-inputs
15386 `(("python-linecache2" ,python-linecache2)))
15387 (home-page
15388 "https://github.com/testing-cabal/traceback2")
15389 (synopsis "Backports of the traceback module")
15390 (description
15391 "This module provides a standard interface to extract, format and print
15392 stack traces of Python programs. It exactly mimics the behavior of the Python
15393 interpreter when it prints a stack trace.")
15394 (license license:psfl)))
15395
15396 (define-public python2-traceback2
15397 (package-with-python2 python-traceback2))
15398
15399 (define-public python-ratelimiter
15400 (package
15401 (name "python-ratelimiter")
15402 (version "1.2.0")
15403 (source
15404 (origin
15405 (method url-fetch)
15406 (uri (pypi-uri "ratelimiter" version))
15407 (sha256
15408 (base32
15409 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15410 (build-system python-build-system)
15411 (arguments
15412 '(#:tests? #f)) ; There are no tests in the pypi archive.
15413 (home-page "https://github.com/RazerM/ratelimiter")
15414 (synopsis "Simple rate limiting object")
15415 (description
15416 "The @code{ratelimiter} module ensures that an operation will not be
15417 executed more than a given number of times during a given period.")
15418 (license license:asl2.0)))
15419
15420 (define-public python2-ratelimiter
15421 (package-with-python2 python-ratelimiter))
15422
15423 (define-public python-dukpy
15424 (package
15425 (name "python-dukpy")
15426 (version "0.3")
15427 (source
15428 (origin
15429 (method git-fetch)
15430 (uri (git-reference
15431 (url "https://github.com/kovidgoyal/dukpy.git")
15432 (commit (string-append "v" version))))
15433 (file-name (git-file-name name version))
15434 (sha256
15435 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15436 (build-system python-build-system)
15437 (home-page "https://github.com/kovidgoyal/dukpy")
15438 (synopsis "Run JavaScript in python")
15439 (description
15440 "dukpy is a JavaScript runtime environment for Python using the duktape
15441 embeddable JavaScript engine.")
15442 ;; Dukpy is licensed under MIT like the embedded duktape library,
15443 ;; with 'errors.c' as GPL3.
15444 (license (list license:expat license:gpl3))))
15445
15446 (define-public python2-dukpy
15447 (package-with-python2 python-dukpy))
15448
15449 (define-public python-jsonrpclib-pelix
15450 (package
15451 (name "python-jsonrpclib-pelix")
15452 (version "0.3.2")
15453 (source
15454 (origin
15455 (method url-fetch)
15456 (uri (pypi-uri "jsonrpclib-pelix" version))
15457 (sha256
15458 (base32
15459 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15460 (build-system python-build-system)
15461 (arguments
15462 `(#:tests? #f)) ; no tests in PyPI tarball
15463 (home-page "https://github.com/tcalmant/jsonrpclib/")
15464 (synopsis "JSON-RPC 2.0 client library for Python")
15465 (description
15466 "This library implements the JSON-RPC v2.0
15467 specification (backwards-compatible) as a client library for Python. This
15468 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15469 services.")
15470 (license license:asl2.0)))
15471
15472 (define-public python2-jsonrpclib-pelix
15473 (package-with-python2 python-jsonrpclib-pelix))
15474
15475 (define-public python-setuptools-scm-git-archive
15476 (package
15477 (name "python-setuptools-scm-git-archive")
15478 (version "1.0")
15479 (source
15480 (origin
15481 (method url-fetch)
15482 (uri (pypi-uri "setuptools_scm_git_archive" version))
15483 (sha256
15484 (base32
15485 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15486 (build-system python-build-system)
15487 (native-inputs
15488 `(("python-pytest" ,python-pytest)))
15489 (propagated-inputs
15490 `(("python-setuptools-scm" ,python-setuptools-scm)))
15491 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15492 (synopsis "Setuptools_scm plugin for git archives")
15493 (description
15494 "The setuptools_scm_git_archive package is a plugin to
15495 setuptools_scm, which supports obtaining versions from git archives that
15496 belong to tagged versions.")
15497 (license license:expat)))
15498
15499 (define-public python2-setuptools-scm-git-archive
15500 (package-with-python2 python-setuptools-scm-git-archive))
15501
15502 (define-public python-setuptools-git
15503 (package
15504 (name "python-setuptools-git")
15505 (version "1.2")
15506 (source
15507 (origin
15508 (method url-fetch)
15509 (uri (pypi-uri "setuptools-git" version))
15510 (sha256
15511 (base32
15512 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15513 (build-system python-build-system)
15514 (arguments
15515 `(#:phases
15516 (modify-phases %standard-phases
15517 ;; This is needed for tests.
15518 (add-after 'unpack 'configure-git
15519 (lambda _
15520 (setenv "HOME" "/tmp")
15521 (invoke "git" "config" "--global" "user.email" "guix")
15522 (invoke "git" "config" "--global" "user.name" "guix")
15523 #t)))))
15524 (native-inputs
15525 `(("git" ,git-minimal)))
15526 (home-page "https://github.com/msabramo/setuptools-git")
15527 (synopsis "Setuptools revision control system plugin for Git")
15528 (description
15529 "This package provides a plugin for Setuptools for revision control with
15530 Git.")
15531 (license license:bsd-3)))
15532
15533 (define-public python-pyclipper
15534 (package
15535 (name "python-pyclipper")
15536 (version "1.1.0.post3")
15537 (source
15538 (origin
15539 (method url-fetch)
15540 (uri (pypi-uri "pyclipper" version ".zip"))
15541 (sha256
15542 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15543 (modules '((guix build utils)))
15544 (snippet
15545 '(begin
15546 ;; This file is generated by Cython.
15547 (delete-file "pyclipper/pyclipper.cpp") #t))))
15548 (build-system python-build-system)
15549 (arguments
15550 `(#:phases
15551 (modify-phases %standard-phases
15552 (add-before 'build 'cythonize-sources
15553 (lambda _
15554 (with-directory-excursion "pyclipper"
15555 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15556 (propagated-inputs
15557 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15558 (native-inputs
15559 `(("python-cython" ,python-cython)
15560 ("python-pytest" ,python-pytest)
15561 ("python-pytest-runner" ,python-pytest-runner)
15562 ("python-unittest2" ,python-unittest2)
15563 ("unzip" ,unzip)))
15564 (home-page "https://github.com/greginvm/pyclipper")
15565 (synopsis "Wrapper for Angus Johnson's Clipper library")
15566 (description
15567 "Pyclipper is a Cython wrapper for the C++ translation of the
15568 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15569 (license license:expat)))
15570
15571 (define-public python2-pyclipper
15572 (package-with-python2 python-pyclipper))
15573
15574 (define-public python2-booleanoperations
15575 (package
15576 (name "python2-booleanoperations")
15577 (version "0.7.1")
15578 (source
15579 (origin
15580 (method url-fetch)
15581 (uri (pypi-uri "booleanOperations" version ".zip"))
15582 (sha256
15583 (base32
15584 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15585 (build-system python-build-system)
15586 (arguments
15587 `(#:python ,python-2))
15588 (native-inputs
15589 `(("unzip" ,unzip)
15590 ("python2-pytest" ,python2-pytest)
15591 ("python2-pytest-runner" ,python2-pytest-runner)))
15592 (propagated-inputs
15593 `(("python-fonttools" ,python2-fonttools)
15594 ("python-pyclipper" ,python2-pyclipper)
15595 ("python-ufolib" ,python2-ufolib)))
15596 (home-page "https://github.com/typemytype/booleanOperations")
15597 (synopsis "Boolean operations on paths")
15598 (description
15599 "BooleanOperations provides a Python library that enables
15600 boolean operations on paths.")
15601 (license license:expat)))
15602
15603 (define-public python-tempdir
15604 (package
15605 (name "python-tempdir")
15606 (version "0.7.1")
15607 (source
15608 (origin
15609 (method url-fetch)
15610 (uri (pypi-uri "tempdir" version))
15611 (sha256
15612 (base32
15613 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15614 (build-system python-build-system)
15615 (home-page "https://pypi.org/project/tempdir/")
15616 (arguments
15617 ;; the package has no tests
15618 '(#:tests? #f))
15619 (synopsis "Python library for managing temporary directories")
15620 (description
15621 "This library manages temporary directories that are automatically
15622 deleted with all their contents when they are no longer needed. It is
15623 particularly convenient for use in tests.")
15624 (license license:expat)))
15625
15626 (define-public python2-tempdir
15627 (package-with-python2 python-tempdir))
15628
15629 (define-public python-activepapers
15630 (package
15631 (name "python-activepapers")
15632 (version "0.2.2")
15633 (source
15634 (origin
15635 (method url-fetch)
15636 (uri (pypi-uri "ActivePapers.Py" version))
15637 (sha256
15638 (base32
15639 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15640 (build-system python-build-system)
15641 (arguments
15642 `(#:modules ((ice-9 ftw)
15643 (srfi srfi-1)
15644 (guix build utils)
15645 (guix build python-build-system))
15646
15647 #:phases
15648 (modify-phases %standard-phases
15649 (add-after 'unpack 'delete-python2-code
15650 (lambda _
15651 (for-each delete-file
15652 '("lib/activepapers/builtins2.py"
15653 "lib/activepapers/standardlib2.py"
15654 "lib/activepapers/utility2.py"))))
15655 (replace 'check
15656 (lambda _
15657 ;; Deactivate the test cases that download files
15658 (setenv "NO_NETWORK_ACCESS" "1")
15659 ;; For some strange reason, some tests fail if nosetests runs all
15660 ;; test modules in a single execution. They pass if each test
15661 ;; module is run individually.
15662 (for-each (lambda (filename)
15663 (invoke "nosetests"
15664 (string-append "tests/" filename)))
15665 (scandir "tests"
15666 (lambda (filename)
15667 (string-suffix? ".py" filename)))))))))
15668 (native-inputs
15669 `(("python-tempdir" ,python-tempdir)
15670 ("python-nose" ,python-nose)))
15671 (propagated-inputs
15672 `(("python-h5py" ,python-h5py)))
15673 (home-page "https://www.activepapers.org/")
15674 (synopsis "Executable papers for scientific computing")
15675 (description
15676 "ActivePapers is a tool for working with executable papers, which
15677 combine data, code, and documentation in single-file packages,
15678 suitable for publication as supplementary material or on repositories
15679 such as figshare or Zenodo.")
15680 (properties `((python2-variant . ,(delay python2-activepapers))))
15681 (license license:bsd-3)))
15682
15683 (define-public python2-activepapers
15684 (let ((base (package-with-python2
15685 (strip-python2-variant python-activepapers))))
15686 (package
15687 (inherit base)
15688 (arguments
15689 (substitute-keyword-arguments (package-arguments base)
15690 ((#:phases phases)
15691 `(modify-phases ,phases
15692 (delete 'delete-python2-code)
15693 (add-after 'unpack 'delete-python3-code
15694 (lambda _
15695 (for-each delete-file
15696 '("lib/activepapers/builtins3.py"
15697 "lib/activepapers/standardlib3.py"
15698 "lib/activepapers/utility3.py")))))))))))
15699
15700 (define-public python-semver
15701 (package
15702 (name "python-semver")
15703 (version "2.9.0")
15704 (source
15705 (origin
15706 (method url-fetch)
15707 (uri (pypi-uri "semver" version))
15708 (sha256
15709 (base32
15710 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15711 (build-system python-build-system)
15712 (native-inputs
15713 `(("python-appdirs" ,python-appdirs)
15714 ("python-distlib" ,python-distlib)
15715 ("python-importlib-metadata" ,python-importlib-metadata)
15716 ("python-filelock" ,python-filelock)
15717 ("python-six" ,python-six)
15718 ("python-tox" ,python-tox)
15719 ("python-virtualenv" ,python-virtualenv)))
15720 (home-page "https://github.com/k-bx/python-semver")
15721 (synopsis "Python helper for Semantic Versioning")
15722 (description "This package provides a Python library for
15723 @url{Semantic Versioning, http://semver.org/}.")
15724 (license license:bsd-3)))
15725
15726 (define-public python2-semver
15727 (package-with-python2 python-semver))
15728
15729 (define-public python-pyro4
15730 (package
15731 (name "python-pyro4")
15732 (version "4.77")
15733 (source
15734 (origin
15735 (method url-fetch)
15736 (uri (pypi-uri "Pyro4" version))
15737 (sha256
15738 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15739 (build-system python-build-system)
15740 (arguments
15741 '(#:tests? #f)) ;FIXME: Some tests require network access.
15742 (native-inputs
15743 `(("python-cloudpickle" ,python-cloudpickle)
15744 ("python-dill" ,python-dill)
15745 ("python-msgpack" ,python-msgpack)))
15746 (propagated-inputs
15747 `(("python-serpent" ,python-serpent)))
15748 (home-page "https://pyro4.readthedocs.io")
15749 (synopsis "Distributed object middleware for Python")
15750 (description
15751 "Pyro enables you to build applications in which objects can talk to each
15752 other over the network. You can just use normal Python method calls to call
15753 objects on other machines, also known as remote procedure calls (RPC).")
15754 (license license:expat)))
15755
15756 (define-public python2-pyro
15757 (package
15758 (name "python2-pyro")
15759 (version "3.16")
15760 (source
15761 (origin
15762 (method url-fetch)
15763 (uri (pypi-uri "Pyro" version))
15764 (file-name (string-append "Pyro-" version ".tar.gz"))
15765 (sha256
15766 (base32
15767 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15768 (build-system python-build-system)
15769 (arguments
15770 ;; Pyro is not compatible with Python 3
15771 `(#:python ,python-2
15772 ;; Pyro has no test cases for automatic execution
15773 #:tests? #f))
15774 (home-page "https://pythonhosted.org/Pyro/")
15775 (synopsis "Distributed object manager for Python")
15776 (description "Pyro is a Distributed Object Technology system
15777 written in Python that is designed to be easy to use. It resembles
15778 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15779 which is a system and language independent Distributed Object Technology
15780 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15781 longer maintained. New projects should use Pyro4 instead, which
15782 is the new Pyro version that is actively developed.")
15783 (license license:expat)))
15784
15785 (define-public python2-scientific
15786 (package
15787 (name "python2-scientific")
15788 (version "2.9.4")
15789 (source
15790 (origin
15791 (method git-fetch)
15792 (uri (git-reference
15793 (url "https://github.com/khinsen/ScientificPython")
15794 (commit (string-append "rel" version))))
15795 (file-name (git-file-name name version))
15796 (sha256
15797 (base32
15798 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15799 (build-system python-build-system)
15800 (inputs
15801 `(("netcdf" ,netcdf)))
15802 (propagated-inputs
15803 `(("python-numpy" ,python2-numpy-1.8)
15804 ("python-pyro" ,python2-pyro)))
15805 (arguments
15806 ;; ScientificPython is not compatible with Python 3
15807 `(#:python ,python-2
15808 #:tests? #f ; No test suite
15809 #:phases
15810 (modify-phases %standard-phases
15811 (replace 'build
15812 (lambda* (#:key inputs #:allow-other-keys)
15813 (invoke "python" "setup.py" "build"
15814 (string-append "--netcdf_prefix="
15815 (assoc-ref inputs "netcdf"))))))))
15816 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15817 (synopsis "Python modules for scientific computing")
15818 (description "ScientificPython is a collection of Python modules that are
15819 useful for scientific computing. Most modules are rather general (Geometry,
15820 physical units, automatic derivatives, ...) whereas others are more
15821 domain-specific (e.g. netCDF and PDB support). The library is currently
15822 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15823 (license license:cecill-c)))
15824
15825 (define-public python2-mmtk
15826 (package
15827 (name "python2-mmtk")
15828 (version "2.7.12")
15829 (source
15830 (origin
15831 (method git-fetch)
15832 (uri (git-reference
15833 (url "https://github.com/khinsen/MMTK")
15834 (commit (string-append "rel" version))))
15835 (file-name (git-file-name name version))
15836 (sha256
15837 (base32
15838 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15839 (build-system python-build-system)
15840 (native-inputs
15841 `(("netcdf" ,netcdf)))
15842 (propagated-inputs
15843 `(("python-scientific" ,python2-scientific)
15844 ("python-tkinter" ,python-2 "tk")))
15845 (arguments
15846 `(#:python ,python-2
15847 #:tests? #f
15848 #:phases
15849 (modify-phases %standard-phases
15850 (add-before 'build 'includes-from-scientific
15851 (lambda* (#:key inputs #:allow-other-keys)
15852 (mkdir-p "Include/Scientific")
15853 (copy-recursively
15854 (string-append
15855 (assoc-ref inputs "python-scientific")
15856 "/include/python2.7/Scientific")
15857 "Include/Scientific"))))))
15858 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15859 (synopsis "Python library for molecular simulation")
15860 (description "MMTK is a library for molecular simulations with an emphasis
15861 on biomolecules. It provides widely used methods such as Molecular Dynamics
15862 and normal mode analysis, but also basic routines for implementing new methods
15863 for simulation and analysis. The library is currently not actively maintained
15864 and works only with Python 2 and NumPy < 1.9.")
15865 (license license:cecill-c)))
15866
15867 (define-public python-phonenumbers
15868 (package
15869 (name "python-phonenumbers")
15870 (version "8.9.1")
15871 (source
15872 (origin
15873 (method url-fetch)
15874 (uri (pypi-uri "phonenumbers" version))
15875 (sha256
15876 (base32
15877 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15878 (build-system python-build-system)
15879 (home-page
15880 "https://github.com/daviddrysdale/python-phonenumbers")
15881 (synopsis
15882 "Python library for dealing with international phone numbers")
15883 (description
15884 "This package provides a Python port of Google's libphonenumber library.")
15885 (license license:asl2.0)))
15886
15887 (define-public python2-phonenumbers
15888 (package-with-python2 python-phonenumbers))
15889
15890 (define-public python-send2trash
15891 (package
15892 (name "python-send2trash")
15893 (version "1.5.0")
15894 (source
15895 (origin (method git-fetch)
15896 ;; Source tarball on PyPI doesn't include tests.
15897 (uri (git-reference
15898 (url "https://github.com/hsoft/send2trash.git")
15899 (commit version)))
15900 (file-name (git-file-name name version))
15901 (sha256
15902 (base32
15903 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15904 (build-system python-build-system)
15905 (arguments
15906 '(#:phases
15907 (modify-phases %standard-phases
15908 (add-before 'check 'pre-check
15909 (lambda _
15910 (mkdir-p "/tmp/foo")
15911 (setenv "HOME" "/tmp/foo")
15912 #t)))))
15913 (home-page "https://github.com/hsoft/send2trash")
15914 (synopsis "Send files to the user's @file{~/Trash} directory")
15915 (description "This package provides a Python library to send files to the
15916 user's @file{~/Trash} directory.")
15917 (properties `((python2-variant . ,(delay python2-send2trash))))
15918 (license license:bsd-3)))
15919
15920 (define-public python2-send2trash
15921 (package
15922 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15923 (arguments
15924 (substitute-keyword-arguments (package-arguments python-send2trash)
15925 ((#:phases phases)
15926 `(modify-phases ,phases
15927 (add-before 'check 'setenv
15928 (lambda _
15929 (setenv "PYTHONPATH"
15930 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15931 #t))))))))
15932
15933 (define-public python-yapf
15934 (package
15935 (name "python-yapf")
15936 (version "0.29.0")
15937 (source
15938 (origin
15939 (method url-fetch)
15940 (uri (pypi-uri "yapf" version))
15941 (sha256
15942 (base32
15943 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
15944 (build-system python-build-system)
15945 (home-page "https://github.com/google/yapf")
15946 (synopsis "Formatter for Python code")
15947 (description "YAPF is a formatter for Python code. It's based off of
15948 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
15949 takes the code and reformats it to the best formatting that conforms to the
15950 style guide, even if the original code didn't violate the style guide.")
15951 (license license:asl2.0)))
15952
15953 (define-public python2-yapf
15954 (package-with-python2 python-yapf))
15955
15956 (define-public python-gyp
15957 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
15958 (revision "0"))
15959 (package
15960 (name "python-gyp")
15961 ;; Google does not release versions,
15962 ;; based on second most recent commit date.
15963 (version (git-version "0.0.0" revision commit))
15964 (source
15965 (origin
15966 ;; Google does not release tarballs,
15967 ;; git checkout is needed.
15968 (method git-fetch)
15969 (uri (git-reference
15970 (url "https://chromium.googlesource.com/external/gyp")
15971 (commit commit)))
15972 (file-name (git-file-name name version))
15973 (sha256
15974 (base32
15975 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
15976 (build-system python-build-system)
15977 (home-page "https://gyp.gsrc.io/")
15978 (synopsis "GYP is a Meta-Build system")
15979 (description
15980 "GYP builds build systems for large, cross platform applications.
15981 It can be used to generate XCode projects, Visual Studio projects, Ninja build
15982 files, and Makefiles.")
15983 (license license:bsd-3))))
15984
15985 (define-public python2-gyp
15986 (package-with-python2 python-gyp))
15987
15988 (define-public python-whatever
15989 (package
15990 (name "python-whatever")
15991 (version "0.6")
15992 (source
15993 (origin
15994 (method git-fetch)
15995 (uri (git-reference
15996 (url "https://github.com/Suor/whatever")
15997 (commit version)))
15998 (file-name (git-file-name name version))
15999 (sha256
16000 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16001 (build-system python-build-system)
16002 (arguments
16003 `(#:phases
16004 (modify-phases %standard-phases
16005 (replace 'check
16006 (lambda _
16007 (invoke "py.test"))))))
16008 (native-inputs
16009 `(("python-pytest" ,python-pytest)))
16010 (home-page "http://github.com/Suor/whatever")
16011 (synopsis "Make anonymous functions by partial application of operators")
16012 (description "@code{whatever} provides an easy way to make anonymous
16013 functions by partial application of operators.")
16014 (license license:bsd-3)))
16015
16016 (define-public python2-whatever
16017 (package-with-python2 python-whatever))
16018
16019 (define-public python-funcy
16020 (package
16021 (name "python-funcy")
16022 (version "1.11")
16023 (source
16024 (origin
16025 (method git-fetch)
16026 (uri (git-reference
16027 (url "https://github.com/Suor/funcy.git")
16028 (commit version)))
16029 (sha256
16030 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16031 (file-name (git-file-name name version))))
16032 (build-system python-build-system)
16033 (arguments
16034 `(#:phases
16035 (modify-phases %standard-phases
16036 (replace 'check
16037 (lambda _
16038 (invoke "py.test"))))))
16039 (native-inputs
16040 `(("python-pytest" ,python-pytest)
16041 ("python-whatever" ,python-whatever)))
16042 (home-page "http://github.com/Suor/funcy")
16043 (synopsis "Functional tools")
16044 (description "@code{funcy} is a library that provides functional tools.
16045 Examples are:
16046 @enumerate
16047 @item merge - Merges collections of the same type
16048 @item walk - Type-preserving map
16049 @item select - Selects a part of a collection
16050 @item take - Takes the first n items of a collection
16051 @item first - Takes the first item of a collection
16052 @item remove - Predicated-removes items of a collection
16053 @item concat - Concatenates two collections
16054 @item flatten - Flattens a collection with subcollections
16055 @item distinct - Returns only distinct items
16056 @item split - Predicated-splits a collection
16057 @item split_at - Splits a collection at a given item
16058 @item group_by - Groups items by group
16059 @item pairwise - Pairs off adjacent items
16060 @item partial - Partially-applies a function
16061 @item curry - Curries a function
16062 @item compose - Composes functions
16063 @item complement - Complements a predicate
16064 @item all_fn - \"all\" with predicate
16065 @end enumerate")
16066 (license license:bsd-3)))
16067
16068 (define-public python2-funcy
16069 (package-with-python2 python-funcy))
16070
16071 (define-public python-isoweek
16072 (package
16073 (name "python-isoweek")
16074 (version "1.3.3")
16075 (source
16076 (origin
16077 (method url-fetch)
16078 (uri (pypi-uri "isoweek" version))
16079 (sha256
16080 (base32
16081 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16082 (build-system python-build-system)
16083 (home-page "https://github.com/gisle/isoweek")
16084 (synopsis "Objects representing a week")
16085 (description "The @code{isoweek} module provide the class Week that
16086 implements the week definition of ISO 8601. This standard also defines
16087 a notation for identifying weeks; yyyyWww (where the W is a literal).
16088 Week instances stringify to this form.")
16089 (license license:bsd-3)))
16090
16091 (define-public python2-isoweek
16092 (package-with-python2 python-isoweek))
16093
16094 (define-public python-tokenize-rt
16095 (package
16096 (name "python-tokenize-rt")
16097 (version "2.0.1")
16098 (source
16099 (origin
16100 (method url-fetch)
16101 (uri (pypi-uri "tokenize-rt" version))
16102 (sha256
16103 (base32
16104 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16105 (build-system python-build-system)
16106 (home-page "https://github.com/asottile/tokenize-rt")
16107 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16108 (description
16109 "This Python library is a wrapper around @code{tokenize} from the Python
16110 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16111 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16112 and @code{tokens_to_src} to roundtrip.")
16113 (license license:expat)))
16114
16115 (define-public python-future-fstrings
16116 (package
16117 (name "python-future-fstrings")
16118 (version "0.4.1")
16119 (source
16120 (origin
16121 (method url-fetch)
16122 (uri (pypi-uri "future_fstrings" version))
16123 (sha256
16124 (base32
16125 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16126 (build-system python-build-system)
16127 (propagated-inputs
16128 `(("python-tokenize-rt" ,python-tokenize-rt)))
16129 (home-page "https://github.com/asottile/future-fstrings")
16130 (synopsis "Backport of fstrings to Python < 3.6")
16131 (description
16132 "This package provides a UTF-8 compatible encoding
16133 @code{future_fstrings}, which performs source manipulation. It decodes the
16134 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16135 @code{f} strings.")
16136 (license license:expat)))
16137
16138 (define-public python-typed-ast
16139 (package
16140 (name "python-typed-ast")
16141 (version "1.4.0")
16142 (source
16143 (origin
16144 (method git-fetch)
16145 (uri (git-reference
16146 (url "https://github.com/python/typed_ast.git")
16147 (commit version)))
16148 (sha256
16149 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16150 (file-name (git-file-name name version))))
16151 (build-system python-build-system)
16152 (arguments
16153 `(#:modules ((guix build utils)
16154 (guix build python-build-system)
16155 (ice-9 ftw)
16156 (srfi srfi-1)
16157 (srfi srfi-26))
16158 #:phases
16159 (modify-phases %standard-phases
16160 (replace 'check
16161 (lambda _
16162 (let ((cwd (getcwd)))
16163 (setenv "PYTHONPATH"
16164 (string-append cwd "/build/"
16165 (find (cut string-prefix? "lib" <>)
16166 (scandir (string-append cwd "/build")))
16167 ":"
16168 (getenv "PYTHONPATH"))))
16169 (invoke "pytest")
16170 #t)))))
16171 (native-inputs `(("python-pytest" ,python-pytest)))
16172 (home-page "https://github.com/python/typed_ast")
16173 (synopsis "Fork of Python @code{ast} modules with type comment support")
16174 (description "This package provides a parser similar to the standard
16175 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16176 include PEP 484 type comments and are independent of the version of Python
16177 under which they are run. The @code{typed_ast} parsers produce the standard
16178 Python AST (plus type comments), and are both fast and correct, as they are
16179 based on the CPython 2.7 and 3.7 parsers.")
16180 ;; See the file "LICENSE" for the details.
16181 (license (list license:psfl
16182 license:asl2.0
16183 license:expat)))) ;ast27/Parser/spark.py
16184
16185 (define-public python-typing
16186 (package
16187 (name "python-typing")
16188 (version "3.7.4.1")
16189 (source
16190 (origin
16191 (method url-fetch)
16192 (uri (pypi-uri "typing" version))
16193 (sha256
16194 (base32
16195 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16196 (build-system python-build-system)
16197 (home-page "https://docs.python.org/3/library/typing.html")
16198 (synopsis "Type hints for Python")
16199 (description "This is a backport of the standard library @code{typing}
16200 module to Python versions older than 3.5. Typing defines a standard notation
16201 for Python function and variable type annotations. The notation can be used
16202 for documenting code in a concise, standard format, and it has been designed
16203 to also be used by static and runtime type checkers, static analyzers, IDEs
16204 and other tools.")
16205 (license license:psfl)))
16206
16207 (define-public python2-typing
16208 (package-with-python2 python-typing))
16209
16210 (define-public python-typing-extensions
16211 (package
16212 (name "python-typing-extensions")
16213 (version "3.7.4.1")
16214 (source
16215 (origin
16216 (method url-fetch)
16217 (uri (pypi-uri "typing_extensions" version))
16218 (sha256
16219 (base32
16220 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16221 (build-system python-build-system)
16222 (home-page
16223 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16224 (synopsis "Experimental type hints for Python")
16225 (description
16226 "The typing_extensions module contains additional @code{typing} hints not
16227 yet present in the of the @code{typing} standard library.
16228 Included are implementations of:
16229 @enumerate
16230 @item ClassVar
16231 @item ContextManager
16232 @item Counter
16233 @item DefaultDict
16234 @item Deque
16235 @item NewType
16236 @item NoReturn
16237 @item overload
16238 @item Protocol
16239 @item runtime
16240 @item Text
16241 @item Type
16242 @item TYPE_CHECKING
16243 @item AsyncGenerator
16244 @end enumerate\n")
16245 (license license:psfl)))
16246
16247 (define-public bpython
16248 (package
16249 (name "bpython")
16250 (version "0.18")
16251 (source
16252 (origin
16253 (method url-fetch)
16254 (uri (pypi-uri "bpython" version))
16255 (sha256
16256 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16257 (build-system python-build-system)
16258 (arguments
16259 `(#:phases
16260 (modify-phases %standard-phases
16261 (add-after 'unpack 'remove-failing-test
16262 (lambda _
16263 ;; Remove failing test. FIXME: make it pass
16264 (delete-file "bpython/test/test_args.py")
16265 #t))
16266 (add-after 'wrap 'add-aliases
16267 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16268 (lambda* (#:key outputs #:allow-other-keys)
16269 (let ((out (assoc-ref outputs "out")))
16270 (for-each
16271 (lambda (old new)
16272 (symlink old (string-append out "/bin/" new)))
16273 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16274 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16275 #t)))))
16276 (propagated-inputs
16277 `(("python-pygments" ,python-pygments)
16278 ("python-requests" ,python-requests)
16279 ("python-babel" ,python-babel) ; optional, for internationalization
16280 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16281 ("python-greenlet" ,python-greenlet)
16282 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16283 ("python-six" ,python-six)))
16284 (native-inputs
16285 `(("python-sphinx" ,python-sphinx)
16286 ("python-mock" ,python-mock)))
16287 (home-page "https://bpython-interpreter.org/")
16288 (synopsis "Fancy interface to the Python interpreter")
16289 (description "Bpython is a fancy interface to the Python
16290 interpreter. bpython's main features are
16291
16292 @enumerate
16293 @item in-line syntax highlighting,
16294 @item readline-like autocomplete with suggestions displayed as you type,
16295 @item expected parameter list for any Python function,
16296 @item \"rewind\" function to pop the last line of code from memory and
16297 re-evaluate,
16298 @item send the code you've entered off to a pastebin,
16299 @item save the code you've entered to a file, and
16300 @item auto-indentation.
16301 @end enumerate")
16302 (license license:expat)))
16303
16304 (define-public bpython2
16305 (let ((base (package-with-python2
16306 (strip-python2-variant bpython))))
16307 (package (inherit base)
16308 (name "bpython2")
16309 (arguments
16310 `(#:python ,python-2
16311 #:phases
16312 (modify-phases %standard-phases
16313 (add-after 'unpack 'remove-failing-test
16314 (lambda _
16315 ;; Remove failing test. FIXME: make it pass
16316 (delete-file "bpython/test/test_args.py")
16317 ;; Disable failing test-cases (renaming inhibits they are
16318 ;; discovered)
16319 (substitute* "bpython/test/test_curtsies_repl.py"
16320 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16321 (string-append a "xxx_off_" b))
16322 (("^(\\s*def )(test_complex\\W)" _ a b)
16323 (string-append a "xxx_off_" b)))
16324 #t))
16325 (add-before 'build 'rename-scripts
16326 ;; rename the scripts to bypthon2, bpdb2, etc.
16327 (lambda _
16328 (substitute* "setup.py"
16329 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16330 (string-append name "2" rest "\n"))
16331 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16332 (string-append name "2" (or sub "") rest "\n")))
16333 #t))))))))
16334
16335 (define-public python-pyinotify
16336 (package
16337 (name "python-pyinotify")
16338 (version "0.9.6")
16339 (source (origin
16340 (method url-fetch)
16341 (uri (pypi-uri "pyinotify" version))
16342 (sha256
16343 (base32
16344 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16345 (build-system python-build-system)
16346 (arguments `(#:tests? #f)) ;no tests
16347 (home-page "https://github.com/seb-m/pyinotify")
16348 (synopsis "Python library for monitoring inotify events")
16349 (description
16350 "@code{pyinotify} provides a Python interface for monitoring
16351 file system events on Linux.")
16352 (license license:expat)))
16353
16354 (define-public python2-pyinotify
16355 (package-with-python2 python-pyinotify))
16356
16357 ;; Ada parser uses this version.
16358 (define-public python2-quex-0.67.3
16359 (package
16360 (name "python2-quex")
16361 (version "0.67.3")
16362 (source
16363 (origin
16364 (method url-fetch)
16365 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16366 (version-major+minor version)
16367 "/quex-" version ".zip"))
16368 (sha256
16369 (base32
16370 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16371 (build-system python-build-system)
16372 (native-inputs
16373 `(("unzip" ,unzip)))
16374 (arguments
16375 `(#:python ,python-2
16376 #:tests? #f
16377 #:phases
16378 (modify-phases %standard-phases
16379 (delete 'configure)
16380 (delete 'build)
16381 (replace 'install
16382 (lambda* (#:key outputs #:allow-other-keys)
16383 (let* ((out (assoc-ref outputs "out"))
16384 (share/quex (string-append out "/share/quex"))
16385 (bin (string-append out "/bin")))
16386 (copy-recursively "." share/quex)
16387 (mkdir-p bin)
16388 (symlink (string-append share/quex "/quex-exe.py")
16389 (string-append bin "/quex"))
16390 #t))))))
16391 (native-search-paths
16392 (list (search-path-specification
16393 (variable "QUEX_PATH")
16394 (files '("share/quex")))))
16395 (home-page "http://quex.sourceforge.net/")
16396 (synopsis "Lexical analyzer generator in Python")
16397 (description "@code{quex} is a lexical analyzer generator in Python.")
16398 (license license:lgpl2.1+))) ; Non-military
16399
16400 (define-public python2-quex
16401 (package (inherit python2-quex-0.67.3)
16402 (name "python2-quex")
16403 (version "0.68.1")
16404 (source
16405 (origin
16406 (method url-fetch)
16407 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16408 (sha256
16409 (base32
16410 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16411 (file-name (string-append name "-" version ".tar.gz"))))))
16412
16413 (define-public python-more-itertools
16414 (package
16415 (name "python-more-itertools")
16416 (version "8.2.0")
16417 (source
16418 (origin
16419 (method url-fetch)
16420 (uri (pypi-uri "more-itertools" version))
16421 (sha256
16422 (base32
16423 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16424 (build-system python-build-system)
16425 (home-page "https://github.com/erikrose/more-itertools")
16426 (synopsis "More routines for operating on iterables, beyond itertools")
16427 (description "Python's built-in @code{itertools} module implements a
16428 number of iterator building blocks inspired by constructs from APL, Haskell,
16429 and SML. @code{more-itertools} includes additional building blocks for
16430 working with iterables.")
16431 (properties `((python2-variant . ,(delay python2-more-itertools))))
16432 (license license:expat)))
16433
16434 ;; The 5.x series are the last versions supporting Python 2.7.
16435 (define-public python2-more-itertools
16436 (package
16437 (inherit python-more-itertools)
16438 (name "python2-more-itertools")
16439 (version "5.0.0")
16440 (source (origin
16441 (method url-fetch)
16442 (uri (pypi-uri "more-itertools" version))
16443 (sha256
16444 (base32
16445 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16446 (arguments
16447 `(#:python ,python-2))
16448 (propagated-inputs
16449 `(("python2-six" ,python2-six-bootstrap)))))
16450
16451 (define-public python-latexcodec
16452 (package
16453 (name "python-latexcodec")
16454 (version "1.0.7")
16455 (source
16456 (origin
16457 (method url-fetch)
16458 (uri (pypi-uri "latexcodec" version))
16459 (sha256
16460 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16461 (build-system python-build-system)
16462 (inputs
16463 `(("python-six" ,python-six)))
16464 (home-page "https://readthedocs.org/projects/latexcodec/")
16465 (synopsis "Work with LaTeX code in Python")
16466 (description "Lexer and codec to work with LaTeX code in Python.")
16467 (license license:expat)))
16468
16469 (define-public python-pybtex
16470 (package
16471 (name "python-pybtex")
16472 (version "0.22.2")
16473 (source
16474 (origin
16475 (method url-fetch)
16476 (uri (pypi-uri "pybtex" version))
16477 (sha256
16478 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16479 (build-system python-build-system)
16480 (native-inputs
16481 `(("python-nose" ,python-nose)))
16482 (inputs
16483 `(("python-latexcodec" ,python-latexcodec)
16484 ("python-pyyaml" ,python-pyyaml)
16485 ("python-six" ,python-six)))
16486 (arguments
16487 `(#:test-target "nosetests"))
16488 (home-page "https://pybtex.org/")
16489 (synopsis "BibTeX-compatible bibliography processor")
16490 (description "Pybtex is a BibTeX-compatible bibliography processor written
16491 in Python. You can simply type pybtex instead of bibtex.")
16492 (license license:expat)))
16493
16494 (define-public python-onetimepass
16495 (package
16496 (name "python-onetimepass")
16497 (version "1.0.1")
16498 (source
16499 (origin
16500 (method url-fetch)
16501 (uri (pypi-uri "onetimepass" version))
16502 (sha256
16503 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16504 (build-system python-build-system)
16505 (propagated-inputs `(("python-six" ,python-six)))
16506 (home-page "https://github.com/tadeck/onetimepass/")
16507 (synopsis "One-time password library")
16508 (description "Python one-time password library for HMAC-based (HOTP) and
16509 time-based (TOTP) passwords.")
16510 (license license:expat)))
16511
16512 (define-public python-parso
16513 (package
16514 (name "python-parso")
16515 (version "0.7.0")
16516 (source
16517 (origin
16518 (method url-fetch)
16519 (uri (pypi-uri "parso" version))
16520 (sha256
16521 (base32
16522 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16523 (native-inputs
16524 `(("python-pytest" ,python-pytest)))
16525 (build-system python-build-system)
16526 (arguments
16527 `(#:phases (modify-phases %standard-phases
16528 (replace 'check
16529 (lambda _ (invoke "pytest" "-vv"))))))
16530 (home-page "https://github.com/davidhalter/parso")
16531 (synopsis "Python Parser")
16532 (description "Parso is a Python parser that supports error recovery and
16533 round-trip parsing for different Python versions (in multiple Python versions).
16534 Parso is also able to list multiple syntax errors in your Python file.")
16535 (license license:expat)))
16536
16537 (define-public python2-parso
16538 (package-with-python2 python-parso))
16539
16540 (define-public python-async-generator
16541 (package
16542 (name "python-async-generator")
16543 (version "1.10")
16544 (source
16545 (origin
16546 (method url-fetch)
16547 (uri (pypi-uri "async_generator" version))
16548 (sha256
16549 (base32
16550 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16551 (build-system python-build-system)
16552 (native-inputs
16553 `(("python-pytest" ,python-pytest)))
16554 (home-page "https://github.com/python-trio/async_generator")
16555 (synopsis "Async generators and context managers for Python 3.5+")
16556 (description "@code{async_generator} back-ports Python 3.6's native async
16557 generators and Python 3.7's context managers into Python 3.5.")
16558 ;; Dual licensed.
16559 (license (list license:expat license:asl2.0))))
16560
16561 (define-public python-async-timeout
16562 (package
16563 (name "python-async-timeout")
16564 (version "3.0.1")
16565 (source
16566 (origin
16567 (method url-fetch)
16568 (uri (pypi-uri "async-timeout" version))
16569 (sha256
16570 (base32
16571 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16572 (build-system python-build-system)
16573 (home-page "https://github.com/aio-libs/async_timeout/")
16574 (synopsis "Timeout context manager for asyncio programs")
16575 (description "@code{async-timeout} provides a timeout timeout context
16576 manager compatible with @code{asyncio}.")
16577 (license license:asl2.0)))
16578
16579 (define-public python-glob2
16580 (package
16581 (name "python-glob2")
16582 (version "0.7")
16583 (source
16584 (origin
16585 (method git-fetch)
16586 (uri (git-reference
16587 (url "https://github.com/miracle2k/python-glob2.git")
16588 (commit (string-append "v" version))))
16589 (file-name (git-file-name name version))
16590 (sha256
16591 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16592 (build-system python-build-system)
16593 (home-page "https://github.com/miracle2k/python-glob2/")
16594 (synopsis "Extended Version of the python buildin glob module")
16595 (description "This is an extended version of the Python
16596 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16597 adds:
16598
16599 @itemize
16600 @item The ability to capture the text matched by glob patterns, and return
16601 those matches alongside the file names.
16602 @item A recursive @code{**} globbing syntax, akin for example to the
16603 @code{globstar} option of Bash.
16604 @item The ability to replace the file system functions used, in order to glob
16605 on virtual file systems.
16606 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16607 @end itemize
16608
16609 Glob2 currently based on the glob code from Python 3.3.1.")
16610 (license license:bsd-2)))
16611
16612 (define-public python2-glob2
16613 (package-with-python2 python-glob2))
16614
16615 (define-public python-gipc
16616 (package
16617 (name "python-gipc")
16618 (version "0.6.0")
16619 (source
16620 (origin
16621 (method url-fetch)
16622 (uri (pypi-uri "gipc" version ".zip"))
16623 (sha256
16624 (base32
16625 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16626 (build-system python-build-system)
16627 (native-inputs
16628 `(("unzip" ,unzip)))
16629 (propagated-inputs
16630 `(("python-gevent" ,python-gevent)))
16631 (home-page "https://gehrcke.de/gipc/")
16632 (synopsis "Child process management in the context of gevent")
16633 (description "Usage of Python's multiprocessing package in a
16634 gevent-powered application may raise problems. With @code{gipc},
16635 process-based child processes can safely be created anywhere within a
16636 gevent-powered application.")
16637 (license license:expat)))
16638
16639 (define-public python2-gipc
16640 (package-with-python2 python-gipc))
16641
16642 (define-public python-fusepy
16643 (package
16644 (name "python-fusepy")
16645 (version "2.0.4")
16646 (source
16647 (origin
16648 (method url-fetch)
16649 (uri (pypi-uri "fusepy" version))
16650 (sha256
16651 (base32
16652 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16653 (build-system python-build-system)
16654 (arguments
16655 `(#:phases
16656 (modify-phases %standard-phases
16657 (add-before 'build 'set-library-file-name
16658 (lambda* (#:key inputs #:allow-other-keys)
16659 (let ((fuse (assoc-ref inputs "fuse")))
16660 (substitute* "fuse.py"
16661 (("find_library\\('fuse'\\)")
16662 (string-append "'" fuse "/lib/libfuse.so'")))
16663 #t))))))
16664 (propagated-inputs
16665 `(("fuse" ,fuse)))
16666 (home-page "https://github.com/fusepy/fusepy")
16667 (synopsis "Simple ctypes bindings for FUSE")
16668 (description "Python module that provides a simple interface to FUSE and
16669 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16670 (license license:isc)))
16671
16672 (define-public python2-fusepy
16673 (package-with-python2 python-fusepy))
16674
16675 (define-public python-fusepyng
16676 (package
16677 (name "python-fusepyng")
16678 (version "1.0.7")
16679 (source
16680 (origin
16681 (method url-fetch)
16682 (uri (pypi-uri "fusepyng" version))
16683 (sha256
16684 (base32
16685 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16686 (build-system python-build-system)
16687 (arguments
16688 '(#:phases
16689 (modify-phases %standard-phases
16690 (add-after 'unpack 'set-libfuse-path
16691 (lambda* (#:key inputs #:allow-other-keys)
16692 (let ((fuse (assoc-ref inputs "fuse")))
16693 (substitute* "fusepyng.py"
16694 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16695 (string-append "\"" fuse "/lib/libfuse.so\""))))
16696 #t)))))
16697 (inputs
16698 `(("fuse" ,fuse)))
16699 (propagated-inputs
16700 `(("python-paramiko" ,python-paramiko)))
16701 (home-page "https://github.com/rianhunter/fusepyng")
16702 (synopsis "Simple ctypes bindings for FUSE")
16703 (description "@code{fusepyng} is a Python module that provides a simple
16704 interface to FUSE on various operating systems. It's just one file and is
16705 implemented using @code{ctypes}.")
16706 (license license:isc)))
16707
16708 (define-public python2-gdrivefs
16709 (package
16710 (name "python2-gdrivefs")
16711 (version "0.14.9")
16712 (source
16713 (origin
16714 (method url-fetch)
16715 (uri (pypi-uri "gdrivefs" version))
16716 (sha256
16717 (base32
16718 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16719 (build-system python-build-system)
16720 (arguments
16721 `(#:python ,python-2
16722 #:phases
16723 (modify-phases %standard-phases
16724 (add-before 'build 'patch-setup-py
16725 (lambda _
16726 ;; Update requirements from dependency==version
16727 ;; to dependency>=version
16728 (substitute* "gdrivefs/resources/requirements.txt"
16729 (("==") ">="))
16730 #t)))))
16731 (native-inputs
16732 `(("python2-gipc" ,python2-gipc)
16733 ("python2-gevent" ,python2-gevent)
16734 ("python2-greenlet" ,python2-greenlet)
16735 ("python2-httplib2" ,python2-httplib2)
16736 ("python2-uritemplate" ,python2-uritemplate)
16737 ("python2-oauth2client" ,python2-oauth2client)
16738 ("python2-six" ,python2-six)))
16739 (propagated-inputs
16740 `(("python2-dateutil" ,python2-dateutil)
16741 ("python2-fusepy" ,python2-fusepy)
16742 ("python2-google-api-client" ,python2-google-api-client)))
16743 (home-page "https://github.com/dsoprea/GDriveFS")
16744 (synopsis "Mount Google Drive as a local file system")
16745 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16746 under Python 2.7.")
16747 (license license:gpl2)))
16748
16749 (define-public python-userspacefs
16750 (package
16751 (name "python-userspacefs")
16752 (version "1.0.13")
16753 (source
16754 (origin
16755 (method url-fetch)
16756 (uri (pypi-uri "userspacefs" version))
16757 (sha256
16758 (base32
16759 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16760 (build-system python-build-system)
16761 (propagated-inputs
16762 `(("python-fusepyng" ,python-fusepyng)))
16763 (home-page "https://github.com/rianhunter/userspacefs")
16764 (synopsis "User-space file systems for Python")
16765 (description
16766 "@code{userspacefs} is a library that allows you to easily write
16767 user-space file systems in Python.")
16768 (license license:gpl3+)))
16769
16770 (define-public pybind11
16771 (package
16772 (name "pybind11")
16773 (version "2.4.3")
16774 (source (origin
16775 (method git-fetch)
16776 (uri (git-reference
16777 (url "https://github.com/pybind/pybind11.git")
16778 (commit (string-append "v" version))))
16779 (sha256
16780 (base32
16781 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16782 (file-name (git-file-name name version))))
16783 (build-system cmake-build-system)
16784 (native-inputs
16785 `(("python" ,python-wrapper)
16786
16787 ;; The following dependencies are used for tests.
16788 ("python-pytest" ,python-pytest)
16789 ("catch" ,catch-framework2-1)
16790 ("eigen" ,eigen)))
16791 (arguments
16792 `(#:configure-flags
16793 (list (string-append "-DCATCH_INCLUDE_DIR="
16794 (assoc-ref %build-inputs "catch")
16795 "/include/catch"))
16796
16797 #:phases (modify-phases %standard-phases
16798 (add-after 'install 'install-python
16799 (lambda* (#:key outputs #:allow-other-keys)
16800 (let ((out (assoc-ref outputs "out")))
16801 (with-directory-excursion "../source"
16802 (setenv "PYBIND11_USE_CMAKE" "yes")
16803 (invoke "python" "setup.py" "install"
16804 "--single-version-externally-managed"
16805 "--root=/"
16806 (string-append "--prefix=" out)))))))
16807
16808 #:test-target "check"))
16809 (home-page "https://github.com/pybind/pybind11/")
16810 (synopsis "Seamless operability between C++11 and Python")
16811 (description
16812 "@code{pybind11} is a lightweight header-only library that exposes C++
16813 types in Python and vice versa, mainly to create Python bindings of existing
16814 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16815 library: to minimize boilerplate code in traditional extension modules by
16816 inferring type information using compile-time introspection.")
16817 (license license:bsd-3)))
16818
16819 (define-public python-fasteners
16820 (package
16821 (name "python-fasteners")
16822 (version "0.14.1")
16823 (source
16824 (origin
16825 (method url-fetch)
16826 (uri (pypi-uri "fasteners" version))
16827 (sha256
16828 (base32
16829 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16830 (build-system python-build-system)
16831 (propagated-inputs
16832 `(("python-monotonic" ,python-monotonic)
16833 ("python-six" ,python-six)
16834 ("python-testtools" ,python-testtools)))
16835 (home-page "https://github.com/harlowja/fasteners")
16836 (synopsis "Python package that provides useful locks")
16837 (description
16838 "This package provides a Python program that provides following locks:
16839
16840 @itemize
16841 @item Locking decorator
16842 @item Reader-writer locks
16843 @item Inter-process locks
16844 @item Generic helpers
16845 @end itemize\n")
16846 (properties `((python2-variant . ,(delay python2-fasteners))))
16847 (license license:asl2.0)))
16848
16849 (define-public python2-fasteners
16850 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16851 (package
16852 (inherit base)
16853 (propagated-inputs
16854 `(("python2-futures" ,python2-futures)
16855 ,@(package-propagated-inputs base))))))
16856
16857 (define-public python-requests-file
16858 (package
16859 (name "python-requests-file")
16860 (version "1.4.3")
16861 (source
16862 (origin
16863 (method url-fetch)
16864 (uri (pypi-uri "requests-file" version))
16865 (sha256
16866 (base32
16867 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16868 (build-system python-build-system)
16869 (propagated-inputs
16870 `(("python-requests" ,python-requests)
16871 ("python-six" ,python-six)))
16872 (home-page
16873 "https://github.com/dashea/requests-file")
16874 (synopsis "File transport adapter for Requests")
16875 (description
16876 "Requests-File is a transport adapter for use with the Requests Python
16877 library to allow local file system access via @code{file://} URLs.")
16878 (license license:asl2.0)))
16879
16880 (define-public python2-requests-file
16881 (package-with-python2 python-requests-file))
16882
16883 (define-public python-tldextract
16884 (package
16885 (name "python-tldextract")
16886 (version "2.2.0")
16887 (source
16888 (origin
16889 (method url-fetch)
16890 (uri (pypi-uri "tldextract" version))
16891 (sha256
16892 (base32
16893 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16894 (build-system python-build-system)
16895 (native-inputs
16896 `(("python-pytest" ,python-pytest)
16897 ("python-responses" ,python-responses)))
16898 (propagated-inputs
16899 `(("python-idna" ,python-idna)
16900 ("python-requests" ,python-requests)
16901 ("python-requests-file" ,python-requests-file)))
16902 (home-page
16903 "https://github.com/john-kurkowski/tldextract")
16904 (synopsis
16905 "Separate the TLD from the registered domain and subdomains of a URL")
16906 (description
16907 "TLDExtract accurately separates the TLD from the registered domain and
16908 subdomains of a URL, using the Public Suffix List. By default, this includes
16909 the public ICANN TLDs and their exceptions. It can optionally support the
16910 Public Suffix List's private domains as well.")
16911 (license license:bsd-3)))
16912
16913 (define-public python2-tldextract
16914 (package-with-python2 python-tldextract))
16915
16916 (define-public python-pynamecheap
16917 (package
16918 (name "python-pynamecheap")
16919 (version "0.0.3")
16920 (source
16921 (origin
16922 (method url-fetch)
16923 (uri (pypi-uri "PyNamecheap" version))
16924 (sha256
16925 (base32
16926 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16927 (build-system python-build-system)
16928 (propagated-inputs
16929 `(("python-requests" ,python-requests)))
16930 (home-page
16931 "https://github.com/Bemmu/PyNamecheap")
16932 (synopsis
16933 "Namecheap API client in Python")
16934 (description
16935 "PyNamecheap is a Namecheap API client in Python.")
16936 (license license:expat)))
16937
16938 (define-public python2-pynamecheap
16939 (package-with-python2 python-pynamecheap))
16940
16941 (define-public python-dns-lexicon
16942 (package
16943 (name "python-dns-lexicon")
16944 (version "2.4.0")
16945 (source
16946 (origin
16947 (method url-fetch)
16948 (uri (pypi-uri "dns-lexicon" version))
16949 (sha256
16950 (base32
16951 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
16952 (build-system python-build-system)
16953 (arguments
16954 `(#:tests? #f)) ;requires internet access
16955 (propagated-inputs
16956 `(("python-future" ,python-future)
16957 ("python-pynamecheap" ,python-pynamecheap)
16958 ("python-requests" ,python-requests)
16959 ("python-tldextract" ,python-tldextract)
16960 ("python-urllib3" ,python-urllib3)))
16961 (home-page "https://github.com/AnalogJ/lexicon")
16962 (synopsis
16963 "Manipulate DNS records on various DNS providers")
16964 (description
16965 "Lexicon provides a way to manipulate DNS records on multiple DNS
16966 providers in a standardized way. It has a CLI but it can also be used as a
16967 Python library. It was designed to be used in automation, specifically with
16968 Let's Encrypt.")
16969 (license license:expat)))
16970
16971 (define-public python2-dns-lexicon
16972 (package-with-python2 python-dns-lexicon))
16973
16974 (define-public python-commandlines
16975 (package
16976 (name "python-commandlines")
16977 (version "0.4.1")
16978 (source
16979 (origin
16980 (method url-fetch)
16981 (uri (pypi-uri "commandlines" version))
16982 (sha256
16983 (base32
16984 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
16985 (build-system python-build-system)
16986 (home-page "https://github.com/chrissimpkins/commandlines")
16987 (synopsis "Command line argument to object parsing library")
16988 (description
16989 "@code{Commandlines} is a Python library for command line application
16990 development that supports command line argument parsing, command string
16991 validation testing and application logic.")
16992 (license license:expat)))
16993
16994 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
16995 ;; python-numba. They have a very unflexible relationship.
16996 (define-public python-numba
16997 (package
16998 (name "python-numba")
16999 (version "0.46.0")
17000 (source
17001 (origin
17002 (method url-fetch)
17003 (uri (pypi-uri "numba" version))
17004 (sha256
17005 (base32
17006 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17007 (build-system python-build-system)
17008 (arguments
17009 `(#:modules ((guix build utils)
17010 (guix build python-build-system)
17011 (ice-9 ftw)
17012 (srfi srfi-1)
17013 (srfi srfi-26))
17014 #:phases
17015 (modify-phases %standard-phases
17016 (add-after 'unpack 'disable-proprietary-features
17017 (lambda _
17018 (setenv "NUMBA_DISABLE_HSA" "1")
17019 (setenv "NUMBA_DISABLE_CUDA" "1")
17020 #t))
17021 (add-after 'unpack 'remove-failing-tests
17022 (lambda _
17023 ;; FIXME: These tests fail for unknown reasons:
17024 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17025 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17026 (substitute* "numba/tests/test_dispatcher.py"
17027 (("def test(_non_writable_pycache)" _ m)
17028 (string-append "def guix_skip" m))
17029 (("def test(_non_creatable_pycache)" _ m)
17030 (string-append "def guix_skip" m))
17031 (("def test(_frozen)" _ m)
17032 (string-append "def guix_skip" m)))
17033
17034 ;; These tests fail because we don't run the tests from the build
17035 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17036 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17037 (substitute* "numba/tests/test_pycc.py"
17038 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17039 (string-append "def guix_skip" m)))
17040
17041 ;; These tests fail because our version of Python does not have
17042 ;; a recognizable front-end for the Numba distribution to use
17043 ;; to check against.
17044 (substitute* "numba/tests/test_entrypoints.py"
17045 (("def test(_init_entrypoint)" _ m)
17046 (string-append "def guix_skip" m)))
17047 (substitute* "numba/tests/test_jitclasses.py"
17048 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17049 (string-append "def guix_skip" m)))
17050 #t))
17051 (replace 'check
17052 (lambda _
17053 (let ((cwd (getcwd)))
17054 (setenv "PYTHONPATH"
17055 (string-append cwd "/build/"
17056 (find (cut string-prefix? "lib" <>)
17057 (scandir (string-append cwd "/build")))
17058 ":"
17059 (getenv "PYTHONPATH")))
17060 ;; Something is wrong with the PYTHONPATH when running the
17061 ;; tests from the build directory, as it complains about not being
17062 ;; able to import certain modules.
17063 (with-directory-excursion "/tmp"
17064 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17065 #t)))))
17066 (propagated-inputs
17067 `(("python-llvmlite" ,python-llvmlite)
17068 ("python-numpy" ,python-numpy)
17069 ("python-singledispatch" ,python-singledispatch)))
17070 ;; Needed for tests.
17071 (inputs
17072 `(("python-jinja2" ,python-jinja2)
17073 ("python-pygments" ,python-pygments)))
17074 (home-page "https://numba.pydata.org")
17075 (synopsis "Compile Python code using LLVM")
17076 (description "Numba gives you the power to speed up your applications with
17077 high performance functions written directly in Python. With a few
17078 annotations, array-oriented and math-heavy Python code can be just-in-time
17079 compiled to native machine instructions, similar in performance to C, C++ and
17080 Fortran, without having to switch languages or Python interpreters.
17081
17082 Numba works by generating optimized machine code using the LLVM compiler
17083 infrastructure at import time, runtime, or statically (using the included pycc
17084 tool).")
17085 (license license:bsd-3)))
17086
17087 (define-public python-numcodecs
17088 (package
17089 (name "python-numcodecs")
17090 (version "0.6.4")
17091 (source
17092 (origin
17093 (method url-fetch)
17094 (uri (pypi-uri "numcodecs" version))
17095 (sha256
17096 (base32
17097 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17098 (build-system python-build-system)
17099 (propagated-inputs
17100 `(("python-numpy" ,python-numpy)
17101 ("python-msgpack" ,python-msgpack)))
17102 (native-inputs
17103 `(("python-pytest" ,python-pytest)
17104 ("python-setuptools-scm" ,python-setuptools-scm)))
17105 (home-page "https://github.com/zarr-developers/numcodecs")
17106 (synopsis "Buffer compression and transformation codecs")
17107 (description
17108 "This Python package provides buffer compression and transformation
17109 codecs for use in data storage and communication applications.")
17110 (license license:expat)))
17111
17112 (define-public python-asciitree
17113 (package
17114 (name "python-asciitree")
17115 (version "0.3.3")
17116 (source
17117 (origin
17118 (method url-fetch)
17119 (uri (pypi-uri "asciitree" version))
17120 (sha256
17121 (base32
17122 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17123 (build-system python-build-system)
17124 (home-page "https://github.com/mbr/asciitree")
17125 (synopsis "Draws ASCII trees")
17126 (description "This package draws tree structures using characters.")
17127 (license license:expat)))
17128
17129 (define-public python-zarr
17130 (package
17131 (name "python-zarr")
17132 (version "2.4.0")
17133 (source
17134 (origin
17135 (method url-fetch)
17136 (uri (pypi-uri "zarr" version))
17137 (sha256
17138 (base32
17139 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17140 (build-system python-build-system)
17141 (arguments
17142 `(#:phases
17143 (modify-phases %standard-phases
17144 (add-after 'unpack 'disable-service-tests
17145 (lambda _
17146 (setenv "ZARR_TEST_ABS" "0")
17147 (setenv "ZARR_TEST_MONGO" "0")
17148 (setenv "ZARR_TEST_REDIS" "0")
17149 #t))
17150 (replace 'check
17151 (lambda _
17152 (invoke "pytest" "-vv" "-k" "not lmdb")
17153 #t)))))
17154 (propagated-inputs
17155 `(("python-asciitree" ,python-asciitree)
17156 ("python-fasteners" ,python-fasteners)
17157 ("python-numcodecs" ,python-numcodecs)
17158 ("python-numpy" ,python-numpy)))
17159 (native-inputs
17160 `(("python-pytest" ,python-pytest)
17161 ("python-setuptools-scm" ,python-setuptools-scm)))
17162 (home-page "https://github.com/zarr-developers/zarr-python")
17163 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17164 (description
17165 "This package provides an implementation of chunked, compressed,
17166 N-dimensional arrays for Python.")
17167 (license license:expat)))
17168
17169 (define-public python-anndata
17170 (package
17171 (name "python-anndata")
17172 (version "0.7.1")
17173 (source
17174 (origin
17175 (method url-fetch)
17176 (uri (pypi-uri "anndata" version))
17177 (sha256
17178 (base32
17179 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17180 (build-system python-build-system)
17181 (arguments
17182 `(#:phases
17183 (modify-phases %standard-phases
17184 (add-after 'unpack 'delete-inconvenient-tests
17185 (lambda _
17186 ;; This test depends on python-scikit-learn.
17187 (delete-file "anndata/tests/test_inplace_subset.py")
17188 #t))
17189 (delete 'check)
17190 (add-after 'install 'check
17191 (lambda* (#:key inputs outputs #:allow-other-keys)
17192 (add-installed-pythonpath inputs outputs)
17193 (invoke "pytest" "-vv"))))))
17194 (propagated-inputs
17195 `(("python-h5py" ,python-h5py)
17196 ("python-importlib-metadata" ,python-importlib-metadata)
17197 ("python-natsort" ,python-natsort)
17198 ("python-numcodecs" ,python-numcodecs)
17199 ("python-packaging" ,python-packaging)
17200 ("python-pandas" ,python-pandas)
17201 ("python-scipy" ,python-scipy)
17202 ("python-zarr" ,python-zarr)))
17203 (native-inputs
17204 `(("python-joblib" ,python-joblib)
17205 ("python-pytest" ,python-pytest)
17206 ("python-setuptools-scm" ,python-setuptools-scm)))
17207 (home-page "https://github.com/theislab/anndata")
17208 (synopsis "Annotated data for data analysis pipelines")
17209 (description "Anndata is a package for simple (functional) high-level APIs
17210 for data analysis pipelines. In this context, it provides an efficient,
17211 scalable way of keeping track of data together with learned annotations and
17212 reduces the code overhead typically encountered when using a mostly
17213 object-oriented library such as @code{scikit-learn}.")
17214 (license license:bsd-3)))
17215
17216 (define-public python-dill
17217 (package
17218 (name "python-dill")
17219 (version "0.3.1.1")
17220 (source
17221 (origin
17222 (method url-fetch)
17223 (uri (pypi-uri "dill" version))
17224 (sha256
17225 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17226 (build-system python-build-system)
17227 (arguments
17228 `(#:phases
17229 (modify-phases %standard-phases
17230 (replace 'check
17231 (lambda _
17232 (with-directory-excursion "/tmp"
17233 (invoke "nosetests" "-v"))
17234 #t)))))
17235 (native-inputs
17236 `(("python-nose" ,python-nose)))
17237 (home-page "https://pypi.org/project/dill/")
17238 (synopsis "Serialize all of Python")
17239 (description "Dill extends Python's @code{pickle} module for serializing
17240 and de-serializing Python objects to the majority of the built-in Python
17241 types. Dill provides the user the same interface as the @code{pickle} module,
17242 and also includes some additional features. In addition to pickling Python
17243 objects, @code{dill} provides the ability to save the state of an interpreter
17244 session in a single command. Hence, it would be feasible to save a
17245 interpreter session, close the interpreter, ship the pickled file to another
17246 computer, open a new interpreter, unpickle the session and thus continue from
17247 the saved state of the original interpreter session.")
17248 (license license:bsd-3)))
17249
17250 (define-public python-multiprocess
17251 (package
17252 (name "python-multiprocess")
17253 (version "0.70.9")
17254 (source
17255 (origin
17256 (method url-fetch)
17257 (uri (pypi-uri "multiprocess" version))
17258 (sha256
17259 (base32
17260 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17261 (build-system python-build-system)
17262 (arguments
17263 `(#:phases
17264 (modify-phases %standard-phases
17265 (add-after 'unpack 'disable-broken-tests
17266 (lambda _
17267 ;; This test is broken as there is no keyboard interrupt.
17268 (substitute* "py3.7/multiprocess/tests/__init__.py"
17269 (("^(.*)def test_wait_result"
17270 line indent)
17271 (string-append indent
17272 "@unittest.skip(\"Disabled by Guix\")\n"
17273 line)))
17274 #t))
17275 ;; Tests must be run after installation.
17276 (delete 'check)
17277 (add-after 'install 'check
17278 (lambda* (#:key inputs outputs #:allow-other-keys)
17279 (add-installed-pythonpath inputs outputs)
17280 (invoke "python" "-m" "multiprocess.tests")
17281 #t)))))
17282 (propagated-inputs
17283 `(("python-dill" ,python-dill)))
17284 (home-page "https://pypi.org/project/multiprocess/")
17285 (synopsis "Multiprocessing and multithreading in Python")
17286 (description
17287 "This package is a fork of the multiprocessing Python package, a package
17288 which supports the spawning of processes using the API of the standard
17289 library's @code{threading} module.")
17290 (license license:bsd-3)))
17291
17292 (define-public python-toolz
17293 (package
17294 (name "python-toolz")
17295 (version "0.9.0")
17296 (source
17297 (origin
17298 (method url-fetch)
17299 (uri (pypi-uri "toolz" version))
17300 (sha256
17301 (base32
17302 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17303 (build-system python-build-system)
17304 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17305 ;; unregistered loader type"
17306 (arguments '(#:tests? #f))
17307 (home-page "https://github.com/pytoolz/toolz/")
17308 (synopsis "List processing tools and functional utilities")
17309 (description
17310 "This package provides a set of utility functions for iterators,
17311 functions, and dictionaries.")
17312 (license license:bsd-3)))
17313
17314 (define-public python2-toolz
17315 (package-with-python2 python-toolz))
17316
17317 (define-public python-cytoolz
17318 (package
17319 (name "python-cytoolz")
17320 (version "0.9.0.1")
17321 (source
17322 (origin
17323 (method url-fetch)
17324 (uri (pypi-uri "cytoolz" version))
17325 (sha256
17326 (base32
17327 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17328 (build-system python-build-system)
17329 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17330 ;; 'exceptions'"
17331 (arguments '(#:tests? #f))
17332 (propagated-inputs
17333 `(("python-toolz" ,python-toolz)))
17334 (native-inputs
17335 `(("python-cython" ,python-cython)))
17336 (home-page "https://github.com/pytoolz/cytoolz")
17337 (synopsis "High performance functional utilities")
17338 (description
17339 "The cytoolz package implements the same API as provided by toolz. The
17340 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17341 that is accessible to other projects developed in Cython.")
17342 (license license:bsd-3)))
17343
17344 (define-public python-sortedcontainers
17345 (package
17346 (name "python-sortedcontainers")
17347 (version "2.1.0")
17348 (source
17349 (origin
17350 (method url-fetch)
17351 (uri (pypi-uri "sortedcontainers" version))
17352 (sha256
17353 (base32
17354 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17355 (build-system python-build-system)
17356 (arguments
17357 ;; FIXME: Tests require many extra dependencies, and would introduce
17358 ;; a circular dependency on hypothesis, which uses this package.
17359 '(#:tests? #f))
17360 (propagated-inputs
17361 `(("python-appdirs" ,python-appdirs)
17362 ("python-distlib" ,python-distlib)
17363 ("python-filelock" ,python-filelock)
17364 ("python-six" ,python-six-bootstrap)))
17365 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17366 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17367 (description
17368 "This package provides a sorted collections library, written in
17369 pure-Python.")
17370 (license license:asl2.0)))
17371
17372 (define-public python2-sortedcontainers
17373 (package-with-python2 python-sortedcontainers))
17374
17375 (define-public python-cloudpickle
17376 (package
17377 (name "python-cloudpickle")
17378 (version "1.3.0")
17379 (source
17380 (origin
17381 (method url-fetch)
17382 (uri (pypi-uri "cloudpickle" version))
17383 (sha256
17384 (base32
17385 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17386 (build-system python-build-system)
17387 (arguments
17388 '(#:phases (modify-phases %standard-phases
17389 (add-before 'check 'do-not-override-PYTHONPATH
17390 (lambda _
17391 ;; Append to PYTHONPATH instead of overriding it so
17392 ;; that dependencies from Guix can be found.
17393 (substitute* "tests/testutils.py"
17394 (("env\\['PYTHONPATH'\\] = pythonpath")
17395 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17396 #t))
17397 (replace 'check
17398 (lambda* (#:key tests? #:allow-other-keys)
17399 (if tests?
17400 (invoke "pytest" "-s" "-vv")
17401 (format #t "test suite not run~%"))
17402 #t)))))
17403 (native-inputs
17404 `(;; For tests.
17405 ("python-psutil" ,python-psutil)
17406 ("python-pytest" ,python-pytest)
17407 ("python-tornado" ,python-tornado)))
17408 (home-page "https://github.com/cloudpipe/cloudpickle")
17409 (synopsis "Extended pickling support for Python objects")
17410 (description
17411 "Cloudpickle makes it possible to serialize Python constructs not
17412 supported by the default pickle module from the Python standard library. It
17413 is especially useful for cluster computing where Python expressions are
17414 shipped over the network to execute on remote hosts, possibly close to the
17415 data.")
17416 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17417 (license license:bsd-3)))
17418
17419 (define-public python2-cloudpickle
17420 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17421 (package
17422 (inherit base)
17423 (native-inputs
17424 `(("python-mock" ,python2-mock)
17425 ,@(package-native-inputs base)))
17426 (propagated-inputs
17427 `(("python-futures" ,python2-futures)
17428 ,@(package-propagated-inputs base))))))
17429
17430 (define-public python-locket
17431 (package
17432 (name "python-locket")
17433 (version "0.2.0")
17434 (source
17435 (origin
17436 (method url-fetch)
17437 (uri (pypi-uri "locket" version))
17438 (sha256
17439 (base32
17440 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17441 (build-system python-build-system)
17442 (home-page "https://github.com/mwilliamson/locket.py")
17443 (synopsis "File-based locks for Python")
17444 (description
17445 "Locket implements a lock that can be used by multiple processes provided
17446 they use the same path.")
17447 (license license:bsd-2)))
17448
17449 (define-public python2-locket
17450 (package-with-python2 python-locket))
17451
17452 (define-public python-blosc
17453 (package
17454 (name "python-blosc")
17455 (version "1.5.1")
17456 (source
17457 (origin
17458 (method url-fetch)
17459 (uri (pypi-uri "blosc" version))
17460 (sha256
17461 (base32
17462 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17463 (build-system python-build-system)
17464 ;; FIXME: all tests pass, but then this error is printed:
17465 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17466 (arguments '(#:tests? #f))
17467 (propagated-inputs
17468 `(("python-numpy" ,python-numpy)))
17469 (home-page "https://github.com/blosc/python-blosc")
17470 (synopsis "Python wrapper for the Blosc data compressor library")
17471 (description "Blosc is a high performance compressor optimized for binary
17472 data. It has been designed to transmit data to the processor cache faster
17473 than the traditional, non-compressed, direct memory fetch approach via a
17474 @code{memcpy()} system call.
17475
17476 Blosc works well for compressing numerical arrays that contains data with
17477 relatively low entropy, like sparse data, time series, grids with
17478 regular-spaced values, etc.
17479
17480 This Python package wraps the Blosc library.")
17481 (license license:bsd-3)))
17482
17483 (define-public python2-blosc
17484 (package-with-python2 python-blosc))
17485
17486 (define-public python-partd
17487 (package
17488 (name "python-partd")
17489 (version "0.3.9")
17490 (source
17491 (origin
17492 (method url-fetch)
17493 (uri (pypi-uri "partd" version))
17494 (sha256
17495 (base32
17496 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17497 (build-system python-build-system)
17498 (propagated-inputs
17499 `(("python-blosc" ,python-blosc)
17500 ("python-locket" ,python-locket)
17501 ("python-numpy" ,python-numpy)
17502 ("python-pandas" ,python-pandas)
17503 ("python-pyzmq" ,python-pyzmq)
17504 ("python-toolz" ,python-toolz)))
17505 (home-page "https://github.com/dask/partd/")
17506 (synopsis "Appendable key-value storage")
17507 (description "Partd stores key-value pairs. Values are raw bytes. We
17508 append on old values. Partd excels at shuffling operations.")
17509 (license license:bsd-3)))
17510
17511 (define-public python2-partd
17512 (package-with-python2 python-partd))
17513
17514 (define-public python-fsspec
17515 (package
17516 (name "python-fsspec")
17517 (version "0.6.1")
17518 (source
17519 (origin
17520 (method url-fetch)
17521 (uri (pypi-uri "fsspec" version))
17522 (sha256
17523 (base32
17524 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17525 (build-system python-build-system)
17526 (arguments '(#:tests? #f)) ; there are none
17527 (home-page "https://github.com/intake/filesystem_spec")
17528 (synopsis "File-system specification")
17529 (description "The purpose of this package is to produce a template or
17530 specification for a file-system interface, that specific implementations
17531 should follow, so that applications making use of them can rely on a common
17532 behavior and not have to worry about the specific internal implementation
17533 decisions with any given backend.")
17534 (license license:bsd-3)))
17535
17536 (define-public python-dask
17537 (package
17538 (name "python-dask")
17539 (version "2.14.0")
17540 (source
17541 (origin
17542 (method url-fetch)
17543 (uri (pypi-uri "dask" version))
17544 (sha256
17545 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17546 (build-system python-build-system)
17547 (arguments
17548 `(#:phases
17549 (modify-phases %standard-phases
17550 (add-after 'unpack 'disable-broken-tests
17551 (lambda _
17552 ;; This test is marked as xfail when pytest-xdist is used.
17553 (substitute* "dask/tests/test_threaded.py"
17554 (("def test_interrupt\\(\\)" m)
17555 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17556 m)))
17557 ;; This one fails with a type error:
17558 ;; TypeError: Already tz-aware, use tz_convert to convert.
17559 (substitute* "dask/dataframe/tests/test_shuffle.py"
17560 (("def test_set_index_timestamp\\(\\)" m)
17561 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17562 m)))
17563 #t))
17564 (replace 'check
17565 (lambda _ (invoke "pytest" "-vv"))))))
17566 (propagated-inputs
17567 `(("python-cloudpickle" ,python-cloudpickle)
17568 ("python-fsspec" ,python-fsspec)
17569 ("python-numpy" ,python-numpy)
17570 ("python-packaging" ,python-packaging)
17571 ("python-pandas" ,python-pandas)
17572 ("python-partd" ,python-partd)
17573 ("python-toolz" ,python-toolz)
17574 ("python-pyyaml" ,python-pyyaml)))
17575 (native-inputs
17576 `(("python-pytest" ,python-pytest)
17577 ("python-pytest-runner" ,python-pytest-runner)))
17578 (home-page "https://github.com/dask/dask/")
17579 (synopsis "Parallel computing with task scheduling")
17580 (description
17581 "Dask is a flexible parallel computing library for analytics. It
17582 consists of two components: dynamic task scheduling optimized for computation,
17583 and large data collections like parallel arrays, dataframes, and lists that
17584 extend common interfaces like NumPy, Pandas, or Python iterators to
17585 larger-than-memory or distributed environments. These parallel collections
17586 run on top of the dynamic task schedulers. ")
17587 (license license:bsd-3)))
17588
17589 (define-public python-ilinkedlist
17590 (package
17591 (name "python-ilinkedlist")
17592 (version "0.4.0")
17593 (source
17594 (origin
17595 (method url-fetch)
17596 (uri (pypi-uri "ilinkedlist" version))
17597 (sha256
17598 (base32
17599 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17600 (build-system python-build-system)
17601 (native-inputs `(("python-pytest" ,python-pytest)))
17602 (inputs `(("python" ,python)))
17603 (home-page "https://github.com/luther9/ilinkedlist-py")
17604 (synopsis "Immutable linked list library")
17605 (description
17606 "This is a implementation of immutable linked lists for Python. It
17607 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17608 Since a linked list is treated as immutable, it is hashable, and its length
17609 can be retrieved in constant time. Some of the terminology is inspired by
17610 LISP. It is possible to create an improper list by creating a @code{Pair}
17611 with a non-list @code{cdr}.")
17612 (license license:gpl3+)))
17613
17614 (define-public python-readlike
17615 (package
17616 (name "python-readlike")
17617 (version "0.1.3")
17618 (source
17619 (origin
17620 (method url-fetch)
17621 (uri (pypi-uri "readlike" version))
17622 (sha256
17623 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17624 (build-system python-build-system)
17625 (home-page "https://github.com/jangler/readlike")
17626 (synopsis "GNU Readline-like line editing module")
17627 (description
17628 "This Python module provides line editing functions similar to the default
17629 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17630 @code{readline} package, this one allows access to those capabilties in settings
17631 outside of a standard command-line interface. It is especially well-suited to
17632 interfacing with Urwid, due to a shared syntax for describing key inputs.
17633
17634 Currently, all stateless Readline commands are implemented. Yanking and history
17635 are not supported.")
17636 (license license:expat)))
17637
17638 (define-public python2-readlike
17639 (package-with-python2 python-readlike))
17640
17641 (define-public python-reparser
17642 (package
17643 (name "python-reparser")
17644 (version "1.4.3")
17645 (source
17646 (origin
17647 (method url-fetch)
17648 (uri (pypi-uri "ReParser" version))
17649 (sha256
17650 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17651 (build-system python-build-system)
17652 (home-page "https://github.com/xmikos/reparser")
17653 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17654 (description
17655 "This Python library provides a simple lexer/parser for inline markup based
17656 on regular expressions.")
17657 (license license:expat)))
17658
17659 (define-public python2-reparser
17660 (let ((reparser (package-with-python2
17661 (strip-python2-variant python-reparser))))
17662 (package (inherit reparser)
17663 (propagated-inputs
17664 `(("python2-enum34" ,python2-enum34)
17665 ,@(package-propagated-inputs reparser))))))
17666
17667 (define-public python-precis-i18n
17668 (package
17669 (name "python-precis-i18n")
17670 (version "1.0.0")
17671 (source
17672 (origin
17673 (method url-fetch)
17674 (uri (pypi-uri "precis_i18n" version))
17675 (sha256
17676 (base32
17677 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17678 (build-system python-build-system)
17679 (home-page "https://github.com/byllyfish/precis_i18n")
17680 (synopsis "Implementation of the PRECIS framework")
17681 (description
17682 "This module implements the PRECIS Framework as described in RFC 8264,
17683 RFC 8265 and RFC 8266.")
17684 (license license:expat)))
17685
17686 (define-public python-absl-py
17687 (package
17688 (name "python-absl-py")
17689 (version "0.6.1")
17690 (source
17691 (origin
17692 (method url-fetch)
17693 (uri (pypi-uri "absl-py" version))
17694 (sha256
17695 (base32
17696 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17697 (build-system python-build-system)
17698 (propagated-inputs
17699 `(("python-six" ,python-six)))
17700 (home-page "https://github.com/abseil/abseil-py")
17701 (synopsis "Abseil Python common libraries")
17702 (description
17703 "This package provides the Abseil Python Common Libraries, a collection
17704 of Python libraries for building Python applications.")
17705 (license license:asl2.0)))
17706
17707 (define-public python-astor
17708 (package
17709 (name "python-astor")
17710 (version "0.7.1")
17711 (source
17712 (origin
17713 (method url-fetch)
17714 (uri (pypi-uri "astor" version))
17715 (sha256
17716 (base32
17717 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17718 (build-system python-build-system)
17719 ;; FIXME: There are two errors and two test failures.
17720 (arguments `(#:tests? #f))
17721 (home-page "https://github.com/berkerpeksag/astor")
17722 (synopsis "Read and write Python ASTs")
17723 (description "Astor is designed to allow easy manipulation of Python
17724 source via the Abstract Syntax Tree.")
17725 (license license:bsd-3)))
17726
17727 (define-public python2-astor
17728 (package-with-python2 python-astor))
17729
17730 (define-public python-astunparse
17731 (package
17732 (name "python-astunparse")
17733 (version "1.6.2")
17734 (source
17735 (origin
17736 (method url-fetch)
17737 (uri (pypi-uri "astunparse" version))
17738 (sha256
17739 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17740 (build-system python-build-system)
17741 (arguments '(#:tests? #f)) ; there are none
17742 (propagated-inputs
17743 `(("python-six" ,python-six)
17744 ("python-wheel" ,python-wheel)))
17745 (home-page "https://github.com/simonpercivall/astunparse")
17746 (synopsis "AST unparser for Python")
17747 (description "This package provides an AST unparser for Python. It is a
17748 factored out version of @code{unparse} found in the Python source
17749 distribution.")
17750 (license license:bsd-3)))
17751
17752 (define-public python-gast
17753 (package
17754 (name "python-gast")
17755 (version "0.3.3")
17756 (source
17757 (origin
17758 (method url-fetch)
17759 (uri (pypi-uri "gast" version))
17760 (sha256
17761 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17762 (build-system python-build-system)
17763 (propagated-inputs
17764 `(("python-astunparse" ,python-astunparse)))
17765 (home-page "https://pypi.org/project/gast/")
17766 (synopsis "Generic Python AST that abstracts the underlying Python version")
17767 (description
17768 "GAST provides a compatibility layer between the AST of various Python
17769 versions, as produced by @code{ast.parse} from the standard @code{ast}
17770 module.")
17771 (license license:bsd-3)))
17772
17773 (define-public python-wikidata
17774 (package
17775 (name "python-wikidata")
17776 (version "0.6.1")
17777 (source
17778 (origin
17779 (method url-fetch)
17780 (uri (pypi-uri "Wikidata" version))
17781 (sha256
17782 (base32
17783 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17784 (build-system python-build-system)
17785 (propagated-inputs
17786 `(("python-babel" ,python-babel)))
17787 (home-page "https://github.com/dahlia/wikidata")
17788 (synopsis "Wikidata client library")
17789 (description
17790 "This package provides a Python interface to
17791 @url{https://www.wikidata.org/, Wikidata}.")
17792 (properties '((upstream-name . "Wikidata")))
17793 (license license:gpl3+)))
17794
17795 (define-public python-doctest-ignore-unicode
17796 (package
17797 (name "python-doctest-ignore-unicode")
17798 (version "0.1.2")
17799 (source
17800 (origin
17801 (method url-fetch)
17802 (uri (pypi-uri "doctest-ignore-unicode" version))
17803 (sha256
17804 (base32
17805 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17806 (build-system python-build-system)
17807 (native-inputs
17808 `(("python-nose" ,python-nose)))
17809 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17810 (synopsis "Ignore Unicode literal prefixes in doctests")
17811 (description
17812 "This package adds support for a flag to ignore Unicode literal prefixes
17813 in doctests.")
17814 (license license:asl2.0)))
17815
17816 (define-public python-attr
17817 (package
17818 (name "python-attr")
17819 (version "0.3.1")
17820 (source
17821 (origin
17822 (method url-fetch)
17823 (uri (pypi-uri "attr" version))
17824 (sha256
17825 (base32
17826 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17827 (build-system python-build-system)
17828 (home-page "https://github.com/denis-ryzhkov/attr")
17829 (synopsis "Decorator for attributes of target function or class")
17830 (description "Simple decorator to set attributes of target function or
17831 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17832 (license license:expat)))
17833
17834 (define-public python-construct
17835 (package
17836 (name "python-construct")
17837 (version "2.10.56")
17838 (source
17839 (origin
17840 (method url-fetch)
17841 (uri (pypi-uri "construct" version))
17842 (sha256
17843 (base32
17844 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17845 (build-system python-build-system)
17846 (arguments
17847 `(#:tests? #f)) ; No tests exist.
17848 (propagated-inputs
17849 `(("python-extras" ,python-extras)
17850 ("python-arrow" ,python-arrow)
17851 ("python-numpy" ,python-numpy)
17852 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17853 (home-page "https://construct.readthedocs.io")
17854 (synopsis "Declarative and symmetrical parser and builder for binary data")
17855 (description
17856 "This package provides both simple, atomic constructs (such as
17857 integers of various sizes), as well as composite ones which allow you
17858 form hierarchical and sequential structures of increasing complexity.
17859 It features bit and byte granularity, easy debugging and testing, an
17860 easy-to-extend subclass system, and lots of primitive constructs to
17861 make your work easier.")
17862 (license license:expat)))
17863
17864 (define-public python-humanize
17865 (package
17866 (name "python-humanize")
17867 (version "0.5.1")
17868 (source
17869 (origin
17870 (method url-fetch)
17871 (uri (pypi-uri "humanize" version))
17872 (sha256
17873 (base32
17874 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17875 (arguments
17876 '(#:tests? #f)) ; tests not in pypi archive
17877 (build-system python-build-system)
17878 (home-page "https://github.com/jmoiron/humanize")
17879 (synopsis "Print numerical information in a human-readable form")
17880 (description "This package provides a Python module that displays numbers
17881 and dates in \"human readable\" forms. For example, it would display
17882 \"12345591313\" as \"12.3 billion\".")
17883 (license license:expat)))
17884
17885 (define-public python-txaio
17886 (package
17887 (name "python-txaio")
17888 (version "18.8.1")
17889 (source
17890 (origin
17891 (method url-fetch)
17892 (uri (pypi-uri "txaio" version))
17893 (sha256
17894 (base32
17895 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17896 (build-system python-build-system)
17897 (propagated-inputs
17898 `(("python-twisted" ,python-twisted)
17899 ("python-six" ,python-six)))
17900 (home-page "https://github.com/crossbario/txaio")
17901 (synopsis "Compatibility layer between Python asyncio and Twisted")
17902 (description "Txaio provides a compatibility layer between the Python
17903 @code{asyncio} module and @code{Twisted}.")
17904 (license license:expat)))
17905
17906 (define-public python-toolshed
17907 (package
17908 (name "python-toolshed")
17909 (version "0.4.6")
17910 (source
17911 (origin
17912 (method url-fetch)
17913 (uri (pypi-uri "toolshed" version))
17914 (sha256
17915 (base32
17916 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
17917 (build-system python-build-system)
17918 (native-inputs
17919 `(("python-nose" ,python-nose)))
17920 (home-page "https://github.com/brentp/toolshed/")
17921 (synopsis "Collection of modules and functions for working with data")
17922 (description "This is a collection of well-tested, simple modules and
17923 functions that aim to reduce boilerplate when working with data.")
17924 (license license:bsd-2)))
17925
17926 (define-public python-annoy
17927 (package
17928 (name "python-annoy")
17929 (version "1.15.1")
17930 (source
17931 (origin
17932 (method url-fetch)
17933 (uri (pypi-uri "annoy" version))
17934 (sha256
17935 (base32
17936 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
17937 (build-system python-build-system)
17938 (native-inputs
17939 `(("python-nose" ,python-nose)))
17940 (home-page "https://github.com/spotify/annoy/")
17941 (synopsis "Approximate nearest neighbors library")
17942 (description
17943 "Annoy is a C++ library with Python bindings to search for points in
17944 space that are close to a given query point. It also creates large read-only
17945 file-based data structures that are @code{mmap}ped into memory so that many
17946 processes may share the same data.")
17947 (license license:asl2.0)))
17948
17949 (define-public python-pylzma
17950 (package
17951 (name "python-pylzma")
17952 (version "0.5.0")
17953 (source
17954 (origin
17955 (method url-fetch)
17956 (uri (pypi-uri "pylzma" version))
17957 (sha256
17958 (base32
17959 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
17960 (build-system python-build-system)
17961 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
17962 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
17963 (description "This package provides Python bindings for the LZMA library
17964 by Igor Pavlov.")
17965 (license license:lgpl2.1+)))
17966
17967 (define-public python2-pylzma
17968 (package-with-python2 python-pylzma))
17969
17970 (define-public python2-zeroconf
17971 (package
17972 (name "python2-zeroconf")
17973
17974 ;; This is the last version that supports Python 2.x.
17975 (version "0.19.1")
17976 (source
17977 (origin
17978 (method url-fetch)
17979 (uri (pypi-uri "zeroconf" version))
17980 (sha256
17981 (base32
17982 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
17983 (build-system python-build-system)
17984 (arguments
17985 `(#:python ,python-2
17986 #:phases
17987 (modify-phases %standard-phases
17988 (add-after 'unpack 'patch-requires
17989 (lambda* (#:key inputs #:allow-other-keys)
17990 (substitute* "setup.py"
17991 (("enum-compat")
17992 "enum34"))
17993 #t)))))
17994 (native-inputs
17995 `(("python2-six" ,python2-six)
17996 ("python2-enum32" ,python2-enum34)
17997 ("python2-netifaces" ,python2-netifaces)
17998 ("python2-typing" ,python2-typing)))
17999 (home-page "https://github.com/jstasiak/python-zeroconf")
18000 (synopsis "Pure Python mDNS service discovery")
18001 (description
18002 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18003 compatible).")
18004 (license license:lgpl2.1+)))
18005
18006 (define-public python-bsddb3
18007 (package
18008 (name "python-bsddb3")
18009 (version "6.2.6")
18010 (source
18011 (origin
18012 (method url-fetch)
18013 (uri (pypi-uri "bsddb3" version))
18014 (sha256
18015 (base32
18016 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18017 (build-system python-build-system)
18018 (inputs
18019 `(("bdb" ,bdb)))
18020 (arguments
18021 '(#:phases
18022 (modify-phases %standard-phases
18023 (add-after 'unpack 'configure-locations
18024 (lambda* (#:key inputs #:allow-other-keys)
18025 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18026 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18027 #t))
18028 (replace 'check
18029 (lambda _
18030 (invoke "python3" "test3.py" "-v"))))))
18031 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18032 (synopsis "Python bindings for Oracle Berkeley DB")
18033 (description
18034 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18035 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18036 Transaction objects, and each of these is exposed as a Python type in the
18037 bsddb3.db module. The database objects can use various access methods: btree,
18038 hash, recno, and queue. Complete support of Berkeley DB distributed
18039 transactions. Complete support for Berkeley DB Replication Manager.
18040 Complete support for Berkeley DB Base Replication. Support for RPC.")
18041 (license license:bsd-3)))
18042
18043 (define-public python-dbfread
18044 (package
18045 (name "python-dbfread")
18046 (version "2.0.7")
18047 (source (origin
18048 (method url-fetch)
18049 (uri (pypi-uri "dbfread" version))
18050 (sha256
18051 (base32
18052 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18053 (build-system python-build-system)
18054 (native-inputs
18055 `(("python-pytest" ,python-pytest)))
18056 (home-page "https://dbfread.readthedocs.io")
18057 (synopsis "Read DBF Files with Python")
18058 (description
18059 "This library reads DBF files and returns the data as native Python data
18060 types for further processing. It is primarily intended for batch jobs and
18061 one-off scripts.")
18062 (license license:expat)))
18063
18064 (define-public python-cached-property
18065 (package
18066 (name "python-cached-property")
18067 (version "1.5.1")
18068 (source
18069 (origin
18070 (method url-fetch)
18071 (uri (pypi-uri "cached-property" version))
18072 (sha256
18073 (base32
18074 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18075 (build-system python-build-system)
18076 (arguments
18077 `(#:phases
18078 (modify-phases %standard-phases
18079 ;; https://github.com/pydanny/cached-property/issues/131
18080 ;; recent versions of freezegun break one test
18081 (add-after 'unpack 'disable-broken-test
18082 (lambda _
18083 (substitute* "tests/test_cached_property.py"
18084 (("def test_threads_ttl_expiry\\(self\\)" m)
18085 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18086 " " m)))
18087 #t)))))
18088 (native-inputs
18089 `(("python-freezegun" ,python-freezegun)))
18090 (home-page
18091 "https://github.com/pydanny/cached-property")
18092 (synopsis
18093 "Decorator for caching properties in classes")
18094 (description
18095 "This package provides a decorator which makes caching
18096 time-or-computationally-expensive properties quick and easy and works in Python
18097 2 or 3.")
18098 (license license:bsd-3)))
18099
18100 (define-public python-folium
18101 (package
18102 (name "python-folium")
18103 (version "0.10.1")
18104 (source
18105 (origin
18106 (method url-fetch)
18107 (uri (pypi-uri "folium" version))
18108 (sha256
18109 (base32
18110 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
18111 (build-system python-build-system)
18112 (propagated-inputs
18113 `(("python-branca" ,python-branca)
18114 ("python-jinja2" ,python-jinja2)
18115 ("python-numpy" ,python-numpy)
18116 ("python-requests" ,python-requests)))
18117 (native-inputs
18118 `(("python-pytest" ,python-pytest)))
18119 (home-page "https://github.com/python-visualization/folium")
18120 (synopsis "Make beautiful maps with Leaflet.js & Python")
18121 (description "@code{folium} makes it easy to visualize data that’s been
18122 manipulated in Python on an interactive leaflet map. It enables both the
18123 binding of data to a map for @code{choropleth} visualizations as well as
18124 passing rich vector/raster/HTML visualizations as markers on the map.
18125
18126 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18127 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18128 supports Image, Video, GeoJSON and TopoJSON overlays.")
18129 (license license:expat)))
18130
18131 (define-public jube
18132 (package
18133 ;; This is a command-line tool, so no "python-" prefix.
18134 (name "jube")
18135 (version "2.2.2")
18136 (source (origin
18137 (method url-fetch)
18138 (uri (string-append
18139 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18140 version))
18141 (sha256
18142 (base32
18143 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18144 (file-name (string-append "jube-" version ".tar.gz"))))
18145 (build-system python-build-system)
18146 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18147 (synopsis "Benchmarking environment")
18148 (description
18149 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18150 benchmarked application, benchmark data is stored in a format that allows JUBE
18151 to deduct the desired information. This data can be parsed by automatic pre-
18152 and post-processing scripts that draw information and store it more densely
18153 for manual interpretation.")
18154 (license license:gpl3+)))
18155
18156 (define-public python-pyroutelib3
18157 (package
18158 (name "python-pyroutelib3")
18159 (version "1.3.post1")
18160 (source
18161 (origin
18162 (method url-fetch)
18163 (uri (pypi-uri "pyroutelib3" version))
18164 (sha256
18165 (base32
18166 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18167 (build-system python-build-system)
18168 (propagated-inputs
18169 `(("python-dateutil" ,python-dateutil)))
18170 (home-page "https://github.com/MKuranowski/pyroutelib3")
18171 (synopsis "Library for simple routing on OSM data")
18172 (description "Library for simple routing on OSM data")
18173 (license license:gpl3+)))
18174
18175 (define-public python-bibtexparser
18176 (package
18177 (name "python-bibtexparser")
18178 (version "1.1.0")
18179 (source
18180 (origin
18181 (method url-fetch)
18182 (uri (pypi-uri "bibtexparser" version))
18183 (sha256
18184 (base32
18185 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18186 (build-system python-build-system)
18187 (propagated-inputs
18188 `(("python-pyparsing" ,python-pyparsing)))
18189 (native-inputs
18190 `(("python-future" ,python-future)))
18191 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18192 (synopsis "Python library to parse BibTeX files")
18193 (description "BibtexParser is a Python library to parse BibTeX files.")
18194 (license (list license:bsd-3 license:lgpl3))))
18195
18196 (define-public python-distro
18197 (package
18198 (name "python-distro")
18199 (version "1.4.0")
18200 (source
18201 (origin
18202 (method url-fetch)
18203 (uri (pypi-uri "distro" version))
18204 (sha256
18205 (base32
18206 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18207 (build-system python-build-system)
18208 (native-inputs
18209 `(("python-pytest" ,python-pytest)))
18210 (home-page "https://github.com/nir0s/distro")
18211 (synopsis
18212 "OS platform information API")
18213 (description
18214 "@code{distro} provides information about the OS distribution it runs on,
18215 such as a reliable machine-readable ID, or version information.
18216
18217 It is the recommended replacement for Python's original
18218 `platform.linux_distribution` function (which will be removed in Python 3.8).
18219 @code{distro} also provides a command-line interface to output the platform
18220 information in various formats.")
18221 (license license:asl2.0)))
18222
18223 (define-public python-cairosvg
18224 (package
18225 (name "python-cairosvg")
18226 (version "2.4.2")
18227 (source
18228 (origin
18229 (method url-fetch)
18230 (uri (pypi-uri "CairoSVG" version))
18231 (sha256
18232 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18233 (build-system python-build-system)
18234 (arguments
18235 `(#:phases
18236 (modify-phases %standard-phases
18237 (replace 'check
18238 (lambda _ (invoke "pytest"))))))
18239 (propagated-inputs
18240 `(("python-cairocffi" ,python-cairocffi)
18241 ("python-cssselect2" ,python-cssselect2)
18242 ("python-defusedxml" ,python-defusedxml)
18243 ("python-pillow" ,python-pillow)
18244 ("python-tinycss2" ,python-tinycss2)))
18245 (native-inputs
18246 `(("python-pytest-flake8" ,python-pytest-flake8)
18247 ("python-pytest-isort" ,python-pytest-isort)
18248 ("python-pytest-runner" ,python-pytest-runner)))
18249 (home-page "https://cairosvg.org/")
18250 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18251 (description "CairoSVG is a SVG converter based on Cairo. It can export
18252 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18253 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18254 parsed, the result is drawn to a Cairo surface that can be exported to
18255 qvarious formats: PDF, PostScript, PNG and even SVG.")
18256 (license license:lgpl3+)))
18257
18258 (define-public python-pyphen
18259 (package
18260 (name "python-pyphen")
18261 (version "0.9.5")
18262 (source
18263 (origin
18264 (method url-fetch)
18265 (uri (pypi-uri "Pyphen" version))
18266 (sha256
18267 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18268 (build-system python-build-system)
18269 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18270 ;; embedded set provided by upstream - like Debian does.
18271 (home-page "https://github.com/Kozea/Pyphen")
18272 (synopsis "Pure Python module to hyphenate text")
18273 (description "Pyphen is a pure Python module to hyphenate text using
18274 existing Hunspell hyphenation dictionaries.")
18275 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18276
18277 (define-public python-intelhex
18278 (package
18279 (name "python-intelhex")
18280 (version "2.2.1")
18281 (source
18282 (origin
18283 (method url-fetch)
18284 (uri (pypi-uri "intelhex" version))
18285 (sha256
18286 (base32
18287 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18288 (build-system python-build-system)
18289 (arguments '(#:tests? #f)) ;issue with version
18290 (home-page "https://pypi.org/project/IntelHex/")
18291 (synopsis "Python library for Intel HEX files manipulations")
18292 (description "The Intel HEX file format is widely used in microprocessors
18293 and microcontrollers area (embedded systems etc.) as the de facto standard for
18294 representation of code to be programmed into microelectronic devices. This
18295 package provides an intelhex Python library to read, write, create from
18296 scratch and manipulate data from Intel HEX file format. It also includes
18297 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18298 converters and more, those based on the library itself.")
18299 (license license:bsd-3)))
18300
18301 (define-public python-pykwalify
18302 (package
18303 (name "python-pykwalify")
18304 (version "1.7.0")
18305 (source
18306 (origin
18307 (method url-fetch)
18308 (uri (pypi-uri "pykwalify" version))
18309 (sha256
18310 (base32
18311 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18312 (build-system python-build-system)
18313 (arguments '(#:tests? #f)) ;missing dependencies
18314 (propagated-inputs
18315 `(("python-dateutil" ,python-dateutil)
18316 ("python-docopt" ,python-docopt)
18317 ("python-pyyaml" ,python-pyyaml)))
18318 (home-page "https://github.com/grokzen/pykwalify")
18319 (synopsis
18320 "Python lib/cli for JSON/YAML schema validation")
18321 (description
18322 "This package provides a parser, schema validator, and data binding tool
18323 for YAML and JSON.")
18324 (license license:expat)))
18325
18326 (define-public python-dbusmock
18327 (package
18328 (name "python-dbusmock")
18329 (version "0.18.3")
18330 (source
18331 (origin
18332 (method url-fetch)
18333 (uri (pypi-uri "python-dbusmock" version))
18334 (sha256
18335 (base32
18336 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18337 (build-system python-build-system)
18338 (arguments
18339 '(#:phases
18340 (modify-phases %standard-phases
18341 (add-after 'unpack 'patch-shell-path
18342 (lambda _
18343 (substitute* "tests/test_code.py"
18344 (("/bin/bash") (which "bash")))
18345 #t)))))
18346 (native-inputs
18347 `(;; For tests.
18348 ("dbus" ,dbus) ; for dbus-daemon
18349 ("python-nose" ,python-nose)
18350 ("which" ,which)))
18351 (propagated-inputs
18352 `(("python-dbus" ,python-dbus)
18353 ("python-pygobject" ,python-pygobject)))
18354 (home-page "https://github.com/martinpitt/python-dbusmock")
18355 (synopsis "Python library for mock D-Bus objects")
18356 (description "python-dbusmock allows for the easy creation of mock objects on
18357 D-Bus. This is useful for writing tests for software which talks to D-Bus
18358 services such as upower, systemd, logind, gnome-session or others, and it is
18359 hard (or impossible without root privileges) to set the state of the real
18360 services to what you expect in your tests.")
18361 (license license:lgpl3+)))
18362
18363 (define-public python-ujson
18364 (package
18365 (name "python-ujson")
18366 (version "2.0.3")
18367 (source
18368 (origin
18369 (method url-fetch)
18370 (uri (pypi-uri "ujson" version))
18371 (sha256
18372 (base32
18373 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18374 (modules '((guix build utils)))
18375 (snippet
18376 '(begin (delete-file-recursively "deps") #t))))
18377 (build-system python-build-system)
18378 (arguments
18379 `(#:phases
18380 (modify-phases %standard-phases
18381 (add-after 'unpack 'link-to-system-double-conversion
18382 (lambda* (#:key inputs #:allow-other-keys)
18383 (let ((d-c (assoc-ref inputs "double-conversion")))
18384 (substitute* "setup.py"
18385 (("./deps/double-conversion/double-conversion\"")
18386 (string-append d-c "/include/double-conversion\""))
18387 (("-lstdc++" stdc)
18388 (string-append "-L" d-c "/lib\","
18389 " \"-ldouble-conversion\","
18390 " \"" stdc)))
18391 #t)))
18392 (replace 'check
18393 (lambda* (#:key inputs outputs #:allow-other-keys)
18394 (add-installed-pythonpath inputs outputs)
18395 (invoke "pytest"))))))
18396 (native-inputs
18397 `(("double-conversion" ,double-conversion)
18398 ("python-setuptools-scm" ,python-setuptools-scm)
18399 ("python-pytest" ,python-pytest)))
18400 (home-page "https://github.com/ultrajson/ultrajson")
18401 (synopsis "Ultra fast JSON encoder and decoder for Python")
18402 (description
18403 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18404 bindings for Python 3.")
18405 (license license:bsd-3)))
18406
18407 (define-public python-ujson-1
18408 (package
18409 (inherit python-ujson)
18410 (version "1.35")
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "ujson" version))
18415 (sha256
18416 (base32
18417 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18418 (arguments
18419 '(#:phases %standard-phases))
18420 (native-inputs '())
18421 (home-page "http://www.esn.me")
18422 (description
18423 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18424 bindings for Python 2.5+ and 3.")))
18425
18426 (define-public python2-ujson-1
18427 (package-with-python2 python-ujson-1))
18428
18429 (define-public python-iocapture
18430 ;; The latest release is more than a year older than this commit.
18431 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18432 (revision "1"))
18433 (package
18434 (name "python-iocapture")
18435 (version "0.1.2")
18436 (source
18437 (origin
18438 (method git-fetch)
18439 (uri (git-reference
18440 (url "https://github.com/oinume/iocapture.git")
18441 (commit commit)))
18442 (file-name (git-file-name name version))
18443 (sha256
18444 (base32
18445 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18446 (build-system python-build-system)
18447 (arguments
18448 `(#:phases
18449 (modify-phases %standard-phases
18450 (delete 'check)
18451 (add-after 'install 'check
18452 (lambda* (#:key inputs outputs #:allow-other-keys)
18453 (add-installed-pythonpath inputs outputs)
18454 (invoke "py.test" "-v" "tests")
18455 #t)))))
18456 (propagated-inputs
18457 `(("python-flexmock" ,python-flexmock)
18458 ("python-pytest" ,python-pytest)
18459 ("python-pytest-cov" ,python-pytest-cov)
18460 ("python-six" ,python-six)))
18461 (home-page "https://github.com/oinume/iocapture")
18462 (synopsis "Python capturing tool for stdout and stderr")
18463 (description
18464 "This package helps you to capture the standard out (stdout) and the
18465 standard error channel (stderr) in your program.")
18466 (license license:expat))))
18467
18468 (define-public python-argh
18469 ;; There are 21 commits since the latest release containing important
18470 ;; improvements.
18471 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18472 (revision "1"))
18473 (package
18474 (name "python-argh")
18475 (version (git-version "0.26.2" revision commit))
18476 (source
18477 (origin
18478 (method git-fetch)
18479 (uri (git-reference
18480 (url "https://github.com/neithere/argh.git")
18481 (commit commit)))
18482 (file-name (git-file-name name version))
18483 (sha256
18484 (base32
18485 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18486 (build-system python-build-system)
18487 (propagated-inputs
18488 `(("python-iocapture" ,python-iocapture)
18489 ("python-mock" ,python-mock)
18490 ("python-pytest" ,python-pytest)
18491 ("python-pytest-cov" ,python-pytest-cov)
18492 ("python-pytest-xdist" ,python-pytest-xdist)
18493 ("python-tox" ,python-tox)))
18494 (home-page "https://github.com/neithere/argh/")
18495 (synopsis "Argparse wrapper with natural syntax")
18496 (description
18497 "python-argh is a small library that provides several layers of
18498 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18499 always possible to declare a command with the highest possible (and least
18500 flexible) layer and then tune the behaviour with any of the lower layers
18501 including the native API of @code{python-argparse}.")
18502 (license license:lgpl3+))))
18503
18504 (define-public python-ppft
18505 (package
18506 (name "python-ppft")
18507 (version "1.6.6.1")
18508 (source
18509 (origin
18510 (method url-fetch)
18511 (uri (pypi-uri "ppft" version))
18512 (sha256
18513 (base32
18514 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18515 (build-system python-build-system)
18516 (arguments '(#:tests? #f)) ; there are none
18517 (propagated-inputs
18518 `(("python-six" ,python-six)))
18519 (home-page "https://pypi.org/project/ppft/")
18520 (synopsis "Fork of Parallel Python")
18521 (description
18522 "This package is a fork of Parallel Python. The Parallel Python
18523 module (@code{pp}) provides an easy and efficient way to create
18524 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18525 computers and clusters. It features cross-platform portability and dynamic
18526 load balancing.")
18527 (license license:bsd-3)))
18528
18529 (define-public python-pox
18530 (package
18531 (name "python-pox")
18532 (version "0.2.7")
18533 (source
18534 (origin
18535 (method url-fetch)
18536 (uri (pypi-uri "pox" version))
18537 (sha256
18538 (base32
18539 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18540 (build-system python-build-system)
18541 (arguments
18542 `(#:phases
18543 (modify-phases %standard-phases
18544 (replace 'check
18545 (lambda _
18546 (mkdir-p "/tmp/guix")
18547 (setenv "SHELL" "bash")
18548 (setenv "USERNAME" "guix")
18549 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18550 (invoke "py.test" "-vv")
18551 #t)))))
18552 (native-inputs
18553 `(("python-pytest" ,python-pytest)
18554 ("which" ,which)))
18555 (home-page "https://pypi.org/project/pox/")
18556 (synopsis "Python utilities for filesystem exploration and automated builds")
18557 (description
18558 "Pox provides a collection of utilities for navigating and manipulating
18559 filesystems. This module is designed to facilitate some of the low level
18560 operating system interactions that are useful when exploring a filesystem on a
18561 remote host. Pox provides Python equivalents of several shell commands such
18562 as @command{which} and @command{find}. These commands allow automated
18563 discovery of what has been installed on an operating system, and where the
18564 essential tools are located.")
18565 (license license:bsd-3)))
18566
18567 (define-public python-pathos
18568 (package
18569 (name "python-pathos")
18570 (version "0.2.5")
18571 (source
18572 (origin
18573 (method url-fetch)
18574 (uri (pypi-uri "pathos" version))
18575 (sha256
18576 (base32
18577 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18578 (build-system python-build-system)
18579 (arguments
18580 '(#:phases
18581 (modify-phases %standard-phases
18582 (replace 'check
18583 (lambda _
18584 (setenv "PYTHONPATH"
18585 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18586 (invoke "python" "./tests/__main__.py"))))))
18587 (propagated-inputs
18588 `(("python-dill" ,python-dill)
18589 ("python-multiprocess" ,python-multiprocess)
18590 ("python-pox" ,python-pox)
18591 ("python-ppft" ,python-ppft)))
18592 (native-inputs
18593 `(("python-pytest" ,python-pytest)))
18594 (home-page "https://pypi.org/project/pathos/")
18595 (synopsis
18596 "Parallel graph management and execution in heterogeneous computing")
18597 (description
18598 "Python-pathos is a framework for heterogenous computing. It provides a
18599 consistent high-level interface for configuring and launching parallel
18600 computations across heterogenous resources. Python-pathos provides configurable
18601 launchers for parallel and distributed computing, where each launcher contains
18602 the syntactic logic to configure and launch jobs in an execution environment.")
18603 (license license:bsd-3)))
18604
18605 (define-public python-flit
18606 (package
18607 (name "python-flit")
18608 (version "2.1.0")
18609 (source
18610 (origin
18611 (method url-fetch)
18612 (uri (pypi-uri "flit" version))
18613 (sha256
18614 (base32
18615 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18616 (build-system python-build-system)
18617 (arguments
18618 `(#:tests? #f)) ; XXX: Check requires network access.
18619 (home-page "https://flit.readthedocs.io/")
18620 (synopsis
18621 "Simple packaging tool for simple packages")
18622 (description
18623 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18624 packages a single importable module or package at a time, using the import
18625 name as the name on PyPI. All subpackages and data files within a package
18626 are included automatically.")
18627 (license license:bsd-3)))
18628
18629 (define-public python-pathtools
18630 (package
18631 (name "python-pathtools")
18632 (version "0.1.2")
18633 (source
18634 (origin
18635 (method url-fetch)
18636 (uri (pypi-uri "pathtools" version))
18637 (sha256
18638 (base32
18639 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18640 (build-system python-build-system)
18641 (home-page
18642 "https://github.com/gorakhargosh/pathtools")
18643 (synopsis "Path utilities for Python")
18644 (description "Pattern matching and various utilities for file systems
18645 paths.")
18646 (license license:expat)))
18647
18648 (define-public python-fastentrypoints
18649 (package
18650 (name "python-fastentrypoints")
18651 (version "0.12")
18652 (source
18653 (origin
18654 (method url-fetch)
18655 (uri (pypi-uri "fastentrypoints" version))
18656 (sha256
18657 (base32
18658 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18659 (build-system python-build-system)
18660 (home-page
18661 "https://github.com/ninjaaron/fast-entry_points")
18662 (synopsis
18663 "Makes entry_points specified in setup.py load more quickly")
18664 (description
18665 "Using entry_points in your setup.py makes scripts that start really
18666 slowly because it imports pkg_resources. This package allows such setup
18667 scripts to load entry points more quickly.")
18668 (license license:bsd-3)))
18669
18670 (define-public python-funcparserlib
18671 (package
18672 (name "python-funcparserlib")
18673 (version "0.3.6")
18674 (source
18675 (origin
18676 (method url-fetch)
18677 (uri (pypi-uri "funcparserlib" version))
18678 (sha256
18679 (base32
18680 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18681 (native-inputs
18682 `(("python-tox" ,python-tox)))
18683 (arguments
18684 `(#:phases
18685 (modify-phases %standard-phases
18686 (replace 'check
18687 (lambda _
18688 (invoke "tox"))))))
18689 (build-system python-build-system)
18690 (home-page
18691 "https://github.com/vlasovskikh/funcparserlib")
18692 (synopsis
18693 "Recursive descent parsing library based on functional combinators")
18694 (description
18695 "This package is a recursive descent parsing library for Python based on
18696 functional combinators. Parser combinators are just higher-order functions
18697 that take parsers as their arguments and return them as result values.")
18698 (license license:expat)))
18699
18700 (define-public python-speg
18701 (package
18702 (name "python-speg")
18703 (version "0.3")
18704 (source
18705 (origin
18706 (method url-fetch)
18707 (uri (pypi-uri "speg" version ".zip"))
18708 (sha256
18709 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18710 (arguments
18711 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18712 (native-inputs
18713 `(("unzip" ,unzip)))
18714 (build-system python-build-system)
18715 (home-page "https://github.com/avakar/speg")
18716 (synopsis "PEG-based parser interpreter with memoization")
18717 (description "This package is a PEG-based parser and interpreter with
18718 memoization.")
18719 (license license:expat)))
18720
18721 (define-public python-cson
18722 (package
18723 (name "python-cson")
18724 (version "0.8")
18725 (source
18726 (origin
18727 (method url-fetch)
18728 (uri (pypi-uri "cson" version))
18729 (sha256
18730 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18731 (build-system python-build-system)
18732 (propagated-inputs
18733 `(("python-speg" ,python-speg)))
18734 (home-page "https://github.com/avakar/pycson")
18735 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18736 (description "This package is a parser for Coffeescript Object
18737 Notation (CSON).")
18738 (license license:expat)))
18739
18740 (define-public python-asynctest
18741 (package
18742 (name "python-asynctest")
18743 (version "0.13.0")
18744 (source
18745 (origin
18746 (method url-fetch)
18747 (uri (pypi-uri "asynctest" version))
18748 (sha256
18749 (base32
18750 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18751 (build-system python-build-system)
18752 (arguments
18753 '(#:phases
18754 (modify-phases %standard-phases
18755 (replace 'check
18756 (lambda _
18757 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18758 (add-after 'unpack 'disable-tests
18759 (lambda* _
18760 (substitute* "test/test_selector.py"
18761 ;; XXX: This test fails for unknown reason inside the build
18762 ;; environment.
18763 (("def test_events_watched_outside_test_are_ignored")
18764 "@unittest.skip('disabled by guix')
18765 def test_events_watched_outside_test_are_ignored")))))))
18766 (home-page "https://github.com/Martiusweb/asynctest")
18767 (synopsis "Extension of unittest for testing asyncio libraries")
18768 (description
18769 "The package asynctest is built on top of the standard unittest module
18770 and cuts down boilerplate code when testing libraries for asyncio.")
18771 (license license:asl2.0)))
18772
18773 (define-public python-aionotify
18774 (package
18775 (name "python-aionotify")
18776 (version "0.2.0")
18777 (source
18778 (origin
18779 ;; Source tarball on PyPi lacks tests
18780 (method git-fetch)
18781 (uri (git-reference
18782 (url "https://github.com/rbarrois/aionotify")
18783 (commit (string-append "v" version))))
18784 (file-name (git-file-name name version))
18785 (sha256
18786 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18787 (build-system python-build-system)
18788 (native-inputs `(("python-asynctest" ,python-asynctest)))
18789 (home-page "https://github.com/rbarrois/aionotify")
18790 (synopsis "Asyncio-powered inotify library")
18791 (description
18792 "@code{aionotify} is a simple, asyncio-based inotify library.")
18793 (license license:bsd-3)))
18794
18795 (define-public python-forbiddenfruit
18796 (package
18797 (name "python-forbiddenfruit")
18798 (version "0.1.3")
18799 (source
18800 (origin
18801 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18802 (method git-fetch)
18803 (uri (git-reference
18804 (url "https://github.com/clarete/forbiddenfruit")
18805 (commit version)))
18806 (file-name (git-file-name name version))
18807 (sha256
18808 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18809 (build-system python-build-system)
18810 (arguments
18811 '(#:phases
18812 (modify-phases %standard-phases
18813 (replace 'check
18814 (lambda _
18815 (invoke "make" "SKIP_DEPS=1"))))))
18816 (native-inputs
18817 `(("python-nose" ,python-nose)
18818 ("python-coverage" ,python-coverage)))
18819 (home-page "https://github.com/clarete/forbiddenfruit")
18820 (synopsis "Patch python built-in objects")
18821 (description "This project allows Python code to extend built-in types.")
18822 (license (list license:gpl3+ license:expat))))
18823
18824 (define-public python-shouldbe
18825 (package
18826 (name "python-shouldbe")
18827 (version "0.1.2")
18828 (source
18829 (origin
18830 (method url-fetch)
18831 (uri (pypi-uri "shouldbe" version))
18832 (sha256
18833 (base32
18834 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
18835 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
18836 (build-system python-build-system)
18837 (propagated-inputs
18838 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18839 (native-inputs
18840 `(("python-nose" ,python-nose)))
18841 (home-page "https://github.com/directxman12/should_be")
18842 (synopsis "Python Assertion Helpers inspired by Shouldly")
18843 (description
18844 "Python Assertion Helpers inspired by Shouldly.")
18845 (license license:isc)))
18846
18847 (define-public python-k5test
18848 (package
18849 (name "python-k5test")
18850 (version "0.9.2")
18851 (source
18852 (origin
18853 (method url-fetch)
18854 (uri (pypi-uri "k5test" version))
18855 (sha256
18856 (base32
18857 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18858 (build-system python-build-system)
18859 (propagated-inputs
18860 `(("python-six" ,python-six)
18861 ;; `which`, `kadmin.local` binaries called inside library
18862 ("which" ,which)
18863 ("mit-krb5" ,mit-krb5)))
18864 (native-inputs `(("mit-krb5" ,mit-krb5)))
18865 (arguments
18866 '(#:phases
18867 (modify-phases %standard-phases
18868 (add-after 'unpack 'patch-paths
18869 (lambda* _
18870 (substitute* "k5test/realm.py"
18871 (("'kadmin_local'") "'kadmin.local'")))))))
18872 (home-page "https://github.com/pythongssapi/k5test")
18873 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18874 (description
18875 "@code{k5test} is a library for setting up self-contained Kerberos 5
18876 environments, and running Python unit tests inside those environments. It is
18877 based on the file of the same name found alongside the MIT Kerberos 5 unit
18878 tests.")
18879 (license license:isc)))
18880
18881 (define-public python-gssapi
18882 (package
18883 (name "python-gssapi")
18884 (version "1.6.5")
18885 (source
18886 (origin
18887 (method url-fetch)
18888 (uri (pypi-uri "gssapi" version))
18889 (sha256
18890 (base32
18891 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
18892 (build-system python-build-system)
18893 (propagated-inputs
18894 `(("python-decorator" ,python-decorator)
18895 ("python-six" ,python-six)))
18896 (inputs
18897 `(("mit-krb5" ,mit-krb5)))
18898 ;; for tests
18899 (native-inputs
18900 `(("python-shouldbe" ,python-shouldbe)
18901 ("python-parameterized" ,python-parameterized)
18902 ("python-k5test" ,python-k5test)
18903 ("python-nose" ,python-nose)))
18904 (home-page "https://github.com/pythongssapi/python-gssapi")
18905 (synopsis "Python GSSAPI Wrapper")
18906 (description
18907 "Python-GSSAPI provides both low-level and high level wrappers around the
18908 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
18909 also be useable with other GSSAPI mechanisms.")
18910 (license license:isc)))
18911
18912 (define-public python-check-manifest
18913 (package
18914 (name "python-check-manifest")
18915 (version "0.37")
18916 (source
18917 (origin
18918 (method url-fetch)
18919 (uri (pypi-uri "check-manifest" version))
18920 (sha256
18921 (base32
18922 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
18923 (build-system python-build-system)
18924 (native-inputs
18925 `(("python-mock" ,python-mock)
18926 ("git" ,git)))
18927 (home-page "https://github.com/mgedmin/check-manifest")
18928 (synopsis "Check MANIFEST.in in a Python source package for completeness")
18929 (description "Python package can include a MANIFEST.in file to help with
18930 sending package files to the Python Package Index. This package checks that
18931 file to ensure it completely and accurately describes your project.")
18932 (license license:expat)))
18933
18934 (define-public python-android-stringslib
18935 (package
18936 (name "python-android-stringslib")
18937 (version "0.1.2")
18938 (source
18939 (origin
18940 (method git-fetch)
18941 (uri (git-reference
18942 (url "https://framagit.org/tyreunom/python-android-strings-lib")
18943 (commit (string-append "v" version))))
18944 (file-name (git-file-name name version))
18945 (sha256
18946 (base32
18947 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
18948 (build-system python-build-system)
18949 (arguments
18950 `(#:tests? #f))
18951 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
18952 (synopsis "Android strings.xml support")
18953 (description "Android Strings Lib provides support for android's strings.xml
18954 files. These files are used to translate strings in android apps.")
18955 (license license:expat)))
18956
18957 (define-public python-watchdog
18958 (package
18959 (name "python-watchdog")
18960 (version "0.9.0")
18961 (source
18962 (origin
18963 (method url-fetch)
18964 (uri (pypi-uri "watchdog" version))
18965 (sha256
18966 (base32
18967 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
18968 (build-system python-build-system)
18969 (arguments
18970 `(#:phases
18971 (modify-phases %standard-phases
18972 (add-before 'check 'remove-failing
18973 (lambda _
18974 (delete-file "tests/test_inotify_buffer.py")
18975 (delete-file "tests/test_snapshot_diff.py")
18976 #t)))))
18977 (propagated-inputs
18978 `(("python-argh" ,python-argh)
18979 ("python-pathtools" ,python-pathtools)
18980 ("python-pyyaml" ,python-pyyaml)))
18981 (native-inputs
18982 `(("python-pytest-cov" ,python-pytest-cov)
18983 ("python-pytest-timeout" ,python-pytest-timeout)))
18984 (home-page "https://github.com/gorakhargosh/watchdog")
18985 (synopsis "Filesystem events monitoring")
18986 (description "This package provides a way to monitor filesystem events
18987 such as a file modification and trigger an action. This is similar to inotify,
18988 but portable.")
18989 (license license:asl2.0)))
18990
18991 (define-public python-wget
18992 (package
18993 (name "python-wget")
18994 (version "3.2")
18995 (source
18996 (origin
18997 (method url-fetch)
18998 (uri (pypi-uri "wget" version ".zip"))
18999 (sha256
19000 (base32
19001 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19002 (build-system python-build-system)
19003 (native-inputs `(("unzip" ,unzip)))
19004 (home-page "https://bitbucket.org/techtonik/python-wget/")
19005 (synopsis "Pure Python download utility")
19006 (description "The python-wget library provides an API to download files
19007 with features similar to the @command{wget} utility.")
19008 (license license:unlicense)))
19009
19010 (define-public offlate
19011 (package
19012 (name "offlate")
19013 (version "0.5")
19014 (source
19015 (origin
19016 (method git-fetch)
19017 (uri (git-reference
19018 (url "https://framagit.org/tyreunom/offlate")
19019 (commit version)))
19020 (file-name (git-file-name name version))
19021 (sha256
19022 (base32
19023 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19024 (build-system python-build-system)
19025 (arguments
19026 ;; No tests
19027 `(#:tests? #f))
19028 (propagated-inputs
19029 `(("python-android-stringslib" ,python-android-stringslib)
19030 ("python-dateutil" ,python-dateutil)
19031 ("python-gitlab" ,python-gitlab)
19032 ("python-lxml" ,python-lxml)
19033 ("python-polib" ,python-polib)
19034 ("python-pyenchant" ,python-pyenchant)
19035 ("python-pygit2" ,python-pygit2)
19036 ("python-pygithub" ,python-pygithub)
19037 ("python-pyqt" ,python-pyqt)
19038 ("python-requests" ,python-requests)
19039 ("python-ruamel.yaml" ,python-ruamel.yaml)
19040 ("python-translation-finder" ,python-translation-finder)
19041 ("python-watchdog" ,python-watchdog)))
19042 (native-inputs
19043 `(("qttools" ,qttools)))
19044 (home-page "https://framagit.org/tyreunom/offlate")
19045 (synopsis "Offline translation interface for online translation tools")
19046 (description "Offlate offers a unified interface for different translation
19047 file formats, as well as many different online translation platforms. You can
19048 use it to get work from online platforms, specialized such as the Translation
19049 Project, or not such a gitlab instance when your upstream doesn't use any
19050 dedicated platform. The tool proposes a unified interface for any format and
19051 an upload option to send your work back to the platform.")
19052 (license license:gpl3+)))
19053
19054 (define-public python-titlecase
19055 (package
19056 (name "python-titlecase")
19057 (version "0.12.0")
19058 (source
19059 (origin
19060 (method url-fetch)
19061 (uri (pypi-uri "titlecase" version))
19062 (sha256
19063 (base32
19064 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19065 (build-system python-build-system)
19066 (native-inputs
19067 `(("python-nose" ,python-nose)))
19068 (home-page "https://github.com/ppannuto/python-titlecase")
19069 (synopsis "Capitalize strings similar to book titles")
19070 (description
19071 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19072 It capitalizes (predominantly English) strings in a way that is similar to
19073 book titles, using the New York Times Manual of Style to leave certain words
19074 lowercase.")
19075 (license license:expat)))
19076
19077 (define-public python-pypng
19078 (package
19079 (name "python-pypng")
19080 (version "0.0.20")
19081 (source
19082 (origin
19083 (method url-fetch)
19084 (uri (pypi-uri "pypng" version))
19085 (sha256
19086 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19087 (build-system python-build-system)
19088 (home-page "https://github.com/drj11/pypng")
19089 (synopsis "Pure Python PNG image encoder/decoder")
19090 (description
19091 "The PyPNG module implements support for PNG images. It reads and writes
19092 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19093 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19094 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19095 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19096 A number of optional chunks can be specified (when writing) and
19097 understood (when reading): tRNS, bKGD, gAMA.
19098
19099 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19100 aim at being a replacement or competitor. Its strength lies in fine-grained
19101 extensive support of PNG features. It can also read and write Netpbm PAM
19102 files, with a focus on its use as an intermediate format for implementing
19103 custom PNG processing.")
19104 (license license:expat)))
19105
19106 (define-public python-fuzzywuzzy
19107 (package
19108 (name "python-fuzzywuzzy")
19109 (version "0.18.0")
19110 (source
19111 (origin
19112 (method url-fetch)
19113 (uri (pypi-uri "fuzzywuzzy" version))
19114 (sha256
19115 (base32
19116 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19117 (build-system python-build-system)
19118 (native-inputs
19119 `(("python-hypothesis" ,python-hypothesis)
19120 ("python-pycodestyle" ,python-pycodestyle)
19121 ("python-pytest" ,python-pytest)))
19122 (propagated-inputs
19123 `(("python-levenshtein" ,python-levenshtein)))
19124 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19125 (synopsis "Fuzzy string matching in Python")
19126 (description "Approximate string matching using
19127 @emph{Levenshtein Distance} to calculate the differences between
19128 sequences.")
19129 (license license:gpl2)))
19130
19131 (define-public python2-fuzzywuzzy
19132 (package-with-python2 python-fuzzywuzzy))
19133
19134 (define-public python-block-tracing
19135 (package
19136 (name "python-block-tracing")
19137 (version "1.0.1")
19138 (source
19139 (origin
19140 (method url-fetch)
19141 (uri (pypi-uri "block_tracing" version))
19142 (sha256
19143 (base32
19144 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19145 (build-system python-build-system)
19146 (arguments '(#:tests? #f)) ; no tests
19147 (home-page "https://github.com/rianhunter/block_tracing")
19148 (synopsis "Protect process memory")
19149 (description
19150 "@code{block_tracing} is a tiny Python library that can be used to
19151 prevent debuggers and other applications from inspecting the memory within
19152 your process.")
19153 (license license:expat)))
19154
19155 (define-public python-gcovr
19156 (package
19157 (name "python-gcovr")
19158 (version "4.2")
19159 (source
19160 (origin
19161 (method url-fetch)
19162 (uri (pypi-uri "gcovr" version))
19163 (sha256
19164 (base32
19165 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19166 (build-system python-build-system)
19167 (propagated-inputs
19168 `(("python-lxml" ,python-lxml)
19169 ("python-jinja2" ,python-jinja2)))
19170 (home-page "https://gcovr.com/")
19171 (synopsis "Utility for generating code coverage results")
19172 (description
19173 "Gcovr provides a utility for managing the use of the GNU gcov
19174 utility and generating summarized code coverage results. It is inspired
19175 by the Python coverage.py package, which provides a similar utility for
19176 Python.")
19177 (license license:bsd-3)))
19178
19179 (define-public python-owslib
19180 (package
19181 (name "python-owslib")
19182 (version "0.19.2")
19183 (source
19184 (origin
19185 (method url-fetch)
19186 (uri (pypi-uri "OWSLib" version))
19187 (sha256
19188 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19189 (build-system python-build-system)
19190 (arguments
19191 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19192 (synopsis "Interface for Open Geospatial Consortium web service")
19193 (description
19194 "OWSLib is a Python package for client programming with Open Geospatial
19195 Consortium (OGC) web service (hence OWS) interface standards, and their related
19196 content models.")
19197 (home-page "https://geopython.github.io/OWSLib/")
19198 (license license:bsd-3)))
19199
19200 (define-public python-docusign-esign
19201 (package
19202 (name "python-docusign-esign")
19203 (version "3.1.0")
19204 (source (origin
19205 (method url-fetch)
19206 (uri (pypi-uri "docusign_esign" version))
19207 (sha256
19208 (base32
19209 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19210 (build-system python-build-system)
19211 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19212 (arguments `(#:tests? #f))
19213 (propagated-inputs
19214 `(("python-certifi", python-certifi)
19215 ("python-six", python-six)
19216 ("python-dateutil", python-dateutil)
19217 ("python-urllib3", python-urllib3)
19218 ("python-pyjwt", python-pyjwt)
19219 ("python-cryptography", python-cryptography)
19220 ("python-nose", python-nose)))
19221 (synopsis "DocuSign Python Client")
19222 (description "The Official DocuSign Python Client Library used to interact
19223 with the eSign REST API. Send, sign, and approve documents using this client.")
19224 (home-page "https://www.docusign.com/devcenter")
19225 (license license:expat)))
19226
19227 (define-public python-xattr
19228 (package
19229 (name "python-xattr")
19230 (version "0.9.7")
19231 (source
19232 (origin
19233 (method url-fetch)
19234 (uri (pypi-uri "xattr" version))
19235 (sha256
19236 (base32
19237 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19238 (build-system python-build-system)
19239 (propagated-inputs
19240 `(("python-cffi" ,python-cffi)))
19241 (home-page "https://github.com/xattr/xattr")
19242 (synopsis
19243 "Python wrapper for extended filesystem attributes")
19244 (description "This package provides a Python wrapper for using extended
19245 filesystem attributes. Extended attributes extend the basic attributes of files
19246 and directories in the file system. They are stored as name:data pairs
19247 associated with file system objects (files, directories, symlinks, etc).")
19248 (license license:expat)))
19249
19250 (define-public python-json-logger
19251 (package
19252 (name "python-json-logger")
19253 (version "0.1.11")
19254 (source
19255 (origin
19256 (method url-fetch)
19257 (uri (pypi-uri "python-json-logger" version))
19258 (sha256
19259 (base32
19260 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19261 (build-system python-build-system)
19262 (home-page
19263 "https://github.com/madzak/python-json-logger")
19264 (synopsis "JSON log formatter in Python")
19265 (description "This library allows standard Python logging to output log data
19266 as JSON objects. With JSON we can make our logs more readable by machines and
19267 we can stop writing custom parsers for syslog-type records.")
19268 (license license:bsd-3)))
19269
19270 (define-public python-daiquiri
19271 (package
19272 (name "python-daiquiri")
19273 (version "2.1.1")
19274 (source
19275 (origin
19276 (method url-fetch)
19277 (uri (pypi-uri "daiquiri" version))
19278 (sha256
19279 (base32
19280 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19281 (build-system python-build-system)
19282 (propagated-inputs
19283 `(("python-json-logger" ,python-json-logger)))
19284 (native-inputs
19285 `(("python-mock" ,python-mock)
19286 ("python-pytest" ,python-pytest)
19287 ("python-setuptools-scm" ,python-setuptools-scm)
19288 ("python-six" ,python-six)))
19289 (home-page "https://github.com/jd/daiquiri")
19290 (synopsis
19291 "Library to configure Python logging easily")
19292 (description "The daiquiri library provides an easy way to configure
19293 logging in Python. It also provides some custom formatters and handlers.")
19294 (license license:asl2.0)))
19295
19296 (define-public python-pifpaf
19297 (package
19298 (name "python-pifpaf")
19299 (version "2.4.0")
19300 (source
19301 (origin
19302 (method url-fetch)
19303 (uri (pypi-uri "pifpaf" version))
19304 (sha256
19305 (base32
19306 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19307 (build-system python-build-system)
19308 (arguments
19309 `(#:tests? #f))
19310 (propagated-inputs
19311 `(("python-click" ,python-click)
19312 ("python-daiquiri" ,python-daiquiri)
19313 ("python-fixtures" ,python-fixtures)
19314 ("python-jinja2" ,python-jinja2)
19315 ("python-pbr" ,python-pbr)
19316 ("python-psutil" ,python-psutil)
19317 ("python-six" ,python-six)
19318 ("python-xattr" ,python-xattr)))
19319 (native-inputs
19320 `(("python-mock" ,python-mock)
19321 ("python-os-testr" ,python-os-testr)
19322 ("python-requests" ,python-requests)
19323 ("python-testrepository" ,python-testrepository)
19324 ("python-testtools" ,python-testtools)))
19325 (home-page "https://github.com/jd/pifpaf")
19326 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19327 (description "Pifpaf is a suite of fixtures and a command-line tool that
19328 starts and stops daemons for a quick throw-away usage. This is typically
19329 useful when needing these daemons to run integration testing. It originally
19330 evolved from its precursor @code{overtest}.")
19331 (license license:asl2.0)))
19332
19333 (define-public python-pytest-check-links
19334 (package
19335 (name "python-pytest-check-links")
19336 (version "0.3.0")
19337 (source
19338 (origin
19339 (method url-fetch)
19340 ;; URI uses underscores
19341 (uri (pypi-uri "pytest_check_links" version))
19342 (sha256
19343 (base32
19344 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19345 (build-system python-build-system)
19346 (propagated-inputs
19347 `(("python-docutils" ,python-docutils)
19348 ("python-html5lib" ,python-html5lib)
19349 ("python-nbconvert" ,python-nbconvert)
19350 ("python-nbformat" ,python-nbformat)
19351 ("python-pytest" ,python-pytest)
19352 ("python-six" ,python-six)))
19353 (native-inputs
19354 `(("python-pbr-minimal" ,python-pbr-minimal)))
19355 (home-page "https://github.com/minrk/pytest-check-links")
19356 (synopsis "Check links in files")
19357 (description "This package provides a pytest plugin that checks URLs for
19358 HTML-containing files.")
19359 (license license:bsd-3)))
19360
19361 (define-public python-json5
19362 (package
19363 (name "python-json5")
19364 (version "0.8.5")
19365 (source
19366 (origin
19367 ;; sample.json5 is missing from PyPi source tarball
19368 (method git-fetch)
19369 (uri (git-reference
19370 (url "https://github.com/dpranke/pyjson5.git")
19371 (commit (string-append "v" version))))
19372 (file-name (git-file-name name version))
19373 (sha256
19374 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19375 (build-system python-build-system)
19376 (home-page "https://github.com/dpranke/pyjson5")
19377 (synopsis
19378 "Python implementation of the JSON5 data format")
19379 (description
19380 "JSON5 extends the JSON data interchange format to make it slightly more
19381 usable as a configuration language. This Python package implements parsing and
19382 dumping of JSON5 data structures.")
19383 (license license:asl2.0)))
19384
19385 (define-public python-frozendict
19386 (package
19387 (name "python-frozendict")
19388 (version "1.2")
19389 (source
19390 (origin
19391 (method url-fetch)
19392 (uri (pypi-uri "frozendict" version))
19393 (sha256
19394 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19395 (build-system python-build-system)
19396 (home-page "https://github.com/slezica/python-frozendict")
19397 (synopsis "Simple immutable mapping for Python")
19398 (description
19399 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19400 implements the complete mapping interface. It can be used as a drop-in
19401 replacement for dictionaries where immutability is desired.")
19402 (license license:expat)))
19403
19404 (define-public python-unpaddedbase64
19405 (package
19406 (name "python-unpaddedbase64")
19407 (version "1.1.0")
19408 (source
19409 (origin
19410 (method git-fetch)
19411 (uri (git-reference
19412 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19413 (commit (string-append "v" version))))
19414 (file-name (git-file-name name version))
19415 (sha256
19416 (base32
19417 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19418 (build-system python-build-system)
19419 (home-page "https://pypi.org/project/unpaddedbase64/")
19420 (synopsis "Encode and decode Base64 without “=” padding")
19421 (description
19422 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19423 using “=” characters. However this conveys no benefit so many protocols
19424 choose to use Base64 without the “=” padding.")
19425 (license license:asl2.0)))
19426
19427 (define-public python-canonicaljson
19428 (package
19429 (name "python-canonicaljson")
19430 (version "1.1.4")
19431 (source
19432 (origin
19433 (method url-fetch)
19434 (uri (pypi-uri "canonicaljson" version))
19435 (sha256
19436 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19437 (build-system python-build-system)
19438 (propagated-inputs
19439 `(("python-six" ,python-six)
19440 ("python-frozendict" ,python-frozendict)
19441 ("python-simplejson" ,python-simplejson)))
19442 (home-page "https://github.com/matrix-org/python-canonicaljson")
19443 (synopsis "Canonical JSON")
19444 (description
19445 "Deterministically encode JSON.
19446
19447 @itemize
19448 @item Encodes objects and arrays as RFC 7159 JSON.
19449 @item Sorts object keys so that you get the same result each time.
19450 @item Has no insignificant whitespace to make the output as small as possible.
19451 @item Escapes only the characters that must be escaped, U+0000 to
19452 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19453 @item Uses the shortest escape sequence for each escaped character.
19454 @item Encodes the JSON as UTF-8.
19455 @item Can encode frozendict immutable dictionaries.
19456 @end itemize")
19457 (license license:asl2.0)))
19458
19459 (define-public python-signedjson
19460 (package
19461 (name "python-signedjson")
19462 (version "1.1.1")
19463 (source
19464 (origin
19465 (method url-fetch)
19466 (uri (pypi-uri "signedjson" version))
19467 (sha256
19468 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19469 (build-system python-build-system)
19470 (propagated-inputs
19471 `(("python-canonicaljson" ,python-canonicaljson)
19472 ("python-importlib-metadata" ,python-importlib-metadata)
19473 ("python-pynacl" ,python-pynacl)
19474 ("python-typing-extensions" ,python-typing-extensions)
19475 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19476 (native-inputs
19477 `(("python-setuptools-scm" ,python-setuptools-scm)))
19478 (home-page "https://github.com/matrix-org/python-signedjson")
19479 (synopsis "Sign JSON objects with ED25519 signatures")
19480 (description
19481 "Sign JSON objects with ED25519 signatures.
19482
19483 @itemize
19484 @item More than one entity can sign the same object.
19485 @item Each entity can sign the object with more than one key making it easier to
19486 rotate keys
19487 @item ED25519 can be replaced with a different algorithm.
19488 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19489 key.
19490 @end itemize")
19491 (license license:asl2.0)))
19492
19493 (define-public python-daemonize
19494 (package
19495 (name "python-daemonize")
19496 (version "2.5.0")
19497 (source
19498 (origin
19499 (method url-fetch)
19500 (uri (pypi-uri "daemonize" version))
19501 (sha256
19502 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19503 (build-system python-build-system)
19504 (home-page "https://github.com/thesharp/daemonize")
19505 (synopsis "Library for writing system daemons in Python")
19506 (description "Daemonize is a library for writing system daemons in Python.")
19507 (license license:expat)))
19508
19509 (define-public python-pymacaroons
19510 (package
19511 (name "python-pymacaroons")
19512 (version "0.13.0")
19513 (source
19514 (origin
19515 (method url-fetch)
19516 (uri (pypi-uri "pymacaroons" version))
19517 (sha256
19518 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19519 (build-system python-build-system)
19520 (propagated-inputs
19521 `(("python-six" ,python-six)
19522 ("python-pynacl" ,python-pynacl)))
19523 (home-page "https://github.com/ecordell/pymacaroons")
19524 (synopsis "Python Macaroon Library")
19525 (description
19526 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19527 tokens, macaroons embed caveats that define specific authorization
19528 requirements for the target service, the service that issued the root macaroon
19529 and which is capable of verifying the integrity of macaroons it receives.
19530
19531 Macaroons allow for delegation and attenuation of authorization. They are
19532 simple and fast to verify, and decouple authorization policy from the
19533 enforcement of that policy.")
19534 (license license:expat)))
19535
19536 (define-public python-ldap3
19537 (package
19538 (name "python-ldap3")
19539 (version "2.7")
19540 (home-page "https://github.com/cannatag/ldap3")
19541 (source
19542 (origin
19543 (method git-fetch)
19544 (uri (git-reference (url home-page)
19545 (commit (string-append "v" version))))
19546 (file-name (git-file-name name version))
19547 (sha256
19548 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19549 (build-system python-build-system)
19550 (arguments
19551 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19552 #:phases (modify-phases %standard-phases
19553 (replace 'check
19554 (lambda* (#:key tests? #:allow-other-keys)
19555 (when tests?
19556 (invoke "nosetests" "-s" "test"))
19557 #t)))))
19558 (native-inputs
19559 `(("python-nose" ,python-nose)))
19560 (propagated-inputs
19561 `(("python-gssapi" ,python-gssapi)
19562 ("python-pyasn1" ,python-pyasn1)))
19563 (synopsis "Python LDAP client")
19564 (description
19565 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19566 library.")
19567 (license license:lgpl3+)))
19568
19569 (define-public python-boltons
19570 (package
19571 (name "python-boltons")
19572 (version "20.0.0")
19573 (source
19574 (origin
19575 (method url-fetch)
19576 (uri (pypi-uri "boltons" version))
19577 (sha256
19578 (base32
19579 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19580 (build-system python-build-system)
19581 (home-page "https://github.com/mahmoud/boltons")
19582 (synopsis "Extensions to the Python standard library")
19583 (description
19584 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19585 as — and yet conspicuously missing from — the standard library, including:
19586
19587 @itemize
19588 @item Atomic file saving, bolted on with fileutils
19589 @item A highly-optimized OrderedMultiDict, in dictutils
19590 @item Two types of PriorityQueue, in queueutils
19591 @item Chunked and windowed iteration, in iterutils
19592 @item Recursive data structure iteration and merging, with iterutils.remap
19593 @item Exponential backoff functionality, including jitter, through
19594 iterutils.backoff
19595 @item A full-featured TracebackInfo type, for representing stack traces, in
19596 tbutils
19597 @end itemize")
19598 (license license:bsd-3)))
19599
19600 (define-public python-eliot
19601 (package
19602 (name "python-eliot")
19603 (version "1.12.0")
19604 (source
19605 (origin
19606 (method url-fetch)
19607 (uri (pypi-uri "eliot" version))
19608 (sha256
19609 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19610 (build-system python-build-system)
19611 (arguments
19612 `(#:phases
19613 (modify-phases %standard-phases
19614 (add-after 'unpack 'remove-journald-support
19615 (lambda _
19616 (for-each delete-file
19617 '("eliot/tests/test_journald.py"
19618 "eliot/journald.py"))
19619 #t))
19620 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19621 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19622 ;; be installed and these tests should pass.
19623 (lambda _
19624 (delete-file "eliot/tests/test_prettyprint.py")
19625 #t)))))
19626 (propagated-inputs
19627 `(("python-boltons" ,python-boltons)
19628 ("python-pyrsistent" ,python-pyrsistent)
19629 ("python-six" ,python-six)
19630 ("python-zope-interface" ,python-zope-interface)))
19631 (native-inputs
19632 `(("python-black" ,python-black)
19633 ("python-coverage" ,python-coverage)
19634 ("python-dask" ,python-dask)
19635 ("python-flake8" ,python-flake8)
19636 ("python-hypothesis" ,python-hypothesis)
19637 ("python-pytest" ,python-pytest)
19638 ("python-setuptools" ,python-setuptools)
19639 ("python-sphinx" ,python-sphinx)
19640 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19641 ("python-testtools" ,python-testtools)
19642 ("python-twine" ,python-twine)
19643 ("python-twisted" ,python-twisted)))
19644 (home-page "https://github.com/itamarst/eliot/")
19645 (synopsis "Eliot: the logging system that tells you why it happened")
19646 (description
19647 "@dfn{eliot} is a Python logging system that outputs causal chains of
19648 actions: actions can spawn other actions, and eventually they either succeed
19649 or fail. The resulting logs tell you the story of what your software did: what
19650 happened, and what caused it.")
19651 (license license:asl2.0)))
19652
19653 (define-public python-pem
19654 (package
19655 (name "python-pem")
19656 (version "20.1.0")
19657 (source
19658 (origin
19659 (method url-fetch)
19660 (uri (pypi-uri "pem" version))
19661 (sha256
19662 (base32
19663 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19664 (build-system python-build-system)
19665 (native-inputs
19666 `(("python-certifi" ,python-certifi)
19667 ("python-coverage" ,python-coverage)
19668 ("python-pretend" ,python-pretend)
19669 ("python-pyopenssl" ,python-pyopenssl)
19670 ("python-pytest" ,python-pytest)
19671 ("python-sphinx" ,python-sphinx)
19672 ("python-twisted" ,python-twisted)))
19673 (home-page "https://pem.readthedocs.io/")
19674 (synopsis "Easy PEM file parsing in Python")
19675 (description
19676 "This package provides a Python module for parsing and splitting PEM files.")
19677 (license license:expat)))
19678
19679 (define-public python-txsni
19680 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19681 ;; Python and OpenSSL.
19682 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19683 (revision "0"))
19684 (package
19685 (name "python-txsni")
19686 (version (git-version "0.1.9" revision commit))
19687 (home-page "https://github.com/glyph/txsni")
19688 (source
19689 (origin
19690 (method git-fetch)
19691 (uri (git-reference (url home-page) (commit commit)))
19692 (file-name (git-file-name name version))
19693 (sha256
19694 (base32
19695 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19696 (build-system python-build-system)
19697 (propagated-inputs
19698 `(("python-pyopenssl" ,python-pyopenssl)
19699 ("python-service-identity" ,python-service-identity)
19700 ("python-twisted" ,python-twisted)))
19701 (synopsis "Run TLS servers with Twisted")
19702 (description
19703 "This package provides an easy-to-use SNI endpoint for use
19704 with the Twisted web framework.")
19705 (license license:expat))))
19706
19707 (define-public python-txacme
19708 (package
19709 (name "python-txacme")
19710 (version "0.9.2")
19711 (source
19712 (origin
19713 (method url-fetch)
19714 (uri (pypi-uri "txacme" version))
19715 (sha256
19716 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19717 (build-system python-build-system)
19718 (propagated-inputs
19719 `(("python-acme" ,python-acme)
19720 ("python-attrs" ,python-attrs)
19721 ("python-eliot" ,python-eliot)
19722 ("python-josepy" ,python-josepy)
19723 ("python-pem" ,python-pem)
19724 ("python-treq" ,python-treq)
19725 ("python-twisted" ,python-twisted)
19726 ("python-txsni" ,python-txsni)))
19727 (native-inputs
19728 `(("python-fixtures" ,python-fixtures)
19729 ("python-hypothesis" ,python-hypothesis)
19730 ("python-mock" ,python-mock)
19731 ("python-service-identity"
19732 ,python-service-identity)
19733 ("python-testrepository" ,python-testrepository)
19734 ("python-testscenarios" ,python-testscenarios)
19735 ("python-testtools" ,python-testtools)))
19736 (home-page "https://github.com/twisted/txacme")
19737 (synopsis "Twisted implexmentation of the ACME protocol")
19738 (description
19739 "ACME is Automatic Certificate Management Environment, a protocol that
19740 allows clients and certificate authorities to automate verification and
19741 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19742 Certificate Authority.
19743
19744 txacme is an implementation of the protocol for Twisted, the event-driven
19745 networking engine for Python.")
19746 (license license:expat)))
19747
19748 (define-public python-pysaml2
19749 (package
19750 (name "python-pysaml2")
19751 (version "5.0.0")
19752 (source
19753 (origin
19754 (method url-fetch)
19755 (uri (pypi-uri "pysaml2" version))
19756 (sha256
19757 (base32
19758 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19759 (build-system python-build-system)
19760 (propagated-inputs
19761 `(("python-cryptography" ,python-cryptography)
19762 ("python-dateutil" ,python-dateutil)
19763 ("python-defusedxml" ,python-defusedxml)
19764 ("python-pyopenssl" ,python-pyopenssl)
19765 ("python-pytz" ,python-pytz)
19766 ("python-requests" ,python-requests)
19767 ("python-six" ,python-six)))
19768 (home-page "https://idpy.org")
19769 (synopsis "Python implementation of SAML Version 2 Standard")
19770 (description
19771 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19772 It contains all necessary pieces for building a SAML2 service provider or
19773 an identity provider. The distribution contains examples of both.
19774
19775 This package was originally written to work in a WSGI environment, but
19776 there are extensions that allow you to use it with other frameworks.")
19777 (license license:asl2.0)))
19778
19779 (define-public python-click-plugins
19780 (package
19781 (name "python-click-plugins")
19782 (version "1.1.1")
19783 (source
19784 (origin
19785 (method url-fetch)
19786 (uri (pypi-uri "click-plugins" version))
19787 (sha256
19788 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19789 (build-system python-build-system)
19790 (native-inputs
19791 `(("python-pytest" ,python-pytest)))
19792 (propagated-inputs
19793 `(("python-click" ,python-click)))
19794 (synopsis "Extension for Click to register external CLI commands")
19795 (description "This package provides n extension module for Click to
19796 register external CLI commands via setuptools entry-points.")
19797 (home-page "https://github.com/click-contrib/click-plugins")
19798 (license license:bsd-3)))
19799
19800 (define-public python-diceware
19801 (package
19802 (name "python-diceware")
19803 (version "0.9.6")
19804 (source
19805 (origin
19806 (method url-fetch)
19807 (uri (pypi-uri "diceware" version))
19808 (sha256
19809 (base32
19810 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19811 (build-system python-build-system)
19812 (native-inputs
19813 `(("python-coverage" ,python-coverage)
19814 ("python-pytest" ,python-pytest)
19815 ("python-pytest-runner" ,python-pytest-runner)))
19816 (home-page "https://github.com/ulif/diceware/")
19817 (synopsis "Generates memorable passphrases")
19818 (description "This package generates passphrases by concatenating words
19819 randomly picked from wordlists. It supports several sources of
19820 randomness (including real life dice) and different wordlists (including
19821 cryptographically signed ones).")
19822 (license license:gpl3+)))
19823
19824 (define-public pyzo
19825 (package
19826 (name "pyzo")
19827 (version "4.10.2")
19828 (source
19829 (origin
19830 (method url-fetch)
19831 (uri (pypi-uri "pyzo" version))
19832 (sha256
19833 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
19834 (build-system python-build-system)
19835 (arguments
19836 `(#:phases
19837 (modify-phases %standard-phases
19838 (add-before 'check 'fix-home-directory
19839 (lambda _
19840 ;; Tests fail with "Permission denied: '/homeless-shelter'".
19841 (setenv "HOME" "/tmp")
19842 #t)))
19843 ;; Tests fail with "Uncaught Python exception: invalid literal for
19844 ;; int() with base 10: 'test'".
19845 #:tests? #f))
19846 (propagated-inputs
19847 `(("python-pyqt" ,python-pyqt)))
19848 (home-page "https://pyzo.org")
19849 (synopsis
19850 "Python IDE for scientific computing")
19851 (description
19852 "Pyzo is a Python IDE focused on interactivity and introspection,
19853 which makes it very suitable for scientific computing. Its practical
19854 design is aimed at simplicity and efficiency.
19855
19856 It consists of two main components, the editor and the shell, and uses
19857 a set of pluggable tools to help the programmer in various ways. Some
19858 example tools are source structure, project manager, interactive help,
19859 workspace...")
19860 (license license:bsd-2)))
19861
19862 (define-public python-osc
19863 (package
19864 (name "python-osc")
19865 (version "1.7.4")
19866 (source
19867 (origin
19868 (method url-fetch)
19869 (uri (pypi-uri "python-osc" version))
19870 (sha256
19871 (base32
19872 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
19873 (build-system python-build-system)
19874 (home-page "https://github.com/attwad/python-osc")
19875 (synopsis "Open Sound Control server and client implementations")
19876 (description
19877 "@code{python-osc} is a pure Python library with no external
19878 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
19879 Open Sound Control 1.0} specification.")
19880 (license license:unlicense)))
19881
19882 (define-public python-voluptuous
19883 (package
19884 (name "python-voluptuous")
19885 (version "0.11.7")
19886 (source
19887 (origin
19888 (method url-fetch)
19889 (uri (pypi-uri "voluptuous" version))
19890 (sha256
19891 (base32
19892 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
19893 (build-system python-build-system)
19894 (native-inputs
19895 `(("python-nose" ,python-nose)))
19896 (home-page "https://github.com/alecthomas/voluptuous")
19897 (synopsis "Python data validation library")
19898 (description
19899 "Voluptuous is a Python data validation library. It is primarily
19900 intended for validating data coming into Python as JSON, YAML, etc.")
19901 (license license:bsd-3)))
19902
19903 (define-public python-cmd2
19904 (package
19905 (name "python-cmd2")
19906 (version "1.0.2")
19907 (source
19908 (origin
19909 (method url-fetch)
19910 (uri (pypi-uri "cmd2" version))
19911 (sha256
19912 (base32
19913 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
19914 (build-system python-build-system)
19915 (propagated-inputs
19916 `(("python-attrs" ,python-attrs)
19917 ("python-colorama" ,python-colorama)
19918 ("python-pyperclip" ,python-pyperclip)
19919 ("python-wcwidth" ,python-wcwidth)))
19920 (native-inputs
19921 `(("python-codecov" ,python-codecov)
19922 ("python-coverage" ,python-coverage)
19923 ("python-doc8" ,python-doc8)
19924 ("python-flake8" ,python-flake8)
19925 ("python-invoke" ,python-invoke)
19926 ("python-mock" ,python-mock)
19927 ("python-pytest" ,python-pytest)
19928 ("python-pytest-cov" ,python-pytest-cov)
19929 ("python-pytest-mock" ,python-pytest-mock)
19930 ("python-setuptools-scm" ,python-setuptools-scm)
19931 ("python-sphinx" ,python-sphinx)
19932 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
19933 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19934 ("python-tox" ,python-tox)
19935 ("python-twine" ,python-twine)
19936 ("which" ,which)))
19937 (home-page "https://github.com/python-cmd2/cmd2")
19938 (synopsis "Tool for building interactive command line applications")
19939 (description
19940 "Cmd2 is a tool for building interactive command line applications in
19941 Python. Its goal is to make it quick and easy for developers to build
19942 feature-rich and user-friendly interactive command line applications. It
19943 provides a simple API which is an extension of Python's built-in @code{cmd}
19944 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
19945 make your life easier and eliminates much of the boilerplate code which would
19946 be necessary when using @code{cmd}.")
19947 (license license:expat)))
19948
19949 (define-public python-pytidylib
19950 (package
19951 (name "python-pytidylib")
19952 (version "0.3.2")
19953 (source (origin
19954 (method url-fetch)
19955 (uri (pypi-uri "pytidylib" version))
19956 (sha256
19957 (base32
19958 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
19959 (build-system python-build-system)
19960 (arguments
19961 '(#:phases
19962 (modify-phases %standard-phases
19963 (add-before 'build 'qualify-libtidy
19964 (lambda* (#:key inputs #:allow-other-keys)
19965 (let ((libtidy (string-append (assoc-ref inputs "tidy")
19966 "/lib/libtidy.so")))
19967 (substitute* "tidylib/tidy.py"
19968 (("ctypes\\.util\\.find_library\\('tidy'\\)")
19969 (format #f "'~a'" libtidy)))
19970 #t))))))
19971 (inputs `(("tidy" ,tidy)))
19972 (home-page "https://github.com/countergram/pytidylib")
19973 (synopsis "Python wrapper for HTML Tidy library")
19974 (description
19975 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
19976 allows you, from Python code, to “fix” invalid (X)HTML markup.")
19977 (license license:expat)))
19978
19979 (define-public python2-pytidylib
19980 (package-with-python2 python-pytidylib))
19981
19982 (define-public python-mujson
19983 (package
19984 (name "python-mujson")
19985 (version "1.4")
19986 (source
19987 (origin
19988 (method url-fetch)
19989 (uri (pypi-uri "mujson" version))
19990 (sha256
19991 (base32
19992 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
19993 (build-system python-build-system)
19994 (home-page "https://github.com/mattgiles/mujson")
19995 (synopsis "Use the fastest JSON functions available at import time")
19996 (description "This packages selects the fastest JSON functions available
19997 at import time.")
19998 (license license:expat)))