gnu: python-psutil: Update to 5.7.2.
[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 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
86 ;;;
87 ;;; This file is part of GNU Guix.
88 ;;;
89 ;;; GNU Guix is free software; you can redistribute it and/or modify it
90 ;;; under the terms of the GNU General Public License as published by
91 ;;; the Free Software Foundation; either version 3 of the License, or (at
92 ;;; your option) any later version.
93 ;;;
94 ;;; GNU Guix is distributed in the hope that it will be useful, but
95 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
96 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
97 ;;; GNU General Public License for more details.
98 ;;;
99 ;;; You should have received a copy of the GNU General Public License
100 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
101
102 (define-module (gnu packages python-xyz)
103 #:use-module ((guix licenses) #:prefix license:)
104 #:use-module (gnu packages)
105 #:use-module (gnu packages algebra)
106 #:use-module (gnu packages adns)
107 #:use-module (gnu packages attr)
108 #:use-module (gnu packages backup)
109 #:use-module (gnu packages bash)
110 #:use-module (gnu packages check)
111 #:use-module (gnu packages cmake)
112 #:use-module (gnu packages compression)
113 #:use-module (gnu packages crypto)
114 #:use-module (gnu packages databases)
115 #:use-module (gnu packages dbm)
116 #:use-module (gnu packages enchant)
117 #:use-module (gnu packages file)
118 #:use-module (gnu packages fontutils)
119 #:use-module (gnu packages gcc)
120 #:use-module (gnu packages geo)
121 #:use-module (gnu packages ghostscript)
122 #:use-module (gnu packages gl)
123 #:use-module (gnu packages glib)
124 #:use-module (gnu packages gnome)
125 #:use-module (gnu packages graphviz)
126 #:use-module (gnu packages graphics)
127 #:use-module (gnu packages gsasl)
128 #:use-module (gnu packages gstreamer)
129 #:use-module (gnu packages gtk)
130 #:use-module (gnu packages icu4c)
131 #:use-module (gnu packages image)
132 #:use-module (gnu packages imagemagick)
133 #:use-module (gnu packages kerberos)
134 #:use-module (gnu packages libevent)
135 #:use-module (gnu packages libffi)
136 #:use-module (gnu packages linux)
137 #:use-module (gnu packages llvm)
138 #:use-module (gnu packages man)
139 #:use-module (gnu packages maths)
140 #:use-module (gnu packages monitoring)
141 #:use-module (gnu packages multiprecision)
142 #:use-module (gnu packages networking)
143 #:use-module (gnu packages ncurses)
144 #:use-module (gnu packages openstack)
145 #:use-module (gnu packages pcre)
146 #:use-module (gnu packages perl)
147 #:use-module (gnu packages photo)
148 #:use-module (gnu packages pkg-config)
149 #:use-module (gnu packages python)
150 #:use-module (gnu packages python-check)
151 #:use-module (gnu packages python-compression)
152 #:use-module (gnu packages python-crypto)
153 #:use-module (gnu packages python-science)
154 #:use-module (gnu packages python-web)
155 #:use-module (gnu packages qt)
156 #:use-module (gnu packages readline)
157 #:use-module (gnu packages sdl)
158 #:use-module (gnu packages search)
159 #:use-module (gnu packages shells)
160 #:use-module (gnu packages sphinx)
161 #:use-module (gnu packages ssh)
162 #:use-module (gnu packages terminals)
163 #:use-module (gnu packages tex)
164 #:use-module (gnu packages texinfo)
165 #:use-module (gnu packages time)
166 #:use-module (gnu packages tls)
167 #:use-module (gnu packages version-control)
168 #:use-module (gnu packages video)
169 #:use-module (gnu packages web)
170 #:use-module (gnu packages base)
171 #:use-module (gnu packages xml)
172 #:use-module (gnu packages xorg)
173 #:use-module (gnu packages xdisorg)
174 #:use-module (gnu packages tcl)
175 #:use-module (gnu packages bdw-gc)
176 #:use-module (gnu packages serialization)
177 #:use-module (guix packages)
178 #:use-module (guix download)
179 #:use-module (guix git-download)
180 #:use-module (guix hg-download)
181 #:use-module (guix utils)
182 #:use-module (guix build-system gnu)
183 #:use-module (guix build-system cmake)
184 #:use-module (guix build-system python)
185 #:use-module (guix build-system trivial)
186 #:use-module (srfi srfi-1)
187 #:use-module (srfi srfi-26))
188
189 (define-public python-tenacity
190 (package
191 (name "python-tenacity")
192 (version "6.1.0")
193 (source (origin
194 (method url-fetch)
195 (uri (pypi-uri "tenacity" version))
196 (sha256
197 (base32
198 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
199 (build-system python-build-system)
200 (native-inputs
201 `(("python-setuptools-scm" ,python-setuptools-scm)
202 ("python-sphinx" ,python-sphinx)
203 ("python-tornado" ,python-tornado)
204 ("python-pytest" ,python-pytest)))
205 (propagated-inputs
206 `(("python-six" ,python-six)))
207 (arguments
208 `(#:phases (modify-phases %standard-phases
209 (replace 'check
210 (lambda _
211 (invoke "pytest")
212 #t)))))
213 (home-page "https://github.com/jd/tenacity")
214 (synopsis "Retrying library for python")
215 (description "Tenacity is a general-purpose python library to simplify the
216 task of adding retry behavior to just about anything.")
217 (license license:asl2.0)))
218
219 (define-public python-colorlog
220 (package
221 (name "python-colorlog")
222 (version "4.1.0")
223 (source (origin
224 (method url-fetch)
225 (uri (pypi-uri "colorlog" version))
226 (sha256
227 (base32
228 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
229 (build-system python-build-system)
230 (native-inputs
231 `(("python-pytest" ,python-pytest)))
232 (arguments
233 `(#:phases (modify-phases %standard-phases
234 (replace 'check
235 (lambda _
236 ;; Extend PYTHONPATH so the built package will be found.
237 (setenv "PYTHONPATH"
238 (string-append (getcwd) "/build/lib:"
239 (getenv "PYTHONPATH")))
240 (invoke "pytest" "-p" "no:logging")
241 #t)))))
242 (home-page "https://github.com/borntyping/python-colorlog")
243 (synopsis "Log formatting with colors for python")
244 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
245 with Python's logging module that outputs records using terminal colors.")
246 (license license:expat)))
247
248 (define-public python-pyprind
249 (package
250 (name "python-pyprind")
251 (version "2.11.2")
252 (source (origin
253 (method url-fetch)
254 (uri (pypi-uri "PyPrind" version))
255 (sha256
256 (base32
257 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
258 (build-system python-build-system)
259 (propagated-inputs
260 `(("python-psutil" ,python-psutil)))
261 (home-page "https://github.com/rasbt/pyprind")
262 (synopsis "Python Progress Bar and Percent Indicator Utility")
263 (description "The PyPrind (Python Progress Indicator) module provides a
264 progress bar and a percentage indicator object that let you track the progress
265 of a loop structure or other iterative computation.")
266 (license license:bsd-3)))
267
268 (define-public python-gphoto2
269 (package
270 (name "python-gphoto2")
271 (version "2.2.1")
272 (source (origin
273 (method url-fetch)
274 (uri (pypi-uri "gphoto2" version))
275 (sha256
276 (base32
277 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
278 (build-system python-build-system)
279 (native-inputs
280 `(("pkg-config" ,pkg-config)))
281 (inputs
282 `(("libgphoto2" ,libgphoto2)))
283 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
284 (synopsis "Python interface to libgphoto2")
285 (description "@code{python-gphoto2} is a comprehensive Python interface
286 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
287 automatically generate the interface code.")
288 (license license:gpl3+)))
289
290 (define-public python-colour
291 (package
292 (name "python-colour")
293 (version "0.1.5")
294 (source (origin
295 (method url-fetch)
296 (uri (pypi-uri "colour" version))
297 (sha256
298 (base32
299 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
300 (build-system python-build-system)
301 (native-inputs
302 `(("python-d2to1" ,python-d2to1)))
303 (home-page "https://github.com/vaab/colour")
304 (synopsis "Convert and manipulate various color representations")
305 (description "Pythonic way to manipulate color representations (HSL, RVB,
306 web, X11, ...).")
307 (license license:expat)))
308
309 (define-public python-d2to1
310 (package
311 (name "python-d2to1")
312 (version "0.2.12.post1")
313 (source (origin
314 (method url-fetch)
315 (uri (pypi-uri "d2to1" version))
316 (sha256
317 (base32
318 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
319 (build-system python-build-system)
320 (native-inputs
321 `(("python-nose" ,python-nose)))
322 (home-page "https://github.com/embray/d2to1")
323 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
324 in python")
325 (description "The python package d2to1 (the d is for distutils) allows
326 using distutils2-like setup.cfg files for a package's metadata with a
327 distribute/setuptools setup.py script.")
328 (license license:bsd-2)))
329
330 (define-public python-rawkit
331 (package
332 (name "python-rawkit")
333 (version "0.6.0")
334 (source (origin
335 (method url-fetch)
336 (uri (pypi-uri "rawkit" version))
337 (sha256
338 (base32
339 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
340 (build-system python-build-system)
341 (native-inputs
342 `(("python-pytest" ,python-pytest)
343 ("python-mock" ,python-mock)))
344 (inputs
345 `(("libraw" ,libraw)))
346 (home-page "https://rawkit.readthedocs.io")
347 (synopsis "Ctypes-based LibRaw binding for Python")
348 (description "The rawkit package provides two modules: rawkit and libraw.
349 The rawkit module provides a high-level Pythonic interface for developing raw
350 photos, while the libraw module provides a CTypes based interface for
351 interacting with the low-level LibRaw C APIs.")
352 (license license:expat)))
353
354 (define-public python-easygui
355 (package
356 (name "python-easygui")
357 (version "0.98.1")
358 (source (origin
359 (method url-fetch)
360 (uri (pypi-uri "easygui" version))
361 (sha256
362 (base32
363 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
364 (build-system python-build-system)
365 (propagated-inputs
366 `(("python-tkinter" ,python "tk")))
367 (home-page "https://github.com/robertlugg/easygui")
368 (synopsis "GUI programming module for Python")
369 (description "EasyGUI is a module for very simple, very easy GUI
370 programming in Python. EasyGUI is different from other GUI generators in that
371 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
372 simple function calls.")
373 (license license:bsd-3)))
374
375 (define-public python-pymediainfo
376 (package
377 (name "python-pymediainfo")
378 (version "4.1")
379 (source
380 (origin
381 (method url-fetch)
382 (uri (pypi-uri "pymediainfo" version))
383 (sha256
384 (base32
385 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
386 (build-system python-build-system)
387 (native-inputs
388 `(("python-setuptools-scm" ,python-setuptools-scm)
389 ("python-pytest" ,python-pytest)))
390 (inputs
391 `(("libmediainfo" ,libmediainfo)))
392 (arguments
393 `(#:phases
394 (modify-phases %standard-phases
395 (add-after 'unpack 'patch-libmediainfo
396 (lambda _
397 (substitute* "pymediainfo/__init__.py"
398 (("libmediainfo.so.0")
399 (string-append (assoc-ref %build-inputs "libmediainfo")
400 "/lib/libmediainfo.so.0")))
401 #t))
402 (replace 'check
403 (lambda _
404 ;; Extend PYTHONPATH so the built package will be found.
405 (setenv "PYTHONPATH"
406 (string-append (getcwd) "/build/lib:"
407 (getenv "PYTHONPATH")))
408 ;; Skip the only failing test "test_parse_url"
409 (invoke "pytest" "-vv" "-k" "not test_parse_url")
410 #t)))))
411 (home-page
412 "https://github.com/sbraz/pymediainfo")
413 (synopsis
414 "Python wrapper for the mediainfo library")
415 (description
416 "Python wrapper for the mediainfo library to access the technical and tag
417 data for video and audio files.")
418 (license license:expat)))
419
420 (define-public python-psutil
421 (package
422 (name "python-psutil")
423 (version "5.7.2")
424 (source
425 (origin
426 (method url-fetch)
427 (uri (pypi-uri "psutil" version))
428 (sha256
429 (base32 "1svv985vmqsls35kmvp3vhh26nsgz229324s9k29awf6qgqhm6ch"))))
430 (build-system python-build-system)
431 (arguments
432 ;; FIXME: some tests do not return and time out. Some tests fail because
433 ;; some processes survive kill().
434 '(#:tests? #f))
435 (home-page "https://www.github.com/giampaolo/psutil")
436 (synopsis "Library for retrieving information on running processes")
437 (description
438 "psutil (Python system and process utilities) is a library for retrieving
439 information on running processes and system utilization (CPU, memory, disks,
440 network) in Python. It is useful mainly for system monitoring, profiling and
441 limiting process resources and management of running processes. It implements
442 many functionalities offered by command line tools such as: ps, top, lsof,
443 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
444 pidof, tty, taskset, pmap.")
445 (properties `((python2-variant . ,(delay python2-psutil))))
446 (license license:bsd-3)))
447
448 (define-public python2-psutil
449 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
450 (package
451 (inherit base)
452 (propagated-inputs
453 `(("python2-enum34" ,python2-enum34) ;optional
454 ,@(package-propagated-inputs base))))))
455
456 (define-public python-shapely
457 (package
458 (name "python-shapely")
459 (version "1.6.4.post2")
460 (source
461 (origin
462 (method url-fetch)
463 (uri (pypi-uri "Shapely" version))
464 (sha256
465 (base32
466 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
467 (build-system python-build-system)
468 (native-inputs
469 `(("python-cython" ,python-cython)
470 ("python-matplotlib" ,python-matplotlib)
471 ("python-pytest" ,python-pytest)
472 ("python-pytest-cov" ,python-pytest-cov)))
473 (inputs
474 `(("geos" ,geos)))
475 (propagated-inputs
476 `(("python-numpy" ,python-numpy)))
477 (arguments
478 `(#:phases
479 (modify-phases %standard-phases
480 (add-after 'unpack 'patch-geos-path
481 (lambda* (#:key inputs #:allow-other-keys)
482 (let ((geos (assoc-ref inputs "geos"))
483 (glibc (assoc-ref inputs ,(if (%current-target-system)
484 "cross-libc" "libc"))))
485 (substitute* "shapely/geos.py"
486 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
487 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
488 geos "/lib/libgeos_c.so'])"))
489 (("free = load_dll\\('c'\\)\\.free")
490 (string-append "free = load_dll('c', fallbacks=['"
491 glibc "/lib/libc.so.6']).free"))))
492 #t)))))
493 (home-page "https://github.com/Toblerity/Shapely")
494 (synopsis "Library for the manipulation and analysis of geometric objects")
495 (description "Shapely is a Python package for manipulation and analysis of
496 planar geometric objects. It is based on the @code{GEOS} library.")
497 (license license:bsd-3)))
498
499 (define-public python-shortuuid
500 (package
501 (name "python-shortuuid")
502 (version "0.5.0")
503 (source
504 (origin
505 (method url-fetch)
506 (uri (pypi-uri "shortuuid" version))
507 (sha256
508 (base32
509 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
510 (build-system python-build-system)
511 (native-inputs
512 `(("python-pep8" ,python-pep8)))
513 (home-page "https://github.com/skorokithakis/shortuuid")
514 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
515 (description
516 "@code{shortuuid} is a Python library for generating concise, unambiguous
517 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
518 module and then similar looking characters are removed.")
519 (license license:bsd-3)))
520
521 (define-public python-logwrap
522 (package
523 (name "python-logwrap")
524 (version "3.2.1")
525 (source
526 (origin
527 (method url-fetch)
528 (uri (pypi-uri "logwrap" version ".zip"))
529 (sha256
530 (base32
531 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
532 (build-system python-build-system)
533 (propagated-inputs
534 `(("python-six" ,python-six)
535 ("python-typing" ,python-typing)))
536 (native-inputs
537 `(("unzip" ,unzip)
538 ("python-cython" ,python-cython)
539 ("python-pytest" ,python-pytest)
540 ("python-pytest-cov" ,python-pytest-cov)
541 ("python-pytest-runner" ,python-pytest-runner)))
542 (home-page "https://github.com/penguinolog/logwrap")
543 (synopsis "Decorator for logging function arguments")
544 (description "This package provides a decorator to log function arguments
545 and function call return values in a human-readable way.")
546 (license license:asl2.0)))
547
548 (define-public python2-shapely
549 (package-with-python2 python-shapely))
550
551 (define-public python-clyent
552 (package
553 (name "python-clyent")
554 (version "1.2.1")
555 (source
556 (origin
557 (method url-fetch)
558 (uri (pypi-uri "clyent" version))
559 (sha256
560 (base32
561 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
562 (build-system python-build-system)
563 (native-inputs
564 `(("python-mock" ,python-mock)))
565 (home-page "https://github.com/Anaconda-Platform/clyent")
566 (synopsis "Command line client library")
567 (description "Clyent is a Python command line utility library. It is used
568 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
569 (license license:bsd-3)))
570
571 (define-public python2-clyent
572 (package-with-python2 python-clyent))
573
574 (define-public python-babel
575 (package
576 (name "python-babel")
577 (version "2.8.0")
578 (source
579 (origin
580 (method url-fetch)
581 (uri (pypi-uri "Babel" version))
582 (sha256
583 (base32
584 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
585 (build-system python-build-system)
586 (native-inputs
587 `(("python-freezegun" ,python-freezegun)
588 ("python-pytest" ,python-pytest)))
589 (propagated-inputs
590 `(("python-pytz" ,python-pytz)))
591 (arguments
592 `(#:phases (modify-phases %standard-phases
593 (replace 'check
594 (lambda _
595 (invoke "pytest" "-vv" "-k"
596 (string-append
597 ;; XXX: These tests fail when using Pytest 4.x and
598 ;; Babel 2.6.0. Try removing this for later versions.
599 "not test_no_inherit_metazone_marker_never_in_output"
600 " and not test_smoke_dates"
601 " and not test_smoke_numbers")))))))
602 (home-page "http://babel.pocoo.org/")
603 (synopsis
604 "Tools for internationalizing Python applications")
605 (description
606 "Babel is composed of two major parts:
607 - tools to build and work with gettext message catalogs
608 - a Python interface to the CLDR (Common Locale Data Repository), providing
609 access to various locale display names, localized number and date formatting,
610 etc. ")
611 (license license:bsd-3)))
612
613 (define-public python2-babel
614 (package-with-python2 python-babel))
615
616 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
617 (define-public python2-babel-2.6
618 (package
619 (inherit python2-babel)
620 (version "2.6.0")
621 (source (origin
622 (method url-fetch)
623 (uri (pypi-uri "Babel" version))
624 (sha256
625 (base32
626 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
627
628 (define-public python2-backport-ssl-match-hostname
629 (package
630 (name "python2-backport-ssl-match-hostname")
631 (version "3.5.0.1")
632 (source
633 (origin
634 (method url-fetch)
635 (uri (pypi-uri "backports.ssl_match_hostname" version))
636 (sha256
637 (base32
638 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
639 (build-system python-build-system)
640 (arguments
641 `(#:python ,python-2
642 #:tests? #f)) ; no test target
643 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
644 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
645 (description
646 "This backport brings the ssl.match_hostname() function to users of
647 earlier versions of Python. The function checks the hostname in the
648 certificate returned by the server to which a connection has been established,
649 and verifies that it matches the intended target hostname.")
650 (license license:psfl)))
651
652 (define-public python-bitarray
653 (package
654 (name "python-bitarray")
655 (version "1.4.0")
656 (source (origin
657 (method url-fetch)
658 (uri (pypi-uri "bitarray" version))
659 (sha256
660 (base32
661 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
662 (build-system python-build-system)
663 (home-page "https://github.com/ilanschnell/bitarray")
664 (synopsis "Efficient arrays of booleans")
665 (description "This package provides an object type which efficiently
666 represents an array of booleans. Bitarrays are sequence types and behave very
667 much like usual lists. Eight bits are represented by one byte in a contiguous
668 block of memory. The user can select between two representations:
669 little-endian and big-endian. All of the functionality is implemented in C.
670 Methods for accessing the machine representation are provided. This can be
671 useful when bit level access to binary files is required, such as portable
672 bitmap image files. Also, when dealing with compressed data which uses
673 variable bit length encoding, you may find this module useful.")
674 (license license:psfl)))
675
676 (define-public python-boolean.py
677 (package
678 (name "python-boolean.py")
679 (version "3.6")
680 (source
681 (origin
682 ;; There's no source tarball on PyPI.
683 (method git-fetch)
684 (uri (git-reference
685 (url "https://github.com/bastikr/boolean.py")
686 (commit (string-append "v" version))))
687 (file-name (git-file-name name version))
688 (sha256
689 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
690 (build-system python-build-system)
691 (home-page "https://github.com/bastikr/boolean.py")
692 (synopsis "Boolean algebra in one Python module")
693 (description
694 "This is a small Python library that implements boolean algebra.
695 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
696 @code{Symbol} class that can take on one of these two values. Calculations
697 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
698 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
699 Expressions are constructed from parsed strings or directly in Python.")
700 (license license:bsd-2)))
701
702 (define-public python-hdf4
703 (package
704 (name "python-hdf4")
705 (version "0.9")
706 (source
707 (origin
708 (method url-fetch)
709 (uri (pypi-uri name version))
710 (sha256
711 (base32
712 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
713 (build-system python-build-system)
714 (native-inputs `(("nose" ,python-nose)))
715 (propagated-inputs `(("numpy" ,python-numpy)))
716 (inputs
717 `(("hdf4" ,hdf4)
718 ("libjpeg" ,libjpeg-turbo)
719 ("zlib" ,zlib)))
720 (arguments
721 `(#:phases
722 (modify-phases %standard-phases
723 (replace 'check
724 (lambda _
725 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
726 ;; on to import numpy. Somehow this works on their CI system.
727 ;; Let's just manage PYTHONPATH here instead.
728 (substitute* "runexamples.sh"
729 (("export PYTHONPATH=.*") ""))
730 (setenv "PYTHONPATH"
731 (string-append (getcwd) ":"
732 (getenv "PYTHONPATH")))
733 (invoke "./runexamples.sh")
734 (invoke "nosetests" "-v"))))))
735 (home-page "https://github.com/fhs/python-hdf4")
736 (synopsis "Python interface to the NCSA HDF4 library")
737 (description
738 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
739 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
740 NetCDF files can also be read and modified. Python-HDF4 is a fork of
741 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
742 (license license:expat)))
743
744 (define-public python2-hdf4
745 (package-with-python2 python-hdf4))
746
747 (define-public python-h5py
748 (package
749 (name "python-h5py")
750 (version "2.10.0")
751 (source
752 (origin
753 (method url-fetch)
754 (uri (pypi-uri "h5py" version))
755 (sha256
756 (base32
757 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
758 (build-system python-build-system)
759 (arguments
760 `(#:tests? #f ; no test target
761 #:phases
762 (modify-phases %standard-phases
763 (add-after 'unpack 'fix-hdf5-paths
764 (lambda* (#:key inputs #:allow-other-keys)
765 (let ((prefix (assoc-ref inputs "hdf5")))
766 (substitute* "setup_build.py"
767 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
768 (string-append "['" prefix "/lib" "']"))
769 (("'/opt/local/include', '/usr/local/include'")
770 (string-append "'" prefix "/include" "'")))
771 (substitute* "setup_configure.py"
772 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
773 (string-append "['" prefix "/lib" "']")))
774 #t))))))
775 (propagated-inputs
776 `(("python-six" ,python-six)
777 ("python-numpy" ,python-numpy)))
778 (inputs
779 `(("hdf5" ,hdf5-1.10)))
780 (native-inputs
781 `(("python-cython" ,python-cython)
782 ("python-pkgconfig" ,python-pkgconfig)
783 ("pkg-config" ,pkg-config)))
784 (home-page "https://www.h5py.org/")
785 (synopsis "Read and write HDF5 files from Python")
786 (description
787 "The h5py package provides both a high- and low-level interface to the
788 HDF5 library from Python. The low-level interface is intended to be a
789 complete wrapping of the HDF5 API, while the high-level component supports
790 access to HDF5 files, datasets and groups using established Python and NumPy
791 concepts.")
792 (license license:bsd-3)))
793
794 (define-public python2-h5py
795 (package-with-python2 python-h5py))
796
797 (define-public python-sh
798 (package
799 (name "python-sh")
800 (version "1.12.14")
801 (source
802 (origin
803 (method url-fetch)
804 (uri (pypi-uri "sh" version))
805 (sha256
806 (base32
807 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
808 (build-system python-build-system)
809 (arguments
810 '(#:phases
811 (modify-phases %standard-phases
812 (replace 'check
813 (lambda _
814 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
815 (setenv "HOME" "/tmp")
816 (invoke "python" "sh.py" "test"))))))
817 (native-inputs
818 `(("python-coverage" ,python-coverage)))
819 (home-page "https://github.com/amoffat/sh")
820 (synopsis "Python subprocess replacement")
821 (description "This package provides a replacement for Python's
822 @code{subprocess} feature.")
823 (license license:expat)))
824
825 (define-public python2-sh
826 (package-with-python2 python-sh))
827
828 (define-public python-cftime
829 (package
830 (name "python-cftime")
831 (version "1.0.4.2")
832 (source
833 (origin
834 (method url-fetch)
835 (uri (pypi-uri "cftime" version))
836 (sha256
837 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
838 (build-system python-build-system)
839 (propagated-inputs
840 `(("python-numpy" ,python-numpy)))
841 (native-inputs
842 `(("python-coveralls" ,python-coveralls)
843 ("python-cython" ,python-cython)
844 ("python-pytest-cov" ,python-pytest-cov)))
845 (home-page "https://github.com/Unidata/cftime")
846 (synopsis "Library for time handling")
847 (description
848 "This package provides time-handling functionality that used to be part
849 of the netcdf4 package before.")
850 ;; This package claims to include code under the GPLv3 but is released
851 ;; under ISC.
852 (license (list license:isc license:gpl3+))))
853
854 (define-public python-netcdf4
855 (package
856 (name "python-netcdf4")
857 (version "1.5.3")
858 (source
859 (origin
860 (method url-fetch)
861 (uri (pypi-uri "netCDF4" version))
862 (sha256
863 (base32
864 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
865 (build-system python-build-system)
866 (arguments
867 '(#:phases
868 (modify-phases %standard-phases
869 (add-after 'unpack 'configure-locations
870 (lambda* (#:key inputs #:allow-other-keys)
871 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
872 #t)))))
873 (native-inputs
874 `(("python-cython" ,python-cython)))
875 (propagated-inputs
876 `(("python-numpy" ,python-numpy)
877 ("python-cftime" ,python-cftime)))
878 (inputs
879 `(("netcdf" ,netcdf)
880 ("hdf4" ,hdf4)
881 ("hdf5" ,hdf5)))
882 (home-page "https://github.com/Unidata/netcdf4-python")
883 (synopsis "Python/numpy interface to the netCDF library")
884 (description "Netcdf4-python is a Python interface to the netCDF C
885 library. netCDF version 4 has many features not found in earlier
886 versions of the library and is implemented on top of HDF5. This module
887 can read and write files in both the new netCDF 4 and the old netCDF 3
888 format, and can create files that are readable by HDF5 clients. The
889 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
890 to users of that module.")
891 ;; The software is mainly ISC, but includes some files covered
892 ;; by the Expat license.
893 (license (list license:isc license:expat))))
894
895 (define-public python2-netcdf4
896 (package-with-python2 python-netcdf4))
897
898 (define-public python-license-expression
899 (package
900 (name "python-license-expression")
901 (version "0.999")
902 (source
903 (origin
904 (method url-fetch)
905 (uri (pypi-uri "license-expression" version))
906 (sha256
907 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
908 (build-system python-build-system)
909 (propagated-inputs
910 `(("python-boolean.py" ,python-boolean.py)))
911 (home-page "https://github.com/nexB/license-expression")
912 (synopsis "Apply boolean logic to license expressions")
913 (description
914 "This Python module defines a tiny language to evaluate and compare
915 license expressions using boolean logic. Logical combinations of licenses can
916 be tested for equality, containment, and equivalence. They can be normalised
917 and simplified. It supports SPDX license expressions as well as other naming
918 conventions and aliases in the same expression.")
919 (license license:gpl2+)))
920
921 (define-public python-lockfile
922 (package
923 (name "python-lockfile")
924 (version "0.12.2")
925 (source
926 (origin
927 (method url-fetch)
928 (uri (pypi-uri "lockfile" version))
929 (sha256
930 (base32
931 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
932 (build-system python-build-system)
933 (arguments '(#:test-target "check"))
934 (native-inputs
935 `(("python-pbr" ,python-pbr)))
936 (home-page "https://launchpad.net/pylockfile")
937 (synopsis "Platform-independent file locking module")
938 (description
939 "The lockfile package exports a LockFile class which provides a simple
940 API for locking files.")
941 (license license:expat)))
942
943 (define-public python2-lockfile
944 (package-with-python2 python-lockfile))
945
946 (define-public python-filelock
947 (package
948 (name "python-filelock")
949 (version "3.0.12")
950 (source
951 (origin
952 (method url-fetch)
953 (uri (pypi-uri "filelock" version))
954 (sha256
955 (base32
956 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
957 (build-system python-build-system)
958 (home-page
959 "https://github.com/benediktschmitt/py-filelock")
960 (synopsis "Platform independent file lock")
961 (description "@code{filelock} contains a single module implementing
962 a platform independent file lock in Python, which provides a simple way of
963 inter-process communication.")
964 (license license:unlicense)))
965
966 (define-public python-semantic-version
967 (package
968 (name "python-semantic-version")
969 (version "2.6.0")
970 (source
971 (origin
972 (method url-fetch)
973 (uri (pypi-uri "semantic_version" version))
974 (sha256
975 (base32
976 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
977 (build-system python-build-system)
978 (arguments
979 `(#:tests? #f)) ; PyPI tarball lacks tests
980 (home-page "https://github.com/rbarrois/python-semanticversion")
981 (synopsis "Semantic versioning module for Python")
982 (description
983 "The @code{semantic_version} class is a small library for handling
984 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
985
986 It can compare versions, generate a new version that represents a bump in one of
987 the version levels, and check whether any given string is a proper semantic
988 version identifier.")
989 (license license:bsd-3)))
990
991 (define-public python2-semantic-version
992 (package-with-python2 python-semantic-version))
993
994 (define-public python-serpent
995 (package
996 (name "python-serpent")
997 (version "1.28")
998 (source
999 (origin
1000 (method url-fetch)
1001 (uri (pypi-uri "serpent" version))
1002 (sha256
1003 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1004 (build-system python-build-system)
1005 (native-inputs
1006 `(("python-attrs" ,python-attrs)
1007 ("python-pytz" ,python-pytz)))
1008 (home-page "https://github.com/irmen/Serpent")
1009 (synopsis "Serializer for literal Python expressions")
1010 (description
1011 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1012 serialization. It serializes an object tree into bytes (an utf-8 encoded
1013 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1014 to rebuild the original object tree.
1015
1016 Because only safe literals are encoded, it is safe to send serpent data to
1017 other machines, such as over the network.")
1018 (properties `((python2-variant . ,(delay python2-serpent))))
1019 (license license:expat)))
1020
1021 (define-public python2-serpent
1022 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1023 (package
1024 (inherit base)
1025 (propagated-inputs
1026 `(("python-enum34" ,python2-enum34)
1027 ,@(package-propagated-inputs base))))))
1028
1029 (define-public python-setuptools
1030 (package
1031 (name "python-setuptools")
1032 (version "41.0.1")
1033 (source
1034 (origin
1035 (method url-fetch)
1036 (uri (pypi-uri "setuptools" version ".zip"))
1037 (sha256
1038 (base32
1039 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1040 (modules '((guix build utils)))
1041 (snippet
1042 '(begin
1043 ;; Remove included binaries which are used to build self-extracting
1044 ;; installers for Windows.
1045 ;; TODO: Find some way to build them ourself so we can include them.
1046 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1047 #t))))
1048 (build-system python-build-system)
1049 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1050 ;; One could bootstrap with an internal untested setuptools.
1051 (arguments
1052 `(#:tests? #f))
1053 (home-page "https://pypi.org/project/setuptools/")
1054 (synopsis
1055 "Library designed to facilitate packaging Python projects")
1056 (description
1057 "Setuptools is a fully-featured, stable library designed to facilitate
1058 packaging Python projects, where packaging includes:
1059 Python package and module definitions,
1060 distribution package metadata,
1061 test hooks,
1062 project installation,
1063 platform-specific details,
1064 Python 3 support.")
1065 ;; TODO: setuptools now bundles the following libraries:
1066 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1067 (license (list license:psfl ; setuptools itself
1068 license:expat ; six, appdirs, pyparsing
1069 license:asl2.0 ; packaging is dual ASL2/BSD-2
1070 license:bsd-2))))
1071
1072 (define-public python2-setuptools
1073 (package-with-python2 python-setuptools))
1074
1075 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1076 (define-public python-setuptools-for-tensorflow
1077 (hidden-package
1078 (package
1079 (inherit python-setuptools)
1080 (version "39.1.0")
1081 (source (origin
1082 (inherit (package-source python-setuptools))
1083 (uri (pypi-uri "setuptools" version ".zip"))
1084 (sha256
1085 (base32
1086 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1087
1088 (define-public python-uniseg
1089 (package
1090 (name "python-uniseg")
1091 (version "0.7.1")
1092 (source
1093 (origin
1094 (method url-fetch)
1095 (uri (pypi-uri "uniseg" version ".zip"))
1096 (sha256
1097 (base32
1098 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1099 (build-system python-build-system)
1100 (arguments
1101 '(#:tests? #f)) ; The test suite requires network access.
1102 (native-inputs
1103 `(("unzip" ,unzip)))
1104 (home-page
1105 "https://bitbucket.org/emptypage/uniseg-python")
1106 (synopsis
1107 "Python library to determine Unicode text segmentations")
1108 (description
1109 "Uniseg is a Python package used to determine Unicode text segmentations.
1110 Supported segmentations include:
1111 @enumerate
1112 @item @dfn{Code point} (any value in the Unicode codespace)
1113 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1114 multiple Unicode code points, e.g. \"G\" + acute-accent)
1115 @item Word break
1116 @item Sentence break
1117 @item Line break
1118 @end enumerate")
1119 (license license:expat)))
1120
1121 (define-public python2-uniseg
1122 (package-with-python2 python-uniseg))
1123
1124 (define-public python-humanfriendly
1125 (package
1126 (name "python-humanfriendly")
1127 (version "8.2")
1128 (source
1129 (origin
1130 (method url-fetch)
1131 (uri (pypi-uri "humanfriendly" version))
1132 (sha256
1133 (base32
1134 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
1135 (build-system python-build-system)
1136 (arguments
1137 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1138 #:tests? #f))
1139 (home-page "https://humanfriendly.readthedocs.io")
1140 (synopsis "Human-friendly input and output in Python")
1141 (description
1142 "The functions and classes in @code{humanfriendly} can be used to make
1143 text interfaces more user-friendly. It includes tools to parse and format
1144 numbers, file sizes, and timespans, timers for long-running operations, menus
1145 to allow the user to choose from a list of options, and terminal interaction
1146 helpers.")
1147 (properties `((python2-variant . ,(delay python2-humanfriendly))))
1148 (license license:expat)))
1149
1150 (define-public python2-humanfriendly
1151 (let ((base (package-with-python2
1152 (strip-python2-variant python-humanfriendly))))
1153 (package (inherit base)
1154 (propagated-inputs
1155 `(("python2-monotonic" ,python2-monotonic)
1156 ,@(package-propagated-inputs base))))))
1157
1158 (define-public python-textparser
1159 (package
1160 (name "python-textparser")
1161 (version "0.23.0")
1162 (source
1163 (origin
1164 (method url-fetch)
1165 (uri (pypi-uri "textparser" version))
1166 (sha256
1167 (base32
1168 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1169 (build-system python-build-system)
1170 (home-page "https://github.com/eerimoq/textparser")
1171 (synopsis "Fast text parser for Python")
1172 (description "This library provides a text parser written in the Python
1173 language. It aims to be fast.")
1174 (license license:expat)))
1175
1176 (define-public python-aenum
1177 (package
1178 (name "python-aenum")
1179 (version "2.2.3")
1180 (source
1181 (origin
1182 (method url-fetch)
1183 (uri (pypi-uri "aenum" version))
1184 (sha256
1185 (base32
1186 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1187 (build-system python-build-system)
1188 (arguments
1189 `(#:phases (modify-phases %standard-phases
1190 (replace 'check
1191 (lambda _
1192 (format #t "current working dir ~s~%" (getcwd))
1193 (setenv "PYTHONPATH"
1194 (string-append ".:" (getenv "PYTHONPATH")))
1195 ;; We must run the test suite module directly, as it
1196 ;; fails to define the 'tempdir' variable in scope for
1197 ;; the tests otherwise
1198 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1199 ;; issues/32/running-tests-with-python-setuppy-test).
1200 (invoke "python3" "aenum/test.py")
1201 ;; This one fails with "NameError: name
1202 ;; 'test_pickle_dump_load' is not defined" (see:
1203 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1204 ;; /error-running-the-test_v3py-test-suite).
1205 ;; (invoke "python3" "aenum/test_v3.py")
1206 #t)))))
1207 (home-page "https://bitbucket.org/stoneleaf/aenum")
1208 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1209 (description "The aenum library includes an @code{Enum} base class, a
1210 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1211 class.")
1212 (license license:bsd-3)))
1213
1214 (define-public python-can
1215 (package
1216 (name "python-can")
1217 (version "3.3.3")
1218 (source
1219 (origin
1220 (method url-fetch)
1221 (uri (pypi-uri "python-can" version))
1222 (sha256
1223 (base32
1224 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1225 (build-system python-build-system)
1226 (arguments
1227 `(#:phases (modify-phases %standard-phases
1228 (add-after 'unpack 'relax-version-requirements
1229 (lambda _
1230 (substitute* "setup.py"
1231 (("mock~=2\\.0") "mock")
1232 (("coverage<5") "coverage")
1233 (("pytest~=4\\.3") "pytest")
1234 (("hypothesis~=4\\.56") "hypothesis"))
1235 #t))
1236 (add-after 'unpack 'fix-broken-tests
1237 ;; The tests try to run two scripts it expects should be
1238 ;; in PATH, but they aren't at this time (see:
1239 ;; https://github.com/hardbyte/python-can/issues/805).
1240 (lambda _
1241 (substitute* "test/test_scripts.py"
1242 (("\"can_logger\\.py --help\"") "")
1243 (("\"can_player\\.py --help\"") ""))
1244 #t)))))
1245 (propagated-inputs
1246 `(("python-aenum" ,python-aenum)
1247 ("python-wrapt" ,python-wrapt)))
1248 (native-inputs
1249 `(("python-codecov" ,python-codecov)
1250 ("python-coverage" ,python-coverage)
1251 ("python-future" ,python-future)
1252 ("python-hypothesis" ,python-hypothesis)
1253 ("python-mock" ,python-mock)
1254 ("python-pyserial" ,python-pyserial)
1255 ("python-pytest" ,python-pytest)
1256 ("python-pytest-cov" ,python-pytest-cov)
1257 ("python-pytest-runner" ,python-pytest-runner)
1258 ("python-pytest-timeout" ,python-pytest-timeout)))
1259 (home-page "https://github.com/hardbyte/python-can")
1260 (synopsis "Controller Area Network (CAN) interface module for Python")
1261 (description "This package defines the @code{can} module, which provides
1262 controller area network (CAN) support for Python developers; providing common
1263 abstractions to different hardware devices, and a suite of utilities for
1264 sending and receiving messages on a CAN bus.")
1265 (license license:lgpl3+)))
1266
1267 (define-public python-diskcache
1268 (package
1269 (name "python-diskcache")
1270 (version "4.1.0")
1271 (source
1272 (origin
1273 (method url-fetch)
1274 (uri (pypi-uri "diskcache" version))
1275 (sha256
1276 (base32
1277 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1278 (build-system python-build-system)
1279 (arguments
1280 `(#:tests? #f)) ;test suite not included in the release
1281 (home-page "http://www.grantjenks.com/docs/diskcache/")
1282 (synopsis "Disk and file backed cache library")
1283 (description "DiskCache is a disk and file backed persistent cache.")
1284 (license license:asl2.0)))
1285
1286 (define-public python-bitstruct
1287 (package
1288 (name "python-bitstruct")
1289 (version "8.9.0")
1290 (source
1291 (origin
1292 (method url-fetch)
1293 (uri (pypi-uri "bitstruct" version))
1294 (sha256
1295 (base32
1296 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1297 (build-system python-build-system)
1298 (home-page "https://github.com/eerimoq/bitstruct")
1299 (synopsis "Python values to and C bit field structs converter")
1300 (description "This module performs conversions between Python values and C
1301 bit field structs represented as Python byte strings. It is intended to have
1302 a similar interface as the @code{struct} module from Python, but working on
1303 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1304 (license license:expat)))
1305
1306 (define-public python-cantools
1307 (package
1308 (name "python-cantools")
1309 (version "33.1.1")
1310 (source
1311 (origin
1312 ;; We take the sources from the Git repository as the documentation is
1313 ;; not included with the PyPI archive.
1314 (method git-fetch)
1315 (uri (git-reference
1316 (url "https://github.com/eerimoq/cantools")
1317 (commit version)))
1318 (file-name (git-file-name name version))
1319 (sha256
1320 (base32
1321 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1322 (build-system python-build-system)
1323 (arguments
1324 `(#:phases
1325 (modify-phases %standard-phases
1326 (add-after 'build 'build-doc
1327 (lambda _
1328 ;; See: https://github.com/eerimoq/cantools/issues/190.
1329 (substitute* "README.rst"
1330 (("https://github.com/eerimoq/cantools/raw/master\
1331 /docs/monitor.png")
1332 "monitor.png"))
1333 (with-directory-excursion "docs"
1334 (invoke "make" "man" "info"))))
1335 (add-after 'install 'install-doc
1336 (lambda* (#:key outputs #:allow-other-keys)
1337 (let* ((out (assoc-ref outputs "out"))
1338 (info (string-append out "/share/info"))
1339 (man1 (string-append out "/share/man/man1")))
1340 (format #t "CWD: ~s~%" (getcwd))
1341 (install-file "docs/_build/texinfo/cantools.info" info)
1342 (install-file "docs/_build/man/cantools.1" man1)
1343 #t))))))
1344 (native-inputs
1345 `(("sphinx" ,python-sphinx)
1346 ("texinfo" ,texinfo)))
1347 (propagated-inputs
1348 `(("python-bitstruct" ,python-bitstruct)
1349 ("python-can" ,python-can)
1350 ("python-diskcache" ,python-diskcache)
1351 ("python-textparser" ,python-textparser)))
1352 (home-page "https://github.com/eerimoq/cantools")
1353 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1354 (description "This package includes Controller Area Network (CAN) related
1355 tools that can be used to:
1356 @itemize
1357 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1358 @item encode and decode CAN messages
1359 @item multiplex simple and extended signals
1360 @item diagnose DID encoding and decoding
1361 @item dump the CAN decoder output
1362 @item test CAN nodes
1363 @item generate C source code
1364 @item monitor the CAN bus
1365 @end itemize")
1366 (license license:expat)))
1367
1368 (define-public python-capturer
1369 (package
1370 (name "python-capturer")
1371 (version "2.4")
1372 (source
1373 (origin
1374 (method url-fetch)
1375 (uri (pypi-uri "capturer" version))
1376 (sha256
1377 (base32
1378 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1379 (build-system python-build-system)
1380 (arguments
1381 `(#:tests? #f))
1382 (propagated-inputs
1383 `(("python-humanfriendly" ,python-humanfriendly)))
1384 (home-page "https://capturer.readthedocs.io")
1385 (synopsis "Capture stdout and stderr streams of the current process")
1386 (description
1387 "The capturer package makes it easy to capture the stdout and stderr
1388 streams of the current process and subprocesses. Output can be relayed
1389 to the terminal in real time but is also available to the Python program
1390 for additional processing.")
1391 (license license:expat)))
1392
1393 (define-public python2-capturer
1394 (package-with-python2 python-capturer))
1395
1396 (define-public python-case
1397 (package
1398 (name "python-case")
1399 (version "1.5.3")
1400 (source
1401 (origin
1402 (method url-fetch)
1403 (uri (pypi-uri "case" version))
1404 (sha256
1405 (base32
1406 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1407 (build-system python-build-system)
1408 (propagated-inputs
1409 `(("python-mock" ,python-mock)
1410 ("python-nose" ,python-nose)
1411 ("python-six" ,python-six)
1412 ("python-unittest2" ,python-unittest2)))
1413 (native-inputs
1414 `(("python-coverage" ,python-coverage)))
1415 (home-page "https://github.com/celery/case")
1416 (synopsis "Unittest utilities and convenience methods")
1417 (description
1418 "The @code{case} package provides utilities on top of unittest, including
1419 some helpful Python 2 compatibility convenience methods.")
1420 (license license:bsd-3)))
1421
1422 (define-public python-verboselogs
1423 (package
1424 (name "python-verboselogs")
1425 (version "1.7")
1426 (source
1427 (origin
1428 (method url-fetch)
1429 (uri (pypi-uri "verboselogs" version))
1430 (sha256
1431 (base32
1432 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1433 (build-system python-build-system)
1434 (arguments
1435 `(#:phases
1436 (modify-phases %standard-phases
1437 (replace 'check
1438 (lambda _
1439 ;; Do not run pylint plugin test, as astroid is an old
1440 ;; unsupported version.
1441 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1442 "verboselogs/tests.py"))))))
1443 (native-inputs
1444 `(("python-mock" ,python-mock)
1445 ("python-pytest" ,python-pytest)))
1446 (home-page "https://verboselogs.readthedocs.io")
1447 (synopsis "Verbose logging level for Python's logging module")
1448 (description
1449 "The @code{verboselogs} package extends Python's @code{logging} module to
1450 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1451 (license license:expat)))
1452
1453 (define-public python2-verboselogs
1454 (package-with-python2 python-verboselogs))
1455
1456 (define-public python-coloredlogs
1457 (package
1458 (name "python-coloredlogs")
1459 (version "10.0")
1460 (source
1461 (origin
1462 (method url-fetch)
1463 (uri (pypi-uri "coloredlogs" version))
1464 (sha256
1465 (base32
1466 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1467 (build-system python-build-system)
1468 (arguments
1469 `(;Tests require some updated modules
1470 #:tests? #f))
1471 (propagated-inputs
1472 `(("python-capturer" ,python-capturer)))
1473 (home-page "https://coloredlogs.readthedocs.io")
1474 (synopsis "Colored stream handler for Python's logging module")
1475 (description
1476 "The @code{coloredlogs} package enables colored terminal output for
1477 Python's logging module. The @code{ColoredFormatter} class inherits from
1478 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1479 messages in color.")
1480 (license license:expat)))
1481
1482 (define-public python2-coloredlogs
1483 (package-with-python2 python-coloredlogs))
1484
1485 (define-public python-editorconfig
1486 (package
1487 (name "python-editorconfig")
1488 (version "0.12.2")
1489 (source
1490 (origin
1491 (method url-fetch)
1492 (uri (pypi-uri "EditorConfig" version))
1493 (sha256
1494 (base32
1495 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1496 (build-system python-build-system)
1497 (home-page "https://editorconfig.org/")
1498 (synopsis "EditorConfig bindings for python")
1499 (description "The EditorConfig project consists of a file format for
1500 defining coding styles and a collection of text editor plugins that enable
1501 editors to read the file format and adhere to defined styles. EditorConfig
1502 files are easily readable and they work nicely with version control systems.")
1503 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1504 (license (list license:bsd-2 license:psfl))))
1505
1506 (define-public python-et-xmlfile
1507 (package
1508 (name "python-et-xmlfile")
1509 (version "1.0.1")
1510 (source
1511 (origin
1512 (method url-fetch)
1513 (uri (pypi-uri "et_xmlfile" version))
1514 (sha256
1515 (base32
1516 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1517 (build-system python-build-system)
1518 (arguments
1519 `(#:phases (modify-phases %standard-phases
1520 (replace 'check
1521 (lambda _
1522 (invoke "pytest"))))))
1523 (native-inputs
1524 `(("python-pytest" ,python-pytest)
1525 ("python-lxml" ,python-lxml))) ;used for the tests
1526 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1527 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1528 (description "This Python library is based upon the @code{xmlfile} module
1529 from @code{lxml}. It aims to provide a low memory, compatible implementation
1530 of @code{xmlfile}.")
1531 (license license:expat)))
1532
1533 (define-public python2-et-xmlfile
1534 (package-with-python2 python-et-xmlfile))
1535
1536 (define-public python-openpyxl
1537 (package
1538 (name "python-openpyxl")
1539 (version "2.6.2")
1540 (source
1541 (origin
1542 ;; We use the upstream repository, as the tests are not included in the
1543 ;; PyPI releases.
1544 (method hg-fetch)
1545 (uri (hg-reference
1546 (url "https://bitbucket.org/openpyxl/openpyxl")
1547 (changeset version)))
1548 (file-name (string-append name "-" version "-checkout"))
1549 (sha256
1550 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1551 (build-system python-build-system)
1552 (arguments
1553 `(#:phases (modify-phases %standard-phases
1554 (replace 'check
1555 (lambda _
1556 (invoke "pytest"))))))
1557 (native-inputs
1558 ;; For the test suite.
1559 `(("python-lxml" ,python-lxml)
1560 ("python-pillow" ,python-pillow)
1561 ("python-pytest" ,python-pytest)))
1562 (propagated-inputs
1563 `(("python-et-xmlfile" ,python-et-xmlfile)
1564 ("python-jdcal" ,python-jdcal)))
1565 (home-page "https://openpyxl.readthedocs.io")
1566 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1567 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1568 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1569 standard.")
1570 (license license:expat)))
1571
1572 (define-public python-eventlet
1573 (package
1574 (name "python-eventlet")
1575 (version "0.25.1")
1576 (source
1577 (origin
1578 (method url-fetch)
1579 (uri (pypi-uri "eventlet" version))
1580 (sha256
1581 (base32
1582 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1583 (build-system python-build-system)
1584 (propagated-inputs
1585 `(("python-greenlet" ,python-greenlet)))
1586 (arguments
1587 ;; TODO: Requires unpackaged 'enum-compat'.
1588 '(#:tests? #f))
1589 (home-page "https://eventlet.net")
1590 (synopsis "Concurrent networking library for Python")
1591 (description
1592 "Eventlet is a concurrent networking library for Python that
1593 allows you to change how you run your code, not how you write it.
1594 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1595 Coroutines ensure that the developer uses a blocking style of programming
1596 that is similar to threading, but provide the benefits of non-blocking I/O.
1597 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1598 from the Python interpreter, or as a small part of a larger application.")
1599 (license license:expat)))
1600
1601 (define-public python2-eventlet
1602 (let ((base (package-with-python2
1603 (strip-python2-variant python-eventlet))))
1604 (package (inherit base)
1605 (propagated-inputs
1606 `(("python2-enum34" ,python2-enum34)
1607 ,@(package-propagated-inputs base))))))
1608
1609 (define-public python-six
1610 (package
1611 (name "python-six")
1612 (version "1.14.0")
1613 (source
1614 (origin
1615 (method url-fetch)
1616 (uri (pypi-uri "six" version))
1617 (sha256
1618 (base32
1619 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1620 (build-system python-build-system)
1621 (arguments
1622 `(#:phases
1623 (modify-phases %standard-phases
1624 (replace 'check
1625 (lambda _
1626 (invoke "py.test" "-v"))))))
1627 (native-inputs
1628 `(("python-pytest" ,python-pytest-bootstrap)))
1629 (home-page "https://pypi.org/project/six/")
1630 (synopsis "Python 2 and 3 compatibility utilities")
1631 (description
1632 "Six is a Python 2 and 3 compatibility library. It provides utility
1633 functions for smoothing over the differences between the Python versions with
1634 the goal of writing Python code that is compatible on both Python versions.
1635 Six supports every Python version since 2.5. It is contained in only one
1636 Python file, so it can be easily copied into your project.")
1637 (license license:x11)))
1638
1639 (define-public python2-six
1640 (package-with-python2 python-six))
1641
1642 (define-public python-six-bootstrap
1643 (package
1644 (inherit python-six)
1645 (name "python-six-bootstrap")
1646 (native-inputs `())
1647 (arguments `(#:tests? #f))))
1648
1649 (define-public python2-six-bootstrap
1650 (package-with-python2 python-six-bootstrap))
1651
1652 (define-public python-schedule
1653 (package
1654 (name "python-schedule")
1655 (version "0.4.3")
1656 (source
1657 (origin
1658 (method url-fetch)
1659 (uri (pypi-uri "schedule" version))
1660 (sha256
1661 (base32
1662 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1663 (build-system python-build-system)
1664 (native-inputs
1665 `(("python-pytest" ,python-pytest)
1666 ("python-mock" ,python-mock)))
1667 (home-page "https://github.com/dbader/schedule")
1668 (synopsis "Schedule periodic function calls in Python")
1669 (description
1670 "Schedule is an in-process scheduler for periodic jobs that uses the
1671 builder pattern for configuration. Schedule lets you run Python functions (or
1672 any other callable) periodically at pre-determined intervals using a simple,
1673 human-friendly syntax.")
1674 (license license:expat)))
1675
1676 (define-public python2-schedule
1677 (package-with-python2 python-schedule))
1678
1679 (define-public python-mechanize
1680 (package
1681 (name "python-mechanize")
1682 (version "0.4.5")
1683 (source
1684 (origin
1685 (method url-fetch)
1686 (uri (pypi-uri "mechanize" version))
1687 (sha256
1688 (base32
1689 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1690 (build-system python-build-system)
1691 (propagated-inputs
1692 `(("python-html5lib" ,python-html5lib)))
1693 (home-page "https://github.com/python-mechanize/mechanize")
1694 (synopsis
1695 "Stateful programmatic web browsing in Python")
1696 (description
1697 "Mechanize implements stateful programmatic web browsing in Python,
1698 after Andy Lester’s Perl module WWW::Mechanize.")
1699 (license license:bsd-3)))
1700
1701 (define-public python2-mechanize
1702 (package-with-python2 python-mechanize))
1703
1704 (define-public python-simplejson
1705 (package
1706 (name "python-simplejson")
1707 (version "3.17.0")
1708 (source
1709 (origin
1710 (method url-fetch)
1711 (uri (pypi-uri "simplejson" version))
1712 (sha256
1713 (base32
1714 "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
1715 (build-system python-build-system)
1716 (home-page "http://simplejson.readthedocs.org/en/latest/")
1717 (synopsis
1718 "Json library for Python")
1719 (description
1720 "JSON (JavaScript Object Notation) is a subset of JavaScript
1721 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1722 format.
1723
1724 Simplejson exposes an API familiar to users of the standard library marshal
1725 and pickle modules. It is the externally maintained version of the json
1726 library contained in Python 2.6, but maintains compatibility with Python 2.5
1727 and (currently) has significant performance advantages, even without using
1728 the optional C extension for speedups. Simplejson is also supported on
1729 Python 3.3+.")
1730 (license license:x11)))
1731
1732 (define-public python2-simplejson
1733 (package-with-python2 python-simplejson))
1734
1735
1736 (define-public python-pyicu
1737 (package
1738 (name "python-pyicu")
1739 (version "2.4.3")
1740 (source
1741 (origin
1742 (method url-fetch)
1743 (uri (pypi-uri "PyICU" version))
1744 (sha256
1745 (base32
1746 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1747 (build-system python-build-system)
1748 (inputs
1749 `(("icu4c" ,icu4c)))
1750 (native-inputs
1751 `(("python-pytest" ,python-pytest)
1752 ("python-six" ,python-six)))
1753 (home-page "https://github.com/ovalhub/pyicu")
1754 (synopsis "Python extension wrapping the ICU C++ API")
1755 (description
1756 "PyICU is a python extension wrapping the ICU C++ API.")
1757 (license license:x11)))
1758
1759 (define-public python2-pyicu
1760 (package-with-python2 python-pyicu))
1761
1762 (define-public python-dogtail
1763 (package
1764 (name "python-dogtail")
1765 (version "0.9.11")
1766 (source (origin
1767 (method url-fetch)
1768 (uri
1769 (string-append
1770 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1771 "dogtail-" version ".tar.gz"))
1772 (sha256
1773 (base32
1774 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1775 (build-system python-build-system)
1776 (arguments
1777 `(#:tests? #f ; TODO Launching dbus for the tests
1778 ; fails
1779 #:phases
1780 (modify-phases %standard-phases
1781 (replace 'check
1782 (lambda* (#:key tests? #:allow-other-keys)
1783 (when tests?
1784 (system "Xvfb :1 &")
1785 (setenv "DISPLAY" ":1")
1786 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1787 #t)))))
1788 (propagated-inputs
1789 `(("python-pygobject" ,python-pygobject)
1790 ("python-pycairo" ,python-pycairo)
1791 ("python-pyatspi" ,python-pyatspi)))
1792 (native-inputs
1793 `(("python-nose" ,python-nose)
1794 ("gtk+" ,gtk+)
1795 ("xvfb" ,xorg-server)
1796 ("dbus" ,dbus)
1797 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1798 ("gobject-introspection" ,gobject-introspection)))
1799 (home-page "https://gitlab.com/dogtail/dogtail/")
1800 (synopsis "GUI test tool and automation framework written in Python")
1801 (description
1802 "Dogtail is a GUI test tool and automation framework written in Python.
1803 It uses Accessibility (a11y) technologies to communicate with desktop
1804 applications. dogtail scripts are written in Python and executed like any
1805 other Python program.")
1806 (license license:gpl2+)))
1807
1808 (define-public python2-dogtail
1809 (package-with-python2 python-dogtail))
1810
1811 (define-public python-empy
1812 (package
1813 (name "python-empy")
1814 (version "3.3.3")
1815 (source (origin
1816 (method url-fetch)
1817 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1818 version ".tar.gz"))
1819 (sha256
1820 (base32
1821 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1822 (build-system python-build-system)
1823 (arguments
1824 `(#:tests? #f)) ; python2 only
1825 (home-page "http://www.alcyone.com/software/empy/")
1826 (synopsis "Templating system for Python")
1827 (description
1828 "EmPy is a system for embedding Python expressions and statements in
1829 template text; it takes an EmPy source file, processes it, and produces
1830 output. This is accomplished via expansions, which are special signals to the
1831 EmPy system and are set off by a special prefix (by default the at sign, @@).
1832 EmPy can expand arbitrary Python expressions and statements in this way, as
1833 well as a variety of special forms. Textual data not explicitly delimited in
1834 this way is sent unaffected to the output, allowing Python to be used in
1835 effect as a markup language. Also supported are callbacks via hooks,
1836 recording and playback via diversions, and dynamic, chainable filters. The
1837 system is highly configurable via command line options and embedded
1838 commands.")
1839 (license license:lgpl2.1+)))
1840
1841 (define-public python2-empy
1842 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1843 (package
1844 (inherit base)
1845 (arguments `(,@(package-arguments base)
1846 #:tests? #t)))))
1847
1848 (define-public python2-element-tree
1849 (package
1850 (name "python2-element-tree")
1851 (version "1.2.6")
1852 (source (origin
1853 (method url-fetch)
1854 (uri (string-append
1855 "http://effbot.org/media/downloads/elementtree-"
1856 version "-20050316.tar.gz"))
1857 (sha256
1858 (base32
1859 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1860 (build-system python-build-system)
1861 (arguments
1862 `(#:python ,python-2 ; seems to be part of Python 3
1863 #:tests? #f)) ; no 'test' sub-command
1864 (synopsis "Toolkit for XML processing in Python")
1865 (description
1866 "ElementTree is a Python library supporting lightweight XML processing.")
1867 (home-page "https://effbot.org/zone/element-index.htm")
1868 (license (license:x11-style
1869 "http://docs.python.org/2/license.html"
1870 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1871
1872 (define-public python2-pybugz
1873 (package
1874 (name "python2-pybugz")
1875 (version "0.6.11")
1876 (source (origin
1877 (method url-fetch)
1878 (uri (string-append
1879 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1880 version ".tar.gz"))
1881 (sha256
1882 (base32
1883 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1884 (patches (search-patches "pybugz-stty.patch"
1885 "pybugz-encode-error.patch"))))
1886 (build-system python-build-system)
1887 (arguments
1888 `(#:python ,python-2 ; SyntaxError with Python 3
1889 #:tests? #f)) ; no 'test' sub-command
1890 (propagated-inputs
1891 `(("element-tree" ,python2-element-tree)))
1892 (synopsis "Python and command-line interface to Bugzilla")
1893 (description
1894 "PyBugz is a Python library and command-line tool to query the Bugzilla
1895 bug tracking system. It is meant as an aid to speed up interaction with the
1896 bug tracker.")
1897 (home-page "http://www.liquidx.net/pybugz/")
1898 (license license:gpl2)))
1899
1900 (define-public python2-enum
1901 (package
1902 (name "python2-enum")
1903 (version "0.4.6")
1904 (source (origin
1905 (method url-fetch)
1906 (uri (pypi-uri "enum" version))
1907 (sha256
1908 (base32
1909 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1910 (build-system python-build-system)
1911 (arguments
1912 `(#:python ,python-2))
1913 (home-page "https://pypi.org/project/enum/")
1914 (synopsis "Robust enumerated type support in Python")
1915 (description
1916 "This provides a module for robust enumerations in Python. It has
1917 been superseded by the Python standard library and is provided only for
1918 compatibility.")
1919 ;; Choice of either license.
1920 (license (list license:gpl3+ license:psfl))))
1921
1922 (define-public python-enum34
1923 (package
1924 (name "python-enum34")
1925 (version "1.1.6")
1926 (source
1927 (origin
1928 (method url-fetch)
1929 (uri (pypi-uri "enum34" version))
1930 (sha256
1931 (base32
1932 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1933 (build-system python-build-system)
1934 (home-page "https://pypi.org/project/enum34/")
1935 (synopsis "Backported Python 3.4 Enum")
1936 (description
1937 "Enum34 is the new Python stdlib enum module available in Python 3.4
1938 backported for previous versions of Python from 2.4 to 3.3.")
1939 (license license:bsd-3)))
1940
1941 (define-public python2-enum34
1942 (package-with-python2 python-enum34))
1943
1944 (define-public python-parse-type
1945 (package
1946 (name "python-parse-type")
1947 (version "0.4.2")
1948 (source
1949 (origin
1950 (method url-fetch)
1951 (uri (pypi-uri "parse_type" version))
1952 (sha256
1953 (base32
1954 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1955 (build-system python-build-system)
1956 (propagated-inputs
1957 `(("python-six" ,python-six)
1958 ("python-parse" ,python-parse)))
1959 (native-inputs
1960 `(("python-pytest" ,python-pytest)
1961 ("python-pytest-runner" ,python-pytest-runner)))
1962 (home-page "https://github.com/jenisys/parse_type")
1963 (synopsis "Extended parse module")
1964 (description
1965 "Parse_type extends the python parse module.")
1966 (properties
1967 `((python2-variant . ,(delay python2-parse-type))))
1968 (license license:bsd-3)))
1969
1970 (define-public python2-parse-type
1971 (let ((base (package-with-python2
1972 (strip-python2-variant python-parse-type))))
1973 (package (inherit base)
1974 (propagated-inputs
1975 `(("python2-enum34" ,python2-enum34)
1976 ,@(package-propagated-inputs base))))))
1977
1978 (define-public python-parse
1979 (package
1980 (name "python-parse")
1981 (version "1.8.4")
1982 (source
1983 (origin
1984 (method url-fetch)
1985 (uri (pypi-uri "parse" version))
1986 (sha256
1987 (base32
1988 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1989 (build-system python-build-system)
1990 (arguments
1991 `(#:phases
1992 (modify-phases %standard-phases
1993 (replace 'check
1994 (lambda _ (invoke "python" "test_parse.py"))))))
1995 (home-page "https://github.com/r1chardj0n3s/parse")
1996 (synopsis "Parse strings")
1997 (description
1998 "Parse strings using a specification based on the Python @code{format()}
1999 syntax.")
2000 (license license:x11)))
2001
2002 (define-public python-polib
2003 (package
2004 (name "python-polib")
2005 (version "1.0.8")
2006 (source (origin
2007 (method url-fetch)
2008 (uri (pypi-uri "polib" version))
2009 (sha256
2010 (base32
2011 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2012 (build-system python-build-system)
2013 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2014 (synopsis "Manipulate, create and modify gettext files")
2015 (description "Polib can manipulate any gettext format (po, pot and mo)
2016 files. It can be used to create po files from scratch or to modify
2017 existing ones.")
2018 (license license:expat)))
2019
2020 (define-public python2-polib
2021 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2022 (package
2023 (inherit base)
2024 (arguments `(,@(package-arguments base)
2025 ;; Tests don't work with python2.
2026 #:tests? #f)))))
2027
2028 (define-public python-poyo
2029 (package
2030 (name "python-poyo")
2031 (version "0.5.0")
2032 (source
2033 (origin
2034 (method url-fetch)
2035 (uri (pypi-uri "poyo" version))
2036 (sha256
2037 (base32
2038 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2039 (build-system python-build-system)
2040 (home-page "https://github.com/hackebrot/poyo")
2041 (synopsis "Lightweight YAML Parser for Python")
2042 (description
2043 "This package provides a lightweight YAML Parser for Python. It supports
2044 only a chosen subset of the YAML format that is required to parse cookiecutter
2045 user configuration files. It does not have support for serializing into YAML
2046 and is not compatible with JSON.")
2047 (license license:expat)))
2048
2049 (define-public scons
2050 (package
2051 (name "scons")
2052 (version "3.0.4")
2053 (source (origin
2054 (method git-fetch)
2055 (uri (git-reference
2056 (url "https://github.com/SCons/scons")
2057 (commit version)))
2058 (file-name (git-file-name name version))
2059 (sha256
2060 (base32
2061 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2062 (build-system python-build-system)
2063 (arguments
2064 `(#:use-setuptools? #f ; still relies on distutils
2065 #:tests? #f ; no 'python setup.py test' command
2066 #:phases
2067 (modify-phases %standard-phases
2068 (add-before 'build 'bootstrap
2069 (lambda _
2070 (substitute* "src/engine/SCons/compat/__init__.py"
2071 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2072 "sys.modules[new] = __import__(old)"))
2073 (substitute* "src/engine/SCons/Platform/__init__.py"
2074 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2075 "mod = __import__(full_name)"))
2076 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2077 (chdir "build/scons")
2078 #t)))))
2079 (home-page "https://scons.org/")
2080 (synopsis "Software construction tool written in Python")
2081 (description
2082 "SCons is a software construction tool. Think of SCons as an improved,
2083 cross-platform substitute for the classic Make utility with integrated
2084 functionality similar to autoconf/automake and compiler caches such as ccache.
2085 In short, SCons is an easier, more reliable and faster way to build
2086 software.")
2087 (license license:x11)))
2088
2089 (define-public scons-python2
2090 (package
2091 (inherit (package-with-python2 scons))
2092 (name "scons-python2")))
2093
2094 (define-public python-extras
2095 (package
2096 (name "python-extras")
2097 (version "1.0.0")
2098 (source
2099 (origin
2100 (method url-fetch)
2101 (uri (pypi-uri "extras" version))
2102 (sha256
2103 (base32
2104 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2105 (build-system python-build-system)
2106 (arguments
2107 ;; FIXME: Circular dependency on testtools.
2108 '(#:tests? #f))
2109 (home-page "https://github.com/testing-cabal/extras")
2110 (synopsis "Useful extensions to the Python standard library")
2111 (description
2112 "Extras is a set of extensions to the Python standard library.")
2113 (license license:expat)))
2114
2115 (define-public python2-extras
2116 (package-with-python2 python-extras))
2117
2118 (define-public python-mimeparse
2119 (package
2120 (name "python-mimeparse")
2121 (version "1.6.0")
2122 (source
2123 (origin
2124 (method url-fetch)
2125 (uri (pypi-uri "python-mimeparse" version))
2126 (sha256
2127 (base32
2128 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2129 (build-system python-build-system)
2130 (arguments
2131 '(#:phases
2132 (modify-phases %standard-phases
2133 (replace 'check
2134 (lambda _
2135 (invoke "./mimeparse_test.py"))))))
2136 (home-page
2137 "https://github.com/dbtsai/python-mimeparse")
2138 (synopsis "Python library for parsing MIME types")
2139 (description
2140 "Mimeparse provides basic functions for parsing MIME type names and
2141 matching them against a list of media-ranges.")
2142 (license license:expat)))
2143
2144 (define-public python2-mimeparse
2145 (package-with-python2 python-mimeparse))
2146
2147 (define-public python-miniboa
2148 (package
2149 (name "python-miniboa")
2150 (version "1.0.7")
2151 (source
2152 (origin
2153 (method url-fetch)
2154 (uri (pypi-uri "miniboa" version))
2155 (sha256
2156 (base32
2157 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2158 (build-system python-build-system)
2159 (home-page "https://github.com/shmup/miniboa")
2160 (synopsis "Simple, single-threaded Telnet server")
2161 (description
2162 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2163 server.")
2164 (license license:asl2.0)))
2165
2166 (define-public python2-miniboa
2167 (package-with-python2 python-miniboa))
2168
2169 (define-public python-pafy
2170 (package
2171 (name "python-pafy")
2172 (version "0.5.3.1")
2173 (source
2174 (origin
2175 (method url-fetch)
2176 (uri (pypi-uri "pafy" version))
2177 (sha256
2178 (base32
2179 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2180 (build-system python-build-system)
2181 (arguments
2182 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2183 (propagated-inputs
2184 ;; Youtube-dl is a python package which is imported in the file
2185 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2186 `(("youtube-dl" ,youtube-dl)))
2187 (home-page "https://np1.github.io/pafy/")
2188 (synopsis "Retrieve YouTube content and metadata")
2189 (description
2190 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2191 (license license:lgpl3+)))
2192
2193 (define-public python2-funcsigs
2194 (package
2195 (name "python2-funcsigs")
2196 (version "1.0.2")
2197 (source (origin
2198 (method url-fetch)
2199 (uri (pypi-uri "funcsigs" version))
2200 (sha256
2201 (base32
2202 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2203 (build-system python-build-system)
2204 (arguments
2205 `(#:python ,python-2))
2206 (native-inputs
2207 `(("python2-unittest2" ,python2-unittest2)))
2208 (home-page "http://funcsigs.readthedocs.org")
2209 (synopsis "Python function signatures from PEP362")
2210 (description
2211 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2212 (license license:asl2.0)))
2213
2214 (define-public python2-funcsigs-bootstrap
2215 (package
2216 (inherit python2-funcsigs)
2217 (name "python2-funcsigs-bootstrap")
2218 (native-inputs `())
2219 (arguments
2220 `(#:tests? #f
2221 ,@(package-arguments python2-funcsigs)))))
2222
2223 (define-public python-py
2224 (package
2225 (name "python-py")
2226 (version "1.8.1")
2227 (source
2228 (origin
2229 (method url-fetch)
2230 (uri (pypi-uri "py" version))
2231 (sha256
2232 (base32
2233 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2234 (build-system python-build-system)
2235 (arguments
2236 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2237 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2238 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2239 ;; Is this module globally installed?"
2240 '(#:tests? #f))
2241 (native-inputs
2242 `(("python-setuptools-scm" ,python-setuptools-scm)))
2243 (home-page "https://github.com/pytest-dev/py")
2244 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2245 (description
2246 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2247 code introspection, and logging.")
2248 (license license:expat)))
2249
2250 (define-public python2-py
2251 (package-with-python2 python-py))
2252
2253 ;; Recent versions of python-fixtures and python-testrepository need
2254 ;; python-pbr for packaging, which itself needs these two packages for
2255 ;; testing.
2256 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2257 ;; same source, just without any test dependencies and with tests disabled.
2258 ;; python-pbr-minmal is then used to package python-fixtures and
2259 ;; python-testrepository.
2260 ;; Strictly speaking we currently could remove the test-requirements from the
2261 ;; normal python-pbr package (and save this package) since test are disabled
2262 ;; there anyway. But this may change in future.
2263 (define-public python-pbr-minimal
2264 (package
2265 (name "python-pbr-minimal")
2266 (version "3.0.1")
2267 (source
2268 (origin
2269 (method url-fetch)
2270 (uri (pypi-uri "pbr" version))
2271 (sha256
2272 (base32
2273 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2274 (build-system python-build-system)
2275 (arguments
2276 `(#:tests? #f))
2277 (home-page "https://docs.openstack.org/pbr/latest/")
2278 (synopsis "Minimal build of python-pbr used for bootstrapping")
2279 (description
2280 "Used only for bootstrapping python2-pbr, you should not need this.")
2281 (license license:asl2.0)))
2282
2283 (define-public python2-pbr-minimal
2284 (package-with-python2 python-pbr-minimal))
2285
2286 (define-public python-pbr
2287 (package
2288 (inherit python-pbr-minimal)
2289 (name "python-pbr")
2290 (arguments
2291 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2292 (propagated-inputs
2293 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2294 (native-inputs
2295 `(("python-fixtures" ,python-fixtures-bootstrap)
2296 ;; discover, coverage, hacking, subunit
2297 ("python-mock" ,python-mock)
2298 ("python-six" ,python-six)
2299 ("python-sphinx" ,python-sphinx)
2300 ("python-testrepository" ,python-testrepository-bootstrap)
2301 ("python-testresources" ,python-testresources-bootstrap)
2302 ("python-testscenarios" ,python-testscenarios-bootstrap)
2303 ("python-testtools" ,python-testtools-bootstrap)
2304 ("python-virtualenv" ,python-virtualenv)))
2305 (synopsis "Enhance the default behavior of Python’s setuptools")
2306 (description
2307 "Python Build Reasonableness (PBR) is a library that injects some useful
2308 and sensible default behaviors into your setuptools run. It will set
2309 versions, process requirements files and generate AUTHORS and ChangeLog file
2310 from git information.
2311 ")))
2312
2313 (define-public python2-pbr
2314 (package-with-python2 python-pbr))
2315
2316 (define-public python-pyrsistent
2317 (package
2318 (name "python-pyrsistent")
2319 (version "0.16.0")
2320 (home-page "https://github.com/tobgu/pyrsistent")
2321 (source (origin
2322 (method url-fetch)
2323 (uri (pypi-uri "pyrsistent" version))
2324 (sha256
2325 (base32
2326 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2327 (build-system python-build-system)
2328 (arguments
2329 '(#:phases (modify-phases %standard-phases
2330 ;; The package works fine with newer Pytest and Hypothesis, but
2331 ;; has pinned older versions to stay compatible with Python 2.
2332 (add-before 'check 'loosen-pytest-requirement
2333 (lambda _
2334 (substitute* "setup.py"
2335 (("pytest<5") "pytest")
2336 (("hypothesis<5") "hypothesis"))
2337 #t)))))
2338 (native-inputs
2339 `(("python-hypothesis" ,python-hypothesis)
2340 ("python-pytest" ,python-pytest)
2341 ("python-pytest-runner" ,python-pytest-runner)))
2342 (propagated-inputs
2343 `(("python-six" ,python-six)))
2344 (synopsis "Persistent data structures for Python")
2345 (description
2346 "Pyrsistent is a number of persistent collections (by some referred to as
2347 functional data structures). Persistent in the sense that they are immutable.
2348
2349 All methods on a data structure that would normally mutate it instead return a
2350 new copy of the structure containing the requested updates. The original
2351 structure is left untouched.")
2352 (license license:expat)))
2353
2354 (define-public python2-pyrsistent
2355 (package-with-python2 python-pyrsistent))
2356
2357 (define-public python-exif-read
2358 (package
2359 (name "python-exif-read")
2360 (version "2.1.2")
2361 (source (origin
2362 (method url-fetch)
2363 (uri (pypi-uri "ExifRead" version))
2364 (sha256
2365 (base32
2366 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2367 (build-system python-build-system)
2368 (arguments `(#:tests? #f)) ; no tests
2369 (home-page "https://github.com/ianare/exif-py")
2370 (synopsis "Python library to extract EXIF data from image files")
2371 (description
2372 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2373 files.")
2374 (license license:bsd-3)))
2375
2376 (define-public python2-exif-read
2377 (package-with-python2 python-exif-read))
2378
2379 (define-public python-pyld
2380 (package
2381 (name "python-pyld")
2382 (version "1.0.5")
2383 (source (origin
2384 (method url-fetch)
2385 (uri (pypi-uri "PyLD" version))
2386 (sha256
2387 (base32
2388 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2389 (build-system python-build-system)
2390 (home-page "https://github.com/digitalbazaar/pyld")
2391 (synopsis "Python implementation of the JSON-LD specification")
2392 (description
2393 "PyLD is an implementation of the JSON-LD specification.")
2394 (license license:bsd-3)))
2395
2396 (define-public python2-pyld
2397 (package-with-python2 python-pyld))
2398
2399 (define-public python-cli-helpers
2400 (package
2401 (name "python-cli-helpers")
2402 (version "2.0.1")
2403 (source
2404 (origin
2405 ;; There's no source tarball on PyPI.
2406 (method git-fetch)
2407 (uri (git-reference
2408 (url "https://github.com/dbcli/cli_helpers")
2409 (commit (string-append "v" version))))
2410 (file-name (git-file-name name version))
2411 (sha256
2412 (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
2413 (build-system python-build-system)
2414 (native-inputs
2415 `(("python-pytest" ,python-pytest)))
2416 (propagated-inputs
2417 `(("python-wcwidth" ,python-wcwidth)
2418 ("python-configobj" ,python-configobj)
2419 ("python-tabulate" ,python-tabulate)
2420 ("python-terminaltables" ,python-terminaltables)))
2421 (home-page "https://github.com/dbcli/cli_helpers")
2422 (synopsis "Helpers for building command-line apps")
2423 (description
2424 "CLI Helpers is a Python package that makes it easy to perform common
2425 tasks when building command-line apps. It's a helper library for command-line
2426 interfaces.")
2427 (license license:bsd-3)))
2428
2429 (define-public python-click
2430 (package
2431 (name "python-click")
2432 (version "7.0")
2433 (source
2434 (origin
2435 (method url-fetch)
2436 (uri (pypi-uri "click" version))
2437 (sha256
2438 (base32
2439 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2440 (build-system python-build-system)
2441 (arguments
2442 `(#:phases
2443 (modify-phases %standard-phases
2444 (add-after 'unpack 'fix-paths
2445 (lambda* (#:key inputs #:allow-other-keys)
2446 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2447 "cross-libc" "libc"))))
2448 (substitute* "click/_unicodefun.py"
2449 (("'locale'")
2450 (string-append "'" glibc "/bin/locale'"))))
2451 #t))
2452 (replace 'check
2453 (lambda _
2454 (invoke "python" "-m" "pytest"))))))
2455 (native-inputs
2456 `(("python-pytest" ,python-pytest)))
2457 (home-page "https://palletsprojects.com/p/click/")
2458 (synopsis "Command line library for Python")
2459 (description
2460 "Click is a Python package for creating command line interfaces in a
2461 composable way with as little code as necessary. Its name stands for
2462 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2463 with sensible defaults out of the box.")
2464 (license license:bsd-3)))
2465
2466 (define-public python2-click
2467 (package-with-python2 python-click))
2468
2469 (define-public python-click-5
2470 (package (inherit python-click)
2471 (name "python-click")
2472 (version "5.1")
2473 (source
2474 (origin
2475 (method url-fetch)
2476 (uri (pypi-uri "click" version))
2477 (sha256
2478 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2479 (arguments `())))
2480
2481 (define-public python-wheel
2482 (package
2483 (name "python-wheel")
2484 (version "0.33.6")
2485 (source
2486 (origin
2487 (method url-fetch)
2488 (uri (pypi-uri "wheel" version))
2489 (sha256
2490 (base32
2491 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2492 (build-system python-build-system)
2493 (arguments
2494 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2495 ;; fails to find the newly-built bdist_wheel library, even though it is
2496 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2497 '(#:tests? #f))
2498 (home-page "https://bitbucket.org/pypa/wheel/")
2499 (synopsis "Format for built Python packages")
2500 (description
2501 "A wheel is a ZIP-format archive with a specially formatted filename and
2502 the @code{.whl} extension. It is designed to contain all the files for a PEP
2503 376 compatible install in a way that is very close to the on-disk format. Many
2504 packages will be properly installed with only the @code{Unpack} step and the
2505 unpacked archive preserves enough information to @code{Spread} (copy data and
2506 scripts to their final locations) at any later time. Wheel files can be
2507 installed with a newer @code{pip} or with wheel's own command line utility.")
2508 (license license:expat)))
2509
2510 (define-public python2-wheel
2511 (package-with-python2 python-wheel))
2512
2513 (define-public python-vcversioner
2514 (package
2515 (name "python-vcversioner")
2516 (version "2.16.0.0")
2517 (source
2518 (origin
2519 (method url-fetch)
2520 (uri (pypi-uri "vcversioner" version))
2521 (sha256
2522 (base32
2523 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2524 (build-system python-build-system)
2525 (synopsis "Python library for version number discovery")
2526 (description "Vcversioner is a Python library that inspects tagging
2527 information in a variety of version control systems in order to discover
2528 version numbers.")
2529 (home-page "https://github.com/habnabit/vcversioner")
2530 (license license:isc)))
2531
2532 (define-public python2-vcversioner
2533 (package-with-python2 python-vcversioner))
2534
2535 (define-public python-jdcal
2536 (package
2537 (name "python-jdcal")
2538 (version "1.4")
2539 (source
2540 (origin
2541 (method url-fetch)
2542 (uri (pypi-uri "jdcal" version))
2543 (sha256
2544 (base32
2545 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2546 (build-system python-build-system)
2547 (arguments
2548 `(#:phases (modify-phases %standard-phases
2549 (replace 'check
2550 (lambda _
2551 (invoke "pytest"))))))
2552 (native-inputs
2553 `(("python-pytest" ,python-pytest)))
2554 (home-page "https://github.com/phn/jdcal")
2555 (synopsis "Functions to convert between Julian dates Gregorian dates")
2556 (description "This Python library provides functions for converting
2557 between Julian dates and Gregorian dates.")
2558 (license license:bsd-2)))
2559
2560 (define-public python2-jdcal
2561 (package-with-python2 python-jdcal))
2562
2563 (define-public python-jsondiff
2564 (package
2565 (name "python-jsondiff")
2566 (version "1.2.0")
2567 (source
2568 (origin
2569 (method url-fetch)
2570 (uri (pypi-uri "jsondiff" version))
2571 (sha256
2572 (base32
2573 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2574 (build-system python-build-system)
2575 (native-inputs
2576 `(("python-nose" ,python-nose)
2577 ("python-nose-random" ,python-nose-random)))
2578 (home-page
2579 "https://github.com/fzumstein/jsondiff")
2580 (synopsis "Compare JSON and JSON-like structures in Python")
2581 (description "@code{jsondiff} is a Python library which lets you
2582 compare, diff, and patch JSON and JSON-like structures in Python.")
2583 (license license:expat)))
2584
2585 (define-public python-jsonschema
2586 (package
2587 (name "python-jsonschema")
2588 (version "3.2.0")
2589 (source (origin
2590 (method url-fetch)
2591 (uri (pypi-uri "jsonschema" version))
2592 (sha256
2593 (base32
2594 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2595 (build-system python-build-system)
2596 (arguments
2597 '(#:phases
2598 (modify-phases %standard-phases
2599 (replace 'check
2600 (lambda* (#:key inputs outputs #:allow-other-keys)
2601 (add-installed-pythonpath inputs outputs)
2602 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2603 (invoke "trial" "jsonschema"))))))
2604 (native-inputs
2605 `(("python-setuptools_scm" ,python-setuptools-scm)
2606 ("python-twisted" ,python-twisted)))
2607 (propagated-inputs
2608 `(("python-attrs" ,python-attrs)
2609 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2610 ("python-pyrsistent" ,python-pyrsistent)
2611 ("python-six" ,python-six)))
2612 (home-page "https://github.com/Julian/jsonschema")
2613 (synopsis "Implementation of JSON Schema for Python")
2614 (description
2615 "Jsonschema is an implementation of JSON Schema for Python.")
2616 (license license:expat)
2617 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2618
2619 (define-public python2-jsonschema
2620 (let ((jsonschema (package-with-python2
2621 (strip-python2-variant python-jsonschema))))
2622 (package (inherit jsonschema)
2623 (propagated-inputs
2624 `(("python2-functools32" ,python2-functools32)
2625 ,@(package-propagated-inputs jsonschema))))))
2626
2627 (define-public python-schema
2628 (package
2629 (name "python-schema")
2630 (version "0.6.6")
2631 (source
2632 (origin
2633 (method url-fetch)
2634 (uri (pypi-uri "schema" version))
2635 (sha256
2636 (base32
2637 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2638 (build-system python-build-system)
2639 (native-inputs
2640 `(("python-pytest" ,python-pytest)))
2641 (home-page "https://github.com/keleshev/schema")
2642 (synopsis "Simple data validation library")
2643 (description
2644 "@code{python-schema} is a library for validating Python data
2645 structures, such as those obtained from config-files, forms, external
2646 services or command-line parsing, converted from JSON/YAML (or
2647 something else) to Python data-types.")
2648 (license license:psfl)))
2649
2650 (define-public python2-schema
2651 (package-with-python2 python-schema))
2652
2653 (define-public python-schema-0.5
2654 (package (inherit python-schema)
2655 (version "0.5.0")
2656 (source
2657 (origin
2658 (method url-fetch)
2659 (uri (pypi-uri "schema" version))
2660 (sha256
2661 (base32
2662 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2663
2664 (define-public python2-schema-0.5
2665 (package-with-python2 python-schema-0.5))
2666
2667 (define-public python-kitchen
2668 (package
2669 (name "python-kitchen")
2670 (version "1.2.5")
2671 (source
2672 (origin
2673 (method url-fetch)
2674 (uri (pypi-uri "kitchen" version))
2675 (sha256
2676 (base32
2677 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2678 (build-system python-build-system)
2679 (propagated-inputs
2680 `(("python-chardet" ,python-chardet)))
2681 (home-page "https://github.com/fedora-infra/kitchen")
2682 (synopsis "Python API for snippets")
2683 (description "@code{kitchen} module provides a python API for all sorts of
2684 little useful snippets of code that everybody ends up writing for their projects
2685 but never seem big enough to build an independent release. Use kitchen and stop
2686 cutting and pasting that code over and over.")
2687 (license (list license:lgpl2.1+
2688 ;; subprocess.py, test_subprocess.py,
2689 ;; kitchen/pycompat25/defaultdict.py:
2690 license:psfl))))
2691
2692 (define-public python2-kitchen
2693 (package-with-python2 python-kitchen))
2694
2695 (define-public python-unidecode
2696 (package
2697 (name "python-unidecode")
2698 (version "1.1.1")
2699 (source (origin
2700 (method url-fetch)
2701 (uri (pypi-uri "Unidecode" version))
2702 (sha256
2703 (base32
2704 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2705 (build-system python-build-system)
2706 (home-page "https://pypi.org/project/Unidecode/")
2707 (synopsis "ASCII transliterations of Unicode text")
2708 (description
2709 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2710 useful when integrating with legacy code that doesn't support Unicode, or for
2711 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2712 machine identifiers from human-readable Unicode strings that should still be
2713 somewhat intelligible.")
2714 (license license:gpl2+)))
2715
2716 (define-public python2-unidecode
2717 (package-with-python2 python-unidecode))
2718
2719 (define-public python-text-unidecode
2720 (package
2721 (name "python-text-unidecode")
2722 (version "1.3")
2723 (source (origin
2724 (method url-fetch)
2725 (uri (pypi-uri "text-unidecode" version))
2726 (sha256
2727 (base32
2728 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2729 (build-system python-build-system)
2730 (arguments
2731 '(#:phases (modify-phases %standard-phases
2732 (replace 'check
2733 (lambda _
2734 (setenv "PYTHONPATH"
2735 (string-append "./build/lib:"
2736 (getenv "PYTHONPATH")))
2737 (invoke "pytest" "-vv"))))))
2738 (native-inputs
2739 `(("python-pytest" ,python-pytest)))
2740 (home-page "https://github.com/kmike/text-unidecode/")
2741 (synopsis "Decode Unicode data")
2742 (description
2743 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2744 Perl library. It can create ASCII representations of Unicode data. In general
2745 users should prefer the @code{python-unidecode} package which offers better
2746 memory usage and transliteration quality.")
2747 ;; The user can choose either license.
2748 (license (list license:clarified-artistic license:gpl2+))))
2749
2750 (define-public python2-text-unidecode
2751 (package-with-python2 python-text-unidecode))
2752
2753 (define-public python-pyjwt
2754 (package
2755 (name "python-pyjwt")
2756 (version "1.7.1")
2757 (source
2758 (origin
2759 (method url-fetch)
2760 (uri (pypi-uri "PyJWT" version))
2761 (sha256
2762 (base32
2763 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2764 (modules '((guix build utils)))
2765 (snippet
2766 '(begin
2767 (for-each delete-file-recursively
2768 (find-files "." "\\.pyc$"))
2769 #t))))
2770 (build-system python-build-system)
2771 (arguments
2772 '(#:phases (modify-phases %standard-phases
2773 (replace 'check
2774 (lambda _
2775 ;; Mimic upstream commit 3a20892442b34c7 to get
2776 ;; rid of dependency on pytest-runner < 5.0.
2777 ;; Remove substitution for PyJWT > 1.7.1.
2778 (substitute* "setup.py"
2779 ((".*pytest-runner.*")
2780 ""))
2781 (invoke "pytest" "-vv"))))))
2782 (native-inputs
2783 `(("python-pytest" ,python-pytest)
2784 ("python-pytest-cov" ,python-pytest-cov)))
2785 (home-page "https://github.com/progrium/pyjwt")
2786 (synopsis "JSON Web Token implementation in Python")
2787 (description
2788 "PyJWT is a JSON Web Token implementation written in Python.")
2789 (license license:expat)))
2790
2791 (define-public python2-pyjwt
2792 (package-with-python2 python-pyjwt))
2793
2794 (define-public python-pykka
2795 (package
2796 (name "python-pykka")
2797 (version "1.2.1")
2798 (source
2799 (origin
2800 (method url-fetch)
2801 (uri (pypi-uri "Pykka" version))
2802 (sha256
2803 (base32
2804 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2805 (build-system python-build-system)
2806 (native-inputs
2807 `(("python-mock" ,python-mock)
2808 ("python-nose" ,python-nose)
2809 ("python-gevent" ,python-gevent)
2810 ("python-eventlet" ,python-eventlet)))
2811 (home-page "https://www.pykka.org/")
2812 (synopsis "Pykka is a Python implementation of the actor model")
2813 (description
2814 "Pykka is a Python implementation of the actor model.
2815 The actor model introduces some simple rules to control the sharing
2816 of state and cooperation between execution units, which makes it
2817 easier to build concurrent applications.")
2818 (license license:asl2.0)))
2819
2820 (define-public python2-pykka
2821 (package-with-python2 python-pykka))
2822
2823 (define-public python-pymsgbox
2824 (package
2825 (name "python-pymsgbox")
2826 (version "1.0.6")
2827 (source
2828 (origin
2829 (method git-fetch)
2830 (uri (git-reference
2831 ;; LICENSE.txt is not present on pypi
2832 (url "https://github.com/asweigart/PyMsgBox")
2833 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2834 (file-name (git-file-name name version))
2835 (sha256
2836 (base32
2837 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2838 (arguments
2839 ;; Circular dependency to run tests:
2840 ;; Tests need pyautogui, which depends on pymsgbox.
2841 '(#:tests? #f))
2842 (build-system python-build-system)
2843 (home-page "https://github.com/asweigart/PyMsgBox")
2844 (synopsis "Python module for JavaScript-like message boxes")
2845 (description
2846 "PyMsgBox is a simple, cross-platform, pure Python module for
2847 JavaScript-like message boxes. Types of dialog boxes include:
2848 @enumerate
2849 @item alert
2850 @item confirm
2851 @item prompt
2852 @item password
2853 @end enumerate
2854 ")
2855 (license license:bsd-3)))
2856
2857 (define-public python-pympler
2858 (package
2859 (name "python-pympler")
2860 (home-page "https://pythonhosted.org/Pympler/")
2861 (version "0.8")
2862 (source (origin
2863 (method url-fetch)
2864 (uri (pypi-uri "Pympler" version))
2865 (sha256
2866 (base32
2867 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2868 (build-system python-build-system)
2869 (arguments
2870 `(#:phases (modify-phases %standard-phases
2871 (delete 'check)
2872 (add-after 'install 'check
2873 (lambda* (#:key inputs outputs #:allow-other-keys)
2874 (add-installed-pythonpath inputs outputs)
2875 (invoke "python" "setup.py" "test"))))))
2876 (synopsis "Measure, monitor and analyze memory behavior")
2877 (description
2878 "Pympler is a development tool to measure, monitor and analyze
2879 the memory behavior of Python objects in a running Python application.
2880
2881 By pympling a Python application, detailed insight in the size and the
2882 lifetime of Python objects can be obtained. Undesirable or unexpected
2883 runtime behavior like memory bloat and other @samp{pymples} can easily
2884 be identified.
2885
2886 A web profiling frontend exposes process statistics, garbage
2887 visualisation and class tracker statistics.")
2888 (license license:asl2.0)))
2889
2890 (define-public python2-pympler
2891 (package-with-python2 python-pympler))
2892
2893 (define-public python-itsdangerous
2894 (package
2895 (name "python-itsdangerous")
2896 (version "1.1.0")
2897 (source
2898 (origin
2899 (method url-fetch)
2900 (uri (pypi-uri "itsdangerous" version))
2901 (sha256
2902 (base32
2903 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2904 (build-system python-build-system)
2905 (home-page "https://palletsprojects.com/p/itsdangerous/")
2906 (synopsis "Python library for passing data to/from untrusted environments")
2907 (description
2908 "Itsdangerous provides various helpers to pass trusted data to untrusted
2909 environments and back.")
2910 (license license:bsd-3)))
2911
2912 (define-public python2-itsdangerous
2913 (package-with-python2 python-itsdangerous))
2914
2915 (define-public python-pyyaml
2916 (package
2917 (name "python-pyyaml")
2918 (version "5.3.1")
2919 (source
2920 (origin
2921 (method url-fetch)
2922 (uri (pypi-uri "PyYAML" version))
2923 (sha256
2924 (base32
2925 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2926 (build-system python-build-system)
2927 (inputs
2928 `(("libyaml" ,libyaml)))
2929 (home-page "https://pyyaml.org")
2930 (synopsis "YAML parser and emitter for Python")
2931 (description
2932 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2933 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2934 API, and sensible error messages. PyYAML supports standard YAML tags and
2935 provides Python-specific tags that represent an arbitrary Python object.")
2936 (license license:expat)))
2937
2938 (define-public python2-pyyaml
2939 (package-with-python2 python-pyyaml))
2940
2941 (define-public python-vine
2942 (package
2943 (name "python-vine")
2944 (version "1.1.4")
2945 (source
2946 (origin
2947 (method url-fetch)
2948 (uri (pypi-uri "vine" version))
2949 (sha256
2950 (base32
2951 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2952 (build-system python-build-system)
2953 (native-inputs
2954 `(("python-pytest" ,python-pytest)
2955 ("python-case" ,python-case)))
2956 (home-page "https://github.com/celery/vine")
2957 (synopsis "Promises for Python")
2958 (description
2959 "@code{vine} provides a special implementation of promises in that it can
2960 be used both for \"promise of a value\" and lazy evaluation. The biggest
2961 upside for this is that everything in a promise can also be a promise,
2962 e.g. filters, callbacks and errbacks can all be promises.")
2963 (license license:bsd-3)))
2964
2965 (define-public python-virtualenv
2966 (package
2967 (name "python-virtualenv")
2968 (version "20.0.10")
2969 (source
2970 (origin
2971 (method url-fetch)
2972 (uri (pypi-uri "virtualenv" version))
2973 (sha256
2974 (base32
2975 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2976 (build-system python-build-system)
2977 (native-inputs
2978 `(("python-mock" ,python-mock)
2979 ("python-pytest" ,python-pytest)
2980 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2981 ;; be an input at all". However, removing the input makes the build error:
2982 ;; File "setup.py", line 4, in <module>
2983 ;; raise RuntimeError("setuptools >= 41 required to build")
2984 ("python-setuptools" ,python-setuptools)
2985 ("python-setuptools-scm" ,python-setuptools-scm)))
2986 (propagated-inputs
2987 `(("python-appdirs" ,python-appdirs)
2988 ("python-distlib" ,python-distlib)
2989 ("python-filelock" ,python-filelock)
2990 ("python-six" ,python-six)
2991 ("python-importlib-metadata" ,python-importlib-metadata)))
2992 (home-page "https://virtualenv.pypa.io/")
2993 (synopsis "Virtual Python environment builder")
2994 (description
2995 "Virtualenv is a tool to create isolated Python environments.")
2996 (properties `((python2-variant . ,(delay python2-virtualenv))))
2997 (license license:expat)))
2998
2999 (define-public python2-virtualenv
3000 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
3001 (package
3002 (inherit base)
3003 (arguments
3004 `(#:python ,python-2
3005 #:phases
3006 (modify-phases %standard-phases
3007 (add-after 'set-paths 'adjust-PYTHONPATH
3008 (lambda* (#:key inputs #:allow-other-keys)
3009 (let* ((python (assoc-ref inputs "python"))
3010 (python-sitedir (string-append python "/lib/python2.7"
3011 "/site-packages")))
3012 ;; XXX: 'python2' always comes first on PYTHONPATH
3013 ;; and shadows the 'setuptools' input. Move python2
3014 ;; last: this should be fixed in python-build-system
3015 ;; in a future rebuild cycle.
3016 (setenv "PYTHONPATH"
3017 (string-append (string-join (delete python-sitedir
3018 (string-split
3019 (getenv "PYTHONPATH")
3020 #\:))
3021 ":")
3022 ":" python-sitedir))
3023 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
3024 (getenv "PYTHONPATH"))
3025 #t))))))
3026 (propagated-inputs
3027 `(("python-contextlib2" ,python2-contextlib2)
3028 ,@(package-propagated-inputs base))))))
3029
3030 (define-public python-markupsafe
3031 (package
3032 (name "python-markupsafe")
3033 (version "1.1.1")
3034 (source
3035 (origin
3036 (method url-fetch)
3037 (uri (pypi-uri "MarkupSafe" version))
3038 (sha256
3039 (base32
3040 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3041 (build-system python-build-system)
3042 (arguments
3043 `(#:modules ((ice-9 ftw)
3044 (srfi srfi-1)
3045 (srfi srfi-26)
3046 (guix build utils)
3047 (guix build python-build-system))
3048 #:phases (modify-phases %standard-phases
3049 (replace 'check
3050 (lambda _
3051 (let ((cwd (getcwd))
3052 (libdir (find (cut string-prefix? "lib." <>)
3053 (scandir "build"))))
3054 (setenv "PYTHONPATH"
3055 (string-append cwd "/build/" libdir ":"
3056 (getenv "PYTHONPATH")))
3057 (invoke "pytest" "-vv")))))))
3058 (native-inputs
3059 `(("python-pytest" ,python-pytest)))
3060 (home-page "https://github.com/mitsuhiko/markupsafe")
3061 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3062 (description
3063 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3064 for Python.")
3065 (license license:bsd-3)))
3066
3067 (define-public python2-markupsafe
3068 (package-with-python2 python-markupsafe))
3069
3070 (define-public python-jinja2
3071 (package
3072 (name "python-jinja2")
3073 (version "2.11.2")
3074 (source
3075 (origin
3076 (method url-fetch)
3077 (uri (pypi-uri "Jinja2" version))
3078 (sha256
3079 (base32
3080 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3081 (build-system python-build-system)
3082 (arguments
3083 '(#:phases (modify-phases %standard-phases
3084 (replace 'check
3085 (lambda* (#:key tests? #:allow-other-keys)
3086 (if tests?
3087 (begin
3088 (setenv "PYTHONPATH"
3089 (string-append "./build/lib:"
3090 (getenv "PYTHONPATH")))
3091 (invoke "pytest" "-vv"))
3092 (format #t "test suite not run~%"))
3093 #t)))))
3094 (native-inputs
3095 `(("python-pytest" ,python-pytest)))
3096 (propagated-inputs
3097 `(("python-markupsafe" ,python-markupsafe)))
3098 (home-page "http://jinja.pocoo.org/")
3099 (synopsis "Python template engine")
3100 (description
3101 "Jinja2 is a small but fast and easy to use stand-alone template engine
3102 written in pure Python.")
3103 (license license:bsd-3)))
3104
3105 (define-public python2-jinja2
3106 (package-with-python2 python-jinja2))
3107
3108 (define-public python-jinja2-time
3109 (package
3110 (name "python-jinja2-time")
3111 (version "0.2.0")
3112 (source
3113 (origin
3114 (method url-fetch)
3115 (uri (pypi-uri "jinja2-time" version))
3116 (sha256
3117 (base32
3118 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3119 (build-system python-build-system)
3120 (propagated-inputs
3121 `(("python-arrow" ,python-arrow)
3122 ("python-jinja2" ,python-jinja2)))
3123 (home-page
3124 "https://github.com/hackebrot/jinja2-time")
3125 (synopsis "Jinja2 Extension for Dates and Times")
3126 (description
3127 "This package provides an extension for the template engine Jinja2. It
3128 adds a 'now' tag providing a convenient access to the arrow.now() API from
3129 templates. A format string can be provided to control the output.")
3130 (license license:expat)))
3131
3132 (define-public python-pystache
3133 (package
3134 (name "python-pystache")
3135 (version "0.5.4")
3136 (source (origin
3137 (method url-fetch)
3138 (uri (pypi-uri "pystache" version))
3139 (sha256
3140 (base32
3141 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3142 (build-system python-build-system)
3143 (arguments
3144 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3145 (home-page "http://defunkt.io/pystache/")
3146 (synopsis "Python logic-less template engine")
3147 (description
3148 "Pystache is a Python implementation of the framework agnostic,
3149 logic-free templating system Mustache.")
3150 (license license:expat)
3151 (properties `((python2-variant . ,(delay python2-pystache))))))
3152
3153 (define-public python2-pystache
3154 (package (inherit (package-with-python2
3155 (strip-python2-variant python-pystache)))
3156 (arguments
3157 `(#:python ,python-2
3158 #:phases
3159 (modify-phases %standard-phases
3160 (replace 'check
3161 (lambda _
3162 (invoke "python" "test_pystache.py"))))))))
3163
3164 (define-public python-joblib
3165 (package
3166 (name "python-joblib")
3167 (version "0.14.1")
3168 (source (origin
3169 (method url-fetch)
3170 (uri (pypi-uri "joblib" version))
3171 (sha256
3172 (base32
3173 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3174 (build-system python-build-system)
3175 (arguments
3176 `(#:phases
3177 (modify-phases %standard-phases
3178 (replace 'check
3179 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3180 (native-inputs
3181 `(("python-pytest" ,python-pytest)))
3182 (home-page "https://joblib.readthedocs.io/")
3183 (synopsis "Using Python functions as pipeline jobs")
3184 (description
3185 "Joblib is a set of tools to provide lightweight pipelining in Python.
3186 In particular, joblib offers: transparent disk-caching of the output values
3187 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3188 logging and tracing of the execution.")
3189 (license license:bsd-3)))
3190
3191 (define-public python2-joblib
3192 (package-with-python2 python-joblib))
3193
3194 (define-public python-daemon
3195 (package
3196 (name "python-daemon")
3197 (version "2.2.3")
3198 (source
3199 (origin
3200 (method url-fetch)
3201 (uri (pypi-uri "python-daemon" version))
3202 (sha256
3203 (base32
3204 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3205 (build-system python-build-system)
3206 (arguments
3207 `(#:phases
3208 (modify-phases %standard-phases
3209 (add-before 'check 'disable-tests
3210 (lambda _
3211 ;; FIXME: Determine why test fails
3212 (substitute* "test/test_daemon.py"
3213 (("test_detaches_process_context")
3214 "skip_test_detaches_process_context"))
3215 #t)))))
3216 (propagated-inputs
3217 `(("python-lockfile" ,python-lockfile)))
3218 (native-inputs
3219 `(("python-unittest2" ,python-unittest2)
3220 ("python-testtools" ,python-testtools)
3221 ("python-testscenarios" ,python-testscenarios)
3222 ("python-mock" ,python-mock)
3223 ("python-docutils" ,python-docutils)))
3224 (home-page "https://pagure.io/python-daemon/")
3225 (synopsis "Python library for making a Unix daemon process")
3226 (description "Python-daemon is a library that assists a Python program to
3227 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3228
3229 This library provides a @code{DaemonContext} class that manages the following
3230 important tasks for becoming a daemon process:
3231 @enumerate
3232 @item Detach the process into its own process group.
3233 @item Set process environment appropriate for running inside a chroot.
3234 @item Renounce suid and sgid privileges.
3235 @item Close all open file descriptors.
3236 @item Change the working directory, uid, gid, and umask.
3237 @item Set appropriate signal handlers.
3238 @item Open new file descriptors for stdin, stdout, and stderr.
3239 @item Manage a specified PID lock file.
3240 @item Register cleanup functions for at-exit processing.
3241 @end enumerate")
3242 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3243 (license (list license:asl2.0 license:gpl3+))))
3244
3245 (define-public python-anytree
3246 (package
3247 (name "python-anytree")
3248 (version "2.8.0")
3249 (source (origin
3250 (method url-fetch)
3251 (uri (pypi-uri "anytree" version))
3252 (sha256
3253 (base32
3254 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3255 (build-system python-build-system)
3256 (propagated-inputs
3257 `(("python-six" ,python-six)))
3258 (native-inputs
3259 `(;; For tests.
3260 ("graphviz" ,graphviz) ;for 'dot'
3261 ("python-nose" ,python-nose)))
3262 (home-page "https://github.com/c0fec0de/anytree")
3263 (synopsis "Lightweight tree data library")
3264 (description
3265 "@code{anytree} is a simple, lightweight, and extensible tree data
3266 structure for Python.")
3267 (license license:asl2.0)))
3268
3269 (define-public python-docutils
3270 (package
3271 (name "python-docutils")
3272 (version "0.16")
3273 (source
3274 (origin
3275 (method url-fetch)
3276 (uri (pypi-uri "docutils" version))
3277 (sha256
3278 (base32
3279 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3280 (build-system python-build-system)
3281 (arguments
3282 '(#:phases (modify-phases %standard-phases
3283 (replace 'check
3284 (lambda* (#:key tests? #:allow-other-keys)
3285 (if tests?
3286 (invoke "python" "test/alltests.py")
3287 (format #t "test suite not run~%"))
3288 #t)))))
3289 (home-page "http://docutils.sourceforge.net/")
3290 (synopsis "Python Documentation Utilities")
3291 (description
3292 "Docutils is a modular system for processing documentation into useful
3293 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3294 reStructuredText.")
3295 ;; Most of the source code is public domain, but some source files are
3296 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3297 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3298
3299 (define-public python2-docutils
3300 (package-with-python2 python-docutils))
3301
3302 ;; python2-sphinx fails its test suite with newer versions.
3303 (define-public python2-docutils-0.14
3304 (package
3305 (inherit python2-docutils)
3306 (version "0.14")
3307 (source (origin
3308 (method url-fetch)
3309 (uri (pypi-uri "docutils" version))
3310 (sha256
3311 (base32
3312 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3313
3314 (define-public python-restructuredtext-lint
3315 (package
3316 (name "python-restructuredtext-lint")
3317 (version "1.3.0")
3318 (source
3319 (origin
3320 (method url-fetch)
3321 (uri (pypi-uri "restructuredtext-lint" version))
3322 (sha256
3323 (base32
3324 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3325 (build-system python-build-system)
3326 (arguments
3327 `(#:phases
3328 (modify-phases %standard-phases
3329 (delete 'check)
3330 (add-after 'install 'check
3331 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3332 (when tests?
3333 (add-installed-pythonpath inputs outputs)
3334 (invoke "nosetests" "-v"))
3335 #t)))))
3336 (propagated-inputs
3337 `(("python-docutils" ,python-docutils)))
3338 (native-inputs
3339 `(("python-nose" ,python-nose)))
3340 (home-page "https://github.com/twolfson/restructuredtext-lint")
3341 (synopsis "reStructuredText linter")
3342 (description "This package provides a linter for the reStructuredText
3343 format.")
3344 (license license:unlicense)))
3345
3346 (define-public python-doc8
3347 (package
3348 (name "python-doc8")
3349 (version "0.8.0")
3350 (source
3351 (origin
3352 (method url-fetch)
3353 (uri (pypi-uri "doc8" version))
3354 (sha256
3355 (base32
3356 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3357 (build-system python-build-system)
3358 (arguments
3359 `(#:phases
3360 (modify-phases %standard-phases
3361 (delete 'check)
3362 (add-after 'install 'check
3363 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3364 (when tests?
3365 (add-installed-pythonpath inputs outputs)
3366 (invoke "pytest" "-v"))
3367 #t)))))
3368 (propagated-inputs
3369 `(("python-chardet" ,python-chardet)
3370 ("python-docutils" ,python-docutils)
3371 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3372 ("python-six" ,python-six)
3373 ("python-stevedore" ,python-stevedore)))
3374 (native-inputs
3375 `(("python-testtools" ,python-testtools)
3376 ("python-pytest" ,python-pytest)))
3377 (home-page "https://launchpad.net/doc8")
3378 (synopsis
3379 "Style checker for Sphinx (or other) RST documentation")
3380 (description
3381 "Doc8 is an opinionated style checker for reStructured Text and plain
3382 text styles of documentation.")
3383 (license license:asl2.0)))
3384
3385 (define-public python-pygments
3386 (package
3387 (name "python-pygments")
3388 (version "2.5.2")
3389 (source
3390 (origin
3391 (method url-fetch)
3392 (uri (pypi-uri "Pygments" version))
3393 (sha256
3394 (base32
3395 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3396 (build-system python-build-system)
3397 (arguments
3398 ;; FIXME: Tests require sphinx, which depends on this.
3399 '(#:tests? #f))
3400 (home-page "https://pygments.org/")
3401 (synopsis "Syntax highlighting")
3402 (description
3403 "Pygments is a syntax highlighting package written in Python.")
3404 (license license:bsd-2)))
3405
3406 (define-public python2-pygments
3407 (package-with-python2 python-pygments))
3408
3409 (define-public python-bumpversion
3410 (package
3411 (name "python-bumpversion")
3412 (version "0.5.3")
3413 (source
3414 (origin
3415 (method url-fetch)
3416 (uri (pypi-uri "bumpversion" version))
3417 (sha256
3418 (base32
3419 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3420 (build-system python-build-system)
3421 (home-page "https://github.com/peritus/bumpversion")
3422 (synopsis "Tool to bump software version")
3423 (description "This tool provides a command-line interface (CLI) to bump a
3424 software version simply.")
3425 (license license:expat)))
3426
3427 (define-public python-deprecated
3428 (package
3429 (name "python-deprecated")
3430 (version "1.2.5")
3431 (source
3432 (origin
3433 (method git-fetch)
3434 (uri (git-reference
3435 (url "https://github.com/tantale/deprecated")
3436 (commit (string-append "v" version))))
3437 (file-name (git-file-name name version))
3438 (sha256
3439 (base32
3440 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3441 (build-system python-build-system)
3442 (arguments
3443 `(#:phases (modify-phases %standard-phases
3444 (replace 'check
3445 (lambda _
3446 (invoke "pytest"))))))
3447 (propagated-inputs
3448 `(("python-wrapt" ,python-wrapt)))
3449 (native-inputs
3450 `(("python-bumpversion" ,python-bumpversion)
3451 ("python-pytest" ,python-pytest)
3452 ("python-pytest-cov" ,python-pytest-cov)
3453 ("python-sphinx" ,python-sphinx)
3454 ("python-tox" ,python-tox)))
3455 (home-page "https://github.com/tantale/deprecated")
3456 (synopsis "Python decorator to deprecate classes, functions or methods")
3457 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3458 to deprecate classes, functions or methods.")
3459 (license license:expat)))
3460
3461 (define-public python-pygithub
3462 (package
3463 (name "python-pygithub")
3464 (version "1.43.8")
3465 (source
3466 ;; We fetch from the Git repo because there are no tests in the PyPI
3467 ;; archive.
3468 (origin
3469 (method git-fetch)
3470 (uri (git-reference
3471 (url "https://github.com/PyGithub/PyGithub")
3472 (commit (string-append "v" version))))
3473 (file-name (git-file-name name version))
3474 (sha256
3475 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3476 (build-system python-build-system)
3477 (arguments
3478 `(#:phases (modify-phases %standard-phases
3479 ;; Some tests rely on the network.
3480 (add-after 'unpack 'disable-failing-tests
3481 (lambda _
3482 (substitute* "tests/Issue142.py"
3483 (("testDecodeJson") "disabled_testDecodeJson"))
3484 #t))
3485 (add-before 'check 'prepare-for-tests
3486 (lambda _
3487 (for-each (lambda (f)
3488 (chmod f #o666))
3489 (find-files "./tests"))
3490 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3491 (setenv "PYTHONPATH"
3492 (string-append "./tests:" (getenv "PYTHONPATH")))
3493 #t)))))
3494 (propagated-inputs
3495 `(("python-deprecated" ,python-deprecated)
3496 ("python-pyjwt" ,python-pyjwt)
3497 ("python-requests" ,python-requests)))
3498 (native-inputs `(("python-httpretty" ,python-httpretty)))
3499 (home-page "https://pygithub.readthedocs.io/en/latest/")
3500 (synopsis "Python library for the GitHub API")
3501 (description "This library allows managing GitHub resources such as
3502 repositories, user profiles, and organizations in your Python applications,
3503 using version 3 of the GitHub application programming interface (API).")
3504 (license license:lgpl3+)))
3505
3506 (define-public python-rellu
3507 (package
3508 (name "python-rellu")
3509 (version "0.7")
3510 (source
3511 (origin
3512 (method url-fetch)
3513 (uri (pypi-uri "rellu" version))
3514 (sha256
3515 (base32
3516 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3517 (build-system python-build-system)
3518 (propagated-inputs
3519 `(("python-invoke" ,python-invoke)
3520 ("python-pygithub" ,python-pygithub)))
3521 (home-page "https://github.com/robotframework/rellu")
3522 (synopsis "Utilities to create PyPI releases")
3523 (description "This collection of utilities contains tooling and templates
3524 to assist in creating releases on GitHub and publishing them on PyPI. It is
3525 designed to be used by Robot Framework and tools and libraries in its
3526 ecosystem, but can naturally be used also by other projects.")
3527 (license license:asl2.0)))
3528
3529 (define-public python-robotframework
3530 (package
3531 (name "python-robotframework")
3532 (version "3.1.2")
3533 ;; There are no tests in the PyPI archive.
3534 (source
3535 (origin
3536 (method git-fetch)
3537 (uri (git-reference
3538 (url "https://github.com/robotframework/robotframework")
3539 (commit (string-append "v" version))))
3540 (file-name (git-file-name name version))
3541 (sha256
3542 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3543 (patches (search-patches
3544 "python-robotframework-honor-source-date-epoch.patch"))))
3545 (build-system python-build-system)
3546 (arguments
3547 `(#:phases (modify-phases %standard-phases
3548 (add-before 'build 'build-and-install-doc
3549 (lambda* (#:key outputs #:allow-other-keys)
3550 (let* ((doc-output (assoc-ref outputs "doc"))
3551 (doc (string-append doc-output "/share/"
3552 ,name "-" ,version "/")))
3553 (invoke "invoke" "library-docs" "all")
3554 (mkdir-p doc)
3555 (copy-recursively "doc/libraries"
3556 (string-append doc "/libraries"))
3557 #t)))
3558 (replace 'check
3559 (lambda _
3560 (invoke "python" "utest/run.py"))))))
3561 (native-inputs
3562 `(("python-invoke" ,python-invoke)
3563 ("python-rellu" ,python-rellu)
3564 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3565 (outputs '("out" "doc"))
3566 (home-page "https://robotframework.org")
3567 (synopsis "Generic automation framework")
3568 (description "Robot Framework is a generic automation framework for
3569 acceptance testing, acceptance test driven development (ATDD), and robotic
3570 process automation (RPA).")
3571 (license license:asl2.0)))
3572
3573 (define-public python-robotframework-lint
3574 ;; There is no properly tagged release; the commit below seems to correspond
3575 ;; to the 0.9 stable release available from PyPI. The tests are not
3576 ;; included in the PyPI archive, so we fetch the sources from the upstream
3577 ;; Git repo.
3578 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3579 (revision "1"))
3580 (package
3581 (name "python-robotframework-lint")
3582 (version (git-version "0.9.0" revision commit))
3583 (source
3584 (origin
3585 (method git-fetch)
3586 (uri (git-reference
3587 (url "https://github.com/boakley/robotframework-lint")
3588 (commit commit)))
3589 (file-name (git-file-name name version))
3590 (sha256
3591 (base32
3592 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3593 (build-system python-build-system)
3594 (arguments
3595 `(#:phases
3596 (modify-phases %standard-phases
3597 (replace 'check
3598 (lambda _
3599 (invoke "python" "-m" "robot" "-A"
3600 "tests/conf/default.args" "tests"))))))
3601 (propagated-inputs
3602 `(("python-robotframework" ,python-robotframework)))
3603 (home-page "https://github.com/boakley/robotframework-lint/")
3604 (synopsis "Static analysis tool (linter) for Robot Framework")
3605 (description "This package provides the @code{rflint} command-line
3606 utility, a static analysis tool (linter) for Robot Framework source files.")
3607 (license license:asl2.0))))
3608
3609 (define-public python-robotframework-sshlibrary
3610 (package
3611 (name "python-robotframework-sshlibrary")
3612 (version "3.3.0")
3613 ;; There are no tests in the PyPI archive.
3614 (source
3615 (origin
3616 (method git-fetch)
3617 (uri (git-reference
3618 (url "https://github.com/robotframework/SSHLibrary")
3619 (commit (string-append "v" version))))
3620 (file-name (git-file-name name version))
3621 (sha256
3622 (base32
3623 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3624 (build-system python-build-system)
3625 (arguments
3626 `(#:phases
3627 (modify-phases %standard-phases
3628 (add-before 'build 'build-and-install-doc
3629 (lambda* (#:key outputs #:allow-other-keys)
3630 (let* ((doc-output (assoc-ref outputs "doc"))
3631 (doc (string-append doc-output "/share/"
3632 ,name "-" ,version "/")))
3633 (invoke "chmod" "-R" "+w" "docs")
3634 (invoke "invoke" "kw-docs" "project-docs")
3635 (mkdir-p doc)
3636 (for-each delete-file (find-files "docs" "\\.rst"))
3637 (copy-recursively "docs" doc)
3638 #t)))
3639 (replace 'check
3640 (lambda _
3641 ;; Some tests require an SSH server; we remove them.
3642 (delete-file "utest/test_client_api.py")
3643 (delete-file "utest/test_scp.py")
3644 (invoke "python" "utest/run.py"))))))
3645 (propagated-inputs
3646 `(("python-robotframework" ,python-robotframework)
3647 ("python-paramiko" ,python-paramiko)
3648 ("python-scp" ,python-scp)))
3649 (native-inputs
3650 `(("openssh" ,openssh)
3651 ("which" ,which)
3652 ;; To generate the documentation
3653 ("python-docutils" ,python-docutils)
3654 ("python-invoke" ,python-invoke)
3655 ("python-pygments" ,python-pygments)
3656 ("python-rellu" ,python-rellu)))
3657 (outputs '("out" "doc"))
3658 (home-page "https://github.com/robotframework/SSHLibrary")
3659 (synopsis "Robot Framework library for SSH and SFTP")
3660 (description "SSHLibrary is a Robot Framework library providing support
3661 for SSH and SFTP. It has the following main usages:
3662 @itemize @bullet
3663 @item Executing commands on the remote machine, either blocking or non-blocking.
3664 @item Writing and reading in an interactive shell.
3665 @item Transferring files and directories over SFTP.
3666 @item Ensuring that files and directories exist on the remote machine.
3667 @end itemize")
3668 (license license:asl2.0)))
3669
3670 (define-public python-rstr
3671 (package
3672 (name "python-rstr")
3673 (version "2.2.6")
3674 (source
3675 (origin
3676 (method url-fetch)
3677 (uri (pypi-uri "rstr" version))
3678 (sha256
3679 (base32
3680 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3681 (build-system python-build-system)
3682 (home-page
3683 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3684 (synopsis "Generate random strings in Python")
3685 (description "This package provides a python module for generating
3686 random strings of various types. It could be useful for fuzz testing,
3687 generating dummy data, or other applications. It has no dependencies
3688 outside the standard library.")
3689 (license license:bsd-3)))
3690
3691 (define-public python-scp
3692 (package
3693 (name "python-scp")
3694 (version "0.13.2")
3695 (source
3696 (origin
3697 (method url-fetch)
3698 (uri (pypi-uri "scp" version))
3699 (sha256
3700 (base32
3701 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3702 (build-system python-build-system)
3703 (arguments
3704 '(#:tests? #f)) ;tests require an SSH server
3705 (propagated-inputs
3706 `(("python-paramiko" ,python-paramiko)))
3707 (home-page "https://github.com/jbardin/scp.py")
3708 (synopsis "SCP protocol module for Python and Paramiko")
3709 (description "The scp module extends the Paramiko library to send and
3710 receive files via the SCP1 protocol, as implemented by the OpenSSH
3711 @command{scp} program.")
3712 (license license:gpl2+)))
3713
3714 (define-public python-rst.linker
3715 (package
3716 (name "python-rst.linker")
3717 (version "1.11")
3718 (source
3719 (origin
3720 (method url-fetch)
3721 (uri (pypi-uri "rst.linker" version))
3722 (sha256
3723 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3724 (build-system python-build-system)
3725 (propagated-inputs
3726 `(("python-dateutil" ,python-dateutil)
3727 ("python-six" ,python-six)))
3728 (native-inputs
3729 `(("python-setuptools-scm" ,python-setuptools-scm)))
3730 ;; Test would require path.py, which would introduce a cyclic dependence.
3731 (arguments `(#:tests? #f))
3732 ;; Note: As of version 1.7 the documentation is not worth building.
3733 (home-page "https://github.com/jaraco/rst.linker")
3734 (synopsis "Sphinx plugin to add links and timestamps")
3735 (description "rst.linker automatically replaces text by a
3736 reStructuredText external reference or timestamps. It's primary purpose is to
3737 augment the changelog, but it can be used for other documents, too.")
3738 (license license:expat)))
3739
3740 (define-public python2-rst.linker
3741 (package-with-python2 python-rst.linker))
3742
3743 (define-public python-feedgenerator
3744 (package
3745 (name "python-feedgenerator")
3746 (version "1.9")
3747 (source
3748 (origin
3749 (method url-fetch)
3750 (uri (pypi-uri "feedgenerator" version))
3751 (sha256
3752 (base32
3753 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3754 (modules '((guix build utils)))
3755 (snippet
3756 '(begin
3757 ;; Remove pre-compiled .pyc files from source.
3758 (for-each delete-file-recursively
3759 (find-files "." "__pycache__" #:directories? #t))
3760 (for-each delete-file (find-files "." "\\.pyc$"))
3761 #t))))
3762 (build-system python-build-system)
3763 (propagated-inputs
3764 `(("python-pytz" ,python-pytz)
3765 ("python-six" ,python-six)))
3766 (home-page "https://github.com/getpelican/feedgenerator")
3767 (synopsis
3768 "Standalone version of Django's Atom/RSS feed generator")
3769 (description
3770 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3771 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3772 (license license:bsd-3)))
3773
3774 (define-public python2-feedgenerator
3775 (package-with-python2 python-feedgenerator))
3776
3777 (define-public python-toml
3778 (package
3779 (name "python-toml")
3780 (version "0.10.1")
3781 (source
3782 (origin
3783 (method url-fetch)
3784 (uri (pypi-uri "toml" version))
3785 (sha256
3786 (base32
3787 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3788 (build-system python-build-system)
3789 (arguments
3790 `(#:tests? #f)) ;no tests suite in release
3791 (home-page "https://github.com/uiri/toml")
3792 (synopsis "Library for TOML")
3793 (description
3794 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3795 Language (TOML) configuration files.")
3796 (license license:expat)))
3797
3798 (define-public python-jsonrpc-server
3799 (package
3800 (name "python-jsonrpc-server")
3801 (version "0.3.4")
3802 (source
3803 (origin
3804 (method url-fetch)
3805 (uri (pypi-uri "python-jsonrpc-server" version))
3806 (sha256
3807 (base32
3808 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3809 (build-system python-build-system)
3810 (propagated-inputs
3811 `(("python-mock" ,python-mock)
3812 ("python-pytest" ,python-pytest)
3813 ("python-ujson" ,python-ujson-1)))
3814 (home-page
3815 "https://github.com/palantir/python-jsonrpc-server")
3816 (synopsis "JSON RPC 2.0 server library")
3817 (description
3818 "This package provides a JSON RPC 2.0 server library for Python.")
3819 (license license:expat)))
3820
3821 (define-public python-pydocstyle
3822 (package
3823 (name "python-pydocstyle")
3824 (version "3.0.0")
3825 (source
3826 (origin
3827 (method url-fetch)
3828 (uri (pypi-uri "pydocstyle" version))
3829 (sha256
3830 (base32
3831 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3832 (build-system python-build-system)
3833 (propagated-inputs
3834 `(("python-six" ,python-six)
3835 ("python-snowballstemmer" ,python-snowballstemmer)))
3836 (home-page
3837 "https://github.com/PyCQA/pydocstyle/")
3838 (synopsis "Python docstring style checker")
3839 (description
3840 "This package provides a style checker for the Python Language
3841 Server (PLS).")
3842 (license license:expat)))
3843
3844 (define-public python-language-server
3845 (package
3846 (name "python-language-server")
3847 (version "0.34.1")
3848 (source
3849 (origin
3850 (method url-fetch)
3851 (uri (pypi-uri "python-language-server" version))
3852 (sha256
3853 (base32
3854 "0gfjjlj7yg2nf8wkbrshwaljkwlqja4n7s1x949f495anmkg8vxr"))))
3855 (build-system python-build-system)
3856 (propagated-inputs
3857 `(("python-pluggy" ,python-pluggy)
3858 ("python-jsonrpc-server" ,python-jsonrpc-server)
3859 ("python-jedi" ,python-jedi)
3860 ("python-yapf" ,python-yapf)
3861 ("python-pyflakes" ,python-pyflakes)
3862 ("python-pydocstyle" ,python-pydocstyle)
3863 ("python-pycodestyle" ,python-pycodestyle)
3864 ("python-mccabe" ,python-mccabe)
3865 ("python-rope" ,python-rope)
3866 ("python-autopep8" ,python-autopep8)
3867 ("python-flake8" ,python-flake8)
3868 ("python-pylint" ,python-pylint)))
3869 (home-page "https://github.com/palantir/python-language-server")
3870 (synopsis "Python implementation of the Language Server Protocol")
3871 (description
3872 "The Python Language Server (pyls) is an implementation of the Python 3
3873 language specification for the Language Server Protocol (LSP). This tool is
3874 used in text editing environments to provide a complete and integrated
3875 feature-set for programming Python effectively.")
3876 (license license:expat)))
3877
3878 (define-public python-pathspec
3879 (package
3880 (name "python-pathspec")
3881 (version "0.7.0")
3882 (source
3883 (origin
3884 (method url-fetch)
3885 (uri (pypi-uri "pathspec" version))
3886 (sha256
3887 (base32
3888 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3889 (build-system python-build-system)
3890 (home-page "https://github.com/cpburnz/python-path-specification")
3891 (synopsis "Utility library for gitignore style pattern matching of file paths")
3892 (description
3893 "This package provides a utility library for gitignore style pattern
3894 matching of file paths.")
3895 (license license:mpl2.0)))
3896
3897 (define-public python-black
3898 (package
3899 (name "python-black")
3900 (version "19.10b0")
3901 (source
3902 (origin
3903 (method url-fetch)
3904 (uri (pypi-uri "black" version))
3905 (sha256
3906 (base32
3907 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3908 (build-system python-build-system)
3909 (arguments
3910 `(#:phases
3911 (modify-phases %standard-phases
3912 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3913 (lambda _
3914 (let ((python3 (which "python3")))
3915 (substitute* '("tests/data/fmtonoff.py"
3916 "tests/data/string_prefixes.py"
3917 "tests/data/function.py"
3918 "tests/data/python37.py")
3919 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3920 (string-append "#!" python3 (if (string? minor-version)
3921 minor-version
3922 "")))))
3923 #t))
3924 (add-after 'unpack 'disable-broken-tests
3925 (lambda _
3926 ;; These tests are supposed to be skipped when the blackd
3927 ;; dependencies are missing, but this doesn't quite work.
3928 (substitute* "tests/test_black.py"
3929 (("( *)class BlackDTestCase.*" match indent)
3930 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3931 indent "class BlackDTestCase(unittest.TestCase):\n"))
3932 (("web.Application") "False")
3933 (("@unittest_run_loop") ""))
3934
3935 ;; Patching the above file breaks the self test
3936 (substitute* "tests/test_black.py"
3937 (("( *)def test_self" match indent)
3938 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3939 #t)))))
3940 (propagated-inputs
3941 `(("python-click" ,python-click)
3942 ("python-attrs" ,python-attrs)
3943 ("python-appdirs" ,python-appdirs)
3944 ("python-pathspec" ,python-pathspec)
3945 ("python-regex" ,python-regex)
3946 ("python-toml" ,python-toml)
3947 ("python-typed-ast" ,python-typed-ast)))
3948 (native-inputs
3949 `(("python-setuptools-scm" ,python-setuptools-scm)))
3950 (home-page "https://github.com/ambv/black")
3951 (synopsis "The uncompromising code formatter")
3952 (description "Black is the uncompromising Python code formatter.")
3953 (license license:expat)))
3954
3955 (define-public python-blinker
3956 (package
3957 (name "python-blinker")
3958 (version "1.4")
3959 (source
3960 (origin
3961 (method url-fetch)
3962 (uri (pypi-uri "blinker" version))
3963 (sha256
3964 (base32
3965 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3966 (build-system python-build-system)
3967 (home-page "https://pythonhosted.org/blinker/")
3968 (synopsis "Fast, simple object-to-object and broadcast signaling")
3969 (description
3970 "Blinker provides a fast dispatching system that allows any number of
3971 interested parties to subscribe to events, or \"signals\".")
3972 (license license:expat)))
3973
3974 (define-public python2-blinker
3975 (package-with-python2 python-blinker))
3976
3977 (define-public pelican
3978 (package
3979 (name "pelican")
3980 (version "4.2.0")
3981 (source
3982 (origin
3983 (method url-fetch)
3984 (uri (pypi-uri "pelican" version))
3985 (sha256
3986 (base32
3987 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3988 (build-system python-build-system)
3989 (propagated-inputs
3990 `(("python-blinker" ,python-blinker)
3991 ("python-dateutil" ,python-dateutil)
3992 ("python-docutils" ,python-docutils)
3993 ("python-feedgenerator" ,python-feedgenerator)
3994 ("python-jinja2" ,python-jinja2)
3995 ("python-markdown" ,python-markdown)
3996 ("python-pygments" ,python-pygments)
3997 ("python-pytz" ,python-pytz)
3998 ("python-six" ,python-six)
3999 ("python-unidecode" ,python-unidecode)))
4000 (home-page "https://getpelican.com/")
4001 (arguments
4002 `(;; XXX Requires a lot more packages to do unit tests :P
4003 #:tests? #f))
4004 (synopsis "Python-based static site publishing system")
4005 (description
4006 "Pelican is a tool to generate a static blog from reStructuredText,
4007 Markdown input files, and more. Pelican uses Jinja2 for templating
4008 and is very extensible.")
4009 (license license:agpl3+)))
4010
4011 (define-public mallard-ducktype
4012 (package
4013 (name "mallard-ducktype")
4014 (version "1.0.2")
4015 (source
4016 (origin
4017 (method git-fetch)
4018 ;; git-reference because tests are not included in pypi source tarball
4019 ;; https://issues.guix.gnu.org/issue/36755#2
4020 (uri (git-reference
4021 (url "https://github.com/projectmallard/mallard-ducktype")
4022 (commit version)))
4023 (file-name (git-file-name name version))
4024 (sha256
4025 (base32
4026 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
4027 (build-system python-build-system)
4028 (arguments
4029 '(#:phases
4030 (modify-phases %standard-phases
4031 (replace 'check
4032 (lambda _
4033 (with-directory-excursion "tests"
4034 (invoke "sh" "runtests")))))))
4035 (home-page "http://projectmallard.org")
4036 (synopsis "Convert Ducktype to Mallard documentation markup")
4037 (description
4038 "Ducktype is a lightweight syntax that can represent all the semantics
4039 of the Mallard XML documentation system. Ducktype files can be converted to
4040 Mallard using the @command{ducktype} tool. The yelp-tools package
4041 provides additional functionality on the produced Mallard documents.")
4042 (license license:expat)))
4043
4044 (define-public python-cython
4045 (package
4046 (name "python-cython")
4047 (version "0.29.17")
4048 (source
4049 (origin
4050 (method url-fetch)
4051 (uri (pypi-uri "Cython" version))
4052 (sha256
4053 (base32
4054 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4055 (build-system python-build-system)
4056 ;; we need the full python package and not just the python-wrapper
4057 ;; because we need libpython3.3m.so
4058 (inputs
4059 `(("python" ,python)))
4060 (arguments
4061 `(#:phases
4062 (modify-phases %standard-phases
4063 (add-before 'check 'set-HOME
4064 ;; some tests require access to "$HOME/.cython"
4065 (lambda _ (setenv "HOME" "/tmp") #t))
4066 (replace 'check
4067 (lambda _
4068 ;; Disable compiler optimizations to greatly reduce the running
4069 ;; time of the test suite.
4070 (setenv "CFLAGS" "-O0")
4071
4072 (invoke "python" "runtests.py" "-vv"
4073 "-j" (number->string (parallel-job-count))
4074 ;; XXX: On 32-bit architectures, running the parallel tests
4075 ;; fails on many-core systems, see
4076 ;; <https://github.com/cython/cython/issues/2807>.
4077 ,@(if (not (target-64bit?))
4078 '("-x" "run.parallel")
4079 '())))))))
4080 (home-page "https://cython.org/")
4081 (synopsis "C extensions for Python")
4082 (description "Cython is an optimising static compiler for both the Python
4083 programming language and the extended Cython programming language. It makes
4084 writing C extensions for Python as easy as Python itself.")
4085 (license license:asl2.0)
4086 (properties `((python2-variant . ,(delay python2-cython))))))
4087
4088 (define-public python2-cython
4089 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4090 (package
4091 (inherit base)
4092 (name "python2-cython")
4093 (inputs
4094 `(("python-2" ,python-2))) ;this is not automatically changed
4095 (arguments
4096 (substitute-keyword-arguments (package-arguments base)
4097 ((#:phases phases)
4098 `(modify-phases ,phases
4099 (add-before 'check 'adjust-test_embed
4100 (lambda _
4101 (substitute* "runtests.py"
4102 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4103 ;; so it can give the right -L flag to GCC when embedding static
4104 ;; builds of Python. It is unaware that the Python "config"
4105 ;; directory (where the static library lives) was renamed in
4106 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4107 ;; which works fine, because that is where the shared library is.
4108 ;;
4109 ;; It also appears to be unaware that the Makefile in Demos/embed
4110 ;; already unconditionally pass the static library location to GCC,
4111 ;; after checking sysconfig.get_config_var('LIBPL).
4112 ;;
4113 ;; The effect is that the linker is unable to resolve libexpat
4114 ;; symbols when building for Python 2, because neither the Python 2
4115 ;; shared library nor Expat is available. To fix it, we can either
4116 ;; add Expat as an input and make it visible to the linker, or just
4117 ;; prevent it from overriding the Python shared library location.
4118 ;; The end result is identical, so we take the easy route.
4119 ((" or libname not in os\\.listdir\\(libdir\\)")
4120 ""))
4121 #t)))))))))
4122
4123 ;; The RPython toolchain currently does not support Python 3.
4124 (define-public python2-rpython
4125 (package
4126 (name "python2-rpython")
4127 (version "0.2.1")
4128 (source
4129 (origin
4130 (method url-fetch)
4131 (uri (pypi-uri "rpython" version))
4132 (sha256
4133 (base32
4134 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4135 (build-system python-build-system)
4136 (arguments `(#:python ,python-2))
4137 (native-inputs
4138 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4139 (home-page "https://rpython.readthedocs.org")
4140 (synopsis "Framework for implementing interpreters and virtual machines")
4141 (description "RPython is a translation and support framework for
4142 producing implementations of dynamic languages, emphasizing a clean separation
4143 between language specification and implementation aspects.")
4144 (license license:expat)))
4145
4146 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4147 ;; python-scipy still build, as these three packages are often used together.
4148 (define-public python-numpy
4149 (package
4150 (name "python-numpy")
4151 (version "1.17.3")
4152 (source
4153 (origin
4154 (method url-fetch)
4155 (uri (string-append
4156 "https://github.com/numpy/numpy/releases/download/v"
4157 version "/numpy-" version ".tar.gz"))
4158 (sha256
4159 (base32
4160 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4161 (build-system python-build-system)
4162 (inputs
4163 `(("openblas" ,openblas)
4164 ("lapack" ,lapack)))
4165 (native-inputs
4166 `(("python-cython" ,python-cython)
4167 ("python-pytest" ,python-pytest)
4168 ("gfortran" ,gfortran)))
4169 (arguments
4170 `(#:phases
4171 (modify-phases %standard-phases
4172 (add-before 'build 'configure-blas-lapack
4173 (lambda* (#:key inputs #:allow-other-keys)
4174 (call-with-output-file "site.cfg"
4175 (lambda (port)
4176 (format port
4177 "[openblas]
4178 libraries = openblas
4179 library_dirs = ~a/lib
4180 include_dirs = ~a/include
4181
4182 # backslash-n to make emacs happy
4183 \n[lapack]
4184 lapack_libs = lapack
4185 library_dirs = ~a/lib
4186 include_dirs = ~a/include
4187 "
4188 (assoc-ref inputs "openblas")
4189 (assoc-ref inputs "openblas")
4190 (assoc-ref inputs "lapack")
4191 (assoc-ref inputs "lapack"))))
4192 #t))
4193 (add-before 'build 'fix-executable-paths
4194 (lambda* (#:key inputs #:allow-other-keys)
4195 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4196 ;; instead of /bin/sh.
4197 (substitute* "numpy/distutils/exec_command.py"
4198 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4199 (string-append match-start (assoc-ref inputs "bash") match-end)))
4200 ;; Use "gcc" executable, not "cc".
4201 (substitute* "numpy/distutils/system_info.py"
4202 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4203 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4204 #t))
4205 ;; Tests can only be run after the library has been installed and not
4206 ;; within the source directory.
4207 (delete 'check)
4208 (add-after 'install 'check
4209 (lambda* (#:key outputs inputs #:allow-other-keys)
4210 ;; Make installed package available for running the tests
4211 (add-installed-pythonpath inputs outputs)
4212 ;; Make sure "f2py" etc is found.
4213 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4214 ":" (getenv "PATH")))
4215 (with-directory-excursion "/tmp"
4216 (invoke "python" "-c"
4217 "import numpy; numpy.test(verbose=2)")))))))
4218 (home-page "https://numpy.org")
4219 (synopsis "Fundamental package for scientific computing with Python")
4220 (description "NumPy is the fundamental package for scientific computing
4221 with Python. It contains among other things: a powerful N-dimensional array
4222 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4223 and Fortran code, useful linear algebra, Fourier transform, and random number
4224 capabilities.")
4225 (properties `((python2-variant . ,(delay python2-numpy))))
4226 (license license:bsd-3)))
4227
4228 ;; Numpy 1.16.x are the last versions that support Python 2.
4229 (define-public python2-numpy
4230 (let ((numpy (package-with-python2
4231 (strip-python2-variant python-numpy))))
4232 (package/inherit
4233 numpy
4234 (version "1.16.5")
4235 (source (origin
4236 (method url-fetch)
4237 (uri (string-append
4238 "https://github.com/numpy/numpy/releases/download/v"
4239 version "/numpy-" version ".tar.gz"))
4240 (sha256
4241 (base32
4242 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4243
4244 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4245 ;; interest only for legacy code going back to NumPy's predecessor
4246 ;; Numeric.
4247 (define-public python2-numpy-1.8
4248 (package (inherit python2-numpy)
4249 (version "1.8.2")
4250 (source
4251 (origin
4252 (method git-fetch)
4253 (uri (git-reference
4254 (url "https://github.com/numpy/numpy")
4255 (commit (string-append "v" version))))
4256 (file-name (git-file-name "numpy" version))
4257 (sha256
4258 (base32
4259 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4260 (arguments
4261 (substitute-keyword-arguments (package-arguments python2-numpy)
4262 ((#:phases phases)
4263 `(modify-phases ,phases
4264 (replace 'configure-blas-lapack
4265 (lambda* (#:key inputs #:allow-other-keys)
4266 (call-with-output-file "site.cfg"
4267 (lambda (port)
4268 (format port
4269 "[openblas]
4270 libraries = openblas,lapack
4271 library_dirs = ~a/lib:~a/lib
4272 include_dirs = ~a/include:~a/include
4273 "
4274 (assoc-ref inputs "openblas")
4275 (assoc-ref inputs "lapack")
4276 (assoc-ref inputs "openblas")
4277 (assoc-ref inputs "lapack"))))
4278 #t))))))
4279 (native-inputs
4280 `(("python2-nose" ,python2-nose)))
4281 (description "NumPy is the fundamental package for scientific computing
4282 with Python. It contains among other things: a powerful N-dimensional array
4283 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4284 and Fortran code, useful linear algebra, Fourier transform, and random number
4285 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4286 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4287 Numeric.")
4288 (license license:bsd-3)))
4289
4290 (define-public python-munch
4291 (package
4292 (name "python-munch")
4293 (version "2.0.4")
4294 (source
4295 (origin
4296 (method url-fetch)
4297 (uri (pypi-uri "munch" version))
4298 (sha256
4299 (base32
4300 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4301 (build-system python-build-system)
4302 (home-page "https://github.com/Infinidat/munch")
4303 (synopsis "Dot-accessible dictionary")
4304 (description "Munch is a dot-accessible dictionary similar to JavaScript
4305 objects.")
4306 (license license:expat)))
4307
4308 (define-public python2-munch
4309 (package-with-python2 python-munch))
4310
4311 (define-public python-colormath
4312 (package
4313 (name "python-colormath")
4314 (version "3.0.0")
4315 (source
4316 (origin
4317 (method url-fetch)
4318 (uri (pypi-uri "colormath" version))
4319 (sha256
4320 (base32
4321 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4322 (build-system python-build-system)
4323 (propagated-inputs
4324 `(("python-networkx" ,python-networkx)
4325 ("python-numpy" ,python-numpy)))
4326 (home-page "https://github.com/gtaylor/python-colormath")
4327 (synopsis "Color math and conversion library")
4328 (description
4329 "This is a Python library for color math and conversions.")
4330 (license license:bsd-3)))
4331
4332 (define-public python2-colormath
4333 (package-with-python2 python-colormath))
4334
4335 (define-public python-spectra
4336 (package
4337 (name "python-spectra")
4338 (version "0.0.11")
4339 (source
4340 (origin
4341 (method url-fetch)
4342 (uri (pypi-uri "spectra" version))
4343 (sha256
4344 (base32
4345 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4346 (build-system python-build-system)
4347 (arguments
4348 `(#:phases
4349 (modify-phases %standard-phases
4350 (replace 'check
4351 (lambda _ (invoke "nosetests" "-v"))))))
4352 (propagated-inputs
4353 `(("python-colormath" ,python-colormath)))
4354 (native-inputs
4355 `(("python-nose" ,python-nose)))
4356 (home-page "https://github.com/jsvine/spectra")
4357 (synopsis "Color scales and color conversion")
4358 (description
4359 "This package provides a Python library intended to make color math,
4360 color scales, and color space conversion easy. It has support for:
4361
4362 @enumerate
4363 @item Color scales
4364 @item Color ranges
4365 @item Color blending
4366 @item Brightening/darkening colors
4367 @item Saturating/desaturating colors
4368 @item Conversion to/from multiple color spaces.
4369 @end enumerate\n")
4370 (license license:expat)))
4371
4372 (define-public python2-spectra
4373 (package-with-python2 python-spectra))
4374
4375 (define-public python-numpy-documentation
4376 (package
4377 (name "python-numpy-documentation")
4378 (version (package-version python-numpy))
4379 (source (package-source python-numpy))
4380 (build-system python-build-system)
4381 (native-inputs
4382 `(("python-matplotlib" ,python-matplotlib)
4383 ("python-numpy" ,python-numpy)
4384 ("pkg-config" ,pkg-config)
4385 ("python-sphinx" ,python-sphinx)
4386 ("python-numpydoc" ,python-numpydoc)
4387 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4388 texlive-fonts-ec
4389 texlive-generic-ifxetex
4390 texlive-generic-pdftex
4391 texlive-amsfonts
4392 texlive-latex-capt-of
4393 texlive-latex-cmap
4394 texlive-latex-environ
4395 texlive-latex-eqparbox
4396 texlive-latex-etoolbox
4397 texlive-latex-expdlist
4398 texlive-latex-fancyhdr
4399 texlive-latex-fancyvrb
4400 texlive-latex-fncychap
4401 texlive-latex-float
4402 texlive-latex-framed
4403 texlive-latex-geometry
4404 texlive-latex-graphics
4405 texlive-latex-hyperref
4406 texlive-latex-mdwtools
4407 texlive-latex-multirow
4408 texlive-latex-needspace
4409 texlive-latex-oberdiek
4410 texlive-latex-parskip
4411 texlive-latex-preview
4412 texlive-latex-tabulary
4413 texlive-latex-threeparttable
4414 texlive-latex-titlesec
4415 texlive-latex-trimspaces
4416 texlive-latex-ucs
4417 texlive-latex-upquote
4418 texlive-latex-url
4419 texlive-latex-varwidth
4420 texlive-latex-wrapfig)))
4421 ("texinfo" ,texinfo)
4422 ("perl" ,perl)
4423 ("scipy-sphinx-theme"
4424 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4425 (method git-fetch)
4426 (uri (git-reference
4427 (url "https://github.com/scipy/scipy-sphinx-theme")
4428 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4429 (sha256
4430 (base32
4431 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4432 ,@(package-native-inputs python-numpy)))
4433 (arguments
4434 `(#:tests? #f ; we're only generating the documentation
4435 #:phases
4436 (modify-phases %standard-phases
4437 (delete 'build)
4438 (replace 'install
4439 (lambda* (#:key inputs outputs #:allow-other-keys)
4440 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4441 (doc (string-append
4442 data "/doc/" ,name "-"
4443 ,(package-version python-numpy)))
4444 (info-reader (string-append data "/info"))
4445 (html (string-append doc "/html"))
4446 (scipy-sphinx-theme "scipy-sphinx-theme")
4447 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4448 (pyver ,(string-append "PYVER=")))
4449
4450 ;; FIXME: this is needed to for texlive-union to generate
4451 ;; fonts, which are not found.
4452 (setenv "HOME" "/tmp")
4453
4454 (with-directory-excursion "doc"
4455 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4456 (mkdir-p html)
4457 (invoke "make" "html" pyver)
4458 (invoke "make" "latex" "PAPER=a4" pyver)
4459 (invoke "make" "-C" "build/latex"
4460 "all-pdf" "PAPER=a4" pyver)
4461 ;; FIXME: Generation of the info file fails.
4462 ;; (invoke "make" "info" pyver)
4463 ;; (mkdir-p info)
4464 ;; (copy-file "build/texinfo/numpy.info"
4465 ;; (string-append info "/numpy.info"))
4466 (for-each (lambda (file)
4467 (copy-file (string-append "build/latex" file)
4468 (string-append doc file)))
4469 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4470 (with-directory-excursion "build/html"
4471 (for-each (lambda (file)
4472 (let* ((dir (dirname file))
4473 (tgt-dir (string-append html "/" dir)))
4474 (unless (equal? "." dir)
4475 (mkdir-p tgt-dir))
4476 (install-file file html)))
4477 (find-files "." ".*")))))
4478 #t)))))
4479 (home-page (package-home-page python-numpy))
4480 (synopsis "Documentation for the python-numpy package")
4481 (description (package-description python-numpy))
4482 (license (package-license python-numpy))))
4483
4484 (define-public python2-numpy-documentation
4485 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4486 (package
4487 (inherit numpy-documentation)
4488 (native-inputs `(("python2-functools32" ,python2-functools32)
4489 ,@(package-native-inputs numpy-documentation))))))
4490
4491 (define-public python-pygit2
4492 (package
4493 (name "python-pygit2")
4494 (version "1.1.0")
4495 (source
4496 (origin
4497 (method url-fetch)
4498 (uri (pypi-uri "pygit2" version))
4499 (sha256
4500 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4501 (build-system python-build-system)
4502 (arguments
4503 '(#:tests? #f)) ; tests don't run correctly in our environment
4504 (propagated-inputs
4505 `(("python-cached-property" ,python-cached-property)
4506 ("python-cffi" ,python-cffi)
4507 ("libgit2" ,libgit2)))
4508 (native-inputs
4509 `(("python-pytest" ,python-pytest)))
4510 (home-page "https://github.com/libgit2/pygit2")
4511 (synopsis "Python bindings for libgit2")
4512 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4513 library, libgit2 implements Git plumbing.")
4514 ;; GPL2.0 only, with linking exception.
4515 (license license:gpl2)))
4516
4517 (define-public python-patiencediff
4518 (package
4519 (name "python-patiencediff")
4520 (version "0.2.0")
4521 (source
4522 (origin
4523 (method url-fetch)
4524 (uri (pypi-uri "patiencediff" version))
4525 (sha256
4526 (base32
4527 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
4528 (build-system python-build-system)
4529 (home-page "https://www.breezy-vcs.org/")
4530 (synopsis "Python implementation of the patiencediff algorithm")
4531 (description
4532 "This package contains a Python implementation of the @code{patiencediff}
4533 algorithm. Patiencediff provides a good balance of performance, nice output for
4534 humans, and implementation simplicity.")
4535 (license license:gpl2)))
4536
4537 (define-public python-pyparsing
4538 (package
4539 (name "python-pyparsing")
4540 (version "2.4.6")
4541 (source
4542 (origin
4543 (method url-fetch)
4544 (uri (pypi-uri "pyparsing" version))
4545 (sha256
4546 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4547 (build-system python-build-system)
4548 (outputs '("out" "doc"))
4549 (arguments
4550 `(#:tests? #f ; no test target
4551 #:phases
4552 (modify-phases %standard-phases
4553 (add-after 'install 'install-doc
4554 (lambda* (#:key outputs #:allow-other-keys)
4555 (let* ((doc (string-append (assoc-ref outputs "doc")
4556 "/share/doc/" ,name "-" ,version))
4557 (html-doc (string-append doc "/html"))
4558 (examples (string-append doc "/examples")))
4559 (mkdir-p html-doc)
4560 (mkdir-p examples)
4561 (for-each
4562 (lambda (dir tgt)
4563 (map (lambda (file)
4564 (install-file file tgt))
4565 (find-files dir ".*")))
4566 (list "docs" "htmldoc" "examples")
4567 (list doc html-doc examples))
4568 #t))))))
4569 (home-page "https://github.com/pyparsing/pyparsing")
4570 (synopsis "Python parsing class library")
4571 (description
4572 "The pyparsing module is an alternative approach to creating and
4573 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4574 of regular expressions. The pyparsing module provides a library of classes
4575 that client code uses to construct the grammar directly in Python code.")
4576 (license license:expat)))
4577
4578 (define-public python2-pyparsing
4579 (package-with-python2 python-pyparsing))
4580
4581 (define-public python-numpydoc
4582 (package
4583 (name "python-numpydoc")
4584 (version "0.8.0")
4585 (source
4586 (origin
4587 (method url-fetch)
4588 (uri (pypi-uri "numpydoc" version))
4589 (sha256
4590 (base32
4591 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4592 (build-system python-build-system)
4593 (propagated-inputs
4594 `(("python-sphinx" ,python-sphinx)))
4595 (native-inputs
4596 `(("python-nose" ,python-nose)))
4597 (home-page "https://pypi.org/project/numpydoc/")
4598 (synopsis
4599 "Numpy's Sphinx extensions")
4600 (description
4601 "Sphinx extension to support docstrings in Numpy format.")
4602 (license license:bsd-2)))
4603
4604 (define-public python2-numpydoc
4605 (package-with-python2 python-numpydoc))
4606
4607 (define-public python-numexpr
4608 (package
4609 (name "python-numexpr")
4610 (version "2.6.5")
4611 (source
4612 (origin
4613 (method url-fetch)
4614 (uri (pypi-uri "numexpr" version))
4615 (sha256
4616 (base32
4617 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4618 (build-system python-build-system)
4619 (arguments `(#:tests? #f)) ; no tests included
4620 (propagated-inputs
4621 `(("python-numpy" ,python-numpy)))
4622 (home-page "https://github.com/pydata/numexpr")
4623 (synopsis "Fast numerical expression evaluator for NumPy")
4624 (description
4625 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4626 expressions that operate on arrays are accelerated and use less memory than
4627 doing the same calculation in Python. In addition, its multi-threaded
4628 capabilities can make use of all your cores, which may accelerate
4629 computations, most specially if they are not memory-bounded (e.g. those using
4630 transcendental functions).")
4631 (license license:expat)))
4632
4633 (define-public python2-numexpr
4634 (package-with-python2 python-numexpr))
4635
4636 (define-public python-cycler
4637 (package
4638 (name "python-cycler")
4639 (version "0.10.0")
4640 (source (origin
4641 (method url-fetch)
4642 (uri (pypi-uri "cycler" version))
4643 (sha256
4644 (base32
4645 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4646 (build-system python-build-system)
4647 (arguments
4648 ;; XXX: The current version requires 'coveralls' which we don't have.
4649 ;; Enable this for the next release which uses 'python-pytest'.
4650 '(#:tests? #f))
4651 (propagated-inputs
4652 `(("python-six" ,python-six)))
4653 (home-page "http://matplotlib.org/cycler/")
4654 (synopsis "Composable keyword argument iterator")
4655 (description
4656 "When using @code{matplotlib} and plotting more than one line, it is
4657 common to want to be able to want to be able to cycle over one or more artist
4658 styles; but the plotting logic can quickly become involved.
4659 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4660 @code{Cycler} class was developed.")
4661 (license license:bsd-3)))
4662
4663 (define-public python2-cycler
4664 (package-with-python2 python-cycler))
4665
4666 (define-public python-colorspacious
4667 (package
4668 (name "python-colorspacious")
4669 (version "1.1.2")
4670 (source
4671 (origin
4672 (method git-fetch)
4673 (uri (git-reference
4674 (url "https://github.com/njsmith/colorspacious")
4675 (commit (string-append "v" version))))
4676 (file-name (git-file-name name version))
4677 (sha256
4678 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4679 (build-system python-build-system)
4680 (propagated-inputs
4681 `(("python-numpy" ,python-numpy)))
4682 (native-inputs
4683 `(("python-nose" ,python-nose)))
4684 (arguments
4685 `(#:phases
4686 (modify-phases %standard-phases
4687 (replace 'check
4688 (lambda _
4689 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4690 (home-page "https://github.com/njsmith/colorspacious")
4691 (synopsis "Python library for colorspace conversions")
4692 (description "@code{colorspacious} is a Python library that lets you
4693 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4694 (license license:expat)))
4695
4696 (define-public python2-colorspacious
4697 (package-with-python2 python-colorspacious))
4698
4699 (define-public python-matplotlib
4700 (package
4701 (name "python-matplotlib")
4702 (version "3.1.2")
4703 (source
4704 (origin
4705 (method url-fetch)
4706 (uri (pypi-uri "matplotlib" version))
4707 (sha256
4708 (base32
4709 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4710 (build-system python-build-system)
4711 (propagated-inputs ; the following packages are all needed at run time
4712 `(("python-cycler" ,python-cycler)
4713 ("python-kiwisolver" ,python-kiwisolver)
4714 ("python-pyparsing" ,python-pyparsing)
4715 ("python-pygobject" ,python-pygobject)
4716 ("gobject-introspection" ,gobject-introspection)
4717 ("python-tkinter" ,python "tk")
4718 ("python-dateutil" ,python-dateutil)
4719 ("python-numpy" ,python-numpy)
4720 ("python-pillow" ,python-pillow)
4721 ("python-pytz" ,python-pytz)
4722 ("python-six" ,python-six)
4723 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4724 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4725 ;; object. For this reason we need to import both libraries.
4726 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4727 ("python-pycairo" ,python-pycairo)
4728 ("python-cairocffi" ,python-cairocffi)))
4729 (inputs
4730 `(("libpng" ,libpng)
4731 ("imagemagick" ,imagemagick)
4732 ("freetype" ,freetype)
4733 ("cairo" ,cairo)
4734 ("glib" ,glib)
4735 ;; FIXME: Add backends when available.
4736 ;("python-wxpython" ,python-wxpython)
4737 ("tcl" ,tcl)
4738 ("tk" ,tk)))
4739 (native-inputs
4740 `(("pkg-config" ,pkg-config)
4741 ("python-pytest" ,python-pytest)
4742 ("python-mock" ,python-mock)
4743 ("unzip" ,unzip)
4744 ("jquery-ui"
4745 ,(origin
4746 (method url-fetch)
4747 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4748 (sha256
4749 (base32
4750 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4751 (arguments
4752 `(#:phases
4753 (modify-phases %standard-phases
4754 ;; XXX We disable all image comparison tests because we're using a
4755 ;; newer version of FreeType than matplotlib expects. This leads to
4756 ;; minor differences throughout the tests.
4757 (add-after 'unpack 'fix-and-disable-failing-tests
4758 (lambda _
4759 (substitute* (append (find-files "lib/matplotlib/tests/"
4760 "test_.*\\.py$")
4761 (find-files "lib/mpl_toolkits/tests"
4762 "test_.*\\.py$"))
4763 (("^from matplotlib" match)
4764 (string-append "import pytest\n" match))
4765 (("( *)@image_comparison" match indent)
4766 (string-append indent
4767 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4768 match)))
4769 (substitute* "lib/matplotlib/tests/test_animation.py"
4770 (("/bin/sh") (which "sh")))
4771 (for-each delete-file
4772 ;; test_normal_axes, test_get_tightbbox_polar
4773 '("lib/matplotlib/tests/test_axes.py"
4774 ;; We don't use the webagg backend and this test forces it.
4775 "lib/matplotlib/tests/test_backend_webagg.py"
4776 ;; test_outward_ticks
4777 "lib/matplotlib/tests/test_tightlayout.py"
4778 ;; test_hidden_axes fails with minor extent
4779 ;; differences, possibly due to the use of a
4780 ;; different version of FreeType.
4781 "lib/matplotlib/tests/test_constrainedlayout.py"
4782 ;; Fontconfig returns no fonts.
4783 "lib/matplotlib/tests/test_font_manager.py"))
4784 #t))
4785 (add-before 'install 'install-jquery-ui
4786 (lambda* (#:key outputs inputs #:allow-other-keys)
4787 (let ((dir (string-append (assoc-ref outputs "out")
4788 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4789 (mkdir-p dir)
4790 (invoke "unzip"
4791 (assoc-ref inputs "jquery-ui")
4792 "-d" dir))
4793 #t))
4794 (replace 'check
4795 (lambda* (#:key outputs inputs #:allow-other-keys)
4796 (add-installed-pythonpath inputs outputs)
4797 (invoke "python" "tests.py" "-v"
4798 "-m" "not network and not webagg")))
4799 (add-before 'build 'configure-environment
4800 (lambda* (#:key outputs inputs #:allow-other-keys)
4801 (let ((cairo (assoc-ref inputs "cairo")))
4802 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4803 ;; has not effect.
4804 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4805 (setenv "HOME" (getcwd))
4806 (call-with-output-file "setup.cfg"
4807 (lambda (port)
4808 (format port "[directories]~%
4809 basedirlist = ~a,~a~%
4810 [packages]~%
4811 tests = True~%"
4812 (assoc-ref inputs "tcl")
4813 (assoc-ref inputs "tk")))))
4814 #t)))))
4815 (home-page "https://matplotlib.org/")
4816 (synopsis "2D plotting library for Python")
4817 (description
4818 "Matplotlib is a Python 2D plotting library which produces publication
4819 quality figures in a variety of hardcopy formats and interactive environments
4820 across platforms. Matplotlib can be used in Python scripts, the python and
4821 ipython shell, web application servers, and six graphical user interface
4822 toolkits.")
4823 (license license:psfl)
4824 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4825
4826 (define-public python2-matplotlib
4827 (let ((matplotlib (package-with-python2
4828 (strip-python2-variant python-matplotlib))))
4829 (package (inherit matplotlib)
4830 (version "2.2.4")
4831 (source
4832 (origin
4833 (method url-fetch)
4834 (uri (pypi-uri "matplotlib" version))
4835 (sha256
4836 (base32
4837 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4838 (arguments
4839 (substitute-keyword-arguments (package-arguments matplotlib)
4840 ((#:phases phases)
4841 `(modify-phases ,phases
4842 (replace 'install-jquery-ui
4843 (lambda* (#:key outputs inputs #:allow-other-keys)
4844 (let ((dir (string-append (assoc-ref outputs "out")
4845 "/lib/python2.7/site-packages/"
4846 "matplotlib/backends/web_backend/")))
4847 (mkdir-p dir)
4848 (invoke "unzip"
4849 (assoc-ref inputs "jquery-ui")
4850 "-d" dir))
4851 #t))
4852 (delete 'fix-and-disable-failing-tests)
4853 (delete 'check))))) ; These tests weren't run the the past.
4854 ;; Make sure to use special packages for Python 2 instead
4855 ;; of those automatically rewritten by package-with-python2.
4856 (propagated-inputs
4857 `(("python2-pycairo" ,python2-pycairo)
4858 ("python2-backports-functools-lru-cache"
4859 ,python2-backports-functools-lru-cache)
4860 ("python2-functools32" ,python2-functools32)
4861 ("python2-pygobject-2" ,python2-pygobject-2)
4862 ("python2-subprocess32" ,python2-subprocess32)
4863 ("python2-tkinter" ,python-2 "tk")
4864 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4865 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4866
4867 (define-public python-matplotlib-documentation
4868 (package
4869 (name "python-matplotlib-documentation")
4870 (version (package-version python-matplotlib))
4871 (source (package-source python-matplotlib))
4872 (build-system python-build-system)
4873 (native-inputs
4874 `(("python-matplotlib" ,python-matplotlib)
4875 ("python-colorspacious" ,python-colorspacious)
4876 ("python-sphinx" ,python-sphinx)
4877 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4878 ("python-sphinx-gallery" ,python-sphinx-gallery)
4879 ("python-numpydoc" ,python-numpydoc)
4880 ("python-ipython" ,python-ipython)
4881 ("python-ipykernel" ,python-ipykernel)
4882 ("python-mock" ,python-mock)
4883 ("graphviz" ,graphviz)
4884 ("texlive" ,(texlive-union (list texlive-amsfonts
4885 texlive-latex-amsmath
4886 texlive-latex-enumitem
4887 texlive-latex-expdlist
4888 texlive-latex-geometry
4889 texlive-latex-preview
4890 texlive-latex-type1cm
4891 texlive-latex-ucs
4892
4893 texlive-generic-pdftex
4894
4895 texlive-fonts-ec
4896 texlive-fonts-adobe-times
4897 texlive-fonts-txfonts)))
4898 ("texinfo" ,texinfo)
4899 ,@(package-native-inputs python-matplotlib)))
4900 (arguments
4901 `(#:tests? #f ; we're only generating documentation
4902 #:phases
4903 (modify-phases %standard-phases
4904 ;; The tests in python-matplotlib are run after the install phase, so
4905 ;; we need to delete the extra phase here.
4906 (delete 'check)
4907 (replace 'build
4908 (lambda _
4909 (chdir "doc")
4910 (setenv "PYTHONPATH"
4911 (string-append (getenv "PYTHONPATH")
4912 ":" (getcwd) "/../examples/units"))
4913 (substitute* "conf.py"
4914 ;; Don't use git.
4915 (("^SHA = check_output.*")
4916 (string-append "SHA = \"" ,version "\"\n"))
4917 ;; Don't fetch intersphinx files from the Internet
4918 (("^explicit_order_folders" m)
4919 (string-append "intersphinx_mapping = {}\n" m))
4920 (("'sphinx.ext.intersphinx',") "")
4921 ;; Disable URL embedding which requires internet access.
4922 (("'https://docs.scipy.org/doc/numpy'") "None")
4923 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4924 (invoke "make"
4925 "SPHINXBUILD=sphinx-build"
4926 "SPHINXOPTS=" ; don't abort on warnings
4927 "html" "texinfo")))
4928 (replace 'install
4929 (lambda* (#:key inputs outputs #:allow-other-keys)
4930 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4931 (doc (string-append data "/doc/python-matplotlib-" ,version))
4932 (info (string-append data "/info"))
4933 (html (string-append doc "/html")))
4934 (mkdir-p html)
4935 (mkdir-p info)
4936 (copy-recursively "build/html" html)
4937 (symlink (string-append html "/_images")
4938 (string-append info "/matplotlib-figures"))
4939 (with-directory-excursion "build/texinfo"
4940 (substitute* "matplotlib.texi"
4941 (("@image\\{([^,]*)" all file)
4942 (string-append "@image{matplotlib-figures/" file)))
4943 (symlink (string-append html "/_images")
4944 "./matplotlib-figures")
4945 (invoke "makeinfo" "--no-split"
4946 "-o" "matplotlib.info" "matplotlib.texi"))
4947 (install-file "build/texinfo/matplotlib.info" info))
4948 #t)))))
4949 (home-page (package-home-page python-matplotlib))
4950 (synopsis "Documentation for the python-matplotlib package")
4951 (description (package-description python-matplotlib))
4952 (license (package-license python-matplotlib))))
4953
4954 (define-public python2-matplotlib-documentation
4955 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4956 (package
4957 (inherit parent)
4958 (native-inputs
4959 (alist-delete "python-sphinx-copybutton"
4960 (package-native-inputs parent))))))
4961
4962 (define-public python-matplotlib-venn
4963 (package
4964 (name "python-matplotlib-venn")
4965 (version "0.11.5")
4966 (source
4967 (origin
4968 (method url-fetch)
4969 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4970 (sha256
4971 (base32
4972 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4973 (build-system python-build-system)
4974 (arguments '(#:tests? #f)) ; tests are not included
4975 (propagated-inputs
4976 `(("python-matplotlib" ,python-matplotlib)
4977 ("python-numpy" ,python-numpy)
4978 ("python-scipy" ,python-scipy)))
4979 (native-inputs
4980 `(("unzip" ,unzip)))
4981 (home-page "https://github.com/konstantint/matplotlib-venn")
4982 (synopsis "Plot area-proportional Venn diagrams")
4983 (description
4984 "This package provides tools for plotting area-proportional two- and
4985 three-way Venn diagrams in @code{matplotlib}.")
4986 (license license:expat)))
4987
4988 (define-public python-pysnptools
4989 (package
4990 (name "python-pysnptools")
4991 (version "0.4.11")
4992 (source
4993 (origin
4994 (method url-fetch)
4995 (uri (pypi-uri "pysnptools" version))
4996 (sha256
4997 (base32
4998 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4999 (build-system python-build-system)
5000 (arguments
5001 `(#:tests? #f ; no test data are included
5002 #:phases
5003 (modify-phases %standard-phases
5004 (replace 'check
5005 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5006 (if tests?
5007 (begin
5008 (add-installed-pythonpath inputs outputs)
5009 (invoke "python3" "pysnptools/test.py"))
5010 #t))))))
5011 (propagated-inputs
5012 `(("python-dill" ,python-dill)
5013 ("python-h5py" ,python-h5py)
5014 ("python-numpy" ,python-numpy)
5015 ("python-pandas" ,python-pandas)
5016 ("python-psutil" ,python-psutil)
5017 ("python-scipy" ,python-scipy)))
5018 (native-inputs
5019 `(("python-cython" ,python-cython)))
5020 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
5021 (synopsis "Library for reading and manipulating genetic data")
5022 (description
5023 "PySnpTools is a library for reading and manipulating genetic data. It
5024 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
5025 those files. It can also efficiently manipulate ranges of integers using set
5026 operators such as union, intersection, and difference.")
5027 (license license:asl2.0)))
5028
5029 (define-public python2-pysnptools
5030 (package-with-python2 python-pysnptools))
5031
5032 (define-public python-socksipy-branch
5033 (package
5034 (name "python-socksipy-branch")
5035 (version "1.01")
5036 (source
5037 (origin
5038 (method url-fetch)
5039 (uri (pypi-uri "SocksiPy-branch" version))
5040 (sha256
5041 (base32
5042 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
5043 (build-system python-build-system)
5044 (arguments
5045 `(#:tests? #f)) ; There are no tests
5046 (home-page "https://code.google.com/archive/p/socksipy-branch/")
5047 (synopsis "Python SOCKS module")
5048 (description
5049 "SocksiPy - A Python SOCKS client module. It provides a
5050 socket-like interface that supports connections to any TCP
5051 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
5052 The original version was developed by Dan Haim, this is a
5053 branch created by Mario Vilas to address some open issues,
5054 as the original project seems to have been abandoned circa 2007.")
5055 (license license:bsd-3)))
5056
5057 (define-public python2-socksipy-branch
5058 (package-with-python2 python-socksipy-branch))
5059
5060 (define-public python-socksipychain
5061 (package
5062 (name "python-socksipychain")
5063 (version "2.1.2")
5064 (source
5065 (origin
5066 (method git-fetch)
5067 (uri (git-reference
5068 (url "https://github.com/pagekite/PySocksipyChain")
5069 (commit (string-append "v" version))))
5070 (file-name (git-file-name name version))
5071 (sha256
5072 (base32
5073 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5074 (build-system python-build-system)
5075 (arguments
5076 `(#:tests? #f)) ; Tests try to access the network.
5077 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5078 (synopsis "Python SOCKS module with chained proxies support")
5079 (description
5080 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5081 adds support for arbitrary chaining of proxy servers and various modes of
5082 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5083 a simple netcat replacement with chaining support.")
5084 (license license:bsd-3)))
5085
5086 (define-public python-pycodestyle
5087 (package
5088 (name "python-pycodestyle")
5089 (version "2.6.0")
5090 (source
5091 (origin
5092 (method url-fetch)
5093 (uri (pypi-uri "pycodestyle" version))
5094 (sha256
5095 (base32
5096 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))
5097 (build-system python-build-system)
5098 (arguments
5099 `(#:phases
5100 (modify-phases %standard-phases
5101 (replace 'check
5102 (lambda _
5103 (invoke "pytest" "-vv"))))))
5104 (native-inputs
5105 `(("python-pytest" ,python-pytest)))
5106 (home-page "https://pycodestyle.readthedocs.io/")
5107 (synopsis "Python style guide checker")
5108 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5109 Python code against some of the style conventions in
5110 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5111 (license license:expat)))
5112
5113 (define-public python2-pycodestyle
5114 (package-with-python2 python-pycodestyle))
5115
5116 (define-public python-multidict
5117 (package
5118 (name "python-multidict")
5119 (version "4.7.5")
5120 (source
5121 (origin
5122 (method url-fetch)
5123 (uri (pypi-uri "multidict" version))
5124 (sha256
5125 (base32
5126 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5127 (build-system python-build-system)
5128 (arguments
5129 '(#:modules ((ice-9 ftw)
5130 (srfi srfi-1)
5131 (srfi srfi-26)
5132 (guix build utils)
5133 (guix build python-build-system))
5134 #:phases (modify-phases %standard-phases
5135 (replace 'check
5136 (lambda* (#:key tests? #:allow-other-keys)
5137 (if tests?
5138 (begin
5139 (let ((libdir (find (cut string-prefix? "lib." <>)
5140 (scandir "build"))))
5141 (setenv "PYTHONPATH"
5142 (string-append "./build/" libdir ":"
5143 (getenv "PYTHONPATH")))
5144 (invoke "pytest" "-vv")))
5145 (format #t "test suite not run~%"))
5146 #t)))))
5147 (native-inputs
5148 `(("python-pytest" ,python-pytest)
5149 ("python-pytest-cov" ,python-pytest-cov)))
5150 (home-page "https://github.com/aio-libs/multidict/")
5151 (synopsis "Multidict implementation")
5152 (description "Multidict is dict-like collection of key-value pairs
5153 where key might be occurred more than once in the container.")
5154 (license license:asl2.0)))
5155
5156 (define-public python-orderedmultidict
5157 (package
5158 (name "python-orderedmultidict")
5159 (version "1.0")
5160 (source
5161 (origin
5162 (method url-fetch)
5163 (uri (pypi-uri "orderedmultidict" version))
5164 (sha256
5165 (base32
5166 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5167 (build-system python-build-system)
5168 (arguments
5169 `(#:phases
5170 (modify-phases %standard-phases
5171 (add-after 'unpack 'fix-tests
5172 (lambda _
5173 ;; The package uses nosetest for running the tests.
5174 ;; Adding this initfile allows to run the test suite
5175 ;; without requiring nosetest.
5176 (with-output-to-file "tests/__init__.py" newline)
5177 #t)))))
5178 (propagated-inputs
5179 `(("python-six" ,python-six)))
5180 (native-inputs
5181 `(("python-pycodestyle" ,python-pycodestyle)))
5182 (home-page "https://github.com/gruns/orderedmultidict")
5183 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5184 (description "This package contains a library for ordered multivalue
5185 dictionaries. A multivalue dictionary is a dictionary that can store
5186 multiple values for the same key. An ordered multivalue dictionary is a
5187 multivalue dictionary that retains the order of insertions and deletions.")
5188 (license license:unlicense)))
5189
5190 (define-public python2-orderedmultidict
5191 (package-with-python2 python-orderedmultidict))
5192
5193 (define-public python-autopep8
5194 (package
5195 (name "python-autopep8")
5196 (version "1.5.3")
5197 (source
5198 (origin
5199 (method url-fetch)
5200 (uri (pypi-uri "autopep8" version))
5201 (sha256
5202 (base32
5203 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5204 (build-system python-build-system)
5205 (propagated-inputs
5206 `(("python-pycodestyle" ,python-pycodestyle)
5207 ("python-toml" ,python-toml)))
5208 (home-page "https://github.com/hhatto/autopep8")
5209 (synopsis "Format Python code according to the PEP 8 style guide")
5210 (description
5211 "@code{autopep8} automatically formats Python code to conform to
5212 the PEP 8 style guide. It uses the pycodestyle utility to determine
5213 what parts of the code needs to be formatted. @code{autopep8} is
5214 capable of fixing most of the formatting issues that can be reported
5215 by pycodestyle.")
5216 (license (license:non-copyleft
5217 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5218
5219 (define-public python2-autopep8
5220 (package-with-python2 python-autopep8))
5221
5222 (define-public python-distlib
5223 (package
5224 (name "python-distlib")
5225 (version "0.3.0")
5226 (source
5227 (origin
5228 (method url-fetch)
5229 (uri (pypi-uri "distlib" version ".zip"))
5230 (sha256
5231 (base32
5232 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5233 (build-system python-build-system)
5234 (arguments
5235 `(#:phases
5236 (modify-phases %standard-phases
5237 (add-before 'build 'no-/bin/sh
5238 (lambda _
5239 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5240 (("/bin/sh") (which "sh")))
5241 #t))
5242 (add-before 'check 'prepare-test-env
5243 (lambda _
5244 (setenv "HOME" "/tmp")
5245 ;; NOTE: Any value works, the variable just has to be present.
5246 (setenv "SKIP_ONLINE" "1")
5247 #t)))))
5248 (native-inputs `(("unzip" ,unzip)))
5249 (home-page "https://bitbucket.org/pypa/distlib")
5250 (synopsis "Distribution utilities")
5251 (description "Distlib is a library which implements low-level functions that
5252 relate to packaging and distribution of Python software. It is intended to be
5253 used as the basis for third-party packaging tools.")
5254 (license license:psfl)))
5255
5256 (define-public python-distutils-extra
5257 (package
5258 (name "python-distutils-extra")
5259 (version "2.38")
5260 (source
5261 (origin
5262 (method url-fetch)
5263 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5264 version "/+download/python-distutils-extra-"
5265 version ".tar.gz"))
5266 (sha256
5267 (base32
5268 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5269 (build-system python-build-system)
5270 (home-page "https://launchpad.net/python-distutils-extra/")
5271 (synopsis "Enhancements to Python's distutils")
5272 (description
5273 "The python-distutils-extra module enables you to easily integrate
5274 gettext support, themed icons, and scrollkeeper-based documentation into
5275 Python's distutils.")
5276 (license license:gpl2)))
5277
5278 (define-public python2-distutils-extra
5279 (package-with-python2 python-distutils-extra))
5280
5281 (define-public python2-elib.intl
5282 (package
5283 (name "python2-elib.intl")
5284 (version "0.0.3")
5285 (source
5286 (origin
5287 ;; This project doesn't tag releases or publish tarballs, so we take
5288 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5289 (method git-fetch)
5290 (uri (git-reference
5291 (url "https://github.com/dieterv/elib.intl")
5292 (commit "d09997cfef")))
5293 (file-name (string-append name "-" version "-checkout"))
5294 (sha256
5295 (base32
5296 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5297 (build-system python-build-system)
5298 (arguments
5299 ;; incompatible with Python 3 (exception syntax)
5300 `(#:python ,python-2
5301 #:tests? #f))
5302 (home-page "https://github.com/dieterv/elib.intl")
5303 (synopsis "Enhanced internationalization for Python")
5304 (description
5305 "The elib.intl module provides enhanced internationalization (I18N)
5306 services for your Python modules and applications.")
5307 (license license:lgpl3+)))
5308
5309 (define-public python-olefile
5310 (package
5311 (name "python-olefile")
5312 (version "0.46")
5313 (source
5314 (origin
5315 (method url-fetch)
5316 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5317 "download/v" version "/olefile-" version ".tar.gz"))
5318 (file-name (string-append name "-" version ".tar.gz"))
5319 (sha256
5320 (base32
5321 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5322 (build-system python-build-system)
5323 (home-page "https://www.decalage.info/python/olefileio")
5324 (synopsis "Read and write Microsoft OLE2 files.")
5325 (description
5326 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5327 Storage or Compound Document, Microsoft Office). It is an improved version of
5328 the OleFileIO module from PIL, the Python Image Library.")
5329 (license license:bsd-3)))
5330
5331 (define-public python2-olefile
5332 (package-with-python2 python-olefile))
5333
5334 (define-public python-pillow
5335 (package
5336 (name "python-pillow")
5337 (version "6.2.1")
5338 (source
5339 (origin
5340 (method url-fetch)
5341 (uri (pypi-uri "Pillow" version))
5342 (sha256
5343 (base32
5344 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5345 (build-system python-build-system)
5346 (native-inputs
5347 `(("python-pytest" ,python-pytest)))
5348 (inputs
5349 `(("freetype" ,freetype)
5350 ("lcms" ,lcms)
5351 ("libjpeg" ,libjpeg-turbo)
5352 ("libtiff" ,libtiff)
5353 ("libwebp" ,libwebp)
5354 ("openjpeg" ,openjpeg)
5355 ("zlib" ,zlib)))
5356 (propagated-inputs
5357 `(("python-olefile" ,python-olefile)))
5358 (arguments
5359 `(#:phases
5360 (modify-phases %standard-phases
5361 (add-after 'unpack 'patch-ldconfig
5362 (lambda _
5363 (substitute* "setup.py"
5364 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5365 (replace 'check
5366 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5367 (if tests?
5368 (begin
5369 (setenv "HOME" (getcwd))
5370 ;; Make installed package available for running the tests.
5371 (add-installed-pythonpath inputs outputs)
5372 (invoke "python" "selftest.py" "--installed")
5373 (invoke "python" "-m" "pytest" "-vv"))
5374 #t))))))
5375 (home-page "https://python-pillow.org")
5376 (synopsis "Fork of the Python Imaging Library")
5377 (description
5378 "The Python Imaging Library adds image processing capabilities to your
5379 Python interpreter. This library provides extensive file format support, an
5380 efficient internal representation, and fairly powerful image processing
5381 capabilities. The core image library is designed for fast access to data
5382 stored in a few basic pixel formats. It should provide a solid foundation for
5383 a general image processing tool.")
5384 (license (license:x11-style
5385 "http://www.pythonware.com/products/pil/license.htm"
5386 "The PIL Software License"))))
5387
5388 (define-public python2-pillow
5389 (package-with-python2 python-pillow))
5390
5391 (define-public python-pillow-2.9
5392 (package
5393 (inherit python-pillow)
5394 (version "2.9.0")
5395 (source
5396 (origin
5397 (method url-fetch)
5398 (uri (pypi-uri "Pillow" version))
5399 (sha256
5400 (base32
5401 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
5402 (arguments
5403 (substitute-keyword-arguments (package-arguments python-pillow)
5404 ((#:tests? _ #f) #f)))
5405 (properties '((hidden? #t)))))
5406
5407 (define-public python-roifile
5408 (package
5409 (name "python-roifile")
5410 (version "2020.5.28")
5411 (source
5412 (origin
5413 (method url-fetch)
5414 (uri (pypi-uri "roifile" version))
5415 (sha256
5416 (base32
5417 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
5418 (build-system python-build-system)
5419 (arguments `(#:tests? #f)) ; there are none
5420 (propagated-inputs
5421 `(("python-numpy" ,python-numpy)))
5422 (home-page "https://www.lfd.uci.edu/~gohlke/")
5423 (synopsis "Read and write ImageJ ROI format")
5424 (description "Roifile is a Python library to read, write, create, and plot
5425 ImageJ ROIs, an undocumented and ImageJ application specific format to store
5426 regions of interest, geometric shapes, paths, text, etc for image overlays.")
5427 (license license:bsd-3)))
5428
5429 (define-public python-tifffile
5430 (package
5431 (name "python-tifffile")
5432 (version "2020.6.3")
5433 (source
5434 (origin
5435 (method url-fetch)
5436 (uri (pypi-uri "tifffile" version))
5437 (sha256
5438 (base32
5439 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
5440 (build-system python-build-system)
5441 ;; Tests require lfdfiles, which depends on tifffile
5442 (arguments `(#:tests? #f))
5443 (propagated-inputs
5444 `(("python-numpy" ,python-numpy)
5445 ;;("python-lfdfiles" ,python-lfdfiles)
5446 ("python-roifile" ,python-roifile)))
5447 (home-page "https://www.lfd.uci.edu/~gohlke/")
5448 (synopsis "Read and write TIFF(r) files")
5449 (description "This package lets you read image and metadata from many
5450 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
5451 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
5452 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
5453 (license license:bsd-3)))
5454
5455 (define-public python-lfdfiles
5456 (package
5457 (name "python-lfdfiles")
5458 (version "2020.1.1")
5459 (source
5460 (origin
5461 (method url-fetch)
5462 (uri (pypi-uri "lfdfiles" version))
5463 (sha256
5464 (base32
5465 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
5466 (build-system python-build-system)
5467 (propagated-inputs
5468 `(("python-click" ,python-click)
5469 ("python-numpy" ,python-numpy)
5470 ("python-tifffile" ,python-tifffile)))
5471 (home-page "https://www.lfd.uci.edu/~gohlke/")
5472 (synopsis "Work with LFD data files")
5473 (description
5474 "Lfdfiles is a Python library and console script for reading, writing,
5475 converting, and viewing many of the proprietary file formats used to store
5476 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
5477 (license license:bsd-3)))
5478
5479 (define-public python-imageio
5480 (package
5481 (name "python-imageio")
5482 (version "2.8.0")
5483 (source
5484 (origin
5485 (method url-fetch)
5486 (uri (pypi-uri "imageio" version))
5487 (sha256
5488 (base32
5489 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
5490 (build-system python-build-system)
5491 (arguments
5492 `(#:tests? #f ; many tests require online data
5493 #:phases
5494 (modify-phases %standard-phases
5495 (replace 'check
5496 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5497 (if tests?
5498 (begin
5499 ;; Make installed package available for running the tests.
5500 (add-installed-pythonpath inputs outputs)
5501 (invoke "pytest" "-vv"))
5502 #t))))))
5503 (propagated-inputs
5504 `(("python-numpy" ,python-numpy)
5505 ("python-pillow" ,python-pillow)
5506 ("python-psutil" ,python-psutil)))
5507 (native-inputs
5508 `(("python-pytest" ,python-pytest)))
5509 (home-page "https://imageio.github.io/")
5510 (synopsis "Library for reading and writing a wide range of image data")
5511 (description
5512 "Imageio is a Python library that provides an easy interface to read and
5513 write a wide range of image data, including animated images, video, volumetric
5514 data, and scientific formats.")
5515 (license license:bsd-2)))
5516
5517 (define-public python-pycparser
5518 (package
5519 (name "python-pycparser")
5520 (version "2.20")
5521 (source
5522 (origin
5523 (method url-fetch)
5524 (uri (pypi-uri "pycparser" version))
5525 (sha256
5526 (base32
5527 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5528 (outputs '("out" "doc"))
5529 (build-system python-build-system)
5530 (native-inputs
5531 `(("pkg-config" ,pkg-config)))
5532 (arguments
5533 `(#:phases
5534 (modify-phases %standard-phases
5535 (replace 'check
5536 (lambda _
5537 (with-directory-excursion "tests"
5538 (invoke "python" "all_tests.py"))
5539 #t))
5540 (add-after 'install 'install-doc
5541 (lambda* (#:key outputs #:allow-other-keys)
5542 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5543 (doc (string-append data "/doc/" ,name "-" ,version))
5544 (examples (string-append doc "/examples")))
5545 (mkdir-p examples)
5546 (for-each (lambda (file)
5547 (copy-file (string-append "." file)
5548 (string-append doc file)))
5549 '("/README.rst" "/CHANGES" "/LICENSE"))
5550 (copy-recursively "examples" examples)
5551 #t))))))
5552 (home-page "https://github.com/eliben/pycparser")
5553 (synopsis "C parser in Python")
5554 (description
5555 "Pycparser is a complete parser of the C language, written in pure Python
5556 using the PLY parsing library. It parses C code into an AST and can serve as
5557 a front-end for C compilers or analysis tools.")
5558 (license license:bsd-3)))
5559
5560 (define-public python2-pycparser
5561 (package-with-python2 python-pycparser))
5562
5563 (define-public python-pywavelets
5564 (package
5565 (name "python-pywavelets")
5566 (version "1.1.1")
5567 (home-page "https://github.com/PyWavelets/pywt")
5568 (source (origin
5569 (method url-fetch)
5570 (uri (pypi-uri "PyWavelets" version))
5571 (sha256
5572 (base32
5573 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
5574 (build-system python-build-system)
5575 (arguments
5576 '(#:modules ((ice-9 ftw)
5577 (srfi srfi-1)
5578 (srfi srfi-26)
5579 (guix build utils)
5580 (guix build python-build-system))
5581 #:phases
5582 (modify-phases %standard-phases
5583 (replace 'check
5584 (lambda _
5585 (let ((cwd (getcwd))
5586 (libdir (find (cut string-prefix? "lib." <>)
5587 (scandir "build"))))
5588 (with-directory-excursion (string-append cwd "/build/" libdir)
5589 (invoke "pytest" "-vv"))))))))
5590 (native-inputs
5591 `(("python-matplotlib" ,python-matplotlib) ;for tests
5592 ("python-pytest" ,python-pytest)))
5593 (propagated-inputs
5594 `(("python-numpy" ,python-numpy)))
5595 (synopsis "Wavelet transforms in Python")
5596 (description
5597 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5598 mathematical basis functions that are localized in both time and frequency.
5599 Wavelet transforms are time-frequency transforms employing wavelets. They are
5600 similar to Fourier transforms, the difference being that Fourier transforms are
5601 localized only in frequency instead of in time and frequency.")
5602 (license license:expat)))
5603
5604 (define-public python-pywinrm
5605 (package
5606 (name "python-pywinrm")
5607 (version "0.4.1")
5608 (source
5609 (origin
5610 (method url-fetch)
5611 (uri (pypi-uri "pywinrm" version))
5612 (sha256
5613 (base32
5614 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5615 (build-system python-build-system)
5616 (propagated-inputs
5617 `(("python-six" ,python-six)
5618 ("python-requests_ntlm" ,python-requests_ntlm)
5619 ("python-xmltodict" ,python-xmltodict)
5620 ("python-kerberos" ,python-kerberos)))
5621 (native-inputs
5622 `(("python-mock" ,python-mock)
5623 ("python-pytest" ,python-pytest)))
5624 (home-page "https://github.com/diyan/pywinrm/")
5625 (synopsis
5626 "Python library for Windows Remote Management (WinRM)")
5627 (description
5628 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5629 service. It allows you to invoke commands on target Windows machines from
5630 any machine that can run Python.")
5631 (license license:expat)))
5632
5633 (define-public python-xcffib
5634 (package
5635 (name "python-xcffib")
5636 (version "0.6.0")
5637 (source
5638 (origin
5639 (method url-fetch)
5640 (uri (pypi-uri "xcffib" version))
5641 (sha256
5642 (base32
5643 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5644 (build-system python-build-system)
5645 (inputs
5646 `(("libxcb" ,libxcb)))
5647 (propagated-inputs
5648 `(("python-cffi" ,python-cffi) ; used at run time
5649 ("python-six" ,python-six)))
5650 (arguments
5651 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5652 #:tests? #f
5653 #:phases
5654 (modify-phases %standard-phases
5655 (add-after 'unpack 'fix-libxcb-path
5656 (lambda* (#:key inputs #:allow-other-keys)
5657 (let ((libxcb (assoc-ref inputs "libxcb")))
5658 (substitute* '("xcffib/__init__.py")
5659 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5660 #t)))
5661 (add-after 'install 'install-doc
5662 (lambda* (#:key outputs #:allow-other-keys)
5663 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5664 "/doc/" ,name "-" ,version)))
5665 (mkdir-p doc)
5666 (copy-file "README.md"
5667 (string-append doc "/README.md"))
5668 #t))))))
5669 (home-page "https://github.com/tych0/xcffib")
5670 (synopsis "XCB Python bindings")
5671 (description
5672 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5673 support for Python 3 and PyPy. It is based on cffi.")
5674 (license license:expat)))
5675
5676 (define-public python2-xcffib
5677 (package-with-python2 python-xcffib))
5678
5679 (define-public python-cairocffi
5680 (package
5681 (name "python-cairocffi")
5682 (version "0.9.0")
5683 (source
5684 (origin
5685 (method url-fetch)
5686 (uri (pypi-uri "cairocffi" version))
5687 (sha256
5688 (base32
5689 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5690 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5691 (build-system python-build-system)
5692 (outputs '("out" "doc"))
5693 (inputs
5694 `(("glib" ,glib)
5695 ("gtk+" ,gtk+)
5696 ("gdk-pixbuf" ,gdk-pixbuf)
5697 ("cairo" ,cairo)
5698 ("pango" ,pango)))
5699 (native-inputs
5700 `(("pkg-config" ,pkg-config)
5701 ("python-pytest" ,python-pytest)
5702 ("python-pytest-cov" ,python-pytest-cov)
5703 ("python-pytest-runner" ,python-pytest-runner)
5704 ("python-sphinx" ,python-sphinx)
5705 ("python-docutils" ,python-docutils)))
5706 (propagated-inputs
5707 `(("python-xcffib" ,python-xcffib))) ; used at run time
5708 (arguments
5709 `(#:phases
5710 (modify-phases %standard-phases
5711 (add-after 'unpack 'patch-paths
5712 (lambda* (#:key inputs outputs #:allow-other-keys)
5713 (substitute* (find-files "." "\\.py$")
5714 (("dlopen\\(ffi, 'cairo'")
5715 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5716 "/lib/libcairo.so.2'"))
5717 (("dlopen\\(ffi, 'gdk-3'")
5718 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5719 "/lib/libgtk-3.so.0'"))
5720 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5721 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5722 "/lib/libgdk_pixbuf-2.0.so.0'"))
5723 (("dlopen\\(ffi, 'glib-2.0'")
5724 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5725 "/lib/libglib-2.0.so.0'"))
5726 (("dlopen\\(ffi, 'gobject-2.0'")
5727 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5728 "/lib/libgobject-2.0.so.0'"))
5729 (("dlopen\\(ffi, 'pangocairo-1.0'")
5730 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5731 "/lib/libpangocairo-1.0.so.0'"))
5732 (("dlopen\\(ffi, 'pango-1.0'")
5733 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5734 "/lib/libpango-1.0.so.0'")))
5735 #t))
5736 (add-after 'install 'install-doc
5737 (lambda* (#:key inputs outputs #:allow-other-keys)
5738 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5739 (doc (string-append data "/doc/" ,name "-" ,version))
5740 (html (string-append doc "/html")))
5741 (setenv "LD_LIBRARY_PATH"
5742 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5743 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5744 (setenv "LANG" "en_US.UTF-8")
5745 (mkdir-p html)
5746 (for-each (lambda (file)
5747 (copy-file (string-append "." file)
5748 (string-append doc file)))
5749 '("/README.rst" "/CHANGES" "/LICENSE"))
5750 (system* "python" "setup.py" "build_sphinx")
5751 (copy-recursively "docs/_build/html" html)
5752 #t))))))
5753 (home-page "https://github.com/Kozea/cairocffi")
5754 (synopsis "Python bindings and object-oriented API for Cairo")
5755 (description
5756 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5757 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5758 graphics library with support for multiple backends including image buffers,
5759 PNG, PostScript, PDF, and SVG file output.")
5760 (license license:bsd-3)))
5761
5762 (define-public python2-cairocffi
5763 (package-with-python2 python-cairocffi))
5764
5765 (define-public python-decorator
5766 (package
5767 (name "python-decorator")
5768 (version "4.3.0")
5769 (source
5770 (origin
5771 (method url-fetch)
5772 (uri (pypi-uri "decorator" version))
5773 (sha256
5774 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5775 (build-system python-build-system)
5776 (home-page "https://pypi.org/project/decorator/")
5777 (synopsis "Python module to simplify usage of decorators")
5778 (description
5779 "The aim of the decorator module is to simplify the usage of decorators
5780 for the average programmer, and to popularize decorators usage giving examples
5781 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5782 etc. The core of this module is a decorator factory.")
5783 (license license:expat)))
5784
5785 (define-public python2-decorator
5786 (package-with-python2 python-decorator))
5787
5788 (define-public python-drmaa
5789 (package
5790 (name "python-drmaa")
5791 (version "0.7.7")
5792 (source
5793 (origin
5794 (method url-fetch)
5795 (uri (pypi-uri "drmaa" version))
5796 (sha256
5797 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5798 (build-system python-build-system)
5799 ;; The test suite requires libdrmaa which is provided by the cluster
5800 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5801 ;; should be set to the path of the libdrmaa library.
5802 (arguments '(#:tests? #f))
5803 (native-inputs
5804 `(("python-nose" ,python-nose)))
5805 (home-page "https://pypi.org/project/drmaa/")
5806 (synopsis "Python bindings for the DRMAA library")
5807 (description
5808 "A Python package for Distributed Resource Management (DRM) job
5809 submission and control. This package is an implementation of the DRMAA 1.0
5810 Python language binding specification.")
5811 (license license:bsd-3)))
5812
5813 (define-public python2-drmaa
5814 (package-with-python2 python-drmaa))
5815
5816 (define-public python-grako
5817 (package
5818 (name "python-grako")
5819 (version "3.99.9")
5820 (source
5821 (origin
5822 (method url-fetch)
5823 (uri
5824 (pypi-uri "grako" version ".zip"))
5825 (sha256
5826 (base32
5827 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5828 (build-system python-build-system)
5829 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5830 (native-inputs
5831 `(("unzip" ,unzip)
5832 ("python-pytest" ,python-pytest)
5833 ("python-pytest-runner" ,python-pytest-runner)))
5834 (home-page "https://bitbucket.org/neogeny/grako")
5835 (synopsis "EBNF parser generator")
5836 (description
5837 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5838 memoizing PEG/Packrat parser in Python.")
5839 (license license:bsd-3)))
5840
5841 (define-public python2-grako
5842 (package-with-python2 python-grako))
5843
5844 (define-public python-gridmap
5845 (package
5846 (name "python-gridmap")
5847 (version "0.14.0")
5848 (source
5849 (origin
5850 (method git-fetch)
5851 (uri (git-reference
5852 (url "https://github.com/pygridtools/gridmap")
5853 (commit (string-append "v" version))))
5854 (file-name (git-file-name name version))
5855 (sha256
5856 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
5857 (build-system python-build-system)
5858 (arguments
5859 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5860 (propagated-inputs
5861 `(("python-psutil" ,python-psutil)
5862 ("python-drmaa" ,python-drmaa)
5863 ("python-pyzmq" ,python-pyzmq)))
5864 (home-page "https://github.com/pygridtools/gridmap")
5865 (synopsis "Create jobs on a cluster directly from Python")
5866 (description
5867 "Gridmap is a Python package to allow you to easily create jobs on the
5868 cluster directly from Python. You can directly map Python functions onto the
5869 cluster without needing to write any wrapper code yourself.")
5870 (license license:gpl3+)))
5871
5872 (define-public python2-gridmap
5873 (package-with-python2 python-gridmap))
5874
5875 (define-public python-honcho
5876 (package
5877 (name "python-honcho")
5878 (version "1.0.1")
5879 (source
5880 (origin
5881 (method git-fetch)
5882 (uri (git-reference
5883 (url "https://github.com/nickstenning/honcho")
5884 (commit (string-append "v" version))))
5885 (file-name (git-file-name name version))
5886 (sha256
5887 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5888 (build-system python-build-system)
5889 (native-inputs
5890 `(("python-pytest" ,python-pytest)
5891 ("python-mock" ,python-mock)
5892 ("python-tox" ,python-tox)
5893 ("which" ,which))) ;for tests
5894 (propagated-inputs
5895 `(("python-jinja2" ,python-jinja2)))
5896 (arguments
5897 `(#:phases
5898 (modify-phases %standard-phases
5899 (delete 'check)
5900 (add-after 'install 'check
5901 (lambda* (#:key outputs inputs #:allow-other-keys)
5902 ;; fix honcho path in testsuite
5903 (substitute* "tests/conftest.py"
5904 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5905 "/bin/honcho" "'")))
5906 ;; It's easier to run tests after install.
5907 ;; Make installed package available for running the tests
5908 (add-installed-pythonpath inputs outputs)
5909 (invoke "py.test" "-v"))))))
5910 (home-page "https://github.com/nickstenning/honcho")
5911 (synopsis "Manage Procfile-based applications")
5912 (description
5913 "A Procfile is a file which describes how to run an application
5914 consisting of several processes. honcho starts all listed processes.
5915 The output of all running processes is collected by honcho and
5916 displayed.")
5917 (license license:expat)))
5918
5919 (define-public python2-honcho
5920 (package-with-python2 python-honcho))
5921
5922 (define-public python-pexpect
5923 (package
5924 (name "python-pexpect")
5925 (version "4.8.0")
5926 (source
5927 (origin
5928 (method url-fetch)
5929 (uri (pypi-uri "pexpect" version))
5930 (sha256
5931 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5932 (build-system python-build-system)
5933 (arguments
5934 `(#:phases
5935 (modify-phases %standard-phases
5936 (add-before 'check 'prepare-tests
5937 (lambda _
5938 (substitute* (find-files "tests")
5939 (("/bin/ls") (which "ls"))
5940 (("/bin/echo") (which "echo"))
5941 (("/bin/which") (which "which"))
5942 ;; Many tests try to use the /bin directory which
5943 ;; is not present in the build environment.
5944 ;; Use one that's non-empty and unlikely to change.
5945 (("/bin'") "/dev'")
5946 ;; Disable failing test. See upstream bug report
5947 ;; https://github.com/pexpect/pexpect/issues/568
5948 (("def test_bash") "def _test_bash"))
5949 ;; XXX: Socket connection test gets "Connection reset by peer".
5950 ;; Why does it not work? Delete for now.
5951 (delete-file "tests/test_socket.py")
5952 #t))
5953 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5954 (native-inputs
5955 `(("python-nose" ,python-nose)
5956 ("python-pytest" ,python-pytest)
5957 ("man-db" ,man-db)
5958 ("which" ,which)
5959 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5960 (propagated-inputs
5961 `(("python-ptyprocess" ,python-ptyprocess)))
5962 (home-page "http://pexpect.readthedocs.org/")
5963 (synopsis "Controlling interactive console applications")
5964 (description
5965 "Pexpect is a pure Python module for spawning child applications;
5966 controlling them; and responding to expected patterns in their output.
5967 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5968 child application and control it as if a human were typing commands.")
5969 (license license:isc)))
5970
5971 (define-public python2-pexpect
5972 (package-with-python2 python-pexpect))
5973
5974 (define-public python-setuptools-scm
5975 (package
5976 (name "python-setuptools-scm")
5977 (version "3.4.3")
5978 (source (origin
5979 (method url-fetch)
5980 (uri (pypi-uri "setuptools_scm" version))
5981 (sha256
5982 (base32
5983 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5984 (build-system python-build-system)
5985 (home-page "https://github.com/pypa/setuptools_scm/")
5986 (synopsis "Manage Python package versions in SCM metadata")
5987 (description
5988 "Setuptools_scm handles managing your Python package versions in
5989 @dfn{software configuration management} (SCM) metadata instead of declaring
5990 them as the version argument or in a SCM managed file.")
5991 (license license:expat)))
5992
5993 (define-public python2-setuptools-scm
5994 (package-with-python2 python-setuptools-scm))
5995
5996 (define-public python-sexpdata
5997 (package
5998 (name "python-sexpdata")
5999 (version "0.0.3")
6000 (source
6001 (origin
6002 (method url-fetch)
6003 (uri (pypi-uri "sexpdata" version))
6004 (sha256
6005 (base32
6006 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
6007 (build-system python-build-system)
6008 (home-page "https://github.com/jd-boyd/sexpdata")
6009 (synopsis "S-expression parser for Python")
6010 (description
6011 "Sexpdata is an S-expression parser/serializer. It has load and dump
6012 functions like pickle, json or PyYAML module.")
6013 (license license:bsd-3)))
6014
6015 (define-public python-pathlib2
6016 (package
6017 (name "python-pathlib2")
6018 (version "2.3.3")
6019 (source
6020 (origin
6021 (method url-fetch)
6022 (uri (pypi-uri "pathlib2" version))
6023 (sha256
6024 (base32
6025 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
6026 (build-system python-build-system)
6027 (propagated-inputs
6028 `(("python-scandir" ,python-scandir)
6029 ("python-six" ,python-six)))
6030 (home-page "https://pypi.org/project/pathlib2/")
6031 (synopsis "Object-oriented file system paths")
6032 (description "The goal of pathlib2 is to provide a backport of the
6033 standard @code{pathlib} module which tracks the standard library module, so
6034 all the newest features of the standard @code{pathlib} can be used also on
6035 older Python versions.")
6036 (license license:expat)))
6037
6038 (define-public python2-importlib-resources
6039 (package
6040 (name "python2-importlib-resources")
6041 (version "1.0.2")
6042 (source (origin
6043 (method url-fetch)
6044 (uri (pypi-uri "importlib_resources" version))
6045 (sha256
6046 (base32
6047 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
6048 (build-system python-build-system)
6049 (arguments
6050 `(#:python ,python-2
6051 #:phases (modify-phases %standard-phases
6052 ;; The build system tests for python-wheel, but it is
6053 ;; not required for Guix nor the test suite. Just drop
6054 ;; it to make bootstrapping pytest easier.
6055 (add-after 'unpack 'drop-wheel-dependency
6056 (lambda _
6057 (substitute* "setup.cfg"
6058 (("^[[:blank:]]+wheel")
6059 ""))
6060 #t)))))
6061 (propagated-inputs
6062 `(("python-pathlib2" ,python2-pathlib2)
6063 ("python-typing" ,python2-typing)))
6064 (home-page "https://gitlab.com/python-devs/importlib_resources")
6065 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6066 (description
6067 "This package provides an implementation of @code{importlib.resources}
6068 for older versions of Python.")
6069 (license license:asl2.0)))
6070
6071 ;; For importlib-metadata-bootstrap below.
6072 (define-public python2-importlib-resources-bootstrap
6073 (hidden-package
6074 (package/inherit
6075 python2-importlib-resources
6076 (name "python2-importlib-resources-bootstrap")
6077 (propagated-inputs
6078 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6079 ("python-typing" ,python2-typing))))))
6080
6081 (define-public python-importlib-metadata
6082 (package
6083 (name "python-importlib-metadata")
6084 (version "1.5.0")
6085 (source
6086 (origin
6087 (method url-fetch)
6088 (uri (pypi-uri "importlib_metadata" version))
6089 (sha256
6090 (base32
6091 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6092 (build-system python-build-system)
6093 (propagated-inputs
6094 `(("python-zipp" ,python-zipp)))
6095 (native-inputs
6096 `(("python-setuptools-scm" ,python-setuptools-scm)
6097 ("python-pyfakefs" ,python-pyfakefs)
6098 ("python-packaging" ,python-packaging)))
6099 (home-page "https://importlib-metadata.readthedocs.io/")
6100 (synopsis "Read metadata from Python packages")
6101 (description
6102 "@code{importlib_metadata} is a library which provides an API for
6103 accessing an installed Python package's metadata, such as its entry points or
6104 its top-level name. This functionality intends to replace most uses of
6105 @code{pkg_resources} entry point API and metadata API. Along with
6106 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6107 need to use the older and less efficient @code{pkg_resources} package.")
6108 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6109 (license license:asl2.0)))
6110
6111 (define-public python2-importlib-metadata
6112 (let ((base (package-with-python2 (strip-python2-variant
6113 python-importlib-metadata))))
6114 (package/inherit
6115 base
6116 (name "python2-importlib-metadata")
6117 (native-inputs
6118 `(("python-setuptools-scm" ,python2-setuptools-scm)
6119 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6120 ("python-packaging" ,python2-packaging-bootstrap)))
6121 (propagated-inputs
6122 `(("python-configparser" ,python2-configparser)
6123 ("python-contextlib2" ,python2-contextlib2)
6124 ("python-importlib-resources" ,python2-importlib-resources)
6125 ("python-pathlib2" ,python2-pathlib2)
6126 ,@(package-propagated-inputs base))))))
6127
6128 ;; This package is used by python2-pytest, and thus must not depend on it.
6129 (define-public python2-importlib-metadata-bootstrap
6130 (hidden-package
6131 (package/inherit
6132 python2-importlib-metadata
6133 (name "python2-importlib-metadata-bootstrap")
6134 (arguments
6135 `(#:tests? #f
6136 ,@(package-arguments python2-importlib-metadata)))
6137 (propagated-inputs
6138 `(("python-zipp" ,python2-zipp-bootstrap)
6139 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6140 ("python-configparser" ,python2-configparser)
6141 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6142 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6143
6144 (define-public python-importmagic
6145 (package
6146 (name "python-importmagic")
6147 (version "0.1.7")
6148 (source
6149 (origin
6150 (method url-fetch)
6151 (uri (pypi-uri "importmagic" version))
6152 (sha256
6153 (base32
6154 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6155 (build-system python-build-system)
6156 (home-page "https://github.com/alecthomas/importmagic")
6157 (synopsis "Library for adding, removing and managing Python imports")
6158 (description
6159 "Importmagic is a Python library for automatically managing imports by
6160 finding unresolved symbols in Python code and their corresponding imports.")
6161 (license license:bsd-3)))
6162
6163 (define-public python-jaraco-packaging
6164 (package
6165 (name "python-jaraco-packaging")
6166 (version "6.1")
6167 (source
6168 (origin
6169 (method url-fetch)
6170 (uri (pypi-uri "jaraco.packaging" version))
6171 (sha256
6172 (base32
6173 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6174 (build-system python-build-system)
6175 (propagated-inputs
6176 `(("python-pytest" ,python-pytest)
6177 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6178 ("python-pytest-flake8" ,python-pytest-flake8)
6179 ("python-rst.linker" ,python-rst.linker)
6180 ("python-setuptools" ,python-setuptools)
6181 ("python-setuptools-scm" ,python-setuptools-scm)
6182 ("python-six" ,python-six)
6183 ("python-sphinx" ,python-sphinx)))
6184 (home-page "https://github.com/jaraco/jaraco.packaging")
6185 (synopsis "Tools to supplement packaging Python releases")
6186 (description
6187 "This package provides various tools to supplement packaging Python
6188 releases.")
6189 (license license:expat)))
6190
6191 (define-public python-pathpy
6192 (package
6193 (name "python-pathpy")
6194 (version "11.5.1")
6195 (source
6196 (origin
6197 (method url-fetch)
6198 (uri (pypi-uri "path.py" version))
6199 (sha256
6200 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6201 (outputs '("out" "doc"))
6202 (build-system python-build-system)
6203 (propagated-inputs
6204 `(("python-appdirs" ,python-appdirs)
6205 ("python-importlib-metadata" ,python-importlib-metadata)))
6206 (native-inputs
6207 `(("python-setuptools-scm" ,python-setuptools-scm)
6208 ("python-sphinx" ,python-sphinx)
6209 ("python-rst.linker" ,python-rst.linker)
6210 ("python-pytest" ,python-pytest)
6211 ("python-pytest-runner" ,python-pytest-runner)
6212 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6213 (arguments
6214 `(#:phases
6215 (modify-phases %standard-phases
6216 (add-after 'build 'build-doc
6217 (lambda _
6218 (setenv "LANG" "en_US.UTF-8")
6219 (invoke "python" "setup.py" "build_sphinx")))
6220 (add-after 'install 'install-doc
6221 (lambda* (#:key outputs #:allow-other-keys)
6222 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6223 (doc (string-append data "/doc/" ,name "-" ,version))
6224 (html (string-append doc "/html")))
6225 (mkdir-p html)
6226 (for-each (lambda (file)
6227 (copy-file file (string-append doc "/" file)))
6228 '("README.rst" "CHANGES.rst"))
6229 (copy-recursively "build/sphinx/html" html)
6230 #t)))
6231 (replace 'check
6232 (lambda _
6233 ;; The import time test aborts if an import takes longer than
6234 ;; 100ms. It may very well take a little longer than that.
6235 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6236 (home-page "https://github.com/jaraco/path.py")
6237 (synopsis "Python module wrapper for built-in os.path")
6238 (description
6239 "@code{path.py} implements path objects as first-class entities, allowing
6240 common operations on files to be invoked on those path objects directly.")
6241 (license license:expat)))
6242
6243 (define-public python2-pathpy
6244 (package-with-python2 python-pathpy))
6245
6246 (define-public python-simplegeneric
6247 (package
6248 (name "python-simplegeneric")
6249 (version "0.8.1")
6250 (source
6251 (origin
6252 (method url-fetch)
6253 (uri (pypi-uri "simplegeneric" version ".zip"))
6254 (sha256
6255 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6256 (build-system python-build-system)
6257 (native-inputs
6258 `(("unzip" ,unzip)))
6259 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6260 (synopsis "Python module for simple generic functions")
6261 (description
6262 "The simplegeneric module lets you define simple single-dispatch generic
6263 functions, akin to Python’s built-in generic functions like @code{len()},
6264 @code{iter()} and so on. However, instead of using specially-named methods,
6265 these generic functions use simple lookup tables, akin to those used by
6266 e.g. @code{pickle.dump()} and other generic functions found in the Python
6267 standard library.")
6268 (license license:zpl2.1)))
6269
6270 (define-public python2-simplegeneric
6271 (package-with-python2 python-simplegeneric))
6272
6273 (define-public python-ipython-genutils
6274 ;; TODO: This package is retired, check if can be removed, see description.
6275 (package
6276 (name "python-ipython-genutils")
6277 (version "0.1.0")
6278 (source
6279 (origin
6280 (method url-fetch)
6281 (uri (pypi-uri "ipython_genutils" version))
6282 (sha256
6283 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6284 (build-system python-build-system)
6285 (arguments `(#:tests? #f)) ; no tests
6286 (home-page "https://ipython.org")
6287 (synopsis "Vestigial utilities from IPython")
6288 (description
6289 "This package provides retired utilities from IPython. No packages
6290 outside IPython/Jupyter should depend on it.
6291
6292 This package shouldn't exist. It contains some common utilities shared by
6293 Jupyter and IPython projects during The Big Split. As soon as possible, those
6294 packages will remove their dependency on this, and this package will go
6295 away.")
6296 (license license:bsd-3)))
6297
6298 (define-public python2-ipython-genutils
6299 (package-with-python2 python-ipython-genutils))
6300
6301 (define-public python-ipyparallel
6302 (package
6303 (name "python-ipyparallel")
6304 (version "6.2.4")
6305 (source
6306 (origin
6307 (method url-fetch)
6308 (uri (pypi-uri "ipyparallel" version))
6309 (sha256
6310 (base32
6311 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6312 (build-system python-build-system)
6313 (arguments
6314 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6315 #:phases
6316 (modify-phases %standard-phases
6317 (add-before 'check 'prepare-for-tests
6318 (lambda _
6319 (setenv "HOME" (getcwd))
6320 #t)))))
6321 (propagated-inputs
6322 `(("python-dateutil" ,python-dateutil)
6323 ("python-decorator" ,python-decorator)
6324 ("python-ipykernel" ,python-ipykernel)
6325 ("python-ipython" ,python-ipython)
6326 ("python-ipython-genutils" ,python-ipython-genutils)
6327 ("python-jupyter-client" ,python-jupyter-client)
6328 ("python-pyzmq" ,python-pyzmq)
6329 ("python-tornado" ,python-tornado)
6330 ("python-traitlets" ,python-traitlets)))
6331 (native-inputs
6332 `(("python-ipython" ,python-ipython)
6333 ("python-mock" ,python-mock)
6334 ("python-nose" ,python-nose)
6335 ("python-pytest" ,python-pytest)
6336 ("python-pytest-cov" ,python-pytest-cov)
6337 ("python-testpath" ,python-testpath)))
6338 (home-page "https://ipython.org/")
6339 (synopsis "Interactive Parallel Computing with IPython")
6340 (description
6341 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6342 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6343 CLI scripts:
6344 @enumerate
6345 @item ipcluster - start/stop a cluster
6346 @item ipcontroller - start a scheduler
6347 @item ipengine - start an engine
6348 @end enumerate")
6349 (license license:bsd-3)))
6350
6351 (define-public python2-ipyparallel
6352 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6353 (package
6354 (inherit ipyparallel)
6355 (propagated-inputs
6356 `(("python2-futures" ,python2-futures)
6357 ,@(package-propagated-inputs ipyparallel))))))
6358
6359 (define-public python-ipython-cluster-helper
6360 (package
6361 (name "python-ipython-cluster-helper")
6362 (version "0.6.4")
6363 (source
6364 (origin
6365 (method url-fetch)
6366 (uri (pypi-uri "ipython-cluster-helper" version))
6367 (sha256
6368 (base32
6369 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6370 (modules '((guix build utils)))
6371 (snippet
6372 '(begin (substitute* "requirements.txt"
6373 (("ipython.*") "ipython\n"))
6374 #t))))
6375 (build-system python-build-system)
6376 (arguments
6377 `(#:tests? #f ; Test suite can't find IPython.
6378 #:phases
6379 (modify-phases %standard-phases
6380 (replace 'check
6381 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6382 (if tests?
6383 (begin
6384 (setenv "HOME" (getcwd))
6385 (add-installed-pythonpath inputs outputs)
6386 (invoke "python" "example/example.py" "--local"))
6387 #t))))))
6388 (propagated-inputs
6389 `(("python-ipyparallel" ,python-ipyparallel)
6390 ("python-ipython" ,python-ipython)
6391 ("python-netifaces" ,python-netifaces)
6392 ("python-pyzmq" ,python-pyzmq)
6393 ("python-setuptools" ,python-setuptools)
6394 ("python-six" ,python-six)))
6395 (home-page "https://github.com/roryk/ipython-cluster-helper")
6396 (synopsis
6397 "Simplify IPython cluster start up and use for multiple schedulers")
6398 (description
6399 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6400 profile, launches a cluster and returns a view. On program exit it shuts the
6401 cluster down and deletes the throwaway profile.")
6402 (license license:expat)))
6403
6404 (define-public python2-ipython-cluster-helper
6405 (package-with-python2 python-ipython-cluster-helper))
6406
6407 (define-public python-traitlets
6408 (package
6409 (name "python-traitlets")
6410 (version "4.3.3")
6411 (source
6412 (origin
6413 (method url-fetch)
6414 (uri (pypi-uri "traitlets" version))
6415 (sha256
6416 (base32
6417 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6418 (build-system python-build-system)
6419 (arguments
6420 `(#:phases
6421 (modify-phases %standard-phases
6422 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6423 (propagated-inputs
6424 `(("python-ipython-genutils" ,python-ipython-genutils)
6425 ("python-decorator" ,python-decorator)))
6426 (native-inputs
6427 `(("python-pytest" ,python-pytest)))
6428 (properties `((python2-variant . ,(delay python2-traitlets))))
6429 (home-page "https://ipython.org")
6430 (synopsis "Configuration system for Python applications")
6431 (description
6432 "Traitlets is a framework that lets Python classes have attributes with
6433 type checking, dynamically calculated default values, and ‘on change’
6434 callbacks. The package also includes a mechanism to use traitlets for
6435 configuration, loading values from files or from command line arguments. This
6436 is a distinct layer on top of traitlets, so you can use traitlets in your code
6437 without using the configuration machinery.")
6438 (license license:bsd-3)))
6439
6440 (define-public python2-traitlets
6441 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6442 (package
6443 (inherit traitlets)
6444 (propagated-inputs
6445 `(("python2-enum34" ,python2-enum34)
6446 ,@(package-propagated-inputs traitlets))))))
6447
6448 (define-public python-jupyter-core
6449 (package
6450 (name "python-jupyter-core")
6451 (version "4.4.0")
6452 (source
6453 (origin
6454 (method url-fetch)
6455 (uri (string-append (pypi-uri "jupyter_core" version)))
6456 (sha256
6457 (base32
6458 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6459 (build-system python-build-system)
6460 ;; FIXME: not sure how to run the tests
6461 (arguments `(#:tests? #f))
6462 (propagated-inputs
6463 `(("python-traitlets" ,python-traitlets)))
6464 (home-page "http://jupyter.org/")
6465 (synopsis "Jupyter base package")
6466 (description
6467 "Jupyter core is the base package on which Jupyter projects rely.")
6468 (license license:bsd-3)))
6469
6470 (define-public python2-jupyter-core
6471 (package-with-python2 python-jupyter-core))
6472
6473 (define-public python-jupyter-client
6474 (package
6475 (name "python-jupyter-client")
6476 (version "5.2.4")
6477 (source
6478 (origin
6479 (method url-fetch)
6480 (uri (pypi-uri "jupyter_client" version))
6481 (sha256
6482 (base32
6483 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6484 (build-system python-build-system)
6485 ;; Tests fail because of missing native python kernel which I assume is
6486 ;; provided by the ipython package, which we cannot use because it would
6487 ;; cause a dependency cycle.
6488 (arguments
6489 `(#:tests? #f
6490
6491 #:phases (modify-phases %standard-phases
6492 (add-after 'unpack 'set-tool-file-names
6493 (lambda* (#:key inputs #:allow-other-keys)
6494 (let ((iproute (assoc-ref inputs "iproute")))
6495 (substitute* "jupyter_client/localinterfaces.py"
6496 (("'ip'")
6497 (string-append "'" iproute "/sbin/ip'")))
6498 #t))))))
6499 (inputs
6500 `(("iproute" ,iproute)))
6501 (propagated-inputs
6502 `(("python-pyzmq" ,python-pyzmq)
6503 ("python-traitlets" ,python-traitlets)
6504 ("python-jupyter-core" ,python-jupyter-core)))
6505 (home-page "http://jupyter.org/")
6506 (synopsis "Jupyter protocol implementation and client libraries")
6507 (description
6508 "The @code{jupyter_client} package contains the reference implementation
6509 of the Jupyter protocol. It also provides client and kernel management APIs
6510 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6511 installing @code{kernelspec}s for use with Jupyter frontends.")
6512 (license license:bsd-3)))
6513
6514 (define-public python2-jupyter-client
6515 (package-with-python2 python-jupyter-client))
6516
6517 (define-public python-ipykernel
6518 (package
6519 (name "python-ipykernel")
6520 (version "5.1.3")
6521 (source
6522 (origin
6523 (method url-fetch)
6524 (uri (pypi-uri "ipykernel" version))
6525 (sha256
6526 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6527 (build-system python-build-system)
6528 (arguments
6529 `(#:phases
6530 (modify-phases %standard-phases
6531 (replace 'check
6532 (lambda _
6533 (setenv "HOME" "/tmp")
6534 (invoke "pytest" "-v")
6535 #t))
6536 (add-after 'install 'set-python-file-name
6537 (lambda* (#:key outputs #:allow-other-keys)
6538 ;; Record the absolute file name of the 'python' executable in
6539 ;; 'kernel.json'.
6540 (let ((out (assoc-ref outputs "out")))
6541 (substitute* (string-append out "/share/jupyter"
6542 "/kernels/python3/kernel.json")
6543 (("\"python\"")
6544 (string-append "\"" (which "python") "\"")))
6545 #t))))))
6546 (propagated-inputs
6547 `(("python-ipython" ,python-ipython)
6548 ;; imported at runtime during connect
6549 ("python-jupyter-client" ,python-jupyter-client)))
6550 (native-inputs
6551 `(("python-flaky" ,python-flaky)
6552 ("python-nose" ,python-nose)
6553 ("python-pytest" ,python-pytest)))
6554 (home-page "https://ipython.org")
6555 (synopsis "IPython Kernel for Jupyter")
6556 (description
6557 "This package provides the IPython kernel for Jupyter.")
6558 (properties `((python2-variant . ,(delay python2-ipykernel))))
6559 (license license:bsd-3)))
6560
6561 ;; Version 5.x and above no longer support Python 2.
6562 (define-public python2-ipykernel
6563 (package
6564 (name "python2-ipykernel")
6565 (version "4.10.1")
6566 (source
6567 (origin
6568 (method url-fetch)
6569 (uri (pypi-uri "ipykernel" version))
6570 (sha256
6571 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6572 (build-system python-build-system)
6573 (arguments
6574 `(#:python ,python-2))
6575 (propagated-inputs
6576 `(("python2-ipython" ,python2-ipython)
6577 ;; imported at runtime during connect
6578 ("python2-jupyter-client" ,python2-jupyter-client)
6579 ("python2-tornado" ,python2-tornado)
6580 ("python2-traitlets" ,python2-traitlets)))
6581 (native-inputs
6582 `(("python2-mock" ,python2-mock)
6583 ("python2-nose" ,python2-nose)
6584 ("python2-pytest" ,python2-pytest)
6585 ("python2-pytest-cov" ,python2-pytest-cov)))
6586 (home-page "https://ipython.org")
6587 (synopsis "IPython Kernel for Jupyter")
6588 (description
6589 "This package provides the IPython kernel for Jupyter.")
6590 (license license:bsd-3)))
6591
6592 (define-public python-pari-jupyter
6593 (package
6594 (name "python-pari-jupyter")
6595 (version "1.3.2")
6596 (source
6597 (origin
6598 (method url-fetch)
6599 (uri (pypi-uri "pari_jupyter" version))
6600 (sha256
6601 (base32
6602 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6603 (build-system python-build-system)
6604 (propagated-inputs
6605 `(("python-ipykernel" ,python-ipykernel)))
6606 (inputs
6607 `(("pari-gp" ,pari-gp)
6608 ("readline" ,readline)))
6609 (arguments
6610 `(#:tests? #f)) ; no test suite
6611 (home-page
6612 "https://github.com/jdemeyer/pari_jupyter")
6613 (synopsis "A Jupyter kernel for PARI/GP")
6614 (description "The package provides a PARI/GP kernel for Jupyter.")
6615 (license license:gpl3+)))
6616
6617 (define-public python-backcall
6618 (package
6619 (name "python-backcall")
6620 (version "0.1.0")
6621 (source
6622 (origin
6623 (method url-fetch)
6624 (uri (pypi-uri "backcall" version))
6625 (sha256
6626 (base32
6627 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6628 (build-system python-build-system)
6629 (home-page "https://github.com/takluyver/backcall/")
6630 (synopsis "Specifications for callback functions passed in to an API")
6631 (description
6632 "If your code lets other people supply callback functions, it's important
6633 to specify the function signature you expect, and check that functions support
6634 that. Adding extra parameters later would break other peoples code unless
6635 you're careful. The @code{backcall} package provides a way of specifying the
6636 callback signature using a prototype function.")
6637 (license license:bsd-3)))
6638
6639 (define-public python-ipython
6640 (package
6641 (name "python-ipython")
6642 (version "7.9.0")
6643 (source
6644 (origin
6645 (method url-fetch)
6646 (uri (pypi-uri "ipython" version ".tar.gz"))
6647 (sha256
6648 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6649 (build-system python-build-system)
6650 (propagated-inputs
6651 `(("python-backcall" ,python-backcall)
6652 ("python-pyzmq" ,python-pyzmq)
6653 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
6654 ("python-terminado" ,python-terminado)
6655 ("python-matplotlib" ,python-matplotlib)
6656 ("python-numpy" ,python-numpy)
6657 ("python-numpydoc" ,python-numpydoc)
6658 ("python-jedi" ,python-jedi)
6659 ("python-jinja2" ,python-jinja2)
6660 ("python-mistune" ,python-mistune)
6661 ("python-pexpect" ,python-pexpect)
6662 ("python-pickleshare" ,python-pickleshare)
6663 ("python-simplegeneric" ,python-simplegeneric)
6664 ("python-jsonschema" ,python-jsonschema)
6665 ("python-traitlets" ,python-traitlets)
6666 ("python-nbformat" ,python-nbformat)
6667 ("python-pygments" ,python-pygments)))
6668 (inputs
6669 `(("readline" ,readline)
6670 ("which" ,which)))
6671 (native-inputs
6672 `(("graphviz" ,graphviz)
6673 ("pkg-config" ,pkg-config)
6674 ("python-requests" ,python-requests) ;; for tests
6675 ("python-testpath" ,python-testpath)
6676 ("python-nose" ,python-nose)))
6677 (arguments
6678 `(#:phases
6679 (modify-phases %standard-phases
6680 (add-after 'unpack 'make-docs-reproducible
6681 (lambda _
6682 (substitute* "IPython/sphinxext/ipython_directive.py"
6683 ((".*import datetime") "")
6684 ((".*datetime.datetime.now\\(\\)") "")
6685 (("%timeit") "# %timeit"))
6686 #t))
6687 ;; Tests can only be run after the library has been installed and not
6688 ;; within the source directory.
6689 (delete 'check)
6690 (add-after 'install 'check
6691 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6692 (if tests?
6693 (begin
6694 ;; Make installed package available for running the tests
6695 (add-installed-pythonpath inputs outputs)
6696 (setenv "HOME" "/tmp/") ;; required by a test
6697 ;; We only test the core because one of the other tests
6698 ;; tries to import ipykernel.
6699 (invoke "python" "IPython/testing/iptest.py"
6700 "-v" "IPython/core/tests"))
6701 #t)))
6702 (add-before 'check 'fix-tests
6703 (lambda* (#:key inputs #:allow-other-keys)
6704 (substitute* "./IPython/utils/_process_posix.py"
6705 (("/usr/bin/env', 'which") (which "which")))
6706 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6707 (("#!/usr/bin/env python")
6708 (string-append "#!" (which "python"))))
6709 ;; This test introduces a circular dependency on ipykernel
6710 ;; (which depends on ipython).
6711 (delete-file "IPython/core/tests/test_display.py")
6712 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6713 (delete-file "IPython/core/tests/test_interactiveshell.py")
6714 #t)))))
6715 (home-page "https://ipython.org")
6716 (synopsis "IPython is a tool for interactive computing in Python")
6717 (description
6718 "IPython provides a rich architecture for interactive computing with:
6719 Powerful interactive shells, a browser-based notebook, support for interactive
6720 data visualization, embeddable interpreters and tools for parallel
6721 computing.")
6722 (properties `((python2-variant . ,(delay python2-ipython))))
6723 (license license:bsd-3)))
6724
6725 ;; This is the latest release of the LTS version of ipython with support for
6726 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6727 ;; dropped support for Python 2.7.
6728 (define-public python2-ipython
6729 (package
6730 (name "python2-ipython")
6731 (version "5.8.0")
6732 (source
6733 (origin
6734 (method url-fetch)
6735 (uri (pypi-uri "ipython" version ".tar.gz"))
6736 (sha256
6737 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6738 (build-system python-build-system)
6739 (propagated-inputs
6740 `(("python2-backports-shutil-get-terminal-size"
6741 ,python2-backports-shutil-get-terminal-size)
6742 ("python2-pathlib2" ,python2-pathlib2)
6743 ("python2-pyzmq" ,python2-pyzmq)
6744 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6745 ("python2-terminado" ,python2-terminado)
6746 ("python2-matplotlib" ,python2-matplotlib)
6747 ("python2-numpy" ,python2-numpy)
6748 ("python2-numpydoc" ,python2-numpydoc)
6749 ("python2-jinja2" ,python2-jinja2)
6750 ("python2-mistune" ,python2-mistune)
6751 ("python2-pexpect" ,python2-pexpect)
6752 ("python2-pickleshare" ,python2-pickleshare)
6753 ("python2-simplegeneric" ,python2-simplegeneric)
6754 ("python2-jsonschema" ,python2-jsonschema)
6755 ("python2-traitlets" ,python2-traitlets)
6756 ("python2-nbformat" ,python2-nbformat)
6757 ("python2-pygments" ,python2-pygments)))
6758 (inputs
6759 `(("readline" ,readline)
6760 ("which" ,which)))
6761 (native-inputs
6762 `(("graphviz" ,graphviz)
6763 ("pkg-config" ,pkg-config)
6764 ("python2-requests" ,python2-requests) ;; for tests
6765 ("python2-testpath" ,python2-testpath)
6766 ("python2-mock" ,python2-mock)
6767 ("python2-nose" ,python2-nose)))
6768 (arguments
6769 `(#:python ,python-2
6770 #:phases
6771 (modify-phases %standard-phases
6772 (add-before 'check 'delete-broken-tests
6773 (lambda* (#:key inputs #:allow-other-keys)
6774 ;; These tests throw errors for unknown reasons.
6775 (delete-file "IPython/core/tests/test_displayhook.py")
6776 (delete-file "IPython/core/tests/test_magic_terminal.py")
6777 (delete-file "IPython/core/tests/test_profile.py")
6778 #t)))))
6779 (home-page "https://ipython.org")
6780 (synopsis "IPython is a tool for interactive computing in Python")
6781 (description
6782 "IPython provides a rich architecture for interactive computing with:
6783 Powerful interactive shells, a browser-based notebook, support for interactive
6784 data visualization, embeddable interpreters and tools for parallel
6785 computing.")
6786 (license license:bsd-3)))
6787
6788 (define-public python-ipython-documentation
6789 (package
6790 (inherit python-ipython)
6791 (name "python-ipython-documentation")
6792 (version (package-version python-ipython))
6793 (arguments
6794 `(#:phases
6795 (modify-phases %standard-phases
6796 (delete 'build)
6797 (delete 'check)
6798 (replace 'install
6799 (lambda* (#:key outputs #:allow-other-keys)
6800 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6801 (doc (string-append data "/doc/" ,name "-" ,version))
6802 (html (string-append doc "/html"))
6803 (man1 (string-append data "/man/man1"))
6804 (info (string-append data "/info"))
6805 (examples (string-append doc "/examples"))
6806 (python-arg (string-append "PYTHON=" (which "python"))))
6807 (setenv "LANG" "en_US.utf8")
6808 (with-directory-excursion "docs"
6809 ;; FIXME: pdf fails to build
6810 ;;(system* "make" "pdf" "PAPER=a4")
6811 (system* "make" python-arg "html")
6812 ;; FIXME: the generated texi file contains ^@^@, which trips
6813 ;; up the parser.
6814 ;; (system* "make" python-arg "info")
6815 )
6816 (copy-recursively "docs/man" man1)
6817 (copy-recursively "examples" examples)
6818 (copy-recursively "docs/build/html" html)
6819 ;; (copy-file "docs/build/latex/ipython.pdf"
6820 ;; (string-append doc "/ipython.pdf"))
6821 (mkdir-p info)
6822 ;; (copy-file "docs/build/texinfo/ipython.info"
6823 ;; (string-append info "/ipython.info"))
6824 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6825 #t)))))
6826 (inputs
6827 `(("python-ipython" ,python-ipython)
6828 ("python-ipykernel" ,python-ipykernel)))
6829 (native-inputs
6830 `(("python-sphinx" ,python-sphinx)
6831 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6832 ;; FIXME: It's possible that a smaller union would work just as well.
6833 ("texlive" ,(texlive-union (list texlive-amsfonts
6834 texlive-fonts-ec
6835 texlive-generic-ifxetex
6836 texlive-generic-pdftex
6837 texlive-latex-capt-of
6838 texlive-latex-cmap
6839 texlive-latex-environ
6840 texlive-latex-eqparbox
6841 texlive-latex-etoolbox
6842 texlive-latex-expdlist
6843 texlive-latex-fancyhdr
6844 texlive-latex-fancyvrb
6845 texlive-latex-fncychap
6846 texlive-latex-float
6847 texlive-latex-framed
6848 texlive-latex-geometry
6849 texlive-latex-graphics
6850 texlive-latex-hyperref
6851 texlive-latex-mdwtools
6852 texlive-latex-multirow
6853 texlive-latex-needspace
6854 texlive-latex-oberdiek
6855 texlive-latex-parskip
6856 texlive-latex-preview
6857 texlive-latex-tabulary
6858 texlive-latex-threeparttable
6859 texlive-latex-titlesec
6860 texlive-latex-trimspaces
6861 texlive-latex-ucs
6862 texlive-latex-upquote
6863 texlive-latex-url
6864 texlive-latex-varwidth
6865 texlive-latex-wrapfig)))
6866 ("texinfo" ,texinfo)))))
6867
6868 (define-public python-urwid
6869 (package
6870 (name "python-urwid")
6871 (version "2.1.0")
6872 (source
6873 (origin
6874 (method url-fetch)
6875 (uri (pypi-uri "urwid" version))
6876 (sha256
6877 (base32
6878 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6879 (build-system python-build-system)
6880 (home-page "http://urwid.org")
6881 (synopsis "Console user interface library for Python")
6882 (description
6883 "Urwid is a curses-based UI/widget library for Python. It includes many
6884 features useful for text console applications.")
6885 (license license:lgpl2.1+)))
6886
6887 (define-public python2-urwid
6888 (package-with-python2 python-urwid))
6889
6890 (define-public python-urwidtrees
6891 (package
6892 (name "python-urwidtrees")
6893 (version "1.0.2")
6894 (source
6895 (origin
6896 (method git-fetch)
6897 ;; package author intends on distributing via github rather than pypi:
6898 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6899 (uri (git-reference
6900 (url "https://github.com/pazz/urwidtrees")
6901 (commit version)))
6902 (file-name (git-file-name name version))
6903 (sha256
6904 (base32
6905 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6906 (build-system python-build-system)
6907 (arguments
6908 '(#:use-setuptools? #f
6909 #:tests? #f)) ; no tests
6910 (propagated-inputs `(("python-urwid" ,python-urwid)))
6911 (home-page "https://github.com/pazz/urwidtrees")
6912 (synopsis "Tree widgets for urwid")
6913 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6914 toolkit. Use it to build trees of widgets.")
6915 (license license:gpl3+)))
6916
6917 (define-public python2-urwidtrees
6918 (package-with-python2 python-urwidtrees))
6919
6920 (define-public python-ua-parser
6921 (package
6922 (name "python-ua-parser")
6923 (version "0.8.0")
6924 (source
6925 (origin
6926 (method url-fetch)
6927 (uri (pypi-uri "ua-parser" version))
6928 (sha256
6929 (base32
6930 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6931 (build-system python-build-system)
6932 (arguments
6933 `(#:tests? #f)) ;no test suite in release
6934 (native-inputs
6935 `(("python-pyyaml" ,python-pyyaml)))
6936 (home-page "https://github.com/ua-parser/uap-python")
6937 (synopsis "User agent parser")
6938 (description
6939 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6940 (license license:asl2.0)))
6941
6942 (define-public python2-ua-parser
6943 (package-with-python2 python-ua-parser))
6944
6945 (define-public python-user-agents
6946 (package
6947 (name "python-user-agents")
6948 (version "1.1.0")
6949 (source
6950 (origin
6951 (method url-fetch)
6952 (uri (pypi-uri "user-agents" version))
6953 (sha256
6954 (base32
6955 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6956 (build-system python-build-system)
6957 (arguments
6958 `(#:tests? #f)) ;missing devices.json test file in release
6959 (propagated-inputs
6960 `(("python-ua-parser" ,python-ua-parser)))
6961 (home-page "https://github.com/selwin/python-user-agents")
6962 (synopsis "User Agent strings parsing library")
6963 (description
6964 "A library to identify devices (phones, tablets) and their capabilities by
6965 parsing (browser/HTTP) user agent strings.")
6966 (license license:expat)))
6967
6968 (define-public python2-user-agents
6969 (package-with-python2 python-user-agents))
6970
6971 (define-public python-dbus
6972 (package
6973 (name "python-dbus")
6974 (version "1.2.14")
6975 (source
6976 (origin
6977 (method url-fetch)
6978 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6979 "dbus-python-" version ".tar.gz"))
6980 (sha256
6981 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6982 (build-system gnu-build-system)
6983 (native-inputs
6984 `(("pkg-config" ,pkg-config)))
6985 (inputs
6986 `(("python" ,python-wrapper)
6987 ("dbus-glib" ,dbus-glib)))
6988 (synopsis "Python bindings for D-bus")
6989 (description "python-dbus provides bindings for libdbus, the reference
6990 implementation of D-Bus.")
6991 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6992 (license license:expat)))
6993
6994 (define-public python2-dbus
6995 (package (inherit python-dbus)
6996 (name "python2-dbus")
6997 (inputs `(("python" ,python-2)
6998 ,@(alist-delete "python"
6999 (package-inputs python-dbus)
7000 equal?)))))
7001
7002 (define-public python-notify2
7003 (package
7004 (name "python-notify2")
7005 (version "0.3.1")
7006 (source
7007 (origin
7008 (method url-fetch)
7009 (uri (pypi-uri "notify2" version))
7010 (sha256
7011 (base32
7012 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
7013 (build-system python-build-system)
7014 (arguments `(#:tests? #f)) ; tests depend on system state
7015 (native-inputs
7016 `(("python-dbus" ,python-dbus)))
7017 (home-page "https://bitbucket.org/takluyver/pynotify2")
7018 (synopsis "Python interface to D-Bus notifications")
7019 (description
7020 "Pynotify2 provides a Python interface for sending D-Bus notifications.
7021 It is a reimplementation of pynotify in pure Python, and an alternative to
7022 the GObject Introspection bindings to libnotify for non-GTK applications.")
7023 (license (list license:bsd-2
7024 license:lgpl2.1+))))
7025
7026 (define-public python2-notify2
7027 (package-with-python2 python-notify2))
7028
7029 ;; beautifulsoup4 has a totally different namespace than 3.x,
7030 ;; and pypi seems to put it under its own name, so I guess we should too
7031 (define-public python-beautifulsoup4
7032 (package
7033 (name "python-beautifulsoup4")
7034 (version "4.9.1")
7035 (source
7036 (origin
7037 (method url-fetch)
7038 (uri (pypi-uri "beautifulsoup4" version))
7039 (sha256
7040 (base32
7041 "1mvzlw3pzbhsvl3z8784s5h7iiflm2hggiy1fxyrrxwnbc8lvk3k"))))
7042 (build-system python-build-system)
7043 (arguments
7044 `(#:phases
7045 (modify-phases %standard-phases
7046 ;; The Python 2 source is the definitive source of beautifulsoup4. We
7047 ;; must use this conversion script when building with Python 3. The
7048 ;; conversion script also runs the tests.
7049 ;; For more information, see the file 'convert-py3k' in the source
7050 ;; distribution.
7051 (replace 'check
7052 (lambda _ (invoke "./convert-py3k"))))))
7053 (propagated-inputs
7054 `(("python-soupsieve" ,python-soupsieve)))
7055 (home-page
7056 "https://www.crummy.com/software/BeautifulSoup/bs4/")
7057 (synopsis
7058 "Python screen-scraping library")
7059 (description
7060 "Beautiful Soup is a Python library designed for rapidly setting up
7061 screen-scraping projects. It offers Pythonic idioms for navigating,
7062 searching, and modifying a parse tree, providing a toolkit for
7063 dissecting a document and extracting what you need. It automatically
7064 converts incoming documents to Unicode and outgoing documents to UTF-8.")
7065 (license license:expat)
7066 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7067
7068 (define-public python2-beautifulsoup4
7069 (package
7070 (inherit (package-with-python2
7071 (strip-python2-variant python-beautifulsoup4)))
7072 (arguments `(#:python ,python-2))))
7073
7074 (define-public python-soupsieve
7075 (package
7076 (name "python-soupsieve")
7077 (version "2.0.1")
7078 (source
7079 (origin
7080 (method url-fetch)
7081 (uri (pypi-uri "soupsieve" version))
7082 (sha256
7083 (base32
7084 "0ch2rhvsbwfpvzm4kzy81rclbzr533yv83hzg1gx55byfa0w37d5"))))
7085 (build-system python-build-system)
7086 (arguments `(#:tests? #f))
7087 ;;XXX: 2 tests fail currently despite claming they were to be
7088 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7089 ;;don't want to create a circular dependency.
7090 (home-page "https://github.com/facelessuser/soupsieve")
7091 (synopsis "CSS selector library")
7092 (description
7093 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7094 Soup 4. It aims to provide selecting, matching, and filtering using modern
7095 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7096 specifications up through the latest CSS level 4 drafts and beyond (though
7097 some are not yet implemented).")
7098 (properties `((python2-variant . ,(delay python2-soupsieve))))
7099 (license license:expat)))
7100
7101 ;; This is the last version that supports python-2
7102 (define-public python2-soupsieve
7103 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7104 (package
7105 (inherit base)
7106 (version "1.9.6")
7107 (source
7108 (origin
7109 (method url-fetch)
7110 (uri (pypi-uri "soupsieve" version))
7111 (sha256
7112 (base32
7113 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7114 (propagated-inputs
7115 `(("python2-backports-functools-lru-cache"
7116 ,python2-backports-functools-lru-cache)
7117 ,@(package-propagated-inputs base))))))
7118
7119 (define-public python-netifaces
7120 (package
7121 (name "python-netifaces")
7122 (version "0.10.9")
7123 (source
7124 (origin
7125 (method url-fetch)
7126 (uri (pypi-uri "netifaces" version))
7127 (sha256
7128 (base32
7129 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7130 (build-system python-build-system)
7131 (home-page "https://github.com/al45tair/netifaces")
7132 (synopsis
7133 "Python module for portable network interface information")
7134 (description
7135 "Netifaces is a Python module providing information on network
7136 interfaces in an easy and portable manner.")
7137 (license license:expat)))
7138
7139 (define-public python2-netifaces
7140 (package-with-python2 python-netifaces))
7141
7142 (define-public python-networkx
7143 (package
7144 (name "python-networkx")
7145 (version "2.4")
7146 (source
7147 (origin
7148 (method url-fetch)
7149 (uri (pypi-uri "networkx" version))
7150 (sha256
7151 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
7152 (build-system python-build-system)
7153 (arguments
7154 '(#:phases (modify-phases %standard-phases
7155 (replace 'check
7156 (lambda* (#:key tests? #:allow-other-keys)
7157 (if tests?
7158 (invoke "pytest" "-vv" "--pyargs" "networkx")
7159 (format #t "test suite not run~%"))
7160 #t)))))
7161 ;; python-decorator is needed at runtime.
7162 (propagated-inputs
7163 `(("python-decorator" ,python-decorator)))
7164 (native-inputs
7165 `(("python-pytest" ,python-pytest)))
7166 (home-page "https://networkx.github.io/")
7167 (synopsis "Python module for creating and manipulating graphs and networks")
7168 (description
7169 "NetworkX is a Python package for the creation, manipulation, and study
7170 of the structure, dynamics, and functions of complex networks.")
7171 (properties `((python2-variant . ,(delay python2-networkx))))
7172 (license license:bsd-3)))
7173
7174 ;; NetworkX 2.2 is the last version with support for Python 2.
7175 (define-public python2-networkx
7176 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7177 (package
7178 (inherit base)
7179 (version "2.2")
7180 (source (origin
7181 (method url-fetch)
7182 (uri (pypi-uri "networkx" version ".zip"))
7183 (sha256
7184 (base32
7185 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7186 (arguments
7187 `(#:python ,python-2))
7188 (native-inputs
7189 `(("python-nose" ,python2-nose)
7190 ("unzip" ,unzip))))))
7191
7192 (define-public python-datrie
7193 (package
7194 (name "python-datrie")
7195 (version "0.8.2")
7196 (source
7197 (origin
7198 (method url-fetch)
7199 (uri (pypi-uri "datrie" version))
7200 (sha256
7201 (base32
7202 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
7203 (build-system python-build-system)
7204 (native-inputs
7205 `(("python-cython" ,python-cython)
7206 ("python-hypothesis" ,python-hypothesis)
7207 ("python-pytest" ,python-pytest)
7208 ("python-pytest-runner" ,python-pytest-runner)))
7209 (home-page "https://github.com/kmike/datrie")
7210 (synopsis "Fast, efficiently stored trie for Python")
7211 (description
7212 "This package provides a fast, efficiently stored trie implementation for
7213 Python.")
7214 (license license:lgpl2.1+)))
7215
7216 (define-public snakemake
7217 (package
7218 (name "snakemake")
7219 (version "5.7.1")
7220 (source
7221 (origin
7222 (method url-fetch)
7223 (uri (pypi-uri "snakemake" version))
7224 (sha256
7225 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7226 (build-system python-build-system)
7227 (arguments
7228 ;; TODO: Package missing test dependencies.
7229 '(#:tests? #f
7230 #:phases
7231 (modify-phases %standard-phases
7232 ;; For cluster execution Snakemake will call Python. Since there is
7233 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7234 ;; this by calling the snakemake wrapper instead.
7235 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7236 (lambda* (#:key outputs #:allow-other-keys)
7237 (substitute* "snakemake/executors.py"
7238 (("\\{sys.executable\\} -m snakemake")
7239 (string-append (assoc-ref outputs "out")
7240 "/bin/snakemake")))
7241 #t)))))
7242 (propagated-inputs
7243 `(("python-appdirs" ,python-appdirs)
7244 ("python-configargparse" ,python-configargparse)
7245 ("python-datrie" ,python-datrie)
7246 ("python-docutils" ,python-docutils)
7247 ("python-gitpython" ,python-gitpython)
7248 ("python-jinja2" ,python-jinja2)
7249 ("python-jsonschema" ,python-jsonschema)
7250 ("python-networkx" ,python-networkx)
7251 ("python-psutil" ,python-psutil)
7252 ("python-pyyaml" ,python-pyyaml)
7253 ("python-ratelimiter" ,python-ratelimiter)
7254 ("python-requests" ,python-requests)
7255 ("python-wrapt" ,python-wrapt)))
7256 (home-page "https://snakemake.readthedocs.io")
7257 (synopsis "Python-based execution environment for make-like workflows")
7258 (description
7259 "Snakemake aims to reduce the complexity of creating workflows by
7260 providing a clean and modern domain specific specification language (DSL) in
7261 Python style, together with a fast and comfortable execution environment.")
7262 (license license:expat)))
7263
7264 (define-public python-pyqrcode
7265 (package
7266 (name "python-pyqrcode")
7267 (version "1.2.1")
7268 (source
7269 (origin
7270 (method url-fetch)
7271 (uri (pypi-uri "PyQRCode" version))
7272 (sha256
7273 (base32
7274 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7275 (build-system python-build-system)
7276 (home-page
7277 "https://github.com/mnooner256/pyqrcode")
7278 (synopsis "QR code generator")
7279 (description
7280 "Pyqrcode is a QR code generator written purely in Python with
7281 SVG, EPS, PNG and terminal output.")
7282 (license license:bsd-3)))
7283
7284 (define-public python-seaborn
7285 (package
7286 (name "python-seaborn")
7287 (version "0.10.0")
7288 (source
7289 (origin
7290 (method url-fetch)
7291 (uri (pypi-uri "seaborn" version))
7292 (sha256
7293 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7294 (build-system python-build-system)
7295 (arguments
7296 `(#:phases
7297 (modify-phases %standard-phases
7298 (add-before 'check 'start-xserver
7299 (lambda* (#:key inputs #:allow-other-keys)
7300 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7301 ;; There must be a running X server and make check doesn't
7302 ;; start one. Therefore we must do it.
7303 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7304 (setenv "DISPLAY" ":1")
7305 #t)))
7306 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7307 (propagated-inputs
7308 `(("python-pandas" ,python-pandas)
7309 ("python-matplotlib" ,python-matplotlib)
7310 ("python-numpy" ,python-numpy)
7311 ("python-scipy" ,python-scipy)))
7312 (native-inputs
7313 `(("python-pytest" ,python-pytest)
7314 ("xorg-server" ,xorg-server-for-tests)))
7315 (home-page "https://seaborn.pydata.org/")
7316 (synopsis "Statistical data visualization")
7317 (description
7318 "Seaborn is a library for making attractive and informative statistical
7319 graphics in Python. It is built on top of matplotlib and tightly integrated
7320 with the PyData stack, including support for numpy and pandas data structures
7321 and statistical routines from scipy and statsmodels.")
7322 (properties `((python2-variant . ,(delay python2-seaborn))))
7323 (license license:bsd-3)))
7324
7325 ;; 0.9.1 is the last release with support for Python 2.
7326 (define-public python2-seaborn
7327 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7328 (package
7329 (inherit base)
7330 (version "0.9.1")
7331 (source (origin
7332 (method url-fetch)
7333 (uri (pypi-uri "seaborn" version))
7334 (sha256
7335 (base32
7336 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7337
7338 (define-public python-mpmath
7339 (package
7340 (name "python-mpmath")
7341 (version "0.19")
7342 (source (origin
7343 (method url-fetch)
7344 (uri (string-append "http://mpmath.org/files/mpmath-"
7345 version ".tar.gz"))
7346 (sha256
7347 (base32
7348 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7349 (build-system python-build-system)
7350 (arguments
7351 '(#:phases
7352 (modify-phases %standard-phases
7353 (replace 'check
7354 (lambda _
7355 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7356 (home-page "http://mpmath.org")
7357 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7358 (description
7359 "@code{mpmath} can be used as an arbitrary-precision substitute for
7360 Python's float/complex types and math/cmath modules, but also does much
7361 more advanced mathematics.")
7362 (license license:bsd-3)))
7363
7364 (define-public python2-mpmath
7365 (package-with-python2 python-mpmath))
7366
7367 (define-public python-bigfloat
7368 (package
7369 (name "python-bigfloat")
7370 (version "0.3.0")
7371 (source
7372 (origin
7373 (method url-fetch)
7374 (uri (pypi-uri "bigfloat" version))
7375 (sha256
7376 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7377 (build-system python-build-system)
7378 (inputs
7379 `(("mpfr" ,mpfr)))
7380 (home-page "https://github.com/mdickinson/bigfloat")
7381 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7382 (description
7383 "This package provides a Python interface to the MPFR library for
7384 multiprecision arithmetic.")
7385 (license license:lgpl3+)))
7386
7387 (define-public python2-bigfloat
7388 (package-with-python2 python-bigfloat))
7389
7390 (define-public python-sympy
7391 (package
7392 (name "python-sympy")
7393 (version "1.1.1")
7394 (source
7395 (origin
7396 (method url-fetch)
7397 (uri (string-append
7398 "https://github.com/sympy/sympy/releases/download/sympy-"
7399 version "/sympy-" version ".tar.gz"))
7400 (sha256
7401 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7402 (build-system python-build-system)
7403 (arguments
7404 `(#:phases
7405 (modify-phases %standard-phases
7406 ;; Run the core tests after installation. By default it would run
7407 ;; *all* tests, which take a very long time to complete and are known
7408 ;; to be flaky.
7409 (delete 'check)
7410 (add-after 'install 'check
7411 (lambda* (#:key outputs #:allow-other-keys)
7412 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7413 #t)))))
7414 (propagated-inputs
7415 `(("python-mpmath" ,python-mpmath)))
7416 (home-page "https://www.sympy.org/")
7417 (synopsis "Python library for symbolic mathematics")
7418 (description
7419 "SymPy is a Python library for symbolic mathematics. It aims to become a
7420 full-featured computer algebra system (CAS) while keeping the code as simple
7421 as possible in order to be comprehensible and easily extensible.")
7422 (license license:bsd-3)))
7423
7424 (define-public python2-sympy
7425 (package
7426 (inherit (package-with-python2 python-sympy))
7427 (arguments
7428 `(#:phases
7429 (modify-phases %standard-phases
7430 ;; Run the core tests after installation. By default it would run
7431 ;; *all* tests, which take a very long time to complete and are known
7432 ;; to be flaky.
7433 (delete 'check)
7434 (add-after 'install 'check
7435 (lambda* (#:key outputs #:allow-other-keys)
7436 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7437 #t)))))))
7438
7439 (define-public python-q
7440 (package
7441 (name "python-q")
7442 (version "2.6")
7443 (source
7444 (origin
7445 (method url-fetch)
7446 (uri (pypi-uri "q" version))
7447 (sha256
7448 (base32
7449 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7450 (build-system python-build-system)
7451 (home-page "https://github.com/zestyping/q")
7452 (synopsis "Quick-and-dirty debugging output for tired programmers")
7453 (description
7454 "q is a Python module for \"print\" style of debugging Python code. It
7455 provides convenient short API for print out of values, tracebacks, and
7456 falling into the Python interpreter.")
7457 (license license:asl2.0)))
7458
7459 (define-public python2-q
7460 (package-with-python2 python-q))
7461
7462 (define-public python-xlib
7463 (package
7464 (name "python-xlib")
7465 (version "0.27")
7466 (source
7467 (origin
7468 (method git-fetch)
7469 (uri (git-reference
7470 (url "https://github.com/python-xlib/python-xlib")
7471 (commit version)))
7472 (file-name (git-file-name name version))
7473 (sha256
7474 (base32 "09kimic8rhprx3q8nzalc4aggg42ahqm4v5qcj8dm68yvxfdk986"))))
7475 (build-system python-build-system)
7476 (arguments
7477 `(#:phases
7478 (modify-phases %standard-phases
7479 (add-before 'check 'start-xserver
7480 (lambda* (#:key inputs #:allow-other-keys)
7481 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7482 ;; There must be a running X server and make check doesn't
7483 ;; start one. Therefore we must do it.
7484 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7485 (setenv "DISPLAY" ":1")
7486 #t))))))
7487 (native-inputs
7488 `(("python-mock" ,python-mock)
7489 ("python-setuptools-scm" ,python-setuptools-scm)
7490 ("python-six" ,python-six)
7491 ("xorg-server" ,xorg-server)))
7492 (home-page "https://github.com/python-xlib/python-xlib")
7493 (synopsis "Python X11 client library")
7494 (description
7495 "The Python X Library is intended to be a fully functional
7496 X client library for Python programs. It is useful to implement
7497 low-level X clients. It is written entirely in Python.")
7498 (license license:gpl2+)))
7499
7500 (define-public python2-xlib
7501 (package-with-python2 python-xlib))
7502
7503 (define-public python-singledispatch
7504 (package
7505 (name "python-singledispatch")
7506 (version "3.4.0.3")
7507 (source
7508 (origin
7509 (method url-fetch)
7510 (uri (pypi-uri "singledispatch" version))
7511 (sha256
7512 (base32
7513 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7514 (build-system python-build-system)
7515 (native-inputs
7516 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7517 (home-page
7518 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7519 (synopsis "Backport of singledispatch feature from Python 3.4")
7520 (description
7521 "This library brings functools.singledispatch from Python 3.4 to Python
7522 2.6-3.3.")
7523 (license license:expat)))
7524
7525 (define-public python2-singledispatch
7526 (package-with-python2 python-singledispatch))
7527
7528 ;; the python- version can be removed with python-3.5
7529 (define-public python-backports-abc
7530 (package
7531 (name "python-backports-abc")
7532 (version "0.5")
7533 (source
7534 (origin
7535 (method url-fetch)
7536 (uri (pypi-uri "backports_abc" version))
7537 (sha256
7538 (base32
7539 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7540 (build-system python-build-system)
7541 (home-page "https://github.com/cython/backports_abc")
7542 (synopsis "Backport of additions to the 'collections.abc' module")
7543 (description
7544 "Python-backports-abc provides a backport of additions to the
7545 @code{collections.abc} module in Python-3.5.")
7546 (license license:psfl)))
7547
7548 (define-public python2-backports-abc
7549 (package-with-python2 python-backports-abc))
7550
7551 (define-public python-backports-csv
7552 (package
7553 (name "python-backports-csv")
7554 (version "1.0.7")
7555 (source
7556 (origin
7557 (method url-fetch)
7558 (uri (pypi-uri "backports.csv" version))
7559 (sha256
7560 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7561 (build-system python-build-system)
7562 (home-page "https://github.com/ryanhiebert/backports.csv")
7563 (synopsis "Backport of Python 3's csv module for Python 2")
7564 (description
7565 "Provides a backport of Python 3's @code{csv} module for parsing
7566 comma separated values. The API of the @code{csv} module in Python 2
7567 is drastically different from the @code{csv} module in Python 3.
7568 This is due, for the most part, to the difference between str in
7569 Python 2 and Python 3.")
7570 (license license:psfl)))
7571
7572 (define-public python2-backports-csv
7573 (package-with-python2 python-backports-csv))
7574
7575 (define-public python2-backports-shutil-get-terminal-size
7576 (package
7577 (name "python2-backports-shutil-get-terminal-size")
7578 (version "1.0.0")
7579 (source
7580 (origin
7581 (method url-fetch)
7582 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7583 (sha256
7584 (base32
7585 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7586 (build-system python-build-system)
7587 (arguments
7588 `(#:python ,python-2
7589 #:phases
7590 (modify-phases %standard-phases
7591 (replace 'check
7592 (lambda _
7593 (setenv "PYTHONPATH" (string-append "./build/lib:"
7594 (getenv "PYTHONPATH")))
7595 (invoke "py.test" "-v"))))))
7596 (native-inputs
7597 `(("python2-pytest" ,python2-pytest)))
7598 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7599 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7600 (description
7601 "This package provides a backport of the @code{get_terminal_size
7602 function} from Python 3.3's @code{shutil}.
7603 Unlike the original version it is written in pure Python rather than C,
7604 so it might be a tiny bit slower.")
7605 (license license:expat)))
7606
7607 (define-public python-waf
7608 (package
7609 (name "python-waf")
7610 (version "2.0.19")
7611 (source (origin
7612 (method url-fetch)
7613 (uri (string-append "https://waf.io/"
7614 "waf-" version ".tar.bz2"))
7615 (sha256
7616 (base32
7617 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7618 (build-system python-build-system)
7619 (arguments
7620 '(#:phases
7621 (modify-phases %standard-phases
7622 (replace 'build
7623 (lambda _
7624 ;; XXX: Find a way to add all extra tools.
7625 (let ((tools '("gccdeps"
7626 "clang_compilation_database")))
7627 (invoke "python" "waf-light" "configure" "build"
7628 (string-append "--tools="
7629 (string-join tools ","))))))
7630 (replace 'check
7631 (lambda _
7632 (invoke "python" "waf" "--version")))
7633 (replace 'install
7634 (lambda* (#:key outputs #:allow-other-keys)
7635 (let ((out (assoc-ref outputs "out")))
7636 (install-file "waf" (string-append out "/bin")))
7637 #t))
7638 ;; waf breaks when it is wrapped.
7639 (delete 'wrap))))
7640 (home-page "https://waf.io/")
7641 (synopsis "Python-based build system")
7642 (description
7643 "Waf is a Python-based framework for configuring, compiling and installing
7644 applications.")
7645 (license license:bsd-3)))
7646
7647 (define-public python2-waf
7648 (package-with-python2 python-waf))
7649
7650 (define-public python-pyzmq
7651 (package
7652 (name "python-pyzmq")
7653 (version "17.1.2")
7654 (source
7655 (origin
7656 (method url-fetch)
7657 (uri (pypi-uri "pyzmq" version))
7658 (sha256
7659 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7660 (build-system python-build-system)
7661 (arguments
7662 `(#:configure-flags
7663 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7664 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7665 ;; --inplace' for 'python setup.py test' to work.
7666 #:tests? #f))
7667 (inputs
7668 `(("zeromq" ,zeromq)))
7669 (native-inputs
7670 `(("pkg-config" ,pkg-config)
7671 ("python-nose" ,python-nose)))
7672 (home-page "https://github.com/zeromq/pyzmq")
7673 (synopsis "Python bindings for 0MQ")
7674 (description
7675 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7676 (license license:bsd-4)))
7677
7678 (define-public python2-pyzmq
7679 (package-with-python2 python-pyzmq))
7680
7681 (define-public python-pep8
7682 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7683 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7684 ;; some dependents' test suites, and nothing more.
7685 (package
7686 (name "python-pep8")
7687 (version "1.7.0")
7688 (source
7689 (origin
7690 (method url-fetch)
7691 (uri (pypi-uri "pep8" version))
7692 (sha256
7693 (base32
7694 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7695 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7696 (build-system python-build-system)
7697 (home-page "https://pep8.readthedocs.org/")
7698 (synopsis "Python style guide checker")
7699 (description
7700 "This tools checks Python code against some of the style conventions in
7701 PEP 8.")
7702 (license license:expat)))
7703
7704 (define-public python2-pep8
7705 (package-with-python2 python-pep8))
7706
7707 (define-public python-pyflakes
7708 (package
7709 (name "python-pyflakes")
7710 (version "2.2.0")
7711 (source
7712 (origin
7713 (method url-fetch)
7714 (uri (pypi-uri "pyflakes" version))
7715 (sha256
7716 (base32
7717 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))
7718 (build-system python-build-system)
7719 (home-page
7720 "https://github.com/pyflakes/pyflakes")
7721 (synopsis "Passive checker of Python programs")
7722 (description
7723 "Pyflakes statically checks Python source code for common errors.")
7724 (license license:expat)))
7725
7726 (define-public python2-pyflakes
7727 (package-with-python2 python-pyflakes))
7728
7729 ;; Flake8 2.6 requires an older version of pyflakes.
7730 ;; This should be removed ASAP.
7731 (define-public python-pyflakes-1.2
7732 (package (inherit python-pyflakes)
7733 (version "1.2.3")
7734 (source
7735 (origin
7736 (method url-fetch)
7737 (uri (pypi-uri "pyflakes" version))
7738 (sha256
7739 (base32
7740 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7741 (arguments
7742 '(#:phases
7743 (modify-phases %standard-phases
7744 ;; This one test fails.
7745 (replace 'check
7746 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7747 (native-inputs
7748 `(("python-pytest" ,python-pytest)))))
7749
7750 (define-public python-mccabe
7751 (package
7752 (name "python-mccabe")
7753 (version "0.6.1")
7754 (source
7755 (origin
7756 (method url-fetch)
7757 (uri (pypi-uri "mccabe" version))
7758 (sha256
7759 (base32
7760 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7761 (build-system python-build-system)
7762 (native-inputs
7763 `(("python-pytest" ,python-pytest-bootstrap)
7764 ("python-pytest-runner" ,python-pytest-runner)))
7765 (home-page "https://github.com/flintwork/mccabe")
7766 (synopsis "McCabe checker, plugin for flake8")
7767 (description
7768 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7769 complexity of Python source code.")
7770 (license license:expat)))
7771
7772 (define-public python2-mccabe
7773 (package-with-python2 python-mccabe))
7774
7775 (define-public python-mccabe-0.2.1
7776 (package (inherit python-mccabe)
7777 (version "0.2.1")
7778 (source
7779 (origin
7780 (method url-fetch)
7781 (uri (pypi-uri "mccabe" version))
7782 (sha256
7783 (base32
7784 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7785
7786 (define-public python2-mccabe-0.2.1
7787 (package-with-python2 python-mccabe-0.2.1))
7788
7789 ;; Flake8 2.4.1 requires an older version of pep8.
7790 ;; This should be removed ASAP.
7791 (define-public python-pep8-1.5.7
7792 (package (inherit python-pep8)
7793 (version "1.5.7")
7794 (source
7795 (origin
7796 (method url-fetch)
7797 (uri (pypi-uri "pep8" version))
7798 (sha256
7799 (base32
7800 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7801 (arguments
7802 ;; XXX Tests not compatible with Python 3.5.
7803 '(#:tests? #f))))
7804
7805 (define-public python2-pep8-1.5.7
7806 (package-with-python2 python-pep8-1.5.7))
7807
7808 (define-public python-flake8
7809 (package
7810 (name "python-flake8")
7811 (version "3.8.3")
7812 (source (origin
7813 (method url-fetch)
7814 (uri (pypi-uri "flake8" version))
7815 (sha256
7816 (base32
7817 "02527892hh0qjivxaiphzalj7q32qkna1cqaikjs7c03mk5ryjzh"))))
7818 (build-system python-build-system)
7819 (arguments
7820 `(#:phases
7821 (modify-phases %standard-phases
7822 (delete 'check)
7823 (add-after 'install 'check
7824 (lambda* (#:key inputs outputs #:allow-other-keys)
7825 (add-installed-pythonpath inputs outputs)
7826 (invoke "pytest" "-v")
7827 #t)))))
7828 (propagated-inputs
7829 `(("python-pycodestyle" ,python-pycodestyle)
7830 ("python-entrypoints" ,python-entrypoints)
7831 ("python-pyflakes" ,python-pyflakes)
7832 ("python-mccabe" ,python-mccabe)))
7833 (native-inputs
7834 `(("python-mock" ,python-mock)
7835 ("python-pytest" ,python-pytest-bootstrap)))
7836 (home-page "https://gitlab.com/pycqa/flake8")
7837 (synopsis
7838 "The modular source code checker: pep8, pyflakes and co")
7839 (description
7840 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7841 (properties `((python2-variant . ,(delay python2-flake8))))
7842 (license license:expat)))
7843
7844 (define-public python2-flake8
7845 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7846 (package (inherit base)
7847 (propagated-inputs
7848 `(("python2-configparser" ,python2-configparser)
7849 ("python2-enum34" ,python2-enum34)
7850 ("python2-functools32" ,python2-functools32)
7851 ("python2-typing" ,python2-typing)
7852 ,@(package-propagated-inputs base))))))
7853
7854 ;; python-hacking requires flake8 <2.7.0.
7855 (define-public python-flake8-2.6
7856 (package
7857 (inherit python-flake8)
7858 (version "2.6.2")
7859 (source (origin
7860 (method url-fetch)
7861 (uri (pypi-uri "flake8" version))
7862 (sha256
7863 (base32
7864 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7865 (arguments
7866 `(#:phases
7867 (modify-phases %standard-phases
7868 (add-after 'unpack 'use-later-pycodestyles
7869 (lambda __
7870 (substitute* '("flake8.egg-info/requires.txt"
7871 "setup.py")
7872 (("pycodestyle >= 2.0, < 2.1")
7873 "pycodestyle >= 2.0"))
7874 #t))
7875 (delete 'check)
7876 (add-after 'install 'check
7877 (lambda* (#:key inputs outputs #:allow-other-keys)
7878 (add-installed-pythonpath inputs outputs)
7879 (invoke "pytest" "-v")
7880 #t)))))
7881 (propagated-inputs
7882 `(("python-pep8" ,python-pep8)
7883 ("python-pycodestyle" ,python-pycodestyle)
7884 ("python-entrypoints" ,python-entrypoints)
7885 ("python-pyflakes" ,python-pyflakes-1.2)
7886 ("python-mccabe" ,python-mccabe)))))
7887
7888 (define-public python-flake8-polyfill
7889 (package
7890 (name "python-flake8-polyfill")
7891 (version "1.0.2")
7892 (source
7893 (origin
7894 (method url-fetch)
7895 (uri (pypi-uri "flake8-polyfill" version))
7896 (sha256
7897 (base32
7898 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7899 (build-system python-build-system)
7900 (arguments
7901 '(#:phases
7902 (modify-phases %standard-phases
7903 (replace 'check
7904 (lambda _
7905 ;; Be compatible with Pytest 4:
7906 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7907 (substitute* "setup.cfg"
7908 (("\\[pytest\\]")
7909 "[tool:pytest]"))
7910
7911 (setenv "PYTHONPATH"
7912 (string-append (getcwd) "/build/lib:"
7913 (getenv "PYTHONPATH")))
7914 (invoke "py.test" "-v"))))))
7915 (native-inputs
7916 `(("python-flake8" ,python-flake8)
7917 ("python-mock" ,python-mock)
7918 ("python-pep8" ,python-pep8)
7919 ("python-pycodestyle" ,python-pycodestyle)
7920 ("python-pytest" ,python-pytest)))
7921 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7922 (synopsis "Polyfill package for Flake8 plugins")
7923 (description
7924 "This package that provides some compatibility helpers for Flake8
7925 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7926 (license license:expat)))
7927
7928 (define-public python2-flake8-polyfill
7929 (package-with-python2 python-flake8-polyfill))
7930
7931 (define-public python-mistune
7932 (package
7933 (name "python-mistune")
7934 (version "0.8.4")
7935 (source
7936 (origin
7937 (method url-fetch)
7938 (uri (pypi-uri "mistune" version))
7939 (sha256
7940 (base32
7941 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7942 (build-system python-build-system)
7943 (native-inputs
7944 `(("python-nose" ,python-nose)
7945 ("python-cython" ,python-cython)))
7946 (home-page "https://github.com/lepture/mistune")
7947 (synopsis "Markdown parser in pure Python")
7948 (description "This package provides a fast markdown parser in pure
7949 Python.")
7950 (license license:bsd-3)))
7951
7952 (define-public python2-mistune
7953 (package-with-python2 python-mistune))
7954
7955 (define-public python-markdown
7956 (package
7957 (name "python-markdown")
7958 (version "3.2.1")
7959 (source
7960 (origin
7961 (method url-fetch)
7962 (uri (pypi-uri "Markdown" version))
7963 (sha256
7964 (base32
7965 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7966 (build-system python-build-system)
7967 (native-inputs
7968 `(("python-nose" ,python-nose)
7969 ("python-pyyaml" ,python-pyyaml)))
7970 (home-page "https://python-markdown.github.io/")
7971 (synopsis "Python implementation of Markdown")
7972 (description
7973 "This package provides a Python implementation of John Gruber's
7974 Markdown. The library features international input, various Markdown
7975 extensions, and several HTML output formats. A command line wrapper
7976 markdown_py is also provided to convert Markdown files to HTML.")
7977 (properties `((python2-variant . ,(delay python2-markdown))))
7978 (license license:bsd-3)))
7979
7980 ;; Markdown 3.2 dropped support for Python 2.
7981 (define-public python2-markdown
7982 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7983 (package/inherit
7984 base
7985 (version "3.1.1")
7986 (source (origin
7987 (method url-fetch)
7988 (uri (pypi-uri "Markdown" version))
7989 (sha256
7990 (base32
7991 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7992
7993 (define-public python-ptyprocess
7994 (package
7995 (name "python-ptyprocess")
7996 (version "0.5.2")
7997 (source
7998 (origin
7999 (method url-fetch)
8000 (uri (pypi-uri "ptyprocess" version))
8001 (sha256
8002 (base32
8003 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
8004 (build-system python-build-system)
8005 (native-inputs
8006 `(("python-nose" ,python-nose)))
8007 (arguments
8008 `(#:phases
8009 (modify-phases %standard-phases
8010 (replace 'check
8011 (lambda _ (invoke "nosetests"))))))
8012 (home-page "https://github.com/pexpect/ptyprocess")
8013 (synopsis "Run a subprocess in a pseudo terminal")
8014 (description
8015 "This package provides a Python library used to launch a subprocess in a
8016 pseudo terminal (pty), and interact with both the process and its pty.")
8017 (license license:isc)))
8018
8019 (define-public python2-ptyprocess
8020 (package-with-python2 python-ptyprocess))
8021
8022 (define-public python-cram
8023 (package
8024 (name "python-cram")
8025 (version "0.7")
8026 (home-page "https://bitheap.org/cram/")
8027 (source (origin
8028 (method url-fetch)
8029 (uri (list (string-append home-page "cram-"
8030 version ".tar.gz")
8031 (pypi-uri "cram" version)))
8032 (sha256
8033 (base32
8034 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
8035 (arguments
8036 '(#:phases
8037 (modify-phases %standard-phases
8038 (add-after 'unpack 'patch-source
8039 (lambda _
8040 (substitute* (find-files "cram" ".*\\.py$")
8041 ;; Replace default shell path.
8042 (("/bin/sh") (which "sh")))
8043 (substitute* (find-files "tests" ".*\\.t$")
8044 (("md5") "md5sum")
8045 (("/bin/bash") (which "bash"))
8046 (("/bin/sh") (which "sh")))
8047 (substitute* "cram/_test.py"
8048 ;; This hack works around a bug triggered by substituting
8049 ;; the /bin/sh paths. "tests/usage.t" compares the output of
8050 ;; "cram -h", which breaks the output at 80 characters. This
8051 ;; causes the line showing the default shell to break into two
8052 ;; lines, but the test expects a single line...
8053 (("env\\['COLUMNS'\\] = '80'")
8054 "env['COLUMNS'] = '160'"))
8055
8056 (substitute* "Makefile"
8057 ;; Recent versions of python-coverage have caused the test
8058 ;; coverage to decrease (as of version 0.7). Allow that.
8059 (("--fail-under=100")
8060 "--fail-under=90"))
8061
8062 #t))
8063 (replace 'check
8064 ;; The test phase uses the built library and executable.
8065 (lambda* (#:key inputs outputs #:allow-other-keys)
8066 (add-installed-pythonpath inputs outputs)
8067 (setenv "PATH" (string-append (getenv "PATH") ":"
8068 (assoc-ref outputs "out") "/bin"))
8069 (invoke "make" "test"))))))
8070 (build-system python-build-system)
8071 (native-inputs
8072 `(("python-coverage" ,python-coverage)
8073 ("which" ,which)))
8074 (synopsis "Simple testing framework for command line applications")
8075 (description
8076 "Cram is a functional testing framework for command line applications.
8077 Cram tests look like snippets of interactive shell sessions. Cram runs each
8078 command and compares the command output in the test with the command’s actual
8079 output.")
8080 (license license:gpl2+)))
8081
8082 (define-public python2-cram
8083 (package-with-python2 python-cram))
8084
8085 (define-public python-straight-plugin
8086 (package
8087 (name "python-straight-plugin")
8088 (version "1.4.1")
8089 (source
8090 (origin
8091 (method url-fetch)
8092 (uri (pypi-uri "straight.plugin" version))
8093 (sha256
8094 (base32
8095 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
8096 (build-system python-build-system)
8097 (home-page "https://github.com/ironfroggy/straight.plugin")
8098 (synopsis "Simple namespaced plugin facility")
8099 (description "Straight Plugin provides a type of plugin you can create from
8100 almost any existing Python modules, and an easy way for outside developers to
8101 add functionality and customization to your projects with their own plugins.")
8102 (license license:expat)))
8103
8104 (define-public python2-straight-plugin
8105 (package-with-python2 python-straight-plugin))
8106
8107 (define-public python-fonttools
8108 (package
8109 (name "python-fonttools")
8110 (version "4.6.0")
8111 (source (origin
8112 (method url-fetch)
8113 (uri (pypi-uri "fonttools" version ".zip"))
8114 (sha256
8115 (base32
8116 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
8117 (build-system python-build-system)
8118 (native-inputs
8119 `(("unzip" ,unzip)
8120 ("python-pytest" ,python-pytest)
8121 ("python-pytest-runner" ,python-pytest-runner)))
8122 (home-page "https://github.com/fonttools/fonttools")
8123 (synopsis "Tools to manipulate font files")
8124 (description
8125 "FontTools/TTX is a library to manipulate font files from Python. It
8126 supports reading and writing of TrueType/OpenType fonts, reading and writing
8127 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
8128 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
8129 from an XML-based format.")
8130 (license license:expat)))
8131
8132 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
8133 (define-public python2-fonttools
8134 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
8135 (package/inherit
8136 base
8137 (version "3.44.0")
8138 (source (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "fonttools" version ".zip"))
8141 (sha256
8142 (base32
8143 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
8144
8145 (define-public python-ly
8146 (package
8147 (name "python-ly")
8148 (version "0.9.5")
8149 (source
8150 (origin
8151 (method url-fetch)
8152 (uri (pypi-uri name version))
8153 (sha256
8154 (base32
8155 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
8156 (build-system python-build-system)
8157 (arguments
8158 ;; FIXME: Some tests need network access.
8159 '(#:tests? #f))
8160 (synopsis "Tool and library for manipulating LilyPond files")
8161 (description "This package provides a Python library to parse, manipulate
8162 or create documents in LilyPond format. A command line program ly is also
8163 provided that can be used to do various manipulations with LilyPond files.")
8164 (home-page "https://pypi.org/project/python-ly/")
8165 (license license:gpl2+)))
8166
8167 (define-public python-appdirs
8168 (package
8169 (name "python-appdirs")
8170 (version "1.4.3")
8171 (source
8172 (origin
8173 (method url-fetch)
8174 (uri (pypi-uri "appdirs" version))
8175 (sha256
8176 (base32
8177 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
8178 (build-system python-build-system)
8179 (home-page "https://github.com/ActiveState/appdirs")
8180 (synopsis
8181 "Determine platform-specific dirs, e.g. a \"user data dir\"")
8182 (description
8183 "This module provides a portable way of finding out where user data
8184 should be stored on various operating systems.")
8185 (license license:expat)))
8186
8187 (define-public python2-appdirs
8188 (package-with-python2 python-appdirs))
8189
8190 (define-public python-llfuse
8191 (package
8192 (name "python-llfuse")
8193 (version "1.3.6")
8194 (source (origin
8195 (method url-fetch)
8196 (uri (pypi-uri "llfuse" version ".tar.bz2"))
8197 (sha256
8198 (base32
8199 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
8200 (build-system python-build-system)
8201 (inputs
8202 `(("fuse" ,fuse)
8203 ("attr" ,attr)))
8204 (native-inputs
8205 `(("pkg-config" ,pkg-config)))
8206 (synopsis "Python bindings for FUSE")
8207 (description
8208 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
8209 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
8210 (license license:lgpl2.0+)
8211 (properties `((python2-variant . ,(delay python2-llfuse))))))
8212
8213 (define-public python2-llfuse
8214 (package (inherit (package-with-python2
8215 (strip-python2-variant python-llfuse)))
8216 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
8217
8218 ;; For attic-0.16
8219 (define-public python-llfuse-0.41
8220 (package (inherit python-llfuse)
8221 (version "0.41.1")
8222 (source (origin
8223 (method url-fetch)
8224 (uri (string-append
8225 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8226 "llfuse-" version ".tar.bz2"))
8227 (sha256
8228 (base32
8229 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8230 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8231 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8232 (license (list license:expat license:lgpl2.0+))))
8233
8234 (define-public python-msgpack
8235 (package
8236 (name "python-msgpack")
8237 (version "1.0.0")
8238 (source (origin
8239 (method url-fetch)
8240 (uri (pypi-uri "msgpack" version))
8241 (sha256
8242 (base32
8243 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8244 (build-system python-build-system)
8245 (arguments
8246 `(#:modules ((guix build utils)
8247 (guix build python-build-system)
8248 (ice-9 ftw)
8249 (srfi srfi-1)
8250 (srfi srfi-26))
8251 #:phases
8252 (modify-phases %standard-phases
8253 (replace 'check
8254 (lambda _
8255 (let ((cwd (getcwd)))
8256 (setenv "PYTHONPATH"
8257 (string-append cwd "/build/"
8258 (find (cut string-prefix? "lib" <>)
8259 (scandir (string-append cwd "/build")))
8260 ":"
8261 (getenv "PYTHONPATH")))
8262 (invoke "pytest" "-v" "test")))))))
8263 (native-inputs
8264 `(("python-pytest" ,python-pytest)))
8265 (synopsis "MessagePack (de)serializer")
8266 (description "MessagePack is a fast, compact binary serialization format,
8267 suitable for similar data to JSON. This package provides CPython bindings for
8268 reading and writing MessagePack data.")
8269 (home-page "https://pypi.org/project/msgpack/")
8270 (license license:asl2.0)))
8271
8272 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8273 ;; release 0.5. Some packages like borg still call it by the old name for now.
8274 ;; <https://bugs.gnu.org/30662>
8275 (define-public python-msgpack-transitional
8276 (package
8277 (inherit python-msgpack)
8278 (name "python-msgpack-transitional")
8279 (version "0.5.6")
8280 (source (origin
8281 (method url-fetch)
8282 (uri (pypi-uri "msgpack" version))
8283 (sha256
8284 (base32
8285 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8286 (arguments
8287 (substitute-keyword-arguments (package-arguments python-msgpack)
8288 ((#:phases phases)
8289 `(modify-phases ,phases
8290 (add-after 'unpack 'configure-transitional
8291 (lambda _
8292 ;; Keep using the old name.
8293 (substitute* "setup.py"
8294 (("TRANSITIONAL = False")
8295 "TRANSITIONAL = 1"))
8296 #t))))))))
8297
8298 (define-public python2-msgpack
8299 (package-with-python2 python-msgpack))
8300
8301 (define-public python-netaddr
8302 (package
8303 (name "python-netaddr")
8304 (version "0.7.19")
8305 (source
8306 (origin
8307 (method url-fetch)
8308 (uri (pypi-uri "netaddr" version))
8309 (sha256
8310 (base32
8311 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8312 (build-system python-build-system)
8313 (arguments `(#:tests? #f)) ;; No tests.
8314 (home-page "https://github.com/drkjam/netaddr/")
8315 (synopsis "Pythonic manipulation of network addresses")
8316 (description
8317 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8318 and MAC network addresses.")
8319 (license license:bsd-3)))
8320
8321 (define-public python2-netaddr
8322 (package-with-python2 python-netaddr))
8323
8324 (define-public python2-pyroute2
8325 (package
8326 (name "python2-pyroute2")
8327 (version "0.5.6")
8328 (source
8329 (origin
8330 (method url-fetch)
8331 (uri (pypi-uri "pyroute2" version))
8332 (sha256
8333 (base32
8334 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8335 (build-system python-build-system)
8336 (arguments
8337 `(#:python ,python-2)) ;Python 3.x is not supported
8338 (home-page "https://github.com/svinota/pyroute2")
8339 (synopsis "Python netlink library")
8340 (description
8341 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8342 Supported netlink families and protocols include:
8343 @itemize
8344 @item rtnl, network settings - addresses, routes, traffic controls
8345 @item nfnetlink - netfilter API: ipset, nftables, ...
8346 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8347 @item devlink - manage and monitor devlink-enabled hardware
8348 @item generic - generic netlink families
8349 @itemize
8350 @item nl80211 - wireless functions API (basic support)
8351 @item taskstats - extended process statistics
8352 @item acpi_events - ACPI events monitoring
8353 @item thermal_events - thermal events monitoring
8354 @item VFS_DQUOT - disk quota events monitoring
8355 @end itemize
8356 @end itemize")
8357 (license license:gpl2+)))
8358
8359 (define-public python-wrapt
8360 (package
8361 (name "python-wrapt")
8362 (version "1.11.2")
8363 (source
8364 (origin
8365 (method url-fetch)
8366 (uri (pypi-uri "wrapt" version))
8367 (sha256
8368 (base32
8369 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8370 (build-system python-build-system)
8371 (arguments
8372 ;; Tests are not included in the tarball, they are only available in the
8373 ;; git repository.
8374 `(#:tests? #f))
8375 (home-page "https://github.com/GrahamDumpleton/wrapt")
8376 (synopsis "Module for decorators, wrappers and monkey patching")
8377 (description
8378 "The aim of the wrapt module is to provide a transparent object proxy for
8379 Python, which can be used as the basis for the construction of function
8380 wrappers and decorator functions.")
8381 (license license:bsd-2)))
8382
8383 (define-public python2-wrapt
8384 (package-with-python2 python-wrapt))
8385
8386 (define-public python-xlrd
8387 (package
8388 (name "python-xlrd")
8389 (version "1.2.0")
8390 (source (origin
8391 (method url-fetch)
8392 (uri (pypi-uri "xlrd" version))
8393 (sha256
8394 (base32
8395 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8396 (build-system python-build-system)
8397 (arguments
8398 `(#:phases
8399 (modify-phases %standard-phases
8400 ;; Some tests depend on writing a temporary file to the user's home
8401 ;; directory.
8402 (add-after 'unpack 'fix-tests
8403 (lambda _
8404 (delete-file "tests/test_open_workbook.py")
8405 #t)))))
8406 (home-page "http://www.python-excel.org/")
8407 (synopsis "Library for extracting data from Excel files")
8408 (description "This package provides a library to extract data from
8409 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8410 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8411 Unicode-aware. It is not intended as an end-user tool.")
8412 (license license:bsd-3)))
8413
8414 (define-public python2-xlrd
8415 (package-with-python2 python-xlrd))
8416
8417 (define-public python-prettytable
8418 (package
8419 (name "python-prettytable")
8420 (version "0.7.2")
8421 (source
8422 (origin
8423 (method url-fetch)
8424 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8425 (sha256
8426 (base32
8427 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8428 (build-system python-build-system)
8429 (home-page "https://code.google.com/archive/p/prettytable/")
8430 (synopsis "Display tabular data in an ASCII table format")
8431 (description
8432 "A library designed to represent tabular data in visually appealing ASCII
8433 tables. PrettyTable allows for selection of which columns are to be printed,
8434 independent alignment of columns (left or right justified or centred) and
8435 printing of sub-tables by specifying a row range.")
8436 (license license:bsd-3)))
8437
8438 (define-public python2-prettytable
8439 (package-with-python2 python-prettytable))
8440
8441 (define-public python-tables
8442 (package
8443 (name "python-tables")
8444 (version "3.6.1")
8445 (source
8446 (origin
8447 (method url-fetch)
8448 (uri (pypi-uri "tables" version))
8449 (sha256
8450 (base32
8451 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8452 (modules '((guix build utils)))
8453 (snippet
8454 '(begin
8455 ;; Remove pre-compiled .pyc files from source.
8456 (for-each delete-file-recursively
8457 (find-files "." "__pycache__" #:directories? #t))
8458 (for-each delete-file (find-files "." "\\.pyc$"))
8459 #t))))
8460 (build-system python-build-system)
8461 (arguments
8462 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8463 ;; or "check", so we must override the build and check phases.
8464 #:phases
8465 (modify-phases %standard-phases
8466 (add-after 'unpack 'use-gcc
8467 (lambda _
8468 (substitute* "setup.py"
8469 (("^( +)compiler = new_compiler\\(\\)" line indent)
8470 (string-append line
8471 "\n"
8472 indent
8473 "compiler.set_executables(compiler='gcc',"
8474 "compiler_so='gcc',"
8475 "linker_exe='gcc',"
8476 "linker_so='gcc -shared')")))
8477 #t))
8478 (add-after 'unpack 'disable-tuning
8479 (lambda _
8480 (substitute* "setup.py"
8481 (("cpu_flags = .*")
8482 "cpu_flags = ['sse2']\n"))
8483 #t))
8484 (replace 'build
8485 (lambda* (#:key inputs #:allow-other-keys)
8486 (invoke "python" "setup.py" "build"
8487 (string-append "--hdf5="
8488 (assoc-ref inputs "hdf5")))))
8489 (replace 'check
8490 (lambda* (#:key inputs #:allow-other-keys)
8491 (invoke "python" "setup.py" "check"
8492 (string-append "--hdf5="
8493 (assoc-ref inputs "hdf5"))))))))
8494 (propagated-inputs
8495 `(("python-numexpr" ,python-numexpr)
8496 ("python-numpy" ,python-numpy)))
8497 (native-inputs
8498 `(("python-cython" ,python-cython)
8499 ("pkg-config" ,pkg-config)))
8500 (inputs
8501 `(("hdf5" ,hdf5-1.10)
8502 ("bzip2" ,bzip2)
8503 ("zlib" ,zlib)))
8504 (home-page "https://www.pytables.org/")
8505 (synopsis "Hierarchical datasets for Python")
8506 (description "PyTables is a package for managing hierarchical datasets and
8507 designed to efficiently cope with extremely large amounts of data.")
8508 (license license:bsd-3)))
8509
8510 (define-public python2-tables
8511 (package-with-python2 python-tables))
8512
8513 (define-public python-pytest-black
8514 (package
8515 (name "python-pytest-black")
8516 (version "0.3.8")
8517 (source
8518 (origin
8519 (method url-fetch)
8520 (uri (pypi-uri "pytest-black" version))
8521 (sha256
8522 (base32
8523 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8524 (build-system python-build-system)
8525 (propagated-inputs
8526 `(("python-pytest" ,python-pytest)
8527 ("python-black" ,python-black)
8528 ("python-toml" ,python-toml)))
8529 (native-inputs
8530 `(("python-setuptools-scm" ,python-setuptools-scm)))
8531 (home-page "https://github.com/shopkeep/pytest-black")
8532 (synopsis "Pytest plugin to enable format checking with black")
8533 (description
8534 "This package provides a pytest plugin to enable format checking with the
8535 Python code formatter \"black\".")
8536 (license license:expat)))
8537
8538 (define-public python-get-version
8539 (package
8540 (name "python-get-version")
8541 (version "2.1")
8542 (source
8543 (origin
8544 (method url-fetch)
8545 (uri (pypi-uri "get_version" version))
8546 (sha256
8547 (base32
8548 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8549 (build-system python-build-system)
8550 (propagated-inputs
8551 `(("python-pygments" ,python-pygments)
8552 ("python-pytest" ,python-pytest)
8553 ("python-pytest-black" ,python-pytest-black)
8554 ("python-pytest-cov" ,python-pytest-cov)
8555 ("python-setuptools" ,python-setuptools)
8556 ("python-testpath" ,python-testpath)))
8557 (home-page "https://github.com/flying-sheep/get_version")
8558 (synopsis "Version helper in the spirit of versioneer")
8559 (description
8560 "This package provides a version helper that lets you automatically use
8561 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8562 also supports getting the version from Python source distributions or, once
8563 your package is installed, via @code{pkg_resources} (part of
8564 @code{setuptools}).")
8565 (license license:gpl3+)))
8566
8567 (define-public python-legacy-api-wrap
8568 (package
8569 (name "python-legacy-api-wrap")
8570 (version "1.2")
8571 (source
8572 (origin
8573 (method url-fetch)
8574 (uri (pypi-uri "legacy-api-wrap" version))
8575 (sha256
8576 (base32
8577 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8578 (build-system python-build-system)
8579 (propagated-inputs
8580 `(("python-get-version" ,python-get-version)
8581 ("python-pytest" ,python-pytest)
8582 ("python-pytest-black" ,python-pytest-black)
8583 ("python-pytest-cov" ,python-pytest-cov)
8584 ("python-setuptools" ,python-setuptools)))
8585 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8586 (synopsis "Legacy API wrapper")
8587 (description "This module defines a decorator to wrap legacy APIs. The
8588 primary use case is APIs defined before keyword-only parameters existed.")
8589 (license license:gpl3+)))
8590
8591 (define-public python-pyasn1
8592 (package
8593 (name "python-pyasn1")
8594 (version "0.4.8")
8595 (source
8596 (origin
8597 (method url-fetch)
8598 (uri (pypi-uri "pyasn1" version))
8599 (sha256
8600 (base32
8601 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8602 (build-system python-build-system)
8603 (home-page "http://pyasn1.sourceforge.net/")
8604 (synopsis "ASN.1 types and codecs")
8605 (description
8606 "This is an implementation of ASN.1 types and codecs in Python. It is
8607 suitable for a wide range of protocols based on the ASN.1 specification.")
8608 (license license:bsd-2)))
8609
8610 (define-public python2-pyasn1
8611 (package-with-python2 python-pyasn1))
8612
8613 (define-public python-pyasn1-modules
8614 (package
8615 (name "python-pyasn1-modules")
8616 (version "0.2.2")
8617 (source
8618 (origin
8619 (method url-fetch)
8620 (uri (pypi-uri "pyasn1-modules" version))
8621 (sha256
8622 (base32
8623 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8624 (build-system python-build-system)
8625 (propagated-inputs
8626 `(("python-pyasn1" ,python-pyasn1)))
8627 (home-page "https://sourceforge.net/projects/pyasn1/")
8628 (synopsis "ASN.1 codec implementations")
8629 (description
8630 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8631 implementations of ASN.1-based codecs and protocols.")
8632 (license license:bsd-3)))
8633
8634 (define-public python2-pyasn1-modules
8635 (package-with-python2 python-pyasn1-modules))
8636
8637 (define-public python-ipaddress
8638 (package
8639 (name "python-ipaddress")
8640 (version "1.0.22")
8641 (source (origin
8642 (method url-fetch)
8643 (uri (pypi-uri "ipaddress" version))
8644 (sha256
8645 (base32
8646 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8647 (build-system python-build-system)
8648 (home-page "https://github.com/phihag/ipaddress")
8649 (synopsis "IP address manipulation library")
8650 (description
8651 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8652 in Python. This library is used to create, poke at, and manipulate IPv4 and
8653 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8654 module to older versions of Python.")
8655 (license license:psfl)))
8656
8657 (define-public python2-ipaddress
8658 (package-with-python2 python-ipaddress))
8659
8660 (define-public python2-ipaddr
8661 (package
8662 (name "python2-ipaddr")
8663 (version "2.1.11")
8664 (source
8665 (origin
8666 (method url-fetch)
8667 (uri (pypi-uri "ipaddr" version))
8668 (sha256
8669 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8670 (build-system python-build-system)
8671 (arguments
8672 `(#:python ,python-2 ;version 2 only
8673 #:phases
8674 (modify-phases %standard-phases
8675 (replace 'check
8676 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8677 (home-page "https://github.com/google/ipaddr-py")
8678 (synopsis "IP address manipulation library")
8679 (description
8680 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8681 IPv6 addresses and networks.
8682
8683 For new implementations you may prefer to use the standard module
8684 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8685 versions of Python.")
8686 (license license:asl2.0)))
8687
8688 (define-public python-idna
8689 (package
8690 (name "python-idna")
8691 (version "2.9")
8692 (source
8693 (origin
8694 (method url-fetch)
8695 (uri (pypi-uri "idna" version))
8696 (sha256
8697 (base32
8698 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
8699 (build-system python-build-system)
8700 (home-page "https://github.com/kjd/idna")
8701 (synopsis "Internationalized domain names in applications")
8702 (description
8703 "This is a library to support the Internationalised Domain Names in
8704 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8705 protocol is often referred to as “IDNA2008” and can produce different results
8706 from the earlier standard from 2003. The library is also intended to act as a
8707 suitable drop-in replacement for the “encodings.idna” module that comes with
8708 the Python standard library but currently only supports the older 2003
8709 specification.")
8710 (license license:bsd-4)))
8711
8712 (define-public python-idna-2.7
8713 (package (inherit python-idna)
8714 (version "2.7")
8715 (source (origin
8716 (method url-fetch)
8717 (uri (pypi-uri "idna" version))
8718 (sha256
8719 (base32
8720 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8721
8722
8723 (define-public python2-idna
8724 (package-with-python2 python-idna))
8725
8726 (define-public python-idna-ssl
8727 (package
8728 (name "python-idna-ssl")
8729 (version "1.0.1")
8730 (source
8731 (origin
8732 (method url-fetch)
8733 (uri (pypi-uri "idna-ssl" version))
8734 (sha256
8735 (base32
8736 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8737 (build-system python-build-system)
8738 (arguments
8739 `(#:tests? #f)) ;circular dependency with python-aiohttp
8740 (home-page "https://github.com/aio-libs/idna-ssl")
8741 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8742 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8743 domains support.")
8744 (license license:expat)))
8745
8746 (define-public python-pretend
8747 (package
8748 (name "python-pretend")
8749 (version "1.0.9")
8750 (source
8751 (origin
8752 (method url-fetch)
8753 (uri (pypi-uri "pretend" version))
8754 (sha256
8755 (base32
8756 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8757 (build-system python-build-system)
8758 (home-page "https://github.com/alex/pretend")
8759 (synopsis "Library for stubbing in Python")
8760 (description
8761 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8762 technique for writing tests. You may hear the term mixed up with mocks,
8763 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8764 responses, rather than doing any computation.")
8765 (license license:bsd-3)))
8766
8767 (define-public python2-pretend
8768 (package-with-python2 python-pretend))
8769
8770 (define-public python-pip
8771 (package
8772 (name "python-pip")
8773 (version "20.0.2")
8774 (source
8775 (origin
8776 (method url-fetch)
8777 (uri (pypi-uri "pip" version))
8778 (sha256
8779 (base32
8780 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8781 (build-system python-build-system)
8782 (arguments
8783 '(#:tests? #f)) ; there are no tests in the pypi archive.
8784 (home-page "https://pip.pypa.io/")
8785 (synopsis "Package manager for Python software")
8786 (description
8787 "Pip is a package manager for Python software, that finds packages on the
8788 Python Package Index (PyPI).")
8789 (license license:expat)))
8790
8791 (define-public python2-pip
8792 (package-with-python2 python-pip))
8793
8794 (define-public python-tlsh
8795 (package
8796 (name "python-tlsh")
8797 (version "3.4.5")
8798 (home-page "https://github.com/trendmicro/tlsh")
8799 (source
8800 (origin
8801 (method git-fetch)
8802 (uri (git-reference
8803 (url "https://github.com/trendmicro/tlsh")
8804 (commit (string-append "v" version))))
8805 (file-name (git-file-name name version))
8806 (sha256
8807 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8808 (build-system cmake-build-system)
8809 (arguments
8810 '(#:out-of-source? #f
8811 #:phases (modify-phases %standard-phases
8812 (replace
8813 'install
8814 (lambda* (#:key outputs #:allow-other-keys)
8815 ;; Build and install the Python bindings. The underlying
8816 ;; C++ library is apparently not meant to be installed.
8817 (let ((out (assoc-ref outputs "out")))
8818 (with-directory-excursion "py_ext"
8819 (and (system* "python" "setup.py" "build")
8820 (system* "python" "setup.py" "install"
8821 (string-append "--prefix=" out))))))))))
8822 (inputs `(("python" ,python-wrapper))) ;for the bindings
8823 (synopsis "Fuzzy matching library for Python")
8824 (description
8825 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8826 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8827 value which can be used for similarity comparisons. Similar objects have
8828 similar hash values, which allows for the detection of similar objects by
8829 comparing their hash values. The byte stream should have a sufficient amount
8830 of complexity; for example, a byte stream of identical bytes will not generate
8831 a hash value.")
8832 (license license:asl2.0)))
8833
8834 (define-public python2-tlsh
8835 (package
8836 (inherit python-tlsh)
8837 (name "python2-tlsh")
8838 (inputs `(("python" ,python-2)))))
8839
8840 (define-public python-termcolor
8841 (package
8842 (name "python-termcolor")
8843 (version "1.1.0")
8844 (source
8845 (origin
8846 (method url-fetch)
8847 (uri (pypi-uri "termcolor" version))
8848 (sha256
8849 (base32
8850 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8851 (build-system python-build-system)
8852 (arguments
8853 ;; There are no tests.
8854 `(#:tests? #f))
8855 (home-page "https://pypi.org/project/termcolor/")
8856 (synopsis "ANSII Color formatting for terminal output")
8857 (description
8858 "This package provides ANSII Color formatting for output in terminals.")
8859 (license license:expat)))
8860
8861 (define-public python2-termcolor
8862 (package-with-python2 python-termcolor))
8863
8864 (define-public python-terminaltables
8865 (package
8866 (name "python-terminaltables")
8867 (version "3.1.0")
8868 (source
8869 (origin
8870 (method url-fetch)
8871 (uri (pypi-uri "terminaltables" version))
8872 (sha256
8873 (base32
8874 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
8875 (build-system python-build-system)
8876 (home-page "https://github.com/Robpol86/terminaltables")
8877 (synopsis
8878 "Generate simple tables in terminals from a nested list of strings")
8879 (description
8880 "This package makes it easy to draw tables in terminal/console
8881 applications from a list of lists of strings. It supports multi-line rows.")
8882 (license license:expat)))
8883
8884 (define-public python-libarchive-c
8885 (package
8886 (name "python-libarchive-c")
8887 (version "2.9")
8888 (source (origin
8889 (method url-fetch)
8890 (uri (pypi-uri "libarchive-c" version))
8891 (sha256
8892 (base32
8893 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8894 (build-system python-build-system)
8895 (arguments
8896 '(#:phases (modify-phases %standard-phases
8897 (add-before
8898 'build 'reference-libarchive
8899 (lambda* (#:key inputs #:allow-other-keys)
8900 ;; Retain the absolute file name of libarchive.so.
8901 (let ((libarchive (assoc-ref inputs "libarchive")))
8902 (substitute* "libarchive/ffi.py"
8903 (("find_library\\('archive'\\)")
8904 (string-append "'" libarchive
8905 "/lib/libarchive.so'"))))))
8906 (replace 'check
8907 (lambda _ (invoke "pytest" "-vv"))))))
8908 (native-inputs
8909 `(("python-mock" ,python-mock)
8910 ("python-pytest" ,python-pytest)))
8911 (inputs
8912 `(("libarchive" ,libarchive)))
8913 (home-page "https://github.com/Changaco/python-libarchive-c")
8914 (synopsis "Python interface to libarchive")
8915 (description
8916 "This package provides Python bindings to libarchive, a C library to
8917 access possibly compressed archives in many different formats. It uses
8918 Python's @code{ctypes} foreign function interface (FFI).")
8919 (license license:lgpl2.0+)))
8920
8921 (define-public python2-libarchive-c
8922 (package-with-python2 python-libarchive-c))
8923
8924 (define-public python-file
8925 (package
8926 (inherit file)
8927 (name "python-file")
8928 (build-system python-build-system)
8929 (arguments
8930 '(#:tests? #f ;no tests
8931 #:configure-flags '("--single-version-externally-managed" "--root=/")
8932 #:phases (modify-phases %standard-phases
8933 (add-before 'build 'change-directory
8934 (lambda _
8935 (chdir "python")
8936 #t))
8937 (add-before 'build 'set-library-file-name
8938 (lambda* (#:key inputs #:allow-other-keys)
8939 (let ((file (assoc-ref inputs "file")))
8940 (substitute* "magic.py"
8941 (("find_library\\('magic'\\)")
8942 (string-append "'" file "/lib/libmagic.so'")))
8943 #t))))))
8944 (inputs `(("file" ,file)))
8945 (native-inputs (if (%current-target-system)
8946 `(("self" ,this-package))
8947 '()))
8948 (synopsis "Python bindings to the libmagic file type guesser. Note that
8949 this module and the python-magic module both provide a \"magic.py\" file;
8950 these two modules, which are different and were developed separately, both
8951 serve the same purpose: provide Python bindings for libmagic.")))
8952
8953 (define-public python2-file
8954 (package-with-python2 python-file))
8955
8956 (define-public python-debian
8957 (package
8958 (name "python-debian")
8959 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8960 (version "0.1.36")
8961 (source
8962 (origin
8963 ;; Use git-fetch, as pypi doesn't include test suite.
8964 (method git-fetch)
8965 (uri (git-reference
8966 (url home-page)
8967 (commit version)))
8968 (file-name (git-file-name name version))
8969 (sha256
8970 (base32
8971 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8972 (build-system python-build-system)
8973 (arguments
8974 `(#:phases (modify-phases %standard-phases
8975 (add-after 'unpack 'remove-debian-specific-tests
8976 ;; python-apt, apt and dpkg are not yet available in guix,
8977 ;; and these tests heavily depend on them.
8978 (lambda _
8979 (delete-file "lib/debian/tests/test_deb822.py")
8980 (delete-file "lib/debian/tests/test_debfile.py")
8981 #t)))))
8982 (propagated-inputs
8983 `(("python-six" ,python-six)
8984 ("python-chardet" ,python-chardet)))
8985 (synopsis "Debian package related modules")
8986 (description
8987 ;; XXX: Use @enumerate instead of @itemize to work around
8988 ;; <http://bugs.gnu.org/21772>.
8989 "This package provides Python modules that abstract many formats of
8990 Debian-related files, such as:
8991
8992 @enumerate
8993 @item Debtags information;
8994 @item @file{debian/changelog} files;
8995 @item packages files, pdiffs;
8996 @item control files of single or multiple RFC822-style paragraphs---e.g.
8997 @file{debian/control}, @file{.changes}, @file{.dsc};
8998 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8999 contained files and meta-information.
9000 @end enumerate\n")
9001
9002 ;; Modules are either GPLv2+ or GPLv3+.
9003 (license license:gpl3+)))
9004
9005 (define-public python-nbformat
9006 (package
9007 (name "python-nbformat")
9008 (version "4.4.0")
9009 (source
9010 (origin
9011 (method url-fetch)
9012 (uri (pypi-uri "nbformat" version))
9013 (sha256
9014 (base32
9015 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
9016 (build-system python-build-system)
9017 (arguments `(#:tests? #f)) ; no test target
9018 (propagated-inputs
9019 `(("python-ipython-genutils" ,python-ipython-genutils)
9020 ("python-jsonschema" ,python-jsonschema)
9021 ("python-jupyter-core" ,python-jupyter-core)
9022 ("python-traitlets" ,python-traitlets)))
9023 (home-page "http://jupyter.org")
9024 (synopsis "Jupyter Notebook format")
9025 (description "This package provides the reference implementation of the
9026 Jupyter Notebook format and Python APIs for working with notebooks.")
9027 (license license:bsd-3)))
9028
9029 (define-public python2-nbformat
9030 (package-with-python2 python-nbformat))
9031
9032 (define-public python-bleach
9033 (package
9034 (name "python-bleach")
9035 (version "3.1.3")
9036 (source
9037 (origin
9038 (method url-fetch)
9039 (uri (pypi-uri "bleach" version))
9040 (sha256
9041 (base32
9042 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
9043 (build-system python-build-system)
9044 (propagated-inputs
9045 `(("python-webencodings" ,python-webencodings)
9046 ("python-six" ,python-six)))
9047 (native-inputs
9048 `(("python-datrie" ,python-datrie)
9049 ("python-genshi" ,python-genshi)
9050 ("python-lxml" ,python-lxml)
9051 ("python-pytest" ,python-pytest)))
9052 (home-page "https://github.com/mozilla/bleach")
9053 (synopsis "Whitelist-based HTML-sanitizing tool")
9054 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
9055 (license license:asl2.0)))
9056
9057 (define-public python2-bleach
9058 (package-with-python2 python-bleach))
9059
9060 (define-public python-entrypoints
9061 (package
9062 (name "python-entrypoints")
9063 (version "0.3")
9064 (source
9065 (origin
9066 (method url-fetch)
9067 (uri (pypi-uri "entrypoints" version))
9068 (sha256
9069 (base32
9070 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
9071 (build-system python-build-system)
9072 ;; The package does not come with a setup.py file, so we have to generate
9073 ;; one ourselves.
9074 (arguments
9075 `(#:tests? #f
9076 #:phases
9077 (modify-phases %standard-phases
9078 (add-after 'unpack 'create-setup.py
9079 (lambda _
9080 (call-with-output-file "setup.py"
9081 (lambda (port)
9082 (format port "\
9083 from setuptools import setup
9084 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
9085 " ,version))))))))
9086 (home-page "https://github.com/takluyver/entrypoints")
9087 (synopsis "Discover and load entry points from installed Python packages")
9088 (description "Entry points are a way for Python packages to advertise
9089 objects with some common interface. The most common examples are
9090 @code{console_scripts} entry points, which define shell commands by
9091 identifying a Python function to run. The @code{entrypoints} module contains
9092 functions to find and load entry points.")
9093 (license license:expat)))
9094
9095 (define-public python2-entrypoints
9096 (package-with-python2 python-entrypoints))
9097
9098 (define-public python-epc
9099 (package
9100 (name "python-epc")
9101 (version "0.0.5")
9102 (source
9103 (origin
9104 (method url-fetch)
9105 (uri (pypi-uri "epc" version))
9106 (sha256
9107 (base32
9108 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
9109 (build-system python-build-system)
9110 (propagated-inputs
9111 `(("python-sexpdata" ,python-sexpdata)))
9112 (native-inputs
9113 `(("python-nose" ,python-nose)))
9114 (home-page "https://github.com/tkf/python-epc")
9115 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
9116 (description
9117 "Python-EPC can call elisp functions from Python and Python functions
9118 from elisp.")
9119 (license license:gpl3)))
9120
9121 (define-public python-nbconvert
9122 (package
9123 (name "python-nbconvert")
9124 (version "5.0.0b1")
9125 (source
9126 (origin
9127 (method url-fetch)
9128 (uri (pypi-uri "nbconvert" version))
9129 (sha256
9130 (base32
9131 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
9132 (build-system python-build-system)
9133 (arguments
9134 `(;; The "bdist_egg" target is disabled by default, causing the installation
9135 ;; to fail.
9136 #:configure-flags (list "bdist_egg")
9137 ;; FIXME: 5 failures, 40 errors.
9138 #:tests? #f))
9139 ;; #:phases
9140 ;; (modify-phases %standard-phases
9141 ;; (replace 'check
9142 ;; (lambda _
9143 ;; (zero? (system* "py.test" "-v")))))
9144 (native-inputs
9145 `(("python-pytest" ,python-pytest)))
9146 (propagated-inputs
9147 `(("python-bleach" ,python-bleach)
9148 ("python-entrypoints" ,python-entrypoints)
9149 ("python-jinja2" ,python-jinja2)
9150 ("python-jupyter-core" ,python-jupyter-core)
9151 ("python-mistune" ,python-mistune)
9152 ("python-nbformat" ,python-nbformat)
9153 ("python-pygments" ,python-pygments)
9154 ("python-traitlets" ,python-traitlets)))
9155 (home-page "http://jupyter.org")
9156 (synopsis "Converting Jupyter Notebooks")
9157 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
9158 notebooks to various other formats via Jinja templates. It allows you to
9159 convert an @code{.ipynb} notebook file into various static formats including:
9160
9161 @enumerate
9162 @item HTML
9163 @item LaTeX
9164 @item PDF
9165 @item Reveal JS
9166 @item Markdown (md)
9167 @item ReStructured Text (rst)
9168 @item executable script
9169 @end enumerate\n")
9170 (license license:bsd-3)))
9171
9172 (define-public python2-nbconvert
9173 (package-with-python2 python-nbconvert))
9174
9175 (define-public python-notebook
9176 (package
9177 (name "python-notebook")
9178 (version "5.7.4")
9179 (source (origin
9180 (method url-fetch)
9181 (uri (pypi-uri "notebook" version))
9182 (sha256
9183 (base32
9184 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
9185 (build-system python-build-system)
9186 (arguments
9187 `(#:phases
9188 (modify-phases %standard-phases
9189 (replace 'check
9190 (lambda _
9191 ;; These tests require a browser
9192 (delete-file-recursively "notebook/tests/selenium")
9193 ;; Some tests need HOME
9194 (setenv "HOME" "/tmp")
9195 ;; This file contains "warningfilters", which are not supported
9196 ;; by this version of nose.
9197 (delete-file "setup.cfg")
9198 (with-directory-excursion "/tmp"
9199 (invoke "nosetests" "-v"))
9200 #t)))))
9201 (propagated-inputs
9202 `(("python-jupyter-core" ,python-jupyter-core)
9203 ("python-nbformat" ,python-nbformat)
9204 ("python-nbconvert" ,python-nbconvert)
9205 ("python-prometheus-client" ,python-prometheus-client)
9206 ("python-send2trash" ,python-send2trash)
9207 ("python-terminado" ,python-terminado)))
9208 (native-inputs
9209 `(("python-nose" ,python-nose)
9210 ("python-sphinx" ,python-sphinx)
9211 ("python-requests" ,python-requests)))
9212 (home-page "http://jupyter.org/")
9213 (synopsis "Web-based notebook environment for interactive computing")
9214 (description
9215 "The Jupyter HTML notebook is a web-based notebook environment for
9216 interactive computing.")
9217 (properties `((python2-variant . ,(delay python2-notebook))))
9218 (license license:bsd-3)))
9219
9220 (define-public python2-notebook
9221 (let ((base (package-with-python2
9222 (strip-python2-variant python-notebook))))
9223 (package (inherit base)
9224 (native-inputs
9225 `(("python2-mock" ,python2-mock)
9226 ,@(package-native-inputs base)))
9227 (arguments
9228 (substitute-keyword-arguments (package-arguments base)
9229 ((#:phases phases)
9230 `(modify-phases ,phases
9231 (add-before 'check 'disable-test-case
9232 ;; The test requires network access to localhost. Curiously it
9233 ;; fails with Python 2 only. Simply make the test-case return
9234 ;; immediately.
9235 (lambda _
9236 (substitute*
9237 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
9238 (("formats = self.nbconvert_api") "return #")))))))))))
9239
9240 (define-public python-widgetsnbextension
9241 (package
9242 (name "python-widgetsnbextension")
9243 (version "3.5.1")
9244 (source
9245 (origin
9246 (method url-fetch)
9247 (uri (pypi-uri "widgetsnbextension" version))
9248 (sha256
9249 (base32
9250 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9251 (build-system python-build-system)
9252 (propagated-inputs
9253 `(("python-ipykernel" ,python-ipykernel)
9254 ("python-notebook" ,python-notebook)))
9255 (native-inputs
9256 `(("python-certifi" ,python-certifi)
9257 ("python-nose" ,python-nose)))
9258 (home-page "https://ipython.org")
9259 (synopsis "IPython HTML widgets for Jupyter")
9260 (description "This package provides interactive HTML widgets for Jupyter
9261 notebooks.")
9262 (license license:bsd-3)))
9263
9264 (define-public python2-widgetsnbextension
9265 (package-with-python2 python-widgetsnbextension))
9266
9267 (define-public python-ipywidgets
9268 (package
9269 (name "python-ipywidgets")
9270 (version "7.5.1")
9271 (source
9272 (origin
9273 (method url-fetch)
9274 (uri (pypi-uri "ipywidgets" version))
9275 (sha256
9276 (base32
9277 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9278 (build-system python-build-system)
9279 (propagated-inputs
9280 `(("python-ipython" ,python-ipython)
9281 ("python-traitlets" ,python-traitlets)
9282 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9283 (native-inputs
9284 `(("python-nose" ,python-nose)
9285 ("python-pytest" ,python-pytest)))
9286 (home-page "https://ipython.org")
9287 (synopsis "IPython HTML widgets for Jupyter")
9288 (description "Ipywidgets are interactive HTML widgets for Jupyter
9289 notebooks and the IPython kernel. Notebooks come alive when interactive
9290 widgets are used. Users gain control of their data and can visualize changes
9291 in the data.")
9292 (license license:bsd-3)))
9293
9294 (define-public python2-ipywidgets
9295 (package-with-python2 python-ipywidgets))
9296
9297 (define-public python-jupyter-console
9298 (package
9299 (name "python-jupyter-console")
9300 (version "6.1.0")
9301 (source
9302 (origin
9303 (method url-fetch)
9304 (uri (pypi-uri "jupyter_console" version))
9305 (sha256
9306 (base32
9307 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9308 (build-system python-build-system)
9309 (propagated-inputs
9310 `(("python-ipykernel" ,python-ipykernel)
9311 ("python-jupyter-client" ,python-jupyter-client)
9312 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9313 ("python-pygments" ,python-pygments)))
9314 (native-inputs
9315 `(("python-nose" ,python-nose)))
9316 (home-page "https://jupyter.org")
9317 (synopsis "Jupyter terminal console")
9318 (description "This package provides a terminal-based console frontend for
9319 Jupyter kernels. It also allows for console-based interaction with non-Python
9320 Jupyter kernels such as IJulia and IRKernel.")
9321 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9322 (license license:bsd-3)))
9323
9324 (define-public python2-jupyter-console
9325 (package
9326 (name "python2-jupyter-console")
9327 (version "5.2.0")
9328 (source
9329 (origin
9330 (method url-fetch)
9331 (uri (pypi-uri "jupyter_console" version))
9332 (sha256
9333 (base32
9334 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9335 (build-system python-build-system)
9336 (arguments
9337 `(#:python ,python-2
9338 #:tests? #f)) ; Tests only run in a TTY.
9339 (propagated-inputs
9340 `(("python2-ipykernel" ,python2-ipykernel)
9341 ("python2-jupyter-client" ,python2-jupyter-client)
9342 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9343 ("python2-pygments" ,python2-pygments)))
9344 (native-inputs
9345 `(("python2-nose" ,python2-nose)))
9346 (home-page "https://jupyter.org")
9347 (synopsis "Jupyter terminal console")
9348 (description "This package provides a terminal-based console frontend for
9349 Jupyter kernels. It also allows for console-based interaction with non-Python
9350 Jupyter kernels such as IJulia and IRKernel.")
9351 (license license:bsd-3)))
9352
9353 ;; The python-ipython and python-jupyter-console require each other. To get
9354 ;; the functionality in both packages working, strip down the
9355 ;; python-jupyter-console package when using it as an input to python-ipython.
9356 (define python-jupyter-console-minimal
9357 (package
9358 (inherit python-jupyter-console)
9359 (name "python-jupyter-console-minimal")
9360 (arguments
9361 (substitute-keyword-arguments
9362 (package-arguments python-jupyter-console)
9363 ((#:phases phases)
9364 `(modify-phases ,phases
9365 (add-after 'install 'delete-bin
9366 (lambda* (#:key outputs #:allow-other-keys)
9367 ;; Delete the bin files, to avoid conflicts in profiles
9368 ;; where python-ipython and python-jupyter-console are
9369 ;; both present.
9370 (delete-file-recursively
9371 (string-append
9372 (assoc-ref outputs "out") "/bin"))))))))
9373 ;; Remove the python-ipython propagated input, to avoid the cycle
9374 (propagated-inputs
9375 (alist-delete
9376 "python-ipython"
9377 (package-propagated-inputs python-jupyter-console)))))
9378
9379 (define-public python-qtconsole
9380 (package
9381 (name "python-qtconsole")
9382 (version "4.4.3")
9383 (source
9384 (origin
9385 (method url-fetch)
9386 (uri (pypi-uri "qtconsole" version))
9387 (sha256
9388 (base32
9389 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9390 (build-system python-build-system)
9391 (arguments
9392 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9393 ;; but we only have the LTS version 5.x. This means that there might be
9394 ;; runtime errors, but since this is a dependency of the Jupyter package,
9395 ;; and Jupyter can be used without the qtconsole we can overlook this for
9396 ;; now.
9397 `(#:tests? #f
9398 #:phases
9399 (modify-phases %standard-phases
9400 (add-before 'check 'pre-check
9401 (lambda _
9402 (setenv "QT_QPA_PLATFORM" "offscreen")
9403 #t)))))
9404 (propagated-inputs
9405 `(("python-ipykernel" ,python-ipykernel)
9406 ("python-ipython" ,python-ipython)))
9407 (native-inputs
9408 `(("python-pytest" ,python-pytest)))
9409 (home-page "http://jupyter.org")
9410 (synopsis "Jupyter Qt console")
9411 (description "This package provides a Qt-based console for Jupyter with
9412 support for rich media output.")
9413 (license license:bsd-3)))
9414
9415 (define-public python-jsbeautifier
9416 (package
9417 (name "python-jsbeautifier")
9418 (version "1.10.2")
9419 (home-page "https://github.com/beautify-web/js-beautify")
9420 (source (origin
9421 (method git-fetch)
9422 (uri (git-reference
9423 (url home-page)
9424 (commit (string-append "v" version))))
9425 (file-name (git-file-name name version))
9426 (sha256
9427 (base32
9428 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9429 (build-system python-build-system)
9430 (arguments
9431 `(#:phases (modify-phases %standard-phases
9432 (add-after 'unpack 'chdir
9433 (lambda _
9434 ;; The upstream Git repository contains all the code,
9435 ;; but this package only builds the python code.
9436 (chdir "python")
9437 #t))
9438 (add-after 'unpack 'patch-python-six-requirements
9439 (lambda _
9440 (substitute* "python/setup.py"
9441 (("six>=1.12.0")
9442 "six>=1.11.0"))
9443 #t)))))
9444 (propagated-inputs
9445 `(("python-editorconfig" ,python-editorconfig)
9446 ("python-six" ,python-six)))
9447 (native-inputs
9448 `(("python-pytest" ,python-pytest)))
9449 (synopsis "JavaScript unobfuscator and beautifier")
9450 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9451 popular online obfuscators.")
9452 (license license:expat)))
9453
9454 (define-public jupyter
9455 (package
9456 (name "jupyter")
9457 (version "1.0.0")
9458 (source
9459 (origin
9460 (method url-fetch)
9461 (uri (pypi-uri "jupyter" version))
9462 (sha256
9463 (base32
9464 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9465 (build-system python-build-system)
9466 (arguments '(#:tests? #f)) ; there are none.
9467 (propagated-inputs
9468 `(("python-ipykernel" ,python-ipykernel)
9469 ("python-ipywidgets" ,python-ipywidgets)
9470 ("python-jupyter-console" ,python-jupyter-console)
9471 ("python-nbconvert" ,python-nbconvert)
9472 ("python-notebook" ,python-notebook)
9473 ("python-qtconsole" ,python-qtconsole)))
9474 (native-search-paths
9475 (list (search-path-specification
9476 (variable "JUPYTER_PATH")
9477 (files '("share/jupyter")))))
9478 (home-page "https://jupyter.org")
9479 (synopsis "Web application for interactive documents")
9480 (description
9481 "The Jupyter Notebook is a web application that allows you to create and
9482 share documents that contain live code, equations, visualizations and
9483 explanatory text. Uses include: data cleaning and transformation, numerical
9484 simulation, statistical modeling, machine learning and much more.")
9485 (license license:bsd-3)))
9486
9487 (define-public python-chardet
9488 (package
9489 (name "python-chardet")
9490 (version "3.0.4")
9491 (source
9492 (origin
9493 (method url-fetch)
9494 (uri (pypi-uri "chardet" version))
9495 (sha256
9496 (base32
9497 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9498 (native-inputs
9499 `(("python-hypothesis" ,python-hypothesis)
9500 ("python-pytest" ,python-pytest)
9501 ("python-pytest-runner" ,python-pytest-runner)))
9502 (build-system python-build-system)
9503 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9504 (arguments `(#:tests? #f))
9505 (home-page "https://github.com/chardet/chardet")
9506 (synopsis "Universal encoding detector for Python 2 and 3")
9507 (description
9508 "This package provides @code{chardet}, a Python module that can
9509 automatically detect a wide range of file encodings.")
9510 (license license:lgpl2.1+)))
9511
9512 (define-public python2-chardet
9513 (package-with-python2 python-chardet))
9514
9515 (define-public python-docopt
9516 (package
9517 (name "python-docopt")
9518 (version "0.6.2")
9519 (source
9520 (origin
9521 (method git-fetch)
9522 ;; The release on PyPI does not include tests.
9523 (uri (git-reference
9524 (url "https://github.com/docopt/docopt")
9525 (commit version)))
9526 (file-name (git-file-name name version))
9527 (sha256
9528 (base32
9529 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9530 (build-system python-build-system)
9531 (native-inputs
9532 `(("python-pytest" ,python-pytest)))
9533 (arguments
9534 `(#:phases
9535 (modify-phases %standard-phases
9536 (replace 'check
9537 (lambda _ (invoke "py.test"))))))
9538 (home-page "http://docopt.org")
9539 (synopsis "Command-line interface description language for Python")
9540 (description "This library allows the user to define a command-line
9541 interface from a program's help message rather than specifying it
9542 programmatically with command-line parsers like @code{getopt} and
9543 @code{argparse}.")
9544 (license license:expat)))
9545
9546 (define-public python2-docopt
9547 (package-with-python2 python-docopt))
9548
9549 (define-public python-pythondialog
9550 (package
9551 (name "python-pythondialog")
9552 (version "3.4.0")
9553 (source
9554 (origin
9555 (method url-fetch)
9556 (uri (pypi-uri "pythondialog" version))
9557 (sha256
9558 (base32
9559 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9560 (build-system python-build-system)
9561 (arguments
9562 `(#:phases
9563 (modify-phases %standard-phases
9564 (add-after 'unpack 'patch-path
9565 (lambda* (#:key inputs #:allow-other-keys)
9566 (let* ((dialog (assoc-ref inputs "dialog")))
9567 ;; Since this library really wants to grovel the search path, we
9568 ;; must hardcode dialog's store path into it.
9569 (substitute* "dialog.py"
9570 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9571 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9572 #t))))
9573 #:tests? #f)) ; no test suite
9574 (propagated-inputs
9575 `(("dialog" ,dialog)))
9576 (home-page "http://pythondialog.sourceforge.net/")
9577 (synopsis "Python interface to the UNIX dialog utility")
9578 (description "A Python wrapper for the dialog utility. Its purpose is to
9579 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9580 This allows one to make simple text-mode user interfaces on Unix-like systems")
9581 (license license:lgpl2.1)
9582 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9583
9584 (define-public python2-pythondialog
9585 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9586 (package
9587 (inherit base)
9588 (version (package-version python-pythondialog))
9589 (source (origin
9590 (method url-fetch)
9591 (uri (pypi-uri "python2-pythondialog" version))
9592 (sha256
9593 (base32
9594 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9595
9596 (define-public python-configobj
9597 (package
9598 (name "python-configobj")
9599 (version "5.0.6")
9600 (source (origin
9601 (method url-fetch)
9602 (uri (pypi-uri "configobj" version))
9603 (sha256
9604 (base32
9605 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9606 ;; Patch setup.py so it looks for python-setuptools, which is
9607 ;; required to parse the keyword 'install_requires' in setup.py.
9608 (patches (search-patches "python-configobj-setuptools.patch"))))
9609 (build-system python-build-system)
9610 (propagated-inputs
9611 `(("python-six" ,python-six)))
9612 (synopsis "Config file reading, writing and validation")
9613 (description "ConfigObj is a simple but powerful config file reader and
9614 writer: an ini file round tripper. Its main feature is that it is very easy to
9615 use, with a straightforward programmer’s interface and a simple syntax for
9616 config files.")
9617 (home-page "https://github.com/DiffSK/configobj")
9618 (license license:bsd-3)))
9619
9620 (define-public python2-configobj
9621 (package-with-python2 python-configobj))
9622
9623 (define-public python-configargparse
9624 (package
9625 (name "python-configargparse")
9626 (version "0.14.0")
9627 (source (origin
9628 (method url-fetch)
9629 (uri (pypi-uri "ConfigArgParse" version))
9630 (sha256
9631 (base32
9632 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9633 (build-system python-build-system)
9634 (native-inputs
9635 `(("python-pyyaml" ,python-pyyaml)))
9636 (arguments
9637 `(#:phases
9638 (modify-phases %standard-phases
9639 (replace 'check
9640 (lambda _
9641 ;; Bypass setuptools-shim because one test relies on "setup.py"
9642 ;; being the first argument passed to the python call.
9643 ;;
9644 ;; NOTE: Many tests do not run because they rely on Python's
9645 ;; built-in test.test_argparse, but we remove the unit tests from
9646 ;; our Python installation.
9647 (invoke "python" "setup.py" "test"))))))
9648 (synopsis "Replacement for argparse")
9649 (description "A drop-in replacement for argparse that allows options to also
9650 be set via config files and/or environment variables.")
9651 (home-page "https://github.com/bw2/ConfigArgParse")
9652 (license license:expat)))
9653
9654 (define-public python2-configargparse
9655 (package-with-python2 python-configargparse))
9656
9657 (define-public python-argparse-manpage
9658 (package
9659 (name "python-argparse-manpage")
9660 (version "1.1")
9661 (source
9662 (origin
9663 (method url-fetch)
9664 (uri (pypi-uri "argparse-manpage" version))
9665 (sha256
9666 (base32
9667 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9668 (build-system python-build-system)
9669 (home-page "https://github.com/praiskup/argparse-manpage")
9670 (synopsis "Build manual page from Python's ArgumentParser object")
9671 (description
9672 "This package provides tools to build manual pages from Python's
9673 @code{ArgumentParser} object.")
9674 (license license:asl2.0)))
9675
9676 (define-public python-contextlib2
9677 (package
9678 (name "python-contextlib2")
9679 (version "0.6.0.post1")
9680 (source
9681 (origin
9682 (method url-fetch)
9683 (uri (pypi-uri "contextlib2" version))
9684 (sha256
9685 (base32
9686 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9687 (build-system python-build-system)
9688 (home-page "https://contextlib2.readthedocs.org/")
9689 (synopsis "Tools for decorators and context managers")
9690 (description "This module is primarily a backport of the Python
9691 3.2 contextlib to earlier Python versions. Like contextlib, it
9692 provides utilities for common tasks involving decorators and context
9693 managers. It also contains additional features that are not part of
9694 the standard library.")
9695 (properties `((python2-variant . ,(delay python2-contextlib2))))
9696 (license license:psfl)))
9697
9698 (define-public python2-contextlib2
9699 (let ((base (package-with-python2
9700 (strip-python2-variant python-contextlib2))))
9701 (package
9702 (inherit base)
9703 (arguments
9704 (substitute-keyword-arguments (package-arguments base)
9705 ((#:phases phases)
9706 `(modify-phases ,phases
9707 (replace 'check
9708 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9709 (native-inputs
9710 `(("python2-unittest2" ,python2-unittest2))))))
9711
9712 ;; This package is used by python2-pytest via python2-importlib-metadata,
9713 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9714 (define-public python2-contextlib2-bootstrap
9715 (hidden-package
9716 (package/inherit
9717 python2-contextlib2
9718 (name "python2-contextlib2-bootstrap")
9719 (arguments
9720 `(#:tests? #f
9721 ,@(package-arguments python2-contextlib2)))
9722 (native-inputs '()))))
9723
9724 (define-public python-texttable
9725 (package
9726 (name "python-texttable")
9727 (version "1.6.2")
9728 (source
9729 (origin
9730 (method url-fetch)
9731 (uri (pypi-uri "texttable" version))
9732 (sha256
9733 (base32
9734 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9735 (build-system python-build-system)
9736 (arguments
9737 `(#:phases
9738 (modify-phases %standard-phases
9739 (replace 'check
9740 (lambda _ (invoke "pytest" "tests.py"))))))
9741 (native-inputs
9742 `(("python-pytest" ,python-pytest)))
9743 (home-page "https://github.com/foutaise/texttable/")
9744 (synopsis "Python module for creating simple ASCII tables")
9745 (description "Texttable is a Python module for creating simple ASCII
9746 tables.")
9747 (license license:expat)))
9748
9749 (define-public python2-texttable
9750 (package-with-python2 python-texttable))
9751
9752 (define-public python-atomicwrites
9753 (package
9754 (name "python-atomicwrites")
9755 (version "1.3.0")
9756 (source (origin
9757 (method url-fetch)
9758 (uri (pypi-uri "atomicwrites" version))
9759 (sha256
9760 (base32
9761 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9762 (build-system python-build-system)
9763 (synopsis "Atomic file writes in Python")
9764 (description "Library for atomic file writes using platform dependent tools
9765 for atomic file system operations.")
9766 (home-page "https://github.com/untitaker/python-atomicwrites")
9767 (license license:expat)))
9768
9769 (define-public python2-atomicwrites
9770 (package-with-python2 python-atomicwrites))
9771
9772 (define-public python-click-threading
9773 (package
9774 (name "python-click-threading")
9775 (version "0.4.4")
9776 (source (origin
9777 (method url-fetch)
9778 (uri (pypi-uri "click-threading" version))
9779 (sha256
9780 (base32
9781 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9782 (build-system python-build-system)
9783 (propagated-inputs
9784 `(("python-click" ,python-click)))
9785 (synopsis "Utilities for multithreading in Click")
9786 (description "This package provides utilities for multithreading in Click
9787 applications.")
9788 (home-page "https://github.com/click-contrib/click-threading")
9789 (license license:expat)))
9790
9791 (define-public python-click-log
9792 (package
9793 (name "python-click-log")
9794 (version "0.3.2")
9795 (source (origin
9796 (method url-fetch)
9797 (uri (pypi-uri "click-log" version))
9798 (sha256
9799 (base32
9800 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9801 (build-system python-build-system)
9802 (propagated-inputs
9803 `(("python-click" ,python-click)))
9804 (synopsis "Logging for click applications")
9805 (description "This package provides a Python library for logging Click
9806 applications.")
9807 (home-page "https://github.com/click-contrib/click-log")
9808 (license license:expat)))
9809
9810 (define-public python-apipkg
9811 (package
9812 (name "python-apipkg")
9813 (version "1.5")
9814 (source (origin
9815 (method url-fetch)
9816 (uri (pypi-uri "apipkg" version))
9817 (sha256
9818 (base32
9819 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9820 (build-system python-build-system)
9821 (native-inputs
9822 `(("python-pytest" ,python-pytest)
9823 ("python-setuptools-scm" ,python-setuptools-scm)))
9824 (synopsis "Namespace control and lazy-import mechanism")
9825 (description "With apipkg you can control the exported namespace of a Python
9826 package and greatly reduce the number of imports for your users. It is a small
9827 pure Python module that works on virtually all Python versions.")
9828 (home-page "https://github.com/pytest-dev/apipkg")
9829 (license license:expat)))
9830
9831 (define-public python-execnet
9832 (package
9833 (name "python-execnet")
9834 (version "1.4.1")
9835 (source (origin
9836 (method url-fetch)
9837 (uri (pypi-uri "execnet" version))
9838 (sha256
9839 (base32
9840 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9841 (build-system python-build-system)
9842 (arguments
9843 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9844 ;; The two test failures are caused by the lack of an `ssh` executable.
9845 ;; The test suite can be run with pytest after the 'install' phase.
9846 #:tests? #f))
9847 (native-inputs
9848 `(("python-pytest" ,python-pytest)
9849 ("python-setuptools-scm" ,python-setuptools-scm)))
9850 (propagated-inputs
9851 `(("python-apipkg" ,python-apipkg)))
9852 (synopsis "Rapid multi-Python deployment")
9853 (description "Execnet provides a share-nothing model with
9854 channel-send/receive communication for distributing execution across many
9855 Python interpreters across version, platform and network barriers. It has a
9856 minimal and fast API targeting the following uses:
9857 @enumerate
9858 @item distribute tasks to (many) local or remote CPUs
9859 @item write and deploy hybrid multi-process applications
9860 @item write scripts to administer multiple environments
9861 @end enumerate")
9862 (home-page "https://codespeak.net/execnet/")
9863 (license license:expat)))
9864
9865 (define-public python2-execnet
9866 (package-with-python2 python-execnet))
9867
9868 (define-public python-icalendar
9869 (package
9870 (name "python-icalendar")
9871 (version "4.0.5")
9872 (source (origin
9873 (method url-fetch)
9874 (uri (pypi-uri "icalendar" version))
9875 (sha256
9876 (base32
9877 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9878 (build-system python-build-system)
9879 (propagated-inputs
9880 `(("python-dateutil" ,python-dateutil)
9881 ("python-pytz" ,python-pytz)))
9882 (synopsis "Python library for parsing iCalendar files")
9883 (description "The icalendar package is a parser/generator of iCalendar
9884 files for use with Python.")
9885 (home-page "https://github.com/collective/icalendar")
9886 (license license:bsd-2)))
9887
9888 (define-public python-args
9889 (package
9890 (name "python-args")
9891 (version "0.1.0")
9892 (source (origin
9893 (method url-fetch)
9894 (uri (pypi-uri "args" version))
9895 (sha256
9896 (base32
9897 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9898 (build-system python-build-system)
9899 (home-page "https://github.com/kennethreitz/args")
9900 (synopsis "Command-line argument parser")
9901 (description
9902 "This library provides a Python module to parse command-line arguments.")
9903 (license license:bsd-3)))
9904
9905 (define-public python2-args
9906 (package-with-python2 python-args))
9907
9908 (define-public python-clint
9909 (package
9910 (name "python-clint")
9911 (version "0.5.1")
9912 (source (origin
9913 (method url-fetch)
9914 (uri (pypi-uri "clint" version))
9915 (sha256
9916 (base32
9917 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9918 (build-system python-build-system)
9919 (arguments
9920 '(#:phases
9921 (modify-phases %standard-phases
9922 (replace 'check
9923 (lambda _ (invoke "py.test" "-v"))))))
9924 (native-inputs
9925 `(("python-pytest" ,python-pytest)))
9926 (propagated-inputs
9927 `(("python-args" ,python-args)))
9928 (home-page "https://github.com/kennethreitz/clint")
9929 (synopsis "Command-line interface tools")
9930 (description
9931 "Clint is a Python module filled with a set of tools for developing
9932 command-line applications, including tools for colored and indented
9933 output, progress bar display, and pipes.")
9934 (license license:isc)))
9935
9936 (define-public python2-clint
9937 (package-with-python2 python-clint))
9938
9939 (define-public python-rply
9940 (package
9941 (name "python-rply")
9942 (version "0.7.5")
9943 (source (origin
9944 (method url-fetch)
9945 (uri (pypi-uri "rply" version))
9946 (sha256
9947 (base32
9948 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9949 (build-system python-build-system)
9950 (propagated-inputs
9951 `(("python-appdirs" ,python-appdirs)))
9952 (home-page "https://github.com/alex/rply")
9953 (synopsis "Parser generator for Python")
9954 (description
9955 "This package provides a pure Python based parser generator, that also
9956 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9957 with a new public API, and RPython support.")
9958 (license license:bsd-3)))
9959
9960 (define-public python2-rply
9961 (package-with-python2 python-rply))
9962
9963 (define-public python-hy
9964 (package
9965 (name "python-hy")
9966 (version "0.18.0")
9967 (source (origin
9968 (method url-fetch)
9969 (uri (pypi-uri "hy" version))
9970 (sha256
9971 (base32
9972 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9973 (build-system python-build-system)
9974 (arguments
9975 '(#:phases
9976 (modify-phases %standard-phases
9977 (add-before 'install 'set-HOME
9978 (lambda _
9979 (setenv "HOME" "/tmp") #t))
9980 (replace 'check
9981 (lambda _
9982 ;; Tests require write access to HOME.
9983 (setenv "HOME" "/tmp")
9984 (invoke "nosetests"))))))
9985 (native-inputs
9986 `(("python-coverage" ,python-coverage)
9987 ("python-nose" ,python-nose)))
9988 (propagated-inputs
9989 `(("python-astor" ,python-astor)
9990 ("python-colorama" ,python-colorama)
9991 ("python-rply" ,python-rply)
9992 ("python-funcparserlib"
9993 ,python-funcparserlib)))
9994 (home-page "http://hylang.org/")
9995 (synopsis "Lisp frontend to Python")
9996 (description
9997 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9998 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9999 Python at your fingertips, in Lisp form.")
10000 (license license:expat)))
10001
10002 (define-public python2-functools32
10003 (package
10004 (name "python2-functools32")
10005 (version "3.2.3-2")
10006 (source
10007 (origin
10008 (method url-fetch)
10009 (uri (pypi-uri "functools32" version))
10010 (sha256
10011 (base32
10012 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
10013 (build-system python-build-system)
10014 (arguments
10015 `(#:python ,python-2
10016 #:tests? #f)) ; no test target
10017 (home-page "https://github.com/MiCHiLU/python-functools32")
10018 (synopsis
10019 "Backport of the functools module from Python 3.2.3")
10020 (description
10021 "This package is a backport of the @code{functools} module from Python
10022 3.2.3 for use with older versions of Python and PyPy.")
10023 (license license:expat)))
10024
10025 (define-public python2-subprocess32
10026 (package
10027 (name "python2-subprocess32")
10028 (version "3.2.7")
10029 (source (origin
10030 (method url-fetch)
10031 (uri (pypi-uri "subprocess32" version))
10032 (sha256
10033 (base32
10034 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
10035 (patches
10036 (search-patches "python2-subprocess32-disable-input-test.patch"))))
10037 (build-system python-build-system)
10038 (arguments
10039 `(#:python ,python-2
10040 ;; The test suite fails with Python > 2.7.13:
10041 ;; import test.support
10042 ;; ImportError: No module named support
10043 #:tests? #f
10044 #:phases
10045 (modify-phases %standard-phases
10046 (add-after 'unpack 'patch-/bin/sh
10047 (lambda _
10048 (substitute* '("subprocess32.py"
10049 "test_subprocess32.py")
10050 (("/bin/sh") (which "sh")))
10051 #t)))))
10052 (home-page "https://github.com/google/python-subprocess32")
10053 (synopsis "Backport of the subprocess module from Python 3.2")
10054 (description
10055 "This is a backport of the @code{subprocess} standard library module
10056 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
10057 new features. On POSIX systems it is guaranteed to be reliable when used
10058 in threaded applications. It includes timeout support from Python 3.3 but
10059 otherwise matches 3.2’s API.")
10060 (license license:psfl)))
10061
10062 (define-public python2-futures
10063 (package
10064 (name "python2-futures")
10065 (version "3.2.0")
10066 (source
10067 (origin
10068 (method url-fetch)
10069 (uri (pypi-uri "futures" version))
10070 (sha256
10071 (base32
10072 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
10073 (build-system python-build-system)
10074 (arguments
10075 `(#:python ,python-2
10076 #:phases
10077 (modify-phases %standard-phases
10078 (replace 'check
10079 (lambda _
10080 (invoke "python" "test_futures.py")
10081 #t)))))
10082 (home-page "https://github.com/agronholm/pythonfutures")
10083 (synopsis
10084 "Backport of the concurrent.futures package from Python 3.2")
10085 (description
10086 "The concurrent.futures module provides a high-level interface for
10087 asynchronously executing callables. This package backports the
10088 concurrent.futures package from Python 3.2")
10089 (license license:bsd-3)))
10090
10091 (define-public python-promise
10092 (package
10093 (name "python-promise")
10094 (version "0.4.2")
10095 (source
10096 (origin
10097 (method url-fetch)
10098 (uri (pypi-uri "promise" version))
10099 (sha256
10100 (base32
10101 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
10102 (build-system python-build-system)
10103 ;; Tests wants python-futures, which is a python2 only program, and
10104 ;; can't be found by python-promise at test time.
10105 (arguments `(#:tests? #f))
10106 (home-page "https://github.com/syrusakbary/promise")
10107 (synopsis "Promises/A+ implementation for Python")
10108 (description
10109 "Promises/A+ implementation for Python")
10110 (properties `((python2-variant . ,(delay python2-promise))))
10111 (license license:expat)))
10112
10113 (define-public python2-promise
10114 (let ((promise (package-with-python2
10115 (strip-python2-variant python-promise))))
10116 (package (inherit promise)
10117 (arguments (substitute-keyword-arguments (package-arguments promise)
10118 ((#:tests? _) #t)))
10119 (native-inputs
10120 `(("python2-futures" ,python2-futures)
10121 ("python2-pytest" ,python2-pytest)
10122 ,@(package-native-inputs promise))))))
10123
10124 (define-public python-progressbar2
10125 (package
10126 (name "python-progressbar2")
10127 (version "3.51.3")
10128 (source
10129 (origin
10130 (method url-fetch)
10131 (uri (pypi-uri "progressbar2" version))
10132 (sha256
10133 (base32
10134 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
10135 (build-system python-build-system)
10136 (propagated-inputs
10137 `(("python-six" ,python-six)
10138 ("python-utils" ,python-utils)))
10139 (native-inputs
10140 `(("python-flake8" ,python-flake8)
10141 ("python-freezegun" ,python-freezegun)
10142 ("python-pycodestyle" ,python-pycodestyle)
10143 ("python-pytest" ,python-pytest)
10144 ("python-pytest-cache" ,python-pytest-cache)
10145 ("python-pytest-cov" ,python-pytest-cov)
10146 ("python-pytest-flakes" ,python-pytest-flakes)
10147 ("python-pytest-pep8" ,python-pytest-pep8)
10148 ("python-sphinx" ,python-sphinx)))
10149 (home-page "https://github.com/WoLpH/python-progressbar")
10150 (synopsis "Text progress bar library for Python")
10151 (description
10152 "This package provides a Python progressbar library to provide
10153 visual (yet text based) progress to long running operations.")
10154 (license license:bsd-3)))
10155
10156 (define-public python-progressbar33
10157 (package
10158 (name "python-progressbar33")
10159 (version "2.4")
10160 (source
10161 (origin
10162 (method url-fetch)
10163 (uri (pypi-uri "progressbar33" version))
10164 (sha256
10165 (base32
10166 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
10167 (build-system python-build-system)
10168 (home-page "https://github.com/germangh/python-progressbar")
10169 (synopsis "Text progress bar library for Python")
10170 (description
10171 "This package provides a text progress bar library for Python. This
10172 version only differs from the original @code{progressbar} package in that it
10173 uses relative package imports instead of absolute imports, which is necessary
10174 for the module to work under Python 3.3.")
10175 ;; Either or both of these licenses may be selected.
10176 (license (list license:lgpl2.1+ license:bsd-3))))
10177
10178 (define-public python-colorama
10179 (package
10180 (name "python-colorama")
10181 (version "0.4.3")
10182 (source
10183 (origin
10184 (method url-fetch)
10185 (uri (pypi-uri "colorama" version))
10186 (sha256
10187 (base32
10188 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
10189 (build-system python-build-system)
10190 (synopsis "Colored terminal text rendering for Python")
10191 (description "Colorama is a Python library for rendering colored terminal
10192 text.")
10193 (home-page "https://pypi.org/project/colorama/")
10194 (license license:bsd-3)))
10195
10196 (define-public python2-colorama
10197 (package-with-python2 python-colorama))
10198
10199 (define-public python-rsa
10200 (package
10201 (name "python-rsa")
10202 (version "3.4.2")
10203 (source
10204 (origin
10205 (method url-fetch)
10206 (uri (pypi-uri "rsa" version))
10207 (sha256
10208 (base32
10209 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
10210 (build-system python-build-system)
10211 (propagated-inputs
10212 `(("python-pyasn1" ,python-pyasn1)))
10213 (synopsis "Pure-Python RSA implementation")
10214 (description "Python-RSA is a pure-Python RSA implementation. It supports
10215 encryption and decryption, signing and verifying signatures, and key
10216 generation according to PKCS#1 version 1.5. It can be used as a Python
10217 library as well as on the command line.")
10218 (home-page "https://stuvel.eu/rsa")
10219 (license license:asl2.0)))
10220
10221 (define-public python2-rsa
10222 (package-with-python2 python-rsa))
10223
10224 (define-public python-pluggy
10225 (package
10226 (name "python-pluggy")
10227 (version "0.13.1")
10228 (source
10229 (origin
10230 (method url-fetch)
10231 (uri (pypi-uri "pluggy" version))
10232 (sha256
10233 (base32
10234 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
10235 (build-system python-build-system)
10236 (native-inputs
10237 `(("python-setuptools-scm" ,python-setuptools-scm)))
10238 (synopsis "Plugin and hook calling mechanism for Python")
10239 (description "Pluggy is an extraction of the plugin manager as used by
10240 Pytest but stripped of Pytest specific details.")
10241 (home-page "https://pypi.org/project/pluggy/")
10242 (properties `((python2-variant . ,(delay python2-pluggy))))
10243 (license license:expat)))
10244
10245 (define-public python2-pluggy
10246 (let ((base (package-with-python2 (strip-python2-variant
10247 python-pluggy))))
10248 (package/inherit
10249 base
10250 (propagated-inputs
10251 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
10252
10253 ;; This package requires python2-importlib-metadata, but that package
10254 ;; ends up needing python2-pluggy via python2-pytest, so we need this
10255 ;; variant to solve the circular dependency.
10256 (define-public python2-pluggy-bootstrap
10257 (hidden-package
10258 (package/inherit
10259 python2-pluggy
10260 (name "python2-pluggy-bootstrap")
10261 (arguments
10262 `(#:tests? #f
10263 ,@(package-arguments python2-pluggy)))
10264 (propagated-inputs
10265 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
10266
10267 (define-public python-tox
10268 (package
10269 (name "python-tox")
10270 (version "2.8.1")
10271 (source
10272 (origin
10273 (method url-fetch)
10274 (uri (pypi-uri "tox" version))
10275 (sha256
10276 (base32
10277 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10278 (build-system python-build-system)
10279 (arguments
10280 ;; FIXME: Tests require pytest-timeout, which itself requires
10281 ;; pytest>=2.8.0 for installation.
10282 '(#:tests? #f))
10283 (propagated-inputs
10284 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10285 ("python-py" ,python-py)
10286 ("python-virtualenv" ,python-virtualenv)))
10287 (native-inputs
10288 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10289 ("python-pytest" ,python-pytest) ; >= 2.3.5
10290 ("python-setuptools-scm" ,python-setuptools-scm)))
10291 (home-page "https://tox.readthedocs.io")
10292 (synopsis "Virtualenv-based automation of test activities")
10293 (description "Tox is a generic virtualenv management and test command line
10294 tool. It can be used to check that a package installs correctly with
10295 different Python versions and interpreters, or run tests in each type of
10296 supported environment, or act as a frontend to continuous integration
10297 servers.")
10298 (license license:expat)))
10299
10300 (define-public python2-tox
10301 (package-with-python2 python-tox))
10302
10303 (define-public python-jmespath
10304 (package
10305 (name "python-jmespath")
10306 (version "0.9.4")
10307 (source
10308 (origin
10309 (method url-fetch)
10310 (uri (pypi-uri "jmespath" version))
10311 (sha256
10312 (base32
10313 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10314 (build-system python-build-system)
10315 (native-inputs
10316 `(("python-nose" ,python-nose)))
10317 (synopsis "JSON Matching Expressions")
10318 (description "JMESPath (pronounced “james path”) is a Python library that
10319 allows one to declaratively specify how to extract elements from a JSON
10320 document.")
10321 (home-page "https://github.com/jmespath/jmespath.py")
10322 (license license:expat)))
10323
10324 (define-public python2-jmespath
10325 (package-with-python2 python-jmespath))
10326
10327 (define-public python-symengine
10328 (package
10329 (name "python-symengine")
10330 (version "0.6.1")
10331 (source
10332 (origin
10333 (method url-fetch)
10334 (uri (pypi-uri "symengine" version))
10335 (sha256
10336 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
10337 (build-system python-build-system)
10338 (native-inputs
10339 `(("cmake" ,cmake)
10340 ("python-cython" ,python-cython)))
10341 (inputs
10342 `(("symengine" ,symengine)))
10343 (home-page "https://github.com/symengine/symengine.py")
10344 (synopsis "Python library providing wrappers to SymEngine")
10345 (description
10346 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
10347 manipulation library.")
10348 (license license:expat)))
10349
10350 (define-public python-botocore
10351 (package
10352 (name "python-botocore")
10353 (version "1.15.26")
10354 (source
10355 (origin
10356 (method url-fetch)
10357 (uri (pypi-uri "botocore" version))
10358 (sha256
10359 (base32
10360 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10361 (build-system python-build-system)
10362 (arguments
10363 ;; FIXME: Many tests are failing.
10364 '(#:tests? #f))
10365 (propagated-inputs
10366 `(("python-dateutil" ,python-dateutil)
10367 ("python-docutils" ,python-docutils)
10368 ("python-jmespath" ,python-jmespath)))
10369 (native-inputs
10370 `(("python-mock" ,python-mock)
10371 ("python-nose" ,python-nose)
10372 ("behave" ,behave)
10373 ("python-tox" ,python-tox)
10374 ("python-urllib3" ,python-urllib3)
10375 ("python-wheel" ,python-wheel)))
10376 (home-page "https://github.com/boto/botocore")
10377 (synopsis "Low-level interface to AWS")
10378 (description "Botocore is a Python library that provides a low-level
10379 interface to the Amazon Web Services (AWS) API.")
10380 (license license:asl2.0)))
10381
10382 (define-public python2-botocore
10383 (package-with-python2 python-botocore))
10384
10385 (define-public python-pyfiglet
10386 (package
10387 (name "python-pyfiglet")
10388 (version "0.8.post1")
10389 (source
10390 (origin
10391 (method url-fetch)
10392 (uri (pypi-uri "pyfiglet" version))
10393 (sha256
10394 (base32
10395 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
10396 (build-system python-build-system)
10397 (home-page "https://github.com/pwaller/pyfiglet")
10398 (synopsis "Draw ASCII art big letters in Python")
10399 (description "This module lets you draw large letter from ordinary characters
10400 in pure Python.")
10401 (license license:expat)))
10402
10403 (define-public python-xdo
10404 (package
10405 (name "python-xdo")
10406 (version "0.3")
10407 (source (origin
10408 (method url-fetch)
10409 (uri (string-append
10410 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10411 "python-xdo_" version ".orig.tar.gz"))
10412 (sha256
10413 (base32
10414 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10415 (build-system python-build-system)
10416 (arguments
10417 '(#:phases
10418 (modify-phases %standard-phases
10419 (add-before 'install 'patch-libxdo-path
10420 ;; Hardcode the path of dynamically loaded libxdo library.
10421 (lambda* (#:key inputs #:allow-other-keys)
10422 (let ((libxdo (string-append
10423 (assoc-ref inputs "xdotool")
10424 "/lib/libxdo.so")))
10425 (substitute* "xdo/_xdo.py"
10426 (("find_library\\(\"xdo\"\\)")
10427 (simple-format #f "\"~a\"" libxdo)))
10428 #t))))
10429 #:tests? #f)) ; no tests provided
10430 (propagated-inputs
10431 `(("python-six" ,python-six)))
10432 (inputs
10433 `(("xdotool" ,xdotool)
10434 ("libX11" ,libx11)))
10435 (home-page "https://tracker.debian.org/pkg/python-xdo")
10436 (synopsis "Python library for simulating X11 keyboard/mouse input")
10437 (description "Provides bindings to libxdo for manipulating X11 via simulated
10438 input. (Note that this is mostly a legacy library; you may wish to look at
10439 python-xdo for newer bindings.)")
10440 (license license:bsd-3)))
10441
10442 (define-public python2-xdo
10443 (package-with-python2 python-xdo))
10444
10445 (define-public python-mako
10446 (package
10447 (name "python-mako")
10448 (version "1.1.2")
10449 (source
10450 (origin
10451 (method url-fetch)
10452 (uri (pypi-uri "Mako" version))
10453 (sha256
10454 (base32
10455 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10456 (build-system python-build-system)
10457 (arguments
10458 `(#:phases (modify-phases %standard-phases
10459 (replace 'check
10460 (lambda* (#:key tests? #:allow-other-keys)
10461 (if tests?
10462 (invoke "nosetests" "-v")
10463 (format #t "test suite not run~%"))
10464 #t)))))
10465 (propagated-inputs
10466 `(("python-markupsafe" ,python-markupsafe)))
10467 (native-inputs
10468 `(("python-mock" ,python-mock)
10469 ("python-nose" ,python-nose)))
10470 (home-page "https://www.makotemplates.org/")
10471 (synopsis "Templating language for Python")
10472 (description "Mako is a templating language for Python that compiles
10473 templates into Python modules.")
10474 (license license:expat)))
10475
10476 (define-public python2-mako
10477 (package-with-python2 python-mako))
10478
10479 (define-public python-waitress
10480 (package
10481 (name "python-waitress")
10482 (version "1.1.0")
10483 (source
10484 (origin
10485 (method url-fetch)
10486 (uri (pypi-uri "waitress" version))
10487 (patches (search-patches "python-waitress-fix-tests.patch"))
10488 (sha256
10489 (base32
10490 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10491 (build-system python-build-system)
10492 (home-page "https://github.com/Pylons/waitress")
10493 (synopsis "Waitress WSGI server")
10494 (description "Waitress is meant to be a production-quality pure-Python WSGI
10495 server with very acceptable performance.")
10496 (license license:zpl2.1)))
10497
10498 (define-public python2-waitress
10499 (package-with-python2 python-waitress))
10500
10501 (define-public python-whichcraft
10502 (package
10503 (name "python-whichcraft")
10504 (version "0.6.1")
10505 (source
10506 (origin
10507 (method url-fetch)
10508 (uri (pypi-uri "whichcraft" version))
10509 (sha256
10510 (base32
10511 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10512 (build-system python-build-system)
10513 (native-inputs
10514 `(("python-pytest" ,python-pytest)))
10515 (home-page "https://github.com/pydanny/whichcraft")
10516 (synopsis "Cross-platform cross-python shutil.which functionality")
10517 (description
10518 "This package provides a shim of the shutil.which function that's
10519 designed to work across multiple versions of Python.")
10520 (license license:bsd-3)))
10521
10522 (define-public python-cookiecutter
10523 (package
10524 (name "python-cookiecutter")
10525 (version "1.6.0")
10526 (source
10527 (origin
10528 (method url-fetch)
10529 (uri (pypi-uri "cookiecutter" version))
10530 (sha256
10531 (base32
10532 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10533 (build-system python-build-system)
10534 (native-inputs
10535 `(("python-freezegun" ,python-freezegun)
10536 ("python-pytest" ,python-pytest)
10537 ("python-pytest-catchlog" ,python-pytest-catchlog)
10538 ("python-pytest-cov" ,python-pytest-cov)
10539 ("python-pytest-mock" ,python-pytest-mock)))
10540 (propagated-inputs
10541 `(("python-binaryornot" ,python-binaryornot)
10542 ("python-click" ,python-click)
10543 ("python-future" ,python-future)
10544 ("python-jinja2" ,python-jinja2)
10545 ("python-jinja2-time" ,python-jinja2-time)
10546 ("python-poyo" ,python-poyo)
10547 ("python-requests" ,python-requests)
10548 ("python-whichcraft" ,python-whichcraft)))
10549 (home-page "https://github.com/audreyr/cookiecutter")
10550 (synopsis
10551 "Command-line utility that creates projects from project templates")
10552 (description
10553 "This package provides a command-line utility that creates projects from
10554 project templates, e.g. creating a Python package project from a Python package
10555 project template.")
10556 (license license:bsd-3)))
10557
10558 (define-public python-pyquery
10559 (package
10560 (name "python-pyquery")
10561 (version "1.2.17")
10562 (source
10563 (origin
10564 (method url-fetch)
10565 (uri (pypi-uri "pyquery" version))
10566 (sha256
10567 (base32
10568 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10569 (build-system python-build-system)
10570 (native-inputs
10571 `(("python-webob" ,python-webob)
10572 ("python-webtest" ,python-webtest)))
10573 (propagated-inputs
10574 `(("python-lxml" ,python-lxml)
10575 ("python-cssselect" ,python-cssselect)))
10576 (home-page "https://github.com/gawel/pyquery")
10577 (synopsis "Make jQuery-like queries on xml documents")
10578 (description "pyquery allows you to make jQuery queries on xml documents.
10579 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10580 fast xml and html manipulation.")
10581 (license license:bsd-3)))
10582
10583 (define-public python-anyjson
10584 (package
10585 (name "python-anyjson")
10586 (version "0.3.3")
10587 (source
10588 (origin
10589 (method url-fetch)
10590 (uri (pypi-uri "anyjson" version))
10591 (sha256
10592 (base32
10593 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10594 (build-system python-build-system)
10595 (arguments
10596 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10597 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10598 ;; whatever) so this transformation needs to be done before the tests
10599 ;; can be run. Maybe we could add a build step to transform beforehand
10600 ;; but it could be annoying/difficult.
10601 ;; We can enable tests for the Python 2 version, though, and do below.
10602 #:tests? #f))
10603 (home-page "https://bitbucket.org/runeh/anyjson/")
10604 (synopsis
10605 "Wraps best available JSON implementation in a common interface")
10606 (description
10607 "Anyjson loads whichever is the fastest JSON module installed
10608 and provides a uniform API regardless of which JSON implementation is used.")
10609 (license license:bsd-3)
10610 (properties `((python2-variant . ,(delay python2-anyjson))))))
10611
10612 (define-public python2-anyjson
10613 (let ((anyjson (package-with-python2
10614 (strip-python2-variant python-anyjson))))
10615 (package
10616 (inherit anyjson)
10617 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10618 #:tests? #t
10619 ,@(package-arguments anyjson)))
10620 (native-inputs `(("python2-nose" ,python2-nose))))))
10621
10622 (define-public python-amqp
10623 (package
10624 (name "python-amqp")
10625 (version "2.3.2")
10626 (source
10627 (origin
10628 (method url-fetch)
10629 (uri (pypi-uri "amqp" version))
10630 (sha256
10631 (base32
10632 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10633 (build-system python-build-system)
10634 (native-inputs
10635 `(("python-case" ,python-case)
10636 ("python-pytest-sugar" ,python-pytest-sugar)
10637 ("python-mock" ,python-mock)))
10638 (propagated-inputs
10639 `(("python-vine" ,python-vine)))
10640 (home-page "https://github.com/celery/py-amqp")
10641 (synopsis
10642 "Low-level AMQP client for Python (fork of amqplib)")
10643 (description
10644 "This is a fork of amqplib which was originally written by Barry Pederson.
10645 It is maintained by the Celery project, and used by kombu as a pure python
10646 alternative when librabbitmq is not available.")
10647 (license license:lgpl2.1+)
10648 (properties `((python2-variant . ,(delay python2-amqp))))))
10649
10650 (define-public python2-amqp
10651 (let ((amqp (package-with-python2
10652 (strip-python2-variant python-amqp))))
10653 (package
10654 (inherit amqp)
10655 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10656 ;; unmaintained. Weirdly, does not do this on the python 3
10657 ;; version?
10658 #:tests? #f
10659 ,@(package-arguments amqp))))))
10660
10661 (define-public python-txamqp
10662 (package
10663 (name "python-txamqp")
10664 (version "0.8.2")
10665 (source
10666 (origin
10667 (method url-fetch)
10668 (uri (pypi-uri "txAMQP" version))
10669 (sha256
10670 (base32
10671 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10672 (build-system python-build-system)
10673 (propagated-inputs
10674 `(("python-six" ,python-six)
10675 ("python-twisted" ,python-twisted)))
10676 (home-page "https://github.com/txamqp/txamqp")
10677 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10678 (description
10679 "This package provides a Python library for communicating with AMQP peers
10680 and brokers using the asynchronous networking framework Twisted. It contains
10681 all the necessary code to connect, send and receive messages to/from an
10682 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10683 also includes support for using Thrift RPC over AMQP in Twisted
10684 applications.")
10685 (license license:asl2.0)))
10686
10687 (define-public python2-txamqp
10688 (package-with-python2 python-txamqp))
10689
10690 (define-public python-kombu
10691 (package
10692 (name "python-kombu")
10693 (version "4.2.2")
10694 (source
10695 (origin
10696 (method url-fetch)
10697 (uri (pypi-uri "kombu" version))
10698 (sha256
10699 (base32
10700 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10701 (build-system python-build-system)
10702 (native-inputs
10703 `(("python-mock" ,python-mock)
10704 ("python-case" ,python-case)
10705 ("python-pyro4" ,python-pyro4)
10706 ("python-pytest-sugar" ,python-pytest-sugar)
10707 ("python-pytz" ,python-pytz)))
10708 (propagated-inputs
10709 `(("python-anyjson" ,python-anyjson)
10710 ("python-amqp" ,python-amqp)
10711 ("python-redis" ,python-redis)))
10712 (home-page "https://kombu.readthedocs.io")
10713 (synopsis "Message passing library for Python")
10714 (description "The aim of Kombu is to make messaging in Python as easy as
10715 possible by providing an idiomatic high-level interface for the AMQ protocol,
10716 and also provide proven and tested solutions to common messaging problems.
10717 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10718 message orientation, queuing, routing, reliability and security, for which the
10719 RabbitMQ messaging server is the most popular implementation.")
10720 (license license:bsd-3)
10721 (properties `((python2-variant . ,(delay python2-kombu))))))
10722
10723 (define-public python2-kombu
10724 (let ((kombu (package-with-python2
10725 (strip-python2-variant python-kombu))))
10726 (package
10727 (inherit kombu)
10728 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10729 ;; It works fine on the python3 variant.
10730 #:tests? #f
10731 ,@(package-arguments kombu)))
10732 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10733 ,@(package-native-inputs kombu))))))
10734
10735 (define-public python-billiard
10736 (package
10737 (name "python-billiard")
10738 (version "3.5.0.5")
10739 (source
10740 (origin
10741 (method url-fetch)
10742 (uri (pypi-uri "billiard" version))
10743 (sha256
10744 (base32
10745 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10746 (build-system python-build-system)
10747 (native-inputs
10748 `(("python-case" ,python-case)
10749 ("python-pytest" ,python-pytest)))
10750 (home-page "https://github.com/celery/billiard")
10751 (synopsis
10752 "Python multiprocessing fork with improvements and bugfixes")
10753 (description
10754 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10755 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10756 pyprocessing package. This standalone variant is intended to be compatible with
10757 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10758 (license license:bsd-3)
10759 (properties `((python2-variant . ,(delay python2-billiard))))))
10760
10761 (define-public python2-billiard
10762 (let ((billiard (package-with-python2
10763 (strip-python2-variant python-billiard))))
10764 (package
10765 (inherit billiard)
10766 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10767 ("python2-mock" ,python2-mock)
10768 ,@(package-native-inputs billiard))))))
10769
10770 (define-public python-celery
10771 (package
10772 (name "python-celery")
10773 (version "4.2.1")
10774 (source
10775 (origin
10776 (method url-fetch)
10777 (uri (pypi-uri "celery" version))
10778 (sha256
10779 (base32
10780 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10781 (build-system python-build-system)
10782 (arguments
10783 '(;; TODO The tests fail with Python 3.7
10784 ;; https://github.com/celery/celery/issues/4849
10785 #:tests? #f
10786 #:phases
10787 (modify-phases %standard-phases
10788 (add-after 'unpack 'patch-requirements
10789 (lambda _
10790 (substitute* "requirements/test.txt"
10791 (("pytest>=3\\.0,<3\\.3")
10792 "pytest>=3.0"))
10793 #t)))))
10794 (native-inputs
10795 `(("python-case" ,python-case)
10796 ("python-pytest" ,python-pytest)))
10797 (propagated-inputs
10798 `(("python-pytz" ,python-pytz)
10799 ("python-billiard" ,python-billiard)
10800 ("python-kombu" ,python-kombu)))
10801 (home-page "https://celeryproject.org")
10802 (synopsis "Distributed Task Queue")
10803 (description "Celery is an asynchronous task queue/job queue based on
10804 distributed message passing. It is focused on real-time operation, but
10805 supports scheduling as well. The execution units, called tasks, are executed
10806 concurrently on a single or more worker servers using multiprocessing,
10807 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10808 synchronously (wait until ready).")
10809 (license license:bsd-3)
10810 (properties `((python2-variant . ,(delay python2-celery))))))
10811
10812 (define-public python2-celery
10813 (let ((celery (package-with-python2
10814 (strip-python2-variant python-celery))))
10815 (package
10816 (inherit celery)
10817 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10818 ("python2-mock" ,python2-mock)
10819 ,@(package-native-inputs celery))))))
10820
10821 (define-public python-translitcodec
10822 (package
10823 (name "python-translitcodec")
10824 (version "0.4.0")
10825 (source
10826 (origin
10827 (method url-fetch)
10828 (uri (pypi-uri "translitcodec" version))
10829 (sha256
10830 (base32
10831 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10832 (build-system python-build-system)
10833 (arguments
10834 `(#:tests? #f)) ; no tests provided
10835 (home-page
10836 "https://github.com/claudep/translitcodec")
10837 (synopsis
10838 "Unicode to 8-bit charset transliteration codec")
10839 (description
10840 "This package contains codecs for transliterating ISO 10646 texts into
10841 best-effort representations using smaller coded character sets (ASCII,
10842 ISO 8859, etc.).")
10843 (license license:expat)))
10844
10845 (define-public python2-translitcodec
10846 (package-with-python2 python-translitcodec))
10847
10848 (define-public python-editor
10849 (package
10850 (name "python-editor")
10851 (version "1.0.4")
10852 (source
10853 (origin
10854 (method url-fetch)
10855 (uri (pypi-uri "python-editor" version))
10856 (sha256
10857 (base32
10858 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10859 (build-system python-build-system)
10860 (arguments
10861 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10862 (home-page "https://github.com/fmoo/python-editor")
10863 (synopsis "Programmatically open an editor, capture the result")
10864 (description
10865 "python-editor is a library that provides the editor module for
10866 programmatically interfacing with your system's $EDITOR.")
10867 (license license:asl2.0)))
10868
10869 (define-public python2-editor
10870 (package-with-python2 python-editor))
10871
10872 (define-public python-vobject
10873 (package
10874 (name "python-vobject")
10875 (version "0.9.6.1")
10876 (source (origin
10877 (method url-fetch)
10878 (uri (pypi-uri "vobject" version))
10879 (sha256
10880 (base32
10881 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10882 (build-system python-build-system)
10883 (arguments
10884 '(;; The test suite relies on some non-portable Windows interfaces.
10885 #:tests? #f))
10886 (propagated-inputs
10887 `(("python-dateutil" ,python-dateutil)
10888 ("python-pyicu" ,python-pyicu)))
10889 (synopsis "Parse and generate vCard and vCalendar files")
10890 (description "Vobject is intended to be a full featured Python package for
10891 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10892 are supported and well tested. vCard 3.0 files are supported, and all data
10893 should be imported, but only a few components are understood in a sophisticated
10894 way.")
10895 (home-page "https://eventable.github.io/vobject/")
10896 (license license:asl2.0)))
10897
10898 (define-public python2-vobject
10899 (package-with-python2 python-vobject))
10900
10901 (define-public python-munkres
10902 (package
10903 (name "python-munkres")
10904 (version "1.0.8")
10905 (source (origin
10906 (method url-fetch)
10907 (uri (pypi-uri "munkres" version))
10908 (sha256
10909 (base32
10910 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10911 (build-system python-build-system)
10912 (arguments
10913 '(#:tests? #f)) ; no test suite
10914 (home-page "https://software.clapper.org/munkres/")
10915 (synopsis "Implementation of the Munkres algorithm")
10916 (description "The Munkres module provides an implementation of the Munkres
10917 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10918 useful for solving the Assignment Problem.")
10919 (license license:bsd-3)))
10920
10921 (define-public python2-munkres
10922 (package-with-python2 python-munkres))
10923
10924 (define-public python-whoosh
10925 (package
10926 (name "python-whoosh")
10927 (version "2.7.4")
10928 (source
10929 (origin
10930 (method url-fetch)
10931 (uri (pypi-uri "Whoosh" version))
10932 (sha256
10933 (base32
10934 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10935 (build-system python-build-system)
10936 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10937 (native-inputs
10938 `(("python-pytest" ,python-pytest)))
10939 (home-page "https://bitbucket.org/mchaput/whoosh")
10940 (synopsis "Full text indexing, search, and spell checking library")
10941 (description
10942 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10943 checking library.")
10944 (license license:bsd-2)))
10945
10946 (define-public python2-whoosh
10947 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10948 (package (inherit whoosh)
10949 (propagated-inputs
10950 `(("python2-backport-ssl-match-hostname"
10951 ,python2-backport-ssl-match-hostname)
10952 ,@(package-propagated-inputs whoosh))))))
10953
10954 (define-public python-pathlib
10955 (package
10956 (name "python-pathlib")
10957 (version "1.0.1")
10958 (source (origin
10959 (method url-fetch)
10960 (uri (pypi-uri "pathlib" version))
10961 (sha256
10962 (base32
10963 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10964 (build-system python-build-system)
10965 ;; The tests depend on the internal "test" module, which does not provide
10966 ;; a stable interface.
10967 (arguments `(#:tests? #f))
10968 (home-page "https://pathlib.readthedocs.org/")
10969 (synopsis "Object-oriented file system paths")
10970 (description "Pathlib offers a set of classes to handle file system paths.
10971 It offers the following advantages over using string objects:
10972
10973 @enumerate
10974 @item No more cumbersome use of os and os.path functions. Everything can
10975 be done easily through operators, attribute accesses, and method calls.
10976 @item Embodies the semantics of different path types. For example,
10977 comparing Windows paths ignores casing.
10978 @item Well-defined semantics, eliminating any inconsistencies or
10979 ambiguities (forward vs. backward slashes, etc.).
10980 @end enumerate
10981
10982 Note: In Python 3.4, pathlib is now part of the standard library. For other
10983 Python versions please consider python-pathlib2 instead, which tracks the
10984 standard library module. This module (python-pathlib) isn't maintained
10985 anymore.")
10986 (license license:expat)))
10987
10988 (define-public python2-pathlib
10989 (package-with-python2 python-pathlib))
10990
10991 (define-public python2-pathlib2
10992 (package
10993 (name "python2-pathlib2")
10994 (version "2.3.5")
10995 (source (origin
10996 (method url-fetch)
10997 (uri (pypi-uri "pathlib2" version))
10998 (sha256
10999 (base32
11000 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
11001 (build-system python-build-system)
11002 ;; We only need the the Python 2 variant, since for Python 3 our minimum
11003 ;; version is 3.4 which already includes this package as part of the
11004 ;; standard library.
11005 (arguments
11006 `(#:python ,python-2))
11007 (propagated-inputs
11008 `(("python2-scandir" ,python2-scandir)
11009 ("python2-six" ,python2-six)))
11010 (home-page "https://pypi.org/project/pathlib2/")
11011 (synopsis "Object-oriented file system paths - backport of standard
11012 pathlib module")
11013 (description "The goal of pathlib2 is to provide a backport of standard
11014 pathlib module which tracks the standard library module, so all the newest
11015 features of the standard pathlib can be used also on older Python versions.
11016
11017 Pathlib offers a set of classes to handle file system paths. It offers the
11018 following advantages over using string objects:
11019
11020 @enumerate
11021 @item No more cumbersome use of os and os.path functions. Everything can
11022 be done easily through operators, attribute accesses, and method calls.
11023 @item Embodies the semantics of different path types. For example,
11024 comparing Windows paths ignores casing.
11025 @item Well-defined semantics, eliminating any inconsistencies or
11026 ambiguities (forward vs. backward slashes, etc.).
11027 @end enumerate")
11028 (license license:expat)))
11029
11030 (define-public python2-pathlib2-bootstrap
11031 (hidden-package
11032 (package
11033 (inherit python2-pathlib2)
11034 (name "python2-pathlib2-bootstrap")
11035 (propagated-inputs
11036 `(("python2-scandir" ,python2-scandir)
11037 ("python2-six" ,python2-six-bootstrap))))))
11038
11039 (define-public python-jellyfish
11040 (package
11041 (name "python-jellyfish")
11042 (version "0.5.6")
11043 (source (origin
11044 (method url-fetch)
11045 (uri (pypi-uri "jellyfish" version))
11046 (sha256
11047 (base32
11048 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
11049 (build-system python-build-system)
11050 (native-inputs
11051 `(("python-pytest" ,python-pytest)))
11052 (home-page "https://github.com/jamesturk/jellyfish")
11053 (synopsis "Approximate and phonetic matching of strings")
11054 (description "Jellyfish uses a variety of string comparison and phonetic
11055 encoding algorithms to do fuzzy string matching.")
11056 (license license:bsd-2)
11057 (properties `((python2-variant . ,(delay python2-jellyfish))))))
11058
11059 (define-public python2-jellyfish
11060 (let ((jellyfish (package-with-python2
11061 (strip-python2-variant python-jellyfish))))
11062 (package (inherit jellyfish)
11063 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
11064 ,@(package-native-inputs jellyfish))))))
11065
11066 (define-public python2-unicodecsv
11067 (package
11068 (name "python2-unicodecsv")
11069 (version "0.14.1")
11070 (source (origin
11071 (method git-fetch)
11072 ;; The test suite is not included in the PyPi release.
11073 ;; https://github.com/jdunck/python-unicodecsv/issues/19
11074 (uri (git-reference
11075 (url "https://github.com/jdunck/python-unicodecsv")
11076 (commit version)))
11077 (file-name (git-file-name name version))
11078 (sha256
11079 (base32
11080 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
11081 (build-system python-build-system)
11082 (arguments
11083 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
11084 #:python ,python-2))
11085 (native-inputs
11086 `(("python2-unittest2" ,python2-unittest2)))
11087 (home-page "https://github.com/jdunck/python-unicodecsv")
11088 (synopsis "Unicode CSV module for Python 2")
11089 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
11090 module, adding support for Unicode strings.")
11091 (license license:bsd-2)))
11092
11093 (define-public python-rarfile
11094 (package
11095 (name "python-rarfile")
11096 (version "2.8")
11097 (source (origin
11098 (method url-fetch)
11099 (uri (pypi-uri "rarfile" version))
11100 (sha256
11101 (base32
11102 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
11103 (build-system python-build-system)
11104 (arguments
11105 '(#:phases
11106 (modify-phases %standard-phases
11107 (replace 'check
11108 ;; Many tests fail, but the installation proceeds.
11109 (lambda _ (invoke "make" "-C" "test" "test"))))))
11110 (native-inputs
11111 `(("which" ,which))) ; required for tests
11112 (propagated-inputs
11113 `(("libarchive" ,libarchive)))
11114 (home-page "https://github.com/markokr/rarfile")
11115 (synopsis "RAR archive reader for Python")
11116 (description "This is Python module for RAR archive reading. The interface
11117 is made as zipfile like as possible.")
11118 (license license:isc)))
11119
11120 (define-public python2-rarfile
11121 (package-with-python2 python-rarfile))
11122
11123 (define-public python-magic
11124 (package
11125 (name "python-magic")
11126 (version "0.4.15")
11127 (source
11128 (origin
11129 (method url-fetch)
11130 (uri (pypi-uri "python-magic" version))
11131 (sha256
11132 (base32
11133 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
11134 (file-name (string-append name "-" version "-checkout"))))
11135 (build-system python-build-system)
11136 (arguments
11137 ;; The tests are unreliable, so don't run them. The tests fail
11138 ;; under Python3 because they were written for Python2 and
11139 ;; contain import statements that do not work in Python3. One of
11140 ;; the tests fails under Python2 because its assertions are
11141 ;; overly stringent; it relies on comparing output strings which
11142 ;; are brittle and can change depending on the version of
11143 ;; libmagic being used and the system on which the test is
11144 ;; running. In my case, under GuixSD 0.10.0, only one test
11145 ;; failed, and it seems to have failed only because the version
11146 ;; of libmagic that is packaged in Guix outputs a slightly
11147 ;; different (but not wrong) string than the one that the test
11148 ;; expected.
11149 '(#:tests? #f
11150 #:phases (modify-phases %standard-phases
11151 ;; Replace a specific method call with a hard-coded
11152 ;; path to the necessary libmagic.so file in the
11153 ;; store. If we don't do this, then the method call
11154 ;; will fail to find the libmagic.so file, which in
11155 ;; turn will cause any application using
11156 ;; python-magic to fail.
11157 (add-before 'build 'hard-code-path-to-libmagic
11158 (lambda* (#:key inputs #:allow-other-keys)
11159 (let ((file (assoc-ref inputs "file")))
11160 (substitute* "magic.py"
11161 (("ctypes.util.find_library\\('magic'\\)")
11162 (string-append "'" file "/lib/libmagic.so'")))
11163 #t)))
11164 (add-before 'install 'disable-egg-compression
11165 (lambda _
11166 (let ((port (open-file "setup.cfg" "a")))
11167 (display "\n[easy_install]\nzip_ok = 0\n"
11168 port)
11169 (close-port port)
11170 #t))))))
11171 (inputs
11172 ;; python-magic needs to be able to find libmagic.so.
11173 `(("file" ,file)))
11174 (home-page
11175 "https://github.com/ahupp/python-magic")
11176 (synopsis
11177 "File type identification using libmagic")
11178 (description
11179 "This module uses ctypes to access the libmagic file type
11180 identification library. It makes use of the local magic database and
11181 supports both textual and MIME-type output. Note that this module and
11182 the python-file module both provide a \"magic.py\" file; these two
11183 modules, which are different and were developed separately, both serve
11184 the same purpose: to provide Python bindings for libmagic.")
11185 (license license:expat)))
11186
11187 (define-public python2-magic
11188 (package-with-python2 python-magic))
11189
11190 (define-public python2-s3cmd
11191 (package
11192 (name "python2-s3cmd")
11193 (version "1.6.1")
11194 (source
11195 (origin
11196 (method url-fetch)
11197 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
11198 "s3cmd-" version ".tar.gz"))
11199 (sha256
11200 (base32
11201 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
11202 (build-system python-build-system)
11203 (arguments
11204 ;; s3cmd is written for python2 only and contains no tests.
11205 `(#:python ,python-2
11206 #:tests? #f))
11207 (propagated-inputs
11208 `(("python2-dateutil" ,python2-dateutil)
11209 ;; The python-file package also provides a magic.py module.
11210 ;; This is an unfortunate state of affairs; however, s3cmd
11211 ;; fails to install if it cannot find specifically the
11212 ;; python-magic package. Thus we include it, instead of using
11213 ;; python-file. Ironically, s3cmd sometimes works better
11214 ;; without libmagic bindings at all:
11215 ;; https://github.com/s3tools/s3cmd/issues/198
11216 ("python2-magic" ,python2-magic)))
11217 (home-page "https://s3tools.org/s3cmd")
11218 (synopsis "Command line tool for S3-compatible storage services")
11219 (description
11220 "S3cmd is a command line tool for uploading, retrieving and managing data
11221 in storage services that are compatible with the Amazon Simple Storage
11222 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
11223 GnuPG encryption, and more. It also supports management of Amazon's
11224 CloudFront content delivery network.")
11225 (license license:gpl2+)))
11226
11227 (define-public python-pkgconfig
11228 (package
11229 (name "python-pkgconfig")
11230 (version "1.3.1")
11231 (source
11232 (origin
11233 (method url-fetch)
11234 (uri (pypi-uri "pkgconfig" version))
11235 (sha256
11236 (base32
11237 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
11238 (build-system python-build-system)
11239 (native-inputs
11240 `(("python-nose" ,python-nose)))
11241 (inputs
11242 `(("pkg-config" ,pkg-config)))
11243 (arguments
11244 `(#:phases
11245 (modify-phases %standard-phases
11246 (add-before 'build 'patch
11247 ;; Hard-code the path to pkg-config.
11248 (lambda _
11249 (substitute* "pkgconfig/pkgconfig.py"
11250 (("cmd = 'pkg-config")
11251 (string-append "cmd = '" (which "pkg-config"))))
11252 #t))
11253 (replace 'check
11254 (lambda _
11255 (invoke "nosetests" "test.py"))))))
11256 (home-page "https://github.com/matze/pkgconfig")
11257 (synopsis "Python interface for pkg-config")
11258 (description "This module provides a Python interface to pkg-config. It
11259 can be used to find all pkg-config packages, check if a package exists,
11260 check if a package meets certain version requirements, query CFLAGS and
11261 LDFLAGS and parse the output to build extensions with setup.py.")
11262 (license license:expat)))
11263
11264 (define-public python2-pkgconfig
11265 (package-with-python2 python-pkgconfig))
11266
11267 (define-public python-bz2file
11268 (package
11269 (name "python-bz2file")
11270 (version "0.98")
11271 (source
11272 (origin
11273 (method url-fetch)
11274 (uri (pypi-uri "bz2file" version))
11275 (sha256
11276 (base32
11277 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
11278 (build-system python-build-system)
11279 (arguments
11280 `(#:tests? #f)) ; Tests use deprecated python modules.
11281 (home-page "https://github.com/nvawda/bz2file")
11282 (synopsis "Read and write bzip2-compressed files")
11283 (description
11284 "Bz2file is a Python library for reading and writing bzip2-compressed
11285 files. It contains a drop-in replacement for the I/O interface in the
11286 standard library's @code{bz2} module, including features from the latest
11287 development version of CPython that are not available in older releases.")
11288 (license license:asl2.0)))
11289
11290 (define-public python2-bz2file
11291 (package-with-python2 python-bz2file))
11292
11293 (define-public python-future
11294 (package
11295 (name "python-future")
11296 (version "0.17.1")
11297 (source
11298 (origin
11299 (method url-fetch)
11300 (uri (pypi-uri "future" version))
11301 (sha256
11302 (base32
11303 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
11304 (build-system python-build-system)
11305 ;; Many tests connect to the network or are otherwise flawed.
11306 ;; https://github.com/PythonCharmers/python-future/issues/210
11307 (arguments
11308 `(#:tests? #f))
11309 (home-page "https://python-future.org")
11310 (synopsis "Single-source support for Python 3 and 2")
11311 (description
11312 "@code{python-future} is the missing compatibility layer between Python 2 and
11313 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11314 to support both Python 2 and Python 3 with minimal overhead.")
11315 (license license:expat)))
11316
11317 (define-public python2-future
11318 (package-with-python2 python-future))
11319
11320 (define-public python-cysignals
11321 (package
11322 (name "python-cysignals")
11323 (version "1.9.0")
11324 (source
11325 (origin
11326 (method url-fetch)
11327 (uri (pypi-uri "cysignals" version))
11328 (sha256
11329 (base32
11330 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11331 (build-system python-build-system)
11332 (native-inputs
11333 `(("python-cython" ,python-cython)
11334 ("python-sphinx" ,python-sphinx)))
11335 (inputs
11336 `(("pari-gp" ,pari-gp)))
11337 (arguments
11338 `(#:modules ((guix build python-build-system)
11339 ((guix build gnu-build-system) #:prefix gnu:)
11340 (guix build utils))
11341 ;; FIXME: Tests are executed after installation and currently fail
11342 ;; when not installing into standard locations; the author is working
11343 ;; on a fix.
11344 #:tests? #f
11345 #:phases
11346 (modify-phases %standard-phases
11347 (add-before
11348 'build 'configure
11349 (assoc-ref gnu:%standard-phases 'configure)))))
11350 (home-page
11351 "https://github.com/sagemath/cysignals")
11352 (synopsis
11353 "Handling of interrupts and signals for Cython")
11354 (description
11355 "The cysignals package provides mechanisms to handle interrupts (and
11356 other signals and errors) in Cython code, using two related approaches,
11357 for mixed Cython/Python code or external C libraries and pure Cython code,
11358 respectively.")
11359 (license license:lgpl3+)))
11360
11361 (define-public python2-cysignals
11362 (package-with-python2 python-cysignals))
11363
11364 (define-public python2-shedskin
11365 (package
11366 (name "python2-shedskin")
11367 (version "0.9.4")
11368 (source
11369 (origin
11370 (method url-fetch)
11371 (uri (string-append "https://github.com/shedskin/shedskin/"
11372 "releases/download/v" version
11373 "/shedskin-" version ".tgz"))
11374 (sha256
11375 (base32
11376 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11377 (build-system python-build-system)
11378 (arguments
11379 `(#:python ,python-2
11380 #:phases (modify-phases %standard-phases
11381 (add-after 'unpack 'fix-resulting-include-libs
11382 (lambda* (#:key inputs #:allow-other-keys)
11383 (let ((libgc (assoc-ref inputs "libgc"))
11384 (pcre (assoc-ref inputs "pcre")))
11385 (substitute* "shedskin/makefile.py"
11386 (("variable == 'CCFLAGS':[ ]*")
11387 (string-append "variable == 'CCFLAGS':\n"
11388 " line += ' -I " pcre "/include"
11389 " -I " libgc "/include'"))
11390 (("variable == 'LFLAGS':[ ]*")
11391 (string-append "variable == 'LFLAGS':\n"
11392 " line += ' -L" pcre "/lib"
11393 " -L " libgc "/lib'")))
11394 #t))))))
11395 (inputs `(("pcre" ,pcre)
11396 ("libgc" ,libgc)))
11397 (home-page "https://shedskin.github.io/")
11398 (synopsis "Experimental Python-2 to C++ Compiler")
11399 (description (string-append "This is an experimental compiler for a subset of
11400 Python. It generates C++ code and a Makefile."))
11401 (license (list license:gpl3 license:bsd-3 license:expat))))
11402
11403 (define-public python2-rope
11404 (package
11405 (name "python2-rope")
11406 (version "0.11.0")
11407 (source
11408 (origin
11409 (method url-fetch)
11410 (uri (pypi-uri "rope" version))
11411 (sha256
11412 (base32
11413 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11414 (arguments
11415 ;; Rope has only partial python3 support, see `python-rope'
11416 `(#:python ,python-2))
11417 (build-system python-build-system)
11418 (native-inputs
11419 `(("python2-unittest2" ,python2-unittest2)))
11420 (home-page "https://github.com/python-rope/rope")
11421 (synopsis "Refactoring library for Python")
11422 (description "Rope is a refactoring library for Python. It facilitates
11423 the renaming, moving and extracting of attributes, functions, modules, fields
11424 and parameters in Python 2 source code. These refactorings can also be applied
11425 to occurrences in strings and comments.")
11426 (license license:gpl2)))
11427
11428 (define-public python-rope
11429 (package
11430 (inherit python2-rope)
11431 (name "python-rope")
11432 (arguments `(#:python ,python-wrapper
11433 ;; XXX: Only partial python3 support, results in some failing
11434 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11435 #:tests? #f))
11436 (properties `((python2-variant . ,(delay python2-rope))))))
11437
11438 (define-public python-py3status
11439 (package
11440 (name "python-py3status")
11441 (version "3.21")
11442 (source
11443 (origin
11444 (method url-fetch)
11445 (uri (pypi-uri "py3status" version))
11446 (sha256
11447 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11448 (build-system python-build-system)
11449 (inputs
11450 `(("file" ,file)))
11451 (arguments
11452 '(#:phases
11453 (modify-phases %standard-phases
11454 ;; 'file' is used for detection of configuration file encoding
11455 ;; let's make link the dependency to particular input
11456 (add-before 'build 'patch-file-path
11457 (lambda* (#:key inputs #:allow-other-keys)
11458 (let ((file-path (assoc-ref inputs "file")))
11459 (substitute* "py3status/parse_config.py"
11460 (("\\[\"file\", \"-b\"")
11461 (string-append "['" file-path "/bin/file', '-b'")))
11462 #t))))
11463 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11464 (home-page "https://github.com/ultrabug/py3status")
11465 (synopsis "Extensible i3status wrapper written in Python")
11466 (description "py3status is an i3status wrapper which extends i3status
11467 functionality in a modular way, allowing you to extend your panel with your
11468 own code, responding to click events and updating clock every second.")
11469 (license license:bsd-3)))
11470
11471 (define-public python2-selectors2
11472 (package
11473 (name "python2-selectors2")
11474 (version "2.0.1")
11475 (source (origin
11476 (method url-fetch)
11477 (uri (pypi-uri "selectors2" version))
11478 (sha256
11479 (base32
11480 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
11481 (build-system python-build-system)
11482 (arguments
11483 `(#:python ,python-2))
11484 (native-inputs
11485 `(("python2-mock" ,python2-mock)
11486 ("python2-psutil" ,python2-psutil)))
11487 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
11488 (synopsis "Backport of the selectors module from Python 3.5+")
11489 (description
11490 "This package provides a drop-in replacement for the @code{selectors}
11491 module in Python 3.5 and later.")
11492 (license license:expat)))
11493
11494 (define-public python-tblib
11495 (package
11496 (name "python-tblib")
11497 (version "1.6.0")
11498 (source (origin
11499 (method url-fetch)
11500 (uri (pypi-uri "tblib" version))
11501 (sha256
11502 (base32
11503 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11504 (build-system python-build-system)
11505 (arguments
11506 `(#:phases
11507 (modify-phases %standard-phases
11508 (replace 'check
11509 (lambda _
11510 ;; Upstream runs tests after installation and the package itself
11511 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11512 ;; found.
11513 (setenv "PYTHONPATH"
11514 (string-append (getcwd) "/build/lib:"
11515 (getenv "PYTHONPATH")))
11516 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11517 (native-inputs
11518 `(("python-pytest" ,python-pytest)
11519 ("python-six" ,python-six)))
11520 (home-page "https://github.com/ionelmc/python-tblib")
11521 (synopsis "Traceback serialization library")
11522 (description
11523 "Traceback serialization allows you to:
11524
11525 @enumerate
11526 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11527 different processes. This allows better error handling when running code over
11528 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11529
11530 @item Parse traceback strings and raise with the parsed tracebacks.
11531 @end enumerate\n")
11532 (license license:bsd-3)))
11533
11534 (define-public python2-tblib
11535 (package-with-python2 python-tblib))
11536
11537 (define-public python-greenlet
11538 (package
11539 (name "python-greenlet")
11540 (version "0.4.16")
11541 (source (origin
11542 (method url-fetch)
11543 (uri (pypi-uri "greenlet" version))
11544 (sha256
11545 (base32
11546 "0v2571d0av1hz3yx63gvmnrinyn57nnvibg4zkl9frv74b3yl1kf"))))
11547 (build-system python-build-system)
11548 (home-page "https://greenlet.readthedocs.io/")
11549 (synopsis "Lightweight in-process concurrent programming")
11550 (description
11551 "Greenlet package is a spin-off of Stackless, a version of CPython
11552 that supports micro-threads called \"tasklets\". Tasklets run
11553 pseudo-concurrently (typically in a single or a few OS-level threads) and
11554 are synchronized with data exchanges on \"channels\".")
11555 (license (list license:psfl license:expat))))
11556
11557 (define-public python2-greenlet
11558 (package-with-python2 python-greenlet))
11559
11560 (define-public python-objgraph
11561 (package
11562 (name "python-objgraph")
11563 (version "3.4.1")
11564 (source
11565 (origin
11566 (method url-fetch)
11567 (uri (pypi-uri "objgraph" version))
11568 (sha256
11569 (base32
11570 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11571 (build-system python-build-system)
11572 (propagated-inputs
11573 `(("python-graphviz" ,python-graphviz)))
11574 (native-inputs
11575 `(("python-mock" ,python-mock)
11576 ("graphviz" ,graphviz)))
11577 (home-page "https://mg.pov.lt/objgraph/")
11578 (synopsis "Draw Python object reference graphs with graphviz")
11579 (description
11580 "This package provides tools to draw Python object reference graphs with
11581 graphviz.")
11582 (license license:expat)))
11583
11584 (define-public python2-objgraph
11585 (package-with-python2 python-objgraph))
11586
11587 (define-public python-gevent
11588 (package
11589 (name "python-gevent")
11590 (version "20.6.2")
11591 (source (origin
11592 (method url-fetch)
11593 (uri (pypi-uri "gevent" version))
11594 (sha256
11595 (base32
11596 "1ldmppgghfphdaazjw6wq2i17xcmsjb2jsizfa4cjlg812zjlg52"))
11597 (modules '((guix build utils)))
11598 (snippet
11599 '(begin
11600 ;; unbunding libev and c-ares
11601 (delete-file-recursively "deps")
11602 #t))))
11603 (build-system python-build-system)
11604 (arguments
11605 `(#:modules ((ice-9 ftw)
11606 (ice-9 match)
11607 (srfi srfi-26)
11608 (guix build utils)
11609 (guix build python-build-system))
11610 #:phases (modify-phases %standard-phases
11611 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11612 (lambda _
11613 (substitute* "src/gevent/subprocess.py"
11614 (("/bin/sh") (which "sh")))
11615 (for-each (lambda (file)
11616 (substitute* file
11617 (("/bin/sh") (which "sh"))
11618 (("/bin/true") (which "true"))))
11619 (find-files "src/greentest" "\\.py$"))
11620 #t))
11621 (add-before 'build 'do-not-use-bundled-sources
11622 (lambda _
11623 (setenv "GEVENTSETUP_EMBED" "0")
11624
11625 ;; Prevent building bundled libev.
11626 (substitute* "setup.py"
11627 (("run_make=_BUILDING")
11628 "run_make=False"))
11629 #t))
11630 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11631 (lambda* (#:key inputs #:allow-other-keys)
11632 (let ((greenlet (string-append
11633 (assoc-ref inputs "python-greenlet")
11634 "/include")))
11635 (match (scandir greenlet
11636 (lambda (item)
11637 (string-prefix? "python" item)))
11638 ((python)
11639 (setenv "C_INCLUDE_PATH"
11640 (string-append greenlet "/" python ":"
11641 (or (getenv "C_INCLUDE_PATH")
11642 ""))))))
11643 #t))
11644 (add-before 'check 'pretend-to-be-CI
11645 (lambda _
11646 ;; A few tests are skipped due to network constraints or
11647 ;; get longer timeouts when running in a CI environment.
11648 ;; Piggy-back on that, as we need the same adjustments.
11649 (setenv "TRAVIS" "1")
11650 (setenv "APPVEYOR" "1")
11651 #t))
11652 (add-before 'check 'adjust-tests
11653 (lambda _
11654 (let ((disabled-tests
11655 '(;; These tests rely on networking which is not
11656 ;; available in the build container.
11657 "test_urllib2net.py"
11658 "test__server.py"
11659 "test__server_pywsgi.py"
11660 "test_socket.py"
11661 "test__socket.py"
11662 "test__socket_ssl.py"
11663 "test__socket_dns.py"
11664 "test__socket_dns6.py"
11665 "test___example_servers.py"
11666 "test__getaddrinfo_import.py"
11667 "test__examples.py"
11668 "test_httplib.py"
11669 "test_https.py"
11670 "test_urllib2_localnet.py"
11671 "test_ssl.py"
11672 "test__ssl.py"
11673 ;; XXX: These tests borrow functionality from the
11674 ;; Python builtin 'test' module, but it is not
11675 ;; installed with the Guix Python distribution.
11676 "test_smtpd.py"
11677 "test_wsgiref.py"
11678 "test_urllib2.py"
11679 "test_thread.py"
11680 "test_threading.py"
11681 "test__threading_2.py"
11682 ;; These tests rely on KeyboardInterrupts which do not
11683 ;; work inside the build container for some reason
11684 ;; (lack of controlling terminal?).
11685 "test_subprocess.py"
11686 "test__issues461_471.py"
11687 ;; TODO: Patch out the tests that use getprotobyname, etc
11688 ;; instead of disabling all the tests from these files.
11689 "test__resolver_dnspython.py"
11690 "test__doctests.py"
11691 "test__all__.py"
11692 "test___config.py"
11693 "test__execmodules.py")))
11694 (call-with-output-file "skipped_tests.txt"
11695 (lambda (port)
11696 (format port "~a~%"
11697 (string-join disabled-tests "\n"))))
11698 #t)))
11699 (replace 'check
11700 (lambda _
11701 ;; Make sure the build directory is on PYTHONPATH.
11702 (setenv "PYTHONPATH"
11703 (string-append
11704 (getenv "PYTHONPATH") ":"
11705 (getcwd) "/build/"
11706 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11707
11708 ;; Use the build daemons configured number of workers.
11709 (setenv "NWORKERS" (number->string (parallel-job-count)))
11710
11711 (invoke "python" "-m" "gevent.tests" "--config"
11712 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11713 (propagated-inputs
11714 `(("python-greenlet" ,python-greenlet)
11715 ("python-objgraph" ,python-objgraph)
11716 ("python-zope.event" ,python-zope-event)
11717 ("python-zope.interface" ,python-zope-interface)))
11718 (native-inputs
11719 `(("python-six" ,python-six)
11720
11721 ;; For tests.
11722 ("python-dnspython" ,python-dnspython)
11723 ("python-psutil" ,python-psutil)))
11724 (inputs
11725 `(("c-ares" ,c-ares)
11726 ("libev" ,libev)))
11727 (home-page "http://www.gevent.org/")
11728 (synopsis "Coroutine-based network library")
11729 (description
11730 "gevent is a coroutine-based Python networking library that uses greenlet
11731 to provide a high-level synchronous API on top of the libev event loop.")
11732 (license license:expat)
11733 (properties `((python2-variant . ,(delay python2-gevent))))))
11734
11735 (define-public python2-gevent
11736 (let ((base (package-with-python2
11737 (strip-python2-variant python-gevent))))
11738 (package
11739 (inherit base)
11740 (native-inputs `(,@(package-native-inputs base)
11741 ("python-mock" ,python2-mock)
11742 ("python2-selectors2" ,python2-selectors2))))))
11743
11744 (define-public python-fastimport
11745 (package
11746 (name "python-fastimport")
11747 (version "0.9.8")
11748 (source
11749 (origin
11750 (method url-fetch)
11751 (uri (pypi-uri "fastimport" version))
11752 (sha256
11753 (base32 "1fb3b7y3sw55f6wykxx478ybkirz0l52lgdqmbhmc0h0jzmyiwmj"))))
11754 (build-system python-build-system)
11755 (home-page "https://github.com/jelmer/python-fastimport")
11756 (synopsis "VCS fastimport parser and generator in Python")
11757 (description "This package provides a parser for and generator of the Git
11758 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11759 format.")
11760 (license license:gpl2+)))
11761
11762 (define-public python2-fastimport
11763 (package-with-python2 python-fastimport))
11764
11765 (define-public python-twisted
11766 (package
11767 (name "python-twisted")
11768 (version "19.7.0")
11769 (source (origin
11770 (method url-fetch)
11771 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11772 (sha256
11773 (base32
11774 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11775 (build-system python-build-system)
11776 (arguments
11777 '(#:tests? #f)) ; FIXME: some tests fail
11778 (propagated-inputs
11779 `(("python-zope-interface" ,python-zope-interface)
11780 ("python-pyhamcrest" ,python-pyhamcrest)
11781 ("python-incremental" ,python-incremental)
11782 ("python-hyperlink" ,python-hyperlink)
11783 ("python-constantly" ,python-constantly)
11784 ("python-automat" ,python-automat)))
11785 (home-page "https://twistedmatrix.com/")
11786 (synopsis "Asynchronous networking framework written in Python")
11787 (description
11788 "Twisted is an extensible framework for Python programming, with special
11789 focus on event-based network programming and multiprotocol integration.")
11790 (license license:expat)))
11791
11792 (define-public python2-twisted
11793 (package-with-python2 python-twisted))
11794
11795 (define-public python-pika
11796 (package
11797 (name "python-pika")
11798 (version "0.12.0")
11799 (source
11800 (origin
11801 (method url-fetch)
11802 (uri (pypi-uri "pika" version))
11803 (sha256
11804 (base32
11805 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11806 (build-system python-build-system)
11807 (native-inputs
11808 `(("python-pyev" ,python-pyev)
11809 ("python-tornado" ,python-tornado)
11810 ("python-twisted" ,python-twisted)))
11811 (home-page "https://pika.readthedocs.org")
11812 (synopsis "Pure Python AMQP Client Library")
11813 (description
11814 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11815 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11816 network support library.")
11817 (license license:bsd-3)))
11818
11819 (define-public python2-pika
11820 (package-with-python2 python-pika))
11821
11822 (define-public python-ply
11823 (package
11824 (name "python-ply")
11825 (version "3.11")
11826 (source
11827 (origin
11828 (method url-fetch)
11829 (uri (pypi-uri "ply" version))
11830 (sha256
11831 (base32
11832 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11833 (build-system python-build-system)
11834 (home-page "http://www.dabeaz.com/ply/")
11835 (synopsis "Python Lex & Yacc")
11836 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11837 It uses LR parsing and does extensive error checking.")
11838 (license license:bsd-3)))
11839
11840 (define-public python-tabulate
11841 (package
11842 (name "python-tabulate")
11843 (version "0.8.7")
11844 (source (origin
11845 (method url-fetch)
11846 (uri (pypi-uri "tabulate" version))
11847 (sha256
11848 (base32
11849 "01shi7bmj09f0bcm5s0c9skys063lzp76p0n4a2xmg041ni269yv"))))
11850 (build-system python-build-system)
11851 (arguments
11852 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11853 ;; and the latest release is not tagged in the upstream repository.
11854 '(#:tests? #f))
11855 (home-page "https://bitbucket.org/astanin/python-tabulate")
11856 (synopsis "Pretty-print tabular data")
11857 (description
11858 "Tabulate is a library and command-line utility to pretty-print tabular
11859 data in Python.")
11860 (license license:expat)))
11861
11862 (define-public python2-tabulate
11863 (package-with-python2 python-tabulate))
11864
11865 (define-public python-kazoo
11866 (package
11867 (name "python-kazoo")
11868 (version "2.4.0")
11869 (source
11870 (origin
11871 (method url-fetch)
11872 (uri (pypi-uri "kazoo" version))
11873 (sha256
11874 (base32
11875 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11876 (build-system python-build-system)
11877 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11878 (propagated-inputs
11879 `(("python-six" ,python-six)))
11880 (home-page "https://kazoo.readthedocs.org")
11881 (synopsis "High-level Zookeeper client library")
11882 (description
11883 "Kazoo is a Python client library for the Apache Zookeeper distributed
11884 application service. It is designed to be easy to use and to avoid common
11885 programming errors.")
11886 (license license:asl2.0)))
11887
11888 (define-public python2-kazoo
11889 (package-with-python2 python-kazoo))
11890
11891 (define-public python-pykafka
11892 (package
11893 (name "python-pykafka")
11894 (version "2.4.0")
11895 (source (origin
11896 (method url-fetch)
11897 (uri (pypi-uri "pykafka" version))
11898 (sha256
11899 (base32
11900 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11901 (build-system python-build-system)
11902 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11903 (propagated-inputs
11904 `(("python-gevent" ,python-gevent)
11905 ("python-kazoo" ,python-kazoo)
11906 ("python-tabulate" ,python-tabulate)))
11907 (inputs
11908 `(("librdkafka" ,librdkafka)))
11909 (home-page "https://pykafka.readthedocs.io/")
11910 (synopsis "Apache Kafka client for Python")
11911 (description
11912 "PyKafka is a client for the Apache Kafka distributed messaging system.
11913 It includes Python implementations of Kafka producers and consumers, which
11914 are optionally backed by a C extension built on librdkafka.")
11915 (license license:asl2.0)))
11916
11917 (define-public python2-pykafka
11918 (package-with-python2 python-pykafka))
11919
11920 (define-public python-wcwidth
11921 (package
11922 (name "python-wcwidth")
11923 (version "0.1.8")
11924 (source (origin
11925 (method url-fetch)
11926 (uri (pypi-uri "wcwidth" version))
11927 (sha256
11928 (base32
11929 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11930 (build-system python-build-system)
11931 (home-page "https://github.com/jquast/wcwidth")
11932 (synopsis "Measure number of terminal column cells of wide-character codes")
11933 (description "Wcwidth measures the number of terminal column cells of
11934 wide-character codes. It is useful for those implementing a terminal emulator,
11935 or programs that carefully produce output to be interpreted by one. It is a
11936 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11937 specified in POSIX.1-2001 and POSIX.1-2008.")
11938 (license license:expat)))
11939
11940 (define-public python2-wcwidth
11941 (package-with-python2 python-wcwidth))
11942
11943 (define-public python2-jsonrpclib
11944 (package
11945 (name "python2-jsonrpclib")
11946 (version "0.1.7")
11947 (source (origin
11948 (method url-fetch)
11949 (uri (pypi-uri "jsonrpclib" version))
11950 (sha256
11951 (base32
11952 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11953 (build-system python-build-system)
11954 (arguments
11955 `(#:tests? #f
11956 #:python ,python-2))
11957 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11958 (synopsis "Implementation of JSON-RPC specification for Python")
11959 (description
11960 "This library is an implementation of the JSON-RPC specification.
11961 It supports both the original 1.0 specification, as well as the
11962 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11963 etc.")
11964 (license license:asl2.0)))
11965
11966 (define-public python-chai
11967 (package
11968 (name "python-chai")
11969 (version "1.1.2")
11970 (source (origin
11971 (method url-fetch)
11972 (uri (pypi-uri "chai" version))
11973 (sha256
11974 (base32
11975 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11976 (build-system python-build-system)
11977 (home-page "https://github.com/agoragames/chai")
11978 (synopsis "Mocking framework for Python")
11979 (description
11980 "Chai provides an api for mocking, stubbing and spying your python
11981 objects, patterned after the Mocha library for Ruby.")
11982 (license license:bsd-3)))
11983
11984 (define-public python2-chai
11985 (package-with-python2 python-chai))
11986
11987 (define-public python-inflection
11988 (package
11989 (name "python-inflection")
11990 (version "0.3.1")
11991 (source
11992 (origin (method url-fetch)
11993 (uri (pypi-uri "inflection" version))
11994 (sha256
11995 (base32
11996 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11997 (build-system python-build-system)
11998 (native-inputs
11999 `(("python-pytest" ,python-pytest)))
12000 (home-page "https://github.com/jpvanhal/inflection")
12001 (synopsis "Python string transformation library")
12002 (description
12003 "Inflection is a string transformation library. It singularizes
12004 and pluralizes English words, and transforms strings from CamelCase to
12005 underscored string.")
12006 (license license:expat)))
12007
12008 (define-public python2-inflection
12009 (package-with-python2 python-inflection))
12010
12011 (define-public python-pylev
12012 (package
12013 (name "python-pylev")
12014 (version "1.3.0")
12015 (source (origin
12016 (method url-fetch)
12017 (uri (pypi-uri "pylev" version))
12018 (sha256
12019 (base32
12020 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
12021 (build-system python-build-system)
12022 (home-page "https://github.com/toastdriven/pylev")
12023 (synopsis "Levenshtein distance implementation in Python")
12024 (description "Pure Python Levenshtein implementation, based off the
12025 Wikipedia code samples at
12026 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
12027 (license license:bsd-3)))
12028
12029 (define-public python2-pylev
12030 (package-with-python2 python-pylev))
12031
12032 (define-public python-cleo
12033 (package
12034 (name "python-cleo")
12035 (version "0.7.6")
12036 (source (origin
12037 (method url-fetch)
12038 (uri (pypi-uri "cleo" version))
12039 (sha256
12040 (base32
12041 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
12042 (build-system python-build-system)
12043 (native-inputs
12044 `( ;; For testing
12045 ("python-mock" ,python-mock)
12046 ("python-pytest-mock" ,python-pytest-mock)
12047 ("python-pytest" ,python-pytest)))
12048 (propagated-inputs
12049 `(("python-backpack" ,python-backpack)
12050 ("python-clikit" ,python-clikit)
12051 ("python-pastel" ,python-pastel)
12052 ("python-pylev" ,python-pylev)))
12053 (home-page "https://github.com/sdispater/cleo")
12054 (synopsis "Command-line arguments library for Python")
12055 (description
12056 "Cleo allows you to create command-line commands with signature in
12057 docstring and colored output.")
12058 (license license:expat)))
12059
12060 (define-public python2-cleo
12061 (package-with-python2 python-cleo))
12062
12063 (define-public python-tomlkit
12064 (package
12065 (name "python-tomlkit")
12066 (version "0.5.11")
12067 (source
12068 (origin
12069 (method url-fetch)
12070 (uri (pypi-uri "tomlkit" version))
12071 (sha256
12072 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
12073 (build-system python-build-system)
12074 (native-inputs
12075 `(("python-pytest" ,python-pytest)))
12076 (home-page "https://github.com/sdispater/tomlkit")
12077 (synopsis "Style-preserving TOML library")
12078 (description
12079 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
12080 preserves all comments, indentations, whitespace and internal element ordering,
12081 and makes them accessible and editable via an intuitive API. It can also
12082 create new TOML documents from scratch using the provided helpers. Part of the
12083 implementation has been adapted, improved, and fixed from Molten.")
12084 (license license:expat)))
12085
12086 (define-public python-shellingham
12087 (package
12088 (name "python-shellingham")
12089 (version "1.3.2")
12090 (source
12091 (origin
12092 (method url-fetch)
12093 (uri (pypi-uri "shellingham" version))
12094 (sha256
12095 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
12096 (build-system python-build-system)
12097 (arguments
12098 `(#:phases
12099 (modify-phases %standard-phases
12100 (add-after 'unpack 'restore-setup.py
12101 ;; setup.py will return in the next release.
12102 ;; <https://github.com/sarugaku/shellingham/issues/33>
12103 (lambda _
12104 (with-output-to-file "setup.py"
12105 (lambda _
12106 (display "from setuptools import setup\nsetup()\n")))
12107 #t)))))
12108 (home-page "https://github.com/sarugaku/shellingham")
12109 (synopsis "Tool to detect surrounding shell")
12110 (description
12111 "Shellingham detects what shell the current Python executable is
12112 running in.")
12113 (license license:isc)))
12114
12115 (define-public python-memcached
12116 (package
12117 (name "python-memcached")
12118 (version "1.59")
12119 (source
12120 (origin
12121 (method url-fetch)
12122 (uri (pypi-uri "python-memcached" version))
12123 (sha256
12124 (base32
12125 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
12126 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
12127 (build-system python-build-system)
12128 (propagated-inputs `(("python-six" ,python-six)))
12129 (home-page
12130 "https://github.com/linsomniac/python-memcached")
12131 (synopsis "Pure python memcached client")
12132 (description
12133 "This software is a pure Python interface to the memcached memory cache
12134 daemon. It is the client side software which allows storing values in one or
12135 more, possibly remote, memcached servers.")
12136 (license license:psfl)))
12137
12138 (define-public python-clikit
12139 (package
12140 (name "python-clikit")
12141 (version "0.4.2")
12142 (source
12143 (origin
12144 (method url-fetch)
12145 (uri (pypi-uri "clikit" version))
12146 (sha256
12147 (base32
12148 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
12149 (build-system python-build-system)
12150 (propagated-inputs
12151 `(("python-pastel" ,python-pastel)
12152 ("python-pylev" ,python-pylev)))
12153 (home-page "https://github.com/sdispater/clikit")
12154 (synopsis "Group of utilities to build command line interfaces")
12155 (description
12156 "CliKit is a group of utilities to build testable command line
12157 interfaces.")
12158 (properties `((python2-variant . ,(delay python2-clikit))))
12159 (license license:expat)))
12160
12161 (define-public python2-clikit
12162 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
12163 (package/inherit
12164 base
12165 (propagated-inputs
12166 `(("python-enum34" ,python2-enum34)
12167 ("python-typing" ,python2-typing)
12168 ,@(package-propagated-inputs base))))))
12169
12170 (define-public python-msgpack-python
12171 (package
12172 (name "python-msgpack-python")
12173 (version "0.5.6")
12174 (source
12175 (origin
12176 (method url-fetch)
12177 (uri (pypi-uri "msgpack-python" version))
12178 (sha256
12179 (base32
12180 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
12181 (build-system python-build-system)
12182 (home-page "http://msgpack.org/")
12183 (synopsis "Package to deserialize messages in MessagePack binary format")
12184 (description
12185 "MessagePack is an efficient binary serialization format. It lets you
12186 exchange data among multiple languages like JSON. But it's faster and
12187 smaller. Small integers are encoded into a single byte, and typical short
12188 strings require only one extra byte in addition to the strings themselves.")
12189 (license license:asl2.0)))
12190
12191 (define-public python-cachy
12192 (package
12193 (name "python-cachy")
12194 (version "0.3.0")
12195 (source
12196 (origin
12197 (method url-fetch)
12198 (uri (pypi-uri "cachy" version))
12199 (sha256
12200 (base32
12201 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
12202 (build-system python-build-system)
12203 (arguments
12204 '(#:phases
12205 (modify-phases %standard-phases
12206 (replace 'check
12207 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
12208 "pytest"))))))
12209 (native-inputs
12210 `(("memcached" ,memcached)
12211 ("python-fakeredis" ,python-fakeredis)
12212 ("python-flexmock" ,python-flexmock)
12213 ("python-pifpaf" ,python-pifpaf)
12214 ("python-pytest" ,python-pytest)))
12215 (propagated-inputs
12216 `(("python-memcached" ,python-memcached)
12217 ("python-msgpack-python" ,python-msgpack-python)
12218 ("python-redis" ,python-redis)))
12219 (home-page "https://github.com/sdispater/cachy")
12220 (synopsis "Simple yet effective caching library")
12221 (description
12222 "Cachy provides a simple yet effective caching library. A simple but
12223 powerful API: thread-safety; decorator syntax; support for memcached, redis,
12224 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
12225 (license license:expat)))
12226
12227 (define-public poetry
12228 (package
12229 (name "poetry")
12230 (version "1.0.9")
12231 ;; Poetry can only be built from source with Poetry.
12232 (source
12233 (origin
12234 (method url-fetch)
12235 (uri (pypi-uri "poetry" version))
12236 (sha256
12237 (base32
12238 "1avp0db1a4hf6lz3wrzhpdvj4rpmzr4in3myrd3lp5j66nc5ck0a"))))
12239 (build-system python-build-system)
12240 (arguments
12241 `(#:tests? #f ;; Pypi does not have tests.
12242 #:phases
12243 (modify-phases %standard-phases
12244 (add-before 'build 'patch-setup-py
12245 (lambda _
12246 (substitute* "setup.py"
12247 ;; poetry won't update version as 21.0.0 relies on python > 3.6
12248 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
12249 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0"))
12250 #t)))))
12251 (propagated-inputs
12252 `(("python-cachecontrol" ,python-cachecontrol)
12253 ("python-cachy" ,python-cachy)
12254 ("python-cleo" ,python-cleo)
12255 ("python-clikit" ,python-clikit)
12256 ("python-html5lib" ,python-html5lib)
12257 ("python-jsonschema" ,python-jsonschema)
12258 ("python-keyring" ,python-keyring)
12259 ("python-msgpack-transitional" ,python-msgpack-transitional)
12260 ("python-pexpect" ,python-pexpect)
12261 ("python-pkginfo" ,python-pkginfo)
12262 ("python-pyparsing" ,python-pyparsing)
12263 ("python-pyrsistent" ,python-pyrsistent)
12264 ("python-requests" ,python-requests)
12265 ("python-requests-toolbelt" ,python-requests-toolbelt)
12266 ("python-shellingham" ,python-shellingham)
12267 ("python-tomlkit" ,python-tomlkit)
12268 ("python-virtualenv" ,python-virtualenv)))
12269 (home-page "https://python-poetry.org")
12270 (synopsis "Python dependency management and packaging made easy")
12271 (description "Poetry is a tool for dependency management and packaging
12272 in Python. It allows you to declare the libraries your project depends on and
12273 it will manage (install/update) them for you.")
12274 (license license:expat)))
12275
12276 (define-public python-lazy-object-proxy
12277 (package
12278 (name "python-lazy-object-proxy")
12279 (version "1.4.3")
12280 (source (origin
12281 (method url-fetch)
12282 (uri (pypi-uri "lazy-object-proxy" version))
12283 (sha256
12284 (base32
12285 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
12286 (native-inputs
12287 `(("python-setuptools-scm" ,python-setuptools-scm)))
12288 (build-system python-build-system)
12289 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
12290 (synopsis "Lazy object proxy for python")
12291 (description
12292 "Lazy object proxy is an object that wraps a callable but defers the call
12293 until the object is actually required, and caches the result of said call.")
12294 (license license:bsd-2)))
12295
12296 (define-public python2-lazy-object-proxy
12297 (package-with-python2 python-lazy-object-proxy))
12298
12299 (define-public python-dnspython
12300 (package
12301 (name "python-dnspython")
12302 (version "1.16.0")
12303 (source (origin
12304 (method url-fetch)
12305 (uri (string-append "http://www.dnspython.org/kits/"
12306 version "/dnspython-" version ".tar.gz"))
12307 (sha256
12308 (base32
12309 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
12310 (build-system python-build-system)
12311 (arguments '(#:tests? #f)) ; XXX: requires internet access
12312 (home-page "http://www.dnspython.org")
12313 (synopsis "DNS toolkit for Python")
12314 (description
12315 "dnspython is a DNS toolkit for Python. It supports almost all record
12316 types. It can be used for queries, zone transfers, and dynamic updates.
12317 It supports TSIG authenticated messages and EDNS0.")
12318 (license license:expat)))
12319
12320 (define-public python2-dnspython
12321 (package-with-python2 python-dnspython))
12322
12323 (define-public python-email-validator
12324 (package
12325 (name "python-email-validator")
12326 (version "1.0.2")
12327 (source
12328 (origin (method url-fetch)
12329 (uri (pypi-uri "email_validator" version))
12330 (sha256
12331 (base32
12332 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
12333 (build-system python-build-system)
12334 (arguments
12335 '(#:phases
12336 (modify-phases %standard-phases
12337 (add-before 'build 'use-dnspython
12338 (lambda _
12339 (substitute* "setup.py"
12340 (("dnspython3") "dnspython"))
12341 #t)))))
12342 (propagated-inputs
12343 `(("python-dnspython" ,python-dnspython)
12344 ("python-idna" ,python-idna)))
12345 (home-page "https://github.com/JoshData/python-email-validator")
12346 (synopsis "Email address validation library for Python")
12347 (description
12348 "This library validates email address syntax and deliverability.")
12349 (license license:cc0)))
12350
12351 (define-public python2-email-validator
12352 (package-with-python2 python-email-validator))
12353
12354 (define-public python-ukpostcodeparser
12355 (package
12356 (name "python-ukpostcodeparser")
12357 (version "1.0.3")
12358 (source (origin
12359 (method url-fetch)
12360 (uri (pypi-uri "UkPostcodeParser" version))
12361 (sha256
12362 (base32
12363 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12364 (build-system python-build-system)
12365 (home-page "https://github.com/hamstah/ukpostcodeparser")
12366 (synopsis "UK Postcode parser for Python")
12367 (description
12368 "This library provides the @code{parse_uk_postcode} function for
12369 parsing UK postcodes.")
12370 (license license:expat)))
12371
12372 (define-public python2-ukpostcodeparser
12373 (package-with-python2 python-ukpostcodeparser))
12374
12375 (define-public python-faker
12376 (package
12377 (name "python-faker")
12378 (version "4.0.2")
12379 (source (origin
12380 (method url-fetch)
12381 (uri (pypi-uri "Faker" version))
12382 (sha256
12383 (base32
12384 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12385 (build-system python-build-system)
12386 (arguments
12387 '(#:phases
12388 (modify-phases %standard-phases
12389 (replace 'check
12390 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12391 (native-inputs
12392 `(;; For testing
12393 ("python-freezegun" ,python-freezegun)
12394 ("python-pytest" ,python-pytest)
12395 ("python-random2" ,python-random2)
12396 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12397 ("python-validators" ,python-validators)))
12398 (propagated-inputs
12399 `(("python-dateutil" ,python-dateutil)
12400 ("python-text-unidecode" ,python-text-unidecode)))
12401 (home-page "https://github.com/joke2k/faker")
12402 (synopsis "Python package that generates fake data")
12403 (description
12404 "Faker is a Python package that generates fake data such as names,
12405 addresses, and phone numbers.")
12406 (license license:expat)
12407 (properties `((python2-variant . ,(delay python2-faker))))))
12408
12409 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12410 (define-public python2-faker
12411 (let ((base (package-with-python2 (strip-python2-variant
12412 python-faker))))
12413 (package
12414 (inherit base)
12415 (version "3.0.1")
12416 (source (origin
12417 (method url-fetch)
12418 (uri (pypi-uri "Faker" version))
12419 (sha256
12420 (base32
12421 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12422 (native-inputs
12423 `(("python-mock" ,python2-mock)
12424 ,@(package-native-inputs base)))
12425 (propagated-inputs
12426 `(("python2-ipaddress" ,python2-ipaddress)
12427 ("python2-six" ,python2-six)
12428 ,@(package-propagated-inputs base))))))
12429
12430 (define-public python-pyaml
12431 (package
12432 (name "python-pyaml")
12433 (version "18.11.0")
12434 (source (origin
12435 (method url-fetch)
12436 (uri (pypi-uri "pyaml" version))
12437 (sha256
12438 (base32
12439 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12440 (build-system python-build-system)
12441 (native-inputs
12442 `(("python-unidecode" ,python-unidecode)))
12443 (propagated-inputs
12444 `(("python-pyyaml" ,python-pyyaml)))
12445 (home-page "https://github.com/mk-fg/pretty-yaml")
12446 (synopsis "YAML pretty-print library for Python")
12447 (description
12448 "pyaml is a PyYAML based python module to produce pretty and readable
12449 YAML-serialized data.")
12450 (license license:wtfpl2)))
12451
12452 (define-public python2-pyaml
12453 (package-with-python2 python-pyaml))
12454
12455 (define-public python-backpack
12456 (package
12457 (name "python-backpack")
12458 (version "0.1")
12459 (source
12460 (origin
12461 (method url-fetch)
12462 (uri (pypi-uri "backpack" version))
12463 (sha256
12464 (base32
12465 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12466 (build-system python-build-system)
12467 (native-inputs
12468 `(("python-pytest" ,python-pytest)
12469 ("python-nose" ,python-nose)))
12470 (propagated-inputs
12471 `(("python-simplejson" ,python-simplejson)))
12472 (home-page "https://github.com/sdispater/backpack")
12473 (synopsis "Utilities for working with Python collections")
12474 (description "Backpack provides some useful utilities for working with
12475 collections of data.")
12476 (license license:expat)))
12477
12478 (define-public python2-backpack
12479 (package-with-python2 python-backpack))
12480
12481 (define-public python-prompt-toolkit
12482 (package
12483 (name "python-prompt-toolkit")
12484 (version "3.0.5")
12485 (source
12486 (origin
12487 (method url-fetch)
12488 (uri (pypi-uri "prompt_toolkit" version))
12489 (sha256
12490 (base32
12491 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12492 (build-system python-build-system)
12493 (arguments
12494 `(#:phases
12495 (modify-phases %standard-phases
12496 (delete 'check)
12497 (add-after 'install 'post-install-check
12498 (lambda* (#:key inputs outputs #:allow-other-keys)
12499 ;; HOME is needed for the test
12500 ;; "test_pathcompleter_can_expanduser".
12501 (setenv "HOME" "/tmp")
12502 (add-installed-pythonpath inputs outputs)
12503 (invoke "py.test"))))))
12504 (propagated-inputs
12505 `(("python-wcwidth" ,python-wcwidth)))
12506 (native-inputs
12507 `(("python-pytest" ,python-pytest)))
12508 (home-page
12509 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12510 (synopsis "Library for building command line interfaces in Python")
12511 (description
12512 "Prompt-Toolkit is a library for building interactive command line
12513 interfaces in Python. It's like GNU Readline but it also features syntax
12514 highlighting while typing, out-of-the-box multi-line input editing, advanced
12515 code completion, incremental search, support for Chinese double-width
12516 characters, mouse support, and auto suggestions.")
12517 (license license:bsd-3)))
12518
12519 (define-public python-prompt-toolkit-2
12520 (package (inherit python-prompt-toolkit)
12521 (name "python-prompt-toolkit")
12522 (version "2.0.7")
12523 (source
12524 (origin
12525 (method url-fetch)
12526 (uri (pypi-uri "prompt_toolkit" version))
12527 (sha256
12528 (base32
12529 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12530 (propagated-inputs
12531 `(("python-wcwidth" ,python-wcwidth)
12532 ("python-six" ,python-six)
12533 ("python-pygments" ,python-pygments)))))
12534
12535 (define-public python2-prompt-toolkit
12536 (package-with-python2 python-prompt-toolkit-2))
12537
12538 (define-public python-prompt-toolkit-1
12539 (package (inherit python-prompt-toolkit-2)
12540 (version "1.0.15")
12541 (source
12542 (origin
12543 (method url-fetch)
12544 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12545 (sha256
12546 (base32
12547 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12548
12549 (define-public python2-prompt-toolkit-1
12550 (package-with-python2 python-prompt-toolkit-1))
12551
12552 (define-public python-jedi
12553 (package
12554 (name "python-jedi")
12555 (version "0.17.0")
12556 (source
12557 (origin
12558 (method url-fetch)
12559 (uri (pypi-uri "jedi" version))
12560 (patches (search-patches "python-jedi-sort-project-test.patch"))
12561 (sha256
12562 (base32
12563 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12564 (build-system python-build-system)
12565 (arguments
12566 `(#:phases
12567 (modify-phases %standard-phases
12568 (add-before 'check 'adjust-test-for-python-3.8
12569 (lambda _
12570 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12571 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12572 (substitute* "test/test_utils.py"
12573 (("assert len\\(difference\\) < 20")
12574 "assert len(difference) < 22"))
12575 #t))
12576 (replace 'check
12577 (lambda _
12578 (setenv "HOME" "/tmp")
12579 (invoke "python" "-m" "pytest" "-vv"))))))
12580 (native-inputs
12581 `(("python-pytest" ,python-pytest)
12582 ("python-docopt" ,python-docopt)))
12583 (propagated-inputs
12584 `(("python-parso" ,python-parso)))
12585 (home-page "https://github.com/davidhalter/jedi")
12586 (synopsis "Autocompletion and static analysis library for Python")
12587 (description
12588 "Jedi is a static analysis tool for Python that can be used in Integrated
12589 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12590 on a deeper level than many other static analysis frameworks for Python.
12591
12592 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12593 well.")
12594 (license license:expat)))
12595
12596 (define-public python2-jedi
12597 (package-with-python2 python-jedi))
12598
12599 (define-public ptpython
12600 (package
12601 (name "ptpython")
12602 (version "0.34")
12603 (source (origin
12604 (method url-fetch)
12605 (uri (pypi-uri "ptpython" version))
12606 (sha256
12607 (base32
12608 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12609 (build-system python-build-system)
12610 (arguments
12611 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12612 (propagated-inputs
12613 `(("python-docopt" ,python-docopt)
12614 ("python-jedi" ,python-jedi)
12615 ("python-prompt-toolkit" ,python-prompt-toolkit)
12616 ("python-pygments" ,python-pygments)))
12617 (home-page "https://github.com/jonathanslenders/ptpython")
12618 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12619 (description
12620 "ptpython is a Python read-eval-print loop with IDE-like features.
12621 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12622 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12623 etc.")
12624 (license license:bsd-3)
12625 (properties `((python2-variant . ,(delay ptpython-2))))))
12626
12627 (define-public ptpython-2
12628 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12629 (package
12630 (inherit base)
12631 (name "ptpython2"))))
12632
12633 (define-public python-stem
12634 (package
12635 (name "python-stem")
12636 (version "1.8.0")
12637 (source
12638 (origin
12639 (method url-fetch)
12640 (uri (pypi-uri "stem" version))
12641 (sha256
12642 (base32
12643 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12644 (build-system python-build-system)
12645 (arguments
12646 `(#:phases
12647 (modify-phases %standard-phases
12648 (replace 'check
12649 (lambda _
12650 (invoke "./run_tests.py" "--unit")
12651 #t)))))
12652 (native-inputs
12653 `(("python-mock" ,python-mock)
12654 ("python-pycodestyle" ,python-pycodestyle)
12655 ("python-pyflakes" ,python-pyflakes)))
12656 (home-page "https://stem.torproject.org/")
12657 (synopsis
12658 "Python controller library that allows applications to interact with Tor")
12659 (description
12660 "Stem is a Python controller library for Tor. With it you can use Tor's
12661 control protocol to script against the Tor process and read descriptor data
12662 relays publish about themselves.")
12663 (license license:lgpl3)))
12664
12665 (define-public python2-stem
12666 (package-with-python2 python-stem))
12667
12668 (define-public python-pyserial
12669 (package
12670 (name "python-pyserial")
12671 (version "3.4")
12672 (source
12673 (origin
12674 (method url-fetch)
12675 (uri (pypi-uri "pyserial" version))
12676 (sha256
12677 (base32
12678 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12679 (build-system python-build-system)
12680 (arguments
12681 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12682 ;; #:phases
12683 ;; (modify-phases %standard-phases
12684 ;; (replace 'check
12685 ;; (lambda _
12686 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12687 (home-page
12688 "https://github.com/pyserial/pyserial")
12689 (synopsis "Python Serial Port Bindings")
12690 (description "@code{pyserial} provide serial port bindings for Python. It
12691 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12692 and/or Xon/Xoff. The port is accessed in RAW mode.")
12693 (license license:bsd-3)))
12694
12695 (define-public python2-pyserial
12696 (package-with-python2 python-pyserial))
12697
12698 (define-public python-kivy
12699 (package
12700 (name "python-kivy")
12701 (version "1.10.1")
12702 (source
12703 (origin
12704 (method url-fetch)
12705 (uri (pypi-uri "Kivy" version))
12706 (file-name (string-append name "-" version ".tar.gz"))
12707 (sha256
12708 (base32
12709 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12710 (build-system python-build-system)
12711 (arguments
12712 `(#:tests? #f ; Tests require many optional packages
12713 #:phases
12714 (modify-phases %standard-phases
12715 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12716 (lambda* (#:key inputs #:allow-other-keys)
12717 (setenv "KIVY_SDL2_PATH"
12718 (string-append (assoc-ref inputs "sdl-union")
12719 "/include/SDL2"))
12720 #t)))))
12721 (native-inputs
12722 `(("pkg-config" ,pkg-config)
12723 ("python-cython" ,python-cython)))
12724 (inputs
12725 `(("gstreamer" ,gstreamer)
12726 ("mesa" ,mesa)
12727 ("sdl-union"
12728 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12729 (home-page "https://kivy.org")
12730 (synopsis
12731 "Multitouch application framework")
12732 (description
12733 "A software library for rapid development of
12734 hardware-accelerated multitouch applications.")
12735 (license license:expat)))
12736
12737 (define-public python2-kivy
12738 (package-with-python2 python-kivy))
12739
12740 (define-public python-binaryornot
12741 (package
12742 (name "python-binaryornot")
12743 (version "0.4.4")
12744 (source (origin
12745 (method url-fetch)
12746 (uri (pypi-uri "binaryornot" version))
12747 (sha256
12748 (base32
12749 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12750 (build-system python-build-system)
12751 (arguments
12752 `(#:phases
12753 (modify-phases %standard-phases
12754 (add-after 'unpack 'patch-tests
12755 (lambda _
12756 ;; TypeError: binary() got an unexpected keyword argument
12757 ;; 'average_size'.
12758 (substitute* "tests/test_check.py"
12759 (("average_size=512") ""))
12760 #t)))))
12761 (propagated-inputs
12762 `(("python-chardet" ,python-chardet)
12763 ("python-hypothesis" ,python-hypothesis)))
12764 (home-page "https://github.com/audreyr/binaryornot")
12765 (synopsis "Package to check if a file is binary or text")
12766 (description "Ultra-lightweight pure Python package to check if a file is
12767 binary or text.")
12768 (license license:bsd-3)
12769 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12770
12771 (define-public python2-binaryornot
12772 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12773 (package (inherit base)
12774 (propagated-inputs
12775 `(("python2-enum34" ,python2-enum34)
12776 ,@(package-propagated-inputs base))))))
12777
12778 (define-public python-binwalk
12779 (package
12780 (name "python-binwalk")
12781 (version "2.2.0")
12782 (source
12783 (origin
12784 (method git-fetch)
12785 (uri (git-reference
12786 (url "https://github.com/ReFirmLabs/binwalk")
12787 (commit (string-append "v" version))))
12788 (file-name (git-file-name name version))
12789 (sha256
12790 (base32
12791 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12792 (build-system python-build-system)
12793 (arguments
12794 `(#:phases
12795 (modify-phases %standard-phases
12796 (add-before 'check 'set-pythonpath
12797 (lambda _
12798 (setenv "PYTHONPATH"
12799 (string-append
12800 (getcwd) "/src/"
12801 ":" (getenv "PYTHONPATH")))
12802 (setenv "HOME" "")
12803 #t)))))
12804 (native-inputs
12805 `(("python-coverage" ,python-coverage)
12806 ("python-nose" ,python-nose)))
12807 (home-page "https://github.com/ReFirmLabs/binwalk")
12808 (synopsis "Firmware analysis tool")
12809 (description "Binwalk is a tool for analyzing, reverse engineering, and
12810 extracting firmware images")
12811 (license license:expat)))
12812
12813 (define-public python-nltk
12814 (package
12815 (name "python-nltk")
12816 (version "3.2.1")
12817 (source (origin
12818 (method url-fetch)
12819 (uri (pypi-uri "nltk" version))
12820 (sha256
12821 (base32
12822 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12823 (build-system python-build-system)
12824 (arguments
12825 '(;; The tests require some extra resources to be downloaded.
12826 ;; TODO Try packaging these resources.
12827 #:tests? #f))
12828 (home-page "http://nltk.org/")
12829 (synopsis "Natural Language Toolkit")
12830 (description "It provides interfaces to over 50 corpora and lexical
12831 resources such as WordNet, along with a suite of text processing libraries
12832 for classification, tokenization, stemming, tagging, parsing, and semantic
12833 reasoning, wrappers for natural language processing libraries.")
12834 (license license:asl2.0)))
12835
12836 (define-public python2-nltk
12837 (package-with-python2 python-nltk))
12838
12839 (define-public python-pymongo
12840 (package
12841 (name "python-pymongo")
12842 (version "3.7.2")
12843 (source (origin
12844 (method url-fetch)
12845 (uri (pypi-uri "pymongo" version))
12846 (sha256
12847 (base32
12848 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12849 (build-system python-build-system)
12850 (propagated-inputs
12851 `(("python-certifi" ,python-certifi)))
12852 (home-page "https://github.com/mongodb/mongo-python-driver")
12853 (synopsis "Python driver for MongoDB")
12854 (description "Python driver for MongoDB.")
12855 (license license:asl2.0)))
12856
12857 (define-public python2-pymongo
12858 (package-with-python2 python-pymongo))
12859
12860 (define-public python-consul
12861 (package
12862 (name "python-consul")
12863 (version "0.6.1")
12864 (source
12865 (origin
12866 (method url-fetch)
12867 (uri (pypi-uri "python-consul" version))
12868 (sha256
12869 (base32
12870 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12871 (build-system python-build-system)
12872 (arguments
12873 '(#:tests? #f)) ; The tests are not distributed
12874 (propagated-inputs
12875 `(("python-requests" ,python-requests)
12876 ("python-six" ,python-six)))
12877 (home-page "https://github.com/cablehead/python-consul")
12878 (synopsis "Python client for Consul")
12879 (description
12880 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12881 discovery, monitoring and configuration.")
12882 (license license:expat)))
12883
12884 (define-public python2-consul
12885 (package-with-python2 python-consul))
12886
12887 (define-public python-schematics
12888 (package
12889 (name "python-schematics")
12890 (version "1.1.1")
12891 (source
12892 (origin
12893 (method git-fetch)
12894 (uri (git-reference
12895 (url "https://github.com/schematics/schematics")
12896 (commit (string-append "v" version))))
12897 (file-name (git-file-name name version))
12898 (sha256
12899 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12900 (build-system python-build-system)
12901 (propagated-inputs
12902 `(("python-six" ,python-six)))
12903 (arguments
12904 ;; The tests require a bunch of not very nice packages with fixed
12905 ;; version requirements (e.g. python-coveralls).
12906 `(#:tests? #f))
12907 (home-page "https://github.com/schematics/schematics")
12908 (synopsis "Python Data Structures for Humans")
12909 (description "Python Data Structures for Humans.")
12910 (license license:bsd-3)))
12911
12912 (define-public python2-schematics
12913 (package-with-python2 python-schematics))
12914
12915 (define-public python-odfpy
12916 (package
12917 (name "python-odfpy")
12918 (version "1.4.1")
12919 (source (origin
12920 (method url-fetch)
12921 (uri (pypi-uri "odfpy" version))
12922 (sha256
12923 (base32
12924 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
12925 (arguments
12926 `(#:phases
12927 (modify-phases %standard-phases
12928 (replace 'check
12929 (lambda _
12930 (setenv "PYTHONPATH" (string-append "./build/lib:"
12931 (getenv "PYTHONPATH")))
12932 (invoke "pytest" "-vv"))))))
12933 (build-system python-build-system)
12934 (native-inputs
12935 `(("python-pytest" ,python-pytest)))
12936 (propagated-inputs
12937 `(("python-defusedxml" ,python-defusedxml)))
12938 (home-page "https://github.com/eea/odfpy")
12939 (synopsis "Python API and tools to manipulate OpenDocument files")
12940 (description "Collection of libraries and utility programs written in
12941 Python to manipulate OpenDocument 1.2 files.")
12942 (license
12943 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12944 ;; number of files with other licenses.
12945 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12946
12947 (define-public python2-odfpy
12948 (package-with-python2 python-odfpy))
12949
12950 (define-public python-natsort
12951 (package
12952 (name "python-natsort")
12953 (version "7.0.1")
12954 (source (origin
12955 (method url-fetch)
12956 (uri (pypi-uri "natsort" version))
12957 (sha256
12958 (base32
12959 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12960 (build-system python-build-system)
12961 (arguments
12962 `(#:modules ((guix build utils)
12963 (guix build python-build-system)
12964 (srfi srfi-1)
12965 (srfi srfi-26)
12966 (ice-9 ftw))
12967 #:phases
12968 (modify-phases %standard-phases
12969 (add-before 'check 'set-cachedir
12970 ;; Tests require write access to $HOME by default
12971 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12972 (replace 'check
12973 (lambda _
12974 (let ((cwd (getcwd)))
12975 (setenv "PYTHONPATH"
12976 (string-append
12977 cwd "/build/"
12978 (find (cut string-prefix? "lib" <>)
12979 (scandir (string-append cwd "/build")))
12980 ":"
12981 (getenv "PYTHONPATH")))
12982 (invoke "pytest" "-v")))))))
12983 (native-inputs
12984 `(("python-hypothesis" ,python-hypothesis)
12985 ("python-pytest-cov" ,python-pytest-cov)
12986 ("python-pytest-mock" ,python-pytest-mock)
12987 ("python-pytest" ,python-pytest)))
12988 (propagated-inputs ; TODO: Add python-fastnumbers.
12989 `(("python-pyicu" ,python-pyicu)))
12990 (home-page "https://github.com/SethMMorton/natsort")
12991 (synopsis "Natural sorting for python and shell")
12992 (description
12993 "Natsort lets you apply natural sorting on lists instead of
12994 lexicographical. If you use the built-in @code{sorted} method in python
12995 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12996 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12997 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12998 identifies numbers and sorts them separately from strings. It can also sort
12999 version numbers, real numbers, mixed types and more, and comes with a shell
13000 command @command{natsort} that exposes this functionality in the command line.")
13001 (license license:expat)
13002 (properties `((python2-variant . ,(delay python2-natsort))))))
13003
13004 ;; Natsort 6.x are the last versions with support for Python 2.
13005 (define-public python2-natsort
13006 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
13007 (package (inherit base)
13008 (version "6.2.1")
13009 (source (origin
13010 (method url-fetch)
13011 (uri (pypi-uri "natsort" version))
13012 (sha256
13013 (base32
13014 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
13015 (native-inputs
13016 `(("python2-pathlib" ,python2-pathlib)
13017 ,@(package-native-inputs base))))))
13018
13019 (define-public glances
13020 (package
13021 (name "glances")
13022 (version "3.1.4")
13023 (source
13024 (origin
13025 (method url-fetch)
13026 (uri (pypi-uri "Glances" version))
13027 (sha256
13028 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
13029 (modules '((guix build utils)))
13030 (snippet
13031 '(begin
13032 ;; Glances phones PyPI for weekly update checks by default.
13033 ;; Disable these. The user can re-enable them if desired.
13034 (substitute* "glances/outdated.py"
13035 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
13036 (string-append indentation
13037 "self.args.disable_check_update = True\n"
13038 line)))
13039 #t))))
13040 (build-system python-build-system)
13041 (propagated-inputs
13042 `(("python-future" ,python-future)
13043 ("python-psutil" ,python-psutil)))
13044 (home-page "https://github.com/nicolargo/glances")
13045 (synopsis "Cross-platform curses-based monitoring tool")
13046 (description
13047 "Glances is a curses-based monitoring tool for a wide variety of platforms.
13048 Glances uses the PsUtil library to get information from your system. It
13049 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
13050 (license license:lgpl3+)))
13051
13052 (define-public python-glances
13053 (deprecated-package "python-glances" glances))
13054
13055 (define-public python-graphql-core
13056 (package
13057 (name "python-graphql-core")
13058 (version "0.5.3")
13059 (source
13060 (origin
13061 (method url-fetch)
13062 (uri (pypi-uri "graphql-core" version))
13063 (sha256
13064 (base32
13065 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
13066 (build-system python-build-system)
13067 (arguments
13068 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
13069 #:phases
13070 (modify-phases %standard-phases
13071 (add-after 'unpack 'patch-hardcoded-version
13072 (lambda _ (substitute*
13073 "setup.py"
13074 (("'gevent==1.1rc1'") "'gevent'"))
13075 #t)))))
13076 (native-inputs
13077 `(("python-gevent" ,python-gevent)
13078 ("python-mock" ,python-mock)
13079 ("python-pytest-mock" ,python-pytest-mock)))
13080 (propagated-inputs
13081 `(("python-promise" ,python-promise)
13082 ("python-six" ,python-six)))
13083 (home-page "https://github.com/graphql-python/graphql-core")
13084 (synopsis "GraphQL implementation for Python")
13085 (description
13086 "GraphQL implementation for Python. GraphQL is a data query language and
13087 runtime designed and used to request and deliver data to mobile and web apps.
13088 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
13089 to Python.")
13090 (license license:expat)))
13091
13092 (define-public python2-graphql-core
13093 (package-with-python2 python-graphql-core))
13094
13095 (define-public python-graphql-relay
13096 (package
13097 (name "python-graphql-relay")
13098 (version "0.4.5")
13099 (source
13100 (origin
13101 (method url-fetch)
13102 (uri (pypi-uri "graphql-relay" version))
13103 (sha256
13104 (base32
13105 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
13106 (build-system python-build-system)
13107 (arguments
13108 '(#:tests? #f)) ; The tests are not distributed
13109 (propagated-inputs
13110 `(("python-graphql-core" ,python-graphql-core)
13111 ("python-promise" ,python-promise)
13112 ("python-six" ,python-six)))
13113 (home-page "https://github.com/graphql-python/graphql-relay-py")
13114 (synopsis "Relay implementation for Python")
13115 (description
13116 "This is a library to allow the easy creation of Relay-compliant servers
13117 using the GraphQL Python reference implementation of a GraphQL server. It
13118 should be noted that the code is a exact port of the original
13119 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
13120 from Facebook.")
13121 (license license:expat)))
13122
13123 (define-public python2-graphql-relay
13124 (package-with-python2 python-graphql-relay))
13125
13126 (define-public python-graphene
13127 (package
13128 (name "python-graphene")
13129 (version "0.10.2")
13130 (source
13131 (origin
13132 (method url-fetch)
13133 (uri (pypi-uri "graphene" version))
13134 (sha256
13135 (base32
13136 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
13137 (build-system python-build-system)
13138 (propagated-inputs
13139 `(("python-graphql-core" ,python-graphql-core)
13140 ("python-graphql-relay" ,python-graphql-relay)
13141 ("python-iso8601" ,python-iso8601)
13142 ("python-promise" ,python-promise)
13143 ("python-six" ,python-six)))
13144 (arguments
13145 `(#:tests? #f)) ; no tests/ in the PyPI tarball
13146 (home-page "https://graphene-python.org/")
13147 (synopsis "GraphQL Framework for Python")
13148 (description
13149 "Graphene is a Python library for building GraphQL schemas/types.
13150 A GraphQL schema describes your data model, and provides a GraphQL server
13151 with an associated set of resolve methods that know how to fetch data.")
13152 (properties `((python2-variant . ,(delay python2-graphene))))
13153 (license license:expat)))
13154
13155 (define-public python2-graphene
13156 (let ((base (package-with-python2
13157 (strip-python2-variant python-graphene))))
13158 (package (inherit base)
13159 (native-inputs
13160 `(("python2-sqlalchemy" ,python2-sqlalchemy)
13161 ,@(package-native-inputs base))))))
13162
13163 (define-public python-nautilus
13164 (package
13165 (name "python-nautilus")
13166 (version "0.4.9")
13167 (source
13168 (origin
13169 (method url-fetch)
13170 (uri (pypi-uri "nautilus" version))
13171 (sha256
13172 (base32
13173 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
13174 (build-system python-build-system)
13175 (arguments `(#:tests? #f)) ; fails to import test modules
13176 (propagated-inputs
13177 `(("python-bcrypt" ,python-bcrypt)
13178 ("python-click" ,python-click)
13179 ("python-consul" ,python-consul)
13180 ("python-graphene" ,python-graphene)
13181 ("python-jinja2" ,python-jinja2)
13182 ("python-peewee" ,python-peewee)
13183 ("python-pika" ,python-pika)
13184 ("python-tornado" ,python-tornado)
13185 ("python-wtforms" ,python-wtforms)))
13186 (native-inputs
13187 `(("python-nose2" ,python-nose2)))
13188 (home-page "https://github.com/AlecAivazis/nautilus")
13189 (synopsis "Library for creating microservice applications")
13190 (description
13191 "Nautilus is a framework for flux based microservices that looks to
13192 provide extendible implementations of common aspects of a cloud so that you can
13193 focus on building massively scalable web applications.")
13194 (license license:expat)))
13195
13196 (define-public python-random2
13197 (package
13198 (name "python-random2")
13199 (version "1.0.1")
13200 (source (origin
13201 (method url-fetch)
13202 (uri (pypi-uri "random2" version ".zip"))
13203 (sha256
13204 (base32
13205 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
13206 (build-system python-build-system)
13207 (native-inputs `(("unzip" ,unzip)))
13208 (home-page "http://pypi.python.org/pypi/random2")
13209 (synopsis "Python 3 version of the Python 2 @code{random} module")
13210 (description
13211 "This package provides a Python 3 ported version of Python 2.7’s
13212 @code{random} module. It has also been back-ported to work in Python 2.6.
13213
13214 In Python 3, the implementation of @code{randrange()} was changed, so that
13215 even with the same seed you get different sequences in Python 2 and 3.
13216
13217 This package closes that gap, allowing stable random number generation
13218 between the different Python versions.")
13219 (license license:psfl)))
13220
13221 (define-public python2-random2
13222 (package-with-python2 python-random2))
13223
13224 (define-public python-snowballstemmer
13225 (package
13226 (name "python-snowballstemmer")
13227 (version "2.0.0")
13228 (source (origin
13229 (method url-fetch)
13230 (uri (pypi-uri "snowballstemmer" version))
13231 (sha256
13232 (base32
13233 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
13234 (build-system python-build-system)
13235 (arguments
13236 `(;; No tests exist
13237 #:tests? #f))
13238 (home-page "https://github.com/shibukawa/snowball_py")
13239 (synopsis "Snowball stemming library collection for Python")
13240 (description "This package provides 16 word stemmer algorithms generated
13241 from Snowball algorithms. It includes the 15 original ones plus the Poerter
13242 English stemmer.")
13243 (license license:bsd-3)))
13244
13245 (define-public python2-snowballstemmer
13246 (package-with-python2 python-snowballstemmer))
13247
13248 (define-public python-setproctitle
13249 (package
13250 (name "python-setproctitle")
13251 (version "1.1.10")
13252 (source
13253 (origin
13254 (method url-fetch)
13255 (uri (pypi-uri "setproctitle" version))
13256 (sha256
13257 (base32
13258 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
13259 (build-system python-build-system)
13260 (arguments
13261 '(#:phases
13262 (modify-phases %standard-phases
13263 (add-before 'check 'patch-Makefile
13264 ;; Stricly this is only required for the python2 variant.
13265 ;; But adding a phase in an inherited package seems to be
13266 ;; cumbersum. So we patch even for python3.
13267 (lambda _
13268 (let ((nose (assoc-ref %build-inputs "python2-nose")))
13269 (when nose
13270 (substitute* "Makefile"
13271 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
13272 (string-append nose "/bin/nosetests "))))
13273 #t)))
13274 (replace 'check
13275 (lambda _
13276 (setenv "PYTHON" (or (which "python3") (which "python")))
13277 (setenv "PYCONFIG" (string-append (or (which "python3-config")
13278 (which "python-config"))
13279 " --embed"))
13280 (setenv "CC" "gcc")
13281 ;; No need to extend PYTHONPATH to find the built package, since
13282 ;; the Makefile will build anyway
13283 (invoke "make" "check"))))))
13284 (native-inputs
13285 `(("procps" ,procps))) ; required for tests
13286 (home-page "https://github.com/dvarrazzo/py-setproctitle")
13287 (synopsis
13288 "Setproctitle implementation for Python to customize the process title")
13289 (description "The library allows a process to change its title (as displayed
13290 by system tools such as ps and top).
13291
13292 Changing the title is mostly useful in multi-process systems, for
13293 example when a master process is forked: changing the children's title
13294 allows identifying the task each process is busy with. The technique
13295 is used by PostgreSQL and the OpenSSH Server for example.")
13296 (license license:bsd-3)
13297 (properties `((python2-variant . ,(delay python2-setproctitle))))))
13298
13299 (define-public python2-setproctitle
13300 (let ((base (package-with-python2
13301 (strip-python2-variant python-setproctitle))))
13302 (package
13303 (inherit base)
13304 (native-inputs `(("python2-nose" ,python2-nose)
13305 ,@(package-native-inputs base))))))
13306
13307 (define-public python-validictory
13308 (package
13309 (name "python-validictory")
13310 (version "1.0.1")
13311 (source
13312 (origin
13313 (method url-fetch)
13314 (uri (pypi-uri "validictory" version))
13315 (sha256
13316 (base32
13317 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
13318 (build-system python-build-system)
13319 (arguments
13320 '(#:phases
13321 (modify-phases %standard-phases
13322 (add-after 'unpack 'bootstrap
13323 ;; Move the tests out of the package directory to avoid
13324 ;; packaging them.
13325 (lambda* _
13326 (rename-file "validictory/tests" "tests")
13327 (delete-file "tests/__init__.py")))
13328 (replace 'check
13329 (lambda _
13330 ;; Extend PYTHONPATH so the built package will be found.
13331 (setenv "PYTHONPATH"
13332 (string-append (getcwd) "/build/lib:"
13333 (getenv "PYTHONPATH")))
13334 (invoke "py.test" "-vv" ))))))
13335 (native-inputs
13336 `(("python-pytest" ,python-pytest)))
13337 (home-page
13338 "https://github.com/jamesturk/validictory")
13339 (synopsis "General purpose Python data validator")
13340 (description "It allows validation of arbitrary Python data structures.
13341
13342 The schema format is based on the JSON Schema
13343 proposal (http://json-schema.org), so combined with json the library is also
13344 useful as a validator for JSON data.")
13345 (license license:expat)))
13346
13347 (define-public python2-validictory
13348 (package-with-python2 python-validictory))
13349
13350 (define-public python-pyelftools
13351 (package
13352 (name "python-pyelftools")
13353 (version "0.25")
13354 (source
13355 (origin
13356 (method url-fetch)
13357 (uri (pypi-uri "pyelftools" version))
13358 (sha256
13359 (base32
13360 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13361 (build-system python-build-system)
13362 (arguments
13363 `(#:phases
13364 (modify-phases %standard-phases
13365 (add-before 'check 'set-pythonpath
13366 (lambda _
13367 (setenv "PYTHONPATH"
13368 (string-append
13369 (getcwd) "/test/"
13370 ":" (getenv "PYTHONPATH")))
13371 #t)))))
13372 (home-page
13373 "https://github.com/eliben/pyelftools")
13374 (synopsis
13375 "Analyze binary and library file information")
13376 (description "This Python library provides interfaces for parsing and
13377 analyzing two binary and library file formats; the Executable and Linking
13378 Format (ELF), and debugging information in the Debugging With Attributed
13379 Record Format (DWARF).")
13380 (license license:public-domain)))
13381
13382 (define-public python-pyev
13383 (package
13384 (name "python-pyev")
13385 (version "0.9.0")
13386 (source
13387 (origin
13388 (method url-fetch)
13389 (uri (pypi-uri "pyev" version))
13390 (sha256
13391 (base32
13392 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13393 (build-system python-build-system)
13394 (arguments
13395 `(#:tests? #f ; no test suite
13396 #:phases
13397 (modify-phases %standard-phases
13398 (add-after 'unpack 'patch
13399 (lambda* (#:key inputs #:allow-other-keys)
13400 (let ((libev (string-append (assoc-ref inputs "libev")
13401 "/lib/libev.so.4")))
13402 (substitute* "setup.py"
13403 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13404 (string-append "libev_dll_name = \"" libev "\"")))))))))
13405 (inputs
13406 `(("libev" ,libev)))
13407 (home-page "http://pythonhosted.org/pyev/")
13408 (synopsis "Python libev interface")
13409 (description "Pyev provides a Python interface to libev.")
13410 (license license:gpl3)))
13411
13412 (define-public python2-pyev
13413 (package-with-python2 python-pyev))
13414
13415 (define-public python-imagesize
13416 (package
13417 (name "python-imagesize")
13418 (version "1.2.0")
13419 (source
13420 (origin
13421 (method url-fetch)
13422 (uri (pypi-uri "imagesize" version))
13423 (sha256
13424 (base32
13425 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13426 (build-system python-build-system)
13427 (home-page "https://github.com/shibukawa/imagesize_py")
13428 (synopsis "Gets image size of files in various formats in Python")
13429 (description
13430 "This package allows determination of image size from
13431 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13432 (license license:expat)))
13433
13434 (define-public python2-imagesize
13435 (package-with-python2 python-imagesize))
13436
13437 (define-public python-termstyle
13438 (package
13439 (name "python-termstyle")
13440 (version "0.1.11")
13441 (source
13442 (origin
13443 (method url-fetch)
13444 (uri (pypi-uri "termstyle" version))
13445 (sha256
13446 (base32
13447 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13448 (build-system python-build-system)
13449 (arguments
13450 '(#:phases
13451 (modify-phases %standard-phases
13452 (replace 'check
13453 (lambda _
13454 (invoke "python" "test3.py"))))))
13455 (home-page "https://github.com/gfxmonk/termstyle")
13456 (synopsis "Console text coloring for Python")
13457 (description "This package provides console text coloring for Python.")
13458 (license license:bsd-3)))
13459
13460 (define-public python-argcomplete
13461 (package
13462 (name "python-argcomplete")
13463 (version "1.11.1")
13464 (source
13465 (origin
13466 (method url-fetch)
13467 (uri (pypi-uri "argcomplete" version))
13468 (sha256
13469 (base32
13470 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13471 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13472 (build-system python-build-system)
13473 (native-inputs
13474 `(("python-coverage" ,python-coverage)
13475 ("python-flake8" ,python-flake8)
13476 ("python-pexpect" ,python-pexpect)
13477 ("python-wheel" ,python-wheel)
13478 ("tcsh" ,tcsh)
13479 ("fish" ,fish)
13480 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13481 (home-page "https://github.com/kislyuk/argcomplete")
13482 (synopsis "Shell tab completion for Python argparse")
13483 (description "argcomplete provides extensible command line tab completion
13484 of arguments and options for Python scripts using @code{argparse}. It's
13485 particularly useful for programs with many options or sub-parsers that can
13486 dynamically suggest completions; for example, when browsing resources over the
13487 network.")
13488 (license license:asl2.0)))
13489
13490 (define-public python2-argcomplete
13491 (package-with-python2 python-argcomplete))
13492
13493 (define-public python-xopen
13494 (package
13495 (name "python-xopen")
13496 (version "0.5.0")
13497 (source
13498 (origin
13499 (method url-fetch)
13500 (uri (pypi-uri "xopen" version))
13501 (sha256
13502 (base32
13503 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13504 (build-system python-build-system)
13505 (propagated-inputs
13506 `(("python-setuptools-scm" ,python-setuptools-scm)))
13507 (home-page "https://github.com/marcelm/xopen/")
13508 (synopsis "Open compressed files transparently")
13509 (description "This module provides an @code{xopen} function that works like
13510 Python's built-in @code{open} function, but can also deal with compressed files.
13511 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13512 recognized by their file extensions. The focus is on being as efficient as
13513 possible on all supported Python versions.")
13514 (license license:expat)))
13515
13516 (define-public python2-xopen
13517 (let ((base (package-with-python2
13518 (strip-python2-variant python-xopen))))
13519 (package
13520 (inherit base)
13521 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13522 ,@(package-propagated-inputs base))))))
13523
13524 (define-public python-cheetah
13525 (package
13526 (name "python-cheetah")
13527 (version "3.2.4")
13528 (source
13529 (origin
13530 (method url-fetch)
13531 (uri (pypi-uri "Cheetah3" version))
13532 (sha256
13533 (base32
13534 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13535 (build-system python-build-system)
13536 (arguments
13537 `(#:modules ((guix build utils)
13538 (guix build python-build-system)
13539 (ice-9 ftw)
13540 (srfi srfi-1)
13541 (srfi srfi-26))
13542 #:phases (modify-phases %standard-phases
13543 (add-after 'unpack 'use-absolute-python
13544 (lambda _
13545 (substitute* "Cheetah/CheetahWrapper.py"
13546 (("#!/usr/bin/env python")
13547 (string-append "#!" (which "python"))))
13548 #t))
13549 (add-after 'unpack 'fix-tests
13550 (lambda _
13551 (substitute* "Cheetah/Tests/ImportHooks.py"
13552 (("os.path.dirname\\(__file__\\)")
13553 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13554 #t))
13555 (replace 'check
13556 (lambda _
13557 (let ((cwd (getcwd)))
13558 (setenv "PYTHONPATH"
13559 (string-append
13560 cwd "/build/"
13561 (find (cut string-prefix? "lib" <>)
13562 (scandir (string-append cwd "/build")))
13563 ":" (getenv "PYTHONPATH")))
13564 (setenv "PATH"
13565 (string-append (getenv "PATH")
13566 ":" cwd "/bin"))
13567 (setenv "TMPDIR" "/tmp")
13568
13569 (substitute* "Cheetah/Tests/Test.py"
13570 (("unittest.TextTestRunner\\(\\)")
13571 "unittest.TextTestRunner(verbosity=2)"))
13572
13573 (invoke "python" "Cheetah/Tests/Test.py")))))))
13574 (propagated-inputs
13575 `(("python-markdown" ,python-markdown))) ;optional
13576 (home-page "https://cheetahtemplate.org/")
13577 (synopsis "Template engine")
13578 (description "Cheetah is a text-based template engine and Python code
13579 generator.
13580
13581 Cheetah can be used as a standalone templating utility or referenced as
13582 a library from other Python applications. It has many potential uses,
13583 but web developers looking for a viable alternative to ASP, JSP, PHP and
13584 PSP are expected to be its principle user group.
13585
13586 Features:
13587 @enumerate
13588 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13589 text-based format.
13590 @item Cleanly separates content, graphic design, and program code.
13591 @item Blends the power and flexibility of Python with a simple template language
13592 that non-programmers can understand.
13593 @item Gives template writers full access to any Python data structure, module,
13594 function, object, or method in their templates.
13595 @item Makes code reuse easy by providing an object-orientated interface to
13596 templates that is accessible from Python code or other Cheetah templates.
13597 One template can subclass another and selectively reimplement sections of it.
13598 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13599 improve the performance of a dynamic website.
13600 @item Compiles templates into optimized, yet readable, Python code.
13601 @end enumerate")
13602 (license (license:x11-style "file://LICENSE"))))
13603
13604 (define-public python2-cheetah
13605 (package-with-python2 python-cheetah))
13606
13607 (define-public python-dulwich
13608 (package
13609 (name "python-dulwich")
13610 (version "0.19.16")
13611 (source
13612 (origin
13613 (method url-fetch)
13614 (uri (list (string-append "https://www.dulwich.io/releases/"
13615 "dulwich-" version ".tar.gz")
13616 (pypi-uri "dulwich" version)))
13617 (sha256
13618 (base32
13619 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13620 (build-system python-build-system)
13621 (arguments
13622 `(#:phases
13623 (modify-phases %standard-phases
13624 (add-before 'check 'fix-tests
13625 (lambda* (#:key inputs #:allow-other-keys)
13626 ;; The tests use Popen with a custom environment which doesn't
13627 ;; include PATH.
13628 (substitute* "dulwich/tests/compat/utils.py"
13629 (("'git'") (string-append "'"
13630 (which "git")
13631 "'")))
13632 (substitute* '("dulwich/tests/test_repository.py"
13633 "dulwich/tests/test_hooks.py")
13634 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13635 (setenv "TEST_RUNNER" "unittest")
13636 (setenv "PYTHONHASHSEED" "random")
13637 #t)))))
13638 (propagated-inputs
13639 `(("python-fastimport" ,python-fastimport)
13640 ("python-urllib3" ,python-urllib3)))
13641 (native-inputs
13642 `(("python-mock" ,python-mock)
13643 ("python-geventhttpclient" ,python-geventhttpclient)
13644 ("git" ,git)))
13645 (home-page "https://www.dulwich.io/")
13646 (synopsis "Git implementation in Python")
13647 (description "Dulwich is an implementation of the Git file formats and
13648 protocols written in pure Python.")
13649 ;; Can be used with either license.
13650 (license (list license:asl2.0 license:gpl2+))))
13651
13652 (define-public python2-dulwich
13653 (package-with-python2 python-dulwich))
13654
13655 (define-public python-pbkdf2
13656 (package
13657 (name "python-pbkdf2")
13658 (version "1.3")
13659 (source
13660 (origin
13661 (method url-fetch)
13662 (uri (pypi-uri "pbkdf2" version))
13663 (sha256
13664 (base32
13665 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13666 (build-system python-build-system)
13667 (arguments
13668 '(#:phases
13669 (modify-phases %standard-phases
13670 (replace 'check
13671 (lambda _
13672 (setenv "PYTHONPATH"
13673 (string-append (getcwd) "/build/lib:"
13674 (getenv "PYTHONPATH")))
13675 (invoke "python" "test/test_pbkdf2.py"))))))
13676 (propagated-inputs
13677 `(("python-pycrypto" ,python-pycrypto))) ; optional
13678 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13679 (synopsis "Password-based key derivation")
13680 (description "This module implements the password-based key derivation
13681 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13682
13683 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13684 is part of the RSA Public Key Cryptography Standards series. The provided
13685 implementation takes a password or a passphrase and a salt value (and
13686 optionally a iteration count, a digest module, and a MAC module) and provides
13687 a file-like object from which an arbitrarly-sized key can be read.")
13688 (license license:expat)))
13689
13690 (define-public python2-pbkdf2
13691 (package-with-python2 python-pbkdf2))
13692
13693 (define-public python-qrcode
13694 (package
13695 (name "python-qrcode")
13696 (version "6.1")
13697 (source
13698 (origin
13699 (method url-fetch)
13700 (uri (pypi-uri "qrcode" version))
13701 (sha256
13702 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13703 (build-system python-build-system)
13704 (arguments
13705 ;; FIXME: Tests require packaging 'pymaging'.
13706 '(#:tests? #f))
13707 (propagated-inputs
13708 `(("python-lxml" ,python-lxml) ; for SVG output
13709 ("python-pillow" ,python-pillow) ; for PNG output
13710 ("python-six" ,python-six)))
13711 (home-page "https://github.com/lincolnloop/python-qrcode")
13712 (synopsis "QR Code image generator")
13713 (description "This package provides a pure Python QR Code generator
13714 module. It uses the Python Imaging Library (PIL) to allow for the generation
13715 of QR Codes.
13716
13717 In addition this package provides a command line tool to generate QR codes and
13718 either write these QR codes to a file or do the output as ascii art at the
13719 console.")
13720 (license license:bsd-3)))
13721
13722 (define-public python2-qrcode
13723 (package-with-python2 python-qrcode))
13724
13725 (define-public python-rst2ansi
13726 (package
13727 (name "python-rst2ansi")
13728 (version "0.1.5")
13729 (source
13730 (origin
13731 (method url-fetch)
13732 (uri (pypi-uri "rst2ansi" version))
13733 (sha256
13734 (base32
13735 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13736 (build-system python-build-system)
13737 (propagated-inputs
13738 `(("python-docutils" ,python-docutils)))
13739 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13740 (synopsis "Convert RST to ANSI-decorated console output")
13741 (description
13742 "Python module dedicated to rendering RST (reStructuredText) documents
13743 to ansi-escaped strings suitable for display in a terminal.")
13744 (license license:expat)))
13745
13746 (define-public python-ansi2html
13747 (package
13748 (name "python-ansi2html")
13749 (version "1.2.0")
13750 (source
13751 (origin
13752 (method url-fetch)
13753 (uri (pypi-uri "ansi2html" version))
13754 (sha256
13755 (base32
13756 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13757 (build-system python-build-system)
13758 (native-inputs
13759 `(("python-mock" ,python-mock)
13760 ("python-nose" ,python-nose)))
13761 (propagated-inputs
13762 `(("python-six" ,python-six)))
13763 (home-page "https://github.com/ralphbean/ansi2html")
13764 (synopsis "Convert ANSI-decorated console output to HTML")
13765 (description
13766 "@command{ansi2html} is a Python library and command line utility for
13767 convering text with ANSI color codes to HTML or LaTeX.")
13768 (license license:gpl3+)))
13769
13770 (define-public python2-ansi2html
13771 (package-with-python2 python-ansi2html))
13772
13773 (define-public python-ddt
13774 (package
13775 (name "python-ddt")
13776 (version "1.1.3")
13777 (source
13778 (origin
13779 (method url-fetch)
13780 (uri (pypi-uri "ddt" version))
13781 (sha256
13782 (base32
13783 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13784 (build-system python-build-system)
13785 (native-inputs
13786 `(("python-mock" ,python-mock)
13787 ("python-nose" ,python-nose)))
13788 (propagated-inputs
13789 `(("python-six" ,python-six)
13790 ("python-pyyaml" ,python-pyyaml)))
13791 (home-page "https://github.com/txels/ddt")
13792 (synopsis "Data-Driven Tests")
13793 (description
13794 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13795 running it with different test data, and make it appear as multiple test
13796 cases.")
13797 (license license:expat)))
13798
13799 (define-public python2-ddt
13800 (package-with-python2 python-ddt))
13801
13802 (define-public python-pycountry
13803 (package
13804 (name "python-pycountry")
13805 (version "18.5.26")
13806 (source
13807 (origin
13808 (method url-fetch)
13809 (uri (pypi-uri "pycountry" version))
13810 (sha256
13811 (base32
13812 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13813 (build-system python-build-system)
13814 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13815 (synopsis "ISO databases for languages, countries, currencies, etc.")
13816 (description
13817 "@code{pycountry} provides the ISO databases for the standards:
13818 @enumerate
13819 @item 639-3 (Languages)
13820 @item 3166 (Countries)
13821 @item 3166-3 (Deleted Countries)
13822 @item 3166-2 (Subdivisions of countries)
13823 @item 4217 (Currencies)
13824 @item 15924 (Scripts)
13825 @end enumerate
13826 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13827 through a Python API.")
13828 (license license:lgpl2.1+)))
13829
13830 (define-public python2-pycountry
13831 (package-with-python2 python-pycountry))
13832
13833 (define-public python-pycosat
13834 (package
13835 (name "python-pycosat")
13836 (version "0.6.1")
13837 (source
13838 (origin
13839 (method url-fetch)
13840 (uri (pypi-uri "pycosat" version))
13841 (sha256
13842 (base32
13843 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13844 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13845 (build-system python-build-system)
13846 (home-page "https://github.com/ContinuumIO/pycosat")
13847 (synopsis "Bindings to picosat (a SAT solver)")
13848 (description
13849 "This package provides efficient Python bindings to @code{picosat} on
13850 the C level. When importing pycosat, the @code{picosat} solver becomes part
13851 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13852 Problem} (SAT) solver.")
13853 (license license:expat)))
13854
13855 (define-public python2-pycosat
13856 (package-with-python2 python-pycosat))
13857
13858 (define-public python2-ruamel.ordereddict
13859 (package
13860 (name "python2-ruamel.ordereddict")
13861 (version "0.4.9")
13862 (source
13863 (origin
13864 (method url-fetch)
13865 (uri (pypi-uri "ruamel.ordereddict" version))
13866 (sha256
13867 (base32
13868 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13869 (build-system python-build-system)
13870 (arguments
13871 `(#:python ,python-2
13872 #:phases
13873 (modify-phases %standard-phases
13874 (delete 'check)
13875 (add-after 'install 'check
13876 (lambda* (#:key inputs outputs #:allow-other-keys)
13877 (add-installed-pythonpath inputs outputs)
13878 (invoke "python" "test/testordereddict.py"))))))
13879 (home-page "https://bitbucket.org/ruamel/ordereddict")
13880 (synopsis "Version of dict that keeps keys in insertion order")
13881 (description
13882 "This is an implementation of an ordered dictionary with @dfn{Key
13883 Insertion Order} (KIO: updates of values do not affect the position of the
13884 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13885 removed and put at the back). The standard library module @code{OrderedDict},
13886 implemented later, implements a subset of @code{ordereddict} functionality.
13887 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13888 Order} (KSO, no sorting function can be specified, but a transform can be
13889 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13890 (license license:expat)))
13891
13892 (define-public python-pypeg2
13893 (package
13894 (name "python-pypeg2")
13895 (version "2.15.2")
13896 (source
13897 (origin
13898 (method url-fetch)
13899 (uri (pypi-uri "pyPEG2" version))
13900 (sha256
13901 (base32
13902 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13903 (build-system python-build-system)
13904 (propagated-inputs `(("python-lxml" ,python-lxml)))
13905 (arguments
13906 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13907 '(#:tests? #f))
13908 (home-page "https://fdik.org/pyPEG/")
13909 (synopsis "Parsering Expression Grammars in Python")
13910 (description "PyPEG is an intrinsic parser interpreter framework for
13911 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13912 parse many formal languages.")
13913 (license license:gpl2)))
13914
13915 (define-public python-incremental
13916 (package
13917 (name "python-incremental")
13918 (version "17.5.0")
13919 (source
13920 (origin
13921 (method url-fetch)
13922 (uri (pypi-uri "incremental" version))
13923 (sha256
13924 (base32
13925 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13926 (build-system python-build-system)
13927 (home-page "https://github.com/hawkowl/incremental")
13928 (synopsis "Library for versioning Python projects")
13929 (description "Incremental is a small library that versions your Python
13930 projects.")
13931 (license license:expat)))
13932
13933 (define-public python2-incremental
13934 (package-with-python2 python-incremental))
13935
13936 (define-public python-invoke
13937 (package
13938 (name "python-invoke")
13939 (home-page "https://www.pyinvoke.org/")
13940 (version "1.3.0")
13941 (source (origin
13942 (method url-fetch)
13943 (uri (pypi-uri "invoke" version))
13944 (sha256
13945 (base32
13946 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13947 (build-system python-build-system)
13948 (arguments
13949 ;; XXX: Requires many dependencies that are not yet in Guix.
13950 `(#:tests? #f))
13951 (synopsis "Pythonic task execution")
13952 (description
13953 "Invoke is a Python task execution tool and library, drawing inspiration
13954 from various sources to arrive at a powerful and clean feature set. It is
13955 evolved from the Fabric project, but focuses on local and abstract concerns
13956 instead of servers and network commands.")
13957 (license license:bsd-3)))
13958
13959 (define-public python2-invoke
13960 (package-with-python2 python-invoke))
13961
13962 (define-public python-automat
13963 (package
13964 (name "python-automat")
13965 (version "20.2.0")
13966 (source (origin
13967 (method url-fetch)
13968 (uri (pypi-uri "Automat" version))
13969 (sha256
13970 (base32
13971 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13972 (build-system python-build-system)
13973 ;; We disable the tests because they require python-twisted, while
13974 ;; python-twisted depends on python-automat. Twisted is optional, but the
13975 ;; tests fail if it is not available. Also see
13976 ;; <https://github.com/glyph/automat/issues/71>.
13977 (arguments '(#:tests? #f))
13978 (native-inputs
13979 `(("python-m2r" ,python-m2r)
13980 ("python-setuptools-scm" ,python-setuptools-scm)
13981 ("python-graphviz" ,python-graphviz)))
13982 (propagated-inputs
13983 `(("python-six" ,python-six)
13984 ("python-attrs" ,python-attrs)))
13985 (home-page "https://github.com/glyph/Automat")
13986 (synopsis "Self-service finite-state machines")
13987 (description "Automat is a library for concise, idiomatic Python
13988 expression of finite-state automata (particularly deterministic finite-state
13989 transducers).")
13990 (license license:expat)))
13991
13992 (define-public python2-automat
13993 (package-with-python2 python-automat))
13994
13995 (define-public python-m2r
13996 (package
13997 (name "python-m2r")
13998 (version "0.2.1")
13999 (source (origin
14000 (method url-fetch)
14001 (uri (pypi-uri "m2r" version))
14002 (sha256
14003 (base32
14004 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
14005 (build-system python-build-system)
14006 (propagated-inputs
14007 `(("python-docutils" ,python-docutils)
14008 ("python-mistune" ,python-mistune)))
14009 (native-inputs
14010 `(("python-pygments" ,python-pygments)
14011 ("python-mock" ,python-mock)))
14012 (home-page "https://github.com/miyakogi/m2r")
14013 (synopsis "Markdown to reStructuredText converter")
14014 (description "M2R converts a markdown file including reST markups to valid
14015 reST format.")
14016 (license license:expat)))
14017
14018 (define-public python2-m2r
14019 (package-with-python2 python-m2r))
14020
14021 (define-public python-constantly
14022 (package
14023 (name "python-constantly")
14024 (version "15.1.0")
14025 (source (origin
14026 (method url-fetch)
14027 (uri (pypi-uri "constantly" version))
14028 (sha256
14029 (base32
14030 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
14031 (build-system python-build-system)
14032 (home-page "https://github.com/twisted/constantly")
14033 (synopsis "Symbolic constants in Python")
14034 (description "Constantly is a Python library that provides symbolic
14035 constant support. It includes collections and constants with text, numeric,
14036 and bit flag values.")
14037 (license license:expat)))
14038
14039 (define-public python2-constantly
14040 (package-with-python2 python-constantly))
14041
14042 (define-public python-attrs
14043 (package
14044 (name "python-attrs")
14045 (version "19.3.0")
14046 (source (origin
14047 (method url-fetch)
14048 (uri (pypi-uri "attrs" version))
14049 (sha256
14050 (base32
14051 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
14052 (build-system python-build-system)
14053 (arguments
14054 `(#:modules ((guix build utils)
14055 (guix build python-build-system)
14056 (ice-9 ftw)
14057 (srfi srfi-1)
14058 (srfi srfi-26))
14059 #:phases (modify-phases %standard-phases
14060 (replace 'check
14061 (lambda _
14062 (let ((cwd (getcwd)))
14063 (setenv "PYTHONPATH"
14064 (string-append
14065 cwd "/build/"
14066 (find (cut string-prefix? "lib" <>)
14067 (scandir (string-append cwd "/build")))
14068 ":"
14069 (getenv "PYTHONPATH")))
14070 (invoke "python" "-m" "pytest")))))))
14071 (native-inputs
14072 `(("python-coverage" ,python-coverage)
14073 ("python-hypothesis" ,python-hypothesis)
14074 ("python-pympler" ,python-pympler)
14075 ("python-pytest" ,python-pytest)
14076 ("python-six" ,python-six)
14077 ("python-sphinx" ,python-sphinx)
14078 ("python-zope-interface" ,python-zope-interface)))
14079 (home-page "https://github.com/python-attrs/attrs/")
14080 (synopsis "Attributes without boilerplate")
14081 (description "@code{attrs} is a Python package with class decorators that
14082 ease the chores of implementing the most common attribute-related object
14083 protocols.")
14084 (license license:expat)))
14085
14086 (define-public python2-attrs
14087 (package-with-python2 python-attrs))
14088
14089 (define-public python-attrs-bootstrap
14090 (package
14091 (inherit python-attrs)
14092 (name "python-attrs-bootstrap")
14093 (native-inputs `())
14094 (arguments `(#:tests? #f))))
14095
14096 (define-public python2-attrs-bootstrap
14097 (package-with-python2 python-attrs-bootstrap))
14098
14099 (define-public python2-cliapp
14100 (package
14101 (name "python2-cliapp")
14102 (version "1.20180812.1")
14103 (source
14104 (origin
14105 (method url-fetch)
14106 (uri (string-append
14107 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
14108 version ".tar.gz"))
14109 (sha256
14110 (base32
14111 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
14112 (build-system python-build-system)
14113 (arguments
14114 `(#:python ,python-2
14115 #:phases
14116 (modify-phases %standard-phases
14117 ;; check phase needs to be run before the build phase. If not,
14118 ;; coverage-test-runner looks for tests for the built source files,
14119 ;; and fails.
14120 (delete 'check)
14121 (add-before 'build 'check
14122 (lambda _
14123 ;; Disable python3 tests
14124 (substitute* "check"
14125 (("python3") "# python3"))
14126 (invoke "./check"))))))
14127 (native-inputs
14128 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14129 ("python2-pep8" ,python2-pep8)))
14130 (propagated-inputs
14131 `(("python2-pyaml" ,python2-pyaml)))
14132 (home-page "https://liw.fi/cliapp/")
14133 (synopsis "Python framework for command line programs")
14134 (description "@code{python2-cliapp} is a python framework for
14135 command line programs. It contains the typical stuff such programs
14136 need to do, such as parsing the command line for options, and
14137 iterating over input files.")
14138 (license license:gpl2+)))
14139
14140 (define-public python2-ttystatus
14141 (package
14142 (name "python2-ttystatus")
14143 (version "0.36")
14144 (source
14145 (origin
14146 (method url-fetch)
14147 (uri (string-append
14148 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
14149 version ".tar.gz"))
14150 (sha256
14151 (base32
14152 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
14153 (build-system python-build-system)
14154 (native-inputs
14155 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14156 ("python2-pep8" ,python2-pep8)))
14157 (arguments
14158 `(#:python ,python-2
14159 #:phases
14160 (modify-phases %standard-phases
14161 ;; check phase needs to be run before the build phase. If not,
14162 ;; coverage-test-runner looks for tests for the built source files,
14163 ;; and fails.
14164 (delete 'check)
14165 (add-before 'build 'check
14166 (lambda _ (invoke "make" "check"))))))
14167 (home-page "https://liw.fi/ttystatus/")
14168 (synopsis "Python library for showing progress reporting and
14169 status updates on terminals")
14170 (description "@code{python2-ttystatus} is a python library for
14171 showing progress reporting and status updates on terminals, for
14172 command line programs. Output is automatically adapted to the width
14173 of the terminal: truncated if it does not fit, and resized if the
14174 terminal size changes.")
14175 (license license:gpl3+)))
14176
14177 (define-public python2-tracing
14178 (package
14179 (name "python2-tracing")
14180 (version "0.10")
14181 (source
14182 (origin
14183 (method url-fetch)
14184 (uri (string-append
14185 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
14186 version ".tar.gz"))
14187 (sha256
14188 (base32
14189 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
14190 (build-system python-build-system)
14191 (arguments
14192 `(#:python ,python-2))
14193 (home-page "https://liw.fi/tracing/")
14194 (synopsis "Python debug logging helper")
14195 (description "@code{python2-tracing} is a python library for
14196 logging debug messages. It provides a way to turn debugging messages
14197 on and off, based on the filename they occur in. It is much faster
14198 than using @code{logging.Filter} to accomplish the same thing, which
14199 matters when code is run in production mode. The actual logging still
14200 happens using the @code{logging} library.")
14201 (license license:gpl3+)))
14202
14203 (define-public python2-larch
14204 (package
14205 (name "python2-larch")
14206 (version "1.20151025")
14207 (source
14208 (origin
14209 (method url-fetch)
14210 (uri (string-append
14211 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
14212 version ".tar.gz"))
14213 (patches (search-patches
14214 "python2-larch-coverage-4.0a6-compatibility.patch"))
14215 (sha256
14216 (base32
14217 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
14218 (build-system python-build-system)
14219 (arguments
14220 `(#:python ,python-2
14221 #:phases
14222 (modify-phases %standard-phases
14223 ;; check phase needs to be run before the build phase. If not,
14224 ;; coverage-test-runner looks for tests for the built source files,
14225 ;; and fails.
14226 (delete 'check)
14227 (add-before 'build 'check
14228 (lambda _ (invoke "make" "check"))))))
14229 (native-inputs
14230 `(("cmdtest" ,cmdtest)
14231 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
14232 (propagated-inputs
14233 `(("python2-tracing" ,python2-tracing)))
14234 (home-page "https://liw.fi/larch/")
14235 (synopsis "Python copy-on-write B-tree library")
14236 (description "@code{python2-larch} is an implementation of
14237 particular kind of B-tree, based on research by Ohad Rodeh. See
14238 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
14239 on the data structure.
14240
14241 The distinctive feature of this B-tree is that a node is never
14242 (conceptually) modified. Instead, all updates are done by
14243 copy-on-write. This makes it easy to clone a tree, and modify only the
14244 clone, while other processes access the original tree.")
14245 (license license:gpl3+)))
14246
14247 (define-public python-astroid
14248 (package
14249 (name "python-astroid")
14250 (version "2.4.1")
14251 (source
14252 (origin
14253 (method url-fetch)
14254 (uri (pypi-uri "astroid" version))
14255 (sha256
14256 (base32 "1h99jal7ax07xna1djw5z7hpgb8vjrl3hrrg49p1phljwniww5sc"))))
14257 (build-system python-build-system)
14258 (propagated-inputs
14259 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
14260 ("python-six" ,python-six)
14261 ("python-wrapt" ,python-wrapt)))
14262 (native-inputs
14263 `(("python-dateutil" ,python-dateutil)
14264 ("python-pytest" ,python-pytest)
14265 ("python-pytest-runner" ,python-pytest-runner)))
14266 (home-page "https://github.com/PyCQA/astroid")
14267 (synopsis "Common base representation of python source code for pylint and
14268 other projects")
14269 (description "@code{python-astroid} provides a common base representation
14270 of python source code for projects such as pychecker, pyreverse, pylint, etc.
14271
14272 It provides a compatible representation which comes from the _ast module. It
14273 rebuilds the tree generated by the builtin _ast module by recursively walking
14274 down the AST and building an extended ast. The new node classes have
14275 additional methods and attributes for different usages. They include some
14276 support for static inference and local name scopes. Furthermore, astroid
14277 builds partial trees by inspecting living objects.")
14278 (license license:lgpl2.1+)
14279 (properties `((python2-variant . ,(delay python2-astroid))))))
14280
14281 (define-public python2-astroid
14282 (let ((base (package-with-python2
14283 (strip-python2-variant python-astroid))))
14284 (package (inherit base)
14285 ;; Version 2.x removes python2 support.
14286 (version "1.6.5")
14287 (source
14288 (origin
14289 (method url-fetch)
14290 (uri (pypi-uri "astroid" version))
14291 (sha256
14292 (base32
14293 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
14294 (arguments
14295 (substitute-keyword-arguments (package-arguments base)
14296 ((#:phases phases)
14297 `(modify-phases ,phases
14298 (add-after 'unpack 'remove-spurious-test
14299 (lambda _
14300 ;; https://github.com/PyCQA/astroid/issues/276
14301 (delete-file "astroid/tests/unittest_brain.py")
14302 #t))
14303 (replace 'check
14304 (lambda _
14305 (invoke"python" "-m" "unittest" "discover"
14306 "-p" "unittest*.py")))))))
14307 (native-inputs `())
14308 (propagated-inputs
14309 `(("python2-backports-functools-lru-cache"
14310 ,python2-backports-functools-lru-cache)
14311 ("python2-enum34" ,python2-enum34)
14312 ("python2-singledispatch" ,python2-singledispatch)
14313 ,@(alist-delete "python-typed-ast"
14314 (package-propagated-inputs base)))))))
14315
14316 (define-public python-isort
14317 (package
14318 (name "python-isort")
14319 (version "4.3.4")
14320 (source
14321 (origin
14322 (method git-fetch)
14323 (uri (git-reference
14324 ;; Tests pass only from the Github sources
14325 (url "https://github.com/timothycrosley/isort")
14326 (commit version)))
14327 (file-name (git-file-name name version))
14328 (sha256
14329 (base32
14330 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
14331 (build-system python-build-system)
14332 (native-inputs
14333 `(("python-mock" ,python-mock)
14334 ("python-pytest" ,python-pytest)))
14335 (home-page "https://github.com/timothycrosley/isort")
14336 (synopsis "Python utility/library to sort python imports")
14337 (description "@code{python-isort} is a python utility/library to sort
14338 imports alphabetically, and automatically separated into sections. It
14339 provides a command line utility, a python library and plugins for various
14340 editors.")
14341 (license license:expat)
14342 (properties `((python2-variant . ,(delay python2-isort))))))
14343
14344 (define-public python2-isort
14345 (let ((base (package-with-python2
14346 (strip-python2-variant python-isort))))
14347 (package (inherit base)
14348 (native-inputs
14349 `(("python2-futures" ,python2-futures)
14350 ,@(package-native-inputs base))))))
14351
14352 (define-public python2-backports-functools-lru-cache
14353 (package
14354 (name "python2-backports-functools-lru-cache")
14355 (version "1.6.1")
14356 (source
14357 (origin
14358 (method url-fetch)
14359 ;; only the pypi tarballs contain the necessary metadata
14360 (uri (pypi-uri "backports.functools_lru_cache" version))
14361 (sha256
14362 (base32
14363 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
14364 (build-system python-build-system)
14365 (native-inputs
14366 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14367 (arguments
14368 `(#:python ,python-2))
14369 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14370 (synopsis "Backport of functools.lru_cache from Python 3.3")
14371 (description "@code{python2-backports-functools-lru-cache} is a backport
14372 of @code{functools.lru_cache} from python 3.3.")
14373 (license license:expat)))
14374
14375 (define-public python-configparser
14376 (package
14377 (name "python-configparser")
14378 (version "4.0.2")
14379 (source
14380 (origin
14381 (method url-fetch)
14382 (uri (pypi-uri "configparser" version))
14383 (sha256
14384 (base32
14385 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14386 (native-inputs
14387 `(("python-setuptools_scm" ,python-setuptools-scm)))
14388 (build-system python-build-system)
14389 (home-page "https://github.com/jaraco/configparser/")
14390 (synopsis "Backport of configparser from python 3.5")
14391 (description "@code{python-configparser} is a backport of
14392 @code{configparser} from Python 3.5 so that it can be used directly
14393 in other versions.")
14394 (license license:expat)))
14395
14396 (define-public python2-configparser
14397 (package-with-python2 python-configparser))
14398
14399 (define-public python-mando
14400 (package
14401 (name "python-mando")
14402 (version "0.6.4")
14403 (source (origin
14404 (method url-fetch)
14405 (uri (pypi-uri "mando" version))
14406 (sha256
14407 (base32
14408 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14409 (build-system python-build-system)
14410 (propagated-inputs
14411 `(("python-rst2ansi" ,python-rst2ansi)
14412 ("python-six" ,python-six)))
14413 (native-inputs
14414 `(("python-pytest" ,python-pytest)))
14415 (home-page "https://mando.readthedocs.org/")
14416 (synopsis
14417 "Wrapper around argparse, allowing creation of complete CLI applications")
14418 (description
14419 "This package is a wrapper around argparse, allowing you to write complete CLI
14420 applications in seconds while maintaining all the flexibility.")
14421 (license license:expat)))
14422
14423 (define-public python2-mando
14424 (package-with-python2 python-mando))
14425
14426 (define-public python2-argparse
14427 (package
14428 (name "python2-argparse")
14429 (version "1.4.0")
14430 (source
14431 (origin
14432 (method url-fetch)
14433 (uri (pypi-uri "argparse" version))
14434 (sha256
14435 (base32
14436 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14437 (build-system python-build-system)
14438 (arguments
14439 `(#:python ,python-2))
14440 (home-page "https://github.com/ThomasWaldmann/argparse/")
14441 (synopsis "Python command-line parsing library")
14442 (description
14443 "This package is mostly for people who want to have @code{argparse} on
14444 older Pythons because it was not part of the standard library back then.")
14445 (license license:psfl)))
14446
14447 (define-public python-fudge
14448 (package
14449 (name "python-fudge")
14450 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14451 ;; package, which is currently the only use of this package.
14452 (version "0.9.6")
14453 (source
14454 (origin
14455 (method url-fetch)
14456 (uri (pypi-uri "fudge" version))
14457 (sha256
14458 (base32
14459 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14460 (build-system python-build-system)
14461 (arguments
14462 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14463 (home-page "https://github.com/fudge-py/fudge")
14464 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14465 (description
14466 "Fudge is a Python module for using fake objects (mocks and stubs) to
14467 test real ones.
14468
14469 In readable Python code, you declare the methods available on your fake object
14470 and how they should be called. Then you inject that into your application and
14471 start testing. This declarative approach means you don’t have to record and
14472 playback actions and you don’t have to inspect your fakes after running code.
14473 If the fake object was used incorrectly then you’ll see an informative
14474 exception message with a traceback that points to the culprit.")
14475 (license license:expat)))
14476
14477 (define-public python2-fudge
14478 (package-with-python2 python-fudge))
14479
14480 (define-public python-mwclient
14481 (package
14482 (name "python-mwclient")
14483 (version "0.10.1")
14484 (source
14485 (origin
14486 (method git-fetch)
14487 ;; The PyPI version wouldn't contain tests.
14488 (uri (git-reference
14489 (url "https://github.com/mwclient/mwclient")
14490 (commit (string-append "v" version))))
14491 (file-name (git-file-name name version))
14492 (sha256
14493 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
14494 (build-system python-build-system)
14495 (propagated-inputs
14496 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14497 ("python-six" ,python-six)))
14498 (native-inputs
14499 `(("python-mock" ,python-mock)
14500 ("python-pytest" ,python-pytest)
14501 ("python-pytest-cov" ,python-pytest-cov)
14502 ("python-pytest-runner" ,python-pytest-runner)
14503 ("python-responses" ,python-responses)))
14504 (home-page "https://github.com/btongminh/mwclient")
14505 (synopsis "MediaWiki API client")
14506 (description "This package provides a MediaWiki API client.")
14507 (license license:expat)))
14508
14509 (define-public python2-mwclient
14510 (package-with-python2 python-mwclient))
14511
14512 (define-public python-utils
14513 (package
14514 (name "python-utils")
14515 (version "2.4.0")
14516 (source (origin
14517 (method url-fetch)
14518 (uri (pypi-uri "python-utils" version))
14519 (sha256
14520 (base32
14521 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
14522 (build-system python-build-system)
14523 (arguments
14524 `(#:phases
14525 (modify-phases %standard-phases
14526 (replace 'check
14527 (lambda* (#:key inputs outputs #:allow-other-keys)
14528 (add-installed-pythonpath inputs outputs)
14529 (delete-file "pytest.ini")
14530 (invoke "pytest" "-vv"))))))
14531 (native-inputs
14532 `(("pytest-runner" ,python-pytest-runner)
14533 ("pytest" ,python-pytest)
14534 ("six" ,python-six)))
14535 (home-page "https://github.com/WoLpH/python-utils")
14536 (synopsis "Convenient utilities not included with the standard Python install")
14537 (description
14538 "Python Utils is a collection of small Python functions and classes which
14539 make common patterns shorter and easier.")
14540 (license license:bsd-2)))
14541
14542 (define-public python2-utils
14543 (package-with-python2 python-utils))
14544
14545 (define-public python-diff-match-patch
14546 (package
14547 (name "python-diff-match-patch")
14548 (version "20121119")
14549 (source
14550 (origin
14551 (method url-fetch)
14552 (uri (pypi-uri "diff-match-patch" version))
14553 (sha256
14554 (base32
14555 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14556 (build-system python-build-system)
14557 (home-page "https://code.google.com/p/google-diff-match-patch")
14558 (synopsis "Synchronize plain text")
14559 (description "Diff Match and Patch libraries offer robust algorithms to
14560 perform the operations required for synchronizing plain text.")
14561 (license license:asl2.0)))
14562
14563 (define-public python2-diff-match-patch
14564 (package-with-python2 python-diff-match-patch))
14565
14566 (define-public python-dirsync
14567 (package
14568 (name "python-dirsync")
14569 (version "2.2.3")
14570 (source
14571 (origin
14572 (method url-fetch)
14573 (uri (pypi-uri "dirsync" version))
14574 (sha256
14575 (base32
14576 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14577 (build-system python-build-system)
14578 (propagated-inputs
14579 `(("six" ,python-six)))
14580 (home-page "https://bitbucket.org/tkhyn/dirsync")
14581 (synopsis "Advanced directory tree synchronisation tool")
14582 (description "Advanced directory tree synchronisation tool.")
14583 (license license:expat)))
14584
14585 (define-public python2-dirsync
14586 (package-with-python2 python-dirsync))
14587
14588 (define-public python-levenshtein
14589 (package
14590 (name "python-levenshtein")
14591 (version "0.12.0")
14592 (source
14593 (origin
14594 (method url-fetch)
14595 (uri (pypi-uri "python-Levenshtein" version))
14596 (sha256
14597 (base32
14598 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14599 (build-system python-build-system)
14600 (home-page "https://github.com/ztane/python-Levenshtein")
14601 (synopsis "Fast computation of Levenshtein distance and string similarity")
14602 (description
14603 "The Levenshtein Python C extension module contains functions for fast computation of
14604 @enumerate
14605 @item Levenshtein (edit) distance, and edit operations
14606 @item string similarity
14607 @item approximate median strings, and generally string averaging
14608 @item string sequence and set similarity
14609 @end enumerate
14610 It supports both normal and Unicode strings.")
14611 (license license:gpl2+)))
14612
14613 (define-public python2-levenshtein
14614 (package-with-python2 python-levenshtein))
14615
14616 (define-public python-scandir
14617 (package
14618 (name "python-scandir")
14619 (version "1.10.0")
14620 (source
14621 (origin
14622 (method url-fetch)
14623 (uri (pypi-uri "scandir" version))
14624 (sha256
14625 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14626 (build-system python-build-system)
14627 (arguments
14628 `(#:phases (modify-phases %standard-phases
14629 (replace 'check
14630 (lambda _
14631 (invoke "python" "test/run_tests.py"))))))
14632 (home-page "https://github.com/benhoyt/scandir")
14633 (synopsis "Directory iteration function")
14634 (description
14635 "Directory iteration function like os.listdir(), except that instead of
14636 returning a list of bare filenames, it yields DirEntry objects that include
14637 file type and stat information along with the name. Using scandir() increases
14638 the speed of os.walk() by 2-20 times (depending on the platform and file
14639 system) by avoiding unnecessary calls to os.stat() in most cases.
14640
14641 This package is part of the Python standard library since version 3.5.")
14642 (license license:bsd-3)))
14643
14644 (define-public python2-scandir
14645 (package-with-python2 python-scandir))
14646
14647 (define-public python2-stemming
14648 (package
14649 (name "python2-stemming")
14650 (version "1.0.1")
14651 (source
14652 (origin
14653 (method url-fetch)
14654 (uri (pypi-uri "stemming" version))
14655 (sha256
14656 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14657 (build-system python-build-system)
14658 (arguments
14659 `(#:python ,python-2))
14660 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14661 (synopsis "Python implementations of various stemming algorithms")
14662 (description
14663 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14664 stemming algorithms for English. These implementations are straightforward and
14665 efficient, unlike some Python versions of the same algorithms available on the
14666 Web. This package is an extraction of the stemming code included in the Whoosh
14667 search engine.")
14668 (license license:public-domain)))
14669
14670 (define-public python-factory-boy
14671 (package
14672 (name "python-factory-boy")
14673 (version "2.8.1")
14674 (source
14675 (origin
14676 (method url-fetch)
14677 (uri (pypi-uri "factory_boy" version))
14678 (sha256
14679 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14680 (build-system python-build-system)
14681 (arguments
14682 ;; Tests are not included in the tarball.
14683 `(#:tests? #f))
14684 (propagated-inputs
14685 `(("faker" ,python-faker)))
14686 (home-page "https://github.com/benhoyt/scandir")
14687 (synopsis "Versatile test fixtures replacement")
14688 (description
14689 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14690
14691 As a fixtures replacement tool, it aims to replace static, hard to maintain
14692 fixtures with easy-to-use factories for complex object.
14693
14694 Instead of building an exhaustive test setup with every possible combination
14695 of corner cases, factory_boy allows you to use objects customized for the
14696 current test, while only declaring the test-specific fields")
14697 (license license:expat)))
14698
14699 (define-public python2-factory-boy
14700 (package-with-python2 python-factory-boy))
14701
14702 (define-public python-translate-toolkit
14703 (package
14704 (name "python-translate-toolkit")
14705 (version "2.1.0")
14706 (source
14707 (origin
14708 (method url-fetch)
14709 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14710 (sha256
14711 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14712 (build-system python-build-system)
14713 (native-inputs
14714 `(("python-pytest" ,python-pytest)
14715 ("python-sphinx" ,python-sphinx)))
14716 (propagated-inputs
14717 `(("python-babel" ,python-babel)
14718 ("python-beautifulsoup4" ,python-beautifulsoup4)
14719 ("python-chardet" ,python-chardet)
14720 ("python-diff-match-patch" ,python-diff-match-patch)
14721 ("python-levenshtein" ,python-levenshtein)
14722 ("python-lxml" ,python-lxml)
14723 ("python-six" ,python-six)
14724 ("python-vobject" ,python-vobject)
14725 ("python-pyyaml" ,python-pyyaml)))
14726 (arguments
14727 ;; TODO: tests are not run, because they end with
14728 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14729 ;; 'parse_funcs'
14730 ;; during test setup.
14731 `(#:tests? #f))
14732 (home-page "https://toolkit.translatehouse.org")
14733 (synopsis "Tools and API for translation and localization engineering")
14734 (description
14735 "Tools and API for translation and localization engineering. It contains
14736 several utilities, as well as an API for building localization tools.")
14737 (license license:gpl2+)))
14738
14739 (define-public python2-translate-toolkit
14740 (package-with-python2 python-translate-toolkit))
14741
14742 (define-public python-packaging
14743 (package
14744 (name "python-packaging")
14745 (version "20.0")
14746 (source
14747 (origin
14748 (method url-fetch)
14749 (uri (pypi-uri "packaging" version))
14750 ;; XXX: The URL in the patch file is wrong, it should be
14751 ;; <https://github.com/pypa/packaging/pull/256>.
14752 (patches (search-patches "python-packaging-test-arch.patch"))
14753 (sha256
14754 (base32
14755 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14756 (build-system python-build-system)
14757 (arguments
14758 `(#:phases (modify-phases %standard-phases
14759 (replace 'check
14760 (lambda* (#:key tests? #:allow-other-keys)
14761 (if tests?
14762 (invoke "py.test" "-vv")
14763 (format #t "test suite not run~%"))
14764 #t)))))
14765 (native-inputs
14766 `(("python-pretend" ,python-pretend)
14767 ("python-pytest" ,python-pytest)))
14768 (propagated-inputs
14769 `(("python-pyparsing" ,python-pyparsing)
14770 ("python-six" ,python-six)))
14771 (home-page "https://github.com/pypa/packaging")
14772 (synopsis "Core utilities for Python packages")
14773 (description "Packaging is a Python module for dealing with Python packages.
14774 It offers an interface for working with package versions, names, and dependency
14775 information.")
14776 ;; From 'LICENSE': This software is made available under the terms of
14777 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14778 ;; Contributions to this software is made under the terms of *both* these
14779 ;; licenses.
14780 (license (list license:asl2.0 license:bsd-2))))
14781
14782 (define-public python2-packaging
14783 (package-with-python2 python-packaging))
14784
14785 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14786 (define-public python-packaging-bootstrap
14787 (hidden-package
14788 (package/inherit
14789 python-packaging
14790 (name "python-packaging-bootstrap")
14791 (native-inputs '())
14792 (propagated-inputs
14793 `(("python-pyparsing" ,python-pyparsing)))
14794 (arguments '(#:tests? #f)))))
14795
14796 (define-public python2-packaging-bootstrap
14797 (hidden-package
14798 (package/inherit
14799 python2-packaging
14800 (name "python2-packaging-bootstrap")
14801 (native-inputs '())
14802 (propagated-inputs
14803 `(("python-pyparsing" ,python2-pyparsing)))
14804 (arguments
14805 `(#:tests? #f
14806 ,@(package-arguments python2-packaging))))))
14807
14808 (define-public python-relatorio
14809 (package
14810 (name "python-relatorio")
14811 (version "0.8.0")
14812 (source
14813 (origin
14814 (method url-fetch)
14815 (uri (pypi-uri "relatorio" version))
14816 (sha256
14817 (base32
14818 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14819 (build-system python-build-system)
14820 (propagated-inputs
14821 `(("python-lxml" ,python-lxml)
14822 ("python-genshi" ,python-genshi)))
14823 (native-inputs
14824 `(("python-magic" ,python-magic)))
14825 (home-page "https://relatorio.tryton.org/")
14826 (synopsis "Templating library able to output ODT and PDF files")
14827 (description "Relatorio is a templating library which provides a way to
14828 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14829 for more filetypes can be easily added by creating plugins for them.")
14830 (license license:gpl3+)))
14831
14832 (define-public python2-relatorio
14833 (package-with-python2 python-relatorio))
14834
14835 (define-public python-radon
14836 (package
14837 (name "python-radon")
14838 (version "4.1.0")
14839 (source
14840 (origin
14841 (method url-fetch)
14842 (uri (pypi-uri "radon" version))
14843 (sha256
14844 (base32
14845 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14846 (build-system python-build-system)
14847 (arguments
14848 `(#:phases (modify-phases %standard-phases
14849 (replace 'check
14850 (lambda _
14851 (invoke "python" "radon/tests/run.py"))))))
14852 (propagated-inputs
14853 `(("python-colorama" ,python-colorama)
14854 ("python-flake8-polyfill" ,python-flake8-polyfill)
14855 ("python-mando" ,python-mando)))
14856 (native-inputs
14857 `(("python-pytest" ,python-pytest)
14858 ("python-pytest-mock" ,python-pytest-mock)))
14859 (home-page "https://radon.readthedocs.org/")
14860 (synopsis "Code Metrics in Python")
14861 (description "Radon is a Python tool which computes various code metrics.
14862 Supported metrics are:
14863 @itemize @bullet
14864 @item raw metrics: SLOC, comment lines, blank lines, &c.
14865 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14866 @item Halstead metrics (all of them)
14867 @item the Maintainability Index (a Visual Studio metric)
14868 @end itemize")
14869 (properties `((python2-variant . ,(delay python2-radon))))
14870 (license license:expat)))
14871
14872 (define-public python2-radon
14873 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14874 (package
14875 (inherit base)
14876 (propagated-inputs
14877 `(("python-configparser" ,python2-configparser)
14878 ("python-future" ,python2-future)
14879 ,@(package-propagated-inputs base))))))
14880
14881 (define-public python-sure
14882 (package
14883 (name "python-sure")
14884 (version "1.4.11")
14885 (source
14886 (origin
14887 (method url-fetch)
14888 (uri (pypi-uri "sure" version))
14889 (sha256
14890 (base32
14891 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14892 (build-system python-build-system)
14893 (propagated-inputs
14894 `(("python-mock" ,python-mock)
14895 ("python-six" ,python-six)))
14896 (native-inputs
14897 `(("python-nose" ,python-nose)))
14898 (home-page "https://github.com/gabrielfalcao/sure")
14899 (synopsis "Automated testing library in python for python")
14900 (description
14901 "Sure is a python library that leverages a DSL for writing assertions.
14902 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14903 (license license:gpl3+)))
14904
14905 (define-public python2-sure
14906 (package-with-python2 python-sure))
14907
14908 (define-public python2-couleur
14909 ;; This package does not seem to support python3 at all, hence,
14910 ;; only the python2 variant definition is provided.
14911 (package
14912 (name "python2-couleur")
14913 (version "0.6.2")
14914 (source
14915 (origin
14916 (method url-fetch)
14917 (uri (pypi-uri "couleur" version))
14918 (sha256
14919 (base32
14920 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14921 (build-system python-build-system)
14922 (arguments
14923 `(#:python ,python-2))
14924 (home-page "https://github.com/gabrielfalcao/couleur")
14925 (synopsis
14926 "ANSI terminal tool for python, colored shell and other handy fancy features")
14927 (description
14928 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14929 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14930 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14931 ;; https://github.com/gabrielfalcao/couleur/issues/11
14932 (license license:lgpl3+)))
14933
14934 (define-public python-misaka
14935 (package
14936 (name "python-misaka")
14937 (version "2.1.1")
14938 (source
14939 (origin
14940 (method url-fetch)
14941 (uri (pypi-uri "misaka" version))
14942 (sha256
14943 (base32
14944 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14945 (build-system python-build-system)
14946 (arguments
14947 `(;; Line 37 of setup.py calls self.run_command('develop')
14948 ;; in the 'check' phase. This command seems to be trying
14949 ;; to write to
14950 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14951 ;; for which it does not have the permission to write.
14952 #:tests? #f))
14953 (propagated-inputs
14954 `(("python-cffi" ,python-cffi)))
14955 (home-page "https://github.com/FSX/misaka")
14956 (synopsis "Python binding for Hoedown")
14957 (description
14958 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14959 library written in C. It features a fast HTML renderer and functionality to make custom
14960 renderers (e.g. man pages or LaTeX).")
14961 (license license:expat)))
14962
14963 (define-public python2-misaka
14964 (package-with-python2 python-misaka))
14965
14966 (define-public python2-steadymark
14967 ;; This is forced into being a python2 only variant
14968 ;; due to its dependence on couleur that has no support
14969 ;; for python3
14970 (package
14971 (name "python2-steadymark")
14972 (version "0.7.3")
14973 (source
14974 (origin
14975 (method url-fetch)
14976 (uri (pypi-uri "steadymark" version))
14977 (sha256
14978 (base32
14979 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14980 (build-system python-build-system)
14981 (native-inputs
14982 `(("python-couleur" ,python2-couleur)
14983 ("python-sure" ,python2-sure)
14984 ("python-misaka" ,python2-misaka)))
14985 (arguments
14986 `(#:python ,python-2
14987 #:phases
14988 (modify-phases %standard-phases
14989 (add-before 'build 'patch-setup-py
14990 (lambda _
14991 ;; Update requirements from dependency==version
14992 ;; to dependency>=version
14993 (substitute* "setup.py"
14994 (("==") ">="))
14995 #t)))))
14996 (home-page "https://github.com/gabrielfalcao/steadymark")
14997 (synopsis "Markdown-based test runner for python")
14998 (description
14999 "@code{Steadymark} allows documentation to be written in github-flavoured
15000 markdown. The documentation may contain snippets of code surrounded by python
15001 code blocks and @code{Steadymark} will find these snippets and run them, making
15002 sure that there are no old malfunctional examples in the documentation examples.")
15003 (license license:expat)))
15004
15005 (define-public python-jsonpointer
15006 (package
15007 (name "python-jsonpointer")
15008 (version "1.10")
15009 (source
15010 (origin
15011 (method url-fetch)
15012 (uri (pypi-uri "jsonpointer" version))
15013 (sha256
15014 (base32
15015 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15016 (build-system python-build-system)
15017 (home-page "https://github.com/stefankoegl/python-json-pointer")
15018 (synopsis "Identify specific nodes in a JSON document")
15019 (description "@code{jsonpointer} allows you to access specific nodes
15020 by path in a JSON document (see RFC 6901).")
15021 (license license:bsd-3)))
15022
15023 (define-public python2-jsonpointer
15024 (package-with-python2 python-jsonpointer))
15025
15026 (define-public python-jsonpatch
15027 (package
15028 (name "python-jsonpatch")
15029 (version "1.16")
15030 (source
15031 (origin
15032 (method git-fetch)
15033 ;; pypi version lacks tests.js
15034 (uri (git-reference
15035 (url "https://github.com/stefankoegl/python-json-patch")
15036 (commit (string-append "v" version))))
15037 (file-name (git-file-name name version))
15038 (sha256
15039 (base32
15040 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
15041 (build-system python-build-system)
15042 (native-inputs
15043 `(("python-jsonpointer" ,python-jsonpointer)))
15044 (home-page "https://github.com/stefankoegl/python-json-patch")
15045 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
15046 (description "@code{jsonpatch} is a library and program that allows
15047 applying JSON Patches according to RFC 6902.")
15048 (license license:bsd-3)))
15049
15050 (define-public python2-jsonpatch
15051 (package-with-python2 python-jsonpatch))
15052
15053 (define-public python-jsonpatch-0.4
15054 (package (inherit python-jsonpatch)
15055 (name "python-jsonpatch")
15056 (version "0.4")
15057 (source
15058 (origin
15059 (method git-fetch)
15060 (uri (git-reference
15061 (url "https://github.com/stefankoegl/python-json-patch")
15062 (commit (string-append "v" version))))
15063 (file-name (git-file-name name version))
15064 (sha256
15065 (base32
15066 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
15067
15068 (define-public python2-jsonpatch-0.4
15069 (package-with-python2 python-jsonpatch-0.4))
15070
15071 (define-public python-rfc3986
15072 (package
15073 (name "python-rfc3986")
15074 (version "1.1.0")
15075 (source (origin
15076 (method url-fetch)
15077 (uri (pypi-uri "rfc3986" version))
15078 (sha256
15079 (base32
15080 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
15081 (build-system python-build-system)
15082 (arguments
15083 `(#:modules ((guix build utils)
15084 (guix build python-build-system)
15085 (ice-9 ftw)
15086 (srfi srfi-1)
15087 (srfi srfi-26))
15088 #:phases
15089 (modify-phases %standard-phases
15090 (replace 'check
15091 (lambda _
15092 (let ((cwd (getcwd)))
15093 (setenv "PYTHONPATH"
15094 (string-append cwd "/build/"
15095 (find (cut string-prefix? "lib" <>)
15096 (scandir (string-append cwd "/build")))
15097 ":"
15098 (getenv "PYTHONPATH")))
15099 (invoke "pytest" "-v")))))))
15100 (native-inputs
15101 `(("python-pytest" ,python-pytest)))
15102 (home-page "https://rfc3986.readthedocs.io/")
15103 (synopsis "Parse and validate URI references")
15104 (description
15105 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
15106 validation and authority parsing. This module also supports RFC@tie{}6874
15107 which adds support for zone identifiers to IPv6 addresses.")
15108 (license license:asl2.0)))
15109
15110 (define-public python2-rfc3986
15111 (package-with-python2 python-rfc3986))
15112
15113 (define-public python-rfc3987
15114 (package
15115 (name "python-rfc3987")
15116 (version "1.3.7")
15117 (source
15118 (origin
15119 (method url-fetch)
15120 (uri (pypi-uri "rfc3987" version))
15121 (sha256
15122 (base32
15123 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15124 (build-system python-build-system)
15125 (home-page "https://pypi.org/project/rfc3987/")
15126 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15127 (description "@code{rfc3987} provides routines for parsing and
15128 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15129 (license license:gpl3+)))
15130
15131 (define-public python2-rfc3987
15132 (package-with-python2 python-rfc3987))
15133
15134 (define-public python-validators
15135 (package
15136 (name "python-validators")
15137 (version "0.14.2")
15138 (source (origin
15139 (method url-fetch)
15140 (uri (pypi-uri "validators" version))
15141 (sha256
15142 (base32
15143 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
15144 (build-system python-build-system)
15145 (arguments
15146 '(#:phases (modify-phases %standard-phases
15147 (replace 'check
15148 (lambda _
15149 (invoke "pytest" "-vv"))))))
15150 (propagated-inputs
15151 `(("python-decorator" ,python-decorator)
15152 ("python-six" ,python-six)))
15153 (native-inputs
15154 `(("python-flake8" ,python-flake8)
15155 ("python-isort" ,python-isort)
15156 ("python-pytest" ,python-pytest)))
15157 (home-page "https://github.com/kvesteri/validators")
15158 (synopsis "Data validation library")
15159 (description
15160 "This package contains validators for different things such as email
15161 addresses, IP addresses, URLs, hashes and more. It has been designed to
15162 be easy to use and not require defining a schema or form just to validate
15163 some input.")
15164 (license license:expat)))
15165
15166 (define-public python2-validators
15167 (package-with-python2 python-validators))
15168
15169 (define-public python-validate-email
15170 (package
15171 (name "python-validate-email")
15172 (version "1.3")
15173 (source
15174 (origin
15175 (method url-fetch)
15176 (uri (pypi-uri "validate_email" version))
15177 (sha256
15178 (base32
15179 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15180 (build-system python-build-system)
15181 (home-page "https://github.com/syrusakbary/validate_email")
15182 (synopsis "Verifies if an email address is valid and really exists")
15183 (description "@code{validate_email} can be used to verify if an email
15184 address is valid and really exists.")
15185 (license license:lgpl3+)))
15186
15187 (define-public python2-validate-email
15188 (package-with-python2 python-validate-email))
15189
15190 (define-public python-flex
15191 (package
15192 (name "python-flex")
15193 (version "6.10.0")
15194 (source
15195 (origin
15196 (method url-fetch)
15197 (uri (pypi-uri "flex" version))
15198 (sha256
15199 (base32
15200 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15201 (build-system python-build-system)
15202 (propagated-inputs
15203 `(("python-click" ,python-click)
15204 ("python-iso8601" ,python-iso8601)
15205 ("python-jsonpointer" ,python-jsonpointer)
15206 ("python-pyyaml" ,python-pyyaml)
15207 ("python-requests" ,python-requests)
15208 ("python-rfc3987" ,python-rfc3987)
15209 ("python-six" ,python-six)
15210 ("python-validate-email" ,python-validate-email)))
15211 (home-page "https://github.com/pipermerriam/flex")
15212 (synopsis "Validates Swagger schemata")
15213 (description "@code{flex} can be used to validate Swagger schemata.")
15214 (license license:bsd-3)))
15215
15216 (define-public python2-flex
15217 (package-with-python2 python-flex))
15218
15219 (define-public python-marshmallow
15220 (package
15221 (name "python-marshmallow")
15222 (version "3.0.0b14")
15223 (source
15224 (origin
15225 (method url-fetch)
15226 (uri (pypi-uri "marshmallow" version))
15227 (sha256
15228 (base32
15229 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
15230 (build-system python-build-system)
15231 (propagated-inputs
15232 `(("python-dateutil" ,python-dateutil)
15233 ("python-simplejson" ,python-simplejson)))
15234 (native-inputs
15235 `(("python-pytest" ,python-pytest)
15236 ("python-pytz" ,python-pytz)))
15237 (home-page "https://github.com/marshmallow-code/marshmallow")
15238 (synopsis "Convert complex datatypes to and from native
15239 Python datatypes.")
15240 (description "@code{marshmallow} provides a library for converting
15241 complex datatypes to and from native Python datatypes.")
15242 (license license:expat)))
15243
15244 (define-public python2-marshmallow
15245 (package-with-python2 python-marshmallow))
15246
15247 (define-public python-apispec
15248 (package
15249 (name "python-apispec")
15250 (version "0.25.3")
15251 (source
15252 (origin
15253 (method url-fetch)
15254 (uri (pypi-uri "apispec" version))
15255 (sha256
15256 (base32
15257 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
15258 (build-system python-build-system)
15259 (propagated-inputs
15260 `(("python-pyyaml" ,python-pyyaml)))
15261 (native-inputs
15262 `(("python-pytest" ,python-pytest)
15263 ("python-flask" ,python-flask)
15264 ("python-marshmallow" ,python-marshmallow)
15265 ("python-tornado" ,python-tornado)
15266 ("python-bottle" ,python-bottle)
15267 ("python-mock" ,python-mock)))
15268 (home-page "https://github.com/marshmallow-code/apispec")
15269 (synopsis "Swagger 2.0 API specification generator")
15270 (description "@code{python-apispec} is a pluggable API specification
15271 generator. Currently supports the OpenAPI specification (f.k.a.
15272 Swagger 2.0).")
15273 (license license:expat)))
15274
15275 (define-public python2-apispec
15276 (package-with-python2 python-apispec))
15277
15278 (define-public python-flasgger
15279 (package
15280 (name "python-flasgger")
15281 (version "0.6.3")
15282 (source
15283 (origin
15284 (method git-fetch)
15285 (uri (git-reference
15286 (url "https://github.com/rochacbruno/flasgger")
15287 (commit version)))
15288 (file-name (git-file-name name version))
15289 (sha256
15290 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
15291 (build-system python-build-system)
15292 (arguments
15293 `(#:phases
15294 (modify-phases %standard-phases
15295 (replace 'check
15296 (lambda* (#:key inputs outputs #:allow-other-keys)
15297 (substitute* "Makefile"
15298 (("flake8 flasgger --ignore=F403")
15299 "flake8 flasgger --ignore=E731,F403"))
15300 (setenv "PYTHONPATH" (string-append (getcwd)
15301 ":"
15302 (getenv "PYTHONPATH")))
15303 (invoke "py.test"))))))
15304 (propagated-inputs
15305 `(("python-flask" ,python-flask)
15306 ("python-pyyaml" ,python-pyyaml)
15307 ("python-jsonschema" ,python-jsonschema)
15308 ("python-mistune" ,python-mistune)
15309 ("python-six" ,python-six)))
15310 (native-inputs
15311 `(("python-decorator" ,python-decorator)
15312 ("python-flake8" ,python-flake8)
15313 ("python-flask-restful" ,python-flask-restful)
15314 ("python-flex" ,python-flex)
15315 ("python-pytest" ,python-pytest)
15316 ("python-pytest-cov" ,python-pytest-cov)
15317 ("python-marshmallow" ,python-marshmallow)
15318 ("python-apispec" ,python-apispec)))
15319 (home-page "https://github.com/rochacbruno/flasgger/")
15320 (synopsis "Extract Swagger specs from your Flask project")
15321 (description "@code{python-flasgger} allows extracting Swagger specs
15322 from your Flask project. It is a fork of Flask-Swagger.")
15323 (license license:expat)))
15324
15325 (define-public python2-flasgger
15326 (package-with-python2 python-flasgger))
15327
15328 (define-public python-swagger-spec-validator
15329 (package
15330 (name "python-swagger-spec-validator")
15331 (version "2.4.3")
15332 (source
15333 (origin
15334 (method url-fetch)
15335 (uri (pypi-uri "swagger-spec-validator" version))
15336 (sha256
15337 (base32
15338 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
15339 (build-system python-build-system)
15340 (propagated-inputs
15341 `(("python-jsonschema" ,python-jsonschema)
15342 ("python-pyyaml" ,python-pyyaml)
15343 ("python-six" ,python-six)))
15344 (home-page
15345 "https://github.com/Yelp/swagger_spec_validator")
15346 (synopsis "Validation of Swagger specifications")
15347 (description "@code{swagger_spec_validator} provides a library for
15348 validating Swagger API specifications.")
15349 (license license:asl2.0)))
15350
15351 (define-public python2-swagger-spec-validator
15352 (package-with-python2 python-swagger-spec-validator))
15353
15354 (define-public python-apache-libcloud
15355 (package
15356 (name "python-apache-libcloud")
15357 (version "2.4.0")
15358 (source
15359 (origin
15360 (method url-fetch)
15361 (uri (pypi-uri "apache-libcloud" version))
15362 (sha256
15363 (base32
15364 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15365 (build-system python-build-system)
15366 (arguments
15367 `(#:phases
15368 (modify-phases %standard-phases
15369 (add-after 'unpack 'patch-ssh
15370 (lambda* (#:key inputs #:allow-other-keys)
15371 (substitute* "libcloud/compute/ssh.py"
15372 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15373 "/bin/ssh" "'")))
15374 #t))
15375 (add-after 'unpack 'patch-tests
15376 (lambda _
15377 (substitute* "./libcloud/test/test_file_fixtures.py"
15378 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15379 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15380 return (httplib.OK,
15381 \"1234abcd\",
15382 {\"test\": \"value\"},
15383 httplib.responses[httplib.OK])
15384 def _ascii"))
15385 (substitute* "libcloud/test/compute/test_ssh_client.py"
15386 (("class ShellOutSSHClientTests")
15387 "@unittest.skip(\"Guix container doesn't have ssh service\")
15388 class ShellOutSSHClientTests")
15389 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15390 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15391 (("'.xF0', '.x90', '.x8D', '.x88'")
15392 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15393 #t))
15394 (add-before 'check 'copy-secret
15395 (lambda _
15396 (copy-file "libcloud/test/secrets.py-dist"
15397 "libcloud/test/secrets.py")
15398 #t)))))
15399 (inputs
15400 `(("openssh" ,openssh)))
15401 (propagated-inputs
15402 `(("python-paramiko" ,python-paramiko)
15403 ("python-requests" ,python-requests)))
15404 (native-inputs
15405 `(("python-lockfile" ,python-lockfile)
15406 ("python-mock" ,python-mock)
15407 ("python-pytest" ,python-pytest)
15408 ("python-pytest-runner" ,python-pytest-runner)
15409 ("python-requests-mock" ,python-requests-mock)))
15410 (home-page "https://libcloud.apache.org/")
15411 (synopsis "Unified Cloud API")
15412 (description "@code{libcloud} is a Python library for interacting with
15413 many of the popular cloud service providers using a unified API.")
15414 (license license:asl2.0)))
15415
15416 (define-public python2-apache-libcloud
15417 (package-with-python2 python-apache-libcloud))
15418
15419 (define-public python-smmap
15420 (package
15421 (name "python-smmap")
15422 (version "3.0.1")
15423 (source
15424 (origin
15425 (method url-fetch)
15426 (uri (pypi-uri "smmap" version))
15427 (sha256
15428 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15429 (build-system python-build-system)
15430 (native-inputs
15431 `(("python-nosexcover" ,python-nosexcover)))
15432 (home-page "https://github.com/Byron/smmap")
15433 (synopsis "Python sliding window memory map manager")
15434 (description "@code{smmap} is a pure Python implementation of a sliding
15435 window memory map manager.")
15436 (license license:bsd-3)))
15437
15438 (define-public python-smmap2
15439 (deprecated-package "python-smmap2" python-smmap))
15440
15441 (define-public python2-smmap
15442 (package-with-python2 python-smmap))
15443
15444 (define-public python2-smmap2
15445 (deprecated-package "python2-smmap2" python2-smmap))
15446
15447 (define-public python-regex
15448 (package
15449 (name "python-regex")
15450 (version "2020.6.8")
15451 (source (origin
15452 (method url-fetch)
15453 (uri (pypi-uri "regex" version))
15454 (sha256
15455 (base32
15456 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
15457 (build-system python-build-system)
15458 (arguments
15459 '(#:phases
15460 (modify-phases %standard-phases
15461 (replace 'check
15462 (lambda* (#:key inputs outputs #:allow-other-keys)
15463 (add-installed-pythonpath inputs outputs)
15464 (invoke "python" "-c"
15465 "from regex.test_regex import test_main; test_main()"))))))
15466 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15467 (synopsis "Alternative regular expression module")
15468 (description "This regular expression implementation is backwards-
15469 compatible with the standard @code{re} module, but offers additional
15470 functionality like full case-folding for case-insensitive matches in Unicode.")
15471 (license license:psfl)))
15472
15473 (define-public python2-regex
15474 (package-with-python2 python-regex))
15475
15476 (define-public python-pyopengl
15477 (package
15478 (name "python-pyopengl")
15479 (version "3.1.5")
15480 (source
15481 (origin
15482 (method url-fetch)
15483 (uri (pypi-uri "PyOpenGL" version))
15484 (sha256
15485 (base32
15486 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
15487 (build-system python-build-system)
15488 (inputs
15489 `(("mesa" ,mesa)
15490 ("freeglut" ,freeglut)
15491 ("glu" ,glu)))
15492 (arguments
15493 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
15494 ;attribute 'OSMesa'
15495 #:phases
15496 (modify-phases %standard-phases
15497 (add-before 'build 'fix-paths
15498 (lambda* (#:key inputs outputs #:allow-other-keys)
15499 (substitute* '("OpenGL/platform/ctypesloader.py")
15500 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
15501 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
15502 (("'GL'")
15503 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
15504 (("'GLU'")
15505 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
15506 (("'glut',")
15507 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
15508 (("'GLESv1_CM'")
15509 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
15510 (("'GLESv2'")
15511 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
15512 ;; Not providing libgle. It seems to be very old.
15513 #t)))))
15514 (home-page "http://pyopengl.sourceforge.net")
15515 (synopsis "Standard OpenGL bindings for Python")
15516 (description
15517 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15518 related APIs. The binding is created using the standard @code{ctypes}
15519 library.")
15520 (license license:bsd-3)))
15521
15522 (define-public python-pyopengl-accelerate
15523 (package
15524 (inherit python-pyopengl)
15525 (name "python-pyopengl-accelerate")
15526 (version "3.1.5")
15527 (source
15528 (origin
15529 (method url-fetch)
15530 (uri (pypi-uri "PyOpenGL-accelerate" version))
15531 (sha256
15532 (base32
15533 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
15534 (inputs
15535 `(("mesa" ,mesa)
15536 ("python-numpy" ,python-numpy))) ; for cython module
15537 ; numpy_formathandler, thus not propagated
15538 (arguments
15539 `(#:tests? #f
15540 #:phases
15541 (modify-phases %standard-phases
15542 (delete 'fix-paths))))
15543 (synopsis "Acceleration code for PyOpenGL")
15544 (description
15545 "This is the Cython-coded accelerator module for PyOpenGL.")))
15546
15547 (define-public python-rencode
15548 (package
15549 (name "python-rencode")
15550 (version "1.0.5")
15551 (source
15552 (origin
15553 (method url-fetch)
15554 (uri (pypi-uri "rencode" version))
15555 (sha256
15556 (base32
15557 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15558 (build-system python-build-system)
15559 (arguments
15560 `(#:phases
15561 (modify-phases %standard-phases
15562 (add-before 'check 'delete-bogus-test
15563 ;; This test requires /home/aresch/Downloads, which is not provided by
15564 ;; the build environment.
15565 (lambda _
15566 (delete-file "rencode/t.py")
15567 #t)))))
15568 (native-inputs `(("pkg-config" ,pkg-config)
15569 ("python-cython" ,python-cython)))
15570 (home-page "https://github.com/aresch/rencode")
15571 (synopsis "Serialization of heterogeneous data structures")
15572 (description
15573 "The @code{rencode} module is a data structure serialization library,
15574 similar to @code{bencode} from the BitTorrent project. For complex,
15575 heterogeneous data structures with many small elements, r-encoding stake up
15576 significantly less space than b-encodings. This version of rencode is a
15577 complete rewrite in Cython to attempt to increase the performance over the
15578 pure Python module.")
15579 (license license:bsd-3)))
15580
15581 (define-public python2-rencode
15582 (package-with-python2 python-rencode))
15583
15584 (define-public python-xenon
15585 (package
15586 (name "python-xenon")
15587 (version "0.7.0")
15588 (source
15589 (origin
15590 (method url-fetch)
15591 (uri (pypi-uri "xenon" version))
15592 (sha256
15593 (base32
15594 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15595 (build-system python-build-system)
15596 (native-inputs
15597 `(("python-pyyaml" ,python-pyyaml)
15598 ("python-radon" ,python-radon)
15599 ("python-requests" ,python-requests)
15600 ("python-flake8" ,python-flake8)
15601 ("python-tox" ,python-tox)))
15602 (arguments
15603 `(#:tests? #f ;test suite not shipped with the PyPI archive
15604 #:phases
15605 (modify-phases %standard-phases
15606 (add-before 'build 'patch-test-requirements
15607 (lambda _
15608 ;; Remove httpretty dependency for tests.
15609 (substitute* "setup.py"
15610 (("httpretty") ""))
15611 #t)))))
15612 (home-page "https://xenon.readthedocs.org/")
15613 (synopsis "Monitor code metrics for Python on your CI server")
15614 (description
15615 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15616 Ideally, @code{xenon} is run every time code is committed. Through command
15617 line options, various thresholds can be set for the complexity of code. It
15618 will fail (i.e. it will exit with a non-zero exit code) when any of these
15619 requirements is not met.")
15620 (license license:expat)))
15621
15622 (define-public python2-xenon
15623 (package-with-python2 python-xenon))
15624
15625 (define-public python-pysocks
15626 (package
15627 (name "python-pysocks")
15628 (version "1.7.0")
15629 (source
15630 (origin
15631 (method url-fetch)
15632 (uri (pypi-uri "PySocks" version))
15633 (sha256
15634 (base32
15635 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15636 (build-system python-build-system)
15637 (arguments `(#:tests? #f))
15638 (home-page "https://github.com/Anorov/PySocks")
15639 (synopsis "SOCKS client module")
15640 (description "@code{pysocks} is an updated and semi-actively maintained
15641 version of @code{SocksiPy} with bug fixes and extra features.")
15642 (license license:bsd-3)))
15643
15644 (define-public python2-pysocks
15645 (package-with-python2 python-pysocks))
15646
15647 (define-public python-pydiff
15648 (package
15649 (name "python-pydiff")
15650 (version "0.2")
15651 (source
15652 (origin
15653 (method url-fetch)
15654 (uri (pypi-uri "pydiff" version))
15655 (sha256
15656 (base32
15657 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15658 (build-system python-build-system)
15659 (home-page "https://github.com/myint/pydiff")
15660 (synopsis "Library to diff two Python files at the bytecode level")
15661 (description
15662 "@code{pydiff} makes it easy to look for actual code changes while
15663 ignoring formatting changes.")
15664 (license license:expat)))
15665
15666 (define-public python2-pydiff
15667 (package-with-python2 python-pydiff))
15668
15669 (define-public python-tqdm
15670 (package
15671 (name "python-tqdm")
15672 (version "4.43.0")
15673 (source
15674 (origin
15675 (method url-fetch)
15676 (uri (pypi-uri "tqdm" version))
15677 (sha256
15678 (base32
15679 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15680 (build-system python-build-system)
15681 (arguments
15682 '(#:phases (modify-phases %standard-phases
15683 (replace 'check
15684 (lambda* (#:key inputs outputs #:allow-other-keys)
15685 (add-installed-pythonpath inputs outputs)
15686 ;; This invokation is taken from tox.ini.
15687 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15688 "-d" "-v" "tqdm/"))))))
15689 (native-inputs
15690 `(("python-nose" ,python-nose)))
15691 (home-page "https://github.com/tqdm/tqdm")
15692 (synopsis "Fast, extensible progress meter")
15693 (description
15694 "Make loops show a progress bar on the console by just wrapping any
15695 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15696 design and layout.")
15697 (license (list license:mpl2.0 license:expat))))
15698
15699 (define-public python2-tqdm
15700 (package-with-python2 python-tqdm))
15701
15702 (define-public python-pkginfo
15703 (package
15704 (name "python-pkginfo")
15705 (version "1.4.2")
15706 (source
15707 (origin
15708 (method url-fetch)
15709 (uri (pypi-uri "pkginfo" version))
15710 (sha256
15711 (base32
15712 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15713 (build-system python-build-system)
15714 (arguments
15715 ;; The tests are broken upstream.
15716 '(#:tests? #f))
15717 (home-page
15718 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15719 (synopsis
15720 "Query metadatdata from sdists, bdists, and installed packages")
15721 (description
15722 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15723 source distriubtion (an sdist) or a binary distribution (e.g., created by
15724 running bdist_egg). It can also query the EGG-INFO directory of an installed
15725 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15726 created by running @code{python setup.py develop}).")
15727 (license license:expat)))
15728
15729 (define-public python2-pkginfo
15730 (package-with-python2 python-pkginfo))
15731
15732 (define-public python-twine
15733 (package
15734 (name "python-twine")
15735 (version "1.9.1")
15736 (source
15737 (origin
15738 (method url-fetch)
15739 (uri (pypi-uri "twine" version))
15740 (sha256
15741 (base32
15742 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15743 (build-system python-build-system)
15744 (propagated-inputs
15745 `(("python-tqdm" ,python-tqdm)
15746 ("python-pkginfo" ,python-pkginfo)
15747 ("python-requests" ,python-requests)
15748 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15749 (home-page "https://github.com/pypa/twine")
15750 (synopsis "Collection of utilities for interacting with PyPI")
15751 (description
15752 "@code{twine} currently supports registering projects and uploading
15753 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15754 their files and supports any packaging format (including wheels).")
15755 (license license:asl2.0)))
15756
15757 (define-public python2-twine
15758 (package-with-python2 python-twine))
15759
15760 (define-public python-linecache2
15761 (package
15762 (name "python-linecache2")
15763 (version "1.0.0")
15764 (source
15765 (origin
15766 (method url-fetch)
15767 (uri (pypi-uri "linecache2" version))
15768 (sha256
15769 (base32
15770 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15771 (build-system python-build-system)
15772 (arguments
15773 `(;; The tests depend on unittest2, and our version is a bit too old.
15774 #:tests? #f))
15775 (native-inputs
15776 `(("python-pbr" ,python-pbr-minimal)))
15777 (home-page
15778 "https://github.com/testing-cabal/linecache2")
15779 (synopsis "Backports of the linecache module")
15780 (description
15781 "The linecache module allows one to get any line from any file, while
15782 attempting to optimize internally, using a cache, the common case where many
15783 lines are read from a single file.")
15784 (license license:psfl)))
15785
15786 (define-public python2-linecache2
15787 (package-with-python2 python-linecache2))
15788
15789 (define-public python-traceback2
15790 (package
15791 (name "python-traceback2")
15792 (version "1.4.0")
15793 (source
15794 (origin
15795 (method url-fetch)
15796 (uri (pypi-uri "traceback2" version))
15797 (sha256
15798 (base32
15799 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15800 (build-system python-build-system)
15801 (arguments
15802 `(;; python-traceback2 and python-unittest2 depend on one another.
15803 #:tests? #f))
15804 (native-inputs
15805 `(("python-pbr" ,python-pbr-minimal)))
15806 (propagated-inputs
15807 `(("python-linecache2" ,python-linecache2)))
15808 (home-page
15809 "https://github.com/testing-cabal/traceback2")
15810 (synopsis "Backports of the traceback module")
15811 (description
15812 "This module provides a standard interface to extract, format and print
15813 stack traces of Python programs. It exactly mimics the behavior of the Python
15814 interpreter when it prints a stack trace.")
15815 (license license:psfl)))
15816
15817 (define-public python2-traceback2
15818 (package-with-python2 python-traceback2))
15819
15820 (define-public python-ratelimiter
15821 (package
15822 (name "python-ratelimiter")
15823 (version "1.2.0")
15824 (source
15825 (origin
15826 (method url-fetch)
15827 (uri (pypi-uri "ratelimiter" version))
15828 (sha256
15829 (base32
15830 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15831 (build-system python-build-system)
15832 (arguments
15833 '(#:tests? #f)) ; There are no tests in the pypi archive.
15834 (home-page "https://github.com/RazerM/ratelimiter")
15835 (synopsis "Simple rate limiting object")
15836 (description
15837 "The @code{ratelimiter} module ensures that an operation will not be
15838 executed more than a given number of times during a given period.")
15839 (license license:asl2.0)))
15840
15841 (define-public python2-ratelimiter
15842 (package-with-python2 python-ratelimiter))
15843
15844 (define-public python-dukpy
15845 (package
15846 (name "python-dukpy")
15847 (version "0.3")
15848 (source
15849 (origin
15850 (method git-fetch)
15851 (uri (git-reference
15852 (url "https://github.com/kovidgoyal/dukpy")
15853 (commit (string-append "v" version))))
15854 (file-name (git-file-name name version))
15855 (sha256
15856 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15857 (build-system python-build-system)
15858 (home-page "https://github.com/kovidgoyal/dukpy")
15859 (synopsis "Run JavaScript in python")
15860 (description
15861 "dukpy is a JavaScript runtime environment for Python using the duktape
15862 embeddable JavaScript engine.")
15863 ;; Dukpy is licensed under MIT like the embedded duktape library,
15864 ;; with 'errors.c' as GPL3.
15865 (license (list license:expat license:gpl3))))
15866
15867 (define-public python2-dukpy
15868 (package-with-python2 python-dukpy))
15869
15870 (define-public python-jsonrpclib-pelix
15871 (package
15872 (name "python-jsonrpclib-pelix")
15873 (version "0.3.2")
15874 (source
15875 (origin
15876 (method url-fetch)
15877 (uri (pypi-uri "jsonrpclib-pelix" version))
15878 (sha256
15879 (base32
15880 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15881 (build-system python-build-system)
15882 (arguments
15883 `(#:tests? #f)) ; no tests in PyPI tarball
15884 (home-page "https://github.com/tcalmant/jsonrpclib/")
15885 (synopsis "JSON-RPC 2.0 client library for Python")
15886 (description
15887 "This library implements the JSON-RPC v2.0
15888 specification (backwards-compatible) as a client library for Python. This
15889 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15890 services.")
15891 (license license:asl2.0)))
15892
15893 (define-public python2-jsonrpclib-pelix
15894 (package-with-python2 python-jsonrpclib-pelix))
15895
15896 (define-public python-setuptools-scm-git-archive
15897 (package
15898 (name "python-setuptools-scm-git-archive")
15899 (version "1.0")
15900 (source
15901 (origin
15902 (method url-fetch)
15903 (uri (pypi-uri "setuptools_scm_git_archive" version))
15904 (sha256
15905 (base32
15906 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15907 (build-system python-build-system)
15908 (native-inputs
15909 `(("python-pytest" ,python-pytest)))
15910 (propagated-inputs
15911 `(("python-setuptools-scm" ,python-setuptools-scm)))
15912 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15913 (synopsis "Setuptools_scm plugin for git archives")
15914 (description
15915 "The setuptools_scm_git_archive package is a plugin to
15916 setuptools_scm, which supports obtaining versions from git archives that
15917 belong to tagged versions.")
15918 (license license:expat)))
15919
15920 (define-public python2-setuptools-scm-git-archive
15921 (package-with-python2 python-setuptools-scm-git-archive))
15922
15923 (define-public python-setuptools-git
15924 (package
15925 (name "python-setuptools-git")
15926 (version "1.2")
15927 (source
15928 (origin
15929 (method url-fetch)
15930 (uri (pypi-uri "setuptools-git" version))
15931 (sha256
15932 (base32
15933 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15934 (build-system python-build-system)
15935 (arguments
15936 `(#:phases
15937 (modify-phases %standard-phases
15938 ;; This is needed for tests.
15939 (add-after 'unpack 'configure-git
15940 (lambda _
15941 (setenv "HOME" "/tmp")
15942 (invoke "git" "config" "--global" "user.email" "guix")
15943 (invoke "git" "config" "--global" "user.name" "guix")
15944 #t)))))
15945 (native-inputs
15946 `(("git" ,git-minimal)))
15947 (home-page "https://github.com/msabramo/setuptools-git")
15948 (synopsis "Setuptools revision control system plugin for Git")
15949 (description
15950 "This package provides a plugin for Setuptools for revision control with
15951 Git.")
15952 (license license:bsd-3)))
15953
15954 (define-public python-pyclipper
15955 (package
15956 (name "python-pyclipper")
15957 (version "1.1.0.post3")
15958 (source
15959 (origin
15960 (method url-fetch)
15961 (uri (pypi-uri "pyclipper" version ".zip"))
15962 (sha256
15963 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15964 (modules '((guix build utils)))
15965 (snippet
15966 '(begin
15967 ;; This file is generated by Cython.
15968 (delete-file "pyclipper/pyclipper.cpp") #t))))
15969 (build-system python-build-system)
15970 (arguments
15971 `(#:phases
15972 (modify-phases %standard-phases
15973 (add-before 'build 'cythonize-sources
15974 (lambda _
15975 (with-directory-excursion "pyclipper"
15976 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15977 (propagated-inputs
15978 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15979 (native-inputs
15980 `(("python-cython" ,python-cython)
15981 ("python-pytest" ,python-pytest)
15982 ("python-pytest-runner" ,python-pytest-runner)
15983 ("python-unittest2" ,python-unittest2)
15984 ("unzip" ,unzip)))
15985 (home-page "https://github.com/greginvm/pyclipper")
15986 (synopsis "Wrapper for Angus Johnson's Clipper library")
15987 (description
15988 "Pyclipper is a Cython wrapper for the C++ translation of the
15989 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15990 (license license:expat)))
15991
15992 (define-public python2-pyclipper
15993 (package-with-python2 python-pyclipper))
15994
15995 (define-public python2-booleanoperations
15996 (package
15997 (name "python2-booleanoperations")
15998 (version "0.7.1")
15999 (source
16000 (origin
16001 (method url-fetch)
16002 (uri (pypi-uri "booleanOperations" version ".zip"))
16003 (sha256
16004 (base32
16005 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
16006 (build-system python-build-system)
16007 (arguments
16008 `(#:python ,python-2))
16009 (native-inputs
16010 `(("unzip" ,unzip)
16011 ("python2-pytest" ,python2-pytest)
16012 ("python2-pytest-runner" ,python2-pytest-runner)))
16013 (propagated-inputs
16014 `(("python-fonttools" ,python2-fonttools)
16015 ("python-pyclipper" ,python2-pyclipper)
16016 ("python-ufolib" ,python2-ufolib)))
16017 (home-page "https://github.com/typemytype/booleanOperations")
16018 (synopsis "Boolean operations on paths")
16019 (description
16020 "BooleanOperations provides a Python library that enables
16021 boolean operations on paths.")
16022 (license license:expat)))
16023
16024 (define-public python-tempdir
16025 (package
16026 (name "python-tempdir")
16027 (version "0.7.1")
16028 (source
16029 (origin
16030 (method url-fetch)
16031 (uri (pypi-uri "tempdir" version))
16032 (sha256
16033 (base32
16034 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
16035 (build-system python-build-system)
16036 (home-page "https://pypi.org/project/tempdir/")
16037 (arguments
16038 ;; the package has no tests
16039 '(#:tests? #f))
16040 (synopsis "Python library for managing temporary directories")
16041 (description
16042 "This library manages temporary directories that are automatically
16043 deleted with all their contents when they are no longer needed. It is
16044 particularly convenient for use in tests.")
16045 (license license:expat)))
16046
16047 (define-public python2-tempdir
16048 (package-with-python2 python-tempdir))
16049
16050 (define-public python-activepapers
16051 (package
16052 (name "python-activepapers")
16053 (version "0.2.2")
16054 (source
16055 (origin
16056 (method url-fetch)
16057 (uri (pypi-uri "ActivePapers.Py" version))
16058 (sha256
16059 (base32
16060 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
16061 (build-system python-build-system)
16062 (arguments
16063 `(#:modules ((ice-9 ftw)
16064 (srfi srfi-1)
16065 (guix build utils)
16066 (guix build python-build-system))
16067
16068 #:phases
16069 (modify-phases %standard-phases
16070 (add-after 'unpack 'delete-python2-code
16071 (lambda _
16072 (for-each delete-file
16073 '("lib/activepapers/builtins2.py"
16074 "lib/activepapers/standardlib2.py"
16075 "lib/activepapers/utility2.py"))))
16076 (replace 'check
16077 (lambda _
16078 ;; Deactivate the test cases that download files
16079 (setenv "NO_NETWORK_ACCESS" "1")
16080 ;; For some strange reason, some tests fail if nosetests runs all
16081 ;; test modules in a single execution. They pass if each test
16082 ;; module is run individually.
16083 (for-each (lambda (filename)
16084 (invoke "nosetests"
16085 (string-append "tests/" filename)))
16086 (scandir "tests"
16087 (lambda (filename)
16088 (string-suffix? ".py" filename)))))))))
16089 (native-inputs
16090 `(("python-tempdir" ,python-tempdir)
16091 ("python-nose" ,python-nose)))
16092 (propagated-inputs
16093 `(("python-h5py" ,python-h5py)))
16094 (home-page "https://www.activepapers.org/")
16095 (synopsis "Executable papers for scientific computing")
16096 (description
16097 "ActivePapers is a tool for working with executable papers, which
16098 combine data, code, and documentation in single-file packages,
16099 suitable for publication as supplementary material or on repositories
16100 such as figshare or Zenodo.")
16101 (properties `((python2-variant . ,(delay python2-activepapers))))
16102 (license license:bsd-3)))
16103
16104 (define-public python2-activepapers
16105 (let ((base (package-with-python2
16106 (strip-python2-variant python-activepapers))))
16107 (package
16108 (inherit base)
16109 (arguments
16110 (substitute-keyword-arguments (package-arguments base)
16111 ((#:phases phases)
16112 `(modify-phases ,phases
16113 (delete 'delete-python2-code)
16114 (add-after 'unpack 'delete-python3-code
16115 (lambda _
16116 (for-each delete-file
16117 '("lib/activepapers/builtins3.py"
16118 "lib/activepapers/standardlib3.py"
16119 "lib/activepapers/utility3.py")))))))))))
16120
16121 (define-public python-semver
16122 (package
16123 (name "python-semver")
16124 (version "2.9.0")
16125 (source
16126 (origin
16127 (method url-fetch)
16128 (uri (pypi-uri "semver" version))
16129 (sha256
16130 (base32
16131 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
16132 (build-system python-build-system)
16133 (native-inputs
16134 `(("python-appdirs" ,python-appdirs)
16135 ("python-distlib" ,python-distlib)
16136 ("python-importlib-metadata" ,python-importlib-metadata)
16137 ("python-filelock" ,python-filelock)
16138 ("python-six" ,python-six)
16139 ("python-tox" ,python-tox)
16140 ("python-virtualenv" ,python-virtualenv)))
16141 (home-page "https://github.com/k-bx/python-semver")
16142 (synopsis "Python helper for Semantic Versioning")
16143 (description "This package provides a Python library for
16144 @url{Semantic Versioning, http://semver.org/}.")
16145 (license license:bsd-3)))
16146
16147 (define-public python2-semver
16148 (package-with-python2 python-semver))
16149
16150 (define-public python-pyro4
16151 (package
16152 (name "python-pyro4")
16153 (version "4.77")
16154 (source
16155 (origin
16156 (method url-fetch)
16157 (uri (pypi-uri "Pyro4" version))
16158 (sha256
16159 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
16160 (build-system python-build-system)
16161 (arguments
16162 '(#:tests? #f)) ;FIXME: Some tests require network access.
16163 (native-inputs
16164 `(("python-cloudpickle" ,python-cloudpickle)
16165 ("python-dill" ,python-dill)
16166 ("python-msgpack" ,python-msgpack)))
16167 (propagated-inputs
16168 `(("python-serpent" ,python-serpent)))
16169 (home-page "https://pyro4.readthedocs.io")
16170 (synopsis "Distributed object middleware for Python")
16171 (description
16172 "Pyro enables you to build applications in which objects can talk to each
16173 other over the network. You can just use normal Python method calls to call
16174 objects on other machines, also known as remote procedure calls (RPC).")
16175 (license license:expat)))
16176
16177 (define-public python2-pyro
16178 (package
16179 (name "python2-pyro")
16180 (version "3.16")
16181 (source
16182 (origin
16183 (method url-fetch)
16184 (uri (pypi-uri "Pyro" version))
16185 (file-name (string-append "Pyro-" version ".tar.gz"))
16186 (sha256
16187 (base32
16188 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
16189 (build-system python-build-system)
16190 (arguments
16191 ;; Pyro is not compatible with Python 3
16192 `(#:python ,python-2
16193 ;; Pyro has no test cases for automatic execution
16194 #:tests? #f))
16195 (home-page "https://pythonhosted.org/Pyro/")
16196 (synopsis "Distributed object manager for Python")
16197 (description "Pyro is a Distributed Object Technology system
16198 written in Python that is designed to be easy to use. It resembles
16199 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
16200 which is a system and language independent Distributed Object Technology
16201 and has much more to offer than Pyro or RMI. Pyro 3.x is no
16202 longer maintained. New projects should use Pyro4 instead, which
16203 is the new Pyro version that is actively developed.")
16204 (license license:expat)))
16205
16206 (define-public python2-scientific
16207 (package
16208 (name "python2-scientific")
16209 (version "2.9.4")
16210 (source
16211 (origin
16212 (method git-fetch)
16213 (uri (git-reference
16214 (url "https://github.com/khinsen/ScientificPython")
16215 (commit (string-append "rel" version))))
16216 (file-name (git-file-name name version))
16217 (sha256
16218 (base32
16219 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
16220 (build-system python-build-system)
16221 (inputs
16222 `(("netcdf" ,netcdf)))
16223 (propagated-inputs
16224 `(("python-numpy" ,python2-numpy-1.8)
16225 ("python-pyro" ,python2-pyro)))
16226 (arguments
16227 ;; ScientificPython is not compatible with Python 3
16228 `(#:python ,python-2
16229 #:tests? #f ; No test suite
16230 #:phases
16231 (modify-phases %standard-phases
16232 (replace 'build
16233 (lambda* (#:key inputs #:allow-other-keys)
16234 (invoke "python" "setup.py" "build"
16235 (string-append "--netcdf_prefix="
16236 (assoc-ref inputs "netcdf"))))))))
16237 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
16238 (synopsis "Python modules for scientific computing")
16239 (description "ScientificPython is a collection of Python modules that are
16240 useful for scientific computing. Most modules are rather general (Geometry,
16241 physical units, automatic derivatives, ...) whereas others are more
16242 domain-specific (e.g. netCDF and PDB support). The library is currently
16243 not actively maintained and works only with Python 2 and NumPy < 1.9.")
16244 (license license:cecill-c)))
16245
16246 (define-public python2-mmtk
16247 (package
16248 (name "python2-mmtk")
16249 (version "2.7.12")
16250 (source
16251 (origin
16252 (method git-fetch)
16253 (uri (git-reference
16254 (url "https://github.com/khinsen/MMTK")
16255 (commit (string-append "rel" version))))
16256 (file-name (git-file-name name version))
16257 (sha256
16258 (base32
16259 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
16260 (build-system python-build-system)
16261 (native-inputs
16262 `(("netcdf" ,netcdf)))
16263 (propagated-inputs
16264 `(("python-scientific" ,python2-scientific)
16265 ("python-tkinter" ,python-2 "tk")))
16266 (arguments
16267 `(#:python ,python-2
16268 #:tests? #f
16269 #:phases
16270 (modify-phases %standard-phases
16271 (add-before 'build 'includes-from-scientific
16272 (lambda* (#:key inputs #:allow-other-keys)
16273 (mkdir-p "Include/Scientific")
16274 (copy-recursively
16275 (string-append
16276 (assoc-ref inputs "python-scientific")
16277 "/include/python2.7/Scientific")
16278 "Include/Scientific"))))))
16279 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
16280 (synopsis "Python library for molecular simulation")
16281 (description "MMTK is a library for molecular simulations with an emphasis
16282 on biomolecules. It provides widely used methods such as Molecular Dynamics
16283 and normal mode analysis, but also basic routines for implementing new methods
16284 for simulation and analysis. The library is currently not actively maintained
16285 and works only with Python 2 and NumPy < 1.9.")
16286 (license license:cecill-c)))
16287
16288 (define-public python-phonenumbers
16289 (package
16290 (name "python-phonenumbers")
16291 (version "8.9.1")
16292 (source
16293 (origin
16294 (method url-fetch)
16295 (uri (pypi-uri "phonenumbers" version))
16296 (sha256
16297 (base32
16298 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
16299 (build-system python-build-system)
16300 (home-page
16301 "https://github.com/daviddrysdale/python-phonenumbers")
16302 (synopsis
16303 "Python library for dealing with international phone numbers")
16304 (description
16305 "This package provides a Python port of Google's libphonenumber library.")
16306 (license license:asl2.0)))
16307
16308 (define-public python2-phonenumbers
16309 (package-with-python2 python-phonenumbers))
16310
16311 (define-public python-send2trash
16312 (package
16313 (name "python-send2trash")
16314 (version "1.5.0")
16315 (source
16316 (origin (method git-fetch)
16317 ;; Source tarball on PyPI doesn't include tests.
16318 (uri (git-reference
16319 (url "https://github.com/hsoft/send2trash")
16320 (commit version)))
16321 (file-name (git-file-name name version))
16322 (sha256
16323 (base32
16324 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
16325 (build-system python-build-system)
16326 (arguments
16327 '(#:phases
16328 (modify-phases %standard-phases
16329 (add-before 'check 'pre-check
16330 (lambda _
16331 (mkdir-p "/tmp/foo")
16332 (setenv "HOME" "/tmp/foo")
16333 #t)))))
16334 (home-page "https://github.com/hsoft/send2trash")
16335 (synopsis "Send files to the user's @file{~/Trash} directory")
16336 (description "This package provides a Python library to send files to the
16337 user's @file{~/Trash} directory.")
16338 (properties `((python2-variant . ,(delay python2-send2trash))))
16339 (license license:bsd-3)))
16340
16341 (define-public python2-send2trash
16342 (package
16343 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
16344 (arguments
16345 (substitute-keyword-arguments (package-arguments python-send2trash)
16346 ((#:phases phases)
16347 `(modify-phases ,phases
16348 (add-before 'check 'setenv
16349 (lambda _
16350 (setenv "PYTHONPATH"
16351 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
16352 #t))))))))
16353
16354 (define-public python-yapf
16355 (package
16356 (name "python-yapf")
16357 (version "0.29.0")
16358 (source
16359 (origin
16360 (method url-fetch)
16361 (uri (pypi-uri "yapf" version))
16362 (sha256
16363 (base32
16364 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
16365 (build-system python-build-system)
16366 (home-page "https://github.com/google/yapf")
16367 (synopsis "Formatter for Python code")
16368 (description "YAPF is a formatter for Python code. It's based off of
16369 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
16370 takes the code and reformats it to the best formatting that conforms to the
16371 style guide, even if the original code didn't violate the style guide.")
16372 (license license:asl2.0)))
16373
16374 (define-public python2-yapf
16375 (package-with-python2 python-yapf))
16376
16377 (define-public python-gyp
16378 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16379 (revision "0"))
16380 (package
16381 (name "python-gyp")
16382 ;; Google does not release versions,
16383 ;; based on second most recent commit date.
16384 (version (git-version "0.0.0" revision commit))
16385 (source
16386 (origin
16387 ;; Google does not release tarballs,
16388 ;; git checkout is needed.
16389 (method git-fetch)
16390 (uri (git-reference
16391 (url "https://chromium.googlesource.com/external/gyp")
16392 (commit commit)))
16393 (file-name (git-file-name name version))
16394 (sha256
16395 (base32
16396 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
16397 (build-system python-build-system)
16398 (home-page "https://gyp.gsrc.io/")
16399 (synopsis "GYP is a Meta-Build system")
16400 (description
16401 "GYP builds build systems for large, cross platform applications.
16402 It can be used to generate XCode projects, Visual Studio projects, Ninja build
16403 files, and Makefiles.")
16404 (license license:bsd-3))))
16405
16406 (define-public python2-gyp
16407 (package-with-python2 python-gyp))
16408
16409 (define-public python-whatever
16410 (package
16411 (name "python-whatever")
16412 (version "0.6")
16413 (source
16414 (origin
16415 (method git-fetch)
16416 (uri (git-reference
16417 (url "https://github.com/Suor/whatever")
16418 (commit version)))
16419 (file-name (git-file-name name version))
16420 (sha256
16421 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16422 (build-system python-build-system)
16423 (arguments
16424 `(#:phases
16425 (modify-phases %standard-phases
16426 (replace 'check
16427 (lambda _
16428 (invoke "py.test"))))))
16429 (native-inputs
16430 `(("python-pytest" ,python-pytest)))
16431 (home-page "https://github.com/Suor/whatever")
16432 (synopsis "Make anonymous functions by partial application of operators")
16433 (description "@code{whatever} provides an easy way to make anonymous
16434 functions by partial application of operators.")
16435 (license license:bsd-3)))
16436
16437 (define-public python2-whatever
16438 (package-with-python2 python-whatever))
16439
16440 (define-public python-funcy
16441 (package
16442 (name "python-funcy")
16443 (version "1.11")
16444 (source
16445 (origin
16446 (method git-fetch)
16447 (uri (git-reference
16448 (url "https://github.com/Suor/funcy")
16449 (commit version)))
16450 (sha256
16451 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16452 (file-name (git-file-name name version))))
16453 (build-system python-build-system)
16454 (arguments
16455 `(#:phases
16456 (modify-phases %standard-phases
16457 (replace 'check
16458 (lambda _
16459 (invoke "py.test"))))))
16460 (native-inputs
16461 `(("python-pytest" ,python-pytest)
16462 ("python-whatever" ,python-whatever)))
16463 (home-page "https://github.com/Suor/funcy")
16464 (synopsis "Functional tools")
16465 (description "@code{funcy} is a library that provides functional tools.
16466 Examples are:
16467 @enumerate
16468 @item merge - Merges collections of the same type
16469 @item walk - Type-preserving map
16470 @item select - Selects a part of a collection
16471 @item take - Takes the first n items of a collection
16472 @item first - Takes the first item of a collection
16473 @item remove - Predicated-removes items of a collection
16474 @item concat - Concatenates two collections
16475 @item flatten - Flattens a collection with subcollections
16476 @item distinct - Returns only distinct items
16477 @item split - Predicated-splits a collection
16478 @item split_at - Splits a collection at a given item
16479 @item group_by - Groups items by group
16480 @item pairwise - Pairs off adjacent items
16481 @item partial - Partially-applies a function
16482 @item curry - Curries a function
16483 @item compose - Composes functions
16484 @item complement - Complements a predicate
16485 @item all_fn - \"all\" with predicate
16486 @end enumerate")
16487 (license license:bsd-3)))
16488
16489 (define-public python2-funcy
16490 (package-with-python2 python-funcy))
16491
16492 (define-public python-isoweek
16493 (package
16494 (name "python-isoweek")
16495 (version "1.3.3")
16496 (source
16497 (origin
16498 (method url-fetch)
16499 (uri (pypi-uri "isoweek" version))
16500 (sha256
16501 (base32
16502 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16503 (build-system python-build-system)
16504 (home-page "https://github.com/gisle/isoweek")
16505 (synopsis "Objects representing a week")
16506 (description "The @code{isoweek} module provide the class Week that
16507 implements the week definition of ISO 8601. This standard also defines
16508 a notation for identifying weeks; yyyyWww (where the W is a literal).
16509 Week instances stringify to this form.")
16510 (license license:bsd-3)))
16511
16512 (define-public python2-isoweek
16513 (package-with-python2 python-isoweek))
16514
16515 (define-public python-tokenize-rt
16516 (package
16517 (name "python-tokenize-rt")
16518 (version "2.0.1")
16519 (source
16520 (origin
16521 (method url-fetch)
16522 (uri (pypi-uri "tokenize-rt" version))
16523 (sha256
16524 (base32
16525 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16526 (build-system python-build-system)
16527 (home-page "https://github.com/asottile/tokenize-rt")
16528 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16529 (description
16530 "This Python library is a wrapper around @code{tokenize} from the Python
16531 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16532 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16533 and @code{tokens_to_src} to roundtrip.")
16534 (license license:expat)))
16535
16536 (define-public python-future-fstrings
16537 (package
16538 (name "python-future-fstrings")
16539 (version "0.4.1")
16540 (source
16541 (origin
16542 (method url-fetch)
16543 (uri (pypi-uri "future_fstrings" version))
16544 (sha256
16545 (base32
16546 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16547 (build-system python-build-system)
16548 (propagated-inputs
16549 `(("python-tokenize-rt" ,python-tokenize-rt)))
16550 (home-page "https://github.com/asottile/future-fstrings")
16551 (synopsis "Backport of fstrings to Python < 3.6")
16552 (description
16553 "This package provides a UTF-8 compatible encoding
16554 @code{future_fstrings}, which performs source manipulation. It decodes the
16555 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16556 @code{f} strings.")
16557 (license license:expat)))
16558
16559 (define-public python-typed-ast
16560 (package
16561 (name "python-typed-ast")
16562 (version "1.4.0")
16563 (source
16564 (origin
16565 (method git-fetch)
16566 (uri (git-reference
16567 (url "https://github.com/python/typed_ast")
16568 (commit version)))
16569 (sha256
16570 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16571 (file-name (git-file-name name version))))
16572 (build-system python-build-system)
16573 (arguments
16574 `(#:modules ((guix build utils)
16575 (guix build python-build-system)
16576 (ice-9 ftw)
16577 (srfi srfi-1)
16578 (srfi srfi-26))
16579 #:phases
16580 (modify-phases %standard-phases
16581 (replace 'check
16582 (lambda _
16583 (let ((cwd (getcwd)))
16584 (setenv "PYTHONPATH"
16585 (string-append cwd "/build/"
16586 (find (cut string-prefix? "lib" <>)
16587 (scandir (string-append cwd "/build")))
16588 ":"
16589 (getenv "PYTHONPATH"))))
16590 (invoke "pytest")
16591 #t)))))
16592 (native-inputs `(("python-pytest" ,python-pytest)))
16593 (home-page "https://github.com/python/typed_ast")
16594 (synopsis "Fork of Python @code{ast} modules with type comment support")
16595 (description "This package provides a parser similar to the standard
16596 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16597 include PEP 484 type comments and are independent of the version of Python
16598 under which they are run. The @code{typed_ast} parsers produce the standard
16599 Python AST (plus type comments), and are both fast and correct, as they are
16600 based on the CPython 2.7 and 3.7 parsers.")
16601 ;; See the file "LICENSE" for the details.
16602 (license (list license:psfl
16603 license:asl2.0
16604 license:expat)))) ;ast27/Parser/spark.py
16605
16606 (define-public python-typing
16607 (package
16608 (name "python-typing")
16609 (version "3.7.4.1")
16610 (source
16611 (origin
16612 (method url-fetch)
16613 (uri (pypi-uri "typing" version))
16614 (sha256
16615 (base32
16616 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16617 (build-system python-build-system)
16618 (home-page "https://docs.python.org/3/library/typing.html")
16619 (synopsis "Type hints for Python")
16620 (description "This is a backport of the standard library @code{typing}
16621 module to Python versions older than 3.5. Typing defines a standard notation
16622 for Python function and variable type annotations. The notation can be used
16623 for documenting code in a concise, standard format, and it has been designed
16624 to also be used by static and runtime type checkers, static analyzers, IDEs
16625 and other tools.")
16626 (license license:psfl)))
16627
16628 (define-public python2-typing
16629 (package-with-python2 python-typing))
16630
16631 (define-public python-typing-extensions
16632 (package
16633 (name "python-typing-extensions")
16634 (version "3.7.4.1")
16635 (source
16636 (origin
16637 (method url-fetch)
16638 (uri (pypi-uri "typing_extensions" version))
16639 (sha256
16640 (base32
16641 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16642 (build-system python-build-system)
16643 (home-page
16644 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16645 (synopsis "Experimental type hints for Python")
16646 (description
16647 "The typing_extensions module contains additional @code{typing} hints not
16648 yet present in the of the @code{typing} standard library.
16649 Included are implementations of:
16650 @enumerate
16651 @item ClassVar
16652 @item ContextManager
16653 @item Counter
16654 @item DefaultDict
16655 @item Deque
16656 @item NewType
16657 @item NoReturn
16658 @item overload
16659 @item Protocol
16660 @item runtime
16661 @item Text
16662 @item Type
16663 @item TYPE_CHECKING
16664 @item AsyncGenerator
16665 @end enumerate\n")
16666 (license license:psfl)))
16667
16668 (define-public bpython
16669 (package
16670 (name "bpython")
16671 (version "0.18")
16672 (source
16673 (origin
16674 (method url-fetch)
16675 (uri (pypi-uri "bpython" version))
16676 (sha256
16677 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16678 (build-system python-build-system)
16679 (arguments
16680 `(#:phases
16681 (modify-phases %standard-phases
16682 (add-after 'unpack 'remove-failing-test
16683 (lambda _
16684 ;; Remove failing test. FIXME: make it pass
16685 (delete-file "bpython/test/test_args.py")
16686 #t))
16687 (add-after 'wrap 'add-aliases
16688 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16689 (lambda* (#:key outputs #:allow-other-keys)
16690 (let ((out (assoc-ref outputs "out")))
16691 (for-each
16692 (lambda (old new)
16693 (symlink old (string-append out "/bin/" new)))
16694 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16695 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16696 #t)))))
16697 (propagated-inputs
16698 `(("python-pygments" ,python-pygments)
16699 ("python-requests" ,python-requests)
16700 ("python-babel" ,python-babel) ; optional, for internationalization
16701 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16702 ("python-greenlet" ,python-greenlet)
16703 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16704 ("python-six" ,python-six)))
16705 (native-inputs
16706 `(("python-sphinx" ,python-sphinx)
16707 ("python-mock" ,python-mock)))
16708 (home-page "https://bpython-interpreter.org/")
16709 (synopsis "Fancy interface to the Python interpreter")
16710 (description "Bpython is a fancy interface to the Python
16711 interpreter. bpython's main features are
16712
16713 @enumerate
16714 @item in-line syntax highlighting,
16715 @item readline-like autocomplete with suggestions displayed as you type,
16716 @item expected parameter list for any Python function,
16717 @item \"rewind\" function to pop the last line of code from memory and
16718 re-evaluate,
16719 @item send the code you've entered off to a pastebin,
16720 @item save the code you've entered to a file, and
16721 @item auto-indentation.
16722 @end enumerate")
16723 (license license:expat)))
16724
16725 (define-public bpython2
16726 (let ((base (package-with-python2
16727 (strip-python2-variant bpython))))
16728 (package (inherit base)
16729 (name "bpython2")
16730 (arguments
16731 `(#:python ,python-2
16732 #:phases
16733 (modify-phases %standard-phases
16734 (add-after 'unpack 'remove-failing-test
16735 (lambda _
16736 ;; Remove failing test. FIXME: make it pass
16737 (delete-file "bpython/test/test_args.py")
16738 ;; Disable failing test-cases (renaming inhibits they are
16739 ;; discovered)
16740 (substitute* "bpython/test/test_curtsies_repl.py"
16741 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16742 (string-append a "xxx_off_" b))
16743 (("^(\\s*def )(test_complex\\W)" _ a b)
16744 (string-append a "xxx_off_" b)))
16745 #t))
16746 (add-before 'build 'rename-scripts
16747 ;; rename the scripts to bypthon2, bpdb2, etc.
16748 (lambda _
16749 (substitute* "setup.py"
16750 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16751 (string-append name "2" rest "\n"))
16752 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16753 (string-append name "2" (or sub "") rest "\n")))
16754 #t))))))))
16755
16756 (define-public python-pyinotify
16757 (package
16758 (name "python-pyinotify")
16759 (version "0.9.6")
16760 (source (origin
16761 (method url-fetch)
16762 (uri (pypi-uri "pyinotify" version))
16763 (sha256
16764 (base32
16765 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16766 (build-system python-build-system)
16767 (arguments `(#:tests? #f)) ;no tests
16768 (home-page "https://github.com/seb-m/pyinotify")
16769 (synopsis "Python library for monitoring inotify events")
16770 (description
16771 "@code{pyinotify} provides a Python interface for monitoring
16772 file system events on Linux.")
16773 (license license:expat)))
16774
16775 (define-public python2-pyinotify
16776 (package-with-python2 python-pyinotify))
16777
16778 ;; Ada parser uses this version.
16779 (define-public python2-quex-0.67.3
16780 (package
16781 (name "python2-quex")
16782 (version "0.67.3")
16783 (source
16784 (origin
16785 (method url-fetch)
16786 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16787 (version-major+minor version)
16788 "/quex-" version ".zip"))
16789 (sha256
16790 (base32
16791 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16792 (build-system python-build-system)
16793 (native-inputs
16794 `(("unzip" ,unzip)))
16795 (arguments
16796 `(#:python ,python-2
16797 #:tests? #f
16798 #:phases
16799 (modify-phases %standard-phases
16800 (delete 'configure)
16801 (delete 'build)
16802 (replace 'install
16803 (lambda* (#:key outputs #:allow-other-keys)
16804 (let* ((out (assoc-ref outputs "out"))
16805 (share/quex (string-append out "/share/quex"))
16806 (bin (string-append out "/bin")))
16807 (copy-recursively "." share/quex)
16808 (mkdir-p bin)
16809 (symlink (string-append share/quex "/quex-exe.py")
16810 (string-append bin "/quex"))
16811 #t))))))
16812 (native-search-paths
16813 (list (search-path-specification
16814 (variable "QUEX_PATH")
16815 (files '("share/quex")))))
16816 (home-page "http://quex.sourceforge.net/")
16817 (synopsis "Lexical analyzer generator in Python")
16818 (description "@code{quex} is a lexical analyzer generator in Python.")
16819 (license license:lgpl2.1+))) ; Non-military
16820
16821 (define-public python2-quex
16822 (package (inherit python2-quex-0.67.3)
16823 (name "python2-quex")
16824 (version "0.68.1")
16825 (source
16826 (origin
16827 (method url-fetch)
16828 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16829 (sha256
16830 (base32
16831 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16832 (file-name (string-append name "-" version ".tar.gz"))))))
16833
16834 (define-public python-more-itertools
16835 (package
16836 (name "python-more-itertools")
16837 (version "8.2.0")
16838 (source
16839 (origin
16840 (method url-fetch)
16841 (uri (pypi-uri "more-itertools" version))
16842 (sha256
16843 (base32
16844 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16845 (build-system python-build-system)
16846 (home-page "https://github.com/erikrose/more-itertools")
16847 (synopsis "More routines for operating on iterables, beyond itertools")
16848 (description "Python's built-in @code{itertools} module implements a
16849 number of iterator building blocks inspired by constructs from APL, Haskell,
16850 and SML. @code{more-itertools} includes additional building blocks for
16851 working with iterables.")
16852 (properties `((python2-variant . ,(delay python2-more-itertools))))
16853 (license license:expat)))
16854
16855 ;; The 5.x series are the last versions supporting Python 2.7.
16856 (define-public python2-more-itertools
16857 (package
16858 (inherit python-more-itertools)
16859 (name "python2-more-itertools")
16860 (version "5.0.0")
16861 (source (origin
16862 (method url-fetch)
16863 (uri (pypi-uri "more-itertools" version))
16864 (sha256
16865 (base32
16866 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16867 (arguments
16868 `(#:python ,python-2))
16869 (propagated-inputs
16870 `(("python2-six" ,python2-six-bootstrap)))))
16871
16872 (define-public python-latexcodec
16873 (package
16874 (name "python-latexcodec")
16875 (version "1.0.7")
16876 (source
16877 (origin
16878 (method url-fetch)
16879 (uri (pypi-uri "latexcodec" version))
16880 (sha256
16881 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16882 (build-system python-build-system)
16883 (inputs
16884 `(("python-six" ,python-six)))
16885 (home-page "https://readthedocs.org/projects/latexcodec/")
16886 (synopsis "Work with LaTeX code in Python")
16887 (description "Lexer and codec to work with LaTeX code in Python.")
16888 (license license:expat)))
16889
16890 (define-public python-pybtex
16891 (package
16892 (name "python-pybtex")
16893 (version "0.22.2")
16894 (source
16895 (origin
16896 (method url-fetch)
16897 (uri (pypi-uri "pybtex" version))
16898 (sha256
16899 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16900 (build-system python-build-system)
16901 (native-inputs
16902 `(("python-nose" ,python-nose)))
16903 (inputs
16904 `(("python-latexcodec" ,python-latexcodec)
16905 ("python-pyyaml" ,python-pyyaml)
16906 ("python-six" ,python-six)))
16907 (arguments
16908 `(#:test-target "nosetests"))
16909 (home-page "https://pybtex.org/")
16910 (synopsis "BibTeX-compatible bibliography processor")
16911 (description "Pybtex is a BibTeX-compatible bibliography processor written
16912 in Python. You can simply type pybtex instead of bibtex.")
16913 (license license:expat)))
16914
16915 (define-public python-onetimepass
16916 (package
16917 (name "python-onetimepass")
16918 (version "1.0.1")
16919 (source
16920 (origin
16921 (method url-fetch)
16922 (uri (pypi-uri "onetimepass" version))
16923 (sha256
16924 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16925 (build-system python-build-system)
16926 (propagated-inputs `(("python-six" ,python-six)))
16927 (home-page "https://github.com/tadeck/onetimepass/")
16928 (synopsis "One-time password library")
16929 (description "Python one-time password library for HMAC-based (HOTP) and
16930 time-based (TOTP) passwords.")
16931 (license license:expat)))
16932
16933 (define-public python-parso
16934 (package
16935 (name "python-parso")
16936 (version "0.7.0")
16937 (source
16938 (origin
16939 (method url-fetch)
16940 (uri (pypi-uri "parso" version))
16941 (sha256
16942 (base32
16943 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16944 (native-inputs
16945 `(("python-pytest" ,python-pytest)))
16946 (build-system python-build-system)
16947 (arguments
16948 `(#:phases (modify-phases %standard-phases
16949 (replace 'check
16950 (lambda _ (invoke "pytest" "-vv"))))))
16951 (home-page "https://github.com/davidhalter/parso")
16952 (synopsis "Python Parser")
16953 (description "Parso is a Python parser that supports error recovery and
16954 round-trip parsing for different Python versions (in multiple Python versions).
16955 Parso is also able to list multiple syntax errors in your Python file.")
16956 (license license:expat)))
16957
16958 (define-public python2-parso
16959 (package-with-python2 python-parso))
16960
16961 (define-public python-async-generator
16962 (package
16963 (name "python-async-generator")
16964 (version "1.10")
16965 (source
16966 (origin
16967 (method url-fetch)
16968 (uri (pypi-uri "async_generator" version))
16969 (sha256
16970 (base32
16971 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16972 (build-system python-build-system)
16973 (native-inputs
16974 `(("python-pytest" ,python-pytest)))
16975 (home-page "https://github.com/python-trio/async_generator")
16976 (synopsis "Async generators and context managers for Python 3.5+")
16977 (description "@code{async_generator} back-ports Python 3.6's native async
16978 generators and Python 3.7's context managers into Python 3.5.")
16979 ;; Dual licensed.
16980 (license (list license:expat license:asl2.0))))
16981
16982 (define-public python-async-timeout
16983 (package
16984 (name "python-async-timeout")
16985 (version "3.0.1")
16986 (source
16987 (origin
16988 (method url-fetch)
16989 (uri (pypi-uri "async-timeout" version))
16990 (sha256
16991 (base32
16992 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16993 (build-system python-build-system)
16994 (home-page "https://github.com/aio-libs/async_timeout/")
16995 (synopsis "Timeout context manager for asyncio programs")
16996 (description "@code{async-timeout} provides a timeout timeout context
16997 manager compatible with @code{asyncio}.")
16998 (license license:asl2.0)))
16999
17000 (define-public python-glob2
17001 (package
17002 (name "python-glob2")
17003 (version "0.7")
17004 (source
17005 (origin
17006 (method git-fetch)
17007 (uri (git-reference
17008 (url "https://github.com/miracle2k/python-glob2")
17009 (commit (string-append "v" version))))
17010 (file-name (git-file-name name version))
17011 (sha256
17012 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
17013 (build-system python-build-system)
17014 (home-page "https://github.com/miracle2k/python-glob2/")
17015 (synopsis "Extended Version of the python buildin glob module")
17016 (description "This is an extended version of the Python
17017 @url{http://docs.python.org/library/glob.html, built-in glob module} which
17018 adds:
17019
17020 @itemize
17021 @item The ability to capture the text matched by glob patterns, and return
17022 those matches alongside the file names.
17023 @item A recursive @code{**} globbing syntax, akin for example to the
17024 @code{globstar} option of Bash.
17025 @item The ability to replace the file system functions used, in order to glob
17026 on virtual file systems.
17027 @item Compatible with Python 2 and Python 3 (tested with 3.3).
17028 @end itemize
17029
17030 Glob2 currently based on the glob code from Python 3.3.1.")
17031 (license license:bsd-2)))
17032
17033 (define-public python2-glob2
17034 (package-with-python2 python-glob2))
17035
17036 (define-public python-gipc
17037 (package
17038 (name "python-gipc")
17039 (version "0.6.0")
17040 (source
17041 (origin
17042 (method url-fetch)
17043 (uri (pypi-uri "gipc" version ".zip"))
17044 (sha256
17045 (base32
17046 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
17047 (build-system python-build-system)
17048 (native-inputs
17049 `(("unzip" ,unzip)))
17050 (propagated-inputs
17051 `(("python-gevent" ,python-gevent)))
17052 (home-page "https://gehrcke.de/gipc/")
17053 (synopsis "Child process management in the context of gevent")
17054 (description "Usage of Python's multiprocessing package in a
17055 gevent-powered application may raise problems. With @code{gipc},
17056 process-based child processes can safely be created anywhere within a
17057 gevent-powered application.")
17058 (license license:expat)))
17059
17060 (define-public python2-gipc
17061 (package-with-python2 python-gipc))
17062
17063 (define-public python-fusepy
17064 (package
17065 (name "python-fusepy")
17066 (version "2.0.4")
17067 (source
17068 (origin
17069 (method url-fetch)
17070 (uri (pypi-uri "fusepy" version))
17071 (sha256
17072 (base32
17073 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
17074 (build-system python-build-system)
17075 (arguments
17076 `(#:phases
17077 (modify-phases %standard-phases
17078 (add-before 'build 'set-library-file-name
17079 (lambda* (#:key inputs #:allow-other-keys)
17080 (let ((fuse (assoc-ref inputs "fuse")))
17081 (substitute* "fuse.py"
17082 (("find_library\\('fuse'\\)")
17083 (string-append "'" fuse "/lib/libfuse.so'")))
17084 #t))))))
17085 (propagated-inputs
17086 `(("fuse" ,fuse)))
17087 (home-page "https://github.com/fusepy/fusepy")
17088 (synopsis "Simple ctypes bindings for FUSE")
17089 (description "Python module that provides a simple interface to FUSE and
17090 MacFUSE. The binding is created using the standard @code{ctypes} library.")
17091 (license license:isc)))
17092
17093 (define-public python2-fusepy
17094 (package-with-python2 python-fusepy))
17095
17096 (define-public python-fusepyng
17097 (package
17098 (name "python-fusepyng")
17099 (version "1.0.7")
17100 (source
17101 (origin
17102 (method url-fetch)
17103 (uri (pypi-uri "fusepyng" version))
17104 (sha256
17105 (base32
17106 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
17107 (build-system python-build-system)
17108 (arguments
17109 '(#:phases
17110 (modify-phases %standard-phases
17111 (add-after 'unpack 'set-libfuse-path
17112 (lambda* (#:key inputs #:allow-other-keys)
17113 (let ((fuse (assoc-ref inputs "fuse")))
17114 (substitute* "fusepyng.py"
17115 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
17116 (string-append "\"" fuse "/lib/libfuse.so\""))))
17117 #t)))))
17118 (inputs
17119 `(("fuse" ,fuse)))
17120 (propagated-inputs
17121 `(("python-paramiko" ,python-paramiko)))
17122 (home-page "https://github.com/rianhunter/fusepyng")
17123 (synopsis "Simple ctypes bindings for FUSE")
17124 (description "@code{fusepyng} is a Python module that provides a simple
17125 interface to FUSE on various operating systems. It's just one file and is
17126 implemented using @code{ctypes}.")
17127 (license license:isc)))
17128
17129 (define-public python2-gdrivefs
17130 (package
17131 (name "python2-gdrivefs")
17132 (version "0.14.9")
17133 (source
17134 (origin
17135 (method url-fetch)
17136 (uri (pypi-uri "gdrivefs" version))
17137 (sha256
17138 (base32
17139 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
17140 (build-system python-build-system)
17141 (arguments
17142 `(#:python ,python-2
17143 #:phases
17144 (modify-phases %standard-phases
17145 (add-before 'build 'patch-setup-py
17146 (lambda _
17147 ;; Update requirements from dependency==version
17148 ;; to dependency>=version
17149 (substitute* "gdrivefs/resources/requirements.txt"
17150 (("==") ">="))
17151 #t)))))
17152 (native-inputs
17153 `(("python2-gipc" ,python2-gipc)
17154 ("python2-gevent" ,python2-gevent)
17155 ("python2-greenlet" ,python2-greenlet)
17156 ("python2-httplib2" ,python2-httplib2)
17157 ("python2-uritemplate" ,python2-uritemplate)
17158 ("python2-oauth2client" ,python2-oauth2client)
17159 ("python2-six" ,python2-six)))
17160 (propagated-inputs
17161 `(("python2-dateutil" ,python2-dateutil)
17162 ("python2-fusepy" ,python2-fusepy)
17163 ("python2-google-api-client" ,python2-google-api-client)))
17164 (home-page "https://github.com/dsoprea/GDriveFS")
17165 (synopsis "Mount Google Drive as a local file system")
17166 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
17167 under Python 2.7.")
17168 (license license:gpl2)))
17169
17170 (define-public python-userspacefs
17171 (package
17172 (name "python-userspacefs")
17173 (version "1.0.13")
17174 (source
17175 (origin
17176 (method url-fetch)
17177 (uri (pypi-uri "userspacefs" version))
17178 (sha256
17179 (base32
17180 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
17181 (build-system python-build-system)
17182 (propagated-inputs
17183 `(("python-fusepyng" ,python-fusepyng)))
17184 (home-page "https://github.com/rianhunter/userspacefs")
17185 (synopsis "User-space file systems for Python")
17186 (description
17187 "@code{userspacefs} is a library that allows you to easily write
17188 user-space file systems in Python.")
17189 (license license:gpl3+)))
17190
17191 (define-public pybind11
17192 (package
17193 (name "pybind11")
17194 (version "2.4.3")
17195 (source (origin
17196 (method git-fetch)
17197 (uri (git-reference
17198 (url "https://github.com/pybind/pybind11")
17199 (commit (string-append "v" version))))
17200 (sha256
17201 (base32
17202 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
17203 (file-name (git-file-name name version))))
17204 (build-system cmake-build-system)
17205 (native-inputs
17206 `(("python" ,python-wrapper)
17207
17208 ;; The following dependencies are used for tests.
17209 ("python-pytest" ,python-pytest)
17210 ("catch" ,catch-framework2-1)
17211 ("eigen" ,eigen)))
17212 (arguments
17213 `(#:configure-flags
17214 (list (string-append "-DCATCH_INCLUDE_DIR="
17215 (assoc-ref %build-inputs "catch")
17216 "/include/catch"))
17217
17218 #:phases (modify-phases %standard-phases
17219 (add-after 'install 'install-python
17220 (lambda* (#:key outputs #:allow-other-keys)
17221 (let ((out (assoc-ref outputs "out")))
17222 (with-directory-excursion "../source"
17223 (setenv "PYBIND11_USE_CMAKE" "yes")
17224 (invoke "python" "setup.py" "install"
17225 "--single-version-externally-managed"
17226 "--root=/"
17227 (string-append "--prefix=" out)))))))
17228
17229 #:test-target "check"))
17230 (home-page "https://github.com/pybind/pybind11/")
17231 (synopsis "Seamless operability between C++11 and Python")
17232 (description
17233 "@code{pybind11} is a lightweight header-only library that exposes C++
17234 types in Python and vice versa, mainly to create Python bindings of existing
17235 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
17236 library: to minimize boilerplate code in traditional extension modules by
17237 inferring type information using compile-time introspection.")
17238 (license license:bsd-3)))
17239
17240 (define-public python-fasteners
17241 (package
17242 (name "python-fasteners")
17243 (version "0.14.1")
17244 (source
17245 (origin
17246 (method url-fetch)
17247 (uri (pypi-uri "fasteners" version))
17248 (sha256
17249 (base32
17250 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
17251 (build-system python-build-system)
17252 (propagated-inputs
17253 `(("python-monotonic" ,python-monotonic)
17254 ("python-six" ,python-six)
17255 ("python-testtools" ,python-testtools)))
17256 (home-page "https://github.com/harlowja/fasteners")
17257 (synopsis "Python package that provides useful locks")
17258 (description
17259 "This package provides a Python program that provides following locks:
17260
17261 @itemize
17262 @item Locking decorator
17263 @item Reader-writer locks
17264 @item Inter-process locks
17265 @item Generic helpers
17266 @end itemize\n")
17267 (properties `((python2-variant . ,(delay python2-fasteners))))
17268 (license license:asl2.0)))
17269
17270 (define-public python2-fasteners
17271 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
17272 (package
17273 (inherit base)
17274 (propagated-inputs
17275 `(("python2-futures" ,python2-futures)
17276 ,@(package-propagated-inputs base))))))
17277
17278 (define-public python-requests-file
17279 (package
17280 (name "python-requests-file")
17281 (version "1.4.3")
17282 (source
17283 (origin
17284 (method url-fetch)
17285 (uri (pypi-uri "requests-file" version))
17286 (sha256
17287 (base32
17288 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
17289 (build-system python-build-system)
17290 (propagated-inputs
17291 `(("python-requests" ,python-requests)
17292 ("python-six" ,python-six)))
17293 (home-page
17294 "https://github.com/dashea/requests-file")
17295 (synopsis "File transport adapter for Requests")
17296 (description
17297 "Requests-File is a transport adapter for use with the Requests Python
17298 library to allow local file system access via @code{file://} URLs.")
17299 (license license:asl2.0)))
17300
17301 (define-public python2-requests-file
17302 (package-with-python2 python-requests-file))
17303
17304 (define-public python-tldextract
17305 (package
17306 (name "python-tldextract")
17307 (version "2.2.0")
17308 (source
17309 (origin
17310 (method url-fetch)
17311 (uri (pypi-uri "tldextract" version))
17312 (sha256
17313 (base32
17314 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
17315 (build-system python-build-system)
17316 (native-inputs
17317 `(("python-pytest" ,python-pytest)
17318 ("python-responses" ,python-responses)))
17319 (propagated-inputs
17320 `(("python-idna" ,python-idna)
17321 ("python-requests" ,python-requests)
17322 ("python-requests-file" ,python-requests-file)))
17323 (home-page
17324 "https://github.com/john-kurkowski/tldextract")
17325 (synopsis
17326 "Separate the TLD from the registered domain and subdomains of a URL")
17327 (description
17328 "TLDExtract accurately separates the TLD from the registered domain and
17329 subdomains of a URL, using the Public Suffix List. By default, this includes
17330 the public ICANN TLDs and their exceptions. It can optionally support the
17331 Public Suffix List's private domains as well.")
17332 (license license:bsd-3)))
17333
17334 (define-public python2-tldextract
17335 (package-with-python2 python-tldextract))
17336
17337 (define-public python-pynamecheap
17338 (package
17339 (name "python-pynamecheap")
17340 (version "0.0.3")
17341 (source
17342 (origin
17343 (method url-fetch)
17344 (uri (pypi-uri "PyNamecheap" version))
17345 (sha256
17346 (base32
17347 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
17348 (build-system python-build-system)
17349 (propagated-inputs
17350 `(("python-requests" ,python-requests)))
17351 (home-page
17352 "https://github.com/Bemmu/PyNamecheap")
17353 (synopsis
17354 "Namecheap API client in Python")
17355 (description
17356 "PyNamecheap is a Namecheap API client in Python.")
17357 (license license:expat)))
17358
17359 (define-public python2-pynamecheap
17360 (package-with-python2 python-pynamecheap))
17361
17362 (define-public python-dns-lexicon
17363 (package
17364 (name "python-dns-lexicon")
17365 (version "2.4.0")
17366 (source
17367 (origin
17368 (method url-fetch)
17369 (uri (pypi-uri "dns-lexicon" version))
17370 (sha256
17371 (base32
17372 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
17373 (build-system python-build-system)
17374 (arguments
17375 `(#:tests? #f)) ;requires internet access
17376 (propagated-inputs
17377 `(("python-future" ,python-future)
17378 ("python-pynamecheap" ,python-pynamecheap)
17379 ("python-requests" ,python-requests)
17380 ("python-tldextract" ,python-tldextract)
17381 ("python-urllib3" ,python-urllib3)))
17382 (home-page "https://github.com/AnalogJ/lexicon")
17383 (synopsis
17384 "Manipulate DNS records on various DNS providers")
17385 (description
17386 "Lexicon provides a way to manipulate DNS records on multiple DNS
17387 providers in a standardized way. It has a CLI but it can also be used as a
17388 Python library. It was designed to be used in automation, specifically with
17389 Let's Encrypt.")
17390 (license license:expat)))
17391
17392 (define-public python2-dns-lexicon
17393 (package-with-python2 python-dns-lexicon))
17394
17395 (define-public python-commandlines
17396 (package
17397 (name "python-commandlines")
17398 (version "0.4.1")
17399 (source
17400 (origin
17401 (method url-fetch)
17402 (uri (pypi-uri "commandlines" version))
17403 (sha256
17404 (base32
17405 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
17406 (build-system python-build-system)
17407 (home-page "https://github.com/chrissimpkins/commandlines")
17408 (synopsis "Command line argument to object parsing library")
17409 (description
17410 "@code{Commandlines} is a Python library for command line application
17411 development that supports command line argument parsing, command string
17412 validation testing and application logic.")
17413 (license license:expat)))
17414
17415 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
17416 ;; python-numba. They have a very unflexible relationship.
17417 (define-public python-numba
17418 (package
17419 (name "python-numba")
17420 (version "0.46.0")
17421 (source
17422 (origin
17423 (method url-fetch)
17424 (uri (pypi-uri "numba" version))
17425 (sha256
17426 (base32
17427 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17428 (build-system python-build-system)
17429 (arguments
17430 `(#:modules ((guix build utils)
17431 (guix build python-build-system)
17432 (ice-9 ftw)
17433 (srfi srfi-1)
17434 (srfi srfi-26))
17435 #:phases
17436 (modify-phases %standard-phases
17437 (add-after 'unpack 'disable-proprietary-features
17438 (lambda _
17439 (setenv "NUMBA_DISABLE_HSA" "1")
17440 (setenv "NUMBA_DISABLE_CUDA" "1")
17441 #t))
17442 (add-after 'unpack 'remove-failing-tests
17443 (lambda _
17444 ;; FIXME: These tests fail for unknown reasons:
17445 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17446 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17447 (substitute* "numba/tests/test_dispatcher.py"
17448 (("def test(_non_writable_pycache)" _ m)
17449 (string-append "def guix_skip" m))
17450 (("def test(_non_creatable_pycache)" _ m)
17451 (string-append "def guix_skip" m))
17452 (("def test(_frozen)" _ m)
17453 (string-append "def guix_skip" m)))
17454
17455 ;; These tests fail because we don't run the tests from the build
17456 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17457 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17458 (substitute* "numba/tests/test_pycc.py"
17459 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17460 (string-append "def guix_skip" m)))
17461
17462 ;; These tests fail because our version of Python does not have
17463 ;; a recognizable front-end for the Numba distribution to use
17464 ;; to check against.
17465 (substitute* "numba/tests/test_entrypoints.py"
17466 (("def test(_init_entrypoint)" _ m)
17467 (string-append "def guix_skip" m)))
17468 (substitute* "numba/tests/test_jitclasses.py"
17469 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17470 (string-append "def guix_skip" m)))
17471 #t))
17472 (replace 'check
17473 (lambda _
17474 (let ((cwd (getcwd)))
17475 (setenv "PYTHONPATH"
17476 (string-append cwd "/build/"
17477 (find (cut string-prefix? "lib" <>)
17478 (scandir (string-append cwd "/build")))
17479 ":"
17480 (getenv "PYTHONPATH")))
17481 ;; Something is wrong with the PYTHONPATH when running the
17482 ;; tests from the build directory, as it complains about not being
17483 ;; able to import certain modules.
17484 (with-directory-excursion "/tmp"
17485 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17486 #t)))))
17487 (propagated-inputs
17488 `(("python-llvmlite" ,python-llvmlite)
17489 ("python-numpy" ,python-numpy)
17490 ("python-singledispatch" ,python-singledispatch)))
17491 ;; Needed for tests.
17492 (inputs
17493 `(("python-jinja2" ,python-jinja2)
17494 ("python-pygments" ,python-pygments)))
17495 (home-page "https://numba.pydata.org")
17496 (synopsis "Compile Python code using LLVM")
17497 (description "Numba gives you the power to speed up your applications with
17498 high performance functions written directly in Python. With a few
17499 annotations, array-oriented and math-heavy Python code can be just-in-time
17500 compiled to native machine instructions, similar in performance to C, C++ and
17501 Fortran, without having to switch languages or Python interpreters.
17502
17503 Numba works by generating optimized machine code using the LLVM compiler
17504 infrastructure at import time, runtime, or statically (using the included pycc
17505 tool).")
17506 (license license:bsd-3)))
17507
17508 (define-public python-numcodecs
17509 (package
17510 (name "python-numcodecs")
17511 (version "0.6.4")
17512 (source
17513 (origin
17514 (method url-fetch)
17515 (uri (pypi-uri "numcodecs" version))
17516 (sha256
17517 (base32
17518 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17519 (build-system python-build-system)
17520 (propagated-inputs
17521 `(("python-numpy" ,python-numpy)
17522 ("python-msgpack" ,python-msgpack)))
17523 (native-inputs
17524 `(("python-pytest" ,python-pytest)
17525 ("python-setuptools-scm" ,python-setuptools-scm)))
17526 (home-page "https://github.com/zarr-developers/numcodecs")
17527 (synopsis "Buffer compression and transformation codecs")
17528 (description
17529 "This Python package provides buffer compression and transformation
17530 codecs for use in data storage and communication applications.")
17531 (license license:expat)))
17532
17533 (define-public python-asciitree
17534 (package
17535 (name "python-asciitree")
17536 (version "0.3.3")
17537 (source
17538 (origin
17539 (method url-fetch)
17540 (uri (pypi-uri "asciitree" version))
17541 (sha256
17542 (base32
17543 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17544 (build-system python-build-system)
17545 (home-page "https://github.com/mbr/asciitree")
17546 (synopsis "Draws ASCII trees")
17547 (description "This package draws tree structures using characters.")
17548 (license license:expat)))
17549
17550 (define-public python-zarr
17551 (package
17552 (name "python-zarr")
17553 (version "2.4.0")
17554 (source
17555 (origin
17556 (method url-fetch)
17557 (uri (pypi-uri "zarr" version))
17558 (sha256
17559 (base32
17560 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17561 (build-system python-build-system)
17562 (arguments
17563 `(#:phases
17564 (modify-phases %standard-phases
17565 (add-after 'unpack 'disable-service-tests
17566 (lambda _
17567 (setenv "ZARR_TEST_ABS" "0")
17568 (setenv "ZARR_TEST_MONGO" "0")
17569 (setenv "ZARR_TEST_REDIS" "0")
17570 #t))
17571 (replace 'check
17572 (lambda _
17573 (invoke "pytest" "-vv" "-k" "not lmdb")
17574 #t)))))
17575 (propagated-inputs
17576 `(("python-asciitree" ,python-asciitree)
17577 ("python-fasteners" ,python-fasteners)
17578 ("python-numcodecs" ,python-numcodecs)
17579 ("python-numpy" ,python-numpy)))
17580 (native-inputs
17581 `(("python-pytest" ,python-pytest)
17582 ("python-setuptools-scm" ,python-setuptools-scm)))
17583 (home-page "https://github.com/zarr-developers/zarr-python")
17584 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17585 (description
17586 "This package provides an implementation of chunked, compressed,
17587 N-dimensional arrays for Python.")
17588 (license license:expat)))
17589
17590 (define-public python-anndata
17591 (package
17592 (name "python-anndata")
17593 (version "0.7.1")
17594 (source
17595 (origin
17596 (method url-fetch)
17597 (uri (pypi-uri "anndata" version))
17598 (sha256
17599 (base32
17600 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17601 (build-system python-build-system)
17602 (arguments
17603 `(#:phases
17604 (modify-phases %standard-phases
17605 (add-after 'unpack 'delete-inconvenient-tests
17606 (lambda _
17607 ;; This test depends on python-scikit-learn.
17608 (delete-file "anndata/tests/test_inplace_subset.py")
17609 #t))
17610 (delete 'check)
17611 (add-after 'install 'check
17612 (lambda* (#:key inputs outputs #:allow-other-keys)
17613 (add-installed-pythonpath inputs outputs)
17614 (invoke "pytest" "-vv"))))))
17615 (propagated-inputs
17616 `(("python-h5py" ,python-h5py)
17617 ("python-importlib-metadata" ,python-importlib-metadata)
17618 ("python-natsort" ,python-natsort)
17619 ("python-numcodecs" ,python-numcodecs)
17620 ("python-packaging" ,python-packaging)
17621 ("python-pandas" ,python-pandas)
17622 ("python-scipy" ,python-scipy)
17623 ("python-zarr" ,python-zarr)))
17624 (native-inputs
17625 `(("python-joblib" ,python-joblib)
17626 ("python-pytest" ,python-pytest)
17627 ("python-setuptools-scm" ,python-setuptools-scm)))
17628 (home-page "https://github.com/theislab/anndata")
17629 (synopsis "Annotated data for data analysis pipelines")
17630 (description "Anndata is a package for simple (functional) high-level APIs
17631 for data analysis pipelines. In this context, it provides an efficient,
17632 scalable way of keeping track of data together with learned annotations and
17633 reduces the code overhead typically encountered when using a mostly
17634 object-oriented library such as @code{scikit-learn}.")
17635 (license license:bsd-3)))
17636
17637 (define-public python-dill
17638 (package
17639 (name "python-dill")
17640 (version "0.3.1.1")
17641 (source
17642 (origin
17643 (method url-fetch)
17644 (uri (pypi-uri "dill" version))
17645 (sha256
17646 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17647 (build-system python-build-system)
17648 (arguments
17649 `(#:phases
17650 (modify-phases %standard-phases
17651 (replace 'check
17652 (lambda _
17653 (with-directory-excursion "/tmp"
17654 (invoke "nosetests" "-v"))
17655 #t)))))
17656 (native-inputs
17657 `(("python-nose" ,python-nose)))
17658 (home-page "https://pypi.org/project/dill/")
17659 (synopsis "Serialize all of Python")
17660 (description "Dill extends Python's @code{pickle} module for serializing
17661 and de-serializing Python objects to the majority of the built-in Python
17662 types. Dill provides the user the same interface as the @code{pickle} module,
17663 and also includes some additional features. In addition to pickling Python
17664 objects, @code{dill} provides the ability to save the state of an interpreter
17665 session in a single command. Hence, it would be feasible to save a
17666 interpreter session, close the interpreter, ship the pickled file to another
17667 computer, open a new interpreter, unpickle the session and thus continue from
17668 the saved state of the original interpreter session.")
17669 (license license:bsd-3)))
17670
17671 (define-public python-multiprocess
17672 (package
17673 (name "python-multiprocess")
17674 (version "0.70.9")
17675 (source
17676 (origin
17677 (method url-fetch)
17678 (uri (pypi-uri "multiprocess" version))
17679 (sha256
17680 (base32
17681 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17682 (build-system python-build-system)
17683 (arguments
17684 `(#:phases
17685 (modify-phases %standard-phases
17686 (add-after 'unpack 'disable-broken-tests
17687 (lambda _
17688 ;; This test is broken as there is no keyboard interrupt.
17689 (substitute* "py3.7/multiprocess/tests/__init__.py"
17690 (("^(.*)def test_wait_result"
17691 line indent)
17692 (string-append indent
17693 "@unittest.skip(\"Disabled by Guix\")\n"
17694 line)))
17695 #t))
17696 ;; Tests must be run after installation.
17697 (delete 'check)
17698 (add-after 'install 'check
17699 (lambda* (#:key inputs outputs #:allow-other-keys)
17700 (add-installed-pythonpath inputs outputs)
17701 (invoke "python" "-m" "multiprocess.tests")
17702 #t)))))
17703 (propagated-inputs
17704 `(("python-dill" ,python-dill)))
17705 (home-page "https://pypi.org/project/multiprocess/")
17706 (synopsis "Multiprocessing and multithreading in Python")
17707 (description
17708 "This package is a fork of the multiprocessing Python package, a package
17709 which supports the spawning of processes using the API of the standard
17710 library's @code{threading} module.")
17711 (license license:bsd-3)))
17712
17713 (define-public python-toolz
17714 (package
17715 (name "python-toolz")
17716 (version "0.9.0")
17717 (source
17718 (origin
17719 (method url-fetch)
17720 (uri (pypi-uri "toolz" version))
17721 (sha256
17722 (base32
17723 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17724 (build-system python-build-system)
17725 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17726 ;; unregistered loader type"
17727 (arguments '(#:tests? #f))
17728 (home-page "https://github.com/pytoolz/toolz/")
17729 (synopsis "List processing tools and functional utilities")
17730 (description
17731 "This package provides a set of utility functions for iterators,
17732 functions, and dictionaries.")
17733 (license license:bsd-3)))
17734
17735 (define-public python2-toolz
17736 (package-with-python2 python-toolz))
17737
17738 (define-public python-cytoolz
17739 (package
17740 (name "python-cytoolz")
17741 (version "0.9.0.1")
17742 (source
17743 (origin
17744 (method url-fetch)
17745 (uri (pypi-uri "cytoolz" version))
17746 (sha256
17747 (base32
17748 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17749 (build-system python-build-system)
17750 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17751 ;; 'exceptions'"
17752 (arguments '(#:tests? #f))
17753 (propagated-inputs
17754 `(("python-toolz" ,python-toolz)))
17755 (native-inputs
17756 `(("python-cython" ,python-cython)))
17757 (home-page "https://github.com/pytoolz/cytoolz")
17758 (synopsis "High performance functional utilities")
17759 (description
17760 "The cytoolz package implements the same API as provided by toolz. The
17761 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17762 that is accessible to other projects developed in Cython.")
17763 (license license:bsd-3)))
17764
17765 (define-public python-sortedcontainers
17766 (package
17767 (name "python-sortedcontainers")
17768 (version "2.1.0")
17769 (source
17770 (origin
17771 (method url-fetch)
17772 (uri (pypi-uri "sortedcontainers" version))
17773 (sha256
17774 (base32
17775 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17776 (build-system python-build-system)
17777 (arguments
17778 ;; FIXME: Tests require many extra dependencies, and would introduce
17779 ;; a circular dependency on hypothesis, which uses this package.
17780 '(#:tests? #f))
17781 (propagated-inputs
17782 `(("python-appdirs" ,python-appdirs)
17783 ("python-distlib" ,python-distlib)
17784 ("python-filelock" ,python-filelock)
17785 ("python-six" ,python-six-bootstrap)))
17786 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17787 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17788 (description
17789 "This package provides a sorted collections library, written in
17790 pure-Python.")
17791 (license license:asl2.0)))
17792
17793 (define-public python2-sortedcontainers
17794 (package-with-python2 python-sortedcontainers))
17795
17796 (define-public python-cloudpickle
17797 (package
17798 (name "python-cloudpickle")
17799 (version "1.3.0")
17800 (source
17801 (origin
17802 (method url-fetch)
17803 (uri (pypi-uri "cloudpickle" version))
17804 (sha256
17805 (base32
17806 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17807 (build-system python-build-system)
17808 (arguments
17809 '(#:phases (modify-phases %standard-phases
17810 (add-before 'check 'do-not-override-PYTHONPATH
17811 (lambda _
17812 ;; Append to PYTHONPATH instead of overriding it so
17813 ;; that dependencies from Guix can be found.
17814 (substitute* "tests/testutils.py"
17815 (("env\\['PYTHONPATH'\\] = pythonpath")
17816 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17817 #t))
17818 (replace 'check
17819 (lambda* (#:key tests? #:allow-other-keys)
17820 (if tests?
17821 (invoke "pytest" "-s" "-vv")
17822 (format #t "test suite not run~%"))
17823 #t)))))
17824 (native-inputs
17825 `(;; For tests.
17826 ("python-psutil" ,python-psutil)
17827 ("python-pytest" ,python-pytest)
17828 ("python-tornado" ,python-tornado)))
17829 (home-page "https://github.com/cloudpipe/cloudpickle")
17830 (synopsis "Extended pickling support for Python objects")
17831 (description
17832 "Cloudpickle makes it possible to serialize Python constructs not
17833 supported by the default pickle module from the Python standard library. It
17834 is especially useful for cluster computing where Python expressions are
17835 shipped over the network to execute on remote hosts, possibly close to the
17836 data.")
17837 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17838 (license license:bsd-3)))
17839
17840 (define-public python2-cloudpickle
17841 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17842 (package
17843 (inherit base)
17844 (native-inputs
17845 `(("python-mock" ,python2-mock)
17846 ,@(package-native-inputs base)))
17847 (propagated-inputs
17848 `(("python-futures" ,python2-futures)
17849 ,@(package-propagated-inputs base))))))
17850
17851 (define-public python-locket
17852 (package
17853 (name "python-locket")
17854 (version "0.2.0")
17855 (source
17856 (origin
17857 (method url-fetch)
17858 (uri (pypi-uri "locket" version))
17859 (sha256
17860 (base32
17861 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17862 (build-system python-build-system)
17863 (home-page "https://github.com/mwilliamson/locket.py")
17864 (synopsis "File-based locks for Python")
17865 (description
17866 "Locket implements a lock that can be used by multiple processes provided
17867 they use the same path.")
17868 (license license:bsd-2)))
17869
17870 (define-public python2-locket
17871 (package-with-python2 python-locket))
17872
17873 (define-public python-blosc
17874 (package
17875 (name "python-blosc")
17876 (version "1.5.1")
17877 (source
17878 (origin
17879 (method url-fetch)
17880 (uri (pypi-uri "blosc" version))
17881 (sha256
17882 (base32
17883 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17884 (build-system python-build-system)
17885 ;; FIXME: all tests pass, but then this error is printed:
17886 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17887 (arguments '(#:tests? #f))
17888 (propagated-inputs
17889 `(("python-numpy" ,python-numpy)))
17890 (home-page "https://github.com/blosc/python-blosc")
17891 (synopsis "Python wrapper for the Blosc data compressor library")
17892 (description "Blosc is a high performance compressor optimized for binary
17893 data. It has been designed to transmit data to the processor cache faster
17894 than the traditional, non-compressed, direct memory fetch approach via a
17895 @code{memcpy()} system call.
17896
17897 Blosc works well for compressing numerical arrays that contains data with
17898 relatively low entropy, like sparse data, time series, grids with
17899 regular-spaced values, etc.
17900
17901 This Python package wraps the Blosc library.")
17902 (license license:bsd-3)))
17903
17904 (define-public python2-blosc
17905 (package-with-python2 python-blosc))
17906
17907 (define-public python-partd
17908 (package
17909 (name "python-partd")
17910 (version "0.3.9")
17911 (source
17912 (origin
17913 (method url-fetch)
17914 (uri (pypi-uri "partd" version))
17915 (sha256
17916 (base32
17917 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17918 (build-system python-build-system)
17919 (propagated-inputs
17920 `(("python-blosc" ,python-blosc)
17921 ("python-locket" ,python-locket)
17922 ("python-numpy" ,python-numpy)
17923 ("python-pandas" ,python-pandas)
17924 ("python-pyzmq" ,python-pyzmq)
17925 ("python-toolz" ,python-toolz)))
17926 (home-page "https://github.com/dask/partd/")
17927 (synopsis "Appendable key-value storage")
17928 (description "Partd stores key-value pairs. Values are raw bytes. We
17929 append on old values. Partd excels at shuffling operations.")
17930 (license license:bsd-3)))
17931
17932 (define-public python2-partd
17933 (package-with-python2 python-partd))
17934
17935 (define-public python-fsspec
17936 (package
17937 (name "python-fsspec")
17938 (version "0.6.1")
17939 (source
17940 (origin
17941 (method url-fetch)
17942 (uri (pypi-uri "fsspec" version))
17943 (sha256
17944 (base32
17945 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17946 (build-system python-build-system)
17947 (arguments '(#:tests? #f)) ; there are none
17948 (home-page "https://github.com/intake/filesystem_spec")
17949 (synopsis "File-system specification")
17950 (description "The purpose of this package is to produce a template or
17951 specification for a file-system interface, that specific implementations
17952 should follow, so that applications making use of them can rely on a common
17953 behavior and not have to worry about the specific internal implementation
17954 decisions with any given backend.")
17955 (license license:bsd-3)))
17956
17957 (define-public python-dask
17958 (package
17959 (name "python-dask")
17960 (version "2.14.0")
17961 (source
17962 (origin
17963 (method url-fetch)
17964 (uri (pypi-uri "dask" version))
17965 (sha256
17966 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17967 (build-system python-build-system)
17968 (arguments
17969 `(#:phases
17970 (modify-phases %standard-phases
17971 (add-after 'unpack 'disable-broken-tests
17972 (lambda _
17973 ;; This test is marked as xfail when pytest-xdist is used.
17974 (substitute* "dask/tests/test_threaded.py"
17975 (("def test_interrupt\\(\\)" m)
17976 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17977 m)))
17978 ;; This one fails with a type error:
17979 ;; TypeError: Already tz-aware, use tz_convert to convert.
17980 (substitute* "dask/dataframe/tests/test_shuffle.py"
17981 (("def test_set_index_timestamp\\(\\)" m)
17982 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17983 m)))
17984 #t))
17985 (replace 'check
17986 (lambda _ (invoke "pytest" "-vv"))))))
17987 (propagated-inputs
17988 `(("python-cloudpickle" ,python-cloudpickle)
17989 ("python-fsspec" ,python-fsspec)
17990 ("python-numpy" ,python-numpy)
17991 ("python-packaging" ,python-packaging)
17992 ("python-pandas" ,python-pandas)
17993 ("python-partd" ,python-partd)
17994 ("python-toolz" ,python-toolz)
17995 ("python-pyyaml" ,python-pyyaml)))
17996 (native-inputs
17997 `(("python-pytest" ,python-pytest)
17998 ("python-pytest-runner" ,python-pytest-runner)))
17999 (home-page "https://github.com/dask/dask/")
18000 (synopsis "Parallel computing with task scheduling")
18001 (description
18002 "Dask is a flexible parallel computing library for analytics. It
18003 consists of two components: dynamic task scheduling optimized for computation,
18004 and large data collections like parallel arrays, dataframes, and lists that
18005 extend common interfaces like NumPy, Pandas, or Python iterators to
18006 larger-than-memory or distributed environments. These parallel collections
18007 run on top of the dynamic task schedulers. ")
18008 (license license:bsd-3)))
18009
18010 (define-public python-ilinkedlist
18011 (package
18012 (name "python-ilinkedlist")
18013 (version "0.4.0")
18014 (source
18015 (origin
18016 (method url-fetch)
18017 (uri (pypi-uri "ilinkedlist" version))
18018 (sha256
18019 (base32
18020 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
18021 (build-system python-build-system)
18022 (native-inputs `(("python-pytest" ,python-pytest)))
18023 (inputs `(("python" ,python)))
18024 (home-page "https://github.com/luther9/ilinkedlist-py")
18025 (synopsis "Immutable linked list library")
18026 (description
18027 "This is a implementation of immutable linked lists for Python. It
18028 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
18029 Since a linked list is treated as immutable, it is hashable, and its length
18030 can be retrieved in constant time. Some of the terminology is inspired by
18031 LISP. It is possible to create an improper list by creating a @code{Pair}
18032 with a non-list @code{cdr}.")
18033 (license license:gpl3+)))
18034
18035 (define-public python-readlike
18036 (package
18037 (name "python-readlike")
18038 (version "0.1.3")
18039 (source
18040 (origin
18041 (method url-fetch)
18042 (uri (pypi-uri "readlike" version))
18043 (sha256
18044 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
18045 (build-system python-build-system)
18046 (home-page "https://github.com/jangler/readlike")
18047 (synopsis "GNU Readline-like line editing module")
18048 (description
18049 "This Python module provides line editing functions similar to the default
18050 Emacs-style ones of GNU Readline. Unlike the Python standard library's
18051 @code{readline} package, this one allows access to those capabilties in settings
18052 outside of a standard command-line interface. It is especially well-suited to
18053 interfacing with Urwid, due to a shared syntax for describing key inputs.
18054
18055 Currently, all stateless Readline commands are implemented. Yanking and history
18056 are not supported.")
18057 (license license:expat)))
18058
18059 (define-public python2-readlike
18060 (package-with-python2 python-readlike))
18061
18062 (define-public python-reparser
18063 (package
18064 (name "python-reparser")
18065 (version "1.4.3")
18066 (source
18067 (origin
18068 (method url-fetch)
18069 (uri (pypi-uri "ReParser" version))
18070 (sha256
18071 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
18072 (build-system python-build-system)
18073 (home-page "https://github.com/xmikos/reparser")
18074 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
18075 (description
18076 "This Python library provides a simple lexer/parser for inline markup based
18077 on regular expressions.")
18078 (license license:expat)))
18079
18080 (define-public python2-reparser
18081 (let ((reparser (package-with-python2
18082 (strip-python2-variant python-reparser))))
18083 (package (inherit reparser)
18084 (propagated-inputs
18085 `(("python2-enum34" ,python2-enum34)
18086 ,@(package-propagated-inputs reparser))))))
18087
18088 (define-public python-retrying
18089 (package
18090 (name "python-retrying")
18091 (version "1.3.3")
18092 (source
18093 (origin
18094 (method git-fetch)
18095 (uri (git-reference
18096 (url "https://github.com/rholder/retrying")
18097 (commit (string-append "v" version))))
18098 (file-name (git-file-name name version))
18099 (sha256
18100 (base32
18101 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
18102 (build-system python-build-system)
18103 (propagated-inputs
18104 `(("python-six" ,python-six)))
18105 (home-page "https://github.com/rholder/retrying")
18106 (synopsis "Library for adding retry behavior")
18107 (description "Retrying is a general-purpose retrying library to simplify
18108 the task of adding retry behavior to just about anything.
18109
18110 Features:
18111
18112 @itemize
18113 @item Generic Decorator API.
18114 @item Specify stop condition (i.e. limit by number of attempts).
18115 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
18116 @item Customize retrying on Exceptions.
18117 @item Customize retrying on expected returned result.
18118 @end itemize")
18119 (license license:asl2.0)))
18120
18121 (define-public python-precis-i18n
18122 (package
18123 (name "python-precis-i18n")
18124 (version "1.0.0")
18125 (source
18126 (origin
18127 (method url-fetch)
18128 (uri (pypi-uri "precis_i18n" version))
18129 (sha256
18130 (base32
18131 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
18132 (build-system python-build-system)
18133 (home-page "https://github.com/byllyfish/precis_i18n")
18134 (synopsis "Implementation of the PRECIS framework")
18135 (description
18136 "This module implements the PRECIS Framework as described in RFC 8264,
18137 RFC 8265 and RFC 8266.")
18138 (license license:expat)))
18139
18140 (define-public python-absl-py
18141 (package
18142 (name "python-absl-py")
18143 (version "0.6.1")
18144 (source
18145 (origin
18146 (method url-fetch)
18147 (uri (pypi-uri "absl-py" version))
18148 (sha256
18149 (base32
18150 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
18151 (build-system python-build-system)
18152 (propagated-inputs
18153 `(("python-six" ,python-six)))
18154 (home-page "https://github.com/abseil/abseil-py")
18155 (synopsis "Abseil Python common libraries")
18156 (description
18157 "This package provides the Abseil Python Common Libraries, a collection
18158 of Python libraries for building Python applications.")
18159 (license license:asl2.0)))
18160
18161 (define-public python-astor
18162 (package
18163 (name "python-astor")
18164 (version "0.7.1")
18165 (source
18166 (origin
18167 (method url-fetch)
18168 (uri (pypi-uri "astor" version))
18169 (sha256
18170 (base32
18171 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
18172 (build-system python-build-system)
18173 ;; FIXME: There are two errors and two test failures.
18174 (arguments `(#:tests? #f))
18175 (home-page "https://github.com/berkerpeksag/astor")
18176 (synopsis "Read and write Python ASTs")
18177 (description "Astor is designed to allow easy manipulation of Python
18178 source via the Abstract Syntax Tree.")
18179 (license license:bsd-3)))
18180
18181 (define-public python2-astor
18182 (package-with-python2 python-astor))
18183
18184 (define-public python-astunparse
18185 (package
18186 (name "python-astunparse")
18187 (version "1.6.2")
18188 (source
18189 (origin
18190 (method url-fetch)
18191 (uri (pypi-uri "astunparse" version))
18192 (sha256
18193 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
18194 (build-system python-build-system)
18195 (arguments '(#:tests? #f)) ; there are none
18196 (propagated-inputs
18197 `(("python-six" ,python-six)
18198 ("python-wheel" ,python-wheel)))
18199 (home-page "https://github.com/simonpercivall/astunparse")
18200 (synopsis "AST unparser for Python")
18201 (description "This package provides an AST unparser for Python. It is a
18202 factored out version of @code{unparse} found in the Python source
18203 distribution.")
18204 (license license:bsd-3)))
18205
18206 (define-public python-gast
18207 (package
18208 (name "python-gast")
18209 (version "0.3.3")
18210 (source
18211 (origin
18212 (method url-fetch)
18213 (uri (pypi-uri "gast" version))
18214 (sha256
18215 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
18216 (build-system python-build-system)
18217 (propagated-inputs
18218 `(("python-astunparse" ,python-astunparse)))
18219 (home-page "https://pypi.org/project/gast/")
18220 (synopsis "Generic Python AST that abstracts the underlying Python version")
18221 (description
18222 "GAST provides a compatibility layer between the AST of various Python
18223 versions, as produced by @code{ast.parse} from the standard @code{ast}
18224 module.")
18225 (license license:bsd-3)))
18226
18227 (define-public python-wikidata
18228 (package
18229 (name "python-wikidata")
18230 (version "0.6.1")
18231 (source
18232 (origin
18233 (method url-fetch)
18234 (uri (pypi-uri "Wikidata" version))
18235 (sha256
18236 (base32
18237 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
18238 (build-system python-build-system)
18239 (propagated-inputs
18240 `(("python-babel" ,python-babel)))
18241 (home-page "https://github.com/dahlia/wikidata")
18242 (synopsis "Wikidata client library")
18243 (description
18244 "This package provides a Python interface to
18245 @url{https://www.wikidata.org/, Wikidata}.")
18246 (properties '((upstream-name . "Wikidata")))
18247 (license license:gpl3+)))
18248
18249 (define-public python-doctest-ignore-unicode
18250 (package
18251 (name "python-doctest-ignore-unicode")
18252 (version "0.1.2")
18253 (source
18254 (origin
18255 (method url-fetch)
18256 (uri (pypi-uri "doctest-ignore-unicode" version))
18257 (sha256
18258 (base32
18259 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
18260 (build-system python-build-system)
18261 (native-inputs
18262 `(("python-nose" ,python-nose)))
18263 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
18264 (synopsis "Ignore Unicode literal prefixes in doctests")
18265 (description
18266 "This package adds support for a flag to ignore Unicode literal prefixes
18267 in doctests.")
18268 (license license:asl2.0)))
18269
18270 (define-public python-attr
18271 (package
18272 (name "python-attr")
18273 (version "0.3.1")
18274 (source
18275 (origin
18276 (method url-fetch)
18277 (uri (pypi-uri "attr" version))
18278 (sha256
18279 (base32
18280 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
18281 (build-system python-build-system)
18282 (home-page "https://github.com/denis-ryzhkov/attr")
18283 (synopsis "Decorator for attributes of target function or class")
18284 (description "Simple decorator to set attributes of target function or
18285 class in a @acronym{DRY, Don't Repeat Yourself} way.")
18286 (license license:expat)))
18287
18288 (define-public python-construct
18289 (package
18290 (name "python-construct")
18291 (version "2.10.56")
18292 (source
18293 (origin
18294 (method url-fetch)
18295 (uri (pypi-uri "construct" version))
18296 (sha256
18297 (base32
18298 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
18299 (build-system python-build-system)
18300 (arguments
18301 `(#:tests? #f)) ; No tests exist.
18302 (propagated-inputs
18303 `(("python-extras" ,python-extras)
18304 ("python-arrow" ,python-arrow)
18305 ("python-numpy" ,python-numpy)
18306 ("python-ruamel.yaml" ,python-ruamel.yaml)))
18307 (home-page "https://construct.readthedocs.io")
18308 (synopsis "Declarative and symmetrical parser and builder for binary data")
18309 (description
18310 "This package provides both simple, atomic constructs (such as
18311 integers of various sizes), as well as composite ones which allow you
18312 form hierarchical and sequential structures of increasing complexity.
18313 It features bit and byte granularity, easy debugging and testing, an
18314 easy-to-extend subclass system, and lots of primitive constructs to
18315 make your work easier.")
18316 (license license:expat)))
18317
18318 (define-public python-humanize
18319 (package
18320 (name "python-humanize")
18321 (version "0.5.1")
18322 (source
18323 (origin
18324 (method url-fetch)
18325 (uri (pypi-uri "humanize" version))
18326 (sha256
18327 (base32
18328 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
18329 (arguments
18330 '(#:tests? #f)) ; tests not in pypi archive
18331 (build-system python-build-system)
18332 (home-page "https://github.com/jmoiron/humanize")
18333 (synopsis "Print numerical information in a human-readable form")
18334 (description "This package provides a Python module that displays numbers
18335 and dates in \"human readable\" forms. For example, it would display
18336 \"12345591313\" as \"12.3 billion\".")
18337 (license license:expat)))
18338
18339 (define-public python-txaio
18340 (package
18341 (name "python-txaio")
18342 (version "18.8.1")
18343 (source
18344 (origin
18345 (method url-fetch)
18346 (uri (pypi-uri "txaio" version))
18347 (sha256
18348 (base32
18349 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
18350 (build-system python-build-system)
18351 (propagated-inputs
18352 `(("python-twisted" ,python-twisted)
18353 ("python-six" ,python-six)))
18354 (home-page "https://github.com/crossbario/txaio")
18355 (synopsis "Compatibility layer between Python asyncio and Twisted")
18356 (description "Txaio provides a compatibility layer between the Python
18357 @code{asyncio} module and @code{Twisted}.")
18358 (license license:expat)))
18359
18360 (define-public python-toolshed
18361 (package
18362 (name "python-toolshed")
18363 (version "0.4.6")
18364 (source
18365 (origin
18366 (method url-fetch)
18367 (uri (pypi-uri "toolshed" version))
18368 (sha256
18369 (base32
18370 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
18371 (build-system python-build-system)
18372 (native-inputs
18373 `(("python-nose" ,python-nose)))
18374 (home-page "https://github.com/brentp/toolshed/")
18375 (synopsis "Collection of modules and functions for working with data")
18376 (description "This is a collection of well-tested, simple modules and
18377 functions that aim to reduce boilerplate when working with data.")
18378 (license license:bsd-2)))
18379
18380 (define-public python-annoy
18381 (package
18382 (name "python-annoy")
18383 (version "1.15.1")
18384 (source
18385 (origin
18386 (method url-fetch)
18387 (uri (pypi-uri "annoy" version))
18388 (sha256
18389 (base32
18390 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
18391 (build-system python-build-system)
18392 (native-inputs
18393 `(("python-nose" ,python-nose)))
18394 (home-page "https://github.com/spotify/annoy/")
18395 (synopsis "Approximate nearest neighbors library")
18396 (description
18397 "Annoy is a C++ library with Python bindings to search for points in
18398 space that are close to a given query point. It also creates large read-only
18399 file-based data structures that are @code{mmap}ped into memory so that many
18400 processes may share the same data.")
18401 (license license:asl2.0)))
18402
18403 (define-public python-pylzma
18404 (package
18405 (name "python-pylzma")
18406 (version "0.5.0")
18407 (source
18408 (origin
18409 (method url-fetch)
18410 (uri (pypi-uri "pylzma" version))
18411 (sha256
18412 (base32
18413 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
18414 (build-system python-build-system)
18415 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
18416 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
18417 (description "This package provides Python bindings for the LZMA library
18418 by Igor Pavlov.")
18419 (license license:lgpl2.1+)))
18420
18421 (define-public python2-pylzma
18422 (package-with-python2 python-pylzma))
18423
18424 (define-public python2-zeroconf
18425 (package
18426 (name "python2-zeroconf")
18427
18428 ;; This is the last version that supports Python 2.x.
18429 (version "0.19.1")
18430 (source
18431 (origin
18432 (method url-fetch)
18433 (uri (pypi-uri "zeroconf" version))
18434 (sha256
18435 (base32
18436 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
18437 (build-system python-build-system)
18438 (arguments
18439 `(#:python ,python-2
18440 #:phases
18441 (modify-phases %standard-phases
18442 (add-after 'unpack 'patch-requires
18443 (lambda* (#:key inputs #:allow-other-keys)
18444 (substitute* "setup.py"
18445 (("enum-compat")
18446 "enum34"))
18447 #t)))))
18448 (native-inputs
18449 `(("python2-six" ,python2-six)
18450 ("python2-enum32" ,python2-enum34)
18451 ("python2-netifaces" ,python2-netifaces)
18452 ("python2-typing" ,python2-typing)))
18453 (home-page "https://github.com/jstasiak/python-zeroconf")
18454 (synopsis "Pure Python mDNS service discovery")
18455 (description
18456 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18457 compatible).")
18458 (license license:lgpl2.1+)))
18459
18460 (define-public python-bsddb3
18461 (package
18462 (name "python-bsddb3")
18463 (version "6.2.6")
18464 (source
18465 (origin
18466 (method url-fetch)
18467 (uri (pypi-uri "bsddb3" version))
18468 (sha256
18469 (base32
18470 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18471 (build-system python-build-system)
18472 (inputs
18473 `(("bdb" ,bdb)))
18474 (arguments
18475 '(#:phases
18476 (modify-phases %standard-phases
18477 (add-after 'unpack 'configure-locations
18478 (lambda* (#:key inputs #:allow-other-keys)
18479 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18480 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18481 #t))
18482 (replace 'check
18483 (lambda _
18484 (invoke "python3" "test3.py" "-v"))))))
18485 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18486 (synopsis "Python bindings for Oracle Berkeley DB")
18487 (description
18488 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18489 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18490 Transaction objects, and each of these is exposed as a Python type in the
18491 bsddb3.db module. The database objects can use various access methods: btree,
18492 hash, recno, and queue. Complete support of Berkeley DB distributed
18493 transactions. Complete support for Berkeley DB Replication Manager.
18494 Complete support for Berkeley DB Base Replication. Support for RPC.")
18495 (license license:bsd-3)))
18496
18497 (define-public python-dbfread
18498 (package
18499 (name "python-dbfread")
18500 (version "2.0.7")
18501 (source (origin
18502 (method url-fetch)
18503 (uri (pypi-uri "dbfread" version))
18504 (sha256
18505 (base32
18506 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18507 (build-system python-build-system)
18508 (native-inputs
18509 `(("python-pytest" ,python-pytest)))
18510 (home-page "https://dbfread.readthedocs.io")
18511 (synopsis "Read DBF Files with Python")
18512 (description
18513 "This library reads DBF files and returns the data as native Python data
18514 types for further processing. It is primarily intended for batch jobs and
18515 one-off scripts.")
18516 (license license:expat)))
18517
18518 (define-public python-cached-property
18519 (package
18520 (name "python-cached-property")
18521 (version "1.5.1")
18522 (source
18523 (origin
18524 (method url-fetch)
18525 (uri (pypi-uri "cached-property" version))
18526 (sha256
18527 (base32
18528 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18529 (build-system python-build-system)
18530 (arguments
18531 `(#:phases
18532 (modify-phases %standard-phases
18533 ;; https://github.com/pydanny/cached-property/issues/131
18534 ;; recent versions of freezegun break one test
18535 (add-after 'unpack 'disable-broken-test
18536 (lambda _
18537 (substitute* "tests/test_cached_property.py"
18538 (("def test_threads_ttl_expiry\\(self\\)" m)
18539 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18540 " " m)))
18541 #t)))))
18542 (native-inputs
18543 `(("python-freezegun" ,python-freezegun)))
18544 (home-page
18545 "https://github.com/pydanny/cached-property")
18546 (synopsis
18547 "Decorator for caching properties in classes")
18548 (description
18549 "This package provides a decorator which makes caching
18550 time-or-computationally-expensive properties quick and easy and works in Python
18551 2 or 3.")
18552 (license license:bsd-3)))
18553
18554 (define-public python-folium
18555 (package
18556 (name "python-folium")
18557 (version "0.11.0")
18558 (source
18559 (origin
18560 (method url-fetch)
18561 (uri (pypi-uri "folium" version))
18562 (sha256
18563 (base32 "19sclsq3xcjfa7bavzjpyn6rl9b15jbc76n5aag4cwhqqamqj1sl"))))
18564 (build-system python-build-system)
18565 (propagated-inputs
18566 `(("python-branca" ,python-branca)
18567 ("python-jinja2" ,python-jinja2)
18568 ("python-numpy" ,python-numpy)
18569 ("python-requests" ,python-requests)))
18570 (native-inputs
18571 `(("python-pytest" ,python-pytest)))
18572 (home-page "https://github.com/python-visualization/folium")
18573 (synopsis "Make beautiful maps with Leaflet.js & Python")
18574 (description "@code{folium} makes it easy to visualize data that’s been
18575 manipulated in Python on an interactive leaflet map. It enables both the
18576 binding of data to a map for @code{choropleth} visualizations as well as
18577 passing rich vector/raster/HTML visualizations as markers on the map.
18578
18579 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18580 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18581 supports Image, Video, GeoJSON and TopoJSON overlays.")
18582 (license license:expat)))
18583
18584 (define-public jube
18585 (package
18586 ;; This is a command-line tool, so no "python-" prefix.
18587 (name "jube")
18588 (version "2.2.2")
18589 (source (origin
18590 (method url-fetch)
18591 (uri (string-append
18592 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18593 version))
18594 (sha256
18595 (base32
18596 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18597 (file-name (string-append "jube-" version ".tar.gz"))))
18598 (build-system python-build-system)
18599 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18600 (synopsis "Benchmarking environment")
18601 (description
18602 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18603 benchmarked application, benchmark data is stored in a format that allows JUBE
18604 to deduct the desired information. This data can be parsed by automatic pre-
18605 and post-processing scripts that draw information and store it more densely
18606 for manual interpretation.")
18607 (license license:gpl3+)))
18608
18609 (define-public python-pyroutelib3
18610 (package
18611 (name "python-pyroutelib3")
18612 (version "1.3.post1")
18613 (source
18614 (origin
18615 (method url-fetch)
18616 (uri (pypi-uri "pyroutelib3" version))
18617 (sha256
18618 (base32
18619 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18620 (build-system python-build-system)
18621 (propagated-inputs
18622 `(("python-dateutil" ,python-dateutil)))
18623 (home-page "https://github.com/MKuranowski/pyroutelib3")
18624 (synopsis "Library for simple routing on OSM data")
18625 (description "Library for simple routing on OSM data")
18626 (license license:gpl3+)))
18627
18628 (define-public python-bibtexparser
18629 (package
18630 (name "python-bibtexparser")
18631 (version "1.1.0")
18632 (source
18633 (origin
18634 (method url-fetch)
18635 (uri (pypi-uri "bibtexparser" version))
18636 (sha256
18637 (base32
18638 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18639 (build-system python-build-system)
18640 (propagated-inputs
18641 `(("python-pyparsing" ,python-pyparsing)))
18642 (native-inputs
18643 `(("python-future" ,python-future)))
18644 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18645 (synopsis "Python library to parse BibTeX files")
18646 (description "BibtexParser is a Python library to parse BibTeX files.")
18647 (license (list license:bsd-3 license:lgpl3))))
18648
18649 (define-public python-distro
18650 (package
18651 (name "python-distro")
18652 (version "1.4.0")
18653 (source
18654 (origin
18655 (method url-fetch)
18656 (uri (pypi-uri "distro" version))
18657 (sha256
18658 (base32
18659 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18660 (build-system python-build-system)
18661 (native-inputs
18662 `(("python-pytest" ,python-pytest)))
18663 (home-page "https://github.com/nir0s/distro")
18664 (synopsis
18665 "OS platform information API")
18666 (description
18667 "@code{distro} provides information about the OS distribution it runs on,
18668 such as a reliable machine-readable ID, or version information.
18669
18670 It is the recommended replacement for Python's original
18671 `platform.linux_distribution` function (which will be removed in Python 3.8).
18672 @code{distro} also provides a command-line interface to output the platform
18673 information in various formats.")
18674 (license license:asl2.0)))
18675
18676 (define-public python-cairosvg
18677 (package
18678 (name "python-cairosvg")
18679 (version "2.4.2")
18680 (source
18681 (origin
18682 (method url-fetch)
18683 (uri (pypi-uri "CairoSVG" version))
18684 (sha256
18685 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18686 (build-system python-build-system)
18687 (arguments
18688 `(#:phases
18689 (modify-phases %standard-phases
18690 (replace 'check
18691 (lambda _ (invoke "pytest"))))))
18692 (propagated-inputs
18693 `(("python-cairocffi" ,python-cairocffi)
18694 ("python-cssselect2" ,python-cssselect2)
18695 ("python-defusedxml" ,python-defusedxml)
18696 ("python-pillow" ,python-pillow)
18697 ("python-tinycss2" ,python-tinycss2)))
18698 (native-inputs
18699 `(("python-pytest-flake8" ,python-pytest-flake8)
18700 ("python-pytest-isort" ,python-pytest-isort)
18701 ("python-pytest-runner" ,python-pytest-runner)))
18702 (home-page "https://cairosvg.org/")
18703 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18704 (description "CairoSVG is a SVG converter based on Cairo. It can export
18705 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18706 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18707 parsed, the result is drawn to a Cairo surface that can be exported to
18708 qvarious formats: PDF, PostScript, PNG and even SVG.")
18709 (license license:lgpl3+)))
18710
18711 (define-public python-pyphen
18712 (package
18713 (name "python-pyphen")
18714 (version "0.9.5")
18715 (source
18716 (origin
18717 (method url-fetch)
18718 (uri (pypi-uri "Pyphen" version))
18719 (sha256
18720 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18721 (build-system python-build-system)
18722 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18723 ;; embedded set provided by upstream - like Debian does.
18724 (home-page "https://github.com/Kozea/Pyphen")
18725 (synopsis "Pure Python module to hyphenate text")
18726 (description "Pyphen is a pure Python module to hyphenate text using
18727 existing Hunspell hyphenation dictionaries.")
18728 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18729
18730 (define-public python-intelhex
18731 (package
18732 (name "python-intelhex")
18733 (version "2.2.1")
18734 (source
18735 (origin
18736 (method url-fetch)
18737 (uri (pypi-uri "intelhex" version))
18738 (sha256
18739 (base32
18740 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18741 (build-system python-build-system)
18742 (arguments '(#:tests? #f)) ;issue with version
18743 (home-page "https://pypi.org/project/IntelHex/")
18744 (synopsis "Python library for Intel HEX files manipulations")
18745 (description "The Intel HEX file format is widely used in microprocessors
18746 and microcontrollers area (embedded systems etc.) as the de facto standard for
18747 representation of code to be programmed into microelectronic devices. This
18748 package provides an intelhex Python library to read, write, create from
18749 scratch and manipulate data from Intel HEX file format. It also includes
18750 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18751 converters and more, those based on the library itself.")
18752 (license license:bsd-3)))
18753
18754 (define-public python-pykwalify
18755 (package
18756 (name "python-pykwalify")
18757 (version "1.7.0")
18758 (source
18759 (origin
18760 (method url-fetch)
18761 (uri (pypi-uri "pykwalify" version))
18762 (sha256
18763 (base32
18764 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18765 (build-system python-build-system)
18766 (arguments '(#:tests? #f)) ;missing dependencies
18767 (propagated-inputs
18768 `(("python-dateutil" ,python-dateutil)
18769 ("python-docopt" ,python-docopt)
18770 ("python-pyyaml" ,python-pyyaml)))
18771 (home-page "https://github.com/grokzen/pykwalify")
18772 (synopsis
18773 "Python lib/cli for JSON/YAML schema validation")
18774 (description
18775 "This package provides a parser, schema validator, and data binding tool
18776 for YAML and JSON.")
18777 (license license:expat)))
18778
18779 (define-public python-dbusmock
18780 (package
18781 (name "python-dbusmock")
18782 (version "0.18.3")
18783 (source
18784 (origin
18785 (method url-fetch)
18786 (uri (pypi-uri "python-dbusmock" version))
18787 (sha256
18788 (base32
18789 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18790 (build-system python-build-system)
18791 (arguments
18792 '(#:phases
18793 (modify-phases %standard-phases
18794 (add-after 'unpack 'patch-shell-path
18795 (lambda _
18796 (substitute* "tests/test_code.py"
18797 (("/bin/bash") (which "bash")))
18798 #t)))))
18799 (native-inputs
18800 `(;; For tests.
18801 ("dbus" ,dbus) ; for dbus-daemon
18802 ("python-nose" ,python-nose)
18803 ("which" ,which)))
18804 (propagated-inputs
18805 `(("python-dbus" ,python-dbus)
18806 ("python-pygobject" ,python-pygobject)))
18807 (home-page "https://github.com/martinpitt/python-dbusmock")
18808 (synopsis "Python library for mock D-Bus objects")
18809 (description "python-dbusmock allows for the easy creation of mock objects on
18810 D-Bus. This is useful for writing tests for software which talks to D-Bus
18811 services such as upower, systemd, logind, gnome-session or others, and it is
18812 hard (or impossible without root privileges) to set the state of the real
18813 services to what you expect in your tests.")
18814 (license license:lgpl3+)))
18815
18816 (define-public python-ujson
18817 (package
18818 (name "python-ujson")
18819 (version "2.0.3")
18820 (source
18821 (origin
18822 (method url-fetch)
18823 (uri (pypi-uri "ujson" version))
18824 (sha256
18825 (base32
18826 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18827 (modules '((guix build utils)))
18828 (snippet
18829 '(begin (delete-file-recursively "deps") #t))))
18830 (build-system python-build-system)
18831 (arguments
18832 `(#:phases
18833 (modify-phases %standard-phases
18834 (add-after 'unpack 'link-to-system-double-conversion
18835 (lambda* (#:key inputs #:allow-other-keys)
18836 (let ((d-c (assoc-ref inputs "double-conversion")))
18837 (substitute* "setup.py"
18838 (("./deps/double-conversion/double-conversion\"")
18839 (string-append d-c "/include/double-conversion\""))
18840 (("-lstdc++" stdc)
18841 (string-append "-L" d-c "/lib\","
18842 " \"-ldouble-conversion\","
18843 " \"" stdc)))
18844 #t)))
18845 (replace 'check
18846 (lambda* (#:key inputs outputs #:allow-other-keys)
18847 (add-installed-pythonpath inputs outputs)
18848 (invoke "pytest"))))))
18849 (native-inputs
18850 `(("double-conversion" ,double-conversion)
18851 ("python-setuptools-scm" ,python-setuptools-scm)
18852 ("python-pytest" ,python-pytest)))
18853 (home-page "https://github.com/ultrajson/ultrajson")
18854 (synopsis "Ultra fast JSON encoder and decoder for Python")
18855 (description
18856 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18857 bindings for Python 3.")
18858 (license license:bsd-3)))
18859
18860 (define-public python-ujson-1
18861 (package
18862 (inherit python-ujson)
18863 (version "1.35")
18864 (source
18865 (origin
18866 (method url-fetch)
18867 (uri (pypi-uri "ujson" version))
18868 (sha256
18869 (base32
18870 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18871 (arguments
18872 '(#:phases %standard-phases))
18873 (native-inputs '())
18874 (home-page "http://www.esn.me")
18875 (description
18876 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18877 bindings for Python 2.5+ and 3.")))
18878
18879 (define-public python2-ujson-1
18880 (package-with-python2 python-ujson-1))
18881
18882 (define-public python-iocapture
18883 ;; The latest release is more than a year older than this commit.
18884 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18885 (revision "1"))
18886 (package
18887 (name "python-iocapture")
18888 (version "0.1.2")
18889 (source
18890 (origin
18891 (method git-fetch)
18892 (uri (git-reference
18893 (url "https://github.com/oinume/iocapture")
18894 (commit commit)))
18895 (file-name (git-file-name name version))
18896 (sha256
18897 (base32
18898 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18899 (build-system python-build-system)
18900 (arguments
18901 `(#:phases
18902 (modify-phases %standard-phases
18903 (delete 'check)
18904 (add-after 'install 'check
18905 (lambda* (#:key inputs outputs #:allow-other-keys)
18906 (add-installed-pythonpath inputs outputs)
18907 (invoke "py.test" "-v" "tests")
18908 #t)))))
18909 (propagated-inputs
18910 `(("python-flexmock" ,python-flexmock)
18911 ("python-pytest" ,python-pytest)
18912 ("python-pytest-cov" ,python-pytest-cov)
18913 ("python-six" ,python-six)))
18914 (home-page "https://github.com/oinume/iocapture")
18915 (synopsis "Python capturing tool for stdout and stderr")
18916 (description
18917 "This package helps you to capture the standard out (stdout) and the
18918 standard error channel (stderr) in your program.")
18919 (license license:expat))))
18920
18921 (define-public python-argh
18922 ;; There are 21 commits since the latest release containing important
18923 ;; improvements.
18924 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18925 (revision "1"))
18926 (package
18927 (name "python-argh")
18928 (version (git-version "0.26.2" revision commit))
18929 (source
18930 (origin
18931 (method git-fetch)
18932 (uri (git-reference
18933 (url "https://github.com/neithere/argh")
18934 (commit commit)))
18935 (file-name (git-file-name name version))
18936 (sha256
18937 (base32
18938 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18939 (build-system python-build-system)
18940 (propagated-inputs
18941 `(("python-iocapture" ,python-iocapture)
18942 ("python-mock" ,python-mock)
18943 ("python-pytest" ,python-pytest)
18944 ("python-pytest-cov" ,python-pytest-cov)
18945 ("python-pytest-xdist" ,python-pytest-xdist)
18946 ("python-tox" ,python-tox)))
18947 (home-page "https://github.com/neithere/argh/")
18948 (synopsis "Argparse wrapper with natural syntax")
18949 (description
18950 "python-argh is a small library that provides several layers of
18951 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18952 always possible to declare a command with the highest possible (and least
18953 flexible) layer and then tune the behaviour with any of the lower layers
18954 including the native API of @code{python-argparse}.")
18955 (license license:lgpl3+))))
18956
18957 (define-public python-ppft
18958 (package
18959 (name "python-ppft")
18960 (version "1.6.6.1")
18961 (source
18962 (origin
18963 (method url-fetch)
18964 (uri (pypi-uri "ppft" version))
18965 (sha256
18966 (base32
18967 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18968 (build-system python-build-system)
18969 (arguments '(#:tests? #f)) ; there are none
18970 (propagated-inputs
18971 `(("python-six" ,python-six)))
18972 (home-page "https://pypi.org/project/ppft/")
18973 (synopsis "Fork of Parallel Python")
18974 (description
18975 "This package is a fork of Parallel Python. The Parallel Python
18976 module (@code{pp}) provides an easy and efficient way to create
18977 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18978 computers and clusters. It features cross-platform portability and dynamic
18979 load balancing.")
18980 (license license:bsd-3)))
18981
18982 (define-public python-pox
18983 (package
18984 (name "python-pox")
18985 (version "0.2.7")
18986 (source
18987 (origin
18988 (method url-fetch)
18989 (uri (pypi-uri "pox" version))
18990 (sha256
18991 (base32
18992 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18993 (build-system python-build-system)
18994 (arguments
18995 `(#:phases
18996 (modify-phases %standard-phases
18997 (replace 'check
18998 (lambda _
18999 (mkdir-p "/tmp/guix")
19000 (setenv "SHELL" "bash")
19001 (setenv "USERNAME" "guix")
19002 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
19003 (invoke "py.test" "-vv")
19004 #t)))))
19005 (native-inputs
19006 `(("python-pytest" ,python-pytest)
19007 ("which" ,which)))
19008 (home-page "https://pypi.org/project/pox/")
19009 (synopsis "Python utilities for filesystem exploration and automated builds")
19010 (description
19011 "Pox provides a collection of utilities for navigating and manipulating
19012 filesystems. This module is designed to facilitate some of the low level
19013 operating system interactions that are useful when exploring a filesystem on a
19014 remote host. Pox provides Python equivalents of several shell commands such
19015 as @command{which} and @command{find}. These commands allow automated
19016 discovery of what has been installed on an operating system, and where the
19017 essential tools are located.")
19018 (license license:bsd-3)))
19019
19020 (define-public python-pathos
19021 (package
19022 (name "python-pathos")
19023 (version "0.2.5")
19024 (source
19025 (origin
19026 (method url-fetch)
19027 (uri (pypi-uri "pathos" version))
19028 (sha256
19029 (base32
19030 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
19031 (build-system python-build-system)
19032 (arguments
19033 '(#:phases
19034 (modify-phases %standard-phases
19035 (replace 'check
19036 (lambda _
19037 (setenv "PYTHONPATH"
19038 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
19039 (invoke "python" "./tests/__main__.py"))))))
19040 (propagated-inputs
19041 `(("python-dill" ,python-dill)
19042 ("python-multiprocess" ,python-multiprocess)
19043 ("python-pox" ,python-pox)
19044 ("python-ppft" ,python-ppft)))
19045 (native-inputs
19046 `(("python-pytest" ,python-pytest)))
19047 (home-page "https://pypi.org/project/pathos/")
19048 (synopsis
19049 "Parallel graph management and execution in heterogeneous computing")
19050 (description
19051 "Python-pathos is a framework for heterogeneous computing. It provides a
19052 consistent high-level interface for configuring and launching parallel
19053 computations across heterogeneous resources. Python-pathos provides configurable
19054 launchers for parallel and distributed computing, where each launcher contains
19055 the syntactic logic to configure and launch jobs in an execution environment.")
19056 (license license:bsd-3)))
19057
19058 (define-public python-flit
19059 (package
19060 (name "python-flit")
19061 (version "2.1.0")
19062 (source
19063 (origin
19064 (method url-fetch)
19065 (uri (pypi-uri "flit" version))
19066 (sha256
19067 (base32
19068 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
19069 (build-system python-build-system)
19070 (arguments
19071 `(#:tests? #f)) ; XXX: Check requires network access.
19072 (home-page "https://flit.readthedocs.io/")
19073 (synopsis
19074 "Simple packaging tool for simple packages")
19075 (description
19076 "Flit is a simple way to put Python packages and modules on PyPI. Flit
19077 packages a single importable module or package at a time, using the import
19078 name as the name on PyPI. All subpackages and data files within a package
19079 are included automatically.")
19080 (license license:bsd-3)))
19081
19082 (define-public python-pathtools
19083 (package
19084 (name "python-pathtools")
19085 (version "0.1.2")
19086 (source
19087 (origin
19088 (method url-fetch)
19089 (uri (pypi-uri "pathtools" version))
19090 (sha256
19091 (base32
19092 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
19093 (build-system python-build-system)
19094 (home-page
19095 "https://github.com/gorakhargosh/pathtools")
19096 (synopsis "Path utilities for Python")
19097 (description "Pattern matching and various utilities for file systems
19098 paths.")
19099 (license license:expat)))
19100
19101 (define-public python-fastentrypoints
19102 (package
19103 (name "python-fastentrypoints")
19104 (version "0.12")
19105 (source
19106 (origin
19107 (method url-fetch)
19108 (uri (pypi-uri "fastentrypoints" version))
19109 (sha256
19110 (base32
19111 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
19112 (build-system python-build-system)
19113 (home-page
19114 "https://github.com/ninjaaron/fast-entry_points")
19115 (synopsis
19116 "Makes entry_points specified in setup.py load more quickly")
19117 (description
19118 "Using entry_points in your setup.py makes scripts that start really
19119 slowly because it imports pkg_resources. This package allows such setup
19120 scripts to load entry points more quickly.")
19121 (license license:bsd-3)))
19122
19123 (define-public python-funcparserlib
19124 (package
19125 (name "python-funcparserlib")
19126 (version "0.3.6")
19127 (source
19128 (origin
19129 (method url-fetch)
19130 (uri (pypi-uri "funcparserlib" version))
19131 (sha256
19132 (base32
19133 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
19134 (native-inputs
19135 `(("python-tox" ,python-tox)))
19136 (arguments
19137 `(#:phases
19138 (modify-phases %standard-phases
19139 (replace 'check
19140 (lambda _
19141 (invoke "tox"))))))
19142 (build-system python-build-system)
19143 (home-page
19144 "https://github.com/vlasovskikh/funcparserlib")
19145 (synopsis
19146 "Recursive descent parsing library based on functional combinators")
19147 (description
19148 "This package is a recursive descent parsing library for Python based on
19149 functional combinators. Parser combinators are just higher-order functions
19150 that take parsers as their arguments and return them as result values.")
19151 (license license:expat)))
19152
19153 (define-public python-speg
19154 (package
19155 (name "python-speg")
19156 (version "0.3")
19157 (source
19158 (origin
19159 (method url-fetch)
19160 (uri (pypi-uri "speg" version ".zip"))
19161 (sha256
19162 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
19163 (arguments
19164 `(#:tests? #f)) ;FIXME: tests fail, not sure why
19165 (native-inputs
19166 `(("unzip" ,unzip)))
19167 (build-system python-build-system)
19168 (home-page "https://github.com/avakar/speg")
19169 (synopsis "PEG-based parser interpreter with memoization")
19170 (description "This package is a PEG-based parser and interpreter with
19171 memoization.")
19172 (license license:expat)))
19173
19174 (define-public python-cson
19175 (package
19176 (name "python-cson")
19177 (version "0.8")
19178 (source
19179 (origin
19180 (method url-fetch)
19181 (uri (pypi-uri "cson" version))
19182 (sha256
19183 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
19184 (build-system python-build-system)
19185 (propagated-inputs
19186 `(("python-speg" ,python-speg)))
19187 (home-page "https://github.com/avakar/pycson")
19188 (synopsis "Parser for Coffeescript Object Notation (CSON)")
19189 (description "This package is a parser for Coffeescript Object
19190 Notation (CSON).")
19191 (license license:expat)))
19192
19193 (define-public python-asynctest
19194 (package
19195 (name "python-asynctest")
19196 (version "0.13.0")
19197 (source
19198 (origin
19199 (method url-fetch)
19200 (uri (pypi-uri "asynctest" version))
19201 (sha256
19202 (base32
19203 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
19204 (build-system python-build-system)
19205 (arguments
19206 '(#:phases
19207 (modify-phases %standard-phases
19208 (replace 'check
19209 (lambda _
19210 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
19211 (add-after 'unpack 'disable-tests
19212 (lambda* _
19213 (substitute* "test/test_selector.py"
19214 ;; XXX: This test fails for unknown reason inside the build
19215 ;; environment.
19216 (("def test_events_watched_outside_test_are_ignored")
19217 "@unittest.skip('disabled by guix')
19218 def test_events_watched_outside_test_are_ignored")))))))
19219 (home-page "https://github.com/Martiusweb/asynctest")
19220 (synopsis "Extension of unittest for testing asyncio libraries")
19221 (description
19222 "The package asynctest is built on top of the standard unittest module
19223 and cuts down boilerplate code when testing libraries for asyncio.")
19224 (license license:asl2.0)))
19225
19226 (define-public python-aionotify
19227 (package
19228 (name "python-aionotify")
19229 (version "0.2.0")
19230 (source
19231 (origin
19232 ;; Source tarball on PyPi lacks tests
19233 (method git-fetch)
19234 (uri (git-reference
19235 (url "https://github.com/rbarrois/aionotify")
19236 (commit (string-append "v" version))))
19237 (file-name (git-file-name name version))
19238 (sha256
19239 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
19240 (build-system python-build-system)
19241 (native-inputs `(("python-asynctest" ,python-asynctest)))
19242 (home-page "https://github.com/rbarrois/aionotify")
19243 (synopsis "Asyncio-powered inotify library")
19244 (description
19245 "@code{aionotify} is a simple, asyncio-based inotify library.")
19246 (license license:bsd-3)))
19247
19248 (define-public python-forbiddenfruit
19249 (package
19250 (name "python-forbiddenfruit")
19251 (version "0.1.3")
19252 (source
19253 (origin
19254 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
19255 (method git-fetch)
19256 (uri (git-reference
19257 (url "https://github.com/clarete/forbiddenfruit")
19258 (commit version)))
19259 (file-name (git-file-name name version))
19260 (sha256
19261 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
19262 (build-system python-build-system)
19263 (arguments
19264 '(#:phases
19265 (modify-phases %standard-phases
19266 (replace 'check
19267 (lambda _
19268 (invoke "make" "SKIP_DEPS=1"))))))
19269 (native-inputs
19270 `(("python-nose" ,python-nose)
19271 ("python-coverage" ,python-coverage)))
19272 (home-page "https://github.com/clarete/forbiddenfruit")
19273 (synopsis "Patch python built-in objects")
19274 (description "This project allows Python code to extend built-in types.")
19275 (license (list license:gpl3+ license:expat))))
19276
19277 (define-public python-shouldbe
19278 (package
19279 (name "python-shouldbe")
19280 (version "0.1.2")
19281 (source
19282 (origin
19283 (method url-fetch)
19284 (uri (pypi-uri "shouldbe" version))
19285 (sha256
19286 (base32
19287 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
19288 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
19289 (build-system python-build-system)
19290 (propagated-inputs
19291 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
19292 (native-inputs
19293 `(("python-nose" ,python-nose)))
19294 (home-page "https://github.com/directxman12/should_be")
19295 (synopsis "Python Assertion Helpers inspired by Shouldly")
19296 (description
19297 "Python Assertion Helpers inspired by Shouldly.")
19298 (license license:isc)))
19299
19300 (define-public python-k5test
19301 (package
19302 (name "python-k5test")
19303 (version "0.9.2")
19304 (source
19305 (origin
19306 (method url-fetch)
19307 (uri (pypi-uri "k5test" version))
19308 (sha256
19309 (base32
19310 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
19311 (build-system python-build-system)
19312 (propagated-inputs
19313 `(("python-six" ,python-six)
19314 ;; `which`, `kadmin.local` binaries called inside library
19315 ("which" ,which)
19316 ("mit-krb5" ,mit-krb5)))
19317 (native-inputs `(("mit-krb5" ,mit-krb5)))
19318 (arguments
19319 '(#:phases
19320 (modify-phases %standard-phases
19321 (add-after 'unpack 'patch-paths
19322 (lambda* _
19323 (substitute* "k5test/realm.py"
19324 (("'kadmin_local'") "'kadmin.local'")))))))
19325 (home-page "https://github.com/pythongssapi/k5test")
19326 (synopsis "Library for setting up self-contained Kerberos 5 environments")
19327 (description
19328 "@code{k5test} is a library for setting up self-contained Kerberos 5
19329 environments, and running Python unit tests inside those environments. It is
19330 based on the file of the same name found alongside the MIT Kerberos 5 unit
19331 tests.")
19332 (license license:isc)))
19333
19334 (define-public python-gssapi
19335 (package
19336 (name "python-gssapi")
19337 (version "1.6.5")
19338 (source
19339 (origin
19340 (method url-fetch)
19341 (uri (pypi-uri "gssapi" version))
19342 (sha256
19343 (base32
19344 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
19345 (build-system python-build-system)
19346 (propagated-inputs
19347 `(("python-decorator" ,python-decorator)
19348 ("python-six" ,python-six)))
19349 (inputs
19350 `(("mit-krb5" ,mit-krb5)))
19351 ;; for tests
19352 (native-inputs
19353 `(("python-shouldbe" ,python-shouldbe)
19354 ("python-parameterized" ,python-parameterized)
19355 ("python-k5test" ,python-k5test)
19356 ("python-nose" ,python-nose)))
19357 (home-page "https://github.com/pythongssapi/python-gssapi")
19358 (synopsis "Python GSSAPI Wrapper")
19359 (description
19360 "Python-GSSAPI provides both low-level and high level wrappers around the
19361 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
19362 also be useable with other GSSAPI mechanisms.")
19363 (license license:isc)))
19364
19365 (define-public python-check-manifest
19366 (package
19367 (name "python-check-manifest")
19368 (version "0.37")
19369 (source
19370 (origin
19371 (method url-fetch)
19372 (uri (pypi-uri "check-manifest" version))
19373 (sha256
19374 (base32
19375 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
19376 (build-system python-build-system)
19377 (native-inputs
19378 `(("python-mock" ,python-mock)
19379 ("git" ,git)))
19380 (home-page "https://github.com/mgedmin/check-manifest")
19381 (synopsis "Check MANIFEST.in in a Python source package for completeness")
19382 (description "Python package can include a MANIFEST.in file to help with
19383 sending package files to the Python Package Index. This package checks that
19384 file to ensure it completely and accurately describes your project.")
19385 (license license:expat)))
19386
19387 (define-public python-android-stringslib
19388 (package
19389 (name "python-android-stringslib")
19390 (version "0.1.2")
19391 (source
19392 (origin
19393 (method git-fetch)
19394 (uri (git-reference
19395 (url "https://framagit.org/tyreunom/python-android-strings-lib")
19396 (commit (string-append "v" version))))
19397 (file-name (git-file-name name version))
19398 (sha256
19399 (base32
19400 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
19401 (build-system python-build-system)
19402 (arguments
19403 `(#:tests? #f))
19404 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
19405 (synopsis "Android strings.xml support")
19406 (description "Android Strings Lib provides support for android's strings.xml
19407 files. These files are used to translate strings in android apps.")
19408 (license license:expat)))
19409
19410 (define-public python-watchdog
19411 (package
19412 (name "python-watchdog")
19413 (version "0.9.0")
19414 (source
19415 (origin
19416 (method url-fetch)
19417 (uri (pypi-uri "watchdog" version))
19418 (sha256
19419 (base32
19420 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
19421 (build-system python-build-system)
19422 (arguments
19423 `(#:phases
19424 (modify-phases %standard-phases
19425 (add-before 'check 'remove-failing
19426 (lambda _
19427 (delete-file "tests/test_inotify_buffer.py")
19428 (delete-file "tests/test_snapshot_diff.py")
19429 #t)))))
19430 (propagated-inputs
19431 `(("python-argh" ,python-argh)
19432 ("python-pathtools" ,python-pathtools)
19433 ("python-pyyaml" ,python-pyyaml)))
19434 (native-inputs
19435 `(("python-pytest-cov" ,python-pytest-cov)
19436 ("python-pytest-timeout" ,python-pytest-timeout)))
19437 (home-page "https://github.com/gorakhargosh/watchdog")
19438 (synopsis "Filesystem events monitoring")
19439 (description "This package provides a way to monitor filesystem events
19440 such as a file modification and trigger an action. This is similar to inotify,
19441 but portable.")
19442 (license license:asl2.0)))
19443
19444 (define-public python-wget
19445 (package
19446 (name "python-wget")
19447 (version "3.2")
19448 (source
19449 (origin
19450 (method url-fetch)
19451 (uri (pypi-uri "wget" version ".zip"))
19452 (sha256
19453 (base32
19454 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19455 (build-system python-build-system)
19456 (native-inputs `(("unzip" ,unzip)))
19457 (home-page "https://bitbucket.org/techtonik/python-wget/")
19458 (synopsis "Pure Python download utility")
19459 (description "The python-wget library provides an API to download files
19460 with features similar to the @command{wget} utility.")
19461 (license license:unlicense)))
19462
19463 (define-public offlate
19464 (package
19465 (name "offlate")
19466 (version "0.5")
19467 (source
19468 (origin
19469 (method git-fetch)
19470 (uri (git-reference
19471 (url "https://framagit.org/tyreunom/offlate")
19472 (commit version)))
19473 (file-name (git-file-name name version))
19474 (sha256
19475 (base32
19476 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19477 (build-system python-build-system)
19478 (arguments
19479 ;; No tests
19480 `(#:tests? #f))
19481 (propagated-inputs
19482 `(("python-android-stringslib" ,python-android-stringslib)
19483 ("python-dateutil" ,python-dateutil)
19484 ("python-gitlab" ,python-gitlab)
19485 ("python-lxml" ,python-lxml)
19486 ("python-polib" ,python-polib)
19487 ("python-pyenchant" ,python-pyenchant)
19488 ("python-pygit2" ,python-pygit2)
19489 ("python-pygithub" ,python-pygithub)
19490 ("python-pyqt" ,python-pyqt)
19491 ("python-requests" ,python-requests)
19492 ("python-ruamel.yaml" ,python-ruamel.yaml)
19493 ("python-translation-finder" ,python-translation-finder)
19494 ("python-watchdog" ,python-watchdog)))
19495 (native-inputs
19496 `(("qttools" ,qttools)))
19497 (home-page "https://framagit.org/tyreunom/offlate")
19498 (synopsis "Offline translation interface for online translation tools")
19499 (description "Offlate offers a unified interface for different translation
19500 file formats, as well as many different online translation platforms. You can
19501 use it to get work from online platforms, specialized such as the Translation
19502 Project, or not such a gitlab instance when your upstream doesn't use any
19503 dedicated platform. The tool proposes a unified interface for any format and
19504 an upload option to send your work back to the platform.")
19505 (license license:gpl3+)))
19506
19507 (define-public python-titlecase
19508 (package
19509 (name "python-titlecase")
19510 (version "0.12.0")
19511 (source
19512 (origin
19513 (method url-fetch)
19514 (uri (pypi-uri "titlecase" version))
19515 (sha256
19516 (base32
19517 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19518 (build-system python-build-system)
19519 (native-inputs
19520 `(("python-nose" ,python-nose)))
19521 (home-page "https://github.com/ppannuto/python-titlecase")
19522 (synopsis "Capitalize strings similar to book titles")
19523 (description
19524 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19525 It capitalizes (predominantly English) strings in a way that is similar to
19526 book titles, using the New York Times Manual of Style to leave certain words
19527 lowercase.")
19528 (license license:expat)))
19529
19530 (define-public python-pypng
19531 (package
19532 (name "python-pypng")
19533 (version "0.0.20")
19534 (source
19535 (origin
19536 (method url-fetch)
19537 (uri (pypi-uri "pypng" version))
19538 (sha256
19539 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19540 (build-system python-build-system)
19541 (home-page "https://github.com/drj11/pypng")
19542 (synopsis "Pure Python PNG image encoder/decoder")
19543 (description
19544 "The PyPNG module implements support for PNG images. It reads and writes
19545 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19546 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19547 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19548 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19549 A number of optional chunks can be specified (when writing) and
19550 understood (when reading): tRNS, bKGD, gAMA.
19551
19552 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19553 aim at being a replacement or competitor. Its strength lies in fine-grained
19554 extensive support of PNG features. It can also read and write Netpbm PAM
19555 files, with a focus on its use as an intermediate format for implementing
19556 custom PNG processing.")
19557 (license license:expat)))
19558
19559 (define-public python-fuzzywuzzy
19560 (package
19561 (name "python-fuzzywuzzy")
19562 (version "0.18.0")
19563 (source
19564 (origin
19565 (method url-fetch)
19566 (uri (pypi-uri "fuzzywuzzy" version))
19567 (sha256
19568 (base32
19569 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19570 (build-system python-build-system)
19571 (native-inputs
19572 `(("python-hypothesis" ,python-hypothesis)
19573 ("python-pycodestyle" ,python-pycodestyle)
19574 ("python-pytest" ,python-pytest)))
19575 (propagated-inputs
19576 `(("python-levenshtein" ,python-levenshtein)))
19577 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19578 (synopsis "Fuzzy string matching in Python")
19579 (description "Approximate string matching using
19580 @emph{Levenshtein Distance} to calculate the differences between
19581 sequences.")
19582 (license license:gpl2)))
19583
19584 (define-public python2-fuzzywuzzy
19585 (package-with-python2 python-fuzzywuzzy))
19586
19587 (define-public python-block-tracing
19588 (package
19589 (name "python-block-tracing")
19590 (version "1.0.1")
19591 (source
19592 (origin
19593 (method url-fetch)
19594 (uri (pypi-uri "block_tracing" version))
19595 (sha256
19596 (base32
19597 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19598 (build-system python-build-system)
19599 (arguments '(#:tests? #f)) ; no tests
19600 (home-page "https://github.com/rianhunter/block_tracing")
19601 (synopsis "Protect process memory")
19602 (description
19603 "@code{block_tracing} is a tiny Python library that can be used to
19604 prevent debuggers and other applications from inspecting the memory within
19605 your process.")
19606 (license license:expat)))
19607
19608 (define-public python-gcovr
19609 (package
19610 (name "python-gcovr")
19611 (version "4.2")
19612 (source
19613 (origin
19614 (method url-fetch)
19615 (uri (pypi-uri "gcovr" version))
19616 (sha256
19617 (base32
19618 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19619 (build-system python-build-system)
19620 (propagated-inputs
19621 `(("python-lxml" ,python-lxml)
19622 ("python-jinja2" ,python-jinja2)))
19623 (home-page "https://gcovr.com/")
19624 (synopsis "Utility for generating code coverage results")
19625 (description
19626 "Gcovr provides a utility for managing the use of the GNU gcov
19627 utility and generating summarized code coverage results. It is inspired
19628 by the Python coverage.py package, which provides a similar utility for
19629 Python.")
19630 (license license:bsd-3)))
19631
19632 (define-public python-owslib
19633 (package
19634 (name "python-owslib")
19635 (version "0.19.2")
19636 (source
19637 (origin
19638 (method url-fetch)
19639 (uri (pypi-uri "OWSLib" version))
19640 (sha256
19641 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19642 (build-system python-build-system)
19643 (arguments
19644 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19645 (synopsis "Interface for Open Geospatial Consortium web service")
19646 (description
19647 "OWSLib is a Python package for client programming with Open Geospatial
19648 Consortium (OGC) web service (hence OWS) interface standards, and their related
19649 content models.")
19650 (home-page "https://geopython.github.io/OWSLib/")
19651 (license license:bsd-3)))
19652
19653 (define-public python-docusign-esign
19654 (package
19655 (name "python-docusign-esign")
19656 (version "3.1.0")
19657 (source (origin
19658 (method url-fetch)
19659 (uri (pypi-uri "docusign_esign" version))
19660 (sha256
19661 (base32
19662 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19663 (build-system python-build-system)
19664 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19665 (arguments `(#:tests? #f))
19666 (propagated-inputs
19667 `(("python-certifi", python-certifi)
19668 ("python-six", python-six)
19669 ("python-dateutil", python-dateutil)
19670 ("python-urllib3", python-urllib3)
19671 ("python-pyjwt", python-pyjwt)
19672 ("python-cryptography", python-cryptography)
19673 ("python-nose", python-nose)))
19674 (synopsis "DocuSign Python Client")
19675 (description "The Official DocuSign Python Client Library used to interact
19676 with the eSign REST API. Send, sign, and approve documents using this client.")
19677 (home-page "https://www.docusign.com/devcenter")
19678 (license license:expat)))
19679
19680 (define-public python-xattr
19681 (package
19682 (name "python-xattr")
19683 (version "0.9.7")
19684 (source
19685 (origin
19686 (method url-fetch)
19687 (uri (pypi-uri "xattr" version))
19688 (sha256
19689 (base32
19690 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19691 (build-system python-build-system)
19692 (propagated-inputs
19693 `(("python-cffi" ,python-cffi)))
19694 (home-page "https://github.com/xattr/xattr")
19695 (synopsis
19696 "Python wrapper for extended filesystem attributes")
19697 (description "This package provides a Python wrapper for using extended
19698 filesystem attributes. Extended attributes extend the basic attributes of files
19699 and directories in the file system. They are stored as name:data pairs
19700 associated with file system objects (files, directories, symlinks, etc).")
19701 (license license:expat)))
19702
19703 (define-public python-json-logger
19704 (package
19705 (name "python-json-logger")
19706 (version "0.1.11")
19707 (source
19708 (origin
19709 (method url-fetch)
19710 (uri (pypi-uri "python-json-logger" version))
19711 (sha256
19712 (base32
19713 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19714 (build-system python-build-system)
19715 (home-page
19716 "https://github.com/madzak/python-json-logger")
19717 (synopsis "JSON log formatter in Python")
19718 (description "This library allows standard Python logging to output log data
19719 as JSON objects. With JSON we can make our logs more readable by machines and
19720 we can stop writing custom parsers for syslog-type records.")
19721 (license license:bsd-3)))
19722
19723 (define-public python-daiquiri
19724 (package
19725 (name "python-daiquiri")
19726 (version "2.1.1")
19727 (source
19728 (origin
19729 (method url-fetch)
19730 (uri (pypi-uri "daiquiri" version))
19731 (sha256
19732 (base32
19733 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19734 (build-system python-build-system)
19735 (propagated-inputs
19736 `(("python-json-logger" ,python-json-logger)))
19737 (native-inputs
19738 `(("python-mock" ,python-mock)
19739 ("python-pytest" ,python-pytest)
19740 ("python-setuptools-scm" ,python-setuptools-scm)
19741 ("python-six" ,python-six)))
19742 (home-page "https://github.com/jd/daiquiri")
19743 (synopsis
19744 "Library to configure Python logging easily")
19745 (description "The daiquiri library provides an easy way to configure
19746 logging in Python. It also provides some custom formatters and handlers.")
19747 (license license:asl2.0)))
19748
19749 (define-public python-pifpaf
19750 (package
19751 (name "python-pifpaf")
19752 (version "2.4.0")
19753 (source
19754 (origin
19755 (method url-fetch)
19756 (uri (pypi-uri "pifpaf" version))
19757 (sha256
19758 (base32
19759 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19760 (build-system python-build-system)
19761 (arguments
19762 `(#:tests? #f))
19763 (propagated-inputs
19764 `(("python-click" ,python-click)
19765 ("python-daiquiri" ,python-daiquiri)
19766 ("python-fixtures" ,python-fixtures)
19767 ("python-jinja2" ,python-jinja2)
19768 ("python-pbr" ,python-pbr)
19769 ("python-psutil" ,python-psutil)
19770 ("python-six" ,python-six)
19771 ("python-xattr" ,python-xattr)))
19772 (native-inputs
19773 `(("python-mock" ,python-mock)
19774 ("python-os-testr" ,python-os-testr)
19775 ("python-requests" ,python-requests)
19776 ("python-testrepository" ,python-testrepository)
19777 ("python-testtools" ,python-testtools)))
19778 (home-page "https://github.com/jd/pifpaf")
19779 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19780 (description "Pifpaf is a suite of fixtures and a command-line tool that
19781 starts and stops daemons for a quick throw-away usage. This is typically
19782 useful when needing these daemons to run integration testing. It originally
19783 evolved from its precursor @code{overtest}.")
19784 (license license:asl2.0)))
19785
19786 (define-public python-pytest-check-links
19787 (package
19788 (name "python-pytest-check-links")
19789 (version "0.3.0")
19790 (source
19791 (origin
19792 (method url-fetch)
19793 ;; URI uses underscores
19794 (uri (pypi-uri "pytest_check_links" version))
19795 (sha256
19796 (base32
19797 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19798 (build-system python-build-system)
19799 (propagated-inputs
19800 `(("python-docutils" ,python-docutils)
19801 ("python-html5lib" ,python-html5lib)
19802 ("python-nbconvert" ,python-nbconvert)
19803 ("python-nbformat" ,python-nbformat)
19804 ("python-pytest" ,python-pytest)
19805 ("python-six" ,python-six)))
19806 (native-inputs
19807 `(("python-pbr-minimal" ,python-pbr-minimal)))
19808 (home-page "https://github.com/minrk/pytest-check-links")
19809 (synopsis "Check links in files")
19810 (description "This package provides a pytest plugin that checks URLs for
19811 HTML-containing files.")
19812 (license license:bsd-3)))
19813
19814 (define-public python-json5
19815 (package
19816 (name "python-json5")
19817 (version "0.8.5")
19818 (source
19819 (origin
19820 ;; sample.json5 is missing from PyPi source tarball
19821 (method git-fetch)
19822 (uri (git-reference
19823 (url "https://github.com/dpranke/pyjson5")
19824 (commit (string-append "v" version))))
19825 (file-name (git-file-name name version))
19826 (sha256
19827 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19828 (build-system python-build-system)
19829 (home-page "https://github.com/dpranke/pyjson5")
19830 (synopsis
19831 "Python implementation of the JSON5 data format")
19832 (description
19833 "JSON5 extends the JSON data interchange format to make it slightly more
19834 usable as a configuration language. This Python package implements parsing and
19835 dumping of JSON5 data structures.")
19836 (license license:asl2.0)))
19837
19838 (define-public python-frozendict
19839 (package
19840 (name "python-frozendict")
19841 (version "1.2")
19842 (source
19843 (origin
19844 (method url-fetch)
19845 (uri (pypi-uri "frozendict" version))
19846 (sha256
19847 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19848 (build-system python-build-system)
19849 (home-page "https://github.com/slezica/python-frozendict")
19850 (synopsis "Simple immutable mapping for Python")
19851 (description
19852 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19853 implements the complete mapping interface. It can be used as a drop-in
19854 replacement for dictionaries where immutability is desired.")
19855 (license license:expat)))
19856
19857 (define-public python-unpaddedbase64
19858 (package
19859 (name "python-unpaddedbase64")
19860 (version "1.1.0")
19861 (source
19862 (origin
19863 (method git-fetch)
19864 (uri (git-reference
19865 (url "https://github.com/matrix-org/python-unpaddedbase64")
19866 (commit (string-append "v" version))))
19867 (file-name (git-file-name name version))
19868 (sha256
19869 (base32
19870 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19871 (build-system python-build-system)
19872 (home-page "https://pypi.org/project/unpaddedbase64/")
19873 (synopsis "Encode and decode Base64 without “=” padding")
19874 (description
19875 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19876 using “=” characters. However this conveys no benefit so many protocols
19877 choose to use Base64 without the “=” padding.")
19878 (license license:asl2.0)))
19879
19880 (define-public python-py-cpuinfo
19881 (package
19882 (name "python-py-cpuinfo")
19883 (version "5.0.0")
19884 (source
19885 (origin
19886 (method url-fetch)
19887 (uri (pypi-uri "py-cpuinfo" version))
19888 (sha256
19889 (base32
19890 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
19891 (build-system python-build-system)
19892 (home-page "https://github.com/workhorsy/py-cpuinfo")
19893 (synopsis "Get CPU info with Python")
19894 (description
19895 "This Python module returns the CPU info by using the best sources of
19896 information for your operating system.")
19897 (license license:expat)))
19898
19899 (define-public python-canonicaljson
19900 (package
19901 (name "python-canonicaljson")
19902 (version "1.1.4")
19903 (source
19904 (origin
19905 (method url-fetch)
19906 (uri (pypi-uri "canonicaljson" version))
19907 (sha256
19908 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19909 (build-system python-build-system)
19910 (propagated-inputs
19911 `(("python-six" ,python-six)
19912 ("python-frozendict" ,python-frozendict)
19913 ("python-simplejson" ,python-simplejson)))
19914 (home-page "https://github.com/matrix-org/python-canonicaljson")
19915 (synopsis "Canonical JSON")
19916 (description
19917 "Deterministically encode JSON.
19918
19919 @itemize
19920 @item Encodes objects and arrays as RFC 7159 JSON.
19921 @item Sorts object keys so that you get the same result each time.
19922 @item Has no insignificant whitespace to make the output as small as possible.
19923 @item Escapes only the characters that must be escaped, U+0000 to
19924 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19925 @item Uses the shortest escape sequence for each escaped character.
19926 @item Encodes the JSON as UTF-8.
19927 @item Can encode frozendict immutable dictionaries.
19928 @end itemize")
19929 (license license:asl2.0)))
19930
19931 (define-public python-signedjson
19932 (package
19933 (name "python-signedjson")
19934 (version "1.1.1")
19935 (source
19936 (origin
19937 (method url-fetch)
19938 (uri (pypi-uri "signedjson" version))
19939 (sha256
19940 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19941 (build-system python-build-system)
19942 (propagated-inputs
19943 `(("python-canonicaljson" ,python-canonicaljson)
19944 ("python-importlib-metadata" ,python-importlib-metadata)
19945 ("python-pynacl" ,python-pynacl)
19946 ("python-typing-extensions" ,python-typing-extensions)
19947 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19948 (native-inputs
19949 `(("python-setuptools-scm" ,python-setuptools-scm)))
19950 (home-page "https://github.com/matrix-org/python-signedjson")
19951 (synopsis "Sign JSON objects with ED25519 signatures")
19952 (description
19953 "Sign JSON objects with ED25519 signatures.
19954
19955 @itemize
19956 @item More than one entity can sign the same object.
19957 @item Each entity can sign the object with more than one key making it easier to
19958 rotate keys
19959 @item ED25519 can be replaced with a different algorithm.
19960 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19961 key.
19962 @end itemize")
19963 (license license:asl2.0)))
19964
19965 (define-public python-daemonize
19966 (package
19967 (name "python-daemonize")
19968 (version "2.5.0")
19969 (source
19970 (origin
19971 (method url-fetch)
19972 (uri (pypi-uri "daemonize" version))
19973 (sha256
19974 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19975 (build-system python-build-system)
19976 (home-page "https://github.com/thesharp/daemonize")
19977 (synopsis "Library for writing system daemons in Python")
19978 (description "Daemonize is a library for writing system daemons in Python.")
19979 (license license:expat)))
19980
19981 (define-public python-pymacaroons
19982 (package
19983 (name "python-pymacaroons")
19984 (version "0.13.0")
19985 (source
19986 (origin
19987 (method url-fetch)
19988 (uri (pypi-uri "pymacaroons" version))
19989 (sha256
19990 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19991 (build-system python-build-system)
19992 (propagated-inputs
19993 `(("python-six" ,python-six)
19994 ("python-pynacl" ,python-pynacl)))
19995 (home-page "https://github.com/ecordell/pymacaroons")
19996 (synopsis "Python Macaroon Library")
19997 (description
19998 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19999 tokens, macaroons embed caveats that define specific authorization
20000 requirements for the target service, the service that issued the root macaroon
20001 and which is capable of verifying the integrity of macaroons it receives.
20002
20003 Macaroons allow for delegation and attenuation of authorization. They are
20004 simple and fast to verify, and decouple authorization policy from the
20005 enforcement of that policy.")
20006 (license license:expat)))
20007
20008 (define-public python-ldap3
20009 (package
20010 (name "python-ldap3")
20011 (version "2.7")
20012 (home-page "https://github.com/cannatag/ldap3")
20013 (source
20014 (origin
20015 (method git-fetch)
20016 (uri (git-reference (url home-page)
20017 (commit (string-append "v" version))))
20018 (file-name (git-file-name name version))
20019 (sha256
20020 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
20021 (build-system python-build-system)
20022 (arguments
20023 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
20024 #:phases (modify-phases %standard-phases
20025 (replace 'check
20026 (lambda* (#:key tests? #:allow-other-keys)
20027 (when tests?
20028 (invoke "nosetests" "-s" "test"))
20029 #t)))))
20030 (native-inputs
20031 `(("python-nose" ,python-nose)))
20032 (propagated-inputs
20033 `(("python-gssapi" ,python-gssapi)
20034 ("python-pyasn1" ,python-pyasn1)))
20035 (synopsis "Python LDAP client")
20036 (description
20037 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
20038 library.")
20039 (license license:lgpl3+)))
20040
20041 (define-public python-boltons
20042 (package
20043 (name "python-boltons")
20044 (version "20.0.0")
20045 (source
20046 (origin
20047 (method url-fetch)
20048 (uri (pypi-uri "boltons" version))
20049 (sha256
20050 (base32
20051 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
20052 (build-system python-build-system)
20053 (home-page "https://github.com/mahmoud/boltons")
20054 (synopsis "Extensions to the Python standard library")
20055 (description
20056 "Boltons is a set of over 230 pure-Python utilities in the same spirit
20057 as — and yet conspicuously missing from — the standard library, including:
20058
20059 @itemize
20060 @item Atomic file saving, bolted on with fileutils
20061 @item A highly-optimized OrderedMultiDict, in dictutils
20062 @item Two types of PriorityQueue, in queueutils
20063 @item Chunked and windowed iteration, in iterutils
20064 @item Recursive data structure iteration and merging, with iterutils.remap
20065 @item Exponential backoff functionality, including jitter, through
20066 iterutils.backoff
20067 @item A full-featured TracebackInfo type, for representing stack traces, in
20068 tbutils
20069 @end itemize")
20070 (license license:bsd-3)))
20071
20072 (define-public python-eliot
20073 (package
20074 (name "python-eliot")
20075 (version "1.12.0")
20076 (source
20077 (origin
20078 (method url-fetch)
20079 (uri (pypi-uri "eliot" version))
20080 (sha256
20081 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
20082 (build-system python-build-system)
20083 (arguments
20084 `(#:phases
20085 (modify-phases %standard-phases
20086 (add-after 'unpack 'remove-journald-support
20087 (lambda _
20088 (for-each delete-file
20089 '("eliot/tests/test_journald.py"
20090 "eliot/journald.py"))
20091 #t))
20092 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
20093 ;; remove command-line tool's tests. TODO eliot-prettyprint should
20094 ;; be installed and these tests should pass.
20095 (lambda _
20096 (delete-file "eliot/tests/test_prettyprint.py")
20097 #t)))))
20098 (propagated-inputs
20099 `(("python-boltons" ,python-boltons)
20100 ("python-pyrsistent" ,python-pyrsistent)
20101 ("python-six" ,python-six)
20102 ("python-zope-interface" ,python-zope-interface)))
20103 (native-inputs
20104 `(("python-black" ,python-black)
20105 ("python-coverage" ,python-coverage)
20106 ("python-dask" ,python-dask)
20107 ("python-flake8" ,python-flake8)
20108 ("python-hypothesis" ,python-hypothesis)
20109 ("python-pytest" ,python-pytest)
20110 ("python-setuptools" ,python-setuptools)
20111 ("python-sphinx" ,python-sphinx)
20112 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
20113 ("python-testtools" ,python-testtools)
20114 ("python-twine" ,python-twine)
20115 ("python-twisted" ,python-twisted)))
20116 (home-page "https://github.com/itamarst/eliot/")
20117 (synopsis "Eliot: the logging system that tells you why it happened")
20118 (description
20119 "@dfn{eliot} is a Python logging system that outputs causal chains of
20120 actions: actions can spawn other actions, and eventually they either succeed
20121 or fail. The resulting logs tell you the story of what your software did: what
20122 happened, and what caused it.")
20123 (license license:asl2.0)))
20124
20125 (define-public python-pem
20126 (package
20127 (name "python-pem")
20128 (version "20.1.0")
20129 (source
20130 (origin
20131 (method url-fetch)
20132 (uri (pypi-uri "pem" version))
20133 (sha256
20134 (base32
20135 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
20136 (build-system python-build-system)
20137 (native-inputs
20138 `(("python-certifi" ,python-certifi)
20139 ("python-coverage" ,python-coverage)
20140 ("python-pretend" ,python-pretend)
20141 ("python-pyopenssl" ,python-pyopenssl)
20142 ("python-pytest" ,python-pytest)
20143 ("python-sphinx" ,python-sphinx)
20144 ("python-twisted" ,python-twisted)))
20145 (home-page "https://pem.readthedocs.io/")
20146 (synopsis "Easy PEM file parsing in Python")
20147 (description
20148 "This package provides a Python module for parsing and splitting PEM files.")
20149 (license license:expat)))
20150
20151 (define-public python-txsni
20152 ;; We need a few commits on top of 0.1.9 for compatibility with newer
20153 ;; Python and OpenSSL.
20154 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
20155 (revision "0"))
20156 (package
20157 (name "python-txsni")
20158 (version (git-version "0.1.9" revision commit))
20159 (home-page "https://github.com/glyph/txsni")
20160 (source
20161 (origin
20162 (method git-fetch)
20163 (uri (git-reference (url home-page) (commit commit)))
20164 (file-name (git-file-name name version))
20165 (sha256
20166 (base32
20167 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
20168 (build-system python-build-system)
20169 (propagated-inputs
20170 `(("python-pyopenssl" ,python-pyopenssl)
20171 ("python-service-identity" ,python-service-identity)
20172 ("python-twisted" ,python-twisted)))
20173 (synopsis "Run TLS servers with Twisted")
20174 (description
20175 "This package provides an easy-to-use SNI endpoint for use
20176 with the Twisted web framework.")
20177 (license license:expat))))
20178
20179 (define-public python-txacme
20180 (package
20181 (name "python-txacme")
20182 (version "0.9.2")
20183 (source
20184 (origin
20185 (method url-fetch)
20186 (uri (pypi-uri "txacme" version))
20187 (sha256
20188 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
20189 (build-system python-build-system)
20190 (propagated-inputs
20191 `(("python-acme" ,python-acme)
20192 ("python-attrs" ,python-attrs)
20193 ("python-eliot" ,python-eliot)
20194 ("python-josepy" ,python-josepy)
20195 ("python-pem" ,python-pem)
20196 ("python-treq" ,python-treq)
20197 ("python-twisted" ,python-twisted)
20198 ("python-txsni" ,python-txsni)))
20199 (native-inputs
20200 `(("python-fixtures" ,python-fixtures)
20201 ("python-hypothesis" ,python-hypothesis)
20202 ("python-mock" ,python-mock)
20203 ("python-service-identity"
20204 ,python-service-identity)
20205 ("python-testrepository" ,python-testrepository)
20206 ("python-testscenarios" ,python-testscenarios)
20207 ("python-testtools" ,python-testtools)))
20208 (home-page "https://github.com/twisted/txacme")
20209 (synopsis "Twisted implexmentation of the ACME protocol")
20210 (description
20211 "ACME is Automatic Certificate Management Environment, a protocol that
20212 allows clients and certificate authorities to automate verification and
20213 certificate issuance. The ACME protocol is used by the free Let's Encrypt
20214 Certificate Authority.
20215
20216 txacme is an implementation of the protocol for Twisted, the event-driven
20217 networking engine for Python.")
20218 (license license:expat)))
20219
20220 (define-public python-pysaml2
20221 (package
20222 (name "python-pysaml2")
20223 (version "5.0.0")
20224 (source
20225 (origin
20226 (method url-fetch)
20227 (uri (pypi-uri "pysaml2" version))
20228 (sha256
20229 (base32
20230 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
20231 (build-system python-build-system)
20232 (propagated-inputs
20233 `(("python-cryptography" ,python-cryptography)
20234 ("python-dateutil" ,python-dateutil)
20235 ("python-defusedxml" ,python-defusedxml)
20236 ("python-pyopenssl" ,python-pyopenssl)
20237 ("python-pytz" ,python-pytz)
20238 ("python-requests" ,python-requests)
20239 ("python-six" ,python-six)))
20240 (home-page "https://idpy.org")
20241 (synopsis "Python implementation of SAML Version 2 Standard")
20242 (description
20243 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
20244 It contains all necessary pieces for building a SAML2 service provider or
20245 an identity provider. The distribution contains examples of both.
20246
20247 This package was originally written to work in a WSGI environment, but
20248 there are extensions that allow you to use it with other frameworks.")
20249 (license license:asl2.0)))
20250
20251 (define-public python-click-plugins
20252 (package
20253 (name "python-click-plugins")
20254 (version "1.1.1")
20255 (source
20256 (origin
20257 (method url-fetch)
20258 (uri (pypi-uri "click-plugins" version))
20259 (sha256
20260 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
20261 (build-system python-build-system)
20262 (native-inputs
20263 `(("python-pytest" ,python-pytest)))
20264 (propagated-inputs
20265 `(("python-click" ,python-click)))
20266 (synopsis "Extension for Click to register external CLI commands")
20267 (description "This package provides n extension module for Click to
20268 register external CLI commands via setuptools entry-points.")
20269 (home-page "https://github.com/click-contrib/click-plugins")
20270 (license license:bsd-3)))
20271
20272 (define-public python-diceware
20273 (package
20274 (name "python-diceware")
20275 (version "0.9.6")
20276 (source
20277 (origin
20278 (method url-fetch)
20279 (uri (pypi-uri "diceware" version))
20280 (sha256
20281 (base32
20282 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
20283 (build-system python-build-system)
20284 (native-inputs
20285 `(("python-coverage" ,python-coverage)
20286 ("python-pytest" ,python-pytest)
20287 ("python-pytest-runner" ,python-pytest-runner)))
20288 (home-page "https://github.com/ulif/diceware/")
20289 (synopsis "Generates memorable passphrases")
20290 (description "This package generates passphrases by concatenating words
20291 randomly picked from wordlists. It supports several sources of
20292 randomness (including real life dice) and different wordlists (including
20293 cryptographically signed ones).")
20294 (license license:gpl3+)))
20295
20296 (define-public pyzo
20297 (package
20298 (name "pyzo")
20299 (version "4.10.2")
20300 (source
20301 (origin
20302 (method url-fetch)
20303 (uri (pypi-uri "pyzo" version))
20304 (sha256
20305 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
20306 (build-system python-build-system)
20307 (arguments
20308 `(#:phases
20309 (modify-phases %standard-phases
20310 (add-before 'check 'fix-home-directory
20311 (lambda _
20312 ;; Tests fail with "Permission denied: '/homeless-shelter'".
20313 (setenv "HOME" "/tmp")
20314 #t)))
20315 ;; Tests fail with "Uncaught Python exception: invalid literal for
20316 ;; int() with base 10: 'test'".
20317 #:tests? #f))
20318 (propagated-inputs
20319 `(("python-pyqt" ,python-pyqt)))
20320 (home-page "https://pyzo.org")
20321 (synopsis
20322 "Python IDE for scientific computing")
20323 (description
20324 "Pyzo is a Python IDE focused on interactivity and introspection,
20325 which makes it very suitable for scientific computing. Its practical
20326 design is aimed at simplicity and efficiency.
20327
20328 It consists of two main components, the editor and the shell, and uses
20329 a set of pluggable tools to help the programmer in various ways. Some
20330 example tools are source structure, project manager, interactive help,
20331 workspace...")
20332 (license license:bsd-2)))
20333
20334 (define-public python-osc
20335 (package
20336 (name "python-osc")
20337 (version "1.7.4")
20338 (source
20339 (origin
20340 (method url-fetch)
20341 (uri (pypi-uri "python-osc" version))
20342 (sha256
20343 (base32
20344 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
20345 (build-system python-build-system)
20346 (home-page "https://github.com/attwad/python-osc")
20347 (synopsis "Open Sound Control server and client implementations")
20348 (description
20349 "@code{python-osc} is a pure Python library with no external
20350 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
20351 Open Sound Control 1.0} specification.")
20352 (license license:unlicense)))
20353
20354 (define-public python-voluptuous
20355 (package
20356 (name "python-voluptuous")
20357 (version "0.11.7")
20358 (source
20359 (origin
20360 (method url-fetch)
20361 (uri (pypi-uri "voluptuous" version))
20362 (sha256
20363 (base32
20364 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
20365 (build-system python-build-system)
20366 (native-inputs
20367 `(("python-nose" ,python-nose)))
20368 (home-page "https://github.com/alecthomas/voluptuous")
20369 (synopsis "Python data validation library")
20370 (description
20371 "Voluptuous is a Python data validation library. It is primarily
20372 intended for validating data coming into Python as JSON, YAML, etc.")
20373 (license license:bsd-3)))
20374
20375 (define-public python-cmd2
20376 (package
20377 (name "python-cmd2")
20378 (version "1.0.2")
20379 (source
20380 (origin
20381 (method url-fetch)
20382 (uri (pypi-uri "cmd2" version))
20383 (sha256
20384 (base32
20385 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
20386 (build-system python-build-system)
20387 (propagated-inputs
20388 `(("python-attrs" ,python-attrs)
20389 ("python-colorama" ,python-colorama)
20390 ("python-pyperclip" ,python-pyperclip)
20391 ("python-wcwidth" ,python-wcwidth)))
20392 (native-inputs
20393 `(("python-codecov" ,python-codecov)
20394 ("python-coverage" ,python-coverage)
20395 ("python-doc8" ,python-doc8)
20396 ("python-flake8" ,python-flake8)
20397 ("python-invoke" ,python-invoke)
20398 ("python-mock" ,python-mock)
20399 ("python-pytest" ,python-pytest)
20400 ("python-pytest-cov" ,python-pytest-cov)
20401 ("python-pytest-mock" ,python-pytest-mock)
20402 ("python-setuptools-scm" ,python-setuptools-scm)
20403 ("python-sphinx" ,python-sphinx)
20404 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
20405 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
20406 ("python-tox" ,python-tox)
20407 ("python-twine" ,python-twine)
20408 ("which" ,which)))
20409 (home-page "https://github.com/python-cmd2/cmd2")
20410 (synopsis "Tool for building interactive command line applications")
20411 (description
20412 "Cmd2 is a tool for building interactive command line applications in
20413 Python. Its goal is to make it quick and easy for developers to build
20414 feature-rich and user-friendly interactive command line applications. It
20415 provides a simple API which is an extension of Python's built-in @code{cmd}
20416 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
20417 make your life easier and eliminates much of the boilerplate code which would
20418 be necessary when using @code{cmd}.")
20419 (license license:expat)))
20420
20421 (define-public python-pytidylib
20422 (package
20423 (name "python-pytidylib")
20424 (version "0.3.2")
20425 (source (origin
20426 (method url-fetch)
20427 (uri (pypi-uri "pytidylib" version))
20428 (sha256
20429 (base32
20430 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
20431 (build-system python-build-system)
20432 (arguments
20433 '(#:phases
20434 (modify-phases %standard-phases
20435 (add-before 'build 'qualify-libtidy
20436 (lambda* (#:key inputs #:allow-other-keys)
20437 (let ((libtidy (string-append (assoc-ref inputs "tidy")
20438 "/lib/libtidy.so")))
20439 (substitute* "tidylib/tidy.py"
20440 (("ctypes\\.util\\.find_library\\('tidy'\\)")
20441 (format #f "'~a'" libtidy)))
20442 #t))))))
20443 (inputs `(("tidy" ,tidy)))
20444 (home-page "https://github.com/countergram/pytidylib")
20445 (synopsis "Python wrapper for HTML Tidy library")
20446 (description
20447 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
20448 allows you, from Python code, to “fix” invalid (X)HTML markup.")
20449 (license license:expat)))
20450
20451 (define-public python2-pytidylib
20452 (package-with-python2 python-pytidylib))
20453
20454 (define-public python-mujson
20455 (package
20456 (name "python-mujson")
20457 (version "1.4")
20458 (source
20459 (origin
20460 (method url-fetch)
20461 (uri (pypi-uri "mujson" version))
20462 (sha256
20463 (base32
20464 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
20465 (build-system python-build-system)
20466 (home-page "https://github.com/mattgiles/mujson")
20467 (synopsis "Use the fastest JSON functions available at import time")
20468 (description "This packages selects the fastest JSON functions available
20469 at import time.")
20470 (license license:expat)))
20471
20472 (define-public python-bashlex
20473 (package
20474 (name "python-bashlex")
20475 (version "0.14")
20476 (source
20477 (origin
20478 (method url-fetch)
20479 (uri (pypi-uri "bashlex" version))
20480 (sha256
20481 (base32
20482 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
20483 (build-system python-build-system)
20484 (arguments
20485 `(#:phases
20486 (modify-phases %standard-phases
20487 (add-before 'build 'pregenerate-yacc-tables
20488 (lambda _
20489 ;; parser.py caches tables, which attempts to write to site lib
20490 ;; see https://github.com/idank/bashlex/issues/51
20491 (invoke "python" "-c" "import bashlex"))))))
20492 (home-page
20493 "https://github.com/idank/bashlex")
20494 (synopsis "Python parser for bash")
20495 (description "@code{bashlex} is a Python port of the parser used
20496 internally by GNU bash.
20497
20498 For the most part it's transliterated from C, the major differences are:
20499
20500 @itemize
20501 @item it does not execute anything
20502 @item it is reentrant
20503 @item it generates a complete AST
20504 @end itemize
20505 ")
20506 (license license:gpl3+)))