gnu: python-orderedmultidict: Update to 1.0.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016, 2020 Christopher Allan Webber <cwebber@dustycloud.org>
12 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
13 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
14 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
15 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
16 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
17 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017 Kyle Meyer <kyle@kyleam.com>
19 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
20 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
21 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
22 ;;; Copyright © 2016, 2018, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
23 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
24 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
25 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
26 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
27 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
28 ;;; Copyright © 2016 David Craven <david@craven.ch>
29 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
32 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
33 ;;; Copyright © 2016, 2017, 2018, 2020 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
35 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
36 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
37 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
38 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
39 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
40 ;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
41 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
42 ;;; Copyright © 2017, 2020 Roel Janssen <roel@gnu.org>
43 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
44 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
45 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
46 ;;; Copyright © 2017, 2019 Brendan Tildesley <mail@brendan.scot>
47 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
48 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
49 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
50 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
51 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
52 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
53 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
54 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
55 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
56 ;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
58 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
59 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
60 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
61 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
62 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
63 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
64 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
81 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
82 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
83 ;;;
84 ;;; This file is part of GNU Guix.
85 ;;;
86 ;;; GNU Guix is free software; you can redistribute it and/or modify it
87 ;;; under the terms of the GNU General Public License as published by
88 ;;; the Free Software Foundation; either version 3 of the License, or (at
89 ;;; your option) any later version.
90 ;;;
91 ;;; GNU Guix is distributed in the hope that it will be useful, but
92 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
93 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
94 ;;; GNU General Public License for more details.
95 ;;;
96 ;;; You should have received a copy of the GNU General Public License
97 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
98
99 (define-module (gnu packages python-xyz)
100 #:use-module ((guix licenses) #:prefix license:)
101 #:use-module (gnu packages)
102 #:use-module (gnu packages algebra)
103 #:use-module (gnu packages adns)
104 #:use-module (gnu packages attr)
105 #:use-module (gnu packages backup)
106 #:use-module (gnu packages bash)
107 #:use-module (gnu packages check)
108 #:use-module (gnu packages compression)
109 #:use-module (gnu packages crypto)
110 #:use-module (gnu packages databases)
111 #:use-module (gnu packages dbm)
112 #:use-module (gnu packages enchant)
113 #:use-module (gnu packages file)
114 #:use-module (gnu packages fontutils)
115 #:use-module (gnu packages gcc)
116 #:use-module (gnu packages geo)
117 #:use-module (gnu packages ghostscript)
118 #:use-module (gnu packages gl)
119 #:use-module (gnu packages glib)
120 #:use-module (gnu packages gnome)
121 #:use-module (gnu packages graphviz)
122 #:use-module (gnu packages graphics)
123 #:use-module (gnu packages gsasl)
124 #:use-module (gnu packages gstreamer)
125 #:use-module (gnu packages gtk)
126 #:use-module (gnu packages icu4c)
127 #:use-module (gnu packages image)
128 #:use-module (gnu packages imagemagick)
129 #:use-module (gnu packages kerberos)
130 #:use-module (gnu packages libevent)
131 #:use-module (gnu packages libffi)
132 #:use-module (gnu packages linux)
133 #:use-module (gnu packages llvm)
134 #:use-module (gnu packages man)
135 #:use-module (gnu packages maths)
136 #:use-module (gnu packages monitoring)
137 #:use-module (gnu packages multiprecision)
138 #:use-module (gnu packages networking)
139 #:use-module (gnu packages ncurses)
140 #:use-module (gnu packages openstack)
141 #:use-module (gnu packages pcre)
142 #:use-module (gnu packages perl)
143 #:use-module (gnu packages photo)
144 #:use-module (gnu packages pkg-config)
145 #:use-module (gnu packages python)
146 #:use-module (gnu packages python-check)
147 #:use-module (gnu packages python-compression)
148 #:use-module (gnu packages python-crypto)
149 #:use-module (gnu packages python-science)
150 #:use-module (gnu packages python-web)
151 #:use-module (gnu packages qt)
152 #:use-module (gnu packages readline)
153 #:use-module (gnu packages sdl)
154 #:use-module (gnu packages search)
155 #:use-module (gnu packages shells)
156 #:use-module (gnu packages sphinx)
157 #:use-module (gnu packages ssh)
158 #:use-module (gnu packages terminals)
159 #:use-module (gnu packages tex)
160 #:use-module (gnu packages texinfo)
161 #:use-module (gnu packages time)
162 #:use-module (gnu packages tls)
163 #:use-module (gnu packages version-control)
164 #:use-module (gnu packages video)
165 #:use-module (gnu packages web)
166 #:use-module (gnu packages base)
167 #:use-module (gnu packages xml)
168 #:use-module (gnu packages xorg)
169 #:use-module (gnu packages xdisorg)
170 #:use-module (gnu packages tcl)
171 #:use-module (gnu packages bdw-gc)
172 #:use-module (gnu packages serialization)
173 #:use-module (guix packages)
174 #:use-module (guix download)
175 #:use-module (guix git-download)
176 #:use-module (guix hg-download)
177 #:use-module (guix utils)
178 #:use-module (guix build-system gnu)
179 #:use-module (guix build-system cmake)
180 #:use-module (guix build-system python)
181 #:use-module (guix build-system trivial)
182 #:use-module (srfi srfi-1)
183 #:use-module (srfi srfi-26))
184
185 (define-public python-tenacity
186 (package
187 (name "python-tenacity")
188 (version "6.1.0")
189 (source (origin
190 (method url-fetch)
191 (uri (pypi-uri "tenacity" version))
192 (sha256
193 (base32
194 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
195 (build-system python-build-system)
196 (native-inputs
197 `(("python-setuptools-scm" ,python-setuptools-scm)
198 ("python-sphinx" ,python-sphinx)
199 ("python-tornado" ,python-tornado)
200 ("python-pytest" ,python-pytest)))
201 (propagated-inputs
202 `(("python-six" ,python-six)))
203 (arguments
204 `(#:phases (modify-phases %standard-phases
205 (replace 'check
206 (lambda _
207 (invoke "pytest")
208 #t)))))
209 (home-page "https://github.com/jd/tenacity")
210 (synopsis "Retrying library for python")
211 (description "Tenacity is a general-purpose python library to simplify the
212 task of adding retry behavior to just about anything.")
213 (license license:asl2.0)))
214
215 (define-public python-colorlog
216 (package
217 (name "python-colorlog")
218 (version "4.1.0")
219 (source (origin
220 (method url-fetch)
221 (uri (pypi-uri "colorlog" version))
222 (sha256
223 (base32
224 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
225 (build-system python-build-system)
226 (native-inputs
227 `(("python-pytest" ,python-pytest)))
228 (arguments
229 `(#:phases (modify-phases %standard-phases
230 (replace 'check
231 (lambda _
232 ;; Extend PYTHONPATH so the built package will be found.
233 (setenv "PYTHONPATH"
234 (string-append (getcwd) "/build/lib:"
235 (getenv "PYTHONPATH")))
236 (invoke "pytest" "-p" "no:logging")
237 #t)))))
238 (home-page "https://github.com/borntyping/python-colorlog")
239 (synopsis "Log formatting with colors for python")
240 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
241 with Python's logging module that outputs records using terminal colors.")
242 (license license:expat)))
243
244 (define-public python-pyprind
245 (package
246 (name "python-pyprind")
247 (version "2.11.2")
248 (source (origin
249 (method url-fetch)
250 (uri (pypi-uri "PyPrind" version))
251 (sha256
252 (base32
253 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
254 (build-system python-build-system)
255 (propagated-inputs
256 `(("python-psutil" ,python-psutil)))
257 (home-page "https://github.com/rasbt/pyprind")
258 (synopsis "Python Progress Bar and Percent Indicator Utility")
259 (description "The PyPrind (Python Progress Indicator) module provides a
260 progress bar and a percentage indicator object that let you track the progress
261 of a loop structure or other iterative computation.")
262 (license license:bsd-3)))
263
264 (define-public python-gphoto2
265 (package
266 (name "python-gphoto2")
267 (version "2.2.1")
268 (source (origin
269 (method url-fetch)
270 (uri (pypi-uri "gphoto2" version))
271 (sha256
272 (base32
273 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
274 (build-system python-build-system)
275 (native-inputs
276 `(("pkg-config" ,pkg-config)))
277 (inputs
278 `(("libgphoto2" ,libgphoto2)))
279 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
280 (synopsis "Python interface to libgphoto2")
281 (description "@code{python-gphoto2} is a comprehensive Python interface
282 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
283 automatically generate the interface code.")
284 (license license:gpl3+)))
285
286 (define-public python-colour
287 (package
288 (name "python-colour")
289 (version "0.1.5")
290 (source (origin
291 (method url-fetch)
292 (uri (pypi-uri "colour" version))
293 (sha256
294 (base32
295 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
296 (build-system python-build-system)
297 (native-inputs
298 `(("python-d2to1" ,python-d2to1)))
299 (home-page "https://github.com/vaab/colour")
300 (synopsis "Convert and manipulate various color representations")
301 (description "Pythonic way to manipulate color representations (HSL, RVB,
302 web, X11, ...).")
303 (license license:expat)))
304
305 (define-public python-d2to1
306 (package
307 (name "python-d2to1")
308 (version "0.2.12.post1")
309 (source (origin
310 (method url-fetch)
311 (uri (pypi-uri "d2to1" version))
312 (sha256
313 (base32
314 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
315 (build-system python-build-system)
316 (native-inputs
317 `(("python-nose" ,python-nose)))
318 (home-page "https://github.com/embray/d2to1")
319 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
320 in python")
321 (description "The python package d2to1 (the d is for distutils) allows
322 using distutils2-like setup.cfg files for a package's metadata with a
323 distribute/setuptools setup.py script.")
324 (license license:bsd-2)))
325
326 (define-public python-rawkit
327 (package
328 (name "python-rawkit")
329 (version "0.6.0")
330 (source (origin
331 (method url-fetch)
332 (uri (pypi-uri "rawkit" version))
333 (sha256
334 (base32
335 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
336 (build-system python-build-system)
337 (native-inputs
338 `(("python-pytest" ,python-pytest)
339 ("python-mock" ,python-mock)))
340 (inputs
341 `(("libraw" ,libraw)))
342 (home-page "https://rawkit.readthedocs.io")
343 (synopsis "Ctypes-based LibRaw binding for Python")
344 (description "The rawkit package provides two modules: rawkit and libraw.
345 The rawkit module provides a high-level Pythonic interface for developing raw
346 photos, while the libraw module provides a CTypes based interface for
347 interacting with the low-level LibRaw C APIs.")
348 (license license:expat)))
349
350 (define-public python-easygui
351 (package
352 (name "python-easygui")
353 (version "0.98.1")
354 (source (origin
355 (method url-fetch)
356 (uri (pypi-uri "easygui" version))
357 (sha256
358 (base32
359 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
360 (build-system python-build-system)
361 (propagated-inputs
362 `(("python-tkinter" ,python "tk")))
363 (home-page "https://github.com/robertlugg/easygui")
364 (synopsis "GUI programming module for Python")
365 (description "EasyGUI is a module for very simple, very easy GUI
366 programming in Python. EasyGUI is different from other GUI generators in that
367 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
368 simple function calls.")
369 (license license:bsd-3)))
370
371 (define-public python-pymediainfo
372 (package
373 (name "python-pymediainfo")
374 (version "4.1")
375 (source
376 (origin
377 (method url-fetch)
378 (uri (pypi-uri "pymediainfo" version))
379 (sha256
380 (base32
381 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
382 (build-system python-build-system)
383 (native-inputs
384 `(("python-setuptools-scm" ,python-setuptools-scm)
385 ("python-pytest" ,python-pytest)))
386 (inputs
387 `(("libmediainfo" ,libmediainfo)))
388 (arguments
389 `(#:phases
390 (modify-phases %standard-phases
391 (add-after 'unpack 'patch-libmediainfo
392 (lambda _
393 (substitute* "pymediainfo/__init__.py"
394 (("libmediainfo.so.0")
395 (string-append (assoc-ref %build-inputs "libmediainfo")
396 "/lib/libmediainfo.so.0")))
397 #t))
398 (replace 'check
399 (lambda _
400 ;; Extend PYTHONPATH so the built package will be found.
401 (setenv "PYTHONPATH"
402 (string-append (getcwd) "/build/lib:"
403 (getenv "PYTHONPATH")))
404 ;; Skip the only failing test "test_parse_url"
405 (invoke "pytest" "-vv" "-k" "not test_parse_url")
406 #t)))))
407 (home-page
408 "https://github.com/sbraz/pymediainfo")
409 (synopsis
410 "Python wrapper for the mediainfo library")
411 (description
412 "Python wrapper for the mediainfo library to access the technical and tag
413 data for video and audio files.")
414 (license license:expat)))
415
416 (define-public python-psutil
417 (package
418 (name "python-psutil")
419 (version "5.7.0")
420 (source
421 (origin
422 (method url-fetch)
423 (uri (pypi-uri "psutil" version))
424 (sha256
425 (base32 "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"))))
426 (build-system python-build-system)
427 (arguments
428 ;; FIXME: some tests do not return and time out. Some tests fail because
429 ;; some processes survive kill().
430 '(#:tests? #f))
431 (home-page "https://www.github.com/giampaolo/psutil")
432 (synopsis "Library for retrieving information on running processes")
433 (description
434 "psutil (Python system and process utilities) is a library for retrieving
435 information on running processes and system utilization (CPU, memory, disks,
436 network) in Python. It is useful mainly for system monitoring, profiling and
437 limiting process resources and management of running processes. It implements
438 many functionalities offered by command line tools such as: ps, top, lsof,
439 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
440 pidof, tty, taskset, pmap.")
441 (properties `((python2-variant . ,(delay python2-psutil))))
442 (license license:bsd-3)))
443
444 (define-public python2-psutil
445 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
446 (package
447 (inherit base)
448 (propagated-inputs
449 `(("python2-enum34" ,python2-enum34) ;optional
450 ,@(package-propagated-inputs base))))))
451
452 (define-public python-shapely
453 (package
454 (name "python-shapely")
455 (version "1.6.4.post2")
456 (source
457 (origin
458 (method url-fetch)
459 (uri (pypi-uri "Shapely" version))
460 (sha256
461 (base32
462 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
463 (build-system python-build-system)
464 (native-inputs
465 `(("python-cython" ,python-cython)
466 ("python-matplotlib" ,python-matplotlib)
467 ("python-pytest" ,python-pytest)
468 ("python-pytest-cov" ,python-pytest-cov)))
469 (inputs
470 `(("geos" ,geos)))
471 (propagated-inputs
472 `(("python-numpy" ,python-numpy)))
473 (arguments
474 `(#:phases
475 (modify-phases %standard-phases
476 (add-after 'unpack 'patch-geos-path
477 (lambda* (#:key inputs #:allow-other-keys)
478 (let ((geos (assoc-ref inputs "geos"))
479 (glibc (assoc-ref inputs ,(if (%current-target-system)
480 "cross-libc" "libc"))))
481 (substitute* "shapely/geos.py"
482 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
483 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
484 geos "/lib/libgeos_c.so'])"))
485 (("free = load_dll\\('c'\\)\\.free")
486 (string-append "free = load_dll('c', fallbacks=['"
487 glibc "/lib/libc.so.6']).free"))))
488 #t)))))
489 (home-page "https://github.com/Toblerity/Shapely")
490 (synopsis "Library for the manipulation and analysis of geometric objects")
491 (description "Shapely is a Python package for manipulation and analysis of
492 planar geometric objects. It is based on the @code{GEOS} library.")
493 (license license:bsd-3)))
494
495 (define-public python-shortuuid
496 (package
497 (name "python-shortuuid")
498 (version "0.5.0")
499 (source
500 (origin
501 (method url-fetch)
502 (uri (pypi-uri "shortuuid" version))
503 (sha256
504 (base32
505 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
506 (build-system python-build-system)
507 (native-inputs
508 `(("python-pep8" ,python-pep8)))
509 (home-page "https://github.com/skorokithakis/shortuuid")
510 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
511 (description
512 "@code{shortuuid} is a Python library for generating concise, unambiguous
513 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
514 module and then similar looking characters are removed.")
515 (license license:bsd-3)))
516
517 (define-public python-logwrap
518 (package
519 (name "python-logwrap")
520 (version "3.2.1")
521 (source
522 (origin
523 (method url-fetch)
524 (uri (pypi-uri "logwrap" version ".zip"))
525 (sha256
526 (base32
527 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
528 (build-system python-build-system)
529 (propagated-inputs
530 `(("python-six" ,python-six)
531 ("python-typing" ,python-typing)))
532 (native-inputs
533 `(("unzip" ,unzip)
534 ("python-cython" ,python-cython)
535 ("python-pytest" ,python-pytest)
536 ("python-pytest-cov" ,python-pytest-cov)
537 ("python-pytest-runner" ,python-pytest-runner)))
538 (home-page "https://github.com/penguinolog/logwrap")
539 (synopsis "Decorator for logging function arguments")
540 (description "This package provides a decorator to log function arguments
541 and function call return values in a human-readable way.")
542 (license license:asl2.0)))
543
544 (define-public python2-shapely
545 (package-with-python2 python-shapely))
546
547 (define-public python-clyent
548 (package
549 (name "python-clyent")
550 (version "1.2.1")
551 (source
552 (origin
553 (method url-fetch)
554 (uri (pypi-uri "clyent" version))
555 (sha256
556 (base32
557 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
558 (build-system python-build-system)
559 (native-inputs
560 `(("python-mock" ,python-mock)))
561 (home-page "https://github.com/binstar/clyent")
562 (synopsis "Command line client library")
563 (description "Clyent is a Python command line utiliy library. It is used
564 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
565 (license license:bsd-3)))
566
567 (define-public python2-clyent
568 (package-with-python2 python-clyent))
569
570 (define-public python-babel
571 (package
572 (name "python-babel")
573 (version "2.8.0")
574 (source
575 (origin
576 (method url-fetch)
577 (uri (pypi-uri "Babel" version))
578 (sha256
579 (base32
580 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
581 (build-system python-build-system)
582 (native-inputs
583 `(("python-freezegun" ,python-freezegun)
584 ("python-pytest" ,python-pytest)))
585 (propagated-inputs
586 `(("python-pytz" ,python-pytz)))
587 (arguments
588 `(#:phases (modify-phases %standard-phases
589 (replace 'check
590 (lambda _
591 (invoke "pytest" "-vv" "-k"
592 (string-append
593 ;; XXX: These tests fail when using Pytest 4.x and
594 ;; Babel 2.6.0. Try removing this for later versions.
595 "not test_no_inherit_metazone_marker_never_in_output"
596 " and not test_smoke_dates"
597 " and not test_smoke_numbers")))))))
598 (home-page "http://babel.pocoo.org/")
599 (synopsis
600 "Tools for internationalizing Python applications")
601 (description
602 "Babel is composed of two major parts:
603 - tools to build and work with gettext message catalogs
604 - a Python interface to the CLDR (Common Locale Data Repository), providing
605 access to various locale display names, localized number and date formatting,
606 etc. ")
607 (license license:bsd-3)))
608
609 (define-public python2-babel
610 (package-with-python2 python-babel))
611
612 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
613 (define-public python2-babel-2.6
614 (package
615 (inherit python2-babel)
616 (version "2.6.0")
617 (source (origin
618 (method url-fetch)
619 (uri (pypi-uri "Babel" version))
620 (sha256
621 (base32
622 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
623
624 (define-public python2-backport-ssl-match-hostname
625 (package
626 (name "python2-backport-ssl-match-hostname")
627 (version "3.5.0.1")
628 (source
629 (origin
630 (method url-fetch)
631 (uri (pypi-uri "backports.ssl_match_hostname" version))
632 (sha256
633 (base32
634 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
635 (build-system python-build-system)
636 (arguments
637 `(#:python ,python-2
638 #:tests? #f)) ; no test target
639 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
640 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
641 (description
642 "This backport brings the ssl.match_hostname() function to users of
643 earlier versions of Python. The function checks the hostname in the
644 certificate returned by the server to which a connection has been established,
645 and verifies that it matches the intended target hostname.")
646 (license license:psfl)))
647
648 (define-public python-bitarray
649 (package
650 (name "python-bitarray")
651 (version "1.2.1")
652 (source (origin
653 (method url-fetch)
654 (uri (pypi-uri "bitarray" version))
655 (sha256
656 (base32
657 "1kxrlxfj9nrx512sfwifwl9z4v6ky3qschl0zmk3s3dvc3s7bmif"))))
658 (build-system python-build-system)
659 (home-page "https://github.com/ilanschnell/bitarray")
660 (synopsis "Efficient arrays of booleans")
661 (description "This package provides an object type which efficiently
662 represents an array of booleans. Bitarrays are sequence types and behave very
663 much like usual lists. Eight bits are represented by one byte in a contiguous
664 block of memory. The user can select between two representations:
665 little-endian and big-endian. All of the functionality is implemented in C.
666 Methods for accessing the machine representation are provided. This can be
667 useful when bit level access to binary files is required, such as portable
668 bitmap image files. Also, when dealing with compressed data which uses
669 variable bit length encoding, you may find this module useful.")
670 (license license:psfl)))
671
672 (define-public python-boolean.py
673 (package
674 (name "python-boolean.py")
675 (version "3.6")
676 (source
677 (origin
678 ;; There's no source tarball on PyPI.
679 (method git-fetch)
680 (uri (git-reference
681 (url "https://github.com/bastikr/boolean.py")
682 (commit (string-append "v" version))))
683 (file-name (git-file-name name version))
684 (sha256
685 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
686 (build-system python-build-system)
687 (home-page "https://github.com/bastikr/boolean.py")
688 (synopsis "Boolean algebra in one Python module")
689 (description
690 "This is a small Python library that implements boolean algebra.
691 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
692 @code{Symbol} class that can take on one of these two values. Calculations
693 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
694 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
695 Expressions are constructed from parsed strings or directly in Python.")
696 (license license:bsd-2)))
697
698 (define-public python-hdf4
699 (package
700 (name "python-hdf4")
701 (version "0.9")
702 (source
703 (origin
704 (method url-fetch)
705 (uri (pypi-uri name version))
706 (sha256
707 (base32
708 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
709 (build-system python-build-system)
710 (native-inputs `(("nose" ,python-nose)))
711 (propagated-inputs `(("numpy" ,python-numpy)))
712 (inputs
713 `(("hdf4" ,hdf4)
714 ("libjpeg" ,libjpeg-turbo)
715 ("zlib" ,zlib)))
716 (arguments
717 `(#:phases
718 (modify-phases %standard-phases
719 (replace 'check
720 (lambda _
721 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
722 ;; on to import numpy. Somehow this works on their CI system.
723 ;; Let's just manage PYTHONPATH here instead.
724 (substitute* "runexamples.sh"
725 (("export PYTHONPATH=.*") ""))
726 (setenv "PYTHONPATH"
727 (string-append (getcwd) ":"
728 (getenv "PYTHONPATH")))
729 (invoke "./runexamples.sh")
730 (invoke "nosetests" "-v"))))))
731 (home-page "https://github.com/fhs/python-hdf4")
732 (synopsis "Python interface to the NCSA HDF4 library")
733 (description
734 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
735 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
736 NetCDF files can also be read and modified. Python-HDF4 is a fork of
737 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
738 (license license:expat)))
739
740 (define-public python2-hdf4
741 (package-with-python2 python-hdf4))
742
743 (define-public python-h5py
744 (package
745 (name "python-h5py")
746 (version "2.10.0")
747 (source
748 (origin
749 (method url-fetch)
750 (uri (pypi-uri "h5py" version))
751 (sha256
752 (base32
753 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
754 (build-system python-build-system)
755 (arguments
756 `(#:tests? #f ; no test target
757 #:phases
758 (modify-phases %standard-phases
759 (add-after 'unpack 'fix-hdf5-paths
760 (lambda* (#:key inputs #:allow-other-keys)
761 (let ((prefix (assoc-ref inputs "hdf5")))
762 (substitute* "setup_build.py"
763 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
764 (string-append "['" prefix "/lib" "']"))
765 (("'/opt/local/include', '/usr/local/include'")
766 (string-append "'" prefix "/include" "'")))
767 (substitute* "setup_configure.py"
768 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
769 (string-append "['" prefix "/lib" "']")))
770 #t))))))
771 (propagated-inputs
772 `(("python-six" ,python-six)
773 ("python-numpy" ,python-numpy)))
774 (inputs
775 `(("hdf5" ,hdf5-1.10)))
776 (native-inputs
777 `(("python-cython" ,python-cython)
778 ("python-pkgconfig" ,python-pkgconfig)
779 ("pkg-config" ,pkg-config)))
780 (home-page "https://www.h5py.org/")
781 (synopsis "Read and write HDF5 files from Python")
782 (description
783 "The h5py package provides both a high- and low-level interface to the
784 HDF5 library from Python. The low-level interface is intended to be a
785 complete wrapping of the HDF5 API, while the high-level component supports
786 access to HDF5 files, datasets and groups using established Python and NumPy
787 concepts.")
788 (license license:bsd-3)))
789
790 (define-public python2-h5py
791 (package-with-python2 python-h5py))
792
793 (define-public python-sh
794 (package
795 (name "python-sh")
796 (version "1.12.14")
797 (source
798 (origin
799 (method url-fetch)
800 (uri (pypi-uri "sh" version))
801 (sha256
802 (base32
803 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
804 (build-system python-build-system)
805 (arguments
806 '(#:phases
807 (modify-phases %standard-phases
808 (replace 'check
809 (lambda _
810 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
811 (setenv "HOME" "/tmp")
812 (invoke "python" "sh.py" "test"))))))
813 (native-inputs
814 `(("python-coverage" ,python-coverage)))
815 (home-page "https://github.com/amoffat/sh")
816 (synopsis "Python subprocess replacement")
817 (description "This package provides a replacement for Python's
818 @code{subprocess} feature.")
819 (license license:expat)))
820
821 (define-public python2-sh
822 (package-with-python2 python-sh))
823
824 (define-public python-cftime
825 (package
826 (name "python-cftime")
827 (version "1.0.4.2")
828 (source
829 (origin
830 (method url-fetch)
831 (uri (pypi-uri "cftime" version))
832 (sha256
833 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
834 (build-system python-build-system)
835 (propagated-inputs
836 `(("python-numpy" ,python-numpy)))
837 (native-inputs
838 `(("python-coveralls" ,python-coveralls)
839 ("python-cython" ,python-cython)
840 ("python-pytest-cov" ,python-pytest-cov)))
841 (home-page "https://github.com/Unidata/cftime")
842 (synopsis "Library for time handling")
843 (description
844 "This package provides time-handling functionality that used to be part
845 of the netcdf4 package before.")
846 ;; This package claims to include code under the GPLv3 but is released
847 ;; under ISC.
848 (license (list license:isc license:gpl3+))))
849
850 (define-public python-netcdf4
851 (package
852 (name "python-netcdf4")
853 (version "1.5.3")
854 (source
855 (origin
856 (method url-fetch)
857 (uri (pypi-uri "netCDF4" version))
858 (sha256
859 (base32
860 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
861 (build-system python-build-system)
862 (arguments
863 '(#:phases
864 (modify-phases %standard-phases
865 (add-after 'unpack 'configure-locations
866 (lambda* (#:key inputs #:allow-other-keys)
867 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
868 #t)))))
869 (native-inputs
870 `(("python-cython" ,python-cython)))
871 (propagated-inputs
872 `(("python-numpy" ,python-numpy)
873 ("python-cftime" ,python-cftime)))
874 (inputs
875 `(("netcdf" ,netcdf)
876 ("hdf4" ,hdf4)
877 ("hdf5" ,hdf5)))
878 (home-page "https://github.com/Unidata/netcdf4-python")
879 (synopsis "Python/numpy interface to the netCDF library")
880 (description "Netcdf4-python is a Python interface to the netCDF C
881 library. netCDF version 4 has many features not found in earlier
882 versions of the library and is implemented on top of HDF5. This module
883 can read and write files in both the new netCDF 4 and the old netCDF 3
884 format, and can create files that are readable by HDF5 clients. The
885 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
886 to users of that module.")
887 ;; The software is mainly ISC, but includes some files covered
888 ;; by the Expat license.
889 (license (list license:isc license:expat))))
890
891 (define-public python2-netcdf4
892 (package-with-python2 python-netcdf4))
893
894 (define-public python-license-expression
895 (package
896 (name "python-license-expression")
897 (version "0.999")
898 (source
899 (origin
900 (method url-fetch)
901 (uri (pypi-uri "license-expression" version))
902 (sha256
903 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
904 (build-system python-build-system)
905 (propagated-inputs
906 `(("python-boolean.py" ,python-boolean.py)))
907 (home-page "https://github.com/nexB/license-expression")
908 (synopsis "Apply boolean logic to license expressions")
909 (description
910 "This Python module defines a tiny language to evaluate and compare
911 license expressions using boolean logic. Logical combinations of licenses can
912 be tested for equality, containment, and equivalence. They can be normalised
913 and simplified. It supports SPDX license expressions as well as other naming
914 conventions and aliases in the same expression.")
915 (license license:gpl2+)))
916
917 (define-public python-lockfile
918 (package
919 (name "python-lockfile")
920 (version "0.12.2")
921 (source
922 (origin
923 (method url-fetch)
924 (uri (pypi-uri "lockfile" version))
925 (sha256
926 (base32
927 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
928 (build-system python-build-system)
929 (arguments '(#:test-target "check"))
930 (native-inputs
931 `(("python-pbr" ,python-pbr)))
932 (home-page "https://launchpad.net/pylockfile")
933 (synopsis "Platform-independent file locking module")
934 (description
935 "The lockfile package exports a LockFile class which provides a simple
936 API for locking files.")
937 (license license:expat)))
938
939 (define-public python2-lockfile
940 (package-with-python2 python-lockfile))
941
942 (define-public python-filelock
943 (package
944 (name "python-filelock")
945 (version "3.0.12")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "filelock" version))
950 (sha256
951 (base32
952 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
953 (build-system python-build-system)
954 (home-page
955 "https://github.com/benediktschmitt/py-filelock")
956 (synopsis "Platform independent file lock")
957 (description "@code{filelock} contains a single module implementing
958 a platform independent file lock in Python, which provides a simple way of
959 inter-process communication.")
960 (license license:unlicense)))
961
962 (define-public python-semantic-version
963 (package
964 (name "python-semantic-version")
965 (version "2.6.0")
966 (source
967 (origin
968 (method url-fetch)
969 (uri (pypi-uri "semantic_version" version))
970 (sha256
971 (base32
972 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
973 (build-system python-build-system)
974 (arguments
975 `(#:tests? #f)) ; PyPI tarball lacks tests
976 (home-page "https://github.com/rbarrois/python-semanticversion")
977 (synopsis "Semantic versioning module for Python")
978 (description
979 "The @code{semantic_version} class is a small library for handling
980 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
981
982 It can compare versions, generate a new version that represents a bump in one of
983 the version levels, and check whether any given string is a proper semantic
984 version identifier.")
985 (license license:bsd-3)))
986
987 (define-public python2-semantic-version
988 (package-with-python2 python-semantic-version))
989
990 (define-public python-serpent
991 (package
992 (name "python-serpent")
993 (version "1.28")
994 (source
995 (origin
996 (method url-fetch)
997 (uri (pypi-uri "serpent" version))
998 (sha256
999 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1000 (build-system python-build-system)
1001 (native-inputs
1002 `(("python-attrs" ,python-attrs)
1003 ("python-pytz" ,python-pytz)))
1004 (home-page "https://github.com/irmen/Serpent")
1005 (synopsis "Serializer for literal Python expressions")
1006 (description
1007 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1008 serialization. It serializes an object tree into bytes (an utf-8 encoded
1009 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1010 to rebuild the original object tree.
1011
1012 Because only safe literals are encoded, it is safe to send serpent data to
1013 other machines, such as over the network.")
1014 (properties `((python2-variant . ,(delay python2-serpent))))
1015 (license license:expat)))
1016
1017 (define-public python2-serpent
1018 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1019 (package
1020 (inherit base)
1021 (propagated-inputs
1022 `(("python-enum34" ,python2-enum34)
1023 ,@(package-propagated-inputs base))))))
1024
1025 (define-public python-setuptools
1026 (package
1027 (name "python-setuptools")
1028 (version "41.0.1")
1029 (source
1030 (origin
1031 (method url-fetch)
1032 (uri (pypi-uri "setuptools" version ".zip"))
1033 (sha256
1034 (base32
1035 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1036 (modules '((guix build utils)))
1037 (snippet
1038 '(begin
1039 ;; Remove included binaries which are used to build self-extracting
1040 ;; installers for Windows.
1041 ;; TODO: Find some way to build them ourself so we can include them.
1042 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1043 #t))))
1044 (build-system python-build-system)
1045 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1046 ;; One could bootstrap with an internal untested setuptools.
1047 (arguments
1048 `(#:tests? #f))
1049 (home-page "https://pypi.org/project/setuptools/")
1050 (synopsis
1051 "Library designed to facilitate packaging Python projects")
1052 (description
1053 "Setuptools is a fully-featured, stable library designed to facilitate
1054 packaging Python projects, where packaging includes:
1055 Python package and module definitions,
1056 distribution package metadata,
1057 test hooks,
1058 project installation,
1059 platform-specific details,
1060 Python 3 support.")
1061 ;; TODO: setuptools now bundles the following libraries:
1062 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1063 (license (list license:psfl ; setuptools itself
1064 license:expat ; six, appdirs, pyparsing
1065 license:asl2.0 ; packaging is dual ASL2/BSD-2
1066 license:bsd-2))))
1067
1068 (define-public python2-setuptools
1069 (package-with-python2 python-setuptools))
1070
1071 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1072 (define-public python-setuptools-for-tensorflow
1073 (hidden-package
1074 (package
1075 (inherit python-setuptools)
1076 (version "39.1.0")
1077 (source (origin
1078 (inherit (package-source python-setuptools))
1079 (uri (pypi-uri "setuptools" version ".zip"))
1080 (sha256
1081 (base32
1082 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1083
1084 (define-public python-uniseg
1085 (package
1086 (name "python-uniseg")
1087 (version "0.7.1")
1088 (source
1089 (origin
1090 (method url-fetch)
1091 (uri (pypi-uri "uniseg" version ".zip"))
1092 (sha256
1093 (base32
1094 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1095 (build-system python-build-system)
1096 (arguments
1097 '(#:tests? #f)) ; The test suite requires network access.
1098 (native-inputs
1099 `(("unzip" ,unzip)))
1100 (home-page
1101 "https://bitbucket.org/emptypage/uniseg-python")
1102 (synopsis
1103 "Python library to determine Unicode text segmentations")
1104 (description
1105 "Uniseg is a Python package used to determine Unicode text segmentations.
1106 Supported segmentations include:
1107 @enumerate
1108 @item @dfn{Code point} (any value in the Unicode codespace)
1109 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1110 multiple Unicode code points, e.g. \"G\" + acute-accent)
1111 @item Word break
1112 @item Sentence break
1113 @item Line break
1114 @end enumerate")
1115 (license license:expat)))
1116
1117 (define-public python2-uniseg
1118 (package-with-python2 python-uniseg))
1119
1120 (define-public python-humanfriendly
1121 (package
1122 (name "python-humanfriendly")
1123 (version "4.4.1")
1124 (source
1125 (origin
1126 (method url-fetch)
1127 (uri (pypi-uri "humanfriendly" version))
1128 (sha256
1129 (base32
1130 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1131 (build-system python-build-system)
1132 (arguments
1133 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1134 #:tests? #f))
1135 (propagated-inputs
1136 `(("python-monotonic" ,python-monotonic)))
1137 (home-page "https://humanfriendly.readthedocs.io")
1138 (synopsis "Human-friendly input and output in Python")
1139 (description
1140 "The functions and classes in @code{humanfriendly} can be used to make
1141 text interfaces more user-friendly. It includes tools to parse and format
1142 numbers, file sizes, and timespans, timers for long-running operations, menus
1143 to allow the user to choose from a list of options, and terminal interaction
1144 helpers.")
1145 (license license:expat)))
1146
1147 (define-public python2-humanfriendly
1148 (package-with-python2 python-humanfriendly))
1149
1150 (define-public python-textparser
1151 (package
1152 (name "python-textparser")
1153 (version "0.23.0")
1154 (source
1155 (origin
1156 (method url-fetch)
1157 (uri (pypi-uri "textparser" version))
1158 (sha256
1159 (base32
1160 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1161 (build-system python-build-system)
1162 (home-page "https://github.com/eerimoq/textparser")
1163 (synopsis "Fast text parser for Python")
1164 (description "This library provides a text parser written in the Python
1165 language. It aims to be fast.")
1166 (license license:expat)))
1167
1168 (define-public python-aenum
1169 (package
1170 (name "python-aenum")
1171 (version "2.2.3")
1172 (source
1173 (origin
1174 (method url-fetch)
1175 (uri (pypi-uri "aenum" version))
1176 (sha256
1177 (base32
1178 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1179 (build-system python-build-system)
1180 (arguments
1181 `(#:phases (modify-phases %standard-phases
1182 (replace 'check
1183 (lambda _
1184 (format #t "current working dir ~s~%" (getcwd))
1185 (setenv "PYTHONPATH"
1186 (string-append ".:" (getenv "PYTHONPATH")))
1187 ;; We must run the test suite module directly, as it
1188 ;; fails to define the 'tempdir' variable in scope for
1189 ;; the tests otherwise
1190 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1191 ;; issues/32/running-tests-with-python-setuppy-test).
1192 (invoke "python3" "aenum/test.py")
1193 ;; This one fails with "NameError: name
1194 ;; 'test_pickle_dump_load' is not defined" (see:
1195 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1196 ;; /error-running-the-test_v3py-test-suite).
1197 ;; (invoke "python3" "aenum/test_v3.py")
1198 #t)))))
1199 (home-page "https://bitbucket.org/stoneleaf/aenum")
1200 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1201 (description "The aenum library includes an @code{Enum} base class, a
1202 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1203 class.")
1204 (license license:bsd-3)))
1205
1206 (define-public python-can
1207 (package
1208 (name "python-can")
1209 (version "3.3.2")
1210 (source
1211 (origin
1212 (method url-fetch)
1213 (uri (pypi-uri "python-can" version))
1214 (sha256
1215 (base32
1216 "0bkbxi45sckzir6s0j3h01pkfn4vkz3ymih2zjp7zw77wz0vbvsz"))))
1217 (build-system python-build-system)
1218 (arguments
1219 `(#:phases (modify-phases %standard-phases
1220 (add-after 'unpack 'fix-broken-tests
1221 ;; The tests try to run two scripts it expects should be
1222 ;; in PATH, but they aren't at this time (see:
1223 ;; https://github.com/hardbyte/python-can/issues/805).
1224 (lambda _
1225 (substitute* "test/test_scripts.py"
1226 (("\"can_logger\\.py --help\"") "")
1227 (("\"can_player\\.py --help\"") ""))
1228 #t)))))
1229 (propagated-inputs
1230 `(("python-aenum" ,python-aenum)
1231 ("python-wrapt" ,python-wrapt)))
1232 (native-inputs
1233 `(("python-codecov" ,python-codecov)
1234 ("python-future" ,python-future)
1235 ("python-hypothesis" ,python-hypothesis)
1236 ("python-mock" ,python-mock)
1237 ("python-pyserial" ,python-pyserial)
1238 ("python-pytest" ,python-pytest)
1239 ("python-pytest-cov" ,python-pytest-cov)
1240 ("python-pytest-runner" ,python-pytest-runner)
1241 ("python-pytest-timeout" ,python-pytest-timeout)))
1242 (home-page "https://github.com/hardbyte/python-can")
1243 (synopsis "Controller Area Network (CAN) interface module for Python")
1244 (description "This package defines the @code{can} module, which provides
1245 controller area network (CAN) support for Python developers; providing common
1246 abstractions to different hardware devices, and a suite of utilities for
1247 sending and receiving messages on a CAN bus.")
1248 (license license:gpl3+)))
1249
1250 (define-public python-diskcache
1251 (package
1252 (name "python-diskcache")
1253 (version "4.1.0")
1254 (source
1255 (origin
1256 (method url-fetch)
1257 (uri (pypi-uri "diskcache" version))
1258 (sha256
1259 (base32
1260 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1261 (build-system python-build-system)
1262 (arguments
1263 `(#:tests? #f)) ;test suite not included in the release
1264 (home-page "http://www.grantjenks.com/docs/diskcache/")
1265 (synopsis "Disk and file backed cache library")
1266 (description "DiskCache is a disk and file backed persistent cache.")
1267 (license license:asl2.0)))
1268
1269 (define-public python-bitstruct
1270 (package
1271 (name "python-bitstruct")
1272 (version "8.9.0")
1273 (source
1274 (origin
1275 (method url-fetch)
1276 (uri (pypi-uri "bitstruct" version))
1277 (sha256
1278 (base32
1279 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1280 (build-system python-build-system)
1281 (home-page "https://github.com/eerimoq/bitstruct")
1282 (synopsis "Python values to and C bit field structs converter")
1283 (description "This module performs conversions between Python values and C
1284 bit field structs represented as Python byte strings. It is intended to have
1285 a similar interface as the @code{struct} module from Python, but working on
1286 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1287 (license license:expat)))
1288
1289 (define-public python-cantools
1290 (package
1291 (name "python-cantools")
1292 (version "33.1.1")
1293 (source
1294 (origin
1295 ;; We take the sources from the Git repository as the documentation is
1296 ;; not included with the PyPI archive.
1297 (method git-fetch)
1298 (uri (git-reference
1299 (url "https://github.com/eerimoq/cantools.git")
1300 (commit version)))
1301 (file-name (git-file-name name version))
1302 (sha256
1303 (base32
1304 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1305 (build-system python-build-system)
1306 (arguments
1307 `(#:phases
1308 (modify-phases %standard-phases
1309 (add-after 'build 'build-doc
1310 (lambda _
1311 ;; See: https://github.com/eerimoq/cantools/issues/190.
1312 (substitute* "README.rst"
1313 (("https://github.com/eerimoq/cantools/raw/master\
1314 /docs/monitor.png")
1315 "monitor.png"))
1316 (with-directory-excursion "docs"
1317 (invoke "make" "man" "info"))))
1318 (add-after 'install 'install-doc
1319 (lambda* (#:key outputs #:allow-other-keys)
1320 (let* ((out (assoc-ref outputs "out"))
1321 (info (string-append out "/share/info"))
1322 (man1 (string-append out "/share/man/man1")))
1323 (format #t "CWD: ~s~%" (getcwd))
1324 (install-file "docs/_build/texinfo/cantools.info" info)
1325 (install-file "docs/_build/man/cantools.1" man1)
1326 #t))))))
1327 (native-inputs
1328 `(("sphinx" ,python-sphinx)
1329 ("texinfo" ,texinfo)))
1330 (propagated-inputs
1331 `(("python-bitstruct" ,python-bitstruct)
1332 ("python-can" ,python-can)
1333 ("python-diskcache" ,python-diskcache)
1334 ("python-textparser" ,python-textparser)))
1335 (home-page "https://github.com/eerimoq/cantools")
1336 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1337 (description "This package includes Controller Area Network (CAN) related
1338 tools that can be used to:
1339 @itemize
1340 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1341 @item encode and decode CAN messages
1342 @item multiplex simple and extended signals
1343 @item diagnose DID encoding and decoding
1344 @item dump the CAN decoder output
1345 @item test CAN nodes
1346 @item generate C source code
1347 @item monitor the CAN bus
1348 @end itemize")
1349 (license license:expat)))
1350
1351 (define-public python-capturer
1352 (package
1353 (name "python-capturer")
1354 (version "2.4")
1355 (source
1356 (origin
1357 (method url-fetch)
1358 (uri (pypi-uri "capturer" version))
1359 (sha256
1360 (base32
1361 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1362 (build-system python-build-system)
1363 (arguments
1364 `(#:tests? #f))
1365 (propagated-inputs
1366 `(("python-humanfriendly" ,python-humanfriendly)))
1367 (home-page "https://capturer.readthedocs.io")
1368 (synopsis "Capture stdout and stderr streams of the current process")
1369 (description
1370 "The capturer package makes it easy to capture the stdout and stderr
1371 streams of the current process and subprocesses. Output can be relayed
1372 to the terminal in real time but is also available to the Python program
1373 for additional processing.")
1374 (license license:expat)))
1375
1376 (define-public python2-capturer
1377 (package-with-python2 python-capturer))
1378
1379 (define-public python-case
1380 (package
1381 (name "python-case")
1382 (version "1.5.3")
1383 (source
1384 (origin
1385 (method url-fetch)
1386 (uri (pypi-uri "case" version))
1387 (sha256
1388 (base32
1389 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1390 (build-system python-build-system)
1391 (propagated-inputs
1392 `(("python-mock" ,python-mock)
1393 ("python-nose" ,python-nose)
1394 ("python-six" ,python-six)
1395 ("python-unittest2" ,python-unittest2)))
1396 (native-inputs
1397 `(("python-coverage" ,python-coverage)))
1398 (home-page "https://github.com/celery/case")
1399 (synopsis "Unittest utilities and convenience methods")
1400 (description
1401 "The @code{case} package provides utilities on top of unittest, including
1402 some helpful Python 2 compatibility convenience methods.")
1403 (license license:bsd-3)))
1404
1405 (define-public python-verboselogs
1406 (package
1407 (name "python-verboselogs")
1408 (version "1.7")
1409 (source
1410 (origin
1411 (method url-fetch)
1412 (uri (pypi-uri "verboselogs" version))
1413 (sha256
1414 (base32
1415 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1416 (build-system python-build-system)
1417 (arguments
1418 `(#:phases
1419 (modify-phases %standard-phases
1420 (replace 'check
1421 (lambda _
1422 ;; Do not run pylint plugin test, as astroid is an old
1423 ;; unsupported version.
1424 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1425 "verboselogs/tests.py"))))))
1426 (native-inputs
1427 `(("python-mock" ,python-mock)
1428 ("python-pytest" ,python-pytest)))
1429 (home-page "https://verboselogs.readthedocs.io")
1430 (synopsis "Verbose logging level for Python's logging module")
1431 (description
1432 "The @code{verboselogs} package extends Python's @code{logging} module to
1433 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1434 (license license:expat)))
1435
1436 (define-public python2-verboselogs
1437 (package-with-python2 python-verboselogs))
1438
1439 (define-public python-coloredlogs
1440 (package
1441 (name "python-coloredlogs")
1442 (version "10.0")
1443 (source
1444 (origin
1445 (method url-fetch)
1446 (uri (pypi-uri "coloredlogs" version))
1447 (sha256
1448 (base32
1449 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1450 (build-system python-build-system)
1451 (arguments
1452 `(;Tests require some updated modules
1453 #:tests? #f))
1454 (propagated-inputs
1455 `(("python-capturer" ,python-capturer)))
1456 (home-page "https://coloredlogs.readthedocs.io")
1457 (synopsis "Colored stream handler for Python's logging module")
1458 (description
1459 "The @code{coloredlogs} package enables colored terminal output for
1460 Python's logging module. The @code{ColoredFormatter} class inherits from
1461 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1462 messages in color.")
1463 (license license:expat)))
1464
1465 (define-public python2-coloredlogs
1466 (package-with-python2 python-coloredlogs))
1467
1468 (define-public python-editorconfig
1469 (package
1470 (name "python-editorconfig")
1471 (version "0.12.2")
1472 (source
1473 (origin
1474 (method url-fetch)
1475 (uri (pypi-uri "EditorConfig" version))
1476 (sha256
1477 (base32
1478 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1479 (build-system python-build-system)
1480 (home-page "https://editorconfig.org/")
1481 (synopsis "EditorConfig bindings for python")
1482 (description "The EditorConfig project consists of a file format for
1483 defining coding styles and a collection of text editor plugins that enable
1484 editors to read the file format and adhere to defined styles. EditorConfig
1485 files are easily readable and they work nicely with version control systems.")
1486 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1487 (license (list license:bsd-2 license:psfl))))
1488
1489 (define-public python-et-xmlfile
1490 (package
1491 (name "python-et-xmlfile")
1492 (version "1.0.1")
1493 (source
1494 (origin
1495 (method url-fetch)
1496 (uri (pypi-uri "et_xmlfile" version))
1497 (sha256
1498 (base32
1499 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1500 (build-system python-build-system)
1501 (arguments
1502 `(#:phases (modify-phases %standard-phases
1503 (replace 'check
1504 (lambda _
1505 (invoke "pytest"))))))
1506 (native-inputs
1507 `(("python-pytest" ,python-pytest)
1508 ("python-lxml" ,python-lxml))) ;used for the tests
1509 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1510 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1511 (description "This Python library is based upon the @code{xmlfile} module
1512 from @code{lxml}. It aims to provide a low memory, compatible implementation
1513 of @code{xmlfile}.")
1514 (license license:expat)))
1515
1516 (define-public python2-et-xmlfile
1517 (package-with-python2 python-et-xmlfile))
1518
1519 (define-public python-openpyxl
1520 (package
1521 (name "python-openpyxl")
1522 (version "2.6.2")
1523 (source
1524 (origin
1525 ;; We use the upstream repository, as the tests are not included in the
1526 ;; PyPI releases.
1527 (method hg-fetch)
1528 (uri (hg-reference
1529 (url "https://bitbucket.org/openpyxl/openpyxl")
1530 (changeset version)))
1531 (file-name (string-append name "-" version "-checkout"))
1532 (sha256
1533 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1534 (build-system python-build-system)
1535 (arguments
1536 `(#:phases (modify-phases %standard-phases
1537 (replace 'check
1538 (lambda _
1539 (invoke "pytest"))))))
1540 (native-inputs
1541 ;; For the test suite.
1542 `(("python-lxml" ,python-lxml)
1543 ("python-pillow" ,python-pillow)
1544 ("python-pytest" ,python-pytest)))
1545 (propagated-inputs
1546 `(("python-et-xmlfile" ,python-et-xmlfile)
1547 ("python-jdcal" ,python-jdcal)))
1548 (home-page "https://openpyxl.readthedocs.io")
1549 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1550 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1551 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1552 standard.")
1553 (license license:expat)))
1554
1555 (define-public python-eventlet
1556 (package
1557 (name "python-eventlet")
1558 (version "0.25.1")
1559 (source
1560 (origin
1561 (method url-fetch)
1562 (uri (pypi-uri "eventlet" version))
1563 (sha256
1564 (base32
1565 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1566 (build-system python-build-system)
1567 (propagated-inputs
1568 `(("python-greenlet" ,python-greenlet)))
1569 (arguments
1570 ;; TODO: Requires unpackaged 'enum-compat'.
1571 '(#:tests? #f))
1572 (home-page "https://eventlet.net")
1573 (synopsis "Concurrent networking library for Python")
1574 (description
1575 "Eventlet is a concurrent networking library for Python that
1576 allows you to change how you run your code, not how you write it.
1577 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1578 Coroutines ensure that the developer uses a blocking style of programming
1579 that is similar to threading, but provide the benefits of non-blocking I/O.
1580 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1581 from the Python interpreter, or as a small part of a larger application.")
1582 (license license:expat)))
1583
1584 (define-public python2-eventlet
1585 (let ((base (package-with-python2
1586 (strip-python2-variant python-eventlet))))
1587 (package (inherit base)
1588 (propagated-inputs
1589 `(("python2-enum34" ,python2-enum34)
1590 ,@(package-propagated-inputs base))))))
1591
1592 (define-public python-six
1593 (package
1594 (name "python-six")
1595 (version "1.14.0")
1596 (source
1597 (origin
1598 (method url-fetch)
1599 (uri (pypi-uri "six" version))
1600 (sha256
1601 (base32
1602 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1603 (build-system python-build-system)
1604 (arguments
1605 `(#:phases
1606 (modify-phases %standard-phases
1607 (replace 'check
1608 (lambda _
1609 (invoke "py.test" "-v"))))))
1610 (native-inputs
1611 `(("python-pytest" ,python-pytest-bootstrap)))
1612 (home-page "https://pypi.org/project/six/")
1613 (synopsis "Python 2 and 3 compatibility utilities")
1614 (description
1615 "Six is a Python 2 and 3 compatibility library. It provides utility
1616 functions for smoothing over the differences between the Python versions with
1617 the goal of writing Python code that is compatible on both Python versions.
1618 Six supports every Python version since 2.5. It is contained in only one
1619 Python file, so it can be easily copied into your project.")
1620 (license license:x11)))
1621
1622 (define-public python2-six
1623 (package-with-python2 python-six))
1624
1625 (define-public python-six-bootstrap
1626 (package
1627 (inherit python-six)
1628 (name "python-six-bootstrap")
1629 (native-inputs `())
1630 (arguments `(#:tests? #f))))
1631
1632 (define-public python2-six-bootstrap
1633 (package-with-python2 python-six-bootstrap))
1634
1635 (define-public python-schedule
1636 (package
1637 (name "python-schedule")
1638 (version "0.4.3")
1639 (source
1640 (origin
1641 (method url-fetch)
1642 (uri (pypi-uri "schedule" version))
1643 (sha256
1644 (base32
1645 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1646 (build-system python-build-system)
1647 (native-inputs
1648 `(("python-pytest" ,python-pytest)
1649 ("python-mock" ,python-mock)))
1650 (home-page "https://github.com/dbader/schedule")
1651 (synopsis "Schedule periodic function calls in Python")
1652 (description
1653 "Schedule is an in-process scheduler for periodic jobs that uses the
1654 builder pattern for configuration. Schedule lets you run Python functions (or
1655 any other callable) periodically at pre-determined intervals using a simple,
1656 human-friendly syntax.")
1657 (license license:expat)))
1658
1659 (define-public python2-schedule
1660 (package-with-python2 python-schedule))
1661
1662 (define-public python2-mechanize
1663 (package
1664 (name "python2-mechanize")
1665 (version "0.2.5")
1666 (source
1667 (origin
1668 (method url-fetch)
1669 (uri (pypi-uri "mechanize" version))
1670 (sha256
1671 (base32
1672 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1673 (build-system python-build-system)
1674 (arguments
1675 `(#:python ,python-2 ; apparently incompatible with Python 3
1676 #:tests? #f))
1677 ;; test fails with message
1678 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1679 ;; (python-3.3.2) or
1680 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1681 ;; (python-2.7.5).
1682 ;; The source code is from March 2011 and probably not up-to-date
1683 ;; with respect to python unit tests.
1684 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1685 (synopsis
1686 "Stateful programmatic web browsing in Python")
1687 (description
1688 "Mechanize implements stateful programmatic web browsing in Python,
1689 after Andy Lester’s Perl module WWW::Mechanize.")
1690 (license (license:non-copyleft
1691 "file://COPYING"
1692 "See COPYING in the distribution."))))
1693
1694
1695 (define-public python-simplejson
1696 (package
1697 (name "python-simplejson")
1698 (version "3.14.0")
1699 (source
1700 (origin
1701 (method url-fetch)
1702 (uri (pypi-uri "simplejson" version))
1703 (sha256
1704 (base32
1705 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1706 (build-system python-build-system)
1707 (home-page "http://simplejson.readthedocs.org/en/latest/")
1708 (synopsis
1709 "Json library for Python")
1710 (description
1711 "JSON (JavaScript Object Notation) is a subset of JavaScript
1712 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1713 format.
1714
1715 Simplejson exposes an API familiar to users of the standard library marshal
1716 and pickle modules. It is the externally maintained version of the json
1717 library contained in Python 2.6, but maintains compatibility with Python 2.5
1718 and (currently) has significant performance advantages, even without using
1719 the optional C extension for speedups. Simplejson is also supported on
1720 Python 3.3+.")
1721 (license license:x11)))
1722
1723 (define-public python2-simplejson
1724 (package-with-python2 python-simplejson))
1725
1726
1727 (define-public python-pyicu
1728 (package
1729 (name "python-pyicu")
1730 (version "2.4.3")
1731 (source
1732 (origin
1733 (method url-fetch)
1734 (uri (pypi-uri "PyICU" version))
1735 (sha256
1736 (base32
1737 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1738 (build-system python-build-system)
1739 (inputs
1740 `(("icu4c" ,icu4c)))
1741 (native-inputs
1742 `(("python-pytest" ,python-pytest)
1743 ("python-six" ,python-six)))
1744 (home-page "https://github.com/ovalhub/pyicu")
1745 (synopsis "Python extension wrapping the ICU C++ API")
1746 (description
1747 "PyICU is a python extension wrapping the ICU C++ API.")
1748 (license license:x11)))
1749
1750 (define-public python2-pyicu
1751 (package-with-python2 python-pyicu))
1752
1753 (define-public python-dogtail
1754 (package
1755 (name "python-dogtail")
1756 (version "0.9.11")
1757 (source (origin
1758 (method url-fetch)
1759 (uri
1760 (string-append
1761 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1762 "dogtail-" version ".tar.gz"))
1763 (sha256
1764 (base32
1765 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1766 (build-system python-build-system)
1767 (arguments
1768 `(#:tests? #f ; TODO Launching dbus for the tests
1769 ; fails
1770 #:phases
1771 (modify-phases %standard-phases
1772 (replace 'check
1773 (lambda* (#:key tests? #:allow-other-keys)
1774 (when tests?
1775 (system "Xvfb :1 &")
1776 (setenv "DISPLAY" ":1")
1777 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1778 #t)))))
1779 (propagated-inputs
1780 `(("python-pygobject" ,python-pygobject)
1781 ("python-pycairo" ,python-pycairo)
1782 ("python-pyatspi" ,python-pyatspi)))
1783 (native-inputs
1784 `(("python-nose" ,python-nose)
1785 ("gtk+" ,gtk+)
1786 ("xvfb" ,xorg-server)
1787 ("dbus" ,dbus)
1788 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1789 ("gobject-introspection" ,gobject-introspection)))
1790 (home-page "https://gitlab.com/dogtail/dogtail/")
1791 (synopsis "GUI test tool and automation framework written in Python")
1792 (description
1793 "Dogtail is a GUI test tool and automation framework written in Python.
1794 It uses Accessibility (a11y) technologies to communicate with desktop
1795 applications. dogtail scripts are written in Python and executed like any
1796 other Python program.")
1797 (license license:gpl2+)))
1798
1799 (define-public python2-dogtail
1800 (package-with-python2 python-dogtail))
1801
1802 (define-public python-empy
1803 (package
1804 (name "python-empy")
1805 (version "3.3.3")
1806 (source (origin
1807 (method url-fetch)
1808 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1809 version ".tar.gz"))
1810 (sha256
1811 (base32
1812 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1813 (build-system python-build-system)
1814 (arguments
1815 `(#:tests? #f)) ; python2 only
1816 (home-page "http://www.alcyone.com/software/empy/")
1817 (synopsis "Templating system for Python")
1818 (description
1819 "EmPy is a system for embedding Python expressions and statements in
1820 template text; it takes an EmPy source file, processes it, and produces
1821 output. This is accomplished via expansions, which are special signals to the
1822 EmPy system and are set off by a special prefix (by default the at sign, @@).
1823 EmPy can expand arbitrary Python expressions and statements in this way, as
1824 well as a variety of special forms. Textual data not explicitly delimited in
1825 this way is sent unaffected to the output, allowing Python to be used in
1826 effect as a markup language. Also supported are callbacks via hooks,
1827 recording and playback via diversions, and dynamic, chainable filters. The
1828 system is highly configurable via command line options and embedded
1829 commands.")
1830 (license license:lgpl2.1+)))
1831
1832 (define-public python2-empy
1833 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1834 (package
1835 (inherit base)
1836 (arguments `(,@(package-arguments base)
1837 #:tests? #t)))))
1838
1839 (define-public python2-element-tree
1840 (package
1841 (name "python2-element-tree")
1842 (version "1.2.6")
1843 (source (origin
1844 (method url-fetch)
1845 (uri (string-append
1846 "http://effbot.org/media/downloads/elementtree-"
1847 version "-20050316.tar.gz"))
1848 (sha256
1849 (base32
1850 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1851 (build-system python-build-system)
1852 (arguments
1853 `(#:python ,python-2 ; seems to be part of Python 3
1854 #:tests? #f)) ; no 'test' sub-command
1855 (synopsis "Toolkit for XML processing in Python")
1856 (description
1857 "ElementTree is a Python library supporting lightweight XML processing.")
1858 (home-page "https://effbot.org/zone/element-index.htm")
1859 (license (license:x11-style
1860 "http://docs.python.org/2/license.html"
1861 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1862
1863 (define-public python2-pybugz
1864 (package
1865 (name "python2-pybugz")
1866 (version "0.6.11")
1867 (source (origin
1868 (method url-fetch)
1869 (uri (string-append
1870 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1871 version ".tar.gz"))
1872 (sha256
1873 (base32
1874 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1875 (patches (search-patches "pybugz-stty.patch"
1876 "pybugz-encode-error.patch"))))
1877 (build-system python-build-system)
1878 (arguments
1879 `(#:python ,python-2 ; SyntaxError with Python 3
1880 #:tests? #f)) ; no 'test' sub-command
1881 (propagated-inputs
1882 `(("element-tree" ,python2-element-tree)))
1883 (synopsis "Python and command-line interface to Bugzilla")
1884 (description
1885 "PyBugz is a Python library and command-line tool to query the Bugzilla
1886 bug tracking system. It is meant as an aid to speed up interaction with the
1887 bug tracker.")
1888 (home-page "http://www.liquidx.net/pybugz/")
1889 (license license:gpl2)))
1890
1891 (define-public python2-enum
1892 (package
1893 (name "python2-enum")
1894 (version "0.4.6")
1895 (source (origin
1896 (method url-fetch)
1897 (uri (pypi-uri "enum" version))
1898 (sha256
1899 (base32
1900 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1901 (build-system python-build-system)
1902 (arguments
1903 `(#:python ,python-2))
1904 (home-page "https://pypi.org/project/enum/")
1905 (synopsis "Robust enumerated type support in Python")
1906 (description
1907 "This provides a module for robust enumerations in Python. It has
1908 been superseded by the Python standard library and is provided only for
1909 compatibility.")
1910 ;; Choice of either license.
1911 (license (list license:gpl3+ license:psfl))))
1912
1913 (define-public python-enum34
1914 (package
1915 (name "python-enum34")
1916 (version "1.1.6")
1917 (source
1918 (origin
1919 (method url-fetch)
1920 (uri (pypi-uri "enum34" version))
1921 (sha256
1922 (base32
1923 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1924 (build-system python-build-system)
1925 (home-page "https://pypi.org/project/enum34/")
1926 (synopsis "Backported Python 3.4 Enum")
1927 (description
1928 "Enum34 is the new Python stdlib enum module available in Python 3.4
1929 backported for previous versions of Python from 2.4 to 3.3.")
1930 (license license:bsd-3)))
1931
1932 (define-public python2-enum34
1933 (package-with-python2 python-enum34))
1934
1935 (define-public python-parse-type
1936 (package
1937 (name "python-parse-type")
1938 (version "0.4.2")
1939 (source
1940 (origin
1941 (method url-fetch)
1942 (uri (pypi-uri "parse_type" version))
1943 (sha256
1944 (base32
1945 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1946 (build-system python-build-system)
1947 (propagated-inputs
1948 `(("python-six" ,python-six)
1949 ("python-parse" ,python-parse)))
1950 (native-inputs
1951 `(("python-pytest" ,python-pytest)
1952 ("python-pytest-runner" ,python-pytest-runner)))
1953 (home-page "https://github.com/jenisys/parse_type")
1954 (synopsis "Extended parse module")
1955 (description
1956 "Parse_type extends the python parse module.")
1957 (properties
1958 `((python2-variant . ,(delay python2-parse-type))))
1959 (license license:bsd-3)))
1960
1961 (define-public python2-parse-type
1962 (let ((base (package-with-python2
1963 (strip-python2-variant python-parse-type))))
1964 (package (inherit base)
1965 (propagated-inputs
1966 `(("python2-enum34" ,python2-enum34)
1967 ,@(package-propagated-inputs base))))))
1968
1969 (define-public python-parse
1970 (package
1971 (name "python-parse")
1972 (version "1.8.4")
1973 (source
1974 (origin
1975 (method url-fetch)
1976 (uri (pypi-uri "parse" version))
1977 (sha256
1978 (base32
1979 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1980 (build-system python-build-system)
1981 (arguments
1982 `(#:phases
1983 (modify-phases %standard-phases
1984 (replace 'check
1985 (lambda _ (invoke "python" "test_parse.py"))))))
1986 (home-page "https://github.com/r1chardj0n3s/parse")
1987 (synopsis "Parse strings")
1988 (description
1989 "Parse strings using a specification based on the Python @code{format()}
1990 syntax.")
1991 (license license:x11)))
1992
1993 (define-public python-polib
1994 (package
1995 (name "python-polib")
1996 (version "1.0.8")
1997 (source (origin
1998 (method url-fetch)
1999 (uri (pypi-uri "polib" version))
2000 (sha256
2001 (base32
2002 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2003 (build-system python-build-system)
2004 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2005 (synopsis "Manipulate, create and modify gettext files")
2006 (description "Polib can manipulate any gettext format (po, pot and mo)
2007 files. It can be used to create po files from scratch or to modify
2008 existing ones.")
2009 (license license:expat)))
2010
2011 (define-public python2-polib
2012 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2013 (package
2014 (inherit base)
2015 (arguments `(,@(package-arguments base)
2016 ;; Tests don't work with python2.
2017 #:tests? #f)))))
2018
2019 (define-public python-poyo
2020 (package
2021 (name "python-poyo")
2022 (version "0.5.0")
2023 (source
2024 (origin
2025 (method url-fetch)
2026 (uri (pypi-uri "poyo" version))
2027 (sha256
2028 (base32
2029 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2030 (build-system python-build-system)
2031 (home-page "https://github.com/hackebrot/poyo")
2032 (synopsis "Lightweight YAML Parser for Python")
2033 (description
2034 "This package provides a lightweight YAML Parser for Python. It supports
2035 only a chosen subset of the YAML format that is required to parse cookiecutter
2036 user configuration files. It does not have support for serializing into YAML
2037 and is not compatible with JSON.")
2038 (license license:expat)))
2039
2040 (define-public scons
2041 (package
2042 (name "scons")
2043 (version "3.0.4")
2044 (source (origin
2045 (method git-fetch)
2046 (uri (git-reference
2047 (url "https://github.com/SCons/scons.git")
2048 (commit version)))
2049 (file-name (git-file-name name version))
2050 (sha256
2051 (base32
2052 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2053 (build-system python-build-system)
2054 (arguments
2055 `(#:use-setuptools? #f ; still relies on distutils
2056 #:tests? #f ; no 'python setup.py test' command
2057 #:phases
2058 (modify-phases %standard-phases
2059 (add-before 'build 'bootstrap
2060 (lambda _
2061 (substitute* "src/engine/SCons/compat/__init__.py"
2062 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2063 "sys.modules[new] = __import__(old)"))
2064 (substitute* "src/engine/SCons/Platform/__init__.py"
2065 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2066 "mod = __import__(full_name)"))
2067 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2068 (chdir "build/scons")
2069 #t)))))
2070 (home-page "https://scons.org/")
2071 (synopsis "Software construction tool written in Python")
2072 (description
2073 "SCons is a software construction tool. Think of SCons as an improved,
2074 cross-platform substitute for the classic Make utility with integrated
2075 functionality similar to autoconf/automake and compiler caches such as ccache.
2076 In short, SCons is an easier, more reliable and faster way to build
2077 software.")
2078 (license license:x11)))
2079
2080 (define-public scons-python2
2081 (package
2082 (inherit (package-with-python2 scons))
2083 (name "scons-python2")))
2084
2085 (define-public python-extras
2086 (package
2087 (name "python-extras")
2088 (version "1.0.0")
2089 (source
2090 (origin
2091 (method url-fetch)
2092 (uri (pypi-uri "extras" version))
2093 (sha256
2094 (base32
2095 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2096 (build-system python-build-system)
2097 (arguments
2098 ;; FIXME: Circular dependency on testtools.
2099 '(#:tests? #f))
2100 (home-page "https://github.com/testing-cabal/extras")
2101 (synopsis "Useful extensions to the Python standard library")
2102 (description
2103 "Extras is a set of extensions to the Python standard library.")
2104 (license license:expat)))
2105
2106 (define-public python2-extras
2107 (package-with-python2 python-extras))
2108
2109 (define-public python-mimeparse
2110 (package
2111 (name "python-mimeparse")
2112 (version "1.6.0")
2113 (source
2114 (origin
2115 (method url-fetch)
2116 (uri (pypi-uri "python-mimeparse" version))
2117 (sha256
2118 (base32
2119 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2120 (build-system python-build-system)
2121 (arguments
2122 '(#:phases
2123 (modify-phases %standard-phases
2124 (replace 'check
2125 (lambda _
2126 (invoke "./mimeparse_test.py"))))))
2127 (home-page
2128 "https://github.com/dbtsai/python-mimeparse")
2129 (synopsis "Python library for parsing MIME types")
2130 (description
2131 "Mimeparse provides basic functions for parsing MIME type names and
2132 matching them against a list of media-ranges.")
2133 (license license:expat)))
2134
2135 (define-public python2-mimeparse
2136 (package-with-python2 python-mimeparse))
2137
2138 (define-public python-miniboa
2139 (package
2140 (name "python-miniboa")
2141 (version "1.0.7")
2142 (source
2143 (origin
2144 (method url-fetch)
2145 (uri (pypi-uri "miniboa" version))
2146 (sha256
2147 (base32
2148 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2149 (build-system python-build-system)
2150 (home-page "https://github.com/shmup/miniboa")
2151 (synopsis "Simple, single-threaded Telnet server")
2152 (description
2153 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2154 server.")
2155 (license license:asl2.0)))
2156
2157 (define-public python2-miniboa
2158 (package-with-python2 python-miniboa))
2159
2160 (define-public python-pafy
2161 (package
2162 (name "python-pafy")
2163 (version "0.5.3.1")
2164 (source
2165 (origin
2166 (method url-fetch)
2167 (uri (pypi-uri "pafy" version))
2168 (sha256
2169 (base32
2170 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2171 (build-system python-build-system)
2172 (arguments
2173 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2174 (propagated-inputs
2175 ;; Youtube-dl is a python package which is imported in the file
2176 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2177 `(("youtube-dl" ,youtube-dl)))
2178 (home-page "https://np1.github.io/pafy/")
2179 (synopsis "Retrieve YouTube content and metadata")
2180 (description
2181 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2182 (license license:lgpl3+)))
2183
2184 (define-public python2-funcsigs
2185 (package
2186 (name "python2-funcsigs")
2187 (version "1.0.2")
2188 (source (origin
2189 (method url-fetch)
2190 (uri (pypi-uri "funcsigs" version))
2191 (sha256
2192 (base32
2193 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2194 (build-system python-build-system)
2195 (arguments
2196 `(#:python ,python-2))
2197 (native-inputs
2198 `(("python2-unittest2" ,python2-unittest2)))
2199 (home-page "http://funcsigs.readthedocs.org")
2200 (synopsis "Python function signatures from PEP362")
2201 (description
2202 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2203 (license license:asl2.0)))
2204
2205 (define-public python2-funcsigs-bootstrap
2206 (package
2207 (inherit python2-funcsigs)
2208 (name "python2-funcsigs-bootstrap")
2209 (native-inputs `())
2210 (arguments
2211 `(#:tests? #f
2212 ,@(package-arguments python2-funcsigs)))))
2213
2214 (define-public python-py
2215 (package
2216 (name "python-py")
2217 (version "1.8.1")
2218 (source
2219 (origin
2220 (method url-fetch)
2221 (uri (pypi-uri "py" version))
2222 (sha256
2223 (base32
2224 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2225 (build-system python-build-system)
2226 (arguments
2227 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2228 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2229 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2230 ;; Is this module globally installed?"
2231 '(#:tests? #f))
2232 (native-inputs
2233 `(("python-setuptools-scm" ,python-setuptools-scm)))
2234 (home-page "https://github.com/pytest-dev/py")
2235 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2236 (description
2237 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2238 code introspection, and logging.")
2239 (license license:expat)))
2240
2241 (define-public python2-py
2242 (package-with-python2 python-py))
2243
2244 ;; Recent versions of python-fixtures and python-testrepository need
2245 ;; python-pbr for packaging, which itself needs these two packages for
2246 ;; testing.
2247 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2248 ;; same source, just without any test dependencies and with tests disabled.
2249 ;; python-pbr-minmal is then used to package python-fixtures and
2250 ;; python-testrepository.
2251 ;; Strictly speaking we currently could remove the test-requirements from the
2252 ;; normal python-pbr package (and save this package) since test are disabled
2253 ;; there anyway. But this may change in future.
2254 (define-public python-pbr-minimal
2255 (package
2256 (name "python-pbr-minimal")
2257 (version "3.0.1")
2258 (source
2259 (origin
2260 (method url-fetch)
2261 (uri (pypi-uri "pbr" version))
2262 (sha256
2263 (base32
2264 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2265 (build-system python-build-system)
2266 (arguments
2267 `(#:tests? #f))
2268 (home-page "https://docs.openstack.org/pbr/latest/")
2269 (synopsis "Minimal build of python-pbr used for bootstrapping")
2270 (description
2271 "Used only for bootstrapping python2-pbr, you should not need this.")
2272 (license license:asl2.0)))
2273
2274 (define-public python2-pbr-minimal
2275 (package-with-python2 python-pbr-minimal))
2276
2277 (define-public python-pbr
2278 (package
2279 (inherit python-pbr-minimal)
2280 (name "python-pbr")
2281 (arguments
2282 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2283 (propagated-inputs
2284 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2285 (native-inputs
2286 `(("python-fixtures" ,python-fixtures-bootstrap)
2287 ;; discover, coverage, hacking, subunit
2288 ("python-mock" ,python-mock)
2289 ("python-six" ,python-six)
2290 ("python-sphinx" ,python-sphinx)
2291 ("python-testrepository" ,python-testrepository-bootstrap)
2292 ("python-testresources" ,python-testresources-bootstrap)
2293 ("python-testscenarios" ,python-testscenarios-bootstrap)
2294 ("python-testtools" ,python-testtools-bootstrap)
2295 ("python-virtualenv" ,python-virtualenv)))
2296 (synopsis "Enhance the default behavior of Python’s setuptools")
2297 (description
2298 "Python Build Reasonableness (PBR) is a library that injects some useful
2299 and sensible default behaviors into your setuptools run. It will set
2300 versions, process requirements files and generate AUTHORS and ChangeLog file
2301 from git information.
2302 ")))
2303
2304 (define-public python2-pbr
2305 (package-with-python2 python-pbr))
2306
2307 (define-public python-pyrsistent
2308 (package
2309 (name "python-pyrsistent")
2310 (version "0.16.0")
2311 (home-page "https://github.com/tobgu/pyrsistent")
2312 (source (origin
2313 (method url-fetch)
2314 (uri (pypi-uri "pyrsistent" version))
2315 (sha256
2316 (base32
2317 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2318 (build-system python-build-system)
2319 (arguments
2320 '(#:phases (modify-phases %standard-phases
2321 ;; The package works fine with newer Pytest and Hypothesis, but
2322 ;; has pinned older versions to stay compatible with Python 2.
2323 (add-before 'check 'loosen-pytest-requirement
2324 (lambda _
2325 (substitute* "setup.py"
2326 (("pytest<5") "pytest")
2327 (("hypothesis<5") "hypothesis"))
2328 #t)))))
2329 (native-inputs
2330 `(("python-hypothesis" ,python-hypothesis)
2331 ("python-pytest" ,python-pytest)
2332 ("python-pytest-runner" ,python-pytest-runner)))
2333 (propagated-inputs
2334 `(("python-six" ,python-six)))
2335 (synopsis "Persistent data structures for Python")
2336 (description
2337 "Pyrsistent is a number of persistent collections (by some referred to as
2338 functional data structures). Persistent in the sense that they are immutable.
2339
2340 All methods on a data structure that would normally mutate it instead return a
2341 new copy of the structure containing the requested updates. The original
2342 structure is left untouched.")
2343 (license license:expat)))
2344
2345 (define-public python2-pyrsistent
2346 (package-with-python2 python-pyrsistent))
2347
2348 (define-public python-exif-read
2349 (package
2350 (name "python-exif-read")
2351 (version "2.1.2")
2352 (source (origin
2353 (method url-fetch)
2354 (uri (pypi-uri "ExifRead" version))
2355 (sha256
2356 (base32
2357 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2358 (build-system python-build-system)
2359 (arguments `(#:tests? #f)) ; no tests
2360 (home-page "https://github.com/ianare/exif-py")
2361 (synopsis "Python library to extract EXIF data from image files")
2362 (description
2363 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2364 files.")
2365 (license license:bsd-3)))
2366
2367 (define-public python2-exif-read
2368 (package-with-python2 python-exif-read))
2369
2370 (define-public python-pyld
2371 (package
2372 (name "python-pyld")
2373 (version "1.0.5")
2374 (source (origin
2375 (method url-fetch)
2376 (uri (pypi-uri "PyLD" version))
2377 (sha256
2378 (base32
2379 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2380 (build-system python-build-system)
2381 (home-page "https://github.com/digitalbazaar/pyld")
2382 (synopsis "Python implementation of the JSON-LD specification")
2383 (description
2384 "PyLD is an implementation of the JSON-LD specification.")
2385 (license license:bsd-3)))
2386
2387 (define-public python2-pyld
2388 (package-with-python2 python-pyld))
2389
2390 (define-public python-click
2391 (package
2392 (name "python-click")
2393 (version "7.0")
2394 (source
2395 (origin
2396 (method url-fetch)
2397 (uri (pypi-uri "click" version))
2398 (sha256
2399 (base32
2400 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2401 (build-system python-build-system)
2402 (arguments
2403 `(#:phases
2404 (modify-phases %standard-phases
2405 (add-after 'unpack 'fix-paths
2406 (lambda* (#:key inputs #:allow-other-keys)
2407 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2408 "cross-libc" "libc"))))
2409 (substitute* "click/_unicodefun.py"
2410 (("'locale'")
2411 (string-append "'" glibc "/bin/locale'"))))
2412 #t))
2413 (replace 'check
2414 (lambda _
2415 (invoke "python" "-m" "pytest"))))))
2416 (native-inputs
2417 `(("python-pytest" ,python-pytest)))
2418 (home-page "https://palletsprojects.com/p/click/")
2419 (synopsis "Command line library for Python")
2420 (description
2421 "Click is a Python package for creating command line interfaces in a
2422 composable way with as little code as necessary. Its name stands for
2423 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2424 with sensible defaults out of the box.")
2425 (license license:bsd-3)))
2426
2427 (define-public python2-click
2428 (package-with-python2 python-click))
2429
2430 (define-public python-wheel
2431 (package
2432 (name "python-wheel")
2433 (version "0.33.6")
2434 (source
2435 (origin
2436 (method url-fetch)
2437 (uri (pypi-uri "wheel" version))
2438 (sha256
2439 (base32
2440 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2441 (build-system python-build-system)
2442 (arguments
2443 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2444 ;; fails to find the newly-built bdist_wheel library, even though it is
2445 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2446 '(#:tests? #f))
2447 (home-page "https://bitbucket.org/pypa/wheel/")
2448 (synopsis "Format for built Python packages")
2449 (description
2450 "A wheel is a ZIP-format archive with a specially formatted filename and
2451 the @code{.whl} extension. It is designed to contain all the files for a PEP
2452 376 compatible install in a way that is very close to the on-disk format. Many
2453 packages will be properly installed with only the @code{Unpack} step and the
2454 unpacked archive preserves enough information to @code{Spread} (copy data and
2455 scripts to their final locations) at any later time. Wheel files can be
2456 installed with a newer @code{pip} or with wheel's own command line utility.")
2457 (license license:expat)))
2458
2459 (define-public python2-wheel
2460 (package-with-python2 python-wheel))
2461
2462 (define-public python-vcversioner
2463 (package
2464 (name "python-vcversioner")
2465 (version "2.16.0.0")
2466 (source
2467 (origin
2468 (method url-fetch)
2469 (uri (pypi-uri "vcversioner" version))
2470 (sha256
2471 (base32
2472 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2473 (build-system python-build-system)
2474 (synopsis "Python library for version number discovery")
2475 (description "Vcversioner is a Python library that inspects tagging
2476 information in a variety of version control systems in order to discover
2477 version numbers.")
2478 (home-page "https://github.com/habnabit/vcversioner")
2479 (license license:isc)))
2480
2481 (define-public python2-vcversioner
2482 (package-with-python2 python-vcversioner))
2483
2484 (define-public python-jdcal
2485 (package
2486 (name "python-jdcal")
2487 (version "1.4")
2488 (source
2489 (origin
2490 (method url-fetch)
2491 (uri (pypi-uri "jdcal" version))
2492 (sha256
2493 (base32
2494 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2495 (build-system python-build-system)
2496 (arguments
2497 `(#:phases (modify-phases %standard-phases
2498 (replace 'check
2499 (lambda _
2500 (invoke "pytest"))))))
2501 (native-inputs
2502 `(("python-pytest" ,python-pytest)))
2503 (home-page "https://github.com/phn/jdcal")
2504 (synopsis "Functions to convert between Julian dates Gregorian dates")
2505 (description "This Python library provides functions for converting
2506 between Julian dates and Gregorian dates.")
2507 (license license:bsd-2)))
2508
2509 (define-public python2-jdcal
2510 (package-with-python2 python-jdcal))
2511
2512 (define-public python-jsondiff
2513 (package
2514 (name "python-jsondiff")
2515 (version "1.2.0")
2516 (source
2517 (origin
2518 (method url-fetch)
2519 (uri (pypi-uri "jsondiff" version))
2520 (sha256
2521 (base32
2522 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2523 (build-system python-build-system)
2524 (native-inputs
2525 `(("python-nose" ,python-nose)
2526 ("python-nose-random" ,python-nose-random)))
2527 (home-page
2528 "https://github.com/fzumstein/jsondiff")
2529 (synopsis "Compare JSON and JSON-like structures in Python")
2530 (description "@code{jsondiff} is a Python library which lets you
2531 compare, diff, and patch JSON and JSON-like structures in Python.")
2532 (license license:expat)))
2533
2534 (define-public python-jsonschema
2535 (package
2536 (name "python-jsonschema")
2537 (version "3.2.0")
2538 (source (origin
2539 (method url-fetch)
2540 (uri (pypi-uri "jsonschema" version))
2541 (sha256
2542 (base32
2543 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2544 (build-system python-build-system)
2545 (arguments
2546 '(#:phases
2547 (modify-phases %standard-phases
2548 (replace 'check
2549 (lambda* (#:key inputs outputs #:allow-other-keys)
2550 (add-installed-pythonpath inputs outputs)
2551 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2552 (invoke "trial" "jsonschema"))))))
2553 (native-inputs
2554 `(("python-setuptools_scm" ,python-setuptools-scm)
2555 ("python-twisted" ,python-twisted)))
2556 (propagated-inputs
2557 `(("python-attrs" ,python-attrs)
2558 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2559 ("python-pyrsistent" ,python-pyrsistent)
2560 ("python-six" ,python-six)))
2561 (home-page "https://github.com/Julian/jsonschema")
2562 (synopsis "Implementation of JSON Schema for Python")
2563 (description
2564 "Jsonschema is an implementation of JSON Schema for Python.")
2565 (license license:expat)
2566 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2567
2568 (define-public python2-jsonschema
2569 (let ((jsonschema (package-with-python2
2570 (strip-python2-variant python-jsonschema))))
2571 (package (inherit jsonschema)
2572 (propagated-inputs
2573 `(("python2-functools32" ,python2-functools32)
2574 ,@(package-propagated-inputs jsonschema))))))
2575
2576 (define-public python-schema
2577 (package
2578 (name "python-schema")
2579 (version "0.6.6")
2580 (source
2581 (origin
2582 (method url-fetch)
2583 (uri (pypi-uri "schema" version))
2584 (sha256
2585 (base32
2586 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2587 (build-system python-build-system)
2588 (native-inputs
2589 `(("python-pytest" ,python-pytest)))
2590 (home-page "https://github.com/keleshev/schema")
2591 (synopsis "Simple data validation library")
2592 (description
2593 "@code{python-schema} is a library for validating Python data
2594 structures, such as those obtained from config-files, forms, external
2595 services or command-line parsing, converted from JSON/YAML (or
2596 something else) to Python data-types.")
2597 (license license:psfl)))
2598
2599 (define-public python2-schema
2600 (package-with-python2 python-schema))
2601
2602 (define-public python-schema-0.5
2603 (package (inherit python-schema)
2604 (version "0.5.0")
2605 (source
2606 (origin
2607 (method url-fetch)
2608 (uri (pypi-uri "schema" version))
2609 (sha256
2610 (base32
2611 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2612
2613 (define-public python2-schema-0.5
2614 (package-with-python2 python-schema-0.5))
2615
2616 (define-public python-kitchen
2617 (package
2618 (name "python-kitchen")
2619 (version "1.2.5")
2620 (source
2621 (origin
2622 (method url-fetch)
2623 (uri (pypi-uri "kitchen" version))
2624 (sha256
2625 (base32
2626 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2627 (build-system python-build-system)
2628 (propagated-inputs
2629 `(("python-chardet" ,python-chardet)))
2630 (home-page "https://github.com/fedora-infra/kitchen")
2631 (synopsis "Python API for snippets")
2632 (description "@code{kitchen} module provides a python API for all sorts of
2633 little useful snippets of code that everybody ends up writing for their projects
2634 but never seem big enough to build an independent release. Use kitchen and stop
2635 cutting and pasting that code over and over.")
2636 (license (list license:lgpl2.1+
2637 ;; subprocess.py, test_subprocess.py,
2638 ;; kitchen/pycompat25/defaultdict.py:
2639 license:psfl))))
2640
2641 (define-public python2-kitchen
2642 (package-with-python2 python-kitchen))
2643
2644 (define-public python-unidecode
2645 (package
2646 (name "python-unidecode")
2647 (version "1.1.1")
2648 (source (origin
2649 (method url-fetch)
2650 (uri (pypi-uri "Unidecode" version))
2651 (sha256
2652 (base32
2653 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2654 (build-system python-build-system)
2655 (home-page "https://pypi.org/project/Unidecode/")
2656 (synopsis "ASCII transliterations of Unicode text")
2657 (description
2658 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2659 useful when integrating with legacy code that doesn't support Unicode, or for
2660 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2661 machine identifiers from human-readable Unicode strings that should still be
2662 somewhat intelligible.")
2663 (license license:gpl2+)))
2664
2665 (define-public python2-unidecode
2666 (package-with-python2 python-unidecode))
2667
2668 (define-public python-text-unidecode
2669 (package
2670 (name "python-text-unidecode")
2671 (version "1.3")
2672 (source (origin
2673 (method url-fetch)
2674 (uri (pypi-uri "text-unidecode" version))
2675 (sha256
2676 (base32
2677 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2678 (build-system python-build-system)
2679 (arguments
2680 '(#:phases (modify-phases %standard-phases
2681 (replace 'check
2682 (lambda _
2683 (setenv "PYTHONPATH"
2684 (string-append "./build/lib:"
2685 (getenv "PYTHONPATH")))
2686 (invoke "pytest" "-vv"))))))
2687 (native-inputs
2688 `(("python-pytest" ,python-pytest)))
2689 (home-page "https://github.com/kmike/text-unidecode/")
2690 (synopsis "Decode Unicode data")
2691 (description
2692 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2693 Perl library. It can create ASCII representations of Unicode data. In general
2694 users should prefer the @code{python-unidecode} package which offers better
2695 memory usage and transliteration quality.")
2696 ;; The user can choose either license.
2697 (license (list license:clarified-artistic license:gpl2+))))
2698
2699 (define-public python2-text-unidecode
2700 (package-with-python2 python-text-unidecode))
2701
2702 (define-public python-pyjwt
2703 (package
2704 (name "python-pyjwt")
2705 (version "1.7.1")
2706 (source
2707 (origin
2708 (method url-fetch)
2709 (uri (pypi-uri "PyJWT" version))
2710 (sha256
2711 (base32
2712 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2713 (modules '((guix build utils)))
2714 (snippet
2715 '(begin
2716 (for-each delete-file-recursively
2717 (find-files "." "\\.pyc$"))
2718 #t))))
2719 (build-system python-build-system)
2720 (arguments
2721 '(#:phases (modify-phases %standard-phases
2722 (replace 'check
2723 (lambda _
2724 ;; Mimic upstream commit 3a20892442b34c7 to get
2725 ;; rid of dependency on pytest-runner < 5.0.
2726 ;; Remove substitution for PyJWT > 1.7.1.
2727 (substitute* "setup.py"
2728 ((".*pytest-runner.*")
2729 ""))
2730 (invoke "pytest" "-vv"))))))
2731 (native-inputs
2732 `(("python-pytest" ,python-pytest)
2733 ("python-pytest-cov" ,python-pytest-cov)))
2734 (home-page "https://github.com/progrium/pyjwt")
2735 (synopsis "JSON Web Token implementation in Python")
2736 (description
2737 "PyJWT is a JSON Web Token implementation written in Python.")
2738 (license license:expat)))
2739
2740 (define-public python2-pyjwt
2741 (package-with-python2 python-pyjwt))
2742
2743 (define-public python-pykka
2744 (package
2745 (name "python-pykka")
2746 (version "1.2.1")
2747 (source
2748 (origin
2749 (method url-fetch)
2750 (uri (pypi-uri "Pykka" version))
2751 (sha256
2752 (base32
2753 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2754 (build-system python-build-system)
2755 (native-inputs
2756 `(("python-mock" ,python-mock)
2757 ("python-nose" ,python-nose)
2758 ("python-gevent" ,python-gevent)
2759 ("python-eventlet" ,python-eventlet)))
2760 (home-page "https://www.pykka.org/")
2761 (synopsis "Pykka is a Python implementation of the actor model")
2762 (description
2763 "Pykka is a Python implementation of the actor model.
2764 The actor model introduces some simple rules to control the sharing
2765 of state and cooperation between execution units, which makes it
2766 easier to build concurrent applications.")
2767 (license license:asl2.0)))
2768
2769 (define-public python2-pykka
2770 (package-with-python2 python-pykka))
2771
2772 (define-public python-pymsgbox
2773 (package
2774 (name "python-pymsgbox")
2775 (version "1.0.6")
2776 (source
2777 (origin
2778 (method git-fetch)
2779 (uri (git-reference
2780 ;; LICENSE.txt is not present on pypi
2781 (url "https://github.com/asweigart/PyMsgBox")
2782 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2783 (file-name (git-file-name name version))
2784 (sha256
2785 (base32
2786 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2787 (arguments
2788 ;; Circular dependency to run tests:
2789 ;; Tests need pyautogui, which depends on pymsgbox.
2790 '(#:tests? #f))
2791 (build-system python-build-system)
2792 (home-page "https://github.com/asweigart/PyMsgBox")
2793 (synopsis "Python module for JavaScript-like message boxes")
2794 (description
2795 "PyMsgBox is a simple, cross-platform, pure Python module for
2796 JavaScript-like message boxes. Types of dialog boxes include:
2797 @enumerate
2798 @item alert
2799 @item confirm
2800 @item prompt
2801 @item password
2802 @end enumerate
2803 ")
2804 (license license:bsd-3)))
2805
2806 (define-public python-pympler
2807 (package
2808 (name "python-pympler")
2809 (home-page "https://pythonhosted.org/Pympler/")
2810 (version "0.8")
2811 (source (origin
2812 (method url-fetch)
2813 (uri (pypi-uri "Pympler" version))
2814 (sha256
2815 (base32
2816 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2817 (build-system python-build-system)
2818 (arguments
2819 `(#:phases (modify-phases %standard-phases
2820 (delete 'check)
2821 (add-after 'install 'check
2822 (lambda* (#:key inputs outputs #:allow-other-keys)
2823 (add-installed-pythonpath inputs outputs)
2824 (invoke "python" "setup.py" "test"))))))
2825 (synopsis "Measure, monitor and analyze memory behavior")
2826 (description
2827 "Pympler is a development tool to measure, monitor and analyze
2828 the memory behavior of Python objects in a running Python application.
2829
2830 By pympling a Python application, detailed insight in the size and the
2831 lifetime of Python objects can be obtained. Undesirable or unexpected
2832 runtime behavior like memory bloat and other @samp{pymples} can easily
2833 be identified.
2834
2835 A web profiling frontend exposes process statistics, garbage
2836 visualisation and class tracker statistics.")
2837 (license license:asl2.0)))
2838
2839 (define-public python2-pympler
2840 (package-with-python2 python-pympler))
2841
2842 (define-public python-itsdangerous
2843 (package
2844 (name "python-itsdangerous")
2845 (version "1.1.0")
2846 (source
2847 (origin
2848 (method url-fetch)
2849 (uri (pypi-uri "itsdangerous" version))
2850 (sha256
2851 (base32
2852 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2853 (build-system python-build-system)
2854 (home-page "https://palletsprojects.com/p/itsdangerous/")
2855 (synopsis "Python library for passing data to/from untrusted environments")
2856 (description
2857 "Itsdangerous provides various helpers to pass trusted data to untrusted
2858 environments and back.")
2859 (license license:bsd-3)))
2860
2861 (define-public python2-itsdangerous
2862 (package-with-python2 python-itsdangerous))
2863
2864 (define-public python-pyyaml
2865 (package
2866 (name "python-pyyaml")
2867 (version "5.3.1")
2868 (source
2869 (origin
2870 (method url-fetch)
2871 (uri (pypi-uri "PyYAML" version))
2872 (sha256
2873 (base32
2874 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2875 (build-system python-build-system)
2876 (inputs
2877 `(("libyaml" ,libyaml)))
2878 (home-page "https://pyyaml.org")
2879 (synopsis "YAML parser and emitter for Python")
2880 (description
2881 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2882 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2883 API, and sensible error messages. PyYAML supports standard YAML tags and
2884 provides Python-specific tags that represent an arbitrary Python object.")
2885 (license license:expat)))
2886
2887 (define-public python2-pyyaml
2888 (package-with-python2 python-pyyaml))
2889
2890 (define-public python-vine
2891 (package
2892 (name "python-vine")
2893 (version "1.1.4")
2894 (source
2895 (origin
2896 (method url-fetch)
2897 (uri (pypi-uri "vine" version))
2898 (sha256
2899 (base32
2900 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2901 (build-system python-build-system)
2902 (native-inputs
2903 `(("python-pytest" ,python-pytest)
2904 ("python-case" ,python-case)))
2905 (home-page "https://github.com/celery/vine")
2906 (synopsis "Promises for Python")
2907 (description
2908 "@code{vine} provides a special implementation of promises in that it can
2909 be used both for \"promise of a value\" and lazy evaluation. The biggest
2910 upside for this is that everything in a promise can also be a promise,
2911 e.g. filters, callbacks and errbacks can all be promises.")
2912 (license license:bsd-3)))
2913
2914 (define-public python-virtualenv
2915 (package
2916 (name "python-virtualenv")
2917 (version "20.0.10")
2918 (source
2919 (origin
2920 (method url-fetch)
2921 (uri (pypi-uri "virtualenv" version))
2922 (sha256
2923 (base32
2924 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2925 (build-system python-build-system)
2926 (native-inputs
2927 `(("python-mock" ,python-mock)
2928 ("python-pytest" ,python-pytest)
2929 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2930 ;; be an input at all". However, removing the input makes the build error:
2931 ;; File "setup.py", line 4, in <module>
2932 ;; raise RuntimeError("setuptools >= 41 required to build")
2933 ("python-setuptools" ,python-setuptools)
2934 ("python-setuptools-scm" ,python-setuptools-scm)))
2935 (propagated-inputs
2936 `(("python-appdirs" ,python-appdirs)
2937 ("python-distlib" ,python-distlib)
2938 ("python-filelock" ,python-filelock)
2939 ("python-six" ,python-six)
2940 ("python-importlib-metadata" ,python-importlib-metadata)))
2941 (home-page "https://virtualenv.pypa.io/")
2942 (synopsis "Virtual Python environment builder")
2943 (description
2944 "Virtualenv is a tool to create isolated Python environments.")
2945 (properties `((python2-variant . ,(delay python2-virtualenv))))
2946 (license license:expat)))
2947
2948 (define-public python2-virtualenv
2949 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2950 (package
2951 (inherit base)
2952 (arguments
2953 `(#:python ,python-2
2954 #:phases
2955 (modify-phases %standard-phases
2956 (add-after 'set-paths 'adjust-PYTHONPATH
2957 (lambda* (#:key inputs #:allow-other-keys)
2958 (let* ((python (assoc-ref inputs "python"))
2959 (python-sitedir (string-append python "/lib/python2.7"
2960 "/site-packages")))
2961 ;; XXX: 'python2' always comes first on PYTHONPATH
2962 ;; and shadows the 'setuptools' input. Move python2
2963 ;; last: this should be fixed in python-build-system
2964 ;; in a future rebuild cycle.
2965 (setenv "PYTHONPATH"
2966 (string-append (string-join (delete python-sitedir
2967 (string-split
2968 (getenv "PYTHONPATH")
2969 #\:))
2970 ":")
2971 ":" python-sitedir))
2972 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2973 (getenv "PYTHONPATH"))
2974 #t))))))
2975 (propagated-inputs
2976 `(("python-contextlib2" ,python2-contextlib2)
2977 ,@(package-propagated-inputs base))))))
2978
2979 (define-public python-markupsafe
2980 (package
2981 (name "python-markupsafe")
2982 (version "1.1.1")
2983 (source
2984 (origin
2985 (method url-fetch)
2986 (uri (pypi-uri "MarkupSafe" version))
2987 (sha256
2988 (base32
2989 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2990 (build-system python-build-system)
2991 (arguments
2992 `(#:modules ((ice-9 ftw)
2993 (srfi srfi-1)
2994 (srfi srfi-26)
2995 (guix build utils)
2996 (guix build python-build-system))
2997 #:phases (modify-phases %standard-phases
2998 (replace 'check
2999 (lambda _
3000 (let ((cwd (getcwd))
3001 (libdir (find (cut string-prefix? "lib." <>)
3002 (scandir "build"))))
3003 (setenv "PYTHONPATH"
3004 (string-append cwd "/build/" libdir ":"
3005 (getenv "PYTHONPATH")))
3006 (invoke "pytest" "-vv")))))))
3007 (native-inputs
3008 `(("python-pytest" ,python-pytest)))
3009 (home-page "https://github.com/mitsuhiko/markupsafe")
3010 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3011 (description
3012 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3013 for Python.")
3014 (license license:bsd-3)))
3015
3016 (define-public python2-markupsafe
3017 (package-with-python2 python-markupsafe))
3018
3019 (define-public python-jinja2
3020 (package
3021 (name "python-jinja2")
3022 (version "2.11.1")
3023 (source
3024 (origin
3025 (method url-fetch)
3026 (uri (pypi-uri "Jinja2" version))
3027 (sha256
3028 (base32
3029 "0l72c11n959yzb8d3ankckb6yhjhm6x729zm7rkpk040qzxpy64k"))))
3030 (build-system python-build-system)
3031 (arguments
3032 '(#:phases (modify-phases %standard-phases
3033 (replace 'check
3034 (lambda* (#:key tests? #:allow-other-keys)
3035 (if tests?
3036 (begin
3037 (setenv "PYTHONPATH"
3038 (string-append "./build/lib:"
3039 (getenv "PYTHONPATH")))
3040 (invoke "pytest" "-vv"))
3041 (format #t "test suite not run~%"))
3042 #t)))))
3043 (native-inputs
3044 `(("python-pytest" ,python-pytest)))
3045 (propagated-inputs
3046 `(("python-markupsafe" ,python-markupsafe)))
3047 (home-page "http://jinja.pocoo.org/")
3048 (synopsis "Python template engine")
3049 (description
3050 "Jinja2 is a small but fast and easy to use stand-alone template engine
3051 written in pure Python.")
3052 (license license:bsd-3)))
3053
3054 (define-public python2-jinja2
3055 (package-with-python2 python-jinja2))
3056
3057 (define-public python-jinja2-time
3058 (package
3059 (name "python-jinja2-time")
3060 (version "0.2.0")
3061 (source
3062 (origin
3063 (method url-fetch)
3064 (uri (pypi-uri "jinja2-time" version))
3065 (sha256
3066 (base32
3067 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3068 (build-system python-build-system)
3069 (propagated-inputs
3070 `(("python-arrow" ,python-arrow)
3071 ("python-jinja2" ,python-jinja2)))
3072 (home-page
3073 "https://github.com/hackebrot/jinja2-time")
3074 (synopsis "Jinja2 Extension for Dates and Times")
3075 (description
3076 "This package provides an extension for the template engine Jinja2. It
3077 adds a 'now' tag providing a convenient access to the arrow.now() API from
3078 templates. A format string can be provided to control the output.")
3079 (license license:expat)))
3080
3081 (define-public python-pystache
3082 (package
3083 (name "python-pystache")
3084 (version "0.5.4")
3085 (source (origin
3086 (method url-fetch)
3087 (uri (pypi-uri "pystache" version))
3088 (sha256
3089 (base32
3090 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3091 (build-system python-build-system)
3092 (arguments
3093 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3094 (home-page "http://defunkt.io/pystache/")
3095 (synopsis "Python logic-less template engine")
3096 (description
3097 "Pystache is a Python implementation of the framework agnostic,
3098 logic-free templating system Mustache.")
3099 (license license:expat)
3100 (properties `((python2-variant . ,(delay python2-pystache))))))
3101
3102 (define-public python2-pystache
3103 (package (inherit (package-with-python2
3104 (strip-python2-variant python-pystache)))
3105 (arguments
3106 `(#:python ,python-2
3107 #:phases
3108 (modify-phases %standard-phases
3109 (replace 'check
3110 (lambda _
3111 (invoke "python" "test_pystache.py"))))))))
3112
3113 (define-public python-joblib
3114 (package
3115 (name "python-joblib")
3116 (version "0.14.1")
3117 (source (origin
3118 (method url-fetch)
3119 (uri (pypi-uri "joblib" version))
3120 (sha256
3121 (base32
3122 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3123 (build-system python-build-system)
3124 (arguments
3125 `(#:phases
3126 (modify-phases %standard-phases
3127 (replace 'check
3128 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3129 (native-inputs
3130 `(("python-pytest" ,python-pytest)))
3131 (home-page "https://joblib.readthedocs.io/")
3132 (synopsis "Using Python functions as pipeline jobs")
3133 (description
3134 "Joblib is a set of tools to provide lightweight pipelining in Python.
3135 In particular, joblib offers: transparent disk-caching of the output values
3136 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3137 logging and tracing of the execution.")
3138 (license license:bsd-3)))
3139
3140 (define-public python2-joblib
3141 (package-with-python2 python-joblib))
3142
3143 (define-public python-daemon
3144 (package
3145 (name "python-daemon")
3146 (version "2.2.3")
3147 (source
3148 (origin
3149 (method url-fetch)
3150 (uri (pypi-uri "python-daemon" version))
3151 (sha256
3152 (base32
3153 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3154 (build-system python-build-system)
3155 (arguments
3156 `(#:phases
3157 (modify-phases %standard-phases
3158 (add-before 'check 'disable-tests
3159 (lambda _
3160 ;; FIXME: Determine why test fails
3161 (substitute* "test/test_daemon.py"
3162 (("test_detaches_process_context")
3163 "skip_test_detaches_process_context"))
3164 #t)))))
3165 (propagated-inputs
3166 `(("python-lockfile" ,python-lockfile)))
3167 (native-inputs
3168 `(("python-unittest2" ,python-unittest2)
3169 ("python-testtools" ,python-testtools)
3170 ("python-testscenarios" ,python-testscenarios)
3171 ("python-mock" ,python-mock)
3172 ("python-docutils" ,python-docutils)))
3173 (home-page "https://pagure.io/python-daemon/")
3174 (synopsis "Python library for making a Unix daemon process")
3175 (description "Python-daemon is a library that assists a Python program to
3176 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3177
3178 This library provides a @code{DaemonContext} class that manages the following
3179 important tasks for becoming a daemon process:
3180 @enumerate
3181 @item Detach the process into its own process group.
3182 @item Set process environment appropriate for running inside a chroot.
3183 @item Renounce suid and sgid privileges.
3184 @item Close all open file descriptors.
3185 @item Change the working directory, uid, gid, and umask.
3186 @item Set appropriate signal handlers.
3187 @item Open new file descriptors for stdin, stdout, and stderr.
3188 @item Manage a specified PID lock file.
3189 @item Register cleanup functions for at-exit processing.
3190 @end enumerate")
3191 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3192 (license (list license:asl2.0 license:gpl3+))))
3193
3194 (define-public python-anytree
3195 (package
3196 (name "python-anytree")
3197 (version "2.8.0")
3198 (source (origin
3199 (method url-fetch)
3200 (uri (pypi-uri "anytree" version))
3201 (sha256
3202 (base32
3203 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3204 (build-system python-build-system)
3205 (propagated-inputs
3206 `(("python-six" ,python-six)))
3207 (native-inputs
3208 `(;; For tests.
3209 ("graphviz" ,graphviz) ;for 'dot'
3210 ("python-nose" ,python-nose)))
3211 (home-page "https://github.com/c0fec0de/anytree")
3212 (synopsis "Lightweight tree data library")
3213 (description
3214 "@code{anytree} is a simple, lightweight, and extensible tree data
3215 structure for Python.")
3216 (license license:asl2.0)))
3217
3218 (define-public python-docutils
3219 (package
3220 (name "python-docutils")
3221 (version "0.16")
3222 (source
3223 (origin
3224 (method url-fetch)
3225 (uri (pypi-uri "docutils" version))
3226 (sha256
3227 (base32
3228 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3229 (build-system python-build-system)
3230 (arguments
3231 '(#:phases (modify-phases %standard-phases
3232 (replace 'check
3233 (lambda* (#:key tests? #:allow-other-keys)
3234 (if tests?
3235 (invoke "python" "test/alltests.py")
3236 (format #t "test suite not run~%"))
3237 #t)))))
3238 (home-page "http://docutils.sourceforge.net/")
3239 (synopsis "Python Documentation Utilities")
3240 (description
3241 "Docutils is a modular system for processing documentation into useful
3242 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3243 reStructuredText.")
3244 ;; Most of the source code is public domain, but some source files are
3245 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3246 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3247
3248 (define-public python2-docutils
3249 (package-with-python2 python-docutils))
3250
3251 ;; python2-sphinx fails its test suite with newer versions.
3252 (define-public python2-docutils-0.14
3253 (package
3254 (inherit python2-docutils)
3255 (version "0.14")
3256 (source (origin
3257 (method url-fetch)
3258 (uri (pypi-uri "docutils" version))
3259 (sha256
3260 (base32
3261 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3262
3263 (define-public python-restructuredtext-lint
3264 (package
3265 (name "python-restructuredtext-lint")
3266 (version "1.3.0")
3267 (source
3268 (origin
3269 (method url-fetch)
3270 (uri (pypi-uri "restructuredtext-lint" version))
3271 (sha256
3272 (base32
3273 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3274 (build-system python-build-system)
3275 (arguments
3276 `(#:phases
3277 (modify-phases %standard-phases
3278 (delete 'check)
3279 (add-after 'install 'check
3280 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3281 (when tests?
3282 (add-installed-pythonpath inputs outputs)
3283 (invoke "nosetests" "-v"))
3284 #t)))))
3285 (propagated-inputs
3286 `(("python-docutils" ,python-docutils)))
3287 (native-inputs
3288 `(("python-nose" ,python-nose)))
3289 (home-page "https://github.com/twolfson/restructuredtext-lint")
3290 (synopsis "reStructuredText linter")
3291 (description "This package provides a linter for the reStructuredText
3292 format.")
3293 (license license:unlicense)))
3294
3295 (define-public python-doc8
3296 (package
3297 (name "python-doc8")
3298 (version "0.8.0")
3299 (source
3300 (origin
3301 (method url-fetch)
3302 (uri (pypi-uri "doc8" version))
3303 (sha256
3304 (base32
3305 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3306 (build-system python-build-system)
3307 (arguments
3308 `(#:phases
3309 (modify-phases %standard-phases
3310 (delete 'check)
3311 (add-after 'install 'check
3312 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3313 (when tests?
3314 (add-installed-pythonpath inputs outputs)
3315 (invoke "pytest" "-v"))
3316 #t)))))
3317 (propagated-inputs
3318 `(("python-chardet" ,python-chardet)
3319 ("python-docutils" ,python-docutils)
3320 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3321 ("python-six" ,python-six)
3322 ("python-stevedore" ,python-stevedore)))
3323 (native-inputs
3324 `(("python-testtools" ,python-testtools)
3325 ("python-pytest" ,python-pytest)))
3326 (home-page "https://launchpad.net/doc8")
3327 (synopsis
3328 "Style checker for Sphinx (or other) RST documentation")
3329 (description
3330 "Doc8 is an opinionated style checker for reStructured Text and plain
3331 text styles of documentation.")
3332 (license license:asl2.0)))
3333
3334 (define-public python-pygments
3335 (package
3336 (name "python-pygments")
3337 (version "2.5.2")
3338 (source
3339 (origin
3340 (method url-fetch)
3341 (uri (pypi-uri "Pygments" version))
3342 (sha256
3343 (base32
3344 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3345 (build-system python-build-system)
3346 (arguments
3347 ;; FIXME: Tests require sphinx, which depends on this.
3348 '(#:tests? #f))
3349 (home-page "https://pygments.org/")
3350 (synopsis "Syntax highlighting")
3351 (description
3352 "Pygments is a syntax highlighting package written in Python.")
3353 (license license:bsd-2)))
3354
3355 (define-public python2-pygments
3356 (package-with-python2 python-pygments))
3357
3358 (define-public python-bumpversion
3359 (package
3360 (name "python-bumpversion")
3361 (version "0.5.3")
3362 (source
3363 (origin
3364 (method url-fetch)
3365 (uri (pypi-uri "bumpversion" version))
3366 (sha256
3367 (base32
3368 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3369 (build-system python-build-system)
3370 (home-page "https://github.com/peritus/bumpversion")
3371 (synopsis "Tool to bump software version")
3372 (description "This tool provides a command-line interface (CLI) to bump a
3373 software version simply.")
3374 (license license:expat)))
3375
3376 (define-public python-deprecated
3377 (package
3378 (name "python-deprecated")
3379 (version "1.2.5")
3380 (source
3381 (origin
3382 (method git-fetch)
3383 (uri (git-reference
3384 (url "https://github.com/tantale/deprecated.git")
3385 (commit (string-append "v" version))))
3386 (file-name (git-file-name name version))
3387 (sha256
3388 (base32
3389 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3390 (build-system python-build-system)
3391 (arguments
3392 `(#:phases (modify-phases %standard-phases
3393 (replace 'check
3394 (lambda _
3395 (invoke "pytest"))))))
3396 (propagated-inputs
3397 `(("python-wrapt" ,python-wrapt)))
3398 (native-inputs
3399 `(("python-bumpversion" ,python-bumpversion)
3400 ("python-pytest" ,python-pytest)
3401 ("python-pytest-cov" ,python-pytest-cov)
3402 ("python-sphinx" ,python-sphinx)
3403 ("python-tox" ,python-tox)))
3404 (home-page "https://github.com/tantale/deprecated")
3405 (synopsis "Python decorator to deprecate classes, functions or methods")
3406 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3407 to deprecate classes, functions or methods.")
3408 (license license:expat)))
3409
3410 (define-public python-pygithub
3411 (package
3412 (name "python-pygithub")
3413 (version "1.43.8")
3414 (source
3415 ;; We fetch from the Git repo because there are no tests in the PyPI
3416 ;; archive.
3417 (origin
3418 (method git-fetch)
3419 (uri (git-reference
3420 (url "https://github.com/PyGithub/PyGithub.git")
3421 (commit (string-append "v" version))))
3422 (file-name (git-file-name name version))
3423 (sha256
3424 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3425 (build-system python-build-system)
3426 (arguments
3427 `(#:phases (modify-phases %standard-phases
3428 ;; Some tests rely on the network.
3429 (add-after 'unpack 'disable-failing-tests
3430 (lambda _
3431 (substitute* "tests/Issue142.py"
3432 (("testDecodeJson") "disabled_testDecodeJson"))
3433 #t))
3434 (add-before 'check 'prepare-for-tests
3435 (lambda _
3436 (for-each (lambda (f)
3437 (chmod f #o666))
3438 (find-files "./tests"))
3439 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3440 (setenv "PYTHONPATH"
3441 (string-append "./tests:" (getenv "PYTHONPATH")))
3442 #t)))))
3443 (propagated-inputs
3444 `(("python-deprecated" ,python-deprecated)
3445 ("python-pyjwt" ,python-pyjwt)
3446 ("python-requests" ,python-requests)))
3447 (native-inputs `(("python-httpretty" ,python-httpretty)))
3448 (home-page "https://pygithub.readthedocs.io/en/latest/")
3449 (synopsis "Python library for the GitHub API")
3450 (description "This library allows managing GitHub resources such as
3451 repositories, user profiles, and organizations in your Python applications,
3452 using version 3 of the GitHub application programming interface (API).")
3453 (license license:lgpl3+)))
3454
3455 (define-public python-rellu
3456 (package
3457 (name "python-rellu")
3458 (version "0.7")
3459 (source
3460 (origin
3461 (method url-fetch)
3462 (uri (pypi-uri "rellu" version))
3463 (sha256
3464 (base32
3465 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3466 (build-system python-build-system)
3467 (propagated-inputs
3468 `(("python-invoke" ,python-invoke)
3469 ("python-pygithub" ,python-pygithub)))
3470 (home-page "https://github.com/robotframework/rellu")
3471 (synopsis "Utilities to create PyPI releases")
3472 (description "This collection of utilities contains tooling and templates
3473 to assist in creating releases on GitHub and publishing them on PyPI. It is
3474 designed to be used by Robot Framework and tools and libraries in its
3475 ecosystem, but can naturally be used also by other projects.")
3476 (license license:asl2.0)))
3477
3478 (define-public python-robotframework
3479 (package
3480 (name "python-robotframework")
3481 (version "3.1.2")
3482 ;; There are no tests in the PyPI archive.
3483 (source
3484 (origin
3485 (method git-fetch)
3486 (uri (git-reference
3487 (url "https://github.com/robotframework/robotframework.git")
3488 (commit (string-append "v" version))))
3489 (file-name (git-file-name name version))
3490 (sha256
3491 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3492 (patches (search-patches
3493 "python-robotframework-honor-source-date-epoch.patch"))))
3494 (build-system python-build-system)
3495 (arguments
3496 `(#:phases (modify-phases %standard-phases
3497 (add-before 'build 'build-and-install-doc
3498 (lambda* (#:key outputs #:allow-other-keys)
3499 (let* ((doc-output (assoc-ref outputs "doc"))
3500 (doc (string-append doc-output "/share/"
3501 ,name "-" ,version "/")))
3502 (invoke "invoke" "library-docs" "all")
3503 (mkdir-p doc)
3504 (copy-recursively "doc/libraries"
3505 (string-append doc "/libraries"))
3506 #t)))
3507 (replace 'check
3508 (lambda _
3509 (invoke "python" "utest/run.py"))))))
3510 (native-inputs
3511 `(("python-invoke" ,python-invoke)
3512 ("python-rellu" ,python-rellu)
3513 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3514 (outputs '("out" "doc"))
3515 (home-page "https://robotframework.org")
3516 (synopsis "Generic automation framework")
3517 (description "Robot Framework is a generic automation framework for
3518 acceptance testing, acceptance test driven development (ATDD), and robotic
3519 process automation (RPA).")
3520 (license license:asl2.0)))
3521
3522 (define-public python-robotframework-lint
3523 ;; There is no properly tagged release; the commit below seems to correspond
3524 ;; to the 0.9 stable release available from PyPI. The tests are not
3525 ;; included in the PyPI archive, so we fetch the sources from the upstream
3526 ;; Git repo.
3527 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3528 (revision "1"))
3529 (package
3530 (name "python-robotframework-lint")
3531 (version (git-version "0.9.0" revision commit))
3532 (source
3533 (origin
3534 (method git-fetch)
3535 (uri (git-reference
3536 (url "https://github.com/boakley/robotframework-lint.git")
3537 (commit commit)))
3538 (file-name (git-file-name name version))
3539 (sha256
3540 (base32
3541 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3542 (build-system python-build-system)
3543 (arguments
3544 `(#:phases
3545 (modify-phases %standard-phases
3546 (replace 'check
3547 (lambda _
3548 (invoke "python" "-m" "robot" "-A"
3549 "tests/conf/default.args" "tests"))))))
3550 (propagated-inputs
3551 `(("python-robotframework" ,python-robotframework)))
3552 (home-page "https://github.com/boakley/robotframework-lint/")
3553 (synopsis "Static analysis tool (linter) for Robot Framework")
3554 (description "This package provides the @code{rflint} command-line
3555 utility, a static analysis tool (linter) for Robot Framework source files.")
3556 (license license:asl2.0))))
3557
3558 (define-public python-robotframework-sshlibrary
3559 (package
3560 (name "python-robotframework-sshlibrary")
3561 (version "3.3.0")
3562 ;; There are no tests in the PyPI archive.
3563 (source
3564 (origin
3565 (method git-fetch)
3566 (uri (git-reference
3567 (url "https://github.com/robotframework/SSHLibrary.git")
3568 (commit (string-append "v" version))))
3569 (file-name (git-file-name name version))
3570 (sha256
3571 (base32
3572 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3573 (build-system python-build-system)
3574 (arguments
3575 `(#:phases
3576 (modify-phases %standard-phases
3577 (add-before 'build 'build-and-install-doc
3578 (lambda* (#:key outputs #:allow-other-keys)
3579 (let* ((doc-output (assoc-ref outputs "doc"))
3580 (doc (string-append doc-output "/share/"
3581 ,name "-" ,version "/")))
3582 (invoke "chmod" "-R" "+w" "docs")
3583 (invoke "invoke" "kw-docs" "project-docs")
3584 (mkdir-p doc)
3585 (for-each delete-file (find-files "docs" "\\.rst"))
3586 (copy-recursively "docs" doc)
3587 #t)))
3588 (replace 'check
3589 (lambda _
3590 ;; Some tests require an SSH server; we remove them.
3591 (delete-file "utest/test_client_api.py")
3592 (delete-file "utest/test_scp.py")
3593 (invoke "python" "utest/run.py"))))))
3594 (propagated-inputs
3595 `(("python-robotframework" ,python-robotframework)
3596 ("python-paramiko" ,python-paramiko)
3597 ("python-scp" ,python-scp)))
3598 (native-inputs
3599 `(("openssh" ,openssh)
3600 ("which" ,which)
3601 ;; To generate the documentation
3602 ("python-docutils" ,python-docutils)
3603 ("python-invoke" ,python-invoke)
3604 ("python-pygments" ,python-pygments)
3605 ("python-rellu" ,python-rellu)))
3606 (outputs '("out" "doc"))
3607 (home-page "https://github.com/robotframework/SSHLibrary")
3608 (synopsis "Robot Framework library for SSH and SFTP")
3609 (description "SSHLibrary is a Robot Framework library providing support
3610 for SSH and SFTP. It has the following main usages:
3611 @itemize @bullet
3612 @item Executing commands on the remote machine, either blocking or non-blocking.
3613 @item Writing and reading in an interactive shell.
3614 @item Transferring files and directories over SFTP.
3615 @item Ensuring that files and directories exist on the remote machine.
3616 @end itemize")
3617 (license license:asl2.0)))
3618
3619 (define-public python-rstr
3620 (package
3621 (name "python-rstr")
3622 (version "2.2.6")
3623 (source
3624 (origin
3625 (method url-fetch)
3626 (uri (pypi-uri "rstr" version))
3627 (sha256
3628 (base32
3629 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3630 (build-system python-build-system)
3631 (home-page
3632 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3633 (synopsis "Generate random strings in Python")
3634 (description "This package provides a python module for generating
3635 random strings of various types. It could be useful for fuzz testing,
3636 generating dummy data, or other applications. It has no dependencies
3637 outside the standard library.")
3638 (license license:bsd-3)))
3639
3640 (define-public python-scp
3641 (package
3642 (name "python-scp")
3643 (version "0.13.2")
3644 (source
3645 (origin
3646 (method url-fetch)
3647 (uri (pypi-uri "scp" version))
3648 (sha256
3649 (base32
3650 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3651 (build-system python-build-system)
3652 (arguments
3653 '(#:tests? #f)) ;tests require an SSH server
3654 (propagated-inputs
3655 `(("python-paramiko" ,python-paramiko)))
3656 (home-page "https://github.com/jbardin/scp.py")
3657 (synopsis "SCP protocol module for Python and Paramiko")
3658 (description "The scp module extends the Paramiko library to send and
3659 receive files via the SCP1 protocol, as implemented by the OpenSSH
3660 @command{scp} program.")
3661 (license license:gpl2+)))
3662
3663 (define-public python-rst.linker
3664 (package
3665 (name "python-rst.linker")
3666 (version "1.11")
3667 (source
3668 (origin
3669 (method url-fetch)
3670 (uri (pypi-uri "rst.linker" version))
3671 (sha256
3672 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3673 (build-system python-build-system)
3674 (propagated-inputs
3675 `(("python-dateutil" ,python-dateutil)
3676 ("python-six" ,python-six)))
3677 (native-inputs
3678 `(("python-setuptools-scm" ,python-setuptools-scm)))
3679 ;; Test would require path.py, which would introduce a cyclic dependence.
3680 (arguments `(#:tests? #f))
3681 ;; Note: As of version 1.7 the documentation is not worth building.
3682 (home-page "https://github.com/jaraco/rst.linker")
3683 (synopsis "Sphinx plugin to add links and timestamps")
3684 (description "rst.linker automatically replaces text by a
3685 reStructuredText external reference or timestamps. It's primary purpose is to
3686 augment the changelog, but it can be used for other documents, too.")
3687 (license license:expat)))
3688
3689 (define-public python2-rst.linker
3690 (package-with-python2 python-rst.linker))
3691
3692 (define-public python-feedgenerator
3693 (package
3694 (name "python-feedgenerator")
3695 (version "1.9")
3696 (source
3697 (origin
3698 (method url-fetch)
3699 (uri (pypi-uri "feedgenerator" version))
3700 (sha256
3701 (base32
3702 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3703 (modules '((guix build utils)))
3704 (snippet
3705 '(begin
3706 ;; Remove pre-compiled .pyc files from source.
3707 (for-each delete-file-recursively
3708 (find-files "." "__pycache__" #:directories? #t))
3709 (for-each delete-file (find-files "." "\\.pyc$"))
3710 #t))))
3711 (build-system python-build-system)
3712 (propagated-inputs
3713 `(("python-pytz" ,python-pytz)
3714 ("python-six" ,python-six)))
3715 (home-page "https://github.com/getpelican/feedgenerator")
3716 (synopsis
3717 "Standalone version of Django's Atom/RSS feed generator")
3718 (description
3719 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3720 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3721 (license license:bsd-3)))
3722
3723 (define-public python2-feedgenerator
3724 (package-with-python2 python-feedgenerator))
3725
3726 (define-public python-toml
3727 (package
3728 (name "python-toml")
3729 (version "0.9.4")
3730 (source
3731 (origin
3732 (method url-fetch)
3733 (uri (pypi-uri "toml" version))
3734 (sha256
3735 (base32
3736 "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf"))))
3737 (build-system python-build-system)
3738 (arguments
3739 `(#:tests? #f)) ;no tests suite in release
3740 (home-page "https://github.com/uiri/toml")
3741 (synopsis "Library for TOML")
3742 (description
3743 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3744 Language (TOML) configuration files.")
3745 (license license:expat)))
3746
3747 (define-public python-jsonrpc-server
3748 (package
3749 (name "python-jsonrpc-server")
3750 (version "0.3.4")
3751 (source
3752 (origin
3753 (method url-fetch)
3754 (uri (pypi-uri "python-jsonrpc-server" version))
3755 (sha256
3756 (base32
3757 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3758 (build-system python-build-system)
3759 (propagated-inputs
3760 `(("python-mock" ,python-mock)
3761 ("python-pytest" ,python-pytest)
3762 ("python-ujson" ,python-ujson-1)))
3763 (home-page
3764 "https://github.com/palantir/python-jsonrpc-server")
3765 (synopsis "JSON RPC 2.0 server library")
3766 (description
3767 "This package provides a JSON RPC 2.0 server library for Python.")
3768 (license license:expat)))
3769
3770 (define-public python-pydocstyle
3771 (package
3772 (name "python-pydocstyle")
3773 (version "3.0.0")
3774 (source
3775 (origin
3776 (method url-fetch)
3777 (uri (pypi-uri "pydocstyle" version))
3778 (sha256
3779 (base32
3780 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3781 (build-system python-build-system)
3782 (propagated-inputs
3783 `(("python-six" ,python-six)
3784 ("python-snowballstemmer" ,python-snowballstemmer)))
3785 (home-page
3786 "https://github.com/PyCQA/pydocstyle/")
3787 (synopsis "Python docstring style checker")
3788 (description
3789 "This package provides a style checker for the Python Language
3790 Server (PLS).")
3791 (license license:expat)))
3792
3793 (define-public python-language-server
3794 (package
3795 (name "python-language-server")
3796 (version "0.32.0")
3797 (source
3798 (origin
3799 (method url-fetch)
3800 (uri (pypi-uri "python-language-server" version))
3801 (sha256
3802 (base32
3803 "0j5swacmjps9sas1gfwg0xi84rmjhfhz20cwg3k4058d20rs20ip"))))
3804 (build-system python-build-system)
3805 (propagated-inputs
3806 `(("python-pluggy" ,python-pluggy)
3807 ("python-jsonrpc-server" ,python-jsonrpc-server)
3808 ;; Note: Remove the special versions of Jedi and Parso when updating
3809 ;; this package.
3810 ("python-jedi" ,python-jedi)
3811 ("python-yapf" ,python-yapf)
3812 ("python-pyflakes" ,python-pyflakes)
3813 ("python-pydocstyle" ,python-pydocstyle)
3814 ("python-pycodestyle" ,python-pycodestyle)
3815 ("python-mccabe" ,python-mccabe)
3816 ("python-rope" ,python-rope)
3817 ("python-autopep8" ,python-autopep8)
3818 ("python-flake8" ,python-flake8)
3819 ("python-pylint" ,python-pylint)))
3820 (home-page "https://github.com/palantir/python-language-server")
3821 (synopsis "Python implementation of the Language Server Protocol")
3822 (description
3823 "The Python Language Server (pyls) is an implementation of the Python 3
3824 language specification for the Language Server Protocol (LSP). This tool is
3825 used in text editing environments to provide a complete and integrated
3826 feature-set for programming Python effectively.")
3827 (license license:expat)))
3828
3829 (define-public python-pathspec
3830 (package
3831 (name "python-pathspec")
3832 (version "0.7.0")
3833 (source
3834 (origin
3835 (method url-fetch)
3836 (uri (pypi-uri "pathspec" version))
3837 (sha256
3838 (base32
3839 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3840 (build-system python-build-system)
3841 (home-page "https://github.com/cpburnz/python-path-specification")
3842 (synopsis "Utility library for gitignore style pattern matching of file paths")
3843 (description
3844 "This package provides a utility library for gitignore style pattern
3845 matching of file paths.")
3846 (license license:mpl2.0)))
3847
3848 (define-public python-black
3849 (package
3850 (name "python-black")
3851 (version "19.10b0")
3852 (source
3853 (origin
3854 (method url-fetch)
3855 (uri (pypi-uri "black" version))
3856 (sha256
3857 (base32
3858 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3859 (build-system python-build-system)
3860 (arguments
3861 `(#:phases
3862 (modify-phases %standard-phases
3863 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3864 (lambda _
3865 (let ((python3 (which "python3")))
3866 (substitute* '("tests/data/fmtonoff.py"
3867 "tests/data/string_prefixes.py"
3868 "tests/data/function.py"
3869 "tests/data/python37.py")
3870 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3871 (string-append "#!" python3 (if (string? minor-version)
3872 minor-version
3873 "")))))
3874 #t))
3875 (add-after 'unpack 'disable-broken-tests
3876 (lambda _
3877 ;; These tests are supposed to be skipped when the blackd
3878 ;; dependencies are missing, but this doesn't quite work.
3879 (substitute* "tests/test_black.py"
3880 (("( *)class BlackDTestCase.*" match indent)
3881 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3882 indent "class BlackDTestCase(unittest.TestCase):\n"))
3883 (("web.Application") "False")
3884 (("@unittest_run_loop") ""))
3885
3886 ;; Patching the above file breaks the self test
3887 (substitute* "tests/test_black.py"
3888 (("( *)def test_self" match indent)
3889 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3890 #t)))))
3891 (propagated-inputs
3892 `(("python-click" ,python-click)
3893 ("python-attrs" ,python-attrs)
3894 ("python-appdirs" ,python-appdirs)
3895 ("python-pathspec" ,python-pathspec)
3896 ("python-regex" ,python-regex)
3897 ("python-toml" ,python-toml)
3898 ("python-typed-ast" ,python-typed-ast)))
3899 (native-inputs
3900 `(("python-setuptools-scm" ,python-setuptools-scm)))
3901 (home-page "https://github.com/ambv/black")
3902 (synopsis "The uncompromising code formatter")
3903 (description "Black is the uncompromising Python code formatter.")
3904 (license license:expat)))
3905
3906 (define-public python-blinker
3907 (package
3908 (name "python-blinker")
3909 (version "1.4")
3910 (source
3911 (origin
3912 (method url-fetch)
3913 (uri (pypi-uri "blinker" version))
3914 (sha256
3915 (base32
3916 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3917 (build-system python-build-system)
3918 (home-page "https://pythonhosted.org/blinker/")
3919 (synopsis "Fast, simple object-to-object and broadcast signaling")
3920 (description
3921 "Blinker provides a fast dispatching system that allows any number of
3922 interested parties to subscribe to events, or \"signals\".")
3923 (license license:expat)))
3924
3925 (define-public python2-blinker
3926 (package-with-python2 python-blinker))
3927
3928 (define-public pelican
3929 (package
3930 (name "pelican")
3931 (version "4.2.0")
3932 (source
3933 (origin
3934 (method url-fetch)
3935 (uri (pypi-uri "pelican" version))
3936 (sha256
3937 (base32
3938 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3939 (build-system python-build-system)
3940 (propagated-inputs
3941 `(("python-blinker" ,python-blinker)
3942 ("python-dateutil" ,python-dateutil)
3943 ("python-docutils" ,python-docutils)
3944 ("python-feedgenerator" ,python-feedgenerator)
3945 ("python-jinja2" ,python-jinja2)
3946 ("python-markdown" ,python-markdown)
3947 ("python-pygments" ,python-pygments)
3948 ("python-pytz" ,python-pytz)
3949 ("python-six" ,python-six)
3950 ("python-unidecode" ,python-unidecode)))
3951 (home-page "https://getpelican.com/")
3952 (arguments
3953 `(;; XXX Requires a lot more packages to do unit tests :P
3954 #:tests? #f))
3955 (synopsis "Python-based static site publishing system")
3956 (description
3957 "Pelican is a tool to generate a static blog from reStructuredText,
3958 Markdown input files, and more. Pelican uses Jinja2 for templating
3959 and is very extensible.")
3960 (license license:agpl3+)))
3961
3962 (define-public mallard-ducktype
3963 (package
3964 (name "mallard-ducktype")
3965 (version "1.0.2")
3966 (source
3967 (origin
3968 (method git-fetch)
3969 ;; git-reference because tests are not included in pypi source tarball
3970 ;; https://issues.guix.gnu.org/issue/36755#2
3971 (uri (git-reference
3972 (url "https://github.com/projectmallard/mallard-ducktype.git")
3973 (commit version)))
3974 (file-name (git-file-name name version))
3975 (sha256
3976 (base32
3977 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3978 (build-system python-build-system)
3979 (arguments
3980 '(#:phases
3981 (modify-phases %standard-phases
3982 (replace 'check
3983 (lambda _
3984 (with-directory-excursion "tests"
3985 (invoke "sh" "runtests")))))))
3986 (home-page "http://projectmallard.org")
3987 (synopsis "Convert Ducktype to Mallard documentation markup")
3988 (description
3989 "Ducktype is a lightweight syntax that can represent all the semantics
3990 of the Mallard XML documentation system. Ducktype files can be converted to
3991 Mallard using the @command{ducktype} tool. The yelp-tools package
3992 provides additional functionality on the produced Mallard documents.")
3993 (license license:expat)))
3994
3995 (define-public python-cython
3996 (package
3997 (name "python-cython")
3998 (version "0.29.16")
3999 (source
4000 (origin
4001 (method url-fetch)
4002 (uri (pypi-uri "Cython" version))
4003 (sha256
4004 (base32
4005 "01gs10myw0rw4jsikvqs0859fg7gficxhv508cxvnb4l9wl5a9r3"))))
4006 (build-system python-build-system)
4007 ;; we need the full python package and not just the python-wrapper
4008 ;; because we need libpython3.3m.so
4009 (inputs
4010 `(("python" ,python)))
4011 (arguments
4012 `(#:phases
4013 (modify-phases %standard-phases
4014 (add-before 'check 'set-HOME
4015 ;; some tests require access to "$HOME/.cython"
4016 (lambda _ (setenv "HOME" "/tmp") #t))
4017 (replace 'check
4018 (lambda _
4019 ;; Disable compiler optimizations to greatly reduce the running
4020 ;; time of the test suite.
4021 (setenv "CFLAGS" "-O0")
4022
4023 (invoke "python" "runtests.py" "-vv"
4024 "-j" (number->string (parallel-job-count))
4025 ;; XXX: On 32-bit architectures, running the parallel tests
4026 ;; fails on many-core systems, see
4027 ;; <https://github.com/cython/cython/issues/2807>.
4028 ,@(if (not (target-64bit?))
4029 '("-x" "run.parallel")
4030 '())))))))
4031 (home-page "https://cython.org/")
4032 (synopsis "C extensions for Python")
4033 (description "Cython is an optimising static compiler for both the Python
4034 programming language and the extended Cython programming language. It makes
4035 writing C extensions for Python as easy as Python itself.")
4036 (license license:asl2.0)
4037 (properties `((python2-variant . ,(delay python2-cython))))))
4038
4039 (define-public python2-cython
4040 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4041 (package
4042 (inherit base)
4043 (name "python2-cython")
4044 (inputs
4045 `(("python-2" ,python-2))) ;this is not automatically changed
4046 (arguments
4047 (substitute-keyword-arguments (package-arguments base)
4048 ((#:phases phases)
4049 `(modify-phases ,phases
4050 (add-before 'check 'adjust-test_embed
4051 (lambda _
4052 (substitute* "runtests.py"
4053 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4054 ;; so it can give the right -L flag to GCC when embedding static
4055 ;; builds of Python. It is unaware that the Python "config"
4056 ;; directory (where the static library lives) was renamed in
4057 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4058 ;; which works fine, because that is where the shared library is.
4059 ;;
4060 ;; It also appears to be unaware that the Makefile in Demos/embed
4061 ;; already unconditionally pass the static library location to GCC,
4062 ;; after checking sysconfig.get_config_var('LIBPL).
4063 ;;
4064 ;; The effect is that the linker is unable to resolve libexpat
4065 ;; symbols when building for Python 2, because neither the Python 2
4066 ;; shared library nor Expat is available. To fix it, we can either
4067 ;; add Expat as an input and make it visible to the linker, or just
4068 ;; prevent it from overriding the Python shared library location.
4069 ;; The end result is identical, so we take the easy route.
4070 ((" or libname not in os\\.listdir\\(libdir\\)")
4071 ""))
4072 #t)))))))))
4073
4074 ;; The RPython toolchain currently does not support Python 3.
4075 (define-public python2-rpython
4076 (package
4077 (name "python2-rpython")
4078 (version "0.2.1")
4079 (source
4080 (origin
4081 (method url-fetch)
4082 (uri (pypi-uri "rpython" version))
4083 (sha256
4084 (base32
4085 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4086 (build-system python-build-system)
4087 (arguments `(#:python ,python-2))
4088 (native-inputs
4089 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4090 (home-page "https://rpython.readthedocs.org")
4091 (synopsis "Framework for implementing interpreters and virtual machines")
4092 (description "RPython is a translation and support framework for
4093 producing implementations of dynamic languages, emphasizing a clean separation
4094 between language specification and implementation aspects.")
4095 (license license:expat)))
4096
4097 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4098 ;; python-scipy still build, as these three packages are often used together.
4099 (define-public python-numpy
4100 (package
4101 (name "python-numpy")
4102 (version "1.17.3")
4103 (source
4104 (origin
4105 (method url-fetch)
4106 (uri (string-append
4107 "https://github.com/numpy/numpy/releases/download/v"
4108 version "/numpy-" version ".tar.gz"))
4109 (sha256
4110 (base32
4111 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4112 (build-system python-build-system)
4113 (inputs
4114 `(("openblas" ,openblas)
4115 ("lapack" ,lapack)))
4116 (native-inputs
4117 `(("python-cython" ,python-cython)
4118 ("python-pytest" ,python-pytest)
4119 ("gfortran" ,gfortran)))
4120 (arguments
4121 `(#:phases
4122 (modify-phases %standard-phases
4123 (add-before 'build 'configure-blas-lapack
4124 (lambda* (#:key inputs #:allow-other-keys)
4125 (call-with-output-file "site.cfg"
4126 (lambda (port)
4127 (format port
4128 "[openblas]
4129 libraries = openblas
4130 library_dirs = ~a/lib
4131 include_dirs = ~a/include
4132
4133 # backslash-n to make emacs happy
4134 \n[lapack]
4135 lapack_libs = lapack
4136 library_dirs = ~a/lib
4137 include_dirs = ~a/include
4138 "
4139 (assoc-ref inputs "openblas")
4140 (assoc-ref inputs "openblas")
4141 (assoc-ref inputs "lapack")
4142 (assoc-ref inputs "lapack"))))
4143 #t))
4144 (add-before 'build 'fix-executable-paths
4145 (lambda* (#:key inputs #:allow-other-keys)
4146 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4147 ;; instead of /bin/sh.
4148 (substitute* "numpy/distutils/exec_command.py"
4149 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4150 (string-append match-start (assoc-ref inputs "bash") match-end)))
4151 ;; Use "gcc" executable, not "cc".
4152 (substitute* "numpy/distutils/system_info.py"
4153 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4154 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4155 #t))
4156 ;; Tests can only be run after the library has been installed and not
4157 ;; within the source directory.
4158 (delete 'check)
4159 (add-after 'install 'check
4160 (lambda* (#:key outputs inputs #:allow-other-keys)
4161 ;; Make installed package available for running the tests
4162 (add-installed-pythonpath inputs outputs)
4163 ;; Make sure "f2py" etc is found.
4164 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4165 ":" (getenv "PATH")))
4166 (with-directory-excursion "/tmp"
4167 (invoke "python" "-c"
4168 "import numpy; numpy.test(verbose=2)")))))))
4169 (home-page "https://numpy.org")
4170 (synopsis "Fundamental package for scientific computing with Python")
4171 (description "NumPy is the fundamental package for scientific computing
4172 with Python. It contains among other things: a powerful N-dimensional array
4173 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4174 and Fortran code, useful linear algebra, Fourier transform, and random number
4175 capabilities.")
4176 (properties `((python2-variant . ,(delay python2-numpy))))
4177 (license license:bsd-3)))
4178
4179 ;; Numpy 1.16.x are the last versions that support Python 2.
4180 (define-public python2-numpy
4181 (let ((numpy (package-with-python2
4182 (strip-python2-variant python-numpy))))
4183 (package/inherit
4184 numpy
4185 (version "1.16.5")
4186 (source (origin
4187 (method url-fetch)
4188 (uri (string-append
4189 "https://github.com/numpy/numpy/releases/download/v"
4190 version "/numpy-" version ".tar.gz"))
4191 (sha256
4192 (base32
4193 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4194
4195 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4196 ;; interest only for legacy code going back to NumPy's predecessor
4197 ;; Numeric.
4198 (define-public python2-numpy-1.8
4199 (package (inherit python2-numpy)
4200 (version "1.8.2")
4201 (source
4202 (origin
4203 (method git-fetch)
4204 (uri (git-reference
4205 (url "https://github.com/numpy/numpy")
4206 (commit (string-append "v" version))))
4207 (file-name (git-file-name "numpy" version))
4208 (sha256
4209 (base32
4210 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4211 (arguments
4212 (substitute-keyword-arguments (package-arguments python2-numpy)
4213 ((#:phases phases)
4214 `(modify-phases ,phases
4215 (replace 'configure-blas-lapack
4216 (lambda* (#:key inputs #:allow-other-keys)
4217 (call-with-output-file "site.cfg"
4218 (lambda (port)
4219 (format port
4220 "[openblas]
4221 libraries = openblas,lapack
4222 library_dirs = ~a/lib:~a/lib
4223 include_dirs = ~a/include:~a/include
4224 "
4225 (assoc-ref inputs "openblas")
4226 (assoc-ref inputs "lapack")
4227 (assoc-ref inputs "openblas")
4228 (assoc-ref inputs "lapack"))))
4229 #t))))))
4230 (native-inputs
4231 `(("python2-nose" ,python2-nose)))
4232 (description "NumPy is the fundamental package for scientific computing
4233 with Python. It contains among other things: a powerful N-dimensional array
4234 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4235 and Fortran code, useful linear algebra, Fourier transform, and random number
4236 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4237 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4238 Numeric.")
4239 (license license:bsd-3)))
4240
4241 (define-public python-munch
4242 (package
4243 (name "python-munch")
4244 (version "2.0.4")
4245 (source
4246 (origin
4247 (method url-fetch)
4248 (uri (pypi-uri "munch" version))
4249 (sha256
4250 (base32
4251 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4252 (build-system python-build-system)
4253 (home-page "https://github.com/Infinidat/munch")
4254 (synopsis "Dot-accessible dictionary")
4255 (description "Munch is a dot-accessible dictionary similar to JavaScript
4256 objects.")
4257 (license license:expat)))
4258
4259 (define-public python2-munch
4260 (package-with-python2 python-munch))
4261
4262 (define-public python-colormath
4263 (package
4264 (name "python-colormath")
4265 (version "3.0.0")
4266 (source
4267 (origin
4268 (method url-fetch)
4269 (uri (pypi-uri "colormath" version))
4270 (sha256
4271 (base32
4272 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4273 (build-system python-build-system)
4274 (propagated-inputs
4275 `(("python-networkx" ,python-networkx)
4276 ("python-numpy" ,python-numpy)))
4277 (home-page "https://github.com/gtaylor/python-colormath")
4278 (synopsis "Color math and conversion library")
4279 (description
4280 "This is a Python library for color math and conversions.")
4281 (license license:bsd-3)))
4282
4283 (define-public python2-colormath
4284 (package-with-python2 python-colormath))
4285
4286 (define-public python-spectra
4287 (package
4288 (name "python-spectra")
4289 (version "0.0.11")
4290 (source
4291 (origin
4292 (method url-fetch)
4293 (uri (pypi-uri "spectra" version))
4294 (sha256
4295 (base32
4296 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4297 (build-system python-build-system)
4298 (arguments
4299 `(#:phases
4300 (modify-phases %standard-phases
4301 (replace 'check
4302 (lambda _ (invoke "nosetests" "-v"))))))
4303 (propagated-inputs
4304 `(("python-colormath" ,python-colormath)))
4305 (native-inputs
4306 `(("python-nose" ,python-nose)))
4307 (home-page "https://github.com/jsvine/spectra")
4308 (synopsis "Color scales and color conversion")
4309 (description
4310 "This package provides a Python library intended to make color math,
4311 color scales, and color space conversion easy. It has support for:
4312
4313 @enumerate
4314 @item Color scales
4315 @item Color ranges
4316 @item Color blending
4317 @item Brightening/darkening colors
4318 @item Saturating/desaturating colors
4319 @item Conversion to/from multiple color spaces.
4320 @end enumerate\n")
4321 (license license:expat)))
4322
4323 (define-public python2-spectra
4324 (package-with-python2 python-spectra))
4325
4326 (define-public python-numpy-documentation
4327 (package
4328 (name "python-numpy-documentation")
4329 (version (package-version python-numpy))
4330 (source (package-source python-numpy))
4331 (build-system python-build-system)
4332 (native-inputs
4333 `(("python-matplotlib" ,python-matplotlib)
4334 ("python-numpy" ,python-numpy)
4335 ("pkg-config" ,pkg-config)
4336 ("python-sphinx" ,python-sphinx)
4337 ("python-numpydoc" ,python-numpydoc)
4338 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4339 texlive-fonts-ec
4340 texlive-generic-ifxetex
4341 texlive-generic-pdftex
4342 texlive-amsfonts
4343 texlive-latex-capt-of
4344 texlive-latex-cmap
4345 texlive-latex-environ
4346 texlive-latex-eqparbox
4347 texlive-latex-etoolbox
4348 texlive-latex-expdlist
4349 texlive-latex-fancyhdr
4350 texlive-latex-fancyvrb
4351 texlive-latex-fncychap
4352 texlive-latex-float
4353 texlive-latex-framed
4354 texlive-latex-geometry
4355 texlive-latex-graphics
4356 texlive-latex-hyperref
4357 texlive-latex-mdwtools
4358 texlive-latex-multirow
4359 texlive-latex-needspace
4360 texlive-latex-oberdiek
4361 texlive-latex-parskip
4362 texlive-latex-preview
4363 texlive-latex-tabulary
4364 texlive-latex-threeparttable
4365 texlive-latex-titlesec
4366 texlive-latex-trimspaces
4367 texlive-latex-ucs
4368 texlive-latex-upquote
4369 texlive-latex-url
4370 texlive-latex-varwidth
4371 texlive-latex-wrapfig)))
4372 ("texinfo" ,texinfo)
4373 ("perl" ,perl)
4374 ("scipy-sphinx-theme"
4375 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4376 (method git-fetch)
4377 (uri (git-reference
4378 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4379 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4380 (sha256
4381 (base32
4382 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4383 ,@(package-native-inputs python-numpy)))
4384 (arguments
4385 `(#:tests? #f ; we're only generating the documentation
4386 #:phases
4387 (modify-phases %standard-phases
4388 (delete 'build)
4389 (replace 'install
4390 (lambda* (#:key inputs outputs #:allow-other-keys)
4391 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4392 (doc (string-append
4393 data "/doc/" ,name "-"
4394 ,(package-version python-numpy)))
4395 (info-reader (string-append data "/info"))
4396 (html (string-append doc "/html"))
4397 (scipy-sphinx-theme "scipy-sphinx-theme")
4398 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4399 (pyver ,(string-append "PYVER=")))
4400
4401 ;; FIXME: this is needed to for texlive-union to generate
4402 ;; fonts, which are not found.
4403 (setenv "HOME" "/tmp")
4404
4405 (with-directory-excursion "doc"
4406 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4407 (mkdir-p html)
4408 (invoke "make" "html" pyver)
4409 (invoke "make" "latex" "PAPER=a4" pyver)
4410 (invoke "make" "-C" "build/latex"
4411 "all-pdf" "PAPER=a4" pyver)
4412 ;; FIXME: Generation of the info file fails.
4413 ;; (invoke "make" "info" pyver)
4414 ;; (mkdir-p info)
4415 ;; (copy-file "build/texinfo/numpy.info"
4416 ;; (string-append info "/numpy.info"))
4417 (for-each (lambda (file)
4418 (copy-file (string-append "build/latex" file)
4419 (string-append doc file)))
4420 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4421 (with-directory-excursion "build/html"
4422 (for-each (lambda (file)
4423 (let* ((dir (dirname file))
4424 (tgt-dir (string-append html "/" dir)))
4425 (unless (equal? "." dir)
4426 (mkdir-p tgt-dir))
4427 (install-file file html)))
4428 (find-files "." ".*")))))
4429 #t)))))
4430 (home-page (package-home-page python-numpy))
4431 (synopsis "Documentation for the python-numpy package")
4432 (description (package-description python-numpy))
4433 (license (package-license python-numpy))))
4434
4435 (define-public python2-numpy-documentation
4436 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4437 (package
4438 (inherit numpy-documentation)
4439 (native-inputs `(("python2-functools32" ,python2-functools32)
4440 ,@(package-native-inputs numpy-documentation))))))
4441
4442 (define-public python-pygit2
4443 (package
4444 (name "python-pygit2")
4445 (version "1.1.0")
4446 (source
4447 (origin
4448 (method url-fetch)
4449 (uri (pypi-uri "pygit2" version))
4450 (sha256
4451 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4452 (build-system python-build-system)
4453 (arguments
4454 '(#:tests? #f)) ; tests don't run correctly in our environment
4455 (propagated-inputs
4456 `(("python-cached-property" ,python-cached-property)
4457 ("python-cffi" ,python-cffi)
4458 ("libgit2" ,libgit2)))
4459 (native-inputs
4460 `(("python-pytest" ,python-pytest)))
4461 (home-page "https://github.com/libgit2/pygit2")
4462 (synopsis "Python bindings for libgit2")
4463 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4464 library, libgit2 implements Git plumbing.")
4465 ;; GPL2.0 only, with linking exception.
4466 (license license:gpl2)))
4467
4468 (define-public python-pyparsing
4469 (package
4470 (name "python-pyparsing")
4471 (version "2.4.6")
4472 (source
4473 (origin
4474 (method url-fetch)
4475 (uri (pypi-uri "pyparsing" version))
4476 (sha256
4477 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4478 (build-system python-build-system)
4479 (outputs '("out" "doc"))
4480 (arguments
4481 `(#:tests? #f ; no test target
4482 #:phases
4483 (modify-phases %standard-phases
4484 (add-after 'install 'install-doc
4485 (lambda* (#:key outputs #:allow-other-keys)
4486 (let* ((doc (string-append (assoc-ref outputs "doc")
4487 "/share/doc/" ,name "-" ,version))
4488 (html-doc (string-append doc "/html"))
4489 (examples (string-append doc "/examples")))
4490 (mkdir-p html-doc)
4491 (mkdir-p examples)
4492 (for-each
4493 (lambda (dir tgt)
4494 (map (lambda (file)
4495 (install-file file tgt))
4496 (find-files dir ".*")))
4497 (list "docs" "htmldoc" "examples")
4498 (list doc html-doc examples))
4499 #t))))))
4500 (home-page "https://github.com/pyparsing/pyparsing")
4501 (synopsis "Python parsing class library")
4502 (description
4503 "The pyparsing module is an alternative approach to creating and
4504 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4505 of regular expressions. The pyparsing module provides a library of classes
4506 that client code uses to construct the grammar directly in Python code.")
4507 (license license:expat)))
4508
4509 (define-public python2-pyparsing
4510 (package-with-python2 python-pyparsing))
4511
4512 (define-public python-numpydoc
4513 (package
4514 (name "python-numpydoc")
4515 (version "0.8.0")
4516 (source
4517 (origin
4518 (method url-fetch)
4519 (uri (pypi-uri "numpydoc" version))
4520 (sha256
4521 (base32
4522 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4523 (build-system python-build-system)
4524 (propagated-inputs
4525 `(("python-sphinx" ,python-sphinx)))
4526 (native-inputs
4527 `(("python-nose" ,python-nose)))
4528 (home-page "https://pypi.org/project/numpydoc/")
4529 (synopsis
4530 "Numpy's Sphinx extensions")
4531 (description
4532 "Sphinx extension to support docstrings in Numpy format.")
4533 (license license:bsd-2)))
4534
4535 (define-public python2-numpydoc
4536 (package-with-python2 python-numpydoc))
4537
4538 (define-public python-numexpr
4539 (package
4540 (name "python-numexpr")
4541 (version "2.6.5")
4542 (source
4543 (origin
4544 (method url-fetch)
4545 (uri (pypi-uri "numexpr" version))
4546 (sha256
4547 (base32
4548 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4549 (build-system python-build-system)
4550 (arguments `(#:tests? #f)) ; no tests included
4551 (propagated-inputs
4552 `(("python-numpy" ,python-numpy)))
4553 (home-page "https://github.com/pydata/numexpr")
4554 (synopsis "Fast numerical expression evaluator for NumPy")
4555 (description
4556 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4557 expressions that operate on arrays are accelerated and use less memory than
4558 doing the same calculation in Python. In addition, its multi-threaded
4559 capabilities can make use of all your cores, which may accelerate
4560 computations, most specially if they are not memory-bounded (e.g. those using
4561 transcendental functions).")
4562 (license license:expat)))
4563
4564 (define-public python2-numexpr
4565 (package-with-python2 python-numexpr))
4566
4567 (define-public python-cycler
4568 (package
4569 (name "python-cycler")
4570 (version "0.10.0")
4571 (source (origin
4572 (method url-fetch)
4573 (uri (pypi-uri "cycler" version))
4574 (sha256
4575 (base32
4576 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4577 (build-system python-build-system)
4578 (arguments
4579 ;; XXX: The current version requires 'coveralls' which we don't have.
4580 ;; Enable this for the next release which uses 'python-pytest'.
4581 '(#:tests? #f))
4582 (propagated-inputs
4583 `(("python-six" ,python-six)))
4584 (home-page "http://matplotlib.org/cycler/")
4585 (synopsis "Composable keyword argument iterator")
4586 (description
4587 "When using @code{matplotlib} and plotting more than one line, it is
4588 common to want to be able to want to be able to cycle over one or more artist
4589 styles; but the plotting logic can quickly become involved.
4590 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4591 @code{Cycler} class was developed.")
4592 (license license:bsd-3)))
4593
4594 (define-public python2-cycler
4595 (package-with-python2 python-cycler))
4596
4597 (define-public python-colorspacious
4598 (package
4599 (name "python-colorspacious")
4600 (version "1.1.2")
4601 (source
4602 (origin
4603 (method git-fetch)
4604 (uri (git-reference
4605 (url "https://github.com/njsmith/colorspacious.git")
4606 (commit (string-append "v" version))))
4607 (file-name (git-file-name name version))
4608 (sha256
4609 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4610 (build-system python-build-system)
4611 (propagated-inputs
4612 `(("python-numpy" ,python-numpy)))
4613 (native-inputs
4614 `(("python-nose" ,python-nose)))
4615 (arguments
4616 `(#:phases
4617 (modify-phases %standard-phases
4618 (replace 'check
4619 (lambda _
4620 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4621 (home-page "https://github.com/njsmith/colorspacious")
4622 (synopsis "Python library for colorspace conversions")
4623 (description "@code{colorspacious} is a Python library that lets you
4624 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4625 (license license:expat)))
4626
4627 (define-public python2-colorspacious
4628 (package-with-python2 python-colorspacious))
4629
4630 (define-public python-matplotlib
4631 (package
4632 (name "python-matplotlib")
4633 (version "3.1.2")
4634 (source
4635 (origin
4636 (method url-fetch)
4637 (uri (pypi-uri "matplotlib" version))
4638 (sha256
4639 (base32
4640 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4641 (build-system python-build-system)
4642 (propagated-inputs ; the following packages are all needed at run time
4643 `(("python-cycler" ,python-cycler)
4644 ("python-kiwisolver" ,python-kiwisolver)
4645 ("python-pyparsing" ,python-pyparsing)
4646 ("python-pygobject" ,python-pygobject)
4647 ("gobject-introspection" ,gobject-introspection)
4648 ("python-tkinter" ,python "tk")
4649 ("python-dateutil" ,python-dateutil)
4650 ("python-numpy" ,python-numpy)
4651 ("python-pillow" ,python-pillow)
4652 ("python-pytz" ,python-pytz)
4653 ("python-six" ,python-six)
4654 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4655 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4656 ;; object. For this reason we need to import both libraries.
4657 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4658 ("python-pycairo" ,python-pycairo)
4659 ("python-cairocffi" ,python-cairocffi)))
4660 (inputs
4661 `(("libpng" ,libpng)
4662 ("imagemagick" ,imagemagick)
4663 ("freetype" ,freetype)
4664 ("cairo" ,cairo)
4665 ("glib" ,glib)
4666 ;; FIXME: Add backends when available.
4667 ;("python-wxpython" ,python-wxpython)
4668 ("tcl" ,tcl)
4669 ("tk" ,tk)))
4670 (native-inputs
4671 `(("pkg-config" ,pkg-config)
4672 ("python-pytest" ,python-pytest)
4673 ("python-mock" ,python-mock)
4674 ("unzip" ,unzip)
4675 ("jquery-ui"
4676 ,(origin
4677 (method url-fetch)
4678 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4679 (sha256
4680 (base32
4681 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4682 (arguments
4683 `(#:phases
4684 (modify-phases %standard-phases
4685 ;; XXX We disable all image comparison tests because we're using a
4686 ;; newer version of FreeType than matplotlib expects. This leads to
4687 ;; minor differences throughout the tests.
4688 (add-after 'unpack 'fix-and-disable-failing-tests
4689 (lambda _
4690 (substitute* (append (find-files "lib/matplotlib/tests/"
4691 "test_.*\\.py$")
4692 (find-files "lib/mpl_toolkits/tests"
4693 "test_.*\\.py$"))
4694 (("^from matplotlib" match)
4695 (string-append "import pytest\n" match))
4696 (("( *)@image_comparison" match indent)
4697 (string-append indent
4698 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4699 match)))
4700 (substitute* "lib/matplotlib/tests/test_animation.py"
4701 (("/bin/sh") (which "sh")))
4702 (for-each delete-file
4703 ;; test_normal_axes, test_get_tightbbox_polar
4704 '("lib/matplotlib/tests/test_axes.py"
4705 ;; We don't use the webagg backend and this test forces it.
4706 "lib/matplotlib/tests/test_backend_webagg.py"
4707 ;; test_outward_ticks
4708 "lib/matplotlib/tests/test_tightlayout.py"
4709 ;; test_hidden_axes fails with minor extent
4710 ;; differences, possibly due to the use of a
4711 ;; different version of FreeType.
4712 "lib/matplotlib/tests/test_constrainedlayout.py"
4713 ;; Fontconfig returns no fonts.
4714 "lib/matplotlib/tests/test_font_manager.py"))
4715 #t))
4716 (add-before 'install 'install-jquery-ui
4717 (lambda* (#:key outputs inputs #:allow-other-keys)
4718 (let ((dir (string-append (assoc-ref outputs "out")
4719 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4720 (mkdir-p dir)
4721 (invoke "unzip"
4722 (assoc-ref inputs "jquery-ui")
4723 "-d" dir))
4724 #t))
4725 (replace 'check
4726 (lambda* (#:key outputs inputs #:allow-other-keys)
4727 (add-installed-pythonpath inputs outputs)
4728 (invoke "python" "tests.py" "-v"
4729 "-m" "not network and not webagg")))
4730 (add-before 'build 'configure-environment
4731 (lambda* (#:key outputs inputs #:allow-other-keys)
4732 (let ((cairo (assoc-ref inputs "cairo")))
4733 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4734 ;; has not effect.
4735 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4736 (setenv "HOME" (getcwd))
4737 (call-with-output-file "setup.cfg"
4738 (lambda (port)
4739 (format port "[directories]~%
4740 basedirlist = ~a,~a~%
4741 [packages]~%
4742 tests = True~%"
4743 (assoc-ref inputs "tcl")
4744 (assoc-ref inputs "tk")))))
4745 #t)))))
4746 (home-page "https://matplotlib.org/")
4747 (synopsis "2D plotting library for Python")
4748 (description
4749 "Matplotlib is a Python 2D plotting library which produces publication
4750 quality figures in a variety of hardcopy formats and interactive environments
4751 across platforms. Matplotlib can be used in Python scripts, the python and
4752 ipython shell, web application servers, and six graphical user interface
4753 toolkits.")
4754 (license license:psfl)
4755 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4756
4757 (define-public python2-matplotlib
4758 (let ((matplotlib (package-with-python2
4759 (strip-python2-variant python-matplotlib))))
4760 (package (inherit matplotlib)
4761 (version "2.2.4")
4762 (source
4763 (origin
4764 (method url-fetch)
4765 (uri (pypi-uri "matplotlib" version))
4766 (sha256
4767 (base32
4768 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4769 (arguments
4770 (substitute-keyword-arguments (package-arguments matplotlib)
4771 ((#:phases phases)
4772 `(modify-phases ,phases
4773 (replace 'install-jquery-ui
4774 (lambda* (#:key outputs inputs #:allow-other-keys)
4775 (let ((dir (string-append (assoc-ref outputs "out")
4776 "/lib/python2.7/site-packages/"
4777 "matplotlib/backends/web_backend/")))
4778 (mkdir-p dir)
4779 (invoke "unzip"
4780 (assoc-ref inputs "jquery-ui")
4781 "-d" dir))
4782 #t))
4783 (delete 'fix-and-disable-failing-tests)
4784 (delete 'check))))) ; These tests weren't run the the past.
4785 ;; Make sure to use special packages for Python 2 instead
4786 ;; of those automatically rewritten by package-with-python2.
4787 (propagated-inputs
4788 `(("python2-pycairo" ,python2-pycairo)
4789 ("python2-backports-functools-lru-cache"
4790 ,python2-backports-functools-lru-cache)
4791 ("python2-functools32" ,python2-functools32)
4792 ("python2-pygobject-2" ,python2-pygobject-2)
4793 ("python2-subprocess32" ,python2-subprocess32)
4794 ("python2-tkinter" ,python-2 "tk")
4795 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4796 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4797
4798 (define-public python-matplotlib-documentation
4799 (package
4800 (name "python-matplotlib-documentation")
4801 (version (package-version python-matplotlib))
4802 (source (package-source python-matplotlib))
4803 (build-system python-build-system)
4804 (native-inputs
4805 `(("python-matplotlib" ,python-matplotlib)
4806 ("python-colorspacious" ,python-colorspacious)
4807 ("python-sphinx" ,python-sphinx)
4808 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4809 ("python-sphinx-gallery" ,python-sphinx-gallery)
4810 ("python-numpydoc" ,python-numpydoc)
4811 ("python-ipython" ,python-ipython)
4812 ("python-ipykernel" ,python-ipykernel)
4813 ("python-mock" ,python-mock)
4814 ("graphviz" ,graphviz)
4815 ("texlive" ,(texlive-union (list texlive-amsfonts
4816 texlive-latex-amsmath
4817 texlive-latex-enumitem
4818 texlive-latex-expdlist
4819 texlive-latex-geometry
4820 texlive-latex-preview
4821 texlive-latex-type1cm
4822 texlive-latex-ucs
4823
4824 texlive-generic-pdftex
4825
4826 texlive-fonts-ec
4827 texlive-fonts-adobe-times
4828 texlive-fonts-txfonts)))
4829 ("texinfo" ,texinfo)
4830 ,@(package-native-inputs python-matplotlib)))
4831 (arguments
4832 `(#:tests? #f ; we're only generating documentation
4833 #:phases
4834 (modify-phases %standard-phases
4835 ;; The tests in python-matplotlib are run after the install phase, so
4836 ;; we need to delete the extra phase here.
4837 (delete 'check)
4838 (replace 'build
4839 (lambda _
4840 (chdir "doc")
4841 (setenv "PYTHONPATH"
4842 (string-append (getenv "PYTHONPATH")
4843 ":" (getcwd) "/../examples/units"))
4844 (substitute* "conf.py"
4845 ;; Don't use git.
4846 (("^SHA = check_output.*")
4847 (string-append "SHA = \"" ,version "\"\n"))
4848 ;; Don't fetch intersphinx files from the Internet
4849 (("^explicit_order_folders" m)
4850 (string-append "intersphinx_mapping = {}\n" m))
4851 (("'sphinx.ext.intersphinx',") "")
4852 ;; Disable URL embedding which requires internet access.
4853 (("'https://docs.scipy.org/doc/numpy'") "None")
4854 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4855 (invoke "make"
4856 "SPHINXBUILD=sphinx-build"
4857 "SPHINXOPTS=" ; don't abort on warnings
4858 "html" "texinfo")))
4859 (replace 'install
4860 (lambda* (#:key inputs outputs #:allow-other-keys)
4861 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4862 (doc (string-append data "/doc/python-matplotlib-" ,version))
4863 (info (string-append data "/info"))
4864 (html (string-append doc "/html")))
4865 (mkdir-p html)
4866 (mkdir-p info)
4867 (copy-recursively "build/html" html)
4868 (symlink (string-append html "/_images")
4869 (string-append info "/matplotlib-figures"))
4870 (with-directory-excursion "build/texinfo"
4871 (substitute* "matplotlib.texi"
4872 (("@image\\{([^,]*)" all file)
4873 (string-append "@image{matplotlib-figures/" file)))
4874 (symlink (string-append html "/_images")
4875 "./matplotlib-figures")
4876 (invoke "makeinfo" "--no-split"
4877 "-o" "matplotlib.info" "matplotlib.texi"))
4878 (install-file "build/texinfo/matplotlib.info" info))
4879 #t)))))
4880 (home-page (package-home-page python-matplotlib))
4881 (synopsis "Documentation for the python-matplotlib package")
4882 (description (package-description python-matplotlib))
4883 (license (package-license python-matplotlib))))
4884
4885 (define-public python2-matplotlib-documentation
4886 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4887 (package
4888 (inherit parent)
4889 (native-inputs
4890 (alist-delete "python-sphinx-copybutton"
4891 (package-native-inputs parent))))))
4892
4893 (define-public python-matplotlib-venn
4894 (package
4895 (name "python-matplotlib-venn")
4896 (version "0.11.5")
4897 (source
4898 (origin
4899 (method url-fetch)
4900 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4901 (sha256
4902 (base32
4903 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4904 (build-system python-build-system)
4905 (arguments '(#:tests? #f)) ; tests are not included
4906 (propagated-inputs
4907 `(("python-matplotlib" ,python-matplotlib)
4908 ("python-numpy" ,python-numpy)
4909 ("python-scipy" ,python-scipy)))
4910 (native-inputs
4911 `(("unzip" ,unzip)))
4912 (home-page "https://github.com/konstantint/matplotlib-venn")
4913 (synopsis "Plot area-proportional Venn diagrams")
4914 (description
4915 "This package provides tools for plotting area-proportional two- and
4916 three-way Venn diagrams in @code{matplotlib}.")
4917 (license license:expat)))
4918
4919 (define-public python-pysnptools
4920 (package
4921 (name "python-pysnptools")
4922 (version "0.4.11")
4923 (source
4924 (origin
4925 (method url-fetch)
4926 (uri (pypi-uri "pysnptools" version))
4927 (sha256
4928 (base32
4929 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4930 (build-system python-build-system)
4931 (arguments
4932 `(#:tests? #f ; no test data are included
4933 #:phases
4934 (modify-phases %standard-phases
4935 (replace 'check
4936 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4937 (if tests?
4938 (begin
4939 (add-installed-pythonpath inputs outputs)
4940 (invoke "python3" "pysnptools/test.py"))
4941 #t))))))
4942 (propagated-inputs
4943 `(("python-dill" ,python-dill)
4944 ("python-h5py" ,python-h5py)
4945 ("python-numpy" ,python-numpy)
4946 ("python-pandas" ,python-pandas)
4947 ("python-psutil" ,python-psutil)
4948 ("python-scipy" ,python-scipy)))
4949 (native-inputs
4950 `(("python-cython" ,python-cython)))
4951 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4952 (synopsis "Library for reading and manipulating genetic data")
4953 (description
4954 "PySnpTools is a library for reading and manipulating genetic data. It
4955 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4956 those files. It can also efficiently manipulate ranges of integers using set
4957 operators such as union, intersection, and difference.")
4958 (license license:asl2.0)))
4959
4960 (define-public python2-pysnptools
4961 (package-with-python2 python-pysnptools))
4962
4963 (define-public python-socksipy-branch
4964 (package
4965 (name "python-socksipy-branch")
4966 (version "1.01")
4967 (source
4968 (origin
4969 (method url-fetch)
4970 (uri (pypi-uri "SocksiPy-branch" version))
4971 (sha256
4972 (base32
4973 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4974 (build-system python-build-system)
4975 (arguments
4976 `(#:tests? #f)) ; There are no tests
4977 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4978 (synopsis "Python SOCKS module")
4979 (description
4980 "SocksiPy - A Python SOCKS client module. It provides a
4981 socket-like interface that supports connections to any TCP
4982 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4983 The original version was developed by Dan Haim, this is a
4984 branch created by Mario Vilas to address some open issues,
4985 as the original project seems to have been abandoned circa 2007.")
4986 (license license:bsd-3)))
4987
4988 (define-public python2-socksipy-branch
4989 (package-with-python2 python-socksipy-branch))
4990
4991 (define-public python-socksipychain
4992 (let ((commit "eb5ee8741ce006ac0c5c3e2e83204062c348c155")
4993 (revision "1")
4994 (version "2.1.1"))
4995 (package
4996 (name "python-socksipychain")
4997 (version (git-version version revision commit))
4998 (source
4999 (origin
5000 (method git-fetch)
5001 (uri (git-reference
5002 (url "https://github.com/pagekite/PySocksipyChain.git")
5003 (commit commit)))
5004 (file-name (git-file-name name version))
5005 (sha256
5006 (base32
5007 "0fpphn6xnpm7qk8a914s4abycsbq9w6qkci07my632v0fylnm5n7"))))
5008 (build-system python-build-system)
5009 (arguments
5010 `(#:tests? #f)) ; Tests try to access the network.
5011 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5012 (synopsis "Python SOCKS module with chained proxies support")
5013 (description
5014 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5015 adds support for arbitrary chaining of proxy servers and various modes of
5016 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5017 a simple netcat replacement with chaining support.")
5018 (license license:bsd-3))))
5019
5020 (define-public python-pycodestyle
5021 (package
5022 (name "python-pycodestyle")
5023 (version "2.5.0")
5024 (source
5025 (origin
5026 (method url-fetch)
5027 (uri (pypi-uri "pycodestyle" version))
5028 (sha256
5029 (base32
5030 "0v4prb05n21bm8650v0a01k1nyqjdmkrsm3zycfxh2j5k9n962p4"))))
5031 (build-system python-build-system)
5032 (home-page "https://pycodestyle.readthedocs.io/")
5033 (synopsis "Python style guide checker")
5034 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5035 Python code against some of the style conventions in
5036 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5037 (license license:expat)))
5038
5039 (define-public python2-pycodestyle
5040 (package-with-python2 python-pycodestyle))
5041
5042 (define-public python-multidict
5043 (package
5044 (name "python-multidict")
5045 (version "4.7.5")
5046 (source
5047 (origin
5048 (method url-fetch)
5049 (uri (pypi-uri "multidict" version))
5050 (sha256
5051 (base32
5052 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5053 (build-system python-build-system)
5054 (arguments
5055 '(#:modules ((ice-9 ftw)
5056 (srfi srfi-1)
5057 (srfi srfi-26)
5058 (guix build utils)
5059 (guix build python-build-system))
5060 #:phases (modify-phases %standard-phases
5061 (replace 'check
5062 (lambda* (#:key tests? #:allow-other-keys)
5063 (if tests?
5064 (begin
5065 (let ((libdir (find (cut string-prefix? "lib." <>)
5066 (scandir "build"))))
5067 (setenv "PYTHONPATH"
5068 (string-append "./build/" libdir ":"
5069 (getenv "PYTHONPATH")))
5070 (invoke "pytest" "-vv")))
5071 (format #t "test suite not run~%"))
5072 #t)))))
5073 (native-inputs
5074 `(("python-pytest" ,python-pytest)
5075 ("python-pytest-cov" ,python-pytest-cov)))
5076 (home-page "https://github.com/aio-libs/multidict/")
5077 (synopsis "Multidict implementation")
5078 (description "Multidict is dict-like collection of key-value pairs
5079 where key might be occurred more than once in the container.")
5080 (license license:asl2.0)))
5081
5082 (define-public python-orderedmultidict
5083 (package
5084 (name "python-orderedmultidict")
5085 (version "1.0")
5086 (source
5087 (origin
5088 (method url-fetch)
5089 (uri (pypi-uri "orderedmultidict" version))
5090 (sha256
5091 (base32
5092 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5093 (build-system python-build-system)
5094 (arguments
5095 `(#:phases
5096 (modify-phases %standard-phases
5097 (add-after 'unpack 'fix-tests
5098 (lambda _
5099 ;; The package uses nosetest for running the tests.
5100 ;; Adding this initfile allows to run the test suite
5101 ;; without requiring nosetest.
5102 (with-output-to-file "tests/__init__.py" newline)
5103 #t)))))
5104 (propagated-inputs
5105 `(("python-six" ,python-six)))
5106 (native-inputs
5107 `(("python-pycodestyle" ,python-pycodestyle)))
5108 (home-page "https://github.com/gruns/orderedmultidict")
5109 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5110 (description "This package contains a library for ordered multivalue
5111 dictionaries. A multivalue dictionary is a dictionary that can store
5112 multiple values for the same key. An ordered multivalue dictionary is a
5113 multivalue dictionary that retains the order of insertions and deletions.")
5114 (license license:unlicense)))
5115
5116 (define-public python2-orderedmultidict
5117 (package-with-python2 python-orderedmultidict))
5118
5119 (define-public python-autopep8
5120 (package
5121 (name "python-autopep8")
5122 (version "1.3.5")
5123 (source
5124 (origin
5125 (method url-fetch)
5126 (uri (pypi-uri "autopep8" version))
5127 (sha256
5128 (base32
5129 "192bvhzi4d0claqxgzymvv7k3qnj627742bc8sgxpzjj42pd9112"))))
5130 (build-system python-build-system)
5131 (propagated-inputs
5132 `(("python-pycodestyle" ,python-pycodestyle)))
5133 (home-page "https://github.com/hhatto/autopep8")
5134 (synopsis "Format Python code according to the PEP 8 style guide")
5135 (description
5136 "@code{autopep8} automatically formats Python code to conform to
5137 the PEP 8 style guide. It uses the pycodestyle utility to determine
5138 what parts of the code needs to be formatted. @code{autopep8} is
5139 capable of fixing most of the formatting issues that can be reported
5140 by pycodestyle.")
5141 (license (license:non-copyleft
5142 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5143
5144 (define-public python2-autopep8
5145 (package-with-python2 python-autopep8))
5146
5147 (define-public python-distlib
5148 (package
5149 (name "python-distlib")
5150 (version "0.3.0")
5151 (source
5152 (origin
5153 (method url-fetch)
5154 (uri (pypi-uri "distlib" version ".zip"))
5155 (sha256
5156 (base32
5157 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5158 (build-system python-build-system)
5159 (arguments
5160 `(#:phases
5161 (modify-phases %standard-phases
5162 (add-before 'build 'no-/bin/sh
5163 (lambda _
5164 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5165 (("/bin/sh") (which "sh")))
5166 #t))
5167 (add-before 'check 'prepare-test-env
5168 (lambda _
5169 (setenv "HOME" "/tmp")
5170 ;; NOTE: Any value works, the variable just has to be present.
5171 (setenv "SKIP_ONLINE" "1")
5172 #t)))))
5173 (native-inputs `(("unzip" ,unzip)))
5174 (home-page "https://bitbucket.org/pypa/distlib")
5175 (synopsis "Distribution utilities")
5176 (description "Distlib is a library which implements low-level functions that
5177 relate to packaging and distribution of Python software. It is intended to be
5178 used as the basis for third-party packaging tools.")
5179 (license license:psfl)))
5180
5181 (define-public python-distutils-extra
5182 (package
5183 (name "python-distutils-extra")
5184 (version "2.38")
5185 (source
5186 (origin
5187 (method url-fetch)
5188 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5189 version "/+download/python-distutils-extra-"
5190 version ".tar.gz"))
5191 (sha256
5192 (base32
5193 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5194 (build-system python-build-system)
5195 (home-page "https://launchpad.net/python-distutils-extra/")
5196 (synopsis "Enhancements to Python's distutils")
5197 (description
5198 "The python-distutils-extra module enables you to easily integrate
5199 gettext support, themed icons, and scrollkeeper-based documentation into
5200 Python's distutils.")
5201 (license license:gpl2)))
5202
5203 (define-public python2-distutils-extra
5204 (package-with-python2 python-distutils-extra))
5205
5206 (define-public python2-elib.intl
5207 (package
5208 (name "python2-elib.intl")
5209 (version "0.0.3")
5210 (source
5211 (origin
5212 ;; This project doesn't tag releases or publish tarballs, so we take
5213 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5214 (method git-fetch)
5215 (uri (git-reference
5216 (url "https://github.com/dieterv/elib.intl.git")
5217 (commit "d09997cfef")))
5218 (file-name (string-append name "-" version "-checkout"))
5219 (sha256
5220 (base32
5221 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5222 (build-system python-build-system)
5223 (arguments
5224 ;; incompatible with Python 3 (exception syntax)
5225 `(#:python ,python-2
5226 #:tests? #f))
5227 (home-page "https://github.com/dieterv/elib.intl")
5228 (synopsis "Enhanced internationalization for Python")
5229 (description
5230 "The elib.intl module provides enhanced internationalization (I18N)
5231 services for your Python modules and applications.")
5232 (license license:lgpl3+)))
5233
5234 (define-public python-olefile
5235 (package
5236 (name "python-olefile")
5237 (version "0.46")
5238 (source
5239 (origin
5240 (method url-fetch)
5241 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5242 "download/v" version "/olefile-" version ".tar.gz"))
5243 (file-name (string-append name "-" version ".tar.gz"))
5244 (sha256
5245 (base32
5246 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5247 (build-system python-build-system)
5248 (home-page "https://www.decalage.info/python/olefileio")
5249 (synopsis "Read and write Microsoft OLE2 files.")
5250 (description
5251 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5252 Storage or Compound Document, Microsoft Office). It is an improved version of
5253 the OleFileIO module from PIL, the Python Image Library.")
5254 (license license:bsd-3)))
5255
5256 (define-public python2-olefile
5257 (package-with-python2 python-olefile))
5258
5259 (define-public python-pillow
5260 (package
5261 (name "python-pillow")
5262 (version "6.2.1")
5263 (source
5264 (origin
5265 (method url-fetch)
5266 (uri (pypi-uri "Pillow" version))
5267 (sha256
5268 (base32
5269 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5270 (build-system python-build-system)
5271 (native-inputs
5272 `(("python-pytest" ,python-pytest)))
5273 (inputs
5274 `(("freetype" ,freetype)
5275 ("lcms" ,lcms)
5276 ("libjpeg" ,libjpeg-turbo)
5277 ("libtiff" ,libtiff)
5278 ("libwebp" ,libwebp)
5279 ("openjpeg" ,openjpeg)
5280 ("zlib" ,zlib)))
5281 (propagated-inputs
5282 `(("python-olefile" ,python-olefile)))
5283 (arguments
5284 `(#:phases
5285 (modify-phases %standard-phases
5286 (add-after 'unpack 'patch-ldconfig
5287 (lambda _
5288 (substitute* "setup.py"
5289 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5290 (replace 'check
5291 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5292 (if tests?
5293 (begin
5294 (setenv "HOME" (getcwd))
5295 ;; Make installed package available for running the tests.
5296 (add-installed-pythonpath inputs outputs)
5297 (invoke "python" "selftest.py" "--installed")
5298 (invoke "python" "-m" "pytest" "-vv"))
5299 #t))))))
5300 (home-page "https://python-pillow.org")
5301 (synopsis "Fork of the Python Imaging Library")
5302 (description
5303 "The Python Imaging Library adds image processing capabilities to your
5304 Python interpreter. This library provides extensive file format support, an
5305 efficient internal representation, and fairly powerful image processing
5306 capabilities. The core image library is designed for fast access to data
5307 stored in a few basic pixel formats. It should provide a solid foundation for
5308 a general image processing tool.")
5309 (license (license:x11-style
5310 "http://www.pythonware.com/products/pil/license.htm"
5311 "The PIL Software License"))))
5312
5313 (define-public python2-pillow
5314 (package-with-python2 python-pillow))
5315
5316 (define-public python-pycparser
5317 (package
5318 (name "python-pycparser")
5319 (version "2.19")
5320 (source
5321 (origin
5322 (method url-fetch)
5323 (uri (pypi-uri "pycparser" version))
5324 (sha256
5325 (base32
5326 "1cr5dcj9628lkz1qlwq3fv97c25363qppkmcayqvd05dpy573259"))))
5327 (outputs '("out" "doc"))
5328 (build-system python-build-system)
5329 (native-inputs
5330 `(("pkg-config" ,pkg-config)))
5331 (arguments
5332 `(#:phases
5333 (modify-phases %standard-phases
5334 (replace 'check
5335 (lambda _
5336 (with-directory-excursion "tests"
5337 (invoke "python" "all_tests.py"))
5338 #t))
5339 (add-after 'install 'install-doc
5340 (lambda* (#:key outputs #:allow-other-keys)
5341 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5342 (doc (string-append data "/doc/" ,name "-" ,version))
5343 (examples (string-append doc "/examples")))
5344 (mkdir-p examples)
5345 (for-each (lambda (file)
5346 (copy-file (string-append "." file)
5347 (string-append doc file)))
5348 '("/README.rst" "/CHANGES" "/LICENSE"))
5349 (copy-recursively "examples" examples)
5350 #t))))))
5351 (home-page "https://github.com/eliben/pycparser")
5352 (synopsis "C parser in Python")
5353 (description
5354 "Pycparser is a complete parser of the C language, written in pure Python
5355 using the PLY parsing library. It parses C code into an AST and can serve as
5356 a front-end for C compilers or analysis tools.")
5357 (license license:bsd-3)))
5358
5359 (define-public python2-pycparser
5360 (package-with-python2 python-pycparser))
5361
5362 (define-public python-pywavelets
5363 (package
5364 (name "python-pywavelets")
5365 (version "1.0.1")
5366 (home-page "https://github.com/PyWavelets/pywt")
5367 (source (origin
5368 (method url-fetch)
5369 (uri (pypi-uri "PyWavelets" version))
5370 (sha256
5371 (base32
5372 "1p3qv2v66ghnqrb1f98wyyhp9dz71jwcd6kfpsax65sfdpiyqp1w"))))
5373 (build-system python-build-system)
5374 (arguments
5375 '(#:modules ((ice-9 ftw)
5376 (srfi srfi-1)
5377 (srfi srfi-26)
5378 (guix build utils)
5379 (guix build python-build-system))
5380 #:phases (modify-phases %standard-phases
5381 (replace 'check
5382 (lambda _
5383 (let ((cwd (getcwd))
5384 (libdir (find (cut string-prefix? "lib." <>)
5385 (scandir "build"))))
5386 (with-directory-excursion (string-append cwd "/build/" libdir)
5387 (invoke "nosetests" "-v" "."))))))))
5388 (native-inputs
5389 `(("python-matplotlib" ,python-matplotlib) ;for tests
5390 ("python-nose" ,python-nose)))
5391 (propagated-inputs
5392 `(("python-numpy" ,python-numpy)))
5393 (synopsis "Wavelet transforms in Python")
5394 (description
5395 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5396 mathematical basis functions that are localized in both time and frequency.
5397 Wavelet transforms are time-frequency transforms employing wavelets. They are
5398 similar to Fourier transforms, the difference being that Fourier transforms are
5399 localized only in frequency instead of in time and frequency.")
5400 (license license:expat)))
5401
5402 (define-public python2-pywavelets
5403 (package-with-python2 python-pywavelets))
5404
5405 (define-public python-pywinrm
5406 (package
5407 (name "python-pywinrm")
5408 (version "0.4.1")
5409 (source
5410 (origin
5411 (method url-fetch)
5412 (uri (pypi-uri "pywinrm" version))
5413 (sha256
5414 (base32
5415 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5416 (build-system python-build-system)
5417 (propagated-inputs
5418 `(("python-six" ,python-six)
5419 ("python-requests_ntlm" ,python-requests_ntlm)
5420 ("python-xmltodict" ,python-xmltodict)
5421 ("python-kerberos" ,python-kerberos)))
5422 (native-inputs
5423 `(("python-mock" ,python-mock)
5424 ("python-pytest" ,python-pytest)))
5425 (home-page "https://github.com/diyan/pywinrm/")
5426 (synopsis
5427 "Python library for Windows Remote Management (WinRM)")
5428 (description
5429 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5430 service. It allows you to invoke commands on target Windows machines from
5431 any machine that can run Python.")
5432 (license license:expat)))
5433
5434 (define-public python-xcffib
5435 (package
5436 (name "python-xcffib")
5437 (version "0.6.0")
5438 (source
5439 (origin
5440 (method url-fetch)
5441 (uri (pypi-uri "xcffib" version))
5442 (sha256
5443 (base32
5444 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5445 (build-system python-build-system)
5446 (inputs
5447 `(("libxcb" ,libxcb)))
5448 (propagated-inputs
5449 `(("python-cffi" ,python-cffi) ; used at run time
5450 ("python-six" ,python-six)))
5451 (arguments
5452 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5453 #:tests? #f
5454 #:phases
5455 (modify-phases %standard-phases
5456 (add-after 'unpack 'fix-libxcb-path
5457 (lambda* (#:key inputs #:allow-other-keys)
5458 (let ((libxcb (assoc-ref inputs "libxcb")))
5459 (substitute* '("xcffib/__init__.py")
5460 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5461 #t)))
5462 (add-after 'install 'install-doc
5463 (lambda* (#:key outputs #:allow-other-keys)
5464 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5465 "/doc/" ,name "-" ,version)))
5466 (mkdir-p doc)
5467 (copy-file "README.md"
5468 (string-append doc "/README.md"))
5469 #t))))))
5470 (home-page "https://github.com/tych0/xcffib")
5471 (synopsis "XCB Python bindings")
5472 (description
5473 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5474 support for Python 3 and PyPy. It is based on cffi.")
5475 (license license:expat)))
5476
5477 (define-public python2-xcffib
5478 (package-with-python2 python-xcffib))
5479
5480 (define-public python-cairocffi
5481 (package
5482 (name "python-cairocffi")
5483 (version "0.9.0")
5484 (source
5485 (origin
5486 (method url-fetch)
5487 (uri (pypi-uri "cairocffi" version))
5488 (sha256
5489 (base32
5490 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5491 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5492 (build-system python-build-system)
5493 (outputs '("out" "doc"))
5494 (inputs
5495 `(("glib" ,glib)
5496 ("gtk+" ,gtk+)
5497 ("gdk-pixbuf" ,gdk-pixbuf)
5498 ("cairo" ,cairo)
5499 ("pango" ,pango)))
5500 (native-inputs
5501 `(("pkg-config" ,pkg-config)
5502 ("python-pytest" ,python-pytest)
5503 ("python-pytest-cov" ,python-pytest-cov)
5504 ("python-pytest-runner" ,python-pytest-runner)
5505 ("python-sphinx" ,python-sphinx)
5506 ("python-docutils" ,python-docutils)))
5507 (propagated-inputs
5508 `(("python-xcffib" ,python-xcffib))) ; used at run time
5509 (arguments
5510 `(#:phases
5511 (modify-phases %standard-phases
5512 (add-after 'unpack 'patch-paths
5513 (lambda* (#:key inputs outputs #:allow-other-keys)
5514 (substitute* (find-files "." "\\.py$")
5515 (("dlopen\\(ffi, 'cairo'")
5516 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5517 "/lib/libcairo.so.2'"))
5518 (("dlopen\\(ffi, 'gdk-3'")
5519 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5520 "/lib/libgtk-3.so.0'"))
5521 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5522 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5523 "/lib/libgdk_pixbuf-2.0.so.0'"))
5524 (("dlopen\\(ffi, 'glib-2.0'")
5525 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5526 "/lib/libglib-2.0.so.0'"))
5527 (("dlopen\\(ffi, 'gobject-2.0'")
5528 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5529 "/lib/libgobject-2.0.so.0'"))
5530 (("dlopen\\(ffi, 'pangocairo-1.0'")
5531 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5532 "/lib/libpangocairo-1.0.so.0'"))
5533 (("dlopen\\(ffi, 'pango-1.0'")
5534 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5535 "/lib/libpango-1.0.so.0'")))
5536 #t))
5537 (add-after 'install 'install-doc
5538 (lambda* (#:key inputs outputs #:allow-other-keys)
5539 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5540 (doc (string-append data "/doc/" ,name "-" ,version))
5541 (html (string-append doc "/html")))
5542 (setenv "LD_LIBRARY_PATH"
5543 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5544 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5545 (setenv "LANG" "en_US.UTF-8")
5546 (mkdir-p html)
5547 (for-each (lambda (file)
5548 (copy-file (string-append "." file)
5549 (string-append doc file)))
5550 '("/README.rst" "/CHANGES" "/LICENSE"))
5551 (system* "python" "setup.py" "build_sphinx")
5552 (copy-recursively "docs/_build/html" html)
5553 #t))))))
5554 (home-page "https://github.com/Kozea/cairocffi")
5555 (synopsis "Python bindings and object-oriented API for Cairo")
5556 (description
5557 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5558 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5559 graphics library with support for multiple backends including image buffers,
5560 PNG, PostScript, PDF, and SVG file output.")
5561 (license license:bsd-3)))
5562
5563 (define-public python2-cairocffi
5564 (package-with-python2 python-cairocffi))
5565
5566 (define-public python-decorator
5567 (package
5568 (name "python-decorator")
5569 (version "4.3.0")
5570 (source
5571 (origin
5572 (method url-fetch)
5573 (uri (pypi-uri "decorator" version))
5574 (sha256
5575 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5576 (build-system python-build-system)
5577 (home-page "https://pypi.org/project/decorator/")
5578 (synopsis "Python module to simplify usage of decorators")
5579 (description
5580 "The aim of the decorator module is to simplify the usage of decorators
5581 for the average programmer, and to popularize decorators usage giving examples
5582 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5583 etc. The core of this module is a decorator factory.")
5584 (license license:expat)))
5585
5586 (define-public python2-decorator
5587 (package-with-python2 python-decorator))
5588
5589 (define-public python-drmaa
5590 (package
5591 (name "python-drmaa")
5592 (version "0.7.7")
5593 (source
5594 (origin
5595 (method url-fetch)
5596 (uri (pypi-uri "drmaa" version))
5597 (sha256
5598 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5599 (build-system python-build-system)
5600 ;; The test suite requires libdrmaa which is provided by the cluster
5601 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5602 ;; should be set to the path of the libdrmaa library.
5603 (arguments '(#:tests? #f))
5604 (native-inputs
5605 `(("python-nose" ,python-nose)))
5606 (home-page "https://pypi.org/project/drmaa/")
5607 (synopsis "Python bindings for the DRMAA library")
5608 (description
5609 "A Python package for Distributed Resource Management (DRM) job
5610 submission and control. This package is an implementation of the DRMAA 1.0
5611 Python language binding specification.")
5612 (license license:bsd-3)))
5613
5614 (define-public python2-drmaa
5615 (package-with-python2 python-drmaa))
5616
5617 (define-public python-grako
5618 (package
5619 (name "python-grako")
5620 (version "3.99.9")
5621 (source
5622 (origin
5623 (method url-fetch)
5624 (uri
5625 (pypi-uri "grako" version ".zip"))
5626 (sha256
5627 (base32
5628 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5629 (build-system python-build-system)
5630 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5631 (native-inputs
5632 `(("unzip" ,unzip)
5633 ("python-pytest" ,python-pytest)
5634 ("python-pytest-runner" ,python-pytest-runner)))
5635 (home-page "https://bitbucket.org/neogeny/grako")
5636 (synopsis "EBNF parser generator")
5637 (description
5638 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5639 memoizing PEG/Packrat parser in Python.")
5640 (license license:bsd-3)))
5641
5642 (define-public python2-grako
5643 (package-with-python2 python-grako))
5644
5645 (define-public python-gridmap
5646 (package
5647 (name "python-gridmap")
5648 (version "0.13.0")
5649 (source
5650 (origin
5651 (method git-fetch)
5652 (uri (git-reference
5653 (url "https://github.com/pygridtools/gridmap.git")
5654 (commit (string-append "v" version))))
5655 (file-name (git-file-name name version))
5656 (sha256
5657 (base32 "1478lbwsr1w24cii2x01m2910fvh8r43ghnb78nc972a96hqiknm"))))
5658 (build-system python-build-system)
5659 (arguments
5660 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5661 (propagated-inputs
5662 `(("python-psutil" ,python-psutil)
5663 ("python-drmaa" ,python-drmaa)
5664 ("python-pyzmq" ,python-pyzmq)))
5665 (home-page "https://github.com/pygridtools/gridmap")
5666 (synopsis "Create jobs on a cluster directly from Python")
5667 (description
5668 "Gridmap is a Python package to allow you to easily create jobs on the
5669 cluster directly from Python. You can directly map Python functions onto the
5670 cluster without needing to write any wrapper code yourself.")
5671 (license license:gpl3+)))
5672
5673 (define-public python2-gridmap
5674 (package-with-python2 python-gridmap))
5675
5676 (define-public python-honcho
5677 (package
5678 (name "python-honcho")
5679 (version "1.0.1")
5680 (source
5681 (origin
5682 (method git-fetch)
5683 (uri (git-reference
5684 (url "https://github.com/nickstenning/honcho.git")
5685 (commit (string-append "v" version))))
5686 (file-name (git-file-name name version))
5687 (sha256
5688 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5689 (build-system python-build-system)
5690 (native-inputs
5691 `(("python-pytest" ,python-pytest)
5692 ("python-mock" ,python-mock)
5693 ("python-tox" ,python-tox)
5694 ("which" ,which))) ;for tests
5695 (propagated-inputs
5696 `(("python-jinja2" ,python-jinja2)))
5697 (arguments
5698 `(#:phases
5699 (modify-phases %standard-phases
5700 (delete 'check)
5701 (add-after 'install 'check
5702 (lambda* (#:key outputs inputs #:allow-other-keys)
5703 ;; fix honcho path in testsuite
5704 (substitute* "tests/conftest.py"
5705 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5706 "/bin/honcho" "'")))
5707 ;; It's easier to run tests after install.
5708 ;; Make installed package available for running the tests
5709 (add-installed-pythonpath inputs outputs)
5710 (invoke "py.test" "-v"))))))
5711 (home-page "https://github.com/nickstenning/honcho")
5712 (synopsis "Manage Procfile-based applications")
5713 (description
5714 "A Procfile is a file which describes how to run an application
5715 consisting of several processes. honcho starts all listed processes.
5716 The output of all running processes is collected by honcho and
5717 displayed.")
5718 (license license:expat)))
5719
5720 (define-public python2-honcho
5721 (package-with-python2 python-honcho))
5722
5723 (define-public python-pexpect
5724 (package
5725 (name "python-pexpect")
5726 (version "4.8.0")
5727 (source
5728 (origin
5729 (method url-fetch)
5730 (uri (pypi-uri "pexpect" version))
5731 (sha256
5732 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5733 (build-system python-build-system)
5734 (arguments
5735 `(#:phases
5736 (modify-phases %standard-phases
5737 (add-before 'check 'prepare-tests
5738 (lambda _
5739 (substitute* (find-files "tests")
5740 (("/bin/ls") (which "ls"))
5741 (("/bin/echo") (which "echo"))
5742 (("/bin/which") (which "which"))
5743 ;; Many tests try to use the /bin directory which
5744 ;; is not present in the build environment.
5745 ;; Use one that's non-empty and unlikely to change.
5746 (("/bin'") "/dev'")
5747 ;; Disable failing test. See upstream bug report
5748 ;; https://github.com/pexpect/pexpect/issues/568
5749 (("def test_bash") "def _test_bash"))
5750 ;; XXX: Socket connection test gets "Connection reset by peer".
5751 ;; Why does it not work? Delete for now.
5752 (delete-file "tests/test_socket.py")
5753 #t))
5754 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5755 (native-inputs
5756 `(("python-nose" ,python-nose)
5757 ("python-pytest" ,python-pytest)
5758 ("man-db" ,man-db)
5759 ("which" ,which)
5760 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5761 (propagated-inputs
5762 `(("python-ptyprocess" ,python-ptyprocess)))
5763 (home-page "http://pexpect.readthedocs.org/")
5764 (synopsis "Controlling interactive console applications")
5765 (description
5766 "Pexpect is a pure Python module for spawning child applications;
5767 controlling them; and responding to expected patterns in their output.
5768 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5769 child application and control it as if a human were typing commands.")
5770 (license license:isc)))
5771
5772 (define-public python2-pexpect
5773 (package-with-python2 python-pexpect))
5774
5775 (define-public python-setuptools-scm
5776 (package
5777 (name "python-setuptools-scm")
5778 (version "3.4.3")
5779 (source (origin
5780 (method url-fetch)
5781 (uri (pypi-uri "setuptools_scm" version))
5782 (sha256
5783 (base32
5784 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5785 (build-system python-build-system)
5786 (home-page "https://github.com/pypa/setuptools_scm/")
5787 (synopsis "Manage Python package versions in SCM metadata")
5788 (description
5789 "Setuptools_scm handles managing your Python package versions in
5790 @dfn{software configuration management} (SCM) metadata instead of declaring
5791 them as the version argument or in a SCM managed file.")
5792 (license license:expat)))
5793
5794 (define-public python2-setuptools-scm
5795 (package-with-python2 python-setuptools-scm))
5796
5797 (define-public python-sexpdata
5798 (package
5799 (name "python-sexpdata")
5800 (version "0.0.3")
5801 (source
5802 (origin
5803 (method url-fetch)
5804 (uri (pypi-uri "sexpdata" version))
5805 (sha256
5806 (base32
5807 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
5808 (build-system python-build-system)
5809 (home-page "https://github.com/jd-boyd/sexpdata")
5810 (synopsis "S-expression parser for Python")
5811 (description
5812 "Sexpdata is an S-expression parser/serializer. It has load and dump
5813 functions like pickle, json or PyYAML module.")
5814 (license license:bsd-3)))
5815
5816 (define-public python-pathlib2
5817 (package
5818 (name "python-pathlib2")
5819 (version "2.3.3")
5820 (source
5821 (origin
5822 (method url-fetch)
5823 (uri (pypi-uri "pathlib2" version))
5824 (sha256
5825 (base32
5826 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5827 (build-system python-build-system)
5828 (propagated-inputs
5829 `(("python-scandir" ,python-scandir)
5830 ("python-six" ,python-six)))
5831 (home-page "https://pypi.org/project/pathlib2/")
5832 (synopsis "Object-oriented file system paths")
5833 (description "The goal of pathlib2 is to provide a backport of the
5834 standard @code{pathlib} module which tracks the standard library module, so
5835 all the newest features of the standard @code{pathlib} can be used also on
5836 older Python versions.")
5837 (license license:expat)))
5838
5839 (define-public python2-importlib-resources
5840 (package
5841 (name "python2-importlib-resources")
5842 (version "1.0.2")
5843 (source (origin
5844 (method url-fetch)
5845 (uri (pypi-uri "importlib_resources" version))
5846 (sha256
5847 (base32
5848 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5849 (build-system python-build-system)
5850 (arguments
5851 `(#:python ,python-2
5852 #:phases (modify-phases %standard-phases
5853 ;; The build system tests for python-wheel, but it is
5854 ;; not required for Guix nor the test suite. Just drop
5855 ;; it to make bootstrapping pytest easier.
5856 (add-after 'unpack 'drop-wheel-dependency
5857 (lambda _
5858 (substitute* "setup.cfg"
5859 (("^[[:blank:]]+wheel")
5860 ""))
5861 #t)))))
5862 (propagated-inputs
5863 `(("python-pathlib2" ,python2-pathlib2)
5864 ("python-typing" ,python2-typing)))
5865 (home-page "https://gitlab.com/python-devs/importlib_resources")
5866 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5867 (description
5868 "This package provides an implementation of @code{importlib.resources}
5869 for older versions of Python.")
5870 (license license:asl2.0)))
5871
5872 ;; For importlib-metadata-bootstrap below.
5873 (define-public python2-importlib-resources-bootstrap
5874 (hidden-package
5875 (package/inherit
5876 python2-importlib-resources
5877 (name "python2-importlib-resources-bootstrap")
5878 (propagated-inputs
5879 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
5880 ("python-typing" ,python2-typing))))))
5881
5882 (define-public python-importlib-metadata
5883 (package
5884 (name "python-importlib-metadata")
5885 (version "1.5.0")
5886 (source
5887 (origin
5888 (method url-fetch)
5889 (uri (pypi-uri "importlib_metadata" version))
5890 (sha256
5891 (base32
5892 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
5893 (build-system python-build-system)
5894 (propagated-inputs
5895 `(("python-zipp" ,python-zipp)))
5896 (native-inputs
5897 `(("python-setuptools-scm" ,python-setuptools-scm)
5898 ("python-pyfakefs" ,python-pyfakefs)
5899 ("python-packaging" ,python-packaging)))
5900 (home-page "https://importlib-metadata.readthedocs.io/")
5901 (synopsis "Read metadata from Python packages")
5902 (description
5903 "@code{importlib_metadata} is a library which provides an API for
5904 accessing an installed Python package's metadata, such as its entry points or
5905 its top-level name. This functionality intends to replace most uses of
5906 @code{pkg_resources} entry point API and metadata API. Along with
5907 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5908 need to use the older and less efficient @code{pkg_resources} package.")
5909 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5910 (license license:asl2.0)))
5911
5912 (define-public python2-importlib-metadata
5913 (let ((base (package-with-python2 (strip-python2-variant
5914 python-importlib-metadata))))
5915 (package/inherit
5916 base
5917 (name "python2-importlib-metadata")
5918 (native-inputs
5919 `(("python-setuptools-scm" ,python2-setuptools-scm)
5920 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
5921 ("python-packaging" ,python2-packaging-bootstrap)))
5922 (propagated-inputs
5923 `(("python-configparser" ,python2-configparser)
5924 ("python-contextlib2" ,python2-contextlib2)
5925 ("python-importlib-resources" ,python2-importlib-resources)
5926 ("python-pathlib2" ,python2-pathlib2)
5927 ,@(package-propagated-inputs base))))))
5928
5929 ;; This package is used by python2-pytest, and thus must not depend on it.
5930 (define-public python2-importlib-metadata-bootstrap
5931 (hidden-package
5932 (package/inherit
5933 python2-importlib-metadata
5934 (name "python2-importlib-metadata-bootstrap")
5935 (arguments
5936 `(#:tests? #f
5937 ,@(package-arguments python2-importlib-metadata)))
5938 (propagated-inputs
5939 `(("python-zipp" ,python2-zipp-bootstrap)
5940 ("python-pathlib2" ,python2-pathlib2-bootstrap)
5941 ("python-configparser" ,python2-configparser)
5942 ("python-contextlib2" ,python2-contextlib2-bootstrap)
5943 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
5944
5945 (define-public python-importmagic
5946 (package
5947 (name "python-importmagic")
5948 (version "0.1.7")
5949 (source
5950 (origin
5951 (method url-fetch)
5952 (uri (pypi-uri "importmagic" version))
5953 (sha256
5954 (base32
5955 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
5956 (build-system python-build-system)
5957 (home-page "https://github.com/alecthomas/importmagic")
5958 (synopsis "Library for adding, removing and managing Python imports")
5959 (description
5960 "Importmagic is a Python library for automatically managing imports by
5961 finding unresolved symbols in Python code and their corresponding imports.")
5962 (license license:bsd-3)))
5963
5964 (define-public python-jaraco-packaging
5965 (package
5966 (name "python-jaraco-packaging")
5967 (version "6.1")
5968 (source
5969 (origin
5970 (method url-fetch)
5971 (uri (pypi-uri "jaraco.packaging" version))
5972 (sha256
5973 (base32
5974 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5975 (build-system python-build-system)
5976 (propagated-inputs
5977 `(("python-pytest" ,python-pytest)
5978 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5979 ("python-pytest-flake8" ,python-pytest-flake8)
5980 ("python-rst.linker" ,python-rst.linker)
5981 ("python-setuptools" ,python-setuptools)
5982 ("python-setuptools-scm" ,python-setuptools-scm)
5983 ("python-six" ,python-six)
5984 ("python-sphinx" ,python-sphinx)))
5985 (home-page "https://github.com/jaraco/jaraco.packaging")
5986 (synopsis "Tools to supplement packaging Python releases")
5987 (description
5988 "This package provides various tools to supplement packaging Python
5989 releases.")
5990 (license license:expat)))
5991
5992 (define-public python-pathpy
5993 (package
5994 (name "python-pathpy")
5995 (version "11.5.1")
5996 (source
5997 (origin
5998 (method url-fetch)
5999 (uri (pypi-uri "path.py" version))
6000 (sha256
6001 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6002 (outputs '("out" "doc"))
6003 (build-system python-build-system)
6004 (propagated-inputs
6005 `(("python-appdirs" ,python-appdirs)
6006 ("python-importlib-metadata" ,python-importlib-metadata)))
6007 (native-inputs
6008 `(("python-setuptools-scm" ,python-setuptools-scm)
6009 ("python-sphinx" ,python-sphinx)
6010 ("python-rst.linker" ,python-rst.linker)
6011 ("python-pytest" ,python-pytest)
6012 ("python-pytest-runner" ,python-pytest-runner)
6013 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6014 (arguments
6015 `(#:phases
6016 (modify-phases %standard-phases
6017 (add-after 'build 'build-doc
6018 (lambda _
6019 (setenv "LANG" "en_US.UTF-8")
6020 (invoke "python" "setup.py" "build_sphinx")))
6021 (add-after 'install 'install-doc
6022 (lambda* (#:key outputs #:allow-other-keys)
6023 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6024 (doc (string-append data "/doc/" ,name "-" ,version))
6025 (html (string-append doc "/html")))
6026 (mkdir-p html)
6027 (for-each (lambda (file)
6028 (copy-file file (string-append doc "/" file)))
6029 '("README.rst" "CHANGES.rst"))
6030 (copy-recursively "build/sphinx/html" html)
6031 #t)))
6032 (replace 'check
6033 (lambda _
6034 ;; The import time test aborts if an import takes longer than
6035 ;; 100ms. It may very well take a little longer than that.
6036 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6037 (home-page "https://github.com/jaraco/path.py")
6038 (synopsis "Python module wrapper for built-in os.path")
6039 (description
6040 "@code{path.py} implements path objects as first-class entities, allowing
6041 common operations on files to be invoked on those path objects directly.")
6042 (license license:expat)))
6043
6044 (define-public python2-pathpy
6045 (package-with-python2 python-pathpy))
6046
6047 (define-public python-simplegeneric
6048 (package
6049 (name "python-simplegeneric")
6050 (version "0.8.1")
6051 (source
6052 (origin
6053 (method url-fetch)
6054 (uri (pypi-uri "simplegeneric" version ".zip"))
6055 (sha256
6056 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6057 (build-system python-build-system)
6058 (native-inputs
6059 `(("unzip" ,unzip)))
6060 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6061 (synopsis "Python module for simple generic functions")
6062 (description
6063 "The simplegeneric module lets you define simple single-dispatch generic
6064 functions, akin to Python’s built-in generic functions like @code{len()},
6065 @code{iter()} and so on. However, instead of using specially-named methods,
6066 these generic functions use simple lookup tables, akin to those used by
6067 e.g. @code{pickle.dump()} and other generic functions found in the Python
6068 standard library.")
6069 (license license:zpl2.1)))
6070
6071 (define-public python2-simplegeneric
6072 (package-with-python2 python-simplegeneric))
6073
6074 (define-public python-ipython-genutils
6075 ;; TODO: This package is retired, check if can be removed, see description.
6076 (package
6077 (name "python-ipython-genutils")
6078 (version "0.1.0")
6079 (source
6080 (origin
6081 (method url-fetch)
6082 (uri (pypi-uri "ipython_genutils" version))
6083 (sha256
6084 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6085 (build-system python-build-system)
6086 (arguments `(#:tests? #f)) ; no tests
6087 (home-page "https://ipython.org")
6088 (synopsis "Vestigial utilities from IPython")
6089 (description
6090 "This package provides retired utilities from IPython. No packages
6091 outside IPython/Jupyter should depend on it.
6092
6093 This package shouldn't exist. It contains some common utilities shared by
6094 Jupyter and IPython projects during The Big Split. As soon as possible, those
6095 packages will remove their dependency on this, and this package will go
6096 away.")
6097 (license license:bsd-3)))
6098
6099 (define-public python2-ipython-genutils
6100 (package-with-python2 python-ipython-genutils))
6101
6102 (define-public python-ipyparallel
6103 (package
6104 (name "python-ipyparallel")
6105 (version "6.2.4")
6106 (source
6107 (origin
6108 (method url-fetch)
6109 (uri (pypi-uri "ipyparallel" version))
6110 (sha256
6111 (base32
6112 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6113 (build-system python-build-system)
6114 (arguments
6115 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6116 #:phases
6117 (modify-phases %standard-phases
6118 (add-before 'check 'prepare-for-tests
6119 (lambda _
6120 (setenv "HOME" (getcwd))
6121 #t)))))
6122 (propagated-inputs
6123 `(("python-dateutil" ,python-dateutil)
6124 ("python-decorator" ,python-decorator)
6125 ("python-ipykernel" ,python-ipykernel)
6126 ("python-ipython" ,python-ipython)
6127 ("python-ipython-genutils" ,python-ipython-genutils)
6128 ("python-jupyter-client" ,python-jupyter-client)
6129 ("python-pyzmq" ,python-pyzmq)
6130 ("python-tornado" ,python-tornado)
6131 ("python-traitlets" ,python-traitlets)))
6132 (native-inputs
6133 `(("python-ipython" ,python-ipython)
6134 ("python-mock" ,python-mock)
6135 ("python-nose" ,python-nose)
6136 ("python-pytest" ,python-pytest)
6137 ("python-pytest-cov" ,python-pytest-cov)
6138 ("python-testpath" ,python-testpath)))
6139 (home-page "https://ipython.org/")
6140 (synopsis "Interactive Parallel Computing with IPython")
6141 (description
6142 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6143 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6144 CLI scripts:
6145 @enumerate
6146 @item ipcluster - start/stop a cluster
6147 @item ipcontroller - start a scheduler
6148 @item ipengine - start an engine
6149 @end enumerate")
6150 (license license:bsd-3)))
6151
6152 (define-public python2-ipyparallel
6153 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6154 (package
6155 (inherit ipyparallel)
6156 (propagated-inputs
6157 `(("python2-futures" ,python2-futures)
6158 ,@(package-propagated-inputs ipyparallel))))))
6159
6160 (define-public python-ipython-cluster-helper
6161 (package
6162 (name "python-ipython-cluster-helper")
6163 (version "0.6.4")
6164 (source
6165 (origin
6166 (method url-fetch)
6167 (uri (pypi-uri "ipython-cluster-helper" version))
6168 (sha256
6169 (base32
6170 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6171 (modules '((guix build utils)))
6172 (snippet
6173 '(begin (substitute* "requirements.txt"
6174 (("ipython.*") "ipython\n"))
6175 #t))))
6176 (build-system python-build-system)
6177 (arguments
6178 `(#:tests? #f ; Test suite can't find IPython.
6179 #:phases
6180 (modify-phases %standard-phases
6181 (replace 'check
6182 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6183 (if tests?
6184 (begin
6185 (setenv "HOME" (getcwd))
6186 (add-installed-pythonpath inputs outputs)
6187 (invoke "python" "example/example.py" "--local"))
6188 #t))))))
6189 (propagated-inputs
6190 `(("python-ipyparallel" ,python-ipyparallel)
6191 ("python-ipython" ,python-ipython)
6192 ("python-netifaces" ,python-netifaces)
6193 ("python-pyzmq" ,python-pyzmq)
6194 ("python-setuptools" ,python-setuptools)
6195 ("python-six" ,python-six)))
6196 (home-page "https://github.com/roryk/ipython-cluster-helper")
6197 (synopsis
6198 "Simplify IPython cluster start up and use for multiple schedulers")
6199 (description
6200 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6201 profile, launches a cluster and returns a view. On program exit it shuts the
6202 cluster down and deletes the throwaway profile.")
6203 (license license:expat)))
6204
6205 (define-public python2-ipython-cluster-helper
6206 (package-with-python2 python-ipython-cluster-helper))
6207
6208 (define-public python-traitlets
6209 (package
6210 (name "python-traitlets")
6211 (version "4.3.3")
6212 (source
6213 (origin
6214 (method url-fetch)
6215 (uri (pypi-uri "traitlets" version))
6216 (sha256
6217 (base32
6218 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6219 (build-system python-build-system)
6220 (arguments
6221 `(#:phases
6222 (modify-phases %standard-phases
6223 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6224 (propagated-inputs
6225 `(("python-ipython-genutils" ,python-ipython-genutils)
6226 ("python-decorator" ,python-decorator)))
6227 (native-inputs
6228 `(("python-pytest" ,python-pytest)))
6229 (properties `((python2-variant . ,(delay python2-traitlets))))
6230 (home-page "https://ipython.org")
6231 (synopsis "Configuration system for Python applications")
6232 (description
6233 "Traitlets is a framework that lets Python classes have attributes with
6234 type checking, dynamically calculated default values, and ‘on change’
6235 callbacks. The package also includes a mechanism to use traitlets for
6236 configuration, loading values from files or from command line arguments. This
6237 is a distinct layer on top of traitlets, so you can use traitlets in your code
6238 without using the configuration machinery.")
6239 (license license:bsd-3)))
6240
6241 (define-public python2-traitlets
6242 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6243 (package
6244 (inherit traitlets)
6245 (propagated-inputs
6246 `(("python2-enum34" ,python2-enum34)
6247 ,@(package-propagated-inputs traitlets))))))
6248
6249 (define-public python-jupyter-core
6250 (package
6251 (name "python-jupyter-core")
6252 (version "4.4.0")
6253 (source
6254 (origin
6255 (method url-fetch)
6256 (uri (string-append (pypi-uri "jupyter_core" version)))
6257 (sha256
6258 (base32
6259 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6260 (build-system python-build-system)
6261 ;; FIXME: not sure how to run the tests
6262 (arguments `(#:tests? #f))
6263 (propagated-inputs
6264 `(("python-traitlets" ,python-traitlets)))
6265 (home-page "http://jupyter.org/")
6266 (synopsis "Jupyter base package")
6267 (description
6268 "Jupyter core is the base package on which Jupyter projects rely.")
6269 (license license:bsd-3)))
6270
6271 (define-public python2-jupyter-core
6272 (package-with-python2 python-jupyter-core))
6273
6274 (define-public python-jupyter-client
6275 (package
6276 (name "python-jupyter-client")
6277 (version "5.2.4")
6278 (source
6279 (origin
6280 (method url-fetch)
6281 (uri (pypi-uri "jupyter_client" version))
6282 (sha256
6283 (base32
6284 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6285 (build-system python-build-system)
6286 ;; Tests fail because of missing native python kernel which I assume is
6287 ;; provided by the ipython package, which we cannot use because it would
6288 ;; cause a dependency cycle.
6289 (arguments
6290 `(#:tests? #f
6291
6292 #:phases (modify-phases %standard-phases
6293 (add-after 'unpack 'set-tool-file-names
6294 (lambda* (#:key inputs #:allow-other-keys)
6295 (let ((iproute (assoc-ref inputs "iproute")))
6296 (substitute* "jupyter_client/localinterfaces.py"
6297 (("'ip'")
6298 (string-append "'" iproute "/sbin/ip'")))
6299 #t))))))
6300 (inputs
6301 `(("iproute" ,iproute)))
6302 (propagated-inputs
6303 `(("python-pyzmq" ,python-pyzmq)
6304 ("python-traitlets" ,python-traitlets)
6305 ("python-jupyter-core" ,python-jupyter-core)))
6306 (home-page "http://jupyter.org/")
6307 (synopsis "Jupyter protocol implementation and client libraries")
6308 (description
6309 "The @code{jupyter_client} package contains the reference implementation
6310 of the Jupyter protocol. It also provides client and kernel management APIs
6311 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6312 installing @code{kernelspec}s for use with Jupyter frontends.")
6313 (license license:bsd-3)))
6314
6315 (define-public python2-jupyter-client
6316 (package-with-python2 python-jupyter-client))
6317
6318 (define-public python-ipykernel
6319 (package
6320 (name "python-ipykernel")
6321 (version "5.1.3")
6322 (source
6323 (origin
6324 (method url-fetch)
6325 (uri (pypi-uri "ipykernel" version))
6326 (sha256
6327 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6328 (build-system python-build-system)
6329 (arguments
6330 `(#:phases
6331 (modify-phases %standard-phases
6332 (replace 'check
6333 (lambda _
6334 (setenv "HOME" "/tmp")
6335 (invoke "pytest" "-v")
6336 #t))
6337 (add-after 'install 'set-python-file-name
6338 (lambda* (#:key outputs #:allow-other-keys)
6339 ;; Record the absolute file name of the 'python' executable in
6340 ;; 'kernel.json'.
6341 (let ((out (assoc-ref outputs "out")))
6342 (substitute* (string-append out "/share/jupyter"
6343 "/kernels/python3/kernel.json")
6344 (("\"python\"")
6345 (string-append "\"" (which "python") "\"")))
6346 #t))))))
6347 (propagated-inputs
6348 `(("python-ipython" ,python-ipython)
6349 ;; imported at runtime during connect
6350 ("python-jupyter-client" ,python-jupyter-client)))
6351 (native-inputs
6352 `(("python-flaky" ,python-flaky)
6353 ("python-nose" ,python-nose)
6354 ("python-pytest" ,python-pytest)))
6355 (home-page "https://ipython.org")
6356 (synopsis "IPython Kernel for Jupyter")
6357 (description
6358 "This package provides the IPython kernel for Jupyter.")
6359 (properties `((python2-variant . ,(delay python2-ipykernel))))
6360 (license license:bsd-3)))
6361
6362 ;; Version 5.x and above no longer support Python 2.
6363 (define-public python2-ipykernel
6364 (package
6365 (name "python2-ipykernel")
6366 (version "4.10.1")
6367 (source
6368 (origin
6369 (method url-fetch)
6370 (uri (pypi-uri "ipykernel" version))
6371 (sha256
6372 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6373 (build-system python-build-system)
6374 (arguments
6375 `(#:python ,python-2))
6376 (propagated-inputs
6377 `(("python2-ipython" ,python2-ipython)
6378 ;; imported at runtime during connect
6379 ("python2-jupyter-client" ,python2-jupyter-client)
6380 ("python2-tornado" ,python2-tornado)
6381 ("python2-traitlets" ,python2-traitlets)))
6382 (native-inputs
6383 `(("python2-mock" ,python2-mock)
6384 ("python2-nose" ,python2-nose)
6385 ("python2-pytest" ,python2-pytest)
6386 ("python2-pytest-cov" ,python2-pytest-cov)))
6387 (home-page "https://ipython.org")
6388 (synopsis "IPython Kernel for Jupyter")
6389 (description
6390 "This package provides the IPython kernel for Jupyter.")
6391 (license license:bsd-3)))
6392
6393 (define-public python-pari-jupyter
6394 (package
6395 (name "python-pari-jupyter")
6396 (version "1.3.2")
6397 (source
6398 (origin
6399 (method url-fetch)
6400 (uri (pypi-uri "pari_jupyter" version))
6401 (sha256
6402 (base32
6403 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6404 (build-system python-build-system)
6405 (propagated-inputs
6406 `(("python-ipykernel" ,python-ipykernel)))
6407 (inputs
6408 `(("pari-gp" ,pari-gp)
6409 ("readline" ,readline)))
6410 (arguments
6411 `(#:tests? #f)) ; no test suite
6412 (home-page
6413 "https://github.com/jdemeyer/pari_jupyter")
6414 (synopsis "A Jupyter kernel for PARI/GP")
6415 (description "The package provides a PARI/GP kernel for Jupyter.")
6416 (license license:gpl3+)))
6417
6418 (define-public python-backcall
6419 (package
6420 (name "python-backcall")
6421 (version "0.1.0")
6422 (source
6423 (origin
6424 (method url-fetch)
6425 (uri (pypi-uri "backcall" version))
6426 (sha256
6427 (base32
6428 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6429 (build-system python-build-system)
6430 (home-page "https://github.com/takluyver/backcall/")
6431 (synopsis "Specifications for callback functions passed in to an API")
6432 (description
6433 "If your code lets other people supply callback functions, it's important
6434 to specify the function signature you expect, and check that functions support
6435 that. Adding extra parameters later would break other peoples code unless
6436 you're careful. The @code{backcall} package provides a way of specifying the
6437 callback signature using a prototype function.")
6438 (license license:bsd-3)))
6439
6440 (define-public python-ipython
6441 (package
6442 (name "python-ipython")
6443 (version "7.9.0")
6444 (source
6445 (origin
6446 (method url-fetch)
6447 (uri (pypi-uri "ipython" version ".tar.gz"))
6448 (sha256
6449 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6450 (build-system python-build-system)
6451 (propagated-inputs
6452 `(("python-backcall" ,python-backcall)
6453 ("python-pyzmq" ,python-pyzmq)
6454 ("python-prompt-toolkit" ,python-prompt-toolkit)
6455 ("python-terminado" ,python-terminado)
6456 ("python-matplotlib" ,python-matplotlib)
6457 ("python-numpy" ,python-numpy)
6458 ("python-numpydoc" ,python-numpydoc)
6459 ("python-jedi" ,python-jedi)
6460 ("python-jinja2" ,python-jinja2)
6461 ("python-mistune" ,python-mistune)
6462 ("python-pexpect" ,python-pexpect)
6463 ("python-pickleshare" ,python-pickleshare)
6464 ("python-simplegeneric" ,python-simplegeneric)
6465 ("python-jsonschema" ,python-jsonschema)
6466 ("python-traitlets" ,python-traitlets)
6467 ("python-nbformat" ,python-nbformat)
6468 ("python-pygments" ,python-pygments)))
6469 (inputs
6470 `(("readline" ,readline)
6471 ("which" ,which)))
6472 (native-inputs
6473 `(("graphviz" ,graphviz)
6474 ("pkg-config" ,pkg-config)
6475 ("python-requests" ,python-requests) ;; for tests
6476 ("python-testpath" ,python-testpath)
6477 ("python-nose" ,python-nose)))
6478 (arguments
6479 `(#:phases
6480 (modify-phases %standard-phases
6481 (add-after 'unpack 'make-docs-reproducible
6482 (lambda _
6483 (substitute* "IPython/sphinxext/ipython_directive.py"
6484 ((".*import datetime") "")
6485 ((".*datetime.datetime.now\\(\\)") "")
6486 (("%timeit") "# %timeit"))
6487 #t))
6488 ;; Tests can only be run after the library has been installed and not
6489 ;; within the source directory.
6490 (delete 'check)
6491 (add-after 'install 'check
6492 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6493 (if tests?
6494 (begin
6495 ;; Make installed package available for running the tests
6496 (add-installed-pythonpath inputs outputs)
6497 (setenv "HOME" "/tmp/") ;; required by a test
6498 ;; We only test the core because one of the other tests
6499 ;; tries to import ipykernel.
6500 (invoke "python" "IPython/testing/iptest.py"
6501 "-v" "IPython/core/tests"))
6502 #t)))
6503 (add-before 'check 'fix-tests
6504 (lambda* (#:key inputs #:allow-other-keys)
6505 (substitute* "./IPython/utils/_process_posix.py"
6506 (("/usr/bin/env', 'which") (which "which")))
6507 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6508 (("#!/usr/bin/env python")
6509 (string-append "#!" (which "python"))))
6510 ;; This test introduces a circular dependency on ipykernel
6511 ;; (which depends on ipython).
6512 (delete-file "IPython/core/tests/test_display.py")
6513 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6514 (delete-file "IPython/core/tests/test_interactiveshell.py")
6515 #t)))))
6516 (home-page "https://ipython.org")
6517 (synopsis "IPython is a tool for interactive computing in Python")
6518 (description
6519 "IPython provides a rich architecture for interactive computing with:
6520 Powerful interactive shells, a browser-based notebook, support for interactive
6521 data visualization, embeddable interpreters and tools for parallel
6522 computing.")
6523 (properties `((python2-variant . ,(delay python2-ipython))))
6524 (license license:bsd-3)))
6525
6526 ;; This is the latest release of the LTS version of ipython with support for
6527 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6528 ;; dropped support for Python 2.7.
6529 (define-public python2-ipython
6530 (package
6531 (name "python2-ipython")
6532 (version "5.8.0")
6533 (source
6534 (origin
6535 (method url-fetch)
6536 (uri (pypi-uri "ipython" version ".tar.gz"))
6537 (sha256
6538 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6539 (build-system python-build-system)
6540 (propagated-inputs
6541 `(("python2-backports-shutil-get-terminal-size"
6542 ,python2-backports-shutil-get-terminal-size)
6543 ("python2-pathlib2" ,python2-pathlib2)
6544 ("python2-pyzmq" ,python2-pyzmq)
6545 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6546 ("python2-terminado" ,python2-terminado)
6547 ("python2-matplotlib" ,python2-matplotlib)
6548 ("python2-numpy" ,python2-numpy)
6549 ("python2-numpydoc" ,python2-numpydoc)
6550 ("python2-jinja2" ,python2-jinja2)
6551 ("python2-mistune" ,python2-mistune)
6552 ("python2-pexpect" ,python2-pexpect)
6553 ("python2-pickleshare" ,python2-pickleshare)
6554 ("python2-simplegeneric" ,python2-simplegeneric)
6555 ("python2-jsonschema" ,python2-jsonschema)
6556 ("python2-traitlets" ,python2-traitlets)
6557 ("python2-nbformat" ,python2-nbformat)
6558 ("python2-pygments" ,python2-pygments)))
6559 (inputs
6560 `(("readline" ,readline)
6561 ("which" ,which)))
6562 (native-inputs
6563 `(("graphviz" ,graphviz)
6564 ("pkg-config" ,pkg-config)
6565 ("python2-requests" ,python2-requests) ;; for tests
6566 ("python2-testpath" ,python2-testpath)
6567 ("python2-mock" ,python2-mock)
6568 ("python2-nose" ,python2-nose)))
6569 (arguments
6570 `(#:python ,python-2
6571 #:phases
6572 (modify-phases %standard-phases
6573 (add-before 'check 'delete-broken-tests
6574 (lambda* (#:key inputs #:allow-other-keys)
6575 ;; These tests throw errors for unknown reasons.
6576 (delete-file "IPython/core/tests/test_displayhook.py")
6577 (delete-file "IPython/core/tests/test_magic_terminal.py")
6578 (delete-file "IPython/core/tests/test_profile.py")
6579 #t)))))
6580 (home-page "https://ipython.org")
6581 (synopsis "IPython is a tool for interactive computing in Python")
6582 (description
6583 "IPython provides a rich architecture for interactive computing with:
6584 Powerful interactive shells, a browser-based notebook, support for interactive
6585 data visualization, embeddable interpreters and tools for parallel
6586 computing.")
6587 (license license:bsd-3)))
6588
6589 (define-public python-ipython-documentation
6590 (package
6591 (inherit python-ipython)
6592 (name "python-ipython-documentation")
6593 (version (package-version python-ipython))
6594 (arguments
6595 `(#:phases
6596 (modify-phases %standard-phases
6597 (delete 'build)
6598 (delete 'check)
6599 (replace 'install
6600 (lambda* (#:key outputs #:allow-other-keys)
6601 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6602 (doc (string-append data "/doc/" ,name "-" ,version))
6603 (html (string-append doc "/html"))
6604 (man1 (string-append data "/man/man1"))
6605 (info (string-append data "/info"))
6606 (examples (string-append doc "/examples"))
6607 (python-arg (string-append "PYTHON=" (which "python"))))
6608 (setenv "LANG" "en_US.utf8")
6609 (with-directory-excursion "docs"
6610 ;; FIXME: pdf fails to build
6611 ;;(system* "make" "pdf" "PAPER=a4")
6612 (system* "make" python-arg "html")
6613 ;; FIXME: the generated texi file contains ^@^@, which trips
6614 ;; up the parser.
6615 ;; (system* "make" python-arg "info")
6616 )
6617 (copy-recursively "docs/man" man1)
6618 (copy-recursively "examples" examples)
6619 (copy-recursively "docs/build/html" html)
6620 ;; (copy-file "docs/build/latex/ipython.pdf"
6621 ;; (string-append doc "/ipython.pdf"))
6622 (mkdir-p info)
6623 ;; (copy-file "docs/build/texinfo/ipython.info"
6624 ;; (string-append info "/ipython.info"))
6625 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6626 #t)))))
6627 (inputs
6628 `(("python-ipython" ,python-ipython)
6629 ("python-ipykernel" ,python-ipykernel)))
6630 (native-inputs
6631 `(("python-sphinx" ,python-sphinx)
6632 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6633 ;; FIXME: It's possible that a smaller union would work just as well.
6634 ("texlive" ,(texlive-union (list texlive-amsfonts
6635 texlive-fonts-ec
6636 texlive-generic-ifxetex
6637 texlive-generic-pdftex
6638 texlive-latex-capt-of
6639 texlive-latex-cmap
6640 texlive-latex-environ
6641 texlive-latex-eqparbox
6642 texlive-latex-etoolbox
6643 texlive-latex-expdlist
6644 texlive-latex-fancyhdr
6645 texlive-latex-fancyvrb
6646 texlive-latex-fncychap
6647 texlive-latex-float
6648 texlive-latex-framed
6649 texlive-latex-geometry
6650 texlive-latex-graphics
6651 texlive-latex-hyperref
6652 texlive-latex-mdwtools
6653 texlive-latex-multirow
6654 texlive-latex-needspace
6655 texlive-latex-oberdiek
6656 texlive-latex-parskip
6657 texlive-latex-preview
6658 texlive-latex-tabulary
6659 texlive-latex-threeparttable
6660 texlive-latex-titlesec
6661 texlive-latex-trimspaces
6662 texlive-latex-ucs
6663 texlive-latex-upquote
6664 texlive-latex-url
6665 texlive-latex-varwidth
6666 texlive-latex-wrapfig)))
6667 ("texinfo" ,texinfo)))))
6668
6669 (define-public python-urwid
6670 (package
6671 (name "python-urwid")
6672 (version "2.1.0")
6673 (source
6674 (origin
6675 (method url-fetch)
6676 (uri (pypi-uri "urwid" version))
6677 (sha256
6678 (base32
6679 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6680 (build-system python-build-system)
6681 (home-page "http://urwid.org")
6682 (synopsis "Console user interface library for Python")
6683 (description
6684 "Urwid is a curses-based UI/widget library for Python. It includes many
6685 features useful for text console applications.")
6686 (license license:lgpl2.1+)))
6687
6688 (define-public python2-urwid
6689 (package-with-python2 python-urwid))
6690
6691 (define-public python-urwidtrees
6692 (package
6693 (name "python-urwidtrees")
6694 (version "1.0.2")
6695 (source
6696 (origin
6697 (method git-fetch)
6698 ;; package author intends on distributing via github rather than pypi:
6699 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6700 (uri (git-reference
6701 (url "https://github.com/pazz/urwidtrees")
6702 (commit version)))
6703 (file-name (git-file-name name version))
6704 (sha256
6705 (base32
6706 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6707 (build-system python-build-system)
6708 (arguments
6709 '(#:use-setuptools? #f
6710 #:tests? #f)) ; no tests
6711 (propagated-inputs `(("python-urwid" ,python-urwid)))
6712 (home-page "https://github.com/pazz/urwidtrees")
6713 (synopsis "Tree widgets for urwid")
6714 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6715 toolkit. Use it to build trees of widgets.")
6716 (license license:gpl3+)))
6717
6718 (define-public python2-urwidtrees
6719 (package-with-python2 python-urwidtrees))
6720
6721 (define-public python-ua-parser
6722 (package
6723 (name "python-ua-parser")
6724 (version "0.8.0")
6725 (source
6726 (origin
6727 (method url-fetch)
6728 (uri (pypi-uri "ua-parser" version))
6729 (sha256
6730 (base32
6731 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6732 (build-system python-build-system)
6733 (arguments
6734 `(#:tests? #f)) ;no test suite in release
6735 (native-inputs
6736 `(("python-pyyaml" ,python-pyyaml)))
6737 (home-page "https://github.com/ua-parser/uap-python")
6738 (synopsis "User agent parser")
6739 (description
6740 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6741 (license license:asl2.0)))
6742
6743 (define-public python2-ua-parser
6744 (package-with-python2 python-ua-parser))
6745
6746 (define-public python-user-agents
6747 (package
6748 (name "python-user-agents")
6749 (version "1.1.0")
6750 (source
6751 (origin
6752 (method url-fetch)
6753 (uri (pypi-uri "user-agents" version))
6754 (sha256
6755 (base32
6756 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6757 (build-system python-build-system)
6758 (arguments
6759 `(#:tests? #f)) ;missing devices.json test file in release
6760 (propagated-inputs
6761 `(("python-ua-parser" ,python-ua-parser)))
6762 (home-page "https://github.com/selwin/python-user-agents")
6763 (synopsis "User Agent strings parsing library")
6764 (description
6765 "A library to identify devices (phones, tablets) and their capabilities by
6766 parsing (browser/HTTP) user agent strings.")
6767 (license license:expat)))
6768
6769 (define-public python2-user-agents
6770 (package-with-python2 python-user-agents))
6771
6772 (define-public python-dbus
6773 (package
6774 (name "python-dbus")
6775 (version "1.2.14")
6776 (source
6777 (origin
6778 (method url-fetch)
6779 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6780 "dbus-python-" version ".tar.gz"))
6781 (sha256
6782 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6783 (build-system gnu-build-system)
6784 (native-inputs
6785 `(("pkg-config" ,pkg-config)))
6786 (inputs
6787 `(("python" ,python-wrapper)
6788 ("dbus-glib" ,dbus-glib)))
6789 (synopsis "Python bindings for D-bus")
6790 (description "python-dbus provides bindings for libdbus, the reference
6791 implementation of D-Bus.")
6792 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6793 (license license:expat)))
6794
6795 (define-public python2-dbus
6796 (package (inherit python-dbus)
6797 (name "python2-dbus")
6798 (inputs `(("python" ,python-2)
6799 ,@(alist-delete "python"
6800 (package-inputs python-dbus)
6801 equal?)))))
6802
6803 (define-public python-notify2
6804 (package
6805 (name "python-notify2")
6806 (version "0.3.1")
6807 (source
6808 (origin
6809 (method url-fetch)
6810 (uri (pypi-uri "notify2" version))
6811 (sha256
6812 (base32
6813 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6814 (build-system python-build-system)
6815 (arguments `(#:tests? #f)) ; tests depend on system state
6816 (native-inputs
6817 `(("python-dbus" ,python-dbus)))
6818 (home-page "https://bitbucket.org/takluyver/pynotify2")
6819 (synopsis "Python interface to D-Bus notifications")
6820 (description
6821 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6822 It is a reimplementation of pynotify in pure Python, and an alternative to
6823 the GObject Introspection bindings to libnotify for non-GTK applications.")
6824 (license (list license:bsd-2
6825 license:lgpl2.1+))))
6826
6827 (define-public python2-notify2
6828 (package-with-python2 python-notify2))
6829
6830 ;; beautifulsoup4 has a totally different namespace than 3.x,
6831 ;; and pypi seems to put it under its own name, so I guess we should too
6832 (define-public python-beautifulsoup4
6833 (package
6834 (name "python-beautifulsoup4")
6835 (version "4.7.1")
6836 (source
6837 (origin
6838 (method url-fetch)
6839 (uri (pypi-uri "beautifulsoup4" version))
6840 (sha256
6841 (base32
6842 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6843 (build-system python-build-system)
6844 (arguments
6845 `(#:phases
6846 (modify-phases %standard-phases
6847 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6848 ;; must use this conversion script when building with Python 3. The
6849 ;; conversion script also runs the tests.
6850 ;; For more information, see the file 'convert-py3k' in the source
6851 ;; distribution.
6852 (replace 'check
6853 (lambda _ (invoke "./convert-py3k"))))))
6854 (propagated-inputs
6855 `(("python-soupsieve" ,python-soupsieve)))
6856 (home-page
6857 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6858 (synopsis
6859 "Python screen-scraping library")
6860 (description
6861 "Beautiful Soup is a Python library designed for rapidly setting up
6862 screen-scraping projects. It offers Pythonic idioms for navigating,
6863 searching, and modifying a parse tree, providing a toolkit for
6864 dissecting a document and extracting what you need. It automatically
6865 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6866 (license license:expat)
6867 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6868
6869 (define-public python2-beautifulsoup4
6870 (package
6871 (inherit (package-with-python2
6872 (strip-python2-variant python-beautifulsoup4)))
6873 (arguments `(#:python ,python-2))))
6874
6875 (define-public python-soupsieve
6876 (package
6877 (name "python-soupsieve")
6878 (version "1.9.5")
6879 (source
6880 (origin
6881 (method url-fetch)
6882 (uri (pypi-uri "soupsieve" version))
6883 (sha256
6884 (base32
6885 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6886 (build-system python-build-system)
6887 (arguments `(#:tests? #f))
6888 ;;XXX: 2 tests fail currently despite claming they were to be
6889 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6890 ;;don't want to create a circular dependency.
6891 (home-page "https://github.com/facelessuser/soupsieve")
6892 (synopsis "CSS selector library")
6893 (description
6894 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6895 Soup 4. It aims to provide selecting, matching, and filtering using modern
6896 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6897 specifications up through the latest CSS level 4 drafts and beyond (though
6898 some are not yet implemented).")
6899 (properties `((python2-variant . ,(delay python2-soupsieve))))
6900 (license license:expat)))
6901
6902 (define-public python2-soupsieve
6903 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6904 (package
6905 (inherit base)
6906 (propagated-inputs
6907 `(("python2-backports-functools-lru-cache"
6908 ,python2-backports-functools-lru-cache)
6909 ,@(package-propagated-inputs base))))))
6910
6911 (define-public python-netifaces
6912 (package
6913 (name "python-netifaces")
6914 (version "0.10.7")
6915 (source
6916 (origin
6917 (method url-fetch)
6918 (uri (pypi-uri "netifaces" version))
6919 (sha256
6920 (base32
6921 "1gccklrcplbbqh81g1mdgpa5y8na7kkf29cq2ka3f5a2fp5hyndx"))))
6922 (build-system python-build-system)
6923 (home-page "https://github.com/al45tair/netifaces")
6924 (synopsis
6925 "Python module for portable network interface information")
6926 (description
6927 "Netifaces is a Python module providing information on network
6928 interfaces in an easy and portable manner.")
6929 (license license:expat)))
6930
6931 (define-public python2-netifaces
6932 (package-with-python2 python-netifaces))
6933
6934 (define-public python-networkx
6935 (package
6936 (name "python-networkx")
6937 (version "2.4")
6938 (source
6939 (origin
6940 (method url-fetch)
6941 (uri (pypi-uri "networkx" version))
6942 (sha256
6943 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6944 (build-system python-build-system)
6945 (arguments
6946 '(#:phases (modify-phases %standard-phases
6947 (replace 'check
6948 (lambda* (#:key tests? #:allow-other-keys)
6949 (if tests?
6950 (invoke "pytest" "-vv" "--pyargs" "networkx")
6951 (format #t "test suite not run~%"))
6952 #t)))))
6953 ;; python-decorator is needed at runtime.
6954 (propagated-inputs
6955 `(("python-decorator" ,python-decorator)))
6956 (native-inputs
6957 `(("python-pytest" ,python-pytest)))
6958 (home-page "https://networkx.github.io/")
6959 (synopsis "Python module for creating and manipulating graphs and networks")
6960 (description
6961 "NetworkX is a Python package for the creation, manipulation, and study
6962 of the structure, dynamics, and functions of complex networks.")
6963 (properties `((python2-variant . ,(delay python2-networkx))))
6964 (license license:bsd-3)))
6965
6966 ;; NetworkX 2.2 is the last version with support for Python 2.
6967 (define-public python2-networkx
6968 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6969 (package
6970 (inherit base)
6971 (version "2.2")
6972 (source (origin
6973 (method url-fetch)
6974 (uri (pypi-uri "networkx" version ".zip"))
6975 (sha256
6976 (base32
6977 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6978 (arguments
6979 `(#:python ,python-2))
6980 (native-inputs
6981 `(("python-nose" ,python2-nose)
6982 ("unzip" ,unzip))))))
6983
6984 (define-public python-datrie
6985 (package
6986 (name "python-datrie")
6987 (version "0.8.2")
6988 (source
6989 (origin
6990 (method url-fetch)
6991 (uri (pypi-uri "datrie" version))
6992 (sha256
6993 (base32
6994 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6995 (build-system python-build-system)
6996 (native-inputs
6997 `(("python-cython" ,python-cython)
6998 ("python-hypothesis" ,python-hypothesis)
6999 ("python-pytest" ,python-pytest)
7000 ("python-pytest-runner" ,python-pytest-runner)))
7001 (home-page "https://github.com/kmike/datrie")
7002 (synopsis "Fast, efficiently stored trie for Python")
7003 (description
7004 "This package provides a fast, efficiently stored trie implementation for
7005 Python.")
7006 (license license:lgpl2.1+)))
7007
7008 (define-public snakemake
7009 (package
7010 (name "snakemake")
7011 (version "5.7.1")
7012 (source
7013 (origin
7014 (method url-fetch)
7015 (uri (pypi-uri "snakemake" version))
7016 (sha256
7017 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7018 (build-system python-build-system)
7019 (arguments
7020 ;; TODO: Package missing test dependencies.
7021 '(#:tests? #f
7022 #:phases
7023 (modify-phases %standard-phases
7024 ;; For cluster execution Snakemake will call Python. Since there is
7025 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7026 ;; this by calling the snakemake wrapper instead.
7027 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7028 (lambda* (#:key outputs #:allow-other-keys)
7029 (substitute* "snakemake/executors.py"
7030 (("\\{sys.executable\\} -m snakemake")
7031 (string-append (assoc-ref outputs "out")
7032 "/bin/snakemake")))
7033 #t)))))
7034 (propagated-inputs
7035 `(("python-appdirs" ,python-appdirs)
7036 ("python-configargparse" ,python-configargparse)
7037 ("python-datrie" ,python-datrie)
7038 ("python-docutils" ,python-docutils)
7039 ("python-gitpython" ,python-gitpython)
7040 ("python-jinja2" ,python-jinja2)
7041 ("python-jsonschema" ,python-jsonschema)
7042 ("python-networkx" ,python-networkx)
7043 ("python-psutil" ,python-psutil)
7044 ("python-pyyaml" ,python-pyyaml)
7045 ("python-ratelimiter" ,python-ratelimiter)
7046 ("python-requests" ,python-requests)
7047 ("python-wrapt" ,python-wrapt)))
7048 (home-page "https://snakemake.readthedocs.io")
7049 (synopsis "Python-based execution environment for make-like workflows")
7050 (description
7051 "Snakemake aims to reduce the complexity of creating workflows by
7052 providing a clean and modern domain specific specification language (DSL) in
7053 Python style, together with a fast and comfortable execution environment.")
7054 (license license:expat)))
7055
7056 (define-public python-pyqrcode
7057 (package
7058 (name "python-pyqrcode")
7059 (version "1.2.1")
7060 (source
7061 (origin
7062 (method url-fetch)
7063 (uri (pypi-uri "PyQRCode" version))
7064 (sha256
7065 (base32
7066 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7067 (build-system python-build-system)
7068 (home-page
7069 "https://github.com/mnooner256/pyqrcode")
7070 (synopsis "QR code generator")
7071 (description
7072 "Pyqrcode is a QR code generator written purely in Python with
7073 SVG, EPS, PNG and terminal output.")
7074 (license license:bsd-3)))
7075
7076 (define-public python-seaborn
7077 (package
7078 (name "python-seaborn")
7079 (version "0.10.0")
7080 (source
7081 (origin
7082 (method url-fetch)
7083 (uri (pypi-uri "seaborn" version))
7084 (sha256
7085 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7086 (build-system python-build-system)
7087 (arguments
7088 `(#:phases
7089 (modify-phases %standard-phases
7090 (add-before 'check 'start-xserver
7091 (lambda* (#:key inputs #:allow-other-keys)
7092 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7093 ;; There must be a running X server and make check doesn't
7094 ;; start one. Therefore we must do it.
7095 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7096 (setenv "DISPLAY" ":1")
7097 #t)))
7098 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7099 (propagated-inputs
7100 `(("python-pandas" ,python-pandas)
7101 ("python-matplotlib" ,python-matplotlib)
7102 ("python-numpy" ,python-numpy)
7103 ("python-scipy" ,python-scipy)))
7104 (native-inputs
7105 `(("python-pytest" ,python-pytest)
7106 ("xorg-server" ,xorg-server-for-tests)))
7107 (home-page "https://seaborn.pydata.org/")
7108 (synopsis "Statistical data visualization")
7109 (description
7110 "Seaborn is a library for making attractive and informative statistical
7111 graphics in Python. It is built on top of matplotlib and tightly integrated
7112 with the PyData stack, including support for numpy and pandas data structures
7113 and statistical routines from scipy and statsmodels.")
7114 (properties `((python2-variant . ,(delay python2-seaborn))))
7115 (license license:bsd-3)))
7116
7117 ;; 0.9.1 is the last release with support for Python 2.
7118 (define-public python2-seaborn
7119 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7120 (package
7121 (inherit base)
7122 (version "0.9.1")
7123 (source (origin
7124 (method url-fetch)
7125 (uri (pypi-uri "seaborn" version))
7126 (sha256
7127 (base32
7128 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7129
7130 (define-public python-mpmath
7131 (package
7132 (name "python-mpmath")
7133 (version "0.19")
7134 (source (origin
7135 (method url-fetch)
7136 (uri (string-append "http://mpmath.org/files/mpmath-"
7137 version ".tar.gz"))
7138 (sha256
7139 (base32
7140 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7141 (build-system python-build-system)
7142 (arguments
7143 '(#:phases
7144 (modify-phases %standard-phases
7145 (replace 'check
7146 (lambda _
7147 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7148 (home-page "http://mpmath.org")
7149 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7150 (description
7151 "@code{mpmath} can be used as an arbitrary-precision substitute for
7152 Python's float/complex types and math/cmath modules, but also does much
7153 more advanced mathematics.")
7154 (license license:bsd-3)))
7155
7156 (define-public python2-mpmath
7157 (package-with-python2 python-mpmath))
7158
7159 (define-public python-bigfloat
7160 (package
7161 (name "python-bigfloat")
7162 (version "0.3.0")
7163 (source
7164 (origin
7165 (method url-fetch)
7166 (uri (pypi-uri "bigfloat" version))
7167 (sha256
7168 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7169 (build-system python-build-system)
7170 (inputs
7171 `(("mpfr" ,mpfr)))
7172 (home-page "https://github.com/mdickinson/bigfloat")
7173 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7174 (description
7175 "This package provides a Python interface to the MPFR library for
7176 multiprecision arithmetic.")
7177 (license license:lgpl3+)))
7178
7179 (define-public python2-bigfloat
7180 (package-with-python2 python-bigfloat))
7181
7182 (define-public python-sympy
7183 (package
7184 (name "python-sympy")
7185 (version "1.1.1")
7186 (source
7187 (origin
7188 (method url-fetch)
7189 (uri (string-append
7190 "https://github.com/sympy/sympy/releases/download/sympy-"
7191 version "/sympy-" version ".tar.gz"))
7192 (sha256
7193 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7194 (build-system python-build-system)
7195 (arguments
7196 `(#:phases
7197 (modify-phases %standard-phases
7198 ;; Run the core tests after installation. By default it would run
7199 ;; *all* tests, which take a very long time to complete and are known
7200 ;; to be flaky.
7201 (delete 'check)
7202 (add-after 'install 'check
7203 (lambda* (#:key outputs #:allow-other-keys)
7204 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7205 #t)))))
7206 (propagated-inputs
7207 `(("python-mpmath" ,python-mpmath)))
7208 (home-page "https://www.sympy.org/")
7209 (synopsis "Python library for symbolic mathematics")
7210 (description
7211 "SymPy is a Python library for symbolic mathematics. It aims to become a
7212 full-featured computer algebra system (CAS) while keeping the code as simple
7213 as possible in order to be comprehensible and easily extensible.")
7214 (license license:bsd-3)))
7215
7216 (define-public python2-sympy
7217 (package
7218 (inherit (package-with-python2 python-sympy))
7219 (arguments
7220 `(#:phases
7221 (modify-phases %standard-phases
7222 ;; Run the core tests after installation. By default it would run
7223 ;; *all* tests, which take a very long time to complete and are known
7224 ;; to be flaky.
7225 (delete 'check)
7226 (add-after 'install 'check
7227 (lambda* (#:key outputs #:allow-other-keys)
7228 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7229 #t)))))))
7230
7231 (define-public python-q
7232 (package
7233 (name "python-q")
7234 (version "2.6")
7235 (source
7236 (origin
7237 (method url-fetch)
7238 (uri (pypi-uri "q" version))
7239 (sha256
7240 (base32
7241 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7242 (build-system python-build-system)
7243 (home-page "https://github.com/zestyping/q")
7244 (synopsis "Quick-and-dirty debugging output for tired programmers")
7245 (description
7246 "q is a Python module for \"print\" style of debugging Python code. It
7247 provides convenient short API for print out of values, tracebacks, and
7248 falling into the Python interpreter.")
7249 (license license:asl2.0)))
7250
7251 (define-public python2-q
7252 (package-with-python2 python-q))
7253
7254 (define-public python2-xlib
7255 (package
7256 (name "python2-xlib")
7257 (version "0.14")
7258 (source (origin
7259 (method url-fetch)
7260 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7261 "/" version "/"
7262 "python-xlib-" version ".tar.gz"))
7263 (sha256
7264 (base32
7265 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7266 (build-system python-build-system)
7267 (arguments
7268 `(#:python ,python-2 ;Python 2 only
7269 #:tests? #f)) ;no tests
7270 (home-page "http://python-xlib.sourceforge.net/")
7271 (synopsis "Python X11 client library")
7272 (description
7273 "The Python X Library is intended to be a fully functional X client
7274 library for Python programs. It is useful to implement low-level X clients.
7275 It is written entirely in Python.")
7276 (license license:gpl2+)))
7277
7278 (define-public python-singledispatch
7279 (package
7280 (name "python-singledispatch")
7281 (version "3.4.0.3")
7282 (source
7283 (origin
7284 (method url-fetch)
7285 (uri (pypi-uri "singledispatch" version))
7286 (sha256
7287 (base32
7288 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7289 (build-system python-build-system)
7290 (native-inputs
7291 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7292 (home-page
7293 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7294 (synopsis "Backport of singledispatch feature from Python 3.4")
7295 (description
7296 "This library brings functools.singledispatch from Python 3.4 to Python
7297 2.6-3.3.")
7298 (license license:expat)))
7299
7300 (define-public python2-singledispatch
7301 (package-with-python2 python-singledispatch))
7302
7303 ;; the python- version can be removed with python-3.5
7304 (define-public python-backports-abc
7305 (package
7306 (name "python-backports-abc")
7307 (version "0.5")
7308 (source
7309 (origin
7310 (method url-fetch)
7311 (uri (pypi-uri "backports_abc" version))
7312 (sha256
7313 (base32
7314 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7315 (build-system python-build-system)
7316 (home-page "https://github.com/cython/backports_abc")
7317 (synopsis "Backport of additions to the 'collections.abc' module")
7318 (description
7319 "Python-backports-abc provides a backport of additions to the
7320 @code{collections.abc} module in Python-3.5.")
7321 (license license:psfl)))
7322
7323 (define-public python2-backports-abc
7324 (package-with-python2 python-backports-abc))
7325
7326 (define-public python-backports-csv
7327 (package
7328 (name "python-backports-csv")
7329 (version "1.0.5")
7330 (source
7331 (origin
7332 (method url-fetch)
7333 (uri (pypi-uri "backports.csv" version))
7334 (sha256
7335 (base32
7336 "1imzbrradkfn8s2m1qcimyn74dn1mz2p3j381jljn166rf2i6hlc"))))
7337 (build-system python-build-system)
7338 (home-page "https://github.com/ryanhiebert/backports.csv")
7339 (synopsis "Backport of Python 3's csv module for Python 2")
7340 (description
7341 "Provides a backport of Python 3's @code{csv} module for parsing
7342 comma separated values. The API of the @code{csv} module in Python 2
7343 is drastically different from the @code{csv} module in Python 3.
7344 This is due, for the most part, to the difference between str in
7345 Python 2 and Python 3.")
7346 (license license:psfl)))
7347
7348 (define-public python2-backports-csv
7349 (package-with-python2 python-backports-csv))
7350
7351 (define-public python2-backports-shutil-get-terminal-size
7352 (package
7353 (name "python2-backports-shutil-get-terminal-size")
7354 (version "1.0.0")
7355 (source
7356 (origin
7357 (method url-fetch)
7358 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7359 (sha256
7360 (base32
7361 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7362 (build-system python-build-system)
7363 (arguments
7364 `(#:python ,python-2
7365 #:phases
7366 (modify-phases %standard-phases
7367 (replace 'check
7368 (lambda _
7369 (setenv "PYTHONPATH" (string-append "./build/lib:"
7370 (getenv "PYTHONPATH")))
7371 (invoke "py.test" "-v"))))))
7372 (native-inputs
7373 `(("python2-pytest" ,python2-pytest)))
7374 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7375 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7376 (description
7377 "This package provides a backport of the @code{get_terminal_size
7378 function} from Python 3.3's @code{shutil}.
7379 Unlike the original version it is written in pure Python rather than C,
7380 so it might be a tiny bit slower.")
7381 (license license:expat)))
7382
7383 (define-public python-waf
7384 (package
7385 (name "python-waf")
7386 (version "2.0.19")
7387 (source (origin
7388 (method url-fetch)
7389 (uri (string-append "https://waf.io/"
7390 "waf-" version ".tar.bz2"))
7391 (sha256
7392 (base32
7393 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7394 (build-system python-build-system)
7395 (arguments
7396 '(#:phases
7397 (modify-phases %standard-phases
7398 (replace 'build
7399 (lambda _
7400 ;; XXX: Find a way to add all extra tools.
7401 (let ((tools '("gccdeps"
7402 "clang_compilation_database")))
7403 (invoke "python" "waf-light" "configure" "build"
7404 (string-append "--tools="
7405 (string-join tools ","))))))
7406 (replace 'check
7407 (lambda _
7408 (invoke "python" "waf" "--version")))
7409 (replace 'install
7410 (lambda* (#:key outputs #:allow-other-keys)
7411 (let ((out (assoc-ref outputs "out")))
7412 (install-file "waf" (string-append out "/bin")))
7413 #t))
7414 ;; waf breaks when it is wrapped.
7415 (delete 'wrap))))
7416 (home-page "https://waf.io/")
7417 (synopsis "Python-based build system")
7418 (description
7419 "Waf is a Python-based framework for configuring, compiling and installing
7420 applications.")
7421 (license license:bsd-3)))
7422
7423 (define-public python2-waf
7424 (package-with-python2 python-waf))
7425
7426 (define-public python-pyzmq
7427 (package
7428 (name "python-pyzmq")
7429 (version "17.1.2")
7430 (source
7431 (origin
7432 (method url-fetch)
7433 (uri (pypi-uri "pyzmq" version))
7434 (sha256
7435 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7436 (build-system python-build-system)
7437 (arguments
7438 `(#:configure-flags
7439 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7440 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7441 ;; --inplace' for 'python setup.py test' to work.
7442 #:tests? #f))
7443 (inputs
7444 `(("zeromq" ,zeromq)))
7445 (native-inputs
7446 `(("pkg-config" ,pkg-config)
7447 ("python-nose" ,python-nose)))
7448 (home-page "https://github.com/zeromq/pyzmq")
7449 (synopsis "Python bindings for 0MQ")
7450 (description
7451 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7452 (license license:bsd-4)))
7453
7454 (define-public python2-pyzmq
7455 (package-with-python2 python-pyzmq))
7456
7457 (define-public python-pep8
7458 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7459 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7460 ;; some dependents' test suites, and nothing more.
7461 (package
7462 (name "python-pep8")
7463 (version "1.7.0")
7464 (source
7465 (origin
7466 (method url-fetch)
7467 (uri (pypi-uri "pep8" version))
7468 (sha256
7469 (base32
7470 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7471 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7472 (build-system python-build-system)
7473 (home-page "https://pep8.readthedocs.org/")
7474 (synopsis "Python style guide checker")
7475 (description
7476 "This tools checks Python code against some of the style conventions in
7477 PEP 8.")
7478 (license license:expat)))
7479
7480 (define-public python2-pep8
7481 (package-with-python2 python-pep8))
7482
7483 (define-public python-pyflakes
7484 (package
7485 (name "python-pyflakes")
7486 (version "2.1.1")
7487 (source
7488 (origin
7489 (method url-fetch)
7490 (uri (pypi-uri "pyflakes" version))
7491 (sha256
7492 (base32
7493 "18pq95a1xj2dgdd0m85gyfsn40jajj4xc3lp8wfv7igqhrc86xnr"))))
7494 (build-system python-build-system)
7495 (home-page
7496 "https://github.com/pyflakes/pyflakes")
7497 (synopsis "Passive checker of Python programs")
7498 (description
7499 "Pyflakes statically checks Python source code for common errors.")
7500 (license license:expat)))
7501
7502 (define-public python2-pyflakes
7503 (package-with-python2 python-pyflakes))
7504
7505 ;; Flake8 2.6 requires an older version of pyflakes.
7506 ;; This should be removed ASAP.
7507 (define-public python-pyflakes-1.2
7508 (package (inherit python-pyflakes)
7509 (version "1.2.3")
7510 (source
7511 (origin
7512 (method url-fetch)
7513 (uri (pypi-uri "pyflakes" version))
7514 (sha256
7515 (base32
7516 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7517 (arguments
7518 '(#:phases
7519 (modify-phases %standard-phases
7520 ;; This one test fails.
7521 (replace 'check
7522 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7523 (native-inputs
7524 `(("python-pytest" ,python-pytest)))))
7525
7526 (define-public python-mccabe
7527 (package
7528 (name "python-mccabe")
7529 (version "0.6.1")
7530 (source
7531 (origin
7532 (method url-fetch)
7533 (uri (pypi-uri "mccabe" version))
7534 (sha256
7535 (base32
7536 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7537 (build-system python-build-system)
7538 (native-inputs
7539 `(("python-pytest" ,python-pytest-bootstrap)
7540 ("python-pytest-runner" ,python-pytest-runner)))
7541 (home-page "https://github.com/flintwork/mccabe")
7542 (synopsis "McCabe checker, plugin for flake8")
7543 (description
7544 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7545 complexity of Python source code.")
7546 (license license:expat)))
7547
7548 (define-public python2-mccabe
7549 (package-with-python2 python-mccabe))
7550
7551 (define-public python-mccabe-0.2.1
7552 (package (inherit python-mccabe)
7553 (version "0.2.1")
7554 (source
7555 (origin
7556 (method url-fetch)
7557 (uri (pypi-uri "mccabe" version))
7558 (sha256
7559 (base32
7560 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7561
7562 (define-public python2-mccabe-0.2.1
7563 (package-with-python2 python-mccabe-0.2.1))
7564
7565 ;; Flake8 2.4.1 requires an older version of pep8.
7566 ;; This should be removed ASAP.
7567 (define-public python-pep8-1.5.7
7568 (package (inherit python-pep8)
7569 (version "1.5.7")
7570 (source
7571 (origin
7572 (method url-fetch)
7573 (uri (pypi-uri "pep8" version))
7574 (sha256
7575 (base32
7576 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7577 (arguments
7578 ;; XXX Tests not compatible with Python 3.5.
7579 '(#:tests? #f))))
7580
7581 (define-public python2-pep8-1.5.7
7582 (package-with-python2 python-pep8-1.5.7))
7583
7584 (define-public python-flake8
7585 (package
7586 (name "python-flake8")
7587 (version "3.7.9")
7588 (source (origin
7589 (method url-fetch)
7590 (uri (pypi-uri "flake8" version))
7591 (sha256
7592 (base32
7593 "1yscj6avirm6m12bjh4fn2lfgxaamqsjh9pirdqfi0fcgq8ils25"))))
7594 (build-system python-build-system)
7595 (arguments
7596 `(#:phases
7597 (modify-phases %standard-phases
7598 (delete 'check)
7599 (add-after 'install 'check
7600 (lambda* (#:key inputs outputs #:allow-other-keys)
7601 (add-installed-pythonpath inputs outputs)
7602 (invoke "pytest" "-v")
7603 #t)))))
7604 (propagated-inputs
7605 `(("python-pycodestyle" ,python-pycodestyle)
7606 ("python-entrypoints" ,python-entrypoints)
7607 ("python-pyflakes" ,python-pyflakes)
7608 ("python-mccabe" ,python-mccabe)))
7609 (native-inputs
7610 `(("python-mock" ,python-mock)
7611 ("python-pytest" ,python-pytest-bootstrap)))
7612 (home-page "https://gitlab.com/pycqa/flake8")
7613 (synopsis
7614 "The modular source code checker: pep8, pyflakes and co")
7615 (description
7616 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7617 (properties `((python2-variant . ,(delay python2-flake8))))
7618 (license license:expat)))
7619
7620 (define-public python2-flake8
7621 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7622 (package (inherit base)
7623 (propagated-inputs
7624 `(("python2-configparser" ,python2-configparser)
7625 ("python2-enum34" ,python2-enum34)
7626 ("python2-functools32" ,python2-functools32)
7627 ("python2-typing" ,python2-typing)
7628 ,@(package-propagated-inputs base))))))
7629
7630 ;; python-hacking requires flake8 <2.7.0.
7631 (define-public python-flake8-2.6
7632 (package
7633 (inherit python-flake8)
7634 (version "2.6.2")
7635 (source (origin
7636 (method url-fetch)
7637 (uri (pypi-uri "flake8" version))
7638 (sha256
7639 (base32
7640 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7641 (arguments
7642 `(#:phases
7643 (modify-phases %standard-phases
7644 (add-after 'unpack 'use-later-pycodestyles
7645 (lambda __
7646 (substitute* '("flake8.egg-info/requires.txt"
7647 "setup.py")
7648 (("pycodestyle >= 2.0, < 2.1")
7649 "pycodestyle >= 2.0"))
7650 #t))
7651 (delete 'check)
7652 (add-after 'install 'check
7653 (lambda* (#:key inputs outputs #:allow-other-keys)
7654 (add-installed-pythonpath inputs outputs)
7655 (invoke "pytest" "-v")
7656 #t)))))
7657 (propagated-inputs
7658 `(("python-pep8" ,python-pep8)
7659 ("python-pycodestyle" ,python-pycodestyle)
7660 ("python-entrypoints" ,python-entrypoints)
7661 ("python-pyflakes" ,python-pyflakes-1.2)
7662 ("python-mccabe" ,python-mccabe)))))
7663
7664 (define-public python-flake8-polyfill
7665 (package
7666 (name "python-flake8-polyfill")
7667 (version "1.0.2")
7668 (source
7669 (origin
7670 (method url-fetch)
7671 (uri (pypi-uri "flake8-polyfill" version))
7672 (sha256
7673 (base32
7674 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7675 (build-system python-build-system)
7676 (arguments
7677 '(#:phases
7678 (modify-phases %standard-phases
7679 (replace 'check
7680 (lambda _
7681 ;; Be compatible with Pytest 4:
7682 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7683 (substitute* "setup.cfg"
7684 (("\\[pytest\\]")
7685 "[tool:pytest]"))
7686
7687 (setenv "PYTHONPATH"
7688 (string-append (getcwd) "/build/lib:"
7689 (getenv "PYTHONPATH")))
7690 (invoke "py.test" "-v"))))))
7691 (native-inputs
7692 `(("python-flake8" ,python-flake8)
7693 ("python-mock" ,python-mock)
7694 ("python-pep8" ,python-pep8)
7695 ("python-pycodestyle" ,python-pycodestyle)
7696 ("python-pytest" ,python-pytest)))
7697 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7698 (synopsis "Polyfill package for Flake8 plugins")
7699 (description
7700 "This package that provides some compatibility helpers for Flake8
7701 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7702 (license license:expat)))
7703
7704 (define-public python2-flake8-polyfill
7705 (package-with-python2 python-flake8-polyfill))
7706
7707 (define-public python-mistune
7708 (package
7709 (name "python-mistune")
7710 (version "0.8.4")
7711 (source
7712 (origin
7713 (method url-fetch)
7714 (uri (pypi-uri "mistune" version))
7715 (sha256
7716 (base32
7717 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7718 (build-system python-build-system)
7719 (native-inputs
7720 `(("python-nose" ,python-nose)
7721 ("python-cython" ,python-cython)))
7722 (home-page "https://github.com/lepture/mistune")
7723 (synopsis "Markdown parser in pure Python")
7724 (description "This package provides a fast markdown parser in pure
7725 Python.")
7726 (license license:bsd-3)))
7727
7728 (define-public python2-mistune
7729 (package-with-python2 python-mistune))
7730
7731 (define-public python-markdown
7732 (package
7733 (name "python-markdown")
7734 (version "3.2.1")
7735 (source
7736 (origin
7737 (method url-fetch)
7738 (uri (pypi-uri "Markdown" version))
7739 (sha256
7740 (base32
7741 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7742 (build-system python-build-system)
7743 (native-inputs
7744 `(("python-nose" ,python-nose)
7745 ("python-pyyaml" ,python-pyyaml)))
7746 (home-page "https://python-markdown.github.io/")
7747 (synopsis "Python implementation of Markdown")
7748 (description
7749 "This package provides a Python implementation of John Gruber's
7750 Markdown. The library features international input, various Markdown
7751 extensions, and several HTML output formats. A command line wrapper
7752 markdown_py is also provided to convert Markdown files to HTML.")
7753 (properties `((python2-variant . ,(delay python2-markdown))))
7754 (license license:bsd-3)))
7755
7756 ;; Markdown 3.2 dropped support for Python 2.
7757 (define-public python2-markdown
7758 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7759 (package/inherit
7760 base
7761 (version "3.1.1")
7762 (source (origin
7763 (method url-fetch)
7764 (uri (pypi-uri "Markdown" version))
7765 (sha256
7766 (base32
7767 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7768
7769 (define-public python-ptyprocess
7770 (package
7771 (name "python-ptyprocess")
7772 (version "0.5.2")
7773 (source
7774 (origin
7775 (method url-fetch)
7776 (uri (pypi-uri "ptyprocess" version))
7777 (sha256
7778 (base32
7779 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7780 (build-system python-build-system)
7781 (native-inputs
7782 `(("python-nose" ,python-nose)))
7783 (arguments
7784 `(#:phases
7785 (modify-phases %standard-phases
7786 (replace 'check
7787 (lambda _ (invoke "nosetests"))))))
7788 (home-page "https://github.com/pexpect/ptyprocess")
7789 (synopsis "Run a subprocess in a pseudo terminal")
7790 (description
7791 "This package provides a Python library used to launch a subprocess in a
7792 pseudo terminal (pty), and interact with both the process and its pty.")
7793 (license license:isc)))
7794
7795 (define-public python2-ptyprocess
7796 (package-with-python2 python-ptyprocess))
7797
7798 (define-public python-cram
7799 (package
7800 (name "python-cram")
7801 (version "0.7")
7802 (home-page "https://bitheap.org/cram/")
7803 (source (origin
7804 (method url-fetch)
7805 (uri (list (string-append home-page "cram-"
7806 version ".tar.gz")
7807 (pypi-uri "cram" version)))
7808 (sha256
7809 (base32
7810 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7811 (arguments
7812 '(#:phases
7813 (modify-phases %standard-phases
7814 (add-after 'unpack 'patch-source
7815 (lambda _
7816 (substitute* (find-files "cram" ".*\\.py$")
7817 ;; Replace default shell path.
7818 (("/bin/sh") (which "sh")))
7819 (substitute* (find-files "tests" ".*\\.t$")
7820 (("md5") "md5sum")
7821 (("/bin/bash") (which "bash"))
7822 (("/bin/sh") (which "sh")))
7823 (substitute* "cram/_test.py"
7824 ;; This hack works around a bug triggered by substituting
7825 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7826 ;; "cram -h", which breaks the output at 80 characters. This
7827 ;; causes the line showing the default shell to break into two
7828 ;; lines, but the test expects a single line...
7829 (("env\\['COLUMNS'\\] = '80'")
7830 "env['COLUMNS'] = '160'"))
7831
7832 (substitute* "Makefile"
7833 ;; Recent versions of python-coverage have caused the test
7834 ;; coverage to decrease (as of version 0.7). Allow that.
7835 (("--fail-under=100")
7836 "--fail-under=90"))
7837
7838 #t))
7839 (replace 'check
7840 ;; The test phase uses the built library and executable.
7841 (lambda* (#:key inputs outputs #:allow-other-keys)
7842 (add-installed-pythonpath inputs outputs)
7843 (setenv "PATH" (string-append (getenv "PATH") ":"
7844 (assoc-ref outputs "out") "/bin"))
7845 (invoke "make" "test"))))))
7846 (build-system python-build-system)
7847 (native-inputs
7848 `(("python-coverage" ,python-coverage)
7849 ("which" ,which)))
7850 (synopsis "Simple testing framework for command line applications")
7851 (description
7852 "Cram is a functional testing framework for command line applications.
7853 Cram tests look like snippets of interactive shell sessions. Cram runs each
7854 command and compares the command output in the test with the command’s actual
7855 output.")
7856 (license license:gpl2+)))
7857
7858 (define-public python2-cram
7859 (package-with-python2 python-cram))
7860
7861 (define-public python-straight-plugin
7862 (package
7863 (name "python-straight-plugin")
7864 (version "1.4.1")
7865 (source
7866 (origin
7867 (method url-fetch)
7868 (uri (pypi-uri "straight.plugin" version))
7869 (sha256
7870 (base32
7871 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7872 (build-system python-build-system)
7873 (home-page "https://github.com/ironfroggy/straight.plugin")
7874 (synopsis "Simple namespaced plugin facility")
7875 (description "Straight Plugin provides a type of plugin you can create from
7876 almost any existing Python modules, and an easy way for outside developers to
7877 add functionality and customization to your projects with their own plugins.")
7878 (license license:expat)))
7879
7880 (define-public python2-straight-plugin
7881 (package-with-python2 python-straight-plugin))
7882
7883 (define-public python-fonttools
7884 (package
7885 (name "python-fonttools")
7886 (version "4.6.0")
7887 (source (origin
7888 (method url-fetch)
7889 (uri (pypi-uri "fonttools" version ".zip"))
7890 (sha256
7891 (base32
7892 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
7893 (build-system python-build-system)
7894 (native-inputs
7895 `(("unzip" ,unzip)
7896 ("python-pytest" ,python-pytest)
7897 ("python-pytest-runner" ,python-pytest-runner)))
7898 (home-page "https://github.com/fonttools/fonttools")
7899 (synopsis "Tools to manipulate font files")
7900 (description
7901 "FontTools/TTX is a library to manipulate font files from Python. It
7902 supports reading and writing of TrueType/OpenType fonts, reading and writing
7903 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7904 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7905 from an XML-based format.")
7906 (license license:expat)))
7907
7908 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
7909 (define-public python2-fonttools
7910 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
7911 (package/inherit
7912 base
7913 (version "3.44.0")
7914 (source (origin
7915 (method url-fetch)
7916 (uri (pypi-uri "fonttools" version ".zip"))
7917 (sha256
7918 (base32
7919 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
7920
7921 (define-public python-ly
7922 (package
7923 (name "python-ly")
7924 (version "0.9.5")
7925 (source
7926 (origin
7927 (method url-fetch)
7928 (uri (pypi-uri name version))
7929 (sha256
7930 (base32
7931 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7932 (build-system python-build-system)
7933 (arguments
7934 ;; FIXME: Some tests need network access.
7935 '(#:tests? #f))
7936 (synopsis "Tool and library for manipulating LilyPond files")
7937 (description "This package provides a Python library to parse, manipulate
7938 or create documents in LilyPond format. A command line program ly is also
7939 provided that can be used to do various manipulations with LilyPond files.")
7940 (home-page "https://pypi.org/project/python-ly/")
7941 (license license:gpl2+)))
7942
7943 (define-public python-appdirs
7944 (package
7945 (name "python-appdirs")
7946 (version "1.4.3")
7947 (source
7948 (origin
7949 (method url-fetch)
7950 (uri (pypi-uri "appdirs" version))
7951 (sha256
7952 (base32
7953 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7954 (build-system python-build-system)
7955 (home-page "https://github.com/ActiveState/appdirs")
7956 (synopsis
7957 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7958 (description
7959 "This module provides a portable way of finding out where user data
7960 should be stored on various operating systems.")
7961 (license license:expat)))
7962
7963 (define-public python2-appdirs
7964 (package-with-python2 python-appdirs))
7965
7966 (define-public python-llfuse
7967 (package
7968 (name "python-llfuse")
7969 (version "1.3.6")
7970 (source (origin
7971 (method url-fetch)
7972 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7973 (sha256
7974 (base32
7975 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
7976 (build-system python-build-system)
7977 (inputs
7978 `(("fuse" ,fuse)
7979 ("attr" ,attr)))
7980 (native-inputs
7981 `(("pkg-config" ,pkg-config)))
7982 (synopsis "Python bindings for FUSE")
7983 (description
7984 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7985 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7986 (license license:lgpl2.0+)
7987 (properties `((python2-variant . ,(delay python2-llfuse))))))
7988
7989 (define-public python2-llfuse
7990 (package (inherit (package-with-python2
7991 (strip-python2-variant python-llfuse)))
7992 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7993
7994 ;; For attic-0.16
7995 (define-public python-llfuse-0.41
7996 (package (inherit python-llfuse)
7997 (version "0.41.1")
7998 (source (origin
7999 (method url-fetch)
8000 (uri (string-append
8001 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8002 "llfuse-" version ".tar.bz2"))
8003 (sha256
8004 (base32
8005 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8006 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8007 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8008 (license (list license:expat license:lgpl2.0+))))
8009
8010 (define-public python-msgpack
8011 (package
8012 (name "python-msgpack")
8013 (version "1.0.0")
8014 (source (origin
8015 (method url-fetch)
8016 (uri (pypi-uri "msgpack" version))
8017 (sha256
8018 (base32
8019 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8020 (build-system python-build-system)
8021 (arguments
8022 `(#:modules ((guix build utils)
8023 (guix build python-build-system)
8024 (ice-9 ftw)
8025 (srfi srfi-1)
8026 (srfi srfi-26))
8027 #:phases
8028 (modify-phases %standard-phases
8029 (replace 'check
8030 (lambda _
8031 (let ((cwd (getcwd)))
8032 (setenv "PYTHONPATH"
8033 (string-append cwd "/build/"
8034 (find (cut string-prefix? "lib" <>)
8035 (scandir (string-append cwd "/build")))
8036 ":"
8037 (getenv "PYTHONPATH")))
8038 (invoke "pytest" "-v" "test")))))))
8039 (native-inputs
8040 `(("python-pytest" ,python-pytest)))
8041 (synopsis "MessagePack (de)serializer")
8042 (description "MessagePack is a fast, compact binary serialization format,
8043 suitable for similar data to JSON. This package provides CPython bindings for
8044 reading and writing MessagePack data.")
8045 (home-page "https://pypi.org/project/msgpack/")
8046 (license license:asl2.0)))
8047
8048 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8049 ;; release 0.5. Some packages like borg still call it by the old name for now.
8050 ;; <https://bugs.gnu.org/30662>
8051 (define-public python-msgpack-transitional
8052 (package
8053 (inherit python-msgpack)
8054 (name "python-msgpack-transitional")
8055 (version "0.5.6")
8056 (source (origin
8057 (method url-fetch)
8058 (uri (pypi-uri "msgpack" version))
8059 (sha256
8060 (base32
8061 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8062 (arguments
8063 (substitute-keyword-arguments (package-arguments python-msgpack)
8064 ((#:phases phases)
8065 `(modify-phases ,phases
8066 (add-after 'unpack 'configure-transitional
8067 (lambda _
8068 ;; Keep using the old name.
8069 (substitute* "setup.py"
8070 (("TRANSITIONAL = False")
8071 "TRANSITIONAL = 1"))
8072 #t))))))))
8073
8074 (define-public python2-msgpack
8075 (package-with-python2 python-msgpack))
8076
8077 (define-public python-netaddr
8078 (package
8079 (name "python-netaddr")
8080 (version "0.7.19")
8081 (source
8082 (origin
8083 (method url-fetch)
8084 (uri (pypi-uri "netaddr" version))
8085 (sha256
8086 (base32
8087 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8088 (build-system python-build-system)
8089 (arguments `(#:tests? #f)) ;; No tests.
8090 (home-page "https://github.com/drkjam/netaddr/")
8091 (synopsis "Pythonic manipulation of network addresses")
8092 (description
8093 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8094 and MAC network addresses.")
8095 (license license:bsd-3)))
8096
8097 (define-public python2-netaddr
8098 (package-with-python2 python-netaddr))
8099
8100 (define-public python2-pyroute2
8101 (package
8102 (name "python2-pyroute2")
8103 (version "0.5.6")
8104 (source
8105 (origin
8106 (method url-fetch)
8107 (uri (pypi-uri "pyroute2" version))
8108 (sha256
8109 (base32
8110 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8111 (build-system python-build-system)
8112 (arguments
8113 `(#:python ,python-2)) ;Python 3.x is not supported
8114 (home-page "https://github.com/svinota/pyroute2")
8115 (synopsis "Python netlink library")
8116 (description
8117 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8118 Supported netlink families and protocols include:
8119 @itemize
8120 @item rtnl, network settings - addresses, routes, traffic controls
8121 @item nfnetlink - netfilter API: ipset, nftables, ...
8122 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8123 @item devlink - manage and monitor devlink-enabled hardware
8124 @item generic - generic netlink families
8125 @itemize
8126 @item nl80211 - wireless functions API (basic support)
8127 @item taskstats - extended process statistics
8128 @item acpi_events - ACPI events monitoring
8129 @item thermal_events - thermal events monitoring
8130 @item VFS_DQUOT - disk quota events monitoring
8131 @end itemize
8132 @end itemize")
8133 (license license:gpl2+)))
8134
8135 (define-public python-wrapt
8136 (package
8137 (name "python-wrapt")
8138 (version "1.11.2")
8139 (source
8140 (origin
8141 (method url-fetch)
8142 (uri (pypi-uri "wrapt" version))
8143 (sha256
8144 (base32
8145 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8146 (build-system python-build-system)
8147 (arguments
8148 ;; Tests are not included in the tarball, they are only available in the
8149 ;; git repository.
8150 `(#:tests? #f))
8151 (home-page "https://github.com/GrahamDumpleton/wrapt")
8152 (synopsis "Module for decorators, wrappers and monkey patching")
8153 (description
8154 "The aim of the wrapt module is to provide a transparent object proxy for
8155 Python, which can be used as the basis for the construction of function
8156 wrappers and decorator functions.")
8157 (license license:bsd-2)))
8158
8159 (define-public python2-wrapt
8160 (package-with-python2 python-wrapt))
8161
8162 (define-public python-xlrd
8163 (package
8164 (name "python-xlrd")
8165 (version "1.2.0")
8166 (source (origin
8167 (method url-fetch)
8168 (uri (pypi-uri "xlrd" version))
8169 (sha256
8170 (base32
8171 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8172 (build-system python-build-system)
8173 (arguments
8174 `(#:phases
8175 (modify-phases %standard-phases
8176 ;; Some tests depend on writing a temporary file to the user's home
8177 ;; directory.
8178 (add-after 'unpack 'fix-tests
8179 (lambda _
8180 (delete-file "tests/test_open_workbook.py")
8181 #t)))))
8182 (home-page "http://www.python-excel.org/")
8183 (synopsis "Library for extracting data from Excel files")
8184 (description "This package provides a library to extract data from
8185 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8186 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8187 Unicode-aware. It is not intended as an end-user tool.")
8188 (license license:bsd-3)))
8189
8190 (define-public python2-xlrd
8191 (package-with-python2 python-xlrd))
8192
8193 (define-public python-prettytable
8194 (package
8195 (name "python-prettytable")
8196 (version "0.7.2")
8197 (source
8198 (origin
8199 (method url-fetch)
8200 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8201 (sha256
8202 (base32
8203 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8204 (build-system python-build-system)
8205 (home-page "https://code.google.com/archive/p/prettytable/")
8206 (synopsis "Display tabular data in an ASCII table format")
8207 (description
8208 "A library designed to represent tabular data in visually appealing ASCII
8209 tables. PrettyTable allows for selection of which columns are to be printed,
8210 independent alignment of columns (left or right justified or centred) and
8211 printing of sub-tables by specifying a row range.")
8212 (license license:bsd-3)))
8213
8214 (define-public python2-prettytable
8215 (package-with-python2 python-prettytable))
8216
8217 (define-public python-tables
8218 (package
8219 (name "python-tables")
8220 (version "3.6.1")
8221 (source
8222 (origin
8223 (method url-fetch)
8224 (uri (pypi-uri "tables" version))
8225 (sha256
8226 (base32
8227 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8228 (modules '((guix build utils)))
8229 (snippet
8230 '(begin
8231 ;; Remove pre-compiled .pyc files from source.
8232 (for-each delete-file-recursively
8233 (find-files "." "__pycache__" #:directories? #t))
8234 (for-each delete-file (find-files "." "\\.pyc$"))
8235 #t))))
8236 (build-system python-build-system)
8237 (arguments
8238 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8239 ;; or "check", so we must override the build and check phases.
8240 #:phases
8241 (modify-phases %standard-phases
8242 (add-after 'unpack 'use-gcc
8243 (lambda _
8244 (substitute* "setup.py"
8245 (("^( +)compiler = new_compiler\\(\\)" line indent)
8246 (string-append line
8247 "\n"
8248 indent
8249 "compiler.set_executables(compiler='gcc',"
8250 "compiler_so='gcc',"
8251 "linker_exe='gcc',"
8252 "linker_so='gcc -shared')")))
8253 #t))
8254 (add-after 'unpack 'disable-tuning
8255 (lambda _
8256 (substitute* "setup.py"
8257 (("cpu_flags = .*")
8258 "cpu_flags = ['sse2']\n"))
8259 #t))
8260 (replace 'build
8261 (lambda* (#:key inputs #:allow-other-keys)
8262 (invoke "python" "setup.py" "build"
8263 (string-append "--hdf5="
8264 (assoc-ref inputs "hdf5")))))
8265 (replace 'check
8266 (lambda* (#:key inputs #:allow-other-keys)
8267 (invoke "python" "setup.py" "check"
8268 (string-append "--hdf5="
8269 (assoc-ref inputs "hdf5"))))))))
8270 (propagated-inputs
8271 `(("python-numexpr" ,python-numexpr)
8272 ("python-numpy" ,python-numpy)))
8273 (native-inputs
8274 `(("python-cython" ,python-cython)
8275 ("pkg-config" ,pkg-config)))
8276 (inputs
8277 `(("hdf5" ,hdf5-1.10)
8278 ("bzip2" ,bzip2)
8279 ("zlib" ,zlib)))
8280 (home-page "https://www.pytables.org/")
8281 (synopsis "Hierarchical datasets for Python")
8282 (description "PyTables is a package for managing hierarchical datasets and
8283 designed to efficiently cope with extremely large amounts of data.")
8284 (license license:bsd-3)))
8285
8286 (define-public python2-tables
8287 (package-with-python2 python-tables))
8288
8289 (define-public python-pytest-black
8290 (package
8291 (name "python-pytest-black")
8292 (version "0.3.8")
8293 (source
8294 (origin
8295 (method url-fetch)
8296 (uri (pypi-uri "pytest-black" version))
8297 (sha256
8298 (base32
8299 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8300 (build-system python-build-system)
8301 (propagated-inputs
8302 `(("python-pytest" ,python-pytest)
8303 ("python-black" ,python-black)
8304 ("python-toml" ,python-toml)))
8305 (native-inputs
8306 `(("python-setuptools-scm" ,python-setuptools-scm)))
8307 (home-page "https://github.com/shopkeep/pytest-black")
8308 (synopsis "Pytest plugin to enable format checking with black")
8309 (description
8310 "This package provides a pytest plugin to enable format checking with the
8311 Python code formatter \"black\".")
8312 (license license:expat)))
8313
8314 (define-public python-get-version
8315 (package
8316 (name "python-get-version")
8317 (version "2.1")
8318 (source
8319 (origin
8320 (method url-fetch)
8321 (uri (pypi-uri "get_version" version))
8322 (sha256
8323 (base32
8324 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8325 (build-system python-build-system)
8326 (propagated-inputs
8327 `(("python-pygments" ,python-pygments)
8328 ("python-pytest" ,python-pytest)
8329 ("python-pytest-black" ,python-pytest-black)
8330 ("python-pytest-cov" ,python-pytest-cov)
8331 ("python-setuptools" ,python-setuptools)
8332 ("python-testpath" ,python-testpath)))
8333 (home-page "https://github.com/flying-sheep/get_version")
8334 (synopsis "Version helper in the spirit of versioneer")
8335 (description
8336 "This package provides a version helper that lets you automatically use
8337 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8338 also supports getting the version from Python source distributions or, once
8339 your package is installed, via @code{pkg_resources} (part of
8340 @code{setuptools}).")
8341 (license license:gpl3+)))
8342
8343 (define-public python-legacy-api-wrap
8344 (package
8345 (name "python-legacy-api-wrap")
8346 (version "1.2")
8347 (source
8348 (origin
8349 (method url-fetch)
8350 (uri (pypi-uri "legacy-api-wrap" version))
8351 (sha256
8352 (base32
8353 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8354 (build-system python-build-system)
8355 (propagated-inputs
8356 `(("python-get-version" ,python-get-version)
8357 ("python-pytest" ,python-pytest)
8358 ("python-pytest-black" ,python-pytest-black)
8359 ("python-pytest-cov" ,python-pytest-cov)
8360 ("python-setuptools" ,python-setuptools)))
8361 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8362 (synopsis "Legacy API wrapper")
8363 (description "This module defines a decorator to wrap legacy APIs. The
8364 primary use case is APIs defined before keyword-only parameters existed.")
8365 (license license:gpl3+)))
8366
8367 (define-public python-pyasn1
8368 (package
8369 (name "python-pyasn1")
8370 (version "0.4.8")
8371 (source
8372 (origin
8373 (method url-fetch)
8374 (uri (pypi-uri "pyasn1" version))
8375 (sha256
8376 (base32
8377 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8378 (build-system python-build-system)
8379 (home-page "http://pyasn1.sourceforge.net/")
8380 (synopsis "ASN.1 types and codecs")
8381 (description
8382 "This is an implementation of ASN.1 types and codecs in Python. It is
8383 suitable for a wide range of protocols based on the ASN.1 specification.")
8384 (license license:bsd-2)))
8385
8386 (define-public python2-pyasn1
8387 (package-with-python2 python-pyasn1))
8388
8389 (define-public python-pyasn1-modules
8390 (package
8391 (name "python-pyasn1-modules")
8392 (version "0.2.2")
8393 (source
8394 (origin
8395 (method url-fetch)
8396 (uri (pypi-uri "pyasn1-modules" version))
8397 (sha256
8398 (base32
8399 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8400 (build-system python-build-system)
8401 (propagated-inputs
8402 `(("python-pyasn1" ,python-pyasn1)))
8403 (home-page "https://sourceforge.net/projects/pyasn1/")
8404 (synopsis "ASN.1 codec implementations")
8405 (description
8406 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8407 implementations of ASN.1-based codecs and protocols.")
8408 (license license:bsd-3)))
8409
8410 (define-public python2-pyasn1-modules
8411 (package-with-python2 python-pyasn1-modules))
8412
8413 (define-public python-ipaddress
8414 (package
8415 (name "python-ipaddress")
8416 (version "1.0.22")
8417 (source (origin
8418 (method url-fetch)
8419 (uri (pypi-uri "ipaddress" version))
8420 (sha256
8421 (base32
8422 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8423 (build-system python-build-system)
8424 (home-page "https://github.com/phihag/ipaddress")
8425 (synopsis "IP address manipulation library")
8426 (description
8427 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8428 in Python. This library is used to create, poke at, and manipulate IPv4 and
8429 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8430 module to older versions of Python.")
8431 (license license:psfl)))
8432
8433 (define-public python2-ipaddress
8434 (package-with-python2 python-ipaddress))
8435
8436 (define-public python2-ipaddr
8437 (package
8438 (name "python2-ipaddr")
8439 (version "2.1.11")
8440 (source
8441 (origin
8442 (method url-fetch)
8443 (uri (pypi-uri "ipaddr" version))
8444 (sha256
8445 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8446 (build-system python-build-system)
8447 (arguments
8448 `(#:python ,python-2 ;version 2 only
8449 #:phases
8450 (modify-phases %standard-phases
8451 (replace 'check
8452 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8453 (home-page "https://github.com/google/ipaddr-py")
8454 (synopsis "IP address manipulation library")
8455 (description
8456 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8457 IPv6 addresses and networks.
8458
8459 For new implementations you may prefer to use the standard module
8460 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8461 versions of Python.")
8462 (license license:asl2.0)))
8463
8464 (define-public python-idna
8465 (package
8466 (name "python-idna")
8467 (version "2.8")
8468 (source
8469 (origin
8470 (method url-fetch)
8471 (uri (pypi-uri "idna" version))
8472 (sha256
8473 (base32
8474 "01rlkigdxg17sf9yar1jl8n18ls59367wqh59hnawlyg53vb6my3"))))
8475 (build-system python-build-system)
8476 (home-page "https://github.com/kjd/idna")
8477 (synopsis "Internationalized domain names in applications")
8478 (description
8479 "This is a library to support the Internationalised Domain Names in
8480 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8481 protocol is often referred to as “IDNA2008” and can produce different results
8482 from the earlier standard from 2003. The library is also intended to act as a
8483 suitable drop-in replacement for the “encodings.idna” module that comes with
8484 the Python standard library but currently only supports the older 2003
8485 specification.")
8486 (license license:bsd-4)))
8487
8488 (define-public python-idna-2.7
8489 (package (inherit python-idna)
8490 (version "2.7")
8491 (source (origin
8492 (method url-fetch)
8493 (uri (pypi-uri "idna" version))
8494 (sha256
8495 (base32
8496 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8497
8498
8499 (define-public python2-idna
8500 (package-with-python2 python-idna))
8501
8502 (define-public python-idna-ssl
8503 (package
8504 (name "python-idna-ssl")
8505 (version "1.0.1")
8506 (source
8507 (origin
8508 (method url-fetch)
8509 (uri (pypi-uri "idna-ssl" version))
8510 (sha256
8511 (base32
8512 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8513 (build-system python-build-system)
8514 (arguments
8515 `(#:tests? #f)) ;circular dependency with python-aiohttp
8516 (home-page "https://github.com/aio-libs/idna-ssl")
8517 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8518 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8519 domains support.")
8520 (license license:expat)))
8521
8522 (define-public python-pretend
8523 (package
8524 (name "python-pretend")
8525 (version "1.0.9")
8526 (source
8527 (origin
8528 (method url-fetch)
8529 (uri (pypi-uri "pretend" version))
8530 (sha256
8531 (base32
8532 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8533 (build-system python-build-system)
8534 (home-page "https://github.com/alex/pretend")
8535 (synopsis "Library for stubbing in Python")
8536 (description
8537 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8538 technique for writing tests. You may hear the term mixed up with mocks,
8539 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8540 responses, rather than doing any computation.")
8541 (license license:bsd-3)))
8542
8543 (define-public python2-pretend
8544 (package-with-python2 python-pretend))
8545
8546 (define-public python-pip
8547 (package
8548 (name "python-pip")
8549 (version "20.0.2")
8550 (source
8551 (origin
8552 (method url-fetch)
8553 (uri (pypi-uri "pip" version))
8554 (sha256
8555 (base32
8556 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8557 (build-system python-build-system)
8558 (arguments
8559 '(#:tests? #f)) ; there are no tests in the pypi archive.
8560 (home-page "https://pip.pypa.io/")
8561 (synopsis "Package manager for Python software")
8562 (description
8563 "Pip is a package manager for Python software, that finds packages on the
8564 Python Package Index (PyPI).")
8565 (license license:expat)))
8566
8567 (define-public python2-pip
8568 (package-with-python2 python-pip))
8569
8570 (define-public python-tlsh
8571 (package
8572 (name "python-tlsh")
8573 (version "3.4.5")
8574 (home-page "https://github.com/trendmicro/tlsh")
8575 (source
8576 (origin
8577 (method git-fetch)
8578 (uri (git-reference
8579 (url "https://github.com/trendmicro/tlsh.git")
8580 (commit (string-append "v" version))))
8581 (file-name (git-file-name name version))
8582 (sha256
8583 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8584 (build-system cmake-build-system)
8585 (arguments
8586 '(#:out-of-source? #f
8587 #:phases (modify-phases %standard-phases
8588 (replace
8589 'install
8590 (lambda* (#:key outputs #:allow-other-keys)
8591 ;; Build and install the Python bindings. The underlying
8592 ;; C++ library is apparently not meant to be installed.
8593 (let ((out (assoc-ref outputs "out")))
8594 (with-directory-excursion "py_ext"
8595 (and (system* "python" "setup.py" "build")
8596 (system* "python" "setup.py" "install"
8597 (string-append "--prefix=" out))))))))))
8598 (inputs `(("python" ,python-wrapper))) ;for the bindings
8599 (synopsis "Fuzzy matching library for Python")
8600 (description
8601 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8602 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8603 value which can be used for similarity comparisons. Similar objects have
8604 similar hash values, which allows for the detection of similar objects by
8605 comparing their hash values. The byte stream should have a sufficient amount
8606 of complexity; for example, a byte stream of identical bytes will not generate
8607 a hash value.")
8608 (license license:asl2.0)))
8609
8610 (define-public python2-tlsh
8611 (package
8612 (inherit python-tlsh)
8613 (name "python2-tlsh")
8614 (inputs `(("python" ,python-2)))))
8615
8616 (define-public python-termcolor
8617 (package
8618 (name "python-termcolor")
8619 (version "1.1.0")
8620 (source
8621 (origin
8622 (method url-fetch)
8623 (uri (pypi-uri "termcolor" version))
8624 (sha256
8625 (base32
8626 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8627 (build-system python-build-system)
8628 (arguments
8629 ;; There are no tests.
8630 `(#:tests? #f))
8631 (home-page "https://pypi.org/project/termcolor/")
8632 (synopsis "ANSII Color formatting for terminal output")
8633 (description
8634 "This package provides ANSII Color formatting for output in terminals.")
8635 (license license:expat)))
8636
8637 (define-public python2-termcolor
8638 (package-with-python2 python-termcolor))
8639
8640 (define-public python-libarchive-c
8641 (package
8642 (name "python-libarchive-c")
8643 (version "2.9")
8644 (source (origin
8645 (method url-fetch)
8646 (uri (pypi-uri "libarchive-c" version))
8647 (sha256
8648 (base32
8649 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8650 (build-system python-build-system)
8651 (arguments
8652 '(#:phases (modify-phases %standard-phases
8653 (add-before
8654 'build 'reference-libarchive
8655 (lambda* (#:key inputs #:allow-other-keys)
8656 ;; Retain the absolute file name of libarchive.so.
8657 (let ((libarchive (assoc-ref inputs "libarchive")))
8658 (substitute* "libarchive/ffi.py"
8659 (("find_library\\('archive'\\)")
8660 (string-append "'" libarchive
8661 "/lib/libarchive.so'"))))))
8662 (replace 'check
8663 (lambda _ (invoke "pytest" "-vv"))))))
8664 (native-inputs
8665 `(("python-mock" ,python-mock)
8666 ("python-pytest" ,python-pytest)))
8667 (inputs
8668 `(("libarchive" ,libarchive)))
8669 (home-page "https://github.com/Changaco/python-libarchive-c")
8670 (synopsis "Python interface to libarchive")
8671 (description
8672 "This package provides Python bindings to libarchive, a C library to
8673 access possibly compressed archives in many different formats. It uses
8674 Python's @code{ctypes} foreign function interface (FFI).")
8675 (license license:lgpl2.0+)))
8676
8677 (define-public python2-libarchive-c
8678 (package-with-python2 python-libarchive-c))
8679
8680 (define-public python-file
8681 (package
8682 (inherit file)
8683 (name "python-file")
8684 (build-system python-build-system)
8685 (arguments
8686 '(#:tests? #f ;no tests
8687 #:configure-flags '("--single-version-externally-managed" "--root=/")
8688 #:phases (modify-phases %standard-phases
8689 (add-before 'build 'change-directory
8690 (lambda _
8691 (chdir "python")
8692 #t))
8693 (add-before 'build 'set-library-file-name
8694 (lambda* (#:key inputs #:allow-other-keys)
8695 (let ((file (assoc-ref inputs "file")))
8696 (substitute* "magic.py"
8697 (("find_library\\('magic'\\)")
8698 (string-append "'" file "/lib/libmagic.so'")))
8699 #t))))))
8700 (inputs `(("file" ,file)))
8701 (native-inputs (if (%current-target-system)
8702 `(("self" ,this-package))
8703 '()))
8704 (synopsis "Python bindings to the libmagic file type guesser. Note that
8705 this module and the python-magic module both provide a \"magic.py\" file;
8706 these two modules, which are different and were developed separately, both
8707 serve the same purpose: provide Python bindings for libmagic.")))
8708
8709 (define-public python2-file
8710 (package-with-python2 python-file))
8711
8712 (define-public python-debian
8713 (package
8714 (name "python-debian")
8715 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8716 (version "0.1.36")
8717 (source
8718 (origin
8719 ;; Use git-fetch, as pypi doesn't include test suite.
8720 (method git-fetch)
8721 (uri (git-reference
8722 (url home-page)
8723 (commit version)))
8724 (file-name (git-file-name name version))
8725 (sha256
8726 (base32
8727 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8728 (build-system python-build-system)
8729 (arguments
8730 `(#:phases (modify-phases %standard-phases
8731 (add-after 'unpack 'remove-debian-specific-tests
8732 ;; python-apt, apt and dpkg are not yet available in guix,
8733 ;; and these tests heavily depend on them.
8734 (lambda _
8735 (delete-file "lib/debian/tests/test_deb822.py")
8736 (delete-file "lib/debian/tests/test_debfile.py")
8737 #t)))))
8738 (propagated-inputs
8739 `(("python-six" ,python-six)
8740 ("python-chardet" ,python-chardet)))
8741 (synopsis "Debian package related modules")
8742 (description
8743 ;; XXX: Use @enumerate instead of @itemize to work around
8744 ;; <http://bugs.gnu.org/21772>.
8745 "This package provides Python modules that abstract many formats of
8746 Debian-related files, such as:
8747
8748 @enumerate
8749 @item Debtags information;
8750 @item @file{debian/changelog} files;
8751 @item packages files, pdiffs;
8752 @item control files of single or multiple RFC822-style paragraphs---e.g.
8753 @file{debian/control}, @file{.changes}, @file{.dsc};
8754 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8755 contained files and meta-information.
8756 @end enumerate\n")
8757
8758 ;; Modules are either GPLv2+ or GPLv3+.
8759 (license license:gpl3+)))
8760
8761 (define-public python-nbformat
8762 (package
8763 (name "python-nbformat")
8764 (version "4.4.0")
8765 (source
8766 (origin
8767 (method url-fetch)
8768 (uri (pypi-uri "nbformat" version))
8769 (sha256
8770 (base32
8771 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8772 (build-system python-build-system)
8773 (arguments `(#:tests? #f)) ; no test target
8774 (propagated-inputs
8775 `(("python-ipython-genutils" ,python-ipython-genutils)
8776 ("python-jsonschema" ,python-jsonschema)
8777 ("python-jupyter-core" ,python-jupyter-core)
8778 ("python-traitlets" ,python-traitlets)))
8779 (home-page "http://jupyter.org")
8780 (synopsis "Jupyter Notebook format")
8781 (description "This package provides the reference implementation of the
8782 Jupyter Notebook format and Python APIs for working with notebooks.")
8783 (license license:bsd-3)))
8784
8785 (define-public python2-nbformat
8786 (package-with-python2 python-nbformat))
8787
8788 (define-public python-bleach
8789 (package
8790 (name "python-bleach")
8791 (version "3.1.3")
8792 (source
8793 (origin
8794 (method url-fetch)
8795 (uri (pypi-uri "bleach" version))
8796 (sha256
8797 (base32
8798 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8799 (build-system python-build-system)
8800 (propagated-inputs
8801 `(("python-webencodings" ,python-webencodings)
8802 ("python-six" ,python-six)))
8803 (native-inputs
8804 `(("python-datrie" ,python-datrie)
8805 ("python-genshi" ,python-genshi)
8806 ("python-lxml" ,python-lxml)
8807 ("python-pytest" ,python-pytest)))
8808 (home-page "https://github.com/mozilla/bleach")
8809 (synopsis "Whitelist-based HTML-sanitizing tool")
8810 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8811 (license license:asl2.0)))
8812
8813 (define-public python2-bleach
8814 (package-with-python2 python-bleach))
8815
8816 (define-public python-entrypoints
8817 (package
8818 (name "python-entrypoints")
8819 (version "0.3")
8820 (source
8821 (origin
8822 (method url-fetch)
8823 (uri (pypi-uri "entrypoints" version))
8824 (sha256
8825 (base32
8826 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8827 (build-system python-build-system)
8828 ;; The package does not come with a setup.py file, so we have to generate
8829 ;; one ourselves.
8830 (arguments
8831 `(#:tests? #f
8832 #:phases
8833 (modify-phases %standard-phases
8834 (add-after 'unpack 'create-setup.py
8835 (lambda _
8836 (call-with-output-file "setup.py"
8837 (lambda (port)
8838 (format port "\
8839 from setuptools import setup
8840 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8841 " ,version))))))))
8842 (home-page "https://github.com/takluyver/entrypoints")
8843 (synopsis "Discover and load entry points from installed Python packages")
8844 (description "Entry points are a way for Python packages to advertise
8845 objects with some common interface. The most common examples are
8846 @code{console_scripts} entry points, which define shell commands by
8847 identifying a Python function to run. The @code{entrypoints} module contains
8848 functions to find and load entry points.")
8849 (license license:expat)))
8850
8851 (define-public python2-entrypoints
8852 (package-with-python2 python-entrypoints))
8853
8854 (define-public python-epc
8855 (package
8856 (name "python-epc")
8857 (version "0.0.5")
8858 (source
8859 (origin
8860 (method url-fetch)
8861 (uri (pypi-uri "epc" version))
8862 (sha256
8863 (base32
8864 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
8865 (build-system python-build-system)
8866 (propagated-inputs
8867 `(("python-sexpdata" ,python-sexpdata)))
8868 (native-inputs
8869 `(("python-nose" ,python-nose)))
8870 (home-page "https://github.com/tkf/python-epc")
8871 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
8872 (description
8873 "Python-EPC can call elisp functions from Python and Python functions
8874 from elisp.")
8875 (license license:gpl3)))
8876
8877 (define-public python-nbconvert
8878 (package
8879 (name "python-nbconvert")
8880 (version "5.0.0b1")
8881 (source
8882 (origin
8883 (method url-fetch)
8884 (uri (pypi-uri "nbconvert" version))
8885 (sha256
8886 (base32
8887 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8888 (build-system python-build-system)
8889 (arguments
8890 `(;; The "bdist_egg" target is disabled by default, causing the installation
8891 ;; to fail.
8892 #:configure-flags (list "bdist_egg")
8893 ;; FIXME: 5 failures, 40 errors.
8894 #:tests? #f))
8895 ;; #:phases
8896 ;; (modify-phases %standard-phases
8897 ;; (replace 'check
8898 ;; (lambda _
8899 ;; (zero? (system* "py.test" "-v")))))
8900 (native-inputs
8901 `(("python-pytest" ,python-pytest)))
8902 (propagated-inputs
8903 `(("python-bleach" ,python-bleach)
8904 ("python-entrypoints" ,python-entrypoints)
8905 ("python-jinja2" ,python-jinja2)
8906 ("python-jupyter-core" ,python-jupyter-core)
8907 ("python-mistune" ,python-mistune)
8908 ("python-nbformat" ,python-nbformat)
8909 ("python-pygments" ,python-pygments)
8910 ("python-traitlets" ,python-traitlets)))
8911 (home-page "http://jupyter.org")
8912 (synopsis "Converting Jupyter Notebooks")
8913 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8914 notebooks to various other formats via Jinja templates. It allows you to
8915 convert an @code{.ipynb} notebook file into various static formats including:
8916
8917 @enumerate
8918 @item HTML
8919 @item LaTeX
8920 @item PDF
8921 @item Reveal JS
8922 @item Markdown (md)
8923 @item ReStructured Text (rst)
8924 @item executable script
8925 @end enumerate\n")
8926 (license license:bsd-3)))
8927
8928 (define-public python2-nbconvert
8929 (package-with-python2 python-nbconvert))
8930
8931 (define-public python-notebook
8932 (package
8933 (name "python-notebook")
8934 (version "5.7.4")
8935 (source (origin
8936 (method url-fetch)
8937 (uri (pypi-uri "notebook" version))
8938 (sha256
8939 (base32
8940 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8941 (build-system python-build-system)
8942 (arguments
8943 `(#:phases
8944 (modify-phases %standard-phases
8945 (replace 'check
8946 (lambda _
8947 ;; These tests require a browser
8948 (delete-file-recursively "notebook/tests/selenium")
8949 ;; Some tests need HOME
8950 (setenv "HOME" "/tmp")
8951 ;; This file contains "warningfilters", which are not supported
8952 ;; by this version of nose.
8953 (delete-file "setup.cfg")
8954 (with-directory-excursion "/tmp"
8955 (invoke "nosetests" "-v"))
8956 #t)))))
8957 (propagated-inputs
8958 `(("python-jupyter-core" ,python-jupyter-core)
8959 ("python-nbformat" ,python-nbformat)
8960 ("python-nbconvert" ,python-nbconvert)
8961 ("python-prometheus-client" ,python-prometheus-client)
8962 ("python-send2trash" ,python-send2trash)
8963 ("python-terminado" ,python-terminado)))
8964 (native-inputs
8965 `(("python-nose" ,python-nose)
8966 ("python-sphinx" ,python-sphinx)
8967 ("python-requests" ,python-requests)))
8968 (home-page "http://jupyter.org/")
8969 (synopsis "Web-based notebook environment for interactive computing")
8970 (description
8971 "The Jupyter HTML notebook is a web-based notebook environment for
8972 interactive computing.")
8973 (properties `((python2-variant . ,(delay python2-notebook))))
8974 (license license:bsd-3)))
8975
8976 (define-public python2-notebook
8977 (let ((base (package-with-python2
8978 (strip-python2-variant python-notebook))))
8979 (package (inherit base)
8980 (native-inputs
8981 `(("python2-mock" ,python2-mock)
8982 ,@(package-native-inputs base)))
8983 (arguments
8984 (substitute-keyword-arguments (package-arguments base)
8985 ((#:phases phases)
8986 `(modify-phases ,phases
8987 (add-before 'check 'disable-test-case
8988 ;; The test requires network access to localhost. Curiously it
8989 ;; fails with Python 2 only. Simply make the test-case return
8990 ;; immediately.
8991 (lambda _
8992 (substitute*
8993 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8994 (("formats = self.nbconvert_api") "return #")))))))))))
8995
8996 (define-public python-widgetsnbextension
8997 (package
8998 (name "python-widgetsnbextension")
8999 (version "3.5.1")
9000 (source
9001 (origin
9002 (method url-fetch)
9003 (uri (pypi-uri "widgetsnbextension" version))
9004 (sha256
9005 (base32
9006 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9007 (build-system python-build-system)
9008 (propagated-inputs
9009 `(("python-ipykernel"
9010 ,(prompt-toolkit-2-instead-of-prompt-toolkit python-ipykernel))
9011 ("python-notebook" ,python-notebook)))
9012 (native-inputs
9013 `(("python-certifi" ,python-certifi)
9014 ("python-nose" ,python-nose)))
9015 (home-page "https://ipython.org")
9016 (synopsis "IPython HTML widgets for Jupyter")
9017 (description "This package provides interactive HTML widgets for Jupyter
9018 notebooks.")
9019 (license license:bsd-3)))
9020
9021 (define-public python2-widgetsnbextension
9022 (package-with-python2 python-widgetsnbextension))
9023
9024 (define-public python-ipywidgets
9025 (package
9026 (name "python-ipywidgets")
9027 (version "7.5.1")
9028 (source
9029 (origin
9030 (method url-fetch)
9031 (uri (pypi-uri "ipywidgets" version))
9032 (sha256
9033 (base32
9034 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9035 (build-system python-build-system)
9036 (propagated-inputs
9037 `(("python-ipython" ,(prompt-toolkit-2-instead-of-prompt-toolkit
9038 python-ipython))
9039 ("python-traitlets" ,python-traitlets)
9040 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9041 (native-inputs
9042 `(("python-nose" ,python-nose)
9043 ("python-pytest" ,python-pytest)))
9044 (home-page "https://ipython.org")
9045 (synopsis "IPython HTML widgets for Jupyter")
9046 (description "Ipywidgets are interactive HTML widgets for Jupyter
9047 notebooks and the IPython kernel. Notebooks come alive when interactive
9048 widgets are used. Users gain control of their data and can visualize changes
9049 in the data.")
9050 (license license:bsd-3)))
9051
9052 (define-public python2-ipywidgets
9053 (package-with-python2 python-ipywidgets))
9054
9055 (define-public python-jupyter-console
9056 (package
9057 (name "python-jupyter-console")
9058 (version "6.1.0")
9059 (source
9060 (origin
9061 (method url-fetch)
9062 (uri (pypi-uri "jupyter_console" version))
9063 (sha256
9064 (base32
9065 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9066 (build-system python-build-system)
9067 (propagated-inputs
9068 `(("python-ipykernel" ,(prompt-toolkit-2-instead-of-prompt-toolkit
9069 python-ipykernel))
9070 ("python-jupyter-client" ,python-jupyter-client)
9071 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9072 ("python-pygments" ,python-pygments)))
9073 (native-inputs
9074 `(("python-nose" ,python-nose)))
9075 (home-page "https://jupyter.org")
9076 (synopsis "Jupyter terminal console")
9077 (description "This package provides a terminal-based console frontend for
9078 Jupyter kernels. It also allows for console-based interaction with non-Python
9079 Jupyter kernels such as IJulia and IRKernel.")
9080 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9081 (license license:bsd-3)))
9082
9083 (define-public python2-jupyter-console
9084 (package
9085 (name "python2-jupyter-console")
9086 (version "5.2.0")
9087 (source
9088 (origin
9089 (method url-fetch)
9090 (uri (pypi-uri "jupyter_console" version))
9091 (sha256
9092 (base32
9093 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9094 (build-system python-build-system)
9095 (arguments
9096 `(#:python ,python-2
9097 #:tests? #f)) ; Tests only run in a TTY.
9098 (propagated-inputs
9099 `(("python2-ipykernel" ,python2-ipykernel)
9100 ("python2-jupyter-client" ,python2-jupyter-client)
9101 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9102 ("python2-pygments" ,python2-pygments)))
9103 (native-inputs
9104 `(("python2-nose" ,python2-nose)))
9105 (home-page "https://jupyter.org")
9106 (synopsis "Jupyter terminal console")
9107 (description "This package provides a terminal-based console frontend for
9108 Jupyter kernels. It also allows for console-based interaction with non-Python
9109 Jupyter kernels such as IJulia and IRKernel.")
9110 (license license:bsd-3)))
9111
9112 ;; The python-ipython and python-jupyter-console require each other. To get
9113 ;; the functionality in both packages working, strip down the
9114 ;; python-jupyter-console package when using it as an input to python-ipython.
9115 (define python-jupyter-console-minimal
9116 (package
9117 (inherit python-jupyter-console)
9118 (name "python-jupyter-console-minimal")
9119 (arguments
9120 (substitute-keyword-arguments
9121 (package-arguments python-jupyter-console)
9122 ((#:phases phases)
9123 `(modify-phases ,phases
9124 (add-after 'install 'delete-bin
9125 (lambda* (#:key outputs #:allow-other-keys)
9126 ;; Delete the bin files, to avoid conflicts in profiles
9127 ;; where python-ipython and python-jupyter-console are
9128 ;; both present.
9129 (delete-file-recursively
9130 (string-append
9131 (assoc-ref outputs "out") "/bin"))))))))
9132 ;; Remove the python-ipython propagated input, to avoid the cycle
9133 (propagated-inputs
9134 (alist-delete
9135 "python-ipython"
9136 (package-propagated-inputs python-jupyter-console)))))
9137
9138 (define-public python-qtconsole
9139 (package
9140 (name "python-qtconsole")
9141 (version "4.4.3")
9142 (source
9143 (origin
9144 (method url-fetch)
9145 (uri (pypi-uri "qtconsole" version))
9146 (sha256
9147 (base32
9148 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9149 (build-system python-build-system)
9150 (arguments
9151 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9152 ;; but we only have the LTS version 5.x. This means that there might be
9153 ;; runtime errors, but since this is a dependency of the Jupyter package,
9154 ;; and Jupyter can be used without the qtconsole we can overlook this for
9155 ;; now.
9156 `(#:tests? #f
9157 #:phases
9158 (modify-phases %standard-phases
9159 (add-before 'check 'pre-check
9160 (lambda _
9161 (setenv "QT_QPA_PLATFORM" "offscreen")
9162 #t)))))
9163 (propagated-inputs
9164 `(("python-ipykernel" ,python-ipykernel)
9165 ("python-ipython" ,python-ipython)))
9166 (native-inputs
9167 `(("python-pytest" ,python-pytest)))
9168 (home-page "http://jupyter.org")
9169 (synopsis "Jupyter Qt console")
9170 (description "This package provides a Qt-based console for Jupyter with
9171 support for rich media output.")
9172 (license license:bsd-3)))
9173
9174 (define-public python-jsbeautifier
9175 (package
9176 (name "python-jsbeautifier")
9177 (version "1.10.2")
9178 (home-page "https://github.com/beautify-web/js-beautify")
9179 (source (origin
9180 (method git-fetch)
9181 (uri (git-reference
9182 (url home-page)
9183 (commit (string-append "v" version))))
9184 (file-name (git-file-name name version))
9185 (sha256
9186 (base32
9187 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9188 (build-system python-build-system)
9189 (arguments
9190 `(#:phases (modify-phases %standard-phases
9191 (add-after 'unpack 'chdir
9192 (lambda _
9193 ;; The upstream Git repository contains all the code,
9194 ;; but this package only builds the python code.
9195 (chdir "python")
9196 #t))
9197 (add-after 'unpack 'patch-python-six-requirements
9198 (lambda _
9199 (substitute* "python/setup.py"
9200 (("six>=1.12.0")
9201 "six>=1.11.0"))
9202 #t)))))
9203 (propagated-inputs
9204 `(("python-editorconfig" ,python-editorconfig)
9205 ("python-six" ,python-six)))
9206 (native-inputs
9207 `(("python-pytest" ,python-pytest)))
9208 (synopsis "JavaScript unobfuscator and beautifier")
9209 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9210 popular online obfuscators.")
9211 (license license:expat)))
9212
9213 (define-public jupyter
9214 (package
9215 (name "jupyter")
9216 (version "1.0.0")
9217 (source
9218 (origin
9219 (method url-fetch)
9220 (uri (pypi-uri "jupyter" version))
9221 (sha256
9222 (base32
9223 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9224 (build-system python-build-system)
9225 (arguments '(#:tests? #f)) ; there are none.
9226 (propagated-inputs
9227 `(("python-ipykernel" ,python-ipykernel)
9228 ("python-ipywidgets" ,python-ipywidgets)
9229 ("python-jupyter-console" ,python-jupyter-console)
9230 ("python-nbconvert" ,python-nbconvert)
9231 ("python-notebook" ,python-notebook)
9232 ("python-qtconsole" ,python-qtconsole)))
9233 (native-search-paths
9234 (list (search-path-specification
9235 (variable "JUPYTER_PATH")
9236 (files '("share/jupyter")))))
9237 (home-page "https://jupyter.org")
9238 (synopsis "Web application for interactive documents")
9239 (description
9240 "The Jupyter Notebook is a web application that allows you to create and
9241 share documents that contain live code, equations, visualizations and
9242 explanatory text. Uses include: data cleaning and transformation, numerical
9243 simulation, statistical modeling, machine learning and much more.")
9244 (license license:bsd-3)))
9245
9246 (define-public python-chardet
9247 (package
9248 (name "python-chardet")
9249 (version "3.0.4")
9250 (source
9251 (origin
9252 (method url-fetch)
9253 (uri (pypi-uri "chardet" version))
9254 (sha256
9255 (base32
9256 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9257 (native-inputs
9258 `(("python-hypothesis" ,python-hypothesis)
9259 ("python-pytest" ,python-pytest)
9260 ("python-pytest-runner" ,python-pytest-runner)))
9261 (build-system python-build-system)
9262 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9263 (arguments `(#:tests? #f))
9264 (home-page "https://github.com/chardet/chardet")
9265 (synopsis "Universal encoding detector for Python 2 and 3")
9266 (description
9267 "This package provides @code{chardet}, a Python module that can
9268 automatically detect a wide range of file encodings.")
9269 (license license:lgpl2.1+)))
9270
9271 (define-public python2-chardet
9272 (package-with-python2 python-chardet))
9273
9274 (define-public python-docopt
9275 (package
9276 (name "python-docopt")
9277 (version "0.6.2")
9278 (source
9279 (origin
9280 (method git-fetch)
9281 ;; The release on PyPI does not include tests.
9282 (uri (git-reference
9283 (url "https://github.com/docopt/docopt")
9284 (commit version)))
9285 (file-name (git-file-name name version))
9286 (sha256
9287 (base32
9288 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9289 (build-system python-build-system)
9290 (native-inputs
9291 `(("python-pytest" ,python-pytest)))
9292 (arguments
9293 `(#:phases
9294 (modify-phases %standard-phases
9295 (replace 'check
9296 (lambda _ (invoke "py.test"))))))
9297 (home-page "http://docopt.org")
9298 (synopsis "Command-line interface description language for Python")
9299 (description "This library allows the user to define a command-line
9300 interface from a program's help message rather than specifying it
9301 programmatically with command-line parsers like @code{getopt} and
9302 @code{argparse}.")
9303 (license license:expat)))
9304
9305 (define-public python2-docopt
9306 (package-with-python2 python-docopt))
9307
9308 (define-public python-pythondialog
9309 (package
9310 (name "python-pythondialog")
9311 (version "3.4.0")
9312 (source
9313 (origin
9314 (method url-fetch)
9315 (uri (pypi-uri "pythondialog" version))
9316 (sha256
9317 (base32
9318 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9319 (build-system python-build-system)
9320 (arguments
9321 `(#:phases
9322 (modify-phases %standard-phases
9323 (add-after 'unpack 'patch-path
9324 (lambda* (#:key inputs #:allow-other-keys)
9325 (let* ((dialog (assoc-ref inputs "dialog")))
9326 ;; Since this library really wants to grovel the search path, we
9327 ;; must hardcode dialog's store path into it.
9328 (substitute* "dialog.py"
9329 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9330 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9331 #t))))
9332 #:tests? #f)) ; no test suite
9333 (propagated-inputs
9334 `(("dialog" ,dialog)))
9335 (home-page "http://pythondialog.sourceforge.net/")
9336 (synopsis "Python interface to the UNIX dialog utility")
9337 (description "A Python wrapper for the dialog utility. Its purpose is to
9338 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9339 This allows one to make simple text-mode user interfaces on Unix-like systems")
9340 (license license:lgpl2.1)
9341 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9342
9343 (define-public python2-pythondialog
9344 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9345 (package
9346 (inherit base)
9347 (version (package-version python-pythondialog))
9348 (source (origin
9349 (method url-fetch)
9350 (uri (pypi-uri "python2-pythondialog" version))
9351 (sha256
9352 (base32
9353 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9354
9355 (define-public python-configobj
9356 (package
9357 (name "python-configobj")
9358 (version "5.0.6")
9359 (source (origin
9360 (method url-fetch)
9361 (uri (pypi-uri "configobj" version))
9362 (sha256
9363 (base32
9364 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9365 ;; Patch setup.py so it looks for python-setuptools, which is
9366 ;; required to parse the keyword 'install_requires' in setup.py.
9367 (patches (search-patches "python-configobj-setuptools.patch"))))
9368 (build-system python-build-system)
9369 (propagated-inputs
9370 `(("python-six" ,python-six)))
9371 (synopsis "Config file reading, writing and validation")
9372 (description "ConfigObj is a simple but powerful config file reader and
9373 writer: an ini file round tripper. Its main feature is that it is very easy to
9374 use, with a straightforward programmer’s interface and a simple syntax for
9375 config files.")
9376 (home-page "https://github.com/DiffSK/configobj")
9377 (license license:bsd-3)))
9378
9379 (define-public python2-configobj
9380 (package-with-python2 python-configobj))
9381
9382 (define-public python-configargparse
9383 (package
9384 (name "python-configargparse")
9385 (version "0.14.0")
9386 (source (origin
9387 (method url-fetch)
9388 (uri (pypi-uri "ConfigArgParse" version))
9389 (sha256
9390 (base32
9391 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9392 (build-system python-build-system)
9393 (native-inputs
9394 `(("python-pyyaml" ,python-pyyaml)))
9395 (arguments
9396 `(#:phases
9397 (modify-phases %standard-phases
9398 (replace 'check
9399 (lambda _
9400 ;; Bypass setuptools-shim because one test relies on "setup.py"
9401 ;; being the first argument passed to the python call.
9402 ;;
9403 ;; NOTE: Many tests do not run because they rely on Python's
9404 ;; built-in test.test_argparse, but we remove the unit tests from
9405 ;; our Python installation.
9406 (invoke "python" "setup.py" "test"))))))
9407 (synopsis "Replacement for argparse")
9408 (description "A drop-in replacement for argparse that allows options to also
9409 be set via config files and/or environment variables.")
9410 (home-page "https://github.com/bw2/ConfigArgParse")
9411 (license license:expat)))
9412
9413 (define-public python2-configargparse
9414 (package-with-python2 python-configargparse))
9415
9416 (define-public python-argparse-manpage
9417 (package
9418 (name "python-argparse-manpage")
9419 (version "1.1")
9420 (source
9421 (origin
9422 (method url-fetch)
9423 (uri (pypi-uri "argparse-manpage" version))
9424 (sha256
9425 (base32
9426 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9427 (build-system python-build-system)
9428 (home-page "https://github.com/praiskup/argparse-manpage")
9429 (synopsis "Build manual page from Python's ArgumentParser object")
9430 (description
9431 "This package provides tools to build manual pages from Python's
9432 @code{ArgumentParser} object.")
9433 (license license:asl2.0)))
9434
9435 (define-public python-contextlib2
9436 (package
9437 (name "python-contextlib2")
9438 (version "0.6.0.post1")
9439 (source
9440 (origin
9441 (method url-fetch)
9442 (uri (pypi-uri "contextlib2" version))
9443 (sha256
9444 (base32
9445 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9446 (build-system python-build-system)
9447 (home-page "https://contextlib2.readthedocs.org/")
9448 (synopsis "Tools for decorators and context managers")
9449 (description "This module is primarily a backport of the Python
9450 3.2 contextlib to earlier Python versions. Like contextlib, it
9451 provides utilities for common tasks involving decorators and context
9452 managers. It also contains additional features that are not part of
9453 the standard library.")
9454 (properties `((python2-variant . ,(delay python2-contextlib2))))
9455 (license license:psfl)))
9456
9457 (define-public python2-contextlib2
9458 (let ((base (package-with-python2
9459 (strip-python2-variant python-contextlib2))))
9460 (package
9461 (inherit base)
9462 (arguments
9463 (substitute-keyword-arguments (package-arguments base)
9464 ((#:phases phases)
9465 `(modify-phases ,phases
9466 (replace 'check
9467 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9468 (native-inputs
9469 `(("python2-unittest2" ,python2-unittest2))))))
9470
9471 ;; This package is used by python2-pytest via python2-importlib-metadata,
9472 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9473 (define-public python2-contextlib2-bootstrap
9474 (hidden-package
9475 (package/inherit
9476 python2-contextlib2
9477 (name "python2-contextlib2-bootstrap")
9478 (arguments
9479 `(#:tests? #f
9480 ,@(package-arguments python2-contextlib2)))
9481 (native-inputs '()))))
9482
9483 (define-public python-texttable
9484 (package
9485 (name "python-texttable")
9486 (version "1.6.2")
9487 (source
9488 (origin
9489 (method url-fetch)
9490 (uri (pypi-uri "texttable" version))
9491 (sha256
9492 (base32
9493 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9494 (build-system python-build-system)
9495 (arguments
9496 `(#:phases
9497 (modify-phases %standard-phases
9498 (replace 'check
9499 (lambda _ (invoke "pytest" "tests.py"))))))
9500 (native-inputs
9501 `(("python-pytest" ,python-pytest)))
9502 (home-page "https://github.com/foutaise/texttable/")
9503 (synopsis "Python module for creating simple ASCII tables")
9504 (description "Texttable is a Python module for creating simple ASCII
9505 tables.")
9506 (license license:expat)))
9507
9508 (define-public python2-texttable
9509 (package-with-python2 python-texttable))
9510
9511 (define-public python-atomicwrites
9512 (package
9513 (name "python-atomicwrites")
9514 (version "1.3.0")
9515 (source (origin
9516 (method url-fetch)
9517 (uri (pypi-uri "atomicwrites" version))
9518 (sha256
9519 (base32
9520 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9521 (build-system python-build-system)
9522 (synopsis "Atomic file writes in Python")
9523 (description "Library for atomic file writes using platform dependent tools
9524 for atomic file system operations.")
9525 (home-page "https://github.com/untitaker/python-atomicwrites")
9526 (license license:expat)))
9527
9528 (define-public python2-atomicwrites
9529 (package-with-python2 python-atomicwrites))
9530
9531 (define-public python-click-threading
9532 (package
9533 (name "python-click-threading")
9534 (version "0.4.4")
9535 (source (origin
9536 (method url-fetch)
9537 (uri (pypi-uri "click-threading" version))
9538 (sha256
9539 (base32
9540 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9541 (build-system python-build-system)
9542 (propagated-inputs
9543 `(("python-click" ,python-click)))
9544 (synopsis "Utilities for multithreading in Click")
9545 (description "This package provides utilities for multithreading in Click
9546 applications.")
9547 (home-page "https://github.com/click-contrib/click-threading")
9548 (license license:expat)))
9549
9550 (define-public python-click-log
9551 (package
9552 (name "python-click-log")
9553 (version "0.3.2")
9554 (source (origin
9555 (method url-fetch)
9556 (uri (pypi-uri "click-log" version))
9557 (sha256
9558 (base32
9559 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9560 (build-system python-build-system)
9561 (propagated-inputs
9562 `(("python-click" ,python-click)))
9563 (synopsis "Logging for click applications")
9564 (description "This package provides a Python library for logging Click
9565 applications.")
9566 (home-page "https://github.com/click-contrib/click-log")
9567 (license license:expat)))
9568
9569 (define-public python-apipkg
9570 (package
9571 (name "python-apipkg")
9572 (version "1.5")
9573 (source (origin
9574 (method url-fetch)
9575 (uri (pypi-uri "apipkg" version))
9576 (sha256
9577 (base32
9578 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9579 (build-system python-build-system)
9580 (native-inputs
9581 `(("python-pytest" ,python-pytest)
9582 ("python-setuptools-scm" ,python-setuptools-scm)))
9583 (synopsis "Namespace control and lazy-import mechanism")
9584 (description "With apipkg you can control the exported namespace of a Python
9585 package and greatly reduce the number of imports for your users. It is a small
9586 pure Python module that works on virtually all Python versions.")
9587 (home-page "https://github.com/pytest-dev/apipkg")
9588 (license license:expat)))
9589
9590 (define-public python-execnet
9591 (package
9592 (name "python-execnet")
9593 (version "1.4.1")
9594 (source (origin
9595 (method url-fetch)
9596 (uri (pypi-uri "execnet" version))
9597 (sha256
9598 (base32
9599 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9600 (build-system python-build-system)
9601 (arguments
9602 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9603 ;; The two test failures are caused by the lack of an `ssh` executable.
9604 ;; The test suite can be run with pytest after the 'install' phase.
9605 #:tests? #f))
9606 (native-inputs
9607 `(("python-pytest" ,python-pytest)
9608 ("python-setuptools-scm" ,python-setuptools-scm)))
9609 (propagated-inputs
9610 `(("python-apipkg" ,python-apipkg)))
9611 (synopsis "Rapid multi-Python deployment")
9612 (description "Execnet provides a share-nothing model with
9613 channel-send/receive communication for distributing execution across many
9614 Python interpreters across version, platform and network barriers. It has a
9615 minimal and fast API targeting the following uses:
9616 @enumerate
9617 @item distribute tasks to (many) local or remote CPUs
9618 @item write and deploy hybrid multi-process applications
9619 @item write scripts to administer multiple environments
9620 @end enumerate")
9621 (home-page "https://codespeak.net/execnet/")
9622 (license license:expat)))
9623
9624 (define-public python2-execnet
9625 (package-with-python2 python-execnet))
9626
9627 (define-public python-icalendar
9628 (package
9629 (name "python-icalendar")
9630 (version "4.0.5")
9631 (source (origin
9632 (method url-fetch)
9633 (uri (pypi-uri "icalendar" version))
9634 (sha256
9635 (base32
9636 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9637 (build-system python-build-system)
9638 (propagated-inputs
9639 `(("python-dateutil" ,python-dateutil)
9640 ("python-pytz" ,python-pytz)))
9641 (synopsis "Python library for parsing iCalendar files")
9642 (description "The icalendar package is a parser/generator of iCalendar
9643 files for use with Python.")
9644 (home-page "https://github.com/collective/icalendar")
9645 (license license:bsd-2)))
9646
9647 (define-public python-args
9648 (package
9649 (name "python-args")
9650 (version "0.1.0")
9651 (source (origin
9652 (method url-fetch)
9653 (uri (pypi-uri "args" version))
9654 (sha256
9655 (base32
9656 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9657 (build-system python-build-system)
9658 (home-page "https://github.com/kennethreitz/args")
9659 (synopsis "Command-line argument parser")
9660 (description
9661 "This library provides a Python module to parse command-line arguments.")
9662 (license license:bsd-3)))
9663
9664 (define-public python2-args
9665 (package-with-python2 python-args))
9666
9667 (define-public python-clint
9668 (package
9669 (name "python-clint")
9670 (version "0.5.1")
9671 (source (origin
9672 (method url-fetch)
9673 (uri (pypi-uri "clint" version))
9674 (sha256
9675 (base32
9676 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9677 (build-system python-build-system)
9678 (arguments
9679 '(#:phases
9680 (modify-phases %standard-phases
9681 (replace 'check
9682 (lambda _ (invoke "py.test" "-v"))))))
9683 (native-inputs
9684 `(("python-pytest" ,python-pytest)))
9685 (propagated-inputs
9686 `(("python-args" ,python-args)))
9687 (home-page "https://github.com/kennethreitz/clint")
9688 (synopsis "Command-line interface tools")
9689 (description
9690 "Clint is a Python module filled with a set of tools for developing
9691 command-line applications, including tools for colored and indented
9692 output, progress bar display, and pipes.")
9693 (license license:isc)))
9694
9695 (define-public python2-clint
9696 (package-with-python2 python-clint))
9697
9698 (define-public python-rply
9699 (package
9700 (name "python-rply")
9701 (version "0.7.5")
9702 (source (origin
9703 (method url-fetch)
9704 (uri (pypi-uri "rply" version))
9705 (sha256
9706 (base32
9707 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9708 (build-system python-build-system)
9709 (propagated-inputs
9710 `(("python-appdirs" ,python-appdirs)))
9711 (home-page "https://github.com/alex/rply")
9712 (synopsis "Parser generator for Python")
9713 (description
9714 "This package provides a pure Python based parser generator, that also
9715 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9716 with a new public API, and RPython support.")
9717 (license license:bsd-3)))
9718
9719 (define-public python2-rply
9720 (package-with-python2 python-rply))
9721
9722 (define-public python-hy
9723 (package
9724 (name "python-hy")
9725 (version "0.18.0")
9726 (source (origin
9727 (method url-fetch)
9728 (uri (pypi-uri "hy" version))
9729 (sha256
9730 (base32
9731 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9732 (build-system python-build-system)
9733 (arguments
9734 '(#:phases
9735 (modify-phases %standard-phases
9736 (add-before 'install 'set-HOME
9737 (lambda _
9738 (setenv "HOME" "/tmp") #t))
9739 (replace 'check
9740 (lambda _
9741 ;; Tests require write access to HOME.
9742 (setenv "HOME" "/tmp")
9743 (invoke "nosetests"))))))
9744 (native-inputs
9745 `(("python-coverage" ,python-coverage)
9746 ("python-nose" ,python-nose)))
9747 (propagated-inputs
9748 `(("python-astor" ,python-astor)
9749 ("python-colorama" ,python-colorama)
9750 ("python-rply" ,python-rply)
9751 ("python-funcparserlib"
9752 ,python-funcparserlib)))
9753 (home-page "http://hylang.org/")
9754 (synopsis "Lisp frontend to Python")
9755 (description
9756 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9757 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9758 Python at your fingertips, in Lisp form.")
9759 (license license:expat)))
9760
9761 (define-public python2-functools32
9762 (package
9763 (name "python2-functools32")
9764 (version "3.2.3-2")
9765 (source
9766 (origin
9767 (method url-fetch)
9768 (uri (pypi-uri "functools32" version))
9769 (sha256
9770 (base32
9771 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9772 (build-system python-build-system)
9773 (arguments
9774 `(#:python ,python-2
9775 #:tests? #f)) ; no test target
9776 (home-page "https://github.com/MiCHiLU/python-functools32")
9777 (synopsis
9778 "Backport of the functools module from Python 3.2.3")
9779 (description
9780 "This package is a backport of the @code{functools} module from Python
9781 3.2.3 for use with older versions of Python and PyPy.")
9782 (license license:expat)))
9783
9784 (define-public python2-subprocess32
9785 (package
9786 (name "python2-subprocess32")
9787 (version "3.2.7")
9788 (source (origin
9789 (method url-fetch)
9790 (uri (pypi-uri "subprocess32" version))
9791 (sha256
9792 (base32
9793 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9794 (patches
9795 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9796 (build-system python-build-system)
9797 (arguments
9798 `(#:python ,python-2
9799 ;; The test suite fails with Python > 2.7.13:
9800 ;; import test.support
9801 ;; ImportError: No module named support
9802 #:tests? #f
9803 #:phases
9804 (modify-phases %standard-phases
9805 (add-after 'unpack 'patch-/bin/sh
9806 (lambda _
9807 (substitute* '("subprocess32.py"
9808 "test_subprocess32.py")
9809 (("/bin/sh") (which "sh")))
9810 #t)))))
9811 (home-page "https://github.com/google/python-subprocess32")
9812 (synopsis "Backport of the subprocess module from Python 3.2")
9813 (description
9814 "This is a backport of the @code{subprocess} standard library module
9815 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9816 new features. On POSIX systems it is guaranteed to be reliable when used
9817 in threaded applications. It includes timeout support from Python 3.3 but
9818 otherwise matches 3.2’s API.")
9819 (license license:psfl)))
9820
9821 (define-public python2-futures
9822 (package
9823 (name "python2-futures")
9824 (version "3.2.0")
9825 (source
9826 (origin
9827 (method url-fetch)
9828 (uri (pypi-uri "futures" version))
9829 (sha256
9830 (base32
9831 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9832 (build-system python-build-system)
9833 (arguments
9834 `(#:python ,python-2
9835 #:phases
9836 (modify-phases %standard-phases
9837 (replace 'check
9838 (lambda _
9839 (invoke "python" "test_futures.py")
9840 #t)))))
9841 (home-page "https://github.com/agronholm/pythonfutures")
9842 (synopsis
9843 "Backport of the concurrent.futures package from Python 3.2")
9844 (description
9845 "The concurrent.futures module provides a high-level interface for
9846 asynchronously executing callables. This package backports the
9847 concurrent.futures package from Python 3.2")
9848 (license license:bsd-3)))
9849
9850 (define-public python-promise
9851 (package
9852 (name "python-promise")
9853 (version "0.4.2")
9854 (source
9855 (origin
9856 (method url-fetch)
9857 (uri (pypi-uri "promise" version))
9858 (sha256
9859 (base32
9860 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9861 (build-system python-build-system)
9862 ;; Tests wants python-futures, which is a python2 only program, and
9863 ;; can't be found by python-promise at test time.
9864 (arguments `(#:tests? #f))
9865 (home-page "https://github.com/syrusakbary/promise")
9866 (synopsis "Promises/A+ implementation for Python")
9867 (description
9868 "Promises/A+ implementation for Python")
9869 (properties `((python2-variant . ,(delay python2-promise))))
9870 (license license:expat)))
9871
9872 (define-public python2-promise
9873 (let ((promise (package-with-python2
9874 (strip-python2-variant python-promise))))
9875 (package (inherit promise)
9876 (arguments (substitute-keyword-arguments (package-arguments promise)
9877 ((#:tests? _) #t)))
9878 (native-inputs
9879 `(("python2-futures" ,python2-futures)
9880 ("python2-pytest" ,python2-pytest)
9881 ,@(package-native-inputs promise))))))
9882
9883 (define-public python-progressbar33
9884 (package
9885 (name "python-progressbar33")
9886 (version "2.4")
9887 (source
9888 (origin
9889 (method url-fetch)
9890 (uri (pypi-uri "progressbar33" version))
9891 (sha256
9892 (base32
9893 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9894 (build-system python-build-system)
9895 (home-page "http://github.com/germangh/python-progressbar")
9896 (synopsis "Text progress bar library for Python")
9897 (description
9898 "This package provides a text progress bar library for Python. This
9899 version only differs from the original @code{progressbar} package in that it
9900 uses relative package imports instead of absolute imports, which is necessary
9901 for the module to work under Python 3.3.")
9902 ;; Either or both of these licenses may be selected.
9903 (license (list license:lgpl2.1+ license:bsd-3))))
9904
9905 (define-public python-colorama
9906 (package
9907 (name "python-colorama")
9908 (version "0.4.3")
9909 (source
9910 (origin
9911 (method url-fetch)
9912 (uri (pypi-uri "colorama" version))
9913 (sha256
9914 (base32
9915 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9916 (build-system python-build-system)
9917 (synopsis "Colored terminal text rendering for Python")
9918 (description "Colorama is a Python library for rendering colored terminal
9919 text.")
9920 (home-page "https://pypi.org/project/colorama/")
9921 (license license:bsd-3)))
9922
9923 (define-public python2-colorama
9924 (package-with-python2 python-colorama))
9925
9926 (define-public python-rsa
9927 (package
9928 (name "python-rsa")
9929 (version "3.4.2")
9930 (source
9931 (origin
9932 (method url-fetch)
9933 (uri (pypi-uri "rsa" version))
9934 (sha256
9935 (base32
9936 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9937 (build-system python-build-system)
9938 (propagated-inputs
9939 `(("python-pyasn1" ,python-pyasn1)))
9940 (synopsis "Pure-Python RSA implementation")
9941 (description "Python-RSA is a pure-Python RSA implementation. It supports
9942 encryption and decryption, signing and verifying signatures, and key
9943 generation according to PKCS#1 version 1.5. It can be used as a Python
9944 library as well as on the command line.")
9945 (home-page "https://stuvel.eu/rsa")
9946 (license license:asl2.0)))
9947
9948 (define-public python2-rsa
9949 (package-with-python2 python-rsa))
9950
9951 (define-public python-pluggy
9952 (package
9953 (name "python-pluggy")
9954 (version "0.13.1")
9955 (source
9956 (origin
9957 (method url-fetch)
9958 (uri (pypi-uri "pluggy" version))
9959 (sha256
9960 (base32
9961 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
9962 (build-system python-build-system)
9963 (native-inputs
9964 `(("python-setuptools-scm" ,python-setuptools-scm)))
9965 (synopsis "Plugin and hook calling mechanism for Python")
9966 (description "Pluggy is an extraction of the plugin manager as used by
9967 Pytest but stripped of Pytest specific details.")
9968 (home-page "https://pypi.org/project/pluggy/")
9969 (properties `((python2-variant . ,(delay python2-pluggy))))
9970 (license license:expat)))
9971
9972 (define-public python2-pluggy
9973 (let ((base (package-with-python2 (strip-python2-variant
9974 python-pluggy))))
9975 (package/inherit
9976 base
9977 (propagated-inputs
9978 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
9979
9980 ;; This package requires python2-importlib-metadata, but that package
9981 ;; ends up needing python2-pluggy via python2-pytest, so we need this
9982 ;; variant to solve the circular dependency.
9983 (define-public python2-pluggy-bootstrap
9984 (hidden-package
9985 (package/inherit
9986 python2-pluggy
9987 (name "python2-pluggy-bootstrap")
9988 (arguments
9989 `(#:tests? #f
9990 ,@(package-arguments python2-pluggy)))
9991 (propagated-inputs
9992 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
9993
9994 (define-public python-tox
9995 (package
9996 (name "python-tox")
9997 (version "2.8.1")
9998 (source
9999 (origin
10000 (method url-fetch)
10001 (uri (pypi-uri "tox" version))
10002 (sha256
10003 (base32
10004 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10005 (build-system python-build-system)
10006 (arguments
10007 ;; FIXME: Tests require pytest-timeout, which itself requires
10008 ;; pytest>=2.8.0 for installation.
10009 '(#:tests? #f))
10010 (propagated-inputs
10011 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10012 ("python-py" ,python-py)
10013 ("python-virtualenv" ,python-virtualenv)))
10014 (native-inputs
10015 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10016 ("python-pytest" ,python-pytest) ; >= 2.3.5
10017 ("python-setuptools-scm" ,python-setuptools-scm)))
10018 (home-page "https://tox.readthedocs.io")
10019 (synopsis "Virtualenv-based automation of test activities")
10020 (description "Tox is a generic virtualenv management and test command line
10021 tool. It can be used to check that a package installs correctly with
10022 different Python versions and interpreters, or run tests in each type of
10023 supported environment, or act as a frontend to continuous integration
10024 servers.")
10025 (license license:expat)))
10026
10027 (define-public python2-tox
10028 (package-with-python2 python-tox))
10029
10030 (define-public python-jmespath
10031 (package
10032 (name "python-jmespath")
10033 (version "0.9.4")
10034 (source
10035 (origin
10036 (method url-fetch)
10037 (uri (pypi-uri "jmespath" version))
10038 (sha256
10039 (base32
10040 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10041 (build-system python-build-system)
10042 (native-inputs
10043 `(("python-nose" ,python-nose)))
10044 (synopsis "JSON Matching Expressions")
10045 (description "JMESPath (pronounced “james path”) is a Python library that
10046 allows one to declaratively specify how to extract elements from a JSON
10047 document.")
10048 (home-page "https://github.com/jmespath/jmespath.py")
10049 (license license:expat)))
10050
10051 (define-public python2-jmespath
10052 (package-with-python2 python-jmespath))
10053
10054 (define-public python-botocore
10055 (package
10056 (name "python-botocore")
10057 (version "1.15.26")
10058 (source
10059 (origin
10060 (method url-fetch)
10061 (uri (pypi-uri "botocore" version))
10062 (sha256
10063 (base32
10064 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10065 (build-system python-build-system)
10066 (arguments
10067 ;; FIXME: Many tests are failing.
10068 '(#:tests? #f))
10069 (propagated-inputs
10070 `(("python-dateutil" ,python-dateutil)
10071 ("python-docutils" ,python-docutils)
10072 ("python-jmespath" ,python-jmespath)))
10073 (native-inputs
10074 `(("python-mock" ,python-mock)
10075 ("python-nose" ,python-nose)
10076 ("behave" ,behave)
10077 ("python-tox" ,python-tox)
10078 ("python-urllib3" ,python-urllib3)
10079 ("python-wheel" ,python-wheel)))
10080 (home-page "https://github.com/boto/botocore")
10081 (synopsis "Low-level interface to AWS")
10082 (description "Botocore is a Python library that provides a low-level
10083 interface to the Amazon Web Services (AWS) API.")
10084 (license license:asl2.0)))
10085
10086 (define-public python2-botocore
10087 (package-with-python2 python-botocore))
10088
10089 (define-public python-xdo
10090 (package
10091 (name "python-xdo")
10092 (version "0.3")
10093 (source (origin
10094 (method url-fetch)
10095 (uri (string-append
10096 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10097 "python-xdo_" version ".orig.tar.gz"))
10098 (sha256
10099 (base32
10100 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10101 (build-system python-build-system)
10102 (arguments
10103 '(#:phases
10104 (modify-phases %standard-phases
10105 (add-before 'install 'patch-libxdo-path
10106 ;; Hardcode the path of dynamically loaded libxdo library.
10107 (lambda* (#:key inputs #:allow-other-keys)
10108 (let ((libxdo (string-append
10109 (assoc-ref inputs "xdotool")
10110 "/lib/libxdo.so")))
10111 (substitute* "xdo/_xdo.py"
10112 (("find_library\\(\"xdo\"\\)")
10113 (simple-format #f "\"~a\"" libxdo)))
10114 #t))))
10115 #:tests? #f)) ; no tests provided
10116 (propagated-inputs
10117 `(("python-six" ,python-six)))
10118 (inputs
10119 `(("xdotool" ,xdotool)
10120 ("libX11" ,libx11)))
10121 (home-page "https://tracker.debian.org/pkg/python-xdo")
10122 (synopsis "Python library for simulating X11 keyboard/mouse input")
10123 (description "Provides bindings to libxdo for manipulating X11 via simulated
10124 input. (Note that this is mostly a legacy library; you may wish to look at
10125 python-xdo for newer bindings.)")
10126 (license license:bsd-3)))
10127
10128 (define-public python2-xdo
10129 (package-with-python2 python-xdo))
10130
10131 (define-public python-mako
10132 (package
10133 (name "python-mako")
10134 (version "1.1.1")
10135 (source
10136 (origin
10137 (method url-fetch)
10138 (uri (pypi-uri "Mako" version))
10139 (sha256
10140 (base32
10141 "193mds7lv91pphnvn6c1n55rhjkgq94asdzgrsb2fiqx7rrsd119"))))
10142 (build-system python-build-system)
10143 (arguments
10144 `(#:phases (modify-phases %standard-phases
10145 (replace 'check
10146 (lambda* (#:key tests? #:allow-other-keys)
10147 (if tests?
10148 (invoke "nosetests" "-v")
10149 (format #t "test suite not run~%"))
10150 #t)))))
10151 (propagated-inputs
10152 `(("python-markupsafe" ,python-markupsafe)))
10153 (native-inputs
10154 `(("python-mock" ,python-mock)
10155 ("python-nose" ,python-nose)))
10156 (home-page "https://www.makotemplates.org/")
10157 (synopsis "Templating language for Python")
10158 (description "Mako is a templating language for Python that compiles
10159 templates into Python modules.")
10160 (license license:expat)))
10161
10162 (define-public python2-mako
10163 (package-with-python2 python-mako))
10164
10165 (define-public python-waitress
10166 (package
10167 (name "python-waitress")
10168 (version "1.1.0")
10169 (source
10170 (origin
10171 (method url-fetch)
10172 (uri (pypi-uri "waitress" version))
10173 (patches (search-patches "python-waitress-fix-tests.patch"))
10174 (sha256
10175 (base32
10176 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10177 (build-system python-build-system)
10178 (home-page "https://github.com/Pylons/waitress")
10179 (synopsis "Waitress WSGI server")
10180 (description "Waitress is meant to be a production-quality pure-Python WSGI
10181 server with very acceptable performance.")
10182 (license license:zpl2.1)))
10183
10184 (define-public python2-waitress
10185 (package-with-python2 python-waitress))
10186
10187 (define-public python-whichcraft
10188 (package
10189 (name "python-whichcraft")
10190 (version "0.6.1")
10191 (source
10192 (origin
10193 (method url-fetch)
10194 (uri (pypi-uri "whichcraft" version))
10195 (sha256
10196 (base32
10197 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10198 (build-system python-build-system)
10199 (native-inputs
10200 `(("python-pytest" ,python-pytest)))
10201 (home-page "https://github.com/pydanny/whichcraft")
10202 (synopsis "Cross-platform cross-python shutil.which functionality")
10203 (description
10204 "This package provides a shim of the shutil.which function that's
10205 designed to work across multiple versions of Python.")
10206 (license license:bsd-3)))
10207
10208 (define-public python-cookiecutter
10209 (package
10210 (name "python-cookiecutter")
10211 (version "1.6.0")
10212 (source
10213 (origin
10214 (method url-fetch)
10215 (uri (pypi-uri "cookiecutter" version))
10216 (sha256
10217 (base32
10218 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10219 (build-system python-build-system)
10220 (native-inputs
10221 `(("python-freezegun" ,python-freezegun)
10222 ("python-pytest" ,python-pytest)
10223 ("python-pytest-catchlog" ,python-pytest-catchlog)
10224 ("python-pytest-cov" ,python-pytest-cov)
10225 ("python-pytest-mock" ,python-pytest-mock)))
10226 (propagated-inputs
10227 `(("python-binaryornot" ,python-binaryornot)
10228 ("python-click" ,python-click)
10229 ("python-future" ,python-future)
10230 ("python-jinja2" ,python-jinja2)
10231 ("python-jinja2-time" ,python-jinja2-time)
10232 ("python-poyo" ,python-poyo)
10233 ("python-requests" ,python-requests)
10234 ("python-whichcraft" ,python-whichcraft)))
10235 (home-page "https://github.com/audreyr/cookiecutter")
10236 (synopsis
10237 "Command-line utility that creates projects from project templates")
10238 (description
10239 "This package provides a command-line utility that creates projects from
10240 project templates, e.g. creating a Python package project from a Python package
10241 project template.")
10242 (license license:bsd-3)))
10243
10244 (define-public python-pyquery
10245 (package
10246 (name "python-pyquery")
10247 (version "1.2.17")
10248 (source
10249 (origin
10250 (method url-fetch)
10251 (uri (pypi-uri "pyquery" version))
10252 (sha256
10253 (base32
10254 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10255 (build-system python-build-system)
10256 (native-inputs
10257 `(("python-webob" ,python-webob)
10258 ("python-webtest" ,python-webtest)))
10259 (propagated-inputs
10260 `(("python-lxml" ,python-lxml)
10261 ("python-cssselect" ,python-cssselect)))
10262 (home-page "https://github.com/gawel/pyquery")
10263 (synopsis "Make jQuery-like queries on xml documents")
10264 (description "pyquery allows you to make jQuery queries on xml documents.
10265 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10266 fast xml and html manipulation.")
10267 (license license:bsd-3)))
10268
10269 (define-public python-anyjson
10270 (package
10271 (name "python-anyjson")
10272 (version "0.3.3")
10273 (source
10274 (origin
10275 (method url-fetch)
10276 (uri (pypi-uri "anyjson" version))
10277 (sha256
10278 (base32
10279 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10280 (build-system python-build-system)
10281 (arguments
10282 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10283 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10284 ;; whatever) so this transformation needs to be done before the tests
10285 ;; can be run. Maybe we could add a build step to transform beforehand
10286 ;; but it could be annoying/difficult.
10287 ;; We can enable tests for the Python 2 version, though, and do below.
10288 #:tests? #f))
10289 (home-page "https://bitbucket.org/runeh/anyjson/")
10290 (synopsis
10291 "Wraps best available JSON implementation in a common interface")
10292 (description
10293 "Anyjson loads whichever is the fastest JSON module installed
10294 and provides a uniform API regardless of which JSON implementation is used.")
10295 (license license:bsd-3)
10296 (properties `((python2-variant . ,(delay python2-anyjson))))))
10297
10298 (define-public python2-anyjson
10299 (let ((anyjson (package-with-python2
10300 (strip-python2-variant python-anyjson))))
10301 (package
10302 (inherit anyjson)
10303 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10304 #:tests? #t
10305 ,@(package-arguments anyjson)))
10306 (native-inputs `(("python2-nose" ,python2-nose))))))
10307
10308 (define-public python-amqp
10309 (package
10310 (name "python-amqp")
10311 (version "2.3.2")
10312 (source
10313 (origin
10314 (method url-fetch)
10315 (uri (pypi-uri "amqp" version))
10316 (sha256
10317 (base32
10318 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10319 (build-system python-build-system)
10320 (native-inputs
10321 `(("python-case" ,python-case)
10322 ("python-pytest-sugar" ,python-pytest-sugar)
10323 ("python-mock" ,python-mock)))
10324 (propagated-inputs
10325 `(("python-vine" ,python-vine)))
10326 (home-page "https://github.com/celery/py-amqp")
10327 (synopsis
10328 "Low-level AMQP client for Python (fork of amqplib)")
10329 (description
10330 "This is a fork of amqplib which was originally written by Barry Pederson.
10331 It is maintained by the Celery project, and used by kombu as a pure python
10332 alternative when librabbitmq is not available.")
10333 (license license:lgpl2.1+)
10334 (properties `((python2-variant . ,(delay python2-amqp))))))
10335
10336 (define-public python2-amqp
10337 (let ((amqp (package-with-python2
10338 (strip-python2-variant python-amqp))))
10339 (package
10340 (inherit amqp)
10341 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10342 ;; unmaintained. Weirdly, does not do this on the python 3
10343 ;; version?
10344 #:tests? #f
10345 ,@(package-arguments amqp))))))
10346
10347 (define-public python-txamqp
10348 (package
10349 (name "python-txamqp")
10350 (version "0.8.2")
10351 (source
10352 (origin
10353 (method url-fetch)
10354 (uri (pypi-uri "txAMQP" version))
10355 (sha256
10356 (base32
10357 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10358 (build-system python-build-system)
10359 (propagated-inputs
10360 `(("python-six" ,python-six)
10361 ("python-twisted" ,python-twisted)))
10362 (home-page "https://github.com/txamqp/txamqp")
10363 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10364 (description
10365 "This package provides a Python library for communicating with AMQP peers
10366 and brokers using the asynchronous networking framework Twisted. It contains
10367 all the necessary code to connect, send and receive messages to/from an
10368 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10369 also includes support for using Thrift RPC over AMQP in Twisted
10370 applications.")
10371 (license license:asl2.0)))
10372
10373 (define-public python2-txamqp
10374 (package-with-python2 python-txamqp))
10375
10376 (define-public python-kombu
10377 (package
10378 (name "python-kombu")
10379 (version "4.2.2")
10380 (source
10381 (origin
10382 (method url-fetch)
10383 (uri (pypi-uri "kombu" version))
10384 (sha256
10385 (base32
10386 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10387 (build-system python-build-system)
10388 (native-inputs
10389 `(("python-mock" ,python-mock)
10390 ("python-case" ,python-case)
10391 ("python-pyro4" ,python-pyro4)
10392 ("python-pytest-sugar" ,python-pytest-sugar)
10393 ("python-pytz" ,python-pytz)))
10394 (propagated-inputs
10395 `(("python-anyjson" ,python-anyjson)
10396 ("python-amqp" ,python-amqp)
10397 ("python-redis" ,python-redis)))
10398 (home-page "https://kombu.readthedocs.io")
10399 (synopsis "Message passing library for Python")
10400 (description "The aim of Kombu is to make messaging in Python as easy as
10401 possible by providing an idiomatic high-level interface for the AMQ protocol,
10402 and also provide proven and tested solutions to common messaging problems.
10403 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10404 message orientation, queuing, routing, reliability and security, for which the
10405 RabbitMQ messaging server is the most popular implementation.")
10406 (license license:bsd-3)
10407 (properties `((python2-variant . ,(delay python2-kombu))))))
10408
10409 (define-public python2-kombu
10410 (let ((kombu (package-with-python2
10411 (strip-python2-variant python-kombu))))
10412 (package
10413 (inherit kombu)
10414 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10415 ;; It works fine on the python3 variant.
10416 #:tests? #f
10417 ,@(package-arguments kombu)))
10418 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10419 ,@(package-native-inputs kombu))))))
10420
10421 (define-public python-billiard
10422 (package
10423 (name "python-billiard")
10424 (version "3.5.0.5")
10425 (source
10426 (origin
10427 (method url-fetch)
10428 (uri (pypi-uri "billiard" version))
10429 (sha256
10430 (base32
10431 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10432 (build-system python-build-system)
10433 (native-inputs
10434 `(("python-case" ,python-case)
10435 ("python-pytest" ,python-pytest)))
10436 (home-page "https://github.com/celery/billiard")
10437 (synopsis
10438 "Python multiprocessing fork with improvements and bugfixes")
10439 (description
10440 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10441 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10442 pyprocessing package. This standalone variant is intended to be compatible with
10443 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10444 (license license:bsd-3)
10445 (properties `((python2-variant . ,(delay python2-billiard))))))
10446
10447 (define-public python2-billiard
10448 (let ((billiard (package-with-python2
10449 (strip-python2-variant python-billiard))))
10450 (package
10451 (inherit billiard)
10452 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10453 ("python2-mock" ,python2-mock)
10454 ,@(package-native-inputs billiard))))))
10455
10456 (define-public python-celery
10457 (package
10458 (name "python-celery")
10459 (version "4.2.1")
10460 (source
10461 (origin
10462 (method url-fetch)
10463 (uri (pypi-uri "celery" version))
10464 (sha256
10465 (base32
10466 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10467 (build-system python-build-system)
10468 (arguments
10469 '(;; TODO The tests fail with Python 3.7
10470 ;; https://github.com/celery/celery/issues/4849
10471 #:tests? #f
10472 #:phases
10473 (modify-phases %standard-phases
10474 (add-after 'unpack 'patch-requirements
10475 (lambda _
10476 (substitute* "requirements/test.txt"
10477 (("pytest>=3\\.0,<3\\.3")
10478 "pytest>=3.0"))
10479 #t)))))
10480 (native-inputs
10481 `(("python-case" ,python-case)
10482 ("python-pytest" ,python-pytest)))
10483 (propagated-inputs
10484 `(("python-pytz" ,python-pytz)
10485 ("python-billiard" ,python-billiard)
10486 ("python-kombu" ,python-kombu)))
10487 (home-page "https://celeryproject.org")
10488 (synopsis "Distributed Task Queue")
10489 (description "Celery is an asynchronous task queue/job queue based on
10490 distributed message passing. It is focused on real-time operation, but
10491 supports scheduling as well. The execution units, called tasks, are executed
10492 concurrently on a single or more worker servers using multiprocessing,
10493 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10494 synchronously (wait until ready).")
10495 (license license:bsd-3)
10496 (properties `((python2-variant . ,(delay python2-celery))))))
10497
10498 (define-public python2-celery
10499 (let ((celery (package-with-python2
10500 (strip-python2-variant python-celery))))
10501 (package
10502 (inherit celery)
10503 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10504 ("python2-mock" ,python2-mock)
10505 ,@(package-native-inputs celery))))))
10506
10507 (define-public python-translitcodec
10508 (package
10509 (name "python-translitcodec")
10510 (version "0.4.0")
10511 (source
10512 (origin
10513 (method url-fetch)
10514 (uri (pypi-uri "translitcodec" version))
10515 (sha256
10516 (base32
10517 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10518 (build-system python-build-system)
10519 (arguments
10520 `(#:tests? #f)) ; no tests provided
10521 (home-page
10522 "https://github.com/claudep/translitcodec")
10523 (synopsis
10524 "Unicode to 8-bit charset transliteration codec")
10525 (description
10526 "This package contains codecs for transliterating ISO 10646 texts into
10527 best-effort representations using smaller coded character sets (ASCII,
10528 ISO 8859, etc.).")
10529 (license license:expat)))
10530
10531 (define-public python2-translitcodec
10532 (package-with-python2 python-translitcodec))
10533
10534 (define-public python-editor
10535 (package
10536 (name "python-editor")
10537 (version "1.0.4")
10538 (source
10539 (origin
10540 (method url-fetch)
10541 (uri (pypi-uri "python-editor" version))
10542 (sha256
10543 (base32
10544 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10545 (build-system python-build-system)
10546 (arguments
10547 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10548 (home-page "https://github.com/fmoo/python-editor")
10549 (synopsis "Programmatically open an editor, capture the result")
10550 (description
10551 "python-editor is a library that provides the editor module for
10552 programmatically interfacing with your system's $EDITOR.")
10553 (license license:asl2.0)))
10554
10555 (define-public python2-editor
10556 (package-with-python2 python-editor))
10557
10558 (define-public python-vobject
10559 (package
10560 (name "python-vobject")
10561 (version "0.9.6.1")
10562 (source (origin
10563 (method url-fetch)
10564 (uri (pypi-uri "vobject" version))
10565 (sha256
10566 (base32
10567 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10568 (build-system python-build-system)
10569 (arguments
10570 '(;; The test suite relies on some non-portable Windows interfaces.
10571 #:tests? #f))
10572 (propagated-inputs
10573 `(("python-dateutil" ,python-dateutil)
10574 ("python-pyicu" ,python-pyicu)))
10575 (synopsis "Parse and generate vCard and vCalendar files")
10576 (description "Vobject is intended to be a full featured Python package for
10577 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10578 are supported and well tested. vCard 3.0 files are supported, and all data
10579 should be imported, but only a few components are understood in a sophisticated
10580 way.")
10581 (home-page "https://eventable.github.io/vobject/")
10582 (license license:asl2.0)))
10583
10584 (define-public python2-vobject
10585 (package-with-python2 python-vobject))
10586
10587 (define-public python-munkres
10588 (package
10589 (name "python-munkres")
10590 (version "1.0.8")
10591 (source (origin
10592 (method url-fetch)
10593 (uri (pypi-uri "munkres" version))
10594 (sha256
10595 (base32
10596 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10597 (build-system python-build-system)
10598 (arguments
10599 '(#:tests? #f)) ; no test suite
10600 (home-page "https://software.clapper.org/munkres/")
10601 (synopsis "Implementation of the Munkres algorithm")
10602 (description "The Munkres module provides an implementation of the Munkres
10603 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10604 useful for solving the Assignment Problem.")
10605 (license license:bsd-3)))
10606
10607 (define-public python2-munkres
10608 (package-with-python2 python-munkres))
10609
10610 (define-public python-whoosh
10611 (package
10612 (name "python-whoosh")
10613 (version "2.7.4")
10614 (source
10615 (origin
10616 (method url-fetch)
10617 (uri (pypi-uri "Whoosh" version))
10618 (sha256
10619 (base32
10620 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10621 (build-system python-build-system)
10622 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10623 (native-inputs
10624 `(("python-pytest" ,python-pytest)))
10625 (home-page "https://bitbucket.org/mchaput/whoosh")
10626 (synopsis "Full text indexing, search, and spell checking library")
10627 (description
10628 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10629 checking library.")
10630 (license license:bsd-2)))
10631
10632 (define-public python2-whoosh
10633 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10634 (package (inherit whoosh)
10635 (propagated-inputs
10636 `(("python2-backport-ssl-match-hostname"
10637 ,python2-backport-ssl-match-hostname)
10638 ,@(package-propagated-inputs whoosh))))))
10639
10640 (define-public python-pathlib
10641 (package
10642 (name "python-pathlib")
10643 (version "1.0.1")
10644 (source (origin
10645 (method url-fetch)
10646 (uri (pypi-uri "pathlib" version))
10647 (sha256
10648 (base32
10649 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10650 (build-system python-build-system)
10651 ;; The tests depend on the internal "test" module, which does not provide
10652 ;; a stable interface.
10653 (arguments `(#:tests? #f))
10654 (home-page "https://pathlib.readthedocs.org/")
10655 (synopsis "Object-oriented file system paths")
10656 (description "Pathlib offers a set of classes to handle file system paths.
10657 It offers the following advantages over using string objects:
10658
10659 @enumerate
10660 @item No more cumbersome use of os and os.path functions. Everything can
10661 be done easily through operators, attribute accesses, and method calls.
10662 @item Embodies the semantics of different path types. For example,
10663 comparing Windows paths ignores casing.
10664 @item Well-defined semantics, eliminating any inconsistencies or
10665 ambiguities (forward vs. backward slashes, etc.).
10666 @end enumerate
10667
10668 Note: In Python 3.4, pathlib is now part of the standard library. For other
10669 Python versions please consider python-pathlib2 instead, which tracks the
10670 standard library module. This module (python-pathlib) isn't maintained
10671 anymore.")
10672 (license license:expat)))
10673
10674 (define-public python2-pathlib
10675 (package-with-python2 python-pathlib))
10676
10677 (define-public python2-pathlib2
10678 (package
10679 (name "python2-pathlib2")
10680 (version "2.3.5")
10681 (source (origin
10682 (method url-fetch)
10683 (uri (pypi-uri "pathlib2" version))
10684 (sha256
10685 (base32
10686 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10687 (build-system python-build-system)
10688 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10689 ;; version is 3.4 which already includes this package as part of the
10690 ;; standard library.
10691 (arguments
10692 `(#:python ,python-2))
10693 (propagated-inputs
10694 `(("python2-scandir" ,python2-scandir)
10695 ("python2-six" ,python2-six)))
10696 (home-page "https://pypi.org/project/pathlib2/")
10697 (synopsis "Object-oriented file system paths - backport of standard
10698 pathlib module")
10699 (description "The goal of pathlib2 is to provide a backport of standard
10700 pathlib module which tracks the standard library module, so all the newest
10701 features of the standard pathlib can be used also on older Python versions.
10702
10703 Pathlib offers a set of classes to handle file system paths. It offers the
10704 following advantages over using string objects:
10705
10706 @enumerate
10707 @item No more cumbersome use of os and os.path functions. Everything can
10708 be done easily through operators, attribute accesses, and method calls.
10709 @item Embodies the semantics of different path types. For example,
10710 comparing Windows paths ignores casing.
10711 @item Well-defined semantics, eliminating any inconsistencies or
10712 ambiguities (forward vs. backward slashes, etc.).
10713 @end enumerate")
10714 (license license:expat)))
10715
10716 (define-public python2-pathlib2-bootstrap
10717 (hidden-package
10718 (package
10719 (inherit python2-pathlib2)
10720 (name "python2-pathlib2-bootstrap")
10721 (propagated-inputs
10722 `(("python2-scandir" ,python2-scandir)
10723 ("python2-six" ,python2-six-bootstrap))))))
10724
10725 (define-public python-jellyfish
10726 (package
10727 (name "python-jellyfish")
10728 (version "0.5.6")
10729 (source (origin
10730 (method url-fetch)
10731 (uri (pypi-uri "jellyfish" version))
10732 (sha256
10733 (base32
10734 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10735 (build-system python-build-system)
10736 (native-inputs
10737 `(("python-pytest" ,python-pytest)))
10738 (home-page "https://github.com/jamesturk/jellyfish")
10739 (synopsis "Approximate and phonetic matching of strings")
10740 (description "Jellyfish uses a variety of string comparison and phonetic
10741 encoding algorithms to do fuzzy string matching.")
10742 (license license:bsd-2)
10743 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10744
10745 (define-public python2-jellyfish
10746 (let ((jellyfish (package-with-python2
10747 (strip-python2-variant python-jellyfish))))
10748 (package (inherit jellyfish)
10749 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10750 ,@(package-native-inputs jellyfish))))))
10751
10752 (define-public python2-unicodecsv
10753 (package
10754 (name "python2-unicodecsv")
10755 (version "0.14.1")
10756 (source (origin
10757 (method git-fetch)
10758 ;; The test suite is not included in the PyPi release.
10759 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10760 (uri (git-reference
10761 (url "https://github.com/jdunck/python-unicodecsv")
10762 (commit version)))
10763 (file-name (git-file-name name version))
10764 (sha256
10765 (base32
10766 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10767 (build-system python-build-system)
10768 (arguments
10769 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10770 #:python ,python-2))
10771 (native-inputs
10772 `(("python2-unittest2" ,python2-unittest2)))
10773 (home-page "https://github.com/jdunck/python-unicodecsv")
10774 (synopsis "Unicode CSV module for Python 2")
10775 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10776 module, adding support for Unicode strings.")
10777 (license license:bsd-2)))
10778
10779 (define-public python-rarfile
10780 (package
10781 (name "python-rarfile")
10782 (version "2.8")
10783 (source (origin
10784 (method url-fetch)
10785 (uri (pypi-uri "rarfile" version))
10786 (sha256
10787 (base32
10788 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10789 (build-system python-build-system)
10790 (arguments
10791 '(#:phases
10792 (modify-phases %standard-phases
10793 (replace 'check
10794 ;; Many tests fail, but the installation proceeds.
10795 (lambda _ (invoke "make" "-C" "test" "test"))))))
10796 (native-inputs
10797 `(("which" ,which))) ; required for tests
10798 (propagated-inputs
10799 `(("libarchive" ,libarchive)))
10800 (home-page "https://github.com/markokr/rarfile")
10801 (synopsis "RAR archive reader for Python")
10802 (description "This is Python module for RAR archive reading. The interface
10803 is made as zipfile like as possible.")
10804 (license license:isc)))
10805
10806 (define-public python2-rarfile
10807 (package-with-python2 python-rarfile))
10808
10809 (define-public python-magic
10810 (package
10811 (name "python-magic")
10812 (version "0.4.15")
10813 (source
10814 (origin
10815 (method url-fetch)
10816 (uri (pypi-uri "python-magic" version))
10817 (sha256
10818 (base32
10819 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10820 (file-name (string-append name "-" version "-checkout"))))
10821 (build-system python-build-system)
10822 (arguments
10823 ;; The tests are unreliable, so don't run them. The tests fail
10824 ;; under Python3 because they were written for Python2 and
10825 ;; contain import statements that do not work in Python3. One of
10826 ;; the tests fails under Python2 because its assertions are
10827 ;; overly stringent; it relies on comparing output strings which
10828 ;; are brittle and can change depending on the version of
10829 ;; libmagic being used and the system on which the test is
10830 ;; running. In my case, under GuixSD 0.10.0, only one test
10831 ;; failed, and it seems to have failed only because the version
10832 ;; of libmagic that is packaged in Guix outputs a slightly
10833 ;; different (but not wrong) string than the one that the test
10834 ;; expected.
10835 '(#:tests? #f
10836 #:phases (modify-phases %standard-phases
10837 ;; Replace a specific method call with a hard-coded
10838 ;; path to the necessary libmagic.so file in the
10839 ;; store. If we don't do this, then the method call
10840 ;; will fail to find the libmagic.so file, which in
10841 ;; turn will cause any application using
10842 ;; python-magic to fail.
10843 (add-before 'build 'hard-code-path-to-libmagic
10844 (lambda* (#:key inputs #:allow-other-keys)
10845 (let ((file (assoc-ref inputs "file")))
10846 (substitute* "magic.py"
10847 (("ctypes.util.find_library\\('magic'\\)")
10848 (string-append "'" file "/lib/libmagic.so'")))
10849 #t)))
10850 (add-before 'install 'disable-egg-compression
10851 (lambda _
10852 (let ((port (open-file "setup.cfg" "a")))
10853 (display "\n[easy_install]\nzip_ok = 0\n"
10854 port)
10855 (close-port port)
10856 #t))))))
10857 (inputs
10858 ;; python-magic needs to be able to find libmagic.so.
10859 `(("file" ,file)))
10860 (home-page
10861 "https://github.com/ahupp/python-magic")
10862 (synopsis
10863 "File type identification using libmagic")
10864 (description
10865 "This module uses ctypes to access the libmagic file type
10866 identification library. It makes use of the local magic database and
10867 supports both textual and MIME-type output. Note that this module and
10868 the python-file module both provide a \"magic.py\" file; these two
10869 modules, which are different and were developed separately, both serve
10870 the same purpose: to provide Python bindings for libmagic.")
10871 (license license:expat)))
10872
10873 (define-public python2-magic
10874 (package-with-python2 python-magic))
10875
10876 (define-public python2-s3cmd
10877 (package
10878 (name "python2-s3cmd")
10879 (version "1.6.1")
10880 (source
10881 (origin
10882 (method url-fetch)
10883 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10884 "s3cmd-" version ".tar.gz"))
10885 (sha256
10886 (base32
10887 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10888 (build-system python-build-system)
10889 (arguments
10890 ;; s3cmd is written for python2 only and contains no tests.
10891 `(#:python ,python-2
10892 #:tests? #f))
10893 (propagated-inputs
10894 `(("python2-dateutil" ,python2-dateutil)
10895 ;; The python-file package also provides a magic.py module.
10896 ;; This is an unfortunate state of affairs; however, s3cmd
10897 ;; fails to install if it cannot find specifically the
10898 ;; python-magic package. Thus we include it, instead of using
10899 ;; python-file. Ironically, s3cmd sometimes works better
10900 ;; without libmagic bindings at all:
10901 ;; https://github.com/s3tools/s3cmd/issues/198
10902 ("python2-magic" ,python2-magic)))
10903 (home-page "https://s3tools.org/s3cmd")
10904 (synopsis "Command line tool for S3-compatible storage services")
10905 (description
10906 "S3cmd is a command line tool for uploading, retrieving and managing data
10907 in storage services that are compatible with the Amazon Simple Storage
10908 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10909 GnuPG encryption, and more. It also supports management of Amazon's
10910 CloudFront content delivery network.")
10911 (license license:gpl2+)))
10912
10913 (define-public python-pkgconfig
10914 (package
10915 (name "python-pkgconfig")
10916 (version "1.3.1")
10917 (source
10918 (origin
10919 (method url-fetch)
10920 (uri (pypi-uri "pkgconfig" version))
10921 (sha256
10922 (base32
10923 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10924 (build-system python-build-system)
10925 (native-inputs
10926 `(("python-nose" ,python-nose)))
10927 (inputs
10928 `(("pkg-config" ,pkg-config)))
10929 (arguments
10930 `(#:phases
10931 (modify-phases %standard-phases
10932 (add-before 'build 'patch
10933 ;; Hard-code the path to pkg-config.
10934 (lambda _
10935 (substitute* "pkgconfig/pkgconfig.py"
10936 (("cmd = 'pkg-config")
10937 (string-append "cmd = '" (which "pkg-config"))))
10938 #t))
10939 (replace 'check
10940 (lambda _
10941 (invoke "nosetests" "test.py"))))))
10942 (home-page "https://github.com/matze/pkgconfig")
10943 (synopsis "Python interface for pkg-config")
10944 (description "This module provides a Python interface to pkg-config. It
10945 can be used to find all pkg-config packages, check if a package exists,
10946 check if a package meets certain version requirements, query CFLAGS and
10947 LDFLAGS and parse the output to build extensions with setup.py.")
10948 (license license:expat)))
10949
10950 (define-public python2-pkgconfig
10951 (package-with-python2 python-pkgconfig))
10952
10953 (define-public python-bz2file
10954 (package
10955 (name "python-bz2file")
10956 (version "0.98")
10957 (source
10958 (origin
10959 (method url-fetch)
10960 (uri (pypi-uri "bz2file" version))
10961 (sha256
10962 (base32
10963 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10964 (build-system python-build-system)
10965 (arguments
10966 `(#:tests? #f)) ; Tests use deprecated python modules.
10967 (home-page "https://github.com/nvawda/bz2file")
10968 (synopsis "Read and write bzip2-compressed files")
10969 (description
10970 "Bz2file is a Python library for reading and writing bzip2-compressed
10971 files. It contains a drop-in replacement for the I/O interface in the
10972 standard library's @code{bz2} module, including features from the latest
10973 development version of CPython that are not available in older releases.")
10974 (license license:asl2.0)))
10975
10976 (define-public python2-bz2file
10977 (package-with-python2 python-bz2file))
10978
10979 (define-public python-future
10980 (package
10981 (name "python-future")
10982 (version "0.17.1")
10983 (source
10984 (origin
10985 (method url-fetch)
10986 (uri (pypi-uri "future" version))
10987 (sha256
10988 (base32
10989 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
10990 (build-system python-build-system)
10991 ;; Many tests connect to the network or are otherwise flawed.
10992 ;; https://github.com/PythonCharmers/python-future/issues/210
10993 (arguments
10994 `(#:tests? #f))
10995 (home-page "https://python-future.org")
10996 (synopsis "Single-source support for Python 3 and 2")
10997 (description
10998 "@code{python-future} is the missing compatibility layer between Python 2 and
10999 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11000 to support both Python 2 and Python 3 with minimal overhead.")
11001 (license license:expat)))
11002
11003 (define-public python2-future
11004 (package-with-python2 python-future))
11005
11006 (define-public python-cysignals
11007 (package
11008 (name "python-cysignals")
11009 (version "1.9.0")
11010 (source
11011 (origin
11012 (method url-fetch)
11013 (uri (pypi-uri "cysignals" version))
11014 (sha256
11015 (base32
11016 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11017 (build-system python-build-system)
11018 (native-inputs
11019 `(("python-cython" ,python-cython)
11020 ("python-sphinx" ,python-sphinx)))
11021 (inputs
11022 `(("pari-gp" ,pari-gp)))
11023 (arguments
11024 `(#:modules ((guix build python-build-system)
11025 ((guix build gnu-build-system) #:prefix gnu:)
11026 (guix build utils))
11027 ;; FIXME: Tests are executed after installation and currently fail
11028 ;; when not installing into standard locations; the author is working
11029 ;; on a fix.
11030 #:tests? #f
11031 #:phases
11032 (modify-phases %standard-phases
11033 (add-before
11034 'build 'configure
11035 (assoc-ref gnu:%standard-phases 'configure)))))
11036 (home-page
11037 "https://github.com/sagemath/cysignals")
11038 (synopsis
11039 "Handling of interrupts and signals for Cython")
11040 (description
11041 "The cysignals package provides mechanisms to handle interrupts (and
11042 other signals and errors) in Cython code, using two related approaches,
11043 for mixed Cython/Python code or external C libraries and pure Cython code,
11044 respectively.")
11045 (license license:lgpl3+)))
11046
11047 (define-public python2-cysignals
11048 (package-with-python2 python-cysignals))
11049
11050 (define-public python2-shedskin
11051 (package
11052 (name "python2-shedskin")
11053 (version "0.9.4")
11054 (source
11055 (origin
11056 (method url-fetch)
11057 (uri (string-append "https://github.com/shedskin/shedskin/"
11058 "releases/download/v" version
11059 "/shedskin-" version ".tgz"))
11060 (sha256
11061 (base32
11062 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11063 (build-system python-build-system)
11064 (arguments
11065 `(#:python ,python-2
11066 #:phases (modify-phases %standard-phases
11067 (add-after 'unpack 'fix-resulting-include-libs
11068 (lambda* (#:key inputs #:allow-other-keys)
11069 (let ((libgc (assoc-ref inputs "libgc"))
11070 (pcre (assoc-ref inputs "pcre")))
11071 (substitute* "shedskin/makefile.py"
11072 (("variable == 'CCFLAGS':[ ]*")
11073 (string-append "variable == 'CCFLAGS':\n"
11074 " line += ' -I " pcre "/include"
11075 " -I " libgc "/include'"))
11076 (("variable == 'LFLAGS':[ ]*")
11077 (string-append "variable == 'LFLAGS':\n"
11078 " line += ' -L" pcre "/lib"
11079 " -L " libgc "/lib'")))
11080 #t))))))
11081 (inputs `(("pcre" ,pcre)
11082 ("libgc" ,libgc)))
11083 (home-page "https://shedskin.github.io/")
11084 (synopsis "Experimental Python-2 to C++ Compiler")
11085 (description (string-append "This is an experimental compiler for a subset of
11086 Python. It generates C++ code and a Makefile."))
11087 (license (list license:gpl3 license:bsd-3 license:expat))))
11088
11089 (define-public python2-rope
11090 (package
11091 (name "python2-rope")
11092 (version "0.11.0")
11093 (source
11094 (origin
11095 (method url-fetch)
11096 (uri (pypi-uri "rope" version))
11097 (sha256
11098 (base32
11099 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11100 (arguments
11101 ;; Rope has only partial python3 support, see `python-rope'
11102 `(#:python ,python-2))
11103 (build-system python-build-system)
11104 (native-inputs
11105 `(("python2-unittest2" ,python2-unittest2)))
11106 (home-page "https://github.com/python-rope/rope")
11107 (synopsis "Refactoring library for Python")
11108 (description "Rope is a refactoring library for Python. It facilitates
11109 the renaming, moving and extracting of attributes, functions, modules, fields
11110 and parameters in Python 2 source code. These refactorings can also be applied
11111 to occurrences in strings and comments.")
11112 (license license:gpl2)))
11113
11114 (define-public python-rope
11115 (package
11116 (inherit python2-rope)
11117 (name "python-rope")
11118 (arguments `(#:python ,python-wrapper
11119 ;; XXX: Only partial python3 support, results in some failing
11120 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11121 #:tests? #f))
11122 (properties `((python2-variant . ,(delay python2-rope))))))
11123
11124 (define-public python-py3status
11125 (package
11126 (name "python-py3status")
11127 (version "3.21")
11128 (source
11129 (origin
11130 (method url-fetch)
11131 (uri (pypi-uri "py3status" version))
11132 (sha256
11133 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11134 (build-system python-build-system)
11135 (inputs
11136 `(("file" ,file)))
11137 (arguments
11138 '(#:phases
11139 (modify-phases %standard-phases
11140 ;; 'file' is used for detection of configuration file encoding
11141 ;; let's make link the dependency to particular input
11142 (add-before 'build 'patch-file-path
11143 (lambda* (#:key inputs #:allow-other-keys)
11144 (let ((file-path (assoc-ref inputs "file")))
11145 (substitute* "py3status/parse_config.py"
11146 (("\\[\"file\", \"-b\"")
11147 (string-append "['" file-path "/bin/file', '-b'")))
11148 #t))))
11149 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11150 (home-page "https://github.com/ultrabug/py3status")
11151 (synopsis "Extensible i3status wrapper written in Python")
11152 (description "py3status is an i3status wrapper which extends i3status
11153 functionality in a modular way, allowing you to extend your panel with your
11154 own code, responding to click events and updating clock every second.")
11155 (license license:bsd-3)))
11156
11157 (define-public python-tblib
11158 (package
11159 (name "python-tblib")
11160 (version "1.6.0")
11161 (source (origin
11162 (method url-fetch)
11163 (uri (pypi-uri "tblib" version))
11164 (sha256
11165 (base32
11166 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11167 (build-system python-build-system)
11168 (arguments
11169 `(#:phases
11170 (modify-phases %standard-phases
11171 (replace 'check
11172 (lambda _
11173 ;; Upstream runs tests after installation and the package itself
11174 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11175 ;; found.
11176 (setenv "PYTHONPATH"
11177 (string-append (getcwd) "/build/lib:"
11178 (getenv "PYTHONPATH")))
11179 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11180 (native-inputs
11181 `(("python-pytest" ,python-pytest)
11182 ("python-six" ,python-six)))
11183 (home-page "https://github.com/ionelmc/python-tblib")
11184 (synopsis "Traceback serialization library")
11185 (description
11186 "Traceback serialization allows you to:
11187
11188 @enumerate
11189 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11190 different processes. This allows better error handling when running code over
11191 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11192
11193 @item Parse traceback strings and raise with the parsed tracebacks.
11194 @end enumerate\n")
11195 (license license:bsd-3)))
11196
11197 (define-public python2-tblib
11198 (package-with-python2 python-tblib))
11199
11200 (define-public python-greenlet
11201 (package
11202 (name "python-greenlet")
11203 (version "0.4.15")
11204 (source (origin
11205 (method url-fetch)
11206 (uri (pypi-uri "greenlet" version))
11207 (sha256
11208 (base32
11209 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
11210 (build-system python-build-system)
11211 (home-page "https://greenlet.readthedocs.io/")
11212 (synopsis "Lightweight in-process concurrent programming")
11213 (description
11214 "Greenlet package is a spin-off of Stackless, a version of CPython
11215 that supports micro-threads called \"tasklets\". Tasklets run
11216 pseudo-concurrently (typically in a single or a few OS-level threads) and
11217 are synchronized with data exchanges on \"channels\".")
11218 (license (list license:psfl license:expat))))
11219
11220 (define-public python2-greenlet
11221 (package-with-python2 python-greenlet))
11222
11223 (define-public python-objgraph
11224 (package
11225 (name "python-objgraph")
11226 (version "3.4.1")
11227 (source
11228 (origin
11229 (method url-fetch)
11230 (uri (pypi-uri "objgraph" version))
11231 (sha256
11232 (base32
11233 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11234 (build-system python-build-system)
11235 (propagated-inputs
11236 `(("python-graphviz" ,python-graphviz)))
11237 (native-inputs
11238 `(("python-mock" ,python-mock)
11239 ("graphviz" ,graphviz)))
11240 (home-page "https://mg.pov.lt/objgraph/")
11241 (synopsis "Draw Python object reference graphs with graphviz")
11242 (description
11243 "This package provides tools to draw Python object reference graphs with
11244 graphviz.")
11245 (license license:expat)))
11246
11247 (define-public python2-objgraph
11248 (package-with-python2 python-objgraph))
11249
11250 (define-public python-gevent
11251 (package
11252 (name "python-gevent")
11253 (version "20.5.0")
11254 (source (origin
11255 (method url-fetch)
11256 (uri (pypi-uri "gevent" version))
11257 (sha256
11258 (base32
11259 "1yppsrs0ccld9j9zfbsd0bxb987b2zkh2ar7whjxcrqzpkvg3iqx"))
11260 (modules '((guix build utils)))
11261 (snippet
11262 '(begin
11263 ;; unbunding libev and c-ares
11264 (delete-file-recursively "deps")
11265 #t))))
11266 (build-system python-build-system)
11267 (arguments
11268 `(#:modules ((ice-9 ftw)
11269 (ice-9 match)
11270 (srfi srfi-26)
11271 (guix build utils)
11272 (guix build python-build-system))
11273 #:phases (modify-phases %standard-phases
11274 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11275 (lambda _
11276 (substitute* "src/gevent/subprocess.py"
11277 (("/bin/sh") (which "sh")))
11278 (for-each (lambda (file)
11279 (substitute* file
11280 (("/bin/sh") (which "sh"))
11281 (("/bin/true") (which "true"))))
11282 (find-files "src/greentest" "\\.py$"))
11283 #t))
11284 (add-before 'build 'do-not-use-bundled-sources
11285 (lambda _
11286 (setenv "GEVENTSETUP_EMBED" "0")
11287
11288 ;; Prevent building bundled libev.
11289 (substitute* "setup.py"
11290 (("run_make=_BUILDING")
11291 "run_make=False"))
11292 #t))
11293 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11294 (lambda* (#:key inputs #:allow-other-keys)
11295 (let ((greenlet (string-append
11296 (assoc-ref inputs "python-greenlet")
11297 "/include")))
11298 (match (scandir greenlet
11299 (lambda (item)
11300 (string-prefix? "python" item)))
11301 ((python)
11302 (setenv "C_INCLUDE_PATH"
11303 (string-append greenlet "/" python ":"
11304 (or (getenv "C_INCLUDE_PATH")
11305 ""))))))
11306 #t))
11307 (add-before 'check 'pretend-to-be-CI
11308 (lambda _
11309 ;; A few tests are skipped due to network constraints or
11310 ;; get longer timeouts when running in a CI environment.
11311 ;; Piggy-back on that, as we need the same adjustments.
11312 (setenv "TRAVIS" "1")
11313 (setenv "APPVEYOR" "1")
11314 #t))
11315 (add-before 'check 'adjust-tests
11316 (lambda _
11317 (let ((disabled-tests
11318 '(;; These tests rely on networking which is not
11319 ;; available in the build container.
11320 "test_urllib2net.py"
11321 "test__server.py"
11322 "test__server_pywsgi.py"
11323 "test_socket.py"
11324 "test__socket.py"
11325 "test__socket_ssl.py"
11326 "test__socket_dns.py"
11327 "test__socket_dns6.py"
11328 "test___example_servers.py"
11329 "test__getaddrinfo_import.py"
11330 "test__examples.py"
11331 "test_httplib.py"
11332 "test_https.py"
11333 "test_urllib2_localnet.py"
11334 "test_ssl.py"
11335 "test__ssl.py"
11336 ;; XXX: These tests borrow functionality from the
11337 ;; Python builtin 'test' module, but it is not
11338 ;; installed with the Guix Python distribution.
11339 "test_smtpd.py"
11340 "test_wsgiref.py"
11341 "test_urllib2.py"
11342 "test_thread.py"
11343 "test_threading.py"
11344 "test__threading_2.py"
11345 ;; These tests rely on KeyboardInterrupts which do not
11346 ;; work inside the build container for some reason
11347 ;; (lack of controlling terminal?).
11348 "test_subprocess.py"
11349 "test__issues461_471.py"
11350 ;; TODO: Patch out the tests that use getprotobyname, etc
11351 ;; instead of disabling all the tests from these files.
11352 "test__resolver_dnspython.py"
11353 "test__doctests.py"
11354 "test__all__.py"
11355 "test___config.py"
11356 "test__execmodules.py")))
11357 (call-with-output-file "skipped_tests.txt"
11358 (lambda (port)
11359 (format port "~a~%"
11360 (string-join disabled-tests "\n"))))
11361 #t)))
11362 (replace 'check
11363 (lambda _
11364 ;; Make sure the build directory is on PYTHONPATH.
11365 (setenv "PYTHONPATH"
11366 (string-append
11367 (getenv "PYTHONPATH") ":"
11368 (getcwd) "/build/"
11369 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11370
11371 ;; Use the build daemons configured number of workers.
11372 (setenv "NWORKERS" (number->string (parallel-job-count)))
11373
11374 (invoke "python" "-m" "gevent.tests" "--config"
11375 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11376 (propagated-inputs
11377 `(("python-greenlet" ,python-greenlet)
11378 ("python-objgraph" ,python-objgraph)))
11379 (native-inputs
11380 `(("python-six" ,python-six)
11381
11382 ;; For tests.
11383 ("python-dnspython" ,python-dnspython)
11384 ("python-psutil" ,python-psutil)
11385 ("python-zope.event" ,python-zope-event)
11386 ("python-zope.interface" ,python-zope-interface)))
11387 (inputs
11388 `(("c-ares" ,c-ares)
11389 ("libev" ,libev)))
11390 (home-page "http://www.gevent.org/")
11391 (synopsis "Coroutine-based network library")
11392 (description
11393 "gevent is a coroutine-based Python networking library that uses greenlet
11394 to provide a high-level synchronous API on top of the libev event loop.")
11395 (license license:expat)
11396 (properties `((python2-variant . ,(delay python2-gevent))))))
11397
11398 (define-public python2-gevent
11399 (let ((base (package-with-python2
11400 (strip-python2-variant python-gevent))))
11401 (package
11402 (inherit base)
11403 (native-inputs `(,@(package-native-inputs base)
11404 ("python-mock" ,python2-mock))))))
11405
11406 (define-public python-fastimport
11407 (package
11408 (name "python-fastimport")
11409 (version "0.9.6")
11410 (source
11411 (origin
11412 (method url-fetch)
11413 (uri (pypi-uri "fastimport" version))
11414 (sha256
11415 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11416 (build-system python-build-system)
11417 (home-page "https://github.com/jelmer/python-fastimport")
11418 (synopsis "VCS fastimport parser and generator in Python")
11419 (description "This package provides a parser for and generator of the Git
11420 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11421 format.")
11422 (license license:gpl2+)))
11423
11424 (define-public python2-fastimport
11425 (package-with-python2 python-fastimport))
11426
11427 (define-public python-twisted
11428 (package
11429 (name "python-twisted")
11430 (version "19.7.0")
11431 (source (origin
11432 (method url-fetch)
11433 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11434 (sha256
11435 (base32
11436 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11437 (build-system python-build-system)
11438 (arguments
11439 '(#:tests? #f)) ; FIXME: some tests fail
11440 (propagated-inputs
11441 `(("python-zope-interface" ,python-zope-interface)
11442 ("python-pyhamcrest" ,python-pyhamcrest)
11443 ("python-incremental" ,python-incremental)
11444 ("python-hyperlink" ,python-hyperlink)
11445 ("python-constantly" ,python-constantly)
11446 ("python-automat" ,python-automat)))
11447 (home-page "https://twistedmatrix.com/")
11448 (synopsis "Asynchronous networking framework written in Python")
11449 (description
11450 "Twisted is an extensible framework for Python programming, with special
11451 focus on event-based network programming and multiprotocol integration.")
11452 (license license:expat)))
11453
11454 (define-public python2-twisted
11455 (package-with-python2 python-twisted))
11456
11457 (define-public python-pika
11458 (package
11459 (name "python-pika")
11460 (version "0.12.0")
11461 (source
11462 (origin
11463 (method url-fetch)
11464 (uri (pypi-uri "pika" version))
11465 (sha256
11466 (base32
11467 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11468 (build-system python-build-system)
11469 (native-inputs
11470 `(("python-pyev" ,python-pyev)
11471 ("python-tornado" ,python-tornado)
11472 ("python-twisted" ,python-twisted)))
11473 (home-page "https://pika.readthedocs.org")
11474 (synopsis "Pure Python AMQP Client Library")
11475 (description
11476 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11477 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11478 network support library.")
11479 (license license:bsd-3)))
11480
11481 (define-public python2-pika
11482 (package-with-python2 python-pika))
11483
11484 (define-public python-ply
11485 (package
11486 (name "python-ply")
11487 (version "3.11")
11488 (source
11489 (origin
11490 (method url-fetch)
11491 (uri (pypi-uri "ply" version))
11492 (sha256
11493 (base32
11494 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11495 (build-system python-build-system)
11496 (home-page "http://www.dabeaz.com/ply/")
11497 (synopsis "Python Lex & Yacc")
11498 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11499 It uses LR parsing and does extensive error checking.")
11500 (license license:bsd-3)))
11501
11502 (define-public python-tabulate
11503 (package
11504 (name "python-tabulate")
11505 (version "0.7.7")
11506 (source (origin
11507 (method url-fetch)
11508 (uri (pypi-uri "tabulate" version))
11509 (sha256
11510 (base32
11511 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11512 (build-system python-build-system)
11513 (arguments
11514 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11515 ;; and the latest release is not tagged in the upstream repository.
11516 '(#:tests? #f))
11517 (home-page "https://bitbucket.org/astanin/python-tabulate")
11518 (synopsis "Pretty-print tabular data")
11519 (description
11520 "Tabulate is a library and command-line utility to pretty-print tabular
11521 data in Python.")
11522 (license license:expat)))
11523
11524 (define-public python2-tabulate
11525 (package-with-python2 python-tabulate))
11526
11527 (define-public python-kazoo
11528 (package
11529 (name "python-kazoo")
11530 (version "2.4.0")
11531 (source
11532 (origin
11533 (method url-fetch)
11534 (uri (pypi-uri "kazoo" version))
11535 (sha256
11536 (base32
11537 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11538 (build-system python-build-system)
11539 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11540 (propagated-inputs
11541 `(("python-six" ,python-six)))
11542 (home-page "https://kazoo.readthedocs.org")
11543 (synopsis "High-level Zookeeper client library")
11544 (description
11545 "Kazoo is a Python client library for the Apache Zookeeper distributed
11546 application service. It is designed to be easy to use and to avoid common
11547 programming errors.")
11548 (license license:asl2.0)))
11549
11550 (define-public python2-kazoo
11551 (package-with-python2 python-kazoo))
11552
11553 (define-public python-pykafka
11554 (package
11555 (name "python-pykafka")
11556 (version "2.4.0")
11557 (source (origin
11558 (method url-fetch)
11559 (uri (pypi-uri "pykafka" version))
11560 (sha256
11561 (base32
11562 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11563 (build-system python-build-system)
11564 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11565 (propagated-inputs
11566 `(("python-gevent" ,python-gevent)
11567 ("python-kazoo" ,python-kazoo)
11568 ("python-tabulate" ,python-tabulate)))
11569 (inputs
11570 `(("librdkafka" ,librdkafka)))
11571 (home-page "https://pykafka.readthedocs.io/")
11572 (synopsis "Apache Kafka client for Python")
11573 (description
11574 "PyKafka is a client for the Apache Kafka distributed messaging system.
11575 It includes Python implementations of Kafka producers and consumers, which
11576 are optionally backed by a C extension built on librdkafka.")
11577 (license license:asl2.0)))
11578
11579 (define-public python2-pykafka
11580 (package-with-python2 python-pykafka))
11581
11582 (define-public python-wcwidth
11583 (package
11584 (name "python-wcwidth")
11585 (version "0.1.8")
11586 (source (origin
11587 (method url-fetch)
11588 (uri (pypi-uri "wcwidth" version))
11589 (sha256
11590 (base32
11591 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11592 (build-system python-build-system)
11593 (home-page "https://github.com/jquast/wcwidth")
11594 (synopsis "Measure number of terminal column cells of wide-character codes")
11595 (description "Wcwidth measures the number of terminal column cells of
11596 wide-character codes. It is useful for those implementing a terminal emulator,
11597 or programs that carefully produce output to be interpreted by one. It is a
11598 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11599 specified in POSIX.1-2001 and POSIX.1-2008.")
11600 (license license:expat)))
11601
11602 (define-public python2-wcwidth
11603 (package-with-python2 python-wcwidth))
11604
11605 (define-public python2-jsonrpclib
11606 (package
11607 (name "python2-jsonrpclib")
11608 (version "0.1.7")
11609 (source (origin
11610 (method url-fetch)
11611 (uri (pypi-uri "jsonrpclib" version))
11612 (sha256
11613 (base32
11614 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11615 (build-system python-build-system)
11616 (arguments
11617 `(#:tests? #f
11618 #:python ,python-2))
11619 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11620 (synopsis "Implementation of JSON-RPC specification for Python")
11621 (description
11622 "This library is an implementation of the JSON-RPC specification.
11623 It supports both the original 1.0 specification, as well as the
11624 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11625 etc.")
11626 (license license:asl2.0)))
11627
11628 (define-public python-chai
11629 (package
11630 (name "python-chai")
11631 (version "1.1.2")
11632 (source (origin
11633 (method url-fetch)
11634 (uri (pypi-uri "chai" version))
11635 (sha256
11636 (base32
11637 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11638 (build-system python-build-system)
11639 (home-page "https://github.com/agoragames/chai")
11640 (synopsis "Mocking framework for Python")
11641 (description
11642 "Chai provides an api for mocking, stubbing and spying your python
11643 objects, patterned after the Mocha library for Ruby.")
11644 (license license:bsd-3)))
11645
11646 (define-public python2-chai
11647 (package-with-python2 python-chai))
11648
11649 (define-public python-inflection
11650 (package
11651 (name "python-inflection")
11652 (version "0.3.1")
11653 (source
11654 (origin (method url-fetch)
11655 (uri (pypi-uri "inflection" version))
11656 (sha256
11657 (base32
11658 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11659 (build-system python-build-system)
11660 (native-inputs
11661 `(("python-pytest" ,python-pytest)))
11662 (home-page "https://github.com/jpvanhal/inflection")
11663 (synopsis "Python string transformation library")
11664 (description
11665 "Inflection is a string transformation library. It singularizes
11666 and pluralizes English words, and transforms strings from CamelCase to
11667 underscored string.")
11668 (license license:expat)))
11669
11670 (define-public python2-inflection
11671 (package-with-python2 python-inflection))
11672
11673 (define-public python-pylev
11674 (package
11675 (name "python-pylev")
11676 (version "1.3.0")
11677 (source (origin
11678 (method url-fetch)
11679 (uri (pypi-uri "pylev" version))
11680 (sha256
11681 (base32
11682 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11683 (build-system python-build-system)
11684 (home-page "https://github.com/toastdriven/pylev")
11685 (synopsis "Levenshtein distance implementation in Python")
11686 (description "Pure Python Levenshtein implementation, based off the
11687 Wikipedia code samples at
11688 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11689 (license license:bsd-3)))
11690
11691 (define-public python2-pylev
11692 (package-with-python2 python-pylev))
11693
11694 (define-public python-cleo
11695 (package
11696 (name "python-cleo")
11697 (version "0.7.6")
11698 (source (origin
11699 (method url-fetch)
11700 (uri (pypi-uri "cleo" version))
11701 (sha256
11702 (base32
11703 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11704 (build-system python-build-system)
11705 (native-inputs
11706 `( ;; For testing
11707 ("python-mock" ,python-mock)
11708 ("python-pytest-mock" ,python-pytest-mock)
11709 ("python-pytest" ,python-pytest)))
11710 (propagated-inputs
11711 `(("python-backpack" ,python-backpack)
11712 ("python-clikit" ,python-clikit)
11713 ("python-pastel" ,python-pastel)
11714 ("python-pylev" ,python-pylev)))
11715 (home-page "https://github.com/sdispater/cleo")
11716 (synopsis "Command-line arguments library for Python")
11717 (description
11718 "Cleo allows you to create command-line commands with signature in
11719 docstring and colored output.")
11720 (license license:expat)))
11721
11722 (define-public python2-cleo
11723 (package-with-python2 python-cleo))
11724
11725 (define-public python-tomlkit
11726 (package
11727 (name "python-tomlkit")
11728 (version "0.5.11")
11729 (source
11730 (origin
11731 (method url-fetch)
11732 (uri (pypi-uri "tomlkit" version))
11733 (sha256
11734 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11735 (build-system python-build-system)
11736 (native-inputs
11737 `(("python-pytest" ,python-pytest)))
11738 (home-page "https://github.com/sdispater/tomlkit")
11739 (synopsis "Style-preserving TOML library")
11740 (description
11741 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11742 preserves all comments, indentations, whitespace and internal element ordering,
11743 and makes them accessible and editable via an intuitive API. It can also
11744 create new TOML documents from scratch using the provided helpers. Part of the
11745 implementation has been adapted, improved, and fixed from Molten.")
11746 (license license:expat)))
11747
11748 (define-public python-shellingham
11749 (package
11750 (name "python-shellingham")
11751 (version "1.3.1")
11752 (source
11753 (origin
11754 (method url-fetch)
11755 (uri (pypi-uri "shellingham" version))
11756 (sha256
11757 (base32
11758 "1q7kws7w4x2hji3g7y0ni9ddk4sd676ylrb3db54gbpys6xj6nwq"))))
11759 (build-system python-build-system)
11760 (home-page
11761 "https://github.com/sarugaku/shellingham")
11762 (synopsis "Tool to detect surrounding shell")
11763 (description
11764 "Shellingham detects what shell the current Python executable is
11765 running in.")
11766 (license license:isc)))
11767
11768 (define-public python-memcached
11769 (package
11770 (name "python-memcached")
11771 (version "1.59")
11772 (source
11773 (origin
11774 (method url-fetch)
11775 (uri (pypi-uri "python-memcached" version))
11776 (sha256
11777 (base32
11778 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))))
11779 (build-system python-build-system)
11780 (propagated-inputs `(("python-six" ,python-six)))
11781 (home-page
11782 "https://github.com/linsomniac/python-memcached")
11783 (synopsis "Pure python memcached client")
11784 (description
11785 "This software is a pure Python interface to the memcached memory cache
11786 daemon. It is the client side software which allows storing values in one or
11787 more, possibly remote, memcached servers.")
11788 (license license:psfl)))
11789
11790 (define-public python-clikit
11791 (package
11792 (name "python-clikit")
11793 (version "0.4.2")
11794 (source
11795 (origin
11796 (method url-fetch)
11797 (uri (pypi-uri "clikit" version))
11798 (sha256
11799 (base32
11800 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11801 (build-system python-build-system)
11802 (propagated-inputs
11803 `(("python-pastel" ,python-pastel)
11804 ("python-pylev" ,python-pylev)))
11805 (home-page "https://github.com/sdispater/clikit")
11806 (synopsis "Group of utilities to build command line interfaces")
11807 (description
11808 "CliKit is a group of utilities to build testable command line
11809 interfaces.")
11810 (properties `((python2-variant . ,(delay python2-clikit))))
11811 (license license:expat)))
11812
11813 (define-public python2-clikit
11814 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11815 (package/inherit
11816 base
11817 (propagated-inputs
11818 `(("python-enum34" ,python2-enum34)
11819 ("python-typing" ,python2-typing)
11820 ,@(package-propagated-inputs base))))))
11821
11822 (define-public python-msgpack-python
11823 (package
11824 (name "python-msgpack-python")
11825 (version "0.5.6")
11826 (source
11827 (origin
11828 (method url-fetch)
11829 (uri (pypi-uri "msgpack-python" version))
11830 (sha256
11831 (base32
11832 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11833 (build-system python-build-system)
11834 (home-page "http://msgpack.org/")
11835 (synopsis "Package to deserialize messages in MessagePack binary format")
11836 (description
11837 "MessagePack is an efficient binary serialization format. It lets you
11838 exchange data among multiple languages like JSON. But it's faster and
11839 smaller. Small integers are encoded into a single byte, and typical short
11840 strings require only one extra byte in addition to the strings themselves.")
11841 (license license:asl2.0)))
11842
11843 (define-public python-cachy
11844 (package
11845 (name "python-cachy")
11846 (version "0.3.0")
11847 (source
11848 (origin
11849 (method url-fetch)
11850 (uri (pypi-uri "cachy" version))
11851 (sha256
11852 (base32
11853 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11854 (build-system python-build-system)
11855 (arguments
11856 '(#:phases
11857 (modify-phases %standard-phases
11858 (replace 'check
11859 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11860 "pytest"))))))
11861 (native-inputs
11862 `(("memcached" ,memcached)
11863 ("python-fakeredis" ,python-fakeredis)
11864 ("python-flexmock" ,python-flexmock)
11865 ("python-pifpaf" ,python-pifpaf)
11866 ("python-pytest" ,python-pytest)))
11867 (propagated-inputs
11868 `(("python-memcached" ,python-memcached)
11869 ("python-msgpack-python" ,python-msgpack-python)
11870 ("python-redis" ,python-redis)))
11871 (home-page "https://github.com/sdispater/cachy")
11872 (synopsis "Simple yet effective caching library")
11873 (description
11874 "Cachy provides a simple yet effective caching library. A simple but
11875 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11876 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11877 (license license:expat)))
11878
11879 (define-public poetry
11880 (package
11881 (name "poetry")
11882 (version "1.0.5")
11883 ;; Poetry can only be built from source with Poetry.
11884 (source
11885 (origin
11886 (method url-fetch)
11887 (uri (pypi-uri "poetry" version))
11888 (sha256
11889 (base32
11890 "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf"))))
11891 (build-system python-build-system)
11892 (arguments
11893 `(#:tests? #f ;; Pypi does not have tests.
11894 #:phases
11895 (modify-phases %standard-phases
11896 (add-before 'build 'patch-setup-py
11897 (lambda _
11898 (substitute* "setup.py"
11899 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11900 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11901 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0")
11902 (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0"))
11903 #t)))))
11904 (propagated-inputs
11905 `(("python-cachecontrol" ,python-cachecontrol)
11906 ("python-cachy" ,python-cachy)
11907 ("python-cleo" ,python-cleo)
11908 ("python-clikit" ,python-clikit)
11909 ("python-html5lib" ,python-html5lib)
11910 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
11911 ("python-jsonschema" ,python-jsonschema)
11912 ("python-keyring" ,python-keyring)
11913 ("python-pexpect" ,python-pexpect)
11914 ("python-pkginfo" ,python-pkginfo)
11915 ("python-pyparsing" ,python-pyparsing)
11916 ("python-pyrsistent" ,python-pyrsistent)
11917 ("python-requests" ,python-requests)
11918 ("python-requests-toolbelt" ,python-requests-toolbelt)
11919 ("python-shellingham" ,python-shellingham)
11920 ("python-tomlkit" ,python-tomlkit)
11921 ("python-virtualenv" ,python-virtualenv)))
11922 (home-page "https://python-poetry.org")
11923 (synopsis "Python dependency management and packaging made easy")
11924 (description "Poetry is a tool for dependency management and packaging
11925 in Python. It allows you to declare the libraries your project depends on and
11926 it will manage (install/update) them for you.")
11927 (license license:expat)))
11928
11929 (define-public python-lazy-object-proxy
11930 (package
11931 (name "python-lazy-object-proxy")
11932 (version "1.4.3")
11933 (source (origin
11934 (method url-fetch)
11935 (uri (pypi-uri "lazy-object-proxy" version))
11936 (sha256
11937 (base32
11938 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11939 (native-inputs
11940 `(("python-setuptools-scm" ,python-setuptools-scm)))
11941 (build-system python-build-system)
11942 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11943 (synopsis "Lazy object proxy for python")
11944 (description
11945 "Lazy object proxy is an object that wraps a callable but defers the call
11946 until the object is actually required, and caches the result of said call.")
11947 (license license:bsd-2)))
11948
11949 (define-public python2-lazy-object-proxy
11950 (package-with-python2 python-lazy-object-proxy))
11951
11952 (define-public python-dnspython
11953 (package
11954 (name "python-dnspython")
11955 (version "1.16.0")
11956 (source (origin
11957 (method url-fetch)
11958 (uri (string-append "http://www.dnspython.org/kits/"
11959 version "/dnspython-" version ".tar.gz"))
11960 (sha256
11961 (base32
11962 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11963 (build-system python-build-system)
11964 (arguments '(#:tests? #f)) ; XXX: requires internet access
11965 (home-page "http://www.dnspython.org")
11966 (synopsis "DNS toolkit for Python")
11967 (description
11968 "dnspython is a DNS toolkit for Python. It supports almost all record
11969 types. It can be used for queries, zone transfers, and dynamic updates.
11970 It supports TSIG authenticated messages and EDNS0.")
11971 (license license:expat)))
11972
11973 (define-public python2-dnspython
11974 (package-with-python2 python-dnspython))
11975
11976 (define-public python-email-validator
11977 (package
11978 (name "python-email-validator")
11979 (version "1.0.2")
11980 (source
11981 (origin (method url-fetch)
11982 (uri (pypi-uri "email_validator" version))
11983 (sha256
11984 (base32
11985 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11986 (build-system python-build-system)
11987 (arguments
11988 '(#:phases
11989 (modify-phases %standard-phases
11990 (add-before 'build 'use-dnspython
11991 (lambda _
11992 (substitute* "setup.py"
11993 (("dnspython3") "dnspython"))
11994 #t)))))
11995 (propagated-inputs
11996 `(("python-dnspython" ,python-dnspython)
11997 ("python-idna" ,python-idna)))
11998 (home-page "https://github.com/JoshData/python-email-validator")
11999 (synopsis "Email address validation library for Python")
12000 (description
12001 "This library validates email address syntax and deliverability.")
12002 (license license:cc0)))
12003
12004 (define-public python2-email-validator
12005 (package-with-python2 python-email-validator))
12006
12007 (define-public python-ukpostcodeparser
12008 (package
12009 (name "python-ukpostcodeparser")
12010 (version "1.0.3")
12011 (source (origin
12012 (method url-fetch)
12013 (uri (pypi-uri "UkPostcodeParser" version))
12014 (sha256
12015 (base32
12016 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12017 (build-system python-build-system)
12018 (home-page "https://github.com/hamstah/ukpostcodeparser")
12019 (synopsis "UK Postcode parser for Python")
12020 (description
12021 "This library provides the @code{parse_uk_postcode} function for
12022 parsing UK postcodes.")
12023 (license license:expat)))
12024
12025 (define-public python2-ukpostcodeparser
12026 (package-with-python2 python-ukpostcodeparser))
12027
12028 (define-public python-faker
12029 (package
12030 (name "python-faker")
12031 (version "4.0.2")
12032 (source (origin
12033 (method url-fetch)
12034 (uri (pypi-uri "Faker" version))
12035 (sha256
12036 (base32
12037 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12038 (build-system python-build-system)
12039 (arguments
12040 '(#:phases
12041 (modify-phases %standard-phases
12042 (replace 'check
12043 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12044 (native-inputs
12045 `(;; For testing
12046 ("python-freezegun" ,python-freezegun)
12047 ("python-pytest" ,python-pytest)
12048 ("python-random2" ,python-random2)
12049 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12050 ("python-validators" ,python-validators)))
12051 (propagated-inputs
12052 `(("python-dateutil" ,python-dateutil)
12053 ("python-text-unidecode" ,python-text-unidecode)))
12054 (home-page "https://github.com/joke2k/faker")
12055 (synopsis "Python package that generates fake data")
12056 (description
12057 "Faker is a Python package that generates fake data such as names,
12058 addresses, and phone numbers.")
12059 (license license:expat)
12060 (properties `((python2-variant . ,(delay python2-faker))))))
12061
12062 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12063 (define-public python2-faker
12064 (let ((base (package-with-python2 (strip-python2-variant
12065 python-faker))))
12066 (package
12067 (inherit base)
12068 (version "3.0.1")
12069 (source (origin
12070 (method url-fetch)
12071 (uri (pypi-uri "Faker" version))
12072 (sha256
12073 (base32
12074 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12075 (native-inputs
12076 `(("python-mock" ,python2-mock)
12077 ,@(package-native-inputs base)))
12078 (propagated-inputs
12079 `(("python2-ipaddress" ,python2-ipaddress)
12080 ("python2-six" ,python2-six)
12081 ,@(package-propagated-inputs base))))))
12082
12083 (define-public python-pyaml
12084 (package
12085 (name "python-pyaml")
12086 (version "18.11.0")
12087 (source (origin
12088 (method url-fetch)
12089 (uri (pypi-uri "pyaml" version))
12090 (sha256
12091 (base32
12092 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12093 (build-system python-build-system)
12094 (native-inputs
12095 `(("python-unidecode" ,python-unidecode)))
12096 (propagated-inputs
12097 `(("python-pyyaml" ,python-pyyaml)))
12098 (home-page "https://github.com/mk-fg/pretty-yaml")
12099 (synopsis "YAML pretty-print library for Python")
12100 (description
12101 "pyaml is a PyYAML based python module to produce pretty and readable
12102 YAML-serialized data.")
12103 (license license:wtfpl2)))
12104
12105 (define-public python2-pyaml
12106 (package-with-python2 python-pyaml))
12107
12108 (define-public python-backpack
12109 (package
12110 (name "python-backpack")
12111 (version "0.1")
12112 (source
12113 (origin
12114 (method url-fetch)
12115 (uri (pypi-uri "backpack" version))
12116 (sha256
12117 (base32
12118 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12119 (build-system python-build-system)
12120 (native-inputs
12121 `(("python-pytest" ,python-pytest)
12122 ("python-nose" ,python-nose)))
12123 (propagated-inputs
12124 `(("python-simplejson" ,python-simplejson)))
12125 (home-page "https://github.com/sdispater/backpack")
12126 (synopsis "Utilities for working with Python collections")
12127 (description "Backpack provides some useful utilities for working with
12128 collections of data.")
12129 (license license:expat)))
12130
12131 (define-public python2-backpack
12132 (package-with-python2 python-backpack))
12133
12134 (define-public python-prompt-toolkit
12135 (package
12136 (name "python-prompt-toolkit")
12137 (version "3.0.5")
12138 (source
12139 (origin
12140 (method url-fetch)
12141 (uri (pypi-uri "prompt_toolkit" version))
12142 (sha256
12143 (base32
12144 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12145 (build-system python-build-system)
12146 (arguments
12147 `(#:phases
12148 (modify-phases %standard-phases
12149 (delete 'check)
12150 (add-after 'install 'post-install-check
12151 (lambda* (#:key inputs outputs #:allow-other-keys)
12152 ;; HOME is needed for the test
12153 ;; "test_pathcompleter_can_expanduser".
12154 (setenv "HOME" "/tmp")
12155 (add-installed-pythonpath inputs outputs)
12156 (invoke "py.test"))))))
12157 (propagated-inputs
12158 `(("python-wcwidth" ,python-wcwidth)))
12159 (native-inputs
12160 `(("python-pytest" ,python-pytest)))
12161 (home-page
12162 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12163 (synopsis "Library for building command line interfaces in Python")
12164 (description
12165 "Prompt-Toolkit is a library for building interactive command line
12166 interfaces in Python. It's like GNU Readline but it also features syntax
12167 highlighting while typing, out-of-the-box multi-line input editing, advanced
12168 code completion, incremental search, support for Chinese double-width
12169 characters, mouse support, and auto suggestions.")
12170 (license license:bsd-3)))
12171
12172 (define-public python-prompt-toolkit-2
12173 (package (inherit python-prompt-toolkit)
12174 (name "python-prompt-toolkit")
12175 (version "2.0.7")
12176 (source
12177 (origin
12178 (method url-fetch)
12179 (uri (pypi-uri "prompt_toolkit" version))
12180 (sha256
12181 (base32
12182 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12183 (propagated-inputs
12184 `(("python-wcwidth" ,python-wcwidth)
12185 ("python-six" ,python-six)
12186 ("python-pygments" ,python-pygments)))))
12187
12188 (define-public prompt-toolkit-2-instead-of-prompt-toolkit
12189 (package-input-rewriting/spec
12190 `(("python-prompt-toolkit" . ,(const python-prompt-toolkit-2)))))
12191
12192 (define-public python2-prompt-toolkit
12193 (package-with-python2 python-prompt-toolkit-2))
12194
12195 (define-public python-prompt-toolkit-1
12196 (package (inherit python-prompt-toolkit-2)
12197 (version "1.0.15")
12198 (source
12199 (origin
12200 (method url-fetch)
12201 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12202 (sha256
12203 (base32
12204 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12205
12206 (define-public python2-prompt-toolkit-1
12207 (package-with-python2 python-prompt-toolkit-1))
12208
12209 (define-public python-jedi
12210 (package
12211 (name "python-jedi")
12212 (version "0.17.0")
12213 (source
12214 (origin
12215 (method url-fetch)
12216 (uri (pypi-uri "jedi" version))
12217 (patches (search-patches "python-jedi-sort-project-test.patch"))
12218 (sha256
12219 (base32
12220 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12221 (build-system python-build-system)
12222 (arguments
12223 `(#:phases
12224 (modify-phases %standard-phases
12225 (add-before 'check 'adjust-test-for-python-3.8
12226 (lambda _
12227 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12228 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12229 (substitute* "test/test_utils.py"
12230 (("assert len\\(difference\\) < 20")
12231 "assert len(difference) < 22"))
12232 #t))
12233 (replace 'check
12234 (lambda _
12235 (setenv "HOME" "/tmp")
12236 (invoke "python" "-m" "pytest" "-vv"))))))
12237 (native-inputs
12238 `(("python-pytest" ,python-pytest)
12239 ("python-docopt" ,python-docopt)))
12240 (propagated-inputs
12241 `(("python-parso" ,python-parso)))
12242 (home-page "https://github.com/davidhalter/jedi")
12243 (synopsis "Autocompletion and static analysis library for Python")
12244 (description
12245 "Jedi is a static analysis tool for Python that can be used in Integrated
12246 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12247 on a deeper level than many other static analysis frameworks for Python.
12248
12249 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12250 well.")
12251 (license license:expat)))
12252
12253 (define-public python2-jedi
12254 (package-with-python2 python-jedi))
12255
12256 (define-public ptpython
12257 (package
12258 (name "ptpython")
12259 (version "0.34")
12260 (source (origin
12261 (method url-fetch)
12262 (uri (pypi-uri "ptpython" version))
12263 (sha256
12264 (base32
12265 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12266 (build-system python-build-system)
12267 (arguments
12268 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12269 (propagated-inputs
12270 `(("python-docopt" ,python-docopt)
12271 ("python-jedi" ,python-jedi)
12272 ("python-prompt-toolkit" ,python-prompt-toolkit)
12273 ("python-pygments" ,python-pygments)))
12274 (home-page "https://github.com/jonathanslenders/ptpython")
12275 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12276 (description
12277 "ptpython is a Python read-eval-print loop with IDE-like features.
12278 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12279 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12280 etc.")
12281 (license license:bsd-3)
12282 (properties `((python2-variant . ,(delay ptpython-2))))))
12283
12284 (define-public ptpython-2
12285 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12286 (package
12287 (inherit base)
12288 (name "ptpython2"))))
12289
12290 (define-public python-stem
12291 (package
12292 (name "python-stem")
12293 (version "1.8.0")
12294 (source
12295 (origin
12296 (method url-fetch)
12297 (uri (pypi-uri "stem" version))
12298 (sha256
12299 (base32
12300 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12301 (build-system python-build-system)
12302 (arguments
12303 `(#:phases
12304 (modify-phases %standard-phases
12305 (replace 'check
12306 (lambda _
12307 (invoke "./run_tests.py" "--unit")
12308 #t)))))
12309 (native-inputs
12310 `(("python-mock" ,python-mock)
12311 ("python-pycodestyle" ,python-pycodestyle)
12312 ("python-pyflakes" ,python-pyflakes)))
12313 (home-page "https://stem.torproject.org/")
12314 (synopsis
12315 "Python controller library that allows applications to interact with Tor")
12316 (description
12317 "Stem is a Python controller library for Tor. With it you can use Tor's
12318 control protocol to script against the Tor process and read descriptor data
12319 relays publish about themselves.")
12320 (license license:lgpl3)))
12321
12322 (define-public python2-stem
12323 (package-with-python2 python-stem))
12324
12325 (define-public python-pyserial
12326 (package
12327 (name "python-pyserial")
12328 (version "3.4")
12329 (source
12330 (origin
12331 (method url-fetch)
12332 (uri (pypi-uri "pyserial" version))
12333 (sha256
12334 (base32
12335 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12336 (build-system python-build-system)
12337 (arguments
12338 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12339 ;; #:phases
12340 ;; (modify-phases %standard-phases
12341 ;; (replace 'check
12342 ;; (lambda _
12343 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12344 (home-page
12345 "https://github.com/pyserial/pyserial")
12346 (synopsis "Python Serial Port Bindings")
12347 (description "@code{pyserial} provide serial port bindings for Python. It
12348 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12349 and/or Xon/Xoff. The port is accessed in RAW mode.")
12350 (license license:bsd-3)))
12351
12352 (define-public python2-pyserial
12353 (package-with-python2 python-pyserial))
12354
12355 (define-public python-kivy
12356 (package
12357 (name "python-kivy")
12358 (version "1.10.1")
12359 (source
12360 (origin
12361 (method url-fetch)
12362 (uri (pypi-uri "Kivy" version))
12363 (file-name (string-append name "-" version ".tar.gz"))
12364 (sha256
12365 (base32
12366 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12367 (build-system python-build-system)
12368 (arguments
12369 `(#:tests? #f ; Tests require many optional packages
12370 #:phases
12371 (modify-phases %standard-phases
12372 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12373 (lambda* (#:key inputs #:allow-other-keys)
12374 (setenv "KIVY_SDL2_PATH"
12375 (string-append (assoc-ref inputs "sdl-union")
12376 "/include/SDL2"))
12377 #t)))))
12378 (native-inputs
12379 `(("pkg-config" ,pkg-config)
12380 ("python-cython" ,python-cython)))
12381 (inputs
12382 `(("gstreamer" ,gstreamer)
12383 ("mesa" ,mesa)
12384 ("sdl-union"
12385 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12386 (home-page "https://kivy.org")
12387 (synopsis
12388 "Multitouch application framework")
12389 (description
12390 "A software library for rapid development of
12391 hardware-accelerated multitouch applications.")
12392 (license license:expat)))
12393
12394 (define-public python2-kivy
12395 (package-with-python2 python-kivy))
12396
12397 (define-public python-binaryornot
12398 (package
12399 (name "python-binaryornot")
12400 (version "0.4.4")
12401 (source (origin
12402 (method url-fetch)
12403 (uri (pypi-uri "binaryornot" version))
12404 (sha256
12405 (base32
12406 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12407 (build-system python-build-system)
12408 (arguments
12409 `(#:phases
12410 (modify-phases %standard-phases
12411 (add-after 'unpack 'patch-tests
12412 (lambda _
12413 ;; TypeError: binary() got an unexpected keyword argument
12414 ;; 'average_size'.
12415 (substitute* "tests/test_check.py"
12416 (("average_size=512") ""))
12417 #t)))))
12418 (propagated-inputs
12419 `(("python-chardet" ,python-chardet)
12420 ("python-hypothesis" ,python-hypothesis)))
12421 (home-page "https://github.com/audreyr/binaryornot")
12422 (synopsis "Package to check if a file is binary or text")
12423 (description "Ultra-lightweight pure Python package to check if a file is
12424 binary or text.")
12425 (license license:bsd-3)
12426 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12427
12428 (define-public python2-binaryornot
12429 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12430 (package (inherit base)
12431 (propagated-inputs
12432 `(("python2-enum34" ,python2-enum34)
12433 ,@(package-propagated-inputs base))))))
12434
12435 (define-public python-binwalk
12436 (package
12437 (name "python-binwalk")
12438 (version "2.2.0")
12439 (source
12440 (origin
12441 (method git-fetch)
12442 (uri (git-reference
12443 (url "https://github.com/ReFirmLabs/binwalk")
12444 (commit (string-append "v" version))))
12445 (file-name (git-file-name name version))
12446 (sha256
12447 (base32
12448 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12449 (build-system python-build-system)
12450 (arguments
12451 `(#:phases
12452 (modify-phases %standard-phases
12453 (add-before 'check 'set-pythonpath
12454 (lambda _
12455 (setenv "PYTHONPATH"
12456 (string-append
12457 (getcwd) "/src/"
12458 ":" (getenv "PYTHONPATH")))
12459 (setenv "HOME" "")
12460 #t)))))
12461 (native-inputs
12462 `(("python-coverage" ,python-coverage)
12463 ("python-nose" ,python-nose)))
12464 (home-page "https://github.com/ReFirmLabs/binwalk")
12465 (synopsis "Firmware analysis tool")
12466 (description "Binwalk is a tool for analyzing, reverse engineering, and
12467 extracting firmware images")
12468 (license license:expat)))
12469
12470 (define-public python-nltk
12471 (package
12472 (name "python-nltk")
12473 (version "3.2.1")
12474 (source (origin
12475 (method url-fetch)
12476 (uri (pypi-uri "nltk" version))
12477 (sha256
12478 (base32
12479 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12480 (build-system python-build-system)
12481 (arguments
12482 '(;; The tests require some extra resources to be downloaded.
12483 ;; TODO Try packaging these resources.
12484 #:tests? #f))
12485 (home-page "http://nltk.org/")
12486 (synopsis "Natural Language Toolkit")
12487 (description "It provides interfaces to over 50 corpora and lexical
12488 resources such as WordNet, along with a suite of text processing libraries
12489 for classification, tokenization, stemming, tagging, parsing, and semantic
12490 reasoning, wrappers for natural language processing libraries.")
12491 (license license:asl2.0)))
12492
12493 (define-public python2-nltk
12494 (package-with-python2 python-nltk))
12495
12496 (define-public python-pymongo
12497 (package
12498 (name "python-pymongo")
12499 (version "3.7.2")
12500 (source (origin
12501 (method url-fetch)
12502 (uri (pypi-uri "pymongo" version))
12503 (sha256
12504 (base32
12505 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12506 (build-system python-build-system)
12507 (propagated-inputs
12508 `(("python-certifi" ,python-certifi)))
12509 (home-page "https://github.com/mongodb/mongo-python-driver")
12510 (synopsis "Python driver for MongoDB")
12511 (description "Python driver for MongoDB.")
12512 (license license:asl2.0)))
12513
12514 (define-public python2-pymongo
12515 (package-with-python2 python-pymongo))
12516
12517 (define-public python-consul
12518 (package
12519 (name "python-consul")
12520 (version "0.6.1")
12521 (source
12522 (origin
12523 (method url-fetch)
12524 (uri (pypi-uri "python-consul" version))
12525 (sha256
12526 (base32
12527 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12528 (build-system python-build-system)
12529 (arguments
12530 '(#:tests? #f)) ; The tests are not distributed
12531 (propagated-inputs
12532 `(("python-requests" ,python-requests)
12533 ("python-six" ,python-six)))
12534 (home-page "https://github.com/cablehead/python-consul")
12535 (synopsis "Python client for Consul")
12536 (description
12537 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12538 discovery, monitoring and configuration.")
12539 (license license:expat)))
12540
12541 (define-public python2-consul
12542 (package-with-python2 python-consul))
12543
12544 (define-public python-schematics
12545 (package
12546 (name "python-schematics")
12547 (version "1.1.1")
12548 (source
12549 (origin
12550 (method git-fetch)
12551 (uri (git-reference
12552 (url "https://github.com/schematics/schematics.git")
12553 (commit (string-append "v" version))))
12554 (file-name (git-file-name name version))
12555 (sha256
12556 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12557 (build-system python-build-system)
12558 (propagated-inputs
12559 `(("python-six" ,python-six)))
12560 (arguments
12561 ;; The tests require a bunch of not very nice packages with fixed
12562 ;; version requirements (e.g. python-coveralls).
12563 `(#:tests? #f))
12564 (home-page "https://github.com/schematics/schematics")
12565 (synopsis "Python Data Structures for Humans")
12566 (description "Python Data Structures for Humans.")
12567 (license license:bsd-3)))
12568
12569 (define-public python2-schematics
12570 (package-with-python2 python-schematics))
12571
12572 (define-public python-odfpy
12573 (package
12574 (name "python-odfpy")
12575 (version "1.3.3")
12576 (source (origin
12577 (method url-fetch)
12578 (uri (pypi-uri "odfpy" version))
12579 (sha256
12580 (base32
12581 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12582 (arguments
12583 `(#:modules ((srfi srfi-1)
12584 (guix build python-build-system)
12585 (guix build utils))
12586 #:phases
12587 (modify-phases %standard-phases
12588 (replace 'check
12589 ;; The test runner invokes python2 and python3 for test*.py.
12590 ;; To avoid having both in inputs, we replicate it here.
12591 (lambda _
12592 (for-each (lambda (test-file) (invoke "python" test-file))
12593 (find-files "tests" "^test.*\\.py$"))
12594 #t)))))
12595 (build-system python-build-system)
12596 (home-page "https://github.com/eea/odfpy")
12597 (synopsis "Python API and tools to manipulate OpenDocument files")
12598 (description "Collection of libraries and utility programs written in
12599 Python to manipulate OpenDocument 1.2 files.")
12600 (license
12601 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12602 ;; number of files with other licenses.
12603 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12604
12605 (define-public python2-odfpy
12606 (package-with-python2 python-odfpy))
12607
12608 (define-public python-natsort
12609 (package
12610 (name "python-natsort")
12611 (version "7.0.1")
12612 (source (origin
12613 (method url-fetch)
12614 (uri (pypi-uri "natsort" version))
12615 (sha256
12616 (base32
12617 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12618 (build-system python-build-system)
12619 (arguments
12620 `(#:modules ((guix build utils)
12621 (guix build python-build-system)
12622 (srfi srfi-1)
12623 (srfi srfi-26)
12624 (ice-9 ftw))
12625 #:phases
12626 (modify-phases %standard-phases
12627 (add-before 'check 'set-cachedir
12628 ;; Tests require write access to $HOME by default
12629 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12630 (replace 'check
12631 (lambda _
12632 (let ((cwd (getcwd)))
12633 (setenv "PYTHONPATH"
12634 (string-append
12635 cwd "/build/"
12636 (find (cut string-prefix? "lib" <>)
12637 (scandir (string-append cwd "/build")))
12638 ":"
12639 (getenv "PYTHONPATH")))
12640 (invoke "pytest" "-v")))))))
12641 (native-inputs
12642 `(("python-hypothesis" ,python-hypothesis)
12643 ("python-pytest-cov" ,python-pytest-cov)
12644 ("python-pytest-mock" ,python-pytest-mock)
12645 ("python-pytest" ,python-pytest)))
12646 (propagated-inputs ; TODO: Add python-fastnumbers.
12647 `(("python-pyicu" ,python-pyicu)))
12648 (home-page "https://github.com/SethMMorton/natsort")
12649 (synopsis "Natural sorting for python and shell")
12650 (description
12651 "Natsort lets you apply natural sorting on lists instead of
12652 lexicographical. If you use the built-in @code{sorted} method in python
12653 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12654 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12655 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12656 identifies numbers and sorts them separately from strings. It can also sort
12657 version numbers, real numbers, mixed types and more, and comes with a shell
12658 command @command{natsort} that exposes this functionality in the command line.")
12659 (license license:expat)
12660 (properties `((python2-variant . ,(delay python2-natsort))))))
12661
12662 ;; Natsort 6.x are the last versions with support for Python 2.
12663 (define-public python2-natsort
12664 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12665 (package (inherit base)
12666 (version "6.2.1")
12667 (source (origin
12668 (method url-fetch)
12669 (uri (pypi-uri "natsort" version))
12670 (sha256
12671 (base32
12672 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12673 (native-inputs
12674 `(("python2-pathlib" ,python2-pathlib)
12675 ,@(package-native-inputs base))))))
12676
12677 (define-public glances
12678 (package
12679 (name "glances")
12680 (version "3.1.4")
12681 (source
12682 (origin
12683 (method url-fetch)
12684 (uri (pypi-uri "Glances" version))
12685 (sha256
12686 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12687 (modules '((guix build utils)))
12688 (snippet
12689 '(begin
12690 ;; Glances phones PyPI for weekly update checks by default.
12691 ;; Disable these. The user can re-enable them if desired.
12692 (substitute* "glances/outdated.py"
12693 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12694 (string-append indentation
12695 "self.args.disable_check_update = True\n"
12696 line)))
12697 #t))))
12698 (build-system python-build-system)
12699 (propagated-inputs
12700 `(("python-future" ,python-future)
12701 ("python-psutil" ,python-psutil)))
12702 (home-page "https://github.com/nicolargo/glances")
12703 (synopsis "Cross-platform curses-based monitoring tool")
12704 (description
12705 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12706 Glances uses the PsUtil library to get information from your system. It
12707 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12708 (license license:lgpl3+)))
12709
12710 (define-public python-glances
12711 (deprecated-package "python-glances" glances))
12712
12713 (define-public python-graphql-core
12714 (package
12715 (name "python-graphql-core")
12716 (version "0.5.3")
12717 (source
12718 (origin
12719 (method url-fetch)
12720 (uri (pypi-uri "graphql-core" version))
12721 (sha256
12722 (base32
12723 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12724 (build-system python-build-system)
12725 (arguments
12726 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12727 #:phases
12728 (modify-phases %standard-phases
12729 (add-after 'unpack 'patch-hardcoded-version
12730 (lambda _ (substitute*
12731 "setup.py"
12732 (("'gevent==1.1rc1'") "'gevent'"))
12733 #t)))))
12734 (native-inputs
12735 `(("python-gevent" ,python-gevent)
12736 ("python-mock" ,python-mock)
12737 ("python-pytest-mock" ,python-pytest-mock)))
12738 (propagated-inputs
12739 `(("python-promise" ,python-promise)
12740 ("python-six" ,python-six)))
12741 (home-page "https://github.com/graphql-python/graphql-core")
12742 (synopsis "GraphQL implementation for Python")
12743 (description
12744 "GraphQL implementation for Python. GraphQL is a data query language and
12745 runtime designed and used to request and deliver data to mobile and web apps.
12746 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12747 to Python.")
12748 (license license:expat)))
12749
12750 (define-public python2-graphql-core
12751 (package-with-python2 python-graphql-core))
12752
12753 (define-public python-graphql-relay
12754 (package
12755 (name "python-graphql-relay")
12756 (version "0.4.5")
12757 (source
12758 (origin
12759 (method url-fetch)
12760 (uri (pypi-uri "graphql-relay" version))
12761 (sha256
12762 (base32
12763 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12764 (build-system python-build-system)
12765 (arguments
12766 '(#:tests? #f)) ; The tests are not distributed
12767 (propagated-inputs
12768 `(("python-graphql-core" ,python-graphql-core)
12769 ("python-promise" ,python-promise)
12770 ("python-six" ,python-six)))
12771 (home-page "https://github.com/graphql-python/graphql-relay-py")
12772 (synopsis "Relay implementation for Python")
12773 (description
12774 "This is a library to allow the easy creation of Relay-compliant servers
12775 using the GraphQL Python reference implementation of a GraphQL server. It
12776 should be noted that the code is a exact port of the original
12777 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12778 from Facebook.")
12779 (license license:expat)))
12780
12781 (define-public python2-graphql-relay
12782 (package-with-python2 python-graphql-relay))
12783
12784 (define-public python-graphene
12785 (package
12786 (name "python-graphene")
12787 (version "0.10.2")
12788 (source
12789 (origin
12790 (method url-fetch)
12791 (uri (pypi-uri "graphene" version))
12792 (sha256
12793 (base32
12794 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12795 (build-system python-build-system)
12796 (propagated-inputs
12797 `(("python-graphql-core" ,python-graphql-core)
12798 ("python-graphql-relay" ,python-graphql-relay)
12799 ("python-iso8601" ,python-iso8601)
12800 ("python-promise" ,python-promise)
12801 ("python-six" ,python-six)))
12802 (arguments
12803 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12804 (home-page "https://graphene-python.org/")
12805 (synopsis "GraphQL Framework for Python")
12806 (description
12807 "Graphene is a Python library for building GraphQL schemas/types.
12808 A GraphQL schema describes your data model, and provides a GraphQL server
12809 with an associated set of resolve methods that know how to fetch data.")
12810 (properties `((python2-variant . ,(delay python2-graphene))))
12811 (license license:expat)))
12812
12813 (define-public python2-graphene
12814 (let ((base (package-with-python2
12815 (strip-python2-variant python-graphene))))
12816 (package (inherit base)
12817 (native-inputs
12818 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12819 ,@(package-native-inputs base))))))
12820
12821 (define-public python-nautilus
12822 (package
12823 (name "python-nautilus")
12824 (version "0.4.9")
12825 (source
12826 (origin
12827 (method url-fetch)
12828 (uri (pypi-uri "nautilus" version))
12829 (sha256
12830 (base32
12831 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12832 (build-system python-build-system)
12833 (arguments `(#:tests? #f)) ; fails to import test modules
12834 (propagated-inputs
12835 `(("python-bcrypt" ,python-bcrypt)
12836 ("python-click" ,python-click)
12837 ("python-consul" ,python-consul)
12838 ("python-graphene" ,python-graphene)
12839 ("python-jinja2" ,python-jinja2)
12840 ("python-peewee" ,python-peewee)
12841 ("python-pika" ,python-pika)
12842 ("python-tornado" ,python-tornado)
12843 ("python-wtforms" ,python-wtforms)))
12844 (native-inputs
12845 `(("python-nose2" ,python-nose2)))
12846 (home-page "https://github.com/AlecAivazis/nautilus")
12847 (synopsis "Library for creating microservice applications")
12848 (description
12849 "Nautilus is a framework for flux based microservices that looks to
12850 provide extendible implementations of common aspects of a cloud so that you can
12851 focus on building massively scalable web applications.")
12852 (license license:expat)))
12853
12854 (define-public python-random2
12855 (package
12856 (name "python-random2")
12857 (version "1.0.1")
12858 (source (origin
12859 (method url-fetch)
12860 (uri (pypi-uri "random2" version ".zip"))
12861 (sha256
12862 (base32
12863 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12864 (build-system python-build-system)
12865 (native-inputs `(("unzip" ,unzip)))
12866 (home-page "http://pypi.python.org/pypi/random2")
12867 (synopsis "Python 3 version of the Python 2 @code{random} module")
12868 (description
12869 "This package provides a Python 3 ported version of Python 2.7’s
12870 @code{random} module. It has also been back-ported to work in Python 2.6.
12871
12872 In Python 3, the implementation of @code{randrange()} was changed, so that
12873 even with the same seed you get different sequences in Python 2 and 3.
12874
12875 This package closes that gap, allowing stable random number generation
12876 between the different Python versions.")
12877 (license license:psfl)))
12878
12879 (define-public python2-random2
12880 (package-with-python2 python-random2))
12881
12882 (define-public python-snowballstemmer
12883 (package
12884 (name "python-snowballstemmer")
12885 (version "2.0.0")
12886 (source (origin
12887 (method url-fetch)
12888 (uri (pypi-uri "snowballstemmer" version))
12889 (sha256
12890 (base32
12891 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12892 (build-system python-build-system)
12893 (arguments
12894 `(;; No tests exist
12895 #:tests? #f))
12896 (home-page "https://github.com/shibukawa/snowball_py")
12897 (synopsis "Snowball stemming library collection for Python")
12898 (description "This package provides 16 word stemmer algorithms generated
12899 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12900 English stemmer.")
12901 (license license:bsd-3)))
12902
12903 (define-public python2-snowballstemmer
12904 (package-with-python2 python-snowballstemmer))
12905
12906 (define-public python-setproctitle
12907 (package
12908 (name "python-setproctitle")
12909 (version "1.1.10")
12910 (source
12911 (origin
12912 (method url-fetch)
12913 (uri (pypi-uri "setproctitle" version))
12914 (sha256
12915 (base32
12916 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12917 (build-system python-build-system)
12918 (arguments
12919 '(#:phases
12920 (modify-phases %standard-phases
12921 (add-before 'check 'patch-Makefile
12922 ;; Stricly this is only required for the python2 variant.
12923 ;; But adding a phase in an inherited package seems to be
12924 ;; cumbersum. So we patch even for python3.
12925 (lambda _
12926 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12927 (when nose
12928 (substitute* "Makefile"
12929 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12930 (string-append nose "/bin/nosetests "))))
12931 #t)))
12932 (replace 'check
12933 (lambda _
12934 (setenv "PYTHON" (or (which "python3") (which "python")))
12935 (setenv "PYCONFIG" (or (which "python3-config")
12936 (which "python-config")))
12937 (setenv "CC" "gcc")
12938 ;; No need to extend PYTHONPATH to find the built package, since
12939 ;; the Makefile will build anyway
12940 (invoke "make" "check"))))))
12941 (native-inputs
12942 `(("procps" ,procps))) ; required for tests
12943 (home-page
12944 "https://github.com/dvarrazzo/py-setproctitle")
12945 (synopsis
12946 "Setproctitle implementation for Python to customize the process title")
12947 (description "The library allows a process to change its title (as displayed
12948 by system tools such as ps and top).
12949
12950 Changing the title is mostly useful in multi-process systems, for
12951 example when a master process is forked: changing the children's title
12952 allows identifying the task each process is busy with. The technique
12953 is used by PostgreSQL and the OpenSSH Server for example.")
12954 (license license:bsd-3)
12955 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12956
12957 (define-public python2-setproctitle
12958 (let ((base (package-with-python2
12959 (strip-python2-variant python-setproctitle))))
12960 (package
12961 (inherit base)
12962 (native-inputs `(("python2-nose" ,python2-nose)
12963 ,@(package-native-inputs base))))))
12964
12965 (define-public python-validictory
12966 (package
12967 (name "python-validictory")
12968 (version "1.0.1")
12969 (source
12970 (origin
12971 (method url-fetch)
12972 (uri (pypi-uri "validictory" version))
12973 (sha256
12974 (base32
12975 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12976 (build-system python-build-system)
12977 (arguments
12978 '(#:phases
12979 (modify-phases %standard-phases
12980 (add-after 'unpack 'bootstrap
12981 ;; Move the tests out of the package directory to avoid
12982 ;; packaging them.
12983 (lambda* _
12984 (rename-file "validictory/tests" "tests")
12985 (delete-file "tests/__init__.py")))
12986 (replace 'check
12987 (lambda _
12988 ;; Extend PYTHONPATH so the built package will be found.
12989 (setenv "PYTHONPATH"
12990 (string-append (getcwd) "/build/lib:"
12991 (getenv "PYTHONPATH")))
12992 (invoke "py.test" "-vv" ))))))
12993 (native-inputs
12994 `(("python-pytest" ,python-pytest)))
12995 (home-page
12996 "https://github.com/jamesturk/validictory")
12997 (synopsis "General purpose Python data validator")
12998 (description "It allows validation of arbitrary Python data structures.
12999
13000 The schema format is based on the JSON Schema
13001 proposal (http://json-schema.org), so combined with json the library is also
13002 useful as a validator for JSON data.")
13003 (license license:expat)))
13004
13005 (define-public python2-validictory
13006 (package-with-python2 python-validictory))
13007
13008 (define-public python-pyelftools
13009 (package
13010 (name "python-pyelftools")
13011 (version "0.25")
13012 (source
13013 (origin
13014 (method url-fetch)
13015 (uri (pypi-uri "pyelftools" version))
13016 (sha256
13017 (base32
13018 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13019 (build-system python-build-system)
13020 (arguments
13021 `(#:phases
13022 (modify-phases %standard-phases
13023 (add-before 'check 'set-pythonpath
13024 (lambda _
13025 (setenv "PYTHONPATH"
13026 (string-append
13027 (getcwd) "/test/"
13028 ":" (getenv "PYTHONPATH")))
13029 #t)))))
13030 (home-page
13031 "https://github.com/eliben/pyelftools")
13032 (synopsis
13033 "Analyze binary and library file information")
13034 (description "This Python library provides interfaces for parsing and
13035 analyzing two binary and library file formats; the Executable and Linking
13036 Format (ELF), and debugging information in the Debugging With Attributed
13037 Record Format (DWARF).")
13038 (license license:public-domain)))
13039
13040 (define-public python-pyev
13041 (package
13042 (name "python-pyev")
13043 (version "0.9.0")
13044 (source
13045 (origin
13046 (method url-fetch)
13047 (uri (pypi-uri "pyev" version))
13048 (sha256
13049 (base32
13050 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13051 (build-system python-build-system)
13052 (arguments
13053 `(#:tests? #f ; no test suite
13054 #:phases
13055 (modify-phases %standard-phases
13056 (add-after 'unpack 'patch
13057 (lambda* (#:key inputs #:allow-other-keys)
13058 (let ((libev (string-append (assoc-ref inputs "libev")
13059 "/lib/libev.so.4")))
13060 (substitute* "setup.py"
13061 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13062 (string-append "libev_dll_name = \"" libev "\"")))))))))
13063 (inputs
13064 `(("libev" ,libev)))
13065 (home-page "http://pythonhosted.org/pyev/")
13066 (synopsis "Python libev interface")
13067 (description "Pyev provides a Python interface to libev.")
13068 (license license:gpl3)))
13069
13070 (define-public python2-pyev
13071 (package-with-python2 python-pyev))
13072
13073 (define-public python-imagesize
13074 (package
13075 (name "python-imagesize")
13076 (version "1.2.0")
13077 (source
13078 (origin
13079 (method url-fetch)
13080 (uri (pypi-uri "imagesize" version))
13081 (sha256
13082 (base32
13083 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13084 (build-system python-build-system)
13085 (home-page "https://github.com/shibukawa/imagesize_py")
13086 (synopsis "Gets image size of files in various formats in Python")
13087 (description
13088 "This package allows determination of image size from
13089 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13090 (license license:expat)))
13091
13092 (define-public python2-imagesize
13093 (package-with-python2 python-imagesize))
13094
13095 (define-public python-termstyle
13096 (package
13097 (name "python-termstyle")
13098 (version "0.1.11")
13099 (source
13100 (origin
13101 (method url-fetch)
13102 (uri (pypi-uri "termstyle" version))
13103 (sha256
13104 (base32
13105 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13106 (build-system python-build-system)
13107 (arguments
13108 '(#:phases
13109 (modify-phases %standard-phases
13110 (replace 'check
13111 (lambda _
13112 (invoke "python" "test3.py"))))))
13113 (home-page "https://github.com/gfxmonk/termstyle")
13114 (synopsis "Console text coloring for Python")
13115 (description "This package provides console text coloring for Python.")
13116 (license license:bsd-3)))
13117
13118 (define-public python-argcomplete
13119 (package
13120 (name "python-argcomplete")
13121 (version "1.11.1")
13122 (source
13123 (origin
13124 (method url-fetch)
13125 (uri (pypi-uri "argcomplete" version))
13126 (sha256
13127 (base32
13128 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13129 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13130 (build-system python-build-system)
13131 (native-inputs
13132 `(("python-coverage" ,python-coverage)
13133 ("python-flake8" ,python-flake8)
13134 ("python-pexpect" ,python-pexpect)
13135 ("python-wheel" ,python-wheel)
13136 ("tcsh" ,tcsh)
13137 ("fish" ,fish)
13138 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13139 (home-page "https://github.com/kislyuk/argcomplete")
13140 (synopsis "Shell tab completion for Python argparse")
13141 (description "argcomplete provides extensible command line tab completion
13142 of arguments and options for Python scripts using @code{argparse}. It's
13143 particularly useful for programs with many options or sub-parsers that can
13144 dynamically suggest completions; for example, when browsing resources over the
13145 network.")
13146 (license license:asl2.0)))
13147
13148 (define-public python2-argcomplete
13149 (package-with-python2 python-argcomplete))
13150
13151 (define-public python-xopen
13152 (package
13153 (name "python-xopen")
13154 (version "0.5.0")
13155 (source
13156 (origin
13157 (method url-fetch)
13158 (uri (pypi-uri "xopen" version))
13159 (sha256
13160 (base32
13161 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13162 (build-system python-build-system)
13163 (propagated-inputs
13164 `(("python-setuptools-scm" ,python-setuptools-scm)))
13165 (home-page "https://github.com/marcelm/xopen/")
13166 (synopsis "Open compressed files transparently")
13167 (description "This module provides an @code{xopen} function that works like
13168 Python's built-in @code{open} function, but can also deal with compressed files.
13169 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13170 recognized by their file extensions. The focus is on being as efficient as
13171 possible on all supported Python versions.")
13172 (license license:expat)))
13173
13174 (define-public python2-xopen
13175 (let ((base (package-with-python2
13176 (strip-python2-variant python-xopen))))
13177 (package
13178 (inherit base)
13179 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13180 ,@(package-propagated-inputs base))))))
13181
13182 (define-public python-cheetah
13183 (package
13184 (name "python-cheetah")
13185 (version "3.2.4")
13186 (source
13187 (origin
13188 (method url-fetch)
13189 (uri (pypi-uri "Cheetah3" version))
13190 (sha256
13191 (base32
13192 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13193 (build-system python-build-system)
13194 (arguments
13195 `(#:modules ((guix build utils)
13196 (guix build python-build-system)
13197 (ice-9 ftw)
13198 (srfi srfi-1)
13199 (srfi srfi-26))
13200 #:phases (modify-phases %standard-phases
13201 (add-after 'unpack 'use-absolute-python
13202 (lambda _
13203 (substitute* "Cheetah/CheetahWrapper.py"
13204 (("#!/usr/bin/env python")
13205 (string-append "#!" (which "python"))))
13206 #t))
13207 (add-after 'unpack 'fix-tests
13208 (lambda _
13209 (substitute* "Cheetah/Tests/ImportHooks.py"
13210 (("os.path.dirname\\(__file__\\)")
13211 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13212 #t))
13213 (replace 'check
13214 (lambda _
13215 (let ((cwd (getcwd)))
13216 (setenv "PYTHONPATH"
13217 (string-append
13218 cwd "/build/"
13219 (find (cut string-prefix? "lib" <>)
13220 (scandir (string-append cwd "/build")))
13221 ":" (getenv "PYTHONPATH")))
13222 (setenv "PATH"
13223 (string-append (getenv "PATH")
13224 ":" cwd "/bin"))
13225 (setenv "TMPDIR" "/tmp")
13226
13227 (substitute* "Cheetah/Tests/Test.py"
13228 (("unittest.TextTestRunner\\(\\)")
13229 "unittest.TextTestRunner(verbosity=2)"))
13230
13231 (invoke "python" "Cheetah/Tests/Test.py")))))))
13232 (propagated-inputs
13233 `(("python-markdown" ,python-markdown))) ;optional
13234 (home-page "https://cheetahtemplate.org/")
13235 (synopsis "Template engine")
13236 (description "Cheetah is a text-based template engine and Python code
13237 generator.
13238
13239 Cheetah can be used as a standalone templating utility or referenced as
13240 a library from other Python applications. It has many potential uses,
13241 but web developers looking for a viable alternative to ASP, JSP, PHP and
13242 PSP are expected to be its principle user group.
13243
13244 Features:
13245 @enumerate
13246 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13247 text-based format.
13248 @item Cleanly separates content, graphic design, and program code.
13249 @item Blends the power and flexibility of Python with a simple template language
13250 that non-programmers can understand.
13251 @item Gives template writers full access to any Python data structure, module,
13252 function, object, or method in their templates.
13253 @item Makes code reuse easy by providing an object-orientated interface to
13254 templates that is accessible from Python code or other Cheetah templates.
13255 One template can subclass another and selectively reimplement sections of it.
13256 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13257 improve the performance of a dynamic website.
13258 @item Compiles templates into optimized, yet readable, Python code.
13259 @end enumerate")
13260 (license (license:x11-style "file://LICENSE"))))
13261
13262 (define-public python2-cheetah
13263 (package-with-python2 python-cheetah))
13264
13265 (define-public python-dulwich
13266 (package
13267 (name "python-dulwich")
13268 (version "0.19.16")
13269 (source
13270 (origin
13271 (method url-fetch)
13272 (uri (list (string-append "https://www.dulwich.io/releases/"
13273 "dulwich-" version ".tar.gz")
13274 (pypi-uri "dulwich" version)))
13275 (sha256
13276 (base32
13277 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13278 (build-system python-build-system)
13279 (arguments
13280 `(#:phases
13281 (modify-phases %standard-phases
13282 (add-before 'check 'fix-tests
13283 (lambda* (#:key inputs #:allow-other-keys)
13284 ;; The tests use Popen with a custom environment which doesn't
13285 ;; include PATH.
13286 (substitute* "dulwich/tests/compat/utils.py"
13287 (("'git'") (string-append "'"
13288 (which "git")
13289 "'")))
13290 (substitute* '("dulwich/tests/test_repository.py"
13291 "dulwich/tests/test_hooks.py")
13292 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13293 (setenv "TEST_RUNNER" "unittest")
13294 (setenv "PYTHONHASHSEED" "random")
13295 #t)))))
13296 (propagated-inputs
13297 `(("python-fastimport" ,python-fastimport)
13298 ("python-urllib3" ,python-urllib3)))
13299 (native-inputs
13300 `(("python-mock" ,python-mock)
13301 ("python-geventhttpclient" ,python-geventhttpclient)
13302 ("git" ,git)))
13303 (home-page "https://www.dulwich.io/")
13304 (synopsis "Git implementation in Python")
13305 (description "Dulwich is an implementation of the Git file formats and
13306 protocols written in pure Python.")
13307 ;; Can be used with either license.
13308 (license (list license:asl2.0 license:gpl2+))))
13309
13310 (define-public python2-dulwich
13311 (package-with-python2 python-dulwich))
13312
13313 (define-public python-pbkdf2
13314 (package
13315 (name "python-pbkdf2")
13316 (version "1.3")
13317 (source
13318 (origin
13319 (method url-fetch)
13320 (uri (pypi-uri "pbkdf2" version))
13321 (sha256
13322 (base32
13323 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13324 (build-system python-build-system)
13325 (arguments
13326 '(#:phases
13327 (modify-phases %standard-phases
13328 (replace 'check
13329 (lambda _
13330 (setenv "PYTHONPATH"
13331 (string-append (getcwd) "/build/lib:"
13332 (getenv "PYTHONPATH")))
13333 (invoke "python" "test/test_pbkdf2.py"))))))
13334 (propagated-inputs
13335 `(("python-pycrypto" ,python-pycrypto))) ; optional
13336 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13337 (synopsis "Password-based key derivation")
13338 (description "This module implements the password-based key derivation
13339 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13340
13341 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13342 is part of the RSA Public Key Cryptography Standards series. The provided
13343 implementation takes a password or a passphrase and a salt value (and
13344 optionally a iteration count, a digest module, and a MAC module) and provides
13345 a file-like object from which an arbitrarly-sized key can be read.")
13346 (license license:expat)))
13347
13348 (define-public python2-pbkdf2
13349 (package-with-python2 python-pbkdf2))
13350
13351 (define-public python-qrcode
13352 (package
13353 (name "python-qrcode")
13354 (version "6.1")
13355 (source
13356 (origin
13357 (method url-fetch)
13358 (uri (pypi-uri "qrcode" version))
13359 (sha256
13360 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13361 (build-system python-build-system)
13362 (arguments
13363 ;; FIXME: Tests require packaging 'pymaging'.
13364 '(#:tests? #f))
13365 (propagated-inputs
13366 `(("python-lxml" ,python-lxml) ; for SVG output
13367 ("python-pillow" ,python-pillow) ; for PNG output
13368 ("python-six" ,python-six)))
13369 (home-page "https://github.com/lincolnloop/python-qrcode")
13370 (synopsis "QR Code image generator")
13371 (description "This package provides a pure Python QR Code generator
13372 module. It uses the Python Imaging Library (PIL) to allow for the generation
13373 of QR Codes.
13374
13375 In addition this package provides a command line tool to generate QR codes and
13376 either write these QR codes to a file or do the output as ascii art at the
13377 console.")
13378 (license license:bsd-3)))
13379
13380 (define-public python2-qrcode
13381 (package-with-python2 python-qrcode))
13382
13383 (define-public python-rst2ansi
13384 (package
13385 (name "python-rst2ansi")
13386 (version "0.1.5")
13387 (source
13388 (origin
13389 (method url-fetch)
13390 (uri (pypi-uri "rst2ansi" version))
13391 (sha256
13392 (base32
13393 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13394 (build-system python-build-system)
13395 (propagated-inputs
13396 `(("python-docutils" ,python-docutils)))
13397 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13398 (synopsis "Convert RST to ANSI-decorated console output")
13399 (description
13400 "Python module dedicated to rendering RST (reStructuredText) documents
13401 to ansi-escaped strings suitable for display in a terminal.")
13402 (license license:expat)))
13403
13404 (define-public python-ansi2html
13405 (package
13406 (name "python-ansi2html")
13407 (version "1.2.0")
13408 (source
13409 (origin
13410 (method url-fetch)
13411 (uri (pypi-uri "ansi2html" version))
13412 (sha256
13413 (base32
13414 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13415 (build-system python-build-system)
13416 (native-inputs
13417 `(("python-mock" ,python-mock)
13418 ("python-nose" ,python-nose)))
13419 (propagated-inputs
13420 `(("python-six" ,python-six)))
13421 (home-page "https://github.com/ralphbean/ansi2html")
13422 (synopsis "Convert ANSI-decorated console output to HTML")
13423 (description
13424 "@command{ansi2html} is a Python library and command line utility for
13425 convering text with ANSI color codes to HTML or LaTeX.")
13426 (license license:gpl3+)))
13427
13428 (define-public python2-ansi2html
13429 (package-with-python2 python-ansi2html))
13430
13431 (define-public python-ddt
13432 (package
13433 (name "python-ddt")
13434 (version "1.1.3")
13435 (source
13436 (origin
13437 (method url-fetch)
13438 (uri (pypi-uri "ddt" version))
13439 (sha256
13440 (base32
13441 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13442 (build-system python-build-system)
13443 (native-inputs
13444 `(("python-mock" ,python-mock)
13445 ("python-nose" ,python-nose)))
13446 (propagated-inputs
13447 `(("python-six" ,python-six)
13448 ("python-pyyaml" ,python-pyyaml)))
13449 (home-page "https://github.com/txels/ddt")
13450 (synopsis "Data-Driven Tests")
13451 (description
13452 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13453 running it with different test data, and make it appear as multiple test
13454 cases.")
13455 (license license:expat)))
13456
13457 (define-public python2-ddt
13458 (package-with-python2 python-ddt))
13459
13460 (define-public python-pycountry
13461 (package
13462 (name "python-pycountry")
13463 (version "18.5.26")
13464 (source
13465 (origin
13466 (method url-fetch)
13467 (uri (pypi-uri "pycountry" version))
13468 (sha256
13469 (base32
13470 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13471 (build-system python-build-system)
13472 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13473 (synopsis "ISO databases for languages, countries, currencies, etc.")
13474 (description
13475 "@code{pycountry} provides the ISO databases for the standards:
13476 @enumerate
13477 @item 639-3 (Languages)
13478 @item 3166 (Countries)
13479 @item 3166-3 (Deleted Countries)
13480 @item 3166-2 (Subdivisions of countries)
13481 @item 4217 (Currencies)
13482 @item 15924 (Scripts)
13483 @end enumerate
13484 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13485 through a Python API.")
13486 (license license:lgpl2.1+)))
13487
13488 (define-public python2-pycountry
13489 (package-with-python2 python-pycountry))
13490
13491 (define-public python-pycosat
13492 (package
13493 (name "python-pycosat")
13494 (version "0.6.1")
13495 (source
13496 (origin
13497 (method url-fetch)
13498 (uri (pypi-uri "pycosat" version))
13499 (sha256
13500 (base32
13501 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13502 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13503 (build-system python-build-system)
13504 (home-page "https://github.com/ContinuumIO/pycosat")
13505 (synopsis "Bindings to picosat (a SAT solver)")
13506 (description
13507 "This package provides efficient Python bindings to @code{picosat} on
13508 the C level. When importing pycosat, the @code{picosat} solver becomes part
13509 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13510 Problem} (SAT) solver.")
13511 (license license:expat)))
13512
13513 (define-public python2-pycosat
13514 (package-with-python2 python-pycosat))
13515
13516 (define-public python2-ruamel.ordereddict
13517 (package
13518 (name "python2-ruamel.ordereddict")
13519 (version "0.4.9")
13520 (source
13521 (origin
13522 (method url-fetch)
13523 (uri (pypi-uri "ruamel.ordereddict" version))
13524 (sha256
13525 (base32
13526 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13527 (build-system python-build-system)
13528 (arguments
13529 `(#:python ,python-2
13530 #:phases
13531 (modify-phases %standard-phases
13532 (delete 'check)
13533 (add-after 'install 'check
13534 (lambda* (#:key inputs outputs #:allow-other-keys)
13535 (add-installed-pythonpath inputs outputs)
13536 (invoke "python" "test/testordereddict.py"))))))
13537 (home-page "https://bitbucket.org/ruamel/ordereddict")
13538 (synopsis "Version of dict that keeps keys in insertion order")
13539 (description
13540 "This is an implementation of an ordered dictionary with @dfn{Key
13541 Insertion Order} (KIO: updates of values do not affect the position of the
13542 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13543 removed and put at the back). The standard library module @code{OrderedDict},
13544 implemented later, implements a subset of @code{ordereddict} functionality.
13545 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13546 Order} (KSO, no sorting function can be specified, but a transform can be
13547 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13548 (license license:expat)))
13549
13550 (define-public python-pypeg2
13551 (package
13552 (name "python-pypeg2")
13553 (version "2.15.2")
13554 (source
13555 (origin
13556 (method url-fetch)
13557 (uri (pypi-uri "pyPEG2" version))
13558 (sha256
13559 (base32
13560 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13561 (build-system python-build-system)
13562 (propagated-inputs `(("python-lxml" ,python-lxml)))
13563 (arguments
13564 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13565 '(#:tests? #f))
13566 (home-page "https://fdik.org/pyPEG/")
13567 (synopsis "Parsering Expression Grammars in Python")
13568 (description "PyPEG is an intrinsic parser interpreter framework for
13569 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13570 parse many formal languages.")
13571 (license license:gpl2)))
13572
13573 (define-public python-incremental
13574 (package
13575 (name "python-incremental")
13576 (version "17.5.0")
13577 (source
13578 (origin
13579 (method url-fetch)
13580 (uri (pypi-uri "incremental" version))
13581 (sha256
13582 (base32
13583 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13584 (build-system python-build-system)
13585 (home-page "https://github.com/hawkowl/incremental")
13586 (synopsis "Library for versioning Python projects")
13587 (description "Incremental is a small library that versions your Python
13588 projects.")
13589 (license license:expat)))
13590
13591 (define-public python2-incremental
13592 (package-with-python2 python-incremental))
13593
13594 (define-public python-invoke
13595 (package
13596 (name "python-invoke")
13597 (home-page "https://www.pyinvoke.org/")
13598 (version "1.3.0")
13599 (source (origin
13600 (method url-fetch)
13601 (uri (pypi-uri "invoke" version))
13602 (sha256
13603 (base32
13604 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13605 (build-system python-build-system)
13606 (arguments
13607 ;; XXX: Requires many dependencies that are not yet in Guix.
13608 `(#:tests? #f))
13609 (synopsis "Pythonic task execution")
13610 (description
13611 "Invoke is a Python task execution tool and library, drawing inspiration
13612 from various sources to arrive at a powerful and clean feature set. It is
13613 evolved from the Fabric project, but focuses on local and abstract concerns
13614 instead of servers and network commands.")
13615 (license license:bsd-3)))
13616
13617 (define-public python2-invoke
13618 (package-with-python2 python-invoke))
13619
13620 (define-public python-automat
13621 (package
13622 (name "python-automat")
13623 (version "20.2.0")
13624 (source (origin
13625 (method url-fetch)
13626 (uri (pypi-uri "Automat" version))
13627 (sha256
13628 (base32
13629 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13630 (build-system python-build-system)
13631 ;; We disable the tests because they require python-twisted, while
13632 ;; python-twisted depends on python-automat. Twisted is optional, but the
13633 ;; tests fail if it is not available. Also see
13634 ;; <https://github.com/glyph/automat/issues/71>.
13635 (arguments '(#:tests? #f))
13636 (native-inputs
13637 `(("python-m2r" ,python-m2r)
13638 ("python-setuptools-scm" ,python-setuptools-scm)
13639 ("python-graphviz" ,python-graphviz)))
13640 (propagated-inputs
13641 `(("python-six" ,python-six)
13642 ("python-attrs" ,python-attrs)))
13643 (home-page "https://github.com/glyph/Automat")
13644 (synopsis "Self-service finite-state machines")
13645 (description "Automat is a library for concise, idiomatic Python
13646 expression of finite-state automata (particularly deterministic finite-state
13647 transducers).")
13648 (license license:expat)))
13649
13650 (define-public python2-automat
13651 (package-with-python2 python-automat))
13652
13653 (define-public python-m2r
13654 (package
13655 (name "python-m2r")
13656 (version "0.2.1")
13657 (source (origin
13658 (method url-fetch)
13659 (uri (pypi-uri "m2r" version))
13660 (sha256
13661 (base32
13662 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13663 (build-system python-build-system)
13664 (propagated-inputs
13665 `(("python-docutils" ,python-docutils)
13666 ("python-mistune" ,python-mistune)))
13667 (native-inputs
13668 `(("python-pygments" ,python-pygments)
13669 ("python-mock" ,python-mock)))
13670 (home-page "https://github.com/miyakogi/m2r")
13671 (synopsis "Markdown to reStructuredText converter")
13672 (description "M2R converts a markdown file including reST markups to valid
13673 reST format.")
13674 (license license:expat)))
13675
13676 (define-public python2-m2r
13677 (package-with-python2 python-m2r))
13678
13679 (define-public python-constantly
13680 (package
13681 (name "python-constantly")
13682 (version "15.1.0")
13683 (source (origin
13684 (method url-fetch)
13685 (uri (pypi-uri "constantly" version))
13686 (sha256
13687 (base32
13688 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13689 (build-system python-build-system)
13690 (home-page "https://github.com/twisted/constantly")
13691 (synopsis "Symbolic constants in Python")
13692 (description "Constantly is a Python library that provides symbolic
13693 constant support. It includes collections and constants with text, numeric,
13694 and bit flag values.")
13695 (license license:expat)))
13696
13697 (define-public python2-constantly
13698 (package-with-python2 python-constantly))
13699
13700 (define-public python-attrs
13701 (package
13702 (name "python-attrs")
13703 (version "19.3.0")
13704 (source (origin
13705 (method url-fetch)
13706 (uri (pypi-uri "attrs" version))
13707 (sha256
13708 (base32
13709 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13710 (build-system python-build-system)
13711 (arguments
13712 `(#:modules ((guix build utils)
13713 (guix build python-build-system)
13714 (ice-9 ftw)
13715 (srfi srfi-1)
13716 (srfi srfi-26))
13717 #:phases (modify-phases %standard-phases
13718 (replace 'check
13719 (lambda _
13720 (let ((cwd (getcwd)))
13721 (setenv "PYTHONPATH"
13722 (string-append
13723 cwd "/build/"
13724 (find (cut string-prefix? "lib" <>)
13725 (scandir (string-append cwd "/build")))
13726 ":"
13727 (getenv "PYTHONPATH")))
13728 (invoke "python" "-m" "pytest")))))))
13729 (native-inputs
13730 `(("python-coverage" ,python-coverage)
13731 ("python-hypothesis" ,python-hypothesis)
13732 ("python-pympler" ,python-pympler)
13733 ("python-pytest" ,python-pytest)
13734 ("python-six" ,python-six)
13735 ("python-sphinx" ,python-sphinx)
13736 ("python-zope-interface" ,python-zope-interface)))
13737 (home-page "https://github.com/python-attrs/attrs/")
13738 (synopsis "Attributes without boilerplate")
13739 (description "@code{attrs} is a Python package with class decorators that
13740 ease the chores of implementing the most common attribute-related object
13741 protocols.")
13742 (license license:expat)))
13743
13744 (define-public python2-attrs
13745 (package-with-python2 python-attrs))
13746
13747 (define-public python-attrs-bootstrap
13748 (package
13749 (inherit python-attrs)
13750 (name "python-attrs-bootstrap")
13751 (native-inputs `())
13752 (arguments `(#:tests? #f))))
13753
13754 (define-public python2-attrs-bootstrap
13755 (package-with-python2 python-attrs-bootstrap))
13756
13757 (define-public python2-cliapp
13758 (package
13759 (name "python2-cliapp")
13760 (version "1.20180812.1")
13761 (source
13762 (origin
13763 (method url-fetch)
13764 (uri (string-append
13765 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13766 version ".tar.gz"))
13767 (sha256
13768 (base32
13769 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13770 (build-system python-build-system)
13771 (arguments
13772 `(#:python ,python-2
13773 #:phases
13774 (modify-phases %standard-phases
13775 ;; check phase needs to be run before the build phase. If not,
13776 ;; coverage-test-runner looks for tests for the built source files,
13777 ;; and fails.
13778 (delete 'check)
13779 (add-before 'build 'check
13780 (lambda _
13781 ;; Disable python3 tests
13782 (substitute* "check"
13783 (("python3") "# python3"))
13784 (invoke "./check"))))))
13785 (native-inputs
13786 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13787 ("python2-pep8" ,python2-pep8)))
13788 (propagated-inputs
13789 `(("python2-pyaml" ,python2-pyaml)))
13790 (home-page "https://liw.fi/cliapp/")
13791 (synopsis "Python framework for command line programs")
13792 (description "@code{python2-cliapp} is a python framework for
13793 command line programs. It contains the typical stuff such programs
13794 need to do, such as parsing the command line for options, and
13795 iterating over input files.")
13796 (license license:gpl2+)))
13797
13798 (define-public python2-ttystatus
13799 (package
13800 (name "python2-ttystatus")
13801 (version "0.36")
13802 (source
13803 (origin
13804 (method url-fetch)
13805 (uri (string-append
13806 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13807 version ".tar.gz"))
13808 (sha256
13809 (base32
13810 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13811 (build-system python-build-system)
13812 (native-inputs
13813 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13814 ("python2-pep8" ,python2-pep8)))
13815 (arguments
13816 `(#:python ,python-2
13817 #:phases
13818 (modify-phases %standard-phases
13819 ;; check phase needs to be run before the build phase. If not,
13820 ;; coverage-test-runner looks for tests for the built source files,
13821 ;; and fails.
13822 (delete 'check)
13823 (add-before 'build 'check
13824 (lambda _ (invoke "make" "check"))))))
13825 (home-page "https://liw.fi/ttystatus/")
13826 (synopsis "Python library for showing progress reporting and
13827 status updates on terminals")
13828 (description "@code{python2-ttystatus} is a python library for
13829 showing progress reporting and status updates on terminals, for
13830 command line programs. Output is automatically adapted to the width
13831 of the terminal: truncated if it does not fit, and resized if the
13832 terminal size changes.")
13833 (license license:gpl3+)))
13834
13835 (define-public python2-tracing
13836 (package
13837 (name "python2-tracing")
13838 (version "0.10")
13839 (source
13840 (origin
13841 (method url-fetch)
13842 (uri (string-append
13843 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13844 version ".tar.gz"))
13845 (sha256
13846 (base32
13847 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13848 (build-system python-build-system)
13849 (arguments
13850 `(#:python ,python-2))
13851 (home-page "https://liw.fi/tracing/")
13852 (synopsis "Python debug logging helper")
13853 (description "@code{python2-tracing} is a python library for
13854 logging debug messages. It provides a way to turn debugging messages
13855 on and off, based on the filename they occur in. It is much faster
13856 than using @code{logging.Filter} to accomplish the same thing, which
13857 matters when code is run in production mode. The actual logging still
13858 happens using the @code{logging} library.")
13859 (license license:gpl3+)))
13860
13861 (define-public python2-larch
13862 (package
13863 (name "python2-larch")
13864 (version "1.20151025")
13865 (source
13866 (origin
13867 (method url-fetch)
13868 (uri (string-append
13869 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13870 version ".tar.gz"))
13871 (patches (search-patches
13872 "python2-larch-coverage-4.0a6-compatibility.patch"))
13873 (sha256
13874 (base32
13875 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13876 (build-system python-build-system)
13877 (arguments
13878 `(#:python ,python-2
13879 #:phases
13880 (modify-phases %standard-phases
13881 ;; check phase needs to be run before the build phase. If not,
13882 ;; coverage-test-runner looks for tests for the built source files,
13883 ;; and fails.
13884 (delete 'check)
13885 (add-before 'build 'check
13886 (lambda _ (invoke "make" "check"))))))
13887 (native-inputs
13888 `(("cmdtest" ,cmdtest)
13889 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13890 (propagated-inputs
13891 `(("python2-tracing" ,python2-tracing)))
13892 (home-page "https://liw.fi/larch/")
13893 (synopsis "Python copy-on-write B-tree library")
13894 (description "@code{python2-larch} is an implementation of
13895 particular kind of B-tree, based on research by Ohad Rodeh. See
13896 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13897 on the data structure.
13898
13899 The distinctive feature of this B-tree is that a node is never
13900 (conceptually) modified. Instead, all updates are done by
13901 copy-on-write. This makes it easy to clone a tree, and modify only the
13902 clone, while other processes access the original tree.")
13903 (license license:gpl3+)))
13904
13905 (define-public python-astroid
13906 (package
13907 (name "python-astroid")
13908 (version "2.3.3")
13909 (source
13910 (origin
13911 (method url-fetch)
13912 (uri (pypi-uri "astroid" version))
13913 (sha256
13914 (base32 "0fnibsl2cb5mvzbfm7sycj85smx48f8w8m7ks1sqlmpr9ps0gski"))))
13915 (build-system python-build-system)
13916 (propagated-inputs
13917 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13918 ("python-six" ,python-six)
13919 ("python-typed-ast" ,python-typed-ast)
13920 ("python-wrapt" ,python-wrapt)))
13921 (native-inputs
13922 `(("python-dateutil" ,python-dateutil)
13923 ("python-nose" ,python-nose)
13924 ("python-pytest" ,python-pytest)
13925 ("python-pytest-runner" ,python-pytest-runner)))
13926 (arguments
13927 `(#:phases
13928 (modify-phases %standard-phases
13929 (add-after 'unpack 'remove-spurious-test
13930 (lambda _
13931 ;; This can be removed after upgrading from python-3.7
13932 ;; https://github.com/PyCQA/astroid/issues/593
13933 ;; https://bugs.python.org/issue34056
13934 (delete-file "astroid/tests/unittest_modutils.py")
13935 #t))
13936 (replace 'check
13937 (lambda _
13938 (invoke "pytest" "astroid"))))))
13939 (home-page "https://github.com/PyCQA/astroid")
13940 (synopsis "Common base representation of python source code for pylint and
13941 other projects")
13942 (description "@code{python-astroid} provides a common base representation
13943 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13944
13945 It provides a compatible representation which comes from the _ast module. It
13946 rebuilds the tree generated by the builtin _ast module by recursively walking
13947 down the AST and building an extended ast. The new node classes have
13948 additional methods and attributes for different usages. They include some
13949 support for static inference and local name scopes. Furthermore, astroid
13950 builds partial trees by inspecting living objects.")
13951 (license license:lgpl2.1+)
13952 (properties `((python2-variant . ,(delay python2-astroid))))))
13953
13954 (define-public python2-astroid
13955 (let ((base (package-with-python2
13956 (strip-python2-variant python-astroid))))
13957 (package (inherit base)
13958 ;; Version 2.x removes python2 support.
13959 (version "1.6.5")
13960 (source
13961 (origin
13962 (method url-fetch)
13963 (uri (pypi-uri "astroid" version))
13964 (sha256
13965 (base32
13966 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13967 (arguments
13968 (substitute-keyword-arguments (package-arguments base)
13969 ((#:phases phases)
13970 `(modify-phases ,phases
13971 (add-after 'unpack 'remove-spurious-test
13972 (lambda _
13973 ;; https://github.com/PyCQA/astroid/issues/276
13974 (delete-file "astroid/tests/unittest_brain.py")
13975 #t))
13976 (replace 'check
13977 (lambda _
13978 (invoke"python" "-m" "unittest" "discover"
13979 "-p" "unittest*.py")))))))
13980 (native-inputs `())
13981 (propagated-inputs
13982 `(("python2-backports-functools-lru-cache"
13983 ,python2-backports-functools-lru-cache)
13984 ("python2-enum34" ,python2-enum34)
13985 ("python2-singledispatch" ,python2-singledispatch)
13986 ,@(alist-delete "python-typed-ast"
13987 (package-propagated-inputs base)))))))
13988
13989 (define-public python-isort
13990 (package
13991 (name "python-isort")
13992 (version "4.3.4")
13993 (source
13994 (origin
13995 (method git-fetch)
13996 (uri (git-reference
13997 ;; Tests pass only from the Github sources
13998 (url "https://github.com/timothycrosley/isort")
13999 (commit version)))
14000 (file-name (git-file-name name version))
14001 (sha256
14002 (base32
14003 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
14004 (build-system python-build-system)
14005 (native-inputs
14006 `(("python-mock" ,python-mock)
14007 ("python-pytest" ,python-pytest)))
14008 (home-page "https://github.com/timothycrosley/isort")
14009 (synopsis "Python utility/library to sort python imports")
14010 (description "@code{python-isort} is a python utility/library to sort
14011 imports alphabetically, and automatically separated into sections. It
14012 provides a command line utility, a python library and plugins for various
14013 editors.")
14014 (license license:expat)
14015 (properties `((python2-variant . ,(delay python2-isort))))))
14016
14017 (define-public python2-isort
14018 (let ((base (package-with-python2
14019 (strip-python2-variant python-isort))))
14020 (package (inherit base)
14021 (native-inputs
14022 `(("python2-futures" ,python2-futures)
14023 ,@(package-native-inputs base))))))
14024
14025 (define-public python2-backports-functools-lru-cache
14026 (package
14027 (name "python2-backports-functools-lru-cache")
14028 (version "1.5")
14029 (source
14030 (origin
14031 (method url-fetch)
14032 ;; only the pypi tarballs contain the necessary metadata
14033 (uri (pypi-uri "backports.functools_lru_cache" version))
14034 (sha256
14035 (base32
14036 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
14037 (build-system python-build-system)
14038 (native-inputs
14039 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14040 (arguments
14041 `(#:python ,python-2))
14042 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14043 (synopsis "Backport of functools.lru_cache from Python 3.3")
14044 (description "@code{python2-backports-functools-lru-cache} is a backport
14045 of @code{functools.lru_cache} from python 3.3.")
14046 (license license:expat)))
14047
14048 (define-public python-configparser
14049 (package
14050 (name "python-configparser")
14051 (version "4.0.2")
14052 (source
14053 (origin
14054 (method url-fetch)
14055 (uri (pypi-uri "configparser" version))
14056 (sha256
14057 (base32
14058 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14059 (native-inputs
14060 `(("python-setuptools_scm" ,python-setuptools-scm)))
14061 (build-system python-build-system)
14062 (home-page "https://github.com/jaraco/configparser/")
14063 (synopsis "Backport of configparser from python 3.5")
14064 (description "@code{python-configparser} is a backport of
14065 @code{configparser} from Python 3.5 so that it can be used directly
14066 in other versions.")
14067 (license license:expat)))
14068
14069 (define-public python2-configparser
14070 (package-with-python2 python-configparser))
14071
14072 (define-public python-mando
14073 (package
14074 (name "python-mando")
14075 (version "0.6.4")
14076 (source (origin
14077 (method url-fetch)
14078 (uri (pypi-uri "mando" version))
14079 (sha256
14080 (base32
14081 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14082 (build-system python-build-system)
14083 (propagated-inputs
14084 `(("python-rst2ansi" ,python-rst2ansi)
14085 ("python-six" ,python-six)))
14086 (native-inputs
14087 `(("python-pytest" ,python-pytest)))
14088 (home-page "https://mando.readthedocs.org/")
14089 (synopsis
14090 "Wrapper around argparse, allowing creation of complete CLI applications")
14091 (description
14092 "This package is a wrapper around argparse, allowing you to write complete CLI
14093 applications in seconds while maintaining all the flexibility.")
14094 (license license:expat)))
14095
14096 (define-public python2-mando
14097 (package-with-python2 python-mando))
14098
14099 (define-public python2-argparse
14100 (package
14101 (name "python2-argparse")
14102 (version "1.4.0")
14103 (source
14104 (origin
14105 (method url-fetch)
14106 (uri (pypi-uri "argparse" version))
14107 (sha256
14108 (base32
14109 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14110 (build-system python-build-system)
14111 (arguments
14112 `(#:python ,python-2))
14113 (home-page "https://github.com/ThomasWaldmann/argparse/")
14114 (synopsis "Python command-line parsing library")
14115 (description
14116 "This package is mostly for people who want to have @code{argparse} on
14117 older Pythons because it was not part of the standard library back then.")
14118 (license license:psfl)))
14119
14120 (define-public python-fudge
14121 (package
14122 (name "python-fudge")
14123 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14124 ;; package, which is currently the only use of this package.
14125 (version "0.9.6")
14126 (source
14127 (origin
14128 (method url-fetch)
14129 (uri (pypi-uri "fudge" version))
14130 (sha256
14131 (base32
14132 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14133 (build-system python-build-system)
14134 (arguments
14135 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14136 (home-page "https://github.com/fudge-py/fudge")
14137 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14138 (description
14139 "Fudge is a Python module for using fake objects (mocks and stubs) to
14140 test real ones.
14141
14142 In readable Python code, you declare the methods available on your fake object
14143 and how they should be called. Then you inject that into your application and
14144 start testing. This declarative approach means you don’t have to record and
14145 playback actions and you don’t have to inspect your fakes after running code.
14146 If the fake object was used incorrectly then you’ll see an informative
14147 exception message with a traceback that points to the culprit.")
14148 (license license:expat)))
14149
14150 (define-public python2-fudge
14151 (package-with-python2 python-fudge))
14152
14153 (define-public python-mwclient
14154 (package
14155 (name "python-mwclient")
14156 (version "0.10.0")
14157 (source
14158 (origin
14159 (method git-fetch)
14160 ;; The PyPI version wouldn't contain tests.
14161 (uri (git-reference
14162 (url "https://github.com/mwclient/mwclient")
14163 (commit (string-append "v" version))))
14164 (file-name (git-file-name name version))
14165 (sha256
14166 (base32
14167 "1c3q6lwmb05yqywc4ya98ca7hsl15niili8rccl4n1yqp77c103v"))))
14168 (build-system python-build-system)
14169 (propagated-inputs
14170 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14171 ("python-six" ,python-six)))
14172 (native-inputs
14173 `(("python-mock" ,python-mock)
14174 ("python-pytest" ,python-pytest)
14175 ("python-pytest-cov" ,python-pytest-cov)
14176 ("python-pytest-runner" ,python-pytest-runner)
14177 ("python-responses" ,python-responses)))
14178 (home-page "https://github.com/btongminh/mwclient")
14179 (synopsis "MediaWiki API client")
14180 (description "This package provides a MediaWiki API client.")
14181 (license license:expat)))
14182
14183 (define-public python2-mwclient
14184 (package-with-python2 python-mwclient))
14185
14186 (define-public python-utils
14187 (package
14188 (name "python-utils")
14189 (version "2.1.0")
14190 (source (origin
14191 (method url-fetch)
14192 (uri (pypi-uri "python-utils" version))
14193 (sha256
14194 (base32
14195 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14196 (build-system python-build-system)
14197 (native-inputs
14198 `(("pytest-runner" ,python-pytest-runner)
14199 ("pytest" ,python-pytest)
14200 ("six" ,python-six)))
14201 (home-page "https://github.com/WoLpH/python-utils")
14202 (synopsis "Convenient utilities not included with the standard Python install")
14203 (description
14204 "Python Utils is a collection of small Python functions and classes which
14205 make common patterns shorter and easier.")
14206 (license license:bsd-2)))
14207
14208 (define-public python2-utils
14209 (package-with-python2 python-utils))
14210
14211 (define-public python-diff-match-patch
14212 (package
14213 (name "python-diff-match-patch")
14214 (version "20121119")
14215 (source
14216 (origin
14217 (method url-fetch)
14218 (uri (pypi-uri "diff-match-patch" version))
14219 (sha256
14220 (base32
14221 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14222 (build-system python-build-system)
14223 (home-page "https://code.google.com/p/google-diff-match-patch")
14224 (synopsis "Synchronize plain text")
14225 (description "Diff Match and Patch libraries offer robust algorithms to
14226 perform the operations required for synchronizing plain text.")
14227 (license license:asl2.0)))
14228
14229 (define-public python2-diff-match-patch
14230 (package-with-python2 python-diff-match-patch))
14231
14232 (define-public python-dirsync
14233 (package
14234 (name "python-dirsync")
14235 (version "2.2.3")
14236 (source
14237 (origin
14238 (method url-fetch)
14239 (uri (pypi-uri "dirsync" version))
14240 (sha256
14241 (base32
14242 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14243 (build-system python-build-system)
14244 (propagated-inputs
14245 `(("six" ,python-six)))
14246 (home-page "https://bitbucket.org/tkhyn/dirsync")
14247 (synopsis "Advanced directory tree synchronisation tool")
14248 (description "Advanced directory tree synchronisation tool.")
14249 (license license:expat)))
14250
14251 (define-public python2-dirsync
14252 (package-with-python2 python-dirsync))
14253
14254 (define-public python-levenshtein
14255 (package
14256 (name "python-levenshtein")
14257 (version "0.12.0")
14258 (source
14259 (origin
14260 (method url-fetch)
14261 (uri (pypi-uri "python-Levenshtein" version))
14262 (sha256
14263 (base32
14264 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14265 (build-system python-build-system)
14266 (home-page "https://github.com/ztane/python-Levenshtein")
14267 (synopsis "Fast computation of Levenshtein distance and string similarity")
14268 (description
14269 "The Levenshtein Python C extension module contains functions for fast computation of
14270 @enumerate
14271 @item Levenshtein (edit) distance, and edit operations
14272 @item string similarity
14273 @item approximate median strings, and generally string averaging
14274 @item string sequence and set similarity
14275 @end enumerate
14276 It supports both normal and Unicode strings.")
14277 (license license:gpl2+)))
14278
14279 (define-public python2-levenshtein
14280 (package-with-python2 python-levenshtein))
14281
14282 (define-public python-scandir
14283 (package
14284 (name "python-scandir")
14285 (version "1.10.0")
14286 (source
14287 (origin
14288 (method url-fetch)
14289 (uri (pypi-uri "scandir" version))
14290 (sha256
14291 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14292 (build-system python-build-system)
14293 (arguments
14294 `(#:phases (modify-phases %standard-phases
14295 (replace 'check
14296 (lambda _
14297 (invoke "python" "test/run_tests.py"))))))
14298 (home-page "https://github.com/benhoyt/scandir")
14299 (synopsis "Directory iteration function")
14300 (description
14301 "Directory iteration function like os.listdir(), except that instead of
14302 returning a list of bare filenames, it yields DirEntry objects that include
14303 file type and stat information along with the name. Using scandir() increases
14304 the speed of os.walk() by 2-20 times (depending on the platform and file
14305 system) by avoiding unnecessary calls to os.stat() in most cases.
14306
14307 This package is part of the Python standard library since version 3.5.")
14308 (license license:bsd-3)))
14309
14310 (define-public python2-scandir
14311 (package-with-python2 python-scandir))
14312
14313 (define-public python2-stemming
14314 (package
14315 (name "python2-stemming")
14316 (version "1.0.1")
14317 (source
14318 (origin
14319 (method url-fetch)
14320 (uri (pypi-uri "stemming" version))
14321 (sha256
14322 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14323 (build-system python-build-system)
14324 (arguments
14325 `(#:python ,python-2))
14326 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14327 (synopsis "Python implementations of various stemming algorithms")
14328 (description
14329 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14330 stemming algorithms for English. These implementations are straightforward and
14331 efficient, unlike some Python versions of the same algorithms available on the
14332 Web. This package is an extraction of the stemming code included in the Whoosh
14333 search engine.")
14334 (license license:public-domain)))
14335
14336 (define-public python-factory-boy
14337 (package
14338 (name "python-factory-boy")
14339 (version "2.8.1")
14340 (source
14341 (origin
14342 (method url-fetch)
14343 (uri (pypi-uri "factory_boy" version))
14344 (sha256
14345 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14346 (build-system python-build-system)
14347 (arguments
14348 ;; Tests are not included in the tarball.
14349 `(#:tests? #f))
14350 (propagated-inputs
14351 `(("faker" ,python-faker)))
14352 (home-page "https://github.com/benhoyt/scandir")
14353 (synopsis "Versatile test fixtures replacement")
14354 (description
14355 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14356
14357 As a fixtures replacement tool, it aims to replace static, hard to maintain
14358 fixtures with easy-to-use factories for complex object.
14359
14360 Instead of building an exhaustive test setup with every possible combination
14361 of corner cases, factory_boy allows you to use objects customized for the
14362 current test, while only declaring the test-specific fields")
14363 (license license:expat)))
14364
14365 (define-public python2-factory-boy
14366 (package-with-python2 python-factory-boy))
14367
14368 (define-public python-translate-toolkit
14369 (package
14370 (name "python-translate-toolkit")
14371 (version "2.1.0")
14372 (source
14373 (origin
14374 (method url-fetch)
14375 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14376 (sha256
14377 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14378 (build-system python-build-system)
14379 (native-inputs
14380 `(("python-pytest" ,python-pytest)
14381 ("python-sphinx" ,python-sphinx)))
14382 (propagated-inputs
14383 `(("python-babel" ,python-babel)
14384 ("python-beautifulsoup4" ,python-beautifulsoup4)
14385 ("python-chardet" ,python-chardet)
14386 ("python-diff-match-patch" ,python-diff-match-patch)
14387 ("python-levenshtein" ,python-levenshtein)
14388 ("python-lxml" ,python-lxml)
14389 ("python-six" ,python-six)
14390 ("python-vobject" ,python-vobject)
14391 ("python-pyyaml" ,python-pyyaml)))
14392 (arguments
14393 ;; TODO: tests are not run, because they end with
14394 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14395 ;; 'parse_funcs'
14396 ;; during test setup.
14397 `(#:tests? #f))
14398 (home-page "https://toolkit.translatehouse.org")
14399 (synopsis "Tools and API for translation and localization engineering")
14400 (description
14401 "Tools and API for translation and localization engineering. It contains
14402 several utilities, as well as an API for building localization tools.")
14403 (license license:gpl2+)))
14404
14405 (define-public python2-translate-toolkit
14406 (package-with-python2 python-translate-toolkit))
14407
14408 (define-public python-packaging
14409 (package
14410 (name "python-packaging")
14411 (version "20.0")
14412 (source
14413 (origin
14414 (method url-fetch)
14415 (uri (pypi-uri "packaging" version))
14416 ;; XXX: The URL in the patch file is wrong, it should be
14417 ;; <https://github.com/pypa/packaging/pull/256>.
14418 (patches (search-patches "python-packaging-test-arch.patch"))
14419 (sha256
14420 (base32
14421 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14422 (build-system python-build-system)
14423 (arguments
14424 `(#:phases (modify-phases %standard-phases
14425 (replace 'check
14426 (lambda* (#:key tests? #:allow-other-keys)
14427 (if tests?
14428 (invoke "py.test" "-vv")
14429 (format #t "test suite not run~%"))
14430 #t)))))
14431 (native-inputs
14432 `(("python-pretend" ,python-pretend)
14433 ("python-pytest" ,python-pytest)))
14434 (propagated-inputs
14435 `(("python-pyparsing" ,python-pyparsing)
14436 ("python-six" ,python-six)))
14437 (home-page "https://github.com/pypa/packaging")
14438 (synopsis "Core utilities for Python packages")
14439 (description "Packaging is a Python module for dealing with Python packages.
14440 It offers an interface for working with package versions, names, and dependency
14441 information.")
14442 ;; From 'LICENSE': This software is made available under the terms of
14443 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14444 ;; Contributions to this software is made under the terms of *both* these
14445 ;; licenses.
14446 (license (list license:asl2.0 license:bsd-2))))
14447
14448 (define-public python2-packaging
14449 (package-with-python2 python-packaging))
14450
14451 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14452 (define-public python-packaging-bootstrap
14453 (hidden-package
14454 (package/inherit
14455 python-packaging
14456 (name "python-packaging-bootstrap")
14457 (native-inputs '())
14458 (propagated-inputs
14459 `(("python-pyparsing" ,python-pyparsing)))
14460 (arguments '(#:tests? #f)))))
14461
14462 (define-public python2-packaging-bootstrap
14463 (hidden-package
14464 (package/inherit
14465 python2-packaging
14466 (name "python2-packaging-bootstrap")
14467 (native-inputs '())
14468 (propagated-inputs
14469 `(("python-pyparsing" ,python2-pyparsing)))
14470 (arguments
14471 `(#:tests? #f
14472 ,@(package-arguments python2-packaging))))))
14473
14474 (define-public python-relatorio
14475 (package
14476 (name "python-relatorio")
14477 (version "0.8.0")
14478 (source
14479 (origin
14480 (method url-fetch)
14481 (uri (pypi-uri "relatorio" version))
14482 (sha256
14483 (base32
14484 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14485 (build-system python-build-system)
14486 (propagated-inputs
14487 `(("python-lxml" ,python-lxml)
14488 ("python-genshi" ,python-genshi)))
14489 (native-inputs
14490 `(("python-magic" ,python-magic)))
14491 (home-page "https://relatorio.tryton.org/")
14492 (synopsis "Templating library able to output ODT and PDF files")
14493 (description "Relatorio is a templating library which provides a way to
14494 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14495 for more filetypes can be easily added by creating plugins for them.")
14496 (license license:gpl3+)))
14497
14498 (define-public python2-relatorio
14499 (package-with-python2 python-relatorio))
14500
14501 (define-public python-radon
14502 (package
14503 (name "python-radon")
14504 (version "4.1.0")
14505 (source
14506 (origin
14507 (method url-fetch)
14508 (uri (pypi-uri "radon" version))
14509 (sha256
14510 (base32
14511 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14512 (build-system python-build-system)
14513 (arguments
14514 `(#:phases (modify-phases %standard-phases
14515 (replace 'check
14516 (lambda _
14517 (invoke "python" "radon/tests/run.py"))))))
14518 (propagated-inputs
14519 `(("python-colorama" ,python-colorama)
14520 ("python-flake8-polyfill" ,python-flake8-polyfill)
14521 ("python-mando" ,python-mando)))
14522 (native-inputs
14523 `(("python-pytest" ,python-pytest)
14524 ("python-pytest-mock" ,python-pytest-mock)))
14525 (home-page "https://radon.readthedocs.org/")
14526 (synopsis "Code Metrics in Python")
14527 (description "Radon is a Python tool which computes various code metrics.
14528 Supported metrics are:
14529 @itemize @bullet
14530 @item raw metrics: SLOC, comment lines, blank lines, &c.
14531 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14532 @item Halstead metrics (all of them)
14533 @item the Maintainability Index (a Visual Studio metric)
14534 @end itemize")
14535 (properties `((python2-variant . ,(delay python2-radon))))
14536 (license license:expat)))
14537
14538 (define-public python2-radon
14539 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14540 (package
14541 (inherit base)
14542 (propagated-inputs
14543 `(("python-configparser" ,python2-configparser)
14544 ("python-future" ,python2-future)
14545 ,@(package-propagated-inputs base))))))
14546
14547 (define-public python-sure
14548 (package
14549 (name "python-sure")
14550 (version "1.4.11")
14551 (source
14552 (origin
14553 (method url-fetch)
14554 (uri (pypi-uri "sure" version))
14555 (sha256
14556 (base32
14557 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14558 (build-system python-build-system)
14559 (propagated-inputs
14560 `(("python-mock" ,python-mock)
14561 ("python-six" ,python-six)))
14562 (native-inputs
14563 `(("python-nose" ,python-nose)))
14564 (home-page "https://github.com/gabrielfalcao/sure")
14565 (synopsis "Automated testing library in python for python")
14566 (description
14567 "Sure is a python library that leverages a DSL for writing assertions.
14568 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14569 (license license:gpl3+)))
14570
14571 (define-public python2-sure
14572 (package-with-python2 python-sure))
14573
14574 (define-public python2-couleur
14575 ;; This package does not seem to support python3 at all, hence,
14576 ;; only the python2 variant definition is provided.
14577 (package
14578 (name "python2-couleur")
14579 (version "0.6.2")
14580 (source
14581 (origin
14582 (method url-fetch)
14583 (uri (pypi-uri "couleur" version))
14584 (sha256
14585 (base32
14586 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14587 (build-system python-build-system)
14588 (arguments
14589 `(#:python ,python-2))
14590 (home-page "https://github.com/gabrielfalcao/couleur")
14591 (synopsis
14592 "ANSI terminal tool for python, colored shell and other handy fancy features")
14593 (description
14594 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14595 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14596 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14597 ;; https://github.com/gabrielfalcao/couleur/issues/11
14598 (license license:lgpl3+)))
14599
14600 (define-public python-misaka
14601 (package
14602 (name "python-misaka")
14603 (version "2.1.1")
14604 (source
14605 (origin
14606 (method url-fetch)
14607 (uri (pypi-uri "misaka" version))
14608 (sha256
14609 (base32
14610 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14611 (build-system python-build-system)
14612 (arguments
14613 `(;; Line 37 of setup.py calls self.run_command('develop')
14614 ;; in the 'check' phase. This command seems to be trying
14615 ;; to write to
14616 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14617 ;; for which it does not have the permission to write.
14618 #:tests? #f))
14619 (propagated-inputs
14620 `(("python-cffi" ,python-cffi)))
14621 (home-page "https://github.com/FSX/misaka")
14622 (synopsis "Python binding for Hoedown")
14623 (description
14624 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14625 library written in C. It features a fast HTML renderer and functionality to make custom
14626 renderers (e.g. man pages or LaTeX).")
14627 (license license:expat)))
14628
14629 (define-public python2-misaka
14630 (package-with-python2 python-misaka))
14631
14632 (define-public python2-steadymark
14633 ;; This is forced into being a python2 only variant
14634 ;; due to its dependence on couleur that has no support
14635 ;; for python3
14636 (package
14637 (name "python2-steadymark")
14638 (version "0.7.3")
14639 (source
14640 (origin
14641 (method url-fetch)
14642 (uri (pypi-uri "steadymark" version))
14643 (sha256
14644 (base32
14645 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14646 (build-system python-build-system)
14647 (native-inputs
14648 `(("python-couleur" ,python2-couleur)
14649 ("python-sure" ,python2-sure)
14650 ("python-misaka" ,python2-misaka)))
14651 (arguments
14652 `(#:python ,python-2
14653 #:phases
14654 (modify-phases %standard-phases
14655 (add-before 'build 'patch-setup-py
14656 (lambda _
14657 ;; Update requirements from dependency==version
14658 ;; to dependency>=version
14659 (substitute* "setup.py"
14660 (("==") ">="))
14661 #t)))))
14662 (home-page "https://github.com/gabrielfalcao/steadymark")
14663 (synopsis "Markdown-based test runner for python")
14664 (description
14665 "@code{Steadymark} allows documentation to be written in github-flavoured
14666 markdown. The documentation may contain snippets of code surrounded by python
14667 code blocks and @code{Steadymark} will find these snippets and run them, making
14668 sure that there are no old malfunctional examples in the documentation examples.")
14669 (license license:expat)))
14670
14671 (define-public python-jsonpointer
14672 (package
14673 (name "python-jsonpointer")
14674 (version "1.10")
14675 (source
14676 (origin
14677 (method url-fetch)
14678 (uri (pypi-uri "jsonpointer" version))
14679 (sha256
14680 (base32
14681 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14682 (build-system python-build-system)
14683 (home-page "https://github.com/stefankoegl/python-json-pointer")
14684 (synopsis "Identify specific nodes in a JSON document")
14685 (description "@code{jsonpointer} allows you to access specific nodes
14686 by path in a JSON document (see RFC 6901).")
14687 (license license:bsd-3)))
14688
14689 (define-public python2-jsonpointer
14690 (package-with-python2 python-jsonpointer))
14691
14692 (define-public python-jsonpatch
14693 (package
14694 (name "python-jsonpatch")
14695 (version "1.16")
14696 (source
14697 (origin
14698 (method git-fetch)
14699 ;; pypi version lacks tests.js
14700 (uri (git-reference
14701 (url "https://github.com/stefankoegl/python-json-patch")
14702 (commit (string-append "v" version))))
14703 (file-name (git-file-name name version))
14704 (sha256
14705 (base32
14706 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14707 (build-system python-build-system)
14708 (native-inputs
14709 `(("python-jsonpointer" ,python-jsonpointer)))
14710 (home-page "https://github.com/stefankoegl/python-json-patch")
14711 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14712 (description "@code{jsonpatch} is a library and program that allows
14713 applying JSON Patches according to RFC 6902.")
14714 (license license:bsd-3)))
14715
14716 (define-public python2-jsonpatch
14717 (package-with-python2 python-jsonpatch))
14718
14719 (define-public python-jsonpatch-0.4
14720 (package (inherit python-jsonpatch)
14721 (name "python-jsonpatch")
14722 (version "0.4")
14723 (source
14724 (origin
14725 (method git-fetch)
14726 (uri (git-reference
14727 (url "https://github.com/stefankoegl/python-json-patch")
14728 (commit (string-append "v" version))))
14729 (file-name (git-file-name name version))
14730 (sha256
14731 (base32
14732 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14733
14734 (define-public python2-jsonpatch-0.4
14735 (package-with-python2 python-jsonpatch-0.4))
14736
14737 (define-public python-rfc3986
14738 (package
14739 (name "python-rfc3986")
14740 (version "1.1.0")
14741 (source (origin
14742 (method url-fetch)
14743 (uri (pypi-uri "rfc3986" version))
14744 (sha256
14745 (base32
14746 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14747 (build-system python-build-system)
14748 (arguments
14749 `(#:modules ((guix build utils)
14750 (guix build python-build-system)
14751 (ice-9 ftw)
14752 (srfi srfi-1)
14753 (srfi srfi-26))
14754 #:phases
14755 (modify-phases %standard-phases
14756 (replace 'check
14757 (lambda _
14758 (let ((cwd (getcwd)))
14759 (setenv "PYTHONPATH"
14760 (string-append cwd "/build/"
14761 (find (cut string-prefix? "lib" <>)
14762 (scandir (string-append cwd "/build")))
14763 ":"
14764 (getenv "PYTHONPATH")))
14765 (invoke "pytest" "-v")))))))
14766 (native-inputs
14767 `(("python-pytest" ,python-pytest)))
14768 (home-page "https://rfc3986.readthedocs.io/")
14769 (synopsis "Parse and validate URI references")
14770 (description
14771 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14772 validation and authority parsing. This module also supports RFC@tie{}6874
14773 which adds support for zone identifiers to IPv6 addresses.")
14774 (license license:asl2.0)))
14775
14776 (define-public python2-rfc3986
14777 (package-with-python2 python-rfc3986))
14778
14779 (define-public python-rfc3987
14780 (package
14781 (name "python-rfc3987")
14782 (version "1.3.7")
14783 (source
14784 (origin
14785 (method url-fetch)
14786 (uri (pypi-uri "rfc3987" version))
14787 (sha256
14788 (base32
14789 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14790 (build-system python-build-system)
14791 (home-page "https://pypi.org/project/rfc3987/")
14792 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14793 (description "@code{rfc3987} provides routines for parsing and
14794 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14795 (license license:gpl3+)))
14796
14797 (define-public python2-rfc3987
14798 (package-with-python2 python-rfc3987))
14799
14800 (define-public python-validators
14801 (package
14802 (name "python-validators")
14803 (version "0.14.2")
14804 (source (origin
14805 (method url-fetch)
14806 (uri (pypi-uri "validators" version))
14807 (sha256
14808 (base32
14809 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14810 (build-system python-build-system)
14811 (arguments
14812 '(#:phases (modify-phases %standard-phases
14813 (replace 'check
14814 (lambda _
14815 (invoke "pytest" "-vv"))))))
14816 (propagated-inputs
14817 `(("python-decorator" ,python-decorator)
14818 ("python-six" ,python-six)))
14819 (native-inputs
14820 `(("python-flake8" ,python-flake8)
14821 ("python-isort" ,python-isort)
14822 ("python-pytest" ,python-pytest)))
14823 (home-page "https://github.com/kvesteri/validators")
14824 (synopsis "Data validation library")
14825 (description
14826 "This package contains validators for different things such as email
14827 addresses, IP addresses, URLs, hashes and more. It has been designed to
14828 be easy to use and not require defining a schema or form just to validate
14829 some input.")
14830 (license license:expat)))
14831
14832 (define-public python2-validators
14833 (package-with-python2 python-validators))
14834
14835 (define-public python-validate-email
14836 (package
14837 (name "python-validate-email")
14838 (version "1.3")
14839 (source
14840 (origin
14841 (method url-fetch)
14842 (uri (pypi-uri "validate_email" version))
14843 (sha256
14844 (base32
14845 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14846 (build-system python-build-system)
14847 (home-page "https://github.com/syrusakbary/validate_email")
14848 (synopsis "Verifies if an email address is valid and really exists")
14849 (description "@code{validate_email} can be used to verify if an email
14850 address is valid and really exists.")
14851 (license license:lgpl3+)))
14852
14853 (define-public python2-validate-email
14854 (package-with-python2 python-validate-email))
14855
14856 (define-public python-flex
14857 (package
14858 (name "python-flex")
14859 (version "6.10.0")
14860 (source
14861 (origin
14862 (method url-fetch)
14863 (uri (pypi-uri "flex" version))
14864 (sha256
14865 (base32
14866 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14867 (build-system python-build-system)
14868 (propagated-inputs
14869 `(("python-click" ,python-click)
14870 ("python-iso8601" ,python-iso8601)
14871 ("python-jsonpointer" ,python-jsonpointer)
14872 ("python-pyyaml" ,python-pyyaml)
14873 ("python-requests" ,python-requests)
14874 ("python-rfc3987" ,python-rfc3987)
14875 ("python-six" ,python-six)
14876 ("python-validate-email" ,python-validate-email)))
14877 (home-page "https://github.com/pipermerriam/flex")
14878 (synopsis "Validates Swagger schemata")
14879 (description "@code{flex} can be used to validate Swagger schemata.")
14880 (license license:bsd-3)))
14881
14882 (define-public python2-flex
14883 (package-with-python2 python-flex))
14884
14885 (define-public python-marshmallow
14886 (package
14887 (name "python-marshmallow")
14888 (version "3.0.0b14")
14889 (source
14890 (origin
14891 (method url-fetch)
14892 (uri (pypi-uri "marshmallow" version))
14893 (sha256
14894 (base32
14895 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14896 (build-system python-build-system)
14897 (propagated-inputs
14898 `(("python-dateutil" ,python-dateutil)
14899 ("python-simplejson" ,python-simplejson)))
14900 (native-inputs
14901 `(("python-pytest" ,python-pytest)
14902 ("python-pytz" ,python-pytz)))
14903 (home-page "https://github.com/marshmallow-code/marshmallow")
14904 (synopsis "Convert complex datatypes to and from native
14905 Python datatypes.")
14906 (description "@code{marshmallow} provides a library for converting
14907 complex datatypes to and from native Python datatypes.")
14908 (license license:expat)))
14909
14910 (define-public python2-marshmallow
14911 (package-with-python2 python-marshmallow))
14912
14913 (define-public python-apispec
14914 (package
14915 (name "python-apispec")
14916 (version "0.25.3")
14917 (source
14918 (origin
14919 (method url-fetch)
14920 (uri (pypi-uri "apispec" version))
14921 (sha256
14922 (base32
14923 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14924 (build-system python-build-system)
14925 (propagated-inputs
14926 `(("python-pyyaml" ,python-pyyaml)))
14927 (native-inputs
14928 `(("python-pytest" ,python-pytest)
14929 ("python-flask" ,python-flask)
14930 ("python-marshmallow" ,python-marshmallow)
14931 ("python-tornado" ,python-tornado)
14932 ("python-bottle" ,python-bottle)
14933 ("python-mock" ,python-mock)))
14934 (home-page "https://github.com/marshmallow-code/apispec")
14935 (synopsis "Swagger 2.0 API specification generator")
14936 (description "@code{python-apispec} is a pluggable API specification
14937 generator. Currently supports the OpenAPI specification (f.k.a.
14938 Swagger 2.0).")
14939 (license license:expat)))
14940
14941 (define-public python2-apispec
14942 (package-with-python2 python-apispec))
14943
14944 (define-public python-flasgger
14945 (package
14946 (name "python-flasgger")
14947 (version "0.6.3")
14948 (source
14949 (origin
14950 (method git-fetch)
14951 (uri (git-reference
14952 (url "https://github.com/rochacbruno/flasgger.git")
14953 (commit version)))
14954 (file-name (git-file-name name version))
14955 (sha256
14956 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14957 (build-system python-build-system)
14958 (arguments
14959 `(#:phases
14960 (modify-phases %standard-phases
14961 (replace 'check
14962 (lambda* (#:key inputs outputs #:allow-other-keys)
14963 (substitute* "Makefile"
14964 (("flake8 flasgger --ignore=F403")
14965 "flake8 flasgger --ignore=E731,F403"))
14966 (setenv "PYTHONPATH" (string-append (getcwd)
14967 ":"
14968 (getenv "PYTHONPATH")))
14969 (invoke "py.test"))))))
14970 (propagated-inputs
14971 `(("python-flask" ,python-flask)
14972 ("python-pyyaml" ,python-pyyaml)
14973 ("python-jsonschema" ,python-jsonschema)
14974 ("python-mistune" ,python-mistune)
14975 ("python-six" ,python-six)))
14976 (native-inputs
14977 `(("python-decorator" ,python-decorator)
14978 ("python-flake8" ,python-flake8)
14979 ("python-flask-restful" ,python-flask-restful)
14980 ("python-flex" ,python-flex)
14981 ("python-pytest" ,python-pytest)
14982 ("python-pytest-cov" ,python-pytest-cov)
14983 ("python-marshmallow" ,python-marshmallow)
14984 ("python-apispec" ,python-apispec)))
14985 (home-page "https://github.com/rochacbruno/flasgger/")
14986 (synopsis "Extract Swagger specs from your Flask project")
14987 (description "@code{python-flasgger} allows extracting Swagger specs
14988 from your Flask project. It is a fork of Flask-Swagger.")
14989 (license license:expat)))
14990
14991 (define-public python2-flasgger
14992 (package-with-python2 python-flasgger))
14993
14994 (define-public python-swagger-spec-validator
14995 (package
14996 (name "python-swagger-spec-validator")
14997 (version "2.4.3")
14998 (source
14999 (origin
15000 (method url-fetch)
15001 (uri (pypi-uri "swagger-spec-validator" version))
15002 (sha256
15003 (base32
15004 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
15005 (build-system python-build-system)
15006 (propagated-inputs
15007 `(("python-jsonschema" ,python-jsonschema)
15008 ("python-pyyaml" ,python-pyyaml)
15009 ("python-six" ,python-six)))
15010 (home-page
15011 "https://github.com/Yelp/swagger_spec_validator")
15012 (synopsis "Validation of Swagger specifications")
15013 (description "@code{swagger_spec_validator} provides a library for
15014 validating Swagger API specifications.")
15015 (license license:asl2.0)))
15016
15017 (define-public python2-swagger-spec-validator
15018 (package-with-python2 python-swagger-spec-validator))
15019
15020 (define-public python-apache-libcloud
15021 (package
15022 (name "python-apache-libcloud")
15023 (version "2.4.0")
15024 (source
15025 (origin
15026 (method url-fetch)
15027 (uri (pypi-uri "apache-libcloud" version))
15028 (sha256
15029 (base32
15030 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15031 (build-system python-build-system)
15032 (arguments
15033 `(#:phases
15034 (modify-phases %standard-phases
15035 (add-after 'unpack 'patch-ssh
15036 (lambda* (#:key inputs #:allow-other-keys)
15037 (substitute* "libcloud/compute/ssh.py"
15038 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15039 "/bin/ssh" "'")))
15040 #t))
15041 (add-after 'unpack 'patch-tests
15042 (lambda _
15043 (substitute* "./libcloud/test/test_file_fixtures.py"
15044 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15045 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15046 return (httplib.OK,
15047 \"1234abcd\",
15048 {\"test\": \"value\"},
15049 httplib.responses[httplib.OK])
15050 def _ascii"))
15051 (substitute* "libcloud/test/compute/test_ssh_client.py"
15052 (("class ShellOutSSHClientTests")
15053 "@unittest.skip(\"Guix container doesn't have ssh service\")
15054 class ShellOutSSHClientTests")
15055 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15056 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15057 (("'.xF0', '.x90', '.x8D', '.x88'")
15058 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15059 #t))
15060 (add-before 'check 'copy-secret
15061 (lambda _
15062 (copy-file "libcloud/test/secrets.py-dist"
15063 "libcloud/test/secrets.py")
15064 #t)))))
15065 (inputs
15066 `(("openssh" ,openssh)))
15067 (propagated-inputs
15068 `(("python-paramiko" ,python-paramiko)
15069 ("python-requests" ,python-requests)))
15070 (native-inputs
15071 `(("python-lockfile" ,python-lockfile)
15072 ("python-mock" ,python-mock)
15073 ("python-pytest" ,python-pytest)
15074 ("python-pytest-runner" ,python-pytest-runner)
15075 ("python-requests-mock" ,python-requests-mock)))
15076 (home-page "https://libcloud.apache.org/")
15077 (synopsis "Unified Cloud API")
15078 (description "@code{libcloud} is a Python library for interacting with
15079 many of the popular cloud service providers using a unified API.")
15080 (license license:asl2.0)))
15081
15082 (define-public python2-apache-libcloud
15083 (package-with-python2 python-apache-libcloud))
15084
15085 (define-public python-smmap
15086 (package
15087 (name "python-smmap")
15088 (version "3.0.1")
15089 (source
15090 (origin
15091 (method url-fetch)
15092 (uri (pypi-uri "smmap" version))
15093 (sha256
15094 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15095 (build-system python-build-system)
15096 (native-inputs
15097 `(("python-nosexcover" ,python-nosexcover)))
15098 (home-page "https://github.com/Byron/smmap")
15099 (synopsis "Python sliding window memory map manager")
15100 (description "@code{smmap} is a pure Python implementation of a sliding
15101 window memory map manager.")
15102 (license license:bsd-3)))
15103
15104 (define-public python-smmap2
15105 (deprecated-package "python-smmap2" python-smmap))
15106
15107 (define-public python2-smmap
15108 (package-with-python2 python-smmap))
15109
15110 (define-public python2-smmap2
15111 (deprecated-package "python2-smmap2" python2-smmap))
15112
15113 (define-public python-regex
15114 (package
15115 (name "python-regex")
15116 (version "2019.04.14")
15117 (source (origin
15118 (method url-fetch)
15119 (uri (pypi-uri "regex" version))
15120 (sha256
15121 (base32
15122 "1a6hhfs6l6snr1z654ay6wzbmwdkmv282fzfkd5hk2d1n73y8v6m"))))
15123 ;; TODO: Fix and enable regex_test.py tests that complain about the
15124 ;; test.support module not existing.
15125 (build-system python-build-system)
15126 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15127 (synopsis "Alternative regular expression module")
15128 (description "This regular expression implementation is backwards-
15129 compatible with the standard @code{re} module, but offers additional
15130 functionality like full case-folding for case-insensitive matches in Unicode.")
15131 (license license:psfl)))
15132
15133 (define-public python2-regex
15134 (package-with-python2 python-regex))
15135
15136 (define-public python2-pyopengl
15137 (package
15138 (name "python2-pyopengl")
15139 (version "3.1.0")
15140 (source
15141 (origin
15142 (method url-fetch)
15143 (uri (pypi-uri "PyOpenGL" version))
15144 (sha256
15145 (base32
15146 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
15147 (arguments
15148 `(#:python ,python-2))
15149 (build-system python-build-system)
15150 (home-page "http://pyopengl.sourceforge.net")
15151 (synopsis "Standard OpenGL bindings for Python")
15152 (description
15153 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15154 related APIs. The binding is created using the standard @code{ctypes}
15155 library.")
15156 (license license:bsd-3)))
15157
15158 (define-public python2-pyopengl-accelerate
15159 (package
15160 (inherit python2-pyopengl)
15161 (name "python2-pyopengl-accelerate")
15162 (version "3.1.0")
15163 (source
15164 (origin
15165 (method url-fetch)
15166 (uri (pypi-uri "PyOpenGL-accelerate" version))
15167 (sha256
15168 (base32
15169 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
15170 (synopsis "Acceleration code for PyOpenGL")
15171 (description
15172 "This is the Cython-coded accelerator module for PyOpenGL.")))
15173
15174 (define-public python-rencode
15175 (package
15176 (name "python-rencode")
15177 (version "1.0.5")
15178 (source
15179 (origin
15180 (method url-fetch)
15181 (uri (pypi-uri "rencode" version))
15182 (sha256
15183 (base32
15184 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15185 (build-system python-build-system)
15186 (arguments
15187 `(#:phases
15188 (modify-phases %standard-phases
15189 (add-before 'check 'delete-bogus-test
15190 ;; This test requires /home/aresch/Downloads, which is not provided by
15191 ;; the build environment.
15192 (lambda _
15193 (delete-file "rencode/t.py")
15194 #t)))))
15195 (native-inputs `(("pkg-config" ,pkg-config)
15196 ("python-cython" ,python-cython)))
15197 (home-page "https://github.com/aresch/rencode")
15198 (synopsis "Serialization of heterogeneous data structures")
15199 (description
15200 "The @code{rencode} module is a data structure serialization library,
15201 similar to @code{bencode} from the BitTorrent project. For complex,
15202 heterogeneous data structures with many small elements, r-encoding stake up
15203 significantly less space than b-encodings. This version of rencode is a
15204 complete rewrite in Cython to attempt to increase the performance over the
15205 pure Python module.")
15206 (license license:bsd-3)))
15207
15208 (define-public python2-rencode
15209 (package-with-python2 python-rencode))
15210
15211 (define-public python-xenon
15212 (package
15213 (name "python-xenon")
15214 (version "0.7.0")
15215 (source
15216 (origin
15217 (method url-fetch)
15218 (uri (pypi-uri "xenon" version))
15219 (sha256
15220 (base32
15221 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15222 (build-system python-build-system)
15223 (native-inputs
15224 `(("python-pyyaml" ,python-pyyaml)
15225 ("python-radon" ,python-radon)
15226 ("python-requests" ,python-requests)
15227 ("python-flake8" ,python-flake8)
15228 ("python-tox" ,python-tox)))
15229 (arguments
15230 `(#:tests? #f ;test suite not shipped with the PyPI archive
15231 #:phases
15232 (modify-phases %standard-phases
15233 (add-before 'build 'patch-test-requirements
15234 (lambda _
15235 ;; Remove httpretty dependency for tests.
15236 (substitute* "setup.py"
15237 (("httpretty") ""))
15238 #t)))))
15239 (home-page "https://xenon.readthedocs.org/")
15240 (synopsis "Monitor code metrics for Python on your CI server")
15241 (description
15242 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15243 Ideally, @code{xenon} is run every time code is committed. Through command
15244 line options, various thresholds can be set for the complexity of code. It
15245 will fail (i.e. it will exit with a non-zero exit code) when any of these
15246 requirements is not met.")
15247 (license license:expat)))
15248
15249 (define-public python2-xenon
15250 (package-with-python2 python-xenon))
15251
15252 (define-public python-pysocks
15253 (package
15254 (name "python-pysocks")
15255 (version "1.7.0")
15256 (source
15257 (origin
15258 (method url-fetch)
15259 (uri (pypi-uri "PySocks" version))
15260 (sha256
15261 (base32
15262 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15263 (build-system python-build-system)
15264 (arguments `(#:tests? #f))
15265 (home-page "https://github.com/Anorov/PySocks")
15266 (synopsis "SOCKS client module")
15267 (description "@code{pysocks} is an updated and semi-actively maintained
15268 version of @code{SocksiPy} with bug fixes and extra features.")
15269 (license license:bsd-3)))
15270
15271 (define-public python2-pysocks
15272 (package-with-python2 python-pysocks))
15273
15274 (define-public python-pydiff
15275 (package
15276 (name "python-pydiff")
15277 (version "0.2")
15278 (source
15279 (origin
15280 (method url-fetch)
15281 (uri (pypi-uri "pydiff" version))
15282 (sha256
15283 (base32
15284 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15285 (build-system python-build-system)
15286 (home-page "https://github.com/myint/pydiff")
15287 (synopsis "Library to diff two Python files at the bytecode level")
15288 (description
15289 "@code{pydiff} makes it easy to look for actual code changes while
15290 ignoring formatting changes.")
15291 (license license:expat)))
15292
15293 (define-public python2-pydiff
15294 (package-with-python2 python-pydiff))
15295
15296 (define-public python-tqdm
15297 (package
15298 (name "python-tqdm")
15299 (version "4.43.0")
15300 (source
15301 (origin
15302 (method url-fetch)
15303 (uri (pypi-uri "tqdm" version))
15304 (sha256
15305 (base32
15306 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15307 (build-system python-build-system)
15308 (arguments
15309 '(#:phases (modify-phases %standard-phases
15310 (replace 'check
15311 (lambda* (#:key inputs outputs #:allow-other-keys)
15312 (add-installed-pythonpath inputs outputs)
15313 ;; This invokation is taken from tox.ini.
15314 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15315 "-d" "-v" "tqdm/"))))))
15316 (native-inputs
15317 `(("python-nose" ,python-nose)))
15318 (home-page "https://github.com/tqdm/tqdm")
15319 (synopsis "Fast, extensible progress meter")
15320 (description
15321 "Make loops show a progress bar on the console by just wrapping any
15322 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15323 design and layout.")
15324 (license (list license:mpl2.0 license:expat))))
15325
15326 (define-public python2-tqdm
15327 (package-with-python2 python-tqdm))
15328
15329 (define-public python-pkginfo
15330 (package
15331 (name "python-pkginfo")
15332 (version "1.4.2")
15333 (source
15334 (origin
15335 (method url-fetch)
15336 (uri (pypi-uri "pkginfo" version))
15337 (sha256
15338 (base32
15339 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15340 (build-system python-build-system)
15341 (arguments
15342 ;; The tests are broken upstream.
15343 '(#:tests? #f))
15344 (home-page
15345 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15346 (synopsis
15347 "Query metadatdata from sdists, bdists, and installed packages")
15348 (description
15349 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15350 source distriubtion (an sdist) or a binary distribution (e.g., created by
15351 running bdist_egg). It can also query the EGG-INFO directory of an installed
15352 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15353 created by running @code{python setup.py develop}).")
15354 (license license:expat)))
15355
15356 (define-public python2-pkginfo
15357 (package-with-python2 python-pkginfo))
15358
15359 (define-public python-twine
15360 (package
15361 (name "python-twine")
15362 (version "1.9.1")
15363 (source
15364 (origin
15365 (method url-fetch)
15366 (uri (pypi-uri "twine" version))
15367 (sha256
15368 (base32
15369 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15370 (build-system python-build-system)
15371 (propagated-inputs
15372 `(("python-tqdm" ,python-tqdm)
15373 ("python-pkginfo" ,python-pkginfo)
15374 ("python-requests" ,python-requests)
15375 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15376 (home-page "https://github.com/pypa/twine")
15377 (synopsis "Collection of utilities for interacting with PyPI")
15378 (description
15379 "@code{twine} currently supports registering projects and uploading
15380 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15381 their files and supports any packaging format (including wheels).")
15382 (license license:asl2.0)))
15383
15384 (define-public python2-twine
15385 (package-with-python2 python-twine))
15386
15387 (define-public python-linecache2
15388 (package
15389 (name "python-linecache2")
15390 (version "1.0.0")
15391 (source
15392 (origin
15393 (method url-fetch)
15394 (uri (pypi-uri "linecache2" version))
15395 (sha256
15396 (base32
15397 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15398 (build-system python-build-system)
15399 (arguments
15400 `(;; The tests depend on unittest2, and our version is a bit too old.
15401 #:tests? #f))
15402 (native-inputs
15403 `(("python-pbr" ,python-pbr-minimal)))
15404 (home-page
15405 "https://github.com/testing-cabal/linecache2")
15406 (synopsis "Backports of the linecache module")
15407 (description
15408 "The linecache module allows one to get any line from any file, while
15409 attempting to optimize internally, using a cache, the common case where many
15410 lines are read from a single file.")
15411 (license license:psfl)))
15412
15413 (define-public python2-linecache2
15414 (package-with-python2 python-linecache2))
15415
15416 (define-public python-traceback2
15417 (package
15418 (name "python-traceback2")
15419 (version "1.4.0")
15420 (source
15421 (origin
15422 (method url-fetch)
15423 (uri (pypi-uri "traceback2" version))
15424 (sha256
15425 (base32
15426 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15427 (build-system python-build-system)
15428 (arguments
15429 `(;; python-traceback2 and python-unittest2 depend on one another.
15430 #:tests? #f))
15431 (native-inputs
15432 `(("python-pbr" ,python-pbr-minimal)))
15433 (propagated-inputs
15434 `(("python-linecache2" ,python-linecache2)))
15435 (home-page
15436 "https://github.com/testing-cabal/traceback2")
15437 (synopsis "Backports of the traceback module")
15438 (description
15439 "This module provides a standard interface to extract, format and print
15440 stack traces of Python programs. It exactly mimics the behavior of the Python
15441 interpreter when it prints a stack trace.")
15442 (license license:psfl)))
15443
15444 (define-public python2-traceback2
15445 (package-with-python2 python-traceback2))
15446
15447 (define-public python-ratelimiter
15448 (package
15449 (name "python-ratelimiter")
15450 (version "1.2.0")
15451 (source
15452 (origin
15453 (method url-fetch)
15454 (uri (pypi-uri "ratelimiter" version))
15455 (sha256
15456 (base32
15457 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15458 (build-system python-build-system)
15459 (arguments
15460 '(#:tests? #f)) ; There are no tests in the pypi archive.
15461 (home-page "https://github.com/RazerM/ratelimiter")
15462 (synopsis "Simple rate limiting object")
15463 (description
15464 "The @code{ratelimiter} module ensures that an operation will not be
15465 executed more than a given number of times during a given period.")
15466 (license license:asl2.0)))
15467
15468 (define-public python2-ratelimiter
15469 (package-with-python2 python-ratelimiter))
15470
15471 (define-public python-dukpy
15472 (package
15473 (name "python-dukpy")
15474 (version "0.3")
15475 (source
15476 (origin
15477 (method git-fetch)
15478 (uri (git-reference
15479 (url "https://github.com/kovidgoyal/dukpy.git")
15480 (commit (string-append "v" version))))
15481 (file-name (git-file-name name version))
15482 (sha256
15483 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15484 (build-system python-build-system)
15485 (home-page "https://github.com/kovidgoyal/dukpy")
15486 (synopsis "Run JavaScript in python")
15487 (description
15488 "dukpy is a JavaScript runtime environment for Python using the duktape
15489 embeddable JavaScript engine.")
15490 ;; Dukpy is licensed under MIT like the embedded duktape library,
15491 ;; with 'errors.c' as GPL3.
15492 (license (list license:expat license:gpl3))))
15493
15494 (define-public python2-dukpy
15495 (package-with-python2 python-dukpy))
15496
15497 (define-public python-jsonrpclib-pelix
15498 (package
15499 (name "python-jsonrpclib-pelix")
15500 (version "0.3.2")
15501 (source
15502 (origin
15503 (method url-fetch)
15504 (uri (pypi-uri "jsonrpclib-pelix" version))
15505 (sha256
15506 (base32
15507 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15508 (build-system python-build-system)
15509 (arguments
15510 `(#:tests? #f)) ; no tests in PyPI tarball
15511 (home-page "https://github.com/tcalmant/jsonrpclib/")
15512 (synopsis "JSON-RPC 2.0 client library for Python")
15513 (description
15514 "This library implements the JSON-RPC v2.0
15515 specification (backwards-compatible) as a client library for Python. This
15516 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15517 services.")
15518 (license license:asl2.0)))
15519
15520 (define-public python2-jsonrpclib-pelix
15521 (package-with-python2 python-jsonrpclib-pelix))
15522
15523 (define-public python-setuptools-scm-git-archive
15524 (package
15525 (name "python-setuptools-scm-git-archive")
15526 (version "1.0")
15527 (source
15528 (origin
15529 (method url-fetch)
15530 (uri (pypi-uri "setuptools_scm_git_archive" version))
15531 (sha256
15532 (base32
15533 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15534 (build-system python-build-system)
15535 (native-inputs
15536 `(("python-pytest" ,python-pytest)))
15537 (propagated-inputs
15538 `(("python-setuptools-scm" ,python-setuptools-scm)))
15539 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15540 (synopsis "Setuptools_scm plugin for git archives")
15541 (description
15542 "The setuptools_scm_git_archive package is a plugin to
15543 setuptools_scm, which supports obtaining versions from git archives that
15544 belong to tagged versions.")
15545 (license license:expat)))
15546
15547 (define-public python2-setuptools-scm-git-archive
15548 (package-with-python2 python-setuptools-scm-git-archive))
15549
15550 (define-public python-setuptools-git
15551 (package
15552 (name "python-setuptools-git")
15553 (version "1.2")
15554 (source
15555 (origin
15556 (method url-fetch)
15557 (uri (pypi-uri "setuptools-git" version))
15558 (sha256
15559 (base32
15560 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15561 (build-system python-build-system)
15562 (arguments
15563 `(#:phases
15564 (modify-phases %standard-phases
15565 ;; This is needed for tests.
15566 (add-after 'unpack 'configure-git
15567 (lambda _
15568 (setenv "HOME" "/tmp")
15569 (invoke "git" "config" "--global" "user.email" "guix")
15570 (invoke "git" "config" "--global" "user.name" "guix")
15571 #t)))))
15572 (native-inputs
15573 `(("git" ,git-minimal)))
15574 (home-page "https://github.com/msabramo/setuptools-git")
15575 (synopsis "Setuptools revision control system plugin for Git")
15576 (description
15577 "This package provides a plugin for Setuptools for revision control with
15578 Git.")
15579 (license license:bsd-3)))
15580
15581 (define-public python-pyclipper
15582 (package
15583 (name "python-pyclipper")
15584 (version "1.1.0.post3")
15585 (source
15586 (origin
15587 (method url-fetch)
15588 (uri (pypi-uri "pyclipper" version ".zip"))
15589 (sha256
15590 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15591 (modules '((guix build utils)))
15592 (snippet
15593 '(begin
15594 ;; This file is generated by Cython.
15595 (delete-file "pyclipper/pyclipper.cpp") #t))))
15596 (build-system python-build-system)
15597 (arguments
15598 `(#:phases
15599 (modify-phases %standard-phases
15600 (add-before 'build 'cythonize-sources
15601 (lambda _
15602 (with-directory-excursion "pyclipper"
15603 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15604 (propagated-inputs
15605 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15606 (native-inputs
15607 `(("python-cython" ,python-cython)
15608 ("python-pytest" ,python-pytest)
15609 ("python-pytest-runner" ,python-pytest-runner)
15610 ("python-unittest2" ,python-unittest2)
15611 ("unzip" ,unzip)))
15612 (home-page "https://github.com/greginvm/pyclipper")
15613 (synopsis "Wrapper for Angus Johnson's Clipper library")
15614 (description
15615 "Pyclipper is a Cython wrapper for the C++ translation of the
15616 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15617 (license license:expat)))
15618
15619 (define-public python2-pyclipper
15620 (package-with-python2 python-pyclipper))
15621
15622 (define-public python2-booleanoperations
15623 (package
15624 (name "python2-booleanoperations")
15625 (version "0.7.1")
15626 (source
15627 (origin
15628 (method url-fetch)
15629 (uri (pypi-uri "booleanOperations" version ".zip"))
15630 (sha256
15631 (base32
15632 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15633 (build-system python-build-system)
15634 (arguments
15635 `(#:python ,python-2))
15636 (native-inputs
15637 `(("unzip" ,unzip)
15638 ("python2-pytest" ,python2-pytest)
15639 ("python2-pytest-runner" ,python2-pytest-runner)))
15640 (propagated-inputs
15641 `(("python-fonttools" ,python2-fonttools)
15642 ("python-pyclipper" ,python2-pyclipper)
15643 ("python-ufolib" ,python2-ufolib)))
15644 (home-page "https://github.com/typemytype/booleanOperations")
15645 (synopsis "Boolean operations on paths")
15646 (description
15647 "BooleanOperations provides a Python library that enables
15648 boolean operations on paths.")
15649 (license license:expat)))
15650
15651 (define-public python-tempdir
15652 (package
15653 (name "python-tempdir")
15654 (version "0.7.1")
15655 (source
15656 (origin
15657 (method url-fetch)
15658 (uri (pypi-uri "tempdir" version))
15659 (sha256
15660 (base32
15661 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15662 (build-system python-build-system)
15663 (home-page "https://pypi.org/project/tempdir/")
15664 (arguments
15665 ;; the package has no tests
15666 '(#:tests? #f))
15667 (synopsis "Python library for managing temporary directories")
15668 (description
15669 "This library manages temporary directories that are automatically
15670 deleted with all their contents when they are no longer needed. It is
15671 particularly convenient for use in tests.")
15672 (license license:expat)))
15673
15674 (define-public python2-tempdir
15675 (package-with-python2 python-tempdir))
15676
15677 (define-public python-activepapers
15678 (package
15679 (name "python-activepapers")
15680 (version "0.2.2")
15681 (source
15682 (origin
15683 (method url-fetch)
15684 (uri (pypi-uri "ActivePapers.Py" version))
15685 (sha256
15686 (base32
15687 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15688 (build-system python-build-system)
15689 (arguments
15690 `(#:modules ((ice-9 ftw)
15691 (srfi srfi-1)
15692 (guix build utils)
15693 (guix build python-build-system))
15694
15695 #:phases
15696 (modify-phases %standard-phases
15697 (add-after 'unpack 'delete-python2-code
15698 (lambda _
15699 (for-each delete-file
15700 '("lib/activepapers/builtins2.py"
15701 "lib/activepapers/standardlib2.py"
15702 "lib/activepapers/utility2.py"))))
15703 (replace 'check
15704 (lambda _
15705 ;; Deactivate the test cases that download files
15706 (setenv "NO_NETWORK_ACCESS" "1")
15707 ;; For some strange reason, some tests fail if nosetests runs all
15708 ;; test modules in a single execution. They pass if each test
15709 ;; module is run individually.
15710 (for-each (lambda (filename)
15711 (invoke "nosetests"
15712 (string-append "tests/" filename)))
15713 (scandir "tests"
15714 (lambda (filename)
15715 (string-suffix? ".py" filename)))))))))
15716 (native-inputs
15717 `(("python-tempdir" ,python-tempdir)
15718 ("python-nose" ,python-nose)))
15719 (propagated-inputs
15720 `(("python-h5py" ,python-h5py)))
15721 (home-page "https://www.activepapers.org/")
15722 (synopsis "Executable papers for scientific computing")
15723 (description
15724 "ActivePapers is a tool for working with executable papers, which
15725 combine data, code, and documentation in single-file packages,
15726 suitable for publication as supplementary material or on repositories
15727 such as figshare or Zenodo.")
15728 (properties `((python2-variant . ,(delay python2-activepapers))))
15729 (license license:bsd-3)))
15730
15731 (define-public python2-activepapers
15732 (let ((base (package-with-python2
15733 (strip-python2-variant python-activepapers))))
15734 (package
15735 (inherit base)
15736 (arguments
15737 (substitute-keyword-arguments (package-arguments base)
15738 ((#:phases phases)
15739 `(modify-phases ,phases
15740 (delete 'delete-python2-code)
15741 (add-after 'unpack 'delete-python3-code
15742 (lambda _
15743 (for-each delete-file
15744 '("lib/activepapers/builtins3.py"
15745 "lib/activepapers/standardlib3.py"
15746 "lib/activepapers/utility3.py")))))))))))
15747
15748 (define-public python-semver
15749 (package
15750 (name "python-semver")
15751 (version "2.9.0")
15752 (source
15753 (origin
15754 (method url-fetch)
15755 (uri (pypi-uri "semver" version))
15756 (sha256
15757 (base32
15758 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15759 (build-system python-build-system)
15760 (native-inputs
15761 `(("python-appdirs" ,python-appdirs)
15762 ("python-distlib" ,python-distlib)
15763 ("python-importlib-metadata" ,python-importlib-metadata)
15764 ("python-filelock" ,python-filelock)
15765 ("python-six" ,python-six)
15766 ("python-tox" ,python-tox)
15767 ("python-virtualenv" ,python-virtualenv)))
15768 (home-page "https://github.com/k-bx/python-semver")
15769 (synopsis "Python helper for Semantic Versioning")
15770 (description "This package provides a Python library for
15771 @url{Semantic Versioning, http://semver.org/}.")
15772 (license license:bsd-3)))
15773
15774 (define-public python2-semver
15775 (package-with-python2 python-semver))
15776
15777 (define-public python-pyro4
15778 (package
15779 (name "python-pyro4")
15780 (version "4.77")
15781 (source
15782 (origin
15783 (method url-fetch)
15784 (uri (pypi-uri "Pyro4" version))
15785 (sha256
15786 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15787 (build-system python-build-system)
15788 (arguments
15789 '(#:tests? #f)) ;FIXME: Some tests require network access.
15790 (native-inputs
15791 `(("python-cloudpickle" ,python-cloudpickle)
15792 ("python-dill" ,python-dill)
15793 ("python-msgpack" ,python-msgpack)))
15794 (propagated-inputs
15795 `(("python-serpent" ,python-serpent)))
15796 (home-page "https://pyro4.readthedocs.io")
15797 (synopsis "Distributed object middleware for Python")
15798 (description
15799 "Pyro enables you to build applications in which objects can talk to each
15800 other over the network. You can just use normal Python method calls to call
15801 objects on other machines, also known as remote procedure calls (RPC).")
15802 (license license:expat)))
15803
15804 (define-public python2-pyro
15805 (package
15806 (name "python2-pyro")
15807 (version "3.16")
15808 (source
15809 (origin
15810 (method url-fetch)
15811 (uri (pypi-uri "Pyro" version))
15812 (file-name (string-append "Pyro-" version ".tar.gz"))
15813 (sha256
15814 (base32
15815 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15816 (build-system python-build-system)
15817 (arguments
15818 ;; Pyro is not compatible with Python 3
15819 `(#:python ,python-2
15820 ;; Pyro has no test cases for automatic execution
15821 #:tests? #f))
15822 (home-page "https://pythonhosted.org/Pyro/")
15823 (synopsis "Distributed object manager for Python")
15824 (description "Pyro is a Distributed Object Technology system
15825 written in Python that is designed to be easy to use. It resembles
15826 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15827 which is a system and language independent Distributed Object Technology
15828 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15829 longer maintained. New projects should use Pyro4 instead, which
15830 is the new Pyro version that is actively developed.")
15831 (license license:expat)))
15832
15833 (define-public python2-scientific
15834 (package
15835 (name "python2-scientific")
15836 (version "2.9.4")
15837 (source
15838 (origin
15839 (method git-fetch)
15840 (uri (git-reference
15841 (url "https://github.com/khinsen/ScientificPython")
15842 (commit (string-append "rel" version))))
15843 (file-name (git-file-name name version))
15844 (sha256
15845 (base32
15846 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15847 (build-system python-build-system)
15848 (inputs
15849 `(("netcdf" ,netcdf)))
15850 (propagated-inputs
15851 `(("python-numpy" ,python2-numpy-1.8)
15852 ("python-pyro" ,python2-pyro)))
15853 (arguments
15854 ;; ScientificPython is not compatible with Python 3
15855 `(#:python ,python-2
15856 #:tests? #f ; No test suite
15857 #:phases
15858 (modify-phases %standard-phases
15859 (replace 'build
15860 (lambda* (#:key inputs #:allow-other-keys)
15861 (invoke "python" "setup.py" "build"
15862 (string-append "--netcdf_prefix="
15863 (assoc-ref inputs "netcdf"))))))))
15864 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15865 (synopsis "Python modules for scientific computing")
15866 (description "ScientificPython is a collection of Python modules that are
15867 useful for scientific computing. Most modules are rather general (Geometry,
15868 physical units, automatic derivatives, ...) whereas others are more
15869 domain-specific (e.g. netCDF and PDB support). The library is currently
15870 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15871 (license license:cecill-c)))
15872
15873 (define-public python2-mmtk
15874 (package
15875 (name "python2-mmtk")
15876 (version "2.7.12")
15877 (source
15878 (origin
15879 (method git-fetch)
15880 (uri (git-reference
15881 (url "https://github.com/khinsen/MMTK")
15882 (commit (string-append "rel" version))))
15883 (file-name (git-file-name name version))
15884 (sha256
15885 (base32
15886 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15887 (build-system python-build-system)
15888 (native-inputs
15889 `(("netcdf" ,netcdf)))
15890 (propagated-inputs
15891 `(("python-scientific" ,python2-scientific)
15892 ("python-tkinter" ,python-2 "tk")))
15893 (arguments
15894 `(#:python ,python-2
15895 #:tests? #f
15896 #:phases
15897 (modify-phases %standard-phases
15898 (add-before 'build 'includes-from-scientific
15899 (lambda* (#:key inputs #:allow-other-keys)
15900 (mkdir-p "Include/Scientific")
15901 (copy-recursively
15902 (string-append
15903 (assoc-ref inputs "python-scientific")
15904 "/include/python2.7/Scientific")
15905 "Include/Scientific"))))))
15906 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15907 (synopsis "Python library for molecular simulation")
15908 (description "MMTK is a library for molecular simulations with an emphasis
15909 on biomolecules. It provides widely used methods such as Molecular Dynamics
15910 and normal mode analysis, but also basic routines for implementing new methods
15911 for simulation and analysis. The library is currently not actively maintained
15912 and works only with Python 2 and NumPy < 1.9.")
15913 (license license:cecill-c)))
15914
15915 (define-public python-phonenumbers
15916 (package
15917 (name "python-phonenumbers")
15918 (version "8.9.1")
15919 (source
15920 (origin
15921 (method url-fetch)
15922 (uri (pypi-uri "phonenumbers" version))
15923 (sha256
15924 (base32
15925 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15926 (build-system python-build-system)
15927 (home-page
15928 "https://github.com/daviddrysdale/python-phonenumbers")
15929 (synopsis
15930 "Python library for dealing with international phone numbers")
15931 (description
15932 "This package provides a Python port of Google's libphonenumber library.")
15933 (license license:asl2.0)))
15934
15935 (define-public python2-phonenumbers
15936 (package-with-python2 python-phonenumbers))
15937
15938 (define-public python-send2trash
15939 (package
15940 (name "python-send2trash")
15941 (version "1.5.0")
15942 (source
15943 (origin (method git-fetch)
15944 ;; Source tarball on PyPI doesn't include tests.
15945 (uri (git-reference
15946 (url "https://github.com/hsoft/send2trash.git")
15947 (commit version)))
15948 (file-name (git-file-name name version))
15949 (sha256
15950 (base32
15951 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15952 (build-system python-build-system)
15953 (arguments
15954 '(#:phases
15955 (modify-phases %standard-phases
15956 (add-before 'check 'pre-check
15957 (lambda _
15958 (mkdir-p "/tmp/foo")
15959 (setenv "HOME" "/tmp/foo")
15960 #t)))))
15961 (home-page "https://github.com/hsoft/send2trash")
15962 (synopsis "Send files to the user's @file{~/Trash} directory")
15963 (description "This package provides a Python library to send files to the
15964 user's @file{~/Trash} directory.")
15965 (properties `((python2-variant . ,(delay python2-send2trash))))
15966 (license license:bsd-3)))
15967
15968 (define-public python2-send2trash
15969 (package
15970 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15971 (arguments
15972 (substitute-keyword-arguments (package-arguments python-send2trash)
15973 ((#:phases phases)
15974 `(modify-phases ,phases
15975 (add-before 'check 'setenv
15976 (lambda _
15977 (setenv "PYTHONPATH"
15978 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15979 #t))))))))
15980
15981 (define-public python-yapf
15982 (package
15983 (name "python-yapf")
15984 (version "0.29.0")
15985 (source
15986 (origin
15987 (method url-fetch)
15988 (uri (pypi-uri "yapf" version))
15989 (sha256
15990 (base32
15991 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
15992 (build-system python-build-system)
15993 (home-page "https://github.com/google/yapf")
15994 (synopsis "Formatter for Python code")
15995 (description "YAPF is a formatter for Python code. It's based off of
15996 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
15997 takes the code and reformats it to the best formatting that conforms to the
15998 style guide, even if the original code didn't violate the style guide.")
15999 (license license:asl2.0)))
16000
16001 (define-public python2-yapf
16002 (package-with-python2 python-yapf))
16003
16004 (define-public python-gyp
16005 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16006 (revision "0"))
16007 (package
16008 (name "python-gyp")
16009 ;; Google does not release versions,
16010 ;; based on second most recent commit date.
16011 (version (git-version "0.0.0" revision commit))
16012 (source
16013 (origin
16014 ;; Google does not release tarballs,
16015 ;; git checkout is needed.
16016 (method git-fetch)
16017 (uri (git-reference
16018 (url "https://chromium.googlesource.com/external/gyp")
16019 (commit commit)))
16020 (file-name (git-file-name name version))
16021 (sha256
16022 (base32
16023 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
16024 (build-system python-build-system)
16025 (home-page "https://gyp.gsrc.io/")
16026 (synopsis "GYP is a Meta-Build system")
16027 (description
16028 "GYP builds build systems for large, cross platform applications.
16029 It can be used to generate XCode projects, Visual Studio projects, Ninja build
16030 files, and Makefiles.")
16031 (license license:bsd-3))))
16032
16033 (define-public python2-gyp
16034 (package-with-python2 python-gyp))
16035
16036 (define-public python-whatever
16037 (package
16038 (name "python-whatever")
16039 (version "0.6")
16040 (source
16041 (origin
16042 (method git-fetch)
16043 (uri (git-reference
16044 (url "https://github.com/Suor/whatever")
16045 (commit version)))
16046 (file-name (git-file-name name version))
16047 (sha256
16048 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16049 (build-system python-build-system)
16050 (arguments
16051 `(#:phases
16052 (modify-phases %standard-phases
16053 (replace 'check
16054 (lambda _
16055 (invoke "py.test"))))))
16056 (native-inputs
16057 `(("python-pytest" ,python-pytest)))
16058 (home-page "http://github.com/Suor/whatever")
16059 (synopsis "Make anonymous functions by partial application of operators")
16060 (description "@code{whatever} provides an easy way to make anonymous
16061 functions by partial application of operators.")
16062 (license license:bsd-3)))
16063
16064 (define-public python2-whatever
16065 (package-with-python2 python-whatever))
16066
16067 (define-public python-funcy
16068 (package
16069 (name "python-funcy")
16070 (version "1.11")
16071 (source
16072 (origin
16073 (method git-fetch)
16074 (uri (git-reference
16075 (url "https://github.com/Suor/funcy.git")
16076 (commit version)))
16077 (sha256
16078 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16079 (file-name (git-file-name name version))))
16080 (build-system python-build-system)
16081 (arguments
16082 `(#:phases
16083 (modify-phases %standard-phases
16084 (replace 'check
16085 (lambda _
16086 (invoke "py.test"))))))
16087 (native-inputs
16088 `(("python-pytest" ,python-pytest)
16089 ("python-whatever" ,python-whatever)))
16090 (home-page "http://github.com/Suor/funcy")
16091 (synopsis "Functional tools")
16092 (description "@code{funcy} is a library that provides functional tools.
16093 Examples are:
16094 @enumerate
16095 @item merge - Merges collections of the same type
16096 @item walk - Type-preserving map
16097 @item select - Selects a part of a collection
16098 @item take - Takes the first n items of a collection
16099 @item first - Takes the first item of a collection
16100 @item remove - Predicated-removes items of a collection
16101 @item concat - Concatenates two collections
16102 @item flatten - Flattens a collection with subcollections
16103 @item distinct - Returns only distinct items
16104 @item split - Predicated-splits a collection
16105 @item split_at - Splits a collection at a given item
16106 @item group_by - Groups items by group
16107 @item pairwise - Pairs off adjacent items
16108 @item partial - Partially-applies a function
16109 @item curry - Curries a function
16110 @item compose - Composes functions
16111 @item complement - Complements a predicate
16112 @item all_fn - \"all\" with predicate
16113 @end enumerate")
16114 (license license:bsd-3)))
16115
16116 (define-public python2-funcy
16117 (package-with-python2 python-funcy))
16118
16119 (define-public python-isoweek
16120 (package
16121 (name "python-isoweek")
16122 (version "1.3.3")
16123 (source
16124 (origin
16125 (method url-fetch)
16126 (uri (pypi-uri "isoweek" version))
16127 (sha256
16128 (base32
16129 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16130 (build-system python-build-system)
16131 (home-page "https://github.com/gisle/isoweek")
16132 (synopsis "Objects representing a week")
16133 (description "The @code{isoweek} module provide the class Week that
16134 implements the week definition of ISO 8601. This standard also defines
16135 a notation for identifying weeks; yyyyWww (where the W is a literal).
16136 Week instances stringify to this form.")
16137 (license license:bsd-3)))
16138
16139 (define-public python2-isoweek
16140 (package-with-python2 python-isoweek))
16141
16142 (define-public python-tokenize-rt
16143 (package
16144 (name "python-tokenize-rt")
16145 (version "2.0.1")
16146 (source
16147 (origin
16148 (method url-fetch)
16149 (uri (pypi-uri "tokenize-rt" version))
16150 (sha256
16151 (base32
16152 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16153 (build-system python-build-system)
16154 (home-page "https://github.com/asottile/tokenize-rt")
16155 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16156 (description
16157 "This Python library is a wrapper around @code{tokenize} from the Python
16158 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16159 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16160 and @code{tokens_to_src} to roundtrip.")
16161 (license license:expat)))
16162
16163 (define-public python-future-fstrings
16164 (package
16165 (name "python-future-fstrings")
16166 (version "0.4.1")
16167 (source
16168 (origin
16169 (method url-fetch)
16170 (uri (pypi-uri "future_fstrings" version))
16171 (sha256
16172 (base32
16173 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16174 (build-system python-build-system)
16175 (propagated-inputs
16176 `(("python-tokenize-rt" ,python-tokenize-rt)))
16177 (home-page "https://github.com/asottile/future-fstrings")
16178 (synopsis "Backport of fstrings to Python < 3.6")
16179 (description
16180 "This package provides a UTF-8 compatible encoding
16181 @code{future_fstrings}, which performs source manipulation. It decodes the
16182 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16183 @code{f} strings.")
16184 (license license:expat)))
16185
16186 (define-public python-typed-ast
16187 (package
16188 (name "python-typed-ast")
16189 (version "1.4.0")
16190 (source
16191 (origin
16192 (method git-fetch)
16193 (uri (git-reference
16194 (url "https://github.com/python/typed_ast.git")
16195 (commit version)))
16196 (sha256
16197 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16198 (file-name (git-file-name name version))))
16199 (build-system python-build-system)
16200 (arguments
16201 `(#:modules ((guix build utils)
16202 (guix build python-build-system)
16203 (ice-9 ftw)
16204 (srfi srfi-1)
16205 (srfi srfi-26))
16206 #:phases
16207 (modify-phases %standard-phases
16208 (replace 'check
16209 (lambda _
16210 (let ((cwd (getcwd)))
16211 (setenv "PYTHONPATH"
16212 (string-append cwd "/build/"
16213 (find (cut string-prefix? "lib" <>)
16214 (scandir (string-append cwd "/build")))
16215 ":"
16216 (getenv "PYTHONPATH"))))
16217 (invoke "pytest")
16218 #t)))))
16219 (native-inputs `(("python-pytest" ,python-pytest)))
16220 (home-page "https://github.com/python/typed_ast")
16221 (synopsis "Fork of Python @code{ast} modules with type comment support")
16222 (description "This package provides a parser similar to the standard
16223 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16224 include PEP 484 type comments and are independent of the version of Python
16225 under which they are run. The @code{typed_ast} parsers produce the standard
16226 Python AST (plus type comments), and are both fast and correct, as they are
16227 based on the CPython 2.7 and 3.7 parsers.")
16228 ;; See the file "LICENSE" for the details.
16229 (license (list license:psfl
16230 license:asl2.0
16231 license:expat)))) ;ast27/Parser/spark.py
16232
16233 (define-public python-typing
16234 (package
16235 (name "python-typing")
16236 (version "3.7.4.1")
16237 (source
16238 (origin
16239 (method url-fetch)
16240 (uri (pypi-uri "typing" version))
16241 (sha256
16242 (base32
16243 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16244 (build-system python-build-system)
16245 (home-page "https://docs.python.org/3/library/typing.html")
16246 (synopsis "Type hints for Python")
16247 (description "This is a backport of the standard library @code{typing}
16248 module to Python versions older than 3.5. Typing defines a standard notation
16249 for Python function and variable type annotations. The notation can be used
16250 for documenting code in a concise, standard format, and it has been designed
16251 to also be used by static and runtime type checkers, static analyzers, IDEs
16252 and other tools.")
16253 (license license:psfl)))
16254
16255 (define-public python2-typing
16256 (package-with-python2 python-typing))
16257
16258 (define-public python-typing-extensions
16259 (package
16260 (name "python-typing-extensions")
16261 (version "3.7.4.1")
16262 (source
16263 (origin
16264 (method url-fetch)
16265 (uri (pypi-uri "typing_extensions" version))
16266 (sha256
16267 (base32
16268 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16269 (build-system python-build-system)
16270 (home-page
16271 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16272 (synopsis "Experimental type hints for Python")
16273 (description
16274 "The typing_extensions module contains additional @code{typing} hints not
16275 yet present in the of the @code{typing} standard library.
16276 Included are implementations of:
16277 @enumerate
16278 @item ClassVar
16279 @item ContextManager
16280 @item Counter
16281 @item DefaultDict
16282 @item Deque
16283 @item NewType
16284 @item NoReturn
16285 @item overload
16286 @item Protocol
16287 @item runtime
16288 @item Text
16289 @item Type
16290 @item TYPE_CHECKING
16291 @item AsyncGenerator
16292 @end enumerate\n")
16293 (license license:psfl)))
16294
16295 (define-public bpython
16296 (package
16297 (name "bpython")
16298 (version "0.18")
16299 (source
16300 (origin
16301 (method url-fetch)
16302 (uri (pypi-uri "bpython" version))
16303 (sha256
16304 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16305 (build-system python-build-system)
16306 (arguments
16307 `(#:phases
16308 (modify-phases %standard-phases
16309 (add-after 'unpack 'remove-failing-test
16310 (lambda _
16311 ;; Remove failing test. FIXME: make it pass
16312 (delete-file "bpython/test/test_args.py")
16313 #t))
16314 (add-after 'wrap 'add-aliases
16315 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16316 (lambda* (#:key outputs #:allow-other-keys)
16317 (let ((out (assoc-ref outputs "out")))
16318 (for-each
16319 (lambda (old new)
16320 (symlink old (string-append out "/bin/" new)))
16321 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16322 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16323 #t)))))
16324 (propagated-inputs
16325 `(("python-pygments" ,python-pygments)
16326 ("python-requests" ,python-requests)
16327 ("python-babel" ,python-babel) ; optional, for internationalization
16328 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16329 ("python-greenlet" ,python-greenlet)
16330 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16331 ("python-six" ,python-six)))
16332 (native-inputs
16333 `(("python-sphinx" ,python-sphinx)
16334 ("python-mock" ,python-mock)))
16335 (home-page "https://bpython-interpreter.org/")
16336 (synopsis "Fancy interface to the Python interpreter")
16337 (description "Bpython is a fancy interface to the Python
16338 interpreter. bpython's main features are
16339
16340 @enumerate
16341 @item in-line syntax highlighting,
16342 @item readline-like autocomplete with suggestions displayed as you type,
16343 @item expected parameter list for any Python function,
16344 @item \"rewind\" function to pop the last line of code from memory and
16345 re-evaluate,
16346 @item send the code you've entered off to a pastebin,
16347 @item save the code you've entered to a file, and
16348 @item auto-indentation.
16349 @end enumerate")
16350 (license license:expat)))
16351
16352 (define-public bpython2
16353 (let ((base (package-with-python2
16354 (strip-python2-variant bpython))))
16355 (package (inherit base)
16356 (name "bpython2")
16357 (arguments
16358 `(#:python ,python-2
16359 #:phases
16360 (modify-phases %standard-phases
16361 (add-after 'unpack 'remove-failing-test
16362 (lambda _
16363 ;; Remove failing test. FIXME: make it pass
16364 (delete-file "bpython/test/test_args.py")
16365 ;; Disable failing test-cases (renaming inhibits they are
16366 ;; discovered)
16367 (substitute* "bpython/test/test_curtsies_repl.py"
16368 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16369 (string-append a "xxx_off_" b))
16370 (("^(\\s*def )(test_complex\\W)" _ a b)
16371 (string-append a "xxx_off_" b)))
16372 #t))
16373 (add-before 'build 'rename-scripts
16374 ;; rename the scripts to bypthon2, bpdb2, etc.
16375 (lambda _
16376 (substitute* "setup.py"
16377 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16378 (string-append name "2" rest "\n"))
16379 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16380 (string-append name "2" (or sub "") rest "\n")))
16381 #t))))))))
16382
16383 (define-public python-pyinotify
16384 (package
16385 (name "python-pyinotify")
16386 (version "0.9.6")
16387 (source (origin
16388 (method url-fetch)
16389 (uri (pypi-uri "pyinotify" version))
16390 (sha256
16391 (base32
16392 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16393 (build-system python-build-system)
16394 (arguments `(#:tests? #f)) ;no tests
16395 (home-page "https://github.com/seb-m/pyinotify")
16396 (synopsis "Python library for monitoring inotify events")
16397 (description
16398 "@code{pyinotify} provides a Python interface for monitoring
16399 file system events on Linux.")
16400 (license license:expat)))
16401
16402 (define-public python2-pyinotify
16403 (package-with-python2 python-pyinotify))
16404
16405 ;; Ada parser uses this version.
16406 (define-public python2-quex-0.67.3
16407 (package
16408 (name "python2-quex")
16409 (version "0.67.3")
16410 (source
16411 (origin
16412 (method url-fetch)
16413 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16414 (version-major+minor version)
16415 "/quex-" version ".zip"))
16416 (sha256
16417 (base32
16418 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16419 (build-system python-build-system)
16420 (native-inputs
16421 `(("unzip" ,unzip)))
16422 (arguments
16423 `(#:python ,python-2
16424 #:tests? #f
16425 #:phases
16426 (modify-phases %standard-phases
16427 (delete 'configure)
16428 (delete 'build)
16429 (replace 'install
16430 (lambda* (#:key outputs #:allow-other-keys)
16431 (let* ((out (assoc-ref outputs "out"))
16432 (share/quex (string-append out "/share/quex"))
16433 (bin (string-append out "/bin")))
16434 (copy-recursively "." share/quex)
16435 (mkdir-p bin)
16436 (symlink (string-append share/quex "/quex-exe.py")
16437 (string-append bin "/quex"))
16438 #t))))))
16439 (native-search-paths
16440 (list (search-path-specification
16441 (variable "QUEX_PATH")
16442 (files '("share/quex")))))
16443 (home-page "http://quex.sourceforge.net/")
16444 (synopsis "Lexical analyzer generator in Python")
16445 (description "@code{quex} is a lexical analyzer generator in Python.")
16446 (license license:lgpl2.1+))) ; Non-military
16447
16448 (define-public python2-quex
16449 (package (inherit python2-quex-0.67.3)
16450 (name "python2-quex")
16451 (version "0.68.1")
16452 (source
16453 (origin
16454 (method url-fetch)
16455 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16456 (sha256
16457 (base32
16458 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16459 (file-name (string-append name "-" version ".tar.gz"))))))
16460
16461 (define-public python-more-itertools
16462 (package
16463 (name "python-more-itertools")
16464 (version "8.2.0")
16465 (source
16466 (origin
16467 (method url-fetch)
16468 (uri (pypi-uri "more-itertools" version))
16469 (sha256
16470 (base32
16471 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16472 (build-system python-build-system)
16473 (home-page "https://github.com/erikrose/more-itertools")
16474 (synopsis "More routines for operating on iterables, beyond itertools")
16475 (description "Python's built-in @code{itertools} module implements a
16476 number of iterator building blocks inspired by constructs from APL, Haskell,
16477 and SML. @code{more-itertools} includes additional building blocks for
16478 working with iterables.")
16479 (properties `((python2-variant . ,(delay python2-more-itertools))))
16480 (license license:expat)))
16481
16482 ;; The 5.x series are the last versions supporting Python 2.7.
16483 (define-public python2-more-itertools
16484 (package
16485 (inherit python-more-itertools)
16486 (name "python2-more-itertools")
16487 (version "5.0.0")
16488 (source (origin
16489 (method url-fetch)
16490 (uri (pypi-uri "more-itertools" version))
16491 (sha256
16492 (base32
16493 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16494 (arguments
16495 `(#:python ,python-2))
16496 (propagated-inputs
16497 `(("python2-six" ,python2-six-bootstrap)))))
16498
16499 (define-public python-latexcodec
16500 (package
16501 (name "python-latexcodec")
16502 (version "1.0.7")
16503 (source
16504 (origin
16505 (method url-fetch)
16506 (uri (pypi-uri "latexcodec" version))
16507 (sha256
16508 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16509 (build-system python-build-system)
16510 (inputs
16511 `(("python-six" ,python-six)))
16512 (home-page "https://readthedocs.org/projects/latexcodec/")
16513 (synopsis "Work with LaTeX code in Python")
16514 (description "Lexer and codec to work with LaTeX code in Python.")
16515 (license license:expat)))
16516
16517 (define-public python-pybtex
16518 (package
16519 (name "python-pybtex")
16520 (version "0.22.2")
16521 (source
16522 (origin
16523 (method url-fetch)
16524 (uri (pypi-uri "pybtex" version))
16525 (sha256
16526 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16527 (build-system python-build-system)
16528 (native-inputs
16529 `(("python-nose" ,python-nose)))
16530 (inputs
16531 `(("python-latexcodec" ,python-latexcodec)
16532 ("python-pyyaml" ,python-pyyaml)
16533 ("python-six" ,python-six)))
16534 (arguments
16535 `(#:test-target "nosetests"))
16536 (home-page "https://pybtex.org/")
16537 (synopsis "BibTeX-compatible bibliography processor")
16538 (description "Pybtex is a BibTeX-compatible bibliography processor written
16539 in Python. You can simply type pybtex instead of bibtex.")
16540 (license license:expat)))
16541
16542 (define-public python-onetimepass
16543 (package
16544 (name "python-onetimepass")
16545 (version "1.0.1")
16546 (source
16547 (origin
16548 (method url-fetch)
16549 (uri (pypi-uri "onetimepass" version))
16550 (sha256
16551 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16552 (build-system python-build-system)
16553 (propagated-inputs `(("python-six" ,python-six)))
16554 (home-page "https://github.com/tadeck/onetimepass/")
16555 (synopsis "One-time password library")
16556 (description "Python one-time password library for HMAC-based (HOTP) and
16557 time-based (TOTP) passwords.")
16558 (license license:expat)))
16559
16560 (define-public python-parso
16561 (package
16562 (name "python-parso")
16563 (version "0.7.0")
16564 (source
16565 (origin
16566 (method url-fetch)
16567 (uri (pypi-uri "parso" version))
16568 (sha256
16569 (base32
16570 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16571 (native-inputs
16572 `(("python-pytest" ,python-pytest)))
16573 (build-system python-build-system)
16574 (arguments
16575 `(#:phases (modify-phases %standard-phases
16576 (replace 'check
16577 (lambda _ (invoke "pytest" "-vv"))))))
16578 (home-page "https://github.com/davidhalter/parso")
16579 (synopsis "Python Parser")
16580 (description "Parso is a Python parser that supports error recovery and
16581 round-trip parsing for different Python versions (in multiple Python versions).
16582 Parso is also able to list multiple syntax errors in your Python file.")
16583 (license license:expat)))
16584
16585 (define-public python2-parso
16586 (package-with-python2 python-parso))
16587
16588 (define-public python-async-generator
16589 (package
16590 (name "python-async-generator")
16591 (version "1.10")
16592 (source
16593 (origin
16594 (method url-fetch)
16595 (uri (pypi-uri "async_generator" version))
16596 (sha256
16597 (base32
16598 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16599 (build-system python-build-system)
16600 (native-inputs
16601 `(("python-pytest" ,python-pytest)))
16602 (home-page "https://github.com/python-trio/async_generator")
16603 (synopsis "Async generators and context managers for Python 3.5+")
16604 (description "@code{async_generator} back-ports Python 3.6's native async
16605 generators and Python 3.7's context managers into Python 3.5.")
16606 ;; Dual licensed.
16607 (license (list license:expat license:asl2.0))))
16608
16609 (define-public python-async-timeout
16610 (package
16611 (name "python-async-timeout")
16612 (version "3.0.1")
16613 (source
16614 (origin
16615 (method url-fetch)
16616 (uri (pypi-uri "async-timeout" version))
16617 (sha256
16618 (base32
16619 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16620 (build-system python-build-system)
16621 (home-page "https://github.com/aio-libs/async_timeout/")
16622 (synopsis "Timeout context manager for asyncio programs")
16623 (description "@code{async-timeout} provides a timeout timeout context
16624 manager compatible with @code{asyncio}.")
16625 (license license:asl2.0)))
16626
16627 (define-public python-glob2
16628 (package
16629 (name "python-glob2")
16630 (version "0.7")
16631 (source
16632 (origin
16633 (method git-fetch)
16634 (uri (git-reference
16635 (url "https://github.com/miracle2k/python-glob2.git")
16636 (commit (string-append "v" version))))
16637 (file-name (git-file-name name version))
16638 (sha256
16639 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16640 (build-system python-build-system)
16641 (home-page "https://github.com/miracle2k/python-glob2/")
16642 (synopsis "Extended Version of the python buildin glob module")
16643 (description "This is an extended version of the Python
16644 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16645 adds:
16646
16647 @itemize
16648 @item The ability to capture the text matched by glob patterns, and return
16649 those matches alongside the file names.
16650 @item A recursive @code{**} globbing syntax, akin for example to the
16651 @code{globstar} option of Bash.
16652 @item The ability to replace the file system functions used, in order to glob
16653 on virtual file systems.
16654 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16655 @end itemize
16656
16657 Glob2 currently based on the glob code from Python 3.3.1.")
16658 (license license:bsd-2)))
16659
16660 (define-public python2-glob2
16661 (package-with-python2 python-glob2))
16662
16663 (define-public python-gipc
16664 (package
16665 (name "python-gipc")
16666 (version "0.6.0")
16667 (source
16668 (origin
16669 (method url-fetch)
16670 (uri (pypi-uri "gipc" version ".zip"))
16671 (sha256
16672 (base32
16673 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16674 (build-system python-build-system)
16675 (native-inputs
16676 `(("unzip" ,unzip)))
16677 (propagated-inputs
16678 `(("python-gevent" ,python-gevent)))
16679 (home-page "https://gehrcke.de/gipc/")
16680 (synopsis "Child process management in the context of gevent")
16681 (description "Usage of Python's multiprocessing package in a
16682 gevent-powered application may raise problems. With @code{gipc},
16683 process-based child processes can safely be created anywhere within a
16684 gevent-powered application.")
16685 (license license:expat)))
16686
16687 (define-public python2-gipc
16688 (package-with-python2 python-gipc))
16689
16690 (define-public python-fusepy
16691 (package
16692 (name "python-fusepy")
16693 (version "2.0.4")
16694 (source
16695 (origin
16696 (method url-fetch)
16697 (uri (pypi-uri "fusepy" version))
16698 (sha256
16699 (base32
16700 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16701 (build-system python-build-system)
16702 (arguments
16703 `(#:phases
16704 (modify-phases %standard-phases
16705 (add-before 'build 'set-library-file-name
16706 (lambda* (#:key inputs #:allow-other-keys)
16707 (let ((fuse (assoc-ref inputs "fuse")))
16708 (substitute* "fuse.py"
16709 (("find_library\\('fuse'\\)")
16710 (string-append "'" fuse "/lib/libfuse.so'")))
16711 #t))))))
16712 (propagated-inputs
16713 `(("fuse" ,fuse)))
16714 (home-page "https://github.com/fusepy/fusepy")
16715 (synopsis "Simple ctypes bindings for FUSE")
16716 (description "Python module that provides a simple interface to FUSE and
16717 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16718 (license license:isc)))
16719
16720 (define-public python2-fusepy
16721 (package-with-python2 python-fusepy))
16722
16723 (define-public python-fusepyng
16724 (package
16725 (name "python-fusepyng")
16726 (version "1.0.7")
16727 (source
16728 (origin
16729 (method url-fetch)
16730 (uri (pypi-uri "fusepyng" version))
16731 (sha256
16732 (base32
16733 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16734 (build-system python-build-system)
16735 (arguments
16736 '(#:phases
16737 (modify-phases %standard-phases
16738 (add-after 'unpack 'set-libfuse-path
16739 (lambda* (#:key inputs #:allow-other-keys)
16740 (let ((fuse (assoc-ref inputs "fuse")))
16741 (substitute* "fusepyng.py"
16742 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16743 (string-append "\"" fuse "/lib/libfuse.so\""))))
16744 #t)))))
16745 (inputs
16746 `(("fuse" ,fuse)))
16747 (propagated-inputs
16748 `(("python-paramiko" ,python-paramiko)))
16749 (home-page "https://github.com/rianhunter/fusepyng")
16750 (synopsis "Simple ctypes bindings for FUSE")
16751 (description "@code{fusepyng} is a Python module that provides a simple
16752 interface to FUSE on various operating systems. It's just one file and is
16753 implemented using @code{ctypes}.")
16754 (license license:isc)))
16755
16756 (define-public python2-gdrivefs
16757 (package
16758 (name "python2-gdrivefs")
16759 (version "0.14.9")
16760 (source
16761 (origin
16762 (method url-fetch)
16763 (uri (pypi-uri "gdrivefs" version))
16764 (sha256
16765 (base32
16766 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16767 (build-system python-build-system)
16768 (arguments
16769 `(#:python ,python-2
16770 #:phases
16771 (modify-phases %standard-phases
16772 (add-before 'build 'patch-setup-py
16773 (lambda _
16774 ;; Update requirements from dependency==version
16775 ;; to dependency>=version
16776 (substitute* "gdrivefs/resources/requirements.txt"
16777 (("==") ">="))
16778 #t)))))
16779 (native-inputs
16780 `(("python2-gipc" ,python2-gipc)
16781 ("python2-gevent" ,python2-gevent)
16782 ("python2-greenlet" ,python2-greenlet)
16783 ("python2-httplib2" ,python2-httplib2)
16784 ("python2-uritemplate" ,python2-uritemplate)
16785 ("python2-oauth2client" ,python2-oauth2client)
16786 ("python2-six" ,python2-six)))
16787 (propagated-inputs
16788 `(("python2-dateutil" ,python2-dateutil)
16789 ("python2-fusepy" ,python2-fusepy)
16790 ("python2-google-api-client" ,python2-google-api-client)))
16791 (home-page "https://github.com/dsoprea/GDriveFS")
16792 (synopsis "Mount Google Drive as a local file system")
16793 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16794 under Python 2.7.")
16795 (license license:gpl2)))
16796
16797 (define-public python-userspacefs
16798 (package
16799 (name "python-userspacefs")
16800 (version "1.0.13")
16801 (source
16802 (origin
16803 (method url-fetch)
16804 (uri (pypi-uri "userspacefs" version))
16805 (sha256
16806 (base32
16807 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16808 (build-system python-build-system)
16809 (propagated-inputs
16810 `(("python-fusepyng" ,python-fusepyng)))
16811 (home-page "https://github.com/rianhunter/userspacefs")
16812 (synopsis "User-space file systems for Python")
16813 (description
16814 "@code{userspacefs} is a library that allows you to easily write
16815 user-space file systems in Python.")
16816 (license license:gpl3+)))
16817
16818 (define-public pybind11
16819 (package
16820 (name "pybind11")
16821 (version "2.4.3")
16822 (source (origin
16823 (method git-fetch)
16824 (uri (git-reference
16825 (url "https://github.com/pybind/pybind11.git")
16826 (commit (string-append "v" version))))
16827 (sha256
16828 (base32
16829 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16830 (file-name (git-file-name name version))))
16831 (build-system cmake-build-system)
16832 (native-inputs
16833 `(("python" ,python-wrapper)
16834
16835 ;; The following dependencies are used for tests.
16836 ("python-pytest" ,python-pytest)
16837 ("catch" ,catch-framework2-1)
16838 ("eigen" ,eigen)))
16839 (arguments
16840 `(#:configure-flags
16841 (list (string-append "-DCATCH_INCLUDE_DIR="
16842 (assoc-ref %build-inputs "catch")
16843 "/include/catch"))
16844
16845 #:phases (modify-phases %standard-phases
16846 (add-after 'install 'install-python
16847 (lambda* (#:key outputs #:allow-other-keys)
16848 (let ((out (assoc-ref outputs "out")))
16849 (with-directory-excursion "../source"
16850 (setenv "PYBIND11_USE_CMAKE" "yes")
16851 (invoke "python" "setup.py" "install"
16852 "--single-version-externally-managed"
16853 "--root=/"
16854 (string-append "--prefix=" out)))))))
16855
16856 #:test-target "check"))
16857 (home-page "https://github.com/pybind/pybind11/")
16858 (synopsis "Seamless operability between C++11 and Python")
16859 (description
16860 "@code{pybind11} is a lightweight header-only library that exposes C++
16861 types in Python and vice versa, mainly to create Python bindings of existing
16862 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16863 library: to minimize boilerplate code in traditional extension modules by
16864 inferring type information using compile-time introspection.")
16865 (license license:bsd-3)))
16866
16867 (define-public python-fasteners
16868 (package
16869 (name "python-fasteners")
16870 (version "0.14.1")
16871 (source
16872 (origin
16873 (method url-fetch)
16874 (uri (pypi-uri "fasteners" version))
16875 (sha256
16876 (base32
16877 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16878 (build-system python-build-system)
16879 (propagated-inputs
16880 `(("python-monotonic" ,python-monotonic)
16881 ("python-six" ,python-six)
16882 ("python-testtools" ,python-testtools)))
16883 (home-page "https://github.com/harlowja/fasteners")
16884 (synopsis "Python package that provides useful locks")
16885 (description
16886 "This package provides a Python program that provides following locks:
16887
16888 @itemize
16889 @item Locking decorator
16890 @item Reader-writer locks
16891 @item Inter-process locks
16892 @item Generic helpers
16893 @end itemize\n")
16894 (properties `((python2-variant . ,(delay python2-fasteners))))
16895 (license license:asl2.0)))
16896
16897 (define-public python2-fasteners
16898 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16899 (package
16900 (inherit base)
16901 (propagated-inputs
16902 `(("python2-futures" ,python2-futures)
16903 ,@(package-propagated-inputs base))))))
16904
16905 (define-public python-requests-file
16906 (package
16907 (name "python-requests-file")
16908 (version "1.4.3")
16909 (source
16910 (origin
16911 (method url-fetch)
16912 (uri (pypi-uri "requests-file" version))
16913 (sha256
16914 (base32
16915 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16916 (build-system python-build-system)
16917 (propagated-inputs
16918 `(("python-requests" ,python-requests)
16919 ("python-six" ,python-six)))
16920 (home-page
16921 "https://github.com/dashea/requests-file")
16922 (synopsis "File transport adapter for Requests")
16923 (description
16924 "Requests-File is a transport adapter for use with the Requests Python
16925 library to allow local file system access via @code{file://} URLs.")
16926 (license license:asl2.0)))
16927
16928 (define-public python2-requests-file
16929 (package-with-python2 python-requests-file))
16930
16931 (define-public python-tldextract
16932 (package
16933 (name "python-tldextract")
16934 (version "2.2.0")
16935 (source
16936 (origin
16937 (method url-fetch)
16938 (uri (pypi-uri "tldextract" version))
16939 (sha256
16940 (base32
16941 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16942 (build-system python-build-system)
16943 (native-inputs
16944 `(("python-pytest" ,python-pytest)
16945 ("python-responses" ,python-responses)))
16946 (propagated-inputs
16947 `(("python-idna" ,python-idna)
16948 ("python-requests" ,python-requests)
16949 ("python-requests-file" ,python-requests-file)))
16950 (home-page
16951 "https://github.com/john-kurkowski/tldextract")
16952 (synopsis
16953 "Separate the TLD from the registered domain and subdomains of a URL")
16954 (description
16955 "TLDExtract accurately separates the TLD from the registered domain and
16956 subdomains of a URL, using the Public Suffix List. By default, this includes
16957 the public ICANN TLDs and their exceptions. It can optionally support the
16958 Public Suffix List's private domains as well.")
16959 (license license:bsd-3)))
16960
16961 (define-public python2-tldextract
16962 (package-with-python2 python-tldextract))
16963
16964 (define-public python-pynamecheap
16965 (package
16966 (name "python-pynamecheap")
16967 (version "0.0.3")
16968 (source
16969 (origin
16970 (method url-fetch)
16971 (uri (pypi-uri "PyNamecheap" version))
16972 (sha256
16973 (base32
16974 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16975 (build-system python-build-system)
16976 (propagated-inputs
16977 `(("python-requests" ,python-requests)))
16978 (home-page
16979 "https://github.com/Bemmu/PyNamecheap")
16980 (synopsis
16981 "Namecheap API client in Python")
16982 (description
16983 "PyNamecheap is a Namecheap API client in Python.")
16984 (license license:expat)))
16985
16986 (define-public python2-pynamecheap
16987 (package-with-python2 python-pynamecheap))
16988
16989 (define-public python-dns-lexicon
16990 (package
16991 (name "python-dns-lexicon")
16992 (version "2.4.0")
16993 (source
16994 (origin
16995 (method url-fetch)
16996 (uri (pypi-uri "dns-lexicon" version))
16997 (sha256
16998 (base32
16999 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
17000 (build-system python-build-system)
17001 (arguments
17002 `(#:tests? #f)) ;requires internet access
17003 (propagated-inputs
17004 `(("python-future" ,python-future)
17005 ("python-pynamecheap" ,python-pynamecheap)
17006 ("python-requests" ,python-requests)
17007 ("python-tldextract" ,python-tldextract)
17008 ("python-urllib3" ,python-urllib3)))
17009 (home-page "https://github.com/AnalogJ/lexicon")
17010 (synopsis
17011 "Manipulate DNS records on various DNS providers")
17012 (description
17013 "Lexicon provides a way to manipulate DNS records on multiple DNS
17014 providers in a standardized way. It has a CLI but it can also be used as a
17015 Python library. It was designed to be used in automation, specifically with
17016 Let's Encrypt.")
17017 (license license:expat)))
17018
17019 (define-public python2-dns-lexicon
17020 (package-with-python2 python-dns-lexicon))
17021
17022 (define-public python-commandlines
17023 (package
17024 (name "python-commandlines")
17025 (version "0.4.1")
17026 (source
17027 (origin
17028 (method url-fetch)
17029 (uri (pypi-uri "commandlines" version))
17030 (sha256
17031 (base32
17032 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
17033 (build-system python-build-system)
17034 (home-page "https://github.com/chrissimpkins/commandlines")
17035 (synopsis "Command line argument to object parsing library")
17036 (description
17037 "@code{Commandlines} is a Python library for command line application
17038 development that supports command line argument parsing, command string
17039 validation testing and application logic.")
17040 (license license:expat)))
17041
17042 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
17043 ;; python-numba. They have a very unflexible relationship.
17044 (define-public python-numba
17045 (package
17046 (name "python-numba")
17047 (version "0.46.0")
17048 (source
17049 (origin
17050 (method url-fetch)
17051 (uri (pypi-uri "numba" version))
17052 (sha256
17053 (base32
17054 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17055 (build-system python-build-system)
17056 (arguments
17057 `(#:modules ((guix build utils)
17058 (guix build python-build-system)
17059 (ice-9 ftw)
17060 (srfi srfi-1)
17061 (srfi srfi-26))
17062 #:phases
17063 (modify-phases %standard-phases
17064 (add-after 'unpack 'disable-proprietary-features
17065 (lambda _
17066 (setenv "NUMBA_DISABLE_HSA" "1")
17067 (setenv "NUMBA_DISABLE_CUDA" "1")
17068 #t))
17069 (add-after 'unpack 'remove-failing-tests
17070 (lambda _
17071 ;; FIXME: These tests fail for unknown reasons:
17072 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17073 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17074 (substitute* "numba/tests/test_dispatcher.py"
17075 (("def test(_non_writable_pycache)" _ m)
17076 (string-append "def guix_skip" m))
17077 (("def test(_non_creatable_pycache)" _ m)
17078 (string-append "def guix_skip" m))
17079 (("def test(_frozen)" _ m)
17080 (string-append "def guix_skip" m)))
17081
17082 ;; These tests fail because we don't run the tests from the build
17083 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17084 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17085 (substitute* "numba/tests/test_pycc.py"
17086 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17087 (string-append "def guix_skip" m)))
17088
17089 ;; These tests fail because our version of Python does not have
17090 ;; a recognizable front-end for the Numba distribution to use
17091 ;; to check against.
17092 (substitute* "numba/tests/test_entrypoints.py"
17093 (("def test(_init_entrypoint)" _ m)
17094 (string-append "def guix_skip" m)))
17095 (substitute* "numba/tests/test_jitclasses.py"
17096 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17097 (string-append "def guix_skip" m)))
17098 #t))
17099 (replace 'check
17100 (lambda _
17101 (let ((cwd (getcwd)))
17102 (setenv "PYTHONPATH"
17103 (string-append cwd "/build/"
17104 (find (cut string-prefix? "lib" <>)
17105 (scandir (string-append cwd "/build")))
17106 ":"
17107 (getenv "PYTHONPATH")))
17108 ;; Something is wrong with the PYTHONPATH when running the
17109 ;; tests from the build directory, as it complains about not being
17110 ;; able to import certain modules.
17111 (with-directory-excursion "/tmp"
17112 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17113 #t)))))
17114 (propagated-inputs
17115 `(("python-llvmlite" ,python-llvmlite)
17116 ("python-numpy" ,python-numpy)
17117 ("python-singledispatch" ,python-singledispatch)))
17118 ;; Needed for tests.
17119 (inputs
17120 `(("python-jinja2" ,python-jinja2)
17121 ("python-pygments" ,python-pygments)))
17122 (home-page "https://numba.pydata.org")
17123 (synopsis "Compile Python code using LLVM")
17124 (description "Numba gives you the power to speed up your applications with
17125 high performance functions written directly in Python. With a few
17126 annotations, array-oriented and math-heavy Python code can be just-in-time
17127 compiled to native machine instructions, similar in performance to C, C++ and
17128 Fortran, without having to switch languages or Python interpreters.
17129
17130 Numba works by generating optimized machine code using the LLVM compiler
17131 infrastructure at import time, runtime, or statically (using the included pycc
17132 tool).")
17133 (license license:bsd-3)))
17134
17135 (define-public python-numcodecs
17136 (package
17137 (name "python-numcodecs")
17138 (version "0.6.4")
17139 (source
17140 (origin
17141 (method url-fetch)
17142 (uri (pypi-uri "numcodecs" version))
17143 (sha256
17144 (base32
17145 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17146 (build-system python-build-system)
17147 (propagated-inputs
17148 `(("python-numpy" ,python-numpy)
17149 ("python-msgpack" ,python-msgpack)))
17150 (native-inputs
17151 `(("python-pytest" ,python-pytest)
17152 ("python-setuptools-scm" ,python-setuptools-scm)))
17153 (home-page "https://github.com/zarr-developers/numcodecs")
17154 (synopsis "Buffer compression and transformation codecs")
17155 (description
17156 "This Python package provides buffer compression and transformation
17157 codecs for use in data storage and communication applications.")
17158 (license license:expat)))
17159
17160 (define-public python-asciitree
17161 (package
17162 (name "python-asciitree")
17163 (version "0.3.3")
17164 (source
17165 (origin
17166 (method url-fetch)
17167 (uri (pypi-uri "asciitree" version))
17168 (sha256
17169 (base32
17170 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17171 (build-system python-build-system)
17172 (home-page "https://github.com/mbr/asciitree")
17173 (synopsis "Draws ASCII trees")
17174 (description "This package draws tree structures using characters.")
17175 (license license:expat)))
17176
17177 (define-public python-zarr
17178 (package
17179 (name "python-zarr")
17180 (version "2.4.0")
17181 (source
17182 (origin
17183 (method url-fetch)
17184 (uri (pypi-uri "zarr" version))
17185 (sha256
17186 (base32
17187 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17188 (build-system python-build-system)
17189 (arguments
17190 `(#:phases
17191 (modify-phases %standard-phases
17192 (add-after 'unpack 'disable-service-tests
17193 (lambda _
17194 (setenv "ZARR_TEST_ABS" "0")
17195 (setenv "ZARR_TEST_MONGO" "0")
17196 (setenv "ZARR_TEST_REDIS" "0")
17197 #t))
17198 (replace 'check
17199 (lambda _
17200 (invoke "pytest" "-vv" "-k" "not lmdb")
17201 #t)))))
17202 (propagated-inputs
17203 `(("python-asciitree" ,python-asciitree)
17204 ("python-fasteners" ,python-fasteners)
17205 ("python-numcodecs" ,python-numcodecs)
17206 ("python-numpy" ,python-numpy)))
17207 (native-inputs
17208 `(("python-pytest" ,python-pytest)
17209 ("python-setuptools-scm" ,python-setuptools-scm)))
17210 (home-page "https://github.com/zarr-developers/zarr-python")
17211 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17212 (description
17213 "This package provides an implementation of chunked, compressed,
17214 N-dimensional arrays for Python.")
17215 (license license:expat)))
17216
17217 (define-public python-anndata
17218 (package
17219 (name "python-anndata")
17220 (version "0.7.1")
17221 (source
17222 (origin
17223 (method url-fetch)
17224 (uri (pypi-uri "anndata" version))
17225 (sha256
17226 (base32
17227 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17228 (build-system python-build-system)
17229 (arguments
17230 `(#:phases
17231 (modify-phases %standard-phases
17232 (add-after 'unpack 'delete-inconvenient-tests
17233 (lambda _
17234 ;; This test depends on python-scikit-learn.
17235 (delete-file "anndata/tests/test_inplace_subset.py")
17236 #t))
17237 (delete 'check)
17238 (add-after 'install 'check
17239 (lambda* (#:key inputs outputs #:allow-other-keys)
17240 (add-installed-pythonpath inputs outputs)
17241 (invoke "pytest" "-vv"))))))
17242 (propagated-inputs
17243 `(("python-h5py" ,python-h5py)
17244 ("python-importlib-metadata" ,python-importlib-metadata)
17245 ("python-natsort" ,python-natsort)
17246 ("python-numcodecs" ,python-numcodecs)
17247 ("python-packaging" ,python-packaging)
17248 ("python-pandas" ,python-pandas)
17249 ("python-scipy" ,python-scipy)
17250 ("python-zarr" ,python-zarr)))
17251 (native-inputs
17252 `(("python-joblib" ,python-joblib)
17253 ("python-pytest" ,python-pytest)
17254 ("python-setuptools-scm" ,python-setuptools-scm)))
17255 (home-page "https://github.com/theislab/anndata")
17256 (synopsis "Annotated data for data analysis pipelines")
17257 (description "Anndata is a package for simple (functional) high-level APIs
17258 for data analysis pipelines. In this context, it provides an efficient,
17259 scalable way of keeping track of data together with learned annotations and
17260 reduces the code overhead typically encountered when using a mostly
17261 object-oriented library such as @code{scikit-learn}.")
17262 (license license:bsd-3)))
17263
17264 (define-public python-dill
17265 (package
17266 (name "python-dill")
17267 (version "0.3.1.1")
17268 (source
17269 (origin
17270 (method url-fetch)
17271 (uri (pypi-uri "dill" version))
17272 (sha256
17273 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17274 (build-system python-build-system)
17275 (arguments
17276 `(#:phases
17277 (modify-phases %standard-phases
17278 (replace 'check
17279 (lambda _
17280 (with-directory-excursion "/tmp"
17281 (invoke "nosetests" "-v"))
17282 #t)))))
17283 (native-inputs
17284 `(("python-nose" ,python-nose)))
17285 (home-page "https://pypi.org/project/dill/")
17286 (synopsis "Serialize all of Python")
17287 (description "Dill extends Python's @code{pickle} module for serializing
17288 and de-serializing Python objects to the majority of the built-in Python
17289 types. Dill provides the user the same interface as the @code{pickle} module,
17290 and also includes some additional features. In addition to pickling Python
17291 objects, @code{dill} provides the ability to save the state of an interpreter
17292 session in a single command. Hence, it would be feasible to save a
17293 interpreter session, close the interpreter, ship the pickled file to another
17294 computer, open a new interpreter, unpickle the session and thus continue from
17295 the saved state of the original interpreter session.")
17296 (license license:bsd-3)))
17297
17298 (define-public python-multiprocess
17299 (package
17300 (name "python-multiprocess")
17301 (version "0.70.9")
17302 (source
17303 (origin
17304 (method url-fetch)
17305 (uri (pypi-uri "multiprocess" version))
17306 (sha256
17307 (base32
17308 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17309 (build-system python-build-system)
17310 (arguments
17311 `(#:phases
17312 (modify-phases %standard-phases
17313 (add-after 'unpack 'disable-broken-tests
17314 (lambda _
17315 ;; This test is broken as there is no keyboard interrupt.
17316 (substitute* "py3.7/multiprocess/tests/__init__.py"
17317 (("^(.*)def test_wait_result"
17318 line indent)
17319 (string-append indent
17320 "@unittest.skip(\"Disabled by Guix\")\n"
17321 line)))
17322 #t))
17323 ;; Tests must be run after installation.
17324 (delete 'check)
17325 (add-after 'install 'check
17326 (lambda* (#:key inputs outputs #:allow-other-keys)
17327 (add-installed-pythonpath inputs outputs)
17328 (invoke "python" "-m" "multiprocess.tests")
17329 #t)))))
17330 (propagated-inputs
17331 `(("python-dill" ,python-dill)))
17332 (home-page "https://pypi.org/project/multiprocess/")
17333 (synopsis "Multiprocessing and multithreading in Python")
17334 (description
17335 "This package is a fork of the multiprocessing Python package, a package
17336 which supports the spawning of processes using the API of the standard
17337 library's @code{threading} module.")
17338 (license license:bsd-3)))
17339
17340 (define-public python-toolz
17341 (package
17342 (name "python-toolz")
17343 (version "0.9.0")
17344 (source
17345 (origin
17346 (method url-fetch)
17347 (uri (pypi-uri "toolz" version))
17348 (sha256
17349 (base32
17350 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17351 (build-system python-build-system)
17352 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17353 ;; unregistered loader type"
17354 (arguments '(#:tests? #f))
17355 (home-page "https://github.com/pytoolz/toolz/")
17356 (synopsis "List processing tools and functional utilities")
17357 (description
17358 "This package provides a set of utility functions for iterators,
17359 functions, and dictionaries.")
17360 (license license:bsd-3)))
17361
17362 (define-public python2-toolz
17363 (package-with-python2 python-toolz))
17364
17365 (define-public python-cytoolz
17366 (package
17367 (name "python-cytoolz")
17368 (version "0.9.0.1")
17369 (source
17370 (origin
17371 (method url-fetch)
17372 (uri (pypi-uri "cytoolz" version))
17373 (sha256
17374 (base32
17375 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17376 (build-system python-build-system)
17377 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17378 ;; 'exceptions'"
17379 (arguments '(#:tests? #f))
17380 (propagated-inputs
17381 `(("python-toolz" ,python-toolz)))
17382 (native-inputs
17383 `(("python-cython" ,python-cython)))
17384 (home-page "https://github.com/pytoolz/cytoolz")
17385 (synopsis "High performance functional utilities")
17386 (description
17387 "The cytoolz package implements the same API as provided by toolz. The
17388 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17389 that is accessible to other projects developed in Cython.")
17390 (license license:bsd-3)))
17391
17392 (define-public python-sortedcontainers
17393 (package
17394 (name "python-sortedcontainers")
17395 (version "2.1.0")
17396 (source
17397 (origin
17398 (method url-fetch)
17399 (uri (pypi-uri "sortedcontainers" version))
17400 (sha256
17401 (base32
17402 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17403 (build-system python-build-system)
17404 (arguments
17405 ;; FIXME: Tests require many extra dependencies, and would introduce
17406 ;; a circular dependency on hypothesis, which uses this package.
17407 '(#:tests? #f))
17408 (propagated-inputs
17409 `(("python-appdirs" ,python-appdirs)
17410 ("python-distlib" ,python-distlib)
17411 ("python-filelock" ,python-filelock)
17412 ("python-six" ,python-six-bootstrap)))
17413 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17414 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17415 (description
17416 "This package provides a sorted collections library, written in
17417 pure-Python.")
17418 (license license:asl2.0)))
17419
17420 (define-public python2-sortedcontainers
17421 (package-with-python2 python-sortedcontainers))
17422
17423 (define-public python-cloudpickle
17424 (package
17425 (name "python-cloudpickle")
17426 (version "1.3.0")
17427 (source
17428 (origin
17429 (method url-fetch)
17430 (uri (pypi-uri "cloudpickle" version))
17431 (sha256
17432 (base32
17433 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17434 (build-system python-build-system)
17435 (arguments
17436 '(#:phases (modify-phases %standard-phases
17437 (add-before 'check 'do-not-override-PYTHONPATH
17438 (lambda _
17439 ;; Append to PYTHONPATH instead of overriding it so
17440 ;; that dependencies from Guix can be found.
17441 (substitute* "tests/testutils.py"
17442 (("env\\['PYTHONPATH'\\] = pythonpath")
17443 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17444 #t))
17445 (replace 'check
17446 (lambda* (#:key tests? #:allow-other-keys)
17447 (if tests?
17448 (invoke "pytest" "-s" "-vv")
17449 (format #t "test suite not run~%"))
17450 #t)))))
17451 (native-inputs
17452 `(;; For tests.
17453 ("python-psutil" ,python-psutil)
17454 ("python-pytest" ,python-pytest)
17455 ("python-tornado" ,python-tornado)))
17456 (home-page "https://github.com/cloudpipe/cloudpickle")
17457 (synopsis "Extended pickling support for Python objects")
17458 (description
17459 "Cloudpickle makes it possible to serialize Python constructs not
17460 supported by the default pickle module from the Python standard library. It
17461 is especially useful for cluster computing where Python expressions are
17462 shipped over the network to execute on remote hosts, possibly close to the
17463 data.")
17464 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17465 (license license:bsd-3)))
17466
17467 (define-public python2-cloudpickle
17468 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17469 (package
17470 (inherit base)
17471 (native-inputs
17472 `(("python-mock" ,python2-mock)
17473 ,@(package-native-inputs base)))
17474 (propagated-inputs
17475 `(("python-futures" ,python2-futures)
17476 ,@(package-propagated-inputs base))))))
17477
17478 (define-public python-locket
17479 (package
17480 (name "python-locket")
17481 (version "0.2.0")
17482 (source
17483 (origin
17484 (method url-fetch)
17485 (uri (pypi-uri "locket" version))
17486 (sha256
17487 (base32
17488 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17489 (build-system python-build-system)
17490 (home-page "https://github.com/mwilliamson/locket.py")
17491 (synopsis "File-based locks for Python")
17492 (description
17493 "Locket implements a lock that can be used by multiple processes provided
17494 they use the same path.")
17495 (license license:bsd-2)))
17496
17497 (define-public python2-locket
17498 (package-with-python2 python-locket))
17499
17500 (define-public python-blosc
17501 (package
17502 (name "python-blosc")
17503 (version "1.5.1")
17504 (source
17505 (origin
17506 (method url-fetch)
17507 (uri (pypi-uri "blosc" version))
17508 (sha256
17509 (base32
17510 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17511 (build-system python-build-system)
17512 ;; FIXME: all tests pass, but then this error is printed:
17513 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17514 (arguments '(#:tests? #f))
17515 (propagated-inputs
17516 `(("python-numpy" ,python-numpy)))
17517 (home-page "https://github.com/blosc/python-blosc")
17518 (synopsis "Python wrapper for the Blosc data compressor library")
17519 (description "Blosc is a high performance compressor optimized for binary
17520 data. It has been designed to transmit data to the processor cache faster
17521 than the traditional, non-compressed, direct memory fetch approach via a
17522 @code{memcpy()} system call.
17523
17524 Blosc works well for compressing numerical arrays that contains data with
17525 relatively low entropy, like sparse data, time series, grids with
17526 regular-spaced values, etc.
17527
17528 This Python package wraps the Blosc library.")
17529 (license license:bsd-3)))
17530
17531 (define-public python2-blosc
17532 (package-with-python2 python-blosc))
17533
17534 (define-public python-partd
17535 (package
17536 (name "python-partd")
17537 (version "0.3.9")
17538 (source
17539 (origin
17540 (method url-fetch)
17541 (uri (pypi-uri "partd" version))
17542 (sha256
17543 (base32
17544 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17545 (build-system python-build-system)
17546 (propagated-inputs
17547 `(("python-blosc" ,python-blosc)
17548 ("python-locket" ,python-locket)
17549 ("python-numpy" ,python-numpy)
17550 ("python-pandas" ,python-pandas)
17551 ("python-pyzmq" ,python-pyzmq)
17552 ("python-toolz" ,python-toolz)))
17553 (home-page "https://github.com/dask/partd/")
17554 (synopsis "Appendable key-value storage")
17555 (description "Partd stores key-value pairs. Values are raw bytes. We
17556 append on old values. Partd excels at shuffling operations.")
17557 (license license:bsd-3)))
17558
17559 (define-public python2-partd
17560 (package-with-python2 python-partd))
17561
17562 (define-public python-fsspec
17563 (package
17564 (name "python-fsspec")
17565 (version "0.6.1")
17566 (source
17567 (origin
17568 (method url-fetch)
17569 (uri (pypi-uri "fsspec" version))
17570 (sha256
17571 (base32
17572 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17573 (build-system python-build-system)
17574 (arguments '(#:tests? #f)) ; there are none
17575 (home-page "https://github.com/intake/filesystem_spec")
17576 (synopsis "File-system specification")
17577 (description "The purpose of this package is to produce a template or
17578 specification for a file-system interface, that specific implementations
17579 should follow, so that applications making use of them can rely on a common
17580 behavior and not have to worry about the specific internal implementation
17581 decisions with any given backend.")
17582 (license license:bsd-3)))
17583
17584 (define-public python-dask
17585 (package
17586 (name "python-dask")
17587 (version "2.14.0")
17588 (source
17589 (origin
17590 (method url-fetch)
17591 (uri (pypi-uri "dask" version))
17592 (sha256
17593 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17594 (build-system python-build-system)
17595 (arguments
17596 `(#:phases
17597 (modify-phases %standard-phases
17598 (add-after 'unpack 'disable-broken-tests
17599 (lambda _
17600 ;; This test is marked as xfail when pytest-xdist is used.
17601 (substitute* "dask/tests/test_threaded.py"
17602 (("def test_interrupt\\(\\)" m)
17603 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17604 m)))
17605 ;; This one fails with a type error:
17606 ;; TypeError: Already tz-aware, use tz_convert to convert.
17607 (substitute* "dask/dataframe/tests/test_shuffle.py"
17608 (("def test_set_index_timestamp\\(\\)" m)
17609 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17610 m)))
17611 #t))
17612 (replace 'check
17613 (lambda _ (invoke "pytest" "-vv"))))))
17614 (propagated-inputs
17615 `(("python-cloudpickle" ,python-cloudpickle)
17616 ("python-fsspec" ,python-fsspec)
17617 ("python-numpy" ,python-numpy)
17618 ("python-packaging" ,python-packaging)
17619 ("python-pandas" ,python-pandas)
17620 ("python-partd" ,python-partd)
17621 ("python-toolz" ,python-toolz)
17622 ("python-pyyaml" ,python-pyyaml)))
17623 (native-inputs
17624 `(("python-pytest" ,python-pytest)
17625 ("python-pytest-runner" ,python-pytest-runner)))
17626 (home-page "https://github.com/dask/dask/")
17627 (synopsis "Parallel computing with task scheduling")
17628 (description
17629 "Dask is a flexible parallel computing library for analytics. It
17630 consists of two components: dynamic task scheduling optimized for computation,
17631 and large data collections like parallel arrays, dataframes, and lists that
17632 extend common interfaces like NumPy, Pandas, or Python iterators to
17633 larger-than-memory or distributed environments. These parallel collections
17634 run on top of the dynamic task schedulers. ")
17635 (license license:bsd-3)))
17636
17637 (define-public python-ilinkedlist
17638 (package
17639 (name "python-ilinkedlist")
17640 (version "0.4.0")
17641 (source
17642 (origin
17643 (method url-fetch)
17644 (uri (pypi-uri "ilinkedlist" version))
17645 (sha256
17646 (base32
17647 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17648 (build-system python-build-system)
17649 (native-inputs `(("python-pytest" ,python-pytest)))
17650 (inputs `(("python" ,python)))
17651 (home-page "https://github.com/luther9/ilinkedlist-py")
17652 (synopsis "Immutable linked list library")
17653 (description
17654 "This is a implementation of immutable linked lists for Python. It
17655 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17656 Since a linked list is treated as immutable, it is hashable, and its length
17657 can be retrieved in constant time. Some of the terminology is inspired by
17658 LISP. It is possible to create an improper list by creating a @code{Pair}
17659 with a non-list @code{cdr}.")
17660 (license license:gpl3+)))
17661
17662 (define-public python-readlike
17663 (package
17664 (name "python-readlike")
17665 (version "0.1.3")
17666 (source
17667 (origin
17668 (method url-fetch)
17669 (uri (pypi-uri "readlike" version))
17670 (sha256
17671 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17672 (build-system python-build-system)
17673 (home-page "https://github.com/jangler/readlike")
17674 (synopsis "GNU Readline-like line editing module")
17675 (description
17676 "This Python module provides line editing functions similar to the default
17677 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17678 @code{readline} package, this one allows access to those capabilties in settings
17679 outside of a standard command-line interface. It is especially well-suited to
17680 interfacing with Urwid, due to a shared syntax for describing key inputs.
17681
17682 Currently, all stateless Readline commands are implemented. Yanking and history
17683 are not supported.")
17684 (license license:expat)))
17685
17686 (define-public python2-readlike
17687 (package-with-python2 python-readlike))
17688
17689 (define-public python-reparser
17690 (package
17691 (name "python-reparser")
17692 (version "1.4.3")
17693 (source
17694 (origin
17695 (method url-fetch)
17696 (uri (pypi-uri "ReParser" version))
17697 (sha256
17698 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17699 (build-system python-build-system)
17700 (home-page "https://github.com/xmikos/reparser")
17701 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17702 (description
17703 "This Python library provides a simple lexer/parser for inline markup based
17704 on regular expressions.")
17705 (license license:expat)))
17706
17707 (define-public python2-reparser
17708 (let ((reparser (package-with-python2
17709 (strip-python2-variant python-reparser))))
17710 (package (inherit reparser)
17711 (propagated-inputs
17712 `(("python2-enum34" ,python2-enum34)
17713 ,@(package-propagated-inputs reparser))))))
17714
17715 (define-public python-precis-i18n
17716 (package
17717 (name "python-precis-i18n")
17718 (version "1.0.0")
17719 (source
17720 (origin
17721 (method url-fetch)
17722 (uri (pypi-uri "precis_i18n" version))
17723 (sha256
17724 (base32
17725 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17726 (build-system python-build-system)
17727 (home-page "https://github.com/byllyfish/precis_i18n")
17728 (synopsis "Implementation of the PRECIS framework")
17729 (description
17730 "This module implements the PRECIS Framework as described in RFC 8264,
17731 RFC 8265 and RFC 8266.")
17732 (license license:expat)))
17733
17734 (define-public python-absl-py
17735 (package
17736 (name "python-absl-py")
17737 (version "0.6.1")
17738 (source
17739 (origin
17740 (method url-fetch)
17741 (uri (pypi-uri "absl-py" version))
17742 (sha256
17743 (base32
17744 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17745 (build-system python-build-system)
17746 (propagated-inputs
17747 `(("python-six" ,python-six)))
17748 (home-page "https://github.com/abseil/abseil-py")
17749 (synopsis "Abseil Python common libraries")
17750 (description
17751 "This package provides the Abseil Python Common Libraries, a collection
17752 of Python libraries for building Python applications.")
17753 (license license:asl2.0)))
17754
17755 (define-public python-astor
17756 (package
17757 (name "python-astor")
17758 (version "0.7.1")
17759 (source
17760 (origin
17761 (method url-fetch)
17762 (uri (pypi-uri "astor" version))
17763 (sha256
17764 (base32
17765 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17766 (build-system python-build-system)
17767 ;; FIXME: There are two errors and two test failures.
17768 (arguments `(#:tests? #f))
17769 (home-page "https://github.com/berkerpeksag/astor")
17770 (synopsis "Read and write Python ASTs")
17771 (description "Astor is designed to allow easy manipulation of Python
17772 source via the Abstract Syntax Tree.")
17773 (license license:bsd-3)))
17774
17775 (define-public python2-astor
17776 (package-with-python2 python-astor))
17777
17778 (define-public python-astunparse
17779 (package
17780 (name "python-astunparse")
17781 (version "1.6.2")
17782 (source
17783 (origin
17784 (method url-fetch)
17785 (uri (pypi-uri "astunparse" version))
17786 (sha256
17787 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17788 (build-system python-build-system)
17789 (arguments '(#:tests? #f)) ; there are none
17790 (propagated-inputs
17791 `(("python-six" ,python-six)
17792 ("python-wheel" ,python-wheel)))
17793 (home-page "https://github.com/simonpercivall/astunparse")
17794 (synopsis "AST unparser for Python")
17795 (description "This package provides an AST unparser for Python. It is a
17796 factored out version of @code{unparse} found in the Python source
17797 distribution.")
17798 (license license:bsd-3)))
17799
17800 (define-public python-gast
17801 (package
17802 (name "python-gast")
17803 (version "0.3.3")
17804 (source
17805 (origin
17806 (method url-fetch)
17807 (uri (pypi-uri "gast" version))
17808 (sha256
17809 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17810 (build-system python-build-system)
17811 (propagated-inputs
17812 `(("python-astunparse" ,python-astunparse)))
17813 (home-page "https://pypi.org/project/gast/")
17814 (synopsis "Generic Python AST that abstracts the underlying Python version")
17815 (description
17816 "GAST provides a compatibility layer between the AST of various Python
17817 versions, as produced by @code{ast.parse} from the standard @code{ast}
17818 module.")
17819 (license license:bsd-3)))
17820
17821 (define-public python-wikidata
17822 (package
17823 (name "python-wikidata")
17824 (version "0.6.1")
17825 (source
17826 (origin
17827 (method url-fetch)
17828 (uri (pypi-uri "Wikidata" version))
17829 (sha256
17830 (base32
17831 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17832 (build-system python-build-system)
17833 (propagated-inputs
17834 `(("python-babel" ,python-babel)))
17835 (home-page "https://github.com/dahlia/wikidata")
17836 (synopsis "Wikidata client library")
17837 (description
17838 "This package provides a Python interface to
17839 @url{https://www.wikidata.org/, Wikidata}.")
17840 (properties '((upstream-name . "Wikidata")))
17841 (license license:gpl3+)))
17842
17843 (define-public python-doctest-ignore-unicode
17844 (package
17845 (name "python-doctest-ignore-unicode")
17846 (version "0.1.2")
17847 (source
17848 (origin
17849 (method url-fetch)
17850 (uri (pypi-uri "doctest-ignore-unicode" version))
17851 (sha256
17852 (base32
17853 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17854 (build-system python-build-system)
17855 (native-inputs
17856 `(("python-nose" ,python-nose)))
17857 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17858 (synopsis "Ignore Unicode literal prefixes in doctests")
17859 (description
17860 "This package adds support for a flag to ignore Unicode literal prefixes
17861 in doctests.")
17862 (license license:asl2.0)))
17863
17864 (define-public python-attr
17865 (package
17866 (name "python-attr")
17867 (version "0.3.1")
17868 (source
17869 (origin
17870 (method url-fetch)
17871 (uri (pypi-uri "attr" version))
17872 (sha256
17873 (base32
17874 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17875 (build-system python-build-system)
17876 (home-page "https://github.com/denis-ryzhkov/attr")
17877 (synopsis "Decorator for attributes of target function or class")
17878 (description "Simple decorator to set attributes of target function or
17879 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17880 (license license:expat)))
17881
17882 (define-public python-construct
17883 (package
17884 (name "python-construct")
17885 (version "2.10.56")
17886 (source
17887 (origin
17888 (method url-fetch)
17889 (uri (pypi-uri "construct" version))
17890 (sha256
17891 (base32
17892 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17893 (build-system python-build-system)
17894 (arguments
17895 `(#:tests? #f)) ; No tests exist.
17896 (propagated-inputs
17897 `(("python-extras" ,python-extras)
17898 ("python-arrow" ,python-arrow)
17899 ("python-numpy" ,python-numpy)
17900 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17901 (home-page "https://construct.readthedocs.io")
17902 (synopsis "Declarative and symmetrical parser and builder for binary data")
17903 (description
17904 "This package provides both simple, atomic constructs (such as
17905 integers of various sizes), as well as composite ones which allow you
17906 form hierarchical and sequential structures of increasing complexity.
17907 It features bit and byte granularity, easy debugging and testing, an
17908 easy-to-extend subclass system, and lots of primitive constructs to
17909 make your work easier.")
17910 (license license:expat)))
17911
17912 (define-public python-humanize
17913 (package
17914 (name "python-humanize")
17915 (version "0.5.1")
17916 (source
17917 (origin
17918 (method url-fetch)
17919 (uri (pypi-uri "humanize" version))
17920 (sha256
17921 (base32
17922 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17923 (arguments
17924 '(#:tests? #f)) ; tests not in pypi archive
17925 (build-system python-build-system)
17926 (home-page "https://github.com/jmoiron/humanize")
17927 (synopsis "Print numerical information in a human-readable form")
17928 (description "This package provides a Python module that displays numbers
17929 and dates in \"human readable\" forms. For example, it would display
17930 \"12345591313\" as \"12.3 billion\".")
17931 (license license:expat)))
17932
17933 (define-public python-txaio
17934 (package
17935 (name "python-txaio")
17936 (version "18.8.1")
17937 (source
17938 (origin
17939 (method url-fetch)
17940 (uri (pypi-uri "txaio" version))
17941 (sha256
17942 (base32
17943 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17944 (build-system python-build-system)
17945 (propagated-inputs
17946 `(("python-twisted" ,python-twisted)
17947 ("python-six" ,python-six)))
17948 (home-page "https://github.com/crossbario/txaio")
17949 (synopsis "Compatibility layer between Python asyncio and Twisted")
17950 (description "Txaio provides a compatibility layer between the Python
17951 @code{asyncio} module and @code{Twisted}.")
17952 (license license:expat)))
17953
17954 (define-public python-toolshed
17955 (package
17956 (name "python-toolshed")
17957 (version "0.4.6")
17958 (source
17959 (origin
17960 (method url-fetch)
17961 (uri (pypi-uri "toolshed" version))
17962 (sha256
17963 (base32
17964 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
17965 (build-system python-build-system)
17966 (native-inputs
17967 `(("python-nose" ,python-nose)))
17968 (home-page "https://github.com/brentp/toolshed/")
17969 (synopsis "Collection of modules and functions for working with data")
17970 (description "This is a collection of well-tested, simple modules and
17971 functions that aim to reduce boilerplate when working with data.")
17972 (license license:bsd-2)))
17973
17974 (define-public python-annoy
17975 (package
17976 (name "python-annoy")
17977 (version "1.15.1")
17978 (source
17979 (origin
17980 (method url-fetch)
17981 (uri (pypi-uri "annoy" version))
17982 (sha256
17983 (base32
17984 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
17985 (build-system python-build-system)
17986 (native-inputs
17987 `(("python-nose" ,python-nose)))
17988 (home-page "https://github.com/spotify/annoy/")
17989 (synopsis "Approximate nearest neighbors library")
17990 (description
17991 "Annoy is a C++ library with Python bindings to search for points in
17992 space that are close to a given query point. It also creates large read-only
17993 file-based data structures that are @code{mmap}ped into memory so that many
17994 processes may share the same data.")
17995 (license license:asl2.0)))
17996
17997 (define-public python-pylzma
17998 (package
17999 (name "python-pylzma")
18000 (version "0.5.0")
18001 (source
18002 (origin
18003 (method url-fetch)
18004 (uri (pypi-uri "pylzma" version))
18005 (sha256
18006 (base32
18007 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
18008 (build-system python-build-system)
18009 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
18010 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
18011 (description "This package provides Python bindings for the LZMA library
18012 by Igor Pavlov.")
18013 (license license:lgpl2.1+)))
18014
18015 (define-public python2-pylzma
18016 (package-with-python2 python-pylzma))
18017
18018 (define-public python2-zeroconf
18019 (package
18020 (name "python2-zeroconf")
18021
18022 ;; This is the last version that supports Python 2.x.
18023 (version "0.19.1")
18024 (source
18025 (origin
18026 (method url-fetch)
18027 (uri (pypi-uri "zeroconf" version))
18028 (sha256
18029 (base32
18030 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
18031 (build-system python-build-system)
18032 (arguments
18033 `(#:python ,python-2
18034 #:phases
18035 (modify-phases %standard-phases
18036 (add-after 'unpack 'patch-requires
18037 (lambda* (#:key inputs #:allow-other-keys)
18038 (substitute* "setup.py"
18039 (("enum-compat")
18040 "enum34"))
18041 #t)))))
18042 (native-inputs
18043 `(("python2-six" ,python2-six)
18044 ("python2-enum32" ,python2-enum34)
18045 ("python2-netifaces" ,python2-netifaces)
18046 ("python2-typing" ,python2-typing)))
18047 (home-page "https://github.com/jstasiak/python-zeroconf")
18048 (synopsis "Pure Python mDNS service discovery")
18049 (description
18050 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18051 compatible).")
18052 (license license:lgpl2.1+)))
18053
18054 (define-public python-bsddb3
18055 (package
18056 (name "python-bsddb3")
18057 (version "6.2.6")
18058 (source
18059 (origin
18060 (method url-fetch)
18061 (uri (pypi-uri "bsddb3" version))
18062 (sha256
18063 (base32
18064 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18065 (build-system python-build-system)
18066 (inputs
18067 `(("bdb" ,bdb)))
18068 (arguments
18069 '(#:phases
18070 (modify-phases %standard-phases
18071 (add-after 'unpack 'configure-locations
18072 (lambda* (#:key inputs #:allow-other-keys)
18073 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18074 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18075 #t))
18076 (replace 'check
18077 (lambda _
18078 (invoke "python3" "test3.py" "-v"))))))
18079 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18080 (synopsis "Python bindings for Oracle Berkeley DB")
18081 (description
18082 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18083 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18084 Transaction objects, and each of these is exposed as a Python type in the
18085 bsddb3.db module. The database objects can use various access methods: btree,
18086 hash, recno, and queue. Complete support of Berkeley DB distributed
18087 transactions. Complete support for Berkeley DB Replication Manager.
18088 Complete support for Berkeley DB Base Replication. Support for RPC.")
18089 (license license:bsd-3)))
18090
18091 (define-public python-dbfread
18092 (package
18093 (name "python-dbfread")
18094 (version "2.0.7")
18095 (source (origin
18096 (method url-fetch)
18097 (uri (pypi-uri "dbfread" version))
18098 (sha256
18099 (base32
18100 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18101 (build-system python-build-system)
18102 (native-inputs
18103 `(("python-pytest" ,python-pytest)))
18104 (home-page "https://dbfread.readthedocs.io")
18105 (synopsis "Read DBF Files with Python")
18106 (description
18107 "This library reads DBF files and returns the data as native Python data
18108 types for further processing. It is primarily intended for batch jobs and
18109 one-off scripts.")
18110 (license license:expat)))
18111
18112 (define-public python-cached-property
18113 (package
18114 (name "python-cached-property")
18115 (version "1.5.1")
18116 (source
18117 (origin
18118 (method url-fetch)
18119 (uri (pypi-uri "cached-property" version))
18120 (sha256
18121 (base32
18122 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18123 (build-system python-build-system)
18124 (arguments
18125 `(#:phases
18126 (modify-phases %standard-phases
18127 ;; https://github.com/pydanny/cached-property/issues/131
18128 ;; recent versions of freezegun break one test
18129 (add-after 'unpack 'disable-broken-test
18130 (lambda _
18131 (substitute* "tests/test_cached_property.py"
18132 (("def test_threads_ttl_expiry\\(self\\)" m)
18133 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18134 " " m)))
18135 #t)))))
18136 (native-inputs
18137 `(("python-freezegun" ,python-freezegun)))
18138 (home-page
18139 "https://github.com/pydanny/cached-property")
18140 (synopsis
18141 "Decorator for caching properties in classes")
18142 (description
18143 "This package provides a decorator which makes caching
18144 time-or-computationally-expensive properties quick and easy and works in Python
18145 2 or 3.")
18146 (license license:bsd-3)))
18147
18148 (define-public python-folium
18149 (package
18150 (name "python-folium")
18151 (version "0.10.1")
18152 (source
18153 (origin
18154 (method url-fetch)
18155 (uri (pypi-uri "folium" version))
18156 (sha256
18157 (base32
18158 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
18159 (build-system python-build-system)
18160 (propagated-inputs
18161 `(("python-branca" ,python-branca)
18162 ("python-jinja2" ,python-jinja2)
18163 ("python-numpy" ,python-numpy)
18164 ("python-requests" ,python-requests)))
18165 (native-inputs
18166 `(("python-pytest" ,python-pytest)))
18167 (home-page "https://github.com/python-visualization/folium")
18168 (synopsis "Make beautiful maps with Leaflet.js & Python")
18169 (description "@code{folium} makes it easy to visualize data that’s been
18170 manipulated in Python on an interactive leaflet map. It enables both the
18171 binding of data to a map for @code{choropleth} visualizations as well as
18172 passing rich vector/raster/HTML visualizations as markers on the map.
18173
18174 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18175 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18176 supports Image, Video, GeoJSON and TopoJSON overlays.")
18177 (license license:expat)))
18178
18179 (define-public jube
18180 (package
18181 ;; This is a command-line tool, so no "python-" prefix.
18182 (name "jube")
18183 (version "2.2.2")
18184 (source (origin
18185 (method url-fetch)
18186 (uri (string-append
18187 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18188 version))
18189 (sha256
18190 (base32
18191 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18192 (file-name (string-append "jube-" version ".tar.gz"))))
18193 (build-system python-build-system)
18194 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18195 (synopsis "Benchmarking environment")
18196 (description
18197 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18198 benchmarked application, benchmark data is stored in a format that allows JUBE
18199 to deduct the desired information. This data can be parsed by automatic pre-
18200 and post-processing scripts that draw information and store it more densely
18201 for manual interpretation.")
18202 (license license:gpl3+)))
18203
18204 (define-public python-pyroutelib3
18205 (package
18206 (name "python-pyroutelib3")
18207 (version "1.3.post1")
18208 (source
18209 (origin
18210 (method url-fetch)
18211 (uri (pypi-uri "pyroutelib3" version))
18212 (sha256
18213 (base32
18214 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18215 (build-system python-build-system)
18216 (propagated-inputs
18217 `(("python-dateutil" ,python-dateutil)))
18218 (home-page "https://github.com/MKuranowski/pyroutelib3")
18219 (synopsis "Library for simple routing on OSM data")
18220 (description "Library for simple routing on OSM data")
18221 (license license:gpl3+)))
18222
18223 (define-public python-bibtexparser
18224 (package
18225 (name "python-bibtexparser")
18226 (version "1.1.0")
18227 (source
18228 (origin
18229 (method url-fetch)
18230 (uri (pypi-uri "bibtexparser" version))
18231 (sha256
18232 (base32
18233 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18234 (build-system python-build-system)
18235 (propagated-inputs
18236 `(("python-pyparsing" ,python-pyparsing)))
18237 (native-inputs
18238 `(("python-future" ,python-future)))
18239 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18240 (synopsis "Python library to parse BibTeX files")
18241 (description "BibtexParser is a Python library to parse BibTeX files.")
18242 (license (list license:bsd-3 license:lgpl3))))
18243
18244 (define-public python-distro
18245 (package
18246 (name "python-distro")
18247 (version "1.4.0")
18248 (source
18249 (origin
18250 (method url-fetch)
18251 (uri (pypi-uri "distro" version))
18252 (sha256
18253 (base32
18254 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18255 (build-system python-build-system)
18256 (native-inputs
18257 `(("python-pytest" ,python-pytest)))
18258 (home-page "https://github.com/nir0s/distro")
18259 (synopsis
18260 "OS platform information API")
18261 (description
18262 "@code{distro} provides information about the OS distribution it runs on,
18263 such as a reliable machine-readable ID, or version information.
18264
18265 It is the recommended replacement for Python's original
18266 `platform.linux_distribution` function (which will be removed in Python 3.8).
18267 @code{distro} also provides a command-line interface to output the platform
18268 information in various formats.")
18269 (license license:asl2.0)))
18270
18271 (define-public python-cairosvg
18272 (package
18273 (name "python-cairosvg")
18274 (version "2.4.2")
18275 (source
18276 (origin
18277 (method url-fetch)
18278 (uri (pypi-uri "CairoSVG" version))
18279 (sha256
18280 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18281 (build-system python-build-system)
18282 (arguments
18283 `(#:phases
18284 (modify-phases %standard-phases
18285 (replace 'check
18286 (lambda _ (invoke "pytest"))))))
18287 (propagated-inputs
18288 `(("python-cairocffi" ,python-cairocffi)
18289 ("python-cssselect2" ,python-cssselect2)
18290 ("python-defusedxml" ,python-defusedxml)
18291 ("python-pillow" ,python-pillow)
18292 ("python-tinycss2" ,python-tinycss2)))
18293 (native-inputs
18294 `(("python-pytest-flake8" ,python-pytest-flake8)
18295 ("python-pytest-isort" ,python-pytest-isort)
18296 ("python-pytest-runner" ,python-pytest-runner)))
18297 (home-page "https://cairosvg.org/")
18298 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18299 (description "CairoSVG is a SVG converter based on Cairo. It can export
18300 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18301 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18302 parsed, the result is drawn to a Cairo surface that can be exported to
18303 qvarious formats: PDF, PostScript, PNG and even SVG.")
18304 (license license:lgpl3+)))
18305
18306 (define-public python-pyphen
18307 (package
18308 (name "python-pyphen")
18309 (version "0.9.5")
18310 (source
18311 (origin
18312 (method url-fetch)
18313 (uri (pypi-uri "Pyphen" version))
18314 (sha256
18315 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18316 (build-system python-build-system)
18317 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18318 ;; embedded set provided by upstream - like Debian does.
18319 (home-page "https://github.com/Kozea/Pyphen")
18320 (synopsis "Pure Python module to hyphenate text")
18321 (description "Pyphen is a pure Python module to hyphenate text using
18322 existing Hunspell hyphenation dictionaries.")
18323 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18324
18325 (define-public python-intelhex
18326 (package
18327 (name "python-intelhex")
18328 (version "2.2.1")
18329 (source
18330 (origin
18331 (method url-fetch)
18332 (uri (pypi-uri "intelhex" version))
18333 (sha256
18334 (base32
18335 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18336 (build-system python-build-system)
18337 (arguments '(#:tests? #f)) ;issue with version
18338 (home-page "https://pypi.org/project/IntelHex/")
18339 (synopsis "Python library for Intel HEX files manipulations")
18340 (description "The Intel HEX file format is widely used in microprocessors
18341 and microcontrollers area (embedded systems etc.) as the de facto standard for
18342 representation of code to be programmed into microelectronic devices. This
18343 package provides an intelhex Python library to read, write, create from
18344 scratch and manipulate data from Intel HEX file format. It also includes
18345 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18346 converters and more, those based on the library itself.")
18347 (license license:bsd-3)))
18348
18349 (define-public python-pykwalify
18350 (package
18351 (name "python-pykwalify")
18352 (version "1.7.0")
18353 (source
18354 (origin
18355 (method url-fetch)
18356 (uri (pypi-uri "pykwalify" version))
18357 (sha256
18358 (base32
18359 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18360 (build-system python-build-system)
18361 (arguments '(#:tests? #f)) ;missing dependencies
18362 (propagated-inputs
18363 `(("python-dateutil" ,python-dateutil)
18364 ("python-docopt" ,python-docopt)
18365 ("python-pyyaml" ,python-pyyaml)))
18366 (home-page "https://github.com/grokzen/pykwalify")
18367 (synopsis
18368 "Python lib/cli for JSON/YAML schema validation")
18369 (description
18370 "This package provides a parser, schema validator, and data binding tool
18371 for YAML and JSON.")
18372 (license license:expat)))
18373
18374 (define-public python-dbusmock
18375 (package
18376 (name "python-dbusmock")
18377 (version "0.18.3")
18378 (source
18379 (origin
18380 (method url-fetch)
18381 (uri (pypi-uri "python-dbusmock" version))
18382 (sha256
18383 (base32
18384 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18385 (build-system python-build-system)
18386 (arguments
18387 '(#:phases
18388 (modify-phases %standard-phases
18389 (add-after 'unpack 'patch-shell-path
18390 (lambda _
18391 (substitute* "tests/test_code.py"
18392 (("/bin/bash") (which "bash")))
18393 #t)))))
18394 (native-inputs
18395 `(;; For tests.
18396 ("dbus" ,dbus) ; for dbus-daemon
18397 ("python-nose" ,python-nose)
18398 ("which" ,which)))
18399 (propagated-inputs
18400 `(("python-dbus" ,python-dbus)
18401 ("python-pygobject" ,python-pygobject)))
18402 (home-page "https://github.com/martinpitt/python-dbusmock")
18403 (synopsis "Python library for mock D-Bus objects")
18404 (description "python-dbusmock allows for the easy creation of mock objects on
18405 D-Bus. This is useful for writing tests for software which talks to D-Bus
18406 services such as upower, systemd, logind, gnome-session or others, and it is
18407 hard (or impossible without root privileges) to set the state of the real
18408 services to what you expect in your tests.")
18409 (license license:lgpl3+)))
18410
18411 (define-public python-ujson
18412 (package
18413 (name "python-ujson")
18414 (version "2.0.3")
18415 (source
18416 (origin
18417 (method url-fetch)
18418 (uri (pypi-uri "ujson" version))
18419 (sha256
18420 (base32
18421 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18422 (modules '((guix build utils)))
18423 (snippet
18424 '(begin (delete-file-recursively "deps") #t))))
18425 (build-system python-build-system)
18426 (arguments
18427 `(#:phases
18428 (modify-phases %standard-phases
18429 (add-after 'unpack 'link-to-system-double-conversion
18430 (lambda* (#:key inputs #:allow-other-keys)
18431 (let ((d-c (assoc-ref inputs "double-conversion")))
18432 (substitute* "setup.py"
18433 (("./deps/double-conversion/double-conversion\"")
18434 (string-append d-c "/include/double-conversion\""))
18435 (("-lstdc++" stdc)
18436 (string-append "-L" d-c "/lib\","
18437 " \"-ldouble-conversion\","
18438 " \"" stdc)))
18439 #t)))
18440 (replace 'check
18441 (lambda* (#:key inputs outputs #:allow-other-keys)
18442 (add-installed-pythonpath inputs outputs)
18443 (invoke "pytest"))))))
18444 (native-inputs
18445 `(("double-conversion" ,double-conversion)
18446 ("python-setuptools-scm" ,python-setuptools-scm)
18447 ("python-pytest" ,python-pytest)))
18448 (home-page "https://github.com/ultrajson/ultrajson")
18449 (synopsis "Ultra fast JSON encoder and decoder for Python")
18450 (description
18451 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18452 bindings for Python 3.")
18453 (license license:bsd-3)))
18454
18455 (define-public python-ujson-1
18456 (package
18457 (inherit python-ujson)
18458 (version "1.35")
18459 (source
18460 (origin
18461 (method url-fetch)
18462 (uri (pypi-uri "ujson" version))
18463 (sha256
18464 (base32
18465 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18466 (arguments
18467 '(#:phases %standard-phases))
18468 (native-inputs '())
18469 (home-page "http://www.esn.me")
18470 (description
18471 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18472 bindings for Python 2.5+ and 3.")))
18473
18474 (define-public python2-ujson-1
18475 (package-with-python2 python-ujson-1))
18476
18477 (define-public python-iocapture
18478 ;; The latest release is more than a year older than this commit.
18479 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18480 (revision "1"))
18481 (package
18482 (name "python-iocapture")
18483 (version "0.1.2")
18484 (source
18485 (origin
18486 (method git-fetch)
18487 (uri (git-reference
18488 (url "https://github.com/oinume/iocapture.git")
18489 (commit commit)))
18490 (file-name (git-file-name name version))
18491 (sha256
18492 (base32
18493 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18494 (build-system python-build-system)
18495 (arguments
18496 `(#:phases
18497 (modify-phases %standard-phases
18498 (delete 'check)
18499 (add-after 'install 'check
18500 (lambda* (#:key inputs outputs #:allow-other-keys)
18501 (add-installed-pythonpath inputs outputs)
18502 (invoke "py.test" "-v" "tests")
18503 #t)))))
18504 (propagated-inputs
18505 `(("python-flexmock" ,python-flexmock)
18506 ("python-pytest" ,python-pytest)
18507 ("python-pytest-cov" ,python-pytest-cov)
18508 ("python-six" ,python-six)))
18509 (home-page "https://github.com/oinume/iocapture")
18510 (synopsis "Python capturing tool for stdout and stderr")
18511 (description
18512 "This package helps you to capture the standard out (stdout) and the
18513 standard error channel (stderr) in your program.")
18514 (license license:expat))))
18515
18516 (define-public python-argh
18517 ;; There are 21 commits since the latest release containing important
18518 ;; improvements.
18519 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18520 (revision "1"))
18521 (package
18522 (name "python-argh")
18523 (version (git-version "0.26.2" revision commit))
18524 (source
18525 (origin
18526 (method git-fetch)
18527 (uri (git-reference
18528 (url "https://github.com/neithere/argh.git")
18529 (commit commit)))
18530 (file-name (git-file-name name version))
18531 (sha256
18532 (base32
18533 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18534 (build-system python-build-system)
18535 (propagated-inputs
18536 `(("python-iocapture" ,python-iocapture)
18537 ("python-mock" ,python-mock)
18538 ("python-pytest" ,python-pytest)
18539 ("python-pytest-cov" ,python-pytest-cov)
18540 ("python-pytest-xdist" ,python-pytest-xdist)
18541 ("python-tox" ,python-tox)))
18542 (home-page "https://github.com/neithere/argh/")
18543 (synopsis "Argparse wrapper with natural syntax")
18544 (description
18545 "python-argh is a small library that provides several layers of
18546 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18547 always possible to declare a command with the highest possible (and least
18548 flexible) layer and then tune the behaviour with any of the lower layers
18549 including the native API of @code{python-argparse}.")
18550 (license license:lgpl3+))))
18551
18552 (define-public python-ppft
18553 (package
18554 (name "python-ppft")
18555 (version "1.6.6.1")
18556 (source
18557 (origin
18558 (method url-fetch)
18559 (uri (pypi-uri "ppft" version))
18560 (sha256
18561 (base32
18562 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18563 (build-system python-build-system)
18564 (arguments '(#:tests? #f)) ; there are none
18565 (propagated-inputs
18566 `(("python-six" ,python-six)))
18567 (home-page "https://pypi.org/project/ppft/")
18568 (synopsis "Fork of Parallel Python")
18569 (description
18570 "This package is a fork of Parallel Python. The Parallel Python
18571 module (@code{pp}) provides an easy and efficient way to create
18572 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18573 computers and clusters. It features cross-platform portability and dynamic
18574 load balancing.")
18575 (license license:bsd-3)))
18576
18577 (define-public python-pox
18578 (package
18579 (name "python-pox")
18580 (version "0.2.7")
18581 (source
18582 (origin
18583 (method url-fetch)
18584 (uri (pypi-uri "pox" version))
18585 (sha256
18586 (base32
18587 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18588 (build-system python-build-system)
18589 (arguments
18590 `(#:phases
18591 (modify-phases %standard-phases
18592 (replace 'check
18593 (lambda _
18594 (mkdir-p "/tmp/guix")
18595 (setenv "SHELL" "bash")
18596 (setenv "USERNAME" "guix")
18597 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18598 (invoke "py.test" "-vv")
18599 #t)))))
18600 (native-inputs
18601 `(("python-pytest" ,python-pytest)
18602 ("which" ,which)))
18603 (home-page "https://pypi.org/project/pox/")
18604 (synopsis "Python utilities for filesystem exploration and automated builds")
18605 (description
18606 "Pox provides a collection of utilities for navigating and manipulating
18607 filesystems. This module is designed to facilitate some of the low level
18608 operating system interactions that are useful when exploring a filesystem on a
18609 remote host. Pox provides Python equivalents of several shell commands such
18610 as @command{which} and @command{find}. These commands allow automated
18611 discovery of what has been installed on an operating system, and where the
18612 essential tools are located.")
18613 (license license:bsd-3)))
18614
18615 (define-public python-pathos
18616 (package
18617 (name "python-pathos")
18618 (version "0.2.5")
18619 (source
18620 (origin
18621 (method url-fetch)
18622 (uri (pypi-uri "pathos" version))
18623 (sha256
18624 (base32
18625 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18626 (build-system python-build-system)
18627 (arguments
18628 '(#:phases
18629 (modify-phases %standard-phases
18630 (replace 'check
18631 (lambda _
18632 (setenv "PYTHONPATH"
18633 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18634 (invoke "python" "./tests/__main__.py"))))))
18635 (propagated-inputs
18636 `(("python-dill" ,python-dill)
18637 ("python-multiprocess" ,python-multiprocess)
18638 ("python-pox" ,python-pox)
18639 ("python-ppft" ,python-ppft)))
18640 (native-inputs
18641 `(("python-pytest" ,python-pytest)))
18642 (home-page "https://pypi.org/project/pathos/")
18643 (synopsis
18644 "Parallel graph management and execution in heterogeneous computing")
18645 (description
18646 "Python-pathos is a framework for heterogenous computing. It provides a
18647 consistent high-level interface for configuring and launching parallel
18648 computations across heterogenous resources. Python-pathos provides configurable
18649 launchers for parallel and distributed computing, where each launcher contains
18650 the syntactic logic to configure and launch jobs in an execution environment.")
18651 (license license:bsd-3)))
18652
18653 (define-public python-flit
18654 (package
18655 (name "python-flit")
18656 (version "2.1.0")
18657 (source
18658 (origin
18659 (method url-fetch)
18660 (uri (pypi-uri "flit" version))
18661 (sha256
18662 (base32
18663 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18664 (build-system python-build-system)
18665 (arguments
18666 `(#:tests? #f)) ; XXX: Check requires network access.
18667 (home-page "https://flit.readthedocs.io/")
18668 (synopsis
18669 "Simple packaging tool for simple packages")
18670 (description
18671 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18672 packages a single importable module or package at a time, using the import
18673 name as the name on PyPI. All subpackages and data files within a package
18674 are included automatically.")
18675 (license license:bsd-3)))
18676
18677 (define-public python-pathtools
18678 (package
18679 (name "python-pathtools")
18680 (version "0.1.2")
18681 (source
18682 (origin
18683 (method url-fetch)
18684 (uri (pypi-uri "pathtools" version))
18685 (sha256
18686 (base32
18687 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18688 (build-system python-build-system)
18689 (home-page
18690 "https://github.com/gorakhargosh/pathtools")
18691 (synopsis "Path utilities for Python")
18692 (description "Pattern matching and various utilities for file systems
18693 paths.")
18694 (license license:expat)))
18695
18696 (define-public python-fastentrypoints
18697 (package
18698 (name "python-fastentrypoints")
18699 (version "0.12")
18700 (source
18701 (origin
18702 (method url-fetch)
18703 (uri (pypi-uri "fastentrypoints" version))
18704 (sha256
18705 (base32
18706 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18707 (build-system python-build-system)
18708 (home-page
18709 "https://github.com/ninjaaron/fast-entry_points")
18710 (synopsis
18711 "Makes entry_points specified in setup.py load more quickly")
18712 (description
18713 "Using entry_points in your setup.py makes scripts that start really
18714 slowly because it imports pkg_resources. This package allows such setup
18715 scripts to load entry points more quickly.")
18716 (license license:bsd-3)))
18717
18718 (define-public python-funcparserlib
18719 (package
18720 (name "python-funcparserlib")
18721 (version "0.3.6")
18722 (source
18723 (origin
18724 (method url-fetch)
18725 (uri (pypi-uri "funcparserlib" version))
18726 (sha256
18727 (base32
18728 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18729 (native-inputs
18730 `(("python-tox" ,python-tox)))
18731 (arguments
18732 `(#:phases
18733 (modify-phases %standard-phases
18734 (replace 'check
18735 (lambda _
18736 (invoke "tox"))))))
18737 (build-system python-build-system)
18738 (home-page
18739 "https://github.com/vlasovskikh/funcparserlib")
18740 (synopsis
18741 "Recursive descent parsing library based on functional combinators")
18742 (description
18743 "This package is a recursive descent parsing library for Python based on
18744 functional combinators. Parser combinators are just higher-order functions
18745 that take parsers as their arguments and return them as result values.")
18746 (license license:expat)))
18747
18748 (define-public python-speg
18749 (package
18750 (name "python-speg")
18751 (version "0.3")
18752 (source
18753 (origin
18754 (method url-fetch)
18755 (uri (pypi-uri "speg" version ".zip"))
18756 (sha256
18757 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18758 (arguments
18759 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18760 (native-inputs
18761 `(("unzip" ,unzip)))
18762 (build-system python-build-system)
18763 (home-page "https://github.com/avakar/speg")
18764 (synopsis "PEG-based parser interpreter with memoization")
18765 (description "This package is a PEG-based parser and interpreter with
18766 memoization.")
18767 (license license:expat)))
18768
18769 (define-public python-cson
18770 (package
18771 (name "python-cson")
18772 (version "0.8")
18773 (source
18774 (origin
18775 (method url-fetch)
18776 (uri (pypi-uri "cson" version))
18777 (sha256
18778 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18779 (build-system python-build-system)
18780 (propagated-inputs
18781 `(("python-speg" ,python-speg)))
18782 (home-page "https://github.com/avakar/pycson")
18783 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18784 (description "This package is a parser for Coffeescript Object
18785 Notation (CSON).")
18786 (license license:expat)))
18787
18788 (define-public python-asynctest
18789 (package
18790 (name "python-asynctest")
18791 (version "0.13.0")
18792 (source
18793 (origin
18794 (method url-fetch)
18795 (uri (pypi-uri "asynctest" version))
18796 (sha256
18797 (base32
18798 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18799 (build-system python-build-system)
18800 (arguments
18801 '(#:phases
18802 (modify-phases %standard-phases
18803 (replace 'check
18804 (lambda _
18805 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18806 (add-after 'unpack 'disable-tests
18807 (lambda* _
18808 (substitute* "test/test_selector.py"
18809 ;; XXX: This test fails for unknown reason inside the build
18810 ;; environment.
18811 (("def test_events_watched_outside_test_are_ignored")
18812 "@unittest.skip('disabled by guix')
18813 def test_events_watched_outside_test_are_ignored")))))))
18814 (home-page "https://github.com/Martiusweb/asynctest")
18815 (synopsis "Extension of unittest for testing asyncio libraries")
18816 (description
18817 "The package asynctest is built on top of the standard unittest module
18818 and cuts down boilerplate code when testing libraries for asyncio.")
18819 (license license:asl2.0)))
18820
18821 (define-public python-aionotify
18822 (package
18823 (name "python-aionotify")
18824 (version "0.2.0")
18825 (source
18826 (origin
18827 ;; Source tarball on PyPi lacks tests
18828 (method git-fetch)
18829 (uri (git-reference
18830 (url "https://github.com/rbarrois/aionotify")
18831 (commit (string-append "v" version))))
18832 (file-name (git-file-name name version))
18833 (sha256
18834 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18835 (build-system python-build-system)
18836 (native-inputs `(("python-asynctest" ,python-asynctest)))
18837 (home-page "https://github.com/rbarrois/aionotify")
18838 (synopsis "Asyncio-powered inotify library")
18839 (description
18840 "@code{aionotify} is a simple, asyncio-based inotify library.")
18841 (license license:bsd-3)))
18842
18843 (define-public python-forbiddenfruit
18844 (package
18845 (name "python-forbiddenfruit")
18846 (version "0.1.3")
18847 (source
18848 (origin
18849 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18850 (method git-fetch)
18851 (uri (git-reference
18852 (url "https://github.com/clarete/forbiddenfruit")
18853 (commit version)))
18854 (file-name (git-file-name name version))
18855 (sha256
18856 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18857 (build-system python-build-system)
18858 (arguments
18859 '(#:phases
18860 (modify-phases %standard-phases
18861 (replace 'check
18862 (lambda _
18863 (invoke "make" "SKIP_DEPS=1"))))))
18864 (native-inputs
18865 `(("python-nose" ,python-nose)
18866 ("python-coverage" ,python-coverage)))
18867 (home-page "https://github.com/clarete/forbiddenfruit")
18868 (synopsis "Patch python built-in objects")
18869 (description "This project allows Python code to extend built-in types.")
18870 (license (list license:gpl3+ license:expat))))
18871
18872 (define-public python-shouldbe
18873 (package
18874 (name "python-shouldbe")
18875 (version "0.1.2")
18876 (source
18877 (origin
18878 (method url-fetch)
18879 (uri (pypi-uri "shouldbe" version))
18880 (sha256
18881 (base32
18882 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
18883 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
18884 (build-system python-build-system)
18885 (propagated-inputs
18886 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18887 (native-inputs
18888 `(("python-nose" ,python-nose)))
18889 (home-page "https://github.com/directxman12/should_be")
18890 (synopsis "Python Assertion Helpers inspired by Shouldly")
18891 (description
18892 "Python Assertion Helpers inspired by Shouldly.")
18893 (license license:isc)))
18894
18895 (define-public python-k5test
18896 (package
18897 (name "python-k5test")
18898 (version "0.9.2")
18899 (source
18900 (origin
18901 (method url-fetch)
18902 (uri (pypi-uri "k5test" version))
18903 (sha256
18904 (base32
18905 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18906 (build-system python-build-system)
18907 (propagated-inputs
18908 `(("python-six" ,python-six)
18909 ;; `which`, `kadmin.local` binaries called inside library
18910 ("which" ,which)
18911 ("mit-krb5" ,mit-krb5)))
18912 (native-inputs `(("mit-krb5" ,mit-krb5)))
18913 (arguments
18914 '(#:phases
18915 (modify-phases %standard-phases
18916 (add-after 'unpack 'patch-paths
18917 (lambda* _
18918 (substitute* "k5test/realm.py"
18919 (("'kadmin_local'") "'kadmin.local'")))))))
18920 (home-page "https://github.com/pythongssapi/k5test")
18921 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18922 (description
18923 "@code{k5test} is a library for setting up self-contained Kerberos 5
18924 environments, and running Python unit tests inside those environments. It is
18925 based on the file of the same name found alongside the MIT Kerberos 5 unit
18926 tests.")
18927 (license license:isc)))
18928
18929 (define-public python-gssapi
18930 (package
18931 (name "python-gssapi")
18932 (version "1.6.5")
18933 (source
18934 (origin
18935 (method url-fetch)
18936 (uri (pypi-uri "gssapi" version))
18937 (sha256
18938 (base32
18939 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
18940 (build-system python-build-system)
18941 (propagated-inputs
18942 `(("python-decorator" ,python-decorator)
18943 ("python-six" ,python-six)))
18944 (inputs
18945 `(("mit-krb5" ,mit-krb5)))
18946 ;; for tests
18947 (native-inputs
18948 `(("python-shouldbe" ,python-shouldbe)
18949 ("python-parameterized" ,python-parameterized)
18950 ("python-k5test" ,python-k5test)
18951 ("python-nose" ,python-nose)))
18952 (home-page "https://github.com/pythongssapi/python-gssapi")
18953 (synopsis "Python GSSAPI Wrapper")
18954 (description
18955 "Python-GSSAPI provides both low-level and high level wrappers around the
18956 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
18957 also be useable with other GSSAPI mechanisms.")
18958 (license license:isc)))
18959
18960 (define-public python-check-manifest
18961 (package
18962 (name "python-check-manifest")
18963 (version "0.37")
18964 (source
18965 (origin
18966 (method url-fetch)
18967 (uri (pypi-uri "check-manifest" version))
18968 (sha256
18969 (base32
18970 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
18971 (build-system python-build-system)
18972 (native-inputs
18973 `(("python-mock" ,python-mock)
18974 ("git" ,git)))
18975 (home-page "https://github.com/mgedmin/check-manifest")
18976 (synopsis "Check MANIFEST.in in a Python source package for completeness")
18977 (description "Python package can include a MANIFEST.in file to help with
18978 sending package files to the Python Package Index. This package checks that
18979 file to ensure it completely and accurately describes your project.")
18980 (license license:expat)))
18981
18982 (define-public python-android-stringslib
18983 (package
18984 (name "python-android-stringslib")
18985 (version "0.1.2")
18986 (source
18987 (origin
18988 (method git-fetch)
18989 (uri (git-reference
18990 (url "https://framagit.org/tyreunom/python-android-strings-lib")
18991 (commit (string-append "v" version))))
18992 (file-name (git-file-name name version))
18993 (sha256
18994 (base32
18995 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
18996 (build-system python-build-system)
18997 (arguments
18998 `(#:tests? #f))
18999 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
19000 (synopsis "Android strings.xml support")
19001 (description "Android Strings Lib provides support for android's strings.xml
19002 files. These files are used to translate strings in android apps.")
19003 (license license:expat)))
19004
19005 (define-public python-watchdog
19006 (package
19007 (name "python-watchdog")
19008 (version "0.9.0")
19009 (source
19010 (origin
19011 (method url-fetch)
19012 (uri (pypi-uri "watchdog" version))
19013 (sha256
19014 (base32
19015 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
19016 (build-system python-build-system)
19017 (arguments
19018 `(#:phases
19019 (modify-phases %standard-phases
19020 (add-before 'check 'remove-failing
19021 (lambda _
19022 (delete-file "tests/test_inotify_buffer.py")
19023 (delete-file "tests/test_snapshot_diff.py")
19024 #t)))))
19025 (propagated-inputs
19026 `(("python-argh" ,python-argh)
19027 ("python-pathtools" ,python-pathtools)
19028 ("python-pyyaml" ,python-pyyaml)))
19029 (native-inputs
19030 `(("python-pytest-cov" ,python-pytest-cov)
19031 ("python-pytest-timeout" ,python-pytest-timeout)))
19032 (home-page "https://github.com/gorakhargosh/watchdog")
19033 (synopsis "Filesystem events monitoring")
19034 (description "This package provides a way to monitor filesystem events
19035 such as a file modification and trigger an action. This is similar to inotify,
19036 but portable.")
19037 (license license:asl2.0)))
19038
19039 (define-public python-wget
19040 (package
19041 (name "python-wget")
19042 (version "3.2")
19043 (source
19044 (origin
19045 (method url-fetch)
19046 (uri (pypi-uri "wget" version ".zip"))
19047 (sha256
19048 (base32
19049 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19050 (build-system python-build-system)
19051 (native-inputs `(("unzip" ,unzip)))
19052 (home-page "https://bitbucket.org/techtonik/python-wget/")
19053 (synopsis "Pure Python download utility")
19054 (description "The python-wget library provides an API to download files
19055 with features similar to the @command{wget} utility.")
19056 (license license:unlicense)))
19057
19058 (define-public offlate
19059 (package
19060 (name "offlate")
19061 (version "0.5")
19062 (source
19063 (origin
19064 (method git-fetch)
19065 (uri (git-reference
19066 (url "https://framagit.org/tyreunom/offlate")
19067 (commit version)))
19068 (file-name (git-file-name name version))
19069 (sha256
19070 (base32
19071 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19072 (build-system python-build-system)
19073 (arguments
19074 ;; No tests
19075 `(#:tests? #f))
19076 (propagated-inputs
19077 `(("python-android-stringslib" ,python-android-stringslib)
19078 ("python-dateutil" ,python-dateutil)
19079 ("python-gitlab" ,python-gitlab)
19080 ("python-lxml" ,python-lxml)
19081 ("python-polib" ,python-polib)
19082 ("python-pyenchant" ,python-pyenchant)
19083 ("python-pygit2" ,python-pygit2)
19084 ("python-pygithub" ,python-pygithub)
19085 ("python-pyqt" ,python-pyqt)
19086 ("python-requests" ,python-requests)
19087 ("python-ruamel.yaml" ,python-ruamel.yaml)
19088 ("python-translation-finder" ,python-translation-finder)
19089 ("python-watchdog" ,python-watchdog)))
19090 (native-inputs
19091 `(("qttools" ,qttools)))
19092 (home-page "https://framagit.org/tyreunom/offlate")
19093 (synopsis "Offline translation interface for online translation tools")
19094 (description "Offlate offers a unified interface for different translation
19095 file formats, as well as many different online translation platforms. You can
19096 use it to get work from online platforms, specialized such as the Translation
19097 Project, or not such a gitlab instance when your upstream doesn't use any
19098 dedicated platform. The tool proposes a unified interface for any format and
19099 an upload option to send your work back to the platform.")
19100 (license license:gpl3+)))
19101
19102 (define-public python-titlecase
19103 (package
19104 (name "python-titlecase")
19105 (version "0.12.0")
19106 (source
19107 (origin
19108 (method url-fetch)
19109 (uri (pypi-uri "titlecase" version))
19110 (sha256
19111 (base32
19112 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19113 (build-system python-build-system)
19114 (native-inputs
19115 `(("python-nose" ,python-nose)))
19116 (home-page "https://github.com/ppannuto/python-titlecase")
19117 (synopsis "Capitalize strings similar to book titles")
19118 (description
19119 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19120 It capitalizes (predominantly English) strings in a way that is similar to
19121 book titles, using the New York Times Manual of Style to leave certain words
19122 lowercase.")
19123 (license license:expat)))
19124
19125 (define-public python-pypng
19126 (package
19127 (name "python-pypng")
19128 (version "0.0.20")
19129 (source
19130 (origin
19131 (method url-fetch)
19132 (uri (pypi-uri "pypng" version))
19133 (sha256
19134 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19135 (build-system python-build-system)
19136 (home-page "https://github.com/drj11/pypng")
19137 (synopsis "Pure Python PNG image encoder/decoder")
19138 (description
19139 "The PyPNG module implements support for PNG images. It reads and writes
19140 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19141 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19142 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19143 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19144 A number of optional chunks can be specified (when writing) and
19145 understood (when reading): tRNS, bKGD, gAMA.
19146
19147 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19148 aim at being a replacement or competitor. Its strength lies in fine-grained
19149 extensive support of PNG features. It can also read and write Netpbm PAM
19150 files, with a focus on its use as an intermediate format for implementing
19151 custom PNG processing.")
19152 (license license:expat)))
19153
19154 (define-public python-fuzzywuzzy
19155 (package
19156 (name "python-fuzzywuzzy")
19157 (version "0.18.0")
19158 (source
19159 (origin
19160 (method url-fetch)
19161 (uri (pypi-uri "fuzzywuzzy" version))
19162 (sha256
19163 (base32
19164 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19165 (build-system python-build-system)
19166 (native-inputs
19167 `(("python-hypothesis" ,python-hypothesis)
19168 ("python-pycodestyle" ,python-pycodestyle)
19169 ("python-pytest" ,python-pytest)))
19170 (propagated-inputs
19171 `(("python-levenshtein" ,python-levenshtein)))
19172 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19173 (synopsis "Fuzzy string matching in Python")
19174 (description "Approximate string matching using
19175 @emph{Levenshtein Distance} to calculate the differences between
19176 sequences.")
19177 (license license:gpl2)))
19178
19179 (define-public python2-fuzzywuzzy
19180 (package-with-python2 python-fuzzywuzzy))
19181
19182 (define-public python-block-tracing
19183 (package
19184 (name "python-block-tracing")
19185 (version "1.0.1")
19186 (source
19187 (origin
19188 (method url-fetch)
19189 (uri (pypi-uri "block_tracing" version))
19190 (sha256
19191 (base32
19192 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19193 (build-system python-build-system)
19194 (arguments '(#:tests? #f)) ; no tests
19195 (home-page "https://github.com/rianhunter/block_tracing")
19196 (synopsis "Protect process memory")
19197 (description
19198 "@code{block_tracing} is a tiny Python library that can be used to
19199 prevent debuggers and other applications from inspecting the memory within
19200 your process.")
19201 (license license:expat)))
19202
19203 (define-public python-gcovr
19204 (package
19205 (name "python-gcovr")
19206 (version "4.2")
19207 (source
19208 (origin
19209 (method url-fetch)
19210 (uri (pypi-uri "gcovr" version))
19211 (sha256
19212 (base32
19213 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19214 (build-system python-build-system)
19215 (propagated-inputs
19216 `(("python-lxml" ,python-lxml)
19217 ("python-jinja2" ,python-jinja2)))
19218 (home-page "https://gcovr.com/")
19219 (synopsis "Utility for generating code coverage results")
19220 (description
19221 "Gcovr provides a utility for managing the use of the GNU gcov
19222 utility and generating summarized code coverage results. It is inspired
19223 by the Python coverage.py package, which provides a similar utility for
19224 Python.")
19225 (license license:bsd-3)))
19226
19227 (define-public python-owslib
19228 (package
19229 (name "python-owslib")
19230 (version "0.19.2")
19231 (source
19232 (origin
19233 (method url-fetch)
19234 (uri (pypi-uri "OWSLib" version))
19235 (sha256
19236 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19237 (build-system python-build-system)
19238 (arguments
19239 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19240 (synopsis "Interface for Open Geospatial Consortium web service")
19241 (description
19242 "OWSLib is a Python package for client programming with Open Geospatial
19243 Consortium (OGC) web service (hence OWS) interface standards, and their related
19244 content models.")
19245 (home-page "https://geopython.github.io/OWSLib/")
19246 (license license:bsd-3)))
19247
19248 (define-public python-docusign-esign
19249 (package
19250 (name "python-docusign-esign")
19251 (version "3.1.0")
19252 (source (origin
19253 (method url-fetch)
19254 (uri (pypi-uri "docusign_esign" version))
19255 (sha256
19256 (base32
19257 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19258 (build-system python-build-system)
19259 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19260 (arguments `(#:tests? #f))
19261 (propagated-inputs
19262 `(("python-certifi", python-certifi)
19263 ("python-six", python-six)
19264 ("python-dateutil", python-dateutil)
19265 ("python-urllib3", python-urllib3)
19266 ("python-pyjwt", python-pyjwt)
19267 ("python-cryptography", python-cryptography)
19268 ("python-nose", python-nose)))
19269 (synopsis "DocuSign Python Client")
19270 (description "The Official DocuSign Python Client Library used to interact
19271 with the eSign REST API. Send, sign, and approve documents using this client.")
19272 (home-page "https://www.docusign.com/devcenter")
19273 (license license:expat)))
19274
19275 (define-public python-xattr
19276 (package
19277 (name "python-xattr")
19278 (version "0.9.7")
19279 (source
19280 (origin
19281 (method url-fetch)
19282 (uri (pypi-uri "xattr" version))
19283 (sha256
19284 (base32
19285 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19286 (build-system python-build-system)
19287 (propagated-inputs
19288 `(("python-cffi" ,python-cffi)))
19289 (home-page "https://github.com/xattr/xattr")
19290 (synopsis
19291 "Python wrapper for extended filesystem attributes")
19292 (description "This package provides a Python wrapper for using extended
19293 filesystem attributes. Extended attributes extend the basic attributes of files
19294 and directories in the file system. They are stored as name:data pairs
19295 associated with file system objects (files, directories, symlinks, etc).")
19296 (license license:expat)))
19297
19298 (define-public python-json-logger
19299 (package
19300 (name "python-json-logger")
19301 (version "0.1.11")
19302 (source
19303 (origin
19304 (method url-fetch)
19305 (uri (pypi-uri "python-json-logger" version))
19306 (sha256
19307 (base32
19308 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19309 (build-system python-build-system)
19310 (home-page
19311 "https://github.com/madzak/python-json-logger")
19312 (synopsis "JSON log formatter in Python")
19313 (description "This library allows standard Python logging to output log data
19314 as JSON objects. With JSON we can make our logs more readable by machines and
19315 we can stop writing custom parsers for syslog-type records.")
19316 (license license:bsd-3)))
19317
19318 (define-public python-daiquiri
19319 (package
19320 (name "python-daiquiri")
19321 (version "2.1.1")
19322 (source
19323 (origin
19324 (method url-fetch)
19325 (uri (pypi-uri "daiquiri" version))
19326 (sha256
19327 (base32
19328 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19329 (build-system python-build-system)
19330 (propagated-inputs
19331 `(("python-json-logger" ,python-json-logger)))
19332 (native-inputs
19333 `(("python-mock" ,python-mock)
19334 ("python-pytest" ,python-pytest)
19335 ("python-setuptools-scm" ,python-setuptools-scm)
19336 ("python-six" ,python-six)))
19337 (home-page "https://github.com/jd/daiquiri")
19338 (synopsis
19339 "Library to configure Python logging easily")
19340 (description "The daiquiri library provides an easy way to configure
19341 logging in Python. It also provides some custom formatters and handlers.")
19342 (license license:asl2.0)))
19343
19344 (define-public python-pifpaf
19345 (package
19346 (name "python-pifpaf")
19347 (version "2.4.0")
19348 (source
19349 (origin
19350 (method url-fetch)
19351 (uri (pypi-uri "pifpaf" version))
19352 (sha256
19353 (base32
19354 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19355 (build-system python-build-system)
19356 (arguments
19357 `(#:tests? #f))
19358 (propagated-inputs
19359 `(("python-click" ,python-click)
19360 ("python-daiquiri" ,python-daiquiri)
19361 ("python-fixtures" ,python-fixtures)
19362 ("python-jinja2" ,python-jinja2)
19363 ("python-pbr" ,python-pbr)
19364 ("python-psutil" ,python-psutil)
19365 ("python-six" ,python-six)
19366 ("python-xattr" ,python-xattr)))
19367 (native-inputs
19368 `(("python-mock" ,python-mock)
19369 ("python-os-testr" ,python-os-testr)
19370 ("python-requests" ,python-requests)
19371 ("python-testrepository" ,python-testrepository)
19372 ("python-testtools" ,python-testtools)))
19373 (home-page "https://github.com/jd/pifpaf")
19374 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19375 (description "Pifpaf is a suite of fixtures and a command-line tool that
19376 starts and stops daemons for a quick throw-away usage. This is typically
19377 useful when needing these daemons to run integration testing. It originally
19378 evolved from its precursor @code{overtest}.")
19379 (license license:asl2.0)))
19380
19381 (define-public python-pytest-check-links
19382 (package
19383 (name "python-pytest-check-links")
19384 (version "0.3.0")
19385 (source
19386 (origin
19387 (method url-fetch)
19388 ;; URI uses underscores
19389 (uri (pypi-uri "pytest_check_links" version))
19390 (sha256
19391 (base32
19392 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19393 (build-system python-build-system)
19394 (propagated-inputs
19395 `(("python-docutils" ,python-docutils)
19396 ("python-html5lib" ,python-html5lib)
19397 ("python-nbconvert" ,python-nbconvert)
19398 ("python-nbformat" ,python-nbformat)
19399 ("python-pytest" ,python-pytest)
19400 ("python-six" ,python-six)))
19401 (native-inputs
19402 `(("python-pbr-minimal" ,python-pbr-minimal)))
19403 (home-page "https://github.com/minrk/pytest-check-links")
19404 (synopsis "Check links in files")
19405 (description "This package provides a pytest plugin that checks URLs for
19406 HTML-containing files.")
19407 (license license:bsd-3)))
19408
19409 (define-public python-json5
19410 (package
19411 (name "python-json5")
19412 (version "0.8.5")
19413 (source
19414 (origin
19415 ;; sample.json5 is missing from PyPi source tarball
19416 (method git-fetch)
19417 (uri (git-reference
19418 (url "https://github.com/dpranke/pyjson5.git")
19419 (commit (string-append "v" version))))
19420 (file-name (git-file-name name version))
19421 (sha256
19422 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19423 (build-system python-build-system)
19424 (home-page "https://github.com/dpranke/pyjson5")
19425 (synopsis
19426 "Python implementation of the JSON5 data format")
19427 (description
19428 "JSON5 extends the JSON data interchange format to make it slightly more
19429 usable as a configuration language. This Python package implements parsing and
19430 dumping of JSON5 data structures.")
19431 (license license:asl2.0)))
19432
19433 (define-public python-frozendict
19434 (package
19435 (name "python-frozendict")
19436 (version "1.2")
19437 (source
19438 (origin
19439 (method url-fetch)
19440 (uri (pypi-uri "frozendict" version))
19441 (sha256
19442 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19443 (build-system python-build-system)
19444 (home-page "https://github.com/slezica/python-frozendict")
19445 (synopsis "Simple immutable mapping for Python")
19446 (description
19447 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19448 implements the complete mapping interface. It can be used as a drop-in
19449 replacement for dictionaries where immutability is desired.")
19450 (license license:expat)))
19451
19452 (define-public python-unpaddedbase64
19453 (package
19454 (name "python-unpaddedbase64")
19455 (version "1.1.0")
19456 (source
19457 (origin
19458 (method git-fetch)
19459 (uri (git-reference
19460 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19461 (commit (string-append "v" version))))
19462 (file-name (git-file-name name version))
19463 (sha256
19464 (base32
19465 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19466 (build-system python-build-system)
19467 (home-page "https://pypi.org/project/unpaddedbase64/")
19468 (synopsis "Encode and decode Base64 without “=” padding")
19469 (description
19470 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19471 using “=” characters. However this conveys no benefit so many protocols
19472 choose to use Base64 without the “=” padding.")
19473 (license license:asl2.0)))
19474
19475 (define-public python-canonicaljson
19476 (package
19477 (name "python-canonicaljson")
19478 (version "1.1.4")
19479 (source
19480 (origin
19481 (method url-fetch)
19482 (uri (pypi-uri "canonicaljson" version))
19483 (sha256
19484 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19485 (build-system python-build-system)
19486 (propagated-inputs
19487 `(("python-six" ,python-six)
19488 ("python-frozendict" ,python-frozendict)
19489 ("python-simplejson" ,python-simplejson)))
19490 (home-page "https://github.com/matrix-org/python-canonicaljson")
19491 (synopsis "Canonical JSON")
19492 (description
19493 "Deterministically encode JSON.
19494
19495 @itemize
19496 @item Encodes objects and arrays as RFC 7159 JSON.
19497 @item Sorts object keys so that you get the same result each time.
19498 @item Has no insignificant whitespace to make the output as small as possible.
19499 @item Escapes only the characters that must be escaped, U+0000 to
19500 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19501 @item Uses the shortest escape sequence for each escaped character.
19502 @item Encodes the JSON as UTF-8.
19503 @item Can encode frozendict immutable dictionaries.
19504 @end itemize")
19505 (license license:asl2.0)))
19506
19507 (define-public python-signedjson
19508 (package
19509 (name "python-signedjson")
19510 (version "1.1.1")
19511 (source
19512 (origin
19513 (method url-fetch)
19514 (uri (pypi-uri "signedjson" version))
19515 (sha256
19516 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19517 (build-system python-build-system)
19518 (propagated-inputs
19519 `(("python-canonicaljson" ,python-canonicaljson)
19520 ("python-importlib-metadata" ,python-importlib-metadata)
19521 ("python-pynacl" ,python-pynacl)
19522 ("python-typing-extensions" ,python-typing-extensions)
19523 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19524 (native-inputs
19525 `(("python-setuptools-scm" ,python-setuptools-scm)))
19526 (home-page "https://github.com/matrix-org/python-signedjson")
19527 (synopsis "Sign JSON objects with ED25519 signatures")
19528 (description
19529 "Sign JSON objects with ED25519 signatures.
19530
19531 @itemize
19532 @item More than one entity can sign the same object.
19533 @item Each entity can sign the object with more than one key making it easier to
19534 rotate keys
19535 @item ED25519 can be replaced with a different algorithm.
19536 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19537 key.
19538 @end itemize")
19539 (license license:asl2.0)))
19540
19541 (define-public python-daemonize
19542 (package
19543 (name "python-daemonize")
19544 (version "2.5.0")
19545 (source
19546 (origin
19547 (method url-fetch)
19548 (uri (pypi-uri "daemonize" version))
19549 (sha256
19550 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19551 (build-system python-build-system)
19552 (home-page "https://github.com/thesharp/daemonize")
19553 (synopsis "Library for writing system daemons in Python")
19554 (description "Daemonize is a library for writing system daemons in Python.")
19555 (license license:expat)))
19556
19557 (define-public python-pymacaroons
19558 (package
19559 (name "python-pymacaroons")
19560 (version "0.13.0")
19561 (source
19562 (origin
19563 (method url-fetch)
19564 (uri (pypi-uri "pymacaroons" version))
19565 (sha256
19566 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19567 (build-system python-build-system)
19568 (propagated-inputs
19569 `(("python-six" ,python-six)
19570 ("python-pynacl" ,python-pynacl)))
19571 (home-page "https://github.com/ecordell/pymacaroons")
19572 (synopsis "Python Macaroon Library")
19573 (description
19574 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19575 tokens, macaroons embed caveats that define specific authorization
19576 requirements for the target service, the service that issued the root macaroon
19577 and which is capable of verifying the integrity of macaroons it receives.
19578
19579 Macaroons allow for delegation and attenuation of authorization. They are
19580 simple and fast to verify, and decouple authorization policy from the
19581 enforcement of that policy.")
19582 (license license:expat)))
19583
19584 (define-public python-ldap3
19585 (package
19586 (name "python-ldap3")
19587 (version "2.7")
19588 (home-page "https://github.com/cannatag/ldap3")
19589 (source
19590 (origin
19591 (method git-fetch)
19592 (uri (git-reference (url home-page)
19593 (commit (string-append "v" version))))
19594 (file-name (git-file-name name version))
19595 (sha256
19596 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19597 (build-system python-build-system)
19598 (arguments
19599 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19600 #:phases (modify-phases %standard-phases
19601 (replace 'check
19602 (lambda* (#:key tests? #:allow-other-keys)
19603 (when tests?
19604 (invoke "nosetests" "-s" "test"))
19605 #t)))))
19606 (native-inputs
19607 `(("python-nose" ,python-nose)))
19608 (propagated-inputs
19609 `(("python-gssapi" ,python-gssapi)
19610 ("python-pyasn1" ,python-pyasn1)))
19611 (synopsis "Python LDAP client")
19612 (description
19613 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19614 library.")
19615 (license license:lgpl3+)))
19616
19617 (define-public python-boltons
19618 (package
19619 (name "python-boltons")
19620 (version "20.0.0")
19621 (source
19622 (origin
19623 (method url-fetch)
19624 (uri (pypi-uri "boltons" version))
19625 (sha256
19626 (base32
19627 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19628 (build-system python-build-system)
19629 (home-page "https://github.com/mahmoud/boltons")
19630 (synopsis "Extensions to the Python standard library")
19631 (description
19632 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19633 as — and yet conspicuously missing from — the standard library, including:
19634
19635 @itemize
19636 @item Atomic file saving, bolted on with fileutils
19637 @item A highly-optimized OrderedMultiDict, in dictutils
19638 @item Two types of PriorityQueue, in queueutils
19639 @item Chunked and windowed iteration, in iterutils
19640 @item Recursive data structure iteration and merging, with iterutils.remap
19641 @item Exponential backoff functionality, including jitter, through
19642 iterutils.backoff
19643 @item A full-featured TracebackInfo type, for representing stack traces, in
19644 tbutils
19645 @end itemize")
19646 (license license:bsd-3)))
19647
19648 (define-public python-eliot
19649 (package
19650 (name "python-eliot")
19651 (version "1.12.0")
19652 (source
19653 (origin
19654 (method url-fetch)
19655 (uri (pypi-uri "eliot" version))
19656 (sha256
19657 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19658 (build-system python-build-system)
19659 (arguments
19660 `(#:phases
19661 (modify-phases %standard-phases
19662 (add-after 'unpack 'remove-journald-support
19663 (lambda _
19664 (for-each delete-file
19665 '("eliot/tests/test_journald.py"
19666 "eliot/journald.py"))
19667 #t))
19668 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19669 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19670 ;; be installed and these tests should pass.
19671 (lambda _
19672 (delete-file "eliot/tests/test_prettyprint.py")
19673 #t)))))
19674 (propagated-inputs
19675 `(("python-boltons" ,python-boltons)
19676 ("python-pyrsistent" ,python-pyrsistent)
19677 ("python-six" ,python-six)
19678 ("python-zope-interface" ,python-zope-interface)))
19679 (native-inputs
19680 `(("python-black" ,python-black)
19681 ("python-coverage" ,python-coverage)
19682 ("python-dask" ,python-dask)
19683 ("python-flake8" ,python-flake8)
19684 ("python-hypothesis" ,python-hypothesis)
19685 ("python-pytest" ,python-pytest)
19686 ("python-setuptools" ,python-setuptools)
19687 ("python-sphinx" ,python-sphinx)
19688 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19689 ("python-testtools" ,python-testtools)
19690 ("python-twine" ,python-twine)
19691 ("python-twisted" ,python-twisted)))
19692 (home-page "https://github.com/itamarst/eliot/")
19693 (synopsis "Eliot: the logging system that tells you why it happened")
19694 (description
19695 "@dfn{eliot} is a Python logging system that outputs causal chains of
19696 actions: actions can spawn other actions, and eventually they either succeed
19697 or fail. The resulting logs tell you the story of what your software did: what
19698 happened, and what caused it.")
19699 (license license:asl2.0)))
19700
19701 (define-public python-pem
19702 (package
19703 (name "python-pem")
19704 (version "20.1.0")
19705 (source
19706 (origin
19707 (method url-fetch)
19708 (uri (pypi-uri "pem" version))
19709 (sha256
19710 (base32
19711 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19712 (build-system python-build-system)
19713 (native-inputs
19714 `(("python-certifi" ,python-certifi)
19715 ("python-coverage" ,python-coverage)
19716 ("python-pretend" ,python-pretend)
19717 ("python-pyopenssl" ,python-pyopenssl)
19718 ("python-pytest" ,python-pytest)
19719 ("python-sphinx" ,python-sphinx)
19720 ("python-twisted" ,python-twisted)))
19721 (home-page "https://pem.readthedocs.io/")
19722 (synopsis "Easy PEM file parsing in Python")
19723 (description
19724 "This package provides a Python module for parsing and splitting PEM files.")
19725 (license license:expat)))
19726
19727 (define-public python-txsni
19728 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19729 ;; Python and OpenSSL.
19730 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19731 (revision "0"))
19732 (package
19733 (name "python-txsni")
19734 (version (git-version "0.1.9" revision commit))
19735 (home-page "https://github.com/glyph/txsni")
19736 (source
19737 (origin
19738 (method git-fetch)
19739 (uri (git-reference (url home-page) (commit commit)))
19740 (file-name (git-file-name name version))
19741 (sha256
19742 (base32
19743 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19744 (build-system python-build-system)
19745 (propagated-inputs
19746 `(("python-pyopenssl" ,python-pyopenssl)
19747 ("python-service-identity" ,python-service-identity)
19748 ("python-twisted" ,python-twisted)))
19749 (synopsis "Run TLS servers with Twisted")
19750 (description
19751 "This package provides an easy-to-use SNI endpoint for use
19752 with the Twisted web framework.")
19753 (license license:expat))))
19754
19755 (define-public python-txacme
19756 (package
19757 (name "python-txacme")
19758 (version "0.9.2")
19759 (source
19760 (origin
19761 (method url-fetch)
19762 (uri (pypi-uri "txacme" version))
19763 (sha256
19764 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19765 (build-system python-build-system)
19766 (propagated-inputs
19767 `(("python-acme" ,python-acme)
19768 ("python-attrs" ,python-attrs)
19769 ("python-eliot" ,python-eliot)
19770 ("python-josepy" ,python-josepy)
19771 ("python-pem" ,python-pem)
19772 ("python-treq" ,python-treq)
19773 ("python-twisted" ,python-twisted)
19774 ("python-txsni" ,python-txsni)))
19775 (native-inputs
19776 `(("python-fixtures" ,python-fixtures)
19777 ("python-hypothesis" ,python-hypothesis)
19778 ("python-mock" ,python-mock)
19779 ("python-service-identity"
19780 ,python-service-identity)
19781 ("python-testrepository" ,python-testrepository)
19782 ("python-testscenarios" ,python-testscenarios)
19783 ("python-testtools" ,python-testtools)))
19784 (home-page "https://github.com/twisted/txacme")
19785 (synopsis "Twisted implexmentation of the ACME protocol")
19786 (description
19787 "ACME is Automatic Certificate Management Environment, a protocol that
19788 allows clients and certificate authorities to automate verification and
19789 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19790 Certificate Authority.
19791
19792 txacme is an implementation of the protocol for Twisted, the event-driven
19793 networking engine for Python.")
19794 (license license:expat)))
19795
19796 (define-public python-pysaml2
19797 (package
19798 (name "python-pysaml2")
19799 (version "5.0.0")
19800 (source
19801 (origin
19802 (method url-fetch)
19803 (uri (pypi-uri "pysaml2" version))
19804 (sha256
19805 (base32
19806 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19807 (build-system python-build-system)
19808 (propagated-inputs
19809 `(("python-cryptography" ,python-cryptography)
19810 ("python-dateutil" ,python-dateutil)
19811 ("python-defusedxml" ,python-defusedxml)
19812 ("python-pyopenssl" ,python-pyopenssl)
19813 ("python-pytz" ,python-pytz)
19814 ("python-requests" ,python-requests)
19815 ("python-six" ,python-six)))
19816 (home-page "https://idpy.org")
19817 (synopsis "Python implementation of SAML Version 2 Standard")
19818 (description
19819 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19820 It contains all necessary pieces for building a SAML2 service provider or
19821 an identity provider. The distribution contains examples of both.
19822
19823 This package was originally written to work in a WSGI environment, but
19824 there are extensions that allow you to use it with other frameworks.")
19825 (license license:asl2.0)))
19826
19827 (define-public python-click-plugins
19828 (package
19829 (name "python-click-plugins")
19830 (version "1.1.1")
19831 (source
19832 (origin
19833 (method url-fetch)
19834 (uri (pypi-uri "click-plugins" version))
19835 (sha256
19836 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19837 (build-system python-build-system)
19838 (native-inputs
19839 `(("python-pytest" ,python-pytest)))
19840 (propagated-inputs
19841 `(("python-click" ,python-click)))
19842 (synopsis "Extension for Click to register external CLI commands")
19843 (description "This package provides n extension module for Click to
19844 register external CLI commands via setuptools entry-points.")
19845 (home-page "https://github.com/click-contrib/click-plugins")
19846 (license license:bsd-3)))
19847
19848 (define-public python-diceware
19849 (package
19850 (name "python-diceware")
19851 (version "0.9.6")
19852 (source
19853 (origin
19854 (method url-fetch)
19855 (uri (pypi-uri "diceware" version))
19856 (sha256
19857 (base32
19858 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19859 (build-system python-build-system)
19860 (native-inputs
19861 `(("python-coverage" ,python-coverage)
19862 ("python-pytest" ,python-pytest)
19863 ("python-pytest-runner" ,python-pytest-runner)))
19864 (home-page "https://github.com/ulif/diceware/")
19865 (synopsis "Generates memorable passphrases")
19866 (description "This package generates passphrases by concatenating words
19867 randomly picked from wordlists. It supports several sources of
19868 randomness (including real life dice) and different wordlists (including
19869 cryptographically signed ones).")
19870 (license license:gpl3+)))
19871
19872 (define-public pyzo
19873 (package
19874 (name "pyzo")
19875 (version "4.10.2")
19876 (source
19877 (origin
19878 (method url-fetch)
19879 (uri (pypi-uri "pyzo" version))
19880 (sha256
19881 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
19882 (build-system python-build-system)
19883 (arguments
19884 `(#:phases
19885 (modify-phases %standard-phases
19886 (add-before 'check 'fix-home-directory
19887 (lambda _
19888 ;; Tests fail with "Permission denied: '/homeless-shelter'".
19889 (setenv "HOME" "/tmp")
19890 #t)))
19891 ;; Tests fail with "Uncaught Python exception: invalid literal for
19892 ;; int() with base 10: 'test'".
19893 #:tests? #f))
19894 (propagated-inputs
19895 `(("python-pyqt" ,python-pyqt)))
19896 (home-page "https://pyzo.org")
19897 (synopsis
19898 "Python IDE for scientific computing")
19899 (description
19900 "Pyzo is a Python IDE focused on interactivity and introspection,
19901 which makes it very suitable for scientific computing. Its practical
19902 design is aimed at simplicity and efficiency.
19903
19904 It consists of two main components, the editor and the shell, and uses
19905 a set of pluggable tools to help the programmer in various ways. Some
19906 example tools are source structure, project manager, interactive help,
19907 workspace...")
19908 (license license:bsd-2)))
19909
19910 (define-public python-osc
19911 (package
19912 (name "python-osc")
19913 (version "1.7.4")
19914 (source
19915 (origin
19916 (method url-fetch)
19917 (uri (pypi-uri "python-osc" version))
19918 (sha256
19919 (base32
19920 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
19921 (build-system python-build-system)
19922 (home-page "https://github.com/attwad/python-osc")
19923 (synopsis "Open Sound Control server and client implementations")
19924 (description
19925 "@code{python-osc} is a pure Python library with no external
19926 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
19927 Open Sound Control 1.0} specification.")
19928 (license license:unlicense)))
19929
19930 (define-public python-voluptuous
19931 (package
19932 (name "python-voluptuous")
19933 (version "0.11.7")
19934 (source
19935 (origin
19936 (method url-fetch)
19937 (uri (pypi-uri "voluptuous" version))
19938 (sha256
19939 (base32
19940 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
19941 (build-system python-build-system)
19942 (native-inputs
19943 `(("python-nose" ,python-nose)))
19944 (home-page "https://github.com/alecthomas/voluptuous")
19945 (synopsis "Python data validation library")
19946 (description
19947 "Voluptuous is a Python data validation library. It is primarily
19948 intended for validating data coming into Python as JSON, YAML, etc.")
19949 (license license:bsd-3)))
19950
19951 (define-public python-cmd2
19952 (package
19953 (name "python-cmd2")
19954 (version "1.0.2")
19955 (source
19956 (origin
19957 (method url-fetch)
19958 (uri (pypi-uri "cmd2" version))
19959 (sha256
19960 (base32
19961 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
19962 (build-system python-build-system)
19963 (propagated-inputs
19964 `(("python-attrs" ,python-attrs)
19965 ("python-colorama" ,python-colorama)
19966 ("python-pyperclip" ,python-pyperclip)
19967 ("python-wcwidth" ,python-wcwidth)))
19968 (native-inputs
19969 `(("python-codecov" ,python-codecov)
19970 ("python-coverage" ,python-coverage)
19971 ("python-doc8" ,python-doc8)
19972 ("python-flake8" ,python-flake8)
19973 ("python-invoke" ,python-invoke)
19974 ("python-mock" ,python-mock)
19975 ("python-pytest" ,python-pytest)
19976 ("python-pytest-cov" ,python-pytest-cov)
19977 ("python-pytest-mock" ,python-pytest-mock)
19978 ("python-setuptools-scm" ,python-setuptools-scm)
19979 ("python-sphinx" ,python-sphinx)
19980 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
19981 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19982 ("python-tox" ,python-tox)
19983 ("python-twine" ,python-twine)
19984 ("which" ,which)))
19985 (home-page "https://github.com/python-cmd2/cmd2")
19986 (synopsis "Tool for building interactive command line applications")
19987 (description
19988 "Cmd2 is a tool for building interactive command line applications in
19989 Python. Its goal is to make it quick and easy for developers to build
19990 feature-rich and user-friendly interactive command line applications. It
19991 provides a simple API which is an extension of Python's built-in @code{cmd}
19992 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
19993 make your life easier and eliminates much of the boilerplate code which would
19994 be necessary when using @code{cmd}.")
19995 (license license:expat)))
19996
19997 (define-public python-pytidylib
19998 (package
19999 (name "python-pytidylib")
20000 (version "0.3.2")
20001 (source (origin
20002 (method url-fetch)
20003 (uri (pypi-uri "pytidylib" version))
20004 (sha256
20005 (base32
20006 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
20007 (build-system python-build-system)
20008 (arguments
20009 '(#:phases
20010 (modify-phases %standard-phases
20011 (add-before 'build 'qualify-libtidy
20012 (lambda* (#:key inputs #:allow-other-keys)
20013 (let ((libtidy (string-append (assoc-ref inputs "tidy")
20014 "/lib/libtidy.so")))
20015 (substitute* "tidylib/tidy.py"
20016 (("ctypes\\.util\\.find_library\\('tidy'\\)")
20017 (format #f "'~a'" libtidy)))
20018 #t))))))
20019 (inputs `(("tidy" ,tidy)))
20020 (home-page "https://github.com/countergram/pytidylib")
20021 (synopsis "Python wrapper for HTML Tidy library")
20022 (description
20023 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
20024 allows you, from Python code, to “fix” invalid (X)HTML markup.")
20025 (license license:expat)))
20026
20027 (define-public python2-pytidylib
20028 (package-with-python2 python-pytidylib))
20029
20030 (define-public python-mujson
20031 (package
20032 (name "python-mujson")
20033 (version "1.4")
20034 (source
20035 (origin
20036 (method url-fetch)
20037 (uri (pypi-uri "mujson" version))
20038 (sha256
20039 (base32
20040 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
20041 (build-system python-build-system)
20042 (home-page "https://github.com/mattgiles/mujson")
20043 (synopsis "Use the fastest JSON functions available at import time")
20044 (description "This packages selects the fastest JSON functions available
20045 at import time.")
20046 (license license:expat)))
20047
20048 (define-public python-bashlex
20049 (package
20050 (name "python-bashlex")
20051 (version "0.14")
20052 (source
20053 (origin
20054 (method url-fetch)
20055 (uri (pypi-uri "bashlex" version))
20056 (sha256
20057 (base32
20058 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
20059 (build-system python-build-system)
20060 (arguments
20061 `(#:phases
20062 (modify-phases %standard-phases
20063 (add-before 'build 'pregenerate-yacc-tables
20064 (lambda _
20065 ;; parser.py caches tables, which attempts to write to site lib
20066 ;; see https://github.com/idank/bashlex/issues/51
20067 (invoke "python" "-c" "import bashlex"))))))
20068 (home-page
20069 "https://github.com/idank/bashlex")
20070 (synopsis "Python parser for bash")
20071 (description "@code{bashlex} is a Python port of the parser used
20072 internally by GNU bash.
20073
20074 For the most part it's transliterated from C, the major differences are:
20075
20076 @itemize
20077 @item it does not execute anything
20078 @item it is reentrant
20079 @item it generates a complete AST
20080 @end itemize
20081 ")
20082 (license license:gpl3+)))