gnu: python2-backports-functools-lru-cache: Update to 1.6.1.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016, 2020 Christopher Allan Webber <cwebber@dustycloud.org>
12 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
13 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
14 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
15 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
16 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
17 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017 Kyle Meyer <kyle@kyleam.com>
19 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
20 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
21 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
22 ;;; Copyright © 2016, 2018, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
23 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
24 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
25 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
26 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
27 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
28 ;;; Copyright © 2016 David Craven <david@craven.ch>
29 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
32 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
33 ;;; Copyright © 2016, 2017, 2018, 2020 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
35 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
36 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
37 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
38 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
39 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
40 ;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
41 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
42 ;;; Copyright © 2017, 2020 Roel Janssen <roel@gnu.org>
43 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
44 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
45 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
46 ;;; Copyright © 2017, 2019 Brendan Tildesley <mail@brendan.scot>
47 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
48 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
49 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
50 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
51 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
52 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
53 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
54 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
55 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
56 ;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
58 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
59 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
60 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
61 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
62 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
63 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
64 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
81 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
82 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
83 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
84 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
85 ;;;
86 ;;; This file is part of GNU Guix.
87 ;;;
88 ;;; GNU Guix is free software; you can redistribute it and/or modify it
89 ;;; under the terms of the GNU General Public License as published by
90 ;;; the Free Software Foundation; either version 3 of the License, or (at
91 ;;; your option) any later version.
92 ;;;
93 ;;; GNU Guix is distributed in the hope that it will be useful, but
94 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
95 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96 ;;; GNU General Public License for more details.
97 ;;;
98 ;;; You should have received a copy of the GNU General Public License
99 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
100
101 (define-module (gnu packages python-xyz)
102 #:use-module ((guix licenses) #:prefix license:)
103 #:use-module (gnu packages)
104 #:use-module (gnu packages algebra)
105 #:use-module (gnu packages adns)
106 #:use-module (gnu packages attr)
107 #:use-module (gnu packages backup)
108 #:use-module (gnu packages bash)
109 #:use-module (gnu packages check)
110 #:use-module (gnu packages cmake)
111 #:use-module (gnu packages compression)
112 #:use-module (gnu packages crypto)
113 #:use-module (gnu packages databases)
114 #:use-module (gnu packages dbm)
115 #:use-module (gnu packages enchant)
116 #:use-module (gnu packages file)
117 #:use-module (gnu packages fontutils)
118 #:use-module (gnu packages gcc)
119 #:use-module (gnu packages geo)
120 #:use-module (gnu packages ghostscript)
121 #:use-module (gnu packages gl)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnome)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages graphics)
126 #:use-module (gnu packages gsasl)
127 #:use-module (gnu packages gstreamer)
128 #:use-module (gnu packages gtk)
129 #:use-module (gnu packages icu4c)
130 #:use-module (gnu packages image)
131 #:use-module (gnu packages imagemagick)
132 #:use-module (gnu packages kerberos)
133 #:use-module (gnu packages libevent)
134 #:use-module (gnu packages libffi)
135 #:use-module (gnu packages linux)
136 #:use-module (gnu packages llvm)
137 #:use-module (gnu packages man)
138 #:use-module (gnu packages maths)
139 #:use-module (gnu packages monitoring)
140 #:use-module (gnu packages multiprecision)
141 #:use-module (gnu packages networking)
142 #:use-module (gnu packages ncurses)
143 #:use-module (gnu packages openstack)
144 #:use-module (gnu packages pcre)
145 #:use-module (gnu packages perl)
146 #:use-module (gnu packages photo)
147 #:use-module (gnu packages pkg-config)
148 #:use-module (gnu packages python)
149 #:use-module (gnu packages python-check)
150 #:use-module (gnu packages python-compression)
151 #:use-module (gnu packages python-crypto)
152 #:use-module (gnu packages python-science)
153 #:use-module (gnu packages python-web)
154 #:use-module (gnu packages qt)
155 #:use-module (gnu packages readline)
156 #:use-module (gnu packages sdl)
157 #:use-module (gnu packages search)
158 #:use-module (gnu packages shells)
159 #:use-module (gnu packages sphinx)
160 #:use-module (gnu packages ssh)
161 #:use-module (gnu packages terminals)
162 #:use-module (gnu packages tex)
163 #:use-module (gnu packages texinfo)
164 #:use-module (gnu packages time)
165 #:use-module (gnu packages tls)
166 #:use-module (gnu packages version-control)
167 #:use-module (gnu packages video)
168 #:use-module (gnu packages web)
169 #:use-module (gnu packages base)
170 #:use-module (gnu packages xml)
171 #:use-module (gnu packages xorg)
172 #:use-module (gnu packages xdisorg)
173 #:use-module (gnu packages tcl)
174 #:use-module (gnu packages bdw-gc)
175 #:use-module (gnu packages serialization)
176 #:use-module (guix packages)
177 #:use-module (guix download)
178 #:use-module (guix git-download)
179 #:use-module (guix hg-download)
180 #:use-module (guix utils)
181 #:use-module (guix build-system gnu)
182 #:use-module (guix build-system cmake)
183 #:use-module (guix build-system python)
184 #:use-module (guix build-system trivial)
185 #:use-module (srfi srfi-1)
186 #:use-module (srfi srfi-26))
187
188 (define-public python-tenacity
189 (package
190 (name "python-tenacity")
191 (version "6.1.0")
192 (source (origin
193 (method url-fetch)
194 (uri (pypi-uri "tenacity" version))
195 (sha256
196 (base32
197 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
198 (build-system python-build-system)
199 (native-inputs
200 `(("python-setuptools-scm" ,python-setuptools-scm)
201 ("python-sphinx" ,python-sphinx)
202 ("python-tornado" ,python-tornado)
203 ("python-pytest" ,python-pytest)))
204 (propagated-inputs
205 `(("python-six" ,python-six)))
206 (arguments
207 `(#:phases (modify-phases %standard-phases
208 (replace 'check
209 (lambda _
210 (invoke "pytest")
211 #t)))))
212 (home-page "https://github.com/jd/tenacity")
213 (synopsis "Retrying library for python")
214 (description "Tenacity is a general-purpose python library to simplify the
215 task of adding retry behavior to just about anything.")
216 (license license:asl2.0)))
217
218 (define-public python-colorlog
219 (package
220 (name "python-colorlog")
221 (version "4.1.0")
222 (source (origin
223 (method url-fetch)
224 (uri (pypi-uri "colorlog" version))
225 (sha256
226 (base32
227 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
228 (build-system python-build-system)
229 (native-inputs
230 `(("python-pytest" ,python-pytest)))
231 (arguments
232 `(#:phases (modify-phases %standard-phases
233 (replace 'check
234 (lambda _
235 ;; Extend PYTHONPATH so the built package will be found.
236 (setenv "PYTHONPATH"
237 (string-append (getcwd) "/build/lib:"
238 (getenv "PYTHONPATH")))
239 (invoke "pytest" "-p" "no:logging")
240 #t)))))
241 (home-page "https://github.com/borntyping/python-colorlog")
242 (synopsis "Log formatting with colors for python")
243 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
244 with Python's logging module that outputs records using terminal colors.")
245 (license license:expat)))
246
247 (define-public python-pyprind
248 (package
249 (name "python-pyprind")
250 (version "2.11.2")
251 (source (origin
252 (method url-fetch)
253 (uri (pypi-uri "PyPrind" version))
254 (sha256
255 (base32
256 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
257 (build-system python-build-system)
258 (propagated-inputs
259 `(("python-psutil" ,python-psutil)))
260 (home-page "https://github.com/rasbt/pyprind")
261 (synopsis "Python Progress Bar and Percent Indicator Utility")
262 (description "The PyPrind (Python Progress Indicator) module provides a
263 progress bar and a percentage indicator object that let you track the progress
264 of a loop structure or other iterative computation.")
265 (license license:bsd-3)))
266
267 (define-public python-gphoto2
268 (package
269 (name "python-gphoto2")
270 (version "2.2.1")
271 (source (origin
272 (method url-fetch)
273 (uri (pypi-uri "gphoto2" version))
274 (sha256
275 (base32
276 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
277 (build-system python-build-system)
278 (native-inputs
279 `(("pkg-config" ,pkg-config)))
280 (inputs
281 `(("libgphoto2" ,libgphoto2)))
282 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
283 (synopsis "Python interface to libgphoto2")
284 (description "@code{python-gphoto2} is a comprehensive Python interface
285 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
286 automatically generate the interface code.")
287 (license license:gpl3+)))
288
289 (define-public python-colour
290 (package
291 (name "python-colour")
292 (version "0.1.5")
293 (source (origin
294 (method url-fetch)
295 (uri (pypi-uri "colour" version))
296 (sha256
297 (base32
298 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
299 (build-system python-build-system)
300 (native-inputs
301 `(("python-d2to1" ,python-d2to1)))
302 (home-page "https://github.com/vaab/colour")
303 (synopsis "Convert and manipulate various color representations")
304 (description "Pythonic way to manipulate color representations (HSL, RVB,
305 web, X11, ...).")
306 (license license:expat)))
307
308 (define-public python-d2to1
309 (package
310 (name "python-d2to1")
311 (version "0.2.12.post1")
312 (source (origin
313 (method url-fetch)
314 (uri (pypi-uri "d2to1" version))
315 (sha256
316 (base32
317 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
318 (build-system python-build-system)
319 (native-inputs
320 `(("python-nose" ,python-nose)))
321 (home-page "https://github.com/embray/d2to1")
322 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
323 in python")
324 (description "The python package d2to1 (the d is for distutils) allows
325 using distutils2-like setup.cfg files for a package's metadata with a
326 distribute/setuptools setup.py script.")
327 (license license:bsd-2)))
328
329 (define-public python-rawkit
330 (package
331 (name "python-rawkit")
332 (version "0.6.0")
333 (source (origin
334 (method url-fetch)
335 (uri (pypi-uri "rawkit" version))
336 (sha256
337 (base32
338 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
339 (build-system python-build-system)
340 (native-inputs
341 `(("python-pytest" ,python-pytest)
342 ("python-mock" ,python-mock)))
343 (inputs
344 `(("libraw" ,libraw)))
345 (home-page "https://rawkit.readthedocs.io")
346 (synopsis "Ctypes-based LibRaw binding for Python")
347 (description "The rawkit package provides two modules: rawkit and libraw.
348 The rawkit module provides a high-level Pythonic interface for developing raw
349 photos, while the libraw module provides a CTypes based interface for
350 interacting with the low-level LibRaw C APIs.")
351 (license license:expat)))
352
353 (define-public python-easygui
354 (package
355 (name "python-easygui")
356 (version "0.98.1")
357 (source (origin
358 (method url-fetch)
359 (uri (pypi-uri "easygui" version))
360 (sha256
361 (base32
362 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
363 (build-system python-build-system)
364 (propagated-inputs
365 `(("python-tkinter" ,python "tk")))
366 (home-page "https://github.com/robertlugg/easygui")
367 (synopsis "GUI programming module for Python")
368 (description "EasyGUI is a module for very simple, very easy GUI
369 programming in Python. EasyGUI is different from other GUI generators in that
370 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
371 simple function calls.")
372 (license license:bsd-3)))
373
374 (define-public python-pymediainfo
375 (package
376 (name "python-pymediainfo")
377 (version "4.1")
378 (source
379 (origin
380 (method url-fetch)
381 (uri (pypi-uri "pymediainfo" version))
382 (sha256
383 (base32
384 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
385 (build-system python-build-system)
386 (native-inputs
387 `(("python-setuptools-scm" ,python-setuptools-scm)
388 ("python-pytest" ,python-pytest)))
389 (inputs
390 `(("libmediainfo" ,libmediainfo)))
391 (arguments
392 `(#:phases
393 (modify-phases %standard-phases
394 (add-after 'unpack 'patch-libmediainfo
395 (lambda _
396 (substitute* "pymediainfo/__init__.py"
397 (("libmediainfo.so.0")
398 (string-append (assoc-ref %build-inputs "libmediainfo")
399 "/lib/libmediainfo.so.0")))
400 #t))
401 (replace 'check
402 (lambda _
403 ;; Extend PYTHONPATH so the built package will be found.
404 (setenv "PYTHONPATH"
405 (string-append (getcwd) "/build/lib:"
406 (getenv "PYTHONPATH")))
407 ;; Skip the only failing test "test_parse_url"
408 (invoke "pytest" "-vv" "-k" "not test_parse_url")
409 #t)))))
410 (home-page
411 "https://github.com/sbraz/pymediainfo")
412 (synopsis
413 "Python wrapper for the mediainfo library")
414 (description
415 "Python wrapper for the mediainfo library to access the technical and tag
416 data for video and audio files.")
417 (license license:expat)))
418
419 (define-public python-psutil
420 (package
421 (name "python-psutil")
422 (version "5.7.0")
423 (source
424 (origin
425 (method url-fetch)
426 (uri (pypi-uri "psutil" version))
427 (sha256
428 (base32 "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"))))
429 (build-system python-build-system)
430 (arguments
431 ;; FIXME: some tests do not return and time out. Some tests fail because
432 ;; some processes survive kill().
433 '(#:tests? #f))
434 (home-page "https://www.github.com/giampaolo/psutil")
435 (synopsis "Library for retrieving information on running processes")
436 (description
437 "psutil (Python system and process utilities) is a library for retrieving
438 information on running processes and system utilization (CPU, memory, disks,
439 network) in Python. It is useful mainly for system monitoring, profiling and
440 limiting process resources and management of running processes. It implements
441 many functionalities offered by command line tools such as: ps, top, lsof,
442 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
443 pidof, tty, taskset, pmap.")
444 (properties `((python2-variant . ,(delay python2-psutil))))
445 (license license:bsd-3)))
446
447 (define-public python2-psutil
448 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
449 (package
450 (inherit base)
451 (propagated-inputs
452 `(("python2-enum34" ,python2-enum34) ;optional
453 ,@(package-propagated-inputs base))))))
454
455 (define-public python-shapely
456 (package
457 (name "python-shapely")
458 (version "1.6.4.post2")
459 (source
460 (origin
461 (method url-fetch)
462 (uri (pypi-uri "Shapely" version))
463 (sha256
464 (base32
465 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
466 (build-system python-build-system)
467 (native-inputs
468 `(("python-cython" ,python-cython)
469 ("python-matplotlib" ,python-matplotlib)
470 ("python-pytest" ,python-pytest)
471 ("python-pytest-cov" ,python-pytest-cov)))
472 (inputs
473 `(("geos" ,geos)))
474 (propagated-inputs
475 `(("python-numpy" ,python-numpy)))
476 (arguments
477 `(#:phases
478 (modify-phases %standard-phases
479 (add-after 'unpack 'patch-geos-path
480 (lambda* (#:key inputs #:allow-other-keys)
481 (let ((geos (assoc-ref inputs "geos"))
482 (glibc (assoc-ref inputs ,(if (%current-target-system)
483 "cross-libc" "libc"))))
484 (substitute* "shapely/geos.py"
485 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
486 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
487 geos "/lib/libgeos_c.so'])"))
488 (("free = load_dll\\('c'\\)\\.free")
489 (string-append "free = load_dll('c', fallbacks=['"
490 glibc "/lib/libc.so.6']).free"))))
491 #t)))))
492 (home-page "https://github.com/Toblerity/Shapely")
493 (synopsis "Library for the manipulation and analysis of geometric objects")
494 (description "Shapely is a Python package for manipulation and analysis of
495 planar geometric objects. It is based on the @code{GEOS} library.")
496 (license license:bsd-3)))
497
498 (define-public python-shortuuid
499 (package
500 (name "python-shortuuid")
501 (version "0.5.0")
502 (source
503 (origin
504 (method url-fetch)
505 (uri (pypi-uri "shortuuid" version))
506 (sha256
507 (base32
508 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
509 (build-system python-build-system)
510 (native-inputs
511 `(("python-pep8" ,python-pep8)))
512 (home-page "https://github.com/skorokithakis/shortuuid")
513 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
514 (description
515 "@code{shortuuid} is a Python library for generating concise, unambiguous
516 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
517 module and then similar looking characters are removed.")
518 (license license:bsd-3)))
519
520 (define-public python-logwrap
521 (package
522 (name "python-logwrap")
523 (version "3.2.1")
524 (source
525 (origin
526 (method url-fetch)
527 (uri (pypi-uri "logwrap" version ".zip"))
528 (sha256
529 (base32
530 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
531 (build-system python-build-system)
532 (propagated-inputs
533 `(("python-six" ,python-six)
534 ("python-typing" ,python-typing)))
535 (native-inputs
536 `(("unzip" ,unzip)
537 ("python-cython" ,python-cython)
538 ("python-pytest" ,python-pytest)
539 ("python-pytest-cov" ,python-pytest-cov)
540 ("python-pytest-runner" ,python-pytest-runner)))
541 (home-page "https://github.com/penguinolog/logwrap")
542 (synopsis "Decorator for logging function arguments")
543 (description "This package provides a decorator to log function arguments
544 and function call return values in a human-readable way.")
545 (license license:asl2.0)))
546
547 (define-public python2-shapely
548 (package-with-python2 python-shapely))
549
550 (define-public python-clyent
551 (package
552 (name "python-clyent")
553 (version "1.2.1")
554 (source
555 (origin
556 (method url-fetch)
557 (uri (pypi-uri "clyent" version))
558 (sha256
559 (base32
560 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
561 (build-system python-build-system)
562 (native-inputs
563 `(("python-mock" ,python-mock)))
564 (home-page "https://github.com/binstar/clyent")
565 (synopsis "Command line client library")
566 (description "Clyent is a Python command line utiliy library. It is used
567 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
568 (license license:bsd-3)))
569
570 (define-public python2-clyent
571 (package-with-python2 python-clyent))
572
573 (define-public python-babel
574 (package
575 (name "python-babel")
576 (version "2.8.0")
577 (source
578 (origin
579 (method url-fetch)
580 (uri (pypi-uri "Babel" version))
581 (sha256
582 (base32
583 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
584 (build-system python-build-system)
585 (native-inputs
586 `(("python-freezegun" ,python-freezegun)
587 ("python-pytest" ,python-pytest)))
588 (propagated-inputs
589 `(("python-pytz" ,python-pytz)))
590 (arguments
591 `(#:phases (modify-phases %standard-phases
592 (replace 'check
593 (lambda _
594 (invoke "pytest" "-vv" "-k"
595 (string-append
596 ;; XXX: These tests fail when using Pytest 4.x and
597 ;; Babel 2.6.0. Try removing this for later versions.
598 "not test_no_inherit_metazone_marker_never_in_output"
599 " and not test_smoke_dates"
600 " and not test_smoke_numbers")))))))
601 (home-page "http://babel.pocoo.org/")
602 (synopsis
603 "Tools for internationalizing Python applications")
604 (description
605 "Babel is composed of two major parts:
606 - tools to build and work with gettext message catalogs
607 - a Python interface to the CLDR (Common Locale Data Repository), providing
608 access to various locale display names, localized number and date formatting,
609 etc. ")
610 (license license:bsd-3)))
611
612 (define-public python2-babel
613 (package-with-python2 python-babel))
614
615 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
616 (define-public python2-babel-2.6
617 (package
618 (inherit python2-babel)
619 (version "2.6.0")
620 (source (origin
621 (method url-fetch)
622 (uri (pypi-uri "Babel" version))
623 (sha256
624 (base32
625 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
626
627 (define-public python2-backport-ssl-match-hostname
628 (package
629 (name "python2-backport-ssl-match-hostname")
630 (version "3.5.0.1")
631 (source
632 (origin
633 (method url-fetch)
634 (uri (pypi-uri "backports.ssl_match_hostname" version))
635 (sha256
636 (base32
637 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
638 (build-system python-build-system)
639 (arguments
640 `(#:python ,python-2
641 #:tests? #f)) ; no test target
642 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
643 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
644 (description
645 "This backport brings the ssl.match_hostname() function to users of
646 earlier versions of Python. The function checks the hostname in the
647 certificate returned by the server to which a connection has been established,
648 and verifies that it matches the intended target hostname.")
649 (license license:psfl)))
650
651 (define-public python-bitarray
652 (package
653 (name "python-bitarray")
654 (version "1.2.1")
655 (source (origin
656 (method url-fetch)
657 (uri (pypi-uri "bitarray" version))
658 (sha256
659 (base32
660 "1kxrlxfj9nrx512sfwifwl9z4v6ky3qschl0zmk3s3dvc3s7bmif"))))
661 (build-system python-build-system)
662 (home-page "https://github.com/ilanschnell/bitarray")
663 (synopsis "Efficient arrays of booleans")
664 (description "This package provides an object type which efficiently
665 represents an array of booleans. Bitarrays are sequence types and behave very
666 much like usual lists. Eight bits are represented by one byte in a contiguous
667 block of memory. The user can select between two representations:
668 little-endian and big-endian. All of the functionality is implemented in C.
669 Methods for accessing the machine representation are provided. This can be
670 useful when bit level access to binary files is required, such as portable
671 bitmap image files. Also, when dealing with compressed data which uses
672 variable bit length encoding, you may find this module useful.")
673 (license license:psfl)))
674
675 (define-public python-boolean.py
676 (package
677 (name "python-boolean.py")
678 (version "3.6")
679 (source
680 (origin
681 ;; There's no source tarball on PyPI.
682 (method git-fetch)
683 (uri (git-reference
684 (url "https://github.com/bastikr/boolean.py")
685 (commit (string-append "v" version))))
686 (file-name (git-file-name name version))
687 (sha256
688 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
689 (build-system python-build-system)
690 (home-page "https://github.com/bastikr/boolean.py")
691 (synopsis "Boolean algebra in one Python module")
692 (description
693 "This is a small Python library that implements boolean algebra.
694 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
695 @code{Symbol} class that can take on one of these two values. Calculations
696 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
697 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
698 Expressions are constructed from parsed strings or directly in Python.")
699 (license license:bsd-2)))
700
701 (define-public python-hdf4
702 (package
703 (name "python-hdf4")
704 (version "0.9")
705 (source
706 (origin
707 (method url-fetch)
708 (uri (pypi-uri name version))
709 (sha256
710 (base32
711 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
712 (build-system python-build-system)
713 (native-inputs `(("nose" ,python-nose)))
714 (propagated-inputs `(("numpy" ,python-numpy)))
715 (inputs
716 `(("hdf4" ,hdf4)
717 ("libjpeg" ,libjpeg-turbo)
718 ("zlib" ,zlib)))
719 (arguments
720 `(#:phases
721 (modify-phases %standard-phases
722 (replace 'check
723 (lambda _
724 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
725 ;; on to import numpy. Somehow this works on their CI system.
726 ;; Let's just manage PYTHONPATH here instead.
727 (substitute* "runexamples.sh"
728 (("export PYTHONPATH=.*") ""))
729 (setenv "PYTHONPATH"
730 (string-append (getcwd) ":"
731 (getenv "PYTHONPATH")))
732 (invoke "./runexamples.sh")
733 (invoke "nosetests" "-v"))))))
734 (home-page "https://github.com/fhs/python-hdf4")
735 (synopsis "Python interface to the NCSA HDF4 library")
736 (description
737 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
738 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
739 NetCDF files can also be read and modified. Python-HDF4 is a fork of
740 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
741 (license license:expat)))
742
743 (define-public python2-hdf4
744 (package-with-python2 python-hdf4))
745
746 (define-public python-h5py
747 (package
748 (name "python-h5py")
749 (version "2.10.0")
750 (source
751 (origin
752 (method url-fetch)
753 (uri (pypi-uri "h5py" version))
754 (sha256
755 (base32
756 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
757 (build-system python-build-system)
758 (arguments
759 `(#:tests? #f ; no test target
760 #:phases
761 (modify-phases %standard-phases
762 (add-after 'unpack 'fix-hdf5-paths
763 (lambda* (#:key inputs #:allow-other-keys)
764 (let ((prefix (assoc-ref inputs "hdf5")))
765 (substitute* "setup_build.py"
766 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
767 (string-append "['" prefix "/lib" "']"))
768 (("'/opt/local/include', '/usr/local/include'")
769 (string-append "'" prefix "/include" "'")))
770 (substitute* "setup_configure.py"
771 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
772 (string-append "['" prefix "/lib" "']")))
773 #t))))))
774 (propagated-inputs
775 `(("python-six" ,python-six)
776 ("python-numpy" ,python-numpy)))
777 (inputs
778 `(("hdf5" ,hdf5-1.10)))
779 (native-inputs
780 `(("python-cython" ,python-cython)
781 ("python-pkgconfig" ,python-pkgconfig)
782 ("pkg-config" ,pkg-config)))
783 (home-page "https://www.h5py.org/")
784 (synopsis "Read and write HDF5 files from Python")
785 (description
786 "The h5py package provides both a high- and low-level interface to the
787 HDF5 library from Python. The low-level interface is intended to be a
788 complete wrapping of the HDF5 API, while the high-level component supports
789 access to HDF5 files, datasets and groups using established Python and NumPy
790 concepts.")
791 (license license:bsd-3)))
792
793 (define-public python2-h5py
794 (package-with-python2 python-h5py))
795
796 (define-public python-sh
797 (package
798 (name "python-sh")
799 (version "1.12.14")
800 (source
801 (origin
802 (method url-fetch)
803 (uri (pypi-uri "sh" version))
804 (sha256
805 (base32
806 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
807 (build-system python-build-system)
808 (arguments
809 '(#:phases
810 (modify-phases %standard-phases
811 (replace 'check
812 (lambda _
813 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
814 (setenv "HOME" "/tmp")
815 (invoke "python" "sh.py" "test"))))))
816 (native-inputs
817 `(("python-coverage" ,python-coverage)))
818 (home-page "https://github.com/amoffat/sh")
819 (synopsis "Python subprocess replacement")
820 (description "This package provides a replacement for Python's
821 @code{subprocess} feature.")
822 (license license:expat)))
823
824 (define-public python2-sh
825 (package-with-python2 python-sh))
826
827 (define-public python-cftime
828 (package
829 (name "python-cftime")
830 (version "1.0.4.2")
831 (source
832 (origin
833 (method url-fetch)
834 (uri (pypi-uri "cftime" version))
835 (sha256
836 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
837 (build-system python-build-system)
838 (propagated-inputs
839 `(("python-numpy" ,python-numpy)))
840 (native-inputs
841 `(("python-coveralls" ,python-coveralls)
842 ("python-cython" ,python-cython)
843 ("python-pytest-cov" ,python-pytest-cov)))
844 (home-page "https://github.com/Unidata/cftime")
845 (synopsis "Library for time handling")
846 (description
847 "This package provides time-handling functionality that used to be part
848 of the netcdf4 package before.")
849 ;; This package claims to include code under the GPLv3 but is released
850 ;; under ISC.
851 (license (list license:isc license:gpl3+))))
852
853 (define-public python-netcdf4
854 (package
855 (name "python-netcdf4")
856 (version "1.5.3")
857 (source
858 (origin
859 (method url-fetch)
860 (uri (pypi-uri "netCDF4" version))
861 (sha256
862 (base32
863 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
864 (build-system python-build-system)
865 (arguments
866 '(#:phases
867 (modify-phases %standard-phases
868 (add-after 'unpack 'configure-locations
869 (lambda* (#:key inputs #:allow-other-keys)
870 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
871 #t)))))
872 (native-inputs
873 `(("python-cython" ,python-cython)))
874 (propagated-inputs
875 `(("python-numpy" ,python-numpy)
876 ("python-cftime" ,python-cftime)))
877 (inputs
878 `(("netcdf" ,netcdf)
879 ("hdf4" ,hdf4)
880 ("hdf5" ,hdf5)))
881 (home-page "https://github.com/Unidata/netcdf4-python")
882 (synopsis "Python/numpy interface to the netCDF library")
883 (description "Netcdf4-python is a Python interface to the netCDF C
884 library. netCDF version 4 has many features not found in earlier
885 versions of the library and is implemented on top of HDF5. This module
886 can read and write files in both the new netCDF 4 and the old netCDF 3
887 format, and can create files that are readable by HDF5 clients. The
888 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
889 to users of that module.")
890 ;; The software is mainly ISC, but includes some files covered
891 ;; by the Expat license.
892 (license (list license:isc license:expat))))
893
894 (define-public python2-netcdf4
895 (package-with-python2 python-netcdf4))
896
897 (define-public python-license-expression
898 (package
899 (name "python-license-expression")
900 (version "0.999")
901 (source
902 (origin
903 (method url-fetch)
904 (uri (pypi-uri "license-expression" version))
905 (sha256
906 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
907 (build-system python-build-system)
908 (propagated-inputs
909 `(("python-boolean.py" ,python-boolean.py)))
910 (home-page "https://github.com/nexB/license-expression")
911 (synopsis "Apply boolean logic to license expressions")
912 (description
913 "This Python module defines a tiny language to evaluate and compare
914 license expressions using boolean logic. Logical combinations of licenses can
915 be tested for equality, containment, and equivalence. They can be normalised
916 and simplified. It supports SPDX license expressions as well as other naming
917 conventions and aliases in the same expression.")
918 (license license:gpl2+)))
919
920 (define-public python-lockfile
921 (package
922 (name "python-lockfile")
923 (version "0.12.2")
924 (source
925 (origin
926 (method url-fetch)
927 (uri (pypi-uri "lockfile" version))
928 (sha256
929 (base32
930 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
931 (build-system python-build-system)
932 (arguments '(#:test-target "check"))
933 (native-inputs
934 `(("python-pbr" ,python-pbr)))
935 (home-page "https://launchpad.net/pylockfile")
936 (synopsis "Platform-independent file locking module")
937 (description
938 "The lockfile package exports a LockFile class which provides a simple
939 API for locking files.")
940 (license license:expat)))
941
942 (define-public python2-lockfile
943 (package-with-python2 python-lockfile))
944
945 (define-public python-filelock
946 (package
947 (name "python-filelock")
948 (version "3.0.12")
949 (source
950 (origin
951 (method url-fetch)
952 (uri (pypi-uri "filelock" version))
953 (sha256
954 (base32
955 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
956 (build-system python-build-system)
957 (home-page
958 "https://github.com/benediktschmitt/py-filelock")
959 (synopsis "Platform independent file lock")
960 (description "@code{filelock} contains a single module implementing
961 a platform independent file lock in Python, which provides a simple way of
962 inter-process communication.")
963 (license license:unlicense)))
964
965 (define-public python-semantic-version
966 (package
967 (name "python-semantic-version")
968 (version "2.6.0")
969 (source
970 (origin
971 (method url-fetch)
972 (uri (pypi-uri "semantic_version" version))
973 (sha256
974 (base32
975 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
976 (build-system python-build-system)
977 (arguments
978 `(#:tests? #f)) ; PyPI tarball lacks tests
979 (home-page "https://github.com/rbarrois/python-semanticversion")
980 (synopsis "Semantic versioning module for Python")
981 (description
982 "The @code{semantic_version} class is a small library for handling
983 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
984
985 It can compare versions, generate a new version that represents a bump in one of
986 the version levels, and check whether any given string is a proper semantic
987 version identifier.")
988 (license license:bsd-3)))
989
990 (define-public python2-semantic-version
991 (package-with-python2 python-semantic-version))
992
993 (define-public python-serpent
994 (package
995 (name "python-serpent")
996 (version "1.28")
997 (source
998 (origin
999 (method url-fetch)
1000 (uri (pypi-uri "serpent" version))
1001 (sha256
1002 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1003 (build-system python-build-system)
1004 (native-inputs
1005 `(("python-attrs" ,python-attrs)
1006 ("python-pytz" ,python-pytz)))
1007 (home-page "https://github.com/irmen/Serpent")
1008 (synopsis "Serializer for literal Python expressions")
1009 (description
1010 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1011 serialization. It serializes an object tree into bytes (an utf-8 encoded
1012 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1013 to rebuild the original object tree.
1014
1015 Because only safe literals are encoded, it is safe to send serpent data to
1016 other machines, such as over the network.")
1017 (properties `((python2-variant . ,(delay python2-serpent))))
1018 (license license:expat)))
1019
1020 (define-public python2-serpent
1021 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1022 (package
1023 (inherit base)
1024 (propagated-inputs
1025 `(("python-enum34" ,python2-enum34)
1026 ,@(package-propagated-inputs base))))))
1027
1028 (define-public python-setuptools
1029 (package
1030 (name "python-setuptools")
1031 (version "41.0.1")
1032 (source
1033 (origin
1034 (method url-fetch)
1035 (uri (pypi-uri "setuptools" version ".zip"))
1036 (sha256
1037 (base32
1038 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1039 (modules '((guix build utils)))
1040 (snippet
1041 '(begin
1042 ;; Remove included binaries which are used to build self-extracting
1043 ;; installers for Windows.
1044 ;; TODO: Find some way to build them ourself so we can include them.
1045 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1046 #t))))
1047 (build-system python-build-system)
1048 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1049 ;; One could bootstrap with an internal untested setuptools.
1050 (arguments
1051 `(#:tests? #f))
1052 (home-page "https://pypi.org/project/setuptools/")
1053 (synopsis
1054 "Library designed to facilitate packaging Python projects")
1055 (description
1056 "Setuptools is a fully-featured, stable library designed to facilitate
1057 packaging Python projects, where packaging includes:
1058 Python package and module definitions,
1059 distribution package metadata,
1060 test hooks,
1061 project installation,
1062 platform-specific details,
1063 Python 3 support.")
1064 ;; TODO: setuptools now bundles the following libraries:
1065 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1066 (license (list license:psfl ; setuptools itself
1067 license:expat ; six, appdirs, pyparsing
1068 license:asl2.0 ; packaging is dual ASL2/BSD-2
1069 license:bsd-2))))
1070
1071 (define-public python2-setuptools
1072 (package-with-python2 python-setuptools))
1073
1074 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1075 (define-public python-setuptools-for-tensorflow
1076 (hidden-package
1077 (package
1078 (inherit python-setuptools)
1079 (version "39.1.0")
1080 (source (origin
1081 (inherit (package-source python-setuptools))
1082 (uri (pypi-uri "setuptools" version ".zip"))
1083 (sha256
1084 (base32
1085 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1086
1087 (define-public python-uniseg
1088 (package
1089 (name "python-uniseg")
1090 (version "0.7.1")
1091 (source
1092 (origin
1093 (method url-fetch)
1094 (uri (pypi-uri "uniseg" version ".zip"))
1095 (sha256
1096 (base32
1097 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1098 (build-system python-build-system)
1099 (arguments
1100 '(#:tests? #f)) ; The test suite requires network access.
1101 (native-inputs
1102 `(("unzip" ,unzip)))
1103 (home-page
1104 "https://bitbucket.org/emptypage/uniseg-python")
1105 (synopsis
1106 "Python library to determine Unicode text segmentations")
1107 (description
1108 "Uniseg is a Python package used to determine Unicode text segmentations.
1109 Supported segmentations include:
1110 @enumerate
1111 @item @dfn{Code point} (any value in the Unicode codespace)
1112 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1113 multiple Unicode code points, e.g. \"G\" + acute-accent)
1114 @item Word break
1115 @item Sentence break
1116 @item Line break
1117 @end enumerate")
1118 (license license:expat)))
1119
1120 (define-public python2-uniseg
1121 (package-with-python2 python-uniseg))
1122
1123 (define-public python-humanfriendly
1124 (package
1125 (name "python-humanfriendly")
1126 (version "4.4.1")
1127 (source
1128 (origin
1129 (method url-fetch)
1130 (uri (pypi-uri "humanfriendly" version))
1131 (sha256
1132 (base32
1133 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1134 (build-system python-build-system)
1135 (arguments
1136 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1137 #:tests? #f))
1138 (propagated-inputs
1139 `(("python-monotonic" ,python-monotonic)))
1140 (home-page "https://humanfriendly.readthedocs.io")
1141 (synopsis "Human-friendly input and output in Python")
1142 (description
1143 "The functions and classes in @code{humanfriendly} can be used to make
1144 text interfaces more user-friendly. It includes tools to parse and format
1145 numbers, file sizes, and timespans, timers for long-running operations, menus
1146 to allow the user to choose from a list of options, and terminal interaction
1147 helpers.")
1148 (license license:expat)))
1149
1150 (define-public python2-humanfriendly
1151 (package-with-python2 python-humanfriendly))
1152
1153 (define-public python-textparser
1154 (package
1155 (name "python-textparser")
1156 (version "0.23.0")
1157 (source
1158 (origin
1159 (method url-fetch)
1160 (uri (pypi-uri "textparser" version))
1161 (sha256
1162 (base32
1163 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1164 (build-system python-build-system)
1165 (home-page "https://github.com/eerimoq/textparser")
1166 (synopsis "Fast text parser for Python")
1167 (description "This library provides a text parser written in the Python
1168 language. It aims to be fast.")
1169 (license license:expat)))
1170
1171 (define-public python-aenum
1172 (package
1173 (name "python-aenum")
1174 (version "2.2.3")
1175 (source
1176 (origin
1177 (method url-fetch)
1178 (uri (pypi-uri "aenum" version))
1179 (sha256
1180 (base32
1181 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1182 (build-system python-build-system)
1183 (arguments
1184 `(#:phases (modify-phases %standard-phases
1185 (replace 'check
1186 (lambda _
1187 (format #t "current working dir ~s~%" (getcwd))
1188 (setenv "PYTHONPATH"
1189 (string-append ".:" (getenv "PYTHONPATH")))
1190 ;; We must run the test suite module directly, as it
1191 ;; fails to define the 'tempdir' variable in scope for
1192 ;; the tests otherwise
1193 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1194 ;; issues/32/running-tests-with-python-setuppy-test).
1195 (invoke "python3" "aenum/test.py")
1196 ;; This one fails with "NameError: name
1197 ;; 'test_pickle_dump_load' is not defined" (see:
1198 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1199 ;; /error-running-the-test_v3py-test-suite).
1200 ;; (invoke "python3" "aenum/test_v3.py")
1201 #t)))))
1202 (home-page "https://bitbucket.org/stoneleaf/aenum")
1203 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1204 (description "The aenum library includes an @code{Enum} base class, a
1205 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1206 class.")
1207 (license license:bsd-3)))
1208
1209 (define-public python-can
1210 (package
1211 (name "python-can")
1212 (version "3.3.3")
1213 (source
1214 (origin
1215 (method url-fetch)
1216 (uri (pypi-uri "python-can" version))
1217 (sha256
1218 (base32
1219 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1220 (build-system python-build-system)
1221 (arguments
1222 `(#:phases (modify-phases %standard-phases
1223 (add-after 'unpack 'relax-version-requirements
1224 (lambda _
1225 (substitute* "setup.py"
1226 (("mock~=2\\.0") "mock")
1227 (("coverage<5") "coverage")
1228 (("pytest~=4\\.3") "pytest")
1229 (("hypothesis~=4\\.56") "hypothesis"))
1230 #t))
1231 (add-after 'unpack 'fix-broken-tests
1232 ;; The tests try to run two scripts it expects should be
1233 ;; in PATH, but they aren't at this time (see:
1234 ;; https://github.com/hardbyte/python-can/issues/805).
1235 (lambda _
1236 (substitute* "test/test_scripts.py"
1237 (("\"can_logger\\.py --help\"") "")
1238 (("\"can_player\\.py --help\"") ""))
1239 #t)))))
1240 (propagated-inputs
1241 `(("python-aenum" ,python-aenum)
1242 ("python-wrapt" ,python-wrapt)))
1243 (native-inputs
1244 `(("python-codecov" ,python-codecov)
1245 ("python-coverage" ,python-coverage)
1246 ("python-future" ,python-future)
1247 ("python-hypothesis" ,python-hypothesis)
1248 ("python-mock" ,python-mock)
1249 ("python-pyserial" ,python-pyserial)
1250 ("python-pytest" ,python-pytest)
1251 ("python-pytest-cov" ,python-pytest-cov)
1252 ("python-pytest-runner" ,python-pytest-runner)
1253 ("python-pytest-timeout" ,python-pytest-timeout)))
1254 (home-page "https://github.com/hardbyte/python-can")
1255 (synopsis "Controller Area Network (CAN) interface module for Python")
1256 (description "This package defines the @code{can} module, which provides
1257 controller area network (CAN) support for Python developers; providing common
1258 abstractions to different hardware devices, and a suite of utilities for
1259 sending and receiving messages on a CAN bus.")
1260 (license license:lgpl3+)))
1261
1262 (define-public python-diskcache
1263 (package
1264 (name "python-diskcache")
1265 (version "4.1.0")
1266 (source
1267 (origin
1268 (method url-fetch)
1269 (uri (pypi-uri "diskcache" version))
1270 (sha256
1271 (base32
1272 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1273 (build-system python-build-system)
1274 (arguments
1275 `(#:tests? #f)) ;test suite not included in the release
1276 (home-page "http://www.grantjenks.com/docs/diskcache/")
1277 (synopsis "Disk and file backed cache library")
1278 (description "DiskCache is a disk and file backed persistent cache.")
1279 (license license:asl2.0)))
1280
1281 (define-public python-bitstruct
1282 (package
1283 (name "python-bitstruct")
1284 (version "8.9.0")
1285 (source
1286 (origin
1287 (method url-fetch)
1288 (uri (pypi-uri "bitstruct" version))
1289 (sha256
1290 (base32
1291 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1292 (build-system python-build-system)
1293 (home-page "https://github.com/eerimoq/bitstruct")
1294 (synopsis "Python values to and C bit field structs converter")
1295 (description "This module performs conversions between Python values and C
1296 bit field structs represented as Python byte strings. It is intended to have
1297 a similar interface as the @code{struct} module from Python, but working on
1298 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1299 (license license:expat)))
1300
1301 (define-public python-cantools
1302 (package
1303 (name "python-cantools")
1304 (version "33.1.1")
1305 (source
1306 (origin
1307 ;; We take the sources from the Git repository as the documentation is
1308 ;; not included with the PyPI archive.
1309 (method git-fetch)
1310 (uri (git-reference
1311 (url "https://github.com/eerimoq/cantools.git")
1312 (commit version)))
1313 (file-name (git-file-name name version))
1314 (sha256
1315 (base32
1316 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1317 (build-system python-build-system)
1318 (arguments
1319 `(#:phases
1320 (modify-phases %standard-phases
1321 (add-after 'build 'build-doc
1322 (lambda _
1323 ;; See: https://github.com/eerimoq/cantools/issues/190.
1324 (substitute* "README.rst"
1325 (("https://github.com/eerimoq/cantools/raw/master\
1326 /docs/monitor.png")
1327 "monitor.png"))
1328 (with-directory-excursion "docs"
1329 (invoke "make" "man" "info"))))
1330 (add-after 'install 'install-doc
1331 (lambda* (#:key outputs #:allow-other-keys)
1332 (let* ((out (assoc-ref outputs "out"))
1333 (info (string-append out "/share/info"))
1334 (man1 (string-append out "/share/man/man1")))
1335 (format #t "CWD: ~s~%" (getcwd))
1336 (install-file "docs/_build/texinfo/cantools.info" info)
1337 (install-file "docs/_build/man/cantools.1" man1)
1338 #t))))))
1339 (native-inputs
1340 `(("sphinx" ,python-sphinx)
1341 ("texinfo" ,texinfo)))
1342 (propagated-inputs
1343 `(("python-bitstruct" ,python-bitstruct)
1344 ("python-can" ,python-can)
1345 ("python-diskcache" ,python-diskcache)
1346 ("python-textparser" ,python-textparser)))
1347 (home-page "https://github.com/eerimoq/cantools")
1348 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1349 (description "This package includes Controller Area Network (CAN) related
1350 tools that can be used to:
1351 @itemize
1352 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1353 @item encode and decode CAN messages
1354 @item multiplex simple and extended signals
1355 @item diagnose DID encoding and decoding
1356 @item dump the CAN decoder output
1357 @item test CAN nodes
1358 @item generate C source code
1359 @item monitor the CAN bus
1360 @end itemize")
1361 (license license:expat)))
1362
1363 (define-public python-capturer
1364 (package
1365 (name "python-capturer")
1366 (version "2.4")
1367 (source
1368 (origin
1369 (method url-fetch)
1370 (uri (pypi-uri "capturer" version))
1371 (sha256
1372 (base32
1373 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1374 (build-system python-build-system)
1375 (arguments
1376 `(#:tests? #f))
1377 (propagated-inputs
1378 `(("python-humanfriendly" ,python-humanfriendly)))
1379 (home-page "https://capturer.readthedocs.io")
1380 (synopsis "Capture stdout and stderr streams of the current process")
1381 (description
1382 "The capturer package makes it easy to capture the stdout and stderr
1383 streams of the current process and subprocesses. Output can be relayed
1384 to the terminal in real time but is also available to the Python program
1385 for additional processing.")
1386 (license license:expat)))
1387
1388 (define-public python2-capturer
1389 (package-with-python2 python-capturer))
1390
1391 (define-public python-case
1392 (package
1393 (name "python-case")
1394 (version "1.5.3")
1395 (source
1396 (origin
1397 (method url-fetch)
1398 (uri (pypi-uri "case" version))
1399 (sha256
1400 (base32
1401 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1402 (build-system python-build-system)
1403 (propagated-inputs
1404 `(("python-mock" ,python-mock)
1405 ("python-nose" ,python-nose)
1406 ("python-six" ,python-six)
1407 ("python-unittest2" ,python-unittest2)))
1408 (native-inputs
1409 `(("python-coverage" ,python-coverage)))
1410 (home-page "https://github.com/celery/case")
1411 (synopsis "Unittest utilities and convenience methods")
1412 (description
1413 "The @code{case} package provides utilities on top of unittest, including
1414 some helpful Python 2 compatibility convenience methods.")
1415 (license license:bsd-3)))
1416
1417 (define-public python-verboselogs
1418 (package
1419 (name "python-verboselogs")
1420 (version "1.7")
1421 (source
1422 (origin
1423 (method url-fetch)
1424 (uri (pypi-uri "verboselogs" version))
1425 (sha256
1426 (base32
1427 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1428 (build-system python-build-system)
1429 (arguments
1430 `(#:phases
1431 (modify-phases %standard-phases
1432 (replace 'check
1433 (lambda _
1434 ;; Do not run pylint plugin test, as astroid is an old
1435 ;; unsupported version.
1436 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1437 "verboselogs/tests.py"))))))
1438 (native-inputs
1439 `(("python-mock" ,python-mock)
1440 ("python-pytest" ,python-pytest)))
1441 (home-page "https://verboselogs.readthedocs.io")
1442 (synopsis "Verbose logging level for Python's logging module")
1443 (description
1444 "The @code{verboselogs} package extends Python's @code{logging} module to
1445 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1446 (license license:expat)))
1447
1448 (define-public python2-verboselogs
1449 (package-with-python2 python-verboselogs))
1450
1451 (define-public python-coloredlogs
1452 (package
1453 (name "python-coloredlogs")
1454 (version "10.0")
1455 (source
1456 (origin
1457 (method url-fetch)
1458 (uri (pypi-uri "coloredlogs" version))
1459 (sha256
1460 (base32
1461 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1462 (build-system python-build-system)
1463 (arguments
1464 `(;Tests require some updated modules
1465 #:tests? #f))
1466 (propagated-inputs
1467 `(("python-capturer" ,python-capturer)))
1468 (home-page "https://coloredlogs.readthedocs.io")
1469 (synopsis "Colored stream handler for Python's logging module")
1470 (description
1471 "The @code{coloredlogs} package enables colored terminal output for
1472 Python's logging module. The @code{ColoredFormatter} class inherits from
1473 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1474 messages in color.")
1475 (license license:expat)))
1476
1477 (define-public python2-coloredlogs
1478 (package-with-python2 python-coloredlogs))
1479
1480 (define-public python-editorconfig
1481 (package
1482 (name "python-editorconfig")
1483 (version "0.12.2")
1484 (source
1485 (origin
1486 (method url-fetch)
1487 (uri (pypi-uri "EditorConfig" version))
1488 (sha256
1489 (base32
1490 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1491 (build-system python-build-system)
1492 (home-page "https://editorconfig.org/")
1493 (synopsis "EditorConfig bindings for python")
1494 (description "The EditorConfig project consists of a file format for
1495 defining coding styles and a collection of text editor plugins that enable
1496 editors to read the file format and adhere to defined styles. EditorConfig
1497 files are easily readable and they work nicely with version control systems.")
1498 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1499 (license (list license:bsd-2 license:psfl))))
1500
1501 (define-public python-et-xmlfile
1502 (package
1503 (name "python-et-xmlfile")
1504 (version "1.0.1")
1505 (source
1506 (origin
1507 (method url-fetch)
1508 (uri (pypi-uri "et_xmlfile" version))
1509 (sha256
1510 (base32
1511 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1512 (build-system python-build-system)
1513 (arguments
1514 `(#:phases (modify-phases %standard-phases
1515 (replace 'check
1516 (lambda _
1517 (invoke "pytest"))))))
1518 (native-inputs
1519 `(("python-pytest" ,python-pytest)
1520 ("python-lxml" ,python-lxml))) ;used for the tests
1521 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1522 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1523 (description "This Python library is based upon the @code{xmlfile} module
1524 from @code{lxml}. It aims to provide a low memory, compatible implementation
1525 of @code{xmlfile}.")
1526 (license license:expat)))
1527
1528 (define-public python2-et-xmlfile
1529 (package-with-python2 python-et-xmlfile))
1530
1531 (define-public python-openpyxl
1532 (package
1533 (name "python-openpyxl")
1534 (version "2.6.2")
1535 (source
1536 (origin
1537 ;; We use the upstream repository, as the tests are not included in the
1538 ;; PyPI releases.
1539 (method hg-fetch)
1540 (uri (hg-reference
1541 (url "https://bitbucket.org/openpyxl/openpyxl")
1542 (changeset version)))
1543 (file-name (string-append name "-" version "-checkout"))
1544 (sha256
1545 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1546 (build-system python-build-system)
1547 (arguments
1548 `(#:phases (modify-phases %standard-phases
1549 (replace 'check
1550 (lambda _
1551 (invoke "pytest"))))))
1552 (native-inputs
1553 ;; For the test suite.
1554 `(("python-lxml" ,python-lxml)
1555 ("python-pillow" ,python-pillow)
1556 ("python-pytest" ,python-pytest)))
1557 (propagated-inputs
1558 `(("python-et-xmlfile" ,python-et-xmlfile)
1559 ("python-jdcal" ,python-jdcal)))
1560 (home-page "https://openpyxl.readthedocs.io")
1561 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1562 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1563 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1564 standard.")
1565 (license license:expat)))
1566
1567 (define-public python-eventlet
1568 (package
1569 (name "python-eventlet")
1570 (version "0.25.1")
1571 (source
1572 (origin
1573 (method url-fetch)
1574 (uri (pypi-uri "eventlet" version))
1575 (sha256
1576 (base32
1577 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1578 (build-system python-build-system)
1579 (propagated-inputs
1580 `(("python-greenlet" ,python-greenlet)))
1581 (arguments
1582 ;; TODO: Requires unpackaged 'enum-compat'.
1583 '(#:tests? #f))
1584 (home-page "https://eventlet.net")
1585 (synopsis "Concurrent networking library for Python")
1586 (description
1587 "Eventlet is a concurrent networking library for Python that
1588 allows you to change how you run your code, not how you write it.
1589 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1590 Coroutines ensure that the developer uses a blocking style of programming
1591 that is similar to threading, but provide the benefits of non-blocking I/O.
1592 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1593 from the Python interpreter, or as a small part of a larger application.")
1594 (license license:expat)))
1595
1596 (define-public python2-eventlet
1597 (let ((base (package-with-python2
1598 (strip-python2-variant python-eventlet))))
1599 (package (inherit base)
1600 (propagated-inputs
1601 `(("python2-enum34" ,python2-enum34)
1602 ,@(package-propagated-inputs base))))))
1603
1604 (define-public python-six
1605 (package
1606 (name "python-six")
1607 (version "1.14.0")
1608 (source
1609 (origin
1610 (method url-fetch)
1611 (uri (pypi-uri "six" version))
1612 (sha256
1613 (base32
1614 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1615 (build-system python-build-system)
1616 (arguments
1617 `(#:phases
1618 (modify-phases %standard-phases
1619 (replace 'check
1620 (lambda _
1621 (invoke "py.test" "-v"))))))
1622 (native-inputs
1623 `(("python-pytest" ,python-pytest-bootstrap)))
1624 (home-page "https://pypi.org/project/six/")
1625 (synopsis "Python 2 and 3 compatibility utilities")
1626 (description
1627 "Six is a Python 2 and 3 compatibility library. It provides utility
1628 functions for smoothing over the differences between the Python versions with
1629 the goal of writing Python code that is compatible on both Python versions.
1630 Six supports every Python version since 2.5. It is contained in only one
1631 Python file, so it can be easily copied into your project.")
1632 (license license:x11)))
1633
1634 (define-public python2-six
1635 (package-with-python2 python-six))
1636
1637 (define-public python-six-bootstrap
1638 (package
1639 (inherit python-six)
1640 (name "python-six-bootstrap")
1641 (native-inputs `())
1642 (arguments `(#:tests? #f))))
1643
1644 (define-public python2-six-bootstrap
1645 (package-with-python2 python-six-bootstrap))
1646
1647 (define-public python-schedule
1648 (package
1649 (name "python-schedule")
1650 (version "0.4.3")
1651 (source
1652 (origin
1653 (method url-fetch)
1654 (uri (pypi-uri "schedule" version))
1655 (sha256
1656 (base32
1657 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1658 (build-system python-build-system)
1659 (native-inputs
1660 `(("python-pytest" ,python-pytest)
1661 ("python-mock" ,python-mock)))
1662 (home-page "https://github.com/dbader/schedule")
1663 (synopsis "Schedule periodic function calls in Python")
1664 (description
1665 "Schedule is an in-process scheduler for periodic jobs that uses the
1666 builder pattern for configuration. Schedule lets you run Python functions (or
1667 any other callable) periodically at pre-determined intervals using a simple,
1668 human-friendly syntax.")
1669 (license license:expat)))
1670
1671 (define-public python2-schedule
1672 (package-with-python2 python-schedule))
1673
1674 (define-public python-mechanize
1675 (package
1676 (name "python-mechanize")
1677 (version "0.4.5")
1678 (source
1679 (origin
1680 (method url-fetch)
1681 (uri (pypi-uri "mechanize" version))
1682 (sha256
1683 (base32
1684 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1685 (build-system python-build-system)
1686 (propagated-inputs
1687 `(("python-html5lib" ,python-html5lib)))
1688 (home-page "https://github.com/python-mechanize/mechanize")
1689 (synopsis
1690 "Stateful programmatic web browsing in Python")
1691 (description
1692 "Mechanize implements stateful programmatic web browsing in Python,
1693 after Andy Lester’s Perl module WWW::Mechanize.")
1694 (license license:bsd-3)))
1695
1696 (define-public python2-mechanize
1697 (package-with-python2 python-mechanize))
1698
1699 (define-public python-simplejson
1700 (package
1701 (name "python-simplejson")
1702 (version "3.14.0")
1703 (source
1704 (origin
1705 (method url-fetch)
1706 (uri (pypi-uri "simplejson" version))
1707 (sha256
1708 (base32
1709 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1710 (build-system python-build-system)
1711 (home-page "http://simplejson.readthedocs.org/en/latest/")
1712 (synopsis
1713 "Json library for Python")
1714 (description
1715 "JSON (JavaScript Object Notation) is a subset of JavaScript
1716 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1717 format.
1718
1719 Simplejson exposes an API familiar to users of the standard library marshal
1720 and pickle modules. It is the externally maintained version of the json
1721 library contained in Python 2.6, but maintains compatibility with Python 2.5
1722 and (currently) has significant performance advantages, even without using
1723 the optional C extension for speedups. Simplejson is also supported on
1724 Python 3.3+.")
1725 (license license:x11)))
1726
1727 (define-public python2-simplejson
1728 (package-with-python2 python-simplejson))
1729
1730
1731 (define-public python-pyicu
1732 (package
1733 (name "python-pyicu")
1734 (version "2.4.3")
1735 (source
1736 (origin
1737 (method url-fetch)
1738 (uri (pypi-uri "PyICU" version))
1739 (sha256
1740 (base32
1741 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1742 (build-system python-build-system)
1743 (inputs
1744 `(("icu4c" ,icu4c)))
1745 (native-inputs
1746 `(("python-pytest" ,python-pytest)
1747 ("python-six" ,python-six)))
1748 (home-page "https://github.com/ovalhub/pyicu")
1749 (synopsis "Python extension wrapping the ICU C++ API")
1750 (description
1751 "PyICU is a python extension wrapping the ICU C++ API.")
1752 (license license:x11)))
1753
1754 (define-public python2-pyicu
1755 (package-with-python2 python-pyicu))
1756
1757 (define-public python-dogtail
1758 (package
1759 (name "python-dogtail")
1760 (version "0.9.11")
1761 (source (origin
1762 (method url-fetch)
1763 (uri
1764 (string-append
1765 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1766 "dogtail-" version ".tar.gz"))
1767 (sha256
1768 (base32
1769 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1770 (build-system python-build-system)
1771 (arguments
1772 `(#:tests? #f ; TODO Launching dbus for the tests
1773 ; fails
1774 #:phases
1775 (modify-phases %standard-phases
1776 (replace 'check
1777 (lambda* (#:key tests? #:allow-other-keys)
1778 (when tests?
1779 (system "Xvfb :1 &")
1780 (setenv "DISPLAY" ":1")
1781 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1782 #t)))))
1783 (propagated-inputs
1784 `(("python-pygobject" ,python-pygobject)
1785 ("python-pycairo" ,python-pycairo)
1786 ("python-pyatspi" ,python-pyatspi)))
1787 (native-inputs
1788 `(("python-nose" ,python-nose)
1789 ("gtk+" ,gtk+)
1790 ("xvfb" ,xorg-server)
1791 ("dbus" ,dbus)
1792 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1793 ("gobject-introspection" ,gobject-introspection)))
1794 (home-page "https://gitlab.com/dogtail/dogtail/")
1795 (synopsis "GUI test tool and automation framework written in Python")
1796 (description
1797 "Dogtail is a GUI test tool and automation framework written in Python.
1798 It uses Accessibility (a11y) technologies to communicate with desktop
1799 applications. dogtail scripts are written in Python and executed like any
1800 other Python program.")
1801 (license license:gpl2+)))
1802
1803 (define-public python2-dogtail
1804 (package-with-python2 python-dogtail))
1805
1806 (define-public python-empy
1807 (package
1808 (name "python-empy")
1809 (version "3.3.3")
1810 (source (origin
1811 (method url-fetch)
1812 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1813 version ".tar.gz"))
1814 (sha256
1815 (base32
1816 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1817 (build-system python-build-system)
1818 (arguments
1819 `(#:tests? #f)) ; python2 only
1820 (home-page "http://www.alcyone.com/software/empy/")
1821 (synopsis "Templating system for Python")
1822 (description
1823 "EmPy is a system for embedding Python expressions and statements in
1824 template text; it takes an EmPy source file, processes it, and produces
1825 output. This is accomplished via expansions, which are special signals to the
1826 EmPy system and are set off by a special prefix (by default the at sign, @@).
1827 EmPy can expand arbitrary Python expressions and statements in this way, as
1828 well as a variety of special forms. Textual data not explicitly delimited in
1829 this way is sent unaffected to the output, allowing Python to be used in
1830 effect as a markup language. Also supported are callbacks via hooks,
1831 recording and playback via diversions, and dynamic, chainable filters. The
1832 system is highly configurable via command line options and embedded
1833 commands.")
1834 (license license:lgpl2.1+)))
1835
1836 (define-public python2-empy
1837 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1838 (package
1839 (inherit base)
1840 (arguments `(,@(package-arguments base)
1841 #:tests? #t)))))
1842
1843 (define-public python2-element-tree
1844 (package
1845 (name "python2-element-tree")
1846 (version "1.2.6")
1847 (source (origin
1848 (method url-fetch)
1849 (uri (string-append
1850 "http://effbot.org/media/downloads/elementtree-"
1851 version "-20050316.tar.gz"))
1852 (sha256
1853 (base32
1854 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1855 (build-system python-build-system)
1856 (arguments
1857 `(#:python ,python-2 ; seems to be part of Python 3
1858 #:tests? #f)) ; no 'test' sub-command
1859 (synopsis "Toolkit for XML processing in Python")
1860 (description
1861 "ElementTree is a Python library supporting lightweight XML processing.")
1862 (home-page "https://effbot.org/zone/element-index.htm")
1863 (license (license:x11-style
1864 "http://docs.python.org/2/license.html"
1865 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1866
1867 (define-public python2-pybugz
1868 (package
1869 (name "python2-pybugz")
1870 (version "0.6.11")
1871 (source (origin
1872 (method url-fetch)
1873 (uri (string-append
1874 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1875 version ".tar.gz"))
1876 (sha256
1877 (base32
1878 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1879 (patches (search-patches "pybugz-stty.patch"
1880 "pybugz-encode-error.patch"))))
1881 (build-system python-build-system)
1882 (arguments
1883 `(#:python ,python-2 ; SyntaxError with Python 3
1884 #:tests? #f)) ; no 'test' sub-command
1885 (propagated-inputs
1886 `(("element-tree" ,python2-element-tree)))
1887 (synopsis "Python and command-line interface to Bugzilla")
1888 (description
1889 "PyBugz is a Python library and command-line tool to query the Bugzilla
1890 bug tracking system. It is meant as an aid to speed up interaction with the
1891 bug tracker.")
1892 (home-page "http://www.liquidx.net/pybugz/")
1893 (license license:gpl2)))
1894
1895 (define-public python2-enum
1896 (package
1897 (name "python2-enum")
1898 (version "0.4.6")
1899 (source (origin
1900 (method url-fetch)
1901 (uri (pypi-uri "enum" version))
1902 (sha256
1903 (base32
1904 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1905 (build-system python-build-system)
1906 (arguments
1907 `(#:python ,python-2))
1908 (home-page "https://pypi.org/project/enum/")
1909 (synopsis "Robust enumerated type support in Python")
1910 (description
1911 "This provides a module for robust enumerations in Python. It has
1912 been superseded by the Python standard library and is provided only for
1913 compatibility.")
1914 ;; Choice of either license.
1915 (license (list license:gpl3+ license:psfl))))
1916
1917 (define-public python-enum34
1918 (package
1919 (name "python-enum34")
1920 (version "1.1.6")
1921 (source
1922 (origin
1923 (method url-fetch)
1924 (uri (pypi-uri "enum34" version))
1925 (sha256
1926 (base32
1927 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1928 (build-system python-build-system)
1929 (home-page "https://pypi.org/project/enum34/")
1930 (synopsis "Backported Python 3.4 Enum")
1931 (description
1932 "Enum34 is the new Python stdlib enum module available in Python 3.4
1933 backported for previous versions of Python from 2.4 to 3.3.")
1934 (license license:bsd-3)))
1935
1936 (define-public python2-enum34
1937 (package-with-python2 python-enum34))
1938
1939 (define-public python-parse-type
1940 (package
1941 (name "python-parse-type")
1942 (version "0.4.2")
1943 (source
1944 (origin
1945 (method url-fetch)
1946 (uri (pypi-uri "parse_type" version))
1947 (sha256
1948 (base32
1949 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1950 (build-system python-build-system)
1951 (propagated-inputs
1952 `(("python-six" ,python-six)
1953 ("python-parse" ,python-parse)))
1954 (native-inputs
1955 `(("python-pytest" ,python-pytest)
1956 ("python-pytest-runner" ,python-pytest-runner)))
1957 (home-page "https://github.com/jenisys/parse_type")
1958 (synopsis "Extended parse module")
1959 (description
1960 "Parse_type extends the python parse module.")
1961 (properties
1962 `((python2-variant . ,(delay python2-parse-type))))
1963 (license license:bsd-3)))
1964
1965 (define-public python2-parse-type
1966 (let ((base (package-with-python2
1967 (strip-python2-variant python-parse-type))))
1968 (package (inherit base)
1969 (propagated-inputs
1970 `(("python2-enum34" ,python2-enum34)
1971 ,@(package-propagated-inputs base))))))
1972
1973 (define-public python-parse
1974 (package
1975 (name "python-parse")
1976 (version "1.8.4")
1977 (source
1978 (origin
1979 (method url-fetch)
1980 (uri (pypi-uri "parse" version))
1981 (sha256
1982 (base32
1983 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1984 (build-system python-build-system)
1985 (arguments
1986 `(#:phases
1987 (modify-phases %standard-phases
1988 (replace 'check
1989 (lambda _ (invoke "python" "test_parse.py"))))))
1990 (home-page "https://github.com/r1chardj0n3s/parse")
1991 (synopsis "Parse strings")
1992 (description
1993 "Parse strings using a specification based on the Python @code{format()}
1994 syntax.")
1995 (license license:x11)))
1996
1997 (define-public python-polib
1998 (package
1999 (name "python-polib")
2000 (version "1.0.8")
2001 (source (origin
2002 (method url-fetch)
2003 (uri (pypi-uri "polib" version))
2004 (sha256
2005 (base32
2006 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2007 (build-system python-build-system)
2008 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2009 (synopsis "Manipulate, create and modify gettext files")
2010 (description "Polib can manipulate any gettext format (po, pot and mo)
2011 files. It can be used to create po files from scratch or to modify
2012 existing ones.")
2013 (license license:expat)))
2014
2015 (define-public python2-polib
2016 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2017 (package
2018 (inherit base)
2019 (arguments `(,@(package-arguments base)
2020 ;; Tests don't work with python2.
2021 #:tests? #f)))))
2022
2023 (define-public python-poyo
2024 (package
2025 (name "python-poyo")
2026 (version "0.5.0")
2027 (source
2028 (origin
2029 (method url-fetch)
2030 (uri (pypi-uri "poyo" version))
2031 (sha256
2032 (base32
2033 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2034 (build-system python-build-system)
2035 (home-page "https://github.com/hackebrot/poyo")
2036 (synopsis "Lightweight YAML Parser for Python")
2037 (description
2038 "This package provides a lightweight YAML Parser for Python. It supports
2039 only a chosen subset of the YAML format that is required to parse cookiecutter
2040 user configuration files. It does not have support for serializing into YAML
2041 and is not compatible with JSON.")
2042 (license license:expat)))
2043
2044 (define-public scons
2045 (package
2046 (name "scons")
2047 (version "3.0.4")
2048 (source (origin
2049 (method git-fetch)
2050 (uri (git-reference
2051 (url "https://github.com/SCons/scons.git")
2052 (commit version)))
2053 (file-name (git-file-name name version))
2054 (sha256
2055 (base32
2056 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2057 (build-system python-build-system)
2058 (arguments
2059 `(#:use-setuptools? #f ; still relies on distutils
2060 #:tests? #f ; no 'python setup.py test' command
2061 #:phases
2062 (modify-phases %standard-phases
2063 (add-before 'build 'bootstrap
2064 (lambda _
2065 (substitute* "src/engine/SCons/compat/__init__.py"
2066 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2067 "sys.modules[new] = __import__(old)"))
2068 (substitute* "src/engine/SCons/Platform/__init__.py"
2069 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2070 "mod = __import__(full_name)"))
2071 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2072 (chdir "build/scons")
2073 #t)))))
2074 (home-page "https://scons.org/")
2075 (synopsis "Software construction tool written in Python")
2076 (description
2077 "SCons is a software construction tool. Think of SCons as an improved,
2078 cross-platform substitute for the classic Make utility with integrated
2079 functionality similar to autoconf/automake and compiler caches such as ccache.
2080 In short, SCons is an easier, more reliable and faster way to build
2081 software.")
2082 (license license:x11)))
2083
2084 (define-public scons-python2
2085 (package
2086 (inherit (package-with-python2 scons))
2087 (name "scons-python2")))
2088
2089 (define-public python-extras
2090 (package
2091 (name "python-extras")
2092 (version "1.0.0")
2093 (source
2094 (origin
2095 (method url-fetch)
2096 (uri (pypi-uri "extras" version))
2097 (sha256
2098 (base32
2099 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2100 (build-system python-build-system)
2101 (arguments
2102 ;; FIXME: Circular dependency on testtools.
2103 '(#:tests? #f))
2104 (home-page "https://github.com/testing-cabal/extras")
2105 (synopsis "Useful extensions to the Python standard library")
2106 (description
2107 "Extras is a set of extensions to the Python standard library.")
2108 (license license:expat)))
2109
2110 (define-public python2-extras
2111 (package-with-python2 python-extras))
2112
2113 (define-public python-mimeparse
2114 (package
2115 (name "python-mimeparse")
2116 (version "1.6.0")
2117 (source
2118 (origin
2119 (method url-fetch)
2120 (uri (pypi-uri "python-mimeparse" version))
2121 (sha256
2122 (base32
2123 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2124 (build-system python-build-system)
2125 (arguments
2126 '(#:phases
2127 (modify-phases %standard-phases
2128 (replace 'check
2129 (lambda _
2130 (invoke "./mimeparse_test.py"))))))
2131 (home-page
2132 "https://github.com/dbtsai/python-mimeparse")
2133 (synopsis "Python library for parsing MIME types")
2134 (description
2135 "Mimeparse provides basic functions for parsing MIME type names and
2136 matching them against a list of media-ranges.")
2137 (license license:expat)))
2138
2139 (define-public python2-mimeparse
2140 (package-with-python2 python-mimeparse))
2141
2142 (define-public python-miniboa
2143 (package
2144 (name "python-miniboa")
2145 (version "1.0.7")
2146 (source
2147 (origin
2148 (method url-fetch)
2149 (uri (pypi-uri "miniboa" version))
2150 (sha256
2151 (base32
2152 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2153 (build-system python-build-system)
2154 (home-page "https://github.com/shmup/miniboa")
2155 (synopsis "Simple, single-threaded Telnet server")
2156 (description
2157 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2158 server.")
2159 (license license:asl2.0)))
2160
2161 (define-public python2-miniboa
2162 (package-with-python2 python-miniboa))
2163
2164 (define-public python-pafy
2165 (package
2166 (name "python-pafy")
2167 (version "0.5.3.1")
2168 (source
2169 (origin
2170 (method url-fetch)
2171 (uri (pypi-uri "pafy" version))
2172 (sha256
2173 (base32
2174 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2175 (build-system python-build-system)
2176 (arguments
2177 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2178 (propagated-inputs
2179 ;; Youtube-dl is a python package which is imported in the file
2180 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2181 `(("youtube-dl" ,youtube-dl)))
2182 (home-page "https://np1.github.io/pafy/")
2183 (synopsis "Retrieve YouTube content and metadata")
2184 (description
2185 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2186 (license license:lgpl3+)))
2187
2188 (define-public python2-funcsigs
2189 (package
2190 (name "python2-funcsigs")
2191 (version "1.0.2")
2192 (source (origin
2193 (method url-fetch)
2194 (uri (pypi-uri "funcsigs" version))
2195 (sha256
2196 (base32
2197 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2198 (build-system python-build-system)
2199 (arguments
2200 `(#:python ,python-2))
2201 (native-inputs
2202 `(("python2-unittest2" ,python2-unittest2)))
2203 (home-page "http://funcsigs.readthedocs.org")
2204 (synopsis "Python function signatures from PEP362")
2205 (description
2206 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2207 (license license:asl2.0)))
2208
2209 (define-public python2-funcsigs-bootstrap
2210 (package
2211 (inherit python2-funcsigs)
2212 (name "python2-funcsigs-bootstrap")
2213 (native-inputs `())
2214 (arguments
2215 `(#:tests? #f
2216 ,@(package-arguments python2-funcsigs)))))
2217
2218 (define-public python-py
2219 (package
2220 (name "python-py")
2221 (version "1.8.1")
2222 (source
2223 (origin
2224 (method url-fetch)
2225 (uri (pypi-uri "py" version))
2226 (sha256
2227 (base32
2228 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2229 (build-system python-build-system)
2230 (arguments
2231 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2232 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2233 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2234 ;; Is this module globally installed?"
2235 '(#:tests? #f))
2236 (native-inputs
2237 `(("python-setuptools-scm" ,python-setuptools-scm)))
2238 (home-page "https://github.com/pytest-dev/py")
2239 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2240 (description
2241 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2242 code introspection, and logging.")
2243 (license license:expat)))
2244
2245 (define-public python2-py
2246 (package-with-python2 python-py))
2247
2248 ;; Recent versions of python-fixtures and python-testrepository need
2249 ;; python-pbr for packaging, which itself needs these two packages for
2250 ;; testing.
2251 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2252 ;; same source, just without any test dependencies and with tests disabled.
2253 ;; python-pbr-minmal is then used to package python-fixtures and
2254 ;; python-testrepository.
2255 ;; Strictly speaking we currently could remove the test-requirements from the
2256 ;; normal python-pbr package (and save this package) since test are disabled
2257 ;; there anyway. But this may change in future.
2258 (define-public python-pbr-minimal
2259 (package
2260 (name "python-pbr-minimal")
2261 (version "3.0.1")
2262 (source
2263 (origin
2264 (method url-fetch)
2265 (uri (pypi-uri "pbr" version))
2266 (sha256
2267 (base32
2268 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2269 (build-system python-build-system)
2270 (arguments
2271 `(#:tests? #f))
2272 (home-page "https://docs.openstack.org/pbr/latest/")
2273 (synopsis "Minimal build of python-pbr used for bootstrapping")
2274 (description
2275 "Used only for bootstrapping python2-pbr, you should not need this.")
2276 (license license:asl2.0)))
2277
2278 (define-public python2-pbr-minimal
2279 (package-with-python2 python-pbr-minimal))
2280
2281 (define-public python-pbr
2282 (package
2283 (inherit python-pbr-minimal)
2284 (name "python-pbr")
2285 (arguments
2286 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2287 (propagated-inputs
2288 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2289 (native-inputs
2290 `(("python-fixtures" ,python-fixtures-bootstrap)
2291 ;; discover, coverage, hacking, subunit
2292 ("python-mock" ,python-mock)
2293 ("python-six" ,python-six)
2294 ("python-sphinx" ,python-sphinx)
2295 ("python-testrepository" ,python-testrepository-bootstrap)
2296 ("python-testresources" ,python-testresources-bootstrap)
2297 ("python-testscenarios" ,python-testscenarios-bootstrap)
2298 ("python-testtools" ,python-testtools-bootstrap)
2299 ("python-virtualenv" ,python-virtualenv)))
2300 (synopsis "Enhance the default behavior of Python’s setuptools")
2301 (description
2302 "Python Build Reasonableness (PBR) is a library that injects some useful
2303 and sensible default behaviors into your setuptools run. It will set
2304 versions, process requirements files and generate AUTHORS and ChangeLog file
2305 from git information.
2306 ")))
2307
2308 (define-public python2-pbr
2309 (package-with-python2 python-pbr))
2310
2311 (define-public python-pyrsistent
2312 (package
2313 (name "python-pyrsistent")
2314 (version "0.16.0")
2315 (home-page "https://github.com/tobgu/pyrsistent")
2316 (source (origin
2317 (method url-fetch)
2318 (uri (pypi-uri "pyrsistent" version))
2319 (sha256
2320 (base32
2321 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2322 (build-system python-build-system)
2323 (arguments
2324 '(#:phases (modify-phases %standard-phases
2325 ;; The package works fine with newer Pytest and Hypothesis, but
2326 ;; has pinned older versions to stay compatible with Python 2.
2327 (add-before 'check 'loosen-pytest-requirement
2328 (lambda _
2329 (substitute* "setup.py"
2330 (("pytest<5") "pytest")
2331 (("hypothesis<5") "hypothesis"))
2332 #t)))))
2333 (native-inputs
2334 `(("python-hypothesis" ,python-hypothesis)
2335 ("python-pytest" ,python-pytest)
2336 ("python-pytest-runner" ,python-pytest-runner)))
2337 (propagated-inputs
2338 `(("python-six" ,python-six)))
2339 (synopsis "Persistent data structures for Python")
2340 (description
2341 "Pyrsistent is a number of persistent collections (by some referred to as
2342 functional data structures). Persistent in the sense that they are immutable.
2343
2344 All methods on a data structure that would normally mutate it instead return a
2345 new copy of the structure containing the requested updates. The original
2346 structure is left untouched.")
2347 (license license:expat)))
2348
2349 (define-public python2-pyrsistent
2350 (package-with-python2 python-pyrsistent))
2351
2352 (define-public python-exif-read
2353 (package
2354 (name "python-exif-read")
2355 (version "2.1.2")
2356 (source (origin
2357 (method url-fetch)
2358 (uri (pypi-uri "ExifRead" version))
2359 (sha256
2360 (base32
2361 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2362 (build-system python-build-system)
2363 (arguments `(#:tests? #f)) ; no tests
2364 (home-page "https://github.com/ianare/exif-py")
2365 (synopsis "Python library to extract EXIF data from image files")
2366 (description
2367 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2368 files.")
2369 (license license:bsd-3)))
2370
2371 (define-public python2-exif-read
2372 (package-with-python2 python-exif-read))
2373
2374 (define-public python-pyld
2375 (package
2376 (name "python-pyld")
2377 (version "1.0.5")
2378 (source (origin
2379 (method url-fetch)
2380 (uri (pypi-uri "PyLD" version))
2381 (sha256
2382 (base32
2383 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2384 (build-system python-build-system)
2385 (home-page "https://github.com/digitalbazaar/pyld")
2386 (synopsis "Python implementation of the JSON-LD specification")
2387 (description
2388 "PyLD is an implementation of the JSON-LD specification.")
2389 (license license:bsd-3)))
2390
2391 (define-public python2-pyld
2392 (package-with-python2 python-pyld))
2393
2394 (define-public python-click
2395 (package
2396 (name "python-click")
2397 (version "7.0")
2398 (source
2399 (origin
2400 (method url-fetch)
2401 (uri (pypi-uri "click" version))
2402 (sha256
2403 (base32
2404 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2405 (build-system python-build-system)
2406 (arguments
2407 `(#:phases
2408 (modify-phases %standard-phases
2409 (add-after 'unpack 'fix-paths
2410 (lambda* (#:key inputs #:allow-other-keys)
2411 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2412 "cross-libc" "libc"))))
2413 (substitute* "click/_unicodefun.py"
2414 (("'locale'")
2415 (string-append "'" glibc "/bin/locale'"))))
2416 #t))
2417 (replace 'check
2418 (lambda _
2419 (invoke "python" "-m" "pytest"))))))
2420 (native-inputs
2421 `(("python-pytest" ,python-pytest)))
2422 (home-page "https://palletsprojects.com/p/click/")
2423 (synopsis "Command line library for Python")
2424 (description
2425 "Click is a Python package for creating command line interfaces in a
2426 composable way with as little code as necessary. Its name stands for
2427 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2428 with sensible defaults out of the box.")
2429 (license license:bsd-3)))
2430
2431 (define-public python2-click
2432 (package-with-python2 python-click))
2433
2434 (define-public python-click-5
2435 (package (inherit python-click)
2436 (name "python-click")
2437 (version "5.1")
2438 (source
2439 (origin
2440 (method url-fetch)
2441 (uri (pypi-uri "click" version))
2442 (sha256
2443 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2444 (arguments `())))
2445
2446 (define-public python-wheel
2447 (package
2448 (name "python-wheel")
2449 (version "0.33.6")
2450 (source
2451 (origin
2452 (method url-fetch)
2453 (uri (pypi-uri "wheel" version))
2454 (sha256
2455 (base32
2456 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2457 (build-system python-build-system)
2458 (arguments
2459 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2460 ;; fails to find the newly-built bdist_wheel library, even though it is
2461 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2462 '(#:tests? #f))
2463 (home-page "https://bitbucket.org/pypa/wheel/")
2464 (synopsis "Format for built Python packages")
2465 (description
2466 "A wheel is a ZIP-format archive with a specially formatted filename and
2467 the @code{.whl} extension. It is designed to contain all the files for a PEP
2468 376 compatible install in a way that is very close to the on-disk format. Many
2469 packages will be properly installed with only the @code{Unpack} step and the
2470 unpacked archive preserves enough information to @code{Spread} (copy data and
2471 scripts to their final locations) at any later time. Wheel files can be
2472 installed with a newer @code{pip} or with wheel's own command line utility.")
2473 (license license:expat)))
2474
2475 (define-public python2-wheel
2476 (package-with-python2 python-wheel))
2477
2478 (define-public python-vcversioner
2479 (package
2480 (name "python-vcversioner")
2481 (version "2.16.0.0")
2482 (source
2483 (origin
2484 (method url-fetch)
2485 (uri (pypi-uri "vcversioner" version))
2486 (sha256
2487 (base32
2488 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2489 (build-system python-build-system)
2490 (synopsis "Python library for version number discovery")
2491 (description "Vcversioner is a Python library that inspects tagging
2492 information in a variety of version control systems in order to discover
2493 version numbers.")
2494 (home-page "https://github.com/habnabit/vcversioner")
2495 (license license:isc)))
2496
2497 (define-public python2-vcversioner
2498 (package-with-python2 python-vcversioner))
2499
2500 (define-public python-jdcal
2501 (package
2502 (name "python-jdcal")
2503 (version "1.4")
2504 (source
2505 (origin
2506 (method url-fetch)
2507 (uri (pypi-uri "jdcal" version))
2508 (sha256
2509 (base32
2510 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2511 (build-system python-build-system)
2512 (arguments
2513 `(#:phases (modify-phases %standard-phases
2514 (replace 'check
2515 (lambda _
2516 (invoke "pytest"))))))
2517 (native-inputs
2518 `(("python-pytest" ,python-pytest)))
2519 (home-page "https://github.com/phn/jdcal")
2520 (synopsis "Functions to convert between Julian dates Gregorian dates")
2521 (description "This Python library provides functions for converting
2522 between Julian dates and Gregorian dates.")
2523 (license license:bsd-2)))
2524
2525 (define-public python2-jdcal
2526 (package-with-python2 python-jdcal))
2527
2528 (define-public python-jsondiff
2529 (package
2530 (name "python-jsondiff")
2531 (version "1.2.0")
2532 (source
2533 (origin
2534 (method url-fetch)
2535 (uri (pypi-uri "jsondiff" version))
2536 (sha256
2537 (base32
2538 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2539 (build-system python-build-system)
2540 (native-inputs
2541 `(("python-nose" ,python-nose)
2542 ("python-nose-random" ,python-nose-random)))
2543 (home-page
2544 "https://github.com/fzumstein/jsondiff")
2545 (synopsis "Compare JSON and JSON-like structures in Python")
2546 (description "@code{jsondiff} is a Python library which lets you
2547 compare, diff, and patch JSON and JSON-like structures in Python.")
2548 (license license:expat)))
2549
2550 (define-public python-jsonschema
2551 (package
2552 (name "python-jsonschema")
2553 (version "3.2.0")
2554 (source (origin
2555 (method url-fetch)
2556 (uri (pypi-uri "jsonschema" version))
2557 (sha256
2558 (base32
2559 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2560 (build-system python-build-system)
2561 (arguments
2562 '(#:phases
2563 (modify-phases %standard-phases
2564 (replace 'check
2565 (lambda* (#:key inputs outputs #:allow-other-keys)
2566 (add-installed-pythonpath inputs outputs)
2567 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2568 (invoke "trial" "jsonschema"))))))
2569 (native-inputs
2570 `(("python-setuptools_scm" ,python-setuptools-scm)
2571 ("python-twisted" ,python-twisted)))
2572 (propagated-inputs
2573 `(("python-attrs" ,python-attrs)
2574 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2575 ("python-pyrsistent" ,python-pyrsistent)
2576 ("python-six" ,python-six)))
2577 (home-page "https://github.com/Julian/jsonschema")
2578 (synopsis "Implementation of JSON Schema for Python")
2579 (description
2580 "Jsonschema is an implementation of JSON Schema for Python.")
2581 (license license:expat)
2582 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2583
2584 (define-public python2-jsonschema
2585 (let ((jsonschema (package-with-python2
2586 (strip-python2-variant python-jsonschema))))
2587 (package (inherit jsonschema)
2588 (propagated-inputs
2589 `(("python2-functools32" ,python2-functools32)
2590 ,@(package-propagated-inputs jsonschema))))))
2591
2592 (define-public python-schema
2593 (package
2594 (name "python-schema")
2595 (version "0.6.6")
2596 (source
2597 (origin
2598 (method url-fetch)
2599 (uri (pypi-uri "schema" version))
2600 (sha256
2601 (base32
2602 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2603 (build-system python-build-system)
2604 (native-inputs
2605 `(("python-pytest" ,python-pytest)))
2606 (home-page "https://github.com/keleshev/schema")
2607 (synopsis "Simple data validation library")
2608 (description
2609 "@code{python-schema} is a library for validating Python data
2610 structures, such as those obtained from config-files, forms, external
2611 services or command-line parsing, converted from JSON/YAML (or
2612 something else) to Python data-types.")
2613 (license license:psfl)))
2614
2615 (define-public python2-schema
2616 (package-with-python2 python-schema))
2617
2618 (define-public python-schema-0.5
2619 (package (inherit python-schema)
2620 (version "0.5.0")
2621 (source
2622 (origin
2623 (method url-fetch)
2624 (uri (pypi-uri "schema" version))
2625 (sha256
2626 (base32
2627 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2628
2629 (define-public python2-schema-0.5
2630 (package-with-python2 python-schema-0.5))
2631
2632 (define-public python-kitchen
2633 (package
2634 (name "python-kitchen")
2635 (version "1.2.5")
2636 (source
2637 (origin
2638 (method url-fetch)
2639 (uri (pypi-uri "kitchen" version))
2640 (sha256
2641 (base32
2642 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2643 (build-system python-build-system)
2644 (propagated-inputs
2645 `(("python-chardet" ,python-chardet)))
2646 (home-page "https://github.com/fedora-infra/kitchen")
2647 (synopsis "Python API for snippets")
2648 (description "@code{kitchen} module provides a python API for all sorts of
2649 little useful snippets of code that everybody ends up writing for their projects
2650 but never seem big enough to build an independent release. Use kitchen and stop
2651 cutting and pasting that code over and over.")
2652 (license (list license:lgpl2.1+
2653 ;; subprocess.py, test_subprocess.py,
2654 ;; kitchen/pycompat25/defaultdict.py:
2655 license:psfl))))
2656
2657 (define-public python2-kitchen
2658 (package-with-python2 python-kitchen))
2659
2660 (define-public python-unidecode
2661 (package
2662 (name "python-unidecode")
2663 (version "1.1.1")
2664 (source (origin
2665 (method url-fetch)
2666 (uri (pypi-uri "Unidecode" version))
2667 (sha256
2668 (base32
2669 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2670 (build-system python-build-system)
2671 (home-page "https://pypi.org/project/Unidecode/")
2672 (synopsis "ASCII transliterations of Unicode text")
2673 (description
2674 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2675 useful when integrating with legacy code that doesn't support Unicode, or for
2676 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2677 machine identifiers from human-readable Unicode strings that should still be
2678 somewhat intelligible.")
2679 (license license:gpl2+)))
2680
2681 (define-public python2-unidecode
2682 (package-with-python2 python-unidecode))
2683
2684 (define-public python-text-unidecode
2685 (package
2686 (name "python-text-unidecode")
2687 (version "1.3")
2688 (source (origin
2689 (method url-fetch)
2690 (uri (pypi-uri "text-unidecode" version))
2691 (sha256
2692 (base32
2693 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2694 (build-system python-build-system)
2695 (arguments
2696 '(#:phases (modify-phases %standard-phases
2697 (replace 'check
2698 (lambda _
2699 (setenv "PYTHONPATH"
2700 (string-append "./build/lib:"
2701 (getenv "PYTHONPATH")))
2702 (invoke "pytest" "-vv"))))))
2703 (native-inputs
2704 `(("python-pytest" ,python-pytest)))
2705 (home-page "https://github.com/kmike/text-unidecode/")
2706 (synopsis "Decode Unicode data")
2707 (description
2708 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2709 Perl library. It can create ASCII representations of Unicode data. In general
2710 users should prefer the @code{python-unidecode} package which offers better
2711 memory usage and transliteration quality.")
2712 ;; The user can choose either license.
2713 (license (list license:clarified-artistic license:gpl2+))))
2714
2715 (define-public python2-text-unidecode
2716 (package-with-python2 python-text-unidecode))
2717
2718 (define-public python-pyjwt
2719 (package
2720 (name "python-pyjwt")
2721 (version "1.7.1")
2722 (source
2723 (origin
2724 (method url-fetch)
2725 (uri (pypi-uri "PyJWT" version))
2726 (sha256
2727 (base32
2728 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2729 (modules '((guix build utils)))
2730 (snippet
2731 '(begin
2732 (for-each delete-file-recursively
2733 (find-files "." "\\.pyc$"))
2734 #t))))
2735 (build-system python-build-system)
2736 (arguments
2737 '(#:phases (modify-phases %standard-phases
2738 (replace 'check
2739 (lambda _
2740 ;; Mimic upstream commit 3a20892442b34c7 to get
2741 ;; rid of dependency on pytest-runner < 5.0.
2742 ;; Remove substitution for PyJWT > 1.7.1.
2743 (substitute* "setup.py"
2744 ((".*pytest-runner.*")
2745 ""))
2746 (invoke "pytest" "-vv"))))))
2747 (native-inputs
2748 `(("python-pytest" ,python-pytest)
2749 ("python-pytest-cov" ,python-pytest-cov)))
2750 (home-page "https://github.com/progrium/pyjwt")
2751 (synopsis "JSON Web Token implementation in Python")
2752 (description
2753 "PyJWT is a JSON Web Token implementation written in Python.")
2754 (license license:expat)))
2755
2756 (define-public python2-pyjwt
2757 (package-with-python2 python-pyjwt))
2758
2759 (define-public python-pykka
2760 (package
2761 (name "python-pykka")
2762 (version "1.2.1")
2763 (source
2764 (origin
2765 (method url-fetch)
2766 (uri (pypi-uri "Pykka" version))
2767 (sha256
2768 (base32
2769 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2770 (build-system python-build-system)
2771 (native-inputs
2772 `(("python-mock" ,python-mock)
2773 ("python-nose" ,python-nose)
2774 ("python-gevent" ,python-gevent)
2775 ("python-eventlet" ,python-eventlet)))
2776 (home-page "https://www.pykka.org/")
2777 (synopsis "Pykka is a Python implementation of the actor model")
2778 (description
2779 "Pykka is a Python implementation of the actor model.
2780 The actor model introduces some simple rules to control the sharing
2781 of state and cooperation between execution units, which makes it
2782 easier to build concurrent applications.")
2783 (license license:asl2.0)))
2784
2785 (define-public python2-pykka
2786 (package-with-python2 python-pykka))
2787
2788 (define-public python-pymsgbox
2789 (package
2790 (name "python-pymsgbox")
2791 (version "1.0.6")
2792 (source
2793 (origin
2794 (method git-fetch)
2795 (uri (git-reference
2796 ;; LICENSE.txt is not present on pypi
2797 (url "https://github.com/asweigart/PyMsgBox")
2798 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2799 (file-name (git-file-name name version))
2800 (sha256
2801 (base32
2802 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2803 (arguments
2804 ;; Circular dependency to run tests:
2805 ;; Tests need pyautogui, which depends on pymsgbox.
2806 '(#:tests? #f))
2807 (build-system python-build-system)
2808 (home-page "https://github.com/asweigart/PyMsgBox")
2809 (synopsis "Python module for JavaScript-like message boxes")
2810 (description
2811 "PyMsgBox is a simple, cross-platform, pure Python module for
2812 JavaScript-like message boxes. Types of dialog boxes include:
2813 @enumerate
2814 @item alert
2815 @item confirm
2816 @item prompt
2817 @item password
2818 @end enumerate
2819 ")
2820 (license license:bsd-3)))
2821
2822 (define-public python-pympler
2823 (package
2824 (name "python-pympler")
2825 (home-page "https://pythonhosted.org/Pympler/")
2826 (version "0.8")
2827 (source (origin
2828 (method url-fetch)
2829 (uri (pypi-uri "Pympler" version))
2830 (sha256
2831 (base32
2832 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2833 (build-system python-build-system)
2834 (arguments
2835 `(#:phases (modify-phases %standard-phases
2836 (delete 'check)
2837 (add-after 'install 'check
2838 (lambda* (#:key inputs outputs #:allow-other-keys)
2839 (add-installed-pythonpath inputs outputs)
2840 (invoke "python" "setup.py" "test"))))))
2841 (synopsis "Measure, monitor and analyze memory behavior")
2842 (description
2843 "Pympler is a development tool to measure, monitor and analyze
2844 the memory behavior of Python objects in a running Python application.
2845
2846 By pympling a Python application, detailed insight in the size and the
2847 lifetime of Python objects can be obtained. Undesirable or unexpected
2848 runtime behavior like memory bloat and other @samp{pymples} can easily
2849 be identified.
2850
2851 A web profiling frontend exposes process statistics, garbage
2852 visualisation and class tracker statistics.")
2853 (license license:asl2.0)))
2854
2855 (define-public python2-pympler
2856 (package-with-python2 python-pympler))
2857
2858 (define-public python-itsdangerous
2859 (package
2860 (name "python-itsdangerous")
2861 (version "1.1.0")
2862 (source
2863 (origin
2864 (method url-fetch)
2865 (uri (pypi-uri "itsdangerous" version))
2866 (sha256
2867 (base32
2868 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2869 (build-system python-build-system)
2870 (home-page "https://palletsprojects.com/p/itsdangerous/")
2871 (synopsis "Python library for passing data to/from untrusted environments")
2872 (description
2873 "Itsdangerous provides various helpers to pass trusted data to untrusted
2874 environments and back.")
2875 (license license:bsd-3)))
2876
2877 (define-public python2-itsdangerous
2878 (package-with-python2 python-itsdangerous))
2879
2880 (define-public python-pyyaml
2881 (package
2882 (name "python-pyyaml")
2883 (version "5.3.1")
2884 (source
2885 (origin
2886 (method url-fetch)
2887 (uri (pypi-uri "PyYAML" version))
2888 (sha256
2889 (base32
2890 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2891 (build-system python-build-system)
2892 (inputs
2893 `(("libyaml" ,libyaml)))
2894 (home-page "https://pyyaml.org")
2895 (synopsis "YAML parser and emitter for Python")
2896 (description
2897 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2898 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2899 API, and sensible error messages. PyYAML supports standard YAML tags and
2900 provides Python-specific tags that represent an arbitrary Python object.")
2901 (license license:expat)))
2902
2903 (define-public python2-pyyaml
2904 (package-with-python2 python-pyyaml))
2905
2906 (define-public python-vine
2907 (package
2908 (name "python-vine")
2909 (version "1.1.4")
2910 (source
2911 (origin
2912 (method url-fetch)
2913 (uri (pypi-uri "vine" version))
2914 (sha256
2915 (base32
2916 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2917 (build-system python-build-system)
2918 (native-inputs
2919 `(("python-pytest" ,python-pytest)
2920 ("python-case" ,python-case)))
2921 (home-page "https://github.com/celery/vine")
2922 (synopsis "Promises for Python")
2923 (description
2924 "@code{vine} provides a special implementation of promises in that it can
2925 be used both for \"promise of a value\" and lazy evaluation. The biggest
2926 upside for this is that everything in a promise can also be a promise,
2927 e.g. filters, callbacks and errbacks can all be promises.")
2928 (license license:bsd-3)))
2929
2930 (define-public python-virtualenv
2931 (package
2932 (name "python-virtualenv")
2933 (version "20.0.10")
2934 (source
2935 (origin
2936 (method url-fetch)
2937 (uri (pypi-uri "virtualenv" version))
2938 (sha256
2939 (base32
2940 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2941 (build-system python-build-system)
2942 (native-inputs
2943 `(("python-mock" ,python-mock)
2944 ("python-pytest" ,python-pytest)
2945 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2946 ;; be an input at all". However, removing the input makes the build error:
2947 ;; File "setup.py", line 4, in <module>
2948 ;; raise RuntimeError("setuptools >= 41 required to build")
2949 ("python-setuptools" ,python-setuptools)
2950 ("python-setuptools-scm" ,python-setuptools-scm)))
2951 (propagated-inputs
2952 `(("python-appdirs" ,python-appdirs)
2953 ("python-distlib" ,python-distlib)
2954 ("python-filelock" ,python-filelock)
2955 ("python-six" ,python-six)
2956 ("python-importlib-metadata" ,python-importlib-metadata)))
2957 (home-page "https://virtualenv.pypa.io/")
2958 (synopsis "Virtual Python environment builder")
2959 (description
2960 "Virtualenv is a tool to create isolated Python environments.")
2961 (properties `((python2-variant . ,(delay python2-virtualenv))))
2962 (license license:expat)))
2963
2964 (define-public python2-virtualenv
2965 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2966 (package
2967 (inherit base)
2968 (arguments
2969 `(#:python ,python-2
2970 #:phases
2971 (modify-phases %standard-phases
2972 (add-after 'set-paths 'adjust-PYTHONPATH
2973 (lambda* (#:key inputs #:allow-other-keys)
2974 (let* ((python (assoc-ref inputs "python"))
2975 (python-sitedir (string-append python "/lib/python2.7"
2976 "/site-packages")))
2977 ;; XXX: 'python2' always comes first on PYTHONPATH
2978 ;; and shadows the 'setuptools' input. Move python2
2979 ;; last: this should be fixed in python-build-system
2980 ;; in a future rebuild cycle.
2981 (setenv "PYTHONPATH"
2982 (string-append (string-join (delete python-sitedir
2983 (string-split
2984 (getenv "PYTHONPATH")
2985 #\:))
2986 ":")
2987 ":" python-sitedir))
2988 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2989 (getenv "PYTHONPATH"))
2990 #t))))))
2991 (propagated-inputs
2992 `(("python-contextlib2" ,python2-contextlib2)
2993 ,@(package-propagated-inputs base))))))
2994
2995 (define-public python-markupsafe
2996 (package
2997 (name "python-markupsafe")
2998 (version "1.1.1")
2999 (source
3000 (origin
3001 (method url-fetch)
3002 (uri (pypi-uri "MarkupSafe" version))
3003 (sha256
3004 (base32
3005 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3006 (build-system python-build-system)
3007 (arguments
3008 `(#:modules ((ice-9 ftw)
3009 (srfi srfi-1)
3010 (srfi srfi-26)
3011 (guix build utils)
3012 (guix build python-build-system))
3013 #:phases (modify-phases %standard-phases
3014 (replace 'check
3015 (lambda _
3016 (let ((cwd (getcwd))
3017 (libdir (find (cut string-prefix? "lib." <>)
3018 (scandir "build"))))
3019 (setenv "PYTHONPATH"
3020 (string-append cwd "/build/" libdir ":"
3021 (getenv "PYTHONPATH")))
3022 (invoke "pytest" "-vv")))))))
3023 (native-inputs
3024 `(("python-pytest" ,python-pytest)))
3025 (home-page "https://github.com/mitsuhiko/markupsafe")
3026 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3027 (description
3028 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3029 for Python.")
3030 (license license:bsd-3)))
3031
3032 (define-public python2-markupsafe
3033 (package-with-python2 python-markupsafe))
3034
3035 (define-public python-jinja2
3036 (package
3037 (name "python-jinja2")
3038 (version "2.11.2")
3039 (source
3040 (origin
3041 (method url-fetch)
3042 (uri (pypi-uri "Jinja2" version))
3043 (sha256
3044 (base32
3045 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3046 (build-system python-build-system)
3047 (arguments
3048 '(#:phases (modify-phases %standard-phases
3049 (replace 'check
3050 (lambda* (#:key tests? #:allow-other-keys)
3051 (if tests?
3052 (begin
3053 (setenv "PYTHONPATH"
3054 (string-append "./build/lib:"
3055 (getenv "PYTHONPATH")))
3056 (invoke "pytest" "-vv"))
3057 (format #t "test suite not run~%"))
3058 #t)))))
3059 (native-inputs
3060 `(("python-pytest" ,python-pytest)))
3061 (propagated-inputs
3062 `(("python-markupsafe" ,python-markupsafe)))
3063 (home-page "http://jinja.pocoo.org/")
3064 (synopsis "Python template engine")
3065 (description
3066 "Jinja2 is a small but fast and easy to use stand-alone template engine
3067 written in pure Python.")
3068 (license license:bsd-3)))
3069
3070 (define-public python2-jinja2
3071 (package-with-python2 python-jinja2))
3072
3073 (define-public python-jinja2-time
3074 (package
3075 (name "python-jinja2-time")
3076 (version "0.2.0")
3077 (source
3078 (origin
3079 (method url-fetch)
3080 (uri (pypi-uri "jinja2-time" version))
3081 (sha256
3082 (base32
3083 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3084 (build-system python-build-system)
3085 (propagated-inputs
3086 `(("python-arrow" ,python-arrow)
3087 ("python-jinja2" ,python-jinja2)))
3088 (home-page
3089 "https://github.com/hackebrot/jinja2-time")
3090 (synopsis "Jinja2 Extension for Dates and Times")
3091 (description
3092 "This package provides an extension for the template engine Jinja2. It
3093 adds a 'now' tag providing a convenient access to the arrow.now() API from
3094 templates. A format string can be provided to control the output.")
3095 (license license:expat)))
3096
3097 (define-public python-pystache
3098 (package
3099 (name "python-pystache")
3100 (version "0.5.4")
3101 (source (origin
3102 (method url-fetch)
3103 (uri (pypi-uri "pystache" version))
3104 (sha256
3105 (base32
3106 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3107 (build-system python-build-system)
3108 (arguments
3109 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3110 (home-page "http://defunkt.io/pystache/")
3111 (synopsis "Python logic-less template engine")
3112 (description
3113 "Pystache is a Python implementation of the framework agnostic,
3114 logic-free templating system Mustache.")
3115 (license license:expat)
3116 (properties `((python2-variant . ,(delay python2-pystache))))))
3117
3118 (define-public python2-pystache
3119 (package (inherit (package-with-python2
3120 (strip-python2-variant python-pystache)))
3121 (arguments
3122 `(#:python ,python-2
3123 #:phases
3124 (modify-phases %standard-phases
3125 (replace 'check
3126 (lambda _
3127 (invoke "python" "test_pystache.py"))))))))
3128
3129 (define-public python-joblib
3130 (package
3131 (name "python-joblib")
3132 (version "0.14.1")
3133 (source (origin
3134 (method url-fetch)
3135 (uri (pypi-uri "joblib" version))
3136 (sha256
3137 (base32
3138 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3139 (build-system python-build-system)
3140 (arguments
3141 `(#:phases
3142 (modify-phases %standard-phases
3143 (replace 'check
3144 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3145 (native-inputs
3146 `(("python-pytest" ,python-pytest)))
3147 (home-page "https://joblib.readthedocs.io/")
3148 (synopsis "Using Python functions as pipeline jobs")
3149 (description
3150 "Joblib is a set of tools to provide lightweight pipelining in Python.
3151 In particular, joblib offers: transparent disk-caching of the output values
3152 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3153 logging and tracing of the execution.")
3154 (license license:bsd-3)))
3155
3156 (define-public python2-joblib
3157 (package-with-python2 python-joblib))
3158
3159 (define-public python-daemon
3160 (package
3161 (name "python-daemon")
3162 (version "2.2.3")
3163 (source
3164 (origin
3165 (method url-fetch)
3166 (uri (pypi-uri "python-daemon" version))
3167 (sha256
3168 (base32
3169 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3170 (build-system python-build-system)
3171 (arguments
3172 `(#:phases
3173 (modify-phases %standard-phases
3174 (add-before 'check 'disable-tests
3175 (lambda _
3176 ;; FIXME: Determine why test fails
3177 (substitute* "test/test_daemon.py"
3178 (("test_detaches_process_context")
3179 "skip_test_detaches_process_context"))
3180 #t)))))
3181 (propagated-inputs
3182 `(("python-lockfile" ,python-lockfile)))
3183 (native-inputs
3184 `(("python-unittest2" ,python-unittest2)
3185 ("python-testtools" ,python-testtools)
3186 ("python-testscenarios" ,python-testscenarios)
3187 ("python-mock" ,python-mock)
3188 ("python-docutils" ,python-docutils)))
3189 (home-page "https://pagure.io/python-daemon/")
3190 (synopsis "Python library for making a Unix daemon process")
3191 (description "Python-daemon is a library that assists a Python program to
3192 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3193
3194 This library provides a @code{DaemonContext} class that manages the following
3195 important tasks for becoming a daemon process:
3196 @enumerate
3197 @item Detach the process into its own process group.
3198 @item Set process environment appropriate for running inside a chroot.
3199 @item Renounce suid and sgid privileges.
3200 @item Close all open file descriptors.
3201 @item Change the working directory, uid, gid, and umask.
3202 @item Set appropriate signal handlers.
3203 @item Open new file descriptors for stdin, stdout, and stderr.
3204 @item Manage a specified PID lock file.
3205 @item Register cleanup functions for at-exit processing.
3206 @end enumerate")
3207 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3208 (license (list license:asl2.0 license:gpl3+))))
3209
3210 (define-public python-anytree
3211 (package
3212 (name "python-anytree")
3213 (version "2.8.0")
3214 (source (origin
3215 (method url-fetch)
3216 (uri (pypi-uri "anytree" version))
3217 (sha256
3218 (base32
3219 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3220 (build-system python-build-system)
3221 (propagated-inputs
3222 `(("python-six" ,python-six)))
3223 (native-inputs
3224 `(;; For tests.
3225 ("graphviz" ,graphviz) ;for 'dot'
3226 ("python-nose" ,python-nose)))
3227 (home-page "https://github.com/c0fec0de/anytree")
3228 (synopsis "Lightweight tree data library")
3229 (description
3230 "@code{anytree} is a simple, lightweight, and extensible tree data
3231 structure for Python.")
3232 (license license:asl2.0)))
3233
3234 (define-public python-docutils
3235 (package
3236 (name "python-docutils")
3237 (version "0.16")
3238 (source
3239 (origin
3240 (method url-fetch)
3241 (uri (pypi-uri "docutils" version))
3242 (sha256
3243 (base32
3244 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3245 (build-system python-build-system)
3246 (arguments
3247 '(#:phases (modify-phases %standard-phases
3248 (replace 'check
3249 (lambda* (#:key tests? #:allow-other-keys)
3250 (if tests?
3251 (invoke "python" "test/alltests.py")
3252 (format #t "test suite not run~%"))
3253 #t)))))
3254 (home-page "http://docutils.sourceforge.net/")
3255 (synopsis "Python Documentation Utilities")
3256 (description
3257 "Docutils is a modular system for processing documentation into useful
3258 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3259 reStructuredText.")
3260 ;; Most of the source code is public domain, but some source files are
3261 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3262 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3263
3264 (define-public python2-docutils
3265 (package-with-python2 python-docutils))
3266
3267 ;; python2-sphinx fails its test suite with newer versions.
3268 (define-public python2-docutils-0.14
3269 (package
3270 (inherit python2-docutils)
3271 (version "0.14")
3272 (source (origin
3273 (method url-fetch)
3274 (uri (pypi-uri "docutils" version))
3275 (sha256
3276 (base32
3277 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3278
3279 (define-public python-restructuredtext-lint
3280 (package
3281 (name "python-restructuredtext-lint")
3282 (version "1.3.0")
3283 (source
3284 (origin
3285 (method url-fetch)
3286 (uri (pypi-uri "restructuredtext-lint" version))
3287 (sha256
3288 (base32
3289 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3290 (build-system python-build-system)
3291 (arguments
3292 `(#:phases
3293 (modify-phases %standard-phases
3294 (delete 'check)
3295 (add-after 'install 'check
3296 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3297 (when tests?
3298 (add-installed-pythonpath inputs outputs)
3299 (invoke "nosetests" "-v"))
3300 #t)))))
3301 (propagated-inputs
3302 `(("python-docutils" ,python-docutils)))
3303 (native-inputs
3304 `(("python-nose" ,python-nose)))
3305 (home-page "https://github.com/twolfson/restructuredtext-lint")
3306 (synopsis "reStructuredText linter")
3307 (description "This package provides a linter for the reStructuredText
3308 format.")
3309 (license license:unlicense)))
3310
3311 (define-public python-doc8
3312 (package
3313 (name "python-doc8")
3314 (version "0.8.0")
3315 (source
3316 (origin
3317 (method url-fetch)
3318 (uri (pypi-uri "doc8" version))
3319 (sha256
3320 (base32
3321 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3322 (build-system python-build-system)
3323 (arguments
3324 `(#:phases
3325 (modify-phases %standard-phases
3326 (delete 'check)
3327 (add-after 'install 'check
3328 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3329 (when tests?
3330 (add-installed-pythonpath inputs outputs)
3331 (invoke "pytest" "-v"))
3332 #t)))))
3333 (propagated-inputs
3334 `(("python-chardet" ,python-chardet)
3335 ("python-docutils" ,python-docutils)
3336 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3337 ("python-six" ,python-six)
3338 ("python-stevedore" ,python-stevedore)))
3339 (native-inputs
3340 `(("python-testtools" ,python-testtools)
3341 ("python-pytest" ,python-pytest)))
3342 (home-page "https://launchpad.net/doc8")
3343 (synopsis
3344 "Style checker for Sphinx (or other) RST documentation")
3345 (description
3346 "Doc8 is an opinionated style checker for reStructured Text and plain
3347 text styles of documentation.")
3348 (license license:asl2.0)))
3349
3350 (define-public python-pygments
3351 (package
3352 (name "python-pygments")
3353 (version "2.5.2")
3354 (source
3355 (origin
3356 (method url-fetch)
3357 (uri (pypi-uri "Pygments" version))
3358 (sha256
3359 (base32
3360 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3361 (build-system python-build-system)
3362 (arguments
3363 ;; FIXME: Tests require sphinx, which depends on this.
3364 '(#:tests? #f))
3365 (home-page "https://pygments.org/")
3366 (synopsis "Syntax highlighting")
3367 (description
3368 "Pygments is a syntax highlighting package written in Python.")
3369 (license license:bsd-2)))
3370
3371 (define-public python2-pygments
3372 (package-with-python2 python-pygments))
3373
3374 (define-public python-bumpversion
3375 (package
3376 (name "python-bumpversion")
3377 (version "0.5.3")
3378 (source
3379 (origin
3380 (method url-fetch)
3381 (uri (pypi-uri "bumpversion" version))
3382 (sha256
3383 (base32
3384 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3385 (build-system python-build-system)
3386 (home-page "https://github.com/peritus/bumpversion")
3387 (synopsis "Tool to bump software version")
3388 (description "This tool provides a command-line interface (CLI) to bump a
3389 software version simply.")
3390 (license license:expat)))
3391
3392 (define-public python-deprecated
3393 (package
3394 (name "python-deprecated")
3395 (version "1.2.5")
3396 (source
3397 (origin
3398 (method git-fetch)
3399 (uri (git-reference
3400 (url "https://github.com/tantale/deprecated.git")
3401 (commit (string-append "v" version))))
3402 (file-name (git-file-name name version))
3403 (sha256
3404 (base32
3405 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3406 (build-system python-build-system)
3407 (arguments
3408 `(#:phases (modify-phases %standard-phases
3409 (replace 'check
3410 (lambda _
3411 (invoke "pytest"))))))
3412 (propagated-inputs
3413 `(("python-wrapt" ,python-wrapt)))
3414 (native-inputs
3415 `(("python-bumpversion" ,python-bumpversion)
3416 ("python-pytest" ,python-pytest)
3417 ("python-pytest-cov" ,python-pytest-cov)
3418 ("python-sphinx" ,python-sphinx)
3419 ("python-tox" ,python-tox)))
3420 (home-page "https://github.com/tantale/deprecated")
3421 (synopsis "Python decorator to deprecate classes, functions or methods")
3422 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3423 to deprecate classes, functions or methods.")
3424 (license license:expat)))
3425
3426 (define-public python-pygithub
3427 (package
3428 (name "python-pygithub")
3429 (version "1.43.8")
3430 (source
3431 ;; We fetch from the Git repo because there are no tests in the PyPI
3432 ;; archive.
3433 (origin
3434 (method git-fetch)
3435 (uri (git-reference
3436 (url "https://github.com/PyGithub/PyGithub.git")
3437 (commit (string-append "v" version))))
3438 (file-name (git-file-name name version))
3439 (sha256
3440 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3441 (build-system python-build-system)
3442 (arguments
3443 `(#:phases (modify-phases %standard-phases
3444 ;; Some tests rely on the network.
3445 (add-after 'unpack 'disable-failing-tests
3446 (lambda _
3447 (substitute* "tests/Issue142.py"
3448 (("testDecodeJson") "disabled_testDecodeJson"))
3449 #t))
3450 (add-before 'check 'prepare-for-tests
3451 (lambda _
3452 (for-each (lambda (f)
3453 (chmod f #o666))
3454 (find-files "./tests"))
3455 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3456 (setenv "PYTHONPATH"
3457 (string-append "./tests:" (getenv "PYTHONPATH")))
3458 #t)))))
3459 (propagated-inputs
3460 `(("python-deprecated" ,python-deprecated)
3461 ("python-pyjwt" ,python-pyjwt)
3462 ("python-requests" ,python-requests)))
3463 (native-inputs `(("python-httpretty" ,python-httpretty)))
3464 (home-page "https://pygithub.readthedocs.io/en/latest/")
3465 (synopsis "Python library for the GitHub API")
3466 (description "This library allows managing GitHub resources such as
3467 repositories, user profiles, and organizations in your Python applications,
3468 using version 3 of the GitHub application programming interface (API).")
3469 (license license:lgpl3+)))
3470
3471 (define-public python-rellu
3472 (package
3473 (name "python-rellu")
3474 (version "0.7")
3475 (source
3476 (origin
3477 (method url-fetch)
3478 (uri (pypi-uri "rellu" version))
3479 (sha256
3480 (base32
3481 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3482 (build-system python-build-system)
3483 (propagated-inputs
3484 `(("python-invoke" ,python-invoke)
3485 ("python-pygithub" ,python-pygithub)))
3486 (home-page "https://github.com/robotframework/rellu")
3487 (synopsis "Utilities to create PyPI releases")
3488 (description "This collection of utilities contains tooling and templates
3489 to assist in creating releases on GitHub and publishing them on PyPI. It is
3490 designed to be used by Robot Framework and tools and libraries in its
3491 ecosystem, but can naturally be used also by other projects.")
3492 (license license:asl2.0)))
3493
3494 (define-public python-robotframework
3495 (package
3496 (name "python-robotframework")
3497 (version "3.1.2")
3498 ;; There are no tests in the PyPI archive.
3499 (source
3500 (origin
3501 (method git-fetch)
3502 (uri (git-reference
3503 (url "https://github.com/robotframework/robotframework.git")
3504 (commit (string-append "v" version))))
3505 (file-name (git-file-name name version))
3506 (sha256
3507 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3508 (patches (search-patches
3509 "python-robotframework-honor-source-date-epoch.patch"))))
3510 (build-system python-build-system)
3511 (arguments
3512 `(#:phases (modify-phases %standard-phases
3513 (add-before 'build 'build-and-install-doc
3514 (lambda* (#:key outputs #:allow-other-keys)
3515 (let* ((doc-output (assoc-ref outputs "doc"))
3516 (doc (string-append doc-output "/share/"
3517 ,name "-" ,version "/")))
3518 (invoke "invoke" "library-docs" "all")
3519 (mkdir-p doc)
3520 (copy-recursively "doc/libraries"
3521 (string-append doc "/libraries"))
3522 #t)))
3523 (replace 'check
3524 (lambda _
3525 (invoke "python" "utest/run.py"))))))
3526 (native-inputs
3527 `(("python-invoke" ,python-invoke)
3528 ("python-rellu" ,python-rellu)
3529 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3530 (outputs '("out" "doc"))
3531 (home-page "https://robotframework.org")
3532 (synopsis "Generic automation framework")
3533 (description "Robot Framework is a generic automation framework for
3534 acceptance testing, acceptance test driven development (ATDD), and robotic
3535 process automation (RPA).")
3536 (license license:asl2.0)))
3537
3538 (define-public python-robotframework-lint
3539 ;; There is no properly tagged release; the commit below seems to correspond
3540 ;; to the 0.9 stable release available from PyPI. The tests are not
3541 ;; included in the PyPI archive, so we fetch the sources from the upstream
3542 ;; Git repo.
3543 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3544 (revision "1"))
3545 (package
3546 (name "python-robotframework-lint")
3547 (version (git-version "0.9.0" revision commit))
3548 (source
3549 (origin
3550 (method git-fetch)
3551 (uri (git-reference
3552 (url "https://github.com/boakley/robotframework-lint.git")
3553 (commit commit)))
3554 (file-name (git-file-name name version))
3555 (sha256
3556 (base32
3557 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3558 (build-system python-build-system)
3559 (arguments
3560 `(#:phases
3561 (modify-phases %standard-phases
3562 (replace 'check
3563 (lambda _
3564 (invoke "python" "-m" "robot" "-A"
3565 "tests/conf/default.args" "tests"))))))
3566 (propagated-inputs
3567 `(("python-robotframework" ,python-robotframework)))
3568 (home-page "https://github.com/boakley/robotframework-lint/")
3569 (synopsis "Static analysis tool (linter) for Robot Framework")
3570 (description "This package provides the @code{rflint} command-line
3571 utility, a static analysis tool (linter) for Robot Framework source files.")
3572 (license license:asl2.0))))
3573
3574 (define-public python-robotframework-sshlibrary
3575 (package
3576 (name "python-robotframework-sshlibrary")
3577 (version "3.3.0")
3578 ;; There are no tests in the PyPI archive.
3579 (source
3580 (origin
3581 (method git-fetch)
3582 (uri (git-reference
3583 (url "https://github.com/robotframework/SSHLibrary.git")
3584 (commit (string-append "v" version))))
3585 (file-name (git-file-name name version))
3586 (sha256
3587 (base32
3588 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3589 (build-system python-build-system)
3590 (arguments
3591 `(#:phases
3592 (modify-phases %standard-phases
3593 (add-before 'build 'build-and-install-doc
3594 (lambda* (#:key outputs #:allow-other-keys)
3595 (let* ((doc-output (assoc-ref outputs "doc"))
3596 (doc (string-append doc-output "/share/"
3597 ,name "-" ,version "/")))
3598 (invoke "chmod" "-R" "+w" "docs")
3599 (invoke "invoke" "kw-docs" "project-docs")
3600 (mkdir-p doc)
3601 (for-each delete-file (find-files "docs" "\\.rst"))
3602 (copy-recursively "docs" doc)
3603 #t)))
3604 (replace 'check
3605 (lambda _
3606 ;; Some tests require an SSH server; we remove them.
3607 (delete-file "utest/test_client_api.py")
3608 (delete-file "utest/test_scp.py")
3609 (invoke "python" "utest/run.py"))))))
3610 (propagated-inputs
3611 `(("python-robotframework" ,python-robotframework)
3612 ("python-paramiko" ,python-paramiko)
3613 ("python-scp" ,python-scp)))
3614 (native-inputs
3615 `(("openssh" ,openssh)
3616 ("which" ,which)
3617 ;; To generate the documentation
3618 ("python-docutils" ,python-docutils)
3619 ("python-invoke" ,python-invoke)
3620 ("python-pygments" ,python-pygments)
3621 ("python-rellu" ,python-rellu)))
3622 (outputs '("out" "doc"))
3623 (home-page "https://github.com/robotframework/SSHLibrary")
3624 (synopsis "Robot Framework library for SSH and SFTP")
3625 (description "SSHLibrary is a Robot Framework library providing support
3626 for SSH and SFTP. It has the following main usages:
3627 @itemize @bullet
3628 @item Executing commands on the remote machine, either blocking or non-blocking.
3629 @item Writing and reading in an interactive shell.
3630 @item Transferring files and directories over SFTP.
3631 @item Ensuring that files and directories exist on the remote machine.
3632 @end itemize")
3633 (license license:asl2.0)))
3634
3635 (define-public python-rstr
3636 (package
3637 (name "python-rstr")
3638 (version "2.2.6")
3639 (source
3640 (origin
3641 (method url-fetch)
3642 (uri (pypi-uri "rstr" version))
3643 (sha256
3644 (base32
3645 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3646 (build-system python-build-system)
3647 (home-page
3648 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3649 (synopsis "Generate random strings in Python")
3650 (description "This package provides a python module for generating
3651 random strings of various types. It could be useful for fuzz testing,
3652 generating dummy data, or other applications. It has no dependencies
3653 outside the standard library.")
3654 (license license:bsd-3)))
3655
3656 (define-public python-scp
3657 (package
3658 (name "python-scp")
3659 (version "0.13.2")
3660 (source
3661 (origin
3662 (method url-fetch)
3663 (uri (pypi-uri "scp" version))
3664 (sha256
3665 (base32
3666 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3667 (build-system python-build-system)
3668 (arguments
3669 '(#:tests? #f)) ;tests require an SSH server
3670 (propagated-inputs
3671 `(("python-paramiko" ,python-paramiko)))
3672 (home-page "https://github.com/jbardin/scp.py")
3673 (synopsis "SCP protocol module for Python and Paramiko")
3674 (description "The scp module extends the Paramiko library to send and
3675 receive files via the SCP1 protocol, as implemented by the OpenSSH
3676 @command{scp} program.")
3677 (license license:gpl2+)))
3678
3679 (define-public python-rst.linker
3680 (package
3681 (name "python-rst.linker")
3682 (version "1.11")
3683 (source
3684 (origin
3685 (method url-fetch)
3686 (uri (pypi-uri "rst.linker" version))
3687 (sha256
3688 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3689 (build-system python-build-system)
3690 (propagated-inputs
3691 `(("python-dateutil" ,python-dateutil)
3692 ("python-six" ,python-six)))
3693 (native-inputs
3694 `(("python-setuptools-scm" ,python-setuptools-scm)))
3695 ;; Test would require path.py, which would introduce a cyclic dependence.
3696 (arguments `(#:tests? #f))
3697 ;; Note: As of version 1.7 the documentation is not worth building.
3698 (home-page "https://github.com/jaraco/rst.linker")
3699 (synopsis "Sphinx plugin to add links and timestamps")
3700 (description "rst.linker automatically replaces text by a
3701 reStructuredText external reference or timestamps. It's primary purpose is to
3702 augment the changelog, but it can be used for other documents, too.")
3703 (license license:expat)))
3704
3705 (define-public python2-rst.linker
3706 (package-with-python2 python-rst.linker))
3707
3708 (define-public python-feedgenerator
3709 (package
3710 (name "python-feedgenerator")
3711 (version "1.9")
3712 (source
3713 (origin
3714 (method url-fetch)
3715 (uri (pypi-uri "feedgenerator" version))
3716 (sha256
3717 (base32
3718 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3719 (modules '((guix build utils)))
3720 (snippet
3721 '(begin
3722 ;; Remove pre-compiled .pyc files from source.
3723 (for-each delete-file-recursively
3724 (find-files "." "__pycache__" #:directories? #t))
3725 (for-each delete-file (find-files "." "\\.pyc$"))
3726 #t))))
3727 (build-system python-build-system)
3728 (propagated-inputs
3729 `(("python-pytz" ,python-pytz)
3730 ("python-six" ,python-six)))
3731 (home-page "https://github.com/getpelican/feedgenerator")
3732 (synopsis
3733 "Standalone version of Django's Atom/RSS feed generator")
3734 (description
3735 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3736 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3737 (license license:bsd-3)))
3738
3739 (define-public python2-feedgenerator
3740 (package-with-python2 python-feedgenerator))
3741
3742 (define-public python-toml
3743 (package
3744 (name "python-toml")
3745 (version "0.10.1")
3746 (source
3747 (origin
3748 (method url-fetch)
3749 (uri (pypi-uri "toml" version))
3750 (sha256
3751 (base32
3752 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3753 (build-system python-build-system)
3754 (arguments
3755 `(#:tests? #f)) ;no tests suite in release
3756 (home-page "https://github.com/uiri/toml")
3757 (synopsis "Library for TOML")
3758 (description
3759 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3760 Language (TOML) configuration files.")
3761 (license license:expat)))
3762
3763 (define-public python-jsonrpc-server
3764 (package
3765 (name "python-jsonrpc-server")
3766 (version "0.3.4")
3767 (source
3768 (origin
3769 (method url-fetch)
3770 (uri (pypi-uri "python-jsonrpc-server" version))
3771 (sha256
3772 (base32
3773 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3774 (build-system python-build-system)
3775 (propagated-inputs
3776 `(("python-mock" ,python-mock)
3777 ("python-pytest" ,python-pytest)
3778 ("python-ujson" ,python-ujson-1)))
3779 (home-page
3780 "https://github.com/palantir/python-jsonrpc-server")
3781 (synopsis "JSON RPC 2.0 server library")
3782 (description
3783 "This package provides a JSON RPC 2.0 server library for Python.")
3784 (license license:expat)))
3785
3786 (define-public python-pydocstyle
3787 (package
3788 (name "python-pydocstyle")
3789 (version "3.0.0")
3790 (source
3791 (origin
3792 (method url-fetch)
3793 (uri (pypi-uri "pydocstyle" version))
3794 (sha256
3795 (base32
3796 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3797 (build-system python-build-system)
3798 (propagated-inputs
3799 `(("python-six" ,python-six)
3800 ("python-snowballstemmer" ,python-snowballstemmer)))
3801 (home-page
3802 "https://github.com/PyCQA/pydocstyle/")
3803 (synopsis "Python docstring style checker")
3804 (description
3805 "This package provides a style checker for the Python Language
3806 Server (PLS).")
3807 (license license:expat)))
3808
3809 (define-public python-language-server
3810 (package
3811 (name "python-language-server")
3812 (version "0.32.0")
3813 (source
3814 (origin
3815 (method url-fetch)
3816 (uri (pypi-uri "python-language-server" version))
3817 (sha256
3818 (base32
3819 "0j5swacmjps9sas1gfwg0xi84rmjhfhz20cwg3k4058d20rs20ip"))))
3820 (build-system python-build-system)
3821 (propagated-inputs
3822 `(("python-pluggy" ,python-pluggy)
3823 ("python-jsonrpc-server" ,python-jsonrpc-server)
3824 ;; Note: Remove the special versions of Jedi and Parso when updating
3825 ;; this package.
3826 ("python-jedi" ,python-jedi)
3827 ("python-yapf" ,python-yapf)
3828 ("python-pyflakes" ,python-pyflakes)
3829 ("python-pydocstyle" ,python-pydocstyle)
3830 ("python-pycodestyle" ,python-pycodestyle)
3831 ("python-mccabe" ,python-mccabe)
3832 ("python-rope" ,python-rope)
3833 ("python-autopep8" ,python-autopep8)
3834 ("python-flake8" ,python-flake8)
3835 ("python-pylint" ,python-pylint)))
3836 (home-page "https://github.com/palantir/python-language-server")
3837 (synopsis "Python implementation of the Language Server Protocol")
3838 (description
3839 "The Python Language Server (pyls) is an implementation of the Python 3
3840 language specification for the Language Server Protocol (LSP). This tool is
3841 used in text editing environments to provide a complete and integrated
3842 feature-set for programming Python effectively.")
3843 (license license:expat)))
3844
3845 (define-public python-pathspec
3846 (package
3847 (name "python-pathspec")
3848 (version "0.7.0")
3849 (source
3850 (origin
3851 (method url-fetch)
3852 (uri (pypi-uri "pathspec" version))
3853 (sha256
3854 (base32
3855 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3856 (build-system python-build-system)
3857 (home-page "https://github.com/cpburnz/python-path-specification")
3858 (synopsis "Utility library for gitignore style pattern matching of file paths")
3859 (description
3860 "This package provides a utility library for gitignore style pattern
3861 matching of file paths.")
3862 (license license:mpl2.0)))
3863
3864 (define-public python-black
3865 (package
3866 (name "python-black")
3867 (version "19.10b0")
3868 (source
3869 (origin
3870 (method url-fetch)
3871 (uri (pypi-uri "black" version))
3872 (sha256
3873 (base32
3874 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3875 (build-system python-build-system)
3876 (arguments
3877 `(#:phases
3878 (modify-phases %standard-phases
3879 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3880 (lambda _
3881 (let ((python3 (which "python3")))
3882 (substitute* '("tests/data/fmtonoff.py"
3883 "tests/data/string_prefixes.py"
3884 "tests/data/function.py"
3885 "tests/data/python37.py")
3886 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3887 (string-append "#!" python3 (if (string? minor-version)
3888 minor-version
3889 "")))))
3890 #t))
3891 (add-after 'unpack 'disable-broken-tests
3892 (lambda _
3893 ;; These tests are supposed to be skipped when the blackd
3894 ;; dependencies are missing, but this doesn't quite work.
3895 (substitute* "tests/test_black.py"
3896 (("( *)class BlackDTestCase.*" match indent)
3897 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3898 indent "class BlackDTestCase(unittest.TestCase):\n"))
3899 (("web.Application") "False")
3900 (("@unittest_run_loop") ""))
3901
3902 ;; Patching the above file breaks the self test
3903 (substitute* "tests/test_black.py"
3904 (("( *)def test_self" match indent)
3905 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3906 #t)))))
3907 (propagated-inputs
3908 `(("python-click" ,python-click)
3909 ("python-attrs" ,python-attrs)
3910 ("python-appdirs" ,python-appdirs)
3911 ("python-pathspec" ,python-pathspec)
3912 ("python-regex" ,python-regex)
3913 ("python-toml" ,python-toml)
3914 ("python-typed-ast" ,python-typed-ast)))
3915 (native-inputs
3916 `(("python-setuptools-scm" ,python-setuptools-scm)))
3917 (home-page "https://github.com/ambv/black")
3918 (synopsis "The uncompromising code formatter")
3919 (description "Black is the uncompromising Python code formatter.")
3920 (license license:expat)))
3921
3922 (define-public python-blinker
3923 (package
3924 (name "python-blinker")
3925 (version "1.4")
3926 (source
3927 (origin
3928 (method url-fetch)
3929 (uri (pypi-uri "blinker" version))
3930 (sha256
3931 (base32
3932 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3933 (build-system python-build-system)
3934 (home-page "https://pythonhosted.org/blinker/")
3935 (synopsis "Fast, simple object-to-object and broadcast signaling")
3936 (description
3937 "Blinker provides a fast dispatching system that allows any number of
3938 interested parties to subscribe to events, or \"signals\".")
3939 (license license:expat)))
3940
3941 (define-public python2-blinker
3942 (package-with-python2 python-blinker))
3943
3944 (define-public pelican
3945 (package
3946 (name "pelican")
3947 (version "4.2.0")
3948 (source
3949 (origin
3950 (method url-fetch)
3951 (uri (pypi-uri "pelican" version))
3952 (sha256
3953 (base32
3954 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3955 (build-system python-build-system)
3956 (propagated-inputs
3957 `(("python-blinker" ,python-blinker)
3958 ("python-dateutil" ,python-dateutil)
3959 ("python-docutils" ,python-docutils)
3960 ("python-feedgenerator" ,python-feedgenerator)
3961 ("python-jinja2" ,python-jinja2)
3962 ("python-markdown" ,python-markdown)
3963 ("python-pygments" ,python-pygments)
3964 ("python-pytz" ,python-pytz)
3965 ("python-six" ,python-six)
3966 ("python-unidecode" ,python-unidecode)))
3967 (home-page "https://getpelican.com/")
3968 (arguments
3969 `(;; XXX Requires a lot more packages to do unit tests :P
3970 #:tests? #f))
3971 (synopsis "Python-based static site publishing system")
3972 (description
3973 "Pelican is a tool to generate a static blog from reStructuredText,
3974 Markdown input files, and more. Pelican uses Jinja2 for templating
3975 and is very extensible.")
3976 (license license:agpl3+)))
3977
3978 (define-public mallard-ducktype
3979 (package
3980 (name "mallard-ducktype")
3981 (version "1.0.2")
3982 (source
3983 (origin
3984 (method git-fetch)
3985 ;; git-reference because tests are not included in pypi source tarball
3986 ;; https://issues.guix.gnu.org/issue/36755#2
3987 (uri (git-reference
3988 (url "https://github.com/projectmallard/mallard-ducktype.git")
3989 (commit version)))
3990 (file-name (git-file-name name version))
3991 (sha256
3992 (base32
3993 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3994 (build-system python-build-system)
3995 (arguments
3996 '(#:phases
3997 (modify-phases %standard-phases
3998 (replace 'check
3999 (lambda _
4000 (with-directory-excursion "tests"
4001 (invoke "sh" "runtests")))))))
4002 (home-page "http://projectmallard.org")
4003 (synopsis "Convert Ducktype to Mallard documentation markup")
4004 (description
4005 "Ducktype is a lightweight syntax that can represent all the semantics
4006 of the Mallard XML documentation system. Ducktype files can be converted to
4007 Mallard using the @command{ducktype} tool. The yelp-tools package
4008 provides additional functionality on the produced Mallard documents.")
4009 (license license:expat)))
4010
4011 (define-public python-cython
4012 (package
4013 (name "python-cython")
4014 (version "0.29.17")
4015 (source
4016 (origin
4017 (method url-fetch)
4018 (uri (pypi-uri "Cython" version))
4019 (sha256
4020 (base32
4021 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4022 (build-system python-build-system)
4023 ;; we need the full python package and not just the python-wrapper
4024 ;; because we need libpython3.3m.so
4025 (inputs
4026 `(("python" ,python)))
4027 (arguments
4028 `(#:phases
4029 (modify-phases %standard-phases
4030 (add-before 'check 'set-HOME
4031 ;; some tests require access to "$HOME/.cython"
4032 (lambda _ (setenv "HOME" "/tmp") #t))
4033 (replace 'check
4034 (lambda _
4035 ;; Disable compiler optimizations to greatly reduce the running
4036 ;; time of the test suite.
4037 (setenv "CFLAGS" "-O0")
4038
4039 (invoke "python" "runtests.py" "-vv"
4040 "-j" (number->string (parallel-job-count))
4041 ;; XXX: On 32-bit architectures, running the parallel tests
4042 ;; fails on many-core systems, see
4043 ;; <https://github.com/cython/cython/issues/2807>.
4044 ,@(if (not (target-64bit?))
4045 '("-x" "run.parallel")
4046 '())))))))
4047 (home-page "https://cython.org/")
4048 (synopsis "C extensions for Python")
4049 (description "Cython is an optimising static compiler for both the Python
4050 programming language and the extended Cython programming language. It makes
4051 writing C extensions for Python as easy as Python itself.")
4052 (license license:asl2.0)
4053 (properties `((python2-variant . ,(delay python2-cython))))))
4054
4055 (define-public python2-cython
4056 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4057 (package
4058 (inherit base)
4059 (name "python2-cython")
4060 (inputs
4061 `(("python-2" ,python-2))) ;this is not automatically changed
4062 (arguments
4063 (substitute-keyword-arguments (package-arguments base)
4064 ((#:phases phases)
4065 `(modify-phases ,phases
4066 (add-before 'check 'adjust-test_embed
4067 (lambda _
4068 (substitute* "runtests.py"
4069 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4070 ;; so it can give the right -L flag to GCC when embedding static
4071 ;; builds of Python. It is unaware that the Python "config"
4072 ;; directory (where the static library lives) was renamed in
4073 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4074 ;; which works fine, because that is where the shared library is.
4075 ;;
4076 ;; It also appears to be unaware that the Makefile in Demos/embed
4077 ;; already unconditionally pass the static library location to GCC,
4078 ;; after checking sysconfig.get_config_var('LIBPL).
4079 ;;
4080 ;; The effect is that the linker is unable to resolve libexpat
4081 ;; symbols when building for Python 2, because neither the Python 2
4082 ;; shared library nor Expat is available. To fix it, we can either
4083 ;; add Expat as an input and make it visible to the linker, or just
4084 ;; prevent it from overriding the Python shared library location.
4085 ;; The end result is identical, so we take the easy route.
4086 ((" or libname not in os\\.listdir\\(libdir\\)")
4087 ""))
4088 #t)))))))))
4089
4090 ;; The RPython toolchain currently does not support Python 3.
4091 (define-public python2-rpython
4092 (package
4093 (name "python2-rpython")
4094 (version "0.2.1")
4095 (source
4096 (origin
4097 (method url-fetch)
4098 (uri (pypi-uri "rpython" version))
4099 (sha256
4100 (base32
4101 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4102 (build-system python-build-system)
4103 (arguments `(#:python ,python-2))
4104 (native-inputs
4105 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4106 (home-page "https://rpython.readthedocs.org")
4107 (synopsis "Framework for implementing interpreters and virtual machines")
4108 (description "RPython is a translation and support framework for
4109 producing implementations of dynamic languages, emphasizing a clean separation
4110 between language specification and implementation aspects.")
4111 (license license:expat)))
4112
4113 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4114 ;; python-scipy still build, as these three packages are often used together.
4115 (define-public python-numpy
4116 (package
4117 (name "python-numpy")
4118 (version "1.17.3")
4119 (source
4120 (origin
4121 (method url-fetch)
4122 (uri (string-append
4123 "https://github.com/numpy/numpy/releases/download/v"
4124 version "/numpy-" version ".tar.gz"))
4125 (sha256
4126 (base32
4127 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4128 (build-system python-build-system)
4129 (inputs
4130 `(("openblas" ,openblas)
4131 ("lapack" ,lapack)))
4132 (native-inputs
4133 `(("python-cython" ,python-cython)
4134 ("python-pytest" ,python-pytest)
4135 ("gfortran" ,gfortran)))
4136 (arguments
4137 `(#:phases
4138 (modify-phases %standard-phases
4139 (add-before 'build 'configure-blas-lapack
4140 (lambda* (#:key inputs #:allow-other-keys)
4141 (call-with-output-file "site.cfg"
4142 (lambda (port)
4143 (format port
4144 "[openblas]
4145 libraries = openblas
4146 library_dirs = ~a/lib
4147 include_dirs = ~a/include
4148
4149 # backslash-n to make emacs happy
4150 \n[lapack]
4151 lapack_libs = lapack
4152 library_dirs = ~a/lib
4153 include_dirs = ~a/include
4154 "
4155 (assoc-ref inputs "openblas")
4156 (assoc-ref inputs "openblas")
4157 (assoc-ref inputs "lapack")
4158 (assoc-ref inputs "lapack"))))
4159 #t))
4160 (add-before 'build 'fix-executable-paths
4161 (lambda* (#:key inputs #:allow-other-keys)
4162 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4163 ;; instead of /bin/sh.
4164 (substitute* "numpy/distutils/exec_command.py"
4165 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4166 (string-append match-start (assoc-ref inputs "bash") match-end)))
4167 ;; Use "gcc" executable, not "cc".
4168 (substitute* "numpy/distutils/system_info.py"
4169 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4170 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4171 #t))
4172 ;; Tests can only be run after the library has been installed and not
4173 ;; within the source directory.
4174 (delete 'check)
4175 (add-after 'install 'check
4176 (lambda* (#:key outputs inputs #:allow-other-keys)
4177 ;; Make installed package available for running the tests
4178 (add-installed-pythonpath inputs outputs)
4179 ;; Make sure "f2py" etc is found.
4180 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4181 ":" (getenv "PATH")))
4182 (with-directory-excursion "/tmp"
4183 (invoke "python" "-c"
4184 "import numpy; numpy.test(verbose=2)")))))))
4185 (home-page "https://numpy.org")
4186 (synopsis "Fundamental package for scientific computing with Python")
4187 (description "NumPy is the fundamental package for scientific computing
4188 with Python. It contains among other things: a powerful N-dimensional array
4189 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4190 and Fortran code, useful linear algebra, Fourier transform, and random number
4191 capabilities.")
4192 (properties `((python2-variant . ,(delay python2-numpy))))
4193 (license license:bsd-3)))
4194
4195 ;; Numpy 1.16.x are the last versions that support Python 2.
4196 (define-public python2-numpy
4197 (let ((numpy (package-with-python2
4198 (strip-python2-variant python-numpy))))
4199 (package/inherit
4200 numpy
4201 (version "1.16.5")
4202 (source (origin
4203 (method url-fetch)
4204 (uri (string-append
4205 "https://github.com/numpy/numpy/releases/download/v"
4206 version "/numpy-" version ".tar.gz"))
4207 (sha256
4208 (base32
4209 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4210
4211 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4212 ;; interest only for legacy code going back to NumPy's predecessor
4213 ;; Numeric.
4214 (define-public python2-numpy-1.8
4215 (package (inherit python2-numpy)
4216 (version "1.8.2")
4217 (source
4218 (origin
4219 (method git-fetch)
4220 (uri (git-reference
4221 (url "https://github.com/numpy/numpy")
4222 (commit (string-append "v" version))))
4223 (file-name (git-file-name "numpy" version))
4224 (sha256
4225 (base32
4226 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4227 (arguments
4228 (substitute-keyword-arguments (package-arguments python2-numpy)
4229 ((#:phases phases)
4230 `(modify-phases ,phases
4231 (replace 'configure-blas-lapack
4232 (lambda* (#:key inputs #:allow-other-keys)
4233 (call-with-output-file "site.cfg"
4234 (lambda (port)
4235 (format port
4236 "[openblas]
4237 libraries = openblas,lapack
4238 library_dirs = ~a/lib:~a/lib
4239 include_dirs = ~a/include:~a/include
4240 "
4241 (assoc-ref inputs "openblas")
4242 (assoc-ref inputs "lapack")
4243 (assoc-ref inputs "openblas")
4244 (assoc-ref inputs "lapack"))))
4245 #t))))))
4246 (native-inputs
4247 `(("python2-nose" ,python2-nose)))
4248 (description "NumPy is the fundamental package for scientific computing
4249 with Python. It contains among other things: a powerful N-dimensional array
4250 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4251 and Fortran code, useful linear algebra, Fourier transform, and random number
4252 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4253 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4254 Numeric.")
4255 (license license:bsd-3)))
4256
4257 (define-public python-munch
4258 (package
4259 (name "python-munch")
4260 (version "2.0.4")
4261 (source
4262 (origin
4263 (method url-fetch)
4264 (uri (pypi-uri "munch" version))
4265 (sha256
4266 (base32
4267 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4268 (build-system python-build-system)
4269 (home-page "https://github.com/Infinidat/munch")
4270 (synopsis "Dot-accessible dictionary")
4271 (description "Munch is a dot-accessible dictionary similar to JavaScript
4272 objects.")
4273 (license license:expat)))
4274
4275 (define-public python2-munch
4276 (package-with-python2 python-munch))
4277
4278 (define-public python-colormath
4279 (package
4280 (name "python-colormath")
4281 (version "3.0.0")
4282 (source
4283 (origin
4284 (method url-fetch)
4285 (uri (pypi-uri "colormath" version))
4286 (sha256
4287 (base32
4288 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4289 (build-system python-build-system)
4290 (propagated-inputs
4291 `(("python-networkx" ,python-networkx)
4292 ("python-numpy" ,python-numpy)))
4293 (home-page "https://github.com/gtaylor/python-colormath")
4294 (synopsis "Color math and conversion library")
4295 (description
4296 "This is a Python library for color math and conversions.")
4297 (license license:bsd-3)))
4298
4299 (define-public python2-colormath
4300 (package-with-python2 python-colormath))
4301
4302 (define-public python-spectra
4303 (package
4304 (name "python-spectra")
4305 (version "0.0.11")
4306 (source
4307 (origin
4308 (method url-fetch)
4309 (uri (pypi-uri "spectra" version))
4310 (sha256
4311 (base32
4312 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4313 (build-system python-build-system)
4314 (arguments
4315 `(#:phases
4316 (modify-phases %standard-phases
4317 (replace 'check
4318 (lambda _ (invoke "nosetests" "-v"))))))
4319 (propagated-inputs
4320 `(("python-colormath" ,python-colormath)))
4321 (native-inputs
4322 `(("python-nose" ,python-nose)))
4323 (home-page "https://github.com/jsvine/spectra")
4324 (synopsis "Color scales and color conversion")
4325 (description
4326 "This package provides a Python library intended to make color math,
4327 color scales, and color space conversion easy. It has support for:
4328
4329 @enumerate
4330 @item Color scales
4331 @item Color ranges
4332 @item Color blending
4333 @item Brightening/darkening colors
4334 @item Saturating/desaturating colors
4335 @item Conversion to/from multiple color spaces.
4336 @end enumerate\n")
4337 (license license:expat)))
4338
4339 (define-public python2-spectra
4340 (package-with-python2 python-spectra))
4341
4342 (define-public python-numpy-documentation
4343 (package
4344 (name "python-numpy-documentation")
4345 (version (package-version python-numpy))
4346 (source (package-source python-numpy))
4347 (build-system python-build-system)
4348 (native-inputs
4349 `(("python-matplotlib" ,python-matplotlib)
4350 ("python-numpy" ,python-numpy)
4351 ("pkg-config" ,pkg-config)
4352 ("python-sphinx" ,python-sphinx)
4353 ("python-numpydoc" ,python-numpydoc)
4354 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4355 texlive-fonts-ec
4356 texlive-generic-ifxetex
4357 texlive-generic-pdftex
4358 texlive-amsfonts
4359 texlive-latex-capt-of
4360 texlive-latex-cmap
4361 texlive-latex-environ
4362 texlive-latex-eqparbox
4363 texlive-latex-etoolbox
4364 texlive-latex-expdlist
4365 texlive-latex-fancyhdr
4366 texlive-latex-fancyvrb
4367 texlive-latex-fncychap
4368 texlive-latex-float
4369 texlive-latex-framed
4370 texlive-latex-geometry
4371 texlive-latex-graphics
4372 texlive-latex-hyperref
4373 texlive-latex-mdwtools
4374 texlive-latex-multirow
4375 texlive-latex-needspace
4376 texlive-latex-oberdiek
4377 texlive-latex-parskip
4378 texlive-latex-preview
4379 texlive-latex-tabulary
4380 texlive-latex-threeparttable
4381 texlive-latex-titlesec
4382 texlive-latex-trimspaces
4383 texlive-latex-ucs
4384 texlive-latex-upquote
4385 texlive-latex-url
4386 texlive-latex-varwidth
4387 texlive-latex-wrapfig)))
4388 ("texinfo" ,texinfo)
4389 ("perl" ,perl)
4390 ("scipy-sphinx-theme"
4391 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4392 (method git-fetch)
4393 (uri (git-reference
4394 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4395 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4396 (sha256
4397 (base32
4398 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4399 ,@(package-native-inputs python-numpy)))
4400 (arguments
4401 `(#:tests? #f ; we're only generating the documentation
4402 #:phases
4403 (modify-phases %standard-phases
4404 (delete 'build)
4405 (replace 'install
4406 (lambda* (#:key inputs outputs #:allow-other-keys)
4407 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4408 (doc (string-append
4409 data "/doc/" ,name "-"
4410 ,(package-version python-numpy)))
4411 (info-reader (string-append data "/info"))
4412 (html (string-append doc "/html"))
4413 (scipy-sphinx-theme "scipy-sphinx-theme")
4414 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4415 (pyver ,(string-append "PYVER=")))
4416
4417 ;; FIXME: this is needed to for texlive-union to generate
4418 ;; fonts, which are not found.
4419 (setenv "HOME" "/tmp")
4420
4421 (with-directory-excursion "doc"
4422 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4423 (mkdir-p html)
4424 (invoke "make" "html" pyver)
4425 (invoke "make" "latex" "PAPER=a4" pyver)
4426 (invoke "make" "-C" "build/latex"
4427 "all-pdf" "PAPER=a4" pyver)
4428 ;; FIXME: Generation of the info file fails.
4429 ;; (invoke "make" "info" pyver)
4430 ;; (mkdir-p info)
4431 ;; (copy-file "build/texinfo/numpy.info"
4432 ;; (string-append info "/numpy.info"))
4433 (for-each (lambda (file)
4434 (copy-file (string-append "build/latex" file)
4435 (string-append doc file)))
4436 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4437 (with-directory-excursion "build/html"
4438 (for-each (lambda (file)
4439 (let* ((dir (dirname file))
4440 (tgt-dir (string-append html "/" dir)))
4441 (unless (equal? "." dir)
4442 (mkdir-p tgt-dir))
4443 (install-file file html)))
4444 (find-files "." ".*")))))
4445 #t)))))
4446 (home-page (package-home-page python-numpy))
4447 (synopsis "Documentation for the python-numpy package")
4448 (description (package-description python-numpy))
4449 (license (package-license python-numpy))))
4450
4451 (define-public python2-numpy-documentation
4452 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4453 (package
4454 (inherit numpy-documentation)
4455 (native-inputs `(("python2-functools32" ,python2-functools32)
4456 ,@(package-native-inputs numpy-documentation))))))
4457
4458 (define-public python-pygit2
4459 (package
4460 (name "python-pygit2")
4461 (version "1.1.0")
4462 (source
4463 (origin
4464 (method url-fetch)
4465 (uri (pypi-uri "pygit2" version))
4466 (sha256
4467 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4468 (build-system python-build-system)
4469 (arguments
4470 '(#:tests? #f)) ; tests don't run correctly in our environment
4471 (propagated-inputs
4472 `(("python-cached-property" ,python-cached-property)
4473 ("python-cffi" ,python-cffi)
4474 ("libgit2" ,libgit2)))
4475 (native-inputs
4476 `(("python-pytest" ,python-pytest)))
4477 (home-page "https://github.com/libgit2/pygit2")
4478 (synopsis "Python bindings for libgit2")
4479 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4480 library, libgit2 implements Git plumbing.")
4481 ;; GPL2.0 only, with linking exception.
4482 (license license:gpl2)))
4483
4484 (define-public python-pyparsing
4485 (package
4486 (name "python-pyparsing")
4487 (version "2.4.6")
4488 (source
4489 (origin
4490 (method url-fetch)
4491 (uri (pypi-uri "pyparsing" version))
4492 (sha256
4493 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4494 (build-system python-build-system)
4495 (outputs '("out" "doc"))
4496 (arguments
4497 `(#:tests? #f ; no test target
4498 #:phases
4499 (modify-phases %standard-phases
4500 (add-after 'install 'install-doc
4501 (lambda* (#:key outputs #:allow-other-keys)
4502 (let* ((doc (string-append (assoc-ref outputs "doc")
4503 "/share/doc/" ,name "-" ,version))
4504 (html-doc (string-append doc "/html"))
4505 (examples (string-append doc "/examples")))
4506 (mkdir-p html-doc)
4507 (mkdir-p examples)
4508 (for-each
4509 (lambda (dir tgt)
4510 (map (lambda (file)
4511 (install-file file tgt))
4512 (find-files dir ".*")))
4513 (list "docs" "htmldoc" "examples")
4514 (list doc html-doc examples))
4515 #t))))))
4516 (home-page "https://github.com/pyparsing/pyparsing")
4517 (synopsis "Python parsing class library")
4518 (description
4519 "The pyparsing module is an alternative approach to creating and
4520 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4521 of regular expressions. The pyparsing module provides a library of classes
4522 that client code uses to construct the grammar directly in Python code.")
4523 (license license:expat)))
4524
4525 (define-public python2-pyparsing
4526 (package-with-python2 python-pyparsing))
4527
4528 (define-public python-numpydoc
4529 (package
4530 (name "python-numpydoc")
4531 (version "0.8.0")
4532 (source
4533 (origin
4534 (method url-fetch)
4535 (uri (pypi-uri "numpydoc" version))
4536 (sha256
4537 (base32
4538 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4539 (build-system python-build-system)
4540 (propagated-inputs
4541 `(("python-sphinx" ,python-sphinx)))
4542 (native-inputs
4543 `(("python-nose" ,python-nose)))
4544 (home-page "https://pypi.org/project/numpydoc/")
4545 (synopsis
4546 "Numpy's Sphinx extensions")
4547 (description
4548 "Sphinx extension to support docstrings in Numpy format.")
4549 (license license:bsd-2)))
4550
4551 (define-public python2-numpydoc
4552 (package-with-python2 python-numpydoc))
4553
4554 (define-public python-numexpr
4555 (package
4556 (name "python-numexpr")
4557 (version "2.6.5")
4558 (source
4559 (origin
4560 (method url-fetch)
4561 (uri (pypi-uri "numexpr" version))
4562 (sha256
4563 (base32
4564 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4565 (build-system python-build-system)
4566 (arguments `(#:tests? #f)) ; no tests included
4567 (propagated-inputs
4568 `(("python-numpy" ,python-numpy)))
4569 (home-page "https://github.com/pydata/numexpr")
4570 (synopsis "Fast numerical expression evaluator for NumPy")
4571 (description
4572 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4573 expressions that operate on arrays are accelerated and use less memory than
4574 doing the same calculation in Python. In addition, its multi-threaded
4575 capabilities can make use of all your cores, which may accelerate
4576 computations, most specially if they are not memory-bounded (e.g. those using
4577 transcendental functions).")
4578 (license license:expat)))
4579
4580 (define-public python2-numexpr
4581 (package-with-python2 python-numexpr))
4582
4583 (define-public python-cycler
4584 (package
4585 (name "python-cycler")
4586 (version "0.10.0")
4587 (source (origin
4588 (method url-fetch)
4589 (uri (pypi-uri "cycler" version))
4590 (sha256
4591 (base32
4592 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4593 (build-system python-build-system)
4594 (arguments
4595 ;; XXX: The current version requires 'coveralls' which we don't have.
4596 ;; Enable this for the next release which uses 'python-pytest'.
4597 '(#:tests? #f))
4598 (propagated-inputs
4599 `(("python-six" ,python-six)))
4600 (home-page "http://matplotlib.org/cycler/")
4601 (synopsis "Composable keyword argument iterator")
4602 (description
4603 "When using @code{matplotlib} and plotting more than one line, it is
4604 common to want to be able to want to be able to cycle over one or more artist
4605 styles; but the plotting logic can quickly become involved.
4606 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4607 @code{Cycler} class was developed.")
4608 (license license:bsd-3)))
4609
4610 (define-public python2-cycler
4611 (package-with-python2 python-cycler))
4612
4613 (define-public python-colorspacious
4614 (package
4615 (name "python-colorspacious")
4616 (version "1.1.2")
4617 (source
4618 (origin
4619 (method git-fetch)
4620 (uri (git-reference
4621 (url "https://github.com/njsmith/colorspacious.git")
4622 (commit (string-append "v" version))))
4623 (file-name (git-file-name name version))
4624 (sha256
4625 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4626 (build-system python-build-system)
4627 (propagated-inputs
4628 `(("python-numpy" ,python-numpy)))
4629 (native-inputs
4630 `(("python-nose" ,python-nose)))
4631 (arguments
4632 `(#:phases
4633 (modify-phases %standard-phases
4634 (replace 'check
4635 (lambda _
4636 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4637 (home-page "https://github.com/njsmith/colorspacious")
4638 (synopsis "Python library for colorspace conversions")
4639 (description "@code{colorspacious} is a Python library that lets you
4640 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4641 (license license:expat)))
4642
4643 (define-public python2-colorspacious
4644 (package-with-python2 python-colorspacious))
4645
4646 (define-public python-matplotlib
4647 (package
4648 (name "python-matplotlib")
4649 (version "3.1.2")
4650 (source
4651 (origin
4652 (method url-fetch)
4653 (uri (pypi-uri "matplotlib" version))
4654 (sha256
4655 (base32
4656 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4657 (build-system python-build-system)
4658 (propagated-inputs ; the following packages are all needed at run time
4659 `(("python-cycler" ,python-cycler)
4660 ("python-kiwisolver" ,python-kiwisolver)
4661 ("python-pyparsing" ,python-pyparsing)
4662 ("python-pygobject" ,python-pygobject)
4663 ("gobject-introspection" ,gobject-introspection)
4664 ("python-tkinter" ,python "tk")
4665 ("python-dateutil" ,python-dateutil)
4666 ("python-numpy" ,python-numpy)
4667 ("python-pillow" ,python-pillow)
4668 ("python-pytz" ,python-pytz)
4669 ("python-six" ,python-six)
4670 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4671 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4672 ;; object. For this reason we need to import both libraries.
4673 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4674 ("python-pycairo" ,python-pycairo)
4675 ("python-cairocffi" ,python-cairocffi)))
4676 (inputs
4677 `(("libpng" ,libpng)
4678 ("imagemagick" ,imagemagick)
4679 ("freetype" ,freetype)
4680 ("cairo" ,cairo)
4681 ("glib" ,glib)
4682 ;; FIXME: Add backends when available.
4683 ;("python-wxpython" ,python-wxpython)
4684 ("tcl" ,tcl)
4685 ("tk" ,tk)))
4686 (native-inputs
4687 `(("pkg-config" ,pkg-config)
4688 ("python-pytest" ,python-pytest)
4689 ("python-mock" ,python-mock)
4690 ("unzip" ,unzip)
4691 ("jquery-ui"
4692 ,(origin
4693 (method url-fetch)
4694 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4695 (sha256
4696 (base32
4697 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4698 (arguments
4699 `(#:phases
4700 (modify-phases %standard-phases
4701 ;; XXX We disable all image comparison tests because we're using a
4702 ;; newer version of FreeType than matplotlib expects. This leads to
4703 ;; minor differences throughout the tests.
4704 (add-after 'unpack 'fix-and-disable-failing-tests
4705 (lambda _
4706 (substitute* (append (find-files "lib/matplotlib/tests/"
4707 "test_.*\\.py$")
4708 (find-files "lib/mpl_toolkits/tests"
4709 "test_.*\\.py$"))
4710 (("^from matplotlib" match)
4711 (string-append "import pytest\n" match))
4712 (("( *)@image_comparison" match indent)
4713 (string-append indent
4714 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4715 match)))
4716 (substitute* "lib/matplotlib/tests/test_animation.py"
4717 (("/bin/sh") (which "sh")))
4718 (for-each delete-file
4719 ;; test_normal_axes, test_get_tightbbox_polar
4720 '("lib/matplotlib/tests/test_axes.py"
4721 ;; We don't use the webagg backend and this test forces it.
4722 "lib/matplotlib/tests/test_backend_webagg.py"
4723 ;; test_outward_ticks
4724 "lib/matplotlib/tests/test_tightlayout.py"
4725 ;; test_hidden_axes fails with minor extent
4726 ;; differences, possibly due to the use of a
4727 ;; different version of FreeType.
4728 "lib/matplotlib/tests/test_constrainedlayout.py"
4729 ;; Fontconfig returns no fonts.
4730 "lib/matplotlib/tests/test_font_manager.py"))
4731 #t))
4732 (add-before 'install 'install-jquery-ui
4733 (lambda* (#:key outputs inputs #:allow-other-keys)
4734 (let ((dir (string-append (assoc-ref outputs "out")
4735 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4736 (mkdir-p dir)
4737 (invoke "unzip"
4738 (assoc-ref inputs "jquery-ui")
4739 "-d" dir))
4740 #t))
4741 (replace 'check
4742 (lambda* (#:key outputs inputs #:allow-other-keys)
4743 (add-installed-pythonpath inputs outputs)
4744 (invoke "python" "tests.py" "-v"
4745 "-m" "not network and not webagg")))
4746 (add-before 'build 'configure-environment
4747 (lambda* (#:key outputs inputs #:allow-other-keys)
4748 (let ((cairo (assoc-ref inputs "cairo")))
4749 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4750 ;; has not effect.
4751 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4752 (setenv "HOME" (getcwd))
4753 (call-with-output-file "setup.cfg"
4754 (lambda (port)
4755 (format port "[directories]~%
4756 basedirlist = ~a,~a~%
4757 [packages]~%
4758 tests = True~%"
4759 (assoc-ref inputs "tcl")
4760 (assoc-ref inputs "tk")))))
4761 #t)))))
4762 (home-page "https://matplotlib.org/")
4763 (synopsis "2D plotting library for Python")
4764 (description
4765 "Matplotlib is a Python 2D plotting library which produces publication
4766 quality figures in a variety of hardcopy formats and interactive environments
4767 across platforms. Matplotlib can be used in Python scripts, the python and
4768 ipython shell, web application servers, and six graphical user interface
4769 toolkits.")
4770 (license license:psfl)
4771 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4772
4773 (define-public python2-matplotlib
4774 (let ((matplotlib (package-with-python2
4775 (strip-python2-variant python-matplotlib))))
4776 (package (inherit matplotlib)
4777 (version "2.2.4")
4778 (source
4779 (origin
4780 (method url-fetch)
4781 (uri (pypi-uri "matplotlib" version))
4782 (sha256
4783 (base32
4784 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4785 (arguments
4786 (substitute-keyword-arguments (package-arguments matplotlib)
4787 ((#:phases phases)
4788 `(modify-phases ,phases
4789 (replace 'install-jquery-ui
4790 (lambda* (#:key outputs inputs #:allow-other-keys)
4791 (let ((dir (string-append (assoc-ref outputs "out")
4792 "/lib/python2.7/site-packages/"
4793 "matplotlib/backends/web_backend/")))
4794 (mkdir-p dir)
4795 (invoke "unzip"
4796 (assoc-ref inputs "jquery-ui")
4797 "-d" dir))
4798 #t))
4799 (delete 'fix-and-disable-failing-tests)
4800 (delete 'check))))) ; These tests weren't run the the past.
4801 ;; Make sure to use special packages for Python 2 instead
4802 ;; of those automatically rewritten by package-with-python2.
4803 (propagated-inputs
4804 `(("python2-pycairo" ,python2-pycairo)
4805 ("python2-backports-functools-lru-cache"
4806 ,python2-backports-functools-lru-cache)
4807 ("python2-functools32" ,python2-functools32)
4808 ("python2-pygobject-2" ,python2-pygobject-2)
4809 ("python2-subprocess32" ,python2-subprocess32)
4810 ("python2-tkinter" ,python-2 "tk")
4811 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4812 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4813
4814 (define-public python-matplotlib-documentation
4815 (package
4816 (name "python-matplotlib-documentation")
4817 (version (package-version python-matplotlib))
4818 (source (package-source python-matplotlib))
4819 (build-system python-build-system)
4820 (native-inputs
4821 `(("python-matplotlib" ,python-matplotlib)
4822 ("python-colorspacious" ,python-colorspacious)
4823 ("python-sphinx" ,python-sphinx)
4824 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4825 ("python-sphinx-gallery" ,python-sphinx-gallery)
4826 ("python-numpydoc" ,python-numpydoc)
4827 ("python-ipython" ,python-ipython)
4828 ("python-ipykernel" ,python-ipykernel)
4829 ("python-mock" ,python-mock)
4830 ("graphviz" ,graphviz)
4831 ("texlive" ,(texlive-union (list texlive-amsfonts
4832 texlive-latex-amsmath
4833 texlive-latex-enumitem
4834 texlive-latex-expdlist
4835 texlive-latex-geometry
4836 texlive-latex-preview
4837 texlive-latex-type1cm
4838 texlive-latex-ucs
4839
4840 texlive-generic-pdftex
4841
4842 texlive-fonts-ec
4843 texlive-fonts-adobe-times
4844 texlive-fonts-txfonts)))
4845 ("texinfo" ,texinfo)
4846 ,@(package-native-inputs python-matplotlib)))
4847 (arguments
4848 `(#:tests? #f ; we're only generating documentation
4849 #:phases
4850 (modify-phases %standard-phases
4851 ;; The tests in python-matplotlib are run after the install phase, so
4852 ;; we need to delete the extra phase here.
4853 (delete 'check)
4854 (replace 'build
4855 (lambda _
4856 (chdir "doc")
4857 (setenv "PYTHONPATH"
4858 (string-append (getenv "PYTHONPATH")
4859 ":" (getcwd) "/../examples/units"))
4860 (substitute* "conf.py"
4861 ;; Don't use git.
4862 (("^SHA = check_output.*")
4863 (string-append "SHA = \"" ,version "\"\n"))
4864 ;; Don't fetch intersphinx files from the Internet
4865 (("^explicit_order_folders" m)
4866 (string-append "intersphinx_mapping = {}\n" m))
4867 (("'sphinx.ext.intersphinx',") "")
4868 ;; Disable URL embedding which requires internet access.
4869 (("'https://docs.scipy.org/doc/numpy'") "None")
4870 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4871 (invoke "make"
4872 "SPHINXBUILD=sphinx-build"
4873 "SPHINXOPTS=" ; don't abort on warnings
4874 "html" "texinfo")))
4875 (replace 'install
4876 (lambda* (#:key inputs outputs #:allow-other-keys)
4877 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4878 (doc (string-append data "/doc/python-matplotlib-" ,version))
4879 (info (string-append data "/info"))
4880 (html (string-append doc "/html")))
4881 (mkdir-p html)
4882 (mkdir-p info)
4883 (copy-recursively "build/html" html)
4884 (symlink (string-append html "/_images")
4885 (string-append info "/matplotlib-figures"))
4886 (with-directory-excursion "build/texinfo"
4887 (substitute* "matplotlib.texi"
4888 (("@image\\{([^,]*)" all file)
4889 (string-append "@image{matplotlib-figures/" file)))
4890 (symlink (string-append html "/_images")
4891 "./matplotlib-figures")
4892 (invoke "makeinfo" "--no-split"
4893 "-o" "matplotlib.info" "matplotlib.texi"))
4894 (install-file "build/texinfo/matplotlib.info" info))
4895 #t)))))
4896 (home-page (package-home-page python-matplotlib))
4897 (synopsis "Documentation for the python-matplotlib package")
4898 (description (package-description python-matplotlib))
4899 (license (package-license python-matplotlib))))
4900
4901 (define-public python2-matplotlib-documentation
4902 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4903 (package
4904 (inherit parent)
4905 (native-inputs
4906 (alist-delete "python-sphinx-copybutton"
4907 (package-native-inputs parent))))))
4908
4909 (define-public python-matplotlib-venn
4910 (package
4911 (name "python-matplotlib-venn")
4912 (version "0.11.5")
4913 (source
4914 (origin
4915 (method url-fetch)
4916 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4917 (sha256
4918 (base32
4919 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4920 (build-system python-build-system)
4921 (arguments '(#:tests? #f)) ; tests are not included
4922 (propagated-inputs
4923 `(("python-matplotlib" ,python-matplotlib)
4924 ("python-numpy" ,python-numpy)
4925 ("python-scipy" ,python-scipy)))
4926 (native-inputs
4927 `(("unzip" ,unzip)))
4928 (home-page "https://github.com/konstantint/matplotlib-venn")
4929 (synopsis "Plot area-proportional Venn diagrams")
4930 (description
4931 "This package provides tools for plotting area-proportional two- and
4932 three-way Venn diagrams in @code{matplotlib}.")
4933 (license license:expat)))
4934
4935 (define-public python-pysnptools
4936 (package
4937 (name "python-pysnptools")
4938 (version "0.4.11")
4939 (source
4940 (origin
4941 (method url-fetch)
4942 (uri (pypi-uri "pysnptools" version))
4943 (sha256
4944 (base32
4945 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4946 (build-system python-build-system)
4947 (arguments
4948 `(#:tests? #f ; no test data are included
4949 #:phases
4950 (modify-phases %standard-phases
4951 (replace 'check
4952 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4953 (if tests?
4954 (begin
4955 (add-installed-pythonpath inputs outputs)
4956 (invoke "python3" "pysnptools/test.py"))
4957 #t))))))
4958 (propagated-inputs
4959 `(("python-dill" ,python-dill)
4960 ("python-h5py" ,python-h5py)
4961 ("python-numpy" ,python-numpy)
4962 ("python-pandas" ,python-pandas)
4963 ("python-psutil" ,python-psutil)
4964 ("python-scipy" ,python-scipy)))
4965 (native-inputs
4966 `(("python-cython" ,python-cython)))
4967 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4968 (synopsis "Library for reading and manipulating genetic data")
4969 (description
4970 "PySnpTools is a library for reading and manipulating genetic data. It
4971 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4972 those files. It can also efficiently manipulate ranges of integers using set
4973 operators such as union, intersection, and difference.")
4974 (license license:asl2.0)))
4975
4976 (define-public python2-pysnptools
4977 (package-with-python2 python-pysnptools))
4978
4979 (define-public python-socksipy-branch
4980 (package
4981 (name "python-socksipy-branch")
4982 (version "1.01")
4983 (source
4984 (origin
4985 (method url-fetch)
4986 (uri (pypi-uri "SocksiPy-branch" version))
4987 (sha256
4988 (base32
4989 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4990 (build-system python-build-system)
4991 (arguments
4992 `(#:tests? #f)) ; There are no tests
4993 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4994 (synopsis "Python SOCKS module")
4995 (description
4996 "SocksiPy - A Python SOCKS client module. It provides a
4997 socket-like interface that supports connections to any TCP
4998 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4999 The original version was developed by Dan Haim, this is a
5000 branch created by Mario Vilas to address some open issues,
5001 as the original project seems to have been abandoned circa 2007.")
5002 (license license:bsd-3)))
5003
5004 (define-public python2-socksipy-branch
5005 (package-with-python2 python-socksipy-branch))
5006
5007 (define-public python-socksipychain
5008 (package
5009 (name "python-socksipychain")
5010 (version "2.1.2")
5011 (source
5012 (origin
5013 (method git-fetch)
5014 (uri (git-reference
5015 (url "https://github.com/pagekite/PySocksipyChain.git")
5016 (commit (string-append "v" version))))
5017 (file-name (git-file-name name version))
5018 (sha256
5019 (base32
5020 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5021 (build-system python-build-system)
5022 (arguments
5023 `(#:tests? #f)) ; Tests try to access the network.
5024 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5025 (synopsis "Python SOCKS module with chained proxies support")
5026 (description
5027 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5028 adds support for arbitrary chaining of proxy servers and various modes of
5029 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5030 a simple netcat replacement with chaining support.")
5031 (license license:bsd-3)))
5032
5033 (define-public python-pycodestyle
5034 (package
5035 (name "python-pycodestyle")
5036 (version "2.6.0")
5037 (source
5038 (origin
5039 (method url-fetch)
5040 (uri (pypi-uri "pycodestyle" version))
5041 (sha256
5042 (base32
5043 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))
5044 (build-system python-build-system)
5045 (arguments
5046 `(#:phases
5047 (modify-phases %standard-phases
5048 (replace 'check
5049 (lambda _
5050 (invoke "pytest" "-vv"))))))
5051 (native-inputs
5052 `(("python-pytest" ,python-pytest)))
5053 (home-page "https://pycodestyle.readthedocs.io/")
5054 (synopsis "Python style guide checker")
5055 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5056 Python code against some of the style conventions in
5057 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5058 (license license:expat)))
5059
5060 (define-public python2-pycodestyle
5061 (package-with-python2 python-pycodestyle))
5062
5063 (define-public python-multidict
5064 (package
5065 (name "python-multidict")
5066 (version "4.7.5")
5067 (source
5068 (origin
5069 (method url-fetch)
5070 (uri (pypi-uri "multidict" version))
5071 (sha256
5072 (base32
5073 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5074 (build-system python-build-system)
5075 (arguments
5076 '(#:modules ((ice-9 ftw)
5077 (srfi srfi-1)
5078 (srfi srfi-26)
5079 (guix build utils)
5080 (guix build python-build-system))
5081 #:phases (modify-phases %standard-phases
5082 (replace 'check
5083 (lambda* (#:key tests? #:allow-other-keys)
5084 (if tests?
5085 (begin
5086 (let ((libdir (find (cut string-prefix? "lib." <>)
5087 (scandir "build"))))
5088 (setenv "PYTHONPATH"
5089 (string-append "./build/" libdir ":"
5090 (getenv "PYTHONPATH")))
5091 (invoke "pytest" "-vv")))
5092 (format #t "test suite not run~%"))
5093 #t)))))
5094 (native-inputs
5095 `(("python-pytest" ,python-pytest)
5096 ("python-pytest-cov" ,python-pytest-cov)))
5097 (home-page "https://github.com/aio-libs/multidict/")
5098 (synopsis "Multidict implementation")
5099 (description "Multidict is dict-like collection of key-value pairs
5100 where key might be occurred more than once in the container.")
5101 (license license:asl2.0)))
5102
5103 (define-public python-orderedmultidict
5104 (package
5105 (name "python-orderedmultidict")
5106 (version "1.0")
5107 (source
5108 (origin
5109 (method url-fetch)
5110 (uri (pypi-uri "orderedmultidict" version))
5111 (sha256
5112 (base32
5113 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5114 (build-system python-build-system)
5115 (arguments
5116 `(#:phases
5117 (modify-phases %standard-phases
5118 (add-after 'unpack 'fix-tests
5119 (lambda _
5120 ;; The package uses nosetest for running the tests.
5121 ;; Adding this initfile allows to run the test suite
5122 ;; without requiring nosetest.
5123 (with-output-to-file "tests/__init__.py" newline)
5124 #t)))))
5125 (propagated-inputs
5126 `(("python-six" ,python-six)))
5127 (native-inputs
5128 `(("python-pycodestyle" ,python-pycodestyle)))
5129 (home-page "https://github.com/gruns/orderedmultidict")
5130 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5131 (description "This package contains a library for ordered multivalue
5132 dictionaries. A multivalue dictionary is a dictionary that can store
5133 multiple values for the same key. An ordered multivalue dictionary is a
5134 multivalue dictionary that retains the order of insertions and deletions.")
5135 (license license:unlicense)))
5136
5137 (define-public python2-orderedmultidict
5138 (package-with-python2 python-orderedmultidict))
5139
5140 (define-public python-autopep8
5141 (package
5142 (name "python-autopep8")
5143 (version "1.5.3")
5144 (source
5145 (origin
5146 (method url-fetch)
5147 (uri (pypi-uri "autopep8" version))
5148 (sha256
5149 (base32
5150 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5151 (build-system python-build-system)
5152 (propagated-inputs
5153 `(("python-pycodestyle" ,python-pycodestyle)
5154 ("python-toml" ,python-toml)))
5155 (home-page "https://github.com/hhatto/autopep8")
5156 (synopsis "Format Python code according to the PEP 8 style guide")
5157 (description
5158 "@code{autopep8} automatically formats Python code to conform to
5159 the PEP 8 style guide. It uses the pycodestyle utility to determine
5160 what parts of the code needs to be formatted. @code{autopep8} is
5161 capable of fixing most of the formatting issues that can be reported
5162 by pycodestyle.")
5163 (license (license:non-copyleft
5164 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5165
5166 (define-public python2-autopep8
5167 (package-with-python2 python-autopep8))
5168
5169 (define-public python-distlib
5170 (package
5171 (name "python-distlib")
5172 (version "0.3.0")
5173 (source
5174 (origin
5175 (method url-fetch)
5176 (uri (pypi-uri "distlib" version ".zip"))
5177 (sha256
5178 (base32
5179 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5180 (build-system python-build-system)
5181 (arguments
5182 `(#:phases
5183 (modify-phases %standard-phases
5184 (add-before 'build 'no-/bin/sh
5185 (lambda _
5186 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5187 (("/bin/sh") (which "sh")))
5188 #t))
5189 (add-before 'check 'prepare-test-env
5190 (lambda _
5191 (setenv "HOME" "/tmp")
5192 ;; NOTE: Any value works, the variable just has to be present.
5193 (setenv "SKIP_ONLINE" "1")
5194 #t)))))
5195 (native-inputs `(("unzip" ,unzip)))
5196 (home-page "https://bitbucket.org/pypa/distlib")
5197 (synopsis "Distribution utilities")
5198 (description "Distlib is a library which implements low-level functions that
5199 relate to packaging and distribution of Python software. It is intended to be
5200 used as the basis for third-party packaging tools.")
5201 (license license:psfl)))
5202
5203 (define-public python-distutils-extra
5204 (package
5205 (name "python-distutils-extra")
5206 (version "2.38")
5207 (source
5208 (origin
5209 (method url-fetch)
5210 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5211 version "/+download/python-distutils-extra-"
5212 version ".tar.gz"))
5213 (sha256
5214 (base32
5215 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5216 (build-system python-build-system)
5217 (home-page "https://launchpad.net/python-distutils-extra/")
5218 (synopsis "Enhancements to Python's distutils")
5219 (description
5220 "The python-distutils-extra module enables you to easily integrate
5221 gettext support, themed icons, and scrollkeeper-based documentation into
5222 Python's distutils.")
5223 (license license:gpl2)))
5224
5225 (define-public python2-distutils-extra
5226 (package-with-python2 python-distutils-extra))
5227
5228 (define-public python2-elib.intl
5229 (package
5230 (name "python2-elib.intl")
5231 (version "0.0.3")
5232 (source
5233 (origin
5234 ;; This project doesn't tag releases or publish tarballs, so we take
5235 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5236 (method git-fetch)
5237 (uri (git-reference
5238 (url "https://github.com/dieterv/elib.intl.git")
5239 (commit "d09997cfef")))
5240 (file-name (string-append name "-" version "-checkout"))
5241 (sha256
5242 (base32
5243 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5244 (build-system python-build-system)
5245 (arguments
5246 ;; incompatible with Python 3 (exception syntax)
5247 `(#:python ,python-2
5248 #:tests? #f))
5249 (home-page "https://github.com/dieterv/elib.intl")
5250 (synopsis "Enhanced internationalization for Python")
5251 (description
5252 "The elib.intl module provides enhanced internationalization (I18N)
5253 services for your Python modules and applications.")
5254 (license license:lgpl3+)))
5255
5256 (define-public python-olefile
5257 (package
5258 (name "python-olefile")
5259 (version "0.46")
5260 (source
5261 (origin
5262 (method url-fetch)
5263 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5264 "download/v" version "/olefile-" version ".tar.gz"))
5265 (file-name (string-append name "-" version ".tar.gz"))
5266 (sha256
5267 (base32
5268 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5269 (build-system python-build-system)
5270 (home-page "https://www.decalage.info/python/olefileio")
5271 (synopsis "Read and write Microsoft OLE2 files.")
5272 (description
5273 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5274 Storage or Compound Document, Microsoft Office). It is an improved version of
5275 the OleFileIO module from PIL, the Python Image Library.")
5276 (license license:bsd-3)))
5277
5278 (define-public python2-olefile
5279 (package-with-python2 python-olefile))
5280
5281 (define-public python-pillow
5282 (package
5283 (name "python-pillow")
5284 (version "6.2.1")
5285 (source
5286 (origin
5287 (method url-fetch)
5288 (uri (pypi-uri "Pillow" version))
5289 (sha256
5290 (base32
5291 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5292 (build-system python-build-system)
5293 (native-inputs
5294 `(("python-pytest" ,python-pytest)))
5295 (inputs
5296 `(("freetype" ,freetype)
5297 ("lcms" ,lcms)
5298 ("libjpeg" ,libjpeg-turbo)
5299 ("libtiff" ,libtiff)
5300 ("libwebp" ,libwebp)
5301 ("openjpeg" ,openjpeg)
5302 ("zlib" ,zlib)))
5303 (propagated-inputs
5304 `(("python-olefile" ,python-olefile)))
5305 (arguments
5306 `(#:phases
5307 (modify-phases %standard-phases
5308 (add-after 'unpack 'patch-ldconfig
5309 (lambda _
5310 (substitute* "setup.py"
5311 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5312 (replace 'check
5313 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5314 (if tests?
5315 (begin
5316 (setenv "HOME" (getcwd))
5317 ;; Make installed package available for running the tests.
5318 (add-installed-pythonpath inputs outputs)
5319 (invoke "python" "selftest.py" "--installed")
5320 (invoke "python" "-m" "pytest" "-vv"))
5321 #t))))))
5322 (home-page "https://python-pillow.org")
5323 (synopsis "Fork of the Python Imaging Library")
5324 (description
5325 "The Python Imaging Library adds image processing capabilities to your
5326 Python interpreter. This library provides extensive file format support, an
5327 efficient internal representation, and fairly powerful image processing
5328 capabilities. The core image library is designed for fast access to data
5329 stored in a few basic pixel formats. It should provide a solid foundation for
5330 a general image processing tool.")
5331 (license (license:x11-style
5332 "http://www.pythonware.com/products/pil/license.htm"
5333 "The PIL Software License"))))
5334
5335 (define-public python2-pillow
5336 (package-with-python2 python-pillow))
5337
5338 (define-public python-roifile
5339 (package
5340 (name "python-roifile")
5341 (version "2020.5.28")
5342 (source
5343 (origin
5344 (method url-fetch)
5345 (uri (pypi-uri "roifile" version))
5346 (sha256
5347 (base32
5348 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
5349 (build-system python-build-system)
5350 (arguments `(#:tests? #f)) ; there are none
5351 (propagated-inputs
5352 `(("python-numpy" ,python-numpy)))
5353 (home-page "https://www.lfd.uci.edu/~gohlke/")
5354 (synopsis "Read and write ImageJ ROI format")
5355 (description "Roifile is a Python library to read, write, create, and plot
5356 ImageJ ROIs, an undocumented and ImageJ application specific format to store
5357 regions of interest, geometric shapes, paths, text, etc for image overlays.")
5358 (license license:bsd-3)))
5359
5360 (define-public python-tifffile
5361 (package
5362 (name "python-tifffile")
5363 (version "2020.6.3")
5364 (source
5365 (origin
5366 (method url-fetch)
5367 (uri (pypi-uri "tifffile" version))
5368 (sha256
5369 (base32
5370 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
5371 (build-system python-build-system)
5372 ;; Tests require lfdfiles, which depends on tifffile
5373 (arguments `(#:tests? #f))
5374 (propagated-inputs
5375 `(("python-numpy" ,python-numpy)
5376 ;;("python-lfdfiles" ,python-lfdfiles)
5377 ("python-roifile" ,python-roifile)))
5378 (home-page "https://www.lfd.uci.edu/~gohlke/")
5379 (synopsis "Read and write TIFF(r) files")
5380 (description "This package lets you read image and metadata from many
5381 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
5382 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
5383 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
5384 (license license:bsd-3)))
5385
5386 (define-public python-lfdfiles
5387 (package
5388 (name "python-lfdfiles")
5389 (version "2020.1.1")
5390 (source
5391 (origin
5392 (method url-fetch)
5393 (uri (pypi-uri "lfdfiles" version))
5394 (sha256
5395 (base32
5396 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
5397 (build-system python-build-system)
5398 (propagated-inputs
5399 `(("python-click" ,python-click)
5400 ("python-numpy" ,python-numpy)
5401 ("python-tifffile" ,python-tifffile)))
5402 (home-page "https://www.lfd.uci.edu/~gohlke/")
5403 (synopsis "Work with LFD data files")
5404 (description
5405 "Lfdfiles is a Python library and console script for reading, writing,
5406 converting, and viewing many of the proprietary file formats used to store
5407 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
5408 (license license:bsd-3)))
5409
5410 (define-public python-imageio
5411 (package
5412 (name "python-imageio")
5413 (version "2.8.0")
5414 (source
5415 (origin
5416 (method url-fetch)
5417 (uri (pypi-uri "imageio" version))
5418 (sha256
5419 (base32
5420 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
5421 (build-system python-build-system)
5422 (arguments
5423 `(#:tests? #f ; many tests require online data
5424 #:phases
5425 (modify-phases %standard-phases
5426 (replace 'check
5427 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5428 (if tests?
5429 (begin
5430 ;; Make installed package available for running the tests.
5431 (add-installed-pythonpath inputs outputs)
5432 (invoke "pytest" "-vv"))
5433 #t))))))
5434 (propagated-inputs
5435 `(("python-numpy" ,python-numpy)
5436 ("python-pillow" ,python-pillow)
5437 ("python-psutil" ,python-psutil)))
5438 (native-inputs
5439 `(("python-pytest" ,python-pytest)))
5440 (home-page "https://imageio.github.io/")
5441 (synopsis "Library for reading and writing a wide range of image data")
5442 (description
5443 "Imageio is a Python library that provides an easy interface to read and
5444 write a wide range of image data, including animated images, video, volumetric
5445 data, and scientific formats.")
5446 (license license:bsd-2)))
5447
5448 (define-public python-pycparser
5449 (package
5450 (name "python-pycparser")
5451 (version "2.20")
5452 (source
5453 (origin
5454 (method url-fetch)
5455 (uri (pypi-uri "pycparser" version))
5456 (sha256
5457 (base32
5458 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5459 (outputs '("out" "doc"))
5460 (build-system python-build-system)
5461 (native-inputs
5462 `(("pkg-config" ,pkg-config)))
5463 (arguments
5464 `(#:phases
5465 (modify-phases %standard-phases
5466 (replace 'check
5467 (lambda _
5468 (with-directory-excursion "tests"
5469 (invoke "python" "all_tests.py"))
5470 #t))
5471 (add-after 'install 'install-doc
5472 (lambda* (#:key outputs #:allow-other-keys)
5473 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5474 (doc (string-append data "/doc/" ,name "-" ,version))
5475 (examples (string-append doc "/examples")))
5476 (mkdir-p examples)
5477 (for-each (lambda (file)
5478 (copy-file (string-append "." file)
5479 (string-append doc file)))
5480 '("/README.rst" "/CHANGES" "/LICENSE"))
5481 (copy-recursively "examples" examples)
5482 #t))))))
5483 (home-page "https://github.com/eliben/pycparser")
5484 (synopsis "C parser in Python")
5485 (description
5486 "Pycparser is a complete parser of the C language, written in pure Python
5487 using the PLY parsing library. It parses C code into an AST and can serve as
5488 a front-end for C compilers or analysis tools.")
5489 (license license:bsd-3)))
5490
5491 (define-public python2-pycparser
5492 (package-with-python2 python-pycparser))
5493
5494 (define-public python-pywavelets
5495 (package
5496 (name "python-pywavelets")
5497 (version "1.1.1")
5498 (home-page "https://github.com/PyWavelets/pywt")
5499 (source (origin
5500 (method url-fetch)
5501 (uri (pypi-uri "PyWavelets" version))
5502 (sha256
5503 (base32
5504 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
5505 (build-system python-build-system)
5506 (arguments
5507 '(#:modules ((ice-9 ftw)
5508 (srfi srfi-1)
5509 (srfi srfi-26)
5510 (guix build utils)
5511 (guix build python-build-system))
5512 #:phases
5513 (modify-phases %standard-phases
5514 (replace 'check
5515 (lambda _
5516 (let ((cwd (getcwd))
5517 (libdir (find (cut string-prefix? "lib." <>)
5518 (scandir "build"))))
5519 (with-directory-excursion (string-append cwd "/build/" libdir)
5520 (invoke "pytest" "-vv"))))))))
5521 (native-inputs
5522 `(("python-matplotlib" ,python-matplotlib) ;for tests
5523 ("python-pytest" ,python-pytest)))
5524 (propagated-inputs
5525 `(("python-numpy" ,python-numpy)))
5526 (synopsis "Wavelet transforms in Python")
5527 (description
5528 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5529 mathematical basis functions that are localized in both time and frequency.
5530 Wavelet transforms are time-frequency transforms employing wavelets. They are
5531 similar to Fourier transforms, the difference being that Fourier transforms are
5532 localized only in frequency instead of in time and frequency.")
5533 (license license:expat)))
5534
5535 (define-public python2-pywavelets
5536 (package-with-python2 python-pywavelets))
5537
5538 (define-public python-pywinrm
5539 (package
5540 (name "python-pywinrm")
5541 (version "0.4.1")
5542 (source
5543 (origin
5544 (method url-fetch)
5545 (uri (pypi-uri "pywinrm" version))
5546 (sha256
5547 (base32
5548 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5549 (build-system python-build-system)
5550 (propagated-inputs
5551 `(("python-six" ,python-six)
5552 ("python-requests_ntlm" ,python-requests_ntlm)
5553 ("python-xmltodict" ,python-xmltodict)
5554 ("python-kerberos" ,python-kerberos)))
5555 (native-inputs
5556 `(("python-mock" ,python-mock)
5557 ("python-pytest" ,python-pytest)))
5558 (home-page "https://github.com/diyan/pywinrm/")
5559 (synopsis
5560 "Python library for Windows Remote Management (WinRM)")
5561 (description
5562 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5563 service. It allows you to invoke commands on target Windows machines from
5564 any machine that can run Python.")
5565 (license license:expat)))
5566
5567 (define-public python-xcffib
5568 (package
5569 (name "python-xcffib")
5570 (version "0.6.0")
5571 (source
5572 (origin
5573 (method url-fetch)
5574 (uri (pypi-uri "xcffib" version))
5575 (sha256
5576 (base32
5577 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5578 (build-system python-build-system)
5579 (inputs
5580 `(("libxcb" ,libxcb)))
5581 (propagated-inputs
5582 `(("python-cffi" ,python-cffi) ; used at run time
5583 ("python-six" ,python-six)))
5584 (arguments
5585 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5586 #:tests? #f
5587 #:phases
5588 (modify-phases %standard-phases
5589 (add-after 'unpack 'fix-libxcb-path
5590 (lambda* (#:key inputs #:allow-other-keys)
5591 (let ((libxcb (assoc-ref inputs "libxcb")))
5592 (substitute* '("xcffib/__init__.py")
5593 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5594 #t)))
5595 (add-after 'install 'install-doc
5596 (lambda* (#:key outputs #:allow-other-keys)
5597 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5598 "/doc/" ,name "-" ,version)))
5599 (mkdir-p doc)
5600 (copy-file "README.md"
5601 (string-append doc "/README.md"))
5602 #t))))))
5603 (home-page "https://github.com/tych0/xcffib")
5604 (synopsis "XCB Python bindings")
5605 (description
5606 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5607 support for Python 3 and PyPy. It is based on cffi.")
5608 (license license:expat)))
5609
5610 (define-public python2-xcffib
5611 (package-with-python2 python-xcffib))
5612
5613 (define-public python-cairocffi
5614 (package
5615 (name "python-cairocffi")
5616 (version "0.9.0")
5617 (source
5618 (origin
5619 (method url-fetch)
5620 (uri (pypi-uri "cairocffi" version))
5621 (sha256
5622 (base32
5623 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5624 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5625 (build-system python-build-system)
5626 (outputs '("out" "doc"))
5627 (inputs
5628 `(("glib" ,glib)
5629 ("gtk+" ,gtk+)
5630 ("gdk-pixbuf" ,gdk-pixbuf)
5631 ("cairo" ,cairo)
5632 ("pango" ,pango)))
5633 (native-inputs
5634 `(("pkg-config" ,pkg-config)
5635 ("python-pytest" ,python-pytest)
5636 ("python-pytest-cov" ,python-pytest-cov)
5637 ("python-pytest-runner" ,python-pytest-runner)
5638 ("python-sphinx" ,python-sphinx)
5639 ("python-docutils" ,python-docutils)))
5640 (propagated-inputs
5641 `(("python-xcffib" ,python-xcffib))) ; used at run time
5642 (arguments
5643 `(#:phases
5644 (modify-phases %standard-phases
5645 (add-after 'unpack 'patch-paths
5646 (lambda* (#:key inputs outputs #:allow-other-keys)
5647 (substitute* (find-files "." "\\.py$")
5648 (("dlopen\\(ffi, 'cairo'")
5649 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5650 "/lib/libcairo.so.2'"))
5651 (("dlopen\\(ffi, 'gdk-3'")
5652 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5653 "/lib/libgtk-3.so.0'"))
5654 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5655 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5656 "/lib/libgdk_pixbuf-2.0.so.0'"))
5657 (("dlopen\\(ffi, 'glib-2.0'")
5658 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5659 "/lib/libglib-2.0.so.0'"))
5660 (("dlopen\\(ffi, 'gobject-2.0'")
5661 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5662 "/lib/libgobject-2.0.so.0'"))
5663 (("dlopen\\(ffi, 'pangocairo-1.0'")
5664 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5665 "/lib/libpangocairo-1.0.so.0'"))
5666 (("dlopen\\(ffi, 'pango-1.0'")
5667 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5668 "/lib/libpango-1.0.so.0'")))
5669 #t))
5670 (add-after 'install 'install-doc
5671 (lambda* (#:key inputs outputs #:allow-other-keys)
5672 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5673 (doc (string-append data "/doc/" ,name "-" ,version))
5674 (html (string-append doc "/html")))
5675 (setenv "LD_LIBRARY_PATH"
5676 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5677 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5678 (setenv "LANG" "en_US.UTF-8")
5679 (mkdir-p html)
5680 (for-each (lambda (file)
5681 (copy-file (string-append "." file)
5682 (string-append doc file)))
5683 '("/README.rst" "/CHANGES" "/LICENSE"))
5684 (system* "python" "setup.py" "build_sphinx")
5685 (copy-recursively "docs/_build/html" html)
5686 #t))))))
5687 (home-page "https://github.com/Kozea/cairocffi")
5688 (synopsis "Python bindings and object-oriented API for Cairo")
5689 (description
5690 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5691 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5692 graphics library with support for multiple backends including image buffers,
5693 PNG, PostScript, PDF, and SVG file output.")
5694 (license license:bsd-3)))
5695
5696 (define-public python2-cairocffi
5697 (package-with-python2 python-cairocffi))
5698
5699 (define-public python-decorator
5700 (package
5701 (name "python-decorator")
5702 (version "4.3.0")
5703 (source
5704 (origin
5705 (method url-fetch)
5706 (uri (pypi-uri "decorator" version))
5707 (sha256
5708 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5709 (build-system python-build-system)
5710 (home-page "https://pypi.org/project/decorator/")
5711 (synopsis "Python module to simplify usage of decorators")
5712 (description
5713 "The aim of the decorator module is to simplify the usage of decorators
5714 for the average programmer, and to popularize decorators usage giving examples
5715 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5716 etc. The core of this module is a decorator factory.")
5717 (license license:expat)))
5718
5719 (define-public python2-decorator
5720 (package-with-python2 python-decorator))
5721
5722 (define-public python-drmaa
5723 (package
5724 (name "python-drmaa")
5725 (version "0.7.7")
5726 (source
5727 (origin
5728 (method url-fetch)
5729 (uri (pypi-uri "drmaa" version))
5730 (sha256
5731 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5732 (build-system python-build-system)
5733 ;; The test suite requires libdrmaa which is provided by the cluster
5734 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5735 ;; should be set to the path of the libdrmaa library.
5736 (arguments '(#:tests? #f))
5737 (native-inputs
5738 `(("python-nose" ,python-nose)))
5739 (home-page "https://pypi.org/project/drmaa/")
5740 (synopsis "Python bindings for the DRMAA library")
5741 (description
5742 "A Python package for Distributed Resource Management (DRM) job
5743 submission and control. This package is an implementation of the DRMAA 1.0
5744 Python language binding specification.")
5745 (license license:bsd-3)))
5746
5747 (define-public python2-drmaa
5748 (package-with-python2 python-drmaa))
5749
5750 (define-public python-grako
5751 (package
5752 (name "python-grako")
5753 (version "3.99.9")
5754 (source
5755 (origin
5756 (method url-fetch)
5757 (uri
5758 (pypi-uri "grako" version ".zip"))
5759 (sha256
5760 (base32
5761 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5762 (build-system python-build-system)
5763 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5764 (native-inputs
5765 `(("unzip" ,unzip)
5766 ("python-pytest" ,python-pytest)
5767 ("python-pytest-runner" ,python-pytest-runner)))
5768 (home-page "https://bitbucket.org/neogeny/grako")
5769 (synopsis "EBNF parser generator")
5770 (description
5771 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5772 memoizing PEG/Packrat parser in Python.")
5773 (license license:bsd-3)))
5774
5775 (define-public python2-grako
5776 (package-with-python2 python-grako))
5777
5778 (define-public python-gridmap
5779 (package
5780 (name "python-gridmap")
5781 (version "0.14.0")
5782 (source
5783 (origin
5784 (method git-fetch)
5785 (uri (git-reference
5786 (url "https://github.com/pygridtools/gridmap.git")
5787 (commit (string-append "v" version))))
5788 (file-name (git-file-name name version))
5789 (sha256
5790 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
5791 (build-system python-build-system)
5792 (arguments
5793 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5794 (propagated-inputs
5795 `(("python-psutil" ,python-psutil)
5796 ("python-drmaa" ,python-drmaa)
5797 ("python-pyzmq" ,python-pyzmq)))
5798 (home-page "https://github.com/pygridtools/gridmap")
5799 (synopsis "Create jobs on a cluster directly from Python")
5800 (description
5801 "Gridmap is a Python package to allow you to easily create jobs on the
5802 cluster directly from Python. You can directly map Python functions onto the
5803 cluster without needing to write any wrapper code yourself.")
5804 (license license:gpl3+)))
5805
5806 (define-public python2-gridmap
5807 (package-with-python2 python-gridmap))
5808
5809 (define-public python-honcho
5810 (package
5811 (name "python-honcho")
5812 (version "1.0.1")
5813 (source
5814 (origin
5815 (method git-fetch)
5816 (uri (git-reference
5817 (url "https://github.com/nickstenning/honcho.git")
5818 (commit (string-append "v" version))))
5819 (file-name (git-file-name name version))
5820 (sha256
5821 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5822 (build-system python-build-system)
5823 (native-inputs
5824 `(("python-pytest" ,python-pytest)
5825 ("python-mock" ,python-mock)
5826 ("python-tox" ,python-tox)
5827 ("which" ,which))) ;for tests
5828 (propagated-inputs
5829 `(("python-jinja2" ,python-jinja2)))
5830 (arguments
5831 `(#:phases
5832 (modify-phases %standard-phases
5833 (delete 'check)
5834 (add-after 'install 'check
5835 (lambda* (#:key outputs inputs #:allow-other-keys)
5836 ;; fix honcho path in testsuite
5837 (substitute* "tests/conftest.py"
5838 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5839 "/bin/honcho" "'")))
5840 ;; It's easier to run tests after install.
5841 ;; Make installed package available for running the tests
5842 (add-installed-pythonpath inputs outputs)
5843 (invoke "py.test" "-v"))))))
5844 (home-page "https://github.com/nickstenning/honcho")
5845 (synopsis "Manage Procfile-based applications")
5846 (description
5847 "A Procfile is a file which describes how to run an application
5848 consisting of several processes. honcho starts all listed processes.
5849 The output of all running processes is collected by honcho and
5850 displayed.")
5851 (license license:expat)))
5852
5853 (define-public python2-honcho
5854 (package-with-python2 python-honcho))
5855
5856 (define-public python-pexpect
5857 (package
5858 (name "python-pexpect")
5859 (version "4.8.0")
5860 (source
5861 (origin
5862 (method url-fetch)
5863 (uri (pypi-uri "pexpect" version))
5864 (sha256
5865 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5866 (build-system python-build-system)
5867 (arguments
5868 `(#:phases
5869 (modify-phases %standard-phases
5870 (add-before 'check 'prepare-tests
5871 (lambda _
5872 (substitute* (find-files "tests")
5873 (("/bin/ls") (which "ls"))
5874 (("/bin/echo") (which "echo"))
5875 (("/bin/which") (which "which"))
5876 ;; Many tests try to use the /bin directory which
5877 ;; is not present in the build environment.
5878 ;; Use one that's non-empty and unlikely to change.
5879 (("/bin'") "/dev'")
5880 ;; Disable failing test. See upstream bug report
5881 ;; https://github.com/pexpect/pexpect/issues/568
5882 (("def test_bash") "def _test_bash"))
5883 ;; XXX: Socket connection test gets "Connection reset by peer".
5884 ;; Why does it not work? Delete for now.
5885 (delete-file "tests/test_socket.py")
5886 #t))
5887 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5888 (native-inputs
5889 `(("python-nose" ,python-nose)
5890 ("python-pytest" ,python-pytest)
5891 ("man-db" ,man-db)
5892 ("which" ,which)
5893 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5894 (propagated-inputs
5895 `(("python-ptyprocess" ,python-ptyprocess)))
5896 (home-page "http://pexpect.readthedocs.org/")
5897 (synopsis "Controlling interactive console applications")
5898 (description
5899 "Pexpect is a pure Python module for spawning child applications;
5900 controlling them; and responding to expected patterns in their output.
5901 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5902 child application and control it as if a human were typing commands.")
5903 (license license:isc)))
5904
5905 (define-public python2-pexpect
5906 (package-with-python2 python-pexpect))
5907
5908 (define-public python-setuptools-scm
5909 (package
5910 (name "python-setuptools-scm")
5911 (version "3.4.3")
5912 (source (origin
5913 (method url-fetch)
5914 (uri (pypi-uri "setuptools_scm" version))
5915 (sha256
5916 (base32
5917 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5918 (build-system python-build-system)
5919 (home-page "https://github.com/pypa/setuptools_scm/")
5920 (synopsis "Manage Python package versions in SCM metadata")
5921 (description
5922 "Setuptools_scm handles managing your Python package versions in
5923 @dfn{software configuration management} (SCM) metadata instead of declaring
5924 them as the version argument or in a SCM managed file.")
5925 (license license:expat)))
5926
5927 (define-public python2-setuptools-scm
5928 (package-with-python2 python-setuptools-scm))
5929
5930 (define-public python-sexpdata
5931 (package
5932 (name "python-sexpdata")
5933 (version "0.0.3")
5934 (source
5935 (origin
5936 (method url-fetch)
5937 (uri (pypi-uri "sexpdata" version))
5938 (sha256
5939 (base32
5940 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
5941 (build-system python-build-system)
5942 (home-page "https://github.com/jd-boyd/sexpdata")
5943 (synopsis "S-expression parser for Python")
5944 (description
5945 "Sexpdata is an S-expression parser/serializer. It has load and dump
5946 functions like pickle, json or PyYAML module.")
5947 (license license:bsd-3)))
5948
5949 (define-public python-pathlib2
5950 (package
5951 (name "python-pathlib2")
5952 (version "2.3.3")
5953 (source
5954 (origin
5955 (method url-fetch)
5956 (uri (pypi-uri "pathlib2" version))
5957 (sha256
5958 (base32
5959 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5960 (build-system python-build-system)
5961 (propagated-inputs
5962 `(("python-scandir" ,python-scandir)
5963 ("python-six" ,python-six)))
5964 (home-page "https://pypi.org/project/pathlib2/")
5965 (synopsis "Object-oriented file system paths")
5966 (description "The goal of pathlib2 is to provide a backport of the
5967 standard @code{pathlib} module which tracks the standard library module, so
5968 all the newest features of the standard @code{pathlib} can be used also on
5969 older Python versions.")
5970 (license license:expat)))
5971
5972 (define-public python2-importlib-resources
5973 (package
5974 (name "python2-importlib-resources")
5975 (version "1.0.2")
5976 (source (origin
5977 (method url-fetch)
5978 (uri (pypi-uri "importlib_resources" version))
5979 (sha256
5980 (base32
5981 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5982 (build-system python-build-system)
5983 (arguments
5984 `(#:python ,python-2
5985 #:phases (modify-phases %standard-phases
5986 ;; The build system tests for python-wheel, but it is
5987 ;; not required for Guix nor the test suite. Just drop
5988 ;; it to make bootstrapping pytest easier.
5989 (add-after 'unpack 'drop-wheel-dependency
5990 (lambda _
5991 (substitute* "setup.cfg"
5992 (("^[[:blank:]]+wheel")
5993 ""))
5994 #t)))))
5995 (propagated-inputs
5996 `(("python-pathlib2" ,python2-pathlib2)
5997 ("python-typing" ,python2-typing)))
5998 (home-page "https://gitlab.com/python-devs/importlib_resources")
5999 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6000 (description
6001 "This package provides an implementation of @code{importlib.resources}
6002 for older versions of Python.")
6003 (license license:asl2.0)))
6004
6005 ;; For importlib-metadata-bootstrap below.
6006 (define-public python2-importlib-resources-bootstrap
6007 (hidden-package
6008 (package/inherit
6009 python2-importlib-resources
6010 (name "python2-importlib-resources-bootstrap")
6011 (propagated-inputs
6012 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6013 ("python-typing" ,python2-typing))))))
6014
6015 (define-public python-importlib-metadata
6016 (package
6017 (name "python-importlib-metadata")
6018 (version "1.5.0")
6019 (source
6020 (origin
6021 (method url-fetch)
6022 (uri (pypi-uri "importlib_metadata" version))
6023 (sha256
6024 (base32
6025 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6026 (build-system python-build-system)
6027 (propagated-inputs
6028 `(("python-zipp" ,python-zipp)))
6029 (native-inputs
6030 `(("python-setuptools-scm" ,python-setuptools-scm)
6031 ("python-pyfakefs" ,python-pyfakefs)
6032 ("python-packaging" ,python-packaging)))
6033 (home-page "https://importlib-metadata.readthedocs.io/")
6034 (synopsis "Read metadata from Python packages")
6035 (description
6036 "@code{importlib_metadata} is a library which provides an API for
6037 accessing an installed Python package's metadata, such as its entry points or
6038 its top-level name. This functionality intends to replace most uses of
6039 @code{pkg_resources} entry point API and metadata API. Along with
6040 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6041 need to use the older and less efficient @code{pkg_resources} package.")
6042 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6043 (license license:asl2.0)))
6044
6045 (define-public python2-importlib-metadata
6046 (let ((base (package-with-python2 (strip-python2-variant
6047 python-importlib-metadata))))
6048 (package/inherit
6049 base
6050 (name "python2-importlib-metadata")
6051 (native-inputs
6052 `(("python-setuptools-scm" ,python2-setuptools-scm)
6053 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6054 ("python-packaging" ,python2-packaging-bootstrap)))
6055 (propagated-inputs
6056 `(("python-configparser" ,python2-configparser)
6057 ("python-contextlib2" ,python2-contextlib2)
6058 ("python-importlib-resources" ,python2-importlib-resources)
6059 ("python-pathlib2" ,python2-pathlib2)
6060 ,@(package-propagated-inputs base))))))
6061
6062 ;; This package is used by python2-pytest, and thus must not depend on it.
6063 (define-public python2-importlib-metadata-bootstrap
6064 (hidden-package
6065 (package/inherit
6066 python2-importlib-metadata
6067 (name "python2-importlib-metadata-bootstrap")
6068 (arguments
6069 `(#:tests? #f
6070 ,@(package-arguments python2-importlib-metadata)))
6071 (propagated-inputs
6072 `(("python-zipp" ,python2-zipp-bootstrap)
6073 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6074 ("python-configparser" ,python2-configparser)
6075 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6076 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6077
6078 (define-public python-importmagic
6079 (package
6080 (name "python-importmagic")
6081 (version "0.1.7")
6082 (source
6083 (origin
6084 (method url-fetch)
6085 (uri (pypi-uri "importmagic" version))
6086 (sha256
6087 (base32
6088 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6089 (build-system python-build-system)
6090 (home-page "https://github.com/alecthomas/importmagic")
6091 (synopsis "Library for adding, removing and managing Python imports")
6092 (description
6093 "Importmagic is a Python library for automatically managing imports by
6094 finding unresolved symbols in Python code and their corresponding imports.")
6095 (license license:bsd-3)))
6096
6097 (define-public python-jaraco-packaging
6098 (package
6099 (name "python-jaraco-packaging")
6100 (version "6.1")
6101 (source
6102 (origin
6103 (method url-fetch)
6104 (uri (pypi-uri "jaraco.packaging" version))
6105 (sha256
6106 (base32
6107 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6108 (build-system python-build-system)
6109 (propagated-inputs
6110 `(("python-pytest" ,python-pytest)
6111 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6112 ("python-pytest-flake8" ,python-pytest-flake8)
6113 ("python-rst.linker" ,python-rst.linker)
6114 ("python-setuptools" ,python-setuptools)
6115 ("python-setuptools-scm" ,python-setuptools-scm)
6116 ("python-six" ,python-six)
6117 ("python-sphinx" ,python-sphinx)))
6118 (home-page "https://github.com/jaraco/jaraco.packaging")
6119 (synopsis "Tools to supplement packaging Python releases")
6120 (description
6121 "This package provides various tools to supplement packaging Python
6122 releases.")
6123 (license license:expat)))
6124
6125 (define-public python-pathpy
6126 (package
6127 (name "python-pathpy")
6128 (version "11.5.1")
6129 (source
6130 (origin
6131 (method url-fetch)
6132 (uri (pypi-uri "path.py" version))
6133 (sha256
6134 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6135 (outputs '("out" "doc"))
6136 (build-system python-build-system)
6137 (propagated-inputs
6138 `(("python-appdirs" ,python-appdirs)
6139 ("python-importlib-metadata" ,python-importlib-metadata)))
6140 (native-inputs
6141 `(("python-setuptools-scm" ,python-setuptools-scm)
6142 ("python-sphinx" ,python-sphinx)
6143 ("python-rst.linker" ,python-rst.linker)
6144 ("python-pytest" ,python-pytest)
6145 ("python-pytest-runner" ,python-pytest-runner)
6146 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6147 (arguments
6148 `(#:phases
6149 (modify-phases %standard-phases
6150 (add-after 'build 'build-doc
6151 (lambda _
6152 (setenv "LANG" "en_US.UTF-8")
6153 (invoke "python" "setup.py" "build_sphinx")))
6154 (add-after 'install 'install-doc
6155 (lambda* (#:key outputs #:allow-other-keys)
6156 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6157 (doc (string-append data "/doc/" ,name "-" ,version))
6158 (html (string-append doc "/html")))
6159 (mkdir-p html)
6160 (for-each (lambda (file)
6161 (copy-file file (string-append doc "/" file)))
6162 '("README.rst" "CHANGES.rst"))
6163 (copy-recursively "build/sphinx/html" html)
6164 #t)))
6165 (replace 'check
6166 (lambda _
6167 ;; The import time test aborts if an import takes longer than
6168 ;; 100ms. It may very well take a little longer than that.
6169 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6170 (home-page "https://github.com/jaraco/path.py")
6171 (synopsis "Python module wrapper for built-in os.path")
6172 (description
6173 "@code{path.py} implements path objects as first-class entities, allowing
6174 common operations on files to be invoked on those path objects directly.")
6175 (license license:expat)))
6176
6177 (define-public python2-pathpy
6178 (package-with-python2 python-pathpy))
6179
6180 (define-public python-simplegeneric
6181 (package
6182 (name "python-simplegeneric")
6183 (version "0.8.1")
6184 (source
6185 (origin
6186 (method url-fetch)
6187 (uri (pypi-uri "simplegeneric" version ".zip"))
6188 (sha256
6189 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6190 (build-system python-build-system)
6191 (native-inputs
6192 `(("unzip" ,unzip)))
6193 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6194 (synopsis "Python module for simple generic functions")
6195 (description
6196 "The simplegeneric module lets you define simple single-dispatch generic
6197 functions, akin to Python’s built-in generic functions like @code{len()},
6198 @code{iter()} and so on. However, instead of using specially-named methods,
6199 these generic functions use simple lookup tables, akin to those used by
6200 e.g. @code{pickle.dump()} and other generic functions found in the Python
6201 standard library.")
6202 (license license:zpl2.1)))
6203
6204 (define-public python2-simplegeneric
6205 (package-with-python2 python-simplegeneric))
6206
6207 (define-public python-ipython-genutils
6208 ;; TODO: This package is retired, check if can be removed, see description.
6209 (package
6210 (name "python-ipython-genutils")
6211 (version "0.1.0")
6212 (source
6213 (origin
6214 (method url-fetch)
6215 (uri (pypi-uri "ipython_genutils" version))
6216 (sha256
6217 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6218 (build-system python-build-system)
6219 (arguments `(#:tests? #f)) ; no tests
6220 (home-page "https://ipython.org")
6221 (synopsis "Vestigial utilities from IPython")
6222 (description
6223 "This package provides retired utilities from IPython. No packages
6224 outside IPython/Jupyter should depend on it.
6225
6226 This package shouldn't exist. It contains some common utilities shared by
6227 Jupyter and IPython projects during The Big Split. As soon as possible, those
6228 packages will remove their dependency on this, and this package will go
6229 away.")
6230 (license license:bsd-3)))
6231
6232 (define-public python2-ipython-genutils
6233 (package-with-python2 python-ipython-genutils))
6234
6235 (define-public python-ipyparallel
6236 (package
6237 (name "python-ipyparallel")
6238 (version "6.2.4")
6239 (source
6240 (origin
6241 (method url-fetch)
6242 (uri (pypi-uri "ipyparallel" version))
6243 (sha256
6244 (base32
6245 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6246 (build-system python-build-system)
6247 (arguments
6248 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6249 #:phases
6250 (modify-phases %standard-phases
6251 (add-before 'check 'prepare-for-tests
6252 (lambda _
6253 (setenv "HOME" (getcwd))
6254 #t)))))
6255 (propagated-inputs
6256 `(("python-dateutil" ,python-dateutil)
6257 ("python-decorator" ,python-decorator)
6258 ("python-ipykernel" ,python-ipykernel)
6259 ("python-ipython" ,python-ipython)
6260 ("python-ipython-genutils" ,python-ipython-genutils)
6261 ("python-jupyter-client" ,python-jupyter-client)
6262 ("python-pyzmq" ,python-pyzmq)
6263 ("python-tornado" ,python-tornado)
6264 ("python-traitlets" ,python-traitlets)))
6265 (native-inputs
6266 `(("python-ipython" ,python-ipython)
6267 ("python-mock" ,python-mock)
6268 ("python-nose" ,python-nose)
6269 ("python-pytest" ,python-pytest)
6270 ("python-pytest-cov" ,python-pytest-cov)
6271 ("python-testpath" ,python-testpath)))
6272 (home-page "https://ipython.org/")
6273 (synopsis "Interactive Parallel Computing with IPython")
6274 (description
6275 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6276 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6277 CLI scripts:
6278 @enumerate
6279 @item ipcluster - start/stop a cluster
6280 @item ipcontroller - start a scheduler
6281 @item ipengine - start an engine
6282 @end enumerate")
6283 (license license:bsd-3)))
6284
6285 (define-public python2-ipyparallel
6286 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6287 (package
6288 (inherit ipyparallel)
6289 (propagated-inputs
6290 `(("python2-futures" ,python2-futures)
6291 ,@(package-propagated-inputs ipyparallel))))))
6292
6293 (define-public python-ipython-cluster-helper
6294 (package
6295 (name "python-ipython-cluster-helper")
6296 (version "0.6.4")
6297 (source
6298 (origin
6299 (method url-fetch)
6300 (uri (pypi-uri "ipython-cluster-helper" version))
6301 (sha256
6302 (base32
6303 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6304 (modules '((guix build utils)))
6305 (snippet
6306 '(begin (substitute* "requirements.txt"
6307 (("ipython.*") "ipython\n"))
6308 #t))))
6309 (build-system python-build-system)
6310 (arguments
6311 `(#:tests? #f ; Test suite can't find IPython.
6312 #:phases
6313 (modify-phases %standard-phases
6314 (replace 'check
6315 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6316 (if tests?
6317 (begin
6318 (setenv "HOME" (getcwd))
6319 (add-installed-pythonpath inputs outputs)
6320 (invoke "python" "example/example.py" "--local"))
6321 #t))))))
6322 (propagated-inputs
6323 `(("python-ipyparallel" ,python-ipyparallel)
6324 ("python-ipython" ,python-ipython)
6325 ("python-netifaces" ,python-netifaces)
6326 ("python-pyzmq" ,python-pyzmq)
6327 ("python-setuptools" ,python-setuptools)
6328 ("python-six" ,python-six)))
6329 (home-page "https://github.com/roryk/ipython-cluster-helper")
6330 (synopsis
6331 "Simplify IPython cluster start up and use for multiple schedulers")
6332 (description
6333 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6334 profile, launches a cluster and returns a view. On program exit it shuts the
6335 cluster down and deletes the throwaway profile.")
6336 (license license:expat)))
6337
6338 (define-public python2-ipython-cluster-helper
6339 (package-with-python2 python-ipython-cluster-helper))
6340
6341 (define-public python-traitlets
6342 (package
6343 (name "python-traitlets")
6344 (version "4.3.3")
6345 (source
6346 (origin
6347 (method url-fetch)
6348 (uri (pypi-uri "traitlets" version))
6349 (sha256
6350 (base32
6351 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6352 (build-system python-build-system)
6353 (arguments
6354 `(#:phases
6355 (modify-phases %standard-phases
6356 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6357 (propagated-inputs
6358 `(("python-ipython-genutils" ,python-ipython-genutils)
6359 ("python-decorator" ,python-decorator)))
6360 (native-inputs
6361 `(("python-pytest" ,python-pytest)))
6362 (properties `((python2-variant . ,(delay python2-traitlets))))
6363 (home-page "https://ipython.org")
6364 (synopsis "Configuration system for Python applications")
6365 (description
6366 "Traitlets is a framework that lets Python classes have attributes with
6367 type checking, dynamically calculated default values, and ‘on change’
6368 callbacks. The package also includes a mechanism to use traitlets for
6369 configuration, loading values from files or from command line arguments. This
6370 is a distinct layer on top of traitlets, so you can use traitlets in your code
6371 without using the configuration machinery.")
6372 (license license:bsd-3)))
6373
6374 (define-public python2-traitlets
6375 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6376 (package
6377 (inherit traitlets)
6378 (propagated-inputs
6379 `(("python2-enum34" ,python2-enum34)
6380 ,@(package-propagated-inputs traitlets))))))
6381
6382 (define-public python-jupyter-core
6383 (package
6384 (name "python-jupyter-core")
6385 (version "4.4.0")
6386 (source
6387 (origin
6388 (method url-fetch)
6389 (uri (string-append (pypi-uri "jupyter_core" version)))
6390 (sha256
6391 (base32
6392 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6393 (build-system python-build-system)
6394 ;; FIXME: not sure how to run the tests
6395 (arguments `(#:tests? #f))
6396 (propagated-inputs
6397 `(("python-traitlets" ,python-traitlets)))
6398 (home-page "http://jupyter.org/")
6399 (synopsis "Jupyter base package")
6400 (description
6401 "Jupyter core is the base package on which Jupyter projects rely.")
6402 (license license:bsd-3)))
6403
6404 (define-public python2-jupyter-core
6405 (package-with-python2 python-jupyter-core))
6406
6407 (define-public python-jupyter-client
6408 (package
6409 (name "python-jupyter-client")
6410 (version "5.2.4")
6411 (source
6412 (origin
6413 (method url-fetch)
6414 (uri (pypi-uri "jupyter_client" version))
6415 (sha256
6416 (base32
6417 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6418 (build-system python-build-system)
6419 ;; Tests fail because of missing native python kernel which I assume is
6420 ;; provided by the ipython package, which we cannot use because it would
6421 ;; cause a dependency cycle.
6422 (arguments
6423 `(#:tests? #f
6424
6425 #:phases (modify-phases %standard-phases
6426 (add-after 'unpack 'set-tool-file-names
6427 (lambda* (#:key inputs #:allow-other-keys)
6428 (let ((iproute (assoc-ref inputs "iproute")))
6429 (substitute* "jupyter_client/localinterfaces.py"
6430 (("'ip'")
6431 (string-append "'" iproute "/sbin/ip'")))
6432 #t))))))
6433 (inputs
6434 `(("iproute" ,iproute)))
6435 (propagated-inputs
6436 `(("python-pyzmq" ,python-pyzmq)
6437 ("python-traitlets" ,python-traitlets)
6438 ("python-jupyter-core" ,python-jupyter-core)))
6439 (home-page "http://jupyter.org/")
6440 (synopsis "Jupyter protocol implementation and client libraries")
6441 (description
6442 "The @code{jupyter_client} package contains the reference implementation
6443 of the Jupyter protocol. It also provides client and kernel management APIs
6444 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6445 installing @code{kernelspec}s for use with Jupyter frontends.")
6446 (license license:bsd-3)))
6447
6448 (define-public python2-jupyter-client
6449 (package-with-python2 python-jupyter-client))
6450
6451 (define-public python-ipykernel
6452 (package
6453 (name "python-ipykernel")
6454 (version "5.1.3")
6455 (source
6456 (origin
6457 (method url-fetch)
6458 (uri (pypi-uri "ipykernel" version))
6459 (sha256
6460 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6461 (build-system python-build-system)
6462 (arguments
6463 `(#:phases
6464 (modify-phases %standard-phases
6465 (replace 'check
6466 (lambda _
6467 (setenv "HOME" "/tmp")
6468 (invoke "pytest" "-v")
6469 #t))
6470 (add-after 'install 'set-python-file-name
6471 (lambda* (#:key outputs #:allow-other-keys)
6472 ;; Record the absolute file name of the 'python' executable in
6473 ;; 'kernel.json'.
6474 (let ((out (assoc-ref outputs "out")))
6475 (substitute* (string-append out "/share/jupyter"
6476 "/kernels/python3/kernel.json")
6477 (("\"python\"")
6478 (string-append "\"" (which "python") "\"")))
6479 #t))))))
6480 (propagated-inputs
6481 `(("python-ipython" ,python-ipython)
6482 ;; imported at runtime during connect
6483 ("python-jupyter-client" ,python-jupyter-client)))
6484 (native-inputs
6485 `(("python-flaky" ,python-flaky)
6486 ("python-nose" ,python-nose)
6487 ("python-pytest" ,python-pytest)))
6488 (home-page "https://ipython.org")
6489 (synopsis "IPython Kernel for Jupyter")
6490 (description
6491 "This package provides the IPython kernel for Jupyter.")
6492 (properties `((python2-variant . ,(delay python2-ipykernel))))
6493 (license license:bsd-3)))
6494
6495 ;; Version 5.x and above no longer support Python 2.
6496 (define-public python2-ipykernel
6497 (package
6498 (name "python2-ipykernel")
6499 (version "4.10.1")
6500 (source
6501 (origin
6502 (method url-fetch)
6503 (uri (pypi-uri "ipykernel" version))
6504 (sha256
6505 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6506 (build-system python-build-system)
6507 (arguments
6508 `(#:python ,python-2))
6509 (propagated-inputs
6510 `(("python2-ipython" ,python2-ipython)
6511 ;; imported at runtime during connect
6512 ("python2-jupyter-client" ,python2-jupyter-client)
6513 ("python2-tornado" ,python2-tornado)
6514 ("python2-traitlets" ,python2-traitlets)))
6515 (native-inputs
6516 `(("python2-mock" ,python2-mock)
6517 ("python2-nose" ,python2-nose)
6518 ("python2-pytest" ,python2-pytest)
6519 ("python2-pytest-cov" ,python2-pytest-cov)))
6520 (home-page "https://ipython.org")
6521 (synopsis "IPython Kernel for Jupyter")
6522 (description
6523 "This package provides the IPython kernel for Jupyter.")
6524 (license license:bsd-3)))
6525
6526 (define-public python-pari-jupyter
6527 (package
6528 (name "python-pari-jupyter")
6529 (version "1.3.2")
6530 (source
6531 (origin
6532 (method url-fetch)
6533 (uri (pypi-uri "pari_jupyter" version))
6534 (sha256
6535 (base32
6536 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6537 (build-system python-build-system)
6538 (propagated-inputs
6539 `(("python-ipykernel" ,python-ipykernel)))
6540 (inputs
6541 `(("pari-gp" ,pari-gp)
6542 ("readline" ,readline)))
6543 (arguments
6544 `(#:tests? #f)) ; no test suite
6545 (home-page
6546 "https://github.com/jdemeyer/pari_jupyter")
6547 (synopsis "A Jupyter kernel for PARI/GP")
6548 (description "The package provides a PARI/GP kernel for Jupyter.")
6549 (license license:gpl3+)))
6550
6551 (define-public python-backcall
6552 (package
6553 (name "python-backcall")
6554 (version "0.1.0")
6555 (source
6556 (origin
6557 (method url-fetch)
6558 (uri (pypi-uri "backcall" version))
6559 (sha256
6560 (base32
6561 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6562 (build-system python-build-system)
6563 (home-page "https://github.com/takluyver/backcall/")
6564 (synopsis "Specifications for callback functions passed in to an API")
6565 (description
6566 "If your code lets other people supply callback functions, it's important
6567 to specify the function signature you expect, and check that functions support
6568 that. Adding extra parameters later would break other peoples code unless
6569 you're careful. The @code{backcall} package provides a way of specifying the
6570 callback signature using a prototype function.")
6571 (license license:bsd-3)))
6572
6573 (define-public python-ipython
6574 (package
6575 (name "python-ipython")
6576 (version "7.9.0")
6577 (source
6578 (origin
6579 (method url-fetch)
6580 (uri (pypi-uri "ipython" version ".tar.gz"))
6581 (sha256
6582 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6583 (build-system python-build-system)
6584 (propagated-inputs
6585 `(("python-backcall" ,python-backcall)
6586 ("python-pyzmq" ,python-pyzmq)
6587 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
6588 ("python-terminado" ,python-terminado)
6589 ("python-matplotlib" ,python-matplotlib)
6590 ("python-numpy" ,python-numpy)
6591 ("python-numpydoc" ,python-numpydoc)
6592 ("python-jedi" ,python-jedi)
6593 ("python-jinja2" ,python-jinja2)
6594 ("python-mistune" ,python-mistune)
6595 ("python-pexpect" ,python-pexpect)
6596 ("python-pickleshare" ,python-pickleshare)
6597 ("python-simplegeneric" ,python-simplegeneric)
6598 ("python-jsonschema" ,python-jsonschema)
6599 ("python-traitlets" ,python-traitlets)
6600 ("python-nbformat" ,python-nbformat)
6601 ("python-pygments" ,python-pygments)))
6602 (inputs
6603 `(("readline" ,readline)
6604 ("which" ,which)))
6605 (native-inputs
6606 `(("graphviz" ,graphviz)
6607 ("pkg-config" ,pkg-config)
6608 ("python-requests" ,python-requests) ;; for tests
6609 ("python-testpath" ,python-testpath)
6610 ("python-nose" ,python-nose)))
6611 (arguments
6612 `(#:phases
6613 (modify-phases %standard-phases
6614 (add-after 'unpack 'make-docs-reproducible
6615 (lambda _
6616 (substitute* "IPython/sphinxext/ipython_directive.py"
6617 ((".*import datetime") "")
6618 ((".*datetime.datetime.now\\(\\)") "")
6619 (("%timeit") "# %timeit"))
6620 #t))
6621 ;; Tests can only be run after the library has been installed and not
6622 ;; within the source directory.
6623 (delete 'check)
6624 (add-after 'install 'check
6625 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6626 (if tests?
6627 (begin
6628 ;; Make installed package available for running the tests
6629 (add-installed-pythonpath inputs outputs)
6630 (setenv "HOME" "/tmp/") ;; required by a test
6631 ;; We only test the core because one of the other tests
6632 ;; tries to import ipykernel.
6633 (invoke "python" "IPython/testing/iptest.py"
6634 "-v" "IPython/core/tests"))
6635 #t)))
6636 (add-before 'check 'fix-tests
6637 (lambda* (#:key inputs #:allow-other-keys)
6638 (substitute* "./IPython/utils/_process_posix.py"
6639 (("/usr/bin/env', 'which") (which "which")))
6640 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6641 (("#!/usr/bin/env python")
6642 (string-append "#!" (which "python"))))
6643 ;; This test introduces a circular dependency on ipykernel
6644 ;; (which depends on ipython).
6645 (delete-file "IPython/core/tests/test_display.py")
6646 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6647 (delete-file "IPython/core/tests/test_interactiveshell.py")
6648 #t)))))
6649 (home-page "https://ipython.org")
6650 (synopsis "IPython is a tool for interactive computing in Python")
6651 (description
6652 "IPython provides a rich architecture for interactive computing with:
6653 Powerful interactive shells, a browser-based notebook, support for interactive
6654 data visualization, embeddable interpreters and tools for parallel
6655 computing.")
6656 (properties `((python2-variant . ,(delay python2-ipython))))
6657 (license license:bsd-3)))
6658
6659 ;; This is the latest release of the LTS version of ipython with support for
6660 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6661 ;; dropped support for Python 2.7.
6662 (define-public python2-ipython
6663 (package
6664 (name "python2-ipython")
6665 (version "5.8.0")
6666 (source
6667 (origin
6668 (method url-fetch)
6669 (uri (pypi-uri "ipython" version ".tar.gz"))
6670 (sha256
6671 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6672 (build-system python-build-system)
6673 (propagated-inputs
6674 `(("python2-backports-shutil-get-terminal-size"
6675 ,python2-backports-shutil-get-terminal-size)
6676 ("python2-pathlib2" ,python2-pathlib2)
6677 ("python2-pyzmq" ,python2-pyzmq)
6678 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6679 ("python2-terminado" ,python2-terminado)
6680 ("python2-matplotlib" ,python2-matplotlib)
6681 ("python2-numpy" ,python2-numpy)
6682 ("python2-numpydoc" ,python2-numpydoc)
6683 ("python2-jinja2" ,python2-jinja2)
6684 ("python2-mistune" ,python2-mistune)
6685 ("python2-pexpect" ,python2-pexpect)
6686 ("python2-pickleshare" ,python2-pickleshare)
6687 ("python2-simplegeneric" ,python2-simplegeneric)
6688 ("python2-jsonschema" ,python2-jsonschema)
6689 ("python2-traitlets" ,python2-traitlets)
6690 ("python2-nbformat" ,python2-nbformat)
6691 ("python2-pygments" ,python2-pygments)))
6692 (inputs
6693 `(("readline" ,readline)
6694 ("which" ,which)))
6695 (native-inputs
6696 `(("graphviz" ,graphviz)
6697 ("pkg-config" ,pkg-config)
6698 ("python2-requests" ,python2-requests) ;; for tests
6699 ("python2-testpath" ,python2-testpath)
6700 ("python2-mock" ,python2-mock)
6701 ("python2-nose" ,python2-nose)))
6702 (arguments
6703 `(#:python ,python-2
6704 #:phases
6705 (modify-phases %standard-phases
6706 (add-before 'check 'delete-broken-tests
6707 (lambda* (#:key inputs #:allow-other-keys)
6708 ;; These tests throw errors for unknown reasons.
6709 (delete-file "IPython/core/tests/test_displayhook.py")
6710 (delete-file "IPython/core/tests/test_magic_terminal.py")
6711 (delete-file "IPython/core/tests/test_profile.py")
6712 #t)))))
6713 (home-page "https://ipython.org")
6714 (synopsis "IPython is a tool for interactive computing in Python")
6715 (description
6716 "IPython provides a rich architecture for interactive computing with:
6717 Powerful interactive shells, a browser-based notebook, support for interactive
6718 data visualization, embeddable interpreters and tools for parallel
6719 computing.")
6720 (license license:bsd-3)))
6721
6722 (define-public python-ipython-documentation
6723 (package
6724 (inherit python-ipython)
6725 (name "python-ipython-documentation")
6726 (version (package-version python-ipython))
6727 (arguments
6728 `(#:phases
6729 (modify-phases %standard-phases
6730 (delete 'build)
6731 (delete 'check)
6732 (replace 'install
6733 (lambda* (#:key outputs #:allow-other-keys)
6734 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6735 (doc (string-append data "/doc/" ,name "-" ,version))
6736 (html (string-append doc "/html"))
6737 (man1 (string-append data "/man/man1"))
6738 (info (string-append data "/info"))
6739 (examples (string-append doc "/examples"))
6740 (python-arg (string-append "PYTHON=" (which "python"))))
6741 (setenv "LANG" "en_US.utf8")
6742 (with-directory-excursion "docs"
6743 ;; FIXME: pdf fails to build
6744 ;;(system* "make" "pdf" "PAPER=a4")
6745 (system* "make" python-arg "html")
6746 ;; FIXME: the generated texi file contains ^@^@, which trips
6747 ;; up the parser.
6748 ;; (system* "make" python-arg "info")
6749 )
6750 (copy-recursively "docs/man" man1)
6751 (copy-recursively "examples" examples)
6752 (copy-recursively "docs/build/html" html)
6753 ;; (copy-file "docs/build/latex/ipython.pdf"
6754 ;; (string-append doc "/ipython.pdf"))
6755 (mkdir-p info)
6756 ;; (copy-file "docs/build/texinfo/ipython.info"
6757 ;; (string-append info "/ipython.info"))
6758 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6759 #t)))))
6760 (inputs
6761 `(("python-ipython" ,python-ipython)
6762 ("python-ipykernel" ,python-ipykernel)))
6763 (native-inputs
6764 `(("python-sphinx" ,python-sphinx)
6765 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6766 ;; FIXME: It's possible that a smaller union would work just as well.
6767 ("texlive" ,(texlive-union (list texlive-amsfonts
6768 texlive-fonts-ec
6769 texlive-generic-ifxetex
6770 texlive-generic-pdftex
6771 texlive-latex-capt-of
6772 texlive-latex-cmap
6773 texlive-latex-environ
6774 texlive-latex-eqparbox
6775 texlive-latex-etoolbox
6776 texlive-latex-expdlist
6777 texlive-latex-fancyhdr
6778 texlive-latex-fancyvrb
6779 texlive-latex-fncychap
6780 texlive-latex-float
6781 texlive-latex-framed
6782 texlive-latex-geometry
6783 texlive-latex-graphics
6784 texlive-latex-hyperref
6785 texlive-latex-mdwtools
6786 texlive-latex-multirow
6787 texlive-latex-needspace
6788 texlive-latex-oberdiek
6789 texlive-latex-parskip
6790 texlive-latex-preview
6791 texlive-latex-tabulary
6792 texlive-latex-threeparttable
6793 texlive-latex-titlesec
6794 texlive-latex-trimspaces
6795 texlive-latex-ucs
6796 texlive-latex-upquote
6797 texlive-latex-url
6798 texlive-latex-varwidth
6799 texlive-latex-wrapfig)))
6800 ("texinfo" ,texinfo)))))
6801
6802 (define-public python-urwid
6803 (package
6804 (name "python-urwid")
6805 (version "2.1.0")
6806 (source
6807 (origin
6808 (method url-fetch)
6809 (uri (pypi-uri "urwid" version))
6810 (sha256
6811 (base32
6812 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6813 (build-system python-build-system)
6814 (home-page "http://urwid.org")
6815 (synopsis "Console user interface library for Python")
6816 (description
6817 "Urwid is a curses-based UI/widget library for Python. It includes many
6818 features useful for text console applications.")
6819 (license license:lgpl2.1+)))
6820
6821 (define-public python2-urwid
6822 (package-with-python2 python-urwid))
6823
6824 (define-public python-urwidtrees
6825 (package
6826 (name "python-urwidtrees")
6827 (version "1.0.2")
6828 (source
6829 (origin
6830 (method git-fetch)
6831 ;; package author intends on distributing via github rather than pypi:
6832 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6833 (uri (git-reference
6834 (url "https://github.com/pazz/urwidtrees")
6835 (commit version)))
6836 (file-name (git-file-name name version))
6837 (sha256
6838 (base32
6839 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6840 (build-system python-build-system)
6841 (arguments
6842 '(#:use-setuptools? #f
6843 #:tests? #f)) ; no tests
6844 (propagated-inputs `(("python-urwid" ,python-urwid)))
6845 (home-page "https://github.com/pazz/urwidtrees")
6846 (synopsis "Tree widgets for urwid")
6847 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6848 toolkit. Use it to build trees of widgets.")
6849 (license license:gpl3+)))
6850
6851 (define-public python2-urwidtrees
6852 (package-with-python2 python-urwidtrees))
6853
6854 (define-public python-ua-parser
6855 (package
6856 (name "python-ua-parser")
6857 (version "0.8.0")
6858 (source
6859 (origin
6860 (method url-fetch)
6861 (uri (pypi-uri "ua-parser" version))
6862 (sha256
6863 (base32
6864 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6865 (build-system python-build-system)
6866 (arguments
6867 `(#:tests? #f)) ;no test suite in release
6868 (native-inputs
6869 `(("python-pyyaml" ,python-pyyaml)))
6870 (home-page "https://github.com/ua-parser/uap-python")
6871 (synopsis "User agent parser")
6872 (description
6873 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6874 (license license:asl2.0)))
6875
6876 (define-public python2-ua-parser
6877 (package-with-python2 python-ua-parser))
6878
6879 (define-public python-user-agents
6880 (package
6881 (name "python-user-agents")
6882 (version "1.1.0")
6883 (source
6884 (origin
6885 (method url-fetch)
6886 (uri (pypi-uri "user-agents" version))
6887 (sha256
6888 (base32
6889 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6890 (build-system python-build-system)
6891 (arguments
6892 `(#:tests? #f)) ;missing devices.json test file in release
6893 (propagated-inputs
6894 `(("python-ua-parser" ,python-ua-parser)))
6895 (home-page "https://github.com/selwin/python-user-agents")
6896 (synopsis "User Agent strings parsing library")
6897 (description
6898 "A library to identify devices (phones, tablets) and their capabilities by
6899 parsing (browser/HTTP) user agent strings.")
6900 (license license:expat)))
6901
6902 (define-public python2-user-agents
6903 (package-with-python2 python-user-agents))
6904
6905 (define-public python-dbus
6906 (package
6907 (name "python-dbus")
6908 (version "1.2.14")
6909 (source
6910 (origin
6911 (method url-fetch)
6912 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6913 "dbus-python-" version ".tar.gz"))
6914 (sha256
6915 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6916 (build-system gnu-build-system)
6917 (native-inputs
6918 `(("pkg-config" ,pkg-config)))
6919 (inputs
6920 `(("python" ,python-wrapper)
6921 ("dbus-glib" ,dbus-glib)))
6922 (synopsis "Python bindings for D-bus")
6923 (description "python-dbus provides bindings for libdbus, the reference
6924 implementation of D-Bus.")
6925 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6926 (license license:expat)))
6927
6928 (define-public python2-dbus
6929 (package (inherit python-dbus)
6930 (name "python2-dbus")
6931 (inputs `(("python" ,python-2)
6932 ,@(alist-delete "python"
6933 (package-inputs python-dbus)
6934 equal?)))))
6935
6936 (define-public python-notify2
6937 (package
6938 (name "python-notify2")
6939 (version "0.3.1")
6940 (source
6941 (origin
6942 (method url-fetch)
6943 (uri (pypi-uri "notify2" version))
6944 (sha256
6945 (base32
6946 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6947 (build-system python-build-system)
6948 (arguments `(#:tests? #f)) ; tests depend on system state
6949 (native-inputs
6950 `(("python-dbus" ,python-dbus)))
6951 (home-page "https://bitbucket.org/takluyver/pynotify2")
6952 (synopsis "Python interface to D-Bus notifications")
6953 (description
6954 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6955 It is a reimplementation of pynotify in pure Python, and an alternative to
6956 the GObject Introspection bindings to libnotify for non-GTK applications.")
6957 (license (list license:bsd-2
6958 license:lgpl2.1+))))
6959
6960 (define-public python2-notify2
6961 (package-with-python2 python-notify2))
6962
6963 ;; beautifulsoup4 has a totally different namespace than 3.x,
6964 ;; and pypi seems to put it under its own name, so I guess we should too
6965 (define-public python-beautifulsoup4
6966 (package
6967 (name "python-beautifulsoup4")
6968 (version "4.9.1")
6969 (source
6970 (origin
6971 (method url-fetch)
6972 (uri (pypi-uri "beautifulsoup4" version))
6973 (sha256
6974 (base32
6975 "1mvzlw3pzbhsvl3z8784s5h7iiflm2hggiy1fxyrrxwnbc8lvk3k"))))
6976 (build-system python-build-system)
6977 (arguments
6978 `(#:phases
6979 (modify-phases %standard-phases
6980 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6981 ;; must use this conversion script when building with Python 3. The
6982 ;; conversion script also runs the tests.
6983 ;; For more information, see the file 'convert-py3k' in the source
6984 ;; distribution.
6985 (replace 'check
6986 (lambda _ (invoke "./convert-py3k"))))))
6987 (propagated-inputs
6988 `(("python-soupsieve" ,python-soupsieve)))
6989 (home-page
6990 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6991 (synopsis
6992 "Python screen-scraping library")
6993 (description
6994 "Beautiful Soup is a Python library designed for rapidly setting up
6995 screen-scraping projects. It offers Pythonic idioms for navigating,
6996 searching, and modifying a parse tree, providing a toolkit for
6997 dissecting a document and extracting what you need. It automatically
6998 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6999 (license license:expat)
7000 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7001
7002 (define-public python2-beautifulsoup4
7003 (package
7004 (inherit (package-with-python2
7005 (strip-python2-variant python-beautifulsoup4)))
7006 (arguments `(#:python ,python-2))))
7007
7008 (define-public python-soupsieve
7009 (package
7010 (name "python-soupsieve")
7011 (version "2.0.1")
7012 (source
7013 (origin
7014 (method url-fetch)
7015 (uri (pypi-uri "soupsieve" version))
7016 (sha256
7017 (base32
7018 "0ch2rhvsbwfpvzm4kzy81rclbzr533yv83hzg1gx55byfa0w37d5"))))
7019 (build-system python-build-system)
7020 (arguments `(#:tests? #f))
7021 ;;XXX: 2 tests fail currently despite claming they were to be
7022 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7023 ;;don't want to create a circular dependency.
7024 (home-page "https://github.com/facelessuser/soupsieve")
7025 (synopsis "CSS selector library")
7026 (description
7027 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7028 Soup 4. It aims to provide selecting, matching, and filtering using modern
7029 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7030 specifications up through the latest CSS level 4 drafts and beyond (though
7031 some are not yet implemented).")
7032 (properties `((python2-variant . ,(delay python2-soupsieve))))
7033 (license license:expat)))
7034
7035 ;; This is the last version that supports python-2
7036 (define-public python2-soupsieve
7037 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7038 (package
7039 (inherit base)
7040 (version "1.9.6")
7041 (source
7042 (origin
7043 (method url-fetch)
7044 (uri (pypi-uri "soupsieve" version))
7045 (sha256
7046 (base32
7047 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7048 (propagated-inputs
7049 `(("python2-backports-functools-lru-cache"
7050 ,python2-backports-functools-lru-cache)
7051 ,@(package-propagated-inputs base))))))
7052
7053 (define-public python-netifaces
7054 (package
7055 (name "python-netifaces")
7056 (version "0.10.9")
7057 (source
7058 (origin
7059 (method url-fetch)
7060 (uri (pypi-uri "netifaces" version))
7061 (sha256
7062 (base32
7063 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7064 (build-system python-build-system)
7065 (home-page "https://github.com/al45tair/netifaces")
7066 (synopsis
7067 "Python module for portable network interface information")
7068 (description
7069 "Netifaces is a Python module providing information on network
7070 interfaces in an easy and portable manner.")
7071 (license license:expat)))
7072
7073 (define-public python2-netifaces
7074 (package-with-python2 python-netifaces))
7075
7076 (define-public python-networkx
7077 (package
7078 (name "python-networkx")
7079 (version "2.4")
7080 (source
7081 (origin
7082 (method url-fetch)
7083 (uri (pypi-uri "networkx" version))
7084 (sha256
7085 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
7086 (build-system python-build-system)
7087 (arguments
7088 '(#:phases (modify-phases %standard-phases
7089 (replace 'check
7090 (lambda* (#:key tests? #:allow-other-keys)
7091 (if tests?
7092 (invoke "pytest" "-vv" "--pyargs" "networkx")
7093 (format #t "test suite not run~%"))
7094 #t)))))
7095 ;; python-decorator is needed at runtime.
7096 (propagated-inputs
7097 `(("python-decorator" ,python-decorator)))
7098 (native-inputs
7099 `(("python-pytest" ,python-pytest)))
7100 (home-page "https://networkx.github.io/")
7101 (synopsis "Python module for creating and manipulating graphs and networks")
7102 (description
7103 "NetworkX is a Python package for the creation, manipulation, and study
7104 of the structure, dynamics, and functions of complex networks.")
7105 (properties `((python2-variant . ,(delay python2-networkx))))
7106 (license license:bsd-3)))
7107
7108 ;; NetworkX 2.2 is the last version with support for Python 2.
7109 (define-public python2-networkx
7110 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7111 (package
7112 (inherit base)
7113 (version "2.2")
7114 (source (origin
7115 (method url-fetch)
7116 (uri (pypi-uri "networkx" version ".zip"))
7117 (sha256
7118 (base32
7119 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7120 (arguments
7121 `(#:python ,python-2))
7122 (native-inputs
7123 `(("python-nose" ,python2-nose)
7124 ("unzip" ,unzip))))))
7125
7126 (define-public python-datrie
7127 (package
7128 (name "python-datrie")
7129 (version "0.8.2")
7130 (source
7131 (origin
7132 (method url-fetch)
7133 (uri (pypi-uri "datrie" version))
7134 (sha256
7135 (base32
7136 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
7137 (build-system python-build-system)
7138 (native-inputs
7139 `(("python-cython" ,python-cython)
7140 ("python-hypothesis" ,python-hypothesis)
7141 ("python-pytest" ,python-pytest)
7142 ("python-pytest-runner" ,python-pytest-runner)))
7143 (home-page "https://github.com/kmike/datrie")
7144 (synopsis "Fast, efficiently stored trie for Python")
7145 (description
7146 "This package provides a fast, efficiently stored trie implementation for
7147 Python.")
7148 (license license:lgpl2.1+)))
7149
7150 (define-public snakemake
7151 (package
7152 (name "snakemake")
7153 (version "5.7.1")
7154 (source
7155 (origin
7156 (method url-fetch)
7157 (uri (pypi-uri "snakemake" version))
7158 (sha256
7159 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7160 (build-system python-build-system)
7161 (arguments
7162 ;; TODO: Package missing test dependencies.
7163 '(#:tests? #f
7164 #:phases
7165 (modify-phases %standard-phases
7166 ;; For cluster execution Snakemake will call Python. Since there is
7167 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7168 ;; this by calling the snakemake wrapper instead.
7169 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7170 (lambda* (#:key outputs #:allow-other-keys)
7171 (substitute* "snakemake/executors.py"
7172 (("\\{sys.executable\\} -m snakemake")
7173 (string-append (assoc-ref outputs "out")
7174 "/bin/snakemake")))
7175 #t)))))
7176 (propagated-inputs
7177 `(("python-appdirs" ,python-appdirs)
7178 ("python-configargparse" ,python-configargparse)
7179 ("python-datrie" ,python-datrie)
7180 ("python-docutils" ,python-docutils)
7181 ("python-gitpython" ,python-gitpython)
7182 ("python-jinja2" ,python-jinja2)
7183 ("python-jsonschema" ,python-jsonschema)
7184 ("python-networkx" ,python-networkx)
7185 ("python-psutil" ,python-psutil)
7186 ("python-pyyaml" ,python-pyyaml)
7187 ("python-ratelimiter" ,python-ratelimiter)
7188 ("python-requests" ,python-requests)
7189 ("python-wrapt" ,python-wrapt)))
7190 (home-page "https://snakemake.readthedocs.io")
7191 (synopsis "Python-based execution environment for make-like workflows")
7192 (description
7193 "Snakemake aims to reduce the complexity of creating workflows by
7194 providing a clean and modern domain specific specification language (DSL) in
7195 Python style, together with a fast and comfortable execution environment.")
7196 (license license:expat)))
7197
7198 (define-public python-pyqrcode
7199 (package
7200 (name "python-pyqrcode")
7201 (version "1.2.1")
7202 (source
7203 (origin
7204 (method url-fetch)
7205 (uri (pypi-uri "PyQRCode" version))
7206 (sha256
7207 (base32
7208 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7209 (build-system python-build-system)
7210 (home-page
7211 "https://github.com/mnooner256/pyqrcode")
7212 (synopsis "QR code generator")
7213 (description
7214 "Pyqrcode is a QR code generator written purely in Python with
7215 SVG, EPS, PNG and terminal output.")
7216 (license license:bsd-3)))
7217
7218 (define-public python-seaborn
7219 (package
7220 (name "python-seaborn")
7221 (version "0.10.0")
7222 (source
7223 (origin
7224 (method url-fetch)
7225 (uri (pypi-uri "seaborn" version))
7226 (sha256
7227 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7228 (build-system python-build-system)
7229 (arguments
7230 `(#:phases
7231 (modify-phases %standard-phases
7232 (add-before 'check 'start-xserver
7233 (lambda* (#:key inputs #:allow-other-keys)
7234 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7235 ;; There must be a running X server and make check doesn't
7236 ;; start one. Therefore we must do it.
7237 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7238 (setenv "DISPLAY" ":1")
7239 #t)))
7240 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7241 (propagated-inputs
7242 `(("python-pandas" ,python-pandas)
7243 ("python-matplotlib" ,python-matplotlib)
7244 ("python-numpy" ,python-numpy)
7245 ("python-scipy" ,python-scipy)))
7246 (native-inputs
7247 `(("python-pytest" ,python-pytest)
7248 ("xorg-server" ,xorg-server-for-tests)))
7249 (home-page "https://seaborn.pydata.org/")
7250 (synopsis "Statistical data visualization")
7251 (description
7252 "Seaborn is a library for making attractive and informative statistical
7253 graphics in Python. It is built on top of matplotlib and tightly integrated
7254 with the PyData stack, including support for numpy and pandas data structures
7255 and statistical routines from scipy and statsmodels.")
7256 (properties `((python2-variant . ,(delay python2-seaborn))))
7257 (license license:bsd-3)))
7258
7259 ;; 0.9.1 is the last release with support for Python 2.
7260 (define-public python2-seaborn
7261 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7262 (package
7263 (inherit base)
7264 (version "0.9.1")
7265 (source (origin
7266 (method url-fetch)
7267 (uri (pypi-uri "seaborn" version))
7268 (sha256
7269 (base32
7270 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7271
7272 (define-public python-mpmath
7273 (package
7274 (name "python-mpmath")
7275 (version "0.19")
7276 (source (origin
7277 (method url-fetch)
7278 (uri (string-append "http://mpmath.org/files/mpmath-"
7279 version ".tar.gz"))
7280 (sha256
7281 (base32
7282 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7283 (build-system python-build-system)
7284 (arguments
7285 '(#:phases
7286 (modify-phases %standard-phases
7287 (replace 'check
7288 (lambda _
7289 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7290 (home-page "http://mpmath.org")
7291 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7292 (description
7293 "@code{mpmath} can be used as an arbitrary-precision substitute for
7294 Python's float/complex types and math/cmath modules, but also does much
7295 more advanced mathematics.")
7296 (license license:bsd-3)))
7297
7298 (define-public python2-mpmath
7299 (package-with-python2 python-mpmath))
7300
7301 (define-public python-bigfloat
7302 (package
7303 (name "python-bigfloat")
7304 (version "0.3.0")
7305 (source
7306 (origin
7307 (method url-fetch)
7308 (uri (pypi-uri "bigfloat" version))
7309 (sha256
7310 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7311 (build-system python-build-system)
7312 (inputs
7313 `(("mpfr" ,mpfr)))
7314 (home-page "https://github.com/mdickinson/bigfloat")
7315 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7316 (description
7317 "This package provides a Python interface to the MPFR library for
7318 multiprecision arithmetic.")
7319 (license license:lgpl3+)))
7320
7321 (define-public python2-bigfloat
7322 (package-with-python2 python-bigfloat))
7323
7324 (define-public python-sympy
7325 (package
7326 (name "python-sympy")
7327 (version "1.1.1")
7328 (source
7329 (origin
7330 (method url-fetch)
7331 (uri (string-append
7332 "https://github.com/sympy/sympy/releases/download/sympy-"
7333 version "/sympy-" version ".tar.gz"))
7334 (sha256
7335 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7336 (build-system python-build-system)
7337 (arguments
7338 `(#:phases
7339 (modify-phases %standard-phases
7340 ;; Run the core tests after installation. By default it would run
7341 ;; *all* tests, which take a very long time to complete and are known
7342 ;; to be flaky.
7343 (delete 'check)
7344 (add-after 'install 'check
7345 (lambda* (#:key outputs #:allow-other-keys)
7346 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7347 #t)))))
7348 (propagated-inputs
7349 `(("python-mpmath" ,python-mpmath)))
7350 (home-page "https://www.sympy.org/")
7351 (synopsis "Python library for symbolic mathematics")
7352 (description
7353 "SymPy is a Python library for symbolic mathematics. It aims to become a
7354 full-featured computer algebra system (CAS) while keeping the code as simple
7355 as possible in order to be comprehensible and easily extensible.")
7356 (license license:bsd-3)))
7357
7358 (define-public python2-sympy
7359 (package
7360 (inherit (package-with-python2 python-sympy))
7361 (arguments
7362 `(#:phases
7363 (modify-phases %standard-phases
7364 ;; Run the core tests after installation. By default it would run
7365 ;; *all* tests, which take a very long time to complete and are known
7366 ;; to be flaky.
7367 (delete 'check)
7368 (add-after 'install 'check
7369 (lambda* (#:key outputs #:allow-other-keys)
7370 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7371 #t)))))))
7372
7373 (define-public python-q
7374 (package
7375 (name "python-q")
7376 (version "2.6")
7377 (source
7378 (origin
7379 (method url-fetch)
7380 (uri (pypi-uri "q" version))
7381 (sha256
7382 (base32
7383 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7384 (build-system python-build-system)
7385 (home-page "https://github.com/zestyping/q")
7386 (synopsis "Quick-and-dirty debugging output for tired programmers")
7387 (description
7388 "q is a Python module for \"print\" style of debugging Python code. It
7389 provides convenient short API for print out of values, tracebacks, and
7390 falling into the Python interpreter.")
7391 (license license:asl2.0)))
7392
7393 (define-public python2-q
7394 (package-with-python2 python-q))
7395
7396 (define-public python-xlib
7397 (package
7398 (name "python-xlib")
7399 (version "0.27")
7400 (source
7401 (origin
7402 (method git-fetch)
7403 (uri (git-reference
7404 (url "https://github.com/python-xlib/python-xlib.git")
7405 (commit version)))
7406 (file-name (git-file-name name version))
7407 (sha256
7408 (base32 "09kimic8rhprx3q8nzalc4aggg42ahqm4v5qcj8dm68yvxfdk986"))))
7409 (build-system python-build-system)
7410 (arguments
7411 `(#:phases
7412 (modify-phases %standard-phases
7413 (add-before 'check 'start-xserver
7414 (lambda* (#:key inputs #:allow-other-keys)
7415 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7416 ;; There must be a running X server and make check doesn't
7417 ;; start one. Therefore we must do it.
7418 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7419 (setenv "DISPLAY" ":1")
7420 #t))))))
7421 (native-inputs
7422 `(("python-mock" ,python-mock)
7423 ("python-setuptools-scm" ,python-setuptools-scm)
7424 ("python-six" ,python-six)
7425 ("xorg-server" ,xorg-server)))
7426 (home-page "https://github.com/python-xlib/python-xlib")
7427 (synopsis "Python X11 client library")
7428 (description
7429 "The Python X Library is intended to be a fully functional
7430 X client library for Python programs. It is useful to implement
7431 low-level X clients. It is written entirely in Python.")
7432 (license license:gpl2+)))
7433
7434 (define-public python2-xlib
7435 (package-with-python2 python-xlib))
7436
7437 (define-public python-singledispatch
7438 (package
7439 (name "python-singledispatch")
7440 (version "3.4.0.3")
7441 (source
7442 (origin
7443 (method url-fetch)
7444 (uri (pypi-uri "singledispatch" version))
7445 (sha256
7446 (base32
7447 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7448 (build-system python-build-system)
7449 (native-inputs
7450 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7451 (home-page
7452 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7453 (synopsis "Backport of singledispatch feature from Python 3.4")
7454 (description
7455 "This library brings functools.singledispatch from Python 3.4 to Python
7456 2.6-3.3.")
7457 (license license:expat)))
7458
7459 (define-public python2-singledispatch
7460 (package-with-python2 python-singledispatch))
7461
7462 ;; the python- version can be removed with python-3.5
7463 (define-public python-backports-abc
7464 (package
7465 (name "python-backports-abc")
7466 (version "0.5")
7467 (source
7468 (origin
7469 (method url-fetch)
7470 (uri (pypi-uri "backports_abc" version))
7471 (sha256
7472 (base32
7473 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7474 (build-system python-build-system)
7475 (home-page "https://github.com/cython/backports_abc")
7476 (synopsis "Backport of additions to the 'collections.abc' module")
7477 (description
7478 "Python-backports-abc provides a backport of additions to the
7479 @code{collections.abc} module in Python-3.5.")
7480 (license license:psfl)))
7481
7482 (define-public python2-backports-abc
7483 (package-with-python2 python-backports-abc))
7484
7485 (define-public python-backports-csv
7486 (package
7487 (name "python-backports-csv")
7488 (version "1.0.7")
7489 (source
7490 (origin
7491 (method url-fetch)
7492 (uri (pypi-uri "backports.csv" version))
7493 (sha256
7494 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7495 (build-system python-build-system)
7496 (home-page "https://github.com/ryanhiebert/backports.csv")
7497 (synopsis "Backport of Python 3's csv module for Python 2")
7498 (description
7499 "Provides a backport of Python 3's @code{csv} module for parsing
7500 comma separated values. The API of the @code{csv} module in Python 2
7501 is drastically different from the @code{csv} module in Python 3.
7502 This is due, for the most part, to the difference between str in
7503 Python 2 and Python 3.")
7504 (license license:psfl)))
7505
7506 (define-public python2-backports-csv
7507 (package-with-python2 python-backports-csv))
7508
7509 (define-public python2-backports-shutil-get-terminal-size
7510 (package
7511 (name "python2-backports-shutil-get-terminal-size")
7512 (version "1.0.0")
7513 (source
7514 (origin
7515 (method url-fetch)
7516 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7517 (sha256
7518 (base32
7519 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7520 (build-system python-build-system)
7521 (arguments
7522 `(#:python ,python-2
7523 #:phases
7524 (modify-phases %standard-phases
7525 (replace 'check
7526 (lambda _
7527 (setenv "PYTHONPATH" (string-append "./build/lib:"
7528 (getenv "PYTHONPATH")))
7529 (invoke "py.test" "-v"))))))
7530 (native-inputs
7531 `(("python2-pytest" ,python2-pytest)))
7532 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7533 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7534 (description
7535 "This package provides a backport of the @code{get_terminal_size
7536 function} from Python 3.3's @code{shutil}.
7537 Unlike the original version it is written in pure Python rather than C,
7538 so it might be a tiny bit slower.")
7539 (license license:expat)))
7540
7541 (define-public python-waf
7542 (package
7543 (name "python-waf")
7544 (version "2.0.19")
7545 (source (origin
7546 (method url-fetch)
7547 (uri (string-append "https://waf.io/"
7548 "waf-" version ".tar.bz2"))
7549 (sha256
7550 (base32
7551 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7552 (build-system python-build-system)
7553 (arguments
7554 '(#:phases
7555 (modify-phases %standard-phases
7556 (replace 'build
7557 (lambda _
7558 ;; XXX: Find a way to add all extra tools.
7559 (let ((tools '("gccdeps"
7560 "clang_compilation_database")))
7561 (invoke "python" "waf-light" "configure" "build"
7562 (string-append "--tools="
7563 (string-join tools ","))))))
7564 (replace 'check
7565 (lambda _
7566 (invoke "python" "waf" "--version")))
7567 (replace 'install
7568 (lambda* (#:key outputs #:allow-other-keys)
7569 (let ((out (assoc-ref outputs "out")))
7570 (install-file "waf" (string-append out "/bin")))
7571 #t))
7572 ;; waf breaks when it is wrapped.
7573 (delete 'wrap))))
7574 (home-page "https://waf.io/")
7575 (synopsis "Python-based build system")
7576 (description
7577 "Waf is a Python-based framework for configuring, compiling and installing
7578 applications.")
7579 (license license:bsd-3)))
7580
7581 (define-public python2-waf
7582 (package-with-python2 python-waf))
7583
7584 (define-public python-pyzmq
7585 (package
7586 (name "python-pyzmq")
7587 (version "17.1.2")
7588 (source
7589 (origin
7590 (method url-fetch)
7591 (uri (pypi-uri "pyzmq" version))
7592 (sha256
7593 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7594 (build-system python-build-system)
7595 (arguments
7596 `(#:configure-flags
7597 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7598 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7599 ;; --inplace' for 'python setup.py test' to work.
7600 #:tests? #f))
7601 (inputs
7602 `(("zeromq" ,zeromq)))
7603 (native-inputs
7604 `(("pkg-config" ,pkg-config)
7605 ("python-nose" ,python-nose)))
7606 (home-page "https://github.com/zeromq/pyzmq")
7607 (synopsis "Python bindings for 0MQ")
7608 (description
7609 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7610 (license license:bsd-4)))
7611
7612 (define-public python2-pyzmq
7613 (package-with-python2 python-pyzmq))
7614
7615 (define-public python-pep8
7616 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7617 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7618 ;; some dependents' test suites, and nothing more.
7619 (package
7620 (name "python-pep8")
7621 (version "1.7.0")
7622 (source
7623 (origin
7624 (method url-fetch)
7625 (uri (pypi-uri "pep8" version))
7626 (sha256
7627 (base32
7628 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7629 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7630 (build-system python-build-system)
7631 (home-page "https://pep8.readthedocs.org/")
7632 (synopsis "Python style guide checker")
7633 (description
7634 "This tools checks Python code against some of the style conventions in
7635 PEP 8.")
7636 (license license:expat)))
7637
7638 (define-public python2-pep8
7639 (package-with-python2 python-pep8))
7640
7641 (define-public python-pyflakes
7642 (package
7643 (name "python-pyflakes")
7644 (version "2.2.0")
7645 (source
7646 (origin
7647 (method url-fetch)
7648 (uri (pypi-uri "pyflakes" version))
7649 (sha256
7650 (base32
7651 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))
7652 (build-system python-build-system)
7653 (home-page
7654 "https://github.com/pyflakes/pyflakes")
7655 (synopsis "Passive checker of Python programs")
7656 (description
7657 "Pyflakes statically checks Python source code for common errors.")
7658 (license license:expat)))
7659
7660 (define-public python2-pyflakes
7661 (package-with-python2 python-pyflakes))
7662
7663 ;; Flake8 2.6 requires an older version of pyflakes.
7664 ;; This should be removed ASAP.
7665 (define-public python-pyflakes-1.2
7666 (package (inherit python-pyflakes)
7667 (version "1.2.3")
7668 (source
7669 (origin
7670 (method url-fetch)
7671 (uri (pypi-uri "pyflakes" version))
7672 (sha256
7673 (base32
7674 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7675 (arguments
7676 '(#:phases
7677 (modify-phases %standard-phases
7678 ;; This one test fails.
7679 (replace 'check
7680 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7681 (native-inputs
7682 `(("python-pytest" ,python-pytest)))))
7683
7684 (define-public python-mccabe
7685 (package
7686 (name "python-mccabe")
7687 (version "0.6.1")
7688 (source
7689 (origin
7690 (method url-fetch)
7691 (uri (pypi-uri "mccabe" version))
7692 (sha256
7693 (base32
7694 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7695 (build-system python-build-system)
7696 (native-inputs
7697 `(("python-pytest" ,python-pytest-bootstrap)
7698 ("python-pytest-runner" ,python-pytest-runner)))
7699 (home-page "https://github.com/flintwork/mccabe")
7700 (synopsis "McCabe checker, plugin for flake8")
7701 (description
7702 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7703 complexity of Python source code.")
7704 (license license:expat)))
7705
7706 (define-public python2-mccabe
7707 (package-with-python2 python-mccabe))
7708
7709 (define-public python-mccabe-0.2.1
7710 (package (inherit python-mccabe)
7711 (version "0.2.1")
7712 (source
7713 (origin
7714 (method url-fetch)
7715 (uri (pypi-uri "mccabe" version))
7716 (sha256
7717 (base32
7718 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7719
7720 (define-public python2-mccabe-0.2.1
7721 (package-with-python2 python-mccabe-0.2.1))
7722
7723 ;; Flake8 2.4.1 requires an older version of pep8.
7724 ;; This should be removed ASAP.
7725 (define-public python-pep8-1.5.7
7726 (package (inherit python-pep8)
7727 (version "1.5.7")
7728 (source
7729 (origin
7730 (method url-fetch)
7731 (uri (pypi-uri "pep8" version))
7732 (sha256
7733 (base32
7734 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7735 (arguments
7736 ;; XXX Tests not compatible with Python 3.5.
7737 '(#:tests? #f))))
7738
7739 (define-public python2-pep8-1.5.7
7740 (package-with-python2 python-pep8-1.5.7))
7741
7742 (define-public python-flake8
7743 (package
7744 (name "python-flake8")
7745 (version "3.8.3")
7746 (source (origin
7747 (method url-fetch)
7748 (uri (pypi-uri "flake8" version))
7749 (sha256
7750 (base32
7751 "02527892hh0qjivxaiphzalj7q32qkna1cqaikjs7c03mk5ryjzh"))))
7752 (build-system python-build-system)
7753 (arguments
7754 `(#:phases
7755 (modify-phases %standard-phases
7756 (delete 'check)
7757 (add-after 'install 'check
7758 (lambda* (#:key inputs outputs #:allow-other-keys)
7759 (add-installed-pythonpath inputs outputs)
7760 (invoke "pytest" "-v")
7761 #t)))))
7762 (propagated-inputs
7763 `(("python-pycodestyle" ,python-pycodestyle)
7764 ("python-entrypoints" ,python-entrypoints)
7765 ("python-pyflakes" ,python-pyflakes)
7766 ("python-mccabe" ,python-mccabe)))
7767 (native-inputs
7768 `(("python-mock" ,python-mock)
7769 ("python-pytest" ,python-pytest-bootstrap)))
7770 (home-page "https://gitlab.com/pycqa/flake8")
7771 (synopsis
7772 "The modular source code checker: pep8, pyflakes and co")
7773 (description
7774 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7775 (properties `((python2-variant . ,(delay python2-flake8))))
7776 (license license:expat)))
7777
7778 (define-public python2-flake8
7779 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7780 (package (inherit base)
7781 (propagated-inputs
7782 `(("python2-configparser" ,python2-configparser)
7783 ("python2-enum34" ,python2-enum34)
7784 ("python2-functools32" ,python2-functools32)
7785 ("python2-typing" ,python2-typing)
7786 ,@(package-propagated-inputs base))))))
7787
7788 ;; python-hacking requires flake8 <2.7.0.
7789 (define-public python-flake8-2.6
7790 (package
7791 (inherit python-flake8)
7792 (version "2.6.2")
7793 (source (origin
7794 (method url-fetch)
7795 (uri (pypi-uri "flake8" version))
7796 (sha256
7797 (base32
7798 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7799 (arguments
7800 `(#:phases
7801 (modify-phases %standard-phases
7802 (add-after 'unpack 'use-later-pycodestyles
7803 (lambda __
7804 (substitute* '("flake8.egg-info/requires.txt"
7805 "setup.py")
7806 (("pycodestyle >= 2.0, < 2.1")
7807 "pycodestyle >= 2.0"))
7808 #t))
7809 (delete 'check)
7810 (add-after 'install 'check
7811 (lambda* (#:key inputs outputs #:allow-other-keys)
7812 (add-installed-pythonpath inputs outputs)
7813 (invoke "pytest" "-v")
7814 #t)))))
7815 (propagated-inputs
7816 `(("python-pep8" ,python-pep8)
7817 ("python-pycodestyle" ,python-pycodestyle)
7818 ("python-entrypoints" ,python-entrypoints)
7819 ("python-pyflakes" ,python-pyflakes-1.2)
7820 ("python-mccabe" ,python-mccabe)))))
7821
7822 (define-public python-flake8-polyfill
7823 (package
7824 (name "python-flake8-polyfill")
7825 (version "1.0.2")
7826 (source
7827 (origin
7828 (method url-fetch)
7829 (uri (pypi-uri "flake8-polyfill" version))
7830 (sha256
7831 (base32
7832 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7833 (build-system python-build-system)
7834 (arguments
7835 '(#:phases
7836 (modify-phases %standard-phases
7837 (replace 'check
7838 (lambda _
7839 ;; Be compatible with Pytest 4:
7840 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7841 (substitute* "setup.cfg"
7842 (("\\[pytest\\]")
7843 "[tool:pytest]"))
7844
7845 (setenv "PYTHONPATH"
7846 (string-append (getcwd) "/build/lib:"
7847 (getenv "PYTHONPATH")))
7848 (invoke "py.test" "-v"))))))
7849 (native-inputs
7850 `(("python-flake8" ,python-flake8)
7851 ("python-mock" ,python-mock)
7852 ("python-pep8" ,python-pep8)
7853 ("python-pycodestyle" ,python-pycodestyle)
7854 ("python-pytest" ,python-pytest)))
7855 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7856 (synopsis "Polyfill package for Flake8 plugins")
7857 (description
7858 "This package that provides some compatibility helpers for Flake8
7859 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7860 (license license:expat)))
7861
7862 (define-public python2-flake8-polyfill
7863 (package-with-python2 python-flake8-polyfill))
7864
7865 (define-public python-mistune
7866 (package
7867 (name "python-mistune")
7868 (version "0.8.4")
7869 (source
7870 (origin
7871 (method url-fetch)
7872 (uri (pypi-uri "mistune" version))
7873 (sha256
7874 (base32
7875 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7876 (build-system python-build-system)
7877 (native-inputs
7878 `(("python-nose" ,python-nose)
7879 ("python-cython" ,python-cython)))
7880 (home-page "https://github.com/lepture/mistune")
7881 (synopsis "Markdown parser in pure Python")
7882 (description "This package provides a fast markdown parser in pure
7883 Python.")
7884 (license license:bsd-3)))
7885
7886 (define-public python2-mistune
7887 (package-with-python2 python-mistune))
7888
7889 (define-public python-markdown
7890 (package
7891 (name "python-markdown")
7892 (version "3.2.1")
7893 (source
7894 (origin
7895 (method url-fetch)
7896 (uri (pypi-uri "Markdown" version))
7897 (sha256
7898 (base32
7899 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7900 (build-system python-build-system)
7901 (native-inputs
7902 `(("python-nose" ,python-nose)
7903 ("python-pyyaml" ,python-pyyaml)))
7904 (home-page "https://python-markdown.github.io/")
7905 (synopsis "Python implementation of Markdown")
7906 (description
7907 "This package provides a Python implementation of John Gruber's
7908 Markdown. The library features international input, various Markdown
7909 extensions, and several HTML output formats. A command line wrapper
7910 markdown_py is also provided to convert Markdown files to HTML.")
7911 (properties `((python2-variant . ,(delay python2-markdown))))
7912 (license license:bsd-3)))
7913
7914 ;; Markdown 3.2 dropped support for Python 2.
7915 (define-public python2-markdown
7916 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7917 (package/inherit
7918 base
7919 (version "3.1.1")
7920 (source (origin
7921 (method url-fetch)
7922 (uri (pypi-uri "Markdown" version))
7923 (sha256
7924 (base32
7925 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7926
7927 (define-public python-ptyprocess
7928 (package
7929 (name "python-ptyprocess")
7930 (version "0.5.2")
7931 (source
7932 (origin
7933 (method url-fetch)
7934 (uri (pypi-uri "ptyprocess" version))
7935 (sha256
7936 (base32
7937 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7938 (build-system python-build-system)
7939 (native-inputs
7940 `(("python-nose" ,python-nose)))
7941 (arguments
7942 `(#:phases
7943 (modify-phases %standard-phases
7944 (replace 'check
7945 (lambda _ (invoke "nosetests"))))))
7946 (home-page "https://github.com/pexpect/ptyprocess")
7947 (synopsis "Run a subprocess in a pseudo terminal")
7948 (description
7949 "This package provides a Python library used to launch a subprocess in a
7950 pseudo terminal (pty), and interact with both the process and its pty.")
7951 (license license:isc)))
7952
7953 (define-public python2-ptyprocess
7954 (package-with-python2 python-ptyprocess))
7955
7956 (define-public python-cram
7957 (package
7958 (name "python-cram")
7959 (version "0.7")
7960 (home-page "https://bitheap.org/cram/")
7961 (source (origin
7962 (method url-fetch)
7963 (uri (list (string-append home-page "cram-"
7964 version ".tar.gz")
7965 (pypi-uri "cram" version)))
7966 (sha256
7967 (base32
7968 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7969 (arguments
7970 '(#:phases
7971 (modify-phases %standard-phases
7972 (add-after 'unpack 'patch-source
7973 (lambda _
7974 (substitute* (find-files "cram" ".*\\.py$")
7975 ;; Replace default shell path.
7976 (("/bin/sh") (which "sh")))
7977 (substitute* (find-files "tests" ".*\\.t$")
7978 (("md5") "md5sum")
7979 (("/bin/bash") (which "bash"))
7980 (("/bin/sh") (which "sh")))
7981 (substitute* "cram/_test.py"
7982 ;; This hack works around a bug triggered by substituting
7983 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7984 ;; "cram -h", which breaks the output at 80 characters. This
7985 ;; causes the line showing the default shell to break into two
7986 ;; lines, but the test expects a single line...
7987 (("env\\['COLUMNS'\\] = '80'")
7988 "env['COLUMNS'] = '160'"))
7989
7990 (substitute* "Makefile"
7991 ;; Recent versions of python-coverage have caused the test
7992 ;; coverage to decrease (as of version 0.7). Allow that.
7993 (("--fail-under=100")
7994 "--fail-under=90"))
7995
7996 #t))
7997 (replace 'check
7998 ;; The test phase uses the built library and executable.
7999 (lambda* (#:key inputs outputs #:allow-other-keys)
8000 (add-installed-pythonpath inputs outputs)
8001 (setenv "PATH" (string-append (getenv "PATH") ":"
8002 (assoc-ref outputs "out") "/bin"))
8003 (invoke "make" "test"))))))
8004 (build-system python-build-system)
8005 (native-inputs
8006 `(("python-coverage" ,python-coverage)
8007 ("which" ,which)))
8008 (synopsis "Simple testing framework for command line applications")
8009 (description
8010 "Cram is a functional testing framework for command line applications.
8011 Cram tests look like snippets of interactive shell sessions. Cram runs each
8012 command and compares the command output in the test with the command’s actual
8013 output.")
8014 (license license:gpl2+)))
8015
8016 (define-public python2-cram
8017 (package-with-python2 python-cram))
8018
8019 (define-public python-straight-plugin
8020 (package
8021 (name "python-straight-plugin")
8022 (version "1.4.1")
8023 (source
8024 (origin
8025 (method url-fetch)
8026 (uri (pypi-uri "straight.plugin" version))
8027 (sha256
8028 (base32
8029 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
8030 (build-system python-build-system)
8031 (home-page "https://github.com/ironfroggy/straight.plugin")
8032 (synopsis "Simple namespaced plugin facility")
8033 (description "Straight Plugin provides a type of plugin you can create from
8034 almost any existing Python modules, and an easy way for outside developers to
8035 add functionality and customization to your projects with their own plugins.")
8036 (license license:expat)))
8037
8038 (define-public python2-straight-plugin
8039 (package-with-python2 python-straight-plugin))
8040
8041 (define-public python-fonttools
8042 (package
8043 (name "python-fonttools")
8044 (version "4.6.0")
8045 (source (origin
8046 (method url-fetch)
8047 (uri (pypi-uri "fonttools" version ".zip"))
8048 (sha256
8049 (base32
8050 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
8051 (build-system python-build-system)
8052 (native-inputs
8053 `(("unzip" ,unzip)
8054 ("python-pytest" ,python-pytest)
8055 ("python-pytest-runner" ,python-pytest-runner)))
8056 (home-page "https://github.com/fonttools/fonttools")
8057 (synopsis "Tools to manipulate font files")
8058 (description
8059 "FontTools/TTX is a library to manipulate font files from Python. It
8060 supports reading and writing of TrueType/OpenType fonts, reading and writing
8061 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
8062 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
8063 from an XML-based format.")
8064 (license license:expat)))
8065
8066 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
8067 (define-public python2-fonttools
8068 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
8069 (package/inherit
8070 base
8071 (version "3.44.0")
8072 (source (origin
8073 (method url-fetch)
8074 (uri (pypi-uri "fonttools" version ".zip"))
8075 (sha256
8076 (base32
8077 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
8078
8079 (define-public python-ly
8080 (package
8081 (name "python-ly")
8082 (version "0.9.5")
8083 (source
8084 (origin
8085 (method url-fetch)
8086 (uri (pypi-uri name version))
8087 (sha256
8088 (base32
8089 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
8090 (build-system python-build-system)
8091 (arguments
8092 ;; FIXME: Some tests need network access.
8093 '(#:tests? #f))
8094 (synopsis "Tool and library for manipulating LilyPond files")
8095 (description "This package provides a Python library to parse, manipulate
8096 or create documents in LilyPond format. A command line program ly is also
8097 provided that can be used to do various manipulations with LilyPond files.")
8098 (home-page "https://pypi.org/project/python-ly/")
8099 (license license:gpl2+)))
8100
8101 (define-public python-appdirs
8102 (package
8103 (name "python-appdirs")
8104 (version "1.4.3")
8105 (source
8106 (origin
8107 (method url-fetch)
8108 (uri (pypi-uri "appdirs" version))
8109 (sha256
8110 (base32
8111 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
8112 (build-system python-build-system)
8113 (home-page "https://github.com/ActiveState/appdirs")
8114 (synopsis
8115 "Determine platform-specific dirs, e.g. a \"user data dir\"")
8116 (description
8117 "This module provides a portable way of finding out where user data
8118 should be stored on various operating systems.")
8119 (license license:expat)))
8120
8121 (define-public python2-appdirs
8122 (package-with-python2 python-appdirs))
8123
8124 (define-public python-llfuse
8125 (package
8126 (name "python-llfuse")
8127 (version "1.3.6")
8128 (source (origin
8129 (method url-fetch)
8130 (uri (pypi-uri "llfuse" version ".tar.bz2"))
8131 (sha256
8132 (base32
8133 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
8134 (build-system python-build-system)
8135 (inputs
8136 `(("fuse" ,fuse)
8137 ("attr" ,attr)))
8138 (native-inputs
8139 `(("pkg-config" ,pkg-config)))
8140 (synopsis "Python bindings for FUSE")
8141 (description
8142 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
8143 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
8144 (license license:lgpl2.0+)
8145 (properties `((python2-variant . ,(delay python2-llfuse))))))
8146
8147 (define-public python2-llfuse
8148 (package (inherit (package-with-python2
8149 (strip-python2-variant python-llfuse)))
8150 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
8151
8152 ;; For attic-0.16
8153 (define-public python-llfuse-0.41
8154 (package (inherit python-llfuse)
8155 (version "0.41.1")
8156 (source (origin
8157 (method url-fetch)
8158 (uri (string-append
8159 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8160 "llfuse-" version ".tar.bz2"))
8161 (sha256
8162 (base32
8163 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8164 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8165 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8166 (license (list license:expat license:lgpl2.0+))))
8167
8168 (define-public python-msgpack
8169 (package
8170 (name "python-msgpack")
8171 (version "1.0.0")
8172 (source (origin
8173 (method url-fetch)
8174 (uri (pypi-uri "msgpack" version))
8175 (sha256
8176 (base32
8177 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8178 (build-system python-build-system)
8179 (arguments
8180 `(#:modules ((guix build utils)
8181 (guix build python-build-system)
8182 (ice-9 ftw)
8183 (srfi srfi-1)
8184 (srfi srfi-26))
8185 #:phases
8186 (modify-phases %standard-phases
8187 (replace 'check
8188 (lambda _
8189 (let ((cwd (getcwd)))
8190 (setenv "PYTHONPATH"
8191 (string-append cwd "/build/"
8192 (find (cut string-prefix? "lib" <>)
8193 (scandir (string-append cwd "/build")))
8194 ":"
8195 (getenv "PYTHONPATH")))
8196 (invoke "pytest" "-v" "test")))))))
8197 (native-inputs
8198 `(("python-pytest" ,python-pytest)))
8199 (synopsis "MessagePack (de)serializer")
8200 (description "MessagePack is a fast, compact binary serialization format,
8201 suitable for similar data to JSON. This package provides CPython bindings for
8202 reading and writing MessagePack data.")
8203 (home-page "https://pypi.org/project/msgpack/")
8204 (license license:asl2.0)))
8205
8206 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8207 ;; release 0.5. Some packages like borg still call it by the old name for now.
8208 ;; <https://bugs.gnu.org/30662>
8209 (define-public python-msgpack-transitional
8210 (package
8211 (inherit python-msgpack)
8212 (name "python-msgpack-transitional")
8213 (version "0.5.6")
8214 (source (origin
8215 (method url-fetch)
8216 (uri (pypi-uri "msgpack" version))
8217 (sha256
8218 (base32
8219 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8220 (arguments
8221 (substitute-keyword-arguments (package-arguments python-msgpack)
8222 ((#:phases phases)
8223 `(modify-phases ,phases
8224 (add-after 'unpack 'configure-transitional
8225 (lambda _
8226 ;; Keep using the old name.
8227 (substitute* "setup.py"
8228 (("TRANSITIONAL = False")
8229 "TRANSITIONAL = 1"))
8230 #t))))))))
8231
8232 (define-public python2-msgpack
8233 (package-with-python2 python-msgpack))
8234
8235 (define-public python-netaddr
8236 (package
8237 (name "python-netaddr")
8238 (version "0.7.19")
8239 (source
8240 (origin
8241 (method url-fetch)
8242 (uri (pypi-uri "netaddr" version))
8243 (sha256
8244 (base32
8245 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8246 (build-system python-build-system)
8247 (arguments `(#:tests? #f)) ;; No tests.
8248 (home-page "https://github.com/drkjam/netaddr/")
8249 (synopsis "Pythonic manipulation of network addresses")
8250 (description
8251 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8252 and MAC network addresses.")
8253 (license license:bsd-3)))
8254
8255 (define-public python2-netaddr
8256 (package-with-python2 python-netaddr))
8257
8258 (define-public python2-pyroute2
8259 (package
8260 (name "python2-pyroute2")
8261 (version "0.5.6")
8262 (source
8263 (origin
8264 (method url-fetch)
8265 (uri (pypi-uri "pyroute2" version))
8266 (sha256
8267 (base32
8268 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8269 (build-system python-build-system)
8270 (arguments
8271 `(#:python ,python-2)) ;Python 3.x is not supported
8272 (home-page "https://github.com/svinota/pyroute2")
8273 (synopsis "Python netlink library")
8274 (description
8275 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8276 Supported netlink families and protocols include:
8277 @itemize
8278 @item rtnl, network settings - addresses, routes, traffic controls
8279 @item nfnetlink - netfilter API: ipset, nftables, ...
8280 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8281 @item devlink - manage and monitor devlink-enabled hardware
8282 @item generic - generic netlink families
8283 @itemize
8284 @item nl80211 - wireless functions API (basic support)
8285 @item taskstats - extended process statistics
8286 @item acpi_events - ACPI events monitoring
8287 @item thermal_events - thermal events monitoring
8288 @item VFS_DQUOT - disk quota events monitoring
8289 @end itemize
8290 @end itemize")
8291 (license license:gpl2+)))
8292
8293 (define-public python-wrapt
8294 (package
8295 (name "python-wrapt")
8296 (version "1.11.2")
8297 (source
8298 (origin
8299 (method url-fetch)
8300 (uri (pypi-uri "wrapt" version))
8301 (sha256
8302 (base32
8303 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8304 (build-system python-build-system)
8305 (arguments
8306 ;; Tests are not included in the tarball, they are only available in the
8307 ;; git repository.
8308 `(#:tests? #f))
8309 (home-page "https://github.com/GrahamDumpleton/wrapt")
8310 (synopsis "Module for decorators, wrappers and monkey patching")
8311 (description
8312 "The aim of the wrapt module is to provide a transparent object proxy for
8313 Python, which can be used as the basis for the construction of function
8314 wrappers and decorator functions.")
8315 (license license:bsd-2)))
8316
8317 (define-public python2-wrapt
8318 (package-with-python2 python-wrapt))
8319
8320 (define-public python-xlrd
8321 (package
8322 (name "python-xlrd")
8323 (version "1.2.0")
8324 (source (origin
8325 (method url-fetch)
8326 (uri (pypi-uri "xlrd" version))
8327 (sha256
8328 (base32
8329 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8330 (build-system python-build-system)
8331 (arguments
8332 `(#:phases
8333 (modify-phases %standard-phases
8334 ;; Some tests depend on writing a temporary file to the user's home
8335 ;; directory.
8336 (add-after 'unpack 'fix-tests
8337 (lambda _
8338 (delete-file "tests/test_open_workbook.py")
8339 #t)))))
8340 (home-page "http://www.python-excel.org/")
8341 (synopsis "Library for extracting data from Excel files")
8342 (description "This package provides a library to extract data from
8343 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8344 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8345 Unicode-aware. It is not intended as an end-user tool.")
8346 (license license:bsd-3)))
8347
8348 (define-public python2-xlrd
8349 (package-with-python2 python-xlrd))
8350
8351 (define-public python-prettytable
8352 (package
8353 (name "python-prettytable")
8354 (version "0.7.2")
8355 (source
8356 (origin
8357 (method url-fetch)
8358 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8359 (sha256
8360 (base32
8361 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8362 (build-system python-build-system)
8363 (home-page "https://code.google.com/archive/p/prettytable/")
8364 (synopsis "Display tabular data in an ASCII table format")
8365 (description
8366 "A library designed to represent tabular data in visually appealing ASCII
8367 tables. PrettyTable allows for selection of which columns are to be printed,
8368 independent alignment of columns (left or right justified or centred) and
8369 printing of sub-tables by specifying a row range.")
8370 (license license:bsd-3)))
8371
8372 (define-public python2-prettytable
8373 (package-with-python2 python-prettytable))
8374
8375 (define-public python-tables
8376 (package
8377 (name "python-tables")
8378 (version "3.6.1")
8379 (source
8380 (origin
8381 (method url-fetch)
8382 (uri (pypi-uri "tables" version))
8383 (sha256
8384 (base32
8385 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8386 (modules '((guix build utils)))
8387 (snippet
8388 '(begin
8389 ;; Remove pre-compiled .pyc files from source.
8390 (for-each delete-file-recursively
8391 (find-files "." "__pycache__" #:directories? #t))
8392 (for-each delete-file (find-files "." "\\.pyc$"))
8393 #t))))
8394 (build-system python-build-system)
8395 (arguments
8396 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8397 ;; or "check", so we must override the build and check phases.
8398 #:phases
8399 (modify-phases %standard-phases
8400 (add-after 'unpack 'use-gcc
8401 (lambda _
8402 (substitute* "setup.py"
8403 (("^( +)compiler = new_compiler\\(\\)" line indent)
8404 (string-append line
8405 "\n"
8406 indent
8407 "compiler.set_executables(compiler='gcc',"
8408 "compiler_so='gcc',"
8409 "linker_exe='gcc',"
8410 "linker_so='gcc -shared')")))
8411 #t))
8412 (add-after 'unpack 'disable-tuning
8413 (lambda _
8414 (substitute* "setup.py"
8415 (("cpu_flags = .*")
8416 "cpu_flags = ['sse2']\n"))
8417 #t))
8418 (replace 'build
8419 (lambda* (#:key inputs #:allow-other-keys)
8420 (invoke "python" "setup.py" "build"
8421 (string-append "--hdf5="
8422 (assoc-ref inputs "hdf5")))))
8423 (replace 'check
8424 (lambda* (#:key inputs #:allow-other-keys)
8425 (invoke "python" "setup.py" "check"
8426 (string-append "--hdf5="
8427 (assoc-ref inputs "hdf5"))))))))
8428 (propagated-inputs
8429 `(("python-numexpr" ,python-numexpr)
8430 ("python-numpy" ,python-numpy)))
8431 (native-inputs
8432 `(("python-cython" ,python-cython)
8433 ("pkg-config" ,pkg-config)))
8434 (inputs
8435 `(("hdf5" ,hdf5-1.10)
8436 ("bzip2" ,bzip2)
8437 ("zlib" ,zlib)))
8438 (home-page "https://www.pytables.org/")
8439 (synopsis "Hierarchical datasets for Python")
8440 (description "PyTables is a package for managing hierarchical datasets and
8441 designed to efficiently cope with extremely large amounts of data.")
8442 (license license:bsd-3)))
8443
8444 (define-public python2-tables
8445 (package-with-python2 python-tables))
8446
8447 (define-public python-pytest-black
8448 (package
8449 (name "python-pytest-black")
8450 (version "0.3.8")
8451 (source
8452 (origin
8453 (method url-fetch)
8454 (uri (pypi-uri "pytest-black" version))
8455 (sha256
8456 (base32
8457 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8458 (build-system python-build-system)
8459 (propagated-inputs
8460 `(("python-pytest" ,python-pytest)
8461 ("python-black" ,python-black)
8462 ("python-toml" ,python-toml)))
8463 (native-inputs
8464 `(("python-setuptools-scm" ,python-setuptools-scm)))
8465 (home-page "https://github.com/shopkeep/pytest-black")
8466 (synopsis "Pytest plugin to enable format checking with black")
8467 (description
8468 "This package provides a pytest plugin to enable format checking with the
8469 Python code formatter \"black\".")
8470 (license license:expat)))
8471
8472 (define-public python-get-version
8473 (package
8474 (name "python-get-version")
8475 (version "2.1")
8476 (source
8477 (origin
8478 (method url-fetch)
8479 (uri (pypi-uri "get_version" version))
8480 (sha256
8481 (base32
8482 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8483 (build-system python-build-system)
8484 (propagated-inputs
8485 `(("python-pygments" ,python-pygments)
8486 ("python-pytest" ,python-pytest)
8487 ("python-pytest-black" ,python-pytest-black)
8488 ("python-pytest-cov" ,python-pytest-cov)
8489 ("python-setuptools" ,python-setuptools)
8490 ("python-testpath" ,python-testpath)))
8491 (home-page "https://github.com/flying-sheep/get_version")
8492 (synopsis "Version helper in the spirit of versioneer")
8493 (description
8494 "This package provides a version helper that lets you automatically use
8495 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8496 also supports getting the version from Python source distributions or, once
8497 your package is installed, via @code{pkg_resources} (part of
8498 @code{setuptools}).")
8499 (license license:gpl3+)))
8500
8501 (define-public python-legacy-api-wrap
8502 (package
8503 (name "python-legacy-api-wrap")
8504 (version "1.2")
8505 (source
8506 (origin
8507 (method url-fetch)
8508 (uri (pypi-uri "legacy-api-wrap" version))
8509 (sha256
8510 (base32
8511 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8512 (build-system python-build-system)
8513 (propagated-inputs
8514 `(("python-get-version" ,python-get-version)
8515 ("python-pytest" ,python-pytest)
8516 ("python-pytest-black" ,python-pytest-black)
8517 ("python-pytest-cov" ,python-pytest-cov)
8518 ("python-setuptools" ,python-setuptools)))
8519 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8520 (synopsis "Legacy API wrapper")
8521 (description "This module defines a decorator to wrap legacy APIs. The
8522 primary use case is APIs defined before keyword-only parameters existed.")
8523 (license license:gpl3+)))
8524
8525 (define-public python-pyasn1
8526 (package
8527 (name "python-pyasn1")
8528 (version "0.4.8")
8529 (source
8530 (origin
8531 (method url-fetch)
8532 (uri (pypi-uri "pyasn1" version))
8533 (sha256
8534 (base32
8535 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8536 (build-system python-build-system)
8537 (home-page "http://pyasn1.sourceforge.net/")
8538 (synopsis "ASN.1 types and codecs")
8539 (description
8540 "This is an implementation of ASN.1 types and codecs in Python. It is
8541 suitable for a wide range of protocols based on the ASN.1 specification.")
8542 (license license:bsd-2)))
8543
8544 (define-public python2-pyasn1
8545 (package-with-python2 python-pyasn1))
8546
8547 (define-public python-pyasn1-modules
8548 (package
8549 (name "python-pyasn1-modules")
8550 (version "0.2.2")
8551 (source
8552 (origin
8553 (method url-fetch)
8554 (uri (pypi-uri "pyasn1-modules" version))
8555 (sha256
8556 (base32
8557 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8558 (build-system python-build-system)
8559 (propagated-inputs
8560 `(("python-pyasn1" ,python-pyasn1)))
8561 (home-page "https://sourceforge.net/projects/pyasn1/")
8562 (synopsis "ASN.1 codec implementations")
8563 (description
8564 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8565 implementations of ASN.1-based codecs and protocols.")
8566 (license license:bsd-3)))
8567
8568 (define-public python2-pyasn1-modules
8569 (package-with-python2 python-pyasn1-modules))
8570
8571 (define-public python-ipaddress
8572 (package
8573 (name "python-ipaddress")
8574 (version "1.0.22")
8575 (source (origin
8576 (method url-fetch)
8577 (uri (pypi-uri "ipaddress" version))
8578 (sha256
8579 (base32
8580 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8581 (build-system python-build-system)
8582 (home-page "https://github.com/phihag/ipaddress")
8583 (synopsis "IP address manipulation library")
8584 (description
8585 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8586 in Python. This library is used to create, poke at, and manipulate IPv4 and
8587 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8588 module to older versions of Python.")
8589 (license license:psfl)))
8590
8591 (define-public python2-ipaddress
8592 (package-with-python2 python-ipaddress))
8593
8594 (define-public python2-ipaddr
8595 (package
8596 (name "python2-ipaddr")
8597 (version "2.1.11")
8598 (source
8599 (origin
8600 (method url-fetch)
8601 (uri (pypi-uri "ipaddr" version))
8602 (sha256
8603 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8604 (build-system python-build-system)
8605 (arguments
8606 `(#:python ,python-2 ;version 2 only
8607 #:phases
8608 (modify-phases %standard-phases
8609 (replace 'check
8610 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8611 (home-page "https://github.com/google/ipaddr-py")
8612 (synopsis "IP address manipulation library")
8613 (description
8614 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8615 IPv6 addresses and networks.
8616
8617 For new implementations you may prefer to use the standard module
8618 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8619 versions of Python.")
8620 (license license:asl2.0)))
8621
8622 (define-public python-idna
8623 (package
8624 (name "python-idna")
8625 (version "2.9")
8626 (source
8627 (origin
8628 (method url-fetch)
8629 (uri (pypi-uri "idna" version))
8630 (sha256
8631 (base32
8632 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
8633 (build-system python-build-system)
8634 (home-page "https://github.com/kjd/idna")
8635 (synopsis "Internationalized domain names in applications")
8636 (description
8637 "This is a library to support the Internationalised Domain Names in
8638 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8639 protocol is often referred to as “IDNA2008” and can produce different results
8640 from the earlier standard from 2003. The library is also intended to act as a
8641 suitable drop-in replacement for the “encodings.idna” module that comes with
8642 the Python standard library but currently only supports the older 2003
8643 specification.")
8644 (license license:bsd-4)))
8645
8646 (define-public python-idna-2.7
8647 (package (inherit python-idna)
8648 (version "2.7")
8649 (source (origin
8650 (method url-fetch)
8651 (uri (pypi-uri "idna" version))
8652 (sha256
8653 (base32
8654 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8655
8656
8657 (define-public python2-idna
8658 (package-with-python2 python-idna))
8659
8660 (define-public python-idna-ssl
8661 (package
8662 (name "python-idna-ssl")
8663 (version "1.0.1")
8664 (source
8665 (origin
8666 (method url-fetch)
8667 (uri (pypi-uri "idna-ssl" version))
8668 (sha256
8669 (base32
8670 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8671 (build-system python-build-system)
8672 (arguments
8673 `(#:tests? #f)) ;circular dependency with python-aiohttp
8674 (home-page "https://github.com/aio-libs/idna-ssl")
8675 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8676 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8677 domains support.")
8678 (license license:expat)))
8679
8680 (define-public python-pretend
8681 (package
8682 (name "python-pretend")
8683 (version "1.0.9")
8684 (source
8685 (origin
8686 (method url-fetch)
8687 (uri (pypi-uri "pretend" version))
8688 (sha256
8689 (base32
8690 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8691 (build-system python-build-system)
8692 (home-page "https://github.com/alex/pretend")
8693 (synopsis "Library for stubbing in Python")
8694 (description
8695 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8696 technique for writing tests. You may hear the term mixed up with mocks,
8697 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8698 responses, rather than doing any computation.")
8699 (license license:bsd-3)))
8700
8701 (define-public python2-pretend
8702 (package-with-python2 python-pretend))
8703
8704 (define-public python-pip
8705 (package
8706 (name "python-pip")
8707 (version "20.0.2")
8708 (source
8709 (origin
8710 (method url-fetch)
8711 (uri (pypi-uri "pip" version))
8712 (sha256
8713 (base32
8714 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8715 (build-system python-build-system)
8716 (arguments
8717 '(#:tests? #f)) ; there are no tests in the pypi archive.
8718 (home-page "https://pip.pypa.io/")
8719 (synopsis "Package manager for Python software")
8720 (description
8721 "Pip is a package manager for Python software, that finds packages on the
8722 Python Package Index (PyPI).")
8723 (license license:expat)))
8724
8725 (define-public python2-pip
8726 (package-with-python2 python-pip))
8727
8728 (define-public python-tlsh
8729 (package
8730 (name "python-tlsh")
8731 (version "3.4.5")
8732 (home-page "https://github.com/trendmicro/tlsh")
8733 (source
8734 (origin
8735 (method git-fetch)
8736 (uri (git-reference
8737 (url "https://github.com/trendmicro/tlsh.git")
8738 (commit (string-append "v" version))))
8739 (file-name (git-file-name name version))
8740 (sha256
8741 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8742 (build-system cmake-build-system)
8743 (arguments
8744 '(#:out-of-source? #f
8745 #:phases (modify-phases %standard-phases
8746 (replace
8747 'install
8748 (lambda* (#:key outputs #:allow-other-keys)
8749 ;; Build and install the Python bindings. The underlying
8750 ;; C++ library is apparently not meant to be installed.
8751 (let ((out (assoc-ref outputs "out")))
8752 (with-directory-excursion "py_ext"
8753 (and (system* "python" "setup.py" "build")
8754 (system* "python" "setup.py" "install"
8755 (string-append "--prefix=" out))))))))))
8756 (inputs `(("python" ,python-wrapper))) ;for the bindings
8757 (synopsis "Fuzzy matching library for Python")
8758 (description
8759 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8760 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8761 value which can be used for similarity comparisons. Similar objects have
8762 similar hash values, which allows for the detection of similar objects by
8763 comparing their hash values. The byte stream should have a sufficient amount
8764 of complexity; for example, a byte stream of identical bytes will not generate
8765 a hash value.")
8766 (license license:asl2.0)))
8767
8768 (define-public python2-tlsh
8769 (package
8770 (inherit python-tlsh)
8771 (name "python2-tlsh")
8772 (inputs `(("python" ,python-2)))))
8773
8774 (define-public python-termcolor
8775 (package
8776 (name "python-termcolor")
8777 (version "1.1.0")
8778 (source
8779 (origin
8780 (method url-fetch)
8781 (uri (pypi-uri "termcolor" version))
8782 (sha256
8783 (base32
8784 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8785 (build-system python-build-system)
8786 (arguments
8787 ;; There are no tests.
8788 `(#:tests? #f))
8789 (home-page "https://pypi.org/project/termcolor/")
8790 (synopsis "ANSII Color formatting for terminal output")
8791 (description
8792 "This package provides ANSII Color formatting for output in terminals.")
8793 (license license:expat)))
8794
8795 (define-public python2-termcolor
8796 (package-with-python2 python-termcolor))
8797
8798 (define-public python-libarchive-c
8799 (package
8800 (name "python-libarchive-c")
8801 (version "2.9")
8802 (source (origin
8803 (method url-fetch)
8804 (uri (pypi-uri "libarchive-c" version))
8805 (sha256
8806 (base32
8807 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8808 (build-system python-build-system)
8809 (arguments
8810 '(#:phases (modify-phases %standard-phases
8811 (add-before
8812 'build 'reference-libarchive
8813 (lambda* (#:key inputs #:allow-other-keys)
8814 ;; Retain the absolute file name of libarchive.so.
8815 (let ((libarchive (assoc-ref inputs "libarchive")))
8816 (substitute* "libarchive/ffi.py"
8817 (("find_library\\('archive'\\)")
8818 (string-append "'" libarchive
8819 "/lib/libarchive.so'"))))))
8820 (replace 'check
8821 (lambda _ (invoke "pytest" "-vv"))))))
8822 (native-inputs
8823 `(("python-mock" ,python-mock)
8824 ("python-pytest" ,python-pytest)))
8825 (inputs
8826 `(("libarchive" ,libarchive)))
8827 (home-page "https://github.com/Changaco/python-libarchive-c")
8828 (synopsis "Python interface to libarchive")
8829 (description
8830 "This package provides Python bindings to libarchive, a C library to
8831 access possibly compressed archives in many different formats. It uses
8832 Python's @code{ctypes} foreign function interface (FFI).")
8833 (license license:lgpl2.0+)))
8834
8835 (define-public python2-libarchive-c
8836 (package-with-python2 python-libarchive-c))
8837
8838 (define-public python-file
8839 (package
8840 (inherit file)
8841 (name "python-file")
8842 (build-system python-build-system)
8843 (arguments
8844 '(#:tests? #f ;no tests
8845 #:configure-flags '("--single-version-externally-managed" "--root=/")
8846 #:phases (modify-phases %standard-phases
8847 (add-before 'build 'change-directory
8848 (lambda _
8849 (chdir "python")
8850 #t))
8851 (add-before 'build 'set-library-file-name
8852 (lambda* (#:key inputs #:allow-other-keys)
8853 (let ((file (assoc-ref inputs "file")))
8854 (substitute* "magic.py"
8855 (("find_library\\('magic'\\)")
8856 (string-append "'" file "/lib/libmagic.so'")))
8857 #t))))))
8858 (inputs `(("file" ,file)))
8859 (native-inputs (if (%current-target-system)
8860 `(("self" ,this-package))
8861 '()))
8862 (synopsis "Python bindings to the libmagic file type guesser. Note that
8863 this module and the python-magic module both provide a \"magic.py\" file;
8864 these two modules, which are different and were developed separately, both
8865 serve the same purpose: provide Python bindings for libmagic.")))
8866
8867 (define-public python2-file
8868 (package-with-python2 python-file))
8869
8870 (define-public python-debian
8871 (package
8872 (name "python-debian")
8873 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8874 (version "0.1.36")
8875 (source
8876 (origin
8877 ;; Use git-fetch, as pypi doesn't include test suite.
8878 (method git-fetch)
8879 (uri (git-reference
8880 (url home-page)
8881 (commit version)))
8882 (file-name (git-file-name name version))
8883 (sha256
8884 (base32
8885 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8886 (build-system python-build-system)
8887 (arguments
8888 `(#:phases (modify-phases %standard-phases
8889 (add-after 'unpack 'remove-debian-specific-tests
8890 ;; python-apt, apt and dpkg are not yet available in guix,
8891 ;; and these tests heavily depend on them.
8892 (lambda _
8893 (delete-file "lib/debian/tests/test_deb822.py")
8894 (delete-file "lib/debian/tests/test_debfile.py")
8895 #t)))))
8896 (propagated-inputs
8897 `(("python-six" ,python-six)
8898 ("python-chardet" ,python-chardet)))
8899 (synopsis "Debian package related modules")
8900 (description
8901 ;; XXX: Use @enumerate instead of @itemize to work around
8902 ;; <http://bugs.gnu.org/21772>.
8903 "This package provides Python modules that abstract many formats of
8904 Debian-related files, such as:
8905
8906 @enumerate
8907 @item Debtags information;
8908 @item @file{debian/changelog} files;
8909 @item packages files, pdiffs;
8910 @item control files of single or multiple RFC822-style paragraphs---e.g.
8911 @file{debian/control}, @file{.changes}, @file{.dsc};
8912 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8913 contained files and meta-information.
8914 @end enumerate\n")
8915
8916 ;; Modules are either GPLv2+ or GPLv3+.
8917 (license license:gpl3+)))
8918
8919 (define-public python-nbformat
8920 (package
8921 (name "python-nbformat")
8922 (version "4.4.0")
8923 (source
8924 (origin
8925 (method url-fetch)
8926 (uri (pypi-uri "nbformat" version))
8927 (sha256
8928 (base32
8929 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8930 (build-system python-build-system)
8931 (arguments `(#:tests? #f)) ; no test target
8932 (propagated-inputs
8933 `(("python-ipython-genutils" ,python-ipython-genutils)
8934 ("python-jsonschema" ,python-jsonschema)
8935 ("python-jupyter-core" ,python-jupyter-core)
8936 ("python-traitlets" ,python-traitlets)))
8937 (home-page "http://jupyter.org")
8938 (synopsis "Jupyter Notebook format")
8939 (description "This package provides the reference implementation of the
8940 Jupyter Notebook format and Python APIs for working with notebooks.")
8941 (license license:bsd-3)))
8942
8943 (define-public python2-nbformat
8944 (package-with-python2 python-nbformat))
8945
8946 (define-public python-bleach
8947 (package
8948 (name "python-bleach")
8949 (version "3.1.3")
8950 (source
8951 (origin
8952 (method url-fetch)
8953 (uri (pypi-uri "bleach" version))
8954 (sha256
8955 (base32
8956 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8957 (build-system python-build-system)
8958 (propagated-inputs
8959 `(("python-webencodings" ,python-webencodings)
8960 ("python-six" ,python-six)))
8961 (native-inputs
8962 `(("python-datrie" ,python-datrie)
8963 ("python-genshi" ,python-genshi)
8964 ("python-lxml" ,python-lxml)
8965 ("python-pytest" ,python-pytest)))
8966 (home-page "https://github.com/mozilla/bleach")
8967 (synopsis "Whitelist-based HTML-sanitizing tool")
8968 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8969 (license license:asl2.0)))
8970
8971 (define-public python2-bleach
8972 (package-with-python2 python-bleach))
8973
8974 (define-public python-entrypoints
8975 (package
8976 (name "python-entrypoints")
8977 (version "0.3")
8978 (source
8979 (origin
8980 (method url-fetch)
8981 (uri (pypi-uri "entrypoints" version))
8982 (sha256
8983 (base32
8984 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8985 (build-system python-build-system)
8986 ;; The package does not come with a setup.py file, so we have to generate
8987 ;; one ourselves.
8988 (arguments
8989 `(#:tests? #f
8990 #:phases
8991 (modify-phases %standard-phases
8992 (add-after 'unpack 'create-setup.py
8993 (lambda _
8994 (call-with-output-file "setup.py"
8995 (lambda (port)
8996 (format port "\
8997 from setuptools import setup
8998 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8999 " ,version))))))))
9000 (home-page "https://github.com/takluyver/entrypoints")
9001 (synopsis "Discover and load entry points from installed Python packages")
9002 (description "Entry points are a way for Python packages to advertise
9003 objects with some common interface. The most common examples are
9004 @code{console_scripts} entry points, which define shell commands by
9005 identifying a Python function to run. The @code{entrypoints} module contains
9006 functions to find and load entry points.")
9007 (license license:expat)))
9008
9009 (define-public python2-entrypoints
9010 (package-with-python2 python-entrypoints))
9011
9012 (define-public python-epc
9013 (package
9014 (name "python-epc")
9015 (version "0.0.5")
9016 (source
9017 (origin
9018 (method url-fetch)
9019 (uri (pypi-uri "epc" version))
9020 (sha256
9021 (base32
9022 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
9023 (build-system python-build-system)
9024 (propagated-inputs
9025 `(("python-sexpdata" ,python-sexpdata)))
9026 (native-inputs
9027 `(("python-nose" ,python-nose)))
9028 (home-page "https://github.com/tkf/python-epc")
9029 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
9030 (description
9031 "Python-EPC can call elisp functions from Python and Python functions
9032 from elisp.")
9033 (license license:gpl3)))
9034
9035 (define-public python-nbconvert
9036 (package
9037 (name "python-nbconvert")
9038 (version "5.0.0b1")
9039 (source
9040 (origin
9041 (method url-fetch)
9042 (uri (pypi-uri "nbconvert" version))
9043 (sha256
9044 (base32
9045 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
9046 (build-system python-build-system)
9047 (arguments
9048 `(;; The "bdist_egg" target is disabled by default, causing the installation
9049 ;; to fail.
9050 #:configure-flags (list "bdist_egg")
9051 ;; FIXME: 5 failures, 40 errors.
9052 #:tests? #f))
9053 ;; #:phases
9054 ;; (modify-phases %standard-phases
9055 ;; (replace 'check
9056 ;; (lambda _
9057 ;; (zero? (system* "py.test" "-v")))))
9058 (native-inputs
9059 `(("python-pytest" ,python-pytest)))
9060 (propagated-inputs
9061 `(("python-bleach" ,python-bleach)
9062 ("python-entrypoints" ,python-entrypoints)
9063 ("python-jinja2" ,python-jinja2)
9064 ("python-jupyter-core" ,python-jupyter-core)
9065 ("python-mistune" ,python-mistune)
9066 ("python-nbformat" ,python-nbformat)
9067 ("python-pygments" ,python-pygments)
9068 ("python-traitlets" ,python-traitlets)))
9069 (home-page "http://jupyter.org")
9070 (synopsis "Converting Jupyter Notebooks")
9071 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
9072 notebooks to various other formats via Jinja templates. It allows you to
9073 convert an @code{.ipynb} notebook file into various static formats including:
9074
9075 @enumerate
9076 @item HTML
9077 @item LaTeX
9078 @item PDF
9079 @item Reveal JS
9080 @item Markdown (md)
9081 @item ReStructured Text (rst)
9082 @item executable script
9083 @end enumerate\n")
9084 (license license:bsd-3)))
9085
9086 (define-public python2-nbconvert
9087 (package-with-python2 python-nbconvert))
9088
9089 (define-public python-notebook
9090 (package
9091 (name "python-notebook")
9092 (version "5.7.4")
9093 (source (origin
9094 (method url-fetch)
9095 (uri (pypi-uri "notebook" version))
9096 (sha256
9097 (base32
9098 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
9099 (build-system python-build-system)
9100 (arguments
9101 `(#:phases
9102 (modify-phases %standard-phases
9103 (replace 'check
9104 (lambda _
9105 ;; These tests require a browser
9106 (delete-file-recursively "notebook/tests/selenium")
9107 ;; Some tests need HOME
9108 (setenv "HOME" "/tmp")
9109 ;; This file contains "warningfilters", which are not supported
9110 ;; by this version of nose.
9111 (delete-file "setup.cfg")
9112 (with-directory-excursion "/tmp"
9113 (invoke "nosetests" "-v"))
9114 #t)))))
9115 (propagated-inputs
9116 `(("python-jupyter-core" ,python-jupyter-core)
9117 ("python-nbformat" ,python-nbformat)
9118 ("python-nbconvert" ,python-nbconvert)
9119 ("python-prometheus-client" ,python-prometheus-client)
9120 ("python-send2trash" ,python-send2trash)
9121 ("python-terminado" ,python-terminado)))
9122 (native-inputs
9123 `(("python-nose" ,python-nose)
9124 ("python-sphinx" ,python-sphinx)
9125 ("python-requests" ,python-requests)))
9126 (home-page "http://jupyter.org/")
9127 (synopsis "Web-based notebook environment for interactive computing")
9128 (description
9129 "The Jupyter HTML notebook is a web-based notebook environment for
9130 interactive computing.")
9131 (properties `((python2-variant . ,(delay python2-notebook))))
9132 (license license:bsd-3)))
9133
9134 (define-public python2-notebook
9135 (let ((base (package-with-python2
9136 (strip-python2-variant python-notebook))))
9137 (package (inherit base)
9138 (native-inputs
9139 `(("python2-mock" ,python2-mock)
9140 ,@(package-native-inputs base)))
9141 (arguments
9142 (substitute-keyword-arguments (package-arguments base)
9143 ((#:phases phases)
9144 `(modify-phases ,phases
9145 (add-before 'check 'disable-test-case
9146 ;; The test requires network access to localhost. Curiously it
9147 ;; fails with Python 2 only. Simply make the test-case return
9148 ;; immediately.
9149 (lambda _
9150 (substitute*
9151 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
9152 (("formats = self.nbconvert_api") "return #")))))))))))
9153
9154 (define-public python-widgetsnbextension
9155 (package
9156 (name "python-widgetsnbextension")
9157 (version "3.5.1")
9158 (source
9159 (origin
9160 (method url-fetch)
9161 (uri (pypi-uri "widgetsnbextension" version))
9162 (sha256
9163 (base32
9164 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9165 (build-system python-build-system)
9166 (propagated-inputs
9167 `(("python-ipykernel" ,python-ipykernel)
9168 ("python-notebook" ,python-notebook)))
9169 (native-inputs
9170 `(("python-certifi" ,python-certifi)
9171 ("python-nose" ,python-nose)))
9172 (home-page "https://ipython.org")
9173 (synopsis "IPython HTML widgets for Jupyter")
9174 (description "This package provides interactive HTML widgets for Jupyter
9175 notebooks.")
9176 (license license:bsd-3)))
9177
9178 (define-public python2-widgetsnbextension
9179 (package-with-python2 python-widgetsnbextension))
9180
9181 (define-public python-ipywidgets
9182 (package
9183 (name "python-ipywidgets")
9184 (version "7.5.1")
9185 (source
9186 (origin
9187 (method url-fetch)
9188 (uri (pypi-uri "ipywidgets" version))
9189 (sha256
9190 (base32
9191 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9192 (build-system python-build-system)
9193 (propagated-inputs
9194 `(("python-ipython" ,python-ipython)
9195 ("python-traitlets" ,python-traitlets)
9196 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9197 (native-inputs
9198 `(("python-nose" ,python-nose)
9199 ("python-pytest" ,python-pytest)))
9200 (home-page "https://ipython.org")
9201 (synopsis "IPython HTML widgets for Jupyter")
9202 (description "Ipywidgets are interactive HTML widgets for Jupyter
9203 notebooks and the IPython kernel. Notebooks come alive when interactive
9204 widgets are used. Users gain control of their data and can visualize changes
9205 in the data.")
9206 (license license:bsd-3)))
9207
9208 (define-public python2-ipywidgets
9209 (package-with-python2 python-ipywidgets))
9210
9211 (define-public python-jupyter-console
9212 (package
9213 (name "python-jupyter-console")
9214 (version "6.1.0")
9215 (source
9216 (origin
9217 (method url-fetch)
9218 (uri (pypi-uri "jupyter_console" version))
9219 (sha256
9220 (base32
9221 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9222 (build-system python-build-system)
9223 (propagated-inputs
9224 `(("python-ipykernel" ,python-ipykernel)
9225 ("python-jupyter-client" ,python-jupyter-client)
9226 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9227 ("python-pygments" ,python-pygments)))
9228 (native-inputs
9229 `(("python-nose" ,python-nose)))
9230 (home-page "https://jupyter.org")
9231 (synopsis "Jupyter terminal console")
9232 (description "This package provides a terminal-based console frontend for
9233 Jupyter kernels. It also allows for console-based interaction with non-Python
9234 Jupyter kernels such as IJulia and IRKernel.")
9235 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9236 (license license:bsd-3)))
9237
9238 (define-public python2-jupyter-console
9239 (package
9240 (name "python2-jupyter-console")
9241 (version "5.2.0")
9242 (source
9243 (origin
9244 (method url-fetch)
9245 (uri (pypi-uri "jupyter_console" version))
9246 (sha256
9247 (base32
9248 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9249 (build-system python-build-system)
9250 (arguments
9251 `(#:python ,python-2
9252 #:tests? #f)) ; Tests only run in a TTY.
9253 (propagated-inputs
9254 `(("python2-ipykernel" ,python2-ipykernel)
9255 ("python2-jupyter-client" ,python2-jupyter-client)
9256 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9257 ("python2-pygments" ,python2-pygments)))
9258 (native-inputs
9259 `(("python2-nose" ,python2-nose)))
9260 (home-page "https://jupyter.org")
9261 (synopsis "Jupyter terminal console")
9262 (description "This package provides a terminal-based console frontend for
9263 Jupyter kernels. It also allows for console-based interaction with non-Python
9264 Jupyter kernels such as IJulia and IRKernel.")
9265 (license license:bsd-3)))
9266
9267 ;; The python-ipython and python-jupyter-console require each other. To get
9268 ;; the functionality in both packages working, strip down the
9269 ;; python-jupyter-console package when using it as an input to python-ipython.
9270 (define python-jupyter-console-minimal
9271 (package
9272 (inherit python-jupyter-console)
9273 (name "python-jupyter-console-minimal")
9274 (arguments
9275 (substitute-keyword-arguments
9276 (package-arguments python-jupyter-console)
9277 ((#:phases phases)
9278 `(modify-phases ,phases
9279 (add-after 'install 'delete-bin
9280 (lambda* (#:key outputs #:allow-other-keys)
9281 ;; Delete the bin files, to avoid conflicts in profiles
9282 ;; where python-ipython and python-jupyter-console are
9283 ;; both present.
9284 (delete-file-recursively
9285 (string-append
9286 (assoc-ref outputs "out") "/bin"))))))))
9287 ;; Remove the python-ipython propagated input, to avoid the cycle
9288 (propagated-inputs
9289 (alist-delete
9290 "python-ipython"
9291 (package-propagated-inputs python-jupyter-console)))))
9292
9293 (define-public python-qtconsole
9294 (package
9295 (name "python-qtconsole")
9296 (version "4.4.3")
9297 (source
9298 (origin
9299 (method url-fetch)
9300 (uri (pypi-uri "qtconsole" version))
9301 (sha256
9302 (base32
9303 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9304 (build-system python-build-system)
9305 (arguments
9306 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9307 ;; but we only have the LTS version 5.x. This means that there might be
9308 ;; runtime errors, but since this is a dependency of the Jupyter package,
9309 ;; and Jupyter can be used without the qtconsole we can overlook this for
9310 ;; now.
9311 `(#:tests? #f
9312 #:phases
9313 (modify-phases %standard-phases
9314 (add-before 'check 'pre-check
9315 (lambda _
9316 (setenv "QT_QPA_PLATFORM" "offscreen")
9317 #t)))))
9318 (propagated-inputs
9319 `(("python-ipykernel" ,python-ipykernel)
9320 ("python-ipython" ,python-ipython)))
9321 (native-inputs
9322 `(("python-pytest" ,python-pytest)))
9323 (home-page "http://jupyter.org")
9324 (synopsis "Jupyter Qt console")
9325 (description "This package provides a Qt-based console for Jupyter with
9326 support for rich media output.")
9327 (license license:bsd-3)))
9328
9329 (define-public python-jsbeautifier
9330 (package
9331 (name "python-jsbeautifier")
9332 (version "1.10.2")
9333 (home-page "https://github.com/beautify-web/js-beautify")
9334 (source (origin
9335 (method git-fetch)
9336 (uri (git-reference
9337 (url home-page)
9338 (commit (string-append "v" version))))
9339 (file-name (git-file-name name version))
9340 (sha256
9341 (base32
9342 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9343 (build-system python-build-system)
9344 (arguments
9345 `(#:phases (modify-phases %standard-phases
9346 (add-after 'unpack 'chdir
9347 (lambda _
9348 ;; The upstream Git repository contains all the code,
9349 ;; but this package only builds the python code.
9350 (chdir "python")
9351 #t))
9352 (add-after 'unpack 'patch-python-six-requirements
9353 (lambda _
9354 (substitute* "python/setup.py"
9355 (("six>=1.12.0")
9356 "six>=1.11.0"))
9357 #t)))))
9358 (propagated-inputs
9359 `(("python-editorconfig" ,python-editorconfig)
9360 ("python-six" ,python-six)))
9361 (native-inputs
9362 `(("python-pytest" ,python-pytest)))
9363 (synopsis "JavaScript unobfuscator and beautifier")
9364 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9365 popular online obfuscators.")
9366 (license license:expat)))
9367
9368 (define-public jupyter
9369 (package
9370 (name "jupyter")
9371 (version "1.0.0")
9372 (source
9373 (origin
9374 (method url-fetch)
9375 (uri (pypi-uri "jupyter" version))
9376 (sha256
9377 (base32
9378 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9379 (build-system python-build-system)
9380 (arguments '(#:tests? #f)) ; there are none.
9381 (propagated-inputs
9382 `(("python-ipykernel" ,python-ipykernel)
9383 ("python-ipywidgets" ,python-ipywidgets)
9384 ("python-jupyter-console" ,python-jupyter-console)
9385 ("python-nbconvert" ,python-nbconvert)
9386 ("python-notebook" ,python-notebook)
9387 ("python-qtconsole" ,python-qtconsole)))
9388 (native-search-paths
9389 (list (search-path-specification
9390 (variable "JUPYTER_PATH")
9391 (files '("share/jupyter")))))
9392 (home-page "https://jupyter.org")
9393 (synopsis "Web application for interactive documents")
9394 (description
9395 "The Jupyter Notebook is a web application that allows you to create and
9396 share documents that contain live code, equations, visualizations and
9397 explanatory text. Uses include: data cleaning and transformation, numerical
9398 simulation, statistical modeling, machine learning and much more.")
9399 (license license:bsd-3)))
9400
9401 (define-public python-chardet
9402 (package
9403 (name "python-chardet")
9404 (version "3.0.4")
9405 (source
9406 (origin
9407 (method url-fetch)
9408 (uri (pypi-uri "chardet" version))
9409 (sha256
9410 (base32
9411 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9412 (native-inputs
9413 `(("python-hypothesis" ,python-hypothesis)
9414 ("python-pytest" ,python-pytest)
9415 ("python-pytest-runner" ,python-pytest-runner)))
9416 (build-system python-build-system)
9417 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9418 (arguments `(#:tests? #f))
9419 (home-page "https://github.com/chardet/chardet")
9420 (synopsis "Universal encoding detector for Python 2 and 3")
9421 (description
9422 "This package provides @code{chardet}, a Python module that can
9423 automatically detect a wide range of file encodings.")
9424 (license license:lgpl2.1+)))
9425
9426 (define-public python2-chardet
9427 (package-with-python2 python-chardet))
9428
9429 (define-public python-docopt
9430 (package
9431 (name "python-docopt")
9432 (version "0.6.2")
9433 (source
9434 (origin
9435 (method git-fetch)
9436 ;; The release on PyPI does not include tests.
9437 (uri (git-reference
9438 (url "https://github.com/docopt/docopt")
9439 (commit version)))
9440 (file-name (git-file-name name version))
9441 (sha256
9442 (base32
9443 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9444 (build-system python-build-system)
9445 (native-inputs
9446 `(("python-pytest" ,python-pytest)))
9447 (arguments
9448 `(#:phases
9449 (modify-phases %standard-phases
9450 (replace 'check
9451 (lambda _ (invoke "py.test"))))))
9452 (home-page "http://docopt.org")
9453 (synopsis "Command-line interface description language for Python")
9454 (description "This library allows the user to define a command-line
9455 interface from a program's help message rather than specifying it
9456 programmatically with command-line parsers like @code{getopt} and
9457 @code{argparse}.")
9458 (license license:expat)))
9459
9460 (define-public python2-docopt
9461 (package-with-python2 python-docopt))
9462
9463 (define-public python-pythondialog
9464 (package
9465 (name "python-pythondialog")
9466 (version "3.4.0")
9467 (source
9468 (origin
9469 (method url-fetch)
9470 (uri (pypi-uri "pythondialog" version))
9471 (sha256
9472 (base32
9473 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9474 (build-system python-build-system)
9475 (arguments
9476 `(#:phases
9477 (modify-phases %standard-phases
9478 (add-after 'unpack 'patch-path
9479 (lambda* (#:key inputs #:allow-other-keys)
9480 (let* ((dialog (assoc-ref inputs "dialog")))
9481 ;; Since this library really wants to grovel the search path, we
9482 ;; must hardcode dialog's store path into it.
9483 (substitute* "dialog.py"
9484 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9485 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9486 #t))))
9487 #:tests? #f)) ; no test suite
9488 (propagated-inputs
9489 `(("dialog" ,dialog)))
9490 (home-page "http://pythondialog.sourceforge.net/")
9491 (synopsis "Python interface to the UNIX dialog utility")
9492 (description "A Python wrapper for the dialog utility. Its purpose is to
9493 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9494 This allows one to make simple text-mode user interfaces on Unix-like systems")
9495 (license license:lgpl2.1)
9496 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9497
9498 (define-public python2-pythondialog
9499 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9500 (package
9501 (inherit base)
9502 (version (package-version python-pythondialog))
9503 (source (origin
9504 (method url-fetch)
9505 (uri (pypi-uri "python2-pythondialog" version))
9506 (sha256
9507 (base32
9508 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9509
9510 (define-public python-configobj
9511 (package
9512 (name "python-configobj")
9513 (version "5.0.6")
9514 (source (origin
9515 (method url-fetch)
9516 (uri (pypi-uri "configobj" version))
9517 (sha256
9518 (base32
9519 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9520 ;; Patch setup.py so it looks for python-setuptools, which is
9521 ;; required to parse the keyword 'install_requires' in setup.py.
9522 (patches (search-patches "python-configobj-setuptools.patch"))))
9523 (build-system python-build-system)
9524 (propagated-inputs
9525 `(("python-six" ,python-six)))
9526 (synopsis "Config file reading, writing and validation")
9527 (description "ConfigObj is a simple but powerful config file reader and
9528 writer: an ini file round tripper. Its main feature is that it is very easy to
9529 use, with a straightforward programmer’s interface and a simple syntax for
9530 config files.")
9531 (home-page "https://github.com/DiffSK/configobj")
9532 (license license:bsd-3)))
9533
9534 (define-public python2-configobj
9535 (package-with-python2 python-configobj))
9536
9537 (define-public python-configargparse
9538 (package
9539 (name "python-configargparse")
9540 (version "0.14.0")
9541 (source (origin
9542 (method url-fetch)
9543 (uri (pypi-uri "ConfigArgParse" version))
9544 (sha256
9545 (base32
9546 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9547 (build-system python-build-system)
9548 (native-inputs
9549 `(("python-pyyaml" ,python-pyyaml)))
9550 (arguments
9551 `(#:phases
9552 (modify-phases %standard-phases
9553 (replace 'check
9554 (lambda _
9555 ;; Bypass setuptools-shim because one test relies on "setup.py"
9556 ;; being the first argument passed to the python call.
9557 ;;
9558 ;; NOTE: Many tests do not run because they rely on Python's
9559 ;; built-in test.test_argparse, but we remove the unit tests from
9560 ;; our Python installation.
9561 (invoke "python" "setup.py" "test"))))))
9562 (synopsis "Replacement for argparse")
9563 (description "A drop-in replacement for argparse that allows options to also
9564 be set via config files and/or environment variables.")
9565 (home-page "https://github.com/bw2/ConfigArgParse")
9566 (license license:expat)))
9567
9568 (define-public python2-configargparse
9569 (package-with-python2 python-configargparse))
9570
9571 (define-public python-argparse-manpage
9572 (package
9573 (name "python-argparse-manpage")
9574 (version "1.1")
9575 (source
9576 (origin
9577 (method url-fetch)
9578 (uri (pypi-uri "argparse-manpage" version))
9579 (sha256
9580 (base32
9581 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9582 (build-system python-build-system)
9583 (home-page "https://github.com/praiskup/argparse-manpage")
9584 (synopsis "Build manual page from Python's ArgumentParser object")
9585 (description
9586 "This package provides tools to build manual pages from Python's
9587 @code{ArgumentParser} object.")
9588 (license license:asl2.0)))
9589
9590 (define-public python-contextlib2
9591 (package
9592 (name "python-contextlib2")
9593 (version "0.6.0.post1")
9594 (source
9595 (origin
9596 (method url-fetch)
9597 (uri (pypi-uri "contextlib2" version))
9598 (sha256
9599 (base32
9600 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9601 (build-system python-build-system)
9602 (home-page "https://contextlib2.readthedocs.org/")
9603 (synopsis "Tools for decorators and context managers")
9604 (description "This module is primarily a backport of the Python
9605 3.2 contextlib to earlier Python versions. Like contextlib, it
9606 provides utilities for common tasks involving decorators and context
9607 managers. It also contains additional features that are not part of
9608 the standard library.")
9609 (properties `((python2-variant . ,(delay python2-contextlib2))))
9610 (license license:psfl)))
9611
9612 (define-public python2-contextlib2
9613 (let ((base (package-with-python2
9614 (strip-python2-variant python-contextlib2))))
9615 (package
9616 (inherit base)
9617 (arguments
9618 (substitute-keyword-arguments (package-arguments base)
9619 ((#:phases phases)
9620 `(modify-phases ,phases
9621 (replace 'check
9622 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9623 (native-inputs
9624 `(("python2-unittest2" ,python2-unittest2))))))
9625
9626 ;; This package is used by python2-pytest via python2-importlib-metadata,
9627 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9628 (define-public python2-contextlib2-bootstrap
9629 (hidden-package
9630 (package/inherit
9631 python2-contextlib2
9632 (name "python2-contextlib2-bootstrap")
9633 (arguments
9634 `(#:tests? #f
9635 ,@(package-arguments python2-contextlib2)))
9636 (native-inputs '()))))
9637
9638 (define-public python-texttable
9639 (package
9640 (name "python-texttable")
9641 (version "1.6.2")
9642 (source
9643 (origin
9644 (method url-fetch)
9645 (uri (pypi-uri "texttable" version))
9646 (sha256
9647 (base32
9648 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9649 (build-system python-build-system)
9650 (arguments
9651 `(#:phases
9652 (modify-phases %standard-phases
9653 (replace 'check
9654 (lambda _ (invoke "pytest" "tests.py"))))))
9655 (native-inputs
9656 `(("python-pytest" ,python-pytest)))
9657 (home-page "https://github.com/foutaise/texttable/")
9658 (synopsis "Python module for creating simple ASCII tables")
9659 (description "Texttable is a Python module for creating simple ASCII
9660 tables.")
9661 (license license:expat)))
9662
9663 (define-public python2-texttable
9664 (package-with-python2 python-texttable))
9665
9666 (define-public python-atomicwrites
9667 (package
9668 (name "python-atomicwrites")
9669 (version "1.3.0")
9670 (source (origin
9671 (method url-fetch)
9672 (uri (pypi-uri "atomicwrites" version))
9673 (sha256
9674 (base32
9675 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9676 (build-system python-build-system)
9677 (synopsis "Atomic file writes in Python")
9678 (description "Library for atomic file writes using platform dependent tools
9679 for atomic file system operations.")
9680 (home-page "https://github.com/untitaker/python-atomicwrites")
9681 (license license:expat)))
9682
9683 (define-public python2-atomicwrites
9684 (package-with-python2 python-atomicwrites))
9685
9686 (define-public python-click-threading
9687 (package
9688 (name "python-click-threading")
9689 (version "0.4.4")
9690 (source (origin
9691 (method url-fetch)
9692 (uri (pypi-uri "click-threading" version))
9693 (sha256
9694 (base32
9695 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9696 (build-system python-build-system)
9697 (propagated-inputs
9698 `(("python-click" ,python-click)))
9699 (synopsis "Utilities for multithreading in Click")
9700 (description "This package provides utilities for multithreading in Click
9701 applications.")
9702 (home-page "https://github.com/click-contrib/click-threading")
9703 (license license:expat)))
9704
9705 (define-public python-click-log
9706 (package
9707 (name "python-click-log")
9708 (version "0.3.2")
9709 (source (origin
9710 (method url-fetch)
9711 (uri (pypi-uri "click-log" version))
9712 (sha256
9713 (base32
9714 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9715 (build-system python-build-system)
9716 (propagated-inputs
9717 `(("python-click" ,python-click)))
9718 (synopsis "Logging for click applications")
9719 (description "This package provides a Python library for logging Click
9720 applications.")
9721 (home-page "https://github.com/click-contrib/click-log")
9722 (license license:expat)))
9723
9724 (define-public python-apipkg
9725 (package
9726 (name "python-apipkg")
9727 (version "1.5")
9728 (source (origin
9729 (method url-fetch)
9730 (uri (pypi-uri "apipkg" version))
9731 (sha256
9732 (base32
9733 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9734 (build-system python-build-system)
9735 (native-inputs
9736 `(("python-pytest" ,python-pytest)
9737 ("python-setuptools-scm" ,python-setuptools-scm)))
9738 (synopsis "Namespace control and lazy-import mechanism")
9739 (description "With apipkg you can control the exported namespace of a Python
9740 package and greatly reduce the number of imports for your users. It is a small
9741 pure Python module that works on virtually all Python versions.")
9742 (home-page "https://github.com/pytest-dev/apipkg")
9743 (license license:expat)))
9744
9745 (define-public python-execnet
9746 (package
9747 (name "python-execnet")
9748 (version "1.4.1")
9749 (source (origin
9750 (method url-fetch)
9751 (uri (pypi-uri "execnet" version))
9752 (sha256
9753 (base32
9754 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9755 (build-system python-build-system)
9756 (arguments
9757 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9758 ;; The two test failures are caused by the lack of an `ssh` executable.
9759 ;; The test suite can be run with pytest after the 'install' phase.
9760 #:tests? #f))
9761 (native-inputs
9762 `(("python-pytest" ,python-pytest)
9763 ("python-setuptools-scm" ,python-setuptools-scm)))
9764 (propagated-inputs
9765 `(("python-apipkg" ,python-apipkg)))
9766 (synopsis "Rapid multi-Python deployment")
9767 (description "Execnet provides a share-nothing model with
9768 channel-send/receive communication for distributing execution across many
9769 Python interpreters across version, platform and network barriers. It has a
9770 minimal and fast API targeting the following uses:
9771 @enumerate
9772 @item distribute tasks to (many) local or remote CPUs
9773 @item write and deploy hybrid multi-process applications
9774 @item write scripts to administer multiple environments
9775 @end enumerate")
9776 (home-page "https://codespeak.net/execnet/")
9777 (license license:expat)))
9778
9779 (define-public python2-execnet
9780 (package-with-python2 python-execnet))
9781
9782 (define-public python-icalendar
9783 (package
9784 (name "python-icalendar")
9785 (version "4.0.5")
9786 (source (origin
9787 (method url-fetch)
9788 (uri (pypi-uri "icalendar" version))
9789 (sha256
9790 (base32
9791 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9792 (build-system python-build-system)
9793 (propagated-inputs
9794 `(("python-dateutil" ,python-dateutil)
9795 ("python-pytz" ,python-pytz)))
9796 (synopsis "Python library for parsing iCalendar files")
9797 (description "The icalendar package is a parser/generator of iCalendar
9798 files for use with Python.")
9799 (home-page "https://github.com/collective/icalendar")
9800 (license license:bsd-2)))
9801
9802 (define-public python-args
9803 (package
9804 (name "python-args")
9805 (version "0.1.0")
9806 (source (origin
9807 (method url-fetch)
9808 (uri (pypi-uri "args" version))
9809 (sha256
9810 (base32
9811 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9812 (build-system python-build-system)
9813 (home-page "https://github.com/kennethreitz/args")
9814 (synopsis "Command-line argument parser")
9815 (description
9816 "This library provides a Python module to parse command-line arguments.")
9817 (license license:bsd-3)))
9818
9819 (define-public python2-args
9820 (package-with-python2 python-args))
9821
9822 (define-public python-clint
9823 (package
9824 (name "python-clint")
9825 (version "0.5.1")
9826 (source (origin
9827 (method url-fetch)
9828 (uri (pypi-uri "clint" version))
9829 (sha256
9830 (base32
9831 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9832 (build-system python-build-system)
9833 (arguments
9834 '(#:phases
9835 (modify-phases %standard-phases
9836 (replace 'check
9837 (lambda _ (invoke "py.test" "-v"))))))
9838 (native-inputs
9839 `(("python-pytest" ,python-pytest)))
9840 (propagated-inputs
9841 `(("python-args" ,python-args)))
9842 (home-page "https://github.com/kennethreitz/clint")
9843 (synopsis "Command-line interface tools")
9844 (description
9845 "Clint is a Python module filled with a set of tools for developing
9846 command-line applications, including tools for colored and indented
9847 output, progress bar display, and pipes.")
9848 (license license:isc)))
9849
9850 (define-public python2-clint
9851 (package-with-python2 python-clint))
9852
9853 (define-public python-rply
9854 (package
9855 (name "python-rply")
9856 (version "0.7.5")
9857 (source (origin
9858 (method url-fetch)
9859 (uri (pypi-uri "rply" version))
9860 (sha256
9861 (base32
9862 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9863 (build-system python-build-system)
9864 (propagated-inputs
9865 `(("python-appdirs" ,python-appdirs)))
9866 (home-page "https://github.com/alex/rply")
9867 (synopsis "Parser generator for Python")
9868 (description
9869 "This package provides a pure Python based parser generator, that also
9870 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9871 with a new public API, and RPython support.")
9872 (license license:bsd-3)))
9873
9874 (define-public python2-rply
9875 (package-with-python2 python-rply))
9876
9877 (define-public python-hy
9878 (package
9879 (name "python-hy")
9880 (version "0.18.0")
9881 (source (origin
9882 (method url-fetch)
9883 (uri (pypi-uri "hy" version))
9884 (sha256
9885 (base32
9886 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9887 (build-system python-build-system)
9888 (arguments
9889 '(#:phases
9890 (modify-phases %standard-phases
9891 (add-before 'install 'set-HOME
9892 (lambda _
9893 (setenv "HOME" "/tmp") #t))
9894 (replace 'check
9895 (lambda _
9896 ;; Tests require write access to HOME.
9897 (setenv "HOME" "/tmp")
9898 (invoke "nosetests"))))))
9899 (native-inputs
9900 `(("python-coverage" ,python-coverage)
9901 ("python-nose" ,python-nose)))
9902 (propagated-inputs
9903 `(("python-astor" ,python-astor)
9904 ("python-colorama" ,python-colorama)
9905 ("python-rply" ,python-rply)
9906 ("python-funcparserlib"
9907 ,python-funcparserlib)))
9908 (home-page "http://hylang.org/")
9909 (synopsis "Lisp frontend to Python")
9910 (description
9911 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9912 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9913 Python at your fingertips, in Lisp form.")
9914 (license license:expat)))
9915
9916 (define-public python2-functools32
9917 (package
9918 (name "python2-functools32")
9919 (version "3.2.3-2")
9920 (source
9921 (origin
9922 (method url-fetch)
9923 (uri (pypi-uri "functools32" version))
9924 (sha256
9925 (base32
9926 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9927 (build-system python-build-system)
9928 (arguments
9929 `(#:python ,python-2
9930 #:tests? #f)) ; no test target
9931 (home-page "https://github.com/MiCHiLU/python-functools32")
9932 (synopsis
9933 "Backport of the functools module from Python 3.2.3")
9934 (description
9935 "This package is a backport of the @code{functools} module from Python
9936 3.2.3 for use with older versions of Python and PyPy.")
9937 (license license:expat)))
9938
9939 (define-public python2-subprocess32
9940 (package
9941 (name "python2-subprocess32")
9942 (version "3.2.7")
9943 (source (origin
9944 (method url-fetch)
9945 (uri (pypi-uri "subprocess32" version))
9946 (sha256
9947 (base32
9948 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9949 (patches
9950 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9951 (build-system python-build-system)
9952 (arguments
9953 `(#:python ,python-2
9954 ;; The test suite fails with Python > 2.7.13:
9955 ;; import test.support
9956 ;; ImportError: No module named support
9957 #:tests? #f
9958 #:phases
9959 (modify-phases %standard-phases
9960 (add-after 'unpack 'patch-/bin/sh
9961 (lambda _
9962 (substitute* '("subprocess32.py"
9963 "test_subprocess32.py")
9964 (("/bin/sh") (which "sh")))
9965 #t)))))
9966 (home-page "https://github.com/google/python-subprocess32")
9967 (synopsis "Backport of the subprocess module from Python 3.2")
9968 (description
9969 "This is a backport of the @code{subprocess} standard library module
9970 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9971 new features. On POSIX systems it is guaranteed to be reliable when used
9972 in threaded applications. It includes timeout support from Python 3.3 but
9973 otherwise matches 3.2’s API.")
9974 (license license:psfl)))
9975
9976 (define-public python2-futures
9977 (package
9978 (name "python2-futures")
9979 (version "3.2.0")
9980 (source
9981 (origin
9982 (method url-fetch)
9983 (uri (pypi-uri "futures" version))
9984 (sha256
9985 (base32
9986 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9987 (build-system python-build-system)
9988 (arguments
9989 `(#:python ,python-2
9990 #:phases
9991 (modify-phases %standard-phases
9992 (replace 'check
9993 (lambda _
9994 (invoke "python" "test_futures.py")
9995 #t)))))
9996 (home-page "https://github.com/agronholm/pythonfutures")
9997 (synopsis
9998 "Backport of the concurrent.futures package from Python 3.2")
9999 (description
10000 "The concurrent.futures module provides a high-level interface for
10001 asynchronously executing callables. This package backports the
10002 concurrent.futures package from Python 3.2")
10003 (license license:bsd-3)))
10004
10005 (define-public python-promise
10006 (package
10007 (name "python-promise")
10008 (version "0.4.2")
10009 (source
10010 (origin
10011 (method url-fetch)
10012 (uri (pypi-uri "promise" version))
10013 (sha256
10014 (base32
10015 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
10016 (build-system python-build-system)
10017 ;; Tests wants python-futures, which is a python2 only program, and
10018 ;; can't be found by python-promise at test time.
10019 (arguments `(#:tests? #f))
10020 (home-page "https://github.com/syrusakbary/promise")
10021 (synopsis "Promises/A+ implementation for Python")
10022 (description
10023 "Promises/A+ implementation for Python")
10024 (properties `((python2-variant . ,(delay python2-promise))))
10025 (license license:expat)))
10026
10027 (define-public python2-promise
10028 (let ((promise (package-with-python2
10029 (strip-python2-variant python-promise))))
10030 (package (inherit promise)
10031 (arguments (substitute-keyword-arguments (package-arguments promise)
10032 ((#:tests? _) #t)))
10033 (native-inputs
10034 `(("python2-futures" ,python2-futures)
10035 ("python2-pytest" ,python2-pytest)
10036 ,@(package-native-inputs promise))))))
10037
10038 (define-public python-progressbar2
10039 (package
10040 (name "python-progressbar2")
10041 (version "3.51.3")
10042 (source
10043 (origin
10044 (method url-fetch)
10045 (uri (pypi-uri "progressbar2" version))
10046 (sha256
10047 (base32
10048 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
10049 (build-system python-build-system)
10050 (propagated-inputs
10051 `(("python-six" ,python-six)
10052 ("python-utils" ,python-utils)))
10053 (native-inputs
10054 `(("python-flake8" ,python-flake8)
10055 ("python-freezegun" ,python-freezegun)
10056 ("python-pycodestyle" ,python-pycodestyle)
10057 ("python-pytest" ,python-pytest)
10058 ("python-pytest-cache" ,python-pytest-cache)
10059 ("python-pytest-cov" ,python-pytest-cov)
10060 ("python-pytest-flakes" ,python-pytest-flakes)
10061 ("python-pytest-pep8" ,python-pytest-pep8)
10062 ("python-sphinx" ,python-sphinx)))
10063 (home-page "https://github.com/WoLpH/python-progressbar")
10064 (synopsis "Text progress bar library for Python")
10065 (description
10066 "This package provides a Python progressbar library to provide
10067 visual (yet text based) progress to long running operations.")
10068 (license license:bsd-3)))
10069
10070 (define-public python-progressbar33
10071 (package
10072 (name "python-progressbar33")
10073 (version "2.4")
10074 (source
10075 (origin
10076 (method url-fetch)
10077 (uri (pypi-uri "progressbar33" version))
10078 (sha256
10079 (base32
10080 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
10081 (build-system python-build-system)
10082 (home-page "http://github.com/germangh/python-progressbar")
10083 (synopsis "Text progress bar library for Python")
10084 (description
10085 "This package provides a text progress bar library for Python. This
10086 version only differs from the original @code{progressbar} package in that it
10087 uses relative package imports instead of absolute imports, which is necessary
10088 for the module to work under Python 3.3.")
10089 ;; Either or both of these licenses may be selected.
10090 (license (list license:lgpl2.1+ license:bsd-3))))
10091
10092 (define-public python-colorama
10093 (package
10094 (name "python-colorama")
10095 (version "0.4.3")
10096 (source
10097 (origin
10098 (method url-fetch)
10099 (uri (pypi-uri "colorama" version))
10100 (sha256
10101 (base32
10102 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
10103 (build-system python-build-system)
10104 (synopsis "Colored terminal text rendering for Python")
10105 (description "Colorama is a Python library for rendering colored terminal
10106 text.")
10107 (home-page "https://pypi.org/project/colorama/")
10108 (license license:bsd-3)))
10109
10110 (define-public python2-colorama
10111 (package-with-python2 python-colorama))
10112
10113 (define-public python-rsa
10114 (package
10115 (name "python-rsa")
10116 (version "3.4.2")
10117 (source
10118 (origin
10119 (method url-fetch)
10120 (uri (pypi-uri "rsa" version))
10121 (sha256
10122 (base32
10123 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
10124 (build-system python-build-system)
10125 (propagated-inputs
10126 `(("python-pyasn1" ,python-pyasn1)))
10127 (synopsis "Pure-Python RSA implementation")
10128 (description "Python-RSA is a pure-Python RSA implementation. It supports
10129 encryption and decryption, signing and verifying signatures, and key
10130 generation according to PKCS#1 version 1.5. It can be used as a Python
10131 library as well as on the command line.")
10132 (home-page "https://stuvel.eu/rsa")
10133 (license license:asl2.0)))
10134
10135 (define-public python2-rsa
10136 (package-with-python2 python-rsa))
10137
10138 (define-public python-pluggy
10139 (package
10140 (name "python-pluggy")
10141 (version "0.13.1")
10142 (source
10143 (origin
10144 (method url-fetch)
10145 (uri (pypi-uri "pluggy" version))
10146 (sha256
10147 (base32
10148 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
10149 (build-system python-build-system)
10150 (native-inputs
10151 `(("python-setuptools-scm" ,python-setuptools-scm)))
10152 (synopsis "Plugin and hook calling mechanism for Python")
10153 (description "Pluggy is an extraction of the plugin manager as used by
10154 Pytest but stripped of Pytest specific details.")
10155 (home-page "https://pypi.org/project/pluggy/")
10156 (properties `((python2-variant . ,(delay python2-pluggy))))
10157 (license license:expat)))
10158
10159 (define-public python2-pluggy
10160 (let ((base (package-with-python2 (strip-python2-variant
10161 python-pluggy))))
10162 (package/inherit
10163 base
10164 (propagated-inputs
10165 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
10166
10167 ;; This package requires python2-importlib-metadata, but that package
10168 ;; ends up needing python2-pluggy via python2-pytest, so we need this
10169 ;; variant to solve the circular dependency.
10170 (define-public python2-pluggy-bootstrap
10171 (hidden-package
10172 (package/inherit
10173 python2-pluggy
10174 (name "python2-pluggy-bootstrap")
10175 (arguments
10176 `(#:tests? #f
10177 ,@(package-arguments python2-pluggy)))
10178 (propagated-inputs
10179 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
10180
10181 (define-public python-tox
10182 (package
10183 (name "python-tox")
10184 (version "2.8.1")
10185 (source
10186 (origin
10187 (method url-fetch)
10188 (uri (pypi-uri "tox" version))
10189 (sha256
10190 (base32
10191 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10192 (build-system python-build-system)
10193 (arguments
10194 ;; FIXME: Tests require pytest-timeout, which itself requires
10195 ;; pytest>=2.8.0 for installation.
10196 '(#:tests? #f))
10197 (propagated-inputs
10198 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10199 ("python-py" ,python-py)
10200 ("python-virtualenv" ,python-virtualenv)))
10201 (native-inputs
10202 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10203 ("python-pytest" ,python-pytest) ; >= 2.3.5
10204 ("python-setuptools-scm" ,python-setuptools-scm)))
10205 (home-page "https://tox.readthedocs.io")
10206 (synopsis "Virtualenv-based automation of test activities")
10207 (description "Tox is a generic virtualenv management and test command line
10208 tool. It can be used to check that a package installs correctly with
10209 different Python versions and interpreters, or run tests in each type of
10210 supported environment, or act as a frontend to continuous integration
10211 servers.")
10212 (license license:expat)))
10213
10214 (define-public python2-tox
10215 (package-with-python2 python-tox))
10216
10217 (define-public python-jmespath
10218 (package
10219 (name "python-jmespath")
10220 (version "0.9.4")
10221 (source
10222 (origin
10223 (method url-fetch)
10224 (uri (pypi-uri "jmespath" version))
10225 (sha256
10226 (base32
10227 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10228 (build-system python-build-system)
10229 (native-inputs
10230 `(("python-nose" ,python-nose)))
10231 (synopsis "JSON Matching Expressions")
10232 (description "JMESPath (pronounced “james path”) is a Python library that
10233 allows one to declaratively specify how to extract elements from a JSON
10234 document.")
10235 (home-page "https://github.com/jmespath/jmespath.py")
10236 (license license:expat)))
10237
10238 (define-public python2-jmespath
10239 (package-with-python2 python-jmespath))
10240
10241 (define-public python-symengine
10242 (package
10243 (name "python-symengine")
10244 (version "0.6.1")
10245 (source
10246 (origin
10247 (method url-fetch)
10248 (uri (pypi-uri "symengine" version))
10249 (sha256
10250 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
10251 (build-system python-build-system)
10252 (native-inputs
10253 `(("cmake" ,cmake)
10254 ("python-cython" ,python-cython)))
10255 (inputs
10256 `(("symengine" ,symengine)))
10257 (home-page "https://github.com/symengine/symengine.py")
10258 (synopsis "Python library providing wrappers to SymEngine")
10259 (description
10260 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
10261 manipulation library.")
10262 (license license:expat)))
10263
10264 (define-public python-botocore
10265 (package
10266 (name "python-botocore")
10267 (version "1.15.26")
10268 (source
10269 (origin
10270 (method url-fetch)
10271 (uri (pypi-uri "botocore" version))
10272 (sha256
10273 (base32
10274 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10275 (build-system python-build-system)
10276 (arguments
10277 ;; FIXME: Many tests are failing.
10278 '(#:tests? #f))
10279 (propagated-inputs
10280 `(("python-dateutil" ,python-dateutil)
10281 ("python-docutils" ,python-docutils)
10282 ("python-jmespath" ,python-jmespath)))
10283 (native-inputs
10284 `(("python-mock" ,python-mock)
10285 ("python-nose" ,python-nose)
10286 ("behave" ,behave)
10287 ("python-tox" ,python-tox)
10288 ("python-urllib3" ,python-urllib3)
10289 ("python-wheel" ,python-wheel)))
10290 (home-page "https://github.com/boto/botocore")
10291 (synopsis "Low-level interface to AWS")
10292 (description "Botocore is a Python library that provides a low-level
10293 interface to the Amazon Web Services (AWS) API.")
10294 (license license:asl2.0)))
10295
10296 (define-public python2-botocore
10297 (package-with-python2 python-botocore))
10298
10299 (define-public python-pyfiglet
10300 (package
10301 (name "python-pyfiglet")
10302 (version "0.8.post1")
10303 (source
10304 (origin
10305 (method url-fetch)
10306 (uri (pypi-uri "pyfiglet" version))
10307 (sha256
10308 (base32
10309 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
10310 (build-system python-build-system)
10311 (home-page "https://github.com/pwaller/pyfiglet")
10312 (synopsis "Draw ASCII art big letters in Python")
10313 (description "This module lets you draw large letter from ordinary characters
10314 in pure Python.")
10315 (license license:expat)))
10316
10317 (define-public python-xdo
10318 (package
10319 (name "python-xdo")
10320 (version "0.3")
10321 (source (origin
10322 (method url-fetch)
10323 (uri (string-append
10324 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10325 "python-xdo_" version ".orig.tar.gz"))
10326 (sha256
10327 (base32
10328 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10329 (build-system python-build-system)
10330 (arguments
10331 '(#:phases
10332 (modify-phases %standard-phases
10333 (add-before 'install 'patch-libxdo-path
10334 ;; Hardcode the path of dynamically loaded libxdo library.
10335 (lambda* (#:key inputs #:allow-other-keys)
10336 (let ((libxdo (string-append
10337 (assoc-ref inputs "xdotool")
10338 "/lib/libxdo.so")))
10339 (substitute* "xdo/_xdo.py"
10340 (("find_library\\(\"xdo\"\\)")
10341 (simple-format #f "\"~a\"" libxdo)))
10342 #t))))
10343 #:tests? #f)) ; no tests provided
10344 (propagated-inputs
10345 `(("python-six" ,python-six)))
10346 (inputs
10347 `(("xdotool" ,xdotool)
10348 ("libX11" ,libx11)))
10349 (home-page "https://tracker.debian.org/pkg/python-xdo")
10350 (synopsis "Python library for simulating X11 keyboard/mouse input")
10351 (description "Provides bindings to libxdo for manipulating X11 via simulated
10352 input. (Note that this is mostly a legacy library; you may wish to look at
10353 python-xdo for newer bindings.)")
10354 (license license:bsd-3)))
10355
10356 (define-public python2-xdo
10357 (package-with-python2 python-xdo))
10358
10359 (define-public python-mako
10360 (package
10361 (name "python-mako")
10362 (version "1.1.2")
10363 (source
10364 (origin
10365 (method url-fetch)
10366 (uri (pypi-uri "Mako" version))
10367 (sha256
10368 (base32
10369 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10370 (build-system python-build-system)
10371 (arguments
10372 `(#:phases (modify-phases %standard-phases
10373 (replace 'check
10374 (lambda* (#:key tests? #:allow-other-keys)
10375 (if tests?
10376 (invoke "nosetests" "-v")
10377 (format #t "test suite not run~%"))
10378 #t)))))
10379 (propagated-inputs
10380 `(("python-markupsafe" ,python-markupsafe)))
10381 (native-inputs
10382 `(("python-mock" ,python-mock)
10383 ("python-nose" ,python-nose)))
10384 (home-page "https://www.makotemplates.org/")
10385 (synopsis "Templating language for Python")
10386 (description "Mako is a templating language for Python that compiles
10387 templates into Python modules.")
10388 (license license:expat)))
10389
10390 (define-public python2-mako
10391 (package-with-python2 python-mako))
10392
10393 (define-public python-waitress
10394 (package
10395 (name "python-waitress")
10396 (version "1.1.0")
10397 (source
10398 (origin
10399 (method url-fetch)
10400 (uri (pypi-uri "waitress" version))
10401 (patches (search-patches "python-waitress-fix-tests.patch"))
10402 (sha256
10403 (base32
10404 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10405 (build-system python-build-system)
10406 (home-page "https://github.com/Pylons/waitress")
10407 (synopsis "Waitress WSGI server")
10408 (description "Waitress is meant to be a production-quality pure-Python WSGI
10409 server with very acceptable performance.")
10410 (license license:zpl2.1)))
10411
10412 (define-public python2-waitress
10413 (package-with-python2 python-waitress))
10414
10415 (define-public python-whichcraft
10416 (package
10417 (name "python-whichcraft")
10418 (version "0.6.1")
10419 (source
10420 (origin
10421 (method url-fetch)
10422 (uri (pypi-uri "whichcraft" version))
10423 (sha256
10424 (base32
10425 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10426 (build-system python-build-system)
10427 (native-inputs
10428 `(("python-pytest" ,python-pytest)))
10429 (home-page "https://github.com/pydanny/whichcraft")
10430 (synopsis "Cross-platform cross-python shutil.which functionality")
10431 (description
10432 "This package provides a shim of the shutil.which function that's
10433 designed to work across multiple versions of Python.")
10434 (license license:bsd-3)))
10435
10436 (define-public python-cookiecutter
10437 (package
10438 (name "python-cookiecutter")
10439 (version "1.6.0")
10440 (source
10441 (origin
10442 (method url-fetch)
10443 (uri (pypi-uri "cookiecutter" version))
10444 (sha256
10445 (base32
10446 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10447 (build-system python-build-system)
10448 (native-inputs
10449 `(("python-freezegun" ,python-freezegun)
10450 ("python-pytest" ,python-pytest)
10451 ("python-pytest-catchlog" ,python-pytest-catchlog)
10452 ("python-pytest-cov" ,python-pytest-cov)
10453 ("python-pytest-mock" ,python-pytest-mock)))
10454 (propagated-inputs
10455 `(("python-binaryornot" ,python-binaryornot)
10456 ("python-click" ,python-click)
10457 ("python-future" ,python-future)
10458 ("python-jinja2" ,python-jinja2)
10459 ("python-jinja2-time" ,python-jinja2-time)
10460 ("python-poyo" ,python-poyo)
10461 ("python-requests" ,python-requests)
10462 ("python-whichcraft" ,python-whichcraft)))
10463 (home-page "https://github.com/audreyr/cookiecutter")
10464 (synopsis
10465 "Command-line utility that creates projects from project templates")
10466 (description
10467 "This package provides a command-line utility that creates projects from
10468 project templates, e.g. creating a Python package project from a Python package
10469 project template.")
10470 (license license:bsd-3)))
10471
10472 (define-public python-pyquery
10473 (package
10474 (name "python-pyquery")
10475 (version "1.2.17")
10476 (source
10477 (origin
10478 (method url-fetch)
10479 (uri (pypi-uri "pyquery" version))
10480 (sha256
10481 (base32
10482 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10483 (build-system python-build-system)
10484 (native-inputs
10485 `(("python-webob" ,python-webob)
10486 ("python-webtest" ,python-webtest)))
10487 (propagated-inputs
10488 `(("python-lxml" ,python-lxml)
10489 ("python-cssselect" ,python-cssselect)))
10490 (home-page "https://github.com/gawel/pyquery")
10491 (synopsis "Make jQuery-like queries on xml documents")
10492 (description "pyquery allows you to make jQuery queries on xml documents.
10493 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10494 fast xml and html manipulation.")
10495 (license license:bsd-3)))
10496
10497 (define-public python-anyjson
10498 (package
10499 (name "python-anyjson")
10500 (version "0.3.3")
10501 (source
10502 (origin
10503 (method url-fetch)
10504 (uri (pypi-uri "anyjson" version))
10505 (sha256
10506 (base32
10507 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10508 (build-system python-build-system)
10509 (arguments
10510 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10511 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10512 ;; whatever) so this transformation needs to be done before the tests
10513 ;; can be run. Maybe we could add a build step to transform beforehand
10514 ;; but it could be annoying/difficult.
10515 ;; We can enable tests for the Python 2 version, though, and do below.
10516 #:tests? #f))
10517 (home-page "https://bitbucket.org/runeh/anyjson/")
10518 (synopsis
10519 "Wraps best available JSON implementation in a common interface")
10520 (description
10521 "Anyjson loads whichever is the fastest JSON module installed
10522 and provides a uniform API regardless of which JSON implementation is used.")
10523 (license license:bsd-3)
10524 (properties `((python2-variant . ,(delay python2-anyjson))))))
10525
10526 (define-public python2-anyjson
10527 (let ((anyjson (package-with-python2
10528 (strip-python2-variant python-anyjson))))
10529 (package
10530 (inherit anyjson)
10531 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10532 #:tests? #t
10533 ,@(package-arguments anyjson)))
10534 (native-inputs `(("python2-nose" ,python2-nose))))))
10535
10536 (define-public python-amqp
10537 (package
10538 (name "python-amqp")
10539 (version "2.3.2")
10540 (source
10541 (origin
10542 (method url-fetch)
10543 (uri (pypi-uri "amqp" version))
10544 (sha256
10545 (base32
10546 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10547 (build-system python-build-system)
10548 (native-inputs
10549 `(("python-case" ,python-case)
10550 ("python-pytest-sugar" ,python-pytest-sugar)
10551 ("python-mock" ,python-mock)))
10552 (propagated-inputs
10553 `(("python-vine" ,python-vine)))
10554 (home-page "https://github.com/celery/py-amqp")
10555 (synopsis
10556 "Low-level AMQP client for Python (fork of amqplib)")
10557 (description
10558 "This is a fork of amqplib which was originally written by Barry Pederson.
10559 It is maintained by the Celery project, and used by kombu as a pure python
10560 alternative when librabbitmq is not available.")
10561 (license license:lgpl2.1+)
10562 (properties `((python2-variant . ,(delay python2-amqp))))))
10563
10564 (define-public python2-amqp
10565 (let ((amqp (package-with-python2
10566 (strip-python2-variant python-amqp))))
10567 (package
10568 (inherit amqp)
10569 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10570 ;; unmaintained. Weirdly, does not do this on the python 3
10571 ;; version?
10572 #:tests? #f
10573 ,@(package-arguments amqp))))))
10574
10575 (define-public python-txamqp
10576 (package
10577 (name "python-txamqp")
10578 (version "0.8.2")
10579 (source
10580 (origin
10581 (method url-fetch)
10582 (uri (pypi-uri "txAMQP" version))
10583 (sha256
10584 (base32
10585 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10586 (build-system python-build-system)
10587 (propagated-inputs
10588 `(("python-six" ,python-six)
10589 ("python-twisted" ,python-twisted)))
10590 (home-page "https://github.com/txamqp/txamqp")
10591 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10592 (description
10593 "This package provides a Python library for communicating with AMQP peers
10594 and brokers using the asynchronous networking framework Twisted. It contains
10595 all the necessary code to connect, send and receive messages to/from an
10596 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10597 also includes support for using Thrift RPC over AMQP in Twisted
10598 applications.")
10599 (license license:asl2.0)))
10600
10601 (define-public python2-txamqp
10602 (package-with-python2 python-txamqp))
10603
10604 (define-public python-kombu
10605 (package
10606 (name "python-kombu")
10607 (version "4.2.2")
10608 (source
10609 (origin
10610 (method url-fetch)
10611 (uri (pypi-uri "kombu" version))
10612 (sha256
10613 (base32
10614 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10615 (build-system python-build-system)
10616 (native-inputs
10617 `(("python-mock" ,python-mock)
10618 ("python-case" ,python-case)
10619 ("python-pyro4" ,python-pyro4)
10620 ("python-pytest-sugar" ,python-pytest-sugar)
10621 ("python-pytz" ,python-pytz)))
10622 (propagated-inputs
10623 `(("python-anyjson" ,python-anyjson)
10624 ("python-amqp" ,python-amqp)
10625 ("python-redis" ,python-redis)))
10626 (home-page "https://kombu.readthedocs.io")
10627 (synopsis "Message passing library for Python")
10628 (description "The aim of Kombu is to make messaging in Python as easy as
10629 possible by providing an idiomatic high-level interface for the AMQ protocol,
10630 and also provide proven and tested solutions to common messaging problems.
10631 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10632 message orientation, queuing, routing, reliability and security, for which the
10633 RabbitMQ messaging server is the most popular implementation.")
10634 (license license:bsd-3)
10635 (properties `((python2-variant . ,(delay python2-kombu))))))
10636
10637 (define-public python2-kombu
10638 (let ((kombu (package-with-python2
10639 (strip-python2-variant python-kombu))))
10640 (package
10641 (inherit kombu)
10642 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10643 ;; It works fine on the python3 variant.
10644 #:tests? #f
10645 ,@(package-arguments kombu)))
10646 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10647 ,@(package-native-inputs kombu))))))
10648
10649 (define-public python-billiard
10650 (package
10651 (name "python-billiard")
10652 (version "3.5.0.5")
10653 (source
10654 (origin
10655 (method url-fetch)
10656 (uri (pypi-uri "billiard" version))
10657 (sha256
10658 (base32
10659 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10660 (build-system python-build-system)
10661 (native-inputs
10662 `(("python-case" ,python-case)
10663 ("python-pytest" ,python-pytest)))
10664 (home-page "https://github.com/celery/billiard")
10665 (synopsis
10666 "Python multiprocessing fork with improvements and bugfixes")
10667 (description
10668 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10669 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10670 pyprocessing package. This standalone variant is intended to be compatible with
10671 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10672 (license license:bsd-3)
10673 (properties `((python2-variant . ,(delay python2-billiard))))))
10674
10675 (define-public python2-billiard
10676 (let ((billiard (package-with-python2
10677 (strip-python2-variant python-billiard))))
10678 (package
10679 (inherit billiard)
10680 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10681 ("python2-mock" ,python2-mock)
10682 ,@(package-native-inputs billiard))))))
10683
10684 (define-public python-celery
10685 (package
10686 (name "python-celery")
10687 (version "4.2.1")
10688 (source
10689 (origin
10690 (method url-fetch)
10691 (uri (pypi-uri "celery" version))
10692 (sha256
10693 (base32
10694 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10695 (build-system python-build-system)
10696 (arguments
10697 '(;; TODO The tests fail with Python 3.7
10698 ;; https://github.com/celery/celery/issues/4849
10699 #:tests? #f
10700 #:phases
10701 (modify-phases %standard-phases
10702 (add-after 'unpack 'patch-requirements
10703 (lambda _
10704 (substitute* "requirements/test.txt"
10705 (("pytest>=3\\.0,<3\\.3")
10706 "pytest>=3.0"))
10707 #t)))))
10708 (native-inputs
10709 `(("python-case" ,python-case)
10710 ("python-pytest" ,python-pytest)))
10711 (propagated-inputs
10712 `(("python-pytz" ,python-pytz)
10713 ("python-billiard" ,python-billiard)
10714 ("python-kombu" ,python-kombu)))
10715 (home-page "https://celeryproject.org")
10716 (synopsis "Distributed Task Queue")
10717 (description "Celery is an asynchronous task queue/job queue based on
10718 distributed message passing. It is focused on real-time operation, but
10719 supports scheduling as well. The execution units, called tasks, are executed
10720 concurrently on a single or more worker servers using multiprocessing,
10721 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10722 synchronously (wait until ready).")
10723 (license license:bsd-3)
10724 (properties `((python2-variant . ,(delay python2-celery))))))
10725
10726 (define-public python2-celery
10727 (let ((celery (package-with-python2
10728 (strip-python2-variant python-celery))))
10729 (package
10730 (inherit celery)
10731 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10732 ("python2-mock" ,python2-mock)
10733 ,@(package-native-inputs celery))))))
10734
10735 (define-public python-translitcodec
10736 (package
10737 (name "python-translitcodec")
10738 (version "0.4.0")
10739 (source
10740 (origin
10741 (method url-fetch)
10742 (uri (pypi-uri "translitcodec" version))
10743 (sha256
10744 (base32
10745 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10746 (build-system python-build-system)
10747 (arguments
10748 `(#:tests? #f)) ; no tests provided
10749 (home-page
10750 "https://github.com/claudep/translitcodec")
10751 (synopsis
10752 "Unicode to 8-bit charset transliteration codec")
10753 (description
10754 "This package contains codecs for transliterating ISO 10646 texts into
10755 best-effort representations using smaller coded character sets (ASCII,
10756 ISO 8859, etc.).")
10757 (license license:expat)))
10758
10759 (define-public python2-translitcodec
10760 (package-with-python2 python-translitcodec))
10761
10762 (define-public python-editor
10763 (package
10764 (name "python-editor")
10765 (version "1.0.4")
10766 (source
10767 (origin
10768 (method url-fetch)
10769 (uri (pypi-uri "python-editor" version))
10770 (sha256
10771 (base32
10772 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10773 (build-system python-build-system)
10774 (arguments
10775 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10776 (home-page "https://github.com/fmoo/python-editor")
10777 (synopsis "Programmatically open an editor, capture the result")
10778 (description
10779 "python-editor is a library that provides the editor module for
10780 programmatically interfacing with your system's $EDITOR.")
10781 (license license:asl2.0)))
10782
10783 (define-public python2-editor
10784 (package-with-python2 python-editor))
10785
10786 (define-public python-vobject
10787 (package
10788 (name "python-vobject")
10789 (version "0.9.6.1")
10790 (source (origin
10791 (method url-fetch)
10792 (uri (pypi-uri "vobject" version))
10793 (sha256
10794 (base32
10795 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10796 (build-system python-build-system)
10797 (arguments
10798 '(;; The test suite relies on some non-portable Windows interfaces.
10799 #:tests? #f))
10800 (propagated-inputs
10801 `(("python-dateutil" ,python-dateutil)
10802 ("python-pyicu" ,python-pyicu)))
10803 (synopsis "Parse and generate vCard and vCalendar files")
10804 (description "Vobject is intended to be a full featured Python package for
10805 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10806 are supported and well tested. vCard 3.0 files are supported, and all data
10807 should be imported, but only a few components are understood in a sophisticated
10808 way.")
10809 (home-page "https://eventable.github.io/vobject/")
10810 (license license:asl2.0)))
10811
10812 (define-public python2-vobject
10813 (package-with-python2 python-vobject))
10814
10815 (define-public python-munkres
10816 (package
10817 (name "python-munkres")
10818 (version "1.0.8")
10819 (source (origin
10820 (method url-fetch)
10821 (uri (pypi-uri "munkres" version))
10822 (sha256
10823 (base32
10824 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10825 (build-system python-build-system)
10826 (arguments
10827 '(#:tests? #f)) ; no test suite
10828 (home-page "https://software.clapper.org/munkres/")
10829 (synopsis "Implementation of the Munkres algorithm")
10830 (description "The Munkres module provides an implementation of the Munkres
10831 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10832 useful for solving the Assignment Problem.")
10833 (license license:bsd-3)))
10834
10835 (define-public python2-munkres
10836 (package-with-python2 python-munkres))
10837
10838 (define-public python-whoosh
10839 (package
10840 (name "python-whoosh")
10841 (version "2.7.4")
10842 (source
10843 (origin
10844 (method url-fetch)
10845 (uri (pypi-uri "Whoosh" version))
10846 (sha256
10847 (base32
10848 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10849 (build-system python-build-system)
10850 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10851 (native-inputs
10852 `(("python-pytest" ,python-pytest)))
10853 (home-page "https://bitbucket.org/mchaput/whoosh")
10854 (synopsis "Full text indexing, search, and spell checking library")
10855 (description
10856 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10857 checking library.")
10858 (license license:bsd-2)))
10859
10860 (define-public python2-whoosh
10861 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10862 (package (inherit whoosh)
10863 (propagated-inputs
10864 `(("python2-backport-ssl-match-hostname"
10865 ,python2-backport-ssl-match-hostname)
10866 ,@(package-propagated-inputs whoosh))))))
10867
10868 (define-public python-pathlib
10869 (package
10870 (name "python-pathlib")
10871 (version "1.0.1")
10872 (source (origin
10873 (method url-fetch)
10874 (uri (pypi-uri "pathlib" version))
10875 (sha256
10876 (base32
10877 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10878 (build-system python-build-system)
10879 ;; The tests depend on the internal "test" module, which does not provide
10880 ;; a stable interface.
10881 (arguments `(#:tests? #f))
10882 (home-page "https://pathlib.readthedocs.org/")
10883 (synopsis "Object-oriented file system paths")
10884 (description "Pathlib offers a set of classes to handle file system paths.
10885 It offers the following advantages over using string objects:
10886
10887 @enumerate
10888 @item No more cumbersome use of os and os.path functions. Everything can
10889 be done easily through operators, attribute accesses, and method calls.
10890 @item Embodies the semantics of different path types. For example,
10891 comparing Windows paths ignores casing.
10892 @item Well-defined semantics, eliminating any inconsistencies or
10893 ambiguities (forward vs. backward slashes, etc.).
10894 @end enumerate
10895
10896 Note: In Python 3.4, pathlib is now part of the standard library. For other
10897 Python versions please consider python-pathlib2 instead, which tracks the
10898 standard library module. This module (python-pathlib) isn't maintained
10899 anymore.")
10900 (license license:expat)))
10901
10902 (define-public python2-pathlib
10903 (package-with-python2 python-pathlib))
10904
10905 (define-public python2-pathlib2
10906 (package
10907 (name "python2-pathlib2")
10908 (version "2.3.5")
10909 (source (origin
10910 (method url-fetch)
10911 (uri (pypi-uri "pathlib2" version))
10912 (sha256
10913 (base32
10914 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10915 (build-system python-build-system)
10916 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10917 ;; version is 3.4 which already includes this package as part of the
10918 ;; standard library.
10919 (arguments
10920 `(#:python ,python-2))
10921 (propagated-inputs
10922 `(("python2-scandir" ,python2-scandir)
10923 ("python2-six" ,python2-six)))
10924 (home-page "https://pypi.org/project/pathlib2/")
10925 (synopsis "Object-oriented file system paths - backport of standard
10926 pathlib module")
10927 (description "The goal of pathlib2 is to provide a backport of standard
10928 pathlib module which tracks the standard library module, so all the newest
10929 features of the standard pathlib can be used also on older Python versions.
10930
10931 Pathlib offers a set of classes to handle file system paths. It offers the
10932 following advantages over using string objects:
10933
10934 @enumerate
10935 @item No more cumbersome use of os and os.path functions. Everything can
10936 be done easily through operators, attribute accesses, and method calls.
10937 @item Embodies the semantics of different path types. For example,
10938 comparing Windows paths ignores casing.
10939 @item Well-defined semantics, eliminating any inconsistencies or
10940 ambiguities (forward vs. backward slashes, etc.).
10941 @end enumerate")
10942 (license license:expat)))
10943
10944 (define-public python2-pathlib2-bootstrap
10945 (hidden-package
10946 (package
10947 (inherit python2-pathlib2)
10948 (name "python2-pathlib2-bootstrap")
10949 (propagated-inputs
10950 `(("python2-scandir" ,python2-scandir)
10951 ("python2-six" ,python2-six-bootstrap))))))
10952
10953 (define-public python-jellyfish
10954 (package
10955 (name "python-jellyfish")
10956 (version "0.5.6")
10957 (source (origin
10958 (method url-fetch)
10959 (uri (pypi-uri "jellyfish" version))
10960 (sha256
10961 (base32
10962 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10963 (build-system python-build-system)
10964 (native-inputs
10965 `(("python-pytest" ,python-pytest)))
10966 (home-page "https://github.com/jamesturk/jellyfish")
10967 (synopsis "Approximate and phonetic matching of strings")
10968 (description "Jellyfish uses a variety of string comparison and phonetic
10969 encoding algorithms to do fuzzy string matching.")
10970 (license license:bsd-2)
10971 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10972
10973 (define-public python2-jellyfish
10974 (let ((jellyfish (package-with-python2
10975 (strip-python2-variant python-jellyfish))))
10976 (package (inherit jellyfish)
10977 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10978 ,@(package-native-inputs jellyfish))))))
10979
10980 (define-public python2-unicodecsv
10981 (package
10982 (name "python2-unicodecsv")
10983 (version "0.14.1")
10984 (source (origin
10985 (method git-fetch)
10986 ;; The test suite is not included in the PyPi release.
10987 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10988 (uri (git-reference
10989 (url "https://github.com/jdunck/python-unicodecsv")
10990 (commit version)))
10991 (file-name (git-file-name name version))
10992 (sha256
10993 (base32
10994 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10995 (build-system python-build-system)
10996 (arguments
10997 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10998 #:python ,python-2))
10999 (native-inputs
11000 `(("python2-unittest2" ,python2-unittest2)))
11001 (home-page "https://github.com/jdunck/python-unicodecsv")
11002 (synopsis "Unicode CSV module for Python 2")
11003 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
11004 module, adding support for Unicode strings.")
11005 (license license:bsd-2)))
11006
11007 (define-public python-rarfile
11008 (package
11009 (name "python-rarfile")
11010 (version "2.8")
11011 (source (origin
11012 (method url-fetch)
11013 (uri (pypi-uri "rarfile" version))
11014 (sha256
11015 (base32
11016 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
11017 (build-system python-build-system)
11018 (arguments
11019 '(#:phases
11020 (modify-phases %standard-phases
11021 (replace 'check
11022 ;; Many tests fail, but the installation proceeds.
11023 (lambda _ (invoke "make" "-C" "test" "test"))))))
11024 (native-inputs
11025 `(("which" ,which))) ; required for tests
11026 (propagated-inputs
11027 `(("libarchive" ,libarchive)))
11028 (home-page "https://github.com/markokr/rarfile")
11029 (synopsis "RAR archive reader for Python")
11030 (description "This is Python module for RAR archive reading. The interface
11031 is made as zipfile like as possible.")
11032 (license license:isc)))
11033
11034 (define-public python2-rarfile
11035 (package-with-python2 python-rarfile))
11036
11037 (define-public python-magic
11038 (package
11039 (name "python-magic")
11040 (version "0.4.15")
11041 (source
11042 (origin
11043 (method url-fetch)
11044 (uri (pypi-uri "python-magic" version))
11045 (sha256
11046 (base32
11047 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
11048 (file-name (string-append name "-" version "-checkout"))))
11049 (build-system python-build-system)
11050 (arguments
11051 ;; The tests are unreliable, so don't run them. The tests fail
11052 ;; under Python3 because they were written for Python2 and
11053 ;; contain import statements that do not work in Python3. One of
11054 ;; the tests fails under Python2 because its assertions are
11055 ;; overly stringent; it relies on comparing output strings which
11056 ;; are brittle and can change depending on the version of
11057 ;; libmagic being used and the system on which the test is
11058 ;; running. In my case, under GuixSD 0.10.0, only one test
11059 ;; failed, and it seems to have failed only because the version
11060 ;; of libmagic that is packaged in Guix outputs a slightly
11061 ;; different (but not wrong) string than the one that the test
11062 ;; expected.
11063 '(#:tests? #f
11064 #:phases (modify-phases %standard-phases
11065 ;; Replace a specific method call with a hard-coded
11066 ;; path to the necessary libmagic.so file in the
11067 ;; store. If we don't do this, then the method call
11068 ;; will fail to find the libmagic.so file, which in
11069 ;; turn will cause any application using
11070 ;; python-magic to fail.
11071 (add-before 'build 'hard-code-path-to-libmagic
11072 (lambda* (#:key inputs #:allow-other-keys)
11073 (let ((file (assoc-ref inputs "file")))
11074 (substitute* "magic.py"
11075 (("ctypes.util.find_library\\('magic'\\)")
11076 (string-append "'" file "/lib/libmagic.so'")))
11077 #t)))
11078 (add-before 'install 'disable-egg-compression
11079 (lambda _
11080 (let ((port (open-file "setup.cfg" "a")))
11081 (display "\n[easy_install]\nzip_ok = 0\n"
11082 port)
11083 (close-port port)
11084 #t))))))
11085 (inputs
11086 ;; python-magic needs to be able to find libmagic.so.
11087 `(("file" ,file)))
11088 (home-page
11089 "https://github.com/ahupp/python-magic")
11090 (synopsis
11091 "File type identification using libmagic")
11092 (description
11093 "This module uses ctypes to access the libmagic file type
11094 identification library. It makes use of the local magic database and
11095 supports both textual and MIME-type output. Note that this module and
11096 the python-file module both provide a \"magic.py\" file; these two
11097 modules, which are different and were developed separately, both serve
11098 the same purpose: to provide Python bindings for libmagic.")
11099 (license license:expat)))
11100
11101 (define-public python2-magic
11102 (package-with-python2 python-magic))
11103
11104 (define-public python2-s3cmd
11105 (package
11106 (name "python2-s3cmd")
11107 (version "1.6.1")
11108 (source
11109 (origin
11110 (method url-fetch)
11111 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
11112 "s3cmd-" version ".tar.gz"))
11113 (sha256
11114 (base32
11115 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
11116 (build-system python-build-system)
11117 (arguments
11118 ;; s3cmd is written for python2 only and contains no tests.
11119 `(#:python ,python-2
11120 #:tests? #f))
11121 (propagated-inputs
11122 `(("python2-dateutil" ,python2-dateutil)
11123 ;; The python-file package also provides a magic.py module.
11124 ;; This is an unfortunate state of affairs; however, s3cmd
11125 ;; fails to install if it cannot find specifically the
11126 ;; python-magic package. Thus we include it, instead of using
11127 ;; python-file. Ironically, s3cmd sometimes works better
11128 ;; without libmagic bindings at all:
11129 ;; https://github.com/s3tools/s3cmd/issues/198
11130 ("python2-magic" ,python2-magic)))
11131 (home-page "https://s3tools.org/s3cmd")
11132 (synopsis "Command line tool for S3-compatible storage services")
11133 (description
11134 "S3cmd is a command line tool for uploading, retrieving and managing data
11135 in storage services that are compatible with the Amazon Simple Storage
11136 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
11137 GnuPG encryption, and more. It also supports management of Amazon's
11138 CloudFront content delivery network.")
11139 (license license:gpl2+)))
11140
11141 (define-public python-pkgconfig
11142 (package
11143 (name "python-pkgconfig")
11144 (version "1.3.1")
11145 (source
11146 (origin
11147 (method url-fetch)
11148 (uri (pypi-uri "pkgconfig" version))
11149 (sha256
11150 (base32
11151 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
11152 (build-system python-build-system)
11153 (native-inputs
11154 `(("python-nose" ,python-nose)))
11155 (inputs
11156 `(("pkg-config" ,pkg-config)))
11157 (arguments
11158 `(#:phases
11159 (modify-phases %standard-phases
11160 (add-before 'build 'patch
11161 ;; Hard-code the path to pkg-config.
11162 (lambda _
11163 (substitute* "pkgconfig/pkgconfig.py"
11164 (("cmd = 'pkg-config")
11165 (string-append "cmd = '" (which "pkg-config"))))
11166 #t))
11167 (replace 'check
11168 (lambda _
11169 (invoke "nosetests" "test.py"))))))
11170 (home-page "https://github.com/matze/pkgconfig")
11171 (synopsis "Python interface for pkg-config")
11172 (description "This module provides a Python interface to pkg-config. It
11173 can be used to find all pkg-config packages, check if a package exists,
11174 check if a package meets certain version requirements, query CFLAGS and
11175 LDFLAGS and parse the output to build extensions with setup.py.")
11176 (license license:expat)))
11177
11178 (define-public python2-pkgconfig
11179 (package-with-python2 python-pkgconfig))
11180
11181 (define-public python-bz2file
11182 (package
11183 (name "python-bz2file")
11184 (version "0.98")
11185 (source
11186 (origin
11187 (method url-fetch)
11188 (uri (pypi-uri "bz2file" version))
11189 (sha256
11190 (base32
11191 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
11192 (build-system python-build-system)
11193 (arguments
11194 `(#:tests? #f)) ; Tests use deprecated python modules.
11195 (home-page "https://github.com/nvawda/bz2file")
11196 (synopsis "Read and write bzip2-compressed files")
11197 (description
11198 "Bz2file is a Python library for reading and writing bzip2-compressed
11199 files. It contains a drop-in replacement for the I/O interface in the
11200 standard library's @code{bz2} module, including features from the latest
11201 development version of CPython that are not available in older releases.")
11202 (license license:asl2.0)))
11203
11204 (define-public python2-bz2file
11205 (package-with-python2 python-bz2file))
11206
11207 (define-public python-future
11208 (package
11209 (name "python-future")
11210 (version "0.17.1")
11211 (source
11212 (origin
11213 (method url-fetch)
11214 (uri (pypi-uri "future" version))
11215 (sha256
11216 (base32
11217 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
11218 (build-system python-build-system)
11219 ;; Many tests connect to the network or are otherwise flawed.
11220 ;; https://github.com/PythonCharmers/python-future/issues/210
11221 (arguments
11222 `(#:tests? #f))
11223 (home-page "https://python-future.org")
11224 (synopsis "Single-source support for Python 3 and 2")
11225 (description
11226 "@code{python-future} is the missing compatibility layer between Python 2 and
11227 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11228 to support both Python 2 and Python 3 with minimal overhead.")
11229 (license license:expat)))
11230
11231 (define-public python2-future
11232 (package-with-python2 python-future))
11233
11234 (define-public python-cysignals
11235 (package
11236 (name "python-cysignals")
11237 (version "1.9.0")
11238 (source
11239 (origin
11240 (method url-fetch)
11241 (uri (pypi-uri "cysignals" version))
11242 (sha256
11243 (base32
11244 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11245 (build-system python-build-system)
11246 (native-inputs
11247 `(("python-cython" ,python-cython)
11248 ("python-sphinx" ,python-sphinx)))
11249 (inputs
11250 `(("pari-gp" ,pari-gp)))
11251 (arguments
11252 `(#:modules ((guix build python-build-system)
11253 ((guix build gnu-build-system) #:prefix gnu:)
11254 (guix build utils))
11255 ;; FIXME: Tests are executed after installation and currently fail
11256 ;; when not installing into standard locations; the author is working
11257 ;; on a fix.
11258 #:tests? #f
11259 #:phases
11260 (modify-phases %standard-phases
11261 (add-before
11262 'build 'configure
11263 (assoc-ref gnu:%standard-phases 'configure)))))
11264 (home-page
11265 "https://github.com/sagemath/cysignals")
11266 (synopsis
11267 "Handling of interrupts and signals for Cython")
11268 (description
11269 "The cysignals package provides mechanisms to handle interrupts (and
11270 other signals and errors) in Cython code, using two related approaches,
11271 for mixed Cython/Python code or external C libraries and pure Cython code,
11272 respectively.")
11273 (license license:lgpl3+)))
11274
11275 (define-public python2-cysignals
11276 (package-with-python2 python-cysignals))
11277
11278 (define-public python2-shedskin
11279 (package
11280 (name "python2-shedskin")
11281 (version "0.9.4")
11282 (source
11283 (origin
11284 (method url-fetch)
11285 (uri (string-append "https://github.com/shedskin/shedskin/"
11286 "releases/download/v" version
11287 "/shedskin-" version ".tgz"))
11288 (sha256
11289 (base32
11290 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11291 (build-system python-build-system)
11292 (arguments
11293 `(#:python ,python-2
11294 #:phases (modify-phases %standard-phases
11295 (add-after 'unpack 'fix-resulting-include-libs
11296 (lambda* (#:key inputs #:allow-other-keys)
11297 (let ((libgc (assoc-ref inputs "libgc"))
11298 (pcre (assoc-ref inputs "pcre")))
11299 (substitute* "shedskin/makefile.py"
11300 (("variable == 'CCFLAGS':[ ]*")
11301 (string-append "variable == 'CCFLAGS':\n"
11302 " line += ' -I " pcre "/include"
11303 " -I " libgc "/include'"))
11304 (("variable == 'LFLAGS':[ ]*")
11305 (string-append "variable == 'LFLAGS':\n"
11306 " line += ' -L" pcre "/lib"
11307 " -L " libgc "/lib'")))
11308 #t))))))
11309 (inputs `(("pcre" ,pcre)
11310 ("libgc" ,libgc)))
11311 (home-page "https://shedskin.github.io/")
11312 (synopsis "Experimental Python-2 to C++ Compiler")
11313 (description (string-append "This is an experimental compiler for a subset of
11314 Python. It generates C++ code and a Makefile."))
11315 (license (list license:gpl3 license:bsd-3 license:expat))))
11316
11317 (define-public python2-rope
11318 (package
11319 (name "python2-rope")
11320 (version "0.11.0")
11321 (source
11322 (origin
11323 (method url-fetch)
11324 (uri (pypi-uri "rope" version))
11325 (sha256
11326 (base32
11327 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11328 (arguments
11329 ;; Rope has only partial python3 support, see `python-rope'
11330 `(#:python ,python-2))
11331 (build-system python-build-system)
11332 (native-inputs
11333 `(("python2-unittest2" ,python2-unittest2)))
11334 (home-page "https://github.com/python-rope/rope")
11335 (synopsis "Refactoring library for Python")
11336 (description "Rope is a refactoring library for Python. It facilitates
11337 the renaming, moving and extracting of attributes, functions, modules, fields
11338 and parameters in Python 2 source code. These refactorings can also be applied
11339 to occurrences in strings and comments.")
11340 (license license:gpl2)))
11341
11342 (define-public python-rope
11343 (package
11344 (inherit python2-rope)
11345 (name "python-rope")
11346 (arguments `(#:python ,python-wrapper
11347 ;; XXX: Only partial python3 support, results in some failing
11348 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11349 #:tests? #f))
11350 (properties `((python2-variant . ,(delay python2-rope))))))
11351
11352 (define-public python-py3status
11353 (package
11354 (name "python-py3status")
11355 (version "3.21")
11356 (source
11357 (origin
11358 (method url-fetch)
11359 (uri (pypi-uri "py3status" version))
11360 (sha256
11361 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11362 (build-system python-build-system)
11363 (inputs
11364 `(("file" ,file)))
11365 (arguments
11366 '(#:phases
11367 (modify-phases %standard-phases
11368 ;; 'file' is used for detection of configuration file encoding
11369 ;; let's make link the dependency to particular input
11370 (add-before 'build 'patch-file-path
11371 (lambda* (#:key inputs #:allow-other-keys)
11372 (let ((file-path (assoc-ref inputs "file")))
11373 (substitute* "py3status/parse_config.py"
11374 (("\\[\"file\", \"-b\"")
11375 (string-append "['" file-path "/bin/file', '-b'")))
11376 #t))))
11377 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11378 (home-page "https://github.com/ultrabug/py3status")
11379 (synopsis "Extensible i3status wrapper written in Python")
11380 (description "py3status is an i3status wrapper which extends i3status
11381 functionality in a modular way, allowing you to extend your panel with your
11382 own code, responding to click events and updating clock every second.")
11383 (license license:bsd-3)))
11384
11385 (define-public python2-selectors2
11386 (package
11387 (name "python2-selectors2")
11388 (version "2.0.1")
11389 (source (origin
11390 (method url-fetch)
11391 (uri (pypi-uri "selectors2" version))
11392 (sha256
11393 (base32
11394 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
11395 (build-system python-build-system)
11396 (arguments
11397 `(#:python ,python-2))
11398 (native-inputs
11399 `(("python2-mock" ,python2-mock)
11400 ("python2-psutil" ,python2-psutil)))
11401 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
11402 (synopsis "Backport of the selectors module from Python 3.5+")
11403 (description
11404 "This package provides a drop-in replacement for the @code{selectors}
11405 module in Python 3.5 and later.")
11406 (license license:expat)))
11407
11408 (define-public python-tblib
11409 (package
11410 (name "python-tblib")
11411 (version "1.6.0")
11412 (source (origin
11413 (method url-fetch)
11414 (uri (pypi-uri "tblib" version))
11415 (sha256
11416 (base32
11417 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11418 (build-system python-build-system)
11419 (arguments
11420 `(#:phases
11421 (modify-phases %standard-phases
11422 (replace 'check
11423 (lambda _
11424 ;; Upstream runs tests after installation and the package itself
11425 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11426 ;; found.
11427 (setenv "PYTHONPATH"
11428 (string-append (getcwd) "/build/lib:"
11429 (getenv "PYTHONPATH")))
11430 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11431 (native-inputs
11432 `(("python-pytest" ,python-pytest)
11433 ("python-six" ,python-six)))
11434 (home-page "https://github.com/ionelmc/python-tblib")
11435 (synopsis "Traceback serialization library")
11436 (description
11437 "Traceback serialization allows you to:
11438
11439 @enumerate
11440 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11441 different processes. This allows better error handling when running code over
11442 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11443
11444 @item Parse traceback strings and raise with the parsed tracebacks.
11445 @end enumerate\n")
11446 (license license:bsd-3)))
11447
11448 (define-public python2-tblib
11449 (package-with-python2 python-tblib))
11450
11451 (define-public python-greenlet
11452 (package
11453 (name "python-greenlet")
11454 (version "0.4.16")
11455 (source (origin
11456 (method url-fetch)
11457 (uri (pypi-uri "greenlet" version))
11458 (sha256
11459 (base32
11460 "0v2571d0av1hz3yx63gvmnrinyn57nnvibg4zkl9frv74b3yl1kf"))))
11461 (build-system python-build-system)
11462 (home-page "https://greenlet.readthedocs.io/")
11463 (synopsis "Lightweight in-process concurrent programming")
11464 (description
11465 "Greenlet package is a spin-off of Stackless, a version of CPython
11466 that supports micro-threads called \"tasklets\". Tasklets run
11467 pseudo-concurrently (typically in a single or a few OS-level threads) and
11468 are synchronized with data exchanges on \"channels\".")
11469 (license (list license:psfl license:expat))))
11470
11471 (define-public python2-greenlet
11472 (package-with-python2 python-greenlet))
11473
11474 (define-public python-objgraph
11475 (package
11476 (name "python-objgraph")
11477 (version "3.4.1")
11478 (source
11479 (origin
11480 (method url-fetch)
11481 (uri (pypi-uri "objgraph" version))
11482 (sha256
11483 (base32
11484 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11485 (build-system python-build-system)
11486 (propagated-inputs
11487 `(("python-graphviz" ,python-graphviz)))
11488 (native-inputs
11489 `(("python-mock" ,python-mock)
11490 ("graphviz" ,graphviz)))
11491 (home-page "https://mg.pov.lt/objgraph/")
11492 (synopsis "Draw Python object reference graphs with graphviz")
11493 (description
11494 "This package provides tools to draw Python object reference graphs with
11495 graphviz.")
11496 (license license:expat)))
11497
11498 (define-public python2-objgraph
11499 (package-with-python2 python-objgraph))
11500
11501 (define-public python-gevent
11502 (package
11503 (name "python-gevent")
11504 (version "20.6.2")
11505 (source (origin
11506 (method url-fetch)
11507 (uri (pypi-uri "gevent" version))
11508 (sha256
11509 (base32
11510 "1ldmppgghfphdaazjw6wq2i17xcmsjb2jsizfa4cjlg812zjlg52"))
11511 (modules '((guix build utils)))
11512 (snippet
11513 '(begin
11514 ;; unbunding libev and c-ares
11515 (delete-file-recursively "deps")
11516 #t))))
11517 (build-system python-build-system)
11518 (arguments
11519 `(#:modules ((ice-9 ftw)
11520 (ice-9 match)
11521 (srfi srfi-26)
11522 (guix build utils)
11523 (guix build python-build-system))
11524 #:phases (modify-phases %standard-phases
11525 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11526 (lambda _
11527 (substitute* "src/gevent/subprocess.py"
11528 (("/bin/sh") (which "sh")))
11529 (for-each (lambda (file)
11530 (substitute* file
11531 (("/bin/sh") (which "sh"))
11532 (("/bin/true") (which "true"))))
11533 (find-files "src/greentest" "\\.py$"))
11534 #t))
11535 (add-before 'build 'do-not-use-bundled-sources
11536 (lambda _
11537 (setenv "GEVENTSETUP_EMBED" "0")
11538
11539 ;; Prevent building bundled libev.
11540 (substitute* "setup.py"
11541 (("run_make=_BUILDING")
11542 "run_make=False"))
11543 #t))
11544 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11545 (lambda* (#:key inputs #:allow-other-keys)
11546 (let ((greenlet (string-append
11547 (assoc-ref inputs "python-greenlet")
11548 "/include")))
11549 (match (scandir greenlet
11550 (lambda (item)
11551 (string-prefix? "python" item)))
11552 ((python)
11553 (setenv "C_INCLUDE_PATH"
11554 (string-append greenlet "/" python ":"
11555 (or (getenv "C_INCLUDE_PATH")
11556 ""))))))
11557 #t))
11558 (add-before 'check 'pretend-to-be-CI
11559 (lambda _
11560 ;; A few tests are skipped due to network constraints or
11561 ;; get longer timeouts when running in a CI environment.
11562 ;; Piggy-back on that, as we need the same adjustments.
11563 (setenv "TRAVIS" "1")
11564 (setenv "APPVEYOR" "1")
11565 #t))
11566 (add-before 'check 'adjust-tests
11567 (lambda _
11568 (let ((disabled-tests
11569 '(;; These tests rely on networking which is not
11570 ;; available in the build container.
11571 "test_urllib2net.py"
11572 "test__server.py"
11573 "test__server_pywsgi.py"
11574 "test_socket.py"
11575 "test__socket.py"
11576 "test__socket_ssl.py"
11577 "test__socket_dns.py"
11578 "test__socket_dns6.py"
11579 "test___example_servers.py"
11580 "test__getaddrinfo_import.py"
11581 "test__examples.py"
11582 "test_httplib.py"
11583 "test_https.py"
11584 "test_urllib2_localnet.py"
11585 "test_ssl.py"
11586 "test__ssl.py"
11587 ;; XXX: These tests borrow functionality from the
11588 ;; Python builtin 'test' module, but it is not
11589 ;; installed with the Guix Python distribution.
11590 "test_smtpd.py"
11591 "test_wsgiref.py"
11592 "test_urllib2.py"
11593 "test_thread.py"
11594 "test_threading.py"
11595 "test__threading_2.py"
11596 ;; These tests rely on KeyboardInterrupts which do not
11597 ;; work inside the build container for some reason
11598 ;; (lack of controlling terminal?).
11599 "test_subprocess.py"
11600 "test__issues461_471.py"
11601 ;; TODO: Patch out the tests that use getprotobyname, etc
11602 ;; instead of disabling all the tests from these files.
11603 "test__resolver_dnspython.py"
11604 "test__doctests.py"
11605 "test__all__.py"
11606 "test___config.py"
11607 "test__execmodules.py")))
11608 (call-with-output-file "skipped_tests.txt"
11609 (lambda (port)
11610 (format port "~a~%"
11611 (string-join disabled-tests "\n"))))
11612 #t)))
11613 (replace 'check
11614 (lambda _
11615 ;; Make sure the build directory is on PYTHONPATH.
11616 (setenv "PYTHONPATH"
11617 (string-append
11618 (getenv "PYTHONPATH") ":"
11619 (getcwd) "/build/"
11620 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11621
11622 ;; Use the build daemons configured number of workers.
11623 (setenv "NWORKERS" (number->string (parallel-job-count)))
11624
11625 (invoke "python" "-m" "gevent.tests" "--config"
11626 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11627 (propagated-inputs
11628 `(("python-greenlet" ,python-greenlet)
11629 ("python-objgraph" ,python-objgraph)))
11630 (native-inputs
11631 `(("python-six" ,python-six)
11632
11633 ;; For tests.
11634 ("python-dnspython" ,python-dnspython)
11635 ("python-psutil" ,python-psutil)
11636 ("python-zope.event" ,python-zope-event)
11637 ("python-zope.interface" ,python-zope-interface)))
11638 (inputs
11639 `(("c-ares" ,c-ares)
11640 ("libev" ,libev)))
11641 (home-page "http://www.gevent.org/")
11642 (synopsis "Coroutine-based network library")
11643 (description
11644 "gevent is a coroutine-based Python networking library that uses greenlet
11645 to provide a high-level synchronous API on top of the libev event loop.")
11646 (license license:expat)
11647 (properties `((python2-variant . ,(delay python2-gevent))))))
11648
11649 (define-public python2-gevent
11650 (let ((base (package-with-python2
11651 (strip-python2-variant python-gevent))))
11652 (package
11653 (inherit base)
11654 (native-inputs `(,@(package-native-inputs base)
11655 ("python-mock" ,python2-mock)
11656 ("python2-selectors2" ,python2-selectors2))))))
11657
11658 (define-public python-fastimport
11659 (package
11660 (name "python-fastimport")
11661 (version "0.9.6")
11662 (source
11663 (origin
11664 (method url-fetch)
11665 (uri (pypi-uri "fastimport" version))
11666 (sha256
11667 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11668 (build-system python-build-system)
11669 (home-page "https://github.com/jelmer/python-fastimport")
11670 (synopsis "VCS fastimport parser and generator in Python")
11671 (description "This package provides a parser for and generator of the Git
11672 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11673 format.")
11674 (license license:gpl2+)))
11675
11676 (define-public python2-fastimport
11677 (package-with-python2 python-fastimport))
11678
11679 (define-public python-twisted
11680 (package
11681 (name "python-twisted")
11682 (version "19.7.0")
11683 (source (origin
11684 (method url-fetch)
11685 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11686 (sha256
11687 (base32
11688 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11689 (build-system python-build-system)
11690 (arguments
11691 '(#:tests? #f)) ; FIXME: some tests fail
11692 (propagated-inputs
11693 `(("python-zope-interface" ,python-zope-interface)
11694 ("python-pyhamcrest" ,python-pyhamcrest)
11695 ("python-incremental" ,python-incremental)
11696 ("python-hyperlink" ,python-hyperlink)
11697 ("python-constantly" ,python-constantly)
11698 ("python-automat" ,python-automat)))
11699 (home-page "https://twistedmatrix.com/")
11700 (synopsis "Asynchronous networking framework written in Python")
11701 (description
11702 "Twisted is an extensible framework for Python programming, with special
11703 focus on event-based network programming and multiprotocol integration.")
11704 (license license:expat)))
11705
11706 (define-public python2-twisted
11707 (package-with-python2 python-twisted))
11708
11709 (define-public python-pika
11710 (package
11711 (name "python-pika")
11712 (version "0.12.0")
11713 (source
11714 (origin
11715 (method url-fetch)
11716 (uri (pypi-uri "pika" version))
11717 (sha256
11718 (base32
11719 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11720 (build-system python-build-system)
11721 (native-inputs
11722 `(("python-pyev" ,python-pyev)
11723 ("python-tornado" ,python-tornado)
11724 ("python-twisted" ,python-twisted)))
11725 (home-page "https://pika.readthedocs.org")
11726 (synopsis "Pure Python AMQP Client Library")
11727 (description
11728 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11729 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11730 network support library.")
11731 (license license:bsd-3)))
11732
11733 (define-public python2-pika
11734 (package-with-python2 python-pika))
11735
11736 (define-public python-ply
11737 (package
11738 (name "python-ply")
11739 (version "3.11")
11740 (source
11741 (origin
11742 (method url-fetch)
11743 (uri (pypi-uri "ply" version))
11744 (sha256
11745 (base32
11746 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11747 (build-system python-build-system)
11748 (home-page "http://www.dabeaz.com/ply/")
11749 (synopsis "Python Lex & Yacc")
11750 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11751 It uses LR parsing and does extensive error checking.")
11752 (license license:bsd-3)))
11753
11754 (define-public python-tabulate
11755 (package
11756 (name "python-tabulate")
11757 (version "0.8.7")
11758 (source (origin
11759 (method url-fetch)
11760 (uri (pypi-uri "tabulate" version))
11761 (sha256
11762 (base32
11763 "01shi7bmj09f0bcm5s0c9skys063lzp76p0n4a2xmg041ni269yv"))))
11764 (build-system python-build-system)
11765 (arguments
11766 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11767 ;; and the latest release is not tagged in the upstream repository.
11768 '(#:tests? #f))
11769 (home-page "https://bitbucket.org/astanin/python-tabulate")
11770 (synopsis "Pretty-print tabular data")
11771 (description
11772 "Tabulate is a library and command-line utility to pretty-print tabular
11773 data in Python.")
11774 (license license:expat)))
11775
11776 (define-public python2-tabulate
11777 (package-with-python2 python-tabulate))
11778
11779 (define-public python-kazoo
11780 (package
11781 (name "python-kazoo")
11782 (version "2.4.0")
11783 (source
11784 (origin
11785 (method url-fetch)
11786 (uri (pypi-uri "kazoo" version))
11787 (sha256
11788 (base32
11789 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11790 (build-system python-build-system)
11791 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11792 (propagated-inputs
11793 `(("python-six" ,python-six)))
11794 (home-page "https://kazoo.readthedocs.org")
11795 (synopsis "High-level Zookeeper client library")
11796 (description
11797 "Kazoo is a Python client library for the Apache Zookeeper distributed
11798 application service. It is designed to be easy to use and to avoid common
11799 programming errors.")
11800 (license license:asl2.0)))
11801
11802 (define-public python2-kazoo
11803 (package-with-python2 python-kazoo))
11804
11805 (define-public python-pykafka
11806 (package
11807 (name "python-pykafka")
11808 (version "2.4.0")
11809 (source (origin
11810 (method url-fetch)
11811 (uri (pypi-uri "pykafka" version))
11812 (sha256
11813 (base32
11814 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11815 (build-system python-build-system)
11816 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11817 (propagated-inputs
11818 `(("python-gevent" ,python-gevent)
11819 ("python-kazoo" ,python-kazoo)
11820 ("python-tabulate" ,python-tabulate)))
11821 (inputs
11822 `(("librdkafka" ,librdkafka)))
11823 (home-page "https://pykafka.readthedocs.io/")
11824 (synopsis "Apache Kafka client for Python")
11825 (description
11826 "PyKafka is a client for the Apache Kafka distributed messaging system.
11827 It includes Python implementations of Kafka producers and consumers, which
11828 are optionally backed by a C extension built on librdkafka.")
11829 (license license:asl2.0)))
11830
11831 (define-public python2-pykafka
11832 (package-with-python2 python-pykafka))
11833
11834 (define-public python-wcwidth
11835 (package
11836 (name "python-wcwidth")
11837 (version "0.1.8")
11838 (source (origin
11839 (method url-fetch)
11840 (uri (pypi-uri "wcwidth" version))
11841 (sha256
11842 (base32
11843 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11844 (build-system python-build-system)
11845 (home-page "https://github.com/jquast/wcwidth")
11846 (synopsis "Measure number of terminal column cells of wide-character codes")
11847 (description "Wcwidth measures the number of terminal column cells of
11848 wide-character codes. It is useful for those implementing a terminal emulator,
11849 or programs that carefully produce output to be interpreted by one. It is a
11850 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11851 specified in POSIX.1-2001 and POSIX.1-2008.")
11852 (license license:expat)))
11853
11854 (define-public python2-wcwidth
11855 (package-with-python2 python-wcwidth))
11856
11857 (define-public python2-jsonrpclib
11858 (package
11859 (name "python2-jsonrpclib")
11860 (version "0.1.7")
11861 (source (origin
11862 (method url-fetch)
11863 (uri (pypi-uri "jsonrpclib" version))
11864 (sha256
11865 (base32
11866 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11867 (build-system python-build-system)
11868 (arguments
11869 `(#:tests? #f
11870 #:python ,python-2))
11871 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11872 (synopsis "Implementation of JSON-RPC specification for Python")
11873 (description
11874 "This library is an implementation of the JSON-RPC specification.
11875 It supports both the original 1.0 specification, as well as the
11876 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11877 etc.")
11878 (license license:asl2.0)))
11879
11880 (define-public python-chai
11881 (package
11882 (name "python-chai")
11883 (version "1.1.2")
11884 (source (origin
11885 (method url-fetch)
11886 (uri (pypi-uri "chai" version))
11887 (sha256
11888 (base32
11889 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11890 (build-system python-build-system)
11891 (home-page "https://github.com/agoragames/chai")
11892 (synopsis "Mocking framework for Python")
11893 (description
11894 "Chai provides an api for mocking, stubbing and spying your python
11895 objects, patterned after the Mocha library for Ruby.")
11896 (license license:bsd-3)))
11897
11898 (define-public python2-chai
11899 (package-with-python2 python-chai))
11900
11901 (define-public python-inflection
11902 (package
11903 (name "python-inflection")
11904 (version "0.3.1")
11905 (source
11906 (origin (method url-fetch)
11907 (uri (pypi-uri "inflection" version))
11908 (sha256
11909 (base32
11910 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11911 (build-system python-build-system)
11912 (native-inputs
11913 `(("python-pytest" ,python-pytest)))
11914 (home-page "https://github.com/jpvanhal/inflection")
11915 (synopsis "Python string transformation library")
11916 (description
11917 "Inflection is a string transformation library. It singularizes
11918 and pluralizes English words, and transforms strings from CamelCase to
11919 underscored string.")
11920 (license license:expat)))
11921
11922 (define-public python2-inflection
11923 (package-with-python2 python-inflection))
11924
11925 (define-public python-pylev
11926 (package
11927 (name "python-pylev")
11928 (version "1.3.0")
11929 (source (origin
11930 (method url-fetch)
11931 (uri (pypi-uri "pylev" version))
11932 (sha256
11933 (base32
11934 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11935 (build-system python-build-system)
11936 (home-page "https://github.com/toastdriven/pylev")
11937 (synopsis "Levenshtein distance implementation in Python")
11938 (description "Pure Python Levenshtein implementation, based off the
11939 Wikipedia code samples at
11940 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11941 (license license:bsd-3)))
11942
11943 (define-public python2-pylev
11944 (package-with-python2 python-pylev))
11945
11946 (define-public python-cleo
11947 (package
11948 (name "python-cleo")
11949 (version "0.7.6")
11950 (source (origin
11951 (method url-fetch)
11952 (uri (pypi-uri "cleo" version))
11953 (sha256
11954 (base32
11955 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11956 (build-system python-build-system)
11957 (native-inputs
11958 `( ;; For testing
11959 ("python-mock" ,python-mock)
11960 ("python-pytest-mock" ,python-pytest-mock)
11961 ("python-pytest" ,python-pytest)))
11962 (propagated-inputs
11963 `(("python-backpack" ,python-backpack)
11964 ("python-clikit" ,python-clikit)
11965 ("python-pastel" ,python-pastel)
11966 ("python-pylev" ,python-pylev)))
11967 (home-page "https://github.com/sdispater/cleo")
11968 (synopsis "Command-line arguments library for Python")
11969 (description
11970 "Cleo allows you to create command-line commands with signature in
11971 docstring and colored output.")
11972 (license license:expat)))
11973
11974 (define-public python2-cleo
11975 (package-with-python2 python-cleo))
11976
11977 (define-public python-tomlkit
11978 (package
11979 (name "python-tomlkit")
11980 (version "0.5.11")
11981 (source
11982 (origin
11983 (method url-fetch)
11984 (uri (pypi-uri "tomlkit" version))
11985 (sha256
11986 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11987 (build-system python-build-system)
11988 (native-inputs
11989 `(("python-pytest" ,python-pytest)))
11990 (home-page "https://github.com/sdispater/tomlkit")
11991 (synopsis "Style-preserving TOML library")
11992 (description
11993 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11994 preserves all comments, indentations, whitespace and internal element ordering,
11995 and makes them accessible and editable via an intuitive API. It can also
11996 create new TOML documents from scratch using the provided helpers. Part of the
11997 implementation has been adapted, improved, and fixed from Molten.")
11998 (license license:expat)))
11999
12000 (define-public python-shellingham
12001 (package
12002 (name "python-shellingham")
12003 (version "1.3.2")
12004 (source
12005 (origin
12006 (method url-fetch)
12007 (uri (pypi-uri "shellingham" version))
12008 (sha256
12009 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
12010 (build-system python-build-system)
12011 (arguments
12012 `(#:phases
12013 (modify-phases %standard-phases
12014 (add-after 'unpack 'restore-setup.py
12015 ;; setup.py will return in the next release.
12016 ;; <https://github.com/sarugaku/shellingham/issues/33>
12017 (lambda _
12018 (with-output-to-file "setup.py"
12019 (lambda _
12020 (display "from setuptools import setup\nsetup()\n")))
12021 #t)))))
12022 (home-page "https://github.com/sarugaku/shellingham")
12023 (synopsis "Tool to detect surrounding shell")
12024 (description
12025 "Shellingham detects what shell the current Python executable is
12026 running in.")
12027 (license license:isc)))
12028
12029 (define-public python-memcached
12030 (package
12031 (name "python-memcached")
12032 (version "1.59")
12033 (source
12034 (origin
12035 (method url-fetch)
12036 (uri (pypi-uri "python-memcached" version))
12037 (sha256
12038 (base32
12039 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
12040 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
12041 (build-system python-build-system)
12042 (propagated-inputs `(("python-six" ,python-six)))
12043 (home-page
12044 "https://github.com/linsomniac/python-memcached")
12045 (synopsis "Pure python memcached client")
12046 (description
12047 "This software is a pure Python interface to the memcached memory cache
12048 daemon. It is the client side software which allows storing values in one or
12049 more, possibly remote, memcached servers.")
12050 (license license:psfl)))
12051
12052 (define-public python-clikit
12053 (package
12054 (name "python-clikit")
12055 (version "0.4.2")
12056 (source
12057 (origin
12058 (method url-fetch)
12059 (uri (pypi-uri "clikit" version))
12060 (sha256
12061 (base32
12062 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
12063 (build-system python-build-system)
12064 (propagated-inputs
12065 `(("python-pastel" ,python-pastel)
12066 ("python-pylev" ,python-pylev)))
12067 (home-page "https://github.com/sdispater/clikit")
12068 (synopsis "Group of utilities to build command line interfaces")
12069 (description
12070 "CliKit is a group of utilities to build testable command line
12071 interfaces.")
12072 (properties `((python2-variant . ,(delay python2-clikit))))
12073 (license license:expat)))
12074
12075 (define-public python2-clikit
12076 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
12077 (package/inherit
12078 base
12079 (propagated-inputs
12080 `(("python-enum34" ,python2-enum34)
12081 ("python-typing" ,python2-typing)
12082 ,@(package-propagated-inputs base))))))
12083
12084 (define-public python-msgpack-python
12085 (package
12086 (name "python-msgpack-python")
12087 (version "0.5.6")
12088 (source
12089 (origin
12090 (method url-fetch)
12091 (uri (pypi-uri "msgpack-python" version))
12092 (sha256
12093 (base32
12094 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
12095 (build-system python-build-system)
12096 (home-page "http://msgpack.org/")
12097 (synopsis "Package to deserialize messages in MessagePack binary format")
12098 (description
12099 "MessagePack is an efficient binary serialization format. It lets you
12100 exchange data among multiple languages like JSON. But it's faster and
12101 smaller. Small integers are encoded into a single byte, and typical short
12102 strings require only one extra byte in addition to the strings themselves.")
12103 (license license:asl2.0)))
12104
12105 (define-public python-cachy
12106 (package
12107 (name "python-cachy")
12108 (version "0.3.0")
12109 (source
12110 (origin
12111 (method url-fetch)
12112 (uri (pypi-uri "cachy" version))
12113 (sha256
12114 (base32
12115 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
12116 (build-system python-build-system)
12117 (arguments
12118 '(#:phases
12119 (modify-phases %standard-phases
12120 (replace 'check
12121 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
12122 "pytest"))))))
12123 (native-inputs
12124 `(("memcached" ,memcached)
12125 ("python-fakeredis" ,python-fakeredis)
12126 ("python-flexmock" ,python-flexmock)
12127 ("python-pifpaf" ,python-pifpaf)
12128 ("python-pytest" ,python-pytest)))
12129 (propagated-inputs
12130 `(("python-memcached" ,python-memcached)
12131 ("python-msgpack-python" ,python-msgpack-python)
12132 ("python-redis" ,python-redis)))
12133 (home-page "https://github.com/sdispater/cachy")
12134 (synopsis "Simple yet effective caching library")
12135 (description
12136 "Cachy provides a simple yet effective caching library. A simple but
12137 powerful API: thread-safety; decorator syntax; support for memcached, redis,
12138 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
12139 (license license:expat)))
12140
12141 (define-public poetry
12142 (package
12143 (name "poetry")
12144 (version "1.0.9")
12145 ;; Poetry can only be built from source with Poetry.
12146 (source
12147 (origin
12148 (method url-fetch)
12149 (uri (pypi-uri "poetry" version))
12150 (sha256
12151 (base32
12152 "1avp0db1a4hf6lz3wrzhpdvj4rpmzr4in3myrd3lp5j66nc5ck0a"))))
12153 (build-system python-build-system)
12154 (arguments
12155 `(#:tests? #f ;; Pypi does not have tests.
12156 #:phases
12157 (modify-phases %standard-phases
12158 (add-before 'build 'patch-setup-py
12159 (lambda _
12160 (substitute* "setup.py"
12161 ;; poetry won't update version as 21.0.0 relies on python > 3.6
12162 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
12163 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0"))
12164 #t)))))
12165 (propagated-inputs
12166 `(("python-cachecontrol" ,python-cachecontrol)
12167 ("python-cachy" ,python-cachy)
12168 ("python-cleo" ,python-cleo)
12169 ("python-clikit" ,python-clikit)
12170 ("python-html5lib" ,python-html5lib)
12171 ("python-jsonschema" ,python-jsonschema)
12172 ("python-keyring" ,python-keyring)
12173 ("python-msgpack-transitional" ,python-msgpack-transitional)
12174 ("python-pexpect" ,python-pexpect)
12175 ("python-pkginfo" ,python-pkginfo)
12176 ("python-pyparsing" ,python-pyparsing)
12177 ("python-pyrsistent" ,python-pyrsistent)
12178 ("python-requests" ,python-requests)
12179 ("python-requests-toolbelt" ,python-requests-toolbelt)
12180 ("python-shellingham" ,python-shellingham)
12181 ("python-tomlkit" ,python-tomlkit)
12182 ("python-virtualenv" ,python-virtualenv)))
12183 (home-page "https://python-poetry.org")
12184 (synopsis "Python dependency management and packaging made easy")
12185 (description "Poetry is a tool for dependency management and packaging
12186 in Python. It allows you to declare the libraries your project depends on and
12187 it will manage (install/update) them for you.")
12188 (license license:expat)))
12189
12190 (define-public python-lazy-object-proxy
12191 (package
12192 (name "python-lazy-object-proxy")
12193 (version "1.4.3")
12194 (source (origin
12195 (method url-fetch)
12196 (uri (pypi-uri "lazy-object-proxy" version))
12197 (sha256
12198 (base32
12199 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
12200 (native-inputs
12201 `(("python-setuptools-scm" ,python-setuptools-scm)))
12202 (build-system python-build-system)
12203 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
12204 (synopsis "Lazy object proxy for python")
12205 (description
12206 "Lazy object proxy is an object that wraps a callable but defers the call
12207 until the object is actually required, and caches the result of said call.")
12208 (license license:bsd-2)))
12209
12210 (define-public python2-lazy-object-proxy
12211 (package-with-python2 python-lazy-object-proxy))
12212
12213 (define-public python-dnspython
12214 (package
12215 (name "python-dnspython")
12216 (version "1.16.0")
12217 (source (origin
12218 (method url-fetch)
12219 (uri (string-append "http://www.dnspython.org/kits/"
12220 version "/dnspython-" version ".tar.gz"))
12221 (sha256
12222 (base32
12223 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
12224 (build-system python-build-system)
12225 (arguments '(#:tests? #f)) ; XXX: requires internet access
12226 (home-page "http://www.dnspython.org")
12227 (synopsis "DNS toolkit for Python")
12228 (description
12229 "dnspython is a DNS toolkit for Python. It supports almost all record
12230 types. It can be used for queries, zone transfers, and dynamic updates.
12231 It supports TSIG authenticated messages and EDNS0.")
12232 (license license:expat)))
12233
12234 (define-public python2-dnspython
12235 (package-with-python2 python-dnspython))
12236
12237 (define-public python-email-validator
12238 (package
12239 (name "python-email-validator")
12240 (version "1.0.2")
12241 (source
12242 (origin (method url-fetch)
12243 (uri (pypi-uri "email_validator" version))
12244 (sha256
12245 (base32
12246 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
12247 (build-system python-build-system)
12248 (arguments
12249 '(#:phases
12250 (modify-phases %standard-phases
12251 (add-before 'build 'use-dnspython
12252 (lambda _
12253 (substitute* "setup.py"
12254 (("dnspython3") "dnspython"))
12255 #t)))))
12256 (propagated-inputs
12257 `(("python-dnspython" ,python-dnspython)
12258 ("python-idna" ,python-idna)))
12259 (home-page "https://github.com/JoshData/python-email-validator")
12260 (synopsis "Email address validation library for Python")
12261 (description
12262 "This library validates email address syntax and deliverability.")
12263 (license license:cc0)))
12264
12265 (define-public python2-email-validator
12266 (package-with-python2 python-email-validator))
12267
12268 (define-public python-ukpostcodeparser
12269 (package
12270 (name "python-ukpostcodeparser")
12271 (version "1.0.3")
12272 (source (origin
12273 (method url-fetch)
12274 (uri (pypi-uri "UkPostcodeParser" version))
12275 (sha256
12276 (base32
12277 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12278 (build-system python-build-system)
12279 (home-page "https://github.com/hamstah/ukpostcodeparser")
12280 (synopsis "UK Postcode parser for Python")
12281 (description
12282 "This library provides the @code{parse_uk_postcode} function for
12283 parsing UK postcodes.")
12284 (license license:expat)))
12285
12286 (define-public python2-ukpostcodeparser
12287 (package-with-python2 python-ukpostcodeparser))
12288
12289 (define-public python-faker
12290 (package
12291 (name "python-faker")
12292 (version "4.0.2")
12293 (source (origin
12294 (method url-fetch)
12295 (uri (pypi-uri "Faker" version))
12296 (sha256
12297 (base32
12298 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12299 (build-system python-build-system)
12300 (arguments
12301 '(#:phases
12302 (modify-phases %standard-phases
12303 (replace 'check
12304 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12305 (native-inputs
12306 `(;; For testing
12307 ("python-freezegun" ,python-freezegun)
12308 ("python-pytest" ,python-pytest)
12309 ("python-random2" ,python-random2)
12310 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12311 ("python-validators" ,python-validators)))
12312 (propagated-inputs
12313 `(("python-dateutil" ,python-dateutil)
12314 ("python-text-unidecode" ,python-text-unidecode)))
12315 (home-page "https://github.com/joke2k/faker")
12316 (synopsis "Python package that generates fake data")
12317 (description
12318 "Faker is a Python package that generates fake data such as names,
12319 addresses, and phone numbers.")
12320 (license license:expat)
12321 (properties `((python2-variant . ,(delay python2-faker))))))
12322
12323 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12324 (define-public python2-faker
12325 (let ((base (package-with-python2 (strip-python2-variant
12326 python-faker))))
12327 (package
12328 (inherit base)
12329 (version "3.0.1")
12330 (source (origin
12331 (method url-fetch)
12332 (uri (pypi-uri "Faker" version))
12333 (sha256
12334 (base32
12335 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12336 (native-inputs
12337 `(("python-mock" ,python2-mock)
12338 ,@(package-native-inputs base)))
12339 (propagated-inputs
12340 `(("python2-ipaddress" ,python2-ipaddress)
12341 ("python2-six" ,python2-six)
12342 ,@(package-propagated-inputs base))))))
12343
12344 (define-public python-pyaml
12345 (package
12346 (name "python-pyaml")
12347 (version "18.11.0")
12348 (source (origin
12349 (method url-fetch)
12350 (uri (pypi-uri "pyaml" version))
12351 (sha256
12352 (base32
12353 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12354 (build-system python-build-system)
12355 (native-inputs
12356 `(("python-unidecode" ,python-unidecode)))
12357 (propagated-inputs
12358 `(("python-pyyaml" ,python-pyyaml)))
12359 (home-page "https://github.com/mk-fg/pretty-yaml")
12360 (synopsis "YAML pretty-print library for Python")
12361 (description
12362 "pyaml is a PyYAML based python module to produce pretty and readable
12363 YAML-serialized data.")
12364 (license license:wtfpl2)))
12365
12366 (define-public python2-pyaml
12367 (package-with-python2 python-pyaml))
12368
12369 (define-public python-backpack
12370 (package
12371 (name "python-backpack")
12372 (version "0.1")
12373 (source
12374 (origin
12375 (method url-fetch)
12376 (uri (pypi-uri "backpack" version))
12377 (sha256
12378 (base32
12379 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12380 (build-system python-build-system)
12381 (native-inputs
12382 `(("python-pytest" ,python-pytest)
12383 ("python-nose" ,python-nose)))
12384 (propagated-inputs
12385 `(("python-simplejson" ,python-simplejson)))
12386 (home-page "https://github.com/sdispater/backpack")
12387 (synopsis "Utilities for working with Python collections")
12388 (description "Backpack provides some useful utilities for working with
12389 collections of data.")
12390 (license license:expat)))
12391
12392 (define-public python2-backpack
12393 (package-with-python2 python-backpack))
12394
12395 (define-public python-prompt-toolkit
12396 (package
12397 (name "python-prompt-toolkit")
12398 (version "3.0.5")
12399 (source
12400 (origin
12401 (method url-fetch)
12402 (uri (pypi-uri "prompt_toolkit" version))
12403 (sha256
12404 (base32
12405 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12406 (build-system python-build-system)
12407 (arguments
12408 `(#:phases
12409 (modify-phases %standard-phases
12410 (delete 'check)
12411 (add-after 'install 'post-install-check
12412 (lambda* (#:key inputs outputs #:allow-other-keys)
12413 ;; HOME is needed for the test
12414 ;; "test_pathcompleter_can_expanduser".
12415 (setenv "HOME" "/tmp")
12416 (add-installed-pythonpath inputs outputs)
12417 (invoke "py.test"))))))
12418 (propagated-inputs
12419 `(("python-wcwidth" ,python-wcwidth)))
12420 (native-inputs
12421 `(("python-pytest" ,python-pytest)))
12422 (home-page
12423 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12424 (synopsis "Library for building command line interfaces in Python")
12425 (description
12426 "Prompt-Toolkit is a library for building interactive command line
12427 interfaces in Python. It's like GNU Readline but it also features syntax
12428 highlighting while typing, out-of-the-box multi-line input editing, advanced
12429 code completion, incremental search, support for Chinese double-width
12430 characters, mouse support, and auto suggestions.")
12431 (license license:bsd-3)))
12432
12433 (define-public python-prompt-toolkit-2
12434 (package (inherit python-prompt-toolkit)
12435 (name "python-prompt-toolkit")
12436 (version "2.0.7")
12437 (source
12438 (origin
12439 (method url-fetch)
12440 (uri (pypi-uri "prompt_toolkit" version))
12441 (sha256
12442 (base32
12443 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12444 (propagated-inputs
12445 `(("python-wcwidth" ,python-wcwidth)
12446 ("python-six" ,python-six)
12447 ("python-pygments" ,python-pygments)))))
12448
12449 (define-public python2-prompt-toolkit
12450 (package-with-python2 python-prompt-toolkit-2))
12451
12452 (define-public python-prompt-toolkit-1
12453 (package (inherit python-prompt-toolkit-2)
12454 (version "1.0.15")
12455 (source
12456 (origin
12457 (method url-fetch)
12458 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12459 (sha256
12460 (base32
12461 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12462
12463 (define-public python2-prompt-toolkit-1
12464 (package-with-python2 python-prompt-toolkit-1))
12465
12466 (define-public python-jedi
12467 (package
12468 (name "python-jedi")
12469 (version "0.17.0")
12470 (source
12471 (origin
12472 (method url-fetch)
12473 (uri (pypi-uri "jedi" version))
12474 (patches (search-patches "python-jedi-sort-project-test.patch"))
12475 (sha256
12476 (base32
12477 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12478 (build-system python-build-system)
12479 (arguments
12480 `(#:phases
12481 (modify-phases %standard-phases
12482 (add-before 'check 'adjust-test-for-python-3.8
12483 (lambda _
12484 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12485 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12486 (substitute* "test/test_utils.py"
12487 (("assert len\\(difference\\) < 20")
12488 "assert len(difference) < 22"))
12489 #t))
12490 (replace 'check
12491 (lambda _
12492 (setenv "HOME" "/tmp")
12493 (invoke "python" "-m" "pytest" "-vv"))))))
12494 (native-inputs
12495 `(("python-pytest" ,python-pytest)
12496 ("python-docopt" ,python-docopt)))
12497 (propagated-inputs
12498 `(("python-parso" ,python-parso)))
12499 (home-page "https://github.com/davidhalter/jedi")
12500 (synopsis "Autocompletion and static analysis library for Python")
12501 (description
12502 "Jedi is a static analysis tool for Python that can be used in Integrated
12503 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12504 on a deeper level than many other static analysis frameworks for Python.
12505
12506 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12507 well.")
12508 (license license:expat)))
12509
12510 (define-public python2-jedi
12511 (package-with-python2 python-jedi))
12512
12513 (define-public ptpython
12514 (package
12515 (name "ptpython")
12516 (version "0.34")
12517 (source (origin
12518 (method url-fetch)
12519 (uri (pypi-uri "ptpython" version))
12520 (sha256
12521 (base32
12522 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12523 (build-system python-build-system)
12524 (arguments
12525 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12526 (propagated-inputs
12527 `(("python-docopt" ,python-docopt)
12528 ("python-jedi" ,python-jedi)
12529 ("python-prompt-toolkit" ,python-prompt-toolkit)
12530 ("python-pygments" ,python-pygments)))
12531 (home-page "https://github.com/jonathanslenders/ptpython")
12532 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12533 (description
12534 "ptpython is a Python read-eval-print loop with IDE-like features.
12535 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12536 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12537 etc.")
12538 (license license:bsd-3)
12539 (properties `((python2-variant . ,(delay ptpython-2))))))
12540
12541 (define-public ptpython-2
12542 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12543 (package
12544 (inherit base)
12545 (name "ptpython2"))))
12546
12547 (define-public python-stem
12548 (package
12549 (name "python-stem")
12550 (version "1.8.0")
12551 (source
12552 (origin
12553 (method url-fetch)
12554 (uri (pypi-uri "stem" version))
12555 (sha256
12556 (base32
12557 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12558 (build-system python-build-system)
12559 (arguments
12560 `(#:phases
12561 (modify-phases %standard-phases
12562 (replace 'check
12563 (lambda _
12564 (invoke "./run_tests.py" "--unit")
12565 #t)))))
12566 (native-inputs
12567 `(("python-mock" ,python-mock)
12568 ("python-pycodestyle" ,python-pycodestyle)
12569 ("python-pyflakes" ,python-pyflakes)))
12570 (home-page "https://stem.torproject.org/")
12571 (synopsis
12572 "Python controller library that allows applications to interact with Tor")
12573 (description
12574 "Stem is a Python controller library for Tor. With it you can use Tor's
12575 control protocol to script against the Tor process and read descriptor data
12576 relays publish about themselves.")
12577 (license license:lgpl3)))
12578
12579 (define-public python2-stem
12580 (package-with-python2 python-stem))
12581
12582 (define-public python-pyserial
12583 (package
12584 (name "python-pyserial")
12585 (version "3.4")
12586 (source
12587 (origin
12588 (method url-fetch)
12589 (uri (pypi-uri "pyserial" version))
12590 (sha256
12591 (base32
12592 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12593 (build-system python-build-system)
12594 (arguments
12595 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12596 ;; #:phases
12597 ;; (modify-phases %standard-phases
12598 ;; (replace 'check
12599 ;; (lambda _
12600 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12601 (home-page
12602 "https://github.com/pyserial/pyserial")
12603 (synopsis "Python Serial Port Bindings")
12604 (description "@code{pyserial} provide serial port bindings for Python. It
12605 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12606 and/or Xon/Xoff. The port is accessed in RAW mode.")
12607 (license license:bsd-3)))
12608
12609 (define-public python2-pyserial
12610 (package-with-python2 python-pyserial))
12611
12612 (define-public python-kivy
12613 (package
12614 (name "python-kivy")
12615 (version "1.10.1")
12616 (source
12617 (origin
12618 (method url-fetch)
12619 (uri (pypi-uri "Kivy" version))
12620 (file-name (string-append name "-" version ".tar.gz"))
12621 (sha256
12622 (base32
12623 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12624 (build-system python-build-system)
12625 (arguments
12626 `(#:tests? #f ; Tests require many optional packages
12627 #:phases
12628 (modify-phases %standard-phases
12629 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12630 (lambda* (#:key inputs #:allow-other-keys)
12631 (setenv "KIVY_SDL2_PATH"
12632 (string-append (assoc-ref inputs "sdl-union")
12633 "/include/SDL2"))
12634 #t)))))
12635 (native-inputs
12636 `(("pkg-config" ,pkg-config)
12637 ("python-cython" ,python-cython)))
12638 (inputs
12639 `(("gstreamer" ,gstreamer)
12640 ("mesa" ,mesa)
12641 ("sdl-union"
12642 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12643 (home-page "https://kivy.org")
12644 (synopsis
12645 "Multitouch application framework")
12646 (description
12647 "A software library for rapid development of
12648 hardware-accelerated multitouch applications.")
12649 (license license:expat)))
12650
12651 (define-public python2-kivy
12652 (package-with-python2 python-kivy))
12653
12654 (define-public python-binaryornot
12655 (package
12656 (name "python-binaryornot")
12657 (version "0.4.4")
12658 (source (origin
12659 (method url-fetch)
12660 (uri (pypi-uri "binaryornot" version))
12661 (sha256
12662 (base32
12663 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12664 (build-system python-build-system)
12665 (arguments
12666 `(#:phases
12667 (modify-phases %standard-phases
12668 (add-after 'unpack 'patch-tests
12669 (lambda _
12670 ;; TypeError: binary() got an unexpected keyword argument
12671 ;; 'average_size'.
12672 (substitute* "tests/test_check.py"
12673 (("average_size=512") ""))
12674 #t)))))
12675 (propagated-inputs
12676 `(("python-chardet" ,python-chardet)
12677 ("python-hypothesis" ,python-hypothesis)))
12678 (home-page "https://github.com/audreyr/binaryornot")
12679 (synopsis "Package to check if a file is binary or text")
12680 (description "Ultra-lightweight pure Python package to check if a file is
12681 binary or text.")
12682 (license license:bsd-3)
12683 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12684
12685 (define-public python2-binaryornot
12686 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12687 (package (inherit base)
12688 (propagated-inputs
12689 `(("python2-enum34" ,python2-enum34)
12690 ,@(package-propagated-inputs base))))))
12691
12692 (define-public python-binwalk
12693 (package
12694 (name "python-binwalk")
12695 (version "2.2.0")
12696 (source
12697 (origin
12698 (method git-fetch)
12699 (uri (git-reference
12700 (url "https://github.com/ReFirmLabs/binwalk")
12701 (commit (string-append "v" version))))
12702 (file-name (git-file-name name version))
12703 (sha256
12704 (base32
12705 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12706 (build-system python-build-system)
12707 (arguments
12708 `(#:phases
12709 (modify-phases %standard-phases
12710 (add-before 'check 'set-pythonpath
12711 (lambda _
12712 (setenv "PYTHONPATH"
12713 (string-append
12714 (getcwd) "/src/"
12715 ":" (getenv "PYTHONPATH")))
12716 (setenv "HOME" "")
12717 #t)))))
12718 (native-inputs
12719 `(("python-coverage" ,python-coverage)
12720 ("python-nose" ,python-nose)))
12721 (home-page "https://github.com/ReFirmLabs/binwalk")
12722 (synopsis "Firmware analysis tool")
12723 (description "Binwalk is a tool for analyzing, reverse engineering, and
12724 extracting firmware images")
12725 (license license:expat)))
12726
12727 (define-public python-nltk
12728 (package
12729 (name "python-nltk")
12730 (version "3.2.1")
12731 (source (origin
12732 (method url-fetch)
12733 (uri (pypi-uri "nltk" version))
12734 (sha256
12735 (base32
12736 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12737 (build-system python-build-system)
12738 (arguments
12739 '(;; The tests require some extra resources to be downloaded.
12740 ;; TODO Try packaging these resources.
12741 #:tests? #f))
12742 (home-page "http://nltk.org/")
12743 (synopsis "Natural Language Toolkit")
12744 (description "It provides interfaces to over 50 corpora and lexical
12745 resources such as WordNet, along with a suite of text processing libraries
12746 for classification, tokenization, stemming, tagging, parsing, and semantic
12747 reasoning, wrappers for natural language processing libraries.")
12748 (license license:asl2.0)))
12749
12750 (define-public python2-nltk
12751 (package-with-python2 python-nltk))
12752
12753 (define-public python-pymongo
12754 (package
12755 (name "python-pymongo")
12756 (version "3.7.2")
12757 (source (origin
12758 (method url-fetch)
12759 (uri (pypi-uri "pymongo" version))
12760 (sha256
12761 (base32
12762 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12763 (build-system python-build-system)
12764 (propagated-inputs
12765 `(("python-certifi" ,python-certifi)))
12766 (home-page "https://github.com/mongodb/mongo-python-driver")
12767 (synopsis "Python driver for MongoDB")
12768 (description "Python driver for MongoDB.")
12769 (license license:asl2.0)))
12770
12771 (define-public python2-pymongo
12772 (package-with-python2 python-pymongo))
12773
12774 (define-public python-consul
12775 (package
12776 (name "python-consul")
12777 (version "0.6.1")
12778 (source
12779 (origin
12780 (method url-fetch)
12781 (uri (pypi-uri "python-consul" version))
12782 (sha256
12783 (base32
12784 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12785 (build-system python-build-system)
12786 (arguments
12787 '(#:tests? #f)) ; The tests are not distributed
12788 (propagated-inputs
12789 `(("python-requests" ,python-requests)
12790 ("python-six" ,python-six)))
12791 (home-page "https://github.com/cablehead/python-consul")
12792 (synopsis "Python client for Consul")
12793 (description
12794 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12795 discovery, monitoring and configuration.")
12796 (license license:expat)))
12797
12798 (define-public python2-consul
12799 (package-with-python2 python-consul))
12800
12801 (define-public python-schematics
12802 (package
12803 (name "python-schematics")
12804 (version "1.1.1")
12805 (source
12806 (origin
12807 (method git-fetch)
12808 (uri (git-reference
12809 (url "https://github.com/schematics/schematics.git")
12810 (commit (string-append "v" version))))
12811 (file-name (git-file-name name version))
12812 (sha256
12813 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12814 (build-system python-build-system)
12815 (propagated-inputs
12816 `(("python-six" ,python-six)))
12817 (arguments
12818 ;; The tests require a bunch of not very nice packages with fixed
12819 ;; version requirements (e.g. python-coveralls).
12820 `(#:tests? #f))
12821 (home-page "https://github.com/schematics/schematics")
12822 (synopsis "Python Data Structures for Humans")
12823 (description "Python Data Structures for Humans.")
12824 (license license:bsd-3)))
12825
12826 (define-public python2-schematics
12827 (package-with-python2 python-schematics))
12828
12829 (define-public python-odfpy
12830 (package
12831 (name "python-odfpy")
12832 (version "1.4.1")
12833 (source (origin
12834 (method url-fetch)
12835 (uri (pypi-uri "odfpy" version))
12836 (sha256
12837 (base32
12838 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
12839 (arguments
12840 `(#:phases
12841 (modify-phases %standard-phases
12842 (replace 'check
12843 (lambda _
12844 (setenv "PYTHONPATH" (string-append "./build/lib:"
12845 (getenv "PYTHONPATH")))
12846 (invoke "pytest" "-vv"))))))
12847 (build-system python-build-system)
12848 (native-inputs
12849 `(("python-pytest" ,python-pytest)))
12850 (propagated-inputs
12851 `(("python-defusedxml" ,python-defusedxml)))
12852 (home-page "https://github.com/eea/odfpy")
12853 (synopsis "Python API and tools to manipulate OpenDocument files")
12854 (description "Collection of libraries and utility programs written in
12855 Python to manipulate OpenDocument 1.2 files.")
12856 (license
12857 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12858 ;; number of files with other licenses.
12859 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12860
12861 (define-public python2-odfpy
12862 (package-with-python2 python-odfpy))
12863
12864 (define-public python-natsort
12865 (package
12866 (name "python-natsort")
12867 (version "7.0.1")
12868 (source (origin
12869 (method url-fetch)
12870 (uri (pypi-uri "natsort" version))
12871 (sha256
12872 (base32
12873 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12874 (build-system python-build-system)
12875 (arguments
12876 `(#:modules ((guix build utils)
12877 (guix build python-build-system)
12878 (srfi srfi-1)
12879 (srfi srfi-26)
12880 (ice-9 ftw))
12881 #:phases
12882 (modify-phases %standard-phases
12883 (add-before 'check 'set-cachedir
12884 ;; Tests require write access to $HOME by default
12885 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12886 (replace 'check
12887 (lambda _
12888 (let ((cwd (getcwd)))
12889 (setenv "PYTHONPATH"
12890 (string-append
12891 cwd "/build/"
12892 (find (cut string-prefix? "lib" <>)
12893 (scandir (string-append cwd "/build")))
12894 ":"
12895 (getenv "PYTHONPATH")))
12896 (invoke "pytest" "-v")))))))
12897 (native-inputs
12898 `(("python-hypothesis" ,python-hypothesis)
12899 ("python-pytest-cov" ,python-pytest-cov)
12900 ("python-pytest-mock" ,python-pytest-mock)
12901 ("python-pytest" ,python-pytest)))
12902 (propagated-inputs ; TODO: Add python-fastnumbers.
12903 `(("python-pyicu" ,python-pyicu)))
12904 (home-page "https://github.com/SethMMorton/natsort")
12905 (synopsis "Natural sorting for python and shell")
12906 (description
12907 "Natsort lets you apply natural sorting on lists instead of
12908 lexicographical. If you use the built-in @code{sorted} method in python
12909 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12910 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12911 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12912 identifies numbers and sorts them separately from strings. It can also sort
12913 version numbers, real numbers, mixed types and more, and comes with a shell
12914 command @command{natsort} that exposes this functionality in the command line.")
12915 (license license:expat)
12916 (properties `((python2-variant . ,(delay python2-natsort))))))
12917
12918 ;; Natsort 6.x are the last versions with support for Python 2.
12919 (define-public python2-natsort
12920 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12921 (package (inherit base)
12922 (version "6.2.1")
12923 (source (origin
12924 (method url-fetch)
12925 (uri (pypi-uri "natsort" version))
12926 (sha256
12927 (base32
12928 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12929 (native-inputs
12930 `(("python2-pathlib" ,python2-pathlib)
12931 ,@(package-native-inputs base))))))
12932
12933 (define-public glances
12934 (package
12935 (name "glances")
12936 (version "3.1.4")
12937 (source
12938 (origin
12939 (method url-fetch)
12940 (uri (pypi-uri "Glances" version))
12941 (sha256
12942 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12943 (modules '((guix build utils)))
12944 (snippet
12945 '(begin
12946 ;; Glances phones PyPI for weekly update checks by default.
12947 ;; Disable these. The user can re-enable them if desired.
12948 (substitute* "glances/outdated.py"
12949 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12950 (string-append indentation
12951 "self.args.disable_check_update = True\n"
12952 line)))
12953 #t))))
12954 (build-system python-build-system)
12955 (propagated-inputs
12956 `(("python-future" ,python-future)
12957 ("python-psutil" ,python-psutil)))
12958 (home-page "https://github.com/nicolargo/glances")
12959 (synopsis "Cross-platform curses-based monitoring tool")
12960 (description
12961 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12962 Glances uses the PsUtil library to get information from your system. It
12963 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12964 (license license:lgpl3+)))
12965
12966 (define-public python-glances
12967 (deprecated-package "python-glances" glances))
12968
12969 (define-public python-graphql-core
12970 (package
12971 (name "python-graphql-core")
12972 (version "0.5.3")
12973 (source
12974 (origin
12975 (method url-fetch)
12976 (uri (pypi-uri "graphql-core" version))
12977 (sha256
12978 (base32
12979 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12980 (build-system python-build-system)
12981 (arguments
12982 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12983 #:phases
12984 (modify-phases %standard-phases
12985 (add-after 'unpack 'patch-hardcoded-version
12986 (lambda _ (substitute*
12987 "setup.py"
12988 (("'gevent==1.1rc1'") "'gevent'"))
12989 #t)))))
12990 (native-inputs
12991 `(("python-gevent" ,python-gevent)
12992 ("python-mock" ,python-mock)
12993 ("python-pytest-mock" ,python-pytest-mock)))
12994 (propagated-inputs
12995 `(("python-promise" ,python-promise)
12996 ("python-six" ,python-six)))
12997 (home-page "https://github.com/graphql-python/graphql-core")
12998 (synopsis "GraphQL implementation for Python")
12999 (description
13000 "GraphQL implementation for Python. GraphQL is a data query language and
13001 runtime designed and used to request and deliver data to mobile and web apps.
13002 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
13003 to Python.")
13004 (license license:expat)))
13005
13006 (define-public python2-graphql-core
13007 (package-with-python2 python-graphql-core))
13008
13009 (define-public python-graphql-relay
13010 (package
13011 (name "python-graphql-relay")
13012 (version "0.4.5")
13013 (source
13014 (origin
13015 (method url-fetch)
13016 (uri (pypi-uri "graphql-relay" version))
13017 (sha256
13018 (base32
13019 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
13020 (build-system python-build-system)
13021 (arguments
13022 '(#:tests? #f)) ; The tests are not distributed
13023 (propagated-inputs
13024 `(("python-graphql-core" ,python-graphql-core)
13025 ("python-promise" ,python-promise)
13026 ("python-six" ,python-six)))
13027 (home-page "https://github.com/graphql-python/graphql-relay-py")
13028 (synopsis "Relay implementation for Python")
13029 (description
13030 "This is a library to allow the easy creation of Relay-compliant servers
13031 using the GraphQL Python reference implementation of a GraphQL server. It
13032 should be noted that the code is a exact port of the original
13033 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
13034 from Facebook.")
13035 (license license:expat)))
13036
13037 (define-public python2-graphql-relay
13038 (package-with-python2 python-graphql-relay))
13039
13040 (define-public python-graphene
13041 (package
13042 (name "python-graphene")
13043 (version "0.10.2")
13044 (source
13045 (origin
13046 (method url-fetch)
13047 (uri (pypi-uri "graphene" version))
13048 (sha256
13049 (base32
13050 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
13051 (build-system python-build-system)
13052 (propagated-inputs
13053 `(("python-graphql-core" ,python-graphql-core)
13054 ("python-graphql-relay" ,python-graphql-relay)
13055 ("python-iso8601" ,python-iso8601)
13056 ("python-promise" ,python-promise)
13057 ("python-six" ,python-six)))
13058 (arguments
13059 `(#:tests? #f)) ; no tests/ in the PyPI tarball
13060 (home-page "https://graphene-python.org/")
13061 (synopsis "GraphQL Framework for Python")
13062 (description
13063 "Graphene is a Python library for building GraphQL schemas/types.
13064 A GraphQL schema describes your data model, and provides a GraphQL server
13065 with an associated set of resolve methods that know how to fetch data.")
13066 (properties `((python2-variant . ,(delay python2-graphene))))
13067 (license license:expat)))
13068
13069 (define-public python2-graphene
13070 (let ((base (package-with-python2
13071 (strip-python2-variant python-graphene))))
13072 (package (inherit base)
13073 (native-inputs
13074 `(("python2-sqlalchemy" ,python2-sqlalchemy)
13075 ,@(package-native-inputs base))))))
13076
13077 (define-public python-nautilus
13078 (package
13079 (name "python-nautilus")
13080 (version "0.4.9")
13081 (source
13082 (origin
13083 (method url-fetch)
13084 (uri (pypi-uri "nautilus" version))
13085 (sha256
13086 (base32
13087 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
13088 (build-system python-build-system)
13089 (arguments `(#:tests? #f)) ; fails to import test modules
13090 (propagated-inputs
13091 `(("python-bcrypt" ,python-bcrypt)
13092 ("python-click" ,python-click)
13093 ("python-consul" ,python-consul)
13094 ("python-graphene" ,python-graphene)
13095 ("python-jinja2" ,python-jinja2)
13096 ("python-peewee" ,python-peewee)
13097 ("python-pika" ,python-pika)
13098 ("python-tornado" ,python-tornado)
13099 ("python-wtforms" ,python-wtforms)))
13100 (native-inputs
13101 `(("python-nose2" ,python-nose2)))
13102 (home-page "https://github.com/AlecAivazis/nautilus")
13103 (synopsis "Library for creating microservice applications")
13104 (description
13105 "Nautilus is a framework for flux based microservices that looks to
13106 provide extendible implementations of common aspects of a cloud so that you can
13107 focus on building massively scalable web applications.")
13108 (license license:expat)))
13109
13110 (define-public python-random2
13111 (package
13112 (name "python-random2")
13113 (version "1.0.1")
13114 (source (origin
13115 (method url-fetch)
13116 (uri (pypi-uri "random2" version ".zip"))
13117 (sha256
13118 (base32
13119 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
13120 (build-system python-build-system)
13121 (native-inputs `(("unzip" ,unzip)))
13122 (home-page "http://pypi.python.org/pypi/random2")
13123 (synopsis "Python 3 version of the Python 2 @code{random} module")
13124 (description
13125 "This package provides a Python 3 ported version of Python 2.7’s
13126 @code{random} module. It has also been back-ported to work in Python 2.6.
13127
13128 In Python 3, the implementation of @code{randrange()} was changed, so that
13129 even with the same seed you get different sequences in Python 2 and 3.
13130
13131 This package closes that gap, allowing stable random number generation
13132 between the different Python versions.")
13133 (license license:psfl)))
13134
13135 (define-public python2-random2
13136 (package-with-python2 python-random2))
13137
13138 (define-public python-snowballstemmer
13139 (package
13140 (name "python-snowballstemmer")
13141 (version "2.0.0")
13142 (source (origin
13143 (method url-fetch)
13144 (uri (pypi-uri "snowballstemmer" version))
13145 (sha256
13146 (base32
13147 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
13148 (build-system python-build-system)
13149 (arguments
13150 `(;; No tests exist
13151 #:tests? #f))
13152 (home-page "https://github.com/shibukawa/snowball_py")
13153 (synopsis "Snowball stemming library collection for Python")
13154 (description "This package provides 16 word stemmer algorithms generated
13155 from Snowball algorithms. It includes the 15 original ones plus the Poerter
13156 English stemmer.")
13157 (license license:bsd-3)))
13158
13159 (define-public python2-snowballstemmer
13160 (package-with-python2 python-snowballstemmer))
13161
13162 (define-public python-setproctitle
13163 (package
13164 (name "python-setproctitle")
13165 (version "1.1.10")
13166 (source
13167 (origin
13168 (method url-fetch)
13169 (uri (pypi-uri "setproctitle" version))
13170 (sha256
13171 (base32
13172 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
13173 (build-system python-build-system)
13174 (arguments
13175 '(#:phases
13176 (modify-phases %standard-phases
13177 (add-before 'check 'patch-Makefile
13178 ;; Stricly this is only required for the python2 variant.
13179 ;; But adding a phase in an inherited package seems to be
13180 ;; cumbersum. So we patch even for python3.
13181 (lambda _
13182 (let ((nose (assoc-ref %build-inputs "python2-nose")))
13183 (when nose
13184 (substitute* "Makefile"
13185 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
13186 (string-append nose "/bin/nosetests "))))
13187 #t)))
13188 (replace 'check
13189 (lambda _
13190 (setenv "PYTHON" (or (which "python3") (which "python")))
13191 (setenv "PYCONFIG" (string-append (or (which "python3-config")
13192 (which "python-config"))
13193 " --embed"))
13194 (setenv "CC" "gcc")
13195 ;; No need to extend PYTHONPATH to find the built package, since
13196 ;; the Makefile will build anyway
13197 (invoke "make" "check"))))))
13198 (native-inputs
13199 `(("procps" ,procps))) ; required for tests
13200 (home-page "https://github.com/dvarrazzo/py-setproctitle")
13201 (synopsis
13202 "Setproctitle implementation for Python to customize the process title")
13203 (description "The library allows a process to change its title (as displayed
13204 by system tools such as ps and top).
13205
13206 Changing the title is mostly useful in multi-process systems, for
13207 example when a master process is forked: changing the children's title
13208 allows identifying the task each process is busy with. The technique
13209 is used by PostgreSQL and the OpenSSH Server for example.")
13210 (license license:bsd-3)
13211 (properties `((python2-variant . ,(delay python2-setproctitle))))))
13212
13213 (define-public python2-setproctitle
13214 (let ((base (package-with-python2
13215 (strip-python2-variant python-setproctitle))))
13216 (package
13217 (inherit base)
13218 (native-inputs `(("python2-nose" ,python2-nose)
13219 ,@(package-native-inputs base))))))
13220
13221 (define-public python-validictory
13222 (package
13223 (name "python-validictory")
13224 (version "1.0.1")
13225 (source
13226 (origin
13227 (method url-fetch)
13228 (uri (pypi-uri "validictory" version))
13229 (sha256
13230 (base32
13231 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
13232 (build-system python-build-system)
13233 (arguments
13234 '(#:phases
13235 (modify-phases %standard-phases
13236 (add-after 'unpack 'bootstrap
13237 ;; Move the tests out of the package directory to avoid
13238 ;; packaging them.
13239 (lambda* _
13240 (rename-file "validictory/tests" "tests")
13241 (delete-file "tests/__init__.py")))
13242 (replace 'check
13243 (lambda _
13244 ;; Extend PYTHONPATH so the built package will be found.
13245 (setenv "PYTHONPATH"
13246 (string-append (getcwd) "/build/lib:"
13247 (getenv "PYTHONPATH")))
13248 (invoke "py.test" "-vv" ))))))
13249 (native-inputs
13250 `(("python-pytest" ,python-pytest)))
13251 (home-page
13252 "https://github.com/jamesturk/validictory")
13253 (synopsis "General purpose Python data validator")
13254 (description "It allows validation of arbitrary Python data structures.
13255
13256 The schema format is based on the JSON Schema
13257 proposal (http://json-schema.org), so combined with json the library is also
13258 useful as a validator for JSON data.")
13259 (license license:expat)))
13260
13261 (define-public python2-validictory
13262 (package-with-python2 python-validictory))
13263
13264 (define-public python-pyelftools
13265 (package
13266 (name "python-pyelftools")
13267 (version "0.25")
13268 (source
13269 (origin
13270 (method url-fetch)
13271 (uri (pypi-uri "pyelftools" version))
13272 (sha256
13273 (base32
13274 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13275 (build-system python-build-system)
13276 (arguments
13277 `(#:phases
13278 (modify-phases %standard-phases
13279 (add-before 'check 'set-pythonpath
13280 (lambda _
13281 (setenv "PYTHONPATH"
13282 (string-append
13283 (getcwd) "/test/"
13284 ":" (getenv "PYTHONPATH")))
13285 #t)))))
13286 (home-page
13287 "https://github.com/eliben/pyelftools")
13288 (synopsis
13289 "Analyze binary and library file information")
13290 (description "This Python library provides interfaces for parsing and
13291 analyzing two binary and library file formats; the Executable and Linking
13292 Format (ELF), and debugging information in the Debugging With Attributed
13293 Record Format (DWARF).")
13294 (license license:public-domain)))
13295
13296 (define-public python-pyev
13297 (package
13298 (name "python-pyev")
13299 (version "0.9.0")
13300 (source
13301 (origin
13302 (method url-fetch)
13303 (uri (pypi-uri "pyev" version))
13304 (sha256
13305 (base32
13306 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13307 (build-system python-build-system)
13308 (arguments
13309 `(#:tests? #f ; no test suite
13310 #:phases
13311 (modify-phases %standard-phases
13312 (add-after 'unpack 'patch
13313 (lambda* (#:key inputs #:allow-other-keys)
13314 (let ((libev (string-append (assoc-ref inputs "libev")
13315 "/lib/libev.so.4")))
13316 (substitute* "setup.py"
13317 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13318 (string-append "libev_dll_name = \"" libev "\"")))))))))
13319 (inputs
13320 `(("libev" ,libev)))
13321 (home-page "http://pythonhosted.org/pyev/")
13322 (synopsis "Python libev interface")
13323 (description "Pyev provides a Python interface to libev.")
13324 (license license:gpl3)))
13325
13326 (define-public python2-pyev
13327 (package-with-python2 python-pyev))
13328
13329 (define-public python-imagesize
13330 (package
13331 (name "python-imagesize")
13332 (version "1.2.0")
13333 (source
13334 (origin
13335 (method url-fetch)
13336 (uri (pypi-uri "imagesize" version))
13337 (sha256
13338 (base32
13339 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13340 (build-system python-build-system)
13341 (home-page "https://github.com/shibukawa/imagesize_py")
13342 (synopsis "Gets image size of files in various formats in Python")
13343 (description
13344 "This package allows determination of image size from
13345 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13346 (license license:expat)))
13347
13348 (define-public python2-imagesize
13349 (package-with-python2 python-imagesize))
13350
13351 (define-public python-termstyle
13352 (package
13353 (name "python-termstyle")
13354 (version "0.1.11")
13355 (source
13356 (origin
13357 (method url-fetch)
13358 (uri (pypi-uri "termstyle" version))
13359 (sha256
13360 (base32
13361 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13362 (build-system python-build-system)
13363 (arguments
13364 '(#:phases
13365 (modify-phases %standard-phases
13366 (replace 'check
13367 (lambda _
13368 (invoke "python" "test3.py"))))))
13369 (home-page "https://github.com/gfxmonk/termstyle")
13370 (synopsis "Console text coloring for Python")
13371 (description "This package provides console text coloring for Python.")
13372 (license license:bsd-3)))
13373
13374 (define-public python-argcomplete
13375 (package
13376 (name "python-argcomplete")
13377 (version "1.11.1")
13378 (source
13379 (origin
13380 (method url-fetch)
13381 (uri (pypi-uri "argcomplete" version))
13382 (sha256
13383 (base32
13384 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13385 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13386 (build-system python-build-system)
13387 (native-inputs
13388 `(("python-coverage" ,python-coverage)
13389 ("python-flake8" ,python-flake8)
13390 ("python-pexpect" ,python-pexpect)
13391 ("python-wheel" ,python-wheel)
13392 ("tcsh" ,tcsh)
13393 ("fish" ,fish)
13394 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13395 (home-page "https://github.com/kislyuk/argcomplete")
13396 (synopsis "Shell tab completion for Python argparse")
13397 (description "argcomplete provides extensible command line tab completion
13398 of arguments and options for Python scripts using @code{argparse}. It's
13399 particularly useful for programs with many options or sub-parsers that can
13400 dynamically suggest completions; for example, when browsing resources over the
13401 network.")
13402 (license license:asl2.0)))
13403
13404 (define-public python2-argcomplete
13405 (package-with-python2 python-argcomplete))
13406
13407 (define-public python-xopen
13408 (package
13409 (name "python-xopen")
13410 (version "0.5.0")
13411 (source
13412 (origin
13413 (method url-fetch)
13414 (uri (pypi-uri "xopen" version))
13415 (sha256
13416 (base32
13417 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13418 (build-system python-build-system)
13419 (propagated-inputs
13420 `(("python-setuptools-scm" ,python-setuptools-scm)))
13421 (home-page "https://github.com/marcelm/xopen/")
13422 (synopsis "Open compressed files transparently")
13423 (description "This module provides an @code{xopen} function that works like
13424 Python's built-in @code{open} function, but can also deal with compressed files.
13425 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13426 recognized by their file extensions. The focus is on being as efficient as
13427 possible on all supported Python versions.")
13428 (license license:expat)))
13429
13430 (define-public python2-xopen
13431 (let ((base (package-with-python2
13432 (strip-python2-variant python-xopen))))
13433 (package
13434 (inherit base)
13435 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13436 ,@(package-propagated-inputs base))))))
13437
13438 (define-public python-cheetah
13439 (package
13440 (name "python-cheetah")
13441 (version "3.2.4")
13442 (source
13443 (origin
13444 (method url-fetch)
13445 (uri (pypi-uri "Cheetah3" version))
13446 (sha256
13447 (base32
13448 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13449 (build-system python-build-system)
13450 (arguments
13451 `(#:modules ((guix build utils)
13452 (guix build python-build-system)
13453 (ice-9 ftw)
13454 (srfi srfi-1)
13455 (srfi srfi-26))
13456 #:phases (modify-phases %standard-phases
13457 (add-after 'unpack 'use-absolute-python
13458 (lambda _
13459 (substitute* "Cheetah/CheetahWrapper.py"
13460 (("#!/usr/bin/env python")
13461 (string-append "#!" (which "python"))))
13462 #t))
13463 (add-after 'unpack 'fix-tests
13464 (lambda _
13465 (substitute* "Cheetah/Tests/ImportHooks.py"
13466 (("os.path.dirname\\(__file__\\)")
13467 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13468 #t))
13469 (replace 'check
13470 (lambda _
13471 (let ((cwd (getcwd)))
13472 (setenv "PYTHONPATH"
13473 (string-append
13474 cwd "/build/"
13475 (find (cut string-prefix? "lib" <>)
13476 (scandir (string-append cwd "/build")))
13477 ":" (getenv "PYTHONPATH")))
13478 (setenv "PATH"
13479 (string-append (getenv "PATH")
13480 ":" cwd "/bin"))
13481 (setenv "TMPDIR" "/tmp")
13482
13483 (substitute* "Cheetah/Tests/Test.py"
13484 (("unittest.TextTestRunner\\(\\)")
13485 "unittest.TextTestRunner(verbosity=2)"))
13486
13487 (invoke "python" "Cheetah/Tests/Test.py")))))))
13488 (propagated-inputs
13489 `(("python-markdown" ,python-markdown))) ;optional
13490 (home-page "https://cheetahtemplate.org/")
13491 (synopsis "Template engine")
13492 (description "Cheetah is a text-based template engine and Python code
13493 generator.
13494
13495 Cheetah can be used as a standalone templating utility or referenced as
13496 a library from other Python applications. It has many potential uses,
13497 but web developers looking for a viable alternative to ASP, JSP, PHP and
13498 PSP are expected to be its principle user group.
13499
13500 Features:
13501 @enumerate
13502 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13503 text-based format.
13504 @item Cleanly separates content, graphic design, and program code.
13505 @item Blends the power and flexibility of Python with a simple template language
13506 that non-programmers can understand.
13507 @item Gives template writers full access to any Python data structure, module,
13508 function, object, or method in their templates.
13509 @item Makes code reuse easy by providing an object-orientated interface to
13510 templates that is accessible from Python code or other Cheetah templates.
13511 One template can subclass another and selectively reimplement sections of it.
13512 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13513 improve the performance of a dynamic website.
13514 @item Compiles templates into optimized, yet readable, Python code.
13515 @end enumerate")
13516 (license (license:x11-style "file://LICENSE"))))
13517
13518 (define-public python2-cheetah
13519 (package-with-python2 python-cheetah))
13520
13521 (define-public python-dulwich
13522 (package
13523 (name "python-dulwich")
13524 (version "0.19.16")
13525 (source
13526 (origin
13527 (method url-fetch)
13528 (uri (list (string-append "https://www.dulwich.io/releases/"
13529 "dulwich-" version ".tar.gz")
13530 (pypi-uri "dulwich" version)))
13531 (sha256
13532 (base32
13533 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13534 (build-system python-build-system)
13535 (arguments
13536 `(#:phases
13537 (modify-phases %standard-phases
13538 (add-before 'check 'fix-tests
13539 (lambda* (#:key inputs #:allow-other-keys)
13540 ;; The tests use Popen with a custom environment which doesn't
13541 ;; include PATH.
13542 (substitute* "dulwich/tests/compat/utils.py"
13543 (("'git'") (string-append "'"
13544 (which "git")
13545 "'")))
13546 (substitute* '("dulwich/tests/test_repository.py"
13547 "dulwich/tests/test_hooks.py")
13548 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13549 (setenv "TEST_RUNNER" "unittest")
13550 (setenv "PYTHONHASHSEED" "random")
13551 #t)))))
13552 (propagated-inputs
13553 `(("python-fastimport" ,python-fastimport)
13554 ("python-urllib3" ,python-urllib3)))
13555 (native-inputs
13556 `(("python-mock" ,python-mock)
13557 ("python-geventhttpclient" ,python-geventhttpclient)
13558 ("git" ,git)))
13559 (home-page "https://www.dulwich.io/")
13560 (synopsis "Git implementation in Python")
13561 (description "Dulwich is an implementation of the Git file formats and
13562 protocols written in pure Python.")
13563 ;; Can be used with either license.
13564 (license (list license:asl2.0 license:gpl2+))))
13565
13566 (define-public python2-dulwich
13567 (package-with-python2 python-dulwich))
13568
13569 (define-public python-pbkdf2
13570 (package
13571 (name "python-pbkdf2")
13572 (version "1.3")
13573 (source
13574 (origin
13575 (method url-fetch)
13576 (uri (pypi-uri "pbkdf2" version))
13577 (sha256
13578 (base32
13579 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13580 (build-system python-build-system)
13581 (arguments
13582 '(#:phases
13583 (modify-phases %standard-phases
13584 (replace 'check
13585 (lambda _
13586 (setenv "PYTHONPATH"
13587 (string-append (getcwd) "/build/lib:"
13588 (getenv "PYTHONPATH")))
13589 (invoke "python" "test/test_pbkdf2.py"))))))
13590 (propagated-inputs
13591 `(("python-pycrypto" ,python-pycrypto))) ; optional
13592 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13593 (synopsis "Password-based key derivation")
13594 (description "This module implements the password-based key derivation
13595 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13596
13597 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13598 is part of the RSA Public Key Cryptography Standards series. The provided
13599 implementation takes a password or a passphrase and a salt value (and
13600 optionally a iteration count, a digest module, and a MAC module) and provides
13601 a file-like object from which an arbitrarly-sized key can be read.")
13602 (license license:expat)))
13603
13604 (define-public python2-pbkdf2
13605 (package-with-python2 python-pbkdf2))
13606
13607 (define-public python-qrcode
13608 (package
13609 (name "python-qrcode")
13610 (version "6.1")
13611 (source
13612 (origin
13613 (method url-fetch)
13614 (uri (pypi-uri "qrcode" version))
13615 (sha256
13616 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13617 (build-system python-build-system)
13618 (arguments
13619 ;; FIXME: Tests require packaging 'pymaging'.
13620 '(#:tests? #f))
13621 (propagated-inputs
13622 `(("python-lxml" ,python-lxml) ; for SVG output
13623 ("python-pillow" ,python-pillow) ; for PNG output
13624 ("python-six" ,python-six)))
13625 (home-page "https://github.com/lincolnloop/python-qrcode")
13626 (synopsis "QR Code image generator")
13627 (description "This package provides a pure Python QR Code generator
13628 module. It uses the Python Imaging Library (PIL) to allow for the generation
13629 of QR Codes.
13630
13631 In addition this package provides a command line tool to generate QR codes and
13632 either write these QR codes to a file or do the output as ascii art at the
13633 console.")
13634 (license license:bsd-3)))
13635
13636 (define-public python2-qrcode
13637 (package-with-python2 python-qrcode))
13638
13639 (define-public python-rst2ansi
13640 (package
13641 (name "python-rst2ansi")
13642 (version "0.1.5")
13643 (source
13644 (origin
13645 (method url-fetch)
13646 (uri (pypi-uri "rst2ansi" version))
13647 (sha256
13648 (base32
13649 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13650 (build-system python-build-system)
13651 (propagated-inputs
13652 `(("python-docutils" ,python-docutils)))
13653 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13654 (synopsis "Convert RST to ANSI-decorated console output")
13655 (description
13656 "Python module dedicated to rendering RST (reStructuredText) documents
13657 to ansi-escaped strings suitable for display in a terminal.")
13658 (license license:expat)))
13659
13660 (define-public python-ansi2html
13661 (package
13662 (name "python-ansi2html")
13663 (version "1.2.0")
13664 (source
13665 (origin
13666 (method url-fetch)
13667 (uri (pypi-uri "ansi2html" version))
13668 (sha256
13669 (base32
13670 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13671 (build-system python-build-system)
13672 (native-inputs
13673 `(("python-mock" ,python-mock)
13674 ("python-nose" ,python-nose)))
13675 (propagated-inputs
13676 `(("python-six" ,python-six)))
13677 (home-page "https://github.com/ralphbean/ansi2html")
13678 (synopsis "Convert ANSI-decorated console output to HTML")
13679 (description
13680 "@command{ansi2html} is a Python library and command line utility for
13681 convering text with ANSI color codes to HTML or LaTeX.")
13682 (license license:gpl3+)))
13683
13684 (define-public python2-ansi2html
13685 (package-with-python2 python-ansi2html))
13686
13687 (define-public python-ddt
13688 (package
13689 (name "python-ddt")
13690 (version "1.1.3")
13691 (source
13692 (origin
13693 (method url-fetch)
13694 (uri (pypi-uri "ddt" version))
13695 (sha256
13696 (base32
13697 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13698 (build-system python-build-system)
13699 (native-inputs
13700 `(("python-mock" ,python-mock)
13701 ("python-nose" ,python-nose)))
13702 (propagated-inputs
13703 `(("python-six" ,python-six)
13704 ("python-pyyaml" ,python-pyyaml)))
13705 (home-page "https://github.com/txels/ddt")
13706 (synopsis "Data-Driven Tests")
13707 (description
13708 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13709 running it with different test data, and make it appear as multiple test
13710 cases.")
13711 (license license:expat)))
13712
13713 (define-public python2-ddt
13714 (package-with-python2 python-ddt))
13715
13716 (define-public python-pycountry
13717 (package
13718 (name "python-pycountry")
13719 (version "18.5.26")
13720 (source
13721 (origin
13722 (method url-fetch)
13723 (uri (pypi-uri "pycountry" version))
13724 (sha256
13725 (base32
13726 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13727 (build-system python-build-system)
13728 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13729 (synopsis "ISO databases for languages, countries, currencies, etc.")
13730 (description
13731 "@code{pycountry} provides the ISO databases for the standards:
13732 @enumerate
13733 @item 639-3 (Languages)
13734 @item 3166 (Countries)
13735 @item 3166-3 (Deleted Countries)
13736 @item 3166-2 (Subdivisions of countries)
13737 @item 4217 (Currencies)
13738 @item 15924 (Scripts)
13739 @end enumerate
13740 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13741 through a Python API.")
13742 (license license:lgpl2.1+)))
13743
13744 (define-public python2-pycountry
13745 (package-with-python2 python-pycountry))
13746
13747 (define-public python-pycosat
13748 (package
13749 (name "python-pycosat")
13750 (version "0.6.1")
13751 (source
13752 (origin
13753 (method url-fetch)
13754 (uri (pypi-uri "pycosat" version))
13755 (sha256
13756 (base32
13757 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13758 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13759 (build-system python-build-system)
13760 (home-page "https://github.com/ContinuumIO/pycosat")
13761 (synopsis "Bindings to picosat (a SAT solver)")
13762 (description
13763 "This package provides efficient Python bindings to @code{picosat} on
13764 the C level. When importing pycosat, the @code{picosat} solver becomes part
13765 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13766 Problem} (SAT) solver.")
13767 (license license:expat)))
13768
13769 (define-public python2-pycosat
13770 (package-with-python2 python-pycosat))
13771
13772 (define-public python2-ruamel.ordereddict
13773 (package
13774 (name "python2-ruamel.ordereddict")
13775 (version "0.4.9")
13776 (source
13777 (origin
13778 (method url-fetch)
13779 (uri (pypi-uri "ruamel.ordereddict" version))
13780 (sha256
13781 (base32
13782 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13783 (build-system python-build-system)
13784 (arguments
13785 `(#:python ,python-2
13786 #:phases
13787 (modify-phases %standard-phases
13788 (delete 'check)
13789 (add-after 'install 'check
13790 (lambda* (#:key inputs outputs #:allow-other-keys)
13791 (add-installed-pythonpath inputs outputs)
13792 (invoke "python" "test/testordereddict.py"))))))
13793 (home-page "https://bitbucket.org/ruamel/ordereddict")
13794 (synopsis "Version of dict that keeps keys in insertion order")
13795 (description
13796 "This is an implementation of an ordered dictionary with @dfn{Key
13797 Insertion Order} (KIO: updates of values do not affect the position of the
13798 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13799 removed and put at the back). The standard library module @code{OrderedDict},
13800 implemented later, implements a subset of @code{ordereddict} functionality.
13801 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13802 Order} (KSO, no sorting function can be specified, but a transform can be
13803 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13804 (license license:expat)))
13805
13806 (define-public python-pypeg2
13807 (package
13808 (name "python-pypeg2")
13809 (version "2.15.2")
13810 (source
13811 (origin
13812 (method url-fetch)
13813 (uri (pypi-uri "pyPEG2" version))
13814 (sha256
13815 (base32
13816 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13817 (build-system python-build-system)
13818 (propagated-inputs `(("python-lxml" ,python-lxml)))
13819 (arguments
13820 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13821 '(#:tests? #f))
13822 (home-page "https://fdik.org/pyPEG/")
13823 (synopsis "Parsering Expression Grammars in Python")
13824 (description "PyPEG is an intrinsic parser interpreter framework for
13825 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13826 parse many formal languages.")
13827 (license license:gpl2)))
13828
13829 (define-public python-incremental
13830 (package
13831 (name "python-incremental")
13832 (version "17.5.0")
13833 (source
13834 (origin
13835 (method url-fetch)
13836 (uri (pypi-uri "incremental" version))
13837 (sha256
13838 (base32
13839 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13840 (build-system python-build-system)
13841 (home-page "https://github.com/hawkowl/incremental")
13842 (synopsis "Library for versioning Python projects")
13843 (description "Incremental is a small library that versions your Python
13844 projects.")
13845 (license license:expat)))
13846
13847 (define-public python2-incremental
13848 (package-with-python2 python-incremental))
13849
13850 (define-public python-invoke
13851 (package
13852 (name "python-invoke")
13853 (home-page "https://www.pyinvoke.org/")
13854 (version "1.3.0")
13855 (source (origin
13856 (method url-fetch)
13857 (uri (pypi-uri "invoke" version))
13858 (sha256
13859 (base32
13860 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13861 (build-system python-build-system)
13862 (arguments
13863 ;; XXX: Requires many dependencies that are not yet in Guix.
13864 `(#:tests? #f))
13865 (synopsis "Pythonic task execution")
13866 (description
13867 "Invoke is a Python task execution tool and library, drawing inspiration
13868 from various sources to arrive at a powerful and clean feature set. It is
13869 evolved from the Fabric project, but focuses on local and abstract concerns
13870 instead of servers and network commands.")
13871 (license license:bsd-3)))
13872
13873 (define-public python2-invoke
13874 (package-with-python2 python-invoke))
13875
13876 (define-public python-automat
13877 (package
13878 (name "python-automat")
13879 (version "20.2.0")
13880 (source (origin
13881 (method url-fetch)
13882 (uri (pypi-uri "Automat" version))
13883 (sha256
13884 (base32
13885 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13886 (build-system python-build-system)
13887 ;; We disable the tests because they require python-twisted, while
13888 ;; python-twisted depends on python-automat. Twisted is optional, but the
13889 ;; tests fail if it is not available. Also see
13890 ;; <https://github.com/glyph/automat/issues/71>.
13891 (arguments '(#:tests? #f))
13892 (native-inputs
13893 `(("python-m2r" ,python-m2r)
13894 ("python-setuptools-scm" ,python-setuptools-scm)
13895 ("python-graphviz" ,python-graphviz)))
13896 (propagated-inputs
13897 `(("python-six" ,python-six)
13898 ("python-attrs" ,python-attrs)))
13899 (home-page "https://github.com/glyph/Automat")
13900 (synopsis "Self-service finite-state machines")
13901 (description "Automat is a library for concise, idiomatic Python
13902 expression of finite-state automata (particularly deterministic finite-state
13903 transducers).")
13904 (license license:expat)))
13905
13906 (define-public python2-automat
13907 (package-with-python2 python-automat))
13908
13909 (define-public python-m2r
13910 (package
13911 (name "python-m2r")
13912 (version "0.2.1")
13913 (source (origin
13914 (method url-fetch)
13915 (uri (pypi-uri "m2r" version))
13916 (sha256
13917 (base32
13918 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13919 (build-system python-build-system)
13920 (propagated-inputs
13921 `(("python-docutils" ,python-docutils)
13922 ("python-mistune" ,python-mistune)))
13923 (native-inputs
13924 `(("python-pygments" ,python-pygments)
13925 ("python-mock" ,python-mock)))
13926 (home-page "https://github.com/miyakogi/m2r")
13927 (synopsis "Markdown to reStructuredText converter")
13928 (description "M2R converts a markdown file including reST markups to valid
13929 reST format.")
13930 (license license:expat)))
13931
13932 (define-public python2-m2r
13933 (package-with-python2 python-m2r))
13934
13935 (define-public python-constantly
13936 (package
13937 (name "python-constantly")
13938 (version "15.1.0")
13939 (source (origin
13940 (method url-fetch)
13941 (uri (pypi-uri "constantly" version))
13942 (sha256
13943 (base32
13944 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13945 (build-system python-build-system)
13946 (home-page "https://github.com/twisted/constantly")
13947 (synopsis "Symbolic constants in Python")
13948 (description "Constantly is a Python library that provides symbolic
13949 constant support. It includes collections and constants with text, numeric,
13950 and bit flag values.")
13951 (license license:expat)))
13952
13953 (define-public python2-constantly
13954 (package-with-python2 python-constantly))
13955
13956 (define-public python-attrs
13957 (package
13958 (name "python-attrs")
13959 (version "19.3.0")
13960 (source (origin
13961 (method url-fetch)
13962 (uri (pypi-uri "attrs" version))
13963 (sha256
13964 (base32
13965 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13966 (build-system python-build-system)
13967 (arguments
13968 `(#:modules ((guix build utils)
13969 (guix build python-build-system)
13970 (ice-9 ftw)
13971 (srfi srfi-1)
13972 (srfi srfi-26))
13973 #:phases (modify-phases %standard-phases
13974 (replace 'check
13975 (lambda _
13976 (let ((cwd (getcwd)))
13977 (setenv "PYTHONPATH"
13978 (string-append
13979 cwd "/build/"
13980 (find (cut string-prefix? "lib" <>)
13981 (scandir (string-append cwd "/build")))
13982 ":"
13983 (getenv "PYTHONPATH")))
13984 (invoke "python" "-m" "pytest")))))))
13985 (native-inputs
13986 `(("python-coverage" ,python-coverage)
13987 ("python-hypothesis" ,python-hypothesis)
13988 ("python-pympler" ,python-pympler)
13989 ("python-pytest" ,python-pytest)
13990 ("python-six" ,python-six)
13991 ("python-sphinx" ,python-sphinx)
13992 ("python-zope-interface" ,python-zope-interface)))
13993 (home-page "https://github.com/python-attrs/attrs/")
13994 (synopsis "Attributes without boilerplate")
13995 (description "@code{attrs} is a Python package with class decorators that
13996 ease the chores of implementing the most common attribute-related object
13997 protocols.")
13998 (license license:expat)))
13999
14000 (define-public python2-attrs
14001 (package-with-python2 python-attrs))
14002
14003 (define-public python-attrs-bootstrap
14004 (package
14005 (inherit python-attrs)
14006 (name "python-attrs-bootstrap")
14007 (native-inputs `())
14008 (arguments `(#:tests? #f))))
14009
14010 (define-public python2-attrs-bootstrap
14011 (package-with-python2 python-attrs-bootstrap))
14012
14013 (define-public python2-cliapp
14014 (package
14015 (name "python2-cliapp")
14016 (version "1.20180812.1")
14017 (source
14018 (origin
14019 (method url-fetch)
14020 (uri (string-append
14021 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
14022 version ".tar.gz"))
14023 (sha256
14024 (base32
14025 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
14026 (build-system python-build-system)
14027 (arguments
14028 `(#:python ,python-2
14029 #:phases
14030 (modify-phases %standard-phases
14031 ;; check phase needs to be run before the build phase. If not,
14032 ;; coverage-test-runner looks for tests for the built source files,
14033 ;; and fails.
14034 (delete 'check)
14035 (add-before 'build 'check
14036 (lambda _
14037 ;; Disable python3 tests
14038 (substitute* "check"
14039 (("python3") "# python3"))
14040 (invoke "./check"))))))
14041 (native-inputs
14042 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14043 ("python2-pep8" ,python2-pep8)))
14044 (propagated-inputs
14045 `(("python2-pyaml" ,python2-pyaml)))
14046 (home-page "https://liw.fi/cliapp/")
14047 (synopsis "Python framework for command line programs")
14048 (description "@code{python2-cliapp} is a python framework for
14049 command line programs. It contains the typical stuff such programs
14050 need to do, such as parsing the command line for options, and
14051 iterating over input files.")
14052 (license license:gpl2+)))
14053
14054 (define-public python2-ttystatus
14055 (package
14056 (name "python2-ttystatus")
14057 (version "0.36")
14058 (source
14059 (origin
14060 (method url-fetch)
14061 (uri (string-append
14062 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
14063 version ".tar.gz"))
14064 (sha256
14065 (base32
14066 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
14067 (build-system python-build-system)
14068 (native-inputs
14069 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14070 ("python2-pep8" ,python2-pep8)))
14071 (arguments
14072 `(#:python ,python-2
14073 #:phases
14074 (modify-phases %standard-phases
14075 ;; check phase needs to be run before the build phase. If not,
14076 ;; coverage-test-runner looks for tests for the built source files,
14077 ;; and fails.
14078 (delete 'check)
14079 (add-before 'build 'check
14080 (lambda _ (invoke "make" "check"))))))
14081 (home-page "https://liw.fi/ttystatus/")
14082 (synopsis "Python library for showing progress reporting and
14083 status updates on terminals")
14084 (description "@code{python2-ttystatus} is a python library for
14085 showing progress reporting and status updates on terminals, for
14086 command line programs. Output is automatically adapted to the width
14087 of the terminal: truncated if it does not fit, and resized if the
14088 terminal size changes.")
14089 (license license:gpl3+)))
14090
14091 (define-public python2-tracing
14092 (package
14093 (name "python2-tracing")
14094 (version "0.10")
14095 (source
14096 (origin
14097 (method url-fetch)
14098 (uri (string-append
14099 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
14100 version ".tar.gz"))
14101 (sha256
14102 (base32
14103 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
14104 (build-system python-build-system)
14105 (arguments
14106 `(#:python ,python-2))
14107 (home-page "https://liw.fi/tracing/")
14108 (synopsis "Python debug logging helper")
14109 (description "@code{python2-tracing} is a python library for
14110 logging debug messages. It provides a way to turn debugging messages
14111 on and off, based on the filename they occur in. It is much faster
14112 than using @code{logging.Filter} to accomplish the same thing, which
14113 matters when code is run in production mode. The actual logging still
14114 happens using the @code{logging} library.")
14115 (license license:gpl3+)))
14116
14117 (define-public python2-larch
14118 (package
14119 (name "python2-larch")
14120 (version "1.20151025")
14121 (source
14122 (origin
14123 (method url-fetch)
14124 (uri (string-append
14125 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
14126 version ".tar.gz"))
14127 (patches (search-patches
14128 "python2-larch-coverage-4.0a6-compatibility.patch"))
14129 (sha256
14130 (base32
14131 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
14132 (build-system python-build-system)
14133 (arguments
14134 `(#:python ,python-2
14135 #:phases
14136 (modify-phases %standard-phases
14137 ;; check phase needs to be run before the build phase. If not,
14138 ;; coverage-test-runner looks for tests for the built source files,
14139 ;; and fails.
14140 (delete 'check)
14141 (add-before 'build 'check
14142 (lambda _ (invoke "make" "check"))))))
14143 (native-inputs
14144 `(("cmdtest" ,cmdtest)
14145 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
14146 (propagated-inputs
14147 `(("python2-tracing" ,python2-tracing)))
14148 (home-page "https://liw.fi/larch/")
14149 (synopsis "Python copy-on-write B-tree library")
14150 (description "@code{python2-larch} is an implementation of
14151 particular kind of B-tree, based on research by Ohad Rodeh. See
14152 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
14153 on the data structure.
14154
14155 The distinctive feature of this B-tree is that a node is never
14156 (conceptually) modified. Instead, all updates are done by
14157 copy-on-write. This makes it easy to clone a tree, and modify only the
14158 clone, while other processes access the original tree.")
14159 (license license:gpl3+)))
14160
14161 (define-public python-astroid
14162 (package
14163 (name "python-astroid")
14164 (version "2.4.1")
14165 (source
14166 (origin
14167 (method url-fetch)
14168 (uri (pypi-uri "astroid" version))
14169 (sha256
14170 (base32 "1h99jal7ax07xna1djw5z7hpgb8vjrl3hrrg49p1phljwniww5sc"))))
14171 (build-system python-build-system)
14172 (propagated-inputs
14173 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
14174 ("python-six" ,python-six)
14175 ("python-wrapt" ,python-wrapt)))
14176 (native-inputs
14177 `(("python-dateutil" ,python-dateutil)
14178 ("python-pytest" ,python-pytest)
14179 ("python-pytest-runner" ,python-pytest-runner)))
14180 (home-page "https://github.com/PyCQA/astroid")
14181 (synopsis "Common base representation of python source code for pylint and
14182 other projects")
14183 (description "@code{python-astroid} provides a common base representation
14184 of python source code for projects such as pychecker, pyreverse, pylint, etc.
14185
14186 It provides a compatible representation which comes from the _ast module. It
14187 rebuilds the tree generated by the builtin _ast module by recursively walking
14188 down the AST and building an extended ast. The new node classes have
14189 additional methods and attributes for different usages. They include some
14190 support for static inference and local name scopes. Furthermore, astroid
14191 builds partial trees by inspecting living objects.")
14192 (license license:lgpl2.1+)
14193 (properties `((python2-variant . ,(delay python2-astroid))))))
14194
14195 (define-public python2-astroid
14196 (let ((base (package-with-python2
14197 (strip-python2-variant python-astroid))))
14198 (package (inherit base)
14199 ;; Version 2.x removes python2 support.
14200 (version "1.6.5")
14201 (source
14202 (origin
14203 (method url-fetch)
14204 (uri (pypi-uri "astroid" version))
14205 (sha256
14206 (base32
14207 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
14208 (arguments
14209 (substitute-keyword-arguments (package-arguments base)
14210 ((#:phases phases)
14211 `(modify-phases ,phases
14212 (add-after 'unpack 'remove-spurious-test
14213 (lambda _
14214 ;; https://github.com/PyCQA/astroid/issues/276
14215 (delete-file "astroid/tests/unittest_brain.py")
14216 #t))
14217 (replace 'check
14218 (lambda _
14219 (invoke"python" "-m" "unittest" "discover"
14220 "-p" "unittest*.py")))))))
14221 (native-inputs `())
14222 (propagated-inputs
14223 `(("python2-backports-functools-lru-cache"
14224 ,python2-backports-functools-lru-cache)
14225 ("python2-enum34" ,python2-enum34)
14226 ("python2-singledispatch" ,python2-singledispatch)
14227 ,@(alist-delete "python-typed-ast"
14228 (package-propagated-inputs base)))))))
14229
14230 (define-public python-isort
14231 (package
14232 (name "python-isort")
14233 (version "4.3.4")
14234 (source
14235 (origin
14236 (method git-fetch)
14237 (uri (git-reference
14238 ;; Tests pass only from the Github sources
14239 (url "https://github.com/timothycrosley/isort")
14240 (commit version)))
14241 (file-name (git-file-name name version))
14242 (sha256
14243 (base32
14244 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
14245 (build-system python-build-system)
14246 (native-inputs
14247 `(("python-mock" ,python-mock)
14248 ("python-pytest" ,python-pytest)))
14249 (home-page "https://github.com/timothycrosley/isort")
14250 (synopsis "Python utility/library to sort python imports")
14251 (description "@code{python-isort} is a python utility/library to sort
14252 imports alphabetically, and automatically separated into sections. It
14253 provides a command line utility, a python library and plugins for various
14254 editors.")
14255 (license license:expat)
14256 (properties `((python2-variant . ,(delay python2-isort))))))
14257
14258 (define-public python2-isort
14259 (let ((base (package-with-python2
14260 (strip-python2-variant python-isort))))
14261 (package (inherit base)
14262 (native-inputs
14263 `(("python2-futures" ,python2-futures)
14264 ,@(package-native-inputs base))))))
14265
14266 (define-public python2-backports-functools-lru-cache
14267 (package
14268 (name "python2-backports-functools-lru-cache")
14269 (version "1.6.1")
14270 (source
14271 (origin
14272 (method url-fetch)
14273 ;; only the pypi tarballs contain the necessary metadata
14274 (uri (pypi-uri "backports.functools_lru_cache" version))
14275 (sha256
14276 (base32
14277 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
14278 (build-system python-build-system)
14279 (native-inputs
14280 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14281 (arguments
14282 `(#:python ,python-2))
14283 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14284 (synopsis "Backport of functools.lru_cache from Python 3.3")
14285 (description "@code{python2-backports-functools-lru-cache} is a backport
14286 of @code{functools.lru_cache} from python 3.3.")
14287 (license license:expat)))
14288
14289 (define-public python-configparser
14290 (package
14291 (name "python-configparser")
14292 (version "4.0.2")
14293 (source
14294 (origin
14295 (method url-fetch)
14296 (uri (pypi-uri "configparser" version))
14297 (sha256
14298 (base32
14299 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14300 (native-inputs
14301 `(("python-setuptools_scm" ,python-setuptools-scm)))
14302 (build-system python-build-system)
14303 (home-page "https://github.com/jaraco/configparser/")
14304 (synopsis "Backport of configparser from python 3.5")
14305 (description "@code{python-configparser} is a backport of
14306 @code{configparser} from Python 3.5 so that it can be used directly
14307 in other versions.")
14308 (license license:expat)))
14309
14310 (define-public python2-configparser
14311 (package-with-python2 python-configparser))
14312
14313 (define-public python-mando
14314 (package
14315 (name "python-mando")
14316 (version "0.6.4")
14317 (source (origin
14318 (method url-fetch)
14319 (uri (pypi-uri "mando" version))
14320 (sha256
14321 (base32
14322 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14323 (build-system python-build-system)
14324 (propagated-inputs
14325 `(("python-rst2ansi" ,python-rst2ansi)
14326 ("python-six" ,python-six)))
14327 (native-inputs
14328 `(("python-pytest" ,python-pytest)))
14329 (home-page "https://mando.readthedocs.org/")
14330 (synopsis
14331 "Wrapper around argparse, allowing creation of complete CLI applications")
14332 (description
14333 "This package is a wrapper around argparse, allowing you to write complete CLI
14334 applications in seconds while maintaining all the flexibility.")
14335 (license license:expat)))
14336
14337 (define-public python2-mando
14338 (package-with-python2 python-mando))
14339
14340 (define-public python2-argparse
14341 (package
14342 (name "python2-argparse")
14343 (version "1.4.0")
14344 (source
14345 (origin
14346 (method url-fetch)
14347 (uri (pypi-uri "argparse" version))
14348 (sha256
14349 (base32
14350 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14351 (build-system python-build-system)
14352 (arguments
14353 `(#:python ,python-2))
14354 (home-page "https://github.com/ThomasWaldmann/argparse/")
14355 (synopsis "Python command-line parsing library")
14356 (description
14357 "This package is mostly for people who want to have @code{argparse} on
14358 older Pythons because it was not part of the standard library back then.")
14359 (license license:psfl)))
14360
14361 (define-public python-fudge
14362 (package
14363 (name "python-fudge")
14364 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14365 ;; package, which is currently the only use of this package.
14366 (version "0.9.6")
14367 (source
14368 (origin
14369 (method url-fetch)
14370 (uri (pypi-uri "fudge" version))
14371 (sha256
14372 (base32
14373 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14374 (build-system python-build-system)
14375 (arguments
14376 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14377 (home-page "https://github.com/fudge-py/fudge")
14378 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14379 (description
14380 "Fudge is a Python module for using fake objects (mocks and stubs) to
14381 test real ones.
14382
14383 In readable Python code, you declare the methods available on your fake object
14384 and how they should be called. Then you inject that into your application and
14385 start testing. This declarative approach means you don’t have to record and
14386 playback actions and you don’t have to inspect your fakes after running code.
14387 If the fake object was used incorrectly then you’ll see an informative
14388 exception message with a traceback that points to the culprit.")
14389 (license license:expat)))
14390
14391 (define-public python2-fudge
14392 (package-with-python2 python-fudge))
14393
14394 (define-public python-mwclient
14395 (package
14396 (name "python-mwclient")
14397 (version "0.10.1")
14398 (source
14399 (origin
14400 (method git-fetch)
14401 ;; The PyPI version wouldn't contain tests.
14402 (uri (git-reference
14403 (url "https://github.com/mwclient/mwclient")
14404 (commit (string-append "v" version))))
14405 (file-name (git-file-name name version))
14406 (sha256
14407 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
14408 (build-system python-build-system)
14409 (propagated-inputs
14410 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14411 ("python-six" ,python-six)))
14412 (native-inputs
14413 `(("python-mock" ,python-mock)
14414 ("python-pytest" ,python-pytest)
14415 ("python-pytest-cov" ,python-pytest-cov)
14416 ("python-pytest-runner" ,python-pytest-runner)
14417 ("python-responses" ,python-responses)))
14418 (home-page "https://github.com/btongminh/mwclient")
14419 (synopsis "MediaWiki API client")
14420 (description "This package provides a MediaWiki API client.")
14421 (license license:expat)))
14422
14423 (define-public python2-mwclient
14424 (package-with-python2 python-mwclient))
14425
14426 (define-public python-utils
14427 (package
14428 (name "python-utils")
14429 (version "2.4.0")
14430 (source (origin
14431 (method url-fetch)
14432 (uri (pypi-uri "python-utils" version))
14433 (sha256
14434 (base32
14435 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
14436 (build-system python-build-system)
14437 (arguments
14438 `(#:phases
14439 (modify-phases %standard-phases
14440 (replace 'check
14441 (lambda* (#:key inputs outputs #:allow-other-keys)
14442 (add-installed-pythonpath inputs outputs)
14443 (delete-file "pytest.ini")
14444 (invoke "pytest" "-vv"))))))
14445 (native-inputs
14446 `(("pytest-runner" ,python-pytest-runner)
14447 ("pytest" ,python-pytest)
14448 ("six" ,python-six)))
14449 (home-page "https://github.com/WoLpH/python-utils")
14450 (synopsis "Convenient utilities not included with the standard Python install")
14451 (description
14452 "Python Utils is a collection of small Python functions and classes which
14453 make common patterns shorter and easier.")
14454 (license license:bsd-2)))
14455
14456 (define-public python2-utils
14457 (package-with-python2 python-utils))
14458
14459 (define-public python-diff-match-patch
14460 (package
14461 (name "python-diff-match-patch")
14462 (version "20121119")
14463 (source
14464 (origin
14465 (method url-fetch)
14466 (uri (pypi-uri "diff-match-patch" version))
14467 (sha256
14468 (base32
14469 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14470 (build-system python-build-system)
14471 (home-page "https://code.google.com/p/google-diff-match-patch")
14472 (synopsis "Synchronize plain text")
14473 (description "Diff Match and Patch libraries offer robust algorithms to
14474 perform the operations required for synchronizing plain text.")
14475 (license license:asl2.0)))
14476
14477 (define-public python2-diff-match-patch
14478 (package-with-python2 python-diff-match-patch))
14479
14480 (define-public python-dirsync
14481 (package
14482 (name "python-dirsync")
14483 (version "2.2.3")
14484 (source
14485 (origin
14486 (method url-fetch)
14487 (uri (pypi-uri "dirsync" version))
14488 (sha256
14489 (base32
14490 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14491 (build-system python-build-system)
14492 (propagated-inputs
14493 `(("six" ,python-six)))
14494 (home-page "https://bitbucket.org/tkhyn/dirsync")
14495 (synopsis "Advanced directory tree synchronisation tool")
14496 (description "Advanced directory tree synchronisation tool.")
14497 (license license:expat)))
14498
14499 (define-public python2-dirsync
14500 (package-with-python2 python-dirsync))
14501
14502 (define-public python-levenshtein
14503 (package
14504 (name "python-levenshtein")
14505 (version "0.12.0")
14506 (source
14507 (origin
14508 (method url-fetch)
14509 (uri (pypi-uri "python-Levenshtein" version))
14510 (sha256
14511 (base32
14512 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14513 (build-system python-build-system)
14514 (home-page "https://github.com/ztane/python-Levenshtein")
14515 (synopsis "Fast computation of Levenshtein distance and string similarity")
14516 (description
14517 "The Levenshtein Python C extension module contains functions for fast computation of
14518 @enumerate
14519 @item Levenshtein (edit) distance, and edit operations
14520 @item string similarity
14521 @item approximate median strings, and generally string averaging
14522 @item string sequence and set similarity
14523 @end enumerate
14524 It supports both normal and Unicode strings.")
14525 (license license:gpl2+)))
14526
14527 (define-public python2-levenshtein
14528 (package-with-python2 python-levenshtein))
14529
14530 (define-public python-scandir
14531 (package
14532 (name "python-scandir")
14533 (version "1.10.0")
14534 (source
14535 (origin
14536 (method url-fetch)
14537 (uri (pypi-uri "scandir" version))
14538 (sha256
14539 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14540 (build-system python-build-system)
14541 (arguments
14542 `(#:phases (modify-phases %standard-phases
14543 (replace 'check
14544 (lambda _
14545 (invoke "python" "test/run_tests.py"))))))
14546 (home-page "https://github.com/benhoyt/scandir")
14547 (synopsis "Directory iteration function")
14548 (description
14549 "Directory iteration function like os.listdir(), except that instead of
14550 returning a list of bare filenames, it yields DirEntry objects that include
14551 file type and stat information along with the name. Using scandir() increases
14552 the speed of os.walk() by 2-20 times (depending on the platform and file
14553 system) by avoiding unnecessary calls to os.stat() in most cases.
14554
14555 This package is part of the Python standard library since version 3.5.")
14556 (license license:bsd-3)))
14557
14558 (define-public python2-scandir
14559 (package-with-python2 python-scandir))
14560
14561 (define-public python2-stemming
14562 (package
14563 (name "python2-stemming")
14564 (version "1.0.1")
14565 (source
14566 (origin
14567 (method url-fetch)
14568 (uri (pypi-uri "stemming" version))
14569 (sha256
14570 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14571 (build-system python-build-system)
14572 (arguments
14573 `(#:python ,python-2))
14574 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14575 (synopsis "Python implementations of various stemming algorithms")
14576 (description
14577 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14578 stemming algorithms for English. These implementations are straightforward and
14579 efficient, unlike some Python versions of the same algorithms available on the
14580 Web. This package is an extraction of the stemming code included in the Whoosh
14581 search engine.")
14582 (license license:public-domain)))
14583
14584 (define-public python-factory-boy
14585 (package
14586 (name "python-factory-boy")
14587 (version "2.8.1")
14588 (source
14589 (origin
14590 (method url-fetch)
14591 (uri (pypi-uri "factory_boy" version))
14592 (sha256
14593 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14594 (build-system python-build-system)
14595 (arguments
14596 ;; Tests are not included in the tarball.
14597 `(#:tests? #f))
14598 (propagated-inputs
14599 `(("faker" ,python-faker)))
14600 (home-page "https://github.com/benhoyt/scandir")
14601 (synopsis "Versatile test fixtures replacement")
14602 (description
14603 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14604
14605 As a fixtures replacement tool, it aims to replace static, hard to maintain
14606 fixtures with easy-to-use factories for complex object.
14607
14608 Instead of building an exhaustive test setup with every possible combination
14609 of corner cases, factory_boy allows you to use objects customized for the
14610 current test, while only declaring the test-specific fields")
14611 (license license:expat)))
14612
14613 (define-public python2-factory-boy
14614 (package-with-python2 python-factory-boy))
14615
14616 (define-public python-translate-toolkit
14617 (package
14618 (name "python-translate-toolkit")
14619 (version "2.1.0")
14620 (source
14621 (origin
14622 (method url-fetch)
14623 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14624 (sha256
14625 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14626 (build-system python-build-system)
14627 (native-inputs
14628 `(("python-pytest" ,python-pytest)
14629 ("python-sphinx" ,python-sphinx)))
14630 (propagated-inputs
14631 `(("python-babel" ,python-babel)
14632 ("python-beautifulsoup4" ,python-beautifulsoup4)
14633 ("python-chardet" ,python-chardet)
14634 ("python-diff-match-patch" ,python-diff-match-patch)
14635 ("python-levenshtein" ,python-levenshtein)
14636 ("python-lxml" ,python-lxml)
14637 ("python-six" ,python-six)
14638 ("python-vobject" ,python-vobject)
14639 ("python-pyyaml" ,python-pyyaml)))
14640 (arguments
14641 ;; TODO: tests are not run, because they end with
14642 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14643 ;; 'parse_funcs'
14644 ;; during test setup.
14645 `(#:tests? #f))
14646 (home-page "https://toolkit.translatehouse.org")
14647 (synopsis "Tools and API for translation and localization engineering")
14648 (description
14649 "Tools and API for translation and localization engineering. It contains
14650 several utilities, as well as an API for building localization tools.")
14651 (license license:gpl2+)))
14652
14653 (define-public python2-translate-toolkit
14654 (package-with-python2 python-translate-toolkit))
14655
14656 (define-public python-packaging
14657 (package
14658 (name "python-packaging")
14659 (version "20.0")
14660 (source
14661 (origin
14662 (method url-fetch)
14663 (uri (pypi-uri "packaging" version))
14664 ;; XXX: The URL in the patch file is wrong, it should be
14665 ;; <https://github.com/pypa/packaging/pull/256>.
14666 (patches (search-patches "python-packaging-test-arch.patch"))
14667 (sha256
14668 (base32
14669 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14670 (build-system python-build-system)
14671 (arguments
14672 `(#:phases (modify-phases %standard-phases
14673 (replace 'check
14674 (lambda* (#:key tests? #:allow-other-keys)
14675 (if tests?
14676 (invoke "py.test" "-vv")
14677 (format #t "test suite not run~%"))
14678 #t)))))
14679 (native-inputs
14680 `(("python-pretend" ,python-pretend)
14681 ("python-pytest" ,python-pytest)))
14682 (propagated-inputs
14683 `(("python-pyparsing" ,python-pyparsing)
14684 ("python-six" ,python-six)))
14685 (home-page "https://github.com/pypa/packaging")
14686 (synopsis "Core utilities for Python packages")
14687 (description "Packaging is a Python module for dealing with Python packages.
14688 It offers an interface for working with package versions, names, and dependency
14689 information.")
14690 ;; From 'LICENSE': This software is made available under the terms of
14691 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14692 ;; Contributions to this software is made under the terms of *both* these
14693 ;; licenses.
14694 (license (list license:asl2.0 license:bsd-2))))
14695
14696 (define-public python2-packaging
14697 (package-with-python2 python-packaging))
14698
14699 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14700 (define-public python-packaging-bootstrap
14701 (hidden-package
14702 (package/inherit
14703 python-packaging
14704 (name "python-packaging-bootstrap")
14705 (native-inputs '())
14706 (propagated-inputs
14707 `(("python-pyparsing" ,python-pyparsing)))
14708 (arguments '(#:tests? #f)))))
14709
14710 (define-public python2-packaging-bootstrap
14711 (hidden-package
14712 (package/inherit
14713 python2-packaging
14714 (name "python2-packaging-bootstrap")
14715 (native-inputs '())
14716 (propagated-inputs
14717 `(("python-pyparsing" ,python2-pyparsing)))
14718 (arguments
14719 `(#:tests? #f
14720 ,@(package-arguments python2-packaging))))))
14721
14722 (define-public python-relatorio
14723 (package
14724 (name "python-relatorio")
14725 (version "0.8.0")
14726 (source
14727 (origin
14728 (method url-fetch)
14729 (uri (pypi-uri "relatorio" version))
14730 (sha256
14731 (base32
14732 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14733 (build-system python-build-system)
14734 (propagated-inputs
14735 `(("python-lxml" ,python-lxml)
14736 ("python-genshi" ,python-genshi)))
14737 (native-inputs
14738 `(("python-magic" ,python-magic)))
14739 (home-page "https://relatorio.tryton.org/")
14740 (synopsis "Templating library able to output ODT and PDF files")
14741 (description "Relatorio is a templating library which provides a way to
14742 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14743 for more filetypes can be easily added by creating plugins for them.")
14744 (license license:gpl3+)))
14745
14746 (define-public python2-relatorio
14747 (package-with-python2 python-relatorio))
14748
14749 (define-public python-radon
14750 (package
14751 (name "python-radon")
14752 (version "4.1.0")
14753 (source
14754 (origin
14755 (method url-fetch)
14756 (uri (pypi-uri "radon" version))
14757 (sha256
14758 (base32
14759 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14760 (build-system python-build-system)
14761 (arguments
14762 `(#:phases (modify-phases %standard-phases
14763 (replace 'check
14764 (lambda _
14765 (invoke "python" "radon/tests/run.py"))))))
14766 (propagated-inputs
14767 `(("python-colorama" ,python-colorama)
14768 ("python-flake8-polyfill" ,python-flake8-polyfill)
14769 ("python-mando" ,python-mando)))
14770 (native-inputs
14771 `(("python-pytest" ,python-pytest)
14772 ("python-pytest-mock" ,python-pytest-mock)))
14773 (home-page "https://radon.readthedocs.org/")
14774 (synopsis "Code Metrics in Python")
14775 (description "Radon is a Python tool which computes various code metrics.
14776 Supported metrics are:
14777 @itemize @bullet
14778 @item raw metrics: SLOC, comment lines, blank lines, &c.
14779 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14780 @item Halstead metrics (all of them)
14781 @item the Maintainability Index (a Visual Studio metric)
14782 @end itemize")
14783 (properties `((python2-variant . ,(delay python2-radon))))
14784 (license license:expat)))
14785
14786 (define-public python2-radon
14787 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14788 (package
14789 (inherit base)
14790 (propagated-inputs
14791 `(("python-configparser" ,python2-configparser)
14792 ("python-future" ,python2-future)
14793 ,@(package-propagated-inputs base))))))
14794
14795 (define-public python-sure
14796 (package
14797 (name "python-sure")
14798 (version "1.4.11")
14799 (source
14800 (origin
14801 (method url-fetch)
14802 (uri (pypi-uri "sure" version))
14803 (sha256
14804 (base32
14805 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14806 (build-system python-build-system)
14807 (propagated-inputs
14808 `(("python-mock" ,python-mock)
14809 ("python-six" ,python-six)))
14810 (native-inputs
14811 `(("python-nose" ,python-nose)))
14812 (home-page "https://github.com/gabrielfalcao/sure")
14813 (synopsis "Automated testing library in python for python")
14814 (description
14815 "Sure is a python library that leverages a DSL for writing assertions.
14816 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14817 (license license:gpl3+)))
14818
14819 (define-public python2-sure
14820 (package-with-python2 python-sure))
14821
14822 (define-public python2-couleur
14823 ;; This package does not seem to support python3 at all, hence,
14824 ;; only the python2 variant definition is provided.
14825 (package
14826 (name "python2-couleur")
14827 (version "0.6.2")
14828 (source
14829 (origin
14830 (method url-fetch)
14831 (uri (pypi-uri "couleur" version))
14832 (sha256
14833 (base32
14834 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14835 (build-system python-build-system)
14836 (arguments
14837 `(#:python ,python-2))
14838 (home-page "https://github.com/gabrielfalcao/couleur")
14839 (synopsis
14840 "ANSI terminal tool for python, colored shell and other handy fancy features")
14841 (description
14842 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14843 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14844 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14845 ;; https://github.com/gabrielfalcao/couleur/issues/11
14846 (license license:lgpl3+)))
14847
14848 (define-public python-misaka
14849 (package
14850 (name "python-misaka")
14851 (version "2.1.1")
14852 (source
14853 (origin
14854 (method url-fetch)
14855 (uri (pypi-uri "misaka" version))
14856 (sha256
14857 (base32
14858 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14859 (build-system python-build-system)
14860 (arguments
14861 `(;; Line 37 of setup.py calls self.run_command('develop')
14862 ;; in the 'check' phase. This command seems to be trying
14863 ;; to write to
14864 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14865 ;; for which it does not have the permission to write.
14866 #:tests? #f))
14867 (propagated-inputs
14868 `(("python-cffi" ,python-cffi)))
14869 (home-page "https://github.com/FSX/misaka")
14870 (synopsis "Python binding for Hoedown")
14871 (description
14872 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14873 library written in C. It features a fast HTML renderer and functionality to make custom
14874 renderers (e.g. man pages or LaTeX).")
14875 (license license:expat)))
14876
14877 (define-public python2-misaka
14878 (package-with-python2 python-misaka))
14879
14880 (define-public python2-steadymark
14881 ;; This is forced into being a python2 only variant
14882 ;; due to its dependence on couleur that has no support
14883 ;; for python3
14884 (package
14885 (name "python2-steadymark")
14886 (version "0.7.3")
14887 (source
14888 (origin
14889 (method url-fetch)
14890 (uri (pypi-uri "steadymark" version))
14891 (sha256
14892 (base32
14893 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14894 (build-system python-build-system)
14895 (native-inputs
14896 `(("python-couleur" ,python2-couleur)
14897 ("python-sure" ,python2-sure)
14898 ("python-misaka" ,python2-misaka)))
14899 (arguments
14900 `(#:python ,python-2
14901 #:phases
14902 (modify-phases %standard-phases
14903 (add-before 'build 'patch-setup-py
14904 (lambda _
14905 ;; Update requirements from dependency==version
14906 ;; to dependency>=version
14907 (substitute* "setup.py"
14908 (("==") ">="))
14909 #t)))))
14910 (home-page "https://github.com/gabrielfalcao/steadymark")
14911 (synopsis "Markdown-based test runner for python")
14912 (description
14913 "@code{Steadymark} allows documentation to be written in github-flavoured
14914 markdown. The documentation may contain snippets of code surrounded by python
14915 code blocks and @code{Steadymark} will find these snippets and run them, making
14916 sure that there are no old malfunctional examples in the documentation examples.")
14917 (license license:expat)))
14918
14919 (define-public python-jsonpointer
14920 (package
14921 (name "python-jsonpointer")
14922 (version "1.10")
14923 (source
14924 (origin
14925 (method url-fetch)
14926 (uri (pypi-uri "jsonpointer" version))
14927 (sha256
14928 (base32
14929 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14930 (build-system python-build-system)
14931 (home-page "https://github.com/stefankoegl/python-json-pointer")
14932 (synopsis "Identify specific nodes in a JSON document")
14933 (description "@code{jsonpointer} allows you to access specific nodes
14934 by path in a JSON document (see RFC 6901).")
14935 (license license:bsd-3)))
14936
14937 (define-public python2-jsonpointer
14938 (package-with-python2 python-jsonpointer))
14939
14940 (define-public python-jsonpatch
14941 (package
14942 (name "python-jsonpatch")
14943 (version "1.16")
14944 (source
14945 (origin
14946 (method git-fetch)
14947 ;; pypi version lacks tests.js
14948 (uri (git-reference
14949 (url "https://github.com/stefankoegl/python-json-patch")
14950 (commit (string-append "v" version))))
14951 (file-name (git-file-name name version))
14952 (sha256
14953 (base32
14954 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14955 (build-system python-build-system)
14956 (native-inputs
14957 `(("python-jsonpointer" ,python-jsonpointer)))
14958 (home-page "https://github.com/stefankoegl/python-json-patch")
14959 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14960 (description "@code{jsonpatch} is a library and program that allows
14961 applying JSON Patches according to RFC 6902.")
14962 (license license:bsd-3)))
14963
14964 (define-public python2-jsonpatch
14965 (package-with-python2 python-jsonpatch))
14966
14967 (define-public python-jsonpatch-0.4
14968 (package (inherit python-jsonpatch)
14969 (name "python-jsonpatch")
14970 (version "0.4")
14971 (source
14972 (origin
14973 (method git-fetch)
14974 (uri (git-reference
14975 (url "https://github.com/stefankoegl/python-json-patch")
14976 (commit (string-append "v" version))))
14977 (file-name (git-file-name name version))
14978 (sha256
14979 (base32
14980 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14981
14982 (define-public python2-jsonpatch-0.4
14983 (package-with-python2 python-jsonpatch-0.4))
14984
14985 (define-public python-rfc3986
14986 (package
14987 (name "python-rfc3986")
14988 (version "1.1.0")
14989 (source (origin
14990 (method url-fetch)
14991 (uri (pypi-uri "rfc3986" version))
14992 (sha256
14993 (base32
14994 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14995 (build-system python-build-system)
14996 (arguments
14997 `(#:modules ((guix build utils)
14998 (guix build python-build-system)
14999 (ice-9 ftw)
15000 (srfi srfi-1)
15001 (srfi srfi-26))
15002 #:phases
15003 (modify-phases %standard-phases
15004 (replace 'check
15005 (lambda _
15006 (let ((cwd (getcwd)))
15007 (setenv "PYTHONPATH"
15008 (string-append cwd "/build/"
15009 (find (cut string-prefix? "lib" <>)
15010 (scandir (string-append cwd "/build")))
15011 ":"
15012 (getenv "PYTHONPATH")))
15013 (invoke "pytest" "-v")))))))
15014 (native-inputs
15015 `(("python-pytest" ,python-pytest)))
15016 (home-page "https://rfc3986.readthedocs.io/")
15017 (synopsis "Parse and validate URI references")
15018 (description
15019 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
15020 validation and authority parsing. This module also supports RFC@tie{}6874
15021 which adds support for zone identifiers to IPv6 addresses.")
15022 (license license:asl2.0)))
15023
15024 (define-public python2-rfc3986
15025 (package-with-python2 python-rfc3986))
15026
15027 (define-public python-rfc3987
15028 (package
15029 (name "python-rfc3987")
15030 (version "1.3.7")
15031 (source
15032 (origin
15033 (method url-fetch)
15034 (uri (pypi-uri "rfc3987" version))
15035 (sha256
15036 (base32
15037 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15038 (build-system python-build-system)
15039 (home-page "https://pypi.org/project/rfc3987/")
15040 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15041 (description "@code{rfc3987} provides routines for parsing and
15042 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15043 (license license:gpl3+)))
15044
15045 (define-public python2-rfc3987
15046 (package-with-python2 python-rfc3987))
15047
15048 (define-public python-validators
15049 (package
15050 (name "python-validators")
15051 (version "0.14.2")
15052 (source (origin
15053 (method url-fetch)
15054 (uri (pypi-uri "validators" version))
15055 (sha256
15056 (base32
15057 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
15058 (build-system python-build-system)
15059 (arguments
15060 '(#:phases (modify-phases %standard-phases
15061 (replace 'check
15062 (lambda _
15063 (invoke "pytest" "-vv"))))))
15064 (propagated-inputs
15065 `(("python-decorator" ,python-decorator)
15066 ("python-six" ,python-six)))
15067 (native-inputs
15068 `(("python-flake8" ,python-flake8)
15069 ("python-isort" ,python-isort)
15070 ("python-pytest" ,python-pytest)))
15071 (home-page "https://github.com/kvesteri/validators")
15072 (synopsis "Data validation library")
15073 (description
15074 "This package contains validators for different things such as email
15075 addresses, IP addresses, URLs, hashes and more. It has been designed to
15076 be easy to use and not require defining a schema or form just to validate
15077 some input.")
15078 (license license:expat)))
15079
15080 (define-public python2-validators
15081 (package-with-python2 python-validators))
15082
15083 (define-public python-validate-email
15084 (package
15085 (name "python-validate-email")
15086 (version "1.3")
15087 (source
15088 (origin
15089 (method url-fetch)
15090 (uri (pypi-uri "validate_email" version))
15091 (sha256
15092 (base32
15093 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15094 (build-system python-build-system)
15095 (home-page "https://github.com/syrusakbary/validate_email")
15096 (synopsis "Verifies if an email address is valid and really exists")
15097 (description "@code{validate_email} can be used to verify if an email
15098 address is valid and really exists.")
15099 (license license:lgpl3+)))
15100
15101 (define-public python2-validate-email
15102 (package-with-python2 python-validate-email))
15103
15104 (define-public python-flex
15105 (package
15106 (name "python-flex")
15107 (version "6.10.0")
15108 (source
15109 (origin
15110 (method url-fetch)
15111 (uri (pypi-uri "flex" version))
15112 (sha256
15113 (base32
15114 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15115 (build-system python-build-system)
15116 (propagated-inputs
15117 `(("python-click" ,python-click)
15118 ("python-iso8601" ,python-iso8601)
15119 ("python-jsonpointer" ,python-jsonpointer)
15120 ("python-pyyaml" ,python-pyyaml)
15121 ("python-requests" ,python-requests)
15122 ("python-rfc3987" ,python-rfc3987)
15123 ("python-six" ,python-six)
15124 ("python-validate-email" ,python-validate-email)))
15125 (home-page "https://github.com/pipermerriam/flex")
15126 (synopsis "Validates Swagger schemata")
15127 (description "@code{flex} can be used to validate Swagger schemata.")
15128 (license license:bsd-3)))
15129
15130 (define-public python2-flex
15131 (package-with-python2 python-flex))
15132
15133 (define-public python-marshmallow
15134 (package
15135 (name "python-marshmallow")
15136 (version "3.0.0b14")
15137 (source
15138 (origin
15139 (method url-fetch)
15140 (uri (pypi-uri "marshmallow" version))
15141 (sha256
15142 (base32
15143 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
15144 (build-system python-build-system)
15145 (propagated-inputs
15146 `(("python-dateutil" ,python-dateutil)
15147 ("python-simplejson" ,python-simplejson)))
15148 (native-inputs
15149 `(("python-pytest" ,python-pytest)
15150 ("python-pytz" ,python-pytz)))
15151 (home-page "https://github.com/marshmallow-code/marshmallow")
15152 (synopsis "Convert complex datatypes to and from native
15153 Python datatypes.")
15154 (description "@code{marshmallow} provides a library for converting
15155 complex datatypes to and from native Python datatypes.")
15156 (license license:expat)))
15157
15158 (define-public python2-marshmallow
15159 (package-with-python2 python-marshmallow))
15160
15161 (define-public python-apispec
15162 (package
15163 (name "python-apispec")
15164 (version "0.25.3")
15165 (source
15166 (origin
15167 (method url-fetch)
15168 (uri (pypi-uri "apispec" version))
15169 (sha256
15170 (base32
15171 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
15172 (build-system python-build-system)
15173 (propagated-inputs
15174 `(("python-pyyaml" ,python-pyyaml)))
15175 (native-inputs
15176 `(("python-pytest" ,python-pytest)
15177 ("python-flask" ,python-flask)
15178 ("python-marshmallow" ,python-marshmallow)
15179 ("python-tornado" ,python-tornado)
15180 ("python-bottle" ,python-bottle)
15181 ("python-mock" ,python-mock)))
15182 (home-page "https://github.com/marshmallow-code/apispec")
15183 (synopsis "Swagger 2.0 API specification generator")
15184 (description "@code{python-apispec} is a pluggable API specification
15185 generator. Currently supports the OpenAPI specification (f.k.a.
15186 Swagger 2.0).")
15187 (license license:expat)))
15188
15189 (define-public python2-apispec
15190 (package-with-python2 python-apispec))
15191
15192 (define-public python-flasgger
15193 (package
15194 (name "python-flasgger")
15195 (version "0.6.3")
15196 (source
15197 (origin
15198 (method git-fetch)
15199 (uri (git-reference
15200 (url "https://github.com/rochacbruno/flasgger.git")
15201 (commit version)))
15202 (file-name (git-file-name name version))
15203 (sha256
15204 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
15205 (build-system python-build-system)
15206 (arguments
15207 `(#:phases
15208 (modify-phases %standard-phases
15209 (replace 'check
15210 (lambda* (#:key inputs outputs #:allow-other-keys)
15211 (substitute* "Makefile"
15212 (("flake8 flasgger --ignore=F403")
15213 "flake8 flasgger --ignore=E731,F403"))
15214 (setenv "PYTHONPATH" (string-append (getcwd)
15215 ":"
15216 (getenv "PYTHONPATH")))
15217 (invoke "py.test"))))))
15218 (propagated-inputs
15219 `(("python-flask" ,python-flask)
15220 ("python-pyyaml" ,python-pyyaml)
15221 ("python-jsonschema" ,python-jsonschema)
15222 ("python-mistune" ,python-mistune)
15223 ("python-six" ,python-six)))
15224 (native-inputs
15225 `(("python-decorator" ,python-decorator)
15226 ("python-flake8" ,python-flake8)
15227 ("python-flask-restful" ,python-flask-restful)
15228 ("python-flex" ,python-flex)
15229 ("python-pytest" ,python-pytest)
15230 ("python-pytest-cov" ,python-pytest-cov)
15231 ("python-marshmallow" ,python-marshmallow)
15232 ("python-apispec" ,python-apispec)))
15233 (home-page "https://github.com/rochacbruno/flasgger/")
15234 (synopsis "Extract Swagger specs from your Flask project")
15235 (description "@code{python-flasgger} allows extracting Swagger specs
15236 from your Flask project. It is a fork of Flask-Swagger.")
15237 (license license:expat)))
15238
15239 (define-public python2-flasgger
15240 (package-with-python2 python-flasgger))
15241
15242 (define-public python-swagger-spec-validator
15243 (package
15244 (name "python-swagger-spec-validator")
15245 (version "2.4.3")
15246 (source
15247 (origin
15248 (method url-fetch)
15249 (uri (pypi-uri "swagger-spec-validator" version))
15250 (sha256
15251 (base32
15252 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
15253 (build-system python-build-system)
15254 (propagated-inputs
15255 `(("python-jsonschema" ,python-jsonschema)
15256 ("python-pyyaml" ,python-pyyaml)
15257 ("python-six" ,python-six)))
15258 (home-page
15259 "https://github.com/Yelp/swagger_spec_validator")
15260 (synopsis "Validation of Swagger specifications")
15261 (description "@code{swagger_spec_validator} provides a library for
15262 validating Swagger API specifications.")
15263 (license license:asl2.0)))
15264
15265 (define-public python2-swagger-spec-validator
15266 (package-with-python2 python-swagger-spec-validator))
15267
15268 (define-public python-apache-libcloud
15269 (package
15270 (name "python-apache-libcloud")
15271 (version "2.4.0")
15272 (source
15273 (origin
15274 (method url-fetch)
15275 (uri (pypi-uri "apache-libcloud" version))
15276 (sha256
15277 (base32
15278 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15279 (build-system python-build-system)
15280 (arguments
15281 `(#:phases
15282 (modify-phases %standard-phases
15283 (add-after 'unpack 'patch-ssh
15284 (lambda* (#:key inputs #:allow-other-keys)
15285 (substitute* "libcloud/compute/ssh.py"
15286 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15287 "/bin/ssh" "'")))
15288 #t))
15289 (add-after 'unpack 'patch-tests
15290 (lambda _
15291 (substitute* "./libcloud/test/test_file_fixtures.py"
15292 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15293 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15294 return (httplib.OK,
15295 \"1234abcd\",
15296 {\"test\": \"value\"},
15297 httplib.responses[httplib.OK])
15298 def _ascii"))
15299 (substitute* "libcloud/test/compute/test_ssh_client.py"
15300 (("class ShellOutSSHClientTests")
15301 "@unittest.skip(\"Guix container doesn't have ssh service\")
15302 class ShellOutSSHClientTests")
15303 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15304 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15305 (("'.xF0', '.x90', '.x8D', '.x88'")
15306 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15307 #t))
15308 (add-before 'check 'copy-secret
15309 (lambda _
15310 (copy-file "libcloud/test/secrets.py-dist"
15311 "libcloud/test/secrets.py")
15312 #t)))))
15313 (inputs
15314 `(("openssh" ,openssh)))
15315 (propagated-inputs
15316 `(("python-paramiko" ,python-paramiko)
15317 ("python-requests" ,python-requests)))
15318 (native-inputs
15319 `(("python-lockfile" ,python-lockfile)
15320 ("python-mock" ,python-mock)
15321 ("python-pytest" ,python-pytest)
15322 ("python-pytest-runner" ,python-pytest-runner)
15323 ("python-requests-mock" ,python-requests-mock)))
15324 (home-page "https://libcloud.apache.org/")
15325 (synopsis "Unified Cloud API")
15326 (description "@code{libcloud} is a Python library for interacting with
15327 many of the popular cloud service providers using a unified API.")
15328 (license license:asl2.0)))
15329
15330 (define-public python2-apache-libcloud
15331 (package-with-python2 python-apache-libcloud))
15332
15333 (define-public python-smmap
15334 (package
15335 (name "python-smmap")
15336 (version "3.0.1")
15337 (source
15338 (origin
15339 (method url-fetch)
15340 (uri (pypi-uri "smmap" version))
15341 (sha256
15342 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15343 (build-system python-build-system)
15344 (native-inputs
15345 `(("python-nosexcover" ,python-nosexcover)))
15346 (home-page "https://github.com/Byron/smmap")
15347 (synopsis "Python sliding window memory map manager")
15348 (description "@code{smmap} is a pure Python implementation of a sliding
15349 window memory map manager.")
15350 (license license:bsd-3)))
15351
15352 (define-public python-smmap2
15353 (deprecated-package "python-smmap2" python-smmap))
15354
15355 (define-public python2-smmap
15356 (package-with-python2 python-smmap))
15357
15358 (define-public python2-smmap2
15359 (deprecated-package "python2-smmap2" python2-smmap))
15360
15361 (define-public python-regex
15362 (package
15363 (name "python-regex")
15364 (version "2020.6.8")
15365 (source (origin
15366 (method url-fetch)
15367 (uri (pypi-uri "regex" version))
15368 (sha256
15369 (base32
15370 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
15371 (build-system python-build-system)
15372 (arguments
15373 '(#:phases
15374 (modify-phases %standard-phases
15375 (replace 'check
15376 (lambda* (#:key inputs outputs #:allow-other-keys)
15377 (add-installed-pythonpath inputs outputs)
15378 (invoke "python" "-c"
15379 "from regex.test_regex import test_main; test_main()"))))))
15380 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15381 (synopsis "Alternative regular expression module")
15382 (description "This regular expression implementation is backwards-
15383 compatible with the standard @code{re} module, but offers additional
15384 functionality like full case-folding for case-insensitive matches in Unicode.")
15385 (license license:psfl)))
15386
15387 (define-public python2-regex
15388 (package-with-python2 python-regex))
15389
15390 (define-public python2-pyopengl
15391 (package
15392 (name "python2-pyopengl")
15393 (version "3.1.0")
15394 (source
15395 (origin
15396 (method url-fetch)
15397 (uri (pypi-uri "PyOpenGL" version))
15398 (sha256
15399 (base32
15400 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
15401 (arguments
15402 `(#:python ,python-2))
15403 (build-system python-build-system)
15404 (home-page "http://pyopengl.sourceforge.net")
15405 (synopsis "Standard OpenGL bindings for Python")
15406 (description
15407 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15408 related APIs. The binding is created using the standard @code{ctypes}
15409 library.")
15410 (license license:bsd-3)))
15411
15412 (define-public python2-pyopengl-accelerate
15413 (package
15414 (inherit python2-pyopengl)
15415 (name "python2-pyopengl-accelerate")
15416 (version "3.1.0")
15417 (source
15418 (origin
15419 (method url-fetch)
15420 (uri (pypi-uri "PyOpenGL-accelerate" version))
15421 (sha256
15422 (base32
15423 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
15424 (synopsis "Acceleration code for PyOpenGL")
15425 (description
15426 "This is the Cython-coded accelerator module for PyOpenGL.")))
15427
15428 (define-public python-rencode
15429 (package
15430 (name "python-rencode")
15431 (version "1.0.5")
15432 (source
15433 (origin
15434 (method url-fetch)
15435 (uri (pypi-uri "rencode" version))
15436 (sha256
15437 (base32
15438 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15439 (build-system python-build-system)
15440 (arguments
15441 `(#:phases
15442 (modify-phases %standard-phases
15443 (add-before 'check 'delete-bogus-test
15444 ;; This test requires /home/aresch/Downloads, which is not provided by
15445 ;; the build environment.
15446 (lambda _
15447 (delete-file "rencode/t.py")
15448 #t)))))
15449 (native-inputs `(("pkg-config" ,pkg-config)
15450 ("python-cython" ,python-cython)))
15451 (home-page "https://github.com/aresch/rencode")
15452 (synopsis "Serialization of heterogeneous data structures")
15453 (description
15454 "The @code{rencode} module is a data structure serialization library,
15455 similar to @code{bencode} from the BitTorrent project. For complex,
15456 heterogeneous data structures with many small elements, r-encoding stake up
15457 significantly less space than b-encodings. This version of rencode is a
15458 complete rewrite in Cython to attempt to increase the performance over the
15459 pure Python module.")
15460 (license license:bsd-3)))
15461
15462 (define-public python2-rencode
15463 (package-with-python2 python-rencode))
15464
15465 (define-public python-xenon
15466 (package
15467 (name "python-xenon")
15468 (version "0.7.0")
15469 (source
15470 (origin
15471 (method url-fetch)
15472 (uri (pypi-uri "xenon" version))
15473 (sha256
15474 (base32
15475 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15476 (build-system python-build-system)
15477 (native-inputs
15478 `(("python-pyyaml" ,python-pyyaml)
15479 ("python-radon" ,python-radon)
15480 ("python-requests" ,python-requests)
15481 ("python-flake8" ,python-flake8)
15482 ("python-tox" ,python-tox)))
15483 (arguments
15484 `(#:tests? #f ;test suite not shipped with the PyPI archive
15485 #:phases
15486 (modify-phases %standard-phases
15487 (add-before 'build 'patch-test-requirements
15488 (lambda _
15489 ;; Remove httpretty dependency for tests.
15490 (substitute* "setup.py"
15491 (("httpretty") ""))
15492 #t)))))
15493 (home-page "https://xenon.readthedocs.org/")
15494 (synopsis "Monitor code metrics for Python on your CI server")
15495 (description
15496 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15497 Ideally, @code{xenon} is run every time code is committed. Through command
15498 line options, various thresholds can be set for the complexity of code. It
15499 will fail (i.e. it will exit with a non-zero exit code) when any of these
15500 requirements is not met.")
15501 (license license:expat)))
15502
15503 (define-public python2-xenon
15504 (package-with-python2 python-xenon))
15505
15506 (define-public python-pysocks
15507 (package
15508 (name "python-pysocks")
15509 (version "1.7.0")
15510 (source
15511 (origin
15512 (method url-fetch)
15513 (uri (pypi-uri "PySocks" version))
15514 (sha256
15515 (base32
15516 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15517 (build-system python-build-system)
15518 (arguments `(#:tests? #f))
15519 (home-page "https://github.com/Anorov/PySocks")
15520 (synopsis "SOCKS client module")
15521 (description "@code{pysocks} is an updated and semi-actively maintained
15522 version of @code{SocksiPy} with bug fixes and extra features.")
15523 (license license:bsd-3)))
15524
15525 (define-public python2-pysocks
15526 (package-with-python2 python-pysocks))
15527
15528 (define-public python-pydiff
15529 (package
15530 (name "python-pydiff")
15531 (version "0.2")
15532 (source
15533 (origin
15534 (method url-fetch)
15535 (uri (pypi-uri "pydiff" version))
15536 (sha256
15537 (base32
15538 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15539 (build-system python-build-system)
15540 (home-page "https://github.com/myint/pydiff")
15541 (synopsis "Library to diff two Python files at the bytecode level")
15542 (description
15543 "@code{pydiff} makes it easy to look for actual code changes while
15544 ignoring formatting changes.")
15545 (license license:expat)))
15546
15547 (define-public python2-pydiff
15548 (package-with-python2 python-pydiff))
15549
15550 (define-public python-tqdm
15551 (package
15552 (name "python-tqdm")
15553 (version "4.43.0")
15554 (source
15555 (origin
15556 (method url-fetch)
15557 (uri (pypi-uri "tqdm" version))
15558 (sha256
15559 (base32
15560 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15561 (build-system python-build-system)
15562 (arguments
15563 '(#:phases (modify-phases %standard-phases
15564 (replace 'check
15565 (lambda* (#:key inputs outputs #:allow-other-keys)
15566 (add-installed-pythonpath inputs outputs)
15567 ;; This invokation is taken from tox.ini.
15568 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15569 "-d" "-v" "tqdm/"))))))
15570 (native-inputs
15571 `(("python-nose" ,python-nose)))
15572 (home-page "https://github.com/tqdm/tqdm")
15573 (synopsis "Fast, extensible progress meter")
15574 (description
15575 "Make loops show a progress bar on the console by just wrapping any
15576 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15577 design and layout.")
15578 (license (list license:mpl2.0 license:expat))))
15579
15580 (define-public python2-tqdm
15581 (package-with-python2 python-tqdm))
15582
15583 (define-public python-pkginfo
15584 (package
15585 (name "python-pkginfo")
15586 (version "1.4.2")
15587 (source
15588 (origin
15589 (method url-fetch)
15590 (uri (pypi-uri "pkginfo" version))
15591 (sha256
15592 (base32
15593 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15594 (build-system python-build-system)
15595 (arguments
15596 ;; The tests are broken upstream.
15597 '(#:tests? #f))
15598 (home-page
15599 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15600 (synopsis
15601 "Query metadatdata from sdists, bdists, and installed packages")
15602 (description
15603 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15604 source distriubtion (an sdist) or a binary distribution (e.g., created by
15605 running bdist_egg). It can also query the EGG-INFO directory of an installed
15606 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15607 created by running @code{python setup.py develop}).")
15608 (license license:expat)))
15609
15610 (define-public python2-pkginfo
15611 (package-with-python2 python-pkginfo))
15612
15613 (define-public python-twine
15614 (package
15615 (name "python-twine")
15616 (version "1.9.1")
15617 (source
15618 (origin
15619 (method url-fetch)
15620 (uri (pypi-uri "twine" version))
15621 (sha256
15622 (base32
15623 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15624 (build-system python-build-system)
15625 (propagated-inputs
15626 `(("python-tqdm" ,python-tqdm)
15627 ("python-pkginfo" ,python-pkginfo)
15628 ("python-requests" ,python-requests)
15629 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15630 (home-page "https://github.com/pypa/twine")
15631 (synopsis "Collection of utilities for interacting with PyPI")
15632 (description
15633 "@code{twine} currently supports registering projects and uploading
15634 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15635 their files and supports any packaging format (including wheels).")
15636 (license license:asl2.0)))
15637
15638 (define-public python2-twine
15639 (package-with-python2 python-twine))
15640
15641 (define-public python-linecache2
15642 (package
15643 (name "python-linecache2")
15644 (version "1.0.0")
15645 (source
15646 (origin
15647 (method url-fetch)
15648 (uri (pypi-uri "linecache2" version))
15649 (sha256
15650 (base32
15651 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15652 (build-system python-build-system)
15653 (arguments
15654 `(;; The tests depend on unittest2, and our version is a bit too old.
15655 #:tests? #f))
15656 (native-inputs
15657 `(("python-pbr" ,python-pbr-minimal)))
15658 (home-page
15659 "https://github.com/testing-cabal/linecache2")
15660 (synopsis "Backports of the linecache module")
15661 (description
15662 "The linecache module allows one to get any line from any file, while
15663 attempting to optimize internally, using a cache, the common case where many
15664 lines are read from a single file.")
15665 (license license:psfl)))
15666
15667 (define-public python2-linecache2
15668 (package-with-python2 python-linecache2))
15669
15670 (define-public python-traceback2
15671 (package
15672 (name "python-traceback2")
15673 (version "1.4.0")
15674 (source
15675 (origin
15676 (method url-fetch)
15677 (uri (pypi-uri "traceback2" version))
15678 (sha256
15679 (base32
15680 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15681 (build-system python-build-system)
15682 (arguments
15683 `(;; python-traceback2 and python-unittest2 depend on one another.
15684 #:tests? #f))
15685 (native-inputs
15686 `(("python-pbr" ,python-pbr-minimal)))
15687 (propagated-inputs
15688 `(("python-linecache2" ,python-linecache2)))
15689 (home-page
15690 "https://github.com/testing-cabal/traceback2")
15691 (synopsis "Backports of the traceback module")
15692 (description
15693 "This module provides a standard interface to extract, format and print
15694 stack traces of Python programs. It exactly mimics the behavior of the Python
15695 interpreter when it prints a stack trace.")
15696 (license license:psfl)))
15697
15698 (define-public python2-traceback2
15699 (package-with-python2 python-traceback2))
15700
15701 (define-public python-ratelimiter
15702 (package
15703 (name "python-ratelimiter")
15704 (version "1.2.0")
15705 (source
15706 (origin
15707 (method url-fetch)
15708 (uri (pypi-uri "ratelimiter" version))
15709 (sha256
15710 (base32
15711 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15712 (build-system python-build-system)
15713 (arguments
15714 '(#:tests? #f)) ; There are no tests in the pypi archive.
15715 (home-page "https://github.com/RazerM/ratelimiter")
15716 (synopsis "Simple rate limiting object")
15717 (description
15718 "The @code{ratelimiter} module ensures that an operation will not be
15719 executed more than a given number of times during a given period.")
15720 (license license:asl2.0)))
15721
15722 (define-public python2-ratelimiter
15723 (package-with-python2 python-ratelimiter))
15724
15725 (define-public python-dukpy
15726 (package
15727 (name "python-dukpy")
15728 (version "0.3")
15729 (source
15730 (origin
15731 (method git-fetch)
15732 (uri (git-reference
15733 (url "https://github.com/kovidgoyal/dukpy.git")
15734 (commit (string-append "v" version))))
15735 (file-name (git-file-name name version))
15736 (sha256
15737 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15738 (build-system python-build-system)
15739 (home-page "https://github.com/kovidgoyal/dukpy")
15740 (synopsis "Run JavaScript in python")
15741 (description
15742 "dukpy is a JavaScript runtime environment for Python using the duktape
15743 embeddable JavaScript engine.")
15744 ;; Dukpy is licensed under MIT like the embedded duktape library,
15745 ;; with 'errors.c' as GPL3.
15746 (license (list license:expat license:gpl3))))
15747
15748 (define-public python2-dukpy
15749 (package-with-python2 python-dukpy))
15750
15751 (define-public python-jsonrpclib-pelix
15752 (package
15753 (name "python-jsonrpclib-pelix")
15754 (version "0.3.2")
15755 (source
15756 (origin
15757 (method url-fetch)
15758 (uri (pypi-uri "jsonrpclib-pelix" version))
15759 (sha256
15760 (base32
15761 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15762 (build-system python-build-system)
15763 (arguments
15764 `(#:tests? #f)) ; no tests in PyPI tarball
15765 (home-page "https://github.com/tcalmant/jsonrpclib/")
15766 (synopsis "JSON-RPC 2.0 client library for Python")
15767 (description
15768 "This library implements the JSON-RPC v2.0
15769 specification (backwards-compatible) as a client library for Python. This
15770 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15771 services.")
15772 (license license:asl2.0)))
15773
15774 (define-public python2-jsonrpclib-pelix
15775 (package-with-python2 python-jsonrpclib-pelix))
15776
15777 (define-public python-setuptools-scm-git-archive
15778 (package
15779 (name "python-setuptools-scm-git-archive")
15780 (version "1.0")
15781 (source
15782 (origin
15783 (method url-fetch)
15784 (uri (pypi-uri "setuptools_scm_git_archive" version))
15785 (sha256
15786 (base32
15787 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15788 (build-system python-build-system)
15789 (native-inputs
15790 `(("python-pytest" ,python-pytest)))
15791 (propagated-inputs
15792 `(("python-setuptools-scm" ,python-setuptools-scm)))
15793 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15794 (synopsis "Setuptools_scm plugin for git archives")
15795 (description
15796 "The setuptools_scm_git_archive package is a plugin to
15797 setuptools_scm, which supports obtaining versions from git archives that
15798 belong to tagged versions.")
15799 (license license:expat)))
15800
15801 (define-public python2-setuptools-scm-git-archive
15802 (package-with-python2 python-setuptools-scm-git-archive))
15803
15804 (define-public python-setuptools-git
15805 (package
15806 (name "python-setuptools-git")
15807 (version "1.2")
15808 (source
15809 (origin
15810 (method url-fetch)
15811 (uri (pypi-uri "setuptools-git" version))
15812 (sha256
15813 (base32
15814 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15815 (build-system python-build-system)
15816 (arguments
15817 `(#:phases
15818 (modify-phases %standard-phases
15819 ;; This is needed for tests.
15820 (add-after 'unpack 'configure-git
15821 (lambda _
15822 (setenv "HOME" "/tmp")
15823 (invoke "git" "config" "--global" "user.email" "guix")
15824 (invoke "git" "config" "--global" "user.name" "guix")
15825 #t)))))
15826 (native-inputs
15827 `(("git" ,git-minimal)))
15828 (home-page "https://github.com/msabramo/setuptools-git")
15829 (synopsis "Setuptools revision control system plugin for Git")
15830 (description
15831 "This package provides a plugin for Setuptools for revision control with
15832 Git.")
15833 (license license:bsd-3)))
15834
15835 (define-public python-pyclipper
15836 (package
15837 (name "python-pyclipper")
15838 (version "1.1.0.post3")
15839 (source
15840 (origin
15841 (method url-fetch)
15842 (uri (pypi-uri "pyclipper" version ".zip"))
15843 (sha256
15844 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15845 (modules '((guix build utils)))
15846 (snippet
15847 '(begin
15848 ;; This file is generated by Cython.
15849 (delete-file "pyclipper/pyclipper.cpp") #t))))
15850 (build-system python-build-system)
15851 (arguments
15852 `(#:phases
15853 (modify-phases %standard-phases
15854 (add-before 'build 'cythonize-sources
15855 (lambda _
15856 (with-directory-excursion "pyclipper"
15857 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15858 (propagated-inputs
15859 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15860 (native-inputs
15861 `(("python-cython" ,python-cython)
15862 ("python-pytest" ,python-pytest)
15863 ("python-pytest-runner" ,python-pytest-runner)
15864 ("python-unittest2" ,python-unittest2)
15865 ("unzip" ,unzip)))
15866 (home-page "https://github.com/greginvm/pyclipper")
15867 (synopsis "Wrapper for Angus Johnson's Clipper library")
15868 (description
15869 "Pyclipper is a Cython wrapper for the C++ translation of the
15870 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15871 (license license:expat)))
15872
15873 (define-public python2-pyclipper
15874 (package-with-python2 python-pyclipper))
15875
15876 (define-public python2-booleanoperations
15877 (package
15878 (name "python2-booleanoperations")
15879 (version "0.7.1")
15880 (source
15881 (origin
15882 (method url-fetch)
15883 (uri (pypi-uri "booleanOperations" version ".zip"))
15884 (sha256
15885 (base32
15886 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15887 (build-system python-build-system)
15888 (arguments
15889 `(#:python ,python-2))
15890 (native-inputs
15891 `(("unzip" ,unzip)
15892 ("python2-pytest" ,python2-pytest)
15893 ("python2-pytest-runner" ,python2-pytest-runner)))
15894 (propagated-inputs
15895 `(("python-fonttools" ,python2-fonttools)
15896 ("python-pyclipper" ,python2-pyclipper)
15897 ("python-ufolib" ,python2-ufolib)))
15898 (home-page "https://github.com/typemytype/booleanOperations")
15899 (synopsis "Boolean operations on paths")
15900 (description
15901 "BooleanOperations provides a Python library that enables
15902 boolean operations on paths.")
15903 (license license:expat)))
15904
15905 (define-public python-tempdir
15906 (package
15907 (name "python-tempdir")
15908 (version "0.7.1")
15909 (source
15910 (origin
15911 (method url-fetch)
15912 (uri (pypi-uri "tempdir" version))
15913 (sha256
15914 (base32
15915 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15916 (build-system python-build-system)
15917 (home-page "https://pypi.org/project/tempdir/")
15918 (arguments
15919 ;; the package has no tests
15920 '(#:tests? #f))
15921 (synopsis "Python library for managing temporary directories")
15922 (description
15923 "This library manages temporary directories that are automatically
15924 deleted with all their contents when they are no longer needed. It is
15925 particularly convenient for use in tests.")
15926 (license license:expat)))
15927
15928 (define-public python2-tempdir
15929 (package-with-python2 python-tempdir))
15930
15931 (define-public python-activepapers
15932 (package
15933 (name "python-activepapers")
15934 (version "0.2.2")
15935 (source
15936 (origin
15937 (method url-fetch)
15938 (uri (pypi-uri "ActivePapers.Py" version))
15939 (sha256
15940 (base32
15941 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15942 (build-system python-build-system)
15943 (arguments
15944 `(#:modules ((ice-9 ftw)
15945 (srfi srfi-1)
15946 (guix build utils)
15947 (guix build python-build-system))
15948
15949 #:phases
15950 (modify-phases %standard-phases
15951 (add-after 'unpack 'delete-python2-code
15952 (lambda _
15953 (for-each delete-file
15954 '("lib/activepapers/builtins2.py"
15955 "lib/activepapers/standardlib2.py"
15956 "lib/activepapers/utility2.py"))))
15957 (replace 'check
15958 (lambda _
15959 ;; Deactivate the test cases that download files
15960 (setenv "NO_NETWORK_ACCESS" "1")
15961 ;; For some strange reason, some tests fail if nosetests runs all
15962 ;; test modules in a single execution. They pass if each test
15963 ;; module is run individually.
15964 (for-each (lambda (filename)
15965 (invoke "nosetests"
15966 (string-append "tests/" filename)))
15967 (scandir "tests"
15968 (lambda (filename)
15969 (string-suffix? ".py" filename)))))))))
15970 (native-inputs
15971 `(("python-tempdir" ,python-tempdir)
15972 ("python-nose" ,python-nose)))
15973 (propagated-inputs
15974 `(("python-h5py" ,python-h5py)))
15975 (home-page "https://www.activepapers.org/")
15976 (synopsis "Executable papers for scientific computing")
15977 (description
15978 "ActivePapers is a tool for working with executable papers, which
15979 combine data, code, and documentation in single-file packages,
15980 suitable for publication as supplementary material or on repositories
15981 such as figshare or Zenodo.")
15982 (properties `((python2-variant . ,(delay python2-activepapers))))
15983 (license license:bsd-3)))
15984
15985 (define-public python2-activepapers
15986 (let ((base (package-with-python2
15987 (strip-python2-variant python-activepapers))))
15988 (package
15989 (inherit base)
15990 (arguments
15991 (substitute-keyword-arguments (package-arguments base)
15992 ((#:phases phases)
15993 `(modify-phases ,phases
15994 (delete 'delete-python2-code)
15995 (add-after 'unpack 'delete-python3-code
15996 (lambda _
15997 (for-each delete-file
15998 '("lib/activepapers/builtins3.py"
15999 "lib/activepapers/standardlib3.py"
16000 "lib/activepapers/utility3.py")))))))))))
16001
16002 (define-public python-semver
16003 (package
16004 (name "python-semver")
16005 (version "2.9.0")
16006 (source
16007 (origin
16008 (method url-fetch)
16009 (uri (pypi-uri "semver" version))
16010 (sha256
16011 (base32
16012 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
16013 (build-system python-build-system)
16014 (native-inputs
16015 `(("python-appdirs" ,python-appdirs)
16016 ("python-distlib" ,python-distlib)
16017 ("python-importlib-metadata" ,python-importlib-metadata)
16018 ("python-filelock" ,python-filelock)
16019 ("python-six" ,python-six)
16020 ("python-tox" ,python-tox)
16021 ("python-virtualenv" ,python-virtualenv)))
16022 (home-page "https://github.com/k-bx/python-semver")
16023 (synopsis "Python helper for Semantic Versioning")
16024 (description "This package provides a Python library for
16025 @url{Semantic Versioning, http://semver.org/}.")
16026 (license license:bsd-3)))
16027
16028 (define-public python2-semver
16029 (package-with-python2 python-semver))
16030
16031 (define-public python-pyro4
16032 (package
16033 (name "python-pyro4")
16034 (version "4.77")
16035 (source
16036 (origin
16037 (method url-fetch)
16038 (uri (pypi-uri "Pyro4" version))
16039 (sha256
16040 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
16041 (build-system python-build-system)
16042 (arguments
16043 '(#:tests? #f)) ;FIXME: Some tests require network access.
16044 (native-inputs
16045 `(("python-cloudpickle" ,python-cloudpickle)
16046 ("python-dill" ,python-dill)
16047 ("python-msgpack" ,python-msgpack)))
16048 (propagated-inputs
16049 `(("python-serpent" ,python-serpent)))
16050 (home-page "https://pyro4.readthedocs.io")
16051 (synopsis "Distributed object middleware for Python")
16052 (description
16053 "Pyro enables you to build applications in which objects can talk to each
16054 other over the network. You can just use normal Python method calls to call
16055 objects on other machines, also known as remote procedure calls (RPC).")
16056 (license license:expat)))
16057
16058 (define-public python2-pyro
16059 (package
16060 (name "python2-pyro")
16061 (version "3.16")
16062 (source
16063 (origin
16064 (method url-fetch)
16065 (uri (pypi-uri "Pyro" version))
16066 (file-name (string-append "Pyro-" version ".tar.gz"))
16067 (sha256
16068 (base32
16069 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
16070 (build-system python-build-system)
16071 (arguments
16072 ;; Pyro is not compatible with Python 3
16073 `(#:python ,python-2
16074 ;; Pyro has no test cases for automatic execution
16075 #:tests? #f))
16076 (home-page "https://pythonhosted.org/Pyro/")
16077 (synopsis "Distributed object manager for Python")
16078 (description "Pyro is a Distributed Object Technology system
16079 written in Python that is designed to be easy to use. It resembles
16080 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
16081 which is a system and language independent Distributed Object Technology
16082 and has much more to offer than Pyro or RMI. Pyro 3.x is no
16083 longer maintained. New projects should use Pyro4 instead, which
16084 is the new Pyro version that is actively developed.")
16085 (license license:expat)))
16086
16087 (define-public python2-scientific
16088 (package
16089 (name "python2-scientific")
16090 (version "2.9.4")
16091 (source
16092 (origin
16093 (method git-fetch)
16094 (uri (git-reference
16095 (url "https://github.com/khinsen/ScientificPython")
16096 (commit (string-append "rel" version))))
16097 (file-name (git-file-name name version))
16098 (sha256
16099 (base32
16100 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
16101 (build-system python-build-system)
16102 (inputs
16103 `(("netcdf" ,netcdf)))
16104 (propagated-inputs
16105 `(("python-numpy" ,python2-numpy-1.8)
16106 ("python-pyro" ,python2-pyro)))
16107 (arguments
16108 ;; ScientificPython is not compatible with Python 3
16109 `(#:python ,python-2
16110 #:tests? #f ; No test suite
16111 #:phases
16112 (modify-phases %standard-phases
16113 (replace 'build
16114 (lambda* (#:key inputs #:allow-other-keys)
16115 (invoke "python" "setup.py" "build"
16116 (string-append "--netcdf_prefix="
16117 (assoc-ref inputs "netcdf"))))))))
16118 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
16119 (synopsis "Python modules for scientific computing")
16120 (description "ScientificPython is a collection of Python modules that are
16121 useful for scientific computing. Most modules are rather general (Geometry,
16122 physical units, automatic derivatives, ...) whereas others are more
16123 domain-specific (e.g. netCDF and PDB support). The library is currently
16124 not actively maintained and works only with Python 2 and NumPy < 1.9.")
16125 (license license:cecill-c)))
16126
16127 (define-public python2-mmtk
16128 (package
16129 (name "python2-mmtk")
16130 (version "2.7.12")
16131 (source
16132 (origin
16133 (method git-fetch)
16134 (uri (git-reference
16135 (url "https://github.com/khinsen/MMTK")
16136 (commit (string-append "rel" version))))
16137 (file-name (git-file-name name version))
16138 (sha256
16139 (base32
16140 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
16141 (build-system python-build-system)
16142 (native-inputs
16143 `(("netcdf" ,netcdf)))
16144 (propagated-inputs
16145 `(("python-scientific" ,python2-scientific)
16146 ("python-tkinter" ,python-2 "tk")))
16147 (arguments
16148 `(#:python ,python-2
16149 #:tests? #f
16150 #:phases
16151 (modify-phases %standard-phases
16152 (add-before 'build 'includes-from-scientific
16153 (lambda* (#:key inputs #:allow-other-keys)
16154 (mkdir-p "Include/Scientific")
16155 (copy-recursively
16156 (string-append
16157 (assoc-ref inputs "python-scientific")
16158 "/include/python2.7/Scientific")
16159 "Include/Scientific"))))))
16160 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
16161 (synopsis "Python library for molecular simulation")
16162 (description "MMTK is a library for molecular simulations with an emphasis
16163 on biomolecules. It provides widely used methods such as Molecular Dynamics
16164 and normal mode analysis, but also basic routines for implementing new methods
16165 for simulation and analysis. The library is currently not actively maintained
16166 and works only with Python 2 and NumPy < 1.9.")
16167 (license license:cecill-c)))
16168
16169 (define-public python-phonenumbers
16170 (package
16171 (name "python-phonenumbers")
16172 (version "8.9.1")
16173 (source
16174 (origin
16175 (method url-fetch)
16176 (uri (pypi-uri "phonenumbers" version))
16177 (sha256
16178 (base32
16179 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
16180 (build-system python-build-system)
16181 (home-page
16182 "https://github.com/daviddrysdale/python-phonenumbers")
16183 (synopsis
16184 "Python library for dealing with international phone numbers")
16185 (description
16186 "This package provides a Python port of Google's libphonenumber library.")
16187 (license license:asl2.0)))
16188
16189 (define-public python2-phonenumbers
16190 (package-with-python2 python-phonenumbers))
16191
16192 (define-public python-send2trash
16193 (package
16194 (name "python-send2trash")
16195 (version "1.5.0")
16196 (source
16197 (origin (method git-fetch)
16198 ;; Source tarball on PyPI doesn't include tests.
16199 (uri (git-reference
16200 (url "https://github.com/hsoft/send2trash.git")
16201 (commit version)))
16202 (file-name (git-file-name name version))
16203 (sha256
16204 (base32
16205 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
16206 (build-system python-build-system)
16207 (arguments
16208 '(#:phases
16209 (modify-phases %standard-phases
16210 (add-before 'check 'pre-check
16211 (lambda _
16212 (mkdir-p "/tmp/foo")
16213 (setenv "HOME" "/tmp/foo")
16214 #t)))))
16215 (home-page "https://github.com/hsoft/send2trash")
16216 (synopsis "Send files to the user's @file{~/Trash} directory")
16217 (description "This package provides a Python library to send files to the
16218 user's @file{~/Trash} directory.")
16219 (properties `((python2-variant . ,(delay python2-send2trash))))
16220 (license license:bsd-3)))
16221
16222 (define-public python2-send2trash
16223 (package
16224 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
16225 (arguments
16226 (substitute-keyword-arguments (package-arguments python-send2trash)
16227 ((#:phases phases)
16228 `(modify-phases ,phases
16229 (add-before 'check 'setenv
16230 (lambda _
16231 (setenv "PYTHONPATH"
16232 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
16233 #t))))))))
16234
16235 (define-public python-yapf
16236 (package
16237 (name "python-yapf")
16238 (version "0.29.0")
16239 (source
16240 (origin
16241 (method url-fetch)
16242 (uri (pypi-uri "yapf" version))
16243 (sha256
16244 (base32
16245 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
16246 (build-system python-build-system)
16247 (home-page "https://github.com/google/yapf")
16248 (synopsis "Formatter for Python code")
16249 (description "YAPF is a formatter for Python code. It's based off of
16250 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
16251 takes the code and reformats it to the best formatting that conforms to the
16252 style guide, even if the original code didn't violate the style guide.")
16253 (license license:asl2.0)))
16254
16255 (define-public python2-yapf
16256 (package-with-python2 python-yapf))
16257
16258 (define-public python-gyp
16259 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16260 (revision "0"))
16261 (package
16262 (name "python-gyp")
16263 ;; Google does not release versions,
16264 ;; based on second most recent commit date.
16265 (version (git-version "0.0.0" revision commit))
16266 (source
16267 (origin
16268 ;; Google does not release tarballs,
16269 ;; git checkout is needed.
16270 (method git-fetch)
16271 (uri (git-reference
16272 (url "https://chromium.googlesource.com/external/gyp")
16273 (commit commit)))
16274 (file-name (git-file-name name version))
16275 (sha256
16276 (base32
16277 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
16278 (build-system python-build-system)
16279 (home-page "https://gyp.gsrc.io/")
16280 (synopsis "GYP is a Meta-Build system")
16281 (description
16282 "GYP builds build systems for large, cross platform applications.
16283 It can be used to generate XCode projects, Visual Studio projects, Ninja build
16284 files, and Makefiles.")
16285 (license license:bsd-3))))
16286
16287 (define-public python2-gyp
16288 (package-with-python2 python-gyp))
16289
16290 (define-public python-whatever
16291 (package
16292 (name "python-whatever")
16293 (version "0.6")
16294 (source
16295 (origin
16296 (method git-fetch)
16297 (uri (git-reference
16298 (url "https://github.com/Suor/whatever")
16299 (commit version)))
16300 (file-name (git-file-name name version))
16301 (sha256
16302 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16303 (build-system python-build-system)
16304 (arguments
16305 `(#:phases
16306 (modify-phases %standard-phases
16307 (replace 'check
16308 (lambda _
16309 (invoke "py.test"))))))
16310 (native-inputs
16311 `(("python-pytest" ,python-pytest)))
16312 (home-page "http://github.com/Suor/whatever")
16313 (synopsis "Make anonymous functions by partial application of operators")
16314 (description "@code{whatever} provides an easy way to make anonymous
16315 functions by partial application of operators.")
16316 (license license:bsd-3)))
16317
16318 (define-public python2-whatever
16319 (package-with-python2 python-whatever))
16320
16321 (define-public python-funcy
16322 (package
16323 (name "python-funcy")
16324 (version "1.11")
16325 (source
16326 (origin
16327 (method git-fetch)
16328 (uri (git-reference
16329 (url "https://github.com/Suor/funcy.git")
16330 (commit version)))
16331 (sha256
16332 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16333 (file-name (git-file-name name version))))
16334 (build-system python-build-system)
16335 (arguments
16336 `(#:phases
16337 (modify-phases %standard-phases
16338 (replace 'check
16339 (lambda _
16340 (invoke "py.test"))))))
16341 (native-inputs
16342 `(("python-pytest" ,python-pytest)
16343 ("python-whatever" ,python-whatever)))
16344 (home-page "http://github.com/Suor/funcy")
16345 (synopsis "Functional tools")
16346 (description "@code{funcy} is a library that provides functional tools.
16347 Examples are:
16348 @enumerate
16349 @item merge - Merges collections of the same type
16350 @item walk - Type-preserving map
16351 @item select - Selects a part of a collection
16352 @item take - Takes the first n items of a collection
16353 @item first - Takes the first item of a collection
16354 @item remove - Predicated-removes items of a collection
16355 @item concat - Concatenates two collections
16356 @item flatten - Flattens a collection with subcollections
16357 @item distinct - Returns only distinct items
16358 @item split - Predicated-splits a collection
16359 @item split_at - Splits a collection at a given item
16360 @item group_by - Groups items by group
16361 @item pairwise - Pairs off adjacent items
16362 @item partial - Partially-applies a function
16363 @item curry - Curries a function
16364 @item compose - Composes functions
16365 @item complement - Complements a predicate
16366 @item all_fn - \"all\" with predicate
16367 @end enumerate")
16368 (license license:bsd-3)))
16369
16370 (define-public python2-funcy
16371 (package-with-python2 python-funcy))
16372
16373 (define-public python-isoweek
16374 (package
16375 (name "python-isoweek")
16376 (version "1.3.3")
16377 (source
16378 (origin
16379 (method url-fetch)
16380 (uri (pypi-uri "isoweek" version))
16381 (sha256
16382 (base32
16383 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16384 (build-system python-build-system)
16385 (home-page "https://github.com/gisle/isoweek")
16386 (synopsis "Objects representing a week")
16387 (description "The @code{isoweek} module provide the class Week that
16388 implements the week definition of ISO 8601. This standard also defines
16389 a notation for identifying weeks; yyyyWww (where the W is a literal).
16390 Week instances stringify to this form.")
16391 (license license:bsd-3)))
16392
16393 (define-public python2-isoweek
16394 (package-with-python2 python-isoweek))
16395
16396 (define-public python-tokenize-rt
16397 (package
16398 (name "python-tokenize-rt")
16399 (version "2.0.1")
16400 (source
16401 (origin
16402 (method url-fetch)
16403 (uri (pypi-uri "tokenize-rt" version))
16404 (sha256
16405 (base32
16406 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16407 (build-system python-build-system)
16408 (home-page "https://github.com/asottile/tokenize-rt")
16409 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16410 (description
16411 "This Python library is a wrapper around @code{tokenize} from the Python
16412 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16413 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16414 and @code{tokens_to_src} to roundtrip.")
16415 (license license:expat)))
16416
16417 (define-public python-future-fstrings
16418 (package
16419 (name "python-future-fstrings")
16420 (version "0.4.1")
16421 (source
16422 (origin
16423 (method url-fetch)
16424 (uri (pypi-uri "future_fstrings" version))
16425 (sha256
16426 (base32
16427 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16428 (build-system python-build-system)
16429 (propagated-inputs
16430 `(("python-tokenize-rt" ,python-tokenize-rt)))
16431 (home-page "https://github.com/asottile/future-fstrings")
16432 (synopsis "Backport of fstrings to Python < 3.6")
16433 (description
16434 "This package provides a UTF-8 compatible encoding
16435 @code{future_fstrings}, which performs source manipulation. It decodes the
16436 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16437 @code{f} strings.")
16438 (license license:expat)))
16439
16440 (define-public python-typed-ast
16441 (package
16442 (name "python-typed-ast")
16443 (version "1.4.0")
16444 (source
16445 (origin
16446 (method git-fetch)
16447 (uri (git-reference
16448 (url "https://github.com/python/typed_ast.git")
16449 (commit version)))
16450 (sha256
16451 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16452 (file-name (git-file-name name version))))
16453 (build-system python-build-system)
16454 (arguments
16455 `(#:modules ((guix build utils)
16456 (guix build python-build-system)
16457 (ice-9 ftw)
16458 (srfi srfi-1)
16459 (srfi srfi-26))
16460 #:phases
16461 (modify-phases %standard-phases
16462 (replace 'check
16463 (lambda _
16464 (let ((cwd (getcwd)))
16465 (setenv "PYTHONPATH"
16466 (string-append cwd "/build/"
16467 (find (cut string-prefix? "lib" <>)
16468 (scandir (string-append cwd "/build")))
16469 ":"
16470 (getenv "PYTHONPATH"))))
16471 (invoke "pytest")
16472 #t)))))
16473 (native-inputs `(("python-pytest" ,python-pytest)))
16474 (home-page "https://github.com/python/typed_ast")
16475 (synopsis "Fork of Python @code{ast} modules with type comment support")
16476 (description "This package provides a parser similar to the standard
16477 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16478 include PEP 484 type comments and are independent of the version of Python
16479 under which they are run. The @code{typed_ast} parsers produce the standard
16480 Python AST (plus type comments), and are both fast and correct, as they are
16481 based on the CPython 2.7 and 3.7 parsers.")
16482 ;; See the file "LICENSE" for the details.
16483 (license (list license:psfl
16484 license:asl2.0
16485 license:expat)))) ;ast27/Parser/spark.py
16486
16487 (define-public python-typing
16488 (package
16489 (name "python-typing")
16490 (version "3.7.4.1")
16491 (source
16492 (origin
16493 (method url-fetch)
16494 (uri (pypi-uri "typing" version))
16495 (sha256
16496 (base32
16497 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16498 (build-system python-build-system)
16499 (home-page "https://docs.python.org/3/library/typing.html")
16500 (synopsis "Type hints for Python")
16501 (description "This is a backport of the standard library @code{typing}
16502 module to Python versions older than 3.5. Typing defines a standard notation
16503 for Python function and variable type annotations. The notation can be used
16504 for documenting code in a concise, standard format, and it has been designed
16505 to also be used by static and runtime type checkers, static analyzers, IDEs
16506 and other tools.")
16507 (license license:psfl)))
16508
16509 (define-public python2-typing
16510 (package-with-python2 python-typing))
16511
16512 (define-public python-typing-extensions
16513 (package
16514 (name "python-typing-extensions")
16515 (version "3.7.4.1")
16516 (source
16517 (origin
16518 (method url-fetch)
16519 (uri (pypi-uri "typing_extensions" version))
16520 (sha256
16521 (base32
16522 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16523 (build-system python-build-system)
16524 (home-page
16525 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16526 (synopsis "Experimental type hints for Python")
16527 (description
16528 "The typing_extensions module contains additional @code{typing} hints not
16529 yet present in the of the @code{typing} standard library.
16530 Included are implementations of:
16531 @enumerate
16532 @item ClassVar
16533 @item ContextManager
16534 @item Counter
16535 @item DefaultDict
16536 @item Deque
16537 @item NewType
16538 @item NoReturn
16539 @item overload
16540 @item Protocol
16541 @item runtime
16542 @item Text
16543 @item Type
16544 @item TYPE_CHECKING
16545 @item AsyncGenerator
16546 @end enumerate\n")
16547 (license license:psfl)))
16548
16549 (define-public bpython
16550 (package
16551 (name "bpython")
16552 (version "0.18")
16553 (source
16554 (origin
16555 (method url-fetch)
16556 (uri (pypi-uri "bpython" version))
16557 (sha256
16558 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16559 (build-system python-build-system)
16560 (arguments
16561 `(#:phases
16562 (modify-phases %standard-phases
16563 (add-after 'unpack 'remove-failing-test
16564 (lambda _
16565 ;; Remove failing test. FIXME: make it pass
16566 (delete-file "bpython/test/test_args.py")
16567 #t))
16568 (add-after 'wrap 'add-aliases
16569 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16570 (lambda* (#:key outputs #:allow-other-keys)
16571 (let ((out (assoc-ref outputs "out")))
16572 (for-each
16573 (lambda (old new)
16574 (symlink old (string-append out "/bin/" new)))
16575 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16576 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16577 #t)))))
16578 (propagated-inputs
16579 `(("python-pygments" ,python-pygments)
16580 ("python-requests" ,python-requests)
16581 ("python-babel" ,python-babel) ; optional, for internationalization
16582 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16583 ("python-greenlet" ,python-greenlet)
16584 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16585 ("python-six" ,python-six)))
16586 (native-inputs
16587 `(("python-sphinx" ,python-sphinx)
16588 ("python-mock" ,python-mock)))
16589 (home-page "https://bpython-interpreter.org/")
16590 (synopsis "Fancy interface to the Python interpreter")
16591 (description "Bpython is a fancy interface to the Python
16592 interpreter. bpython's main features are
16593
16594 @enumerate
16595 @item in-line syntax highlighting,
16596 @item readline-like autocomplete with suggestions displayed as you type,
16597 @item expected parameter list for any Python function,
16598 @item \"rewind\" function to pop the last line of code from memory and
16599 re-evaluate,
16600 @item send the code you've entered off to a pastebin,
16601 @item save the code you've entered to a file, and
16602 @item auto-indentation.
16603 @end enumerate")
16604 (license license:expat)))
16605
16606 (define-public bpython2
16607 (let ((base (package-with-python2
16608 (strip-python2-variant bpython))))
16609 (package (inherit base)
16610 (name "bpython2")
16611 (arguments
16612 `(#:python ,python-2
16613 #:phases
16614 (modify-phases %standard-phases
16615 (add-after 'unpack 'remove-failing-test
16616 (lambda _
16617 ;; Remove failing test. FIXME: make it pass
16618 (delete-file "bpython/test/test_args.py")
16619 ;; Disable failing test-cases (renaming inhibits they are
16620 ;; discovered)
16621 (substitute* "bpython/test/test_curtsies_repl.py"
16622 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16623 (string-append a "xxx_off_" b))
16624 (("^(\\s*def )(test_complex\\W)" _ a b)
16625 (string-append a "xxx_off_" b)))
16626 #t))
16627 (add-before 'build 'rename-scripts
16628 ;; rename the scripts to bypthon2, bpdb2, etc.
16629 (lambda _
16630 (substitute* "setup.py"
16631 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16632 (string-append name "2" rest "\n"))
16633 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16634 (string-append name "2" (or sub "") rest "\n")))
16635 #t))))))))
16636
16637 (define-public python-pyinotify
16638 (package
16639 (name "python-pyinotify")
16640 (version "0.9.6")
16641 (source (origin
16642 (method url-fetch)
16643 (uri (pypi-uri "pyinotify" version))
16644 (sha256
16645 (base32
16646 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16647 (build-system python-build-system)
16648 (arguments `(#:tests? #f)) ;no tests
16649 (home-page "https://github.com/seb-m/pyinotify")
16650 (synopsis "Python library for monitoring inotify events")
16651 (description
16652 "@code{pyinotify} provides a Python interface for monitoring
16653 file system events on Linux.")
16654 (license license:expat)))
16655
16656 (define-public python2-pyinotify
16657 (package-with-python2 python-pyinotify))
16658
16659 ;; Ada parser uses this version.
16660 (define-public python2-quex-0.67.3
16661 (package
16662 (name "python2-quex")
16663 (version "0.67.3")
16664 (source
16665 (origin
16666 (method url-fetch)
16667 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16668 (version-major+minor version)
16669 "/quex-" version ".zip"))
16670 (sha256
16671 (base32
16672 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16673 (build-system python-build-system)
16674 (native-inputs
16675 `(("unzip" ,unzip)))
16676 (arguments
16677 `(#:python ,python-2
16678 #:tests? #f
16679 #:phases
16680 (modify-phases %standard-phases
16681 (delete 'configure)
16682 (delete 'build)
16683 (replace 'install
16684 (lambda* (#:key outputs #:allow-other-keys)
16685 (let* ((out (assoc-ref outputs "out"))
16686 (share/quex (string-append out "/share/quex"))
16687 (bin (string-append out "/bin")))
16688 (copy-recursively "." share/quex)
16689 (mkdir-p bin)
16690 (symlink (string-append share/quex "/quex-exe.py")
16691 (string-append bin "/quex"))
16692 #t))))))
16693 (native-search-paths
16694 (list (search-path-specification
16695 (variable "QUEX_PATH")
16696 (files '("share/quex")))))
16697 (home-page "http://quex.sourceforge.net/")
16698 (synopsis "Lexical analyzer generator in Python")
16699 (description "@code{quex} is a lexical analyzer generator in Python.")
16700 (license license:lgpl2.1+))) ; Non-military
16701
16702 (define-public python2-quex
16703 (package (inherit python2-quex-0.67.3)
16704 (name "python2-quex")
16705 (version "0.68.1")
16706 (source
16707 (origin
16708 (method url-fetch)
16709 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16710 (sha256
16711 (base32
16712 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16713 (file-name (string-append name "-" version ".tar.gz"))))))
16714
16715 (define-public python-more-itertools
16716 (package
16717 (name "python-more-itertools")
16718 (version "8.2.0")
16719 (source
16720 (origin
16721 (method url-fetch)
16722 (uri (pypi-uri "more-itertools" version))
16723 (sha256
16724 (base32
16725 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16726 (build-system python-build-system)
16727 (home-page "https://github.com/erikrose/more-itertools")
16728 (synopsis "More routines for operating on iterables, beyond itertools")
16729 (description "Python's built-in @code{itertools} module implements a
16730 number of iterator building blocks inspired by constructs from APL, Haskell,
16731 and SML. @code{more-itertools} includes additional building blocks for
16732 working with iterables.")
16733 (properties `((python2-variant . ,(delay python2-more-itertools))))
16734 (license license:expat)))
16735
16736 ;; The 5.x series are the last versions supporting Python 2.7.
16737 (define-public python2-more-itertools
16738 (package
16739 (inherit python-more-itertools)
16740 (name "python2-more-itertools")
16741 (version "5.0.0")
16742 (source (origin
16743 (method url-fetch)
16744 (uri (pypi-uri "more-itertools" version))
16745 (sha256
16746 (base32
16747 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16748 (arguments
16749 `(#:python ,python-2))
16750 (propagated-inputs
16751 `(("python2-six" ,python2-six-bootstrap)))))
16752
16753 (define-public python-latexcodec
16754 (package
16755 (name "python-latexcodec")
16756 (version "1.0.7")
16757 (source
16758 (origin
16759 (method url-fetch)
16760 (uri (pypi-uri "latexcodec" version))
16761 (sha256
16762 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16763 (build-system python-build-system)
16764 (inputs
16765 `(("python-six" ,python-six)))
16766 (home-page "https://readthedocs.org/projects/latexcodec/")
16767 (synopsis "Work with LaTeX code in Python")
16768 (description "Lexer and codec to work with LaTeX code in Python.")
16769 (license license:expat)))
16770
16771 (define-public python-pybtex
16772 (package
16773 (name "python-pybtex")
16774 (version "0.22.2")
16775 (source
16776 (origin
16777 (method url-fetch)
16778 (uri (pypi-uri "pybtex" version))
16779 (sha256
16780 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16781 (build-system python-build-system)
16782 (native-inputs
16783 `(("python-nose" ,python-nose)))
16784 (inputs
16785 `(("python-latexcodec" ,python-latexcodec)
16786 ("python-pyyaml" ,python-pyyaml)
16787 ("python-six" ,python-six)))
16788 (arguments
16789 `(#:test-target "nosetests"))
16790 (home-page "https://pybtex.org/")
16791 (synopsis "BibTeX-compatible bibliography processor")
16792 (description "Pybtex is a BibTeX-compatible bibliography processor written
16793 in Python. You can simply type pybtex instead of bibtex.")
16794 (license license:expat)))
16795
16796 (define-public python-onetimepass
16797 (package
16798 (name "python-onetimepass")
16799 (version "1.0.1")
16800 (source
16801 (origin
16802 (method url-fetch)
16803 (uri (pypi-uri "onetimepass" version))
16804 (sha256
16805 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16806 (build-system python-build-system)
16807 (propagated-inputs `(("python-six" ,python-six)))
16808 (home-page "https://github.com/tadeck/onetimepass/")
16809 (synopsis "One-time password library")
16810 (description "Python one-time password library for HMAC-based (HOTP) and
16811 time-based (TOTP) passwords.")
16812 (license license:expat)))
16813
16814 (define-public python-parso
16815 (package
16816 (name "python-parso")
16817 (version "0.7.0")
16818 (source
16819 (origin
16820 (method url-fetch)
16821 (uri (pypi-uri "parso" version))
16822 (sha256
16823 (base32
16824 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16825 (native-inputs
16826 `(("python-pytest" ,python-pytest)))
16827 (build-system python-build-system)
16828 (arguments
16829 `(#:phases (modify-phases %standard-phases
16830 (replace 'check
16831 (lambda _ (invoke "pytest" "-vv"))))))
16832 (home-page "https://github.com/davidhalter/parso")
16833 (synopsis "Python Parser")
16834 (description "Parso is a Python parser that supports error recovery and
16835 round-trip parsing for different Python versions (in multiple Python versions).
16836 Parso is also able to list multiple syntax errors in your Python file.")
16837 (license license:expat)))
16838
16839 (define-public python2-parso
16840 (package-with-python2 python-parso))
16841
16842 (define-public python-async-generator
16843 (package
16844 (name "python-async-generator")
16845 (version "1.10")
16846 (source
16847 (origin
16848 (method url-fetch)
16849 (uri (pypi-uri "async_generator" version))
16850 (sha256
16851 (base32
16852 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16853 (build-system python-build-system)
16854 (native-inputs
16855 `(("python-pytest" ,python-pytest)))
16856 (home-page "https://github.com/python-trio/async_generator")
16857 (synopsis "Async generators and context managers for Python 3.5+")
16858 (description "@code{async_generator} back-ports Python 3.6's native async
16859 generators and Python 3.7's context managers into Python 3.5.")
16860 ;; Dual licensed.
16861 (license (list license:expat license:asl2.0))))
16862
16863 (define-public python-async-timeout
16864 (package
16865 (name "python-async-timeout")
16866 (version "3.0.1")
16867 (source
16868 (origin
16869 (method url-fetch)
16870 (uri (pypi-uri "async-timeout" version))
16871 (sha256
16872 (base32
16873 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16874 (build-system python-build-system)
16875 (home-page "https://github.com/aio-libs/async_timeout/")
16876 (synopsis "Timeout context manager for asyncio programs")
16877 (description "@code{async-timeout} provides a timeout timeout context
16878 manager compatible with @code{asyncio}.")
16879 (license license:asl2.0)))
16880
16881 (define-public python-glob2
16882 (package
16883 (name "python-glob2")
16884 (version "0.7")
16885 (source
16886 (origin
16887 (method git-fetch)
16888 (uri (git-reference
16889 (url "https://github.com/miracle2k/python-glob2.git")
16890 (commit (string-append "v" version))))
16891 (file-name (git-file-name name version))
16892 (sha256
16893 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16894 (build-system python-build-system)
16895 (home-page "https://github.com/miracle2k/python-glob2/")
16896 (synopsis "Extended Version of the python buildin glob module")
16897 (description "This is an extended version of the Python
16898 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16899 adds:
16900
16901 @itemize
16902 @item The ability to capture the text matched by glob patterns, and return
16903 those matches alongside the file names.
16904 @item A recursive @code{**} globbing syntax, akin for example to the
16905 @code{globstar} option of Bash.
16906 @item The ability to replace the file system functions used, in order to glob
16907 on virtual file systems.
16908 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16909 @end itemize
16910
16911 Glob2 currently based on the glob code from Python 3.3.1.")
16912 (license license:bsd-2)))
16913
16914 (define-public python2-glob2
16915 (package-with-python2 python-glob2))
16916
16917 (define-public python-gipc
16918 (package
16919 (name "python-gipc")
16920 (version "0.6.0")
16921 (source
16922 (origin
16923 (method url-fetch)
16924 (uri (pypi-uri "gipc" version ".zip"))
16925 (sha256
16926 (base32
16927 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16928 (build-system python-build-system)
16929 (native-inputs
16930 `(("unzip" ,unzip)))
16931 (propagated-inputs
16932 `(("python-gevent" ,python-gevent)))
16933 (home-page "https://gehrcke.de/gipc/")
16934 (synopsis "Child process management in the context of gevent")
16935 (description "Usage of Python's multiprocessing package in a
16936 gevent-powered application may raise problems. With @code{gipc},
16937 process-based child processes can safely be created anywhere within a
16938 gevent-powered application.")
16939 (license license:expat)))
16940
16941 (define-public python2-gipc
16942 (package-with-python2 python-gipc))
16943
16944 (define-public python-fusepy
16945 (package
16946 (name "python-fusepy")
16947 (version "2.0.4")
16948 (source
16949 (origin
16950 (method url-fetch)
16951 (uri (pypi-uri "fusepy" version))
16952 (sha256
16953 (base32
16954 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16955 (build-system python-build-system)
16956 (arguments
16957 `(#:phases
16958 (modify-phases %standard-phases
16959 (add-before 'build 'set-library-file-name
16960 (lambda* (#:key inputs #:allow-other-keys)
16961 (let ((fuse (assoc-ref inputs "fuse")))
16962 (substitute* "fuse.py"
16963 (("find_library\\('fuse'\\)")
16964 (string-append "'" fuse "/lib/libfuse.so'")))
16965 #t))))))
16966 (propagated-inputs
16967 `(("fuse" ,fuse)))
16968 (home-page "https://github.com/fusepy/fusepy")
16969 (synopsis "Simple ctypes bindings for FUSE")
16970 (description "Python module that provides a simple interface to FUSE and
16971 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16972 (license license:isc)))
16973
16974 (define-public python2-fusepy
16975 (package-with-python2 python-fusepy))
16976
16977 (define-public python-fusepyng
16978 (package
16979 (name "python-fusepyng")
16980 (version "1.0.7")
16981 (source
16982 (origin
16983 (method url-fetch)
16984 (uri (pypi-uri "fusepyng" version))
16985 (sha256
16986 (base32
16987 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16988 (build-system python-build-system)
16989 (arguments
16990 '(#:phases
16991 (modify-phases %standard-phases
16992 (add-after 'unpack 'set-libfuse-path
16993 (lambda* (#:key inputs #:allow-other-keys)
16994 (let ((fuse (assoc-ref inputs "fuse")))
16995 (substitute* "fusepyng.py"
16996 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16997 (string-append "\"" fuse "/lib/libfuse.so\""))))
16998 #t)))))
16999 (inputs
17000 `(("fuse" ,fuse)))
17001 (propagated-inputs
17002 `(("python-paramiko" ,python-paramiko)))
17003 (home-page "https://github.com/rianhunter/fusepyng")
17004 (synopsis "Simple ctypes bindings for FUSE")
17005 (description "@code{fusepyng} is a Python module that provides a simple
17006 interface to FUSE on various operating systems. It's just one file and is
17007 implemented using @code{ctypes}.")
17008 (license license:isc)))
17009
17010 (define-public python2-gdrivefs
17011 (package
17012 (name "python2-gdrivefs")
17013 (version "0.14.9")
17014 (source
17015 (origin
17016 (method url-fetch)
17017 (uri (pypi-uri "gdrivefs" version))
17018 (sha256
17019 (base32
17020 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
17021 (build-system python-build-system)
17022 (arguments
17023 `(#:python ,python-2
17024 #:phases
17025 (modify-phases %standard-phases
17026 (add-before 'build 'patch-setup-py
17027 (lambda _
17028 ;; Update requirements from dependency==version
17029 ;; to dependency>=version
17030 (substitute* "gdrivefs/resources/requirements.txt"
17031 (("==") ">="))
17032 #t)))))
17033 (native-inputs
17034 `(("python2-gipc" ,python2-gipc)
17035 ("python2-gevent" ,python2-gevent)
17036 ("python2-greenlet" ,python2-greenlet)
17037 ("python2-httplib2" ,python2-httplib2)
17038 ("python2-uritemplate" ,python2-uritemplate)
17039 ("python2-oauth2client" ,python2-oauth2client)
17040 ("python2-six" ,python2-six)))
17041 (propagated-inputs
17042 `(("python2-dateutil" ,python2-dateutil)
17043 ("python2-fusepy" ,python2-fusepy)
17044 ("python2-google-api-client" ,python2-google-api-client)))
17045 (home-page "https://github.com/dsoprea/GDriveFS")
17046 (synopsis "Mount Google Drive as a local file system")
17047 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
17048 under Python 2.7.")
17049 (license license:gpl2)))
17050
17051 (define-public python-userspacefs
17052 (package
17053 (name "python-userspacefs")
17054 (version "1.0.13")
17055 (source
17056 (origin
17057 (method url-fetch)
17058 (uri (pypi-uri "userspacefs" version))
17059 (sha256
17060 (base32
17061 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
17062 (build-system python-build-system)
17063 (propagated-inputs
17064 `(("python-fusepyng" ,python-fusepyng)))
17065 (home-page "https://github.com/rianhunter/userspacefs")
17066 (synopsis "User-space file systems for Python")
17067 (description
17068 "@code{userspacefs} is a library that allows you to easily write
17069 user-space file systems in Python.")
17070 (license license:gpl3+)))
17071
17072 (define-public pybind11
17073 (package
17074 (name "pybind11")
17075 (version "2.4.3")
17076 (source (origin
17077 (method git-fetch)
17078 (uri (git-reference
17079 (url "https://github.com/pybind/pybind11.git")
17080 (commit (string-append "v" version))))
17081 (sha256
17082 (base32
17083 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
17084 (file-name (git-file-name name version))))
17085 (build-system cmake-build-system)
17086 (native-inputs
17087 `(("python" ,python-wrapper)
17088
17089 ;; The following dependencies are used for tests.
17090 ("python-pytest" ,python-pytest)
17091 ("catch" ,catch-framework2-1)
17092 ("eigen" ,eigen)))
17093 (arguments
17094 `(#:configure-flags
17095 (list (string-append "-DCATCH_INCLUDE_DIR="
17096 (assoc-ref %build-inputs "catch")
17097 "/include/catch"))
17098
17099 #:phases (modify-phases %standard-phases
17100 (add-after 'install 'install-python
17101 (lambda* (#:key outputs #:allow-other-keys)
17102 (let ((out (assoc-ref outputs "out")))
17103 (with-directory-excursion "../source"
17104 (setenv "PYBIND11_USE_CMAKE" "yes")
17105 (invoke "python" "setup.py" "install"
17106 "--single-version-externally-managed"
17107 "--root=/"
17108 (string-append "--prefix=" out)))))))
17109
17110 #:test-target "check"))
17111 (home-page "https://github.com/pybind/pybind11/")
17112 (synopsis "Seamless operability between C++11 and Python")
17113 (description
17114 "@code{pybind11} is a lightweight header-only library that exposes C++
17115 types in Python and vice versa, mainly to create Python bindings of existing
17116 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
17117 library: to minimize boilerplate code in traditional extension modules by
17118 inferring type information using compile-time introspection.")
17119 (license license:bsd-3)))
17120
17121 (define-public python-fasteners
17122 (package
17123 (name "python-fasteners")
17124 (version "0.14.1")
17125 (source
17126 (origin
17127 (method url-fetch)
17128 (uri (pypi-uri "fasteners" version))
17129 (sha256
17130 (base32
17131 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
17132 (build-system python-build-system)
17133 (propagated-inputs
17134 `(("python-monotonic" ,python-monotonic)
17135 ("python-six" ,python-six)
17136 ("python-testtools" ,python-testtools)))
17137 (home-page "https://github.com/harlowja/fasteners")
17138 (synopsis "Python package that provides useful locks")
17139 (description
17140 "This package provides a Python program that provides following locks:
17141
17142 @itemize
17143 @item Locking decorator
17144 @item Reader-writer locks
17145 @item Inter-process locks
17146 @item Generic helpers
17147 @end itemize\n")
17148 (properties `((python2-variant . ,(delay python2-fasteners))))
17149 (license license:asl2.0)))
17150
17151 (define-public python2-fasteners
17152 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
17153 (package
17154 (inherit base)
17155 (propagated-inputs
17156 `(("python2-futures" ,python2-futures)
17157 ,@(package-propagated-inputs base))))))
17158
17159 (define-public python-requests-file
17160 (package
17161 (name "python-requests-file")
17162 (version "1.4.3")
17163 (source
17164 (origin
17165 (method url-fetch)
17166 (uri (pypi-uri "requests-file" version))
17167 (sha256
17168 (base32
17169 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
17170 (build-system python-build-system)
17171 (propagated-inputs
17172 `(("python-requests" ,python-requests)
17173 ("python-six" ,python-six)))
17174 (home-page
17175 "https://github.com/dashea/requests-file")
17176 (synopsis "File transport adapter for Requests")
17177 (description
17178 "Requests-File is a transport adapter for use with the Requests Python
17179 library to allow local file system access via @code{file://} URLs.")
17180 (license license:asl2.0)))
17181
17182 (define-public python2-requests-file
17183 (package-with-python2 python-requests-file))
17184
17185 (define-public python-tldextract
17186 (package
17187 (name "python-tldextract")
17188 (version "2.2.0")
17189 (source
17190 (origin
17191 (method url-fetch)
17192 (uri (pypi-uri "tldextract" version))
17193 (sha256
17194 (base32
17195 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
17196 (build-system python-build-system)
17197 (native-inputs
17198 `(("python-pytest" ,python-pytest)
17199 ("python-responses" ,python-responses)))
17200 (propagated-inputs
17201 `(("python-idna" ,python-idna)
17202 ("python-requests" ,python-requests)
17203 ("python-requests-file" ,python-requests-file)))
17204 (home-page
17205 "https://github.com/john-kurkowski/tldextract")
17206 (synopsis
17207 "Separate the TLD from the registered domain and subdomains of a URL")
17208 (description
17209 "TLDExtract accurately separates the TLD from the registered domain and
17210 subdomains of a URL, using the Public Suffix List. By default, this includes
17211 the public ICANN TLDs and their exceptions. It can optionally support the
17212 Public Suffix List's private domains as well.")
17213 (license license:bsd-3)))
17214
17215 (define-public python2-tldextract
17216 (package-with-python2 python-tldextract))
17217
17218 (define-public python-pynamecheap
17219 (package
17220 (name "python-pynamecheap")
17221 (version "0.0.3")
17222 (source
17223 (origin
17224 (method url-fetch)
17225 (uri (pypi-uri "PyNamecheap" version))
17226 (sha256
17227 (base32
17228 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
17229 (build-system python-build-system)
17230 (propagated-inputs
17231 `(("python-requests" ,python-requests)))
17232 (home-page
17233 "https://github.com/Bemmu/PyNamecheap")
17234 (synopsis
17235 "Namecheap API client in Python")
17236 (description
17237 "PyNamecheap is a Namecheap API client in Python.")
17238 (license license:expat)))
17239
17240 (define-public python2-pynamecheap
17241 (package-with-python2 python-pynamecheap))
17242
17243 (define-public python-dns-lexicon
17244 (package
17245 (name "python-dns-lexicon")
17246 (version "2.4.0")
17247 (source
17248 (origin
17249 (method url-fetch)
17250 (uri (pypi-uri "dns-lexicon" version))
17251 (sha256
17252 (base32
17253 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
17254 (build-system python-build-system)
17255 (arguments
17256 `(#:tests? #f)) ;requires internet access
17257 (propagated-inputs
17258 `(("python-future" ,python-future)
17259 ("python-pynamecheap" ,python-pynamecheap)
17260 ("python-requests" ,python-requests)
17261 ("python-tldextract" ,python-tldextract)
17262 ("python-urllib3" ,python-urllib3)))
17263 (home-page "https://github.com/AnalogJ/lexicon")
17264 (synopsis
17265 "Manipulate DNS records on various DNS providers")
17266 (description
17267 "Lexicon provides a way to manipulate DNS records on multiple DNS
17268 providers in a standardized way. It has a CLI but it can also be used as a
17269 Python library. It was designed to be used in automation, specifically with
17270 Let's Encrypt.")
17271 (license license:expat)))
17272
17273 (define-public python2-dns-lexicon
17274 (package-with-python2 python-dns-lexicon))
17275
17276 (define-public python-commandlines
17277 (package
17278 (name "python-commandlines")
17279 (version "0.4.1")
17280 (source
17281 (origin
17282 (method url-fetch)
17283 (uri (pypi-uri "commandlines" version))
17284 (sha256
17285 (base32
17286 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
17287 (build-system python-build-system)
17288 (home-page "https://github.com/chrissimpkins/commandlines")
17289 (synopsis "Command line argument to object parsing library")
17290 (description
17291 "@code{Commandlines} is a Python library for command line application
17292 development that supports command line argument parsing, command string
17293 validation testing and application logic.")
17294 (license license:expat)))
17295
17296 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
17297 ;; python-numba. They have a very unflexible relationship.
17298 (define-public python-numba
17299 (package
17300 (name "python-numba")
17301 (version "0.46.0")
17302 (source
17303 (origin
17304 (method url-fetch)
17305 (uri (pypi-uri "numba" version))
17306 (sha256
17307 (base32
17308 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17309 (build-system python-build-system)
17310 (arguments
17311 `(#:modules ((guix build utils)
17312 (guix build python-build-system)
17313 (ice-9 ftw)
17314 (srfi srfi-1)
17315 (srfi srfi-26))
17316 #:phases
17317 (modify-phases %standard-phases
17318 (add-after 'unpack 'disable-proprietary-features
17319 (lambda _
17320 (setenv "NUMBA_DISABLE_HSA" "1")
17321 (setenv "NUMBA_DISABLE_CUDA" "1")
17322 #t))
17323 (add-after 'unpack 'remove-failing-tests
17324 (lambda _
17325 ;; FIXME: These tests fail for unknown reasons:
17326 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17327 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17328 (substitute* "numba/tests/test_dispatcher.py"
17329 (("def test(_non_writable_pycache)" _ m)
17330 (string-append "def guix_skip" m))
17331 (("def test(_non_creatable_pycache)" _ m)
17332 (string-append "def guix_skip" m))
17333 (("def test(_frozen)" _ m)
17334 (string-append "def guix_skip" m)))
17335
17336 ;; These tests fail because we don't run the tests from the build
17337 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17338 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17339 (substitute* "numba/tests/test_pycc.py"
17340 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17341 (string-append "def guix_skip" m)))
17342
17343 ;; These tests fail because our version of Python does not have
17344 ;; a recognizable front-end for the Numba distribution to use
17345 ;; to check against.
17346 (substitute* "numba/tests/test_entrypoints.py"
17347 (("def test(_init_entrypoint)" _ m)
17348 (string-append "def guix_skip" m)))
17349 (substitute* "numba/tests/test_jitclasses.py"
17350 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17351 (string-append "def guix_skip" m)))
17352 #t))
17353 (replace 'check
17354 (lambda _
17355 (let ((cwd (getcwd)))
17356 (setenv "PYTHONPATH"
17357 (string-append cwd "/build/"
17358 (find (cut string-prefix? "lib" <>)
17359 (scandir (string-append cwd "/build")))
17360 ":"
17361 (getenv "PYTHONPATH")))
17362 ;; Something is wrong with the PYTHONPATH when running the
17363 ;; tests from the build directory, as it complains about not being
17364 ;; able to import certain modules.
17365 (with-directory-excursion "/tmp"
17366 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17367 #t)))))
17368 (propagated-inputs
17369 `(("python-llvmlite" ,python-llvmlite)
17370 ("python-numpy" ,python-numpy)
17371 ("python-singledispatch" ,python-singledispatch)))
17372 ;; Needed for tests.
17373 (inputs
17374 `(("python-jinja2" ,python-jinja2)
17375 ("python-pygments" ,python-pygments)))
17376 (home-page "https://numba.pydata.org")
17377 (synopsis "Compile Python code using LLVM")
17378 (description "Numba gives you the power to speed up your applications with
17379 high performance functions written directly in Python. With a few
17380 annotations, array-oriented and math-heavy Python code can be just-in-time
17381 compiled to native machine instructions, similar in performance to C, C++ and
17382 Fortran, without having to switch languages or Python interpreters.
17383
17384 Numba works by generating optimized machine code using the LLVM compiler
17385 infrastructure at import time, runtime, or statically (using the included pycc
17386 tool).")
17387 (license license:bsd-3)))
17388
17389 (define-public python-numcodecs
17390 (package
17391 (name "python-numcodecs")
17392 (version "0.6.4")
17393 (source
17394 (origin
17395 (method url-fetch)
17396 (uri (pypi-uri "numcodecs" version))
17397 (sha256
17398 (base32
17399 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17400 (build-system python-build-system)
17401 (propagated-inputs
17402 `(("python-numpy" ,python-numpy)
17403 ("python-msgpack" ,python-msgpack)))
17404 (native-inputs
17405 `(("python-pytest" ,python-pytest)
17406 ("python-setuptools-scm" ,python-setuptools-scm)))
17407 (home-page "https://github.com/zarr-developers/numcodecs")
17408 (synopsis "Buffer compression and transformation codecs")
17409 (description
17410 "This Python package provides buffer compression and transformation
17411 codecs for use in data storage and communication applications.")
17412 (license license:expat)))
17413
17414 (define-public python-asciitree
17415 (package
17416 (name "python-asciitree")
17417 (version "0.3.3")
17418 (source
17419 (origin
17420 (method url-fetch)
17421 (uri (pypi-uri "asciitree" version))
17422 (sha256
17423 (base32
17424 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17425 (build-system python-build-system)
17426 (home-page "https://github.com/mbr/asciitree")
17427 (synopsis "Draws ASCII trees")
17428 (description "This package draws tree structures using characters.")
17429 (license license:expat)))
17430
17431 (define-public python-zarr
17432 (package
17433 (name "python-zarr")
17434 (version "2.4.0")
17435 (source
17436 (origin
17437 (method url-fetch)
17438 (uri (pypi-uri "zarr" version))
17439 (sha256
17440 (base32
17441 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17442 (build-system python-build-system)
17443 (arguments
17444 `(#:phases
17445 (modify-phases %standard-phases
17446 (add-after 'unpack 'disable-service-tests
17447 (lambda _
17448 (setenv "ZARR_TEST_ABS" "0")
17449 (setenv "ZARR_TEST_MONGO" "0")
17450 (setenv "ZARR_TEST_REDIS" "0")
17451 #t))
17452 (replace 'check
17453 (lambda _
17454 (invoke "pytest" "-vv" "-k" "not lmdb")
17455 #t)))))
17456 (propagated-inputs
17457 `(("python-asciitree" ,python-asciitree)
17458 ("python-fasteners" ,python-fasteners)
17459 ("python-numcodecs" ,python-numcodecs)
17460 ("python-numpy" ,python-numpy)))
17461 (native-inputs
17462 `(("python-pytest" ,python-pytest)
17463 ("python-setuptools-scm" ,python-setuptools-scm)))
17464 (home-page "https://github.com/zarr-developers/zarr-python")
17465 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17466 (description
17467 "This package provides an implementation of chunked, compressed,
17468 N-dimensional arrays for Python.")
17469 (license license:expat)))
17470
17471 (define-public python-anndata
17472 (package
17473 (name "python-anndata")
17474 (version "0.7.1")
17475 (source
17476 (origin
17477 (method url-fetch)
17478 (uri (pypi-uri "anndata" version))
17479 (sha256
17480 (base32
17481 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17482 (build-system python-build-system)
17483 (arguments
17484 `(#:phases
17485 (modify-phases %standard-phases
17486 (add-after 'unpack 'delete-inconvenient-tests
17487 (lambda _
17488 ;; This test depends on python-scikit-learn.
17489 (delete-file "anndata/tests/test_inplace_subset.py")
17490 #t))
17491 (delete 'check)
17492 (add-after 'install 'check
17493 (lambda* (#:key inputs outputs #:allow-other-keys)
17494 (add-installed-pythonpath inputs outputs)
17495 (invoke "pytest" "-vv"))))))
17496 (propagated-inputs
17497 `(("python-h5py" ,python-h5py)
17498 ("python-importlib-metadata" ,python-importlib-metadata)
17499 ("python-natsort" ,python-natsort)
17500 ("python-numcodecs" ,python-numcodecs)
17501 ("python-packaging" ,python-packaging)
17502 ("python-pandas" ,python-pandas)
17503 ("python-scipy" ,python-scipy)
17504 ("python-zarr" ,python-zarr)))
17505 (native-inputs
17506 `(("python-joblib" ,python-joblib)
17507 ("python-pytest" ,python-pytest)
17508 ("python-setuptools-scm" ,python-setuptools-scm)))
17509 (home-page "https://github.com/theislab/anndata")
17510 (synopsis "Annotated data for data analysis pipelines")
17511 (description "Anndata is a package for simple (functional) high-level APIs
17512 for data analysis pipelines. In this context, it provides an efficient,
17513 scalable way of keeping track of data together with learned annotations and
17514 reduces the code overhead typically encountered when using a mostly
17515 object-oriented library such as @code{scikit-learn}.")
17516 (license license:bsd-3)))
17517
17518 (define-public python-dill
17519 (package
17520 (name "python-dill")
17521 (version "0.3.1.1")
17522 (source
17523 (origin
17524 (method url-fetch)
17525 (uri (pypi-uri "dill" version))
17526 (sha256
17527 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17528 (build-system python-build-system)
17529 (arguments
17530 `(#:phases
17531 (modify-phases %standard-phases
17532 (replace 'check
17533 (lambda _
17534 (with-directory-excursion "/tmp"
17535 (invoke "nosetests" "-v"))
17536 #t)))))
17537 (native-inputs
17538 `(("python-nose" ,python-nose)))
17539 (home-page "https://pypi.org/project/dill/")
17540 (synopsis "Serialize all of Python")
17541 (description "Dill extends Python's @code{pickle} module for serializing
17542 and de-serializing Python objects to the majority of the built-in Python
17543 types. Dill provides the user the same interface as the @code{pickle} module,
17544 and also includes some additional features. In addition to pickling Python
17545 objects, @code{dill} provides the ability to save the state of an interpreter
17546 session in a single command. Hence, it would be feasible to save a
17547 interpreter session, close the interpreter, ship the pickled file to another
17548 computer, open a new interpreter, unpickle the session and thus continue from
17549 the saved state of the original interpreter session.")
17550 (license license:bsd-3)))
17551
17552 (define-public python-multiprocess
17553 (package
17554 (name "python-multiprocess")
17555 (version "0.70.9")
17556 (source
17557 (origin
17558 (method url-fetch)
17559 (uri (pypi-uri "multiprocess" version))
17560 (sha256
17561 (base32
17562 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17563 (build-system python-build-system)
17564 (arguments
17565 `(#:phases
17566 (modify-phases %standard-phases
17567 (add-after 'unpack 'disable-broken-tests
17568 (lambda _
17569 ;; This test is broken as there is no keyboard interrupt.
17570 (substitute* "py3.7/multiprocess/tests/__init__.py"
17571 (("^(.*)def test_wait_result"
17572 line indent)
17573 (string-append indent
17574 "@unittest.skip(\"Disabled by Guix\")\n"
17575 line)))
17576 #t))
17577 ;; Tests must be run after installation.
17578 (delete 'check)
17579 (add-after 'install 'check
17580 (lambda* (#:key inputs outputs #:allow-other-keys)
17581 (add-installed-pythonpath inputs outputs)
17582 (invoke "python" "-m" "multiprocess.tests")
17583 #t)))))
17584 (propagated-inputs
17585 `(("python-dill" ,python-dill)))
17586 (home-page "https://pypi.org/project/multiprocess/")
17587 (synopsis "Multiprocessing and multithreading in Python")
17588 (description
17589 "This package is a fork of the multiprocessing Python package, a package
17590 which supports the spawning of processes using the API of the standard
17591 library's @code{threading} module.")
17592 (license license:bsd-3)))
17593
17594 (define-public python-toolz
17595 (package
17596 (name "python-toolz")
17597 (version "0.9.0")
17598 (source
17599 (origin
17600 (method url-fetch)
17601 (uri (pypi-uri "toolz" version))
17602 (sha256
17603 (base32
17604 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17605 (build-system python-build-system)
17606 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17607 ;; unregistered loader type"
17608 (arguments '(#:tests? #f))
17609 (home-page "https://github.com/pytoolz/toolz/")
17610 (synopsis "List processing tools and functional utilities")
17611 (description
17612 "This package provides a set of utility functions for iterators,
17613 functions, and dictionaries.")
17614 (license license:bsd-3)))
17615
17616 (define-public python2-toolz
17617 (package-with-python2 python-toolz))
17618
17619 (define-public python-cytoolz
17620 (package
17621 (name "python-cytoolz")
17622 (version "0.9.0.1")
17623 (source
17624 (origin
17625 (method url-fetch)
17626 (uri (pypi-uri "cytoolz" version))
17627 (sha256
17628 (base32
17629 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17630 (build-system python-build-system)
17631 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17632 ;; 'exceptions'"
17633 (arguments '(#:tests? #f))
17634 (propagated-inputs
17635 `(("python-toolz" ,python-toolz)))
17636 (native-inputs
17637 `(("python-cython" ,python-cython)))
17638 (home-page "https://github.com/pytoolz/cytoolz")
17639 (synopsis "High performance functional utilities")
17640 (description
17641 "The cytoolz package implements the same API as provided by toolz. The
17642 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17643 that is accessible to other projects developed in Cython.")
17644 (license license:bsd-3)))
17645
17646 (define-public python-sortedcontainers
17647 (package
17648 (name "python-sortedcontainers")
17649 (version "2.1.0")
17650 (source
17651 (origin
17652 (method url-fetch)
17653 (uri (pypi-uri "sortedcontainers" version))
17654 (sha256
17655 (base32
17656 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17657 (build-system python-build-system)
17658 (arguments
17659 ;; FIXME: Tests require many extra dependencies, and would introduce
17660 ;; a circular dependency on hypothesis, which uses this package.
17661 '(#:tests? #f))
17662 (propagated-inputs
17663 `(("python-appdirs" ,python-appdirs)
17664 ("python-distlib" ,python-distlib)
17665 ("python-filelock" ,python-filelock)
17666 ("python-six" ,python-six-bootstrap)))
17667 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17668 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17669 (description
17670 "This package provides a sorted collections library, written in
17671 pure-Python.")
17672 (license license:asl2.0)))
17673
17674 (define-public python2-sortedcontainers
17675 (package-with-python2 python-sortedcontainers))
17676
17677 (define-public python-cloudpickle
17678 (package
17679 (name "python-cloudpickle")
17680 (version "1.3.0")
17681 (source
17682 (origin
17683 (method url-fetch)
17684 (uri (pypi-uri "cloudpickle" version))
17685 (sha256
17686 (base32
17687 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17688 (build-system python-build-system)
17689 (arguments
17690 '(#:phases (modify-phases %standard-phases
17691 (add-before 'check 'do-not-override-PYTHONPATH
17692 (lambda _
17693 ;; Append to PYTHONPATH instead of overriding it so
17694 ;; that dependencies from Guix can be found.
17695 (substitute* "tests/testutils.py"
17696 (("env\\['PYTHONPATH'\\] = pythonpath")
17697 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17698 #t))
17699 (replace 'check
17700 (lambda* (#:key tests? #:allow-other-keys)
17701 (if tests?
17702 (invoke "pytest" "-s" "-vv")
17703 (format #t "test suite not run~%"))
17704 #t)))))
17705 (native-inputs
17706 `(;; For tests.
17707 ("python-psutil" ,python-psutil)
17708 ("python-pytest" ,python-pytest)
17709 ("python-tornado" ,python-tornado)))
17710 (home-page "https://github.com/cloudpipe/cloudpickle")
17711 (synopsis "Extended pickling support for Python objects")
17712 (description
17713 "Cloudpickle makes it possible to serialize Python constructs not
17714 supported by the default pickle module from the Python standard library. It
17715 is especially useful for cluster computing where Python expressions are
17716 shipped over the network to execute on remote hosts, possibly close to the
17717 data.")
17718 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17719 (license license:bsd-3)))
17720
17721 (define-public python2-cloudpickle
17722 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17723 (package
17724 (inherit base)
17725 (native-inputs
17726 `(("python-mock" ,python2-mock)
17727 ,@(package-native-inputs base)))
17728 (propagated-inputs
17729 `(("python-futures" ,python2-futures)
17730 ,@(package-propagated-inputs base))))))
17731
17732 (define-public python-locket
17733 (package
17734 (name "python-locket")
17735 (version "0.2.0")
17736 (source
17737 (origin
17738 (method url-fetch)
17739 (uri (pypi-uri "locket" version))
17740 (sha256
17741 (base32
17742 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17743 (build-system python-build-system)
17744 (home-page "https://github.com/mwilliamson/locket.py")
17745 (synopsis "File-based locks for Python")
17746 (description
17747 "Locket implements a lock that can be used by multiple processes provided
17748 they use the same path.")
17749 (license license:bsd-2)))
17750
17751 (define-public python2-locket
17752 (package-with-python2 python-locket))
17753
17754 (define-public python-blosc
17755 (package
17756 (name "python-blosc")
17757 (version "1.5.1")
17758 (source
17759 (origin
17760 (method url-fetch)
17761 (uri (pypi-uri "blosc" version))
17762 (sha256
17763 (base32
17764 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17765 (build-system python-build-system)
17766 ;; FIXME: all tests pass, but then this error is printed:
17767 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17768 (arguments '(#:tests? #f))
17769 (propagated-inputs
17770 `(("python-numpy" ,python-numpy)))
17771 (home-page "https://github.com/blosc/python-blosc")
17772 (synopsis "Python wrapper for the Blosc data compressor library")
17773 (description "Blosc is a high performance compressor optimized for binary
17774 data. It has been designed to transmit data to the processor cache faster
17775 than the traditional, non-compressed, direct memory fetch approach via a
17776 @code{memcpy()} system call.
17777
17778 Blosc works well for compressing numerical arrays that contains data with
17779 relatively low entropy, like sparse data, time series, grids with
17780 regular-spaced values, etc.
17781
17782 This Python package wraps the Blosc library.")
17783 (license license:bsd-3)))
17784
17785 (define-public python2-blosc
17786 (package-with-python2 python-blosc))
17787
17788 (define-public python-partd
17789 (package
17790 (name "python-partd")
17791 (version "0.3.9")
17792 (source
17793 (origin
17794 (method url-fetch)
17795 (uri (pypi-uri "partd" version))
17796 (sha256
17797 (base32
17798 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17799 (build-system python-build-system)
17800 (propagated-inputs
17801 `(("python-blosc" ,python-blosc)
17802 ("python-locket" ,python-locket)
17803 ("python-numpy" ,python-numpy)
17804 ("python-pandas" ,python-pandas)
17805 ("python-pyzmq" ,python-pyzmq)
17806 ("python-toolz" ,python-toolz)))
17807 (home-page "https://github.com/dask/partd/")
17808 (synopsis "Appendable key-value storage")
17809 (description "Partd stores key-value pairs. Values are raw bytes. We
17810 append on old values. Partd excels at shuffling operations.")
17811 (license license:bsd-3)))
17812
17813 (define-public python2-partd
17814 (package-with-python2 python-partd))
17815
17816 (define-public python-fsspec
17817 (package
17818 (name "python-fsspec")
17819 (version "0.6.1")
17820 (source
17821 (origin
17822 (method url-fetch)
17823 (uri (pypi-uri "fsspec" version))
17824 (sha256
17825 (base32
17826 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17827 (build-system python-build-system)
17828 (arguments '(#:tests? #f)) ; there are none
17829 (home-page "https://github.com/intake/filesystem_spec")
17830 (synopsis "File-system specification")
17831 (description "The purpose of this package is to produce a template or
17832 specification for a file-system interface, that specific implementations
17833 should follow, so that applications making use of them can rely on a common
17834 behavior and not have to worry about the specific internal implementation
17835 decisions with any given backend.")
17836 (license license:bsd-3)))
17837
17838 (define-public python-dask
17839 (package
17840 (name "python-dask")
17841 (version "2.14.0")
17842 (source
17843 (origin
17844 (method url-fetch)
17845 (uri (pypi-uri "dask" version))
17846 (sha256
17847 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17848 (build-system python-build-system)
17849 (arguments
17850 `(#:phases
17851 (modify-phases %standard-phases
17852 (add-after 'unpack 'disable-broken-tests
17853 (lambda _
17854 ;; This test is marked as xfail when pytest-xdist is used.
17855 (substitute* "dask/tests/test_threaded.py"
17856 (("def test_interrupt\\(\\)" m)
17857 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17858 m)))
17859 ;; This one fails with a type error:
17860 ;; TypeError: Already tz-aware, use tz_convert to convert.
17861 (substitute* "dask/dataframe/tests/test_shuffle.py"
17862 (("def test_set_index_timestamp\\(\\)" m)
17863 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17864 m)))
17865 #t))
17866 (replace 'check
17867 (lambda _ (invoke "pytest" "-vv"))))))
17868 (propagated-inputs
17869 `(("python-cloudpickle" ,python-cloudpickle)
17870 ("python-fsspec" ,python-fsspec)
17871 ("python-numpy" ,python-numpy)
17872 ("python-packaging" ,python-packaging)
17873 ("python-pandas" ,python-pandas)
17874 ("python-partd" ,python-partd)
17875 ("python-toolz" ,python-toolz)
17876 ("python-pyyaml" ,python-pyyaml)))
17877 (native-inputs
17878 `(("python-pytest" ,python-pytest)
17879 ("python-pytest-runner" ,python-pytest-runner)))
17880 (home-page "https://github.com/dask/dask/")
17881 (synopsis "Parallel computing with task scheduling")
17882 (description
17883 "Dask is a flexible parallel computing library for analytics. It
17884 consists of two components: dynamic task scheduling optimized for computation,
17885 and large data collections like parallel arrays, dataframes, and lists that
17886 extend common interfaces like NumPy, Pandas, or Python iterators to
17887 larger-than-memory or distributed environments. These parallel collections
17888 run on top of the dynamic task schedulers. ")
17889 (license license:bsd-3)))
17890
17891 (define-public python-ilinkedlist
17892 (package
17893 (name "python-ilinkedlist")
17894 (version "0.4.0")
17895 (source
17896 (origin
17897 (method url-fetch)
17898 (uri (pypi-uri "ilinkedlist" version))
17899 (sha256
17900 (base32
17901 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17902 (build-system python-build-system)
17903 (native-inputs `(("python-pytest" ,python-pytest)))
17904 (inputs `(("python" ,python)))
17905 (home-page "https://github.com/luther9/ilinkedlist-py")
17906 (synopsis "Immutable linked list library")
17907 (description
17908 "This is a implementation of immutable linked lists for Python. It
17909 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17910 Since a linked list is treated as immutable, it is hashable, and its length
17911 can be retrieved in constant time. Some of the terminology is inspired by
17912 LISP. It is possible to create an improper list by creating a @code{Pair}
17913 with a non-list @code{cdr}.")
17914 (license license:gpl3+)))
17915
17916 (define-public python-readlike
17917 (package
17918 (name "python-readlike")
17919 (version "0.1.3")
17920 (source
17921 (origin
17922 (method url-fetch)
17923 (uri (pypi-uri "readlike" version))
17924 (sha256
17925 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17926 (build-system python-build-system)
17927 (home-page "https://github.com/jangler/readlike")
17928 (synopsis "GNU Readline-like line editing module")
17929 (description
17930 "This Python module provides line editing functions similar to the default
17931 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17932 @code{readline} package, this one allows access to those capabilties in settings
17933 outside of a standard command-line interface. It is especially well-suited to
17934 interfacing with Urwid, due to a shared syntax for describing key inputs.
17935
17936 Currently, all stateless Readline commands are implemented. Yanking and history
17937 are not supported.")
17938 (license license:expat)))
17939
17940 (define-public python2-readlike
17941 (package-with-python2 python-readlike))
17942
17943 (define-public python-reparser
17944 (package
17945 (name "python-reparser")
17946 (version "1.4.3")
17947 (source
17948 (origin
17949 (method url-fetch)
17950 (uri (pypi-uri "ReParser" version))
17951 (sha256
17952 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17953 (build-system python-build-system)
17954 (home-page "https://github.com/xmikos/reparser")
17955 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17956 (description
17957 "This Python library provides a simple lexer/parser for inline markup based
17958 on regular expressions.")
17959 (license license:expat)))
17960
17961 (define-public python2-reparser
17962 (let ((reparser (package-with-python2
17963 (strip-python2-variant python-reparser))))
17964 (package (inherit reparser)
17965 (propagated-inputs
17966 `(("python2-enum34" ,python2-enum34)
17967 ,@(package-propagated-inputs reparser))))))
17968
17969 (define-public python-retrying
17970 (package
17971 (name "python-retrying")
17972 (version "1.3.3")
17973 (source
17974 (origin
17975 (method git-fetch)
17976 (uri (git-reference
17977 (url "https://github.com/rholder/retrying.git")
17978 (commit (string-append "v" version))))
17979 (file-name (git-file-name name version))
17980 (sha256
17981 (base32
17982 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
17983 (build-system python-build-system)
17984 (propagated-inputs
17985 `(("python-six" ,python-six)))
17986 (home-page "https://github.com/rholder/retrying")
17987 (synopsis "Library for adding retry behavior")
17988 (description "Retrying is a general-purpose retrying library to simplify
17989 the task of adding retry behavior to just about anything.
17990
17991 Features:
17992
17993 @itemize
17994 @item Generic Decorator API.
17995 @item Specify stop condition (i.e. limit by number of attempts).
17996 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
17997 @item Customize retrying on Exceptions.
17998 @item Customize retrying on expected returned result.
17999 @end itemize")
18000 (license license:asl2.0)))
18001
18002 (define-public python-precis-i18n
18003 (package
18004 (name "python-precis-i18n")
18005 (version "1.0.0")
18006 (source
18007 (origin
18008 (method url-fetch)
18009 (uri (pypi-uri "precis_i18n" version))
18010 (sha256
18011 (base32
18012 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
18013 (build-system python-build-system)
18014 (home-page "https://github.com/byllyfish/precis_i18n")
18015 (synopsis "Implementation of the PRECIS framework")
18016 (description
18017 "This module implements the PRECIS Framework as described in RFC 8264,
18018 RFC 8265 and RFC 8266.")
18019 (license license:expat)))
18020
18021 (define-public python-absl-py
18022 (package
18023 (name "python-absl-py")
18024 (version "0.6.1")
18025 (source
18026 (origin
18027 (method url-fetch)
18028 (uri (pypi-uri "absl-py" version))
18029 (sha256
18030 (base32
18031 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
18032 (build-system python-build-system)
18033 (propagated-inputs
18034 `(("python-six" ,python-six)))
18035 (home-page "https://github.com/abseil/abseil-py")
18036 (synopsis "Abseil Python common libraries")
18037 (description
18038 "This package provides the Abseil Python Common Libraries, a collection
18039 of Python libraries for building Python applications.")
18040 (license license:asl2.0)))
18041
18042 (define-public python-astor
18043 (package
18044 (name "python-astor")
18045 (version "0.7.1")
18046 (source
18047 (origin
18048 (method url-fetch)
18049 (uri (pypi-uri "astor" version))
18050 (sha256
18051 (base32
18052 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
18053 (build-system python-build-system)
18054 ;; FIXME: There are two errors and two test failures.
18055 (arguments `(#:tests? #f))
18056 (home-page "https://github.com/berkerpeksag/astor")
18057 (synopsis "Read and write Python ASTs")
18058 (description "Astor is designed to allow easy manipulation of Python
18059 source via the Abstract Syntax Tree.")
18060 (license license:bsd-3)))
18061
18062 (define-public python2-astor
18063 (package-with-python2 python-astor))
18064
18065 (define-public python-astunparse
18066 (package
18067 (name "python-astunparse")
18068 (version "1.6.2")
18069 (source
18070 (origin
18071 (method url-fetch)
18072 (uri (pypi-uri "astunparse" version))
18073 (sha256
18074 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
18075 (build-system python-build-system)
18076 (arguments '(#:tests? #f)) ; there are none
18077 (propagated-inputs
18078 `(("python-six" ,python-six)
18079 ("python-wheel" ,python-wheel)))
18080 (home-page "https://github.com/simonpercivall/astunparse")
18081 (synopsis "AST unparser for Python")
18082 (description "This package provides an AST unparser for Python. It is a
18083 factored out version of @code{unparse} found in the Python source
18084 distribution.")
18085 (license license:bsd-3)))
18086
18087 (define-public python-gast
18088 (package
18089 (name "python-gast")
18090 (version "0.3.3")
18091 (source
18092 (origin
18093 (method url-fetch)
18094 (uri (pypi-uri "gast" version))
18095 (sha256
18096 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
18097 (build-system python-build-system)
18098 (propagated-inputs
18099 `(("python-astunparse" ,python-astunparse)))
18100 (home-page "https://pypi.org/project/gast/")
18101 (synopsis "Generic Python AST that abstracts the underlying Python version")
18102 (description
18103 "GAST provides a compatibility layer between the AST of various Python
18104 versions, as produced by @code{ast.parse} from the standard @code{ast}
18105 module.")
18106 (license license:bsd-3)))
18107
18108 (define-public python-wikidata
18109 (package
18110 (name "python-wikidata")
18111 (version "0.6.1")
18112 (source
18113 (origin
18114 (method url-fetch)
18115 (uri (pypi-uri "Wikidata" version))
18116 (sha256
18117 (base32
18118 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
18119 (build-system python-build-system)
18120 (propagated-inputs
18121 `(("python-babel" ,python-babel)))
18122 (home-page "https://github.com/dahlia/wikidata")
18123 (synopsis "Wikidata client library")
18124 (description
18125 "This package provides a Python interface to
18126 @url{https://www.wikidata.org/, Wikidata}.")
18127 (properties '((upstream-name . "Wikidata")))
18128 (license license:gpl3+)))
18129
18130 (define-public python-doctest-ignore-unicode
18131 (package
18132 (name "python-doctest-ignore-unicode")
18133 (version "0.1.2")
18134 (source
18135 (origin
18136 (method url-fetch)
18137 (uri (pypi-uri "doctest-ignore-unicode" version))
18138 (sha256
18139 (base32
18140 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
18141 (build-system python-build-system)
18142 (native-inputs
18143 `(("python-nose" ,python-nose)))
18144 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
18145 (synopsis "Ignore Unicode literal prefixes in doctests")
18146 (description
18147 "This package adds support for a flag to ignore Unicode literal prefixes
18148 in doctests.")
18149 (license license:asl2.0)))
18150
18151 (define-public python-attr
18152 (package
18153 (name "python-attr")
18154 (version "0.3.1")
18155 (source
18156 (origin
18157 (method url-fetch)
18158 (uri (pypi-uri "attr" version))
18159 (sha256
18160 (base32
18161 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
18162 (build-system python-build-system)
18163 (home-page "https://github.com/denis-ryzhkov/attr")
18164 (synopsis "Decorator for attributes of target function or class")
18165 (description "Simple decorator to set attributes of target function or
18166 class in a @acronym{DRY, Don't Repeat Yourself} way.")
18167 (license license:expat)))
18168
18169 (define-public python-construct
18170 (package
18171 (name "python-construct")
18172 (version "2.10.56")
18173 (source
18174 (origin
18175 (method url-fetch)
18176 (uri (pypi-uri "construct" version))
18177 (sha256
18178 (base32
18179 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
18180 (build-system python-build-system)
18181 (arguments
18182 `(#:tests? #f)) ; No tests exist.
18183 (propagated-inputs
18184 `(("python-extras" ,python-extras)
18185 ("python-arrow" ,python-arrow)
18186 ("python-numpy" ,python-numpy)
18187 ("python-ruamel.yaml" ,python-ruamel.yaml)))
18188 (home-page "https://construct.readthedocs.io")
18189 (synopsis "Declarative and symmetrical parser and builder for binary data")
18190 (description
18191 "This package provides both simple, atomic constructs (such as
18192 integers of various sizes), as well as composite ones which allow you
18193 form hierarchical and sequential structures of increasing complexity.
18194 It features bit and byte granularity, easy debugging and testing, an
18195 easy-to-extend subclass system, and lots of primitive constructs to
18196 make your work easier.")
18197 (license license:expat)))
18198
18199 (define-public python-humanize
18200 (package
18201 (name "python-humanize")
18202 (version "0.5.1")
18203 (source
18204 (origin
18205 (method url-fetch)
18206 (uri (pypi-uri "humanize" version))
18207 (sha256
18208 (base32
18209 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
18210 (arguments
18211 '(#:tests? #f)) ; tests not in pypi archive
18212 (build-system python-build-system)
18213 (home-page "https://github.com/jmoiron/humanize")
18214 (synopsis "Print numerical information in a human-readable form")
18215 (description "This package provides a Python module that displays numbers
18216 and dates in \"human readable\" forms. For example, it would display
18217 \"12345591313\" as \"12.3 billion\".")
18218 (license license:expat)))
18219
18220 (define-public python-txaio
18221 (package
18222 (name "python-txaio")
18223 (version "18.8.1")
18224 (source
18225 (origin
18226 (method url-fetch)
18227 (uri (pypi-uri "txaio" version))
18228 (sha256
18229 (base32
18230 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
18231 (build-system python-build-system)
18232 (propagated-inputs
18233 `(("python-twisted" ,python-twisted)
18234 ("python-six" ,python-six)))
18235 (home-page "https://github.com/crossbario/txaio")
18236 (synopsis "Compatibility layer between Python asyncio and Twisted")
18237 (description "Txaio provides a compatibility layer between the Python
18238 @code{asyncio} module and @code{Twisted}.")
18239 (license license:expat)))
18240
18241 (define-public python-toolshed
18242 (package
18243 (name "python-toolshed")
18244 (version "0.4.6")
18245 (source
18246 (origin
18247 (method url-fetch)
18248 (uri (pypi-uri "toolshed" version))
18249 (sha256
18250 (base32
18251 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
18252 (build-system python-build-system)
18253 (native-inputs
18254 `(("python-nose" ,python-nose)))
18255 (home-page "https://github.com/brentp/toolshed/")
18256 (synopsis "Collection of modules and functions for working with data")
18257 (description "This is a collection of well-tested, simple modules and
18258 functions that aim to reduce boilerplate when working with data.")
18259 (license license:bsd-2)))
18260
18261 (define-public python-annoy
18262 (package
18263 (name "python-annoy")
18264 (version "1.15.1")
18265 (source
18266 (origin
18267 (method url-fetch)
18268 (uri (pypi-uri "annoy" version))
18269 (sha256
18270 (base32
18271 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
18272 (build-system python-build-system)
18273 (native-inputs
18274 `(("python-nose" ,python-nose)))
18275 (home-page "https://github.com/spotify/annoy/")
18276 (synopsis "Approximate nearest neighbors library")
18277 (description
18278 "Annoy is a C++ library with Python bindings to search for points in
18279 space that are close to a given query point. It also creates large read-only
18280 file-based data structures that are @code{mmap}ped into memory so that many
18281 processes may share the same data.")
18282 (license license:asl2.0)))
18283
18284 (define-public python-pylzma
18285 (package
18286 (name "python-pylzma")
18287 (version "0.5.0")
18288 (source
18289 (origin
18290 (method url-fetch)
18291 (uri (pypi-uri "pylzma" version))
18292 (sha256
18293 (base32
18294 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
18295 (build-system python-build-system)
18296 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
18297 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
18298 (description "This package provides Python bindings for the LZMA library
18299 by Igor Pavlov.")
18300 (license license:lgpl2.1+)))
18301
18302 (define-public python2-pylzma
18303 (package-with-python2 python-pylzma))
18304
18305 (define-public python2-zeroconf
18306 (package
18307 (name "python2-zeroconf")
18308
18309 ;; This is the last version that supports Python 2.x.
18310 (version "0.19.1")
18311 (source
18312 (origin
18313 (method url-fetch)
18314 (uri (pypi-uri "zeroconf" version))
18315 (sha256
18316 (base32
18317 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
18318 (build-system python-build-system)
18319 (arguments
18320 `(#:python ,python-2
18321 #:phases
18322 (modify-phases %standard-phases
18323 (add-after 'unpack 'patch-requires
18324 (lambda* (#:key inputs #:allow-other-keys)
18325 (substitute* "setup.py"
18326 (("enum-compat")
18327 "enum34"))
18328 #t)))))
18329 (native-inputs
18330 `(("python2-six" ,python2-six)
18331 ("python2-enum32" ,python2-enum34)
18332 ("python2-netifaces" ,python2-netifaces)
18333 ("python2-typing" ,python2-typing)))
18334 (home-page "https://github.com/jstasiak/python-zeroconf")
18335 (synopsis "Pure Python mDNS service discovery")
18336 (description
18337 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18338 compatible).")
18339 (license license:lgpl2.1+)))
18340
18341 (define-public python-bsddb3
18342 (package
18343 (name "python-bsddb3")
18344 (version "6.2.6")
18345 (source
18346 (origin
18347 (method url-fetch)
18348 (uri (pypi-uri "bsddb3" version))
18349 (sha256
18350 (base32
18351 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18352 (build-system python-build-system)
18353 (inputs
18354 `(("bdb" ,bdb)))
18355 (arguments
18356 '(#:phases
18357 (modify-phases %standard-phases
18358 (add-after 'unpack 'configure-locations
18359 (lambda* (#:key inputs #:allow-other-keys)
18360 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18361 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18362 #t))
18363 (replace 'check
18364 (lambda _
18365 (invoke "python3" "test3.py" "-v"))))))
18366 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18367 (synopsis "Python bindings for Oracle Berkeley DB")
18368 (description
18369 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18370 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18371 Transaction objects, and each of these is exposed as a Python type in the
18372 bsddb3.db module. The database objects can use various access methods: btree,
18373 hash, recno, and queue. Complete support of Berkeley DB distributed
18374 transactions. Complete support for Berkeley DB Replication Manager.
18375 Complete support for Berkeley DB Base Replication. Support for RPC.")
18376 (license license:bsd-3)))
18377
18378 (define-public python-dbfread
18379 (package
18380 (name "python-dbfread")
18381 (version "2.0.7")
18382 (source (origin
18383 (method url-fetch)
18384 (uri (pypi-uri "dbfread" version))
18385 (sha256
18386 (base32
18387 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18388 (build-system python-build-system)
18389 (native-inputs
18390 `(("python-pytest" ,python-pytest)))
18391 (home-page "https://dbfread.readthedocs.io")
18392 (synopsis "Read DBF Files with Python")
18393 (description
18394 "This library reads DBF files and returns the data as native Python data
18395 types for further processing. It is primarily intended for batch jobs and
18396 one-off scripts.")
18397 (license license:expat)))
18398
18399 (define-public python-cached-property
18400 (package
18401 (name "python-cached-property")
18402 (version "1.5.1")
18403 (source
18404 (origin
18405 (method url-fetch)
18406 (uri (pypi-uri "cached-property" version))
18407 (sha256
18408 (base32
18409 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18410 (build-system python-build-system)
18411 (arguments
18412 `(#:phases
18413 (modify-phases %standard-phases
18414 ;; https://github.com/pydanny/cached-property/issues/131
18415 ;; recent versions of freezegun break one test
18416 (add-after 'unpack 'disable-broken-test
18417 (lambda _
18418 (substitute* "tests/test_cached_property.py"
18419 (("def test_threads_ttl_expiry\\(self\\)" m)
18420 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18421 " " m)))
18422 #t)))))
18423 (native-inputs
18424 `(("python-freezegun" ,python-freezegun)))
18425 (home-page
18426 "https://github.com/pydanny/cached-property")
18427 (synopsis
18428 "Decorator for caching properties in classes")
18429 (description
18430 "This package provides a decorator which makes caching
18431 time-or-computationally-expensive properties quick and easy and works in Python
18432 2 or 3.")
18433 (license license:bsd-3)))
18434
18435 (define-public python-folium
18436 (package
18437 (name "python-folium")
18438 (version "0.10.1")
18439 (source
18440 (origin
18441 (method url-fetch)
18442 (uri (pypi-uri "folium" version))
18443 (sha256
18444 (base32
18445 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
18446 (build-system python-build-system)
18447 (propagated-inputs
18448 `(("python-branca" ,python-branca)
18449 ("python-jinja2" ,python-jinja2)
18450 ("python-numpy" ,python-numpy)
18451 ("python-requests" ,python-requests)))
18452 (native-inputs
18453 `(("python-pytest" ,python-pytest)))
18454 (home-page "https://github.com/python-visualization/folium")
18455 (synopsis "Make beautiful maps with Leaflet.js & Python")
18456 (description "@code{folium} makes it easy to visualize data that’s been
18457 manipulated in Python on an interactive leaflet map. It enables both the
18458 binding of data to a map for @code{choropleth} visualizations as well as
18459 passing rich vector/raster/HTML visualizations as markers on the map.
18460
18461 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18462 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18463 supports Image, Video, GeoJSON and TopoJSON overlays.")
18464 (license license:expat)))
18465
18466 (define-public jube
18467 (package
18468 ;; This is a command-line tool, so no "python-" prefix.
18469 (name "jube")
18470 (version "2.2.2")
18471 (source (origin
18472 (method url-fetch)
18473 (uri (string-append
18474 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18475 version))
18476 (sha256
18477 (base32
18478 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18479 (file-name (string-append "jube-" version ".tar.gz"))))
18480 (build-system python-build-system)
18481 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18482 (synopsis "Benchmarking environment")
18483 (description
18484 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18485 benchmarked application, benchmark data is stored in a format that allows JUBE
18486 to deduct the desired information. This data can be parsed by automatic pre-
18487 and post-processing scripts that draw information and store it more densely
18488 for manual interpretation.")
18489 (license license:gpl3+)))
18490
18491 (define-public python-pyroutelib3
18492 (package
18493 (name "python-pyroutelib3")
18494 (version "1.3.post1")
18495 (source
18496 (origin
18497 (method url-fetch)
18498 (uri (pypi-uri "pyroutelib3" version))
18499 (sha256
18500 (base32
18501 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18502 (build-system python-build-system)
18503 (propagated-inputs
18504 `(("python-dateutil" ,python-dateutil)))
18505 (home-page "https://github.com/MKuranowski/pyroutelib3")
18506 (synopsis "Library for simple routing on OSM data")
18507 (description "Library for simple routing on OSM data")
18508 (license license:gpl3+)))
18509
18510 (define-public python-bibtexparser
18511 (package
18512 (name "python-bibtexparser")
18513 (version "1.1.0")
18514 (source
18515 (origin
18516 (method url-fetch)
18517 (uri (pypi-uri "bibtexparser" version))
18518 (sha256
18519 (base32
18520 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18521 (build-system python-build-system)
18522 (propagated-inputs
18523 `(("python-pyparsing" ,python-pyparsing)))
18524 (native-inputs
18525 `(("python-future" ,python-future)))
18526 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18527 (synopsis "Python library to parse BibTeX files")
18528 (description "BibtexParser is a Python library to parse BibTeX files.")
18529 (license (list license:bsd-3 license:lgpl3))))
18530
18531 (define-public python-distro
18532 (package
18533 (name "python-distro")
18534 (version "1.4.0")
18535 (source
18536 (origin
18537 (method url-fetch)
18538 (uri (pypi-uri "distro" version))
18539 (sha256
18540 (base32
18541 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18542 (build-system python-build-system)
18543 (native-inputs
18544 `(("python-pytest" ,python-pytest)))
18545 (home-page "https://github.com/nir0s/distro")
18546 (synopsis
18547 "OS platform information API")
18548 (description
18549 "@code{distro} provides information about the OS distribution it runs on,
18550 such as a reliable machine-readable ID, or version information.
18551
18552 It is the recommended replacement for Python's original
18553 `platform.linux_distribution` function (which will be removed in Python 3.8).
18554 @code{distro} also provides a command-line interface to output the platform
18555 information in various formats.")
18556 (license license:asl2.0)))
18557
18558 (define-public python-cairosvg
18559 (package
18560 (name "python-cairosvg")
18561 (version "2.4.2")
18562 (source
18563 (origin
18564 (method url-fetch)
18565 (uri (pypi-uri "CairoSVG" version))
18566 (sha256
18567 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18568 (build-system python-build-system)
18569 (arguments
18570 `(#:phases
18571 (modify-phases %standard-phases
18572 (replace 'check
18573 (lambda _ (invoke "pytest"))))))
18574 (propagated-inputs
18575 `(("python-cairocffi" ,python-cairocffi)
18576 ("python-cssselect2" ,python-cssselect2)
18577 ("python-defusedxml" ,python-defusedxml)
18578 ("python-pillow" ,python-pillow)
18579 ("python-tinycss2" ,python-tinycss2)))
18580 (native-inputs
18581 `(("python-pytest-flake8" ,python-pytest-flake8)
18582 ("python-pytest-isort" ,python-pytest-isort)
18583 ("python-pytest-runner" ,python-pytest-runner)))
18584 (home-page "https://cairosvg.org/")
18585 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18586 (description "CairoSVG is a SVG converter based on Cairo. It can export
18587 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18588 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18589 parsed, the result is drawn to a Cairo surface that can be exported to
18590 qvarious formats: PDF, PostScript, PNG and even SVG.")
18591 (license license:lgpl3+)))
18592
18593 (define-public python-pyphen
18594 (package
18595 (name "python-pyphen")
18596 (version "0.9.5")
18597 (source
18598 (origin
18599 (method url-fetch)
18600 (uri (pypi-uri "Pyphen" version))
18601 (sha256
18602 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18603 (build-system python-build-system)
18604 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18605 ;; embedded set provided by upstream - like Debian does.
18606 (home-page "https://github.com/Kozea/Pyphen")
18607 (synopsis "Pure Python module to hyphenate text")
18608 (description "Pyphen is a pure Python module to hyphenate text using
18609 existing Hunspell hyphenation dictionaries.")
18610 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18611
18612 (define-public python-intelhex
18613 (package
18614 (name "python-intelhex")
18615 (version "2.2.1")
18616 (source
18617 (origin
18618 (method url-fetch)
18619 (uri (pypi-uri "intelhex" version))
18620 (sha256
18621 (base32
18622 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18623 (build-system python-build-system)
18624 (arguments '(#:tests? #f)) ;issue with version
18625 (home-page "https://pypi.org/project/IntelHex/")
18626 (synopsis "Python library for Intel HEX files manipulations")
18627 (description "The Intel HEX file format is widely used in microprocessors
18628 and microcontrollers area (embedded systems etc.) as the de facto standard for
18629 representation of code to be programmed into microelectronic devices. This
18630 package provides an intelhex Python library to read, write, create from
18631 scratch and manipulate data from Intel HEX file format. It also includes
18632 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18633 converters and more, those based on the library itself.")
18634 (license license:bsd-3)))
18635
18636 (define-public python-pykwalify
18637 (package
18638 (name "python-pykwalify")
18639 (version "1.7.0")
18640 (source
18641 (origin
18642 (method url-fetch)
18643 (uri (pypi-uri "pykwalify" version))
18644 (sha256
18645 (base32
18646 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18647 (build-system python-build-system)
18648 (arguments '(#:tests? #f)) ;missing dependencies
18649 (propagated-inputs
18650 `(("python-dateutil" ,python-dateutil)
18651 ("python-docopt" ,python-docopt)
18652 ("python-pyyaml" ,python-pyyaml)))
18653 (home-page "https://github.com/grokzen/pykwalify")
18654 (synopsis
18655 "Python lib/cli for JSON/YAML schema validation")
18656 (description
18657 "This package provides a parser, schema validator, and data binding tool
18658 for YAML and JSON.")
18659 (license license:expat)))
18660
18661 (define-public python-dbusmock
18662 (package
18663 (name "python-dbusmock")
18664 (version "0.18.3")
18665 (source
18666 (origin
18667 (method url-fetch)
18668 (uri (pypi-uri "python-dbusmock" version))
18669 (sha256
18670 (base32
18671 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18672 (build-system python-build-system)
18673 (arguments
18674 '(#:phases
18675 (modify-phases %standard-phases
18676 (add-after 'unpack 'patch-shell-path
18677 (lambda _
18678 (substitute* "tests/test_code.py"
18679 (("/bin/bash") (which "bash")))
18680 #t)))))
18681 (native-inputs
18682 `(;; For tests.
18683 ("dbus" ,dbus) ; for dbus-daemon
18684 ("python-nose" ,python-nose)
18685 ("which" ,which)))
18686 (propagated-inputs
18687 `(("python-dbus" ,python-dbus)
18688 ("python-pygobject" ,python-pygobject)))
18689 (home-page "https://github.com/martinpitt/python-dbusmock")
18690 (synopsis "Python library for mock D-Bus objects")
18691 (description "python-dbusmock allows for the easy creation of mock objects on
18692 D-Bus. This is useful for writing tests for software which talks to D-Bus
18693 services such as upower, systemd, logind, gnome-session or others, and it is
18694 hard (or impossible without root privileges) to set the state of the real
18695 services to what you expect in your tests.")
18696 (license license:lgpl3+)))
18697
18698 (define-public python-ujson
18699 (package
18700 (name "python-ujson")
18701 (version "2.0.3")
18702 (source
18703 (origin
18704 (method url-fetch)
18705 (uri (pypi-uri "ujson" version))
18706 (sha256
18707 (base32
18708 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18709 (modules '((guix build utils)))
18710 (snippet
18711 '(begin (delete-file-recursively "deps") #t))))
18712 (build-system python-build-system)
18713 (arguments
18714 `(#:phases
18715 (modify-phases %standard-phases
18716 (add-after 'unpack 'link-to-system-double-conversion
18717 (lambda* (#:key inputs #:allow-other-keys)
18718 (let ((d-c (assoc-ref inputs "double-conversion")))
18719 (substitute* "setup.py"
18720 (("./deps/double-conversion/double-conversion\"")
18721 (string-append d-c "/include/double-conversion\""))
18722 (("-lstdc++" stdc)
18723 (string-append "-L" d-c "/lib\","
18724 " \"-ldouble-conversion\","
18725 " \"" stdc)))
18726 #t)))
18727 (replace 'check
18728 (lambda* (#:key inputs outputs #:allow-other-keys)
18729 (add-installed-pythonpath inputs outputs)
18730 (invoke "pytest"))))))
18731 (native-inputs
18732 `(("double-conversion" ,double-conversion)
18733 ("python-setuptools-scm" ,python-setuptools-scm)
18734 ("python-pytest" ,python-pytest)))
18735 (home-page "https://github.com/ultrajson/ultrajson")
18736 (synopsis "Ultra fast JSON encoder and decoder for Python")
18737 (description
18738 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18739 bindings for Python 3.")
18740 (license license:bsd-3)))
18741
18742 (define-public python-ujson-1
18743 (package
18744 (inherit python-ujson)
18745 (version "1.35")
18746 (source
18747 (origin
18748 (method url-fetch)
18749 (uri (pypi-uri "ujson" version))
18750 (sha256
18751 (base32
18752 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18753 (arguments
18754 '(#:phases %standard-phases))
18755 (native-inputs '())
18756 (home-page "http://www.esn.me")
18757 (description
18758 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18759 bindings for Python 2.5+ and 3.")))
18760
18761 (define-public python2-ujson-1
18762 (package-with-python2 python-ujson-1))
18763
18764 (define-public python-iocapture
18765 ;; The latest release is more than a year older than this commit.
18766 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18767 (revision "1"))
18768 (package
18769 (name "python-iocapture")
18770 (version "0.1.2")
18771 (source
18772 (origin
18773 (method git-fetch)
18774 (uri (git-reference
18775 (url "https://github.com/oinume/iocapture.git")
18776 (commit commit)))
18777 (file-name (git-file-name name version))
18778 (sha256
18779 (base32
18780 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18781 (build-system python-build-system)
18782 (arguments
18783 `(#:phases
18784 (modify-phases %standard-phases
18785 (delete 'check)
18786 (add-after 'install 'check
18787 (lambda* (#:key inputs outputs #:allow-other-keys)
18788 (add-installed-pythonpath inputs outputs)
18789 (invoke "py.test" "-v" "tests")
18790 #t)))))
18791 (propagated-inputs
18792 `(("python-flexmock" ,python-flexmock)
18793 ("python-pytest" ,python-pytest)
18794 ("python-pytest-cov" ,python-pytest-cov)
18795 ("python-six" ,python-six)))
18796 (home-page "https://github.com/oinume/iocapture")
18797 (synopsis "Python capturing tool for stdout and stderr")
18798 (description
18799 "This package helps you to capture the standard out (stdout) and the
18800 standard error channel (stderr) in your program.")
18801 (license license:expat))))
18802
18803 (define-public python-argh
18804 ;; There are 21 commits since the latest release containing important
18805 ;; improvements.
18806 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18807 (revision "1"))
18808 (package
18809 (name "python-argh")
18810 (version (git-version "0.26.2" revision commit))
18811 (source
18812 (origin
18813 (method git-fetch)
18814 (uri (git-reference
18815 (url "https://github.com/neithere/argh.git")
18816 (commit commit)))
18817 (file-name (git-file-name name version))
18818 (sha256
18819 (base32
18820 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18821 (build-system python-build-system)
18822 (propagated-inputs
18823 `(("python-iocapture" ,python-iocapture)
18824 ("python-mock" ,python-mock)
18825 ("python-pytest" ,python-pytest)
18826 ("python-pytest-cov" ,python-pytest-cov)
18827 ("python-pytest-xdist" ,python-pytest-xdist)
18828 ("python-tox" ,python-tox)))
18829 (home-page "https://github.com/neithere/argh/")
18830 (synopsis "Argparse wrapper with natural syntax")
18831 (description
18832 "python-argh is a small library that provides several layers of
18833 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18834 always possible to declare a command with the highest possible (and least
18835 flexible) layer and then tune the behaviour with any of the lower layers
18836 including the native API of @code{python-argparse}.")
18837 (license license:lgpl3+))))
18838
18839 (define-public python-ppft
18840 (package
18841 (name "python-ppft")
18842 (version "1.6.6.1")
18843 (source
18844 (origin
18845 (method url-fetch)
18846 (uri (pypi-uri "ppft" version))
18847 (sha256
18848 (base32
18849 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18850 (build-system python-build-system)
18851 (arguments '(#:tests? #f)) ; there are none
18852 (propagated-inputs
18853 `(("python-six" ,python-six)))
18854 (home-page "https://pypi.org/project/ppft/")
18855 (synopsis "Fork of Parallel Python")
18856 (description
18857 "This package is a fork of Parallel Python. The Parallel Python
18858 module (@code{pp}) provides an easy and efficient way to create
18859 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18860 computers and clusters. It features cross-platform portability and dynamic
18861 load balancing.")
18862 (license license:bsd-3)))
18863
18864 (define-public python-pox
18865 (package
18866 (name "python-pox")
18867 (version "0.2.7")
18868 (source
18869 (origin
18870 (method url-fetch)
18871 (uri (pypi-uri "pox" version))
18872 (sha256
18873 (base32
18874 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18875 (build-system python-build-system)
18876 (arguments
18877 `(#:phases
18878 (modify-phases %standard-phases
18879 (replace 'check
18880 (lambda _
18881 (mkdir-p "/tmp/guix")
18882 (setenv "SHELL" "bash")
18883 (setenv "USERNAME" "guix")
18884 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18885 (invoke "py.test" "-vv")
18886 #t)))))
18887 (native-inputs
18888 `(("python-pytest" ,python-pytest)
18889 ("which" ,which)))
18890 (home-page "https://pypi.org/project/pox/")
18891 (synopsis "Python utilities for filesystem exploration and automated builds")
18892 (description
18893 "Pox provides a collection of utilities for navigating and manipulating
18894 filesystems. This module is designed to facilitate some of the low level
18895 operating system interactions that are useful when exploring a filesystem on a
18896 remote host. Pox provides Python equivalents of several shell commands such
18897 as @command{which} and @command{find}. These commands allow automated
18898 discovery of what has been installed on an operating system, and where the
18899 essential tools are located.")
18900 (license license:bsd-3)))
18901
18902 (define-public python-pathos
18903 (package
18904 (name "python-pathos")
18905 (version "0.2.5")
18906 (source
18907 (origin
18908 (method url-fetch)
18909 (uri (pypi-uri "pathos" version))
18910 (sha256
18911 (base32
18912 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18913 (build-system python-build-system)
18914 (arguments
18915 '(#:phases
18916 (modify-phases %standard-phases
18917 (replace 'check
18918 (lambda _
18919 (setenv "PYTHONPATH"
18920 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18921 (invoke "python" "./tests/__main__.py"))))))
18922 (propagated-inputs
18923 `(("python-dill" ,python-dill)
18924 ("python-multiprocess" ,python-multiprocess)
18925 ("python-pox" ,python-pox)
18926 ("python-ppft" ,python-ppft)))
18927 (native-inputs
18928 `(("python-pytest" ,python-pytest)))
18929 (home-page "https://pypi.org/project/pathos/")
18930 (synopsis
18931 "Parallel graph management and execution in heterogeneous computing")
18932 (description
18933 "Python-pathos is a framework for heterogenous computing. It provides a
18934 consistent high-level interface for configuring and launching parallel
18935 computations across heterogenous resources. Python-pathos provides configurable
18936 launchers for parallel and distributed computing, where each launcher contains
18937 the syntactic logic to configure and launch jobs in an execution environment.")
18938 (license license:bsd-3)))
18939
18940 (define-public python-flit
18941 (package
18942 (name "python-flit")
18943 (version "2.1.0")
18944 (source
18945 (origin
18946 (method url-fetch)
18947 (uri (pypi-uri "flit" version))
18948 (sha256
18949 (base32
18950 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18951 (build-system python-build-system)
18952 (arguments
18953 `(#:tests? #f)) ; XXX: Check requires network access.
18954 (home-page "https://flit.readthedocs.io/")
18955 (synopsis
18956 "Simple packaging tool for simple packages")
18957 (description
18958 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18959 packages a single importable module or package at a time, using the import
18960 name as the name on PyPI. All subpackages and data files within a package
18961 are included automatically.")
18962 (license license:bsd-3)))
18963
18964 (define-public python-pathtools
18965 (package
18966 (name "python-pathtools")
18967 (version "0.1.2")
18968 (source
18969 (origin
18970 (method url-fetch)
18971 (uri (pypi-uri "pathtools" version))
18972 (sha256
18973 (base32
18974 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18975 (build-system python-build-system)
18976 (home-page
18977 "https://github.com/gorakhargosh/pathtools")
18978 (synopsis "Path utilities for Python")
18979 (description "Pattern matching and various utilities for file systems
18980 paths.")
18981 (license license:expat)))
18982
18983 (define-public python-fastentrypoints
18984 (package
18985 (name "python-fastentrypoints")
18986 (version "0.12")
18987 (source
18988 (origin
18989 (method url-fetch)
18990 (uri (pypi-uri "fastentrypoints" version))
18991 (sha256
18992 (base32
18993 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18994 (build-system python-build-system)
18995 (home-page
18996 "https://github.com/ninjaaron/fast-entry_points")
18997 (synopsis
18998 "Makes entry_points specified in setup.py load more quickly")
18999 (description
19000 "Using entry_points in your setup.py makes scripts that start really
19001 slowly because it imports pkg_resources. This package allows such setup
19002 scripts to load entry points more quickly.")
19003 (license license:bsd-3)))
19004
19005 (define-public python-funcparserlib
19006 (package
19007 (name "python-funcparserlib")
19008 (version "0.3.6")
19009 (source
19010 (origin
19011 (method url-fetch)
19012 (uri (pypi-uri "funcparserlib" version))
19013 (sha256
19014 (base32
19015 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
19016 (native-inputs
19017 `(("python-tox" ,python-tox)))
19018 (arguments
19019 `(#:phases
19020 (modify-phases %standard-phases
19021 (replace 'check
19022 (lambda _
19023 (invoke "tox"))))))
19024 (build-system python-build-system)
19025 (home-page
19026 "https://github.com/vlasovskikh/funcparserlib")
19027 (synopsis
19028 "Recursive descent parsing library based on functional combinators")
19029 (description
19030 "This package is a recursive descent parsing library for Python based on
19031 functional combinators. Parser combinators are just higher-order functions
19032 that take parsers as their arguments and return them as result values.")
19033 (license license:expat)))
19034
19035 (define-public python-speg
19036 (package
19037 (name "python-speg")
19038 (version "0.3")
19039 (source
19040 (origin
19041 (method url-fetch)
19042 (uri (pypi-uri "speg" version ".zip"))
19043 (sha256
19044 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
19045 (arguments
19046 `(#:tests? #f)) ;FIXME: tests fail, not sure why
19047 (native-inputs
19048 `(("unzip" ,unzip)))
19049 (build-system python-build-system)
19050 (home-page "https://github.com/avakar/speg")
19051 (synopsis "PEG-based parser interpreter with memoization")
19052 (description "This package is a PEG-based parser and interpreter with
19053 memoization.")
19054 (license license:expat)))
19055
19056 (define-public python-cson
19057 (package
19058 (name "python-cson")
19059 (version "0.8")
19060 (source
19061 (origin
19062 (method url-fetch)
19063 (uri (pypi-uri "cson" version))
19064 (sha256
19065 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
19066 (build-system python-build-system)
19067 (propagated-inputs
19068 `(("python-speg" ,python-speg)))
19069 (home-page "https://github.com/avakar/pycson")
19070 (synopsis "Parser for Coffeescript Object Notation (CSON)")
19071 (description "This package is a parser for Coffeescript Object
19072 Notation (CSON).")
19073 (license license:expat)))
19074
19075 (define-public python-asynctest
19076 (package
19077 (name "python-asynctest")
19078 (version "0.13.0")
19079 (source
19080 (origin
19081 (method url-fetch)
19082 (uri (pypi-uri "asynctest" version))
19083 (sha256
19084 (base32
19085 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
19086 (build-system python-build-system)
19087 (arguments
19088 '(#:phases
19089 (modify-phases %standard-phases
19090 (replace 'check
19091 (lambda _
19092 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
19093 (add-after 'unpack 'disable-tests
19094 (lambda* _
19095 (substitute* "test/test_selector.py"
19096 ;; XXX: This test fails for unknown reason inside the build
19097 ;; environment.
19098 (("def test_events_watched_outside_test_are_ignored")
19099 "@unittest.skip('disabled by guix')
19100 def test_events_watched_outside_test_are_ignored")))))))
19101 (home-page "https://github.com/Martiusweb/asynctest")
19102 (synopsis "Extension of unittest for testing asyncio libraries")
19103 (description
19104 "The package asynctest is built on top of the standard unittest module
19105 and cuts down boilerplate code when testing libraries for asyncio.")
19106 (license license:asl2.0)))
19107
19108 (define-public python-aionotify
19109 (package
19110 (name "python-aionotify")
19111 (version "0.2.0")
19112 (source
19113 (origin
19114 ;; Source tarball on PyPi lacks tests
19115 (method git-fetch)
19116 (uri (git-reference
19117 (url "https://github.com/rbarrois/aionotify")
19118 (commit (string-append "v" version))))
19119 (file-name (git-file-name name version))
19120 (sha256
19121 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
19122 (build-system python-build-system)
19123 (native-inputs `(("python-asynctest" ,python-asynctest)))
19124 (home-page "https://github.com/rbarrois/aionotify")
19125 (synopsis "Asyncio-powered inotify library")
19126 (description
19127 "@code{aionotify} is a simple, asyncio-based inotify library.")
19128 (license license:bsd-3)))
19129
19130 (define-public python-forbiddenfruit
19131 (package
19132 (name "python-forbiddenfruit")
19133 (version "0.1.3")
19134 (source
19135 (origin
19136 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
19137 (method git-fetch)
19138 (uri (git-reference
19139 (url "https://github.com/clarete/forbiddenfruit")
19140 (commit version)))
19141 (file-name (git-file-name name version))
19142 (sha256
19143 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
19144 (build-system python-build-system)
19145 (arguments
19146 '(#:phases
19147 (modify-phases %standard-phases
19148 (replace 'check
19149 (lambda _
19150 (invoke "make" "SKIP_DEPS=1"))))))
19151 (native-inputs
19152 `(("python-nose" ,python-nose)
19153 ("python-coverage" ,python-coverage)))
19154 (home-page "https://github.com/clarete/forbiddenfruit")
19155 (synopsis "Patch python built-in objects")
19156 (description "This project allows Python code to extend built-in types.")
19157 (license (list license:gpl3+ license:expat))))
19158
19159 (define-public python-shouldbe
19160 (package
19161 (name "python-shouldbe")
19162 (version "0.1.2")
19163 (source
19164 (origin
19165 (method url-fetch)
19166 (uri (pypi-uri "shouldbe" version))
19167 (sha256
19168 (base32
19169 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
19170 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
19171 (build-system python-build-system)
19172 (propagated-inputs
19173 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
19174 (native-inputs
19175 `(("python-nose" ,python-nose)))
19176 (home-page "https://github.com/directxman12/should_be")
19177 (synopsis "Python Assertion Helpers inspired by Shouldly")
19178 (description
19179 "Python Assertion Helpers inspired by Shouldly.")
19180 (license license:isc)))
19181
19182 (define-public python-k5test
19183 (package
19184 (name "python-k5test")
19185 (version "0.9.2")
19186 (source
19187 (origin
19188 (method url-fetch)
19189 (uri (pypi-uri "k5test" version))
19190 (sha256
19191 (base32
19192 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
19193 (build-system python-build-system)
19194 (propagated-inputs
19195 `(("python-six" ,python-six)
19196 ;; `which`, `kadmin.local` binaries called inside library
19197 ("which" ,which)
19198 ("mit-krb5" ,mit-krb5)))
19199 (native-inputs `(("mit-krb5" ,mit-krb5)))
19200 (arguments
19201 '(#:phases
19202 (modify-phases %standard-phases
19203 (add-after 'unpack 'patch-paths
19204 (lambda* _
19205 (substitute* "k5test/realm.py"
19206 (("'kadmin_local'") "'kadmin.local'")))))))
19207 (home-page "https://github.com/pythongssapi/k5test")
19208 (synopsis "Library for setting up self-contained Kerberos 5 environments")
19209 (description
19210 "@code{k5test} is a library for setting up self-contained Kerberos 5
19211 environments, and running Python unit tests inside those environments. It is
19212 based on the file of the same name found alongside the MIT Kerberos 5 unit
19213 tests.")
19214 (license license:isc)))
19215
19216 (define-public python-gssapi
19217 (package
19218 (name "python-gssapi")
19219 (version "1.6.5")
19220 (source
19221 (origin
19222 (method url-fetch)
19223 (uri (pypi-uri "gssapi" version))
19224 (sha256
19225 (base32
19226 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
19227 (build-system python-build-system)
19228 (propagated-inputs
19229 `(("python-decorator" ,python-decorator)
19230 ("python-six" ,python-six)))
19231 (inputs
19232 `(("mit-krb5" ,mit-krb5)))
19233 ;; for tests
19234 (native-inputs
19235 `(("python-shouldbe" ,python-shouldbe)
19236 ("python-parameterized" ,python-parameterized)
19237 ("python-k5test" ,python-k5test)
19238 ("python-nose" ,python-nose)))
19239 (home-page "https://github.com/pythongssapi/python-gssapi")
19240 (synopsis "Python GSSAPI Wrapper")
19241 (description
19242 "Python-GSSAPI provides both low-level and high level wrappers around the
19243 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
19244 also be useable with other GSSAPI mechanisms.")
19245 (license license:isc)))
19246
19247 (define-public python-check-manifest
19248 (package
19249 (name "python-check-manifest")
19250 (version "0.37")
19251 (source
19252 (origin
19253 (method url-fetch)
19254 (uri (pypi-uri "check-manifest" version))
19255 (sha256
19256 (base32
19257 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
19258 (build-system python-build-system)
19259 (native-inputs
19260 `(("python-mock" ,python-mock)
19261 ("git" ,git)))
19262 (home-page "https://github.com/mgedmin/check-manifest")
19263 (synopsis "Check MANIFEST.in in a Python source package for completeness")
19264 (description "Python package can include a MANIFEST.in file to help with
19265 sending package files to the Python Package Index. This package checks that
19266 file to ensure it completely and accurately describes your project.")
19267 (license license:expat)))
19268
19269 (define-public python-android-stringslib
19270 (package
19271 (name "python-android-stringslib")
19272 (version "0.1.2")
19273 (source
19274 (origin
19275 (method git-fetch)
19276 (uri (git-reference
19277 (url "https://framagit.org/tyreunom/python-android-strings-lib")
19278 (commit (string-append "v" version))))
19279 (file-name (git-file-name name version))
19280 (sha256
19281 (base32
19282 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
19283 (build-system python-build-system)
19284 (arguments
19285 `(#:tests? #f))
19286 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
19287 (synopsis "Android strings.xml support")
19288 (description "Android Strings Lib provides support for android's strings.xml
19289 files. These files are used to translate strings in android apps.")
19290 (license license:expat)))
19291
19292 (define-public python-watchdog
19293 (package
19294 (name "python-watchdog")
19295 (version "0.9.0")
19296 (source
19297 (origin
19298 (method url-fetch)
19299 (uri (pypi-uri "watchdog" version))
19300 (sha256
19301 (base32
19302 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
19303 (build-system python-build-system)
19304 (arguments
19305 `(#:phases
19306 (modify-phases %standard-phases
19307 (add-before 'check 'remove-failing
19308 (lambda _
19309 (delete-file "tests/test_inotify_buffer.py")
19310 (delete-file "tests/test_snapshot_diff.py")
19311 #t)))))
19312 (propagated-inputs
19313 `(("python-argh" ,python-argh)
19314 ("python-pathtools" ,python-pathtools)
19315 ("python-pyyaml" ,python-pyyaml)))
19316 (native-inputs
19317 `(("python-pytest-cov" ,python-pytest-cov)
19318 ("python-pytest-timeout" ,python-pytest-timeout)))
19319 (home-page "https://github.com/gorakhargosh/watchdog")
19320 (synopsis "Filesystem events monitoring")
19321 (description "This package provides a way to monitor filesystem events
19322 such as a file modification and trigger an action. This is similar to inotify,
19323 but portable.")
19324 (license license:asl2.0)))
19325
19326 (define-public python-wget
19327 (package
19328 (name "python-wget")
19329 (version "3.2")
19330 (source
19331 (origin
19332 (method url-fetch)
19333 (uri (pypi-uri "wget" version ".zip"))
19334 (sha256
19335 (base32
19336 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19337 (build-system python-build-system)
19338 (native-inputs `(("unzip" ,unzip)))
19339 (home-page "https://bitbucket.org/techtonik/python-wget/")
19340 (synopsis "Pure Python download utility")
19341 (description "The python-wget library provides an API to download files
19342 with features similar to the @command{wget} utility.")
19343 (license license:unlicense)))
19344
19345 (define-public offlate
19346 (package
19347 (name "offlate")
19348 (version "0.5")
19349 (source
19350 (origin
19351 (method git-fetch)
19352 (uri (git-reference
19353 (url "https://framagit.org/tyreunom/offlate")
19354 (commit version)))
19355 (file-name (git-file-name name version))
19356 (sha256
19357 (base32
19358 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19359 (build-system python-build-system)
19360 (arguments
19361 ;; No tests
19362 `(#:tests? #f))
19363 (propagated-inputs
19364 `(("python-android-stringslib" ,python-android-stringslib)
19365 ("python-dateutil" ,python-dateutil)
19366 ("python-gitlab" ,python-gitlab)
19367 ("python-lxml" ,python-lxml)
19368 ("python-polib" ,python-polib)
19369 ("python-pyenchant" ,python-pyenchant)
19370 ("python-pygit2" ,python-pygit2)
19371 ("python-pygithub" ,python-pygithub)
19372 ("python-pyqt" ,python-pyqt)
19373 ("python-requests" ,python-requests)
19374 ("python-ruamel.yaml" ,python-ruamel.yaml)
19375 ("python-translation-finder" ,python-translation-finder)
19376 ("python-watchdog" ,python-watchdog)))
19377 (native-inputs
19378 `(("qttools" ,qttools)))
19379 (home-page "https://framagit.org/tyreunom/offlate")
19380 (synopsis "Offline translation interface for online translation tools")
19381 (description "Offlate offers a unified interface for different translation
19382 file formats, as well as many different online translation platforms. You can
19383 use it to get work from online platforms, specialized such as the Translation
19384 Project, or not such a gitlab instance when your upstream doesn't use any
19385 dedicated platform. The tool proposes a unified interface for any format and
19386 an upload option to send your work back to the platform.")
19387 (license license:gpl3+)))
19388
19389 (define-public python-titlecase
19390 (package
19391 (name "python-titlecase")
19392 (version "0.12.0")
19393 (source
19394 (origin
19395 (method url-fetch)
19396 (uri (pypi-uri "titlecase" version))
19397 (sha256
19398 (base32
19399 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19400 (build-system python-build-system)
19401 (native-inputs
19402 `(("python-nose" ,python-nose)))
19403 (home-page "https://github.com/ppannuto/python-titlecase")
19404 (synopsis "Capitalize strings similar to book titles")
19405 (description
19406 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19407 It capitalizes (predominantly English) strings in a way that is similar to
19408 book titles, using the New York Times Manual of Style to leave certain words
19409 lowercase.")
19410 (license license:expat)))
19411
19412 (define-public python-pypng
19413 (package
19414 (name "python-pypng")
19415 (version "0.0.20")
19416 (source
19417 (origin
19418 (method url-fetch)
19419 (uri (pypi-uri "pypng" version))
19420 (sha256
19421 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19422 (build-system python-build-system)
19423 (home-page "https://github.com/drj11/pypng")
19424 (synopsis "Pure Python PNG image encoder/decoder")
19425 (description
19426 "The PyPNG module implements support for PNG images. It reads and writes
19427 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19428 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19429 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19430 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19431 A number of optional chunks can be specified (when writing) and
19432 understood (when reading): tRNS, bKGD, gAMA.
19433
19434 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19435 aim at being a replacement or competitor. Its strength lies in fine-grained
19436 extensive support of PNG features. It can also read and write Netpbm PAM
19437 files, with a focus on its use as an intermediate format for implementing
19438 custom PNG processing.")
19439 (license license:expat)))
19440
19441 (define-public python-fuzzywuzzy
19442 (package
19443 (name "python-fuzzywuzzy")
19444 (version "0.18.0")
19445 (source
19446 (origin
19447 (method url-fetch)
19448 (uri (pypi-uri "fuzzywuzzy" version))
19449 (sha256
19450 (base32
19451 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19452 (build-system python-build-system)
19453 (native-inputs
19454 `(("python-hypothesis" ,python-hypothesis)
19455 ("python-pycodestyle" ,python-pycodestyle)
19456 ("python-pytest" ,python-pytest)))
19457 (propagated-inputs
19458 `(("python-levenshtein" ,python-levenshtein)))
19459 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19460 (synopsis "Fuzzy string matching in Python")
19461 (description "Approximate string matching using
19462 @emph{Levenshtein Distance} to calculate the differences between
19463 sequences.")
19464 (license license:gpl2)))
19465
19466 (define-public python2-fuzzywuzzy
19467 (package-with-python2 python-fuzzywuzzy))
19468
19469 (define-public python-block-tracing
19470 (package
19471 (name "python-block-tracing")
19472 (version "1.0.1")
19473 (source
19474 (origin
19475 (method url-fetch)
19476 (uri (pypi-uri "block_tracing" version))
19477 (sha256
19478 (base32
19479 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19480 (build-system python-build-system)
19481 (arguments '(#:tests? #f)) ; no tests
19482 (home-page "https://github.com/rianhunter/block_tracing")
19483 (synopsis "Protect process memory")
19484 (description
19485 "@code{block_tracing} is a tiny Python library that can be used to
19486 prevent debuggers and other applications from inspecting the memory within
19487 your process.")
19488 (license license:expat)))
19489
19490 (define-public python-gcovr
19491 (package
19492 (name "python-gcovr")
19493 (version "4.2")
19494 (source
19495 (origin
19496 (method url-fetch)
19497 (uri (pypi-uri "gcovr" version))
19498 (sha256
19499 (base32
19500 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19501 (build-system python-build-system)
19502 (propagated-inputs
19503 `(("python-lxml" ,python-lxml)
19504 ("python-jinja2" ,python-jinja2)))
19505 (home-page "https://gcovr.com/")
19506 (synopsis "Utility for generating code coverage results")
19507 (description
19508 "Gcovr provides a utility for managing the use of the GNU gcov
19509 utility and generating summarized code coverage results. It is inspired
19510 by the Python coverage.py package, which provides a similar utility for
19511 Python.")
19512 (license license:bsd-3)))
19513
19514 (define-public python-owslib
19515 (package
19516 (name "python-owslib")
19517 (version "0.19.2")
19518 (source
19519 (origin
19520 (method url-fetch)
19521 (uri (pypi-uri "OWSLib" version))
19522 (sha256
19523 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19524 (build-system python-build-system)
19525 (arguments
19526 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19527 (synopsis "Interface for Open Geospatial Consortium web service")
19528 (description
19529 "OWSLib is a Python package for client programming with Open Geospatial
19530 Consortium (OGC) web service (hence OWS) interface standards, and their related
19531 content models.")
19532 (home-page "https://geopython.github.io/OWSLib/")
19533 (license license:bsd-3)))
19534
19535 (define-public python-docusign-esign
19536 (package
19537 (name "python-docusign-esign")
19538 (version "3.1.0")
19539 (source (origin
19540 (method url-fetch)
19541 (uri (pypi-uri "docusign_esign" version))
19542 (sha256
19543 (base32
19544 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19545 (build-system python-build-system)
19546 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19547 (arguments `(#:tests? #f))
19548 (propagated-inputs
19549 `(("python-certifi", python-certifi)
19550 ("python-six", python-six)
19551 ("python-dateutil", python-dateutil)
19552 ("python-urllib3", python-urllib3)
19553 ("python-pyjwt", python-pyjwt)
19554 ("python-cryptography", python-cryptography)
19555 ("python-nose", python-nose)))
19556 (synopsis "DocuSign Python Client")
19557 (description "The Official DocuSign Python Client Library used to interact
19558 with the eSign REST API. Send, sign, and approve documents using this client.")
19559 (home-page "https://www.docusign.com/devcenter")
19560 (license license:expat)))
19561
19562 (define-public python-xattr
19563 (package
19564 (name "python-xattr")
19565 (version "0.9.7")
19566 (source
19567 (origin
19568 (method url-fetch)
19569 (uri (pypi-uri "xattr" version))
19570 (sha256
19571 (base32
19572 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19573 (build-system python-build-system)
19574 (propagated-inputs
19575 `(("python-cffi" ,python-cffi)))
19576 (home-page "https://github.com/xattr/xattr")
19577 (synopsis
19578 "Python wrapper for extended filesystem attributes")
19579 (description "This package provides a Python wrapper for using extended
19580 filesystem attributes. Extended attributes extend the basic attributes of files
19581 and directories in the file system. They are stored as name:data pairs
19582 associated with file system objects (files, directories, symlinks, etc).")
19583 (license license:expat)))
19584
19585 (define-public python-json-logger
19586 (package
19587 (name "python-json-logger")
19588 (version "0.1.11")
19589 (source
19590 (origin
19591 (method url-fetch)
19592 (uri (pypi-uri "python-json-logger" version))
19593 (sha256
19594 (base32
19595 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19596 (build-system python-build-system)
19597 (home-page
19598 "https://github.com/madzak/python-json-logger")
19599 (synopsis "JSON log formatter in Python")
19600 (description "This library allows standard Python logging to output log data
19601 as JSON objects. With JSON we can make our logs more readable by machines and
19602 we can stop writing custom parsers for syslog-type records.")
19603 (license license:bsd-3)))
19604
19605 (define-public python-daiquiri
19606 (package
19607 (name "python-daiquiri")
19608 (version "2.1.1")
19609 (source
19610 (origin
19611 (method url-fetch)
19612 (uri (pypi-uri "daiquiri" version))
19613 (sha256
19614 (base32
19615 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19616 (build-system python-build-system)
19617 (propagated-inputs
19618 `(("python-json-logger" ,python-json-logger)))
19619 (native-inputs
19620 `(("python-mock" ,python-mock)
19621 ("python-pytest" ,python-pytest)
19622 ("python-setuptools-scm" ,python-setuptools-scm)
19623 ("python-six" ,python-six)))
19624 (home-page "https://github.com/jd/daiquiri")
19625 (synopsis
19626 "Library to configure Python logging easily")
19627 (description "The daiquiri library provides an easy way to configure
19628 logging in Python. It also provides some custom formatters and handlers.")
19629 (license license:asl2.0)))
19630
19631 (define-public python-pifpaf
19632 (package
19633 (name "python-pifpaf")
19634 (version "2.4.0")
19635 (source
19636 (origin
19637 (method url-fetch)
19638 (uri (pypi-uri "pifpaf" version))
19639 (sha256
19640 (base32
19641 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19642 (build-system python-build-system)
19643 (arguments
19644 `(#:tests? #f))
19645 (propagated-inputs
19646 `(("python-click" ,python-click)
19647 ("python-daiquiri" ,python-daiquiri)
19648 ("python-fixtures" ,python-fixtures)
19649 ("python-jinja2" ,python-jinja2)
19650 ("python-pbr" ,python-pbr)
19651 ("python-psutil" ,python-psutil)
19652 ("python-six" ,python-six)
19653 ("python-xattr" ,python-xattr)))
19654 (native-inputs
19655 `(("python-mock" ,python-mock)
19656 ("python-os-testr" ,python-os-testr)
19657 ("python-requests" ,python-requests)
19658 ("python-testrepository" ,python-testrepository)
19659 ("python-testtools" ,python-testtools)))
19660 (home-page "https://github.com/jd/pifpaf")
19661 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19662 (description "Pifpaf is a suite of fixtures and a command-line tool that
19663 starts and stops daemons for a quick throw-away usage. This is typically
19664 useful when needing these daemons to run integration testing. It originally
19665 evolved from its precursor @code{overtest}.")
19666 (license license:asl2.0)))
19667
19668 (define-public python-pytest-check-links
19669 (package
19670 (name "python-pytest-check-links")
19671 (version "0.3.0")
19672 (source
19673 (origin
19674 (method url-fetch)
19675 ;; URI uses underscores
19676 (uri (pypi-uri "pytest_check_links" version))
19677 (sha256
19678 (base32
19679 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19680 (build-system python-build-system)
19681 (propagated-inputs
19682 `(("python-docutils" ,python-docutils)
19683 ("python-html5lib" ,python-html5lib)
19684 ("python-nbconvert" ,python-nbconvert)
19685 ("python-nbformat" ,python-nbformat)
19686 ("python-pytest" ,python-pytest)
19687 ("python-six" ,python-six)))
19688 (native-inputs
19689 `(("python-pbr-minimal" ,python-pbr-minimal)))
19690 (home-page "https://github.com/minrk/pytest-check-links")
19691 (synopsis "Check links in files")
19692 (description "This package provides a pytest plugin that checks URLs for
19693 HTML-containing files.")
19694 (license license:bsd-3)))
19695
19696 (define-public python-json5
19697 (package
19698 (name "python-json5")
19699 (version "0.8.5")
19700 (source
19701 (origin
19702 ;; sample.json5 is missing from PyPi source tarball
19703 (method git-fetch)
19704 (uri (git-reference
19705 (url "https://github.com/dpranke/pyjson5.git")
19706 (commit (string-append "v" version))))
19707 (file-name (git-file-name name version))
19708 (sha256
19709 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19710 (build-system python-build-system)
19711 (home-page "https://github.com/dpranke/pyjson5")
19712 (synopsis
19713 "Python implementation of the JSON5 data format")
19714 (description
19715 "JSON5 extends the JSON data interchange format to make it slightly more
19716 usable as a configuration language. This Python package implements parsing and
19717 dumping of JSON5 data structures.")
19718 (license license:asl2.0)))
19719
19720 (define-public python-frozendict
19721 (package
19722 (name "python-frozendict")
19723 (version "1.2")
19724 (source
19725 (origin
19726 (method url-fetch)
19727 (uri (pypi-uri "frozendict" version))
19728 (sha256
19729 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19730 (build-system python-build-system)
19731 (home-page "https://github.com/slezica/python-frozendict")
19732 (synopsis "Simple immutable mapping for Python")
19733 (description
19734 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19735 implements the complete mapping interface. It can be used as a drop-in
19736 replacement for dictionaries where immutability is desired.")
19737 (license license:expat)))
19738
19739 (define-public python-unpaddedbase64
19740 (package
19741 (name "python-unpaddedbase64")
19742 (version "1.1.0")
19743 (source
19744 (origin
19745 (method git-fetch)
19746 (uri (git-reference
19747 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19748 (commit (string-append "v" version))))
19749 (file-name (git-file-name name version))
19750 (sha256
19751 (base32
19752 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19753 (build-system python-build-system)
19754 (home-page "https://pypi.org/project/unpaddedbase64/")
19755 (synopsis "Encode and decode Base64 without “=” padding")
19756 (description
19757 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19758 using “=” characters. However this conveys no benefit so many protocols
19759 choose to use Base64 without the “=” padding.")
19760 (license license:asl2.0)))
19761
19762 (define-public python-py-cpuinfo
19763 (package
19764 (name "python-py-cpuinfo")
19765 (version "5.0.0")
19766 (source
19767 (origin
19768 (method url-fetch)
19769 (uri (pypi-uri "py-cpuinfo" version))
19770 (sha256
19771 (base32
19772 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
19773 (build-system python-build-system)
19774 (home-page "https://github.com/workhorsy/py-cpuinfo")
19775 (synopsis "Get CPU info with Python")
19776 (description
19777 "This Python module returns the CPU info by using the best sources of
19778 information for your operating system.")
19779 (license license:expat)))
19780
19781 (define-public python-canonicaljson
19782 (package
19783 (name "python-canonicaljson")
19784 (version "1.1.4")
19785 (source
19786 (origin
19787 (method url-fetch)
19788 (uri (pypi-uri "canonicaljson" version))
19789 (sha256
19790 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19791 (build-system python-build-system)
19792 (propagated-inputs
19793 `(("python-six" ,python-six)
19794 ("python-frozendict" ,python-frozendict)
19795 ("python-simplejson" ,python-simplejson)))
19796 (home-page "https://github.com/matrix-org/python-canonicaljson")
19797 (synopsis "Canonical JSON")
19798 (description
19799 "Deterministically encode JSON.
19800
19801 @itemize
19802 @item Encodes objects and arrays as RFC 7159 JSON.
19803 @item Sorts object keys so that you get the same result each time.
19804 @item Has no insignificant whitespace to make the output as small as possible.
19805 @item Escapes only the characters that must be escaped, U+0000 to
19806 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19807 @item Uses the shortest escape sequence for each escaped character.
19808 @item Encodes the JSON as UTF-8.
19809 @item Can encode frozendict immutable dictionaries.
19810 @end itemize")
19811 (license license:asl2.0)))
19812
19813 (define-public python-signedjson
19814 (package
19815 (name "python-signedjson")
19816 (version "1.1.1")
19817 (source
19818 (origin
19819 (method url-fetch)
19820 (uri (pypi-uri "signedjson" version))
19821 (sha256
19822 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19823 (build-system python-build-system)
19824 (propagated-inputs
19825 `(("python-canonicaljson" ,python-canonicaljson)
19826 ("python-importlib-metadata" ,python-importlib-metadata)
19827 ("python-pynacl" ,python-pynacl)
19828 ("python-typing-extensions" ,python-typing-extensions)
19829 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19830 (native-inputs
19831 `(("python-setuptools-scm" ,python-setuptools-scm)))
19832 (home-page "https://github.com/matrix-org/python-signedjson")
19833 (synopsis "Sign JSON objects with ED25519 signatures")
19834 (description
19835 "Sign JSON objects with ED25519 signatures.
19836
19837 @itemize
19838 @item More than one entity can sign the same object.
19839 @item Each entity can sign the object with more than one key making it easier to
19840 rotate keys
19841 @item ED25519 can be replaced with a different algorithm.
19842 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19843 key.
19844 @end itemize")
19845 (license license:asl2.0)))
19846
19847 (define-public python-daemonize
19848 (package
19849 (name "python-daemonize")
19850 (version "2.5.0")
19851 (source
19852 (origin
19853 (method url-fetch)
19854 (uri (pypi-uri "daemonize" version))
19855 (sha256
19856 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19857 (build-system python-build-system)
19858 (home-page "https://github.com/thesharp/daemonize")
19859 (synopsis "Library for writing system daemons in Python")
19860 (description "Daemonize is a library for writing system daemons in Python.")
19861 (license license:expat)))
19862
19863 (define-public python-pymacaroons
19864 (package
19865 (name "python-pymacaroons")
19866 (version "0.13.0")
19867 (source
19868 (origin
19869 (method url-fetch)
19870 (uri (pypi-uri "pymacaroons" version))
19871 (sha256
19872 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19873 (build-system python-build-system)
19874 (propagated-inputs
19875 `(("python-six" ,python-six)
19876 ("python-pynacl" ,python-pynacl)))
19877 (home-page "https://github.com/ecordell/pymacaroons")
19878 (synopsis "Python Macaroon Library")
19879 (description
19880 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19881 tokens, macaroons embed caveats that define specific authorization
19882 requirements for the target service, the service that issued the root macaroon
19883 and which is capable of verifying the integrity of macaroons it receives.
19884
19885 Macaroons allow for delegation and attenuation of authorization. They are
19886 simple and fast to verify, and decouple authorization policy from the
19887 enforcement of that policy.")
19888 (license license:expat)))
19889
19890 (define-public python-ldap3
19891 (package
19892 (name "python-ldap3")
19893 (version "2.7")
19894 (home-page "https://github.com/cannatag/ldap3")
19895 (source
19896 (origin
19897 (method git-fetch)
19898 (uri (git-reference (url home-page)
19899 (commit (string-append "v" version))))
19900 (file-name (git-file-name name version))
19901 (sha256
19902 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19903 (build-system python-build-system)
19904 (arguments
19905 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19906 #:phases (modify-phases %standard-phases
19907 (replace 'check
19908 (lambda* (#:key tests? #:allow-other-keys)
19909 (when tests?
19910 (invoke "nosetests" "-s" "test"))
19911 #t)))))
19912 (native-inputs
19913 `(("python-nose" ,python-nose)))
19914 (propagated-inputs
19915 `(("python-gssapi" ,python-gssapi)
19916 ("python-pyasn1" ,python-pyasn1)))
19917 (synopsis "Python LDAP client")
19918 (description
19919 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19920 library.")
19921 (license license:lgpl3+)))
19922
19923 (define-public python-boltons
19924 (package
19925 (name "python-boltons")
19926 (version "20.0.0")
19927 (source
19928 (origin
19929 (method url-fetch)
19930 (uri (pypi-uri "boltons" version))
19931 (sha256
19932 (base32
19933 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19934 (build-system python-build-system)
19935 (home-page "https://github.com/mahmoud/boltons")
19936 (synopsis "Extensions to the Python standard library")
19937 (description
19938 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19939 as — and yet conspicuously missing from — the standard library, including:
19940
19941 @itemize
19942 @item Atomic file saving, bolted on with fileutils
19943 @item A highly-optimized OrderedMultiDict, in dictutils
19944 @item Two types of PriorityQueue, in queueutils
19945 @item Chunked and windowed iteration, in iterutils
19946 @item Recursive data structure iteration and merging, with iterutils.remap
19947 @item Exponential backoff functionality, including jitter, through
19948 iterutils.backoff
19949 @item A full-featured TracebackInfo type, for representing stack traces, in
19950 tbutils
19951 @end itemize")
19952 (license license:bsd-3)))
19953
19954 (define-public python-eliot
19955 (package
19956 (name "python-eliot")
19957 (version "1.12.0")
19958 (source
19959 (origin
19960 (method url-fetch)
19961 (uri (pypi-uri "eliot" version))
19962 (sha256
19963 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19964 (build-system python-build-system)
19965 (arguments
19966 `(#:phases
19967 (modify-phases %standard-phases
19968 (add-after 'unpack 'remove-journald-support
19969 (lambda _
19970 (for-each delete-file
19971 '("eliot/tests/test_journald.py"
19972 "eliot/journald.py"))
19973 #t))
19974 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19975 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19976 ;; be installed and these tests should pass.
19977 (lambda _
19978 (delete-file "eliot/tests/test_prettyprint.py")
19979 #t)))))
19980 (propagated-inputs
19981 `(("python-boltons" ,python-boltons)
19982 ("python-pyrsistent" ,python-pyrsistent)
19983 ("python-six" ,python-six)
19984 ("python-zope-interface" ,python-zope-interface)))
19985 (native-inputs
19986 `(("python-black" ,python-black)
19987 ("python-coverage" ,python-coverage)
19988 ("python-dask" ,python-dask)
19989 ("python-flake8" ,python-flake8)
19990 ("python-hypothesis" ,python-hypothesis)
19991 ("python-pytest" ,python-pytest)
19992 ("python-setuptools" ,python-setuptools)
19993 ("python-sphinx" ,python-sphinx)
19994 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19995 ("python-testtools" ,python-testtools)
19996 ("python-twine" ,python-twine)
19997 ("python-twisted" ,python-twisted)))
19998 (home-page "https://github.com/itamarst/eliot/")
19999 (synopsis "Eliot: the logging system that tells you why it happened")
20000 (description
20001 "@dfn{eliot} is a Python logging system that outputs causal chains of
20002 actions: actions can spawn other actions, and eventually they either succeed
20003 or fail. The resulting logs tell you the story of what your software did: what
20004 happened, and what caused it.")
20005 (license license:asl2.0)))
20006
20007 (define-public python-pem
20008 (package
20009 (name "python-pem")
20010 (version "20.1.0")
20011 (source
20012 (origin
20013 (method url-fetch)
20014 (uri (pypi-uri "pem" version))
20015 (sha256
20016 (base32
20017 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
20018 (build-system python-build-system)
20019 (native-inputs
20020 `(("python-certifi" ,python-certifi)
20021 ("python-coverage" ,python-coverage)
20022 ("python-pretend" ,python-pretend)
20023 ("python-pyopenssl" ,python-pyopenssl)
20024 ("python-pytest" ,python-pytest)
20025 ("python-sphinx" ,python-sphinx)
20026 ("python-twisted" ,python-twisted)))
20027 (home-page "https://pem.readthedocs.io/")
20028 (synopsis "Easy PEM file parsing in Python")
20029 (description
20030 "This package provides a Python module for parsing and splitting PEM files.")
20031 (license license:expat)))
20032
20033 (define-public python-txsni
20034 ;; We need a few commits on top of 0.1.9 for compatibility with newer
20035 ;; Python and OpenSSL.
20036 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
20037 (revision "0"))
20038 (package
20039 (name "python-txsni")
20040 (version (git-version "0.1.9" revision commit))
20041 (home-page "https://github.com/glyph/txsni")
20042 (source
20043 (origin
20044 (method git-fetch)
20045 (uri (git-reference (url home-page) (commit commit)))
20046 (file-name (git-file-name name version))
20047 (sha256
20048 (base32
20049 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
20050 (build-system python-build-system)
20051 (propagated-inputs
20052 `(("python-pyopenssl" ,python-pyopenssl)
20053 ("python-service-identity" ,python-service-identity)
20054 ("python-twisted" ,python-twisted)))
20055 (synopsis "Run TLS servers with Twisted")
20056 (description
20057 "This package provides an easy-to-use SNI endpoint for use
20058 with the Twisted web framework.")
20059 (license license:expat))))
20060
20061 (define-public python-txacme
20062 (package
20063 (name "python-txacme")
20064 (version "0.9.2")
20065 (source
20066 (origin
20067 (method url-fetch)
20068 (uri (pypi-uri "txacme" version))
20069 (sha256
20070 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
20071 (build-system python-build-system)
20072 (propagated-inputs
20073 `(("python-acme" ,python-acme)
20074 ("python-attrs" ,python-attrs)
20075 ("python-eliot" ,python-eliot)
20076 ("python-josepy" ,python-josepy)
20077 ("python-pem" ,python-pem)
20078 ("python-treq" ,python-treq)
20079 ("python-twisted" ,python-twisted)
20080 ("python-txsni" ,python-txsni)))
20081 (native-inputs
20082 `(("python-fixtures" ,python-fixtures)
20083 ("python-hypothesis" ,python-hypothesis)
20084 ("python-mock" ,python-mock)
20085 ("python-service-identity"
20086 ,python-service-identity)
20087 ("python-testrepository" ,python-testrepository)
20088 ("python-testscenarios" ,python-testscenarios)
20089 ("python-testtools" ,python-testtools)))
20090 (home-page "https://github.com/twisted/txacme")
20091 (synopsis "Twisted implexmentation of the ACME protocol")
20092 (description
20093 "ACME is Automatic Certificate Management Environment, a protocol that
20094 allows clients and certificate authorities to automate verification and
20095 certificate issuance. The ACME protocol is used by the free Let's Encrypt
20096 Certificate Authority.
20097
20098 txacme is an implementation of the protocol for Twisted, the event-driven
20099 networking engine for Python.")
20100 (license license:expat)))
20101
20102 (define-public python-pysaml2
20103 (package
20104 (name "python-pysaml2")
20105 (version "5.0.0")
20106 (source
20107 (origin
20108 (method url-fetch)
20109 (uri (pypi-uri "pysaml2" version))
20110 (sha256
20111 (base32
20112 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
20113 (build-system python-build-system)
20114 (propagated-inputs
20115 `(("python-cryptography" ,python-cryptography)
20116 ("python-dateutil" ,python-dateutil)
20117 ("python-defusedxml" ,python-defusedxml)
20118 ("python-pyopenssl" ,python-pyopenssl)
20119 ("python-pytz" ,python-pytz)
20120 ("python-requests" ,python-requests)
20121 ("python-six" ,python-six)))
20122 (home-page "https://idpy.org")
20123 (synopsis "Python implementation of SAML Version 2 Standard")
20124 (description
20125 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
20126 It contains all necessary pieces for building a SAML2 service provider or
20127 an identity provider. The distribution contains examples of both.
20128
20129 This package was originally written to work in a WSGI environment, but
20130 there are extensions that allow you to use it with other frameworks.")
20131 (license license:asl2.0)))
20132
20133 (define-public python-click-plugins
20134 (package
20135 (name "python-click-plugins")
20136 (version "1.1.1")
20137 (source
20138 (origin
20139 (method url-fetch)
20140 (uri (pypi-uri "click-plugins" version))
20141 (sha256
20142 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
20143 (build-system python-build-system)
20144 (native-inputs
20145 `(("python-pytest" ,python-pytest)))
20146 (propagated-inputs
20147 `(("python-click" ,python-click)))
20148 (synopsis "Extension for Click to register external CLI commands")
20149 (description "This package provides n extension module for Click to
20150 register external CLI commands via setuptools entry-points.")
20151 (home-page "https://github.com/click-contrib/click-plugins")
20152 (license license:bsd-3)))
20153
20154 (define-public python-diceware
20155 (package
20156 (name "python-diceware")
20157 (version "0.9.6")
20158 (source
20159 (origin
20160 (method url-fetch)
20161 (uri (pypi-uri "diceware" version))
20162 (sha256
20163 (base32
20164 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
20165 (build-system python-build-system)
20166 (native-inputs
20167 `(("python-coverage" ,python-coverage)
20168 ("python-pytest" ,python-pytest)
20169 ("python-pytest-runner" ,python-pytest-runner)))
20170 (home-page "https://github.com/ulif/diceware/")
20171 (synopsis "Generates memorable passphrases")
20172 (description "This package generates passphrases by concatenating words
20173 randomly picked from wordlists. It supports several sources of
20174 randomness (including real life dice) and different wordlists (including
20175 cryptographically signed ones).")
20176 (license license:gpl3+)))
20177
20178 (define-public pyzo
20179 (package
20180 (name "pyzo")
20181 (version "4.10.2")
20182 (source
20183 (origin
20184 (method url-fetch)
20185 (uri (pypi-uri "pyzo" version))
20186 (sha256
20187 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
20188 (build-system python-build-system)
20189 (arguments
20190 `(#:phases
20191 (modify-phases %standard-phases
20192 (add-before 'check 'fix-home-directory
20193 (lambda _
20194 ;; Tests fail with "Permission denied: '/homeless-shelter'".
20195 (setenv "HOME" "/tmp")
20196 #t)))
20197 ;; Tests fail with "Uncaught Python exception: invalid literal for
20198 ;; int() with base 10: 'test'".
20199 #:tests? #f))
20200 (propagated-inputs
20201 `(("python-pyqt" ,python-pyqt)))
20202 (home-page "https://pyzo.org")
20203 (synopsis
20204 "Python IDE for scientific computing")
20205 (description
20206 "Pyzo is a Python IDE focused on interactivity and introspection,
20207 which makes it very suitable for scientific computing. Its practical
20208 design is aimed at simplicity and efficiency.
20209
20210 It consists of two main components, the editor and the shell, and uses
20211 a set of pluggable tools to help the programmer in various ways. Some
20212 example tools are source structure, project manager, interactive help,
20213 workspace...")
20214 (license license:bsd-2)))
20215
20216 (define-public python-osc
20217 (package
20218 (name "python-osc")
20219 (version "1.7.4")
20220 (source
20221 (origin
20222 (method url-fetch)
20223 (uri (pypi-uri "python-osc" version))
20224 (sha256
20225 (base32
20226 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
20227 (build-system python-build-system)
20228 (home-page "https://github.com/attwad/python-osc")
20229 (synopsis "Open Sound Control server and client implementations")
20230 (description
20231 "@code{python-osc} is a pure Python library with no external
20232 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
20233 Open Sound Control 1.0} specification.")
20234 (license license:unlicense)))
20235
20236 (define-public python-voluptuous
20237 (package
20238 (name "python-voluptuous")
20239 (version "0.11.7")
20240 (source
20241 (origin
20242 (method url-fetch)
20243 (uri (pypi-uri "voluptuous" version))
20244 (sha256
20245 (base32
20246 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
20247 (build-system python-build-system)
20248 (native-inputs
20249 `(("python-nose" ,python-nose)))
20250 (home-page "https://github.com/alecthomas/voluptuous")
20251 (synopsis "Python data validation library")
20252 (description
20253 "Voluptuous is a Python data validation library. It is primarily
20254 intended for validating data coming into Python as JSON, YAML, etc.")
20255 (license license:bsd-3)))
20256
20257 (define-public python-cmd2
20258 (package
20259 (name "python-cmd2")
20260 (version "1.0.2")
20261 (source
20262 (origin
20263 (method url-fetch)
20264 (uri (pypi-uri "cmd2" version))
20265 (sha256
20266 (base32
20267 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
20268 (build-system python-build-system)
20269 (propagated-inputs
20270 `(("python-attrs" ,python-attrs)
20271 ("python-colorama" ,python-colorama)
20272 ("python-pyperclip" ,python-pyperclip)
20273 ("python-wcwidth" ,python-wcwidth)))
20274 (native-inputs
20275 `(("python-codecov" ,python-codecov)
20276 ("python-coverage" ,python-coverage)
20277 ("python-doc8" ,python-doc8)
20278 ("python-flake8" ,python-flake8)
20279 ("python-invoke" ,python-invoke)
20280 ("python-mock" ,python-mock)
20281 ("python-pytest" ,python-pytest)
20282 ("python-pytest-cov" ,python-pytest-cov)
20283 ("python-pytest-mock" ,python-pytest-mock)
20284 ("python-setuptools-scm" ,python-setuptools-scm)
20285 ("python-sphinx" ,python-sphinx)
20286 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
20287 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
20288 ("python-tox" ,python-tox)
20289 ("python-twine" ,python-twine)
20290 ("which" ,which)))
20291 (home-page "https://github.com/python-cmd2/cmd2")
20292 (synopsis "Tool for building interactive command line applications")
20293 (description
20294 "Cmd2 is a tool for building interactive command line applications in
20295 Python. Its goal is to make it quick and easy for developers to build
20296 feature-rich and user-friendly interactive command line applications. It
20297 provides a simple API which is an extension of Python's built-in @code{cmd}
20298 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
20299 make your life easier and eliminates much of the boilerplate code which would
20300 be necessary when using @code{cmd}.")
20301 (license license:expat)))
20302
20303 (define-public python-pytidylib
20304 (package
20305 (name "python-pytidylib")
20306 (version "0.3.2")
20307 (source (origin
20308 (method url-fetch)
20309 (uri (pypi-uri "pytidylib" version))
20310 (sha256
20311 (base32
20312 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
20313 (build-system python-build-system)
20314 (arguments
20315 '(#:phases
20316 (modify-phases %standard-phases
20317 (add-before 'build 'qualify-libtidy
20318 (lambda* (#:key inputs #:allow-other-keys)
20319 (let ((libtidy (string-append (assoc-ref inputs "tidy")
20320 "/lib/libtidy.so")))
20321 (substitute* "tidylib/tidy.py"
20322 (("ctypes\\.util\\.find_library\\('tidy'\\)")
20323 (format #f "'~a'" libtidy)))
20324 #t))))))
20325 (inputs `(("tidy" ,tidy)))
20326 (home-page "https://github.com/countergram/pytidylib")
20327 (synopsis "Python wrapper for HTML Tidy library")
20328 (description
20329 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
20330 allows you, from Python code, to “fix” invalid (X)HTML markup.")
20331 (license license:expat)))
20332
20333 (define-public python2-pytidylib
20334 (package-with-python2 python-pytidylib))
20335
20336 (define-public python-mujson
20337 (package
20338 (name "python-mujson")
20339 (version "1.4")
20340 (source
20341 (origin
20342 (method url-fetch)
20343 (uri (pypi-uri "mujson" version))
20344 (sha256
20345 (base32
20346 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
20347 (build-system python-build-system)
20348 (home-page "https://github.com/mattgiles/mujson")
20349 (synopsis "Use the fastest JSON functions available at import time")
20350 (description "This packages selects the fastest JSON functions available
20351 at import time.")
20352 (license license:expat)))
20353
20354 (define-public python-bashlex
20355 (package
20356 (name "python-bashlex")
20357 (version "0.14")
20358 (source
20359 (origin
20360 (method url-fetch)
20361 (uri (pypi-uri "bashlex" version))
20362 (sha256
20363 (base32
20364 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
20365 (build-system python-build-system)
20366 (arguments
20367 `(#:phases
20368 (modify-phases %standard-phases
20369 (add-before 'build 'pregenerate-yacc-tables
20370 (lambda _
20371 ;; parser.py caches tables, which attempts to write to site lib
20372 ;; see https://github.com/idank/bashlex/issues/51
20373 (invoke "python" "-c" "import bashlex"))))))
20374 (home-page
20375 "https://github.com/idank/bashlex")
20376 (synopsis "Python parser for bash")
20377 (description "@code{bashlex} is a Python port of the parser used
20378 internally by GNU bash.
20379
20380 For the most part it's transliterated from C, the major differences are:
20381
20382 @itemize
20383 @item it does not execute anything
20384 @item it is reentrant
20385 @item it generates a complete AST
20386 @end itemize
20387 ")
20388 (license license:gpl3+)))