gnu: python-socksipychain: Update to 2.1.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 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
81 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
82 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
83 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
84 ;;;
85 ;;; This file is part of GNU Guix.
86 ;;;
87 ;;; GNU Guix is free software; you can redistribute it and/or modify it
88 ;;; under the terms of the GNU General Public License as published by
89 ;;; the Free Software Foundation; either version 3 of the License, or (at
90 ;;; your option) any later version.
91 ;;;
92 ;;; GNU Guix is distributed in the hope that it will be useful, but
93 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
94 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95 ;;; GNU General Public License for more details.
96 ;;;
97 ;;; You should have received a copy of the GNU General Public License
98 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
99
100 (define-module (gnu packages python-xyz)
101 #:use-module ((guix licenses) #:prefix license:)
102 #:use-module (gnu packages)
103 #:use-module (gnu packages algebra)
104 #:use-module (gnu packages adns)
105 #:use-module (gnu packages attr)
106 #:use-module (gnu packages backup)
107 #:use-module (gnu packages bash)
108 #:use-module (gnu packages check)
109 #:use-module (gnu packages compression)
110 #:use-module (gnu packages crypto)
111 #:use-module (gnu packages databases)
112 #:use-module (gnu packages dbm)
113 #:use-module (gnu packages enchant)
114 #:use-module (gnu packages file)
115 #:use-module (gnu packages fontutils)
116 #:use-module (gnu packages gcc)
117 #:use-module (gnu packages geo)
118 #:use-module (gnu packages ghostscript)
119 #:use-module (gnu packages gl)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnome)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages graphics)
124 #:use-module (gnu packages gsasl)
125 #:use-module (gnu packages gstreamer)
126 #:use-module (gnu packages gtk)
127 #:use-module (gnu packages icu4c)
128 #:use-module (gnu packages image)
129 #:use-module (gnu packages imagemagick)
130 #:use-module (gnu packages kerberos)
131 #:use-module (gnu packages libevent)
132 #:use-module (gnu packages libffi)
133 #:use-module (gnu packages linux)
134 #:use-module (gnu packages llvm)
135 #:use-module (gnu packages man)
136 #:use-module (gnu packages maths)
137 #:use-module (gnu packages monitoring)
138 #:use-module (gnu packages multiprecision)
139 #:use-module (gnu packages networking)
140 #:use-module (gnu packages ncurses)
141 #:use-module (gnu packages openstack)
142 #:use-module (gnu packages pcre)
143 #:use-module (gnu packages perl)
144 #:use-module (gnu packages photo)
145 #:use-module (gnu packages pkg-config)
146 #:use-module (gnu packages python)
147 #:use-module (gnu packages python-check)
148 #:use-module (gnu packages python-compression)
149 #:use-module (gnu packages python-crypto)
150 #:use-module (gnu packages python-science)
151 #:use-module (gnu packages python-web)
152 #:use-module (gnu packages qt)
153 #:use-module (gnu packages readline)
154 #:use-module (gnu packages sdl)
155 #:use-module (gnu packages search)
156 #:use-module (gnu packages shells)
157 #:use-module (gnu packages sphinx)
158 #:use-module (gnu packages ssh)
159 #:use-module (gnu packages terminals)
160 #:use-module (gnu packages tex)
161 #:use-module (gnu packages texinfo)
162 #:use-module (gnu packages time)
163 #:use-module (gnu packages tls)
164 #:use-module (gnu packages version-control)
165 #:use-module (gnu packages video)
166 #:use-module (gnu packages web)
167 #:use-module (gnu packages base)
168 #:use-module (gnu packages xml)
169 #:use-module (gnu packages xorg)
170 #:use-module (gnu packages xdisorg)
171 #:use-module (gnu packages tcl)
172 #:use-module (gnu packages bdw-gc)
173 #:use-module (gnu packages serialization)
174 #:use-module (guix packages)
175 #:use-module (guix download)
176 #:use-module (guix git-download)
177 #:use-module (guix hg-download)
178 #:use-module (guix utils)
179 #:use-module (guix build-system gnu)
180 #:use-module (guix build-system cmake)
181 #:use-module (guix build-system python)
182 #:use-module (guix build-system trivial)
183 #:use-module (srfi srfi-1)
184 #:use-module (srfi srfi-26))
185
186 (define-public python-tenacity
187 (package
188 (name "python-tenacity")
189 (version "6.1.0")
190 (source (origin
191 (method url-fetch)
192 (uri (pypi-uri "tenacity" version))
193 (sha256
194 (base32
195 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
196 (build-system python-build-system)
197 (native-inputs
198 `(("python-setuptools-scm" ,python-setuptools-scm)
199 ("python-sphinx" ,python-sphinx)
200 ("python-tornado" ,python-tornado)
201 ("python-pytest" ,python-pytest)))
202 (propagated-inputs
203 `(("python-six" ,python-six)))
204 (arguments
205 `(#:phases (modify-phases %standard-phases
206 (replace 'check
207 (lambda _
208 (invoke "pytest")
209 #t)))))
210 (home-page "https://github.com/jd/tenacity")
211 (synopsis "Retrying library for python")
212 (description "Tenacity is a general-purpose python library to simplify the
213 task of adding retry behavior to just about anything.")
214 (license license:asl2.0)))
215
216 (define-public python-colorlog
217 (package
218 (name "python-colorlog")
219 (version "4.1.0")
220 (source (origin
221 (method url-fetch)
222 (uri (pypi-uri "colorlog" version))
223 (sha256
224 (base32
225 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
226 (build-system python-build-system)
227 (native-inputs
228 `(("python-pytest" ,python-pytest)))
229 (arguments
230 `(#:phases (modify-phases %standard-phases
231 (replace 'check
232 (lambda _
233 ;; Extend PYTHONPATH so the built package will be found.
234 (setenv "PYTHONPATH"
235 (string-append (getcwd) "/build/lib:"
236 (getenv "PYTHONPATH")))
237 (invoke "pytest" "-p" "no:logging")
238 #t)))))
239 (home-page "https://github.com/borntyping/python-colorlog")
240 (synopsis "Log formatting with colors for python")
241 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
242 with Python's logging module that outputs records using terminal colors.")
243 (license license:expat)))
244
245 (define-public python-pyprind
246 (package
247 (name "python-pyprind")
248 (version "2.11.2")
249 (source (origin
250 (method url-fetch)
251 (uri (pypi-uri "PyPrind" version))
252 (sha256
253 (base32
254 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
255 (build-system python-build-system)
256 (propagated-inputs
257 `(("python-psutil" ,python-psutil)))
258 (home-page "https://github.com/rasbt/pyprind")
259 (synopsis "Python Progress Bar and Percent Indicator Utility")
260 (description "The PyPrind (Python Progress Indicator) module provides a
261 progress bar and a percentage indicator object that let you track the progress
262 of a loop structure or other iterative computation.")
263 (license license:bsd-3)))
264
265 (define-public python-gphoto2
266 (package
267 (name "python-gphoto2")
268 (version "2.2.1")
269 (source (origin
270 (method url-fetch)
271 (uri (pypi-uri "gphoto2" version))
272 (sha256
273 (base32
274 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
275 (build-system python-build-system)
276 (native-inputs
277 `(("pkg-config" ,pkg-config)))
278 (inputs
279 `(("libgphoto2" ,libgphoto2)))
280 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
281 (synopsis "Python interface to libgphoto2")
282 (description "@code{python-gphoto2} is a comprehensive Python interface
283 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
284 automatically generate the interface code.")
285 (license license:gpl3+)))
286
287 (define-public python-colour
288 (package
289 (name "python-colour")
290 (version "0.1.5")
291 (source (origin
292 (method url-fetch)
293 (uri (pypi-uri "colour" version))
294 (sha256
295 (base32
296 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
297 (build-system python-build-system)
298 (native-inputs
299 `(("python-d2to1" ,python-d2to1)))
300 (home-page "https://github.com/vaab/colour")
301 (synopsis "Convert and manipulate various color representations")
302 (description "Pythonic way to manipulate color representations (HSL, RVB,
303 web, X11, ...).")
304 (license license:expat)))
305
306 (define-public python-d2to1
307 (package
308 (name "python-d2to1")
309 (version "0.2.12.post1")
310 (source (origin
311 (method url-fetch)
312 (uri (pypi-uri "d2to1" version))
313 (sha256
314 (base32
315 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
316 (build-system python-build-system)
317 (native-inputs
318 `(("python-nose" ,python-nose)))
319 (home-page "https://github.com/embray/d2to1")
320 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
321 in python")
322 (description "The python package d2to1 (the d is for distutils) allows
323 using distutils2-like setup.cfg files for a package's metadata with a
324 distribute/setuptools setup.py script.")
325 (license license:bsd-2)))
326
327 (define-public python-rawkit
328 (package
329 (name "python-rawkit")
330 (version "0.6.0")
331 (source (origin
332 (method url-fetch)
333 (uri (pypi-uri "rawkit" version))
334 (sha256
335 (base32
336 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
337 (build-system python-build-system)
338 (native-inputs
339 `(("python-pytest" ,python-pytest)
340 ("python-mock" ,python-mock)))
341 (inputs
342 `(("libraw" ,libraw)))
343 (home-page "https://rawkit.readthedocs.io")
344 (synopsis "Ctypes-based LibRaw binding for Python")
345 (description "The rawkit package provides two modules: rawkit and libraw.
346 The rawkit module provides a high-level Pythonic interface for developing raw
347 photos, while the libraw module provides a CTypes based interface for
348 interacting with the low-level LibRaw C APIs.")
349 (license license:expat)))
350
351 (define-public python-easygui
352 (package
353 (name "python-easygui")
354 (version "0.98.1")
355 (source (origin
356 (method url-fetch)
357 (uri (pypi-uri "easygui" version))
358 (sha256
359 (base32
360 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
361 (build-system python-build-system)
362 (propagated-inputs
363 `(("python-tkinter" ,python "tk")))
364 (home-page "https://github.com/robertlugg/easygui")
365 (synopsis "GUI programming module for Python")
366 (description "EasyGUI is a module for very simple, very easy GUI
367 programming in Python. EasyGUI is different from other GUI generators in that
368 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
369 simple function calls.")
370 (license license:bsd-3)))
371
372 (define-public python-pymediainfo
373 (package
374 (name "python-pymediainfo")
375 (version "4.1")
376 (source
377 (origin
378 (method url-fetch)
379 (uri (pypi-uri "pymediainfo" version))
380 (sha256
381 (base32
382 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
383 (build-system python-build-system)
384 (native-inputs
385 `(("python-setuptools-scm" ,python-setuptools-scm)
386 ("python-pytest" ,python-pytest)))
387 (inputs
388 `(("libmediainfo" ,libmediainfo)))
389 (arguments
390 `(#:phases
391 (modify-phases %standard-phases
392 (add-after 'unpack 'patch-libmediainfo
393 (lambda _
394 (substitute* "pymediainfo/__init__.py"
395 (("libmediainfo.so.0")
396 (string-append (assoc-ref %build-inputs "libmediainfo")
397 "/lib/libmediainfo.so.0")))
398 #t))
399 (replace 'check
400 (lambda _
401 ;; Extend PYTHONPATH so the built package will be found.
402 (setenv "PYTHONPATH"
403 (string-append (getcwd) "/build/lib:"
404 (getenv "PYTHONPATH")))
405 ;; Skip the only failing test "test_parse_url"
406 (invoke "pytest" "-vv" "-k" "not test_parse_url")
407 #t)))))
408 (home-page
409 "https://github.com/sbraz/pymediainfo")
410 (synopsis
411 "Python wrapper for the mediainfo library")
412 (description
413 "Python wrapper for the mediainfo library to access the technical and tag
414 data for video and audio files.")
415 (license license:expat)))
416
417 (define-public python-psutil
418 (package
419 (name "python-psutil")
420 (version "5.7.0")
421 (source
422 (origin
423 (method url-fetch)
424 (uri (pypi-uri "psutil" version))
425 (sha256
426 (base32 "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"))))
427 (build-system python-build-system)
428 (arguments
429 ;; FIXME: some tests do not return and time out. Some tests fail because
430 ;; some processes survive kill().
431 '(#:tests? #f))
432 (home-page "https://www.github.com/giampaolo/psutil")
433 (synopsis "Library for retrieving information on running processes")
434 (description
435 "psutil (Python system and process utilities) is a library for retrieving
436 information on running processes and system utilization (CPU, memory, disks,
437 network) in Python. It is useful mainly for system monitoring, profiling and
438 limiting process resources and management of running processes. It implements
439 many functionalities offered by command line tools such as: ps, top, lsof,
440 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
441 pidof, tty, taskset, pmap.")
442 (properties `((python2-variant . ,(delay python2-psutil))))
443 (license license:bsd-3)))
444
445 (define-public python2-psutil
446 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
447 (package
448 (inherit base)
449 (propagated-inputs
450 `(("python2-enum34" ,python2-enum34) ;optional
451 ,@(package-propagated-inputs base))))))
452
453 (define-public python-shapely
454 (package
455 (name "python-shapely")
456 (version "1.6.4.post2")
457 (source
458 (origin
459 (method url-fetch)
460 (uri (pypi-uri "Shapely" version))
461 (sha256
462 (base32
463 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
464 (build-system python-build-system)
465 (native-inputs
466 `(("python-cython" ,python-cython)
467 ("python-matplotlib" ,python-matplotlib)
468 ("python-pytest" ,python-pytest)
469 ("python-pytest-cov" ,python-pytest-cov)))
470 (inputs
471 `(("geos" ,geos)))
472 (propagated-inputs
473 `(("python-numpy" ,python-numpy)))
474 (arguments
475 `(#:phases
476 (modify-phases %standard-phases
477 (add-after 'unpack 'patch-geos-path
478 (lambda* (#:key inputs #:allow-other-keys)
479 (let ((geos (assoc-ref inputs "geos"))
480 (glibc (assoc-ref inputs ,(if (%current-target-system)
481 "cross-libc" "libc"))))
482 (substitute* "shapely/geos.py"
483 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
484 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
485 geos "/lib/libgeos_c.so'])"))
486 (("free = load_dll\\('c'\\)\\.free")
487 (string-append "free = load_dll('c', fallbacks=['"
488 glibc "/lib/libc.so.6']).free"))))
489 #t)))))
490 (home-page "https://github.com/Toblerity/Shapely")
491 (synopsis "Library for the manipulation and analysis of geometric objects")
492 (description "Shapely is a Python package for manipulation and analysis of
493 planar geometric objects. It is based on the @code{GEOS} library.")
494 (license license:bsd-3)))
495
496 (define-public python-shortuuid
497 (package
498 (name "python-shortuuid")
499 (version "0.5.0")
500 (source
501 (origin
502 (method url-fetch)
503 (uri (pypi-uri "shortuuid" version))
504 (sha256
505 (base32
506 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
507 (build-system python-build-system)
508 (native-inputs
509 `(("python-pep8" ,python-pep8)))
510 (home-page "https://github.com/skorokithakis/shortuuid")
511 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
512 (description
513 "@code{shortuuid} is a Python library for generating concise, unambiguous
514 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
515 module and then similar looking characters are removed.")
516 (license license:bsd-3)))
517
518 (define-public python-logwrap
519 (package
520 (name "python-logwrap")
521 (version "3.2.1")
522 (source
523 (origin
524 (method url-fetch)
525 (uri (pypi-uri "logwrap" version ".zip"))
526 (sha256
527 (base32
528 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
529 (build-system python-build-system)
530 (propagated-inputs
531 `(("python-six" ,python-six)
532 ("python-typing" ,python-typing)))
533 (native-inputs
534 `(("unzip" ,unzip)
535 ("python-cython" ,python-cython)
536 ("python-pytest" ,python-pytest)
537 ("python-pytest-cov" ,python-pytest-cov)
538 ("python-pytest-runner" ,python-pytest-runner)))
539 (home-page "https://github.com/penguinolog/logwrap")
540 (synopsis "Decorator for logging function arguments")
541 (description "This package provides a decorator to log function arguments
542 and function call return values in a human-readable way.")
543 (license license:asl2.0)))
544
545 (define-public python2-shapely
546 (package-with-python2 python-shapely))
547
548 (define-public python-clyent
549 (package
550 (name "python-clyent")
551 (version "1.2.1")
552 (source
553 (origin
554 (method url-fetch)
555 (uri (pypi-uri "clyent" version))
556 (sha256
557 (base32
558 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
559 (build-system python-build-system)
560 (native-inputs
561 `(("python-mock" ,python-mock)))
562 (home-page "https://github.com/binstar/clyent")
563 (synopsis "Command line client library")
564 (description "Clyent is a Python command line utiliy library. It is used
565 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
566 (license license:bsd-3)))
567
568 (define-public python2-clyent
569 (package-with-python2 python-clyent))
570
571 (define-public python-babel
572 (package
573 (name "python-babel")
574 (version "2.8.0")
575 (source
576 (origin
577 (method url-fetch)
578 (uri (pypi-uri "Babel" version))
579 (sha256
580 (base32
581 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
582 (build-system python-build-system)
583 (native-inputs
584 `(("python-freezegun" ,python-freezegun)
585 ("python-pytest" ,python-pytest)))
586 (propagated-inputs
587 `(("python-pytz" ,python-pytz)))
588 (arguments
589 `(#:phases (modify-phases %standard-phases
590 (replace 'check
591 (lambda _
592 (invoke "pytest" "-vv" "-k"
593 (string-append
594 ;; XXX: These tests fail when using Pytest 4.x and
595 ;; Babel 2.6.0. Try removing this for later versions.
596 "not test_no_inherit_metazone_marker_never_in_output"
597 " and not test_smoke_dates"
598 " and not test_smoke_numbers")))))))
599 (home-page "http://babel.pocoo.org/")
600 (synopsis
601 "Tools for internationalizing Python applications")
602 (description
603 "Babel is composed of two major parts:
604 - tools to build and work with gettext message catalogs
605 - a Python interface to the CLDR (Common Locale Data Repository), providing
606 access to various locale display names, localized number and date formatting,
607 etc. ")
608 (license license:bsd-3)))
609
610 (define-public python2-babel
611 (package-with-python2 python-babel))
612
613 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
614 (define-public python2-babel-2.6
615 (package
616 (inherit python2-babel)
617 (version "2.6.0")
618 (source (origin
619 (method url-fetch)
620 (uri (pypi-uri "Babel" version))
621 (sha256
622 (base32
623 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
624
625 (define-public python2-backport-ssl-match-hostname
626 (package
627 (name "python2-backport-ssl-match-hostname")
628 (version "3.5.0.1")
629 (source
630 (origin
631 (method url-fetch)
632 (uri (pypi-uri "backports.ssl_match_hostname" version))
633 (sha256
634 (base32
635 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
636 (build-system python-build-system)
637 (arguments
638 `(#:python ,python-2
639 #:tests? #f)) ; no test target
640 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
641 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
642 (description
643 "This backport brings the ssl.match_hostname() function to users of
644 earlier versions of Python. The function checks the hostname in the
645 certificate returned by the server to which a connection has been established,
646 and verifies that it matches the intended target hostname.")
647 (license license:psfl)))
648
649 (define-public python-bitarray
650 (package
651 (name "python-bitarray")
652 (version "1.2.1")
653 (source (origin
654 (method url-fetch)
655 (uri (pypi-uri "bitarray" version))
656 (sha256
657 (base32
658 "1kxrlxfj9nrx512sfwifwl9z4v6ky3qschl0zmk3s3dvc3s7bmif"))))
659 (build-system python-build-system)
660 (home-page "https://github.com/ilanschnell/bitarray")
661 (synopsis "Efficient arrays of booleans")
662 (description "This package provides an object type which efficiently
663 represents an array of booleans. Bitarrays are sequence types and behave very
664 much like usual lists. Eight bits are represented by one byte in a contiguous
665 block of memory. The user can select between two representations:
666 little-endian and big-endian. All of the functionality is implemented in C.
667 Methods for accessing the machine representation are provided. This can be
668 useful when bit level access to binary files is required, such as portable
669 bitmap image files. Also, when dealing with compressed data which uses
670 variable bit length encoding, you may find this module useful.")
671 (license license:psfl)))
672
673 (define-public python-boolean.py
674 (package
675 (name "python-boolean.py")
676 (version "3.6")
677 (source
678 (origin
679 ;; There's no source tarball on PyPI.
680 (method git-fetch)
681 (uri (git-reference
682 (url "https://github.com/bastikr/boolean.py")
683 (commit (string-append "v" version))))
684 (file-name (git-file-name name version))
685 (sha256
686 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
687 (build-system python-build-system)
688 (home-page "https://github.com/bastikr/boolean.py")
689 (synopsis "Boolean algebra in one Python module")
690 (description
691 "This is a small Python library that implements boolean algebra.
692 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
693 @code{Symbol} class that can take on one of these two values. Calculations
694 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
695 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
696 Expressions are constructed from parsed strings or directly in Python.")
697 (license license:bsd-2)))
698
699 (define-public python-hdf4
700 (package
701 (name "python-hdf4")
702 (version "0.9")
703 (source
704 (origin
705 (method url-fetch)
706 (uri (pypi-uri name version))
707 (sha256
708 (base32
709 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
710 (build-system python-build-system)
711 (native-inputs `(("nose" ,python-nose)))
712 (propagated-inputs `(("numpy" ,python-numpy)))
713 (inputs
714 `(("hdf4" ,hdf4)
715 ("libjpeg" ,libjpeg-turbo)
716 ("zlib" ,zlib)))
717 (arguments
718 `(#:phases
719 (modify-phases %standard-phases
720 (replace 'check
721 (lambda _
722 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
723 ;; on to import numpy. Somehow this works on their CI system.
724 ;; Let's just manage PYTHONPATH here instead.
725 (substitute* "runexamples.sh"
726 (("export PYTHONPATH=.*") ""))
727 (setenv "PYTHONPATH"
728 (string-append (getcwd) ":"
729 (getenv "PYTHONPATH")))
730 (invoke "./runexamples.sh")
731 (invoke "nosetests" "-v"))))))
732 (home-page "https://github.com/fhs/python-hdf4")
733 (synopsis "Python interface to the NCSA HDF4 library")
734 (description
735 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
736 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
737 NetCDF files can also be read and modified. Python-HDF4 is a fork of
738 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
739 (license license:expat)))
740
741 (define-public python2-hdf4
742 (package-with-python2 python-hdf4))
743
744 (define-public python-h5py
745 (package
746 (name "python-h5py")
747 (version "2.10.0")
748 (source
749 (origin
750 (method url-fetch)
751 (uri (pypi-uri "h5py" version))
752 (sha256
753 (base32
754 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
755 (build-system python-build-system)
756 (arguments
757 `(#:tests? #f ; no test target
758 #:phases
759 (modify-phases %standard-phases
760 (add-after 'unpack 'fix-hdf5-paths
761 (lambda* (#:key inputs #:allow-other-keys)
762 (let ((prefix (assoc-ref inputs "hdf5")))
763 (substitute* "setup_build.py"
764 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
765 (string-append "['" prefix "/lib" "']"))
766 (("'/opt/local/include', '/usr/local/include'")
767 (string-append "'" prefix "/include" "'")))
768 (substitute* "setup_configure.py"
769 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
770 (string-append "['" prefix "/lib" "']")))
771 #t))))))
772 (propagated-inputs
773 `(("python-six" ,python-six)
774 ("python-numpy" ,python-numpy)))
775 (inputs
776 `(("hdf5" ,hdf5-1.10)))
777 (native-inputs
778 `(("python-cython" ,python-cython)
779 ("python-pkgconfig" ,python-pkgconfig)
780 ("pkg-config" ,pkg-config)))
781 (home-page "https://www.h5py.org/")
782 (synopsis "Read and write HDF5 files from Python")
783 (description
784 "The h5py package provides both a high- and low-level interface to the
785 HDF5 library from Python. The low-level interface is intended to be a
786 complete wrapping of the HDF5 API, while the high-level component supports
787 access to HDF5 files, datasets and groups using established Python and NumPy
788 concepts.")
789 (license license:bsd-3)))
790
791 (define-public python2-h5py
792 (package-with-python2 python-h5py))
793
794 (define-public python-sh
795 (package
796 (name "python-sh")
797 (version "1.12.14")
798 (source
799 (origin
800 (method url-fetch)
801 (uri (pypi-uri "sh" version))
802 (sha256
803 (base32
804 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
805 (build-system python-build-system)
806 (arguments
807 '(#:phases
808 (modify-phases %standard-phases
809 (replace 'check
810 (lambda _
811 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
812 (setenv "HOME" "/tmp")
813 (invoke "python" "sh.py" "test"))))))
814 (native-inputs
815 `(("python-coverage" ,python-coverage)))
816 (home-page "https://github.com/amoffat/sh")
817 (synopsis "Python subprocess replacement")
818 (description "This package provides a replacement for Python's
819 @code{subprocess} feature.")
820 (license license:expat)))
821
822 (define-public python2-sh
823 (package-with-python2 python-sh))
824
825 (define-public python-cftime
826 (package
827 (name "python-cftime")
828 (version "1.0.4.2")
829 (source
830 (origin
831 (method url-fetch)
832 (uri (pypi-uri "cftime" version))
833 (sha256
834 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
835 (build-system python-build-system)
836 (propagated-inputs
837 `(("python-numpy" ,python-numpy)))
838 (native-inputs
839 `(("python-coveralls" ,python-coveralls)
840 ("python-cython" ,python-cython)
841 ("python-pytest-cov" ,python-pytest-cov)))
842 (home-page "https://github.com/Unidata/cftime")
843 (synopsis "Library for time handling")
844 (description
845 "This package provides time-handling functionality that used to be part
846 of the netcdf4 package before.")
847 ;; This package claims to include code under the GPLv3 but is released
848 ;; under ISC.
849 (license (list license:isc license:gpl3+))))
850
851 (define-public python-netcdf4
852 (package
853 (name "python-netcdf4")
854 (version "1.5.3")
855 (source
856 (origin
857 (method url-fetch)
858 (uri (pypi-uri "netCDF4" version))
859 (sha256
860 (base32
861 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
862 (build-system python-build-system)
863 (arguments
864 '(#:phases
865 (modify-phases %standard-phases
866 (add-after 'unpack 'configure-locations
867 (lambda* (#:key inputs #:allow-other-keys)
868 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
869 #t)))))
870 (native-inputs
871 `(("python-cython" ,python-cython)))
872 (propagated-inputs
873 `(("python-numpy" ,python-numpy)
874 ("python-cftime" ,python-cftime)))
875 (inputs
876 `(("netcdf" ,netcdf)
877 ("hdf4" ,hdf4)
878 ("hdf5" ,hdf5)))
879 (home-page "https://github.com/Unidata/netcdf4-python")
880 (synopsis "Python/numpy interface to the netCDF library")
881 (description "Netcdf4-python is a Python interface to the netCDF C
882 library. netCDF version 4 has many features not found in earlier
883 versions of the library and is implemented on top of HDF5. This module
884 can read and write files in both the new netCDF 4 and the old netCDF 3
885 format, and can create files that are readable by HDF5 clients. The
886 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
887 to users of that module.")
888 ;; The software is mainly ISC, but includes some files covered
889 ;; by the Expat license.
890 (license (list license:isc license:expat))))
891
892 (define-public python2-netcdf4
893 (package-with-python2 python-netcdf4))
894
895 (define-public python-license-expression
896 (package
897 (name "python-license-expression")
898 (version "0.999")
899 (source
900 (origin
901 (method url-fetch)
902 (uri (pypi-uri "license-expression" version))
903 (sha256
904 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
905 (build-system python-build-system)
906 (propagated-inputs
907 `(("python-boolean.py" ,python-boolean.py)))
908 (home-page "https://github.com/nexB/license-expression")
909 (synopsis "Apply boolean logic to license expressions")
910 (description
911 "This Python module defines a tiny language to evaluate and compare
912 license expressions using boolean logic. Logical combinations of licenses can
913 be tested for equality, containment, and equivalence. They can be normalised
914 and simplified. It supports SPDX license expressions as well as other naming
915 conventions and aliases in the same expression.")
916 (license license:gpl2+)))
917
918 (define-public python-lockfile
919 (package
920 (name "python-lockfile")
921 (version "0.12.2")
922 (source
923 (origin
924 (method url-fetch)
925 (uri (pypi-uri "lockfile" version))
926 (sha256
927 (base32
928 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
929 (build-system python-build-system)
930 (arguments '(#:test-target "check"))
931 (native-inputs
932 `(("python-pbr" ,python-pbr)))
933 (home-page "https://launchpad.net/pylockfile")
934 (synopsis "Platform-independent file locking module")
935 (description
936 "The lockfile package exports a LockFile class which provides a simple
937 API for locking files.")
938 (license license:expat)))
939
940 (define-public python2-lockfile
941 (package-with-python2 python-lockfile))
942
943 (define-public python-filelock
944 (package
945 (name "python-filelock")
946 (version "3.0.12")
947 (source
948 (origin
949 (method url-fetch)
950 (uri (pypi-uri "filelock" version))
951 (sha256
952 (base32
953 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
954 (build-system python-build-system)
955 (home-page
956 "https://github.com/benediktschmitt/py-filelock")
957 (synopsis "Platform independent file lock")
958 (description "@code{filelock} contains a single module implementing
959 a platform independent file lock in Python, which provides a simple way of
960 inter-process communication.")
961 (license license:unlicense)))
962
963 (define-public python-semantic-version
964 (package
965 (name "python-semantic-version")
966 (version "2.6.0")
967 (source
968 (origin
969 (method url-fetch)
970 (uri (pypi-uri "semantic_version" version))
971 (sha256
972 (base32
973 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
974 (build-system python-build-system)
975 (arguments
976 `(#:tests? #f)) ; PyPI tarball lacks tests
977 (home-page "https://github.com/rbarrois/python-semanticversion")
978 (synopsis "Semantic versioning module for Python")
979 (description
980 "The @code{semantic_version} class is a small library for handling
981 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
982
983 It can compare versions, generate a new version that represents a bump in one of
984 the version levels, and check whether any given string is a proper semantic
985 version identifier.")
986 (license license:bsd-3)))
987
988 (define-public python2-semantic-version
989 (package-with-python2 python-semantic-version))
990
991 (define-public python-serpent
992 (package
993 (name "python-serpent")
994 (version "1.28")
995 (source
996 (origin
997 (method url-fetch)
998 (uri (pypi-uri "serpent" version))
999 (sha256
1000 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1001 (build-system python-build-system)
1002 (native-inputs
1003 `(("python-attrs" ,python-attrs)
1004 ("python-pytz" ,python-pytz)))
1005 (home-page "https://github.com/irmen/Serpent")
1006 (synopsis "Serializer for literal Python expressions")
1007 (description
1008 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1009 serialization. It serializes an object tree into bytes (an utf-8 encoded
1010 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1011 to rebuild the original object tree.
1012
1013 Because only safe literals are encoded, it is safe to send serpent data to
1014 other machines, such as over the network.")
1015 (properties `((python2-variant . ,(delay python2-serpent))))
1016 (license license:expat)))
1017
1018 (define-public python2-serpent
1019 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1020 (package
1021 (inherit base)
1022 (propagated-inputs
1023 `(("python-enum34" ,python2-enum34)
1024 ,@(package-propagated-inputs base))))))
1025
1026 (define-public python-setuptools
1027 (package
1028 (name "python-setuptools")
1029 (version "41.0.1")
1030 (source
1031 (origin
1032 (method url-fetch)
1033 (uri (pypi-uri "setuptools" version ".zip"))
1034 (sha256
1035 (base32
1036 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1037 (modules '((guix build utils)))
1038 (snippet
1039 '(begin
1040 ;; Remove included binaries which are used to build self-extracting
1041 ;; installers for Windows.
1042 ;; TODO: Find some way to build them ourself so we can include them.
1043 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1044 #t))))
1045 (build-system python-build-system)
1046 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1047 ;; One could bootstrap with an internal untested setuptools.
1048 (arguments
1049 `(#:tests? #f))
1050 (home-page "https://pypi.org/project/setuptools/")
1051 (synopsis
1052 "Library designed to facilitate packaging Python projects")
1053 (description
1054 "Setuptools is a fully-featured, stable library designed to facilitate
1055 packaging Python projects, where packaging includes:
1056 Python package and module definitions,
1057 distribution package metadata,
1058 test hooks,
1059 project installation,
1060 platform-specific details,
1061 Python 3 support.")
1062 ;; TODO: setuptools now bundles the following libraries:
1063 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1064 (license (list license:psfl ; setuptools itself
1065 license:expat ; six, appdirs, pyparsing
1066 license:asl2.0 ; packaging is dual ASL2/BSD-2
1067 license:bsd-2))))
1068
1069 (define-public python2-setuptools
1070 (package-with-python2 python-setuptools))
1071
1072 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1073 (define-public python-setuptools-for-tensorflow
1074 (hidden-package
1075 (package
1076 (inherit python-setuptools)
1077 (version "39.1.0")
1078 (source (origin
1079 (inherit (package-source python-setuptools))
1080 (uri (pypi-uri "setuptools" version ".zip"))
1081 (sha256
1082 (base32
1083 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1084
1085 (define-public python-uniseg
1086 (package
1087 (name "python-uniseg")
1088 (version "0.7.1")
1089 (source
1090 (origin
1091 (method url-fetch)
1092 (uri (pypi-uri "uniseg" version ".zip"))
1093 (sha256
1094 (base32
1095 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1096 (build-system python-build-system)
1097 (arguments
1098 '(#:tests? #f)) ; The test suite requires network access.
1099 (native-inputs
1100 `(("unzip" ,unzip)))
1101 (home-page
1102 "https://bitbucket.org/emptypage/uniseg-python")
1103 (synopsis
1104 "Python library to determine Unicode text segmentations")
1105 (description
1106 "Uniseg is a Python package used to determine Unicode text segmentations.
1107 Supported segmentations include:
1108 @enumerate
1109 @item @dfn{Code point} (any value in the Unicode codespace)
1110 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1111 multiple Unicode code points, e.g. \"G\" + acute-accent)
1112 @item Word break
1113 @item Sentence break
1114 @item Line break
1115 @end enumerate")
1116 (license license:expat)))
1117
1118 (define-public python2-uniseg
1119 (package-with-python2 python-uniseg))
1120
1121 (define-public python-humanfriendly
1122 (package
1123 (name "python-humanfriendly")
1124 (version "4.4.1")
1125 (source
1126 (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "humanfriendly" version))
1129 (sha256
1130 (base32
1131 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1132 (build-system python-build-system)
1133 (arguments
1134 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1135 #:tests? #f))
1136 (propagated-inputs
1137 `(("python-monotonic" ,python-monotonic)))
1138 (home-page "https://humanfriendly.readthedocs.io")
1139 (synopsis "Human-friendly input and output in Python")
1140 (description
1141 "The functions and classes in @code{humanfriendly} can be used to make
1142 text interfaces more user-friendly. It includes tools to parse and format
1143 numbers, file sizes, and timespans, timers for long-running operations, menus
1144 to allow the user to choose from a list of options, and terminal interaction
1145 helpers.")
1146 (license license:expat)))
1147
1148 (define-public python2-humanfriendly
1149 (package-with-python2 python-humanfriendly))
1150
1151 (define-public python-textparser
1152 (package
1153 (name "python-textparser")
1154 (version "0.23.0")
1155 (source
1156 (origin
1157 (method url-fetch)
1158 (uri (pypi-uri "textparser" version))
1159 (sha256
1160 (base32
1161 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1162 (build-system python-build-system)
1163 (home-page "https://github.com/eerimoq/textparser")
1164 (synopsis "Fast text parser for Python")
1165 (description "This library provides a text parser written in the Python
1166 language. It aims to be fast.")
1167 (license license:expat)))
1168
1169 (define-public python-aenum
1170 (package
1171 (name "python-aenum")
1172 (version "2.2.3")
1173 (source
1174 (origin
1175 (method url-fetch)
1176 (uri (pypi-uri "aenum" version))
1177 (sha256
1178 (base32
1179 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1180 (build-system python-build-system)
1181 (arguments
1182 `(#:phases (modify-phases %standard-phases
1183 (replace 'check
1184 (lambda _
1185 (format #t "current working dir ~s~%" (getcwd))
1186 (setenv "PYTHONPATH"
1187 (string-append ".:" (getenv "PYTHONPATH")))
1188 ;; We must run the test suite module directly, as it
1189 ;; fails to define the 'tempdir' variable in scope for
1190 ;; the tests otherwise
1191 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1192 ;; issues/32/running-tests-with-python-setuppy-test).
1193 (invoke "python3" "aenum/test.py")
1194 ;; This one fails with "NameError: name
1195 ;; 'test_pickle_dump_load' is not defined" (see:
1196 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1197 ;; /error-running-the-test_v3py-test-suite).
1198 ;; (invoke "python3" "aenum/test_v3.py")
1199 #t)))))
1200 (home-page "https://bitbucket.org/stoneleaf/aenum")
1201 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1202 (description "The aenum library includes an @code{Enum} base class, a
1203 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1204 class.")
1205 (license license:bsd-3)))
1206
1207 (define-public python-can
1208 (package
1209 (name "python-can")
1210 (version "3.3.3")
1211 (source
1212 (origin
1213 (method url-fetch)
1214 (uri (pypi-uri "python-can" version))
1215 (sha256
1216 (base32
1217 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1218 (build-system python-build-system)
1219 (arguments
1220 `(#:phases (modify-phases %standard-phases
1221 (add-after 'unpack 'relax-version-requirements
1222 (lambda _
1223 (substitute* "setup.py"
1224 (("mock~=2\\.0") "mock")
1225 (("coverage<5") "coverage")
1226 (("pytest~=4\\.3") "pytest")
1227 (("hypothesis~=4\\.56") "hypothesis"))
1228 #t))
1229 (add-after 'unpack 'fix-broken-tests
1230 ;; The tests try to run two scripts it expects should be
1231 ;; in PATH, but they aren't at this time (see:
1232 ;; https://github.com/hardbyte/python-can/issues/805).
1233 (lambda _
1234 (substitute* "test/test_scripts.py"
1235 (("\"can_logger\\.py --help\"") "")
1236 (("\"can_player\\.py --help\"") ""))
1237 #t)))))
1238 (propagated-inputs
1239 `(("python-aenum" ,python-aenum)
1240 ("python-wrapt" ,python-wrapt)))
1241 (native-inputs
1242 `(("python-codecov" ,python-codecov)
1243 ("python-coverage" ,python-coverage)
1244 ("python-future" ,python-future)
1245 ("python-hypothesis" ,python-hypothesis)
1246 ("python-mock" ,python-mock)
1247 ("python-pyserial" ,python-pyserial)
1248 ("python-pytest" ,python-pytest)
1249 ("python-pytest-cov" ,python-pytest-cov)
1250 ("python-pytest-runner" ,python-pytest-runner)
1251 ("python-pytest-timeout" ,python-pytest-timeout)))
1252 (home-page "https://github.com/hardbyte/python-can")
1253 (synopsis "Controller Area Network (CAN) interface module for Python")
1254 (description "This package defines the @code{can} module, which provides
1255 controller area network (CAN) support for Python developers; providing common
1256 abstractions to different hardware devices, and a suite of utilities for
1257 sending and receiving messages on a CAN bus.")
1258 (license license:lgpl3+)))
1259
1260 (define-public python-diskcache
1261 (package
1262 (name "python-diskcache")
1263 (version "4.1.0")
1264 (source
1265 (origin
1266 (method url-fetch)
1267 (uri (pypi-uri "diskcache" version))
1268 (sha256
1269 (base32
1270 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1271 (build-system python-build-system)
1272 (arguments
1273 `(#:tests? #f)) ;test suite not included in the release
1274 (home-page "http://www.grantjenks.com/docs/diskcache/")
1275 (synopsis "Disk and file backed cache library")
1276 (description "DiskCache is a disk and file backed persistent cache.")
1277 (license license:asl2.0)))
1278
1279 (define-public python-bitstruct
1280 (package
1281 (name "python-bitstruct")
1282 (version "8.9.0")
1283 (source
1284 (origin
1285 (method url-fetch)
1286 (uri (pypi-uri "bitstruct" version))
1287 (sha256
1288 (base32
1289 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1290 (build-system python-build-system)
1291 (home-page "https://github.com/eerimoq/bitstruct")
1292 (synopsis "Python values to and C bit field structs converter")
1293 (description "This module performs conversions between Python values and C
1294 bit field structs represented as Python byte strings. It is intended to have
1295 a similar interface as the @code{struct} module from Python, but working on
1296 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1297 (license license:expat)))
1298
1299 (define-public python-cantools
1300 (package
1301 (name "python-cantools")
1302 (version "33.1.1")
1303 (source
1304 (origin
1305 ;; We take the sources from the Git repository as the documentation is
1306 ;; not included with the PyPI archive.
1307 (method git-fetch)
1308 (uri (git-reference
1309 (url "https://github.com/eerimoq/cantools.git")
1310 (commit version)))
1311 (file-name (git-file-name name version))
1312 (sha256
1313 (base32
1314 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1315 (build-system python-build-system)
1316 (arguments
1317 `(#:phases
1318 (modify-phases %standard-phases
1319 (add-after 'build 'build-doc
1320 (lambda _
1321 ;; See: https://github.com/eerimoq/cantools/issues/190.
1322 (substitute* "README.rst"
1323 (("https://github.com/eerimoq/cantools/raw/master\
1324 /docs/monitor.png")
1325 "monitor.png"))
1326 (with-directory-excursion "docs"
1327 (invoke "make" "man" "info"))))
1328 (add-after 'install 'install-doc
1329 (lambda* (#:key outputs #:allow-other-keys)
1330 (let* ((out (assoc-ref outputs "out"))
1331 (info (string-append out "/share/info"))
1332 (man1 (string-append out "/share/man/man1")))
1333 (format #t "CWD: ~s~%" (getcwd))
1334 (install-file "docs/_build/texinfo/cantools.info" info)
1335 (install-file "docs/_build/man/cantools.1" man1)
1336 #t))))))
1337 (native-inputs
1338 `(("sphinx" ,python-sphinx)
1339 ("texinfo" ,texinfo)))
1340 (propagated-inputs
1341 `(("python-bitstruct" ,python-bitstruct)
1342 ("python-can" ,python-can)
1343 ("python-diskcache" ,python-diskcache)
1344 ("python-textparser" ,python-textparser)))
1345 (home-page "https://github.com/eerimoq/cantools")
1346 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1347 (description "This package includes Controller Area Network (CAN) related
1348 tools that can be used to:
1349 @itemize
1350 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1351 @item encode and decode CAN messages
1352 @item multiplex simple and extended signals
1353 @item diagnose DID encoding and decoding
1354 @item dump the CAN decoder output
1355 @item test CAN nodes
1356 @item generate C source code
1357 @item monitor the CAN bus
1358 @end itemize")
1359 (license license:expat)))
1360
1361 (define-public python-capturer
1362 (package
1363 (name "python-capturer")
1364 (version "2.4")
1365 (source
1366 (origin
1367 (method url-fetch)
1368 (uri (pypi-uri "capturer" version))
1369 (sha256
1370 (base32
1371 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1372 (build-system python-build-system)
1373 (arguments
1374 `(#:tests? #f))
1375 (propagated-inputs
1376 `(("python-humanfriendly" ,python-humanfriendly)))
1377 (home-page "https://capturer.readthedocs.io")
1378 (synopsis "Capture stdout and stderr streams of the current process")
1379 (description
1380 "The capturer package makes it easy to capture the stdout and stderr
1381 streams of the current process and subprocesses. Output can be relayed
1382 to the terminal in real time but is also available to the Python program
1383 for additional processing.")
1384 (license license:expat)))
1385
1386 (define-public python2-capturer
1387 (package-with-python2 python-capturer))
1388
1389 (define-public python-case
1390 (package
1391 (name "python-case")
1392 (version "1.5.3")
1393 (source
1394 (origin
1395 (method url-fetch)
1396 (uri (pypi-uri "case" version))
1397 (sha256
1398 (base32
1399 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1400 (build-system python-build-system)
1401 (propagated-inputs
1402 `(("python-mock" ,python-mock)
1403 ("python-nose" ,python-nose)
1404 ("python-six" ,python-six)
1405 ("python-unittest2" ,python-unittest2)))
1406 (native-inputs
1407 `(("python-coverage" ,python-coverage)))
1408 (home-page "https://github.com/celery/case")
1409 (synopsis "Unittest utilities and convenience methods")
1410 (description
1411 "The @code{case} package provides utilities on top of unittest, including
1412 some helpful Python 2 compatibility convenience methods.")
1413 (license license:bsd-3)))
1414
1415 (define-public python-verboselogs
1416 (package
1417 (name "python-verboselogs")
1418 (version "1.7")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "verboselogs" version))
1423 (sha256
1424 (base32
1425 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1426 (build-system python-build-system)
1427 (arguments
1428 `(#:phases
1429 (modify-phases %standard-phases
1430 (replace 'check
1431 (lambda _
1432 ;; Do not run pylint plugin test, as astroid is an old
1433 ;; unsupported version.
1434 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1435 "verboselogs/tests.py"))))))
1436 (native-inputs
1437 `(("python-mock" ,python-mock)
1438 ("python-pytest" ,python-pytest)))
1439 (home-page "https://verboselogs.readthedocs.io")
1440 (synopsis "Verbose logging level for Python's logging module")
1441 (description
1442 "The @code{verboselogs} package extends Python's @code{logging} module to
1443 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1444 (license license:expat)))
1445
1446 (define-public python2-verboselogs
1447 (package-with-python2 python-verboselogs))
1448
1449 (define-public python-coloredlogs
1450 (package
1451 (name "python-coloredlogs")
1452 (version "10.0")
1453 (source
1454 (origin
1455 (method url-fetch)
1456 (uri (pypi-uri "coloredlogs" version))
1457 (sha256
1458 (base32
1459 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1460 (build-system python-build-system)
1461 (arguments
1462 `(;Tests require some updated modules
1463 #:tests? #f))
1464 (propagated-inputs
1465 `(("python-capturer" ,python-capturer)))
1466 (home-page "https://coloredlogs.readthedocs.io")
1467 (synopsis "Colored stream handler for Python's logging module")
1468 (description
1469 "The @code{coloredlogs} package enables colored terminal output for
1470 Python's logging module. The @code{ColoredFormatter} class inherits from
1471 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1472 messages in color.")
1473 (license license:expat)))
1474
1475 (define-public python2-coloredlogs
1476 (package-with-python2 python-coloredlogs))
1477
1478 (define-public python-editorconfig
1479 (package
1480 (name "python-editorconfig")
1481 (version "0.12.2")
1482 (source
1483 (origin
1484 (method url-fetch)
1485 (uri (pypi-uri "EditorConfig" version))
1486 (sha256
1487 (base32
1488 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1489 (build-system python-build-system)
1490 (home-page "https://editorconfig.org/")
1491 (synopsis "EditorConfig bindings for python")
1492 (description "The EditorConfig project consists of a file format for
1493 defining coding styles and a collection of text editor plugins that enable
1494 editors to read the file format and adhere to defined styles. EditorConfig
1495 files are easily readable and they work nicely with version control systems.")
1496 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1497 (license (list license:bsd-2 license:psfl))))
1498
1499 (define-public python-et-xmlfile
1500 (package
1501 (name "python-et-xmlfile")
1502 (version "1.0.1")
1503 (source
1504 (origin
1505 (method url-fetch)
1506 (uri (pypi-uri "et_xmlfile" version))
1507 (sha256
1508 (base32
1509 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1510 (build-system python-build-system)
1511 (arguments
1512 `(#:phases (modify-phases %standard-phases
1513 (replace 'check
1514 (lambda _
1515 (invoke "pytest"))))))
1516 (native-inputs
1517 `(("python-pytest" ,python-pytest)
1518 ("python-lxml" ,python-lxml))) ;used for the tests
1519 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1520 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1521 (description "This Python library is based upon the @code{xmlfile} module
1522 from @code{lxml}. It aims to provide a low memory, compatible implementation
1523 of @code{xmlfile}.")
1524 (license license:expat)))
1525
1526 (define-public python2-et-xmlfile
1527 (package-with-python2 python-et-xmlfile))
1528
1529 (define-public python-openpyxl
1530 (package
1531 (name "python-openpyxl")
1532 (version "2.6.2")
1533 (source
1534 (origin
1535 ;; We use the upstream repository, as the tests are not included in the
1536 ;; PyPI releases.
1537 (method hg-fetch)
1538 (uri (hg-reference
1539 (url "https://bitbucket.org/openpyxl/openpyxl")
1540 (changeset version)))
1541 (file-name (string-append name "-" version "-checkout"))
1542 (sha256
1543 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1544 (build-system python-build-system)
1545 (arguments
1546 `(#:phases (modify-phases %standard-phases
1547 (replace 'check
1548 (lambda _
1549 (invoke "pytest"))))))
1550 (native-inputs
1551 ;; For the test suite.
1552 `(("python-lxml" ,python-lxml)
1553 ("python-pillow" ,python-pillow)
1554 ("python-pytest" ,python-pytest)))
1555 (propagated-inputs
1556 `(("python-et-xmlfile" ,python-et-xmlfile)
1557 ("python-jdcal" ,python-jdcal)))
1558 (home-page "https://openpyxl.readthedocs.io")
1559 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1560 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1561 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1562 standard.")
1563 (license license:expat)))
1564
1565 (define-public python-eventlet
1566 (package
1567 (name "python-eventlet")
1568 (version "0.25.1")
1569 (source
1570 (origin
1571 (method url-fetch)
1572 (uri (pypi-uri "eventlet" version))
1573 (sha256
1574 (base32
1575 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1576 (build-system python-build-system)
1577 (propagated-inputs
1578 `(("python-greenlet" ,python-greenlet)))
1579 (arguments
1580 ;; TODO: Requires unpackaged 'enum-compat'.
1581 '(#:tests? #f))
1582 (home-page "https://eventlet.net")
1583 (synopsis "Concurrent networking library for Python")
1584 (description
1585 "Eventlet is a concurrent networking library for Python that
1586 allows you to change how you run your code, not how you write it.
1587 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1588 Coroutines ensure that the developer uses a blocking style of programming
1589 that is similar to threading, but provide the benefits of non-blocking I/O.
1590 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1591 from the Python interpreter, or as a small part of a larger application.")
1592 (license license:expat)))
1593
1594 (define-public python2-eventlet
1595 (let ((base (package-with-python2
1596 (strip-python2-variant python-eventlet))))
1597 (package (inherit base)
1598 (propagated-inputs
1599 `(("python2-enum34" ,python2-enum34)
1600 ,@(package-propagated-inputs base))))))
1601
1602 (define-public python-six
1603 (package
1604 (name "python-six")
1605 (version "1.14.0")
1606 (source
1607 (origin
1608 (method url-fetch)
1609 (uri (pypi-uri "six" version))
1610 (sha256
1611 (base32
1612 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1613 (build-system python-build-system)
1614 (arguments
1615 `(#:phases
1616 (modify-phases %standard-phases
1617 (replace 'check
1618 (lambda _
1619 (invoke "py.test" "-v"))))))
1620 (native-inputs
1621 `(("python-pytest" ,python-pytest-bootstrap)))
1622 (home-page "https://pypi.org/project/six/")
1623 (synopsis "Python 2 and 3 compatibility utilities")
1624 (description
1625 "Six is a Python 2 and 3 compatibility library. It provides utility
1626 functions for smoothing over the differences between the Python versions with
1627 the goal of writing Python code that is compatible on both Python versions.
1628 Six supports every Python version since 2.5. It is contained in only one
1629 Python file, so it can be easily copied into your project.")
1630 (license license:x11)))
1631
1632 (define-public python2-six
1633 (package-with-python2 python-six))
1634
1635 (define-public python-six-bootstrap
1636 (package
1637 (inherit python-six)
1638 (name "python-six-bootstrap")
1639 (native-inputs `())
1640 (arguments `(#:tests? #f))))
1641
1642 (define-public python2-six-bootstrap
1643 (package-with-python2 python-six-bootstrap))
1644
1645 (define-public python-schedule
1646 (package
1647 (name "python-schedule")
1648 (version "0.4.3")
1649 (source
1650 (origin
1651 (method url-fetch)
1652 (uri (pypi-uri "schedule" version))
1653 (sha256
1654 (base32
1655 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1656 (build-system python-build-system)
1657 (native-inputs
1658 `(("python-pytest" ,python-pytest)
1659 ("python-mock" ,python-mock)))
1660 (home-page "https://github.com/dbader/schedule")
1661 (synopsis "Schedule periodic function calls in Python")
1662 (description
1663 "Schedule is an in-process scheduler for periodic jobs that uses the
1664 builder pattern for configuration. Schedule lets you run Python functions (or
1665 any other callable) periodically at pre-determined intervals using a simple,
1666 human-friendly syntax.")
1667 (license license:expat)))
1668
1669 (define-public python2-schedule
1670 (package-with-python2 python-schedule))
1671
1672 (define-public python-mechanize
1673 (package
1674 (name "python-mechanize")
1675 (version "0.4.5")
1676 (source
1677 (origin
1678 (method url-fetch)
1679 (uri (pypi-uri "mechanize" version))
1680 (sha256
1681 (base32
1682 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1683 (build-system python-build-system)
1684 (propagated-inputs
1685 `(("python-html5lib" ,python-html5lib)))
1686 (home-page "https://github.com/python-mechanize/mechanize")
1687 (synopsis
1688 "Stateful programmatic web browsing in Python")
1689 (description
1690 "Mechanize implements stateful programmatic web browsing in Python,
1691 after Andy Lester’s Perl module WWW::Mechanize.")
1692 (license license:bsd-3)))
1693
1694 (define-public python2-mechanize
1695 (package-with-python2 python-mechanize))
1696
1697 (define-public python-simplejson
1698 (package
1699 (name "python-simplejson")
1700 (version "3.14.0")
1701 (source
1702 (origin
1703 (method url-fetch)
1704 (uri (pypi-uri "simplejson" version))
1705 (sha256
1706 (base32
1707 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1708 (build-system python-build-system)
1709 (home-page "http://simplejson.readthedocs.org/en/latest/")
1710 (synopsis
1711 "Json library for Python")
1712 (description
1713 "JSON (JavaScript Object Notation) is a subset of JavaScript
1714 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1715 format.
1716
1717 Simplejson exposes an API familiar to users of the standard library marshal
1718 and pickle modules. It is the externally maintained version of the json
1719 library contained in Python 2.6, but maintains compatibility with Python 2.5
1720 and (currently) has significant performance advantages, even without using
1721 the optional C extension for speedups. Simplejson is also supported on
1722 Python 3.3+.")
1723 (license license:x11)))
1724
1725 (define-public python2-simplejson
1726 (package-with-python2 python-simplejson))
1727
1728
1729 (define-public python-pyicu
1730 (package
1731 (name "python-pyicu")
1732 (version "2.4.3")
1733 (source
1734 (origin
1735 (method url-fetch)
1736 (uri (pypi-uri "PyICU" version))
1737 (sha256
1738 (base32
1739 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1740 (build-system python-build-system)
1741 (inputs
1742 `(("icu4c" ,icu4c)))
1743 (native-inputs
1744 `(("python-pytest" ,python-pytest)
1745 ("python-six" ,python-six)))
1746 (home-page "https://github.com/ovalhub/pyicu")
1747 (synopsis "Python extension wrapping the ICU C++ API")
1748 (description
1749 "PyICU is a python extension wrapping the ICU C++ API.")
1750 (license license:x11)))
1751
1752 (define-public python2-pyicu
1753 (package-with-python2 python-pyicu))
1754
1755 (define-public python-dogtail
1756 (package
1757 (name "python-dogtail")
1758 (version "0.9.11")
1759 (source (origin
1760 (method url-fetch)
1761 (uri
1762 (string-append
1763 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1764 "dogtail-" version ".tar.gz"))
1765 (sha256
1766 (base32
1767 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1768 (build-system python-build-system)
1769 (arguments
1770 `(#:tests? #f ; TODO Launching dbus for the tests
1771 ; fails
1772 #:phases
1773 (modify-phases %standard-phases
1774 (replace 'check
1775 (lambda* (#:key tests? #:allow-other-keys)
1776 (when tests?
1777 (system "Xvfb :1 &")
1778 (setenv "DISPLAY" ":1")
1779 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1780 #t)))))
1781 (propagated-inputs
1782 `(("python-pygobject" ,python-pygobject)
1783 ("python-pycairo" ,python-pycairo)
1784 ("python-pyatspi" ,python-pyatspi)))
1785 (native-inputs
1786 `(("python-nose" ,python-nose)
1787 ("gtk+" ,gtk+)
1788 ("xvfb" ,xorg-server)
1789 ("dbus" ,dbus)
1790 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1791 ("gobject-introspection" ,gobject-introspection)))
1792 (home-page "https://gitlab.com/dogtail/dogtail/")
1793 (synopsis "GUI test tool and automation framework written in Python")
1794 (description
1795 "Dogtail is a GUI test tool and automation framework written in Python.
1796 It uses Accessibility (a11y) technologies to communicate with desktop
1797 applications. dogtail scripts are written in Python and executed like any
1798 other Python program.")
1799 (license license:gpl2+)))
1800
1801 (define-public python2-dogtail
1802 (package-with-python2 python-dogtail))
1803
1804 (define-public python-empy
1805 (package
1806 (name "python-empy")
1807 (version "3.3.3")
1808 (source (origin
1809 (method url-fetch)
1810 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1811 version ".tar.gz"))
1812 (sha256
1813 (base32
1814 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1815 (build-system python-build-system)
1816 (arguments
1817 `(#:tests? #f)) ; python2 only
1818 (home-page "http://www.alcyone.com/software/empy/")
1819 (synopsis "Templating system for Python")
1820 (description
1821 "EmPy is a system for embedding Python expressions and statements in
1822 template text; it takes an EmPy source file, processes it, and produces
1823 output. This is accomplished via expansions, which are special signals to the
1824 EmPy system and are set off by a special prefix (by default the at sign, @@).
1825 EmPy can expand arbitrary Python expressions and statements in this way, as
1826 well as a variety of special forms. Textual data not explicitly delimited in
1827 this way is sent unaffected to the output, allowing Python to be used in
1828 effect as a markup language. Also supported are callbacks via hooks,
1829 recording and playback via diversions, and dynamic, chainable filters. The
1830 system is highly configurable via command line options and embedded
1831 commands.")
1832 (license license:lgpl2.1+)))
1833
1834 (define-public python2-empy
1835 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1836 (package
1837 (inherit base)
1838 (arguments `(,@(package-arguments base)
1839 #:tests? #t)))))
1840
1841 (define-public python2-element-tree
1842 (package
1843 (name "python2-element-tree")
1844 (version "1.2.6")
1845 (source (origin
1846 (method url-fetch)
1847 (uri (string-append
1848 "http://effbot.org/media/downloads/elementtree-"
1849 version "-20050316.tar.gz"))
1850 (sha256
1851 (base32
1852 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1853 (build-system python-build-system)
1854 (arguments
1855 `(#:python ,python-2 ; seems to be part of Python 3
1856 #:tests? #f)) ; no 'test' sub-command
1857 (synopsis "Toolkit for XML processing in Python")
1858 (description
1859 "ElementTree is a Python library supporting lightweight XML processing.")
1860 (home-page "https://effbot.org/zone/element-index.htm")
1861 (license (license:x11-style
1862 "http://docs.python.org/2/license.html"
1863 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1864
1865 (define-public python2-pybugz
1866 (package
1867 (name "python2-pybugz")
1868 (version "0.6.11")
1869 (source (origin
1870 (method url-fetch)
1871 (uri (string-append
1872 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1873 version ".tar.gz"))
1874 (sha256
1875 (base32
1876 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1877 (patches (search-patches "pybugz-stty.patch"
1878 "pybugz-encode-error.patch"))))
1879 (build-system python-build-system)
1880 (arguments
1881 `(#:python ,python-2 ; SyntaxError with Python 3
1882 #:tests? #f)) ; no 'test' sub-command
1883 (propagated-inputs
1884 `(("element-tree" ,python2-element-tree)))
1885 (synopsis "Python and command-line interface to Bugzilla")
1886 (description
1887 "PyBugz is a Python library and command-line tool to query the Bugzilla
1888 bug tracking system. It is meant as an aid to speed up interaction with the
1889 bug tracker.")
1890 (home-page "http://www.liquidx.net/pybugz/")
1891 (license license:gpl2)))
1892
1893 (define-public python2-enum
1894 (package
1895 (name "python2-enum")
1896 (version "0.4.6")
1897 (source (origin
1898 (method url-fetch)
1899 (uri (pypi-uri "enum" version))
1900 (sha256
1901 (base32
1902 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1903 (build-system python-build-system)
1904 (arguments
1905 `(#:python ,python-2))
1906 (home-page "https://pypi.org/project/enum/")
1907 (synopsis "Robust enumerated type support in Python")
1908 (description
1909 "This provides a module for robust enumerations in Python. It has
1910 been superseded by the Python standard library and is provided only for
1911 compatibility.")
1912 ;; Choice of either license.
1913 (license (list license:gpl3+ license:psfl))))
1914
1915 (define-public python-enum34
1916 (package
1917 (name "python-enum34")
1918 (version "1.1.6")
1919 (source
1920 (origin
1921 (method url-fetch)
1922 (uri (pypi-uri "enum34" version))
1923 (sha256
1924 (base32
1925 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1926 (build-system python-build-system)
1927 (home-page "https://pypi.org/project/enum34/")
1928 (synopsis "Backported Python 3.4 Enum")
1929 (description
1930 "Enum34 is the new Python stdlib enum module available in Python 3.4
1931 backported for previous versions of Python from 2.4 to 3.3.")
1932 (license license:bsd-3)))
1933
1934 (define-public python2-enum34
1935 (package-with-python2 python-enum34))
1936
1937 (define-public python-parse-type
1938 (package
1939 (name "python-parse-type")
1940 (version "0.4.2")
1941 (source
1942 (origin
1943 (method url-fetch)
1944 (uri (pypi-uri "parse_type" version))
1945 (sha256
1946 (base32
1947 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1948 (build-system python-build-system)
1949 (propagated-inputs
1950 `(("python-six" ,python-six)
1951 ("python-parse" ,python-parse)))
1952 (native-inputs
1953 `(("python-pytest" ,python-pytest)
1954 ("python-pytest-runner" ,python-pytest-runner)))
1955 (home-page "https://github.com/jenisys/parse_type")
1956 (synopsis "Extended parse module")
1957 (description
1958 "Parse_type extends the python parse module.")
1959 (properties
1960 `((python2-variant . ,(delay python2-parse-type))))
1961 (license license:bsd-3)))
1962
1963 (define-public python2-parse-type
1964 (let ((base (package-with-python2
1965 (strip-python2-variant python-parse-type))))
1966 (package (inherit base)
1967 (propagated-inputs
1968 `(("python2-enum34" ,python2-enum34)
1969 ,@(package-propagated-inputs base))))))
1970
1971 (define-public python-parse
1972 (package
1973 (name "python-parse")
1974 (version "1.8.4")
1975 (source
1976 (origin
1977 (method url-fetch)
1978 (uri (pypi-uri "parse" version))
1979 (sha256
1980 (base32
1981 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1982 (build-system python-build-system)
1983 (arguments
1984 `(#:phases
1985 (modify-phases %standard-phases
1986 (replace 'check
1987 (lambda _ (invoke "python" "test_parse.py"))))))
1988 (home-page "https://github.com/r1chardj0n3s/parse")
1989 (synopsis "Parse strings")
1990 (description
1991 "Parse strings using a specification based on the Python @code{format()}
1992 syntax.")
1993 (license license:x11)))
1994
1995 (define-public python-polib
1996 (package
1997 (name "python-polib")
1998 (version "1.0.8")
1999 (source (origin
2000 (method url-fetch)
2001 (uri (pypi-uri "polib" version))
2002 (sha256
2003 (base32
2004 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2005 (build-system python-build-system)
2006 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2007 (synopsis "Manipulate, create and modify gettext files")
2008 (description "Polib can manipulate any gettext format (po, pot and mo)
2009 files. It can be used to create po files from scratch or to modify
2010 existing ones.")
2011 (license license:expat)))
2012
2013 (define-public python2-polib
2014 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2015 (package
2016 (inherit base)
2017 (arguments `(,@(package-arguments base)
2018 ;; Tests don't work with python2.
2019 #:tests? #f)))))
2020
2021 (define-public python-poyo
2022 (package
2023 (name "python-poyo")
2024 (version "0.5.0")
2025 (source
2026 (origin
2027 (method url-fetch)
2028 (uri (pypi-uri "poyo" version))
2029 (sha256
2030 (base32
2031 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2032 (build-system python-build-system)
2033 (home-page "https://github.com/hackebrot/poyo")
2034 (synopsis "Lightweight YAML Parser for Python")
2035 (description
2036 "This package provides a lightweight YAML Parser for Python. It supports
2037 only a chosen subset of the YAML format that is required to parse cookiecutter
2038 user configuration files. It does not have support for serializing into YAML
2039 and is not compatible with JSON.")
2040 (license license:expat)))
2041
2042 (define-public scons
2043 (package
2044 (name "scons")
2045 (version "3.0.4")
2046 (source (origin
2047 (method git-fetch)
2048 (uri (git-reference
2049 (url "https://github.com/SCons/scons.git")
2050 (commit version)))
2051 (file-name (git-file-name name version))
2052 (sha256
2053 (base32
2054 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2055 (build-system python-build-system)
2056 (arguments
2057 `(#:use-setuptools? #f ; still relies on distutils
2058 #:tests? #f ; no 'python setup.py test' command
2059 #:phases
2060 (modify-phases %standard-phases
2061 (add-before 'build 'bootstrap
2062 (lambda _
2063 (substitute* "src/engine/SCons/compat/__init__.py"
2064 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2065 "sys.modules[new] = __import__(old)"))
2066 (substitute* "src/engine/SCons/Platform/__init__.py"
2067 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2068 "mod = __import__(full_name)"))
2069 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2070 (chdir "build/scons")
2071 #t)))))
2072 (home-page "https://scons.org/")
2073 (synopsis "Software construction tool written in Python")
2074 (description
2075 "SCons is a software construction tool. Think of SCons as an improved,
2076 cross-platform substitute for the classic Make utility with integrated
2077 functionality similar to autoconf/automake and compiler caches such as ccache.
2078 In short, SCons is an easier, more reliable and faster way to build
2079 software.")
2080 (license license:x11)))
2081
2082 (define-public scons-python2
2083 (package
2084 (inherit (package-with-python2 scons))
2085 (name "scons-python2")))
2086
2087 (define-public python-extras
2088 (package
2089 (name "python-extras")
2090 (version "1.0.0")
2091 (source
2092 (origin
2093 (method url-fetch)
2094 (uri (pypi-uri "extras" version))
2095 (sha256
2096 (base32
2097 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2098 (build-system python-build-system)
2099 (arguments
2100 ;; FIXME: Circular dependency on testtools.
2101 '(#:tests? #f))
2102 (home-page "https://github.com/testing-cabal/extras")
2103 (synopsis "Useful extensions to the Python standard library")
2104 (description
2105 "Extras is a set of extensions to the Python standard library.")
2106 (license license:expat)))
2107
2108 (define-public python2-extras
2109 (package-with-python2 python-extras))
2110
2111 (define-public python-mimeparse
2112 (package
2113 (name "python-mimeparse")
2114 (version "1.6.0")
2115 (source
2116 (origin
2117 (method url-fetch)
2118 (uri (pypi-uri "python-mimeparse" version))
2119 (sha256
2120 (base32
2121 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2122 (build-system python-build-system)
2123 (arguments
2124 '(#:phases
2125 (modify-phases %standard-phases
2126 (replace 'check
2127 (lambda _
2128 (invoke "./mimeparse_test.py"))))))
2129 (home-page
2130 "https://github.com/dbtsai/python-mimeparse")
2131 (synopsis "Python library for parsing MIME types")
2132 (description
2133 "Mimeparse provides basic functions for parsing MIME type names and
2134 matching them against a list of media-ranges.")
2135 (license license:expat)))
2136
2137 (define-public python2-mimeparse
2138 (package-with-python2 python-mimeparse))
2139
2140 (define-public python-miniboa
2141 (package
2142 (name "python-miniboa")
2143 (version "1.0.7")
2144 (source
2145 (origin
2146 (method url-fetch)
2147 (uri (pypi-uri "miniboa" version))
2148 (sha256
2149 (base32
2150 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2151 (build-system python-build-system)
2152 (home-page "https://github.com/shmup/miniboa")
2153 (synopsis "Simple, single-threaded Telnet server")
2154 (description
2155 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2156 server.")
2157 (license license:asl2.0)))
2158
2159 (define-public python2-miniboa
2160 (package-with-python2 python-miniboa))
2161
2162 (define-public python-pafy
2163 (package
2164 (name "python-pafy")
2165 (version "0.5.3.1")
2166 (source
2167 (origin
2168 (method url-fetch)
2169 (uri (pypi-uri "pafy" version))
2170 (sha256
2171 (base32
2172 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2173 (build-system python-build-system)
2174 (arguments
2175 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2176 (propagated-inputs
2177 ;; Youtube-dl is a python package which is imported in the file
2178 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2179 `(("youtube-dl" ,youtube-dl)))
2180 (home-page "https://np1.github.io/pafy/")
2181 (synopsis "Retrieve YouTube content and metadata")
2182 (description
2183 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2184 (license license:lgpl3+)))
2185
2186 (define-public python2-funcsigs
2187 (package
2188 (name "python2-funcsigs")
2189 (version "1.0.2")
2190 (source (origin
2191 (method url-fetch)
2192 (uri (pypi-uri "funcsigs" version))
2193 (sha256
2194 (base32
2195 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2196 (build-system python-build-system)
2197 (arguments
2198 `(#:python ,python-2))
2199 (native-inputs
2200 `(("python2-unittest2" ,python2-unittest2)))
2201 (home-page "http://funcsigs.readthedocs.org")
2202 (synopsis "Python function signatures from PEP362")
2203 (description
2204 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2205 (license license:asl2.0)))
2206
2207 (define-public python2-funcsigs-bootstrap
2208 (package
2209 (inherit python2-funcsigs)
2210 (name "python2-funcsigs-bootstrap")
2211 (native-inputs `())
2212 (arguments
2213 `(#:tests? #f
2214 ,@(package-arguments python2-funcsigs)))))
2215
2216 (define-public python-py
2217 (package
2218 (name "python-py")
2219 (version "1.8.1")
2220 (source
2221 (origin
2222 (method url-fetch)
2223 (uri (pypi-uri "py" version))
2224 (sha256
2225 (base32
2226 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2227 (build-system python-build-system)
2228 (arguments
2229 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2230 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2231 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2232 ;; Is this module globally installed?"
2233 '(#:tests? #f))
2234 (native-inputs
2235 `(("python-setuptools-scm" ,python-setuptools-scm)))
2236 (home-page "https://github.com/pytest-dev/py")
2237 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2238 (description
2239 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2240 code introspection, and logging.")
2241 (license license:expat)))
2242
2243 (define-public python2-py
2244 (package-with-python2 python-py))
2245
2246 ;; Recent versions of python-fixtures and python-testrepository need
2247 ;; python-pbr for packaging, which itself needs these two packages for
2248 ;; testing.
2249 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2250 ;; same source, just without any test dependencies and with tests disabled.
2251 ;; python-pbr-minmal is then used to package python-fixtures and
2252 ;; python-testrepository.
2253 ;; Strictly speaking we currently could remove the test-requirements from the
2254 ;; normal python-pbr package (and save this package) since test are disabled
2255 ;; there anyway. But this may change in future.
2256 (define-public python-pbr-minimal
2257 (package
2258 (name "python-pbr-minimal")
2259 (version "3.0.1")
2260 (source
2261 (origin
2262 (method url-fetch)
2263 (uri (pypi-uri "pbr" version))
2264 (sha256
2265 (base32
2266 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2267 (build-system python-build-system)
2268 (arguments
2269 `(#:tests? #f))
2270 (home-page "https://docs.openstack.org/pbr/latest/")
2271 (synopsis "Minimal build of python-pbr used for bootstrapping")
2272 (description
2273 "Used only for bootstrapping python2-pbr, you should not need this.")
2274 (license license:asl2.0)))
2275
2276 (define-public python2-pbr-minimal
2277 (package-with-python2 python-pbr-minimal))
2278
2279 (define-public python-pbr
2280 (package
2281 (inherit python-pbr-minimal)
2282 (name "python-pbr")
2283 (arguments
2284 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2285 (propagated-inputs
2286 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2287 (native-inputs
2288 `(("python-fixtures" ,python-fixtures-bootstrap)
2289 ;; discover, coverage, hacking, subunit
2290 ("python-mock" ,python-mock)
2291 ("python-six" ,python-six)
2292 ("python-sphinx" ,python-sphinx)
2293 ("python-testrepository" ,python-testrepository-bootstrap)
2294 ("python-testresources" ,python-testresources-bootstrap)
2295 ("python-testscenarios" ,python-testscenarios-bootstrap)
2296 ("python-testtools" ,python-testtools-bootstrap)
2297 ("python-virtualenv" ,python-virtualenv)))
2298 (synopsis "Enhance the default behavior of Python’s setuptools")
2299 (description
2300 "Python Build Reasonableness (PBR) is a library that injects some useful
2301 and sensible default behaviors into your setuptools run. It will set
2302 versions, process requirements files and generate AUTHORS and ChangeLog file
2303 from git information.
2304 ")))
2305
2306 (define-public python2-pbr
2307 (package-with-python2 python-pbr))
2308
2309 (define-public python-pyrsistent
2310 (package
2311 (name "python-pyrsistent")
2312 (version "0.16.0")
2313 (home-page "https://github.com/tobgu/pyrsistent")
2314 (source (origin
2315 (method url-fetch)
2316 (uri (pypi-uri "pyrsistent" version))
2317 (sha256
2318 (base32
2319 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2320 (build-system python-build-system)
2321 (arguments
2322 '(#:phases (modify-phases %standard-phases
2323 ;; The package works fine with newer Pytest and Hypothesis, but
2324 ;; has pinned older versions to stay compatible with Python 2.
2325 (add-before 'check 'loosen-pytest-requirement
2326 (lambda _
2327 (substitute* "setup.py"
2328 (("pytest<5") "pytest")
2329 (("hypothesis<5") "hypothesis"))
2330 #t)))))
2331 (native-inputs
2332 `(("python-hypothesis" ,python-hypothesis)
2333 ("python-pytest" ,python-pytest)
2334 ("python-pytest-runner" ,python-pytest-runner)))
2335 (propagated-inputs
2336 `(("python-six" ,python-six)))
2337 (synopsis "Persistent data structures for Python")
2338 (description
2339 "Pyrsistent is a number of persistent collections (by some referred to as
2340 functional data structures). Persistent in the sense that they are immutable.
2341
2342 All methods on a data structure that would normally mutate it instead return a
2343 new copy of the structure containing the requested updates. The original
2344 structure is left untouched.")
2345 (license license:expat)))
2346
2347 (define-public python2-pyrsistent
2348 (package-with-python2 python-pyrsistent))
2349
2350 (define-public python-exif-read
2351 (package
2352 (name "python-exif-read")
2353 (version "2.1.2")
2354 (source (origin
2355 (method url-fetch)
2356 (uri (pypi-uri "ExifRead" version))
2357 (sha256
2358 (base32
2359 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2360 (build-system python-build-system)
2361 (arguments `(#:tests? #f)) ; no tests
2362 (home-page "https://github.com/ianare/exif-py")
2363 (synopsis "Python library to extract EXIF data from image files")
2364 (description
2365 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2366 files.")
2367 (license license:bsd-3)))
2368
2369 (define-public python2-exif-read
2370 (package-with-python2 python-exif-read))
2371
2372 (define-public python-pyld
2373 (package
2374 (name "python-pyld")
2375 (version "1.0.5")
2376 (source (origin
2377 (method url-fetch)
2378 (uri (pypi-uri "PyLD" version))
2379 (sha256
2380 (base32
2381 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2382 (build-system python-build-system)
2383 (home-page "https://github.com/digitalbazaar/pyld")
2384 (synopsis "Python implementation of the JSON-LD specification")
2385 (description
2386 "PyLD is an implementation of the JSON-LD specification.")
2387 (license license:bsd-3)))
2388
2389 (define-public python2-pyld
2390 (package-with-python2 python-pyld))
2391
2392 (define-public python-click
2393 (package
2394 (name "python-click")
2395 (version "7.0")
2396 (source
2397 (origin
2398 (method url-fetch)
2399 (uri (pypi-uri "click" version))
2400 (sha256
2401 (base32
2402 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2403 (build-system python-build-system)
2404 (arguments
2405 `(#:phases
2406 (modify-phases %standard-phases
2407 (add-after 'unpack 'fix-paths
2408 (lambda* (#:key inputs #:allow-other-keys)
2409 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2410 "cross-libc" "libc"))))
2411 (substitute* "click/_unicodefun.py"
2412 (("'locale'")
2413 (string-append "'" glibc "/bin/locale'"))))
2414 #t))
2415 (replace 'check
2416 (lambda _
2417 (invoke "python" "-m" "pytest"))))))
2418 (native-inputs
2419 `(("python-pytest" ,python-pytest)))
2420 (home-page "https://palletsprojects.com/p/click/")
2421 (synopsis "Command line library for Python")
2422 (description
2423 "Click is a Python package for creating command line interfaces in a
2424 composable way with as little code as necessary. Its name stands for
2425 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2426 with sensible defaults out of the box.")
2427 (license license:bsd-3)))
2428
2429 (define-public python2-click
2430 (package-with-python2 python-click))
2431
2432 (define-public python-wheel
2433 (package
2434 (name "python-wheel")
2435 (version "0.33.6")
2436 (source
2437 (origin
2438 (method url-fetch)
2439 (uri (pypi-uri "wheel" version))
2440 (sha256
2441 (base32
2442 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2443 (build-system python-build-system)
2444 (arguments
2445 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2446 ;; fails to find the newly-built bdist_wheel library, even though it is
2447 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2448 '(#:tests? #f))
2449 (home-page "https://bitbucket.org/pypa/wheel/")
2450 (synopsis "Format for built Python packages")
2451 (description
2452 "A wheel is a ZIP-format archive with a specially formatted filename and
2453 the @code{.whl} extension. It is designed to contain all the files for a PEP
2454 376 compatible install in a way that is very close to the on-disk format. Many
2455 packages will be properly installed with only the @code{Unpack} step and the
2456 unpacked archive preserves enough information to @code{Spread} (copy data and
2457 scripts to their final locations) at any later time. Wheel files can be
2458 installed with a newer @code{pip} or with wheel's own command line utility.")
2459 (license license:expat)))
2460
2461 (define-public python2-wheel
2462 (package-with-python2 python-wheel))
2463
2464 (define-public python-vcversioner
2465 (package
2466 (name "python-vcversioner")
2467 (version "2.16.0.0")
2468 (source
2469 (origin
2470 (method url-fetch)
2471 (uri (pypi-uri "vcversioner" version))
2472 (sha256
2473 (base32
2474 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2475 (build-system python-build-system)
2476 (synopsis "Python library for version number discovery")
2477 (description "Vcversioner is a Python library that inspects tagging
2478 information in a variety of version control systems in order to discover
2479 version numbers.")
2480 (home-page "https://github.com/habnabit/vcversioner")
2481 (license license:isc)))
2482
2483 (define-public python2-vcversioner
2484 (package-with-python2 python-vcversioner))
2485
2486 (define-public python-jdcal
2487 (package
2488 (name "python-jdcal")
2489 (version "1.4")
2490 (source
2491 (origin
2492 (method url-fetch)
2493 (uri (pypi-uri "jdcal" version))
2494 (sha256
2495 (base32
2496 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2497 (build-system python-build-system)
2498 (arguments
2499 `(#:phases (modify-phases %standard-phases
2500 (replace 'check
2501 (lambda _
2502 (invoke "pytest"))))))
2503 (native-inputs
2504 `(("python-pytest" ,python-pytest)))
2505 (home-page "https://github.com/phn/jdcal")
2506 (synopsis "Functions to convert between Julian dates Gregorian dates")
2507 (description "This Python library provides functions for converting
2508 between Julian dates and Gregorian dates.")
2509 (license license:bsd-2)))
2510
2511 (define-public python2-jdcal
2512 (package-with-python2 python-jdcal))
2513
2514 (define-public python-jsondiff
2515 (package
2516 (name "python-jsondiff")
2517 (version "1.2.0")
2518 (source
2519 (origin
2520 (method url-fetch)
2521 (uri (pypi-uri "jsondiff" version))
2522 (sha256
2523 (base32
2524 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2525 (build-system python-build-system)
2526 (native-inputs
2527 `(("python-nose" ,python-nose)
2528 ("python-nose-random" ,python-nose-random)))
2529 (home-page
2530 "https://github.com/fzumstein/jsondiff")
2531 (synopsis "Compare JSON and JSON-like structures in Python")
2532 (description "@code{jsondiff} is a Python library which lets you
2533 compare, diff, and patch JSON and JSON-like structures in Python.")
2534 (license license:expat)))
2535
2536 (define-public python-jsonschema
2537 (package
2538 (name "python-jsonschema")
2539 (version "3.2.0")
2540 (source (origin
2541 (method url-fetch)
2542 (uri (pypi-uri "jsonschema" version))
2543 (sha256
2544 (base32
2545 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2546 (build-system python-build-system)
2547 (arguments
2548 '(#:phases
2549 (modify-phases %standard-phases
2550 (replace 'check
2551 (lambda* (#:key inputs outputs #:allow-other-keys)
2552 (add-installed-pythonpath inputs outputs)
2553 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2554 (invoke "trial" "jsonschema"))))))
2555 (native-inputs
2556 `(("python-setuptools_scm" ,python-setuptools-scm)
2557 ("python-twisted" ,python-twisted)))
2558 (propagated-inputs
2559 `(("python-attrs" ,python-attrs)
2560 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2561 ("python-pyrsistent" ,python-pyrsistent)
2562 ("python-six" ,python-six)))
2563 (home-page "https://github.com/Julian/jsonschema")
2564 (synopsis "Implementation of JSON Schema for Python")
2565 (description
2566 "Jsonschema is an implementation of JSON Schema for Python.")
2567 (license license:expat)
2568 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2569
2570 (define-public python2-jsonschema
2571 (let ((jsonschema (package-with-python2
2572 (strip-python2-variant python-jsonschema))))
2573 (package (inherit jsonschema)
2574 (propagated-inputs
2575 `(("python2-functools32" ,python2-functools32)
2576 ,@(package-propagated-inputs jsonschema))))))
2577
2578 (define-public python-schema
2579 (package
2580 (name "python-schema")
2581 (version "0.6.6")
2582 (source
2583 (origin
2584 (method url-fetch)
2585 (uri (pypi-uri "schema" version))
2586 (sha256
2587 (base32
2588 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2589 (build-system python-build-system)
2590 (native-inputs
2591 `(("python-pytest" ,python-pytest)))
2592 (home-page "https://github.com/keleshev/schema")
2593 (synopsis "Simple data validation library")
2594 (description
2595 "@code{python-schema} is a library for validating Python data
2596 structures, such as those obtained from config-files, forms, external
2597 services or command-line parsing, converted from JSON/YAML (or
2598 something else) to Python data-types.")
2599 (license license:psfl)))
2600
2601 (define-public python2-schema
2602 (package-with-python2 python-schema))
2603
2604 (define-public python-schema-0.5
2605 (package (inherit python-schema)
2606 (version "0.5.0")
2607 (source
2608 (origin
2609 (method url-fetch)
2610 (uri (pypi-uri "schema" version))
2611 (sha256
2612 (base32
2613 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2614
2615 (define-public python2-schema-0.5
2616 (package-with-python2 python-schema-0.5))
2617
2618 (define-public python-kitchen
2619 (package
2620 (name "python-kitchen")
2621 (version "1.2.5")
2622 (source
2623 (origin
2624 (method url-fetch)
2625 (uri (pypi-uri "kitchen" version))
2626 (sha256
2627 (base32
2628 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2629 (build-system python-build-system)
2630 (propagated-inputs
2631 `(("python-chardet" ,python-chardet)))
2632 (home-page "https://github.com/fedora-infra/kitchen")
2633 (synopsis "Python API for snippets")
2634 (description "@code{kitchen} module provides a python API for all sorts of
2635 little useful snippets of code that everybody ends up writing for their projects
2636 but never seem big enough to build an independent release. Use kitchen and stop
2637 cutting and pasting that code over and over.")
2638 (license (list license:lgpl2.1+
2639 ;; subprocess.py, test_subprocess.py,
2640 ;; kitchen/pycompat25/defaultdict.py:
2641 license:psfl))))
2642
2643 (define-public python2-kitchen
2644 (package-with-python2 python-kitchen))
2645
2646 (define-public python-unidecode
2647 (package
2648 (name "python-unidecode")
2649 (version "1.1.1")
2650 (source (origin
2651 (method url-fetch)
2652 (uri (pypi-uri "Unidecode" version))
2653 (sha256
2654 (base32
2655 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2656 (build-system python-build-system)
2657 (home-page "https://pypi.org/project/Unidecode/")
2658 (synopsis "ASCII transliterations of Unicode text")
2659 (description
2660 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2661 useful when integrating with legacy code that doesn't support Unicode, or for
2662 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2663 machine identifiers from human-readable Unicode strings that should still be
2664 somewhat intelligible.")
2665 (license license:gpl2+)))
2666
2667 (define-public python2-unidecode
2668 (package-with-python2 python-unidecode))
2669
2670 (define-public python-text-unidecode
2671 (package
2672 (name "python-text-unidecode")
2673 (version "1.3")
2674 (source (origin
2675 (method url-fetch)
2676 (uri (pypi-uri "text-unidecode" version))
2677 (sha256
2678 (base32
2679 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2680 (build-system python-build-system)
2681 (arguments
2682 '(#:phases (modify-phases %standard-phases
2683 (replace 'check
2684 (lambda _
2685 (setenv "PYTHONPATH"
2686 (string-append "./build/lib:"
2687 (getenv "PYTHONPATH")))
2688 (invoke "pytest" "-vv"))))))
2689 (native-inputs
2690 `(("python-pytest" ,python-pytest)))
2691 (home-page "https://github.com/kmike/text-unidecode/")
2692 (synopsis "Decode Unicode data")
2693 (description
2694 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2695 Perl library. It can create ASCII representations of Unicode data. In general
2696 users should prefer the @code{python-unidecode} package which offers better
2697 memory usage and transliteration quality.")
2698 ;; The user can choose either license.
2699 (license (list license:clarified-artistic license:gpl2+))))
2700
2701 (define-public python2-text-unidecode
2702 (package-with-python2 python-text-unidecode))
2703
2704 (define-public python-pyjwt
2705 (package
2706 (name "python-pyjwt")
2707 (version "1.7.1")
2708 (source
2709 (origin
2710 (method url-fetch)
2711 (uri (pypi-uri "PyJWT" version))
2712 (sha256
2713 (base32
2714 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2715 (modules '((guix build utils)))
2716 (snippet
2717 '(begin
2718 (for-each delete-file-recursively
2719 (find-files "." "\\.pyc$"))
2720 #t))))
2721 (build-system python-build-system)
2722 (arguments
2723 '(#:phases (modify-phases %standard-phases
2724 (replace 'check
2725 (lambda _
2726 ;; Mimic upstream commit 3a20892442b34c7 to get
2727 ;; rid of dependency on pytest-runner < 5.0.
2728 ;; Remove substitution for PyJWT > 1.7.1.
2729 (substitute* "setup.py"
2730 ((".*pytest-runner.*")
2731 ""))
2732 (invoke "pytest" "-vv"))))))
2733 (native-inputs
2734 `(("python-pytest" ,python-pytest)
2735 ("python-pytest-cov" ,python-pytest-cov)))
2736 (home-page "https://github.com/progrium/pyjwt")
2737 (synopsis "JSON Web Token implementation in Python")
2738 (description
2739 "PyJWT is a JSON Web Token implementation written in Python.")
2740 (license license:expat)))
2741
2742 (define-public python2-pyjwt
2743 (package-with-python2 python-pyjwt))
2744
2745 (define-public python-pykka
2746 (package
2747 (name "python-pykka")
2748 (version "1.2.1")
2749 (source
2750 (origin
2751 (method url-fetch)
2752 (uri (pypi-uri "Pykka" version))
2753 (sha256
2754 (base32
2755 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2756 (build-system python-build-system)
2757 (native-inputs
2758 `(("python-mock" ,python-mock)
2759 ("python-nose" ,python-nose)
2760 ("python-gevent" ,python-gevent)
2761 ("python-eventlet" ,python-eventlet)))
2762 (home-page "https://www.pykka.org/")
2763 (synopsis "Pykka is a Python implementation of the actor model")
2764 (description
2765 "Pykka is a Python implementation of the actor model.
2766 The actor model introduces some simple rules to control the sharing
2767 of state and cooperation between execution units, which makes it
2768 easier to build concurrent applications.")
2769 (license license:asl2.0)))
2770
2771 (define-public python2-pykka
2772 (package-with-python2 python-pykka))
2773
2774 (define-public python-pymsgbox
2775 (package
2776 (name "python-pymsgbox")
2777 (version "1.0.6")
2778 (source
2779 (origin
2780 (method git-fetch)
2781 (uri (git-reference
2782 ;; LICENSE.txt is not present on pypi
2783 (url "https://github.com/asweigart/PyMsgBox")
2784 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2785 (file-name (git-file-name name version))
2786 (sha256
2787 (base32
2788 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2789 (arguments
2790 ;; Circular dependency to run tests:
2791 ;; Tests need pyautogui, which depends on pymsgbox.
2792 '(#:tests? #f))
2793 (build-system python-build-system)
2794 (home-page "https://github.com/asweigart/PyMsgBox")
2795 (synopsis "Python module for JavaScript-like message boxes")
2796 (description
2797 "PyMsgBox is a simple, cross-platform, pure Python module for
2798 JavaScript-like message boxes. Types of dialog boxes include:
2799 @enumerate
2800 @item alert
2801 @item confirm
2802 @item prompt
2803 @item password
2804 @end enumerate
2805 ")
2806 (license license:bsd-3)))
2807
2808 (define-public python-pympler
2809 (package
2810 (name "python-pympler")
2811 (home-page "https://pythonhosted.org/Pympler/")
2812 (version "0.8")
2813 (source (origin
2814 (method url-fetch)
2815 (uri (pypi-uri "Pympler" version))
2816 (sha256
2817 (base32
2818 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2819 (build-system python-build-system)
2820 (arguments
2821 `(#:phases (modify-phases %standard-phases
2822 (delete 'check)
2823 (add-after 'install 'check
2824 (lambda* (#:key inputs outputs #:allow-other-keys)
2825 (add-installed-pythonpath inputs outputs)
2826 (invoke "python" "setup.py" "test"))))))
2827 (synopsis "Measure, monitor and analyze memory behavior")
2828 (description
2829 "Pympler is a development tool to measure, monitor and analyze
2830 the memory behavior of Python objects in a running Python application.
2831
2832 By pympling a Python application, detailed insight in the size and the
2833 lifetime of Python objects can be obtained. Undesirable or unexpected
2834 runtime behavior like memory bloat and other @samp{pymples} can easily
2835 be identified.
2836
2837 A web profiling frontend exposes process statistics, garbage
2838 visualisation and class tracker statistics.")
2839 (license license:asl2.0)))
2840
2841 (define-public python2-pympler
2842 (package-with-python2 python-pympler))
2843
2844 (define-public python-itsdangerous
2845 (package
2846 (name "python-itsdangerous")
2847 (version "1.1.0")
2848 (source
2849 (origin
2850 (method url-fetch)
2851 (uri (pypi-uri "itsdangerous" version))
2852 (sha256
2853 (base32
2854 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2855 (build-system python-build-system)
2856 (home-page "https://palletsprojects.com/p/itsdangerous/")
2857 (synopsis "Python library for passing data to/from untrusted environments")
2858 (description
2859 "Itsdangerous provides various helpers to pass trusted data to untrusted
2860 environments and back.")
2861 (license license:bsd-3)))
2862
2863 (define-public python2-itsdangerous
2864 (package-with-python2 python-itsdangerous))
2865
2866 (define-public python-pyyaml
2867 (package
2868 (name "python-pyyaml")
2869 (version "5.3.1")
2870 (source
2871 (origin
2872 (method url-fetch)
2873 (uri (pypi-uri "PyYAML" version))
2874 (sha256
2875 (base32
2876 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2877 (build-system python-build-system)
2878 (inputs
2879 `(("libyaml" ,libyaml)))
2880 (home-page "https://pyyaml.org")
2881 (synopsis "YAML parser and emitter for Python")
2882 (description
2883 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2884 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2885 API, and sensible error messages. PyYAML supports standard YAML tags and
2886 provides Python-specific tags that represent an arbitrary Python object.")
2887 (license license:expat)))
2888
2889 (define-public python2-pyyaml
2890 (package-with-python2 python-pyyaml))
2891
2892 (define-public python-vine
2893 (package
2894 (name "python-vine")
2895 (version "1.1.4")
2896 (source
2897 (origin
2898 (method url-fetch)
2899 (uri (pypi-uri "vine" version))
2900 (sha256
2901 (base32
2902 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2903 (build-system python-build-system)
2904 (native-inputs
2905 `(("python-pytest" ,python-pytest)
2906 ("python-case" ,python-case)))
2907 (home-page "https://github.com/celery/vine")
2908 (synopsis "Promises for Python")
2909 (description
2910 "@code{vine} provides a special implementation of promises in that it can
2911 be used both for \"promise of a value\" and lazy evaluation. The biggest
2912 upside for this is that everything in a promise can also be a promise,
2913 e.g. filters, callbacks and errbacks can all be promises.")
2914 (license license:bsd-3)))
2915
2916 (define-public python-virtualenv
2917 (package
2918 (name "python-virtualenv")
2919 (version "20.0.10")
2920 (source
2921 (origin
2922 (method url-fetch)
2923 (uri (pypi-uri "virtualenv" version))
2924 (sha256
2925 (base32
2926 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2927 (build-system python-build-system)
2928 (native-inputs
2929 `(("python-mock" ,python-mock)
2930 ("python-pytest" ,python-pytest)
2931 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2932 ;; be an input at all". However, removing the input makes the build error:
2933 ;; File "setup.py", line 4, in <module>
2934 ;; raise RuntimeError("setuptools >= 41 required to build")
2935 ("python-setuptools" ,python-setuptools)
2936 ("python-setuptools-scm" ,python-setuptools-scm)))
2937 (propagated-inputs
2938 `(("python-appdirs" ,python-appdirs)
2939 ("python-distlib" ,python-distlib)
2940 ("python-filelock" ,python-filelock)
2941 ("python-six" ,python-six)
2942 ("python-importlib-metadata" ,python-importlib-metadata)))
2943 (home-page "https://virtualenv.pypa.io/")
2944 (synopsis "Virtual Python environment builder")
2945 (description
2946 "Virtualenv is a tool to create isolated Python environments.")
2947 (properties `((python2-variant . ,(delay python2-virtualenv))))
2948 (license license:expat)))
2949
2950 (define-public python2-virtualenv
2951 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2952 (package
2953 (inherit base)
2954 (arguments
2955 `(#:python ,python-2
2956 #:phases
2957 (modify-phases %standard-phases
2958 (add-after 'set-paths 'adjust-PYTHONPATH
2959 (lambda* (#:key inputs #:allow-other-keys)
2960 (let* ((python (assoc-ref inputs "python"))
2961 (python-sitedir (string-append python "/lib/python2.7"
2962 "/site-packages")))
2963 ;; XXX: 'python2' always comes first on PYTHONPATH
2964 ;; and shadows the 'setuptools' input. Move python2
2965 ;; last: this should be fixed in python-build-system
2966 ;; in a future rebuild cycle.
2967 (setenv "PYTHONPATH"
2968 (string-append (string-join (delete python-sitedir
2969 (string-split
2970 (getenv "PYTHONPATH")
2971 #\:))
2972 ":")
2973 ":" python-sitedir))
2974 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2975 (getenv "PYTHONPATH"))
2976 #t))))))
2977 (propagated-inputs
2978 `(("python-contextlib2" ,python2-contextlib2)
2979 ,@(package-propagated-inputs base))))))
2980
2981 (define-public python-markupsafe
2982 (package
2983 (name "python-markupsafe")
2984 (version "1.1.1")
2985 (source
2986 (origin
2987 (method url-fetch)
2988 (uri (pypi-uri "MarkupSafe" version))
2989 (sha256
2990 (base32
2991 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2992 (build-system python-build-system)
2993 (arguments
2994 `(#:modules ((ice-9 ftw)
2995 (srfi srfi-1)
2996 (srfi srfi-26)
2997 (guix build utils)
2998 (guix build python-build-system))
2999 #:phases (modify-phases %standard-phases
3000 (replace 'check
3001 (lambda _
3002 (let ((cwd (getcwd))
3003 (libdir (find (cut string-prefix? "lib." <>)
3004 (scandir "build"))))
3005 (setenv "PYTHONPATH"
3006 (string-append cwd "/build/" libdir ":"
3007 (getenv "PYTHONPATH")))
3008 (invoke "pytest" "-vv")))))))
3009 (native-inputs
3010 `(("python-pytest" ,python-pytest)))
3011 (home-page "https://github.com/mitsuhiko/markupsafe")
3012 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3013 (description
3014 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3015 for Python.")
3016 (license license:bsd-3)))
3017
3018 (define-public python2-markupsafe
3019 (package-with-python2 python-markupsafe))
3020
3021 (define-public python-jinja2
3022 (package
3023 (name "python-jinja2")
3024 (version "2.11.2")
3025 (source
3026 (origin
3027 (method url-fetch)
3028 (uri (pypi-uri "Jinja2" version))
3029 (sha256
3030 (base32
3031 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3032 (build-system python-build-system)
3033 (arguments
3034 '(#:phases (modify-phases %standard-phases
3035 (replace 'check
3036 (lambda* (#:key tests? #:allow-other-keys)
3037 (if tests?
3038 (begin
3039 (setenv "PYTHONPATH"
3040 (string-append "./build/lib:"
3041 (getenv "PYTHONPATH")))
3042 (invoke "pytest" "-vv"))
3043 (format #t "test suite not run~%"))
3044 #t)))))
3045 (native-inputs
3046 `(("python-pytest" ,python-pytest)))
3047 (propagated-inputs
3048 `(("python-markupsafe" ,python-markupsafe)))
3049 (home-page "http://jinja.pocoo.org/")
3050 (synopsis "Python template engine")
3051 (description
3052 "Jinja2 is a small but fast and easy to use stand-alone template engine
3053 written in pure Python.")
3054 (license license:bsd-3)))
3055
3056 (define-public python2-jinja2
3057 (package-with-python2 python-jinja2))
3058
3059 (define-public python-jinja2-time
3060 (package
3061 (name "python-jinja2-time")
3062 (version "0.2.0")
3063 (source
3064 (origin
3065 (method url-fetch)
3066 (uri (pypi-uri "jinja2-time" version))
3067 (sha256
3068 (base32
3069 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3070 (build-system python-build-system)
3071 (propagated-inputs
3072 `(("python-arrow" ,python-arrow)
3073 ("python-jinja2" ,python-jinja2)))
3074 (home-page
3075 "https://github.com/hackebrot/jinja2-time")
3076 (synopsis "Jinja2 Extension for Dates and Times")
3077 (description
3078 "This package provides an extension for the template engine Jinja2. It
3079 adds a 'now' tag providing a convenient access to the arrow.now() API from
3080 templates. A format string can be provided to control the output.")
3081 (license license:expat)))
3082
3083 (define-public python-pystache
3084 (package
3085 (name "python-pystache")
3086 (version "0.5.4")
3087 (source (origin
3088 (method url-fetch)
3089 (uri (pypi-uri "pystache" version))
3090 (sha256
3091 (base32
3092 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3093 (build-system python-build-system)
3094 (arguments
3095 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3096 (home-page "http://defunkt.io/pystache/")
3097 (synopsis "Python logic-less template engine")
3098 (description
3099 "Pystache is a Python implementation of the framework agnostic,
3100 logic-free templating system Mustache.")
3101 (license license:expat)
3102 (properties `((python2-variant . ,(delay python2-pystache))))))
3103
3104 (define-public python2-pystache
3105 (package (inherit (package-with-python2
3106 (strip-python2-variant python-pystache)))
3107 (arguments
3108 `(#:python ,python-2
3109 #:phases
3110 (modify-phases %standard-phases
3111 (replace 'check
3112 (lambda _
3113 (invoke "python" "test_pystache.py"))))))))
3114
3115 (define-public python-joblib
3116 (package
3117 (name "python-joblib")
3118 (version "0.14.1")
3119 (source (origin
3120 (method url-fetch)
3121 (uri (pypi-uri "joblib" version))
3122 (sha256
3123 (base32
3124 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3125 (build-system python-build-system)
3126 (arguments
3127 `(#:phases
3128 (modify-phases %standard-phases
3129 (replace 'check
3130 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3131 (native-inputs
3132 `(("python-pytest" ,python-pytest)))
3133 (home-page "https://joblib.readthedocs.io/")
3134 (synopsis "Using Python functions as pipeline jobs")
3135 (description
3136 "Joblib is a set of tools to provide lightweight pipelining in Python.
3137 In particular, joblib offers: transparent disk-caching of the output values
3138 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3139 logging and tracing of the execution.")
3140 (license license:bsd-3)))
3141
3142 (define-public python2-joblib
3143 (package-with-python2 python-joblib))
3144
3145 (define-public python-daemon
3146 (package
3147 (name "python-daemon")
3148 (version "2.2.3")
3149 (source
3150 (origin
3151 (method url-fetch)
3152 (uri (pypi-uri "python-daemon" version))
3153 (sha256
3154 (base32
3155 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3156 (build-system python-build-system)
3157 (arguments
3158 `(#:phases
3159 (modify-phases %standard-phases
3160 (add-before 'check 'disable-tests
3161 (lambda _
3162 ;; FIXME: Determine why test fails
3163 (substitute* "test/test_daemon.py"
3164 (("test_detaches_process_context")
3165 "skip_test_detaches_process_context"))
3166 #t)))))
3167 (propagated-inputs
3168 `(("python-lockfile" ,python-lockfile)))
3169 (native-inputs
3170 `(("python-unittest2" ,python-unittest2)
3171 ("python-testtools" ,python-testtools)
3172 ("python-testscenarios" ,python-testscenarios)
3173 ("python-mock" ,python-mock)
3174 ("python-docutils" ,python-docutils)))
3175 (home-page "https://pagure.io/python-daemon/")
3176 (synopsis "Python library for making a Unix daemon process")
3177 (description "Python-daemon is a library that assists a Python program to
3178 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3179
3180 This library provides a @code{DaemonContext} class that manages the following
3181 important tasks for becoming a daemon process:
3182 @enumerate
3183 @item Detach the process into its own process group.
3184 @item Set process environment appropriate for running inside a chroot.
3185 @item Renounce suid and sgid privileges.
3186 @item Close all open file descriptors.
3187 @item Change the working directory, uid, gid, and umask.
3188 @item Set appropriate signal handlers.
3189 @item Open new file descriptors for stdin, stdout, and stderr.
3190 @item Manage a specified PID lock file.
3191 @item Register cleanup functions for at-exit processing.
3192 @end enumerate")
3193 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3194 (license (list license:asl2.0 license:gpl3+))))
3195
3196 (define-public python-anytree
3197 (package
3198 (name "python-anytree")
3199 (version "2.8.0")
3200 (source (origin
3201 (method url-fetch)
3202 (uri (pypi-uri "anytree" version))
3203 (sha256
3204 (base32
3205 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3206 (build-system python-build-system)
3207 (propagated-inputs
3208 `(("python-six" ,python-six)))
3209 (native-inputs
3210 `(;; For tests.
3211 ("graphviz" ,graphviz) ;for 'dot'
3212 ("python-nose" ,python-nose)))
3213 (home-page "https://github.com/c0fec0de/anytree")
3214 (synopsis "Lightweight tree data library")
3215 (description
3216 "@code{anytree} is a simple, lightweight, and extensible tree data
3217 structure for Python.")
3218 (license license:asl2.0)))
3219
3220 (define-public python-docutils
3221 (package
3222 (name "python-docutils")
3223 (version "0.16")
3224 (source
3225 (origin
3226 (method url-fetch)
3227 (uri (pypi-uri "docutils" version))
3228 (sha256
3229 (base32
3230 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3231 (build-system python-build-system)
3232 (arguments
3233 '(#:phases (modify-phases %standard-phases
3234 (replace 'check
3235 (lambda* (#:key tests? #:allow-other-keys)
3236 (if tests?
3237 (invoke "python" "test/alltests.py")
3238 (format #t "test suite not run~%"))
3239 #t)))))
3240 (home-page "http://docutils.sourceforge.net/")
3241 (synopsis "Python Documentation Utilities")
3242 (description
3243 "Docutils is a modular system for processing documentation into useful
3244 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3245 reStructuredText.")
3246 ;; Most of the source code is public domain, but some source files are
3247 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3248 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3249
3250 (define-public python2-docutils
3251 (package-with-python2 python-docutils))
3252
3253 ;; python2-sphinx fails its test suite with newer versions.
3254 (define-public python2-docutils-0.14
3255 (package
3256 (inherit python2-docutils)
3257 (version "0.14")
3258 (source (origin
3259 (method url-fetch)
3260 (uri (pypi-uri "docutils" version))
3261 (sha256
3262 (base32
3263 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3264
3265 (define-public python-restructuredtext-lint
3266 (package
3267 (name "python-restructuredtext-lint")
3268 (version "1.3.0")
3269 (source
3270 (origin
3271 (method url-fetch)
3272 (uri (pypi-uri "restructuredtext-lint" version))
3273 (sha256
3274 (base32
3275 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3276 (build-system python-build-system)
3277 (arguments
3278 `(#:phases
3279 (modify-phases %standard-phases
3280 (delete 'check)
3281 (add-after 'install 'check
3282 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3283 (when tests?
3284 (add-installed-pythonpath inputs outputs)
3285 (invoke "nosetests" "-v"))
3286 #t)))))
3287 (propagated-inputs
3288 `(("python-docutils" ,python-docutils)))
3289 (native-inputs
3290 `(("python-nose" ,python-nose)))
3291 (home-page "https://github.com/twolfson/restructuredtext-lint")
3292 (synopsis "reStructuredText linter")
3293 (description "This package provides a linter for the reStructuredText
3294 format.")
3295 (license license:unlicense)))
3296
3297 (define-public python-doc8
3298 (package
3299 (name "python-doc8")
3300 (version "0.8.0")
3301 (source
3302 (origin
3303 (method url-fetch)
3304 (uri (pypi-uri "doc8" version))
3305 (sha256
3306 (base32
3307 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3308 (build-system python-build-system)
3309 (arguments
3310 `(#:phases
3311 (modify-phases %standard-phases
3312 (delete 'check)
3313 (add-after 'install 'check
3314 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3315 (when tests?
3316 (add-installed-pythonpath inputs outputs)
3317 (invoke "pytest" "-v"))
3318 #t)))))
3319 (propagated-inputs
3320 `(("python-chardet" ,python-chardet)
3321 ("python-docutils" ,python-docutils)
3322 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3323 ("python-six" ,python-six)
3324 ("python-stevedore" ,python-stevedore)))
3325 (native-inputs
3326 `(("python-testtools" ,python-testtools)
3327 ("python-pytest" ,python-pytest)))
3328 (home-page "https://launchpad.net/doc8")
3329 (synopsis
3330 "Style checker for Sphinx (or other) RST documentation")
3331 (description
3332 "Doc8 is an opinionated style checker for reStructured Text and plain
3333 text styles of documentation.")
3334 (license license:asl2.0)))
3335
3336 (define-public python-pygments
3337 (package
3338 (name "python-pygments")
3339 (version "2.5.2")
3340 (source
3341 (origin
3342 (method url-fetch)
3343 (uri (pypi-uri "Pygments" version))
3344 (sha256
3345 (base32
3346 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3347 (build-system python-build-system)
3348 (arguments
3349 ;; FIXME: Tests require sphinx, which depends on this.
3350 '(#:tests? #f))
3351 (home-page "https://pygments.org/")
3352 (synopsis "Syntax highlighting")
3353 (description
3354 "Pygments is a syntax highlighting package written in Python.")
3355 (license license:bsd-2)))
3356
3357 (define-public python2-pygments
3358 (package-with-python2 python-pygments))
3359
3360 (define-public python-bumpversion
3361 (package
3362 (name "python-bumpversion")
3363 (version "0.5.3")
3364 (source
3365 (origin
3366 (method url-fetch)
3367 (uri (pypi-uri "bumpversion" version))
3368 (sha256
3369 (base32
3370 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3371 (build-system python-build-system)
3372 (home-page "https://github.com/peritus/bumpversion")
3373 (synopsis "Tool to bump software version")
3374 (description "This tool provides a command-line interface (CLI) to bump a
3375 software version simply.")
3376 (license license:expat)))
3377
3378 (define-public python-deprecated
3379 (package
3380 (name "python-deprecated")
3381 (version "1.2.5")
3382 (source
3383 (origin
3384 (method git-fetch)
3385 (uri (git-reference
3386 (url "https://github.com/tantale/deprecated.git")
3387 (commit (string-append "v" version))))
3388 (file-name (git-file-name name version))
3389 (sha256
3390 (base32
3391 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3392 (build-system python-build-system)
3393 (arguments
3394 `(#:phases (modify-phases %standard-phases
3395 (replace 'check
3396 (lambda _
3397 (invoke "pytest"))))))
3398 (propagated-inputs
3399 `(("python-wrapt" ,python-wrapt)))
3400 (native-inputs
3401 `(("python-bumpversion" ,python-bumpversion)
3402 ("python-pytest" ,python-pytest)
3403 ("python-pytest-cov" ,python-pytest-cov)
3404 ("python-sphinx" ,python-sphinx)
3405 ("python-tox" ,python-tox)))
3406 (home-page "https://github.com/tantale/deprecated")
3407 (synopsis "Python decorator to deprecate classes, functions or methods")
3408 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3409 to deprecate classes, functions or methods.")
3410 (license license:expat)))
3411
3412 (define-public python-pygithub
3413 (package
3414 (name "python-pygithub")
3415 (version "1.43.8")
3416 (source
3417 ;; We fetch from the Git repo because there are no tests in the PyPI
3418 ;; archive.
3419 (origin
3420 (method git-fetch)
3421 (uri (git-reference
3422 (url "https://github.com/PyGithub/PyGithub.git")
3423 (commit (string-append "v" version))))
3424 (file-name (git-file-name name version))
3425 (sha256
3426 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3427 (build-system python-build-system)
3428 (arguments
3429 `(#:phases (modify-phases %standard-phases
3430 ;; Some tests rely on the network.
3431 (add-after 'unpack 'disable-failing-tests
3432 (lambda _
3433 (substitute* "tests/Issue142.py"
3434 (("testDecodeJson") "disabled_testDecodeJson"))
3435 #t))
3436 (add-before 'check 'prepare-for-tests
3437 (lambda _
3438 (for-each (lambda (f)
3439 (chmod f #o666))
3440 (find-files "./tests"))
3441 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3442 (setenv "PYTHONPATH"
3443 (string-append "./tests:" (getenv "PYTHONPATH")))
3444 #t)))))
3445 (propagated-inputs
3446 `(("python-deprecated" ,python-deprecated)
3447 ("python-pyjwt" ,python-pyjwt)
3448 ("python-requests" ,python-requests)))
3449 (native-inputs `(("python-httpretty" ,python-httpretty)))
3450 (home-page "https://pygithub.readthedocs.io/en/latest/")
3451 (synopsis "Python library for the GitHub API")
3452 (description "This library allows managing GitHub resources such as
3453 repositories, user profiles, and organizations in your Python applications,
3454 using version 3 of the GitHub application programming interface (API).")
3455 (license license:lgpl3+)))
3456
3457 (define-public python-rellu
3458 (package
3459 (name "python-rellu")
3460 (version "0.7")
3461 (source
3462 (origin
3463 (method url-fetch)
3464 (uri (pypi-uri "rellu" version))
3465 (sha256
3466 (base32
3467 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3468 (build-system python-build-system)
3469 (propagated-inputs
3470 `(("python-invoke" ,python-invoke)
3471 ("python-pygithub" ,python-pygithub)))
3472 (home-page "https://github.com/robotframework/rellu")
3473 (synopsis "Utilities to create PyPI releases")
3474 (description "This collection of utilities contains tooling and templates
3475 to assist in creating releases on GitHub and publishing them on PyPI. It is
3476 designed to be used by Robot Framework and tools and libraries in its
3477 ecosystem, but can naturally be used also by other projects.")
3478 (license license:asl2.0)))
3479
3480 (define-public python-robotframework
3481 (package
3482 (name "python-robotframework")
3483 (version "3.1.2")
3484 ;; There are no tests in the PyPI archive.
3485 (source
3486 (origin
3487 (method git-fetch)
3488 (uri (git-reference
3489 (url "https://github.com/robotframework/robotframework.git")
3490 (commit (string-append "v" version))))
3491 (file-name (git-file-name name version))
3492 (sha256
3493 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3494 (patches (search-patches
3495 "python-robotframework-honor-source-date-epoch.patch"))))
3496 (build-system python-build-system)
3497 (arguments
3498 `(#:phases (modify-phases %standard-phases
3499 (add-before 'build 'build-and-install-doc
3500 (lambda* (#:key outputs #:allow-other-keys)
3501 (let* ((doc-output (assoc-ref outputs "doc"))
3502 (doc (string-append doc-output "/share/"
3503 ,name "-" ,version "/")))
3504 (invoke "invoke" "library-docs" "all")
3505 (mkdir-p doc)
3506 (copy-recursively "doc/libraries"
3507 (string-append doc "/libraries"))
3508 #t)))
3509 (replace 'check
3510 (lambda _
3511 (invoke "python" "utest/run.py"))))))
3512 (native-inputs
3513 `(("python-invoke" ,python-invoke)
3514 ("python-rellu" ,python-rellu)
3515 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3516 (outputs '("out" "doc"))
3517 (home-page "https://robotframework.org")
3518 (synopsis "Generic automation framework")
3519 (description "Robot Framework is a generic automation framework for
3520 acceptance testing, acceptance test driven development (ATDD), and robotic
3521 process automation (RPA).")
3522 (license license:asl2.0)))
3523
3524 (define-public python-robotframework-lint
3525 ;; There is no properly tagged release; the commit below seems to correspond
3526 ;; to the 0.9 stable release available from PyPI. The tests are not
3527 ;; included in the PyPI archive, so we fetch the sources from the upstream
3528 ;; Git repo.
3529 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3530 (revision "1"))
3531 (package
3532 (name "python-robotframework-lint")
3533 (version (git-version "0.9.0" revision commit))
3534 (source
3535 (origin
3536 (method git-fetch)
3537 (uri (git-reference
3538 (url "https://github.com/boakley/robotframework-lint.git")
3539 (commit commit)))
3540 (file-name (git-file-name name version))
3541 (sha256
3542 (base32
3543 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3544 (build-system python-build-system)
3545 (arguments
3546 `(#:phases
3547 (modify-phases %standard-phases
3548 (replace 'check
3549 (lambda _
3550 (invoke "python" "-m" "robot" "-A"
3551 "tests/conf/default.args" "tests"))))))
3552 (propagated-inputs
3553 `(("python-robotframework" ,python-robotframework)))
3554 (home-page "https://github.com/boakley/robotframework-lint/")
3555 (synopsis "Static analysis tool (linter) for Robot Framework")
3556 (description "This package provides the @code{rflint} command-line
3557 utility, a static analysis tool (linter) for Robot Framework source files.")
3558 (license license:asl2.0))))
3559
3560 (define-public python-robotframework-sshlibrary
3561 (package
3562 (name "python-robotframework-sshlibrary")
3563 (version "3.3.0")
3564 ;; There are no tests in the PyPI archive.
3565 (source
3566 (origin
3567 (method git-fetch)
3568 (uri (git-reference
3569 (url "https://github.com/robotframework/SSHLibrary.git")
3570 (commit (string-append "v" version))))
3571 (file-name (git-file-name name version))
3572 (sha256
3573 (base32
3574 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3575 (build-system python-build-system)
3576 (arguments
3577 `(#:phases
3578 (modify-phases %standard-phases
3579 (add-before 'build 'build-and-install-doc
3580 (lambda* (#:key outputs #:allow-other-keys)
3581 (let* ((doc-output (assoc-ref outputs "doc"))
3582 (doc (string-append doc-output "/share/"
3583 ,name "-" ,version "/")))
3584 (invoke "chmod" "-R" "+w" "docs")
3585 (invoke "invoke" "kw-docs" "project-docs")
3586 (mkdir-p doc)
3587 (for-each delete-file (find-files "docs" "\\.rst"))
3588 (copy-recursively "docs" doc)
3589 #t)))
3590 (replace 'check
3591 (lambda _
3592 ;; Some tests require an SSH server; we remove them.
3593 (delete-file "utest/test_client_api.py")
3594 (delete-file "utest/test_scp.py")
3595 (invoke "python" "utest/run.py"))))))
3596 (propagated-inputs
3597 `(("python-robotframework" ,python-robotframework)
3598 ("python-paramiko" ,python-paramiko)
3599 ("python-scp" ,python-scp)))
3600 (native-inputs
3601 `(("openssh" ,openssh)
3602 ("which" ,which)
3603 ;; To generate the documentation
3604 ("python-docutils" ,python-docutils)
3605 ("python-invoke" ,python-invoke)
3606 ("python-pygments" ,python-pygments)
3607 ("python-rellu" ,python-rellu)))
3608 (outputs '("out" "doc"))
3609 (home-page "https://github.com/robotframework/SSHLibrary")
3610 (synopsis "Robot Framework library for SSH and SFTP")
3611 (description "SSHLibrary is a Robot Framework library providing support
3612 for SSH and SFTP. It has the following main usages:
3613 @itemize @bullet
3614 @item Executing commands on the remote machine, either blocking or non-blocking.
3615 @item Writing and reading in an interactive shell.
3616 @item Transferring files and directories over SFTP.
3617 @item Ensuring that files and directories exist on the remote machine.
3618 @end itemize")
3619 (license license:asl2.0)))
3620
3621 (define-public python-rstr
3622 (package
3623 (name "python-rstr")
3624 (version "2.2.6")
3625 (source
3626 (origin
3627 (method url-fetch)
3628 (uri (pypi-uri "rstr" version))
3629 (sha256
3630 (base32
3631 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3632 (build-system python-build-system)
3633 (home-page
3634 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3635 (synopsis "Generate random strings in Python")
3636 (description "This package provides a python module for generating
3637 random strings of various types. It could be useful for fuzz testing,
3638 generating dummy data, or other applications. It has no dependencies
3639 outside the standard library.")
3640 (license license:bsd-3)))
3641
3642 (define-public python-scp
3643 (package
3644 (name "python-scp")
3645 (version "0.13.2")
3646 (source
3647 (origin
3648 (method url-fetch)
3649 (uri (pypi-uri "scp" version))
3650 (sha256
3651 (base32
3652 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3653 (build-system python-build-system)
3654 (arguments
3655 '(#:tests? #f)) ;tests require an SSH server
3656 (propagated-inputs
3657 `(("python-paramiko" ,python-paramiko)))
3658 (home-page "https://github.com/jbardin/scp.py")
3659 (synopsis "SCP protocol module for Python and Paramiko")
3660 (description "The scp module extends the Paramiko library to send and
3661 receive files via the SCP1 protocol, as implemented by the OpenSSH
3662 @command{scp} program.")
3663 (license license:gpl2+)))
3664
3665 (define-public python-rst.linker
3666 (package
3667 (name "python-rst.linker")
3668 (version "1.11")
3669 (source
3670 (origin
3671 (method url-fetch)
3672 (uri (pypi-uri "rst.linker" version))
3673 (sha256
3674 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3675 (build-system python-build-system)
3676 (propagated-inputs
3677 `(("python-dateutil" ,python-dateutil)
3678 ("python-six" ,python-six)))
3679 (native-inputs
3680 `(("python-setuptools-scm" ,python-setuptools-scm)))
3681 ;; Test would require path.py, which would introduce a cyclic dependence.
3682 (arguments `(#:tests? #f))
3683 ;; Note: As of version 1.7 the documentation is not worth building.
3684 (home-page "https://github.com/jaraco/rst.linker")
3685 (synopsis "Sphinx plugin to add links and timestamps")
3686 (description "rst.linker automatically replaces text by a
3687 reStructuredText external reference or timestamps. It's primary purpose is to
3688 augment the changelog, but it can be used for other documents, too.")
3689 (license license:expat)))
3690
3691 (define-public python2-rst.linker
3692 (package-with-python2 python-rst.linker))
3693
3694 (define-public python-feedgenerator
3695 (package
3696 (name "python-feedgenerator")
3697 (version "1.9")
3698 (source
3699 (origin
3700 (method url-fetch)
3701 (uri (pypi-uri "feedgenerator" version))
3702 (sha256
3703 (base32
3704 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3705 (modules '((guix build utils)))
3706 (snippet
3707 '(begin
3708 ;; Remove pre-compiled .pyc files from source.
3709 (for-each delete-file-recursively
3710 (find-files "." "__pycache__" #:directories? #t))
3711 (for-each delete-file (find-files "." "\\.pyc$"))
3712 #t))))
3713 (build-system python-build-system)
3714 (propagated-inputs
3715 `(("python-pytz" ,python-pytz)
3716 ("python-six" ,python-six)))
3717 (home-page "https://github.com/getpelican/feedgenerator")
3718 (synopsis
3719 "Standalone version of Django's Atom/RSS feed generator")
3720 (description
3721 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3722 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3723 (license license:bsd-3)))
3724
3725 (define-public python2-feedgenerator
3726 (package-with-python2 python-feedgenerator))
3727
3728 (define-public python-toml
3729 (package
3730 (name "python-toml")
3731 (version "0.10.1")
3732 (source
3733 (origin
3734 (method url-fetch)
3735 (uri (pypi-uri "toml" version))
3736 (sha256
3737 (base32
3738 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3739 (build-system python-build-system)
3740 (arguments
3741 `(#:tests? #f)) ;no tests suite in release
3742 (home-page "https://github.com/uiri/toml")
3743 (synopsis "Library for TOML")
3744 (description
3745 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3746 Language (TOML) configuration files.")
3747 (license license:expat)))
3748
3749 (define-public python-jsonrpc-server
3750 (package
3751 (name "python-jsonrpc-server")
3752 (version "0.3.4")
3753 (source
3754 (origin
3755 (method url-fetch)
3756 (uri (pypi-uri "python-jsonrpc-server" version))
3757 (sha256
3758 (base32
3759 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3760 (build-system python-build-system)
3761 (propagated-inputs
3762 `(("python-mock" ,python-mock)
3763 ("python-pytest" ,python-pytest)
3764 ("python-ujson" ,python-ujson-1)))
3765 (home-page
3766 "https://github.com/palantir/python-jsonrpc-server")
3767 (synopsis "JSON RPC 2.0 server library")
3768 (description
3769 "This package provides a JSON RPC 2.0 server library for Python.")
3770 (license license:expat)))
3771
3772 (define-public python-pydocstyle
3773 (package
3774 (name "python-pydocstyle")
3775 (version "3.0.0")
3776 (source
3777 (origin
3778 (method url-fetch)
3779 (uri (pypi-uri "pydocstyle" version))
3780 (sha256
3781 (base32
3782 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3783 (build-system python-build-system)
3784 (propagated-inputs
3785 `(("python-six" ,python-six)
3786 ("python-snowballstemmer" ,python-snowballstemmer)))
3787 (home-page
3788 "https://github.com/PyCQA/pydocstyle/")
3789 (synopsis "Python docstring style checker")
3790 (description
3791 "This package provides a style checker for the Python Language
3792 Server (PLS).")
3793 (license license:expat)))
3794
3795 (define-public python-language-server
3796 (package
3797 (name "python-language-server")
3798 (version "0.32.0")
3799 (source
3800 (origin
3801 (method url-fetch)
3802 (uri (pypi-uri "python-language-server" version))
3803 (sha256
3804 (base32
3805 "0j5swacmjps9sas1gfwg0xi84rmjhfhz20cwg3k4058d20rs20ip"))))
3806 (build-system python-build-system)
3807 (propagated-inputs
3808 `(("python-pluggy" ,python-pluggy)
3809 ("python-jsonrpc-server" ,python-jsonrpc-server)
3810 ;; Note: Remove the special versions of Jedi and Parso when updating
3811 ;; this package.
3812 ("python-jedi" ,python-jedi)
3813 ("python-yapf" ,python-yapf)
3814 ("python-pyflakes" ,python-pyflakes)
3815 ("python-pydocstyle" ,python-pydocstyle)
3816 ("python-pycodestyle" ,python-pycodestyle)
3817 ("python-mccabe" ,python-mccabe)
3818 ("python-rope" ,python-rope)
3819 ("python-autopep8" ,python-autopep8)
3820 ("python-flake8" ,python-flake8)
3821 ("python-pylint" ,python-pylint)))
3822 (home-page "https://github.com/palantir/python-language-server")
3823 (synopsis "Python implementation of the Language Server Protocol")
3824 (description
3825 "The Python Language Server (pyls) is an implementation of the Python 3
3826 language specification for the Language Server Protocol (LSP). This tool is
3827 used in text editing environments to provide a complete and integrated
3828 feature-set for programming Python effectively.")
3829 (license license:expat)))
3830
3831 (define-public python-pathspec
3832 (package
3833 (name "python-pathspec")
3834 (version "0.7.0")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "pathspec" version))
3839 (sha256
3840 (base32
3841 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3842 (build-system python-build-system)
3843 (home-page "https://github.com/cpburnz/python-path-specification")
3844 (synopsis "Utility library for gitignore style pattern matching of file paths")
3845 (description
3846 "This package provides a utility library for gitignore style pattern
3847 matching of file paths.")
3848 (license license:mpl2.0)))
3849
3850 (define-public python-black
3851 (package
3852 (name "python-black")
3853 (version "19.10b0")
3854 (source
3855 (origin
3856 (method url-fetch)
3857 (uri (pypi-uri "black" version))
3858 (sha256
3859 (base32
3860 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3861 (build-system python-build-system)
3862 (arguments
3863 `(#:phases
3864 (modify-phases %standard-phases
3865 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3866 (lambda _
3867 (let ((python3 (which "python3")))
3868 (substitute* '("tests/data/fmtonoff.py"
3869 "tests/data/string_prefixes.py"
3870 "tests/data/function.py"
3871 "tests/data/python37.py")
3872 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3873 (string-append "#!" python3 (if (string? minor-version)
3874 minor-version
3875 "")))))
3876 #t))
3877 (add-after 'unpack 'disable-broken-tests
3878 (lambda _
3879 ;; These tests are supposed to be skipped when the blackd
3880 ;; dependencies are missing, but this doesn't quite work.
3881 (substitute* "tests/test_black.py"
3882 (("( *)class BlackDTestCase.*" match indent)
3883 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3884 indent "class BlackDTestCase(unittest.TestCase):\n"))
3885 (("web.Application") "False")
3886 (("@unittest_run_loop") ""))
3887
3888 ;; Patching the above file breaks the self test
3889 (substitute* "tests/test_black.py"
3890 (("( *)def test_self" match indent)
3891 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3892 #t)))))
3893 (propagated-inputs
3894 `(("python-click" ,python-click)
3895 ("python-attrs" ,python-attrs)
3896 ("python-appdirs" ,python-appdirs)
3897 ("python-pathspec" ,python-pathspec)
3898 ("python-regex" ,python-regex)
3899 ("python-toml" ,python-toml)
3900 ("python-typed-ast" ,python-typed-ast)))
3901 (native-inputs
3902 `(("python-setuptools-scm" ,python-setuptools-scm)))
3903 (home-page "https://github.com/ambv/black")
3904 (synopsis "The uncompromising code formatter")
3905 (description "Black is the uncompromising Python code formatter.")
3906 (license license:expat)))
3907
3908 (define-public python-blinker
3909 (package
3910 (name "python-blinker")
3911 (version "1.4")
3912 (source
3913 (origin
3914 (method url-fetch)
3915 (uri (pypi-uri "blinker" version))
3916 (sha256
3917 (base32
3918 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3919 (build-system python-build-system)
3920 (home-page "https://pythonhosted.org/blinker/")
3921 (synopsis "Fast, simple object-to-object and broadcast signaling")
3922 (description
3923 "Blinker provides a fast dispatching system that allows any number of
3924 interested parties to subscribe to events, or \"signals\".")
3925 (license license:expat)))
3926
3927 (define-public python2-blinker
3928 (package-with-python2 python-blinker))
3929
3930 (define-public pelican
3931 (package
3932 (name "pelican")
3933 (version "4.2.0")
3934 (source
3935 (origin
3936 (method url-fetch)
3937 (uri (pypi-uri "pelican" version))
3938 (sha256
3939 (base32
3940 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3941 (build-system python-build-system)
3942 (propagated-inputs
3943 `(("python-blinker" ,python-blinker)
3944 ("python-dateutil" ,python-dateutil)
3945 ("python-docutils" ,python-docutils)
3946 ("python-feedgenerator" ,python-feedgenerator)
3947 ("python-jinja2" ,python-jinja2)
3948 ("python-markdown" ,python-markdown)
3949 ("python-pygments" ,python-pygments)
3950 ("python-pytz" ,python-pytz)
3951 ("python-six" ,python-six)
3952 ("python-unidecode" ,python-unidecode)))
3953 (home-page "https://getpelican.com/")
3954 (arguments
3955 `(;; XXX Requires a lot more packages to do unit tests :P
3956 #:tests? #f))
3957 (synopsis "Python-based static site publishing system")
3958 (description
3959 "Pelican is a tool to generate a static blog from reStructuredText,
3960 Markdown input files, and more. Pelican uses Jinja2 for templating
3961 and is very extensible.")
3962 (license license:agpl3+)))
3963
3964 (define-public mallard-ducktype
3965 (package
3966 (name "mallard-ducktype")
3967 (version "1.0.2")
3968 (source
3969 (origin
3970 (method git-fetch)
3971 ;; git-reference because tests are not included in pypi source tarball
3972 ;; https://issues.guix.gnu.org/issue/36755#2
3973 (uri (git-reference
3974 (url "https://github.com/projectmallard/mallard-ducktype.git")
3975 (commit version)))
3976 (file-name (git-file-name name version))
3977 (sha256
3978 (base32
3979 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3980 (build-system python-build-system)
3981 (arguments
3982 '(#:phases
3983 (modify-phases %standard-phases
3984 (replace 'check
3985 (lambda _
3986 (with-directory-excursion "tests"
3987 (invoke "sh" "runtests")))))))
3988 (home-page "http://projectmallard.org")
3989 (synopsis "Convert Ducktype to Mallard documentation markup")
3990 (description
3991 "Ducktype is a lightweight syntax that can represent all the semantics
3992 of the Mallard XML documentation system. Ducktype files can be converted to
3993 Mallard using the @command{ducktype} tool. The yelp-tools package
3994 provides additional functionality on the produced Mallard documents.")
3995 (license license:expat)))
3996
3997 (define-public python-cython
3998 (package
3999 (name "python-cython")
4000 (version "0.29.17")
4001 (source
4002 (origin
4003 (method url-fetch)
4004 (uri (pypi-uri "Cython" version))
4005 (sha256
4006 (base32
4007 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4008 (build-system python-build-system)
4009 ;; we need the full python package and not just the python-wrapper
4010 ;; because we need libpython3.3m.so
4011 (inputs
4012 `(("python" ,python)))
4013 (arguments
4014 `(#:phases
4015 (modify-phases %standard-phases
4016 (add-before 'check 'set-HOME
4017 ;; some tests require access to "$HOME/.cython"
4018 (lambda _ (setenv "HOME" "/tmp") #t))
4019 (replace 'check
4020 (lambda _
4021 ;; Disable compiler optimizations to greatly reduce the running
4022 ;; time of the test suite.
4023 (setenv "CFLAGS" "-O0")
4024
4025 (invoke "python" "runtests.py" "-vv"
4026 "-j" (number->string (parallel-job-count))
4027 ;; XXX: On 32-bit architectures, running the parallel tests
4028 ;; fails on many-core systems, see
4029 ;; <https://github.com/cython/cython/issues/2807>.
4030 ,@(if (not (target-64bit?))
4031 '("-x" "run.parallel")
4032 '())))))))
4033 (home-page "https://cython.org/")
4034 (synopsis "C extensions for Python")
4035 (description "Cython is an optimising static compiler for both the Python
4036 programming language and the extended Cython programming language. It makes
4037 writing C extensions for Python as easy as Python itself.")
4038 (license license:asl2.0)
4039 (properties `((python2-variant . ,(delay python2-cython))))))
4040
4041 (define-public python2-cython
4042 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4043 (package
4044 (inherit base)
4045 (name "python2-cython")
4046 (inputs
4047 `(("python-2" ,python-2))) ;this is not automatically changed
4048 (arguments
4049 (substitute-keyword-arguments (package-arguments base)
4050 ((#:phases phases)
4051 `(modify-phases ,phases
4052 (add-before 'check 'adjust-test_embed
4053 (lambda _
4054 (substitute* "runtests.py"
4055 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4056 ;; so it can give the right -L flag to GCC when embedding static
4057 ;; builds of Python. It is unaware that the Python "config"
4058 ;; directory (where the static library lives) was renamed in
4059 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4060 ;; which works fine, because that is where the shared library is.
4061 ;;
4062 ;; It also appears to be unaware that the Makefile in Demos/embed
4063 ;; already unconditionally pass the static library location to GCC,
4064 ;; after checking sysconfig.get_config_var('LIBPL).
4065 ;;
4066 ;; The effect is that the linker is unable to resolve libexpat
4067 ;; symbols when building for Python 2, because neither the Python 2
4068 ;; shared library nor Expat is available. To fix it, we can either
4069 ;; add Expat as an input and make it visible to the linker, or just
4070 ;; prevent it from overriding the Python shared library location.
4071 ;; The end result is identical, so we take the easy route.
4072 ((" or libname not in os\\.listdir\\(libdir\\)")
4073 ""))
4074 #t)))))))))
4075
4076 ;; The RPython toolchain currently does not support Python 3.
4077 (define-public python2-rpython
4078 (package
4079 (name "python2-rpython")
4080 (version "0.2.1")
4081 (source
4082 (origin
4083 (method url-fetch)
4084 (uri (pypi-uri "rpython" version))
4085 (sha256
4086 (base32
4087 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4088 (build-system python-build-system)
4089 (arguments `(#:python ,python-2))
4090 (native-inputs
4091 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4092 (home-page "https://rpython.readthedocs.org")
4093 (synopsis "Framework for implementing interpreters and virtual machines")
4094 (description "RPython is a translation and support framework for
4095 producing implementations of dynamic languages, emphasizing a clean separation
4096 between language specification and implementation aspects.")
4097 (license license:expat)))
4098
4099 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4100 ;; python-scipy still build, as these three packages are often used together.
4101 (define-public python-numpy
4102 (package
4103 (name "python-numpy")
4104 (version "1.17.3")
4105 (source
4106 (origin
4107 (method url-fetch)
4108 (uri (string-append
4109 "https://github.com/numpy/numpy/releases/download/v"
4110 version "/numpy-" version ".tar.gz"))
4111 (sha256
4112 (base32
4113 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4114 (build-system python-build-system)
4115 (inputs
4116 `(("openblas" ,openblas)
4117 ("lapack" ,lapack)))
4118 (native-inputs
4119 `(("python-cython" ,python-cython)
4120 ("python-pytest" ,python-pytest)
4121 ("gfortran" ,gfortran)))
4122 (arguments
4123 `(#:phases
4124 (modify-phases %standard-phases
4125 (add-before 'build 'configure-blas-lapack
4126 (lambda* (#:key inputs #:allow-other-keys)
4127 (call-with-output-file "site.cfg"
4128 (lambda (port)
4129 (format port
4130 "[openblas]
4131 libraries = openblas
4132 library_dirs = ~a/lib
4133 include_dirs = ~a/include
4134
4135 # backslash-n to make emacs happy
4136 \n[lapack]
4137 lapack_libs = lapack
4138 library_dirs = ~a/lib
4139 include_dirs = ~a/include
4140 "
4141 (assoc-ref inputs "openblas")
4142 (assoc-ref inputs "openblas")
4143 (assoc-ref inputs "lapack")
4144 (assoc-ref inputs "lapack"))))
4145 #t))
4146 (add-before 'build 'fix-executable-paths
4147 (lambda* (#:key inputs #:allow-other-keys)
4148 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4149 ;; instead of /bin/sh.
4150 (substitute* "numpy/distutils/exec_command.py"
4151 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4152 (string-append match-start (assoc-ref inputs "bash") match-end)))
4153 ;; Use "gcc" executable, not "cc".
4154 (substitute* "numpy/distutils/system_info.py"
4155 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4156 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4157 #t))
4158 ;; Tests can only be run after the library has been installed and not
4159 ;; within the source directory.
4160 (delete 'check)
4161 (add-after 'install 'check
4162 (lambda* (#:key outputs inputs #:allow-other-keys)
4163 ;; Make installed package available for running the tests
4164 (add-installed-pythonpath inputs outputs)
4165 ;; Make sure "f2py" etc is found.
4166 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4167 ":" (getenv "PATH")))
4168 (with-directory-excursion "/tmp"
4169 (invoke "python" "-c"
4170 "import numpy; numpy.test(verbose=2)")))))))
4171 (home-page "https://numpy.org")
4172 (synopsis "Fundamental package for scientific computing with Python")
4173 (description "NumPy is the fundamental package for scientific computing
4174 with Python. It contains among other things: a powerful N-dimensional array
4175 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4176 and Fortran code, useful linear algebra, Fourier transform, and random number
4177 capabilities.")
4178 (properties `((python2-variant . ,(delay python2-numpy))))
4179 (license license:bsd-3)))
4180
4181 ;; Numpy 1.16.x are the last versions that support Python 2.
4182 (define-public python2-numpy
4183 (let ((numpy (package-with-python2
4184 (strip-python2-variant python-numpy))))
4185 (package/inherit
4186 numpy
4187 (version "1.16.5")
4188 (source (origin
4189 (method url-fetch)
4190 (uri (string-append
4191 "https://github.com/numpy/numpy/releases/download/v"
4192 version "/numpy-" version ".tar.gz"))
4193 (sha256
4194 (base32
4195 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4196
4197 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4198 ;; interest only for legacy code going back to NumPy's predecessor
4199 ;; Numeric.
4200 (define-public python2-numpy-1.8
4201 (package (inherit python2-numpy)
4202 (version "1.8.2")
4203 (source
4204 (origin
4205 (method git-fetch)
4206 (uri (git-reference
4207 (url "https://github.com/numpy/numpy")
4208 (commit (string-append "v" version))))
4209 (file-name (git-file-name "numpy" version))
4210 (sha256
4211 (base32
4212 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4213 (arguments
4214 (substitute-keyword-arguments (package-arguments python2-numpy)
4215 ((#:phases phases)
4216 `(modify-phases ,phases
4217 (replace 'configure-blas-lapack
4218 (lambda* (#:key inputs #:allow-other-keys)
4219 (call-with-output-file "site.cfg"
4220 (lambda (port)
4221 (format port
4222 "[openblas]
4223 libraries = openblas,lapack
4224 library_dirs = ~a/lib:~a/lib
4225 include_dirs = ~a/include:~a/include
4226 "
4227 (assoc-ref inputs "openblas")
4228 (assoc-ref inputs "lapack")
4229 (assoc-ref inputs "openblas")
4230 (assoc-ref inputs "lapack"))))
4231 #t))))))
4232 (native-inputs
4233 `(("python2-nose" ,python2-nose)))
4234 (description "NumPy is the fundamental package for scientific computing
4235 with Python. It contains among other things: a powerful N-dimensional array
4236 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4237 and Fortran code, useful linear algebra, Fourier transform, and random number
4238 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4239 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4240 Numeric.")
4241 (license license:bsd-3)))
4242
4243 (define-public python-munch
4244 (package
4245 (name "python-munch")
4246 (version "2.0.4")
4247 (source
4248 (origin
4249 (method url-fetch)
4250 (uri (pypi-uri "munch" version))
4251 (sha256
4252 (base32
4253 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4254 (build-system python-build-system)
4255 (home-page "https://github.com/Infinidat/munch")
4256 (synopsis "Dot-accessible dictionary")
4257 (description "Munch is a dot-accessible dictionary similar to JavaScript
4258 objects.")
4259 (license license:expat)))
4260
4261 (define-public python2-munch
4262 (package-with-python2 python-munch))
4263
4264 (define-public python-colormath
4265 (package
4266 (name "python-colormath")
4267 (version "3.0.0")
4268 (source
4269 (origin
4270 (method url-fetch)
4271 (uri (pypi-uri "colormath" version))
4272 (sha256
4273 (base32
4274 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4275 (build-system python-build-system)
4276 (propagated-inputs
4277 `(("python-networkx" ,python-networkx)
4278 ("python-numpy" ,python-numpy)))
4279 (home-page "https://github.com/gtaylor/python-colormath")
4280 (synopsis "Color math and conversion library")
4281 (description
4282 "This is a Python library for color math and conversions.")
4283 (license license:bsd-3)))
4284
4285 (define-public python2-colormath
4286 (package-with-python2 python-colormath))
4287
4288 (define-public python-spectra
4289 (package
4290 (name "python-spectra")
4291 (version "0.0.11")
4292 (source
4293 (origin
4294 (method url-fetch)
4295 (uri (pypi-uri "spectra" version))
4296 (sha256
4297 (base32
4298 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4299 (build-system python-build-system)
4300 (arguments
4301 `(#:phases
4302 (modify-phases %standard-phases
4303 (replace 'check
4304 (lambda _ (invoke "nosetests" "-v"))))))
4305 (propagated-inputs
4306 `(("python-colormath" ,python-colormath)))
4307 (native-inputs
4308 `(("python-nose" ,python-nose)))
4309 (home-page "https://github.com/jsvine/spectra")
4310 (synopsis "Color scales and color conversion")
4311 (description
4312 "This package provides a Python library intended to make color math,
4313 color scales, and color space conversion easy. It has support for:
4314
4315 @enumerate
4316 @item Color scales
4317 @item Color ranges
4318 @item Color blending
4319 @item Brightening/darkening colors
4320 @item Saturating/desaturating colors
4321 @item Conversion to/from multiple color spaces.
4322 @end enumerate\n")
4323 (license license:expat)))
4324
4325 (define-public python2-spectra
4326 (package-with-python2 python-spectra))
4327
4328 (define-public python-numpy-documentation
4329 (package
4330 (name "python-numpy-documentation")
4331 (version (package-version python-numpy))
4332 (source (package-source python-numpy))
4333 (build-system python-build-system)
4334 (native-inputs
4335 `(("python-matplotlib" ,python-matplotlib)
4336 ("python-numpy" ,python-numpy)
4337 ("pkg-config" ,pkg-config)
4338 ("python-sphinx" ,python-sphinx)
4339 ("python-numpydoc" ,python-numpydoc)
4340 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4341 texlive-fonts-ec
4342 texlive-generic-ifxetex
4343 texlive-generic-pdftex
4344 texlive-amsfonts
4345 texlive-latex-capt-of
4346 texlive-latex-cmap
4347 texlive-latex-environ
4348 texlive-latex-eqparbox
4349 texlive-latex-etoolbox
4350 texlive-latex-expdlist
4351 texlive-latex-fancyhdr
4352 texlive-latex-fancyvrb
4353 texlive-latex-fncychap
4354 texlive-latex-float
4355 texlive-latex-framed
4356 texlive-latex-geometry
4357 texlive-latex-graphics
4358 texlive-latex-hyperref
4359 texlive-latex-mdwtools
4360 texlive-latex-multirow
4361 texlive-latex-needspace
4362 texlive-latex-oberdiek
4363 texlive-latex-parskip
4364 texlive-latex-preview
4365 texlive-latex-tabulary
4366 texlive-latex-threeparttable
4367 texlive-latex-titlesec
4368 texlive-latex-trimspaces
4369 texlive-latex-ucs
4370 texlive-latex-upquote
4371 texlive-latex-url
4372 texlive-latex-varwidth
4373 texlive-latex-wrapfig)))
4374 ("texinfo" ,texinfo)
4375 ("perl" ,perl)
4376 ("scipy-sphinx-theme"
4377 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4378 (method git-fetch)
4379 (uri (git-reference
4380 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4381 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4382 (sha256
4383 (base32
4384 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4385 ,@(package-native-inputs python-numpy)))
4386 (arguments
4387 `(#:tests? #f ; we're only generating the documentation
4388 #:phases
4389 (modify-phases %standard-phases
4390 (delete 'build)
4391 (replace 'install
4392 (lambda* (#:key inputs outputs #:allow-other-keys)
4393 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4394 (doc (string-append
4395 data "/doc/" ,name "-"
4396 ,(package-version python-numpy)))
4397 (info-reader (string-append data "/info"))
4398 (html (string-append doc "/html"))
4399 (scipy-sphinx-theme "scipy-sphinx-theme")
4400 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4401 (pyver ,(string-append "PYVER=")))
4402
4403 ;; FIXME: this is needed to for texlive-union to generate
4404 ;; fonts, which are not found.
4405 (setenv "HOME" "/tmp")
4406
4407 (with-directory-excursion "doc"
4408 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4409 (mkdir-p html)
4410 (invoke "make" "html" pyver)
4411 (invoke "make" "latex" "PAPER=a4" pyver)
4412 (invoke "make" "-C" "build/latex"
4413 "all-pdf" "PAPER=a4" pyver)
4414 ;; FIXME: Generation of the info file fails.
4415 ;; (invoke "make" "info" pyver)
4416 ;; (mkdir-p info)
4417 ;; (copy-file "build/texinfo/numpy.info"
4418 ;; (string-append info "/numpy.info"))
4419 (for-each (lambda (file)
4420 (copy-file (string-append "build/latex" file)
4421 (string-append doc file)))
4422 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4423 (with-directory-excursion "build/html"
4424 (for-each (lambda (file)
4425 (let* ((dir (dirname file))
4426 (tgt-dir (string-append html "/" dir)))
4427 (unless (equal? "." dir)
4428 (mkdir-p tgt-dir))
4429 (install-file file html)))
4430 (find-files "." ".*")))))
4431 #t)))))
4432 (home-page (package-home-page python-numpy))
4433 (synopsis "Documentation for the python-numpy package")
4434 (description (package-description python-numpy))
4435 (license (package-license python-numpy))))
4436
4437 (define-public python2-numpy-documentation
4438 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4439 (package
4440 (inherit numpy-documentation)
4441 (native-inputs `(("python2-functools32" ,python2-functools32)
4442 ,@(package-native-inputs numpy-documentation))))))
4443
4444 (define-public python-pygit2
4445 (package
4446 (name "python-pygit2")
4447 (version "1.1.0")
4448 (source
4449 (origin
4450 (method url-fetch)
4451 (uri (pypi-uri "pygit2" version))
4452 (sha256
4453 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4454 (build-system python-build-system)
4455 (arguments
4456 '(#:tests? #f)) ; tests don't run correctly in our environment
4457 (propagated-inputs
4458 `(("python-cached-property" ,python-cached-property)
4459 ("python-cffi" ,python-cffi)
4460 ("libgit2" ,libgit2)))
4461 (native-inputs
4462 `(("python-pytest" ,python-pytest)))
4463 (home-page "https://github.com/libgit2/pygit2")
4464 (synopsis "Python bindings for libgit2")
4465 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4466 library, libgit2 implements Git plumbing.")
4467 ;; GPL2.0 only, with linking exception.
4468 (license license:gpl2)))
4469
4470 (define-public python-pyparsing
4471 (package
4472 (name "python-pyparsing")
4473 (version "2.4.6")
4474 (source
4475 (origin
4476 (method url-fetch)
4477 (uri (pypi-uri "pyparsing" version))
4478 (sha256
4479 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4480 (build-system python-build-system)
4481 (outputs '("out" "doc"))
4482 (arguments
4483 `(#:tests? #f ; no test target
4484 #:phases
4485 (modify-phases %standard-phases
4486 (add-after 'install 'install-doc
4487 (lambda* (#:key outputs #:allow-other-keys)
4488 (let* ((doc (string-append (assoc-ref outputs "doc")
4489 "/share/doc/" ,name "-" ,version))
4490 (html-doc (string-append doc "/html"))
4491 (examples (string-append doc "/examples")))
4492 (mkdir-p html-doc)
4493 (mkdir-p examples)
4494 (for-each
4495 (lambda (dir tgt)
4496 (map (lambda (file)
4497 (install-file file tgt))
4498 (find-files dir ".*")))
4499 (list "docs" "htmldoc" "examples")
4500 (list doc html-doc examples))
4501 #t))))))
4502 (home-page "https://github.com/pyparsing/pyparsing")
4503 (synopsis "Python parsing class library")
4504 (description
4505 "The pyparsing module is an alternative approach to creating and
4506 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4507 of regular expressions. The pyparsing module provides a library of classes
4508 that client code uses to construct the grammar directly in Python code.")
4509 (license license:expat)))
4510
4511 (define-public python2-pyparsing
4512 (package-with-python2 python-pyparsing))
4513
4514 (define-public python-numpydoc
4515 (package
4516 (name "python-numpydoc")
4517 (version "0.8.0")
4518 (source
4519 (origin
4520 (method url-fetch)
4521 (uri (pypi-uri "numpydoc" version))
4522 (sha256
4523 (base32
4524 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4525 (build-system python-build-system)
4526 (propagated-inputs
4527 `(("python-sphinx" ,python-sphinx)))
4528 (native-inputs
4529 `(("python-nose" ,python-nose)))
4530 (home-page "https://pypi.org/project/numpydoc/")
4531 (synopsis
4532 "Numpy's Sphinx extensions")
4533 (description
4534 "Sphinx extension to support docstrings in Numpy format.")
4535 (license license:bsd-2)))
4536
4537 (define-public python2-numpydoc
4538 (package-with-python2 python-numpydoc))
4539
4540 (define-public python-numexpr
4541 (package
4542 (name "python-numexpr")
4543 (version "2.6.5")
4544 (source
4545 (origin
4546 (method url-fetch)
4547 (uri (pypi-uri "numexpr" version))
4548 (sha256
4549 (base32
4550 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4551 (build-system python-build-system)
4552 (arguments `(#:tests? #f)) ; no tests included
4553 (propagated-inputs
4554 `(("python-numpy" ,python-numpy)))
4555 (home-page "https://github.com/pydata/numexpr")
4556 (synopsis "Fast numerical expression evaluator for NumPy")
4557 (description
4558 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4559 expressions that operate on arrays are accelerated and use less memory than
4560 doing the same calculation in Python. In addition, its multi-threaded
4561 capabilities can make use of all your cores, which may accelerate
4562 computations, most specially if they are not memory-bounded (e.g. those using
4563 transcendental functions).")
4564 (license license:expat)))
4565
4566 (define-public python2-numexpr
4567 (package-with-python2 python-numexpr))
4568
4569 (define-public python-cycler
4570 (package
4571 (name "python-cycler")
4572 (version "0.10.0")
4573 (source (origin
4574 (method url-fetch)
4575 (uri (pypi-uri "cycler" version))
4576 (sha256
4577 (base32
4578 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4579 (build-system python-build-system)
4580 (arguments
4581 ;; XXX: The current version requires 'coveralls' which we don't have.
4582 ;; Enable this for the next release which uses 'python-pytest'.
4583 '(#:tests? #f))
4584 (propagated-inputs
4585 `(("python-six" ,python-six)))
4586 (home-page "http://matplotlib.org/cycler/")
4587 (synopsis "Composable keyword argument iterator")
4588 (description
4589 "When using @code{matplotlib} and plotting more than one line, it is
4590 common to want to be able to want to be able to cycle over one or more artist
4591 styles; but the plotting logic can quickly become involved.
4592 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4593 @code{Cycler} class was developed.")
4594 (license license:bsd-3)))
4595
4596 (define-public python2-cycler
4597 (package-with-python2 python-cycler))
4598
4599 (define-public python-colorspacious
4600 (package
4601 (name "python-colorspacious")
4602 (version "1.1.2")
4603 (source
4604 (origin
4605 (method git-fetch)
4606 (uri (git-reference
4607 (url "https://github.com/njsmith/colorspacious.git")
4608 (commit (string-append "v" version))))
4609 (file-name (git-file-name name version))
4610 (sha256
4611 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4612 (build-system python-build-system)
4613 (propagated-inputs
4614 `(("python-numpy" ,python-numpy)))
4615 (native-inputs
4616 `(("python-nose" ,python-nose)))
4617 (arguments
4618 `(#:phases
4619 (modify-phases %standard-phases
4620 (replace 'check
4621 (lambda _
4622 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4623 (home-page "https://github.com/njsmith/colorspacious")
4624 (synopsis "Python library for colorspace conversions")
4625 (description "@code{colorspacious} is a Python library that lets you
4626 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4627 (license license:expat)))
4628
4629 (define-public python2-colorspacious
4630 (package-with-python2 python-colorspacious))
4631
4632 (define-public python-matplotlib
4633 (package
4634 (name "python-matplotlib")
4635 (version "3.1.2")
4636 (source
4637 (origin
4638 (method url-fetch)
4639 (uri (pypi-uri "matplotlib" version))
4640 (sha256
4641 (base32
4642 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4643 (build-system python-build-system)
4644 (propagated-inputs ; the following packages are all needed at run time
4645 `(("python-cycler" ,python-cycler)
4646 ("python-kiwisolver" ,python-kiwisolver)
4647 ("python-pyparsing" ,python-pyparsing)
4648 ("python-pygobject" ,python-pygobject)
4649 ("gobject-introspection" ,gobject-introspection)
4650 ("python-tkinter" ,python "tk")
4651 ("python-dateutil" ,python-dateutil)
4652 ("python-numpy" ,python-numpy)
4653 ("python-pillow" ,python-pillow)
4654 ("python-pytz" ,python-pytz)
4655 ("python-six" ,python-six)
4656 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4657 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4658 ;; object. For this reason we need to import both libraries.
4659 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4660 ("python-pycairo" ,python-pycairo)
4661 ("python-cairocffi" ,python-cairocffi)))
4662 (inputs
4663 `(("libpng" ,libpng)
4664 ("imagemagick" ,imagemagick)
4665 ("freetype" ,freetype)
4666 ("cairo" ,cairo)
4667 ("glib" ,glib)
4668 ;; FIXME: Add backends when available.
4669 ;("python-wxpython" ,python-wxpython)
4670 ("tcl" ,tcl)
4671 ("tk" ,tk)))
4672 (native-inputs
4673 `(("pkg-config" ,pkg-config)
4674 ("python-pytest" ,python-pytest)
4675 ("python-mock" ,python-mock)
4676 ("unzip" ,unzip)
4677 ("jquery-ui"
4678 ,(origin
4679 (method url-fetch)
4680 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4681 (sha256
4682 (base32
4683 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4684 (arguments
4685 `(#:phases
4686 (modify-phases %standard-phases
4687 ;; XXX We disable all image comparison tests because we're using a
4688 ;; newer version of FreeType than matplotlib expects. This leads to
4689 ;; minor differences throughout the tests.
4690 (add-after 'unpack 'fix-and-disable-failing-tests
4691 (lambda _
4692 (substitute* (append (find-files "lib/matplotlib/tests/"
4693 "test_.*\\.py$")
4694 (find-files "lib/mpl_toolkits/tests"
4695 "test_.*\\.py$"))
4696 (("^from matplotlib" match)
4697 (string-append "import pytest\n" match))
4698 (("( *)@image_comparison" match indent)
4699 (string-append indent
4700 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4701 match)))
4702 (substitute* "lib/matplotlib/tests/test_animation.py"
4703 (("/bin/sh") (which "sh")))
4704 (for-each delete-file
4705 ;; test_normal_axes, test_get_tightbbox_polar
4706 '("lib/matplotlib/tests/test_axes.py"
4707 ;; We don't use the webagg backend and this test forces it.
4708 "lib/matplotlib/tests/test_backend_webagg.py"
4709 ;; test_outward_ticks
4710 "lib/matplotlib/tests/test_tightlayout.py"
4711 ;; test_hidden_axes fails with minor extent
4712 ;; differences, possibly due to the use of a
4713 ;; different version of FreeType.
4714 "lib/matplotlib/tests/test_constrainedlayout.py"
4715 ;; Fontconfig returns no fonts.
4716 "lib/matplotlib/tests/test_font_manager.py"))
4717 #t))
4718 (add-before 'install 'install-jquery-ui
4719 (lambda* (#:key outputs inputs #:allow-other-keys)
4720 (let ((dir (string-append (assoc-ref outputs "out")
4721 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4722 (mkdir-p dir)
4723 (invoke "unzip"
4724 (assoc-ref inputs "jquery-ui")
4725 "-d" dir))
4726 #t))
4727 (replace 'check
4728 (lambda* (#:key outputs inputs #:allow-other-keys)
4729 (add-installed-pythonpath inputs outputs)
4730 (invoke "python" "tests.py" "-v"
4731 "-m" "not network and not webagg")))
4732 (add-before 'build 'configure-environment
4733 (lambda* (#:key outputs inputs #:allow-other-keys)
4734 (let ((cairo (assoc-ref inputs "cairo")))
4735 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4736 ;; has not effect.
4737 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4738 (setenv "HOME" (getcwd))
4739 (call-with-output-file "setup.cfg"
4740 (lambda (port)
4741 (format port "[directories]~%
4742 basedirlist = ~a,~a~%
4743 [packages]~%
4744 tests = True~%"
4745 (assoc-ref inputs "tcl")
4746 (assoc-ref inputs "tk")))))
4747 #t)))))
4748 (home-page "https://matplotlib.org/")
4749 (synopsis "2D plotting library for Python")
4750 (description
4751 "Matplotlib is a Python 2D plotting library which produces publication
4752 quality figures in a variety of hardcopy formats and interactive environments
4753 across platforms. Matplotlib can be used in Python scripts, the python and
4754 ipython shell, web application servers, and six graphical user interface
4755 toolkits.")
4756 (license license:psfl)
4757 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4758
4759 (define-public python2-matplotlib
4760 (let ((matplotlib (package-with-python2
4761 (strip-python2-variant python-matplotlib))))
4762 (package (inherit matplotlib)
4763 (version "2.2.4")
4764 (source
4765 (origin
4766 (method url-fetch)
4767 (uri (pypi-uri "matplotlib" version))
4768 (sha256
4769 (base32
4770 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4771 (arguments
4772 (substitute-keyword-arguments (package-arguments matplotlib)
4773 ((#:phases phases)
4774 `(modify-phases ,phases
4775 (replace 'install-jquery-ui
4776 (lambda* (#:key outputs inputs #:allow-other-keys)
4777 (let ((dir (string-append (assoc-ref outputs "out")
4778 "/lib/python2.7/site-packages/"
4779 "matplotlib/backends/web_backend/")))
4780 (mkdir-p dir)
4781 (invoke "unzip"
4782 (assoc-ref inputs "jquery-ui")
4783 "-d" dir))
4784 #t))
4785 (delete 'fix-and-disable-failing-tests)
4786 (delete 'check))))) ; These tests weren't run the the past.
4787 ;; Make sure to use special packages for Python 2 instead
4788 ;; of those automatically rewritten by package-with-python2.
4789 (propagated-inputs
4790 `(("python2-pycairo" ,python2-pycairo)
4791 ("python2-backports-functools-lru-cache"
4792 ,python2-backports-functools-lru-cache)
4793 ("python2-functools32" ,python2-functools32)
4794 ("python2-pygobject-2" ,python2-pygobject-2)
4795 ("python2-subprocess32" ,python2-subprocess32)
4796 ("python2-tkinter" ,python-2 "tk")
4797 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4798 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4799
4800 (define-public python-matplotlib-documentation
4801 (package
4802 (name "python-matplotlib-documentation")
4803 (version (package-version python-matplotlib))
4804 (source (package-source python-matplotlib))
4805 (build-system python-build-system)
4806 (native-inputs
4807 `(("python-matplotlib" ,python-matplotlib)
4808 ("python-colorspacious" ,python-colorspacious)
4809 ("python-sphinx" ,python-sphinx)
4810 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4811 ("python-sphinx-gallery" ,python-sphinx-gallery)
4812 ("python-numpydoc" ,python-numpydoc)
4813 ("python-ipython" ,python-ipython)
4814 ("python-ipykernel" ,python-ipykernel)
4815 ("python-mock" ,python-mock)
4816 ("graphviz" ,graphviz)
4817 ("texlive" ,(texlive-union (list texlive-amsfonts
4818 texlive-latex-amsmath
4819 texlive-latex-enumitem
4820 texlive-latex-expdlist
4821 texlive-latex-geometry
4822 texlive-latex-preview
4823 texlive-latex-type1cm
4824 texlive-latex-ucs
4825
4826 texlive-generic-pdftex
4827
4828 texlive-fonts-ec
4829 texlive-fonts-adobe-times
4830 texlive-fonts-txfonts)))
4831 ("texinfo" ,texinfo)
4832 ,@(package-native-inputs python-matplotlib)))
4833 (arguments
4834 `(#:tests? #f ; we're only generating documentation
4835 #:phases
4836 (modify-phases %standard-phases
4837 ;; The tests in python-matplotlib are run after the install phase, so
4838 ;; we need to delete the extra phase here.
4839 (delete 'check)
4840 (replace 'build
4841 (lambda _
4842 (chdir "doc")
4843 (setenv "PYTHONPATH"
4844 (string-append (getenv "PYTHONPATH")
4845 ":" (getcwd) "/../examples/units"))
4846 (substitute* "conf.py"
4847 ;; Don't use git.
4848 (("^SHA = check_output.*")
4849 (string-append "SHA = \"" ,version "\"\n"))
4850 ;; Don't fetch intersphinx files from the Internet
4851 (("^explicit_order_folders" m)
4852 (string-append "intersphinx_mapping = {}\n" m))
4853 (("'sphinx.ext.intersphinx',") "")
4854 ;; Disable URL embedding which requires internet access.
4855 (("'https://docs.scipy.org/doc/numpy'") "None")
4856 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4857 (invoke "make"
4858 "SPHINXBUILD=sphinx-build"
4859 "SPHINXOPTS=" ; don't abort on warnings
4860 "html" "texinfo")))
4861 (replace 'install
4862 (lambda* (#:key inputs outputs #:allow-other-keys)
4863 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4864 (doc (string-append data "/doc/python-matplotlib-" ,version))
4865 (info (string-append data "/info"))
4866 (html (string-append doc "/html")))
4867 (mkdir-p html)
4868 (mkdir-p info)
4869 (copy-recursively "build/html" html)
4870 (symlink (string-append html "/_images")
4871 (string-append info "/matplotlib-figures"))
4872 (with-directory-excursion "build/texinfo"
4873 (substitute* "matplotlib.texi"
4874 (("@image\\{([^,]*)" all file)
4875 (string-append "@image{matplotlib-figures/" file)))
4876 (symlink (string-append html "/_images")
4877 "./matplotlib-figures")
4878 (invoke "makeinfo" "--no-split"
4879 "-o" "matplotlib.info" "matplotlib.texi"))
4880 (install-file "build/texinfo/matplotlib.info" info))
4881 #t)))))
4882 (home-page (package-home-page python-matplotlib))
4883 (synopsis "Documentation for the python-matplotlib package")
4884 (description (package-description python-matplotlib))
4885 (license (package-license python-matplotlib))))
4886
4887 (define-public python2-matplotlib-documentation
4888 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4889 (package
4890 (inherit parent)
4891 (native-inputs
4892 (alist-delete "python-sphinx-copybutton"
4893 (package-native-inputs parent))))))
4894
4895 (define-public python-matplotlib-venn
4896 (package
4897 (name "python-matplotlib-venn")
4898 (version "0.11.5")
4899 (source
4900 (origin
4901 (method url-fetch)
4902 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4903 (sha256
4904 (base32
4905 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4906 (build-system python-build-system)
4907 (arguments '(#:tests? #f)) ; tests are not included
4908 (propagated-inputs
4909 `(("python-matplotlib" ,python-matplotlib)
4910 ("python-numpy" ,python-numpy)
4911 ("python-scipy" ,python-scipy)))
4912 (native-inputs
4913 `(("unzip" ,unzip)))
4914 (home-page "https://github.com/konstantint/matplotlib-venn")
4915 (synopsis "Plot area-proportional Venn diagrams")
4916 (description
4917 "This package provides tools for plotting area-proportional two- and
4918 three-way Venn diagrams in @code{matplotlib}.")
4919 (license license:expat)))
4920
4921 (define-public python-pysnptools
4922 (package
4923 (name "python-pysnptools")
4924 (version "0.4.11")
4925 (source
4926 (origin
4927 (method url-fetch)
4928 (uri (pypi-uri "pysnptools" version))
4929 (sha256
4930 (base32
4931 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4932 (build-system python-build-system)
4933 (arguments
4934 `(#:tests? #f ; no test data are included
4935 #:phases
4936 (modify-phases %standard-phases
4937 (replace 'check
4938 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4939 (if tests?
4940 (begin
4941 (add-installed-pythonpath inputs outputs)
4942 (invoke "python3" "pysnptools/test.py"))
4943 #t))))))
4944 (propagated-inputs
4945 `(("python-dill" ,python-dill)
4946 ("python-h5py" ,python-h5py)
4947 ("python-numpy" ,python-numpy)
4948 ("python-pandas" ,python-pandas)
4949 ("python-psutil" ,python-psutil)
4950 ("python-scipy" ,python-scipy)))
4951 (native-inputs
4952 `(("python-cython" ,python-cython)))
4953 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4954 (synopsis "Library for reading and manipulating genetic data")
4955 (description
4956 "PySnpTools is a library for reading and manipulating genetic data. It
4957 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4958 those files. It can also efficiently manipulate ranges of integers using set
4959 operators such as union, intersection, and difference.")
4960 (license license:asl2.0)))
4961
4962 (define-public python2-pysnptools
4963 (package-with-python2 python-pysnptools))
4964
4965 (define-public python-socksipy-branch
4966 (package
4967 (name "python-socksipy-branch")
4968 (version "1.01")
4969 (source
4970 (origin
4971 (method url-fetch)
4972 (uri (pypi-uri "SocksiPy-branch" version))
4973 (sha256
4974 (base32
4975 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4976 (build-system python-build-system)
4977 (arguments
4978 `(#:tests? #f)) ; There are no tests
4979 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4980 (synopsis "Python SOCKS module")
4981 (description
4982 "SocksiPy - A Python SOCKS client module. It provides a
4983 socket-like interface that supports connections to any TCP
4984 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4985 The original version was developed by Dan Haim, this is a
4986 branch created by Mario Vilas to address some open issues,
4987 as the original project seems to have been abandoned circa 2007.")
4988 (license license:bsd-3)))
4989
4990 (define-public python2-socksipy-branch
4991 (package-with-python2 python-socksipy-branch))
4992
4993 (define-public python-socksipychain
4994 (package
4995 (name "python-socksipychain")
4996 (version "2.1.2")
4997 (source
4998 (origin
4999 (method git-fetch)
5000 (uri (git-reference
5001 (url "https://github.com/pagekite/PySocksipyChain.git")
5002 (commit (string-append "v" version))))
5003 (file-name (git-file-name name version))
5004 (sha256
5005 (base32
5006 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5007 (build-system python-build-system)
5008 (arguments
5009 `(#:tests? #f)) ; Tests try to access the network.
5010 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5011 (synopsis "Python SOCKS module with chained proxies support")
5012 (description
5013 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5014 adds support for arbitrary chaining of proxy servers and various modes of
5015 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5016 a simple netcat replacement with chaining support.")
5017 (license license:bsd-3)))
5018
5019 (define-public python-pycodestyle
5020 (package
5021 (name "python-pycodestyle")
5022 (version "2.5.0")
5023 (source
5024 (origin
5025 (method url-fetch)
5026 (uri (pypi-uri "pycodestyle" version))
5027 (sha256
5028 (base32
5029 "0v4prb05n21bm8650v0a01k1nyqjdmkrsm3zycfxh2j5k9n962p4"))))
5030 (build-system python-build-system)
5031 (home-page "https://pycodestyle.readthedocs.io/")
5032 (synopsis "Python style guide checker")
5033 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5034 Python code against some of the style conventions in
5035 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5036 (license license:expat)))
5037
5038 (define-public python2-pycodestyle
5039 (package-with-python2 python-pycodestyle))
5040
5041 (define-public python-multidict
5042 (package
5043 (name "python-multidict")
5044 (version "4.7.5")
5045 (source
5046 (origin
5047 (method url-fetch)
5048 (uri (pypi-uri "multidict" version))
5049 (sha256
5050 (base32
5051 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5052 (build-system python-build-system)
5053 (arguments
5054 '(#:modules ((ice-9 ftw)
5055 (srfi srfi-1)
5056 (srfi srfi-26)
5057 (guix build utils)
5058 (guix build python-build-system))
5059 #:phases (modify-phases %standard-phases
5060 (replace 'check
5061 (lambda* (#:key tests? #:allow-other-keys)
5062 (if tests?
5063 (begin
5064 (let ((libdir (find (cut string-prefix? "lib." <>)
5065 (scandir "build"))))
5066 (setenv "PYTHONPATH"
5067 (string-append "./build/" libdir ":"
5068 (getenv "PYTHONPATH")))
5069 (invoke "pytest" "-vv")))
5070 (format #t "test suite not run~%"))
5071 #t)))))
5072 (native-inputs
5073 `(("python-pytest" ,python-pytest)
5074 ("python-pytest-cov" ,python-pytest-cov)))
5075 (home-page "https://github.com/aio-libs/multidict/")
5076 (synopsis "Multidict implementation")
5077 (description "Multidict is dict-like collection of key-value pairs
5078 where key might be occurred more than once in the container.")
5079 (license license:asl2.0)))
5080
5081 (define-public python-orderedmultidict
5082 (package
5083 (name "python-orderedmultidict")
5084 (version "1.0")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (pypi-uri "orderedmultidict" version))
5089 (sha256
5090 (base32
5091 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5092 (build-system python-build-system)
5093 (arguments
5094 `(#:phases
5095 (modify-phases %standard-phases
5096 (add-after 'unpack 'fix-tests
5097 (lambda _
5098 ;; The package uses nosetest for running the tests.
5099 ;; Adding this initfile allows to run the test suite
5100 ;; without requiring nosetest.
5101 (with-output-to-file "tests/__init__.py" newline)
5102 #t)))))
5103 (propagated-inputs
5104 `(("python-six" ,python-six)))
5105 (native-inputs
5106 `(("python-pycodestyle" ,python-pycodestyle)))
5107 (home-page "https://github.com/gruns/orderedmultidict")
5108 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5109 (description "This package contains a library for ordered multivalue
5110 dictionaries. A multivalue dictionary is a dictionary that can store
5111 multiple values for the same key. An ordered multivalue dictionary is a
5112 multivalue dictionary that retains the order of insertions and deletions.")
5113 (license license:unlicense)))
5114
5115 (define-public python2-orderedmultidict
5116 (package-with-python2 python-orderedmultidict))
5117
5118 (define-public python-autopep8
5119 (package
5120 (name "python-autopep8")
5121 (version "1.3.5")
5122 (source
5123 (origin
5124 (method url-fetch)
5125 (uri (pypi-uri "autopep8" version))
5126 (sha256
5127 (base32
5128 "192bvhzi4d0claqxgzymvv7k3qnj627742bc8sgxpzjj42pd9112"))))
5129 (build-system python-build-system)
5130 (propagated-inputs
5131 `(("python-pycodestyle" ,python-pycodestyle)))
5132 (home-page "https://github.com/hhatto/autopep8")
5133 (synopsis "Format Python code according to the PEP 8 style guide")
5134 (description
5135 "@code{autopep8} automatically formats Python code to conform to
5136 the PEP 8 style guide. It uses the pycodestyle utility to determine
5137 what parts of the code needs to be formatted. @code{autopep8} is
5138 capable of fixing most of the formatting issues that can be reported
5139 by pycodestyle.")
5140 (license (license:non-copyleft
5141 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5142
5143 (define-public python2-autopep8
5144 (package-with-python2 python-autopep8))
5145
5146 (define-public python-distlib
5147 (package
5148 (name "python-distlib")
5149 (version "0.3.0")
5150 (source
5151 (origin
5152 (method url-fetch)
5153 (uri (pypi-uri "distlib" version ".zip"))
5154 (sha256
5155 (base32
5156 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5157 (build-system python-build-system)
5158 (arguments
5159 `(#:phases
5160 (modify-phases %standard-phases
5161 (add-before 'build 'no-/bin/sh
5162 (lambda _
5163 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5164 (("/bin/sh") (which "sh")))
5165 #t))
5166 (add-before 'check 'prepare-test-env
5167 (lambda _
5168 (setenv "HOME" "/tmp")
5169 ;; NOTE: Any value works, the variable just has to be present.
5170 (setenv "SKIP_ONLINE" "1")
5171 #t)))))
5172 (native-inputs `(("unzip" ,unzip)))
5173 (home-page "https://bitbucket.org/pypa/distlib")
5174 (synopsis "Distribution utilities")
5175 (description "Distlib is a library which implements low-level functions that
5176 relate to packaging and distribution of Python software. It is intended to be
5177 used as the basis for third-party packaging tools.")
5178 (license license:psfl)))
5179
5180 (define-public python-distutils-extra
5181 (package
5182 (name "python-distutils-extra")
5183 (version "2.38")
5184 (source
5185 (origin
5186 (method url-fetch)
5187 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5188 version "/+download/python-distutils-extra-"
5189 version ".tar.gz"))
5190 (sha256
5191 (base32
5192 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5193 (build-system python-build-system)
5194 (home-page "https://launchpad.net/python-distutils-extra/")
5195 (synopsis "Enhancements to Python's distutils")
5196 (description
5197 "The python-distutils-extra module enables you to easily integrate
5198 gettext support, themed icons, and scrollkeeper-based documentation into
5199 Python's distutils.")
5200 (license license:gpl2)))
5201
5202 (define-public python2-distutils-extra
5203 (package-with-python2 python-distutils-extra))
5204
5205 (define-public python2-elib.intl
5206 (package
5207 (name "python2-elib.intl")
5208 (version "0.0.3")
5209 (source
5210 (origin
5211 ;; This project doesn't tag releases or publish tarballs, so we take
5212 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5213 (method git-fetch)
5214 (uri (git-reference
5215 (url "https://github.com/dieterv/elib.intl.git")
5216 (commit "d09997cfef")))
5217 (file-name (string-append name "-" version "-checkout"))
5218 (sha256
5219 (base32
5220 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5221 (build-system python-build-system)
5222 (arguments
5223 ;; incompatible with Python 3 (exception syntax)
5224 `(#:python ,python-2
5225 #:tests? #f))
5226 (home-page "https://github.com/dieterv/elib.intl")
5227 (synopsis "Enhanced internationalization for Python")
5228 (description
5229 "The elib.intl module provides enhanced internationalization (I18N)
5230 services for your Python modules and applications.")
5231 (license license:lgpl3+)))
5232
5233 (define-public python-olefile
5234 (package
5235 (name "python-olefile")
5236 (version "0.46")
5237 (source
5238 (origin
5239 (method url-fetch)
5240 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5241 "download/v" version "/olefile-" version ".tar.gz"))
5242 (file-name (string-append name "-" version ".tar.gz"))
5243 (sha256
5244 (base32
5245 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5246 (build-system python-build-system)
5247 (home-page "https://www.decalage.info/python/olefileio")
5248 (synopsis "Read and write Microsoft OLE2 files.")
5249 (description
5250 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5251 Storage or Compound Document, Microsoft Office). It is an improved version of
5252 the OleFileIO module from PIL, the Python Image Library.")
5253 (license license:bsd-3)))
5254
5255 (define-public python2-olefile
5256 (package-with-python2 python-olefile))
5257
5258 (define-public python-pillow
5259 (package
5260 (name "python-pillow")
5261 (version "6.2.1")
5262 (source
5263 (origin
5264 (method url-fetch)
5265 (uri (pypi-uri "Pillow" version))
5266 (sha256
5267 (base32
5268 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5269 (build-system python-build-system)
5270 (native-inputs
5271 `(("python-pytest" ,python-pytest)))
5272 (inputs
5273 `(("freetype" ,freetype)
5274 ("lcms" ,lcms)
5275 ("libjpeg" ,libjpeg-turbo)
5276 ("libtiff" ,libtiff)
5277 ("libwebp" ,libwebp)
5278 ("openjpeg" ,openjpeg)
5279 ("zlib" ,zlib)))
5280 (propagated-inputs
5281 `(("python-olefile" ,python-olefile)))
5282 (arguments
5283 `(#:phases
5284 (modify-phases %standard-phases
5285 (add-after 'unpack 'patch-ldconfig
5286 (lambda _
5287 (substitute* "setup.py"
5288 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5289 (replace 'check
5290 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5291 (if tests?
5292 (begin
5293 (setenv "HOME" (getcwd))
5294 ;; Make installed package available for running the tests.
5295 (add-installed-pythonpath inputs outputs)
5296 (invoke "python" "selftest.py" "--installed")
5297 (invoke "python" "-m" "pytest" "-vv"))
5298 #t))))))
5299 (home-page "https://python-pillow.org")
5300 (synopsis "Fork of the Python Imaging Library")
5301 (description
5302 "The Python Imaging Library adds image processing capabilities to your
5303 Python interpreter. This library provides extensive file format support, an
5304 efficient internal representation, and fairly powerful image processing
5305 capabilities. The core image library is designed for fast access to data
5306 stored in a few basic pixel formats. It should provide a solid foundation for
5307 a general image processing tool.")
5308 (license (license:x11-style
5309 "http://www.pythonware.com/products/pil/license.htm"
5310 "The PIL Software License"))))
5311
5312 (define-public python2-pillow
5313 (package-with-python2 python-pillow))
5314
5315 (define-public python-pycparser
5316 (package
5317 (name "python-pycparser")
5318 (version "2.20")
5319 (source
5320 (origin
5321 (method url-fetch)
5322 (uri (pypi-uri "pycparser" version))
5323 (sha256
5324 (base32
5325 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5326 (outputs '("out" "doc"))
5327 (build-system python-build-system)
5328 (native-inputs
5329 `(("pkg-config" ,pkg-config)))
5330 (arguments
5331 `(#:phases
5332 (modify-phases %standard-phases
5333 (replace 'check
5334 (lambda _
5335 (with-directory-excursion "tests"
5336 (invoke "python" "all_tests.py"))
5337 #t))
5338 (add-after 'install 'install-doc
5339 (lambda* (#:key outputs #:allow-other-keys)
5340 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5341 (doc (string-append data "/doc/" ,name "-" ,version))
5342 (examples (string-append doc "/examples")))
5343 (mkdir-p examples)
5344 (for-each (lambda (file)
5345 (copy-file (string-append "." file)
5346 (string-append doc file)))
5347 '("/README.rst" "/CHANGES" "/LICENSE"))
5348 (copy-recursively "examples" examples)
5349 #t))))))
5350 (home-page "https://github.com/eliben/pycparser")
5351 (synopsis "C parser in Python")
5352 (description
5353 "Pycparser is a complete parser of the C language, written in pure Python
5354 using the PLY parsing library. It parses C code into an AST and can serve as
5355 a front-end for C compilers or analysis tools.")
5356 (license license:bsd-3)))
5357
5358 (define-public python2-pycparser
5359 (package-with-python2 python-pycparser))
5360
5361 (define-public python-pywavelets
5362 (package
5363 (name "python-pywavelets")
5364 (version "1.0.1")
5365 (home-page "https://github.com/PyWavelets/pywt")
5366 (source (origin
5367 (method url-fetch)
5368 (uri (pypi-uri "PyWavelets" version))
5369 (sha256
5370 (base32
5371 "1p3qv2v66ghnqrb1f98wyyhp9dz71jwcd6kfpsax65sfdpiyqp1w"))))
5372 (build-system python-build-system)
5373 (arguments
5374 '(#:modules ((ice-9 ftw)
5375 (srfi srfi-1)
5376 (srfi srfi-26)
5377 (guix build utils)
5378 (guix build python-build-system))
5379 #:phases (modify-phases %standard-phases
5380 (replace 'check
5381 (lambda _
5382 (let ((cwd (getcwd))
5383 (libdir (find (cut string-prefix? "lib." <>)
5384 (scandir "build"))))
5385 (with-directory-excursion (string-append cwd "/build/" libdir)
5386 (invoke "nosetests" "-v" "."))))))))
5387 (native-inputs
5388 `(("python-matplotlib" ,python-matplotlib) ;for tests
5389 ("python-nose" ,python-nose)))
5390 (propagated-inputs
5391 `(("python-numpy" ,python-numpy)))
5392 (synopsis "Wavelet transforms in Python")
5393 (description
5394 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5395 mathematical basis functions that are localized in both time and frequency.
5396 Wavelet transforms are time-frequency transforms employing wavelets. They are
5397 similar to Fourier transforms, the difference being that Fourier transforms are
5398 localized only in frequency instead of in time and frequency.")
5399 (license license:expat)))
5400
5401 (define-public python2-pywavelets
5402 (package-with-python2 python-pywavelets))
5403
5404 (define-public python-pywinrm
5405 (package
5406 (name "python-pywinrm")
5407 (version "0.4.1")
5408 (source
5409 (origin
5410 (method url-fetch)
5411 (uri (pypi-uri "pywinrm" version))
5412 (sha256
5413 (base32
5414 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5415 (build-system python-build-system)
5416 (propagated-inputs
5417 `(("python-six" ,python-six)
5418 ("python-requests_ntlm" ,python-requests_ntlm)
5419 ("python-xmltodict" ,python-xmltodict)
5420 ("python-kerberos" ,python-kerberos)))
5421 (native-inputs
5422 `(("python-mock" ,python-mock)
5423 ("python-pytest" ,python-pytest)))
5424 (home-page "https://github.com/diyan/pywinrm/")
5425 (synopsis
5426 "Python library for Windows Remote Management (WinRM)")
5427 (description
5428 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5429 service. It allows you to invoke commands on target Windows machines from
5430 any machine that can run Python.")
5431 (license license:expat)))
5432
5433 (define-public python-xcffib
5434 (package
5435 (name "python-xcffib")
5436 (version "0.6.0")
5437 (source
5438 (origin
5439 (method url-fetch)
5440 (uri (pypi-uri "xcffib" version))
5441 (sha256
5442 (base32
5443 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5444 (build-system python-build-system)
5445 (inputs
5446 `(("libxcb" ,libxcb)))
5447 (propagated-inputs
5448 `(("python-cffi" ,python-cffi) ; used at run time
5449 ("python-six" ,python-six)))
5450 (arguments
5451 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5452 #:tests? #f
5453 #:phases
5454 (modify-phases %standard-phases
5455 (add-after 'unpack 'fix-libxcb-path
5456 (lambda* (#:key inputs #:allow-other-keys)
5457 (let ((libxcb (assoc-ref inputs "libxcb")))
5458 (substitute* '("xcffib/__init__.py")
5459 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5460 #t)))
5461 (add-after 'install 'install-doc
5462 (lambda* (#:key outputs #:allow-other-keys)
5463 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5464 "/doc/" ,name "-" ,version)))
5465 (mkdir-p doc)
5466 (copy-file "README.md"
5467 (string-append doc "/README.md"))
5468 #t))))))
5469 (home-page "https://github.com/tych0/xcffib")
5470 (synopsis "XCB Python bindings")
5471 (description
5472 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5473 support for Python 3 and PyPy. It is based on cffi.")
5474 (license license:expat)))
5475
5476 (define-public python2-xcffib
5477 (package-with-python2 python-xcffib))
5478
5479 (define-public python-cairocffi
5480 (package
5481 (name "python-cairocffi")
5482 (version "0.9.0")
5483 (source
5484 (origin
5485 (method url-fetch)
5486 (uri (pypi-uri "cairocffi" version))
5487 (sha256
5488 (base32
5489 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5490 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5491 (build-system python-build-system)
5492 (outputs '("out" "doc"))
5493 (inputs
5494 `(("glib" ,glib)
5495 ("gtk+" ,gtk+)
5496 ("gdk-pixbuf" ,gdk-pixbuf)
5497 ("cairo" ,cairo)
5498 ("pango" ,pango)))
5499 (native-inputs
5500 `(("pkg-config" ,pkg-config)
5501 ("python-pytest" ,python-pytest)
5502 ("python-pytest-cov" ,python-pytest-cov)
5503 ("python-pytest-runner" ,python-pytest-runner)
5504 ("python-sphinx" ,python-sphinx)
5505 ("python-docutils" ,python-docutils)))
5506 (propagated-inputs
5507 `(("python-xcffib" ,python-xcffib))) ; used at run time
5508 (arguments
5509 `(#:phases
5510 (modify-phases %standard-phases
5511 (add-after 'unpack 'patch-paths
5512 (lambda* (#:key inputs outputs #:allow-other-keys)
5513 (substitute* (find-files "." "\\.py$")
5514 (("dlopen\\(ffi, 'cairo'")
5515 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5516 "/lib/libcairo.so.2'"))
5517 (("dlopen\\(ffi, 'gdk-3'")
5518 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5519 "/lib/libgtk-3.so.0'"))
5520 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5521 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5522 "/lib/libgdk_pixbuf-2.0.so.0'"))
5523 (("dlopen\\(ffi, 'glib-2.0'")
5524 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5525 "/lib/libglib-2.0.so.0'"))
5526 (("dlopen\\(ffi, 'gobject-2.0'")
5527 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5528 "/lib/libgobject-2.0.so.0'"))
5529 (("dlopen\\(ffi, 'pangocairo-1.0'")
5530 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5531 "/lib/libpangocairo-1.0.so.0'"))
5532 (("dlopen\\(ffi, 'pango-1.0'")
5533 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5534 "/lib/libpango-1.0.so.0'")))
5535 #t))
5536 (add-after 'install 'install-doc
5537 (lambda* (#:key inputs outputs #:allow-other-keys)
5538 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5539 (doc (string-append data "/doc/" ,name "-" ,version))
5540 (html (string-append doc "/html")))
5541 (setenv "LD_LIBRARY_PATH"
5542 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5543 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5544 (setenv "LANG" "en_US.UTF-8")
5545 (mkdir-p html)
5546 (for-each (lambda (file)
5547 (copy-file (string-append "." file)
5548 (string-append doc file)))
5549 '("/README.rst" "/CHANGES" "/LICENSE"))
5550 (system* "python" "setup.py" "build_sphinx")
5551 (copy-recursively "docs/_build/html" html)
5552 #t))))))
5553 (home-page "https://github.com/Kozea/cairocffi")
5554 (synopsis "Python bindings and object-oriented API for Cairo")
5555 (description
5556 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5557 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5558 graphics library with support for multiple backends including image buffers,
5559 PNG, PostScript, PDF, and SVG file output.")
5560 (license license:bsd-3)))
5561
5562 (define-public python2-cairocffi
5563 (package-with-python2 python-cairocffi))
5564
5565 (define-public python-decorator
5566 (package
5567 (name "python-decorator")
5568 (version "4.3.0")
5569 (source
5570 (origin
5571 (method url-fetch)
5572 (uri (pypi-uri "decorator" version))
5573 (sha256
5574 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5575 (build-system python-build-system)
5576 (home-page "https://pypi.org/project/decorator/")
5577 (synopsis "Python module to simplify usage of decorators")
5578 (description
5579 "The aim of the decorator module is to simplify the usage of decorators
5580 for the average programmer, and to popularize decorators usage giving examples
5581 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5582 etc. The core of this module is a decorator factory.")
5583 (license license:expat)))
5584
5585 (define-public python2-decorator
5586 (package-with-python2 python-decorator))
5587
5588 (define-public python-drmaa
5589 (package
5590 (name "python-drmaa")
5591 (version "0.7.7")
5592 (source
5593 (origin
5594 (method url-fetch)
5595 (uri (pypi-uri "drmaa" version))
5596 (sha256
5597 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5598 (build-system python-build-system)
5599 ;; The test suite requires libdrmaa which is provided by the cluster
5600 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5601 ;; should be set to the path of the libdrmaa library.
5602 (arguments '(#:tests? #f))
5603 (native-inputs
5604 `(("python-nose" ,python-nose)))
5605 (home-page "https://pypi.org/project/drmaa/")
5606 (synopsis "Python bindings for the DRMAA library")
5607 (description
5608 "A Python package for Distributed Resource Management (DRM) job
5609 submission and control. This package is an implementation of the DRMAA 1.0
5610 Python language binding specification.")
5611 (license license:bsd-3)))
5612
5613 (define-public python2-drmaa
5614 (package-with-python2 python-drmaa))
5615
5616 (define-public python-grako
5617 (package
5618 (name "python-grako")
5619 (version "3.99.9")
5620 (source
5621 (origin
5622 (method url-fetch)
5623 (uri
5624 (pypi-uri "grako" version ".zip"))
5625 (sha256
5626 (base32
5627 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5628 (build-system python-build-system)
5629 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5630 (native-inputs
5631 `(("unzip" ,unzip)
5632 ("python-pytest" ,python-pytest)
5633 ("python-pytest-runner" ,python-pytest-runner)))
5634 (home-page "https://bitbucket.org/neogeny/grako")
5635 (synopsis "EBNF parser generator")
5636 (description
5637 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5638 memoizing PEG/Packrat parser in Python.")
5639 (license license:bsd-3)))
5640
5641 (define-public python2-grako
5642 (package-with-python2 python-grako))
5643
5644 (define-public python-gridmap
5645 (package
5646 (name "python-gridmap")
5647 (version "0.13.0")
5648 (source
5649 (origin
5650 (method git-fetch)
5651 (uri (git-reference
5652 (url "https://github.com/pygridtools/gridmap.git")
5653 (commit (string-append "v" version))))
5654 (file-name (git-file-name name version))
5655 (sha256
5656 (base32 "1478lbwsr1w24cii2x01m2910fvh8r43ghnb78nc972a96hqiknm"))))
5657 (build-system python-build-system)
5658 (arguments
5659 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5660 (propagated-inputs
5661 `(("python-psutil" ,python-psutil)
5662 ("python-drmaa" ,python-drmaa)
5663 ("python-pyzmq" ,python-pyzmq)))
5664 (home-page "https://github.com/pygridtools/gridmap")
5665 (synopsis "Create jobs on a cluster directly from Python")
5666 (description
5667 "Gridmap is a Python package to allow you to easily create jobs on the
5668 cluster directly from Python. You can directly map Python functions onto the
5669 cluster without needing to write any wrapper code yourself.")
5670 (license license:gpl3+)))
5671
5672 (define-public python2-gridmap
5673 (package-with-python2 python-gridmap))
5674
5675 (define-public python-honcho
5676 (package
5677 (name "python-honcho")
5678 (version "1.0.1")
5679 (source
5680 (origin
5681 (method git-fetch)
5682 (uri (git-reference
5683 (url "https://github.com/nickstenning/honcho.git")
5684 (commit (string-append "v" version))))
5685 (file-name (git-file-name name version))
5686 (sha256
5687 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5688 (build-system python-build-system)
5689 (native-inputs
5690 `(("python-pytest" ,python-pytest)
5691 ("python-mock" ,python-mock)
5692 ("python-tox" ,python-tox)
5693 ("which" ,which))) ;for tests
5694 (propagated-inputs
5695 `(("python-jinja2" ,python-jinja2)))
5696 (arguments
5697 `(#:phases
5698 (modify-phases %standard-phases
5699 (delete 'check)
5700 (add-after 'install 'check
5701 (lambda* (#:key outputs inputs #:allow-other-keys)
5702 ;; fix honcho path in testsuite
5703 (substitute* "tests/conftest.py"
5704 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5705 "/bin/honcho" "'")))
5706 ;; It's easier to run tests after install.
5707 ;; Make installed package available for running the tests
5708 (add-installed-pythonpath inputs outputs)
5709 (invoke "py.test" "-v"))))))
5710 (home-page "https://github.com/nickstenning/honcho")
5711 (synopsis "Manage Procfile-based applications")
5712 (description
5713 "A Procfile is a file which describes how to run an application
5714 consisting of several processes. honcho starts all listed processes.
5715 The output of all running processes is collected by honcho and
5716 displayed.")
5717 (license license:expat)))
5718
5719 (define-public python2-honcho
5720 (package-with-python2 python-honcho))
5721
5722 (define-public python-pexpect
5723 (package
5724 (name "python-pexpect")
5725 (version "4.8.0")
5726 (source
5727 (origin
5728 (method url-fetch)
5729 (uri (pypi-uri "pexpect" version))
5730 (sha256
5731 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5732 (build-system python-build-system)
5733 (arguments
5734 `(#:phases
5735 (modify-phases %standard-phases
5736 (add-before 'check 'prepare-tests
5737 (lambda _
5738 (substitute* (find-files "tests")
5739 (("/bin/ls") (which "ls"))
5740 (("/bin/echo") (which "echo"))
5741 (("/bin/which") (which "which"))
5742 ;; Many tests try to use the /bin directory which
5743 ;; is not present in the build environment.
5744 ;; Use one that's non-empty and unlikely to change.
5745 (("/bin'") "/dev'")
5746 ;; Disable failing test. See upstream bug report
5747 ;; https://github.com/pexpect/pexpect/issues/568
5748 (("def test_bash") "def _test_bash"))
5749 ;; XXX: Socket connection test gets "Connection reset by peer".
5750 ;; Why does it not work? Delete for now.
5751 (delete-file "tests/test_socket.py")
5752 #t))
5753 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5754 (native-inputs
5755 `(("python-nose" ,python-nose)
5756 ("python-pytest" ,python-pytest)
5757 ("man-db" ,man-db)
5758 ("which" ,which)
5759 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5760 (propagated-inputs
5761 `(("python-ptyprocess" ,python-ptyprocess)))
5762 (home-page "http://pexpect.readthedocs.org/")
5763 (synopsis "Controlling interactive console applications")
5764 (description
5765 "Pexpect is a pure Python module for spawning child applications;
5766 controlling them; and responding to expected patterns in their output.
5767 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5768 child application and control it as if a human were typing commands.")
5769 (license license:isc)))
5770
5771 (define-public python2-pexpect
5772 (package-with-python2 python-pexpect))
5773
5774 (define-public python-setuptools-scm
5775 (package
5776 (name "python-setuptools-scm")
5777 (version "3.4.3")
5778 (source (origin
5779 (method url-fetch)
5780 (uri (pypi-uri "setuptools_scm" version))
5781 (sha256
5782 (base32
5783 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5784 (build-system python-build-system)
5785 (home-page "https://github.com/pypa/setuptools_scm/")
5786 (synopsis "Manage Python package versions in SCM metadata")
5787 (description
5788 "Setuptools_scm handles managing your Python package versions in
5789 @dfn{software configuration management} (SCM) metadata instead of declaring
5790 them as the version argument or in a SCM managed file.")
5791 (license license:expat)))
5792
5793 (define-public python2-setuptools-scm
5794 (package-with-python2 python-setuptools-scm))
5795
5796 (define-public python-sexpdata
5797 (package
5798 (name "python-sexpdata")
5799 (version "0.0.3")
5800 (source
5801 (origin
5802 (method url-fetch)
5803 (uri (pypi-uri "sexpdata" version))
5804 (sha256
5805 (base32
5806 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
5807 (build-system python-build-system)
5808 (home-page "https://github.com/jd-boyd/sexpdata")
5809 (synopsis "S-expression parser for Python")
5810 (description
5811 "Sexpdata is an S-expression parser/serializer. It has load and dump
5812 functions like pickle, json or PyYAML module.")
5813 (license license:bsd-3)))
5814
5815 (define-public python-pathlib2
5816 (package
5817 (name "python-pathlib2")
5818 (version "2.3.3")
5819 (source
5820 (origin
5821 (method url-fetch)
5822 (uri (pypi-uri "pathlib2" version))
5823 (sha256
5824 (base32
5825 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5826 (build-system python-build-system)
5827 (propagated-inputs
5828 `(("python-scandir" ,python-scandir)
5829 ("python-six" ,python-six)))
5830 (home-page "https://pypi.org/project/pathlib2/")
5831 (synopsis "Object-oriented file system paths")
5832 (description "The goal of pathlib2 is to provide a backport of the
5833 standard @code{pathlib} module which tracks the standard library module, so
5834 all the newest features of the standard @code{pathlib} can be used also on
5835 older Python versions.")
5836 (license license:expat)))
5837
5838 (define-public python2-importlib-resources
5839 (package
5840 (name "python2-importlib-resources")
5841 (version "1.0.2")
5842 (source (origin
5843 (method url-fetch)
5844 (uri (pypi-uri "importlib_resources" version))
5845 (sha256
5846 (base32
5847 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5848 (build-system python-build-system)
5849 (arguments
5850 `(#:python ,python-2
5851 #:phases (modify-phases %standard-phases
5852 ;; The build system tests for python-wheel, but it is
5853 ;; not required for Guix nor the test suite. Just drop
5854 ;; it to make bootstrapping pytest easier.
5855 (add-after 'unpack 'drop-wheel-dependency
5856 (lambda _
5857 (substitute* "setup.cfg"
5858 (("^[[:blank:]]+wheel")
5859 ""))
5860 #t)))))
5861 (propagated-inputs
5862 `(("python-pathlib2" ,python2-pathlib2)
5863 ("python-typing" ,python2-typing)))
5864 (home-page "https://gitlab.com/python-devs/importlib_resources")
5865 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5866 (description
5867 "This package provides an implementation of @code{importlib.resources}
5868 for older versions of Python.")
5869 (license license:asl2.0)))
5870
5871 ;; For importlib-metadata-bootstrap below.
5872 (define-public python2-importlib-resources-bootstrap
5873 (hidden-package
5874 (package/inherit
5875 python2-importlib-resources
5876 (name "python2-importlib-resources-bootstrap")
5877 (propagated-inputs
5878 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
5879 ("python-typing" ,python2-typing))))))
5880
5881 (define-public python-importlib-metadata
5882 (package
5883 (name "python-importlib-metadata")
5884 (version "1.5.0")
5885 (source
5886 (origin
5887 (method url-fetch)
5888 (uri (pypi-uri "importlib_metadata" version))
5889 (sha256
5890 (base32
5891 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
5892 (build-system python-build-system)
5893 (propagated-inputs
5894 `(("python-zipp" ,python-zipp)))
5895 (native-inputs
5896 `(("python-setuptools-scm" ,python-setuptools-scm)
5897 ("python-pyfakefs" ,python-pyfakefs)
5898 ("python-packaging" ,python-packaging)))
5899 (home-page "https://importlib-metadata.readthedocs.io/")
5900 (synopsis "Read metadata from Python packages")
5901 (description
5902 "@code{importlib_metadata} is a library which provides an API for
5903 accessing an installed Python package's metadata, such as its entry points or
5904 its top-level name. This functionality intends to replace most uses of
5905 @code{pkg_resources} entry point API and metadata API. Along with
5906 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5907 need to use the older and less efficient @code{pkg_resources} package.")
5908 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5909 (license license:asl2.0)))
5910
5911 (define-public python2-importlib-metadata
5912 (let ((base (package-with-python2 (strip-python2-variant
5913 python-importlib-metadata))))
5914 (package/inherit
5915 base
5916 (name "python2-importlib-metadata")
5917 (native-inputs
5918 `(("python-setuptools-scm" ,python2-setuptools-scm)
5919 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
5920 ("python-packaging" ,python2-packaging-bootstrap)))
5921 (propagated-inputs
5922 `(("python-configparser" ,python2-configparser)
5923 ("python-contextlib2" ,python2-contextlib2)
5924 ("python-importlib-resources" ,python2-importlib-resources)
5925 ("python-pathlib2" ,python2-pathlib2)
5926 ,@(package-propagated-inputs base))))))
5927
5928 ;; This package is used by python2-pytest, and thus must not depend on it.
5929 (define-public python2-importlib-metadata-bootstrap
5930 (hidden-package
5931 (package/inherit
5932 python2-importlib-metadata
5933 (name "python2-importlib-metadata-bootstrap")
5934 (arguments
5935 `(#:tests? #f
5936 ,@(package-arguments python2-importlib-metadata)))
5937 (propagated-inputs
5938 `(("python-zipp" ,python2-zipp-bootstrap)
5939 ("python-pathlib2" ,python2-pathlib2-bootstrap)
5940 ("python-configparser" ,python2-configparser)
5941 ("python-contextlib2" ,python2-contextlib2-bootstrap)
5942 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
5943
5944 (define-public python-importmagic
5945 (package
5946 (name "python-importmagic")
5947 (version "0.1.7")
5948 (source
5949 (origin
5950 (method url-fetch)
5951 (uri (pypi-uri "importmagic" version))
5952 (sha256
5953 (base32
5954 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
5955 (build-system python-build-system)
5956 (home-page "https://github.com/alecthomas/importmagic")
5957 (synopsis "Library for adding, removing and managing Python imports")
5958 (description
5959 "Importmagic is a Python library for automatically managing imports by
5960 finding unresolved symbols in Python code and their corresponding imports.")
5961 (license license:bsd-3)))
5962
5963 (define-public python-jaraco-packaging
5964 (package
5965 (name "python-jaraco-packaging")
5966 (version "6.1")
5967 (source
5968 (origin
5969 (method url-fetch)
5970 (uri (pypi-uri "jaraco.packaging" version))
5971 (sha256
5972 (base32
5973 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5974 (build-system python-build-system)
5975 (propagated-inputs
5976 `(("python-pytest" ,python-pytest)
5977 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5978 ("python-pytest-flake8" ,python-pytest-flake8)
5979 ("python-rst.linker" ,python-rst.linker)
5980 ("python-setuptools" ,python-setuptools)
5981 ("python-setuptools-scm" ,python-setuptools-scm)
5982 ("python-six" ,python-six)
5983 ("python-sphinx" ,python-sphinx)))
5984 (home-page "https://github.com/jaraco/jaraco.packaging")
5985 (synopsis "Tools to supplement packaging Python releases")
5986 (description
5987 "This package provides various tools to supplement packaging Python
5988 releases.")
5989 (license license:expat)))
5990
5991 (define-public python-pathpy
5992 (package
5993 (name "python-pathpy")
5994 (version "11.5.1")
5995 (source
5996 (origin
5997 (method url-fetch)
5998 (uri (pypi-uri "path.py" version))
5999 (sha256
6000 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6001 (outputs '("out" "doc"))
6002 (build-system python-build-system)
6003 (propagated-inputs
6004 `(("python-appdirs" ,python-appdirs)
6005 ("python-importlib-metadata" ,python-importlib-metadata)))
6006 (native-inputs
6007 `(("python-setuptools-scm" ,python-setuptools-scm)
6008 ("python-sphinx" ,python-sphinx)
6009 ("python-rst.linker" ,python-rst.linker)
6010 ("python-pytest" ,python-pytest)
6011 ("python-pytest-runner" ,python-pytest-runner)
6012 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6013 (arguments
6014 `(#:phases
6015 (modify-phases %standard-phases
6016 (add-after 'build 'build-doc
6017 (lambda _
6018 (setenv "LANG" "en_US.UTF-8")
6019 (invoke "python" "setup.py" "build_sphinx")))
6020 (add-after 'install 'install-doc
6021 (lambda* (#:key outputs #:allow-other-keys)
6022 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6023 (doc (string-append data "/doc/" ,name "-" ,version))
6024 (html (string-append doc "/html")))
6025 (mkdir-p html)
6026 (for-each (lambda (file)
6027 (copy-file file (string-append doc "/" file)))
6028 '("README.rst" "CHANGES.rst"))
6029 (copy-recursively "build/sphinx/html" html)
6030 #t)))
6031 (replace 'check
6032 (lambda _
6033 ;; The import time test aborts if an import takes longer than
6034 ;; 100ms. It may very well take a little longer than that.
6035 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6036 (home-page "https://github.com/jaraco/path.py")
6037 (synopsis "Python module wrapper for built-in os.path")
6038 (description
6039 "@code{path.py} implements path objects as first-class entities, allowing
6040 common operations on files to be invoked on those path objects directly.")
6041 (license license:expat)))
6042
6043 (define-public python2-pathpy
6044 (package-with-python2 python-pathpy))
6045
6046 (define-public python-simplegeneric
6047 (package
6048 (name "python-simplegeneric")
6049 (version "0.8.1")
6050 (source
6051 (origin
6052 (method url-fetch)
6053 (uri (pypi-uri "simplegeneric" version ".zip"))
6054 (sha256
6055 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6056 (build-system python-build-system)
6057 (native-inputs
6058 `(("unzip" ,unzip)))
6059 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6060 (synopsis "Python module for simple generic functions")
6061 (description
6062 "The simplegeneric module lets you define simple single-dispatch generic
6063 functions, akin to Python’s built-in generic functions like @code{len()},
6064 @code{iter()} and so on. However, instead of using specially-named methods,
6065 these generic functions use simple lookup tables, akin to those used by
6066 e.g. @code{pickle.dump()} and other generic functions found in the Python
6067 standard library.")
6068 (license license:zpl2.1)))
6069
6070 (define-public python2-simplegeneric
6071 (package-with-python2 python-simplegeneric))
6072
6073 (define-public python-ipython-genutils
6074 ;; TODO: This package is retired, check if can be removed, see description.
6075 (package
6076 (name "python-ipython-genutils")
6077 (version "0.1.0")
6078 (source
6079 (origin
6080 (method url-fetch)
6081 (uri (pypi-uri "ipython_genutils" version))
6082 (sha256
6083 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6084 (build-system python-build-system)
6085 (arguments `(#:tests? #f)) ; no tests
6086 (home-page "https://ipython.org")
6087 (synopsis "Vestigial utilities from IPython")
6088 (description
6089 "This package provides retired utilities from IPython. No packages
6090 outside IPython/Jupyter should depend on it.
6091
6092 This package shouldn't exist. It contains some common utilities shared by
6093 Jupyter and IPython projects during The Big Split. As soon as possible, those
6094 packages will remove their dependency on this, and this package will go
6095 away.")
6096 (license license:bsd-3)))
6097
6098 (define-public python2-ipython-genutils
6099 (package-with-python2 python-ipython-genutils))
6100
6101 (define-public python-ipyparallel
6102 (package
6103 (name "python-ipyparallel")
6104 (version "6.2.4")
6105 (source
6106 (origin
6107 (method url-fetch)
6108 (uri (pypi-uri "ipyparallel" version))
6109 (sha256
6110 (base32
6111 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6112 (build-system python-build-system)
6113 (arguments
6114 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6115 #:phases
6116 (modify-phases %standard-phases
6117 (add-before 'check 'prepare-for-tests
6118 (lambda _
6119 (setenv "HOME" (getcwd))
6120 #t)))))
6121 (propagated-inputs
6122 `(("python-dateutil" ,python-dateutil)
6123 ("python-decorator" ,python-decorator)
6124 ("python-ipykernel" ,python-ipykernel)
6125 ("python-ipython" ,python-ipython)
6126 ("python-ipython-genutils" ,python-ipython-genutils)
6127 ("python-jupyter-client" ,python-jupyter-client)
6128 ("python-pyzmq" ,python-pyzmq)
6129 ("python-tornado" ,python-tornado)
6130 ("python-traitlets" ,python-traitlets)))
6131 (native-inputs
6132 `(("python-ipython" ,python-ipython)
6133 ("python-mock" ,python-mock)
6134 ("python-nose" ,python-nose)
6135 ("python-pytest" ,python-pytest)
6136 ("python-pytest-cov" ,python-pytest-cov)
6137 ("python-testpath" ,python-testpath)))
6138 (home-page "https://ipython.org/")
6139 (synopsis "Interactive Parallel Computing with IPython")
6140 (description
6141 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6142 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6143 CLI scripts:
6144 @enumerate
6145 @item ipcluster - start/stop a cluster
6146 @item ipcontroller - start a scheduler
6147 @item ipengine - start an engine
6148 @end enumerate")
6149 (license license:bsd-3)))
6150
6151 (define-public python2-ipyparallel
6152 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6153 (package
6154 (inherit ipyparallel)
6155 (propagated-inputs
6156 `(("python2-futures" ,python2-futures)
6157 ,@(package-propagated-inputs ipyparallel))))))
6158
6159 (define-public python-ipython-cluster-helper
6160 (package
6161 (name "python-ipython-cluster-helper")
6162 (version "0.6.4")
6163 (source
6164 (origin
6165 (method url-fetch)
6166 (uri (pypi-uri "ipython-cluster-helper" version))
6167 (sha256
6168 (base32
6169 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6170 (modules '((guix build utils)))
6171 (snippet
6172 '(begin (substitute* "requirements.txt"
6173 (("ipython.*") "ipython\n"))
6174 #t))))
6175 (build-system python-build-system)
6176 (arguments
6177 `(#:tests? #f ; Test suite can't find IPython.
6178 #:phases
6179 (modify-phases %standard-phases
6180 (replace 'check
6181 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6182 (if tests?
6183 (begin
6184 (setenv "HOME" (getcwd))
6185 (add-installed-pythonpath inputs outputs)
6186 (invoke "python" "example/example.py" "--local"))
6187 #t))))))
6188 (propagated-inputs
6189 `(("python-ipyparallel" ,python-ipyparallel)
6190 ("python-ipython" ,python-ipython)
6191 ("python-netifaces" ,python-netifaces)
6192 ("python-pyzmq" ,python-pyzmq)
6193 ("python-setuptools" ,python-setuptools)
6194 ("python-six" ,python-six)))
6195 (home-page "https://github.com/roryk/ipython-cluster-helper")
6196 (synopsis
6197 "Simplify IPython cluster start up and use for multiple schedulers")
6198 (description
6199 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6200 profile, launches a cluster and returns a view. On program exit it shuts the
6201 cluster down and deletes the throwaway profile.")
6202 (license license:expat)))
6203
6204 (define-public python2-ipython-cluster-helper
6205 (package-with-python2 python-ipython-cluster-helper))
6206
6207 (define-public python-traitlets
6208 (package
6209 (name "python-traitlets")
6210 (version "4.3.3")
6211 (source
6212 (origin
6213 (method url-fetch)
6214 (uri (pypi-uri "traitlets" version))
6215 (sha256
6216 (base32
6217 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6218 (build-system python-build-system)
6219 (arguments
6220 `(#:phases
6221 (modify-phases %standard-phases
6222 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6223 (propagated-inputs
6224 `(("python-ipython-genutils" ,python-ipython-genutils)
6225 ("python-decorator" ,python-decorator)))
6226 (native-inputs
6227 `(("python-pytest" ,python-pytest)))
6228 (properties `((python2-variant . ,(delay python2-traitlets))))
6229 (home-page "https://ipython.org")
6230 (synopsis "Configuration system for Python applications")
6231 (description
6232 "Traitlets is a framework that lets Python classes have attributes with
6233 type checking, dynamically calculated default values, and ‘on change’
6234 callbacks. The package also includes a mechanism to use traitlets for
6235 configuration, loading values from files or from command line arguments. This
6236 is a distinct layer on top of traitlets, so you can use traitlets in your code
6237 without using the configuration machinery.")
6238 (license license:bsd-3)))
6239
6240 (define-public python2-traitlets
6241 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6242 (package
6243 (inherit traitlets)
6244 (propagated-inputs
6245 `(("python2-enum34" ,python2-enum34)
6246 ,@(package-propagated-inputs traitlets))))))
6247
6248 (define-public python-jupyter-core
6249 (package
6250 (name "python-jupyter-core")
6251 (version "4.4.0")
6252 (source
6253 (origin
6254 (method url-fetch)
6255 (uri (string-append (pypi-uri "jupyter_core" version)))
6256 (sha256
6257 (base32
6258 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6259 (build-system python-build-system)
6260 ;; FIXME: not sure how to run the tests
6261 (arguments `(#:tests? #f))
6262 (propagated-inputs
6263 `(("python-traitlets" ,python-traitlets)))
6264 (home-page "http://jupyter.org/")
6265 (synopsis "Jupyter base package")
6266 (description
6267 "Jupyter core is the base package on which Jupyter projects rely.")
6268 (license license:bsd-3)))
6269
6270 (define-public python2-jupyter-core
6271 (package-with-python2 python-jupyter-core))
6272
6273 (define-public python-jupyter-client
6274 (package
6275 (name "python-jupyter-client")
6276 (version "5.2.4")
6277 (source
6278 (origin
6279 (method url-fetch)
6280 (uri (pypi-uri "jupyter_client" version))
6281 (sha256
6282 (base32
6283 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6284 (build-system python-build-system)
6285 ;; Tests fail because of missing native python kernel which I assume is
6286 ;; provided by the ipython package, which we cannot use because it would
6287 ;; cause a dependency cycle.
6288 (arguments
6289 `(#:tests? #f
6290
6291 #:phases (modify-phases %standard-phases
6292 (add-after 'unpack 'set-tool-file-names
6293 (lambda* (#:key inputs #:allow-other-keys)
6294 (let ((iproute (assoc-ref inputs "iproute")))
6295 (substitute* "jupyter_client/localinterfaces.py"
6296 (("'ip'")
6297 (string-append "'" iproute "/sbin/ip'")))
6298 #t))))))
6299 (inputs
6300 `(("iproute" ,iproute)))
6301 (propagated-inputs
6302 `(("python-pyzmq" ,python-pyzmq)
6303 ("python-traitlets" ,python-traitlets)
6304 ("python-jupyter-core" ,python-jupyter-core)))
6305 (home-page "http://jupyter.org/")
6306 (synopsis "Jupyter protocol implementation and client libraries")
6307 (description
6308 "The @code{jupyter_client} package contains the reference implementation
6309 of the Jupyter protocol. It also provides client and kernel management APIs
6310 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6311 installing @code{kernelspec}s for use with Jupyter frontends.")
6312 (license license:bsd-3)))
6313
6314 (define-public python2-jupyter-client
6315 (package-with-python2 python-jupyter-client))
6316
6317 (define-public python-ipykernel
6318 (package
6319 (name "python-ipykernel")
6320 (version "5.1.3")
6321 (source
6322 (origin
6323 (method url-fetch)
6324 (uri (pypi-uri "ipykernel" version))
6325 (sha256
6326 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6327 (build-system python-build-system)
6328 (arguments
6329 `(#:phases
6330 (modify-phases %standard-phases
6331 (replace 'check
6332 (lambda _
6333 (setenv "HOME" "/tmp")
6334 (invoke "pytest" "-v")
6335 #t))
6336 (add-after 'install 'set-python-file-name
6337 (lambda* (#:key outputs #:allow-other-keys)
6338 ;; Record the absolute file name of the 'python' executable in
6339 ;; 'kernel.json'.
6340 (let ((out (assoc-ref outputs "out")))
6341 (substitute* (string-append out "/share/jupyter"
6342 "/kernels/python3/kernel.json")
6343 (("\"python\"")
6344 (string-append "\"" (which "python") "\"")))
6345 #t))))))
6346 (propagated-inputs
6347 `(("python-ipython" ,python-ipython)
6348 ;; imported at runtime during connect
6349 ("python-jupyter-client" ,python-jupyter-client)))
6350 (native-inputs
6351 `(("python-flaky" ,python-flaky)
6352 ("python-nose" ,python-nose)
6353 ("python-pytest" ,python-pytest)))
6354 (home-page "https://ipython.org")
6355 (synopsis "IPython Kernel for Jupyter")
6356 (description
6357 "This package provides the IPython kernel for Jupyter.")
6358 (properties `((python2-variant . ,(delay python2-ipykernel))))
6359 (license license:bsd-3)))
6360
6361 ;; Version 5.x and above no longer support Python 2.
6362 (define-public python2-ipykernel
6363 (package
6364 (name "python2-ipykernel")
6365 (version "4.10.1")
6366 (source
6367 (origin
6368 (method url-fetch)
6369 (uri (pypi-uri "ipykernel" version))
6370 (sha256
6371 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6372 (build-system python-build-system)
6373 (arguments
6374 `(#:python ,python-2))
6375 (propagated-inputs
6376 `(("python2-ipython" ,python2-ipython)
6377 ;; imported at runtime during connect
6378 ("python2-jupyter-client" ,python2-jupyter-client)
6379 ("python2-tornado" ,python2-tornado)
6380 ("python2-traitlets" ,python2-traitlets)))
6381 (native-inputs
6382 `(("python2-mock" ,python2-mock)
6383 ("python2-nose" ,python2-nose)
6384 ("python2-pytest" ,python2-pytest)
6385 ("python2-pytest-cov" ,python2-pytest-cov)))
6386 (home-page "https://ipython.org")
6387 (synopsis "IPython Kernel for Jupyter")
6388 (description
6389 "This package provides the IPython kernel for Jupyter.")
6390 (license license:bsd-3)))
6391
6392 (define-public python-pari-jupyter
6393 (package
6394 (name "python-pari-jupyter")
6395 (version "1.3.2")
6396 (source
6397 (origin
6398 (method url-fetch)
6399 (uri (pypi-uri "pari_jupyter" version))
6400 (sha256
6401 (base32
6402 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6403 (build-system python-build-system)
6404 (propagated-inputs
6405 `(("python-ipykernel" ,python-ipykernel)))
6406 (inputs
6407 `(("pari-gp" ,pari-gp)
6408 ("readline" ,readline)))
6409 (arguments
6410 `(#:tests? #f)) ; no test suite
6411 (home-page
6412 "https://github.com/jdemeyer/pari_jupyter")
6413 (synopsis "A Jupyter kernel for PARI/GP")
6414 (description "The package provides a PARI/GP kernel for Jupyter.")
6415 (license license:gpl3+)))
6416
6417 (define-public python-backcall
6418 (package
6419 (name "python-backcall")
6420 (version "0.1.0")
6421 (source
6422 (origin
6423 (method url-fetch)
6424 (uri (pypi-uri "backcall" version))
6425 (sha256
6426 (base32
6427 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6428 (build-system python-build-system)
6429 (home-page "https://github.com/takluyver/backcall/")
6430 (synopsis "Specifications for callback functions passed in to an API")
6431 (description
6432 "If your code lets other people supply callback functions, it's important
6433 to specify the function signature you expect, and check that functions support
6434 that. Adding extra parameters later would break other peoples code unless
6435 you're careful. The @code{backcall} package provides a way of specifying the
6436 callback signature using a prototype function.")
6437 (license license:bsd-3)))
6438
6439 (define-public python-ipython
6440 (package
6441 (name "python-ipython")
6442 (version "7.9.0")
6443 (source
6444 (origin
6445 (method url-fetch)
6446 (uri (pypi-uri "ipython" version ".tar.gz"))
6447 (sha256
6448 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6449 (build-system python-build-system)
6450 (propagated-inputs
6451 `(("python-backcall" ,python-backcall)
6452 ("python-pyzmq" ,python-pyzmq)
6453 ("python-prompt-toolkit" ,python-prompt-toolkit)
6454 ("python-terminado" ,python-terminado)
6455 ("python-matplotlib" ,python-matplotlib)
6456 ("python-numpy" ,python-numpy)
6457 ("python-numpydoc" ,python-numpydoc)
6458 ("python-jedi" ,python-jedi)
6459 ("python-jinja2" ,python-jinja2)
6460 ("python-mistune" ,python-mistune)
6461 ("python-pexpect" ,python-pexpect)
6462 ("python-pickleshare" ,python-pickleshare)
6463 ("python-simplegeneric" ,python-simplegeneric)
6464 ("python-jsonschema" ,python-jsonschema)
6465 ("python-traitlets" ,python-traitlets)
6466 ("python-nbformat" ,python-nbformat)
6467 ("python-pygments" ,python-pygments)))
6468 (inputs
6469 `(("readline" ,readline)
6470 ("which" ,which)))
6471 (native-inputs
6472 `(("graphviz" ,graphviz)
6473 ("pkg-config" ,pkg-config)
6474 ("python-requests" ,python-requests) ;; for tests
6475 ("python-testpath" ,python-testpath)
6476 ("python-nose" ,python-nose)))
6477 (arguments
6478 `(#:phases
6479 (modify-phases %standard-phases
6480 (add-after 'unpack 'make-docs-reproducible
6481 (lambda _
6482 (substitute* "IPython/sphinxext/ipython_directive.py"
6483 ((".*import datetime") "")
6484 ((".*datetime.datetime.now\\(\\)") "")
6485 (("%timeit") "# %timeit"))
6486 #t))
6487 ;; Tests can only be run after the library has been installed and not
6488 ;; within the source directory.
6489 (delete 'check)
6490 (add-after 'install 'check
6491 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6492 (if tests?
6493 (begin
6494 ;; Make installed package available for running the tests
6495 (add-installed-pythonpath inputs outputs)
6496 (setenv "HOME" "/tmp/") ;; required by a test
6497 ;; We only test the core because one of the other tests
6498 ;; tries to import ipykernel.
6499 (invoke "python" "IPython/testing/iptest.py"
6500 "-v" "IPython/core/tests"))
6501 #t)))
6502 (add-before 'check 'fix-tests
6503 (lambda* (#:key inputs #:allow-other-keys)
6504 (substitute* "./IPython/utils/_process_posix.py"
6505 (("/usr/bin/env', 'which") (which "which")))
6506 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6507 (("#!/usr/bin/env python")
6508 (string-append "#!" (which "python"))))
6509 ;; This test introduces a circular dependency on ipykernel
6510 ;; (which depends on ipython).
6511 (delete-file "IPython/core/tests/test_display.py")
6512 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6513 (delete-file "IPython/core/tests/test_interactiveshell.py")
6514 #t)))))
6515 (home-page "https://ipython.org")
6516 (synopsis "IPython is a tool for interactive computing in Python")
6517 (description
6518 "IPython provides a rich architecture for interactive computing with:
6519 Powerful interactive shells, a browser-based notebook, support for interactive
6520 data visualization, embeddable interpreters and tools for parallel
6521 computing.")
6522 (properties `((python2-variant . ,(delay python2-ipython))))
6523 (license license:bsd-3)))
6524
6525 ;; This is the latest release of the LTS version of ipython with support for
6526 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6527 ;; dropped support for Python 2.7.
6528 (define-public python2-ipython
6529 (package
6530 (name "python2-ipython")
6531 (version "5.8.0")
6532 (source
6533 (origin
6534 (method url-fetch)
6535 (uri (pypi-uri "ipython" version ".tar.gz"))
6536 (sha256
6537 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6538 (build-system python-build-system)
6539 (propagated-inputs
6540 `(("python2-backports-shutil-get-terminal-size"
6541 ,python2-backports-shutil-get-terminal-size)
6542 ("python2-pathlib2" ,python2-pathlib2)
6543 ("python2-pyzmq" ,python2-pyzmq)
6544 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6545 ("python2-terminado" ,python2-terminado)
6546 ("python2-matplotlib" ,python2-matplotlib)
6547 ("python2-numpy" ,python2-numpy)
6548 ("python2-numpydoc" ,python2-numpydoc)
6549 ("python2-jinja2" ,python2-jinja2)
6550 ("python2-mistune" ,python2-mistune)
6551 ("python2-pexpect" ,python2-pexpect)
6552 ("python2-pickleshare" ,python2-pickleshare)
6553 ("python2-simplegeneric" ,python2-simplegeneric)
6554 ("python2-jsonschema" ,python2-jsonschema)
6555 ("python2-traitlets" ,python2-traitlets)
6556 ("python2-nbformat" ,python2-nbformat)
6557 ("python2-pygments" ,python2-pygments)))
6558 (inputs
6559 `(("readline" ,readline)
6560 ("which" ,which)))
6561 (native-inputs
6562 `(("graphviz" ,graphviz)
6563 ("pkg-config" ,pkg-config)
6564 ("python2-requests" ,python2-requests) ;; for tests
6565 ("python2-testpath" ,python2-testpath)
6566 ("python2-mock" ,python2-mock)
6567 ("python2-nose" ,python2-nose)))
6568 (arguments
6569 `(#:python ,python-2
6570 #:phases
6571 (modify-phases %standard-phases
6572 (add-before 'check 'delete-broken-tests
6573 (lambda* (#:key inputs #:allow-other-keys)
6574 ;; These tests throw errors for unknown reasons.
6575 (delete-file "IPython/core/tests/test_displayhook.py")
6576 (delete-file "IPython/core/tests/test_magic_terminal.py")
6577 (delete-file "IPython/core/tests/test_profile.py")
6578 #t)))))
6579 (home-page "https://ipython.org")
6580 (synopsis "IPython is a tool for interactive computing in Python")
6581 (description
6582 "IPython provides a rich architecture for interactive computing with:
6583 Powerful interactive shells, a browser-based notebook, support for interactive
6584 data visualization, embeddable interpreters and tools for parallel
6585 computing.")
6586 (license license:bsd-3)))
6587
6588 (define-public python-ipython-documentation
6589 (package
6590 (inherit python-ipython)
6591 (name "python-ipython-documentation")
6592 (version (package-version python-ipython))
6593 (arguments
6594 `(#:phases
6595 (modify-phases %standard-phases
6596 (delete 'build)
6597 (delete 'check)
6598 (replace 'install
6599 (lambda* (#:key outputs #:allow-other-keys)
6600 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6601 (doc (string-append data "/doc/" ,name "-" ,version))
6602 (html (string-append doc "/html"))
6603 (man1 (string-append data "/man/man1"))
6604 (info (string-append data "/info"))
6605 (examples (string-append doc "/examples"))
6606 (python-arg (string-append "PYTHON=" (which "python"))))
6607 (setenv "LANG" "en_US.utf8")
6608 (with-directory-excursion "docs"
6609 ;; FIXME: pdf fails to build
6610 ;;(system* "make" "pdf" "PAPER=a4")
6611 (system* "make" python-arg "html")
6612 ;; FIXME: the generated texi file contains ^@^@, which trips
6613 ;; up the parser.
6614 ;; (system* "make" python-arg "info")
6615 )
6616 (copy-recursively "docs/man" man1)
6617 (copy-recursively "examples" examples)
6618 (copy-recursively "docs/build/html" html)
6619 ;; (copy-file "docs/build/latex/ipython.pdf"
6620 ;; (string-append doc "/ipython.pdf"))
6621 (mkdir-p info)
6622 ;; (copy-file "docs/build/texinfo/ipython.info"
6623 ;; (string-append info "/ipython.info"))
6624 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6625 #t)))))
6626 (inputs
6627 `(("python-ipython" ,python-ipython)
6628 ("python-ipykernel" ,python-ipykernel)))
6629 (native-inputs
6630 `(("python-sphinx" ,python-sphinx)
6631 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6632 ;; FIXME: It's possible that a smaller union would work just as well.
6633 ("texlive" ,(texlive-union (list texlive-amsfonts
6634 texlive-fonts-ec
6635 texlive-generic-ifxetex
6636 texlive-generic-pdftex
6637 texlive-latex-capt-of
6638 texlive-latex-cmap
6639 texlive-latex-environ
6640 texlive-latex-eqparbox
6641 texlive-latex-etoolbox
6642 texlive-latex-expdlist
6643 texlive-latex-fancyhdr
6644 texlive-latex-fancyvrb
6645 texlive-latex-fncychap
6646 texlive-latex-float
6647 texlive-latex-framed
6648 texlive-latex-geometry
6649 texlive-latex-graphics
6650 texlive-latex-hyperref
6651 texlive-latex-mdwtools
6652 texlive-latex-multirow
6653 texlive-latex-needspace
6654 texlive-latex-oberdiek
6655 texlive-latex-parskip
6656 texlive-latex-preview
6657 texlive-latex-tabulary
6658 texlive-latex-threeparttable
6659 texlive-latex-titlesec
6660 texlive-latex-trimspaces
6661 texlive-latex-ucs
6662 texlive-latex-upquote
6663 texlive-latex-url
6664 texlive-latex-varwidth
6665 texlive-latex-wrapfig)))
6666 ("texinfo" ,texinfo)))))
6667
6668 (define-public python-urwid
6669 (package
6670 (name "python-urwid")
6671 (version "2.1.0")
6672 (source
6673 (origin
6674 (method url-fetch)
6675 (uri (pypi-uri "urwid" version))
6676 (sha256
6677 (base32
6678 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6679 (build-system python-build-system)
6680 (home-page "http://urwid.org")
6681 (synopsis "Console user interface library for Python")
6682 (description
6683 "Urwid is a curses-based UI/widget library for Python. It includes many
6684 features useful for text console applications.")
6685 (license license:lgpl2.1+)))
6686
6687 (define-public python2-urwid
6688 (package-with-python2 python-urwid))
6689
6690 (define-public python-urwidtrees
6691 (package
6692 (name "python-urwidtrees")
6693 (version "1.0.2")
6694 (source
6695 (origin
6696 (method git-fetch)
6697 ;; package author intends on distributing via github rather than pypi:
6698 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6699 (uri (git-reference
6700 (url "https://github.com/pazz/urwidtrees")
6701 (commit version)))
6702 (file-name (git-file-name name version))
6703 (sha256
6704 (base32
6705 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6706 (build-system python-build-system)
6707 (arguments
6708 '(#:use-setuptools? #f
6709 #:tests? #f)) ; no tests
6710 (propagated-inputs `(("python-urwid" ,python-urwid)))
6711 (home-page "https://github.com/pazz/urwidtrees")
6712 (synopsis "Tree widgets for urwid")
6713 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6714 toolkit. Use it to build trees of widgets.")
6715 (license license:gpl3+)))
6716
6717 (define-public python2-urwidtrees
6718 (package-with-python2 python-urwidtrees))
6719
6720 (define-public python-ua-parser
6721 (package
6722 (name "python-ua-parser")
6723 (version "0.8.0")
6724 (source
6725 (origin
6726 (method url-fetch)
6727 (uri (pypi-uri "ua-parser" version))
6728 (sha256
6729 (base32
6730 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6731 (build-system python-build-system)
6732 (arguments
6733 `(#:tests? #f)) ;no test suite in release
6734 (native-inputs
6735 `(("python-pyyaml" ,python-pyyaml)))
6736 (home-page "https://github.com/ua-parser/uap-python")
6737 (synopsis "User agent parser")
6738 (description
6739 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6740 (license license:asl2.0)))
6741
6742 (define-public python2-ua-parser
6743 (package-with-python2 python-ua-parser))
6744
6745 (define-public python-user-agents
6746 (package
6747 (name "python-user-agents")
6748 (version "1.1.0")
6749 (source
6750 (origin
6751 (method url-fetch)
6752 (uri (pypi-uri "user-agents" version))
6753 (sha256
6754 (base32
6755 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6756 (build-system python-build-system)
6757 (arguments
6758 `(#:tests? #f)) ;missing devices.json test file in release
6759 (propagated-inputs
6760 `(("python-ua-parser" ,python-ua-parser)))
6761 (home-page "https://github.com/selwin/python-user-agents")
6762 (synopsis "User Agent strings parsing library")
6763 (description
6764 "A library to identify devices (phones, tablets) and their capabilities by
6765 parsing (browser/HTTP) user agent strings.")
6766 (license license:expat)))
6767
6768 (define-public python2-user-agents
6769 (package-with-python2 python-user-agents))
6770
6771 (define-public python-dbus
6772 (package
6773 (name "python-dbus")
6774 (version "1.2.14")
6775 (source
6776 (origin
6777 (method url-fetch)
6778 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6779 "dbus-python-" version ".tar.gz"))
6780 (sha256
6781 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6782 (build-system gnu-build-system)
6783 (native-inputs
6784 `(("pkg-config" ,pkg-config)))
6785 (inputs
6786 `(("python" ,python-wrapper)
6787 ("dbus-glib" ,dbus-glib)))
6788 (synopsis "Python bindings for D-bus")
6789 (description "python-dbus provides bindings for libdbus, the reference
6790 implementation of D-Bus.")
6791 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6792 (license license:expat)))
6793
6794 (define-public python2-dbus
6795 (package (inherit python-dbus)
6796 (name "python2-dbus")
6797 (inputs `(("python" ,python-2)
6798 ,@(alist-delete "python"
6799 (package-inputs python-dbus)
6800 equal?)))))
6801
6802 (define-public python-notify2
6803 (package
6804 (name "python-notify2")
6805 (version "0.3.1")
6806 (source
6807 (origin
6808 (method url-fetch)
6809 (uri (pypi-uri "notify2" version))
6810 (sha256
6811 (base32
6812 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6813 (build-system python-build-system)
6814 (arguments `(#:tests? #f)) ; tests depend on system state
6815 (native-inputs
6816 `(("python-dbus" ,python-dbus)))
6817 (home-page "https://bitbucket.org/takluyver/pynotify2")
6818 (synopsis "Python interface to D-Bus notifications")
6819 (description
6820 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6821 It is a reimplementation of pynotify in pure Python, and an alternative to
6822 the GObject Introspection bindings to libnotify for non-GTK applications.")
6823 (license (list license:bsd-2
6824 license:lgpl2.1+))))
6825
6826 (define-public python2-notify2
6827 (package-with-python2 python-notify2))
6828
6829 ;; beautifulsoup4 has a totally different namespace than 3.x,
6830 ;; and pypi seems to put it under its own name, so I guess we should too
6831 (define-public python-beautifulsoup4
6832 (package
6833 (name "python-beautifulsoup4")
6834 (version "4.7.1")
6835 (source
6836 (origin
6837 (method url-fetch)
6838 (uri (pypi-uri "beautifulsoup4" version))
6839 (sha256
6840 (base32
6841 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6842 (build-system python-build-system)
6843 (arguments
6844 `(#:phases
6845 (modify-phases %standard-phases
6846 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6847 ;; must use this conversion script when building with Python 3. The
6848 ;; conversion script also runs the tests.
6849 ;; For more information, see the file 'convert-py3k' in the source
6850 ;; distribution.
6851 (replace 'check
6852 (lambda _ (invoke "./convert-py3k"))))))
6853 (propagated-inputs
6854 `(("python-soupsieve" ,python-soupsieve)))
6855 (home-page
6856 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6857 (synopsis
6858 "Python screen-scraping library")
6859 (description
6860 "Beautiful Soup is a Python library designed for rapidly setting up
6861 screen-scraping projects. It offers Pythonic idioms for navigating,
6862 searching, and modifying a parse tree, providing a toolkit for
6863 dissecting a document and extracting what you need. It automatically
6864 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6865 (license license:expat)
6866 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6867
6868 (define-public python2-beautifulsoup4
6869 (package
6870 (inherit (package-with-python2
6871 (strip-python2-variant python-beautifulsoup4)))
6872 (arguments `(#:python ,python-2))))
6873
6874 (define-public python-soupsieve
6875 (package
6876 (name "python-soupsieve")
6877 (version "1.9.5")
6878 (source
6879 (origin
6880 (method url-fetch)
6881 (uri (pypi-uri "soupsieve" version))
6882 (sha256
6883 (base32
6884 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6885 (build-system python-build-system)
6886 (arguments `(#:tests? #f))
6887 ;;XXX: 2 tests fail currently despite claming they were to be
6888 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6889 ;;don't want to create a circular dependency.
6890 (home-page "https://github.com/facelessuser/soupsieve")
6891 (synopsis "CSS selector library")
6892 (description
6893 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6894 Soup 4. It aims to provide selecting, matching, and filtering using modern
6895 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6896 specifications up through the latest CSS level 4 drafts and beyond (though
6897 some are not yet implemented).")
6898 (properties `((python2-variant . ,(delay python2-soupsieve))))
6899 (license license:expat)))
6900
6901 (define-public python2-soupsieve
6902 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6903 (package
6904 (inherit base)
6905 (propagated-inputs
6906 `(("python2-backports-functools-lru-cache"
6907 ,python2-backports-functools-lru-cache)
6908 ,@(package-propagated-inputs base))))))
6909
6910 (define-public python-netifaces
6911 (package
6912 (name "python-netifaces")
6913 (version "0.10.9")
6914 (source
6915 (origin
6916 (method url-fetch)
6917 (uri (pypi-uri "netifaces" version))
6918 (sha256
6919 (base32
6920 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
6921 (build-system python-build-system)
6922 (home-page "https://github.com/al45tair/netifaces")
6923 (synopsis
6924 "Python module for portable network interface information")
6925 (description
6926 "Netifaces is a Python module providing information on network
6927 interfaces in an easy and portable manner.")
6928 (license license:expat)))
6929
6930 (define-public python2-netifaces
6931 (package-with-python2 python-netifaces))
6932
6933 (define-public python-networkx
6934 (package
6935 (name "python-networkx")
6936 (version "2.4")
6937 (source
6938 (origin
6939 (method url-fetch)
6940 (uri (pypi-uri "networkx" version))
6941 (sha256
6942 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6943 (build-system python-build-system)
6944 (arguments
6945 '(#:phases (modify-phases %standard-phases
6946 (replace 'check
6947 (lambda* (#:key tests? #:allow-other-keys)
6948 (if tests?
6949 (invoke "pytest" "-vv" "--pyargs" "networkx")
6950 (format #t "test suite not run~%"))
6951 #t)))))
6952 ;; python-decorator is needed at runtime.
6953 (propagated-inputs
6954 `(("python-decorator" ,python-decorator)))
6955 (native-inputs
6956 `(("python-pytest" ,python-pytest)))
6957 (home-page "https://networkx.github.io/")
6958 (synopsis "Python module for creating and manipulating graphs and networks")
6959 (description
6960 "NetworkX is a Python package for the creation, manipulation, and study
6961 of the structure, dynamics, and functions of complex networks.")
6962 (properties `((python2-variant . ,(delay python2-networkx))))
6963 (license license:bsd-3)))
6964
6965 ;; NetworkX 2.2 is the last version with support for Python 2.
6966 (define-public python2-networkx
6967 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6968 (package
6969 (inherit base)
6970 (version "2.2")
6971 (source (origin
6972 (method url-fetch)
6973 (uri (pypi-uri "networkx" version ".zip"))
6974 (sha256
6975 (base32
6976 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6977 (arguments
6978 `(#:python ,python-2))
6979 (native-inputs
6980 `(("python-nose" ,python2-nose)
6981 ("unzip" ,unzip))))))
6982
6983 (define-public python-datrie
6984 (package
6985 (name "python-datrie")
6986 (version "0.8.2")
6987 (source
6988 (origin
6989 (method url-fetch)
6990 (uri (pypi-uri "datrie" version))
6991 (sha256
6992 (base32
6993 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6994 (build-system python-build-system)
6995 (native-inputs
6996 `(("python-cython" ,python-cython)
6997 ("python-hypothesis" ,python-hypothesis)
6998 ("python-pytest" ,python-pytest)
6999 ("python-pytest-runner" ,python-pytest-runner)))
7000 (home-page "https://github.com/kmike/datrie")
7001 (synopsis "Fast, efficiently stored trie for Python")
7002 (description
7003 "This package provides a fast, efficiently stored trie implementation for
7004 Python.")
7005 (license license:lgpl2.1+)))
7006
7007 (define-public snakemake
7008 (package
7009 (name "snakemake")
7010 (version "5.7.1")
7011 (source
7012 (origin
7013 (method url-fetch)
7014 (uri (pypi-uri "snakemake" version))
7015 (sha256
7016 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7017 (build-system python-build-system)
7018 (arguments
7019 ;; TODO: Package missing test dependencies.
7020 '(#:tests? #f
7021 #:phases
7022 (modify-phases %standard-phases
7023 ;; For cluster execution Snakemake will call Python. Since there is
7024 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7025 ;; this by calling the snakemake wrapper instead.
7026 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7027 (lambda* (#:key outputs #:allow-other-keys)
7028 (substitute* "snakemake/executors.py"
7029 (("\\{sys.executable\\} -m snakemake")
7030 (string-append (assoc-ref outputs "out")
7031 "/bin/snakemake")))
7032 #t)))))
7033 (propagated-inputs
7034 `(("python-appdirs" ,python-appdirs)
7035 ("python-configargparse" ,python-configargparse)
7036 ("python-datrie" ,python-datrie)
7037 ("python-docutils" ,python-docutils)
7038 ("python-gitpython" ,python-gitpython)
7039 ("python-jinja2" ,python-jinja2)
7040 ("python-jsonschema" ,python-jsonschema)
7041 ("python-networkx" ,python-networkx)
7042 ("python-psutil" ,python-psutil)
7043 ("python-pyyaml" ,python-pyyaml)
7044 ("python-ratelimiter" ,python-ratelimiter)
7045 ("python-requests" ,python-requests)
7046 ("python-wrapt" ,python-wrapt)))
7047 (home-page "https://snakemake.readthedocs.io")
7048 (synopsis "Python-based execution environment for make-like workflows")
7049 (description
7050 "Snakemake aims to reduce the complexity of creating workflows by
7051 providing a clean and modern domain specific specification language (DSL) in
7052 Python style, together with a fast and comfortable execution environment.")
7053 (license license:expat)))
7054
7055 (define-public python-pyqrcode
7056 (package
7057 (name "python-pyqrcode")
7058 (version "1.2.1")
7059 (source
7060 (origin
7061 (method url-fetch)
7062 (uri (pypi-uri "PyQRCode" version))
7063 (sha256
7064 (base32
7065 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7066 (build-system python-build-system)
7067 (home-page
7068 "https://github.com/mnooner256/pyqrcode")
7069 (synopsis "QR code generator")
7070 (description
7071 "Pyqrcode is a QR code generator written purely in Python with
7072 SVG, EPS, PNG and terminal output.")
7073 (license license:bsd-3)))
7074
7075 (define-public python-seaborn
7076 (package
7077 (name "python-seaborn")
7078 (version "0.10.0")
7079 (source
7080 (origin
7081 (method url-fetch)
7082 (uri (pypi-uri "seaborn" version))
7083 (sha256
7084 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7085 (build-system python-build-system)
7086 (arguments
7087 `(#:phases
7088 (modify-phases %standard-phases
7089 (add-before 'check 'start-xserver
7090 (lambda* (#:key inputs #:allow-other-keys)
7091 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7092 ;; There must be a running X server and make check doesn't
7093 ;; start one. Therefore we must do it.
7094 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7095 (setenv "DISPLAY" ":1")
7096 #t)))
7097 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7098 (propagated-inputs
7099 `(("python-pandas" ,python-pandas)
7100 ("python-matplotlib" ,python-matplotlib)
7101 ("python-numpy" ,python-numpy)
7102 ("python-scipy" ,python-scipy)))
7103 (native-inputs
7104 `(("python-pytest" ,python-pytest)
7105 ("xorg-server" ,xorg-server-for-tests)))
7106 (home-page "https://seaborn.pydata.org/")
7107 (synopsis "Statistical data visualization")
7108 (description
7109 "Seaborn is a library for making attractive and informative statistical
7110 graphics in Python. It is built on top of matplotlib and tightly integrated
7111 with the PyData stack, including support for numpy and pandas data structures
7112 and statistical routines from scipy and statsmodels.")
7113 (properties `((python2-variant . ,(delay python2-seaborn))))
7114 (license license:bsd-3)))
7115
7116 ;; 0.9.1 is the last release with support for Python 2.
7117 (define-public python2-seaborn
7118 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7119 (package
7120 (inherit base)
7121 (version "0.9.1")
7122 (source (origin
7123 (method url-fetch)
7124 (uri (pypi-uri "seaborn" version))
7125 (sha256
7126 (base32
7127 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7128
7129 (define-public python-mpmath
7130 (package
7131 (name "python-mpmath")
7132 (version "0.19")
7133 (source (origin
7134 (method url-fetch)
7135 (uri (string-append "http://mpmath.org/files/mpmath-"
7136 version ".tar.gz"))
7137 (sha256
7138 (base32
7139 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7140 (build-system python-build-system)
7141 (arguments
7142 '(#:phases
7143 (modify-phases %standard-phases
7144 (replace 'check
7145 (lambda _
7146 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7147 (home-page "http://mpmath.org")
7148 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7149 (description
7150 "@code{mpmath} can be used as an arbitrary-precision substitute for
7151 Python's float/complex types and math/cmath modules, but also does much
7152 more advanced mathematics.")
7153 (license license:bsd-3)))
7154
7155 (define-public python2-mpmath
7156 (package-with-python2 python-mpmath))
7157
7158 (define-public python-bigfloat
7159 (package
7160 (name "python-bigfloat")
7161 (version "0.3.0")
7162 (source
7163 (origin
7164 (method url-fetch)
7165 (uri (pypi-uri "bigfloat" version))
7166 (sha256
7167 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7168 (build-system python-build-system)
7169 (inputs
7170 `(("mpfr" ,mpfr)))
7171 (home-page "https://github.com/mdickinson/bigfloat")
7172 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7173 (description
7174 "This package provides a Python interface to the MPFR library for
7175 multiprecision arithmetic.")
7176 (license license:lgpl3+)))
7177
7178 (define-public python2-bigfloat
7179 (package-with-python2 python-bigfloat))
7180
7181 (define-public python-sympy
7182 (package
7183 (name "python-sympy")
7184 (version "1.1.1")
7185 (source
7186 (origin
7187 (method url-fetch)
7188 (uri (string-append
7189 "https://github.com/sympy/sympy/releases/download/sympy-"
7190 version "/sympy-" version ".tar.gz"))
7191 (sha256
7192 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7193 (build-system python-build-system)
7194 (arguments
7195 `(#:phases
7196 (modify-phases %standard-phases
7197 ;; Run the core tests after installation. By default it would run
7198 ;; *all* tests, which take a very long time to complete and are known
7199 ;; to be flaky.
7200 (delete 'check)
7201 (add-after 'install 'check
7202 (lambda* (#:key outputs #:allow-other-keys)
7203 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7204 #t)))))
7205 (propagated-inputs
7206 `(("python-mpmath" ,python-mpmath)))
7207 (home-page "https://www.sympy.org/")
7208 (synopsis "Python library for symbolic mathematics")
7209 (description
7210 "SymPy is a Python library for symbolic mathematics. It aims to become a
7211 full-featured computer algebra system (CAS) while keeping the code as simple
7212 as possible in order to be comprehensible and easily extensible.")
7213 (license license:bsd-3)))
7214
7215 (define-public python2-sympy
7216 (package
7217 (inherit (package-with-python2 python-sympy))
7218 (arguments
7219 `(#:phases
7220 (modify-phases %standard-phases
7221 ;; Run the core tests after installation. By default it would run
7222 ;; *all* tests, which take a very long time to complete and are known
7223 ;; to be flaky.
7224 (delete 'check)
7225 (add-after 'install 'check
7226 (lambda* (#:key outputs #:allow-other-keys)
7227 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7228 #t)))))))
7229
7230 (define-public python-q
7231 (package
7232 (name "python-q")
7233 (version "2.6")
7234 (source
7235 (origin
7236 (method url-fetch)
7237 (uri (pypi-uri "q" version))
7238 (sha256
7239 (base32
7240 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7241 (build-system python-build-system)
7242 (home-page "https://github.com/zestyping/q")
7243 (synopsis "Quick-and-dirty debugging output for tired programmers")
7244 (description
7245 "q is a Python module for \"print\" style of debugging Python code. It
7246 provides convenient short API for print out of values, tracebacks, and
7247 falling into the Python interpreter.")
7248 (license license:asl2.0)))
7249
7250 (define-public python2-q
7251 (package-with-python2 python-q))
7252
7253 (define-public python2-xlib
7254 (package
7255 (name "python2-xlib")
7256 (version "0.14")
7257 (source (origin
7258 (method url-fetch)
7259 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7260 "/" version "/"
7261 "python-xlib-" version ".tar.gz"))
7262 (sha256
7263 (base32
7264 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7265 (build-system python-build-system)
7266 (arguments
7267 `(#:python ,python-2 ;Python 2 only
7268 #:tests? #f)) ;no tests
7269 (home-page "http://python-xlib.sourceforge.net/")
7270 (synopsis "Python X11 client library")
7271 (description
7272 "The Python X Library is intended to be a fully functional X client
7273 library for Python programs. It is useful to implement low-level X clients.
7274 It is written entirely in Python.")
7275 (license license:gpl2+)))
7276
7277 (define-public python-singledispatch
7278 (package
7279 (name "python-singledispatch")
7280 (version "3.4.0.3")
7281 (source
7282 (origin
7283 (method url-fetch)
7284 (uri (pypi-uri "singledispatch" version))
7285 (sha256
7286 (base32
7287 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7288 (build-system python-build-system)
7289 (native-inputs
7290 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7291 (home-page
7292 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7293 (synopsis "Backport of singledispatch feature from Python 3.4")
7294 (description
7295 "This library brings functools.singledispatch from Python 3.4 to Python
7296 2.6-3.3.")
7297 (license license:expat)))
7298
7299 (define-public python2-singledispatch
7300 (package-with-python2 python-singledispatch))
7301
7302 ;; the python- version can be removed with python-3.5
7303 (define-public python-backports-abc
7304 (package
7305 (name "python-backports-abc")
7306 (version "0.5")
7307 (source
7308 (origin
7309 (method url-fetch)
7310 (uri (pypi-uri "backports_abc" version))
7311 (sha256
7312 (base32
7313 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7314 (build-system python-build-system)
7315 (home-page "https://github.com/cython/backports_abc")
7316 (synopsis "Backport of additions to the 'collections.abc' module")
7317 (description
7318 "Python-backports-abc provides a backport of additions to the
7319 @code{collections.abc} module in Python-3.5.")
7320 (license license:psfl)))
7321
7322 (define-public python2-backports-abc
7323 (package-with-python2 python-backports-abc))
7324
7325 (define-public python-backports-csv
7326 (package
7327 (name "python-backports-csv")
7328 (version "1.0.7")
7329 (source
7330 (origin
7331 (method url-fetch)
7332 (uri (pypi-uri "backports.csv" version))
7333 (sha256
7334 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7335 (build-system python-build-system)
7336 (home-page "https://github.com/ryanhiebert/backports.csv")
7337 (synopsis "Backport of Python 3's csv module for Python 2")
7338 (description
7339 "Provides a backport of Python 3's @code{csv} module for parsing
7340 comma separated values. The API of the @code{csv} module in Python 2
7341 is drastically different from the @code{csv} module in Python 3.
7342 This is due, for the most part, to the difference between str in
7343 Python 2 and Python 3.")
7344 (license license:psfl)))
7345
7346 (define-public python2-backports-csv
7347 (package-with-python2 python-backports-csv))
7348
7349 (define-public python2-backports-shutil-get-terminal-size
7350 (package
7351 (name "python2-backports-shutil-get-terminal-size")
7352 (version "1.0.0")
7353 (source
7354 (origin
7355 (method url-fetch)
7356 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7357 (sha256
7358 (base32
7359 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7360 (build-system python-build-system)
7361 (arguments
7362 `(#:python ,python-2
7363 #:phases
7364 (modify-phases %standard-phases
7365 (replace 'check
7366 (lambda _
7367 (setenv "PYTHONPATH" (string-append "./build/lib:"
7368 (getenv "PYTHONPATH")))
7369 (invoke "py.test" "-v"))))))
7370 (native-inputs
7371 `(("python2-pytest" ,python2-pytest)))
7372 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7373 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7374 (description
7375 "This package provides a backport of the @code{get_terminal_size
7376 function} from Python 3.3's @code{shutil}.
7377 Unlike the original version it is written in pure Python rather than C,
7378 so it might be a tiny bit slower.")
7379 (license license:expat)))
7380
7381 (define-public python-waf
7382 (package
7383 (name "python-waf")
7384 (version "2.0.19")
7385 (source (origin
7386 (method url-fetch)
7387 (uri (string-append "https://waf.io/"
7388 "waf-" version ".tar.bz2"))
7389 (sha256
7390 (base32
7391 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7392 (build-system python-build-system)
7393 (arguments
7394 '(#:phases
7395 (modify-phases %standard-phases
7396 (replace 'build
7397 (lambda _
7398 ;; XXX: Find a way to add all extra tools.
7399 (let ((tools '("gccdeps"
7400 "clang_compilation_database")))
7401 (invoke "python" "waf-light" "configure" "build"
7402 (string-append "--tools="
7403 (string-join tools ","))))))
7404 (replace 'check
7405 (lambda _
7406 (invoke "python" "waf" "--version")))
7407 (replace 'install
7408 (lambda* (#:key outputs #:allow-other-keys)
7409 (let ((out (assoc-ref outputs "out")))
7410 (install-file "waf" (string-append out "/bin")))
7411 #t))
7412 ;; waf breaks when it is wrapped.
7413 (delete 'wrap))))
7414 (home-page "https://waf.io/")
7415 (synopsis "Python-based build system")
7416 (description
7417 "Waf is a Python-based framework for configuring, compiling and installing
7418 applications.")
7419 (license license:bsd-3)))
7420
7421 (define-public python2-waf
7422 (package-with-python2 python-waf))
7423
7424 (define-public python-pyzmq
7425 (package
7426 (name "python-pyzmq")
7427 (version "17.1.2")
7428 (source
7429 (origin
7430 (method url-fetch)
7431 (uri (pypi-uri "pyzmq" version))
7432 (sha256
7433 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7434 (build-system python-build-system)
7435 (arguments
7436 `(#:configure-flags
7437 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7438 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7439 ;; --inplace' for 'python setup.py test' to work.
7440 #:tests? #f))
7441 (inputs
7442 `(("zeromq" ,zeromq)))
7443 (native-inputs
7444 `(("pkg-config" ,pkg-config)
7445 ("python-nose" ,python-nose)))
7446 (home-page "https://github.com/zeromq/pyzmq")
7447 (synopsis "Python bindings for 0MQ")
7448 (description
7449 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7450 (license license:bsd-4)))
7451
7452 (define-public python2-pyzmq
7453 (package-with-python2 python-pyzmq))
7454
7455 (define-public python-pep8
7456 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7457 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7458 ;; some dependents' test suites, and nothing more.
7459 (package
7460 (name "python-pep8")
7461 (version "1.7.0")
7462 (source
7463 (origin
7464 (method url-fetch)
7465 (uri (pypi-uri "pep8" version))
7466 (sha256
7467 (base32
7468 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7469 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7470 (build-system python-build-system)
7471 (home-page "https://pep8.readthedocs.org/")
7472 (synopsis "Python style guide checker")
7473 (description
7474 "This tools checks Python code against some of the style conventions in
7475 PEP 8.")
7476 (license license:expat)))
7477
7478 (define-public python2-pep8
7479 (package-with-python2 python-pep8))
7480
7481 (define-public python-pyflakes
7482 (package
7483 (name "python-pyflakes")
7484 (version "2.1.1")
7485 (source
7486 (origin
7487 (method url-fetch)
7488 (uri (pypi-uri "pyflakes" version))
7489 (sha256
7490 (base32
7491 "18pq95a1xj2dgdd0m85gyfsn40jajj4xc3lp8wfv7igqhrc86xnr"))))
7492 (build-system python-build-system)
7493 (home-page
7494 "https://github.com/pyflakes/pyflakes")
7495 (synopsis "Passive checker of Python programs")
7496 (description
7497 "Pyflakes statically checks Python source code for common errors.")
7498 (license license:expat)))
7499
7500 (define-public python2-pyflakes
7501 (package-with-python2 python-pyflakes))
7502
7503 ;; Flake8 2.6 requires an older version of pyflakes.
7504 ;; This should be removed ASAP.
7505 (define-public python-pyflakes-1.2
7506 (package (inherit python-pyflakes)
7507 (version "1.2.3")
7508 (source
7509 (origin
7510 (method url-fetch)
7511 (uri (pypi-uri "pyflakes" version))
7512 (sha256
7513 (base32
7514 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7515 (arguments
7516 '(#:phases
7517 (modify-phases %standard-phases
7518 ;; This one test fails.
7519 (replace 'check
7520 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7521 (native-inputs
7522 `(("python-pytest" ,python-pytest)))))
7523
7524 (define-public python-mccabe
7525 (package
7526 (name "python-mccabe")
7527 (version "0.6.1")
7528 (source
7529 (origin
7530 (method url-fetch)
7531 (uri (pypi-uri "mccabe" version))
7532 (sha256
7533 (base32
7534 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7535 (build-system python-build-system)
7536 (native-inputs
7537 `(("python-pytest" ,python-pytest-bootstrap)
7538 ("python-pytest-runner" ,python-pytest-runner)))
7539 (home-page "https://github.com/flintwork/mccabe")
7540 (synopsis "McCabe checker, plugin for flake8")
7541 (description
7542 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7543 complexity of Python source code.")
7544 (license license:expat)))
7545
7546 (define-public python2-mccabe
7547 (package-with-python2 python-mccabe))
7548
7549 (define-public python-mccabe-0.2.1
7550 (package (inherit python-mccabe)
7551 (version "0.2.1")
7552 (source
7553 (origin
7554 (method url-fetch)
7555 (uri (pypi-uri "mccabe" version))
7556 (sha256
7557 (base32
7558 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7559
7560 (define-public python2-mccabe-0.2.1
7561 (package-with-python2 python-mccabe-0.2.1))
7562
7563 ;; Flake8 2.4.1 requires an older version of pep8.
7564 ;; This should be removed ASAP.
7565 (define-public python-pep8-1.5.7
7566 (package (inherit python-pep8)
7567 (version "1.5.7")
7568 (source
7569 (origin
7570 (method url-fetch)
7571 (uri (pypi-uri "pep8" version))
7572 (sha256
7573 (base32
7574 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7575 (arguments
7576 ;; XXX Tests not compatible with Python 3.5.
7577 '(#:tests? #f))))
7578
7579 (define-public python2-pep8-1.5.7
7580 (package-with-python2 python-pep8-1.5.7))
7581
7582 (define-public python-flake8
7583 (package
7584 (name "python-flake8")
7585 (version "3.7.9")
7586 (source (origin
7587 (method url-fetch)
7588 (uri (pypi-uri "flake8" version))
7589 (sha256
7590 (base32
7591 "1yscj6avirm6m12bjh4fn2lfgxaamqsjh9pirdqfi0fcgq8ils25"))))
7592 (build-system python-build-system)
7593 (arguments
7594 `(#:phases
7595 (modify-phases %standard-phases
7596 (delete 'check)
7597 (add-after 'install 'check
7598 (lambda* (#:key inputs outputs #:allow-other-keys)
7599 (add-installed-pythonpath inputs outputs)
7600 (invoke "pytest" "-v")
7601 #t)))))
7602 (propagated-inputs
7603 `(("python-pycodestyle" ,python-pycodestyle)
7604 ("python-entrypoints" ,python-entrypoints)
7605 ("python-pyflakes" ,python-pyflakes)
7606 ("python-mccabe" ,python-mccabe)))
7607 (native-inputs
7608 `(("python-mock" ,python-mock)
7609 ("python-pytest" ,python-pytest-bootstrap)))
7610 (home-page "https://gitlab.com/pycqa/flake8")
7611 (synopsis
7612 "The modular source code checker: pep8, pyflakes and co")
7613 (description
7614 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7615 (properties `((python2-variant . ,(delay python2-flake8))))
7616 (license license:expat)))
7617
7618 (define-public python2-flake8
7619 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7620 (package (inherit base)
7621 (propagated-inputs
7622 `(("python2-configparser" ,python2-configparser)
7623 ("python2-enum34" ,python2-enum34)
7624 ("python2-functools32" ,python2-functools32)
7625 ("python2-typing" ,python2-typing)
7626 ,@(package-propagated-inputs base))))))
7627
7628 ;; python-hacking requires flake8 <2.7.0.
7629 (define-public python-flake8-2.6
7630 (package
7631 (inherit python-flake8)
7632 (version "2.6.2")
7633 (source (origin
7634 (method url-fetch)
7635 (uri (pypi-uri "flake8" version))
7636 (sha256
7637 (base32
7638 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7639 (arguments
7640 `(#:phases
7641 (modify-phases %standard-phases
7642 (add-after 'unpack 'use-later-pycodestyles
7643 (lambda __
7644 (substitute* '("flake8.egg-info/requires.txt"
7645 "setup.py")
7646 (("pycodestyle >= 2.0, < 2.1")
7647 "pycodestyle >= 2.0"))
7648 #t))
7649 (delete 'check)
7650 (add-after 'install 'check
7651 (lambda* (#:key inputs outputs #:allow-other-keys)
7652 (add-installed-pythonpath inputs outputs)
7653 (invoke "pytest" "-v")
7654 #t)))))
7655 (propagated-inputs
7656 `(("python-pep8" ,python-pep8)
7657 ("python-pycodestyle" ,python-pycodestyle)
7658 ("python-entrypoints" ,python-entrypoints)
7659 ("python-pyflakes" ,python-pyflakes-1.2)
7660 ("python-mccabe" ,python-mccabe)))))
7661
7662 (define-public python-flake8-polyfill
7663 (package
7664 (name "python-flake8-polyfill")
7665 (version "1.0.2")
7666 (source
7667 (origin
7668 (method url-fetch)
7669 (uri (pypi-uri "flake8-polyfill" version))
7670 (sha256
7671 (base32
7672 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7673 (build-system python-build-system)
7674 (arguments
7675 '(#:phases
7676 (modify-phases %standard-phases
7677 (replace 'check
7678 (lambda _
7679 ;; Be compatible with Pytest 4:
7680 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7681 (substitute* "setup.cfg"
7682 (("\\[pytest\\]")
7683 "[tool:pytest]"))
7684
7685 (setenv "PYTHONPATH"
7686 (string-append (getcwd) "/build/lib:"
7687 (getenv "PYTHONPATH")))
7688 (invoke "py.test" "-v"))))))
7689 (native-inputs
7690 `(("python-flake8" ,python-flake8)
7691 ("python-mock" ,python-mock)
7692 ("python-pep8" ,python-pep8)
7693 ("python-pycodestyle" ,python-pycodestyle)
7694 ("python-pytest" ,python-pytest)))
7695 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7696 (synopsis "Polyfill package for Flake8 plugins")
7697 (description
7698 "This package that provides some compatibility helpers for Flake8
7699 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7700 (license license:expat)))
7701
7702 (define-public python2-flake8-polyfill
7703 (package-with-python2 python-flake8-polyfill))
7704
7705 (define-public python-mistune
7706 (package
7707 (name "python-mistune")
7708 (version "0.8.4")
7709 (source
7710 (origin
7711 (method url-fetch)
7712 (uri (pypi-uri "mistune" version))
7713 (sha256
7714 (base32
7715 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7716 (build-system python-build-system)
7717 (native-inputs
7718 `(("python-nose" ,python-nose)
7719 ("python-cython" ,python-cython)))
7720 (home-page "https://github.com/lepture/mistune")
7721 (synopsis "Markdown parser in pure Python")
7722 (description "This package provides a fast markdown parser in pure
7723 Python.")
7724 (license license:bsd-3)))
7725
7726 (define-public python2-mistune
7727 (package-with-python2 python-mistune))
7728
7729 (define-public python-markdown
7730 (package
7731 (name "python-markdown")
7732 (version "3.2.1")
7733 (source
7734 (origin
7735 (method url-fetch)
7736 (uri (pypi-uri "Markdown" version))
7737 (sha256
7738 (base32
7739 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7740 (build-system python-build-system)
7741 (native-inputs
7742 `(("python-nose" ,python-nose)
7743 ("python-pyyaml" ,python-pyyaml)))
7744 (home-page "https://python-markdown.github.io/")
7745 (synopsis "Python implementation of Markdown")
7746 (description
7747 "This package provides a Python implementation of John Gruber's
7748 Markdown. The library features international input, various Markdown
7749 extensions, and several HTML output formats. A command line wrapper
7750 markdown_py is also provided to convert Markdown files to HTML.")
7751 (properties `((python2-variant . ,(delay python2-markdown))))
7752 (license license:bsd-3)))
7753
7754 ;; Markdown 3.2 dropped support for Python 2.
7755 (define-public python2-markdown
7756 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7757 (package/inherit
7758 base
7759 (version "3.1.1")
7760 (source (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "Markdown" version))
7763 (sha256
7764 (base32
7765 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7766
7767 (define-public python-ptyprocess
7768 (package
7769 (name "python-ptyprocess")
7770 (version "0.5.2")
7771 (source
7772 (origin
7773 (method url-fetch)
7774 (uri (pypi-uri "ptyprocess" version))
7775 (sha256
7776 (base32
7777 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7778 (build-system python-build-system)
7779 (native-inputs
7780 `(("python-nose" ,python-nose)))
7781 (arguments
7782 `(#:phases
7783 (modify-phases %standard-phases
7784 (replace 'check
7785 (lambda _ (invoke "nosetests"))))))
7786 (home-page "https://github.com/pexpect/ptyprocess")
7787 (synopsis "Run a subprocess in a pseudo terminal")
7788 (description
7789 "This package provides a Python library used to launch a subprocess in a
7790 pseudo terminal (pty), and interact with both the process and its pty.")
7791 (license license:isc)))
7792
7793 (define-public python2-ptyprocess
7794 (package-with-python2 python-ptyprocess))
7795
7796 (define-public python-cram
7797 (package
7798 (name "python-cram")
7799 (version "0.7")
7800 (home-page "https://bitheap.org/cram/")
7801 (source (origin
7802 (method url-fetch)
7803 (uri (list (string-append home-page "cram-"
7804 version ".tar.gz")
7805 (pypi-uri "cram" version)))
7806 (sha256
7807 (base32
7808 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7809 (arguments
7810 '(#:phases
7811 (modify-phases %standard-phases
7812 (add-after 'unpack 'patch-source
7813 (lambda _
7814 (substitute* (find-files "cram" ".*\\.py$")
7815 ;; Replace default shell path.
7816 (("/bin/sh") (which "sh")))
7817 (substitute* (find-files "tests" ".*\\.t$")
7818 (("md5") "md5sum")
7819 (("/bin/bash") (which "bash"))
7820 (("/bin/sh") (which "sh")))
7821 (substitute* "cram/_test.py"
7822 ;; This hack works around a bug triggered by substituting
7823 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7824 ;; "cram -h", which breaks the output at 80 characters. This
7825 ;; causes the line showing the default shell to break into two
7826 ;; lines, but the test expects a single line...
7827 (("env\\['COLUMNS'\\] = '80'")
7828 "env['COLUMNS'] = '160'"))
7829
7830 (substitute* "Makefile"
7831 ;; Recent versions of python-coverage have caused the test
7832 ;; coverage to decrease (as of version 0.7). Allow that.
7833 (("--fail-under=100")
7834 "--fail-under=90"))
7835
7836 #t))
7837 (replace 'check
7838 ;; The test phase uses the built library and executable.
7839 (lambda* (#:key inputs outputs #:allow-other-keys)
7840 (add-installed-pythonpath inputs outputs)
7841 (setenv "PATH" (string-append (getenv "PATH") ":"
7842 (assoc-ref outputs "out") "/bin"))
7843 (invoke "make" "test"))))))
7844 (build-system python-build-system)
7845 (native-inputs
7846 `(("python-coverage" ,python-coverage)
7847 ("which" ,which)))
7848 (synopsis "Simple testing framework for command line applications")
7849 (description
7850 "Cram is a functional testing framework for command line applications.
7851 Cram tests look like snippets of interactive shell sessions. Cram runs each
7852 command and compares the command output in the test with the command’s actual
7853 output.")
7854 (license license:gpl2+)))
7855
7856 (define-public python2-cram
7857 (package-with-python2 python-cram))
7858
7859 (define-public python-straight-plugin
7860 (package
7861 (name "python-straight-plugin")
7862 (version "1.4.1")
7863 (source
7864 (origin
7865 (method url-fetch)
7866 (uri (pypi-uri "straight.plugin" version))
7867 (sha256
7868 (base32
7869 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7870 (build-system python-build-system)
7871 (home-page "https://github.com/ironfroggy/straight.plugin")
7872 (synopsis "Simple namespaced plugin facility")
7873 (description "Straight Plugin provides a type of plugin you can create from
7874 almost any existing Python modules, and an easy way for outside developers to
7875 add functionality and customization to your projects with their own plugins.")
7876 (license license:expat)))
7877
7878 (define-public python2-straight-plugin
7879 (package-with-python2 python-straight-plugin))
7880
7881 (define-public python-fonttools
7882 (package
7883 (name "python-fonttools")
7884 (version "4.6.0")
7885 (source (origin
7886 (method url-fetch)
7887 (uri (pypi-uri "fonttools" version ".zip"))
7888 (sha256
7889 (base32
7890 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
7891 (build-system python-build-system)
7892 (native-inputs
7893 `(("unzip" ,unzip)
7894 ("python-pytest" ,python-pytest)
7895 ("python-pytest-runner" ,python-pytest-runner)))
7896 (home-page "https://github.com/fonttools/fonttools")
7897 (synopsis "Tools to manipulate font files")
7898 (description
7899 "FontTools/TTX is a library to manipulate font files from Python. It
7900 supports reading and writing of TrueType/OpenType fonts, reading and writing
7901 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7902 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7903 from an XML-based format.")
7904 (license license:expat)))
7905
7906 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
7907 (define-public python2-fonttools
7908 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
7909 (package/inherit
7910 base
7911 (version "3.44.0")
7912 (source (origin
7913 (method url-fetch)
7914 (uri (pypi-uri "fonttools" version ".zip"))
7915 (sha256
7916 (base32
7917 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
7918
7919 (define-public python-ly
7920 (package
7921 (name "python-ly")
7922 (version "0.9.5")
7923 (source
7924 (origin
7925 (method url-fetch)
7926 (uri (pypi-uri name version))
7927 (sha256
7928 (base32
7929 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7930 (build-system python-build-system)
7931 (arguments
7932 ;; FIXME: Some tests need network access.
7933 '(#:tests? #f))
7934 (synopsis "Tool and library for manipulating LilyPond files")
7935 (description "This package provides a Python library to parse, manipulate
7936 or create documents in LilyPond format. A command line program ly is also
7937 provided that can be used to do various manipulations with LilyPond files.")
7938 (home-page "https://pypi.org/project/python-ly/")
7939 (license license:gpl2+)))
7940
7941 (define-public python-appdirs
7942 (package
7943 (name "python-appdirs")
7944 (version "1.4.3")
7945 (source
7946 (origin
7947 (method url-fetch)
7948 (uri (pypi-uri "appdirs" version))
7949 (sha256
7950 (base32
7951 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7952 (build-system python-build-system)
7953 (home-page "https://github.com/ActiveState/appdirs")
7954 (synopsis
7955 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7956 (description
7957 "This module provides a portable way of finding out where user data
7958 should be stored on various operating systems.")
7959 (license license:expat)))
7960
7961 (define-public python2-appdirs
7962 (package-with-python2 python-appdirs))
7963
7964 (define-public python-llfuse
7965 (package
7966 (name "python-llfuse")
7967 (version "1.3.6")
7968 (source (origin
7969 (method url-fetch)
7970 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7971 (sha256
7972 (base32
7973 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
7974 (build-system python-build-system)
7975 (inputs
7976 `(("fuse" ,fuse)
7977 ("attr" ,attr)))
7978 (native-inputs
7979 `(("pkg-config" ,pkg-config)))
7980 (synopsis "Python bindings for FUSE")
7981 (description
7982 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7983 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7984 (license license:lgpl2.0+)
7985 (properties `((python2-variant . ,(delay python2-llfuse))))))
7986
7987 (define-public python2-llfuse
7988 (package (inherit (package-with-python2
7989 (strip-python2-variant python-llfuse)))
7990 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7991
7992 ;; For attic-0.16
7993 (define-public python-llfuse-0.41
7994 (package (inherit python-llfuse)
7995 (version "0.41.1")
7996 (source (origin
7997 (method url-fetch)
7998 (uri (string-append
7999 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8000 "llfuse-" version ".tar.bz2"))
8001 (sha256
8002 (base32
8003 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8004 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8005 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8006 (license (list license:expat license:lgpl2.0+))))
8007
8008 (define-public python-msgpack
8009 (package
8010 (name "python-msgpack")
8011 (version "1.0.0")
8012 (source (origin
8013 (method url-fetch)
8014 (uri (pypi-uri "msgpack" version))
8015 (sha256
8016 (base32
8017 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8018 (build-system python-build-system)
8019 (arguments
8020 `(#:modules ((guix build utils)
8021 (guix build python-build-system)
8022 (ice-9 ftw)
8023 (srfi srfi-1)
8024 (srfi srfi-26))
8025 #:phases
8026 (modify-phases %standard-phases
8027 (replace 'check
8028 (lambda _
8029 (let ((cwd (getcwd)))
8030 (setenv "PYTHONPATH"
8031 (string-append cwd "/build/"
8032 (find (cut string-prefix? "lib" <>)
8033 (scandir (string-append cwd "/build")))
8034 ":"
8035 (getenv "PYTHONPATH")))
8036 (invoke "pytest" "-v" "test")))))))
8037 (native-inputs
8038 `(("python-pytest" ,python-pytest)))
8039 (synopsis "MessagePack (de)serializer")
8040 (description "MessagePack is a fast, compact binary serialization format,
8041 suitable for similar data to JSON. This package provides CPython bindings for
8042 reading and writing MessagePack data.")
8043 (home-page "https://pypi.org/project/msgpack/")
8044 (license license:asl2.0)))
8045
8046 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8047 ;; release 0.5. Some packages like borg still call it by the old name for now.
8048 ;; <https://bugs.gnu.org/30662>
8049 (define-public python-msgpack-transitional
8050 (package
8051 (inherit python-msgpack)
8052 (name "python-msgpack-transitional")
8053 (version "0.5.6")
8054 (source (origin
8055 (method url-fetch)
8056 (uri (pypi-uri "msgpack" version))
8057 (sha256
8058 (base32
8059 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8060 (arguments
8061 (substitute-keyword-arguments (package-arguments python-msgpack)
8062 ((#:phases phases)
8063 `(modify-phases ,phases
8064 (add-after 'unpack 'configure-transitional
8065 (lambda _
8066 ;; Keep using the old name.
8067 (substitute* "setup.py"
8068 (("TRANSITIONAL = False")
8069 "TRANSITIONAL = 1"))
8070 #t))))))))
8071
8072 (define-public python2-msgpack
8073 (package-with-python2 python-msgpack))
8074
8075 (define-public python-netaddr
8076 (package
8077 (name "python-netaddr")
8078 (version "0.7.19")
8079 (source
8080 (origin
8081 (method url-fetch)
8082 (uri (pypi-uri "netaddr" version))
8083 (sha256
8084 (base32
8085 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8086 (build-system python-build-system)
8087 (arguments `(#:tests? #f)) ;; No tests.
8088 (home-page "https://github.com/drkjam/netaddr/")
8089 (synopsis "Pythonic manipulation of network addresses")
8090 (description
8091 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8092 and MAC network addresses.")
8093 (license license:bsd-3)))
8094
8095 (define-public python2-netaddr
8096 (package-with-python2 python-netaddr))
8097
8098 (define-public python2-pyroute2
8099 (package
8100 (name "python2-pyroute2")
8101 (version "0.5.6")
8102 (source
8103 (origin
8104 (method url-fetch)
8105 (uri (pypi-uri "pyroute2" version))
8106 (sha256
8107 (base32
8108 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8109 (build-system python-build-system)
8110 (arguments
8111 `(#:python ,python-2)) ;Python 3.x is not supported
8112 (home-page "https://github.com/svinota/pyroute2")
8113 (synopsis "Python netlink library")
8114 (description
8115 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8116 Supported netlink families and protocols include:
8117 @itemize
8118 @item rtnl, network settings - addresses, routes, traffic controls
8119 @item nfnetlink - netfilter API: ipset, nftables, ...
8120 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8121 @item devlink - manage and monitor devlink-enabled hardware
8122 @item generic - generic netlink families
8123 @itemize
8124 @item nl80211 - wireless functions API (basic support)
8125 @item taskstats - extended process statistics
8126 @item acpi_events - ACPI events monitoring
8127 @item thermal_events - thermal events monitoring
8128 @item VFS_DQUOT - disk quota events monitoring
8129 @end itemize
8130 @end itemize")
8131 (license license:gpl2+)))
8132
8133 (define-public python-wrapt
8134 (package
8135 (name "python-wrapt")
8136 (version "1.11.2")
8137 (source
8138 (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "wrapt" version))
8141 (sha256
8142 (base32
8143 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8144 (build-system python-build-system)
8145 (arguments
8146 ;; Tests are not included in the tarball, they are only available in the
8147 ;; git repository.
8148 `(#:tests? #f))
8149 (home-page "https://github.com/GrahamDumpleton/wrapt")
8150 (synopsis "Module for decorators, wrappers and monkey patching")
8151 (description
8152 "The aim of the wrapt module is to provide a transparent object proxy for
8153 Python, which can be used as the basis for the construction of function
8154 wrappers and decorator functions.")
8155 (license license:bsd-2)))
8156
8157 (define-public python2-wrapt
8158 (package-with-python2 python-wrapt))
8159
8160 (define-public python-xlrd
8161 (package
8162 (name "python-xlrd")
8163 (version "1.2.0")
8164 (source (origin
8165 (method url-fetch)
8166 (uri (pypi-uri "xlrd" version))
8167 (sha256
8168 (base32
8169 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8170 (build-system python-build-system)
8171 (arguments
8172 `(#:phases
8173 (modify-phases %standard-phases
8174 ;; Some tests depend on writing a temporary file to the user's home
8175 ;; directory.
8176 (add-after 'unpack 'fix-tests
8177 (lambda _
8178 (delete-file "tests/test_open_workbook.py")
8179 #t)))))
8180 (home-page "http://www.python-excel.org/")
8181 (synopsis "Library for extracting data from Excel files")
8182 (description "This package provides a library to extract data from
8183 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8184 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8185 Unicode-aware. It is not intended as an end-user tool.")
8186 (license license:bsd-3)))
8187
8188 (define-public python2-xlrd
8189 (package-with-python2 python-xlrd))
8190
8191 (define-public python-prettytable
8192 (package
8193 (name "python-prettytable")
8194 (version "0.7.2")
8195 (source
8196 (origin
8197 (method url-fetch)
8198 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8199 (sha256
8200 (base32
8201 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8202 (build-system python-build-system)
8203 (home-page "https://code.google.com/archive/p/prettytable/")
8204 (synopsis "Display tabular data in an ASCII table format")
8205 (description
8206 "A library designed to represent tabular data in visually appealing ASCII
8207 tables. PrettyTable allows for selection of which columns are to be printed,
8208 independent alignment of columns (left or right justified or centred) and
8209 printing of sub-tables by specifying a row range.")
8210 (license license:bsd-3)))
8211
8212 (define-public python2-prettytable
8213 (package-with-python2 python-prettytable))
8214
8215 (define-public python-tables
8216 (package
8217 (name "python-tables")
8218 (version "3.6.1")
8219 (source
8220 (origin
8221 (method url-fetch)
8222 (uri (pypi-uri "tables" version))
8223 (sha256
8224 (base32
8225 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8226 (modules '((guix build utils)))
8227 (snippet
8228 '(begin
8229 ;; Remove pre-compiled .pyc files from source.
8230 (for-each delete-file-recursively
8231 (find-files "." "__pycache__" #:directories? #t))
8232 (for-each delete-file (find-files "." "\\.pyc$"))
8233 #t))))
8234 (build-system python-build-system)
8235 (arguments
8236 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8237 ;; or "check", so we must override the build and check phases.
8238 #:phases
8239 (modify-phases %standard-phases
8240 (add-after 'unpack 'use-gcc
8241 (lambda _
8242 (substitute* "setup.py"
8243 (("^( +)compiler = new_compiler\\(\\)" line indent)
8244 (string-append line
8245 "\n"
8246 indent
8247 "compiler.set_executables(compiler='gcc',"
8248 "compiler_so='gcc',"
8249 "linker_exe='gcc',"
8250 "linker_so='gcc -shared')")))
8251 #t))
8252 (add-after 'unpack 'disable-tuning
8253 (lambda _
8254 (substitute* "setup.py"
8255 (("cpu_flags = .*")
8256 "cpu_flags = ['sse2']\n"))
8257 #t))
8258 (replace 'build
8259 (lambda* (#:key inputs #:allow-other-keys)
8260 (invoke "python" "setup.py" "build"
8261 (string-append "--hdf5="
8262 (assoc-ref inputs "hdf5")))))
8263 (replace 'check
8264 (lambda* (#:key inputs #:allow-other-keys)
8265 (invoke "python" "setup.py" "check"
8266 (string-append "--hdf5="
8267 (assoc-ref inputs "hdf5"))))))))
8268 (propagated-inputs
8269 `(("python-numexpr" ,python-numexpr)
8270 ("python-numpy" ,python-numpy)))
8271 (native-inputs
8272 `(("python-cython" ,python-cython)
8273 ("pkg-config" ,pkg-config)))
8274 (inputs
8275 `(("hdf5" ,hdf5-1.10)
8276 ("bzip2" ,bzip2)
8277 ("zlib" ,zlib)))
8278 (home-page "https://www.pytables.org/")
8279 (synopsis "Hierarchical datasets for Python")
8280 (description "PyTables is a package for managing hierarchical datasets and
8281 designed to efficiently cope with extremely large amounts of data.")
8282 (license license:bsd-3)))
8283
8284 (define-public python2-tables
8285 (package-with-python2 python-tables))
8286
8287 (define-public python-pytest-black
8288 (package
8289 (name "python-pytest-black")
8290 (version "0.3.8")
8291 (source
8292 (origin
8293 (method url-fetch)
8294 (uri (pypi-uri "pytest-black" version))
8295 (sha256
8296 (base32
8297 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8298 (build-system python-build-system)
8299 (propagated-inputs
8300 `(("python-pytest" ,python-pytest)
8301 ("python-black" ,python-black)
8302 ("python-toml" ,python-toml)))
8303 (native-inputs
8304 `(("python-setuptools-scm" ,python-setuptools-scm)))
8305 (home-page "https://github.com/shopkeep/pytest-black")
8306 (synopsis "Pytest plugin to enable format checking with black")
8307 (description
8308 "This package provides a pytest plugin to enable format checking with the
8309 Python code formatter \"black\".")
8310 (license license:expat)))
8311
8312 (define-public python-get-version
8313 (package
8314 (name "python-get-version")
8315 (version "2.1")
8316 (source
8317 (origin
8318 (method url-fetch)
8319 (uri (pypi-uri "get_version" version))
8320 (sha256
8321 (base32
8322 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8323 (build-system python-build-system)
8324 (propagated-inputs
8325 `(("python-pygments" ,python-pygments)
8326 ("python-pytest" ,python-pytest)
8327 ("python-pytest-black" ,python-pytest-black)
8328 ("python-pytest-cov" ,python-pytest-cov)
8329 ("python-setuptools" ,python-setuptools)
8330 ("python-testpath" ,python-testpath)))
8331 (home-page "https://github.com/flying-sheep/get_version")
8332 (synopsis "Version helper in the spirit of versioneer")
8333 (description
8334 "This package provides a version helper that lets you automatically use
8335 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8336 also supports getting the version from Python source distributions or, once
8337 your package is installed, via @code{pkg_resources} (part of
8338 @code{setuptools}).")
8339 (license license:gpl3+)))
8340
8341 (define-public python-legacy-api-wrap
8342 (package
8343 (name "python-legacy-api-wrap")
8344 (version "1.2")
8345 (source
8346 (origin
8347 (method url-fetch)
8348 (uri (pypi-uri "legacy-api-wrap" version))
8349 (sha256
8350 (base32
8351 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8352 (build-system python-build-system)
8353 (propagated-inputs
8354 `(("python-get-version" ,python-get-version)
8355 ("python-pytest" ,python-pytest)
8356 ("python-pytest-black" ,python-pytest-black)
8357 ("python-pytest-cov" ,python-pytest-cov)
8358 ("python-setuptools" ,python-setuptools)))
8359 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8360 (synopsis "Legacy API wrapper")
8361 (description "This module defines a decorator to wrap legacy APIs. The
8362 primary use case is APIs defined before keyword-only parameters existed.")
8363 (license license:gpl3+)))
8364
8365 (define-public python-pyasn1
8366 (package
8367 (name "python-pyasn1")
8368 (version "0.4.8")
8369 (source
8370 (origin
8371 (method url-fetch)
8372 (uri (pypi-uri "pyasn1" version))
8373 (sha256
8374 (base32
8375 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8376 (build-system python-build-system)
8377 (home-page "http://pyasn1.sourceforge.net/")
8378 (synopsis "ASN.1 types and codecs")
8379 (description
8380 "This is an implementation of ASN.1 types and codecs in Python. It is
8381 suitable for a wide range of protocols based on the ASN.1 specification.")
8382 (license license:bsd-2)))
8383
8384 (define-public python2-pyasn1
8385 (package-with-python2 python-pyasn1))
8386
8387 (define-public python-pyasn1-modules
8388 (package
8389 (name "python-pyasn1-modules")
8390 (version "0.2.2")
8391 (source
8392 (origin
8393 (method url-fetch)
8394 (uri (pypi-uri "pyasn1-modules" version))
8395 (sha256
8396 (base32
8397 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8398 (build-system python-build-system)
8399 (propagated-inputs
8400 `(("python-pyasn1" ,python-pyasn1)))
8401 (home-page "https://sourceforge.net/projects/pyasn1/")
8402 (synopsis "ASN.1 codec implementations")
8403 (description
8404 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8405 implementations of ASN.1-based codecs and protocols.")
8406 (license license:bsd-3)))
8407
8408 (define-public python2-pyasn1-modules
8409 (package-with-python2 python-pyasn1-modules))
8410
8411 (define-public python-ipaddress
8412 (package
8413 (name "python-ipaddress")
8414 (version "1.0.22")
8415 (source (origin
8416 (method url-fetch)
8417 (uri (pypi-uri "ipaddress" version))
8418 (sha256
8419 (base32
8420 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8421 (build-system python-build-system)
8422 (home-page "https://github.com/phihag/ipaddress")
8423 (synopsis "IP address manipulation library")
8424 (description
8425 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8426 in Python. This library is used to create, poke at, and manipulate IPv4 and
8427 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8428 module to older versions of Python.")
8429 (license license:psfl)))
8430
8431 (define-public python2-ipaddress
8432 (package-with-python2 python-ipaddress))
8433
8434 (define-public python2-ipaddr
8435 (package
8436 (name "python2-ipaddr")
8437 (version "2.1.11")
8438 (source
8439 (origin
8440 (method url-fetch)
8441 (uri (pypi-uri "ipaddr" version))
8442 (sha256
8443 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8444 (build-system python-build-system)
8445 (arguments
8446 `(#:python ,python-2 ;version 2 only
8447 #:phases
8448 (modify-phases %standard-phases
8449 (replace 'check
8450 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8451 (home-page "https://github.com/google/ipaddr-py")
8452 (synopsis "IP address manipulation library")
8453 (description
8454 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8455 IPv6 addresses and networks.
8456
8457 For new implementations you may prefer to use the standard module
8458 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8459 versions of Python.")
8460 (license license:asl2.0)))
8461
8462 (define-public python-idna
8463 (package
8464 (name "python-idna")
8465 (version "2.9")
8466 (source
8467 (origin
8468 (method url-fetch)
8469 (uri (pypi-uri "idna" version))
8470 (sha256
8471 (base32
8472 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
8473 (build-system python-build-system)
8474 (home-page "https://github.com/kjd/idna")
8475 (synopsis "Internationalized domain names in applications")
8476 (description
8477 "This is a library to support the Internationalised Domain Names in
8478 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8479 protocol is often referred to as “IDNA2008” and can produce different results
8480 from the earlier standard from 2003. The library is also intended to act as a
8481 suitable drop-in replacement for the “encodings.idna” module that comes with
8482 the Python standard library but currently only supports the older 2003
8483 specification.")
8484 (license license:bsd-4)))
8485
8486 (define-public python-idna-2.7
8487 (package (inherit python-idna)
8488 (version "2.7")
8489 (source (origin
8490 (method url-fetch)
8491 (uri (pypi-uri "idna" version))
8492 (sha256
8493 (base32
8494 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8495
8496
8497 (define-public python2-idna
8498 (package-with-python2 python-idna))
8499
8500 (define-public python-idna-ssl
8501 (package
8502 (name "python-idna-ssl")
8503 (version "1.0.1")
8504 (source
8505 (origin
8506 (method url-fetch)
8507 (uri (pypi-uri "idna-ssl" version))
8508 (sha256
8509 (base32
8510 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8511 (build-system python-build-system)
8512 (arguments
8513 `(#:tests? #f)) ;circular dependency with python-aiohttp
8514 (home-page "https://github.com/aio-libs/idna-ssl")
8515 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8516 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8517 domains support.")
8518 (license license:expat)))
8519
8520 (define-public python-pretend
8521 (package
8522 (name "python-pretend")
8523 (version "1.0.9")
8524 (source
8525 (origin
8526 (method url-fetch)
8527 (uri (pypi-uri "pretend" version))
8528 (sha256
8529 (base32
8530 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8531 (build-system python-build-system)
8532 (home-page "https://github.com/alex/pretend")
8533 (synopsis "Library for stubbing in Python")
8534 (description
8535 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8536 technique for writing tests. You may hear the term mixed up with mocks,
8537 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8538 responses, rather than doing any computation.")
8539 (license license:bsd-3)))
8540
8541 (define-public python2-pretend
8542 (package-with-python2 python-pretend))
8543
8544 (define-public python-pip
8545 (package
8546 (name "python-pip")
8547 (version "20.0.2")
8548 (source
8549 (origin
8550 (method url-fetch)
8551 (uri (pypi-uri "pip" version))
8552 (sha256
8553 (base32
8554 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8555 (build-system python-build-system)
8556 (arguments
8557 '(#:tests? #f)) ; there are no tests in the pypi archive.
8558 (home-page "https://pip.pypa.io/")
8559 (synopsis "Package manager for Python software")
8560 (description
8561 "Pip is a package manager for Python software, that finds packages on the
8562 Python Package Index (PyPI).")
8563 (license license:expat)))
8564
8565 (define-public python2-pip
8566 (package-with-python2 python-pip))
8567
8568 (define-public python-tlsh
8569 (package
8570 (name "python-tlsh")
8571 (version "3.4.5")
8572 (home-page "https://github.com/trendmicro/tlsh")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/trendmicro/tlsh.git")
8578 (commit (string-append "v" version))))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8582 (build-system cmake-build-system)
8583 (arguments
8584 '(#:out-of-source? #f
8585 #:phases (modify-phases %standard-phases
8586 (replace
8587 'install
8588 (lambda* (#:key outputs #:allow-other-keys)
8589 ;; Build and install the Python bindings. The underlying
8590 ;; C++ library is apparently not meant to be installed.
8591 (let ((out (assoc-ref outputs "out")))
8592 (with-directory-excursion "py_ext"
8593 (and (system* "python" "setup.py" "build")
8594 (system* "python" "setup.py" "install"
8595 (string-append "--prefix=" out))))))))))
8596 (inputs `(("python" ,python-wrapper))) ;for the bindings
8597 (synopsis "Fuzzy matching library for Python")
8598 (description
8599 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8600 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8601 value which can be used for similarity comparisons. Similar objects have
8602 similar hash values, which allows for the detection of similar objects by
8603 comparing their hash values. The byte stream should have a sufficient amount
8604 of complexity; for example, a byte stream of identical bytes will not generate
8605 a hash value.")
8606 (license license:asl2.0)))
8607
8608 (define-public python2-tlsh
8609 (package
8610 (inherit python-tlsh)
8611 (name "python2-tlsh")
8612 (inputs `(("python" ,python-2)))))
8613
8614 (define-public python-termcolor
8615 (package
8616 (name "python-termcolor")
8617 (version "1.1.0")
8618 (source
8619 (origin
8620 (method url-fetch)
8621 (uri (pypi-uri "termcolor" version))
8622 (sha256
8623 (base32
8624 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8625 (build-system python-build-system)
8626 (arguments
8627 ;; There are no tests.
8628 `(#:tests? #f))
8629 (home-page "https://pypi.org/project/termcolor/")
8630 (synopsis "ANSII Color formatting for terminal output")
8631 (description
8632 "This package provides ANSII Color formatting for output in terminals.")
8633 (license license:expat)))
8634
8635 (define-public python2-termcolor
8636 (package-with-python2 python-termcolor))
8637
8638 (define-public python-libarchive-c
8639 (package
8640 (name "python-libarchive-c")
8641 (version "2.9")
8642 (source (origin
8643 (method url-fetch)
8644 (uri (pypi-uri "libarchive-c" version))
8645 (sha256
8646 (base32
8647 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8648 (build-system python-build-system)
8649 (arguments
8650 '(#:phases (modify-phases %standard-phases
8651 (add-before
8652 'build 'reference-libarchive
8653 (lambda* (#:key inputs #:allow-other-keys)
8654 ;; Retain the absolute file name of libarchive.so.
8655 (let ((libarchive (assoc-ref inputs "libarchive")))
8656 (substitute* "libarchive/ffi.py"
8657 (("find_library\\('archive'\\)")
8658 (string-append "'" libarchive
8659 "/lib/libarchive.so'"))))))
8660 (replace 'check
8661 (lambda _ (invoke "pytest" "-vv"))))))
8662 (native-inputs
8663 `(("python-mock" ,python-mock)
8664 ("python-pytest" ,python-pytest)))
8665 (inputs
8666 `(("libarchive" ,libarchive)))
8667 (home-page "https://github.com/Changaco/python-libarchive-c")
8668 (synopsis "Python interface to libarchive")
8669 (description
8670 "This package provides Python bindings to libarchive, a C library to
8671 access possibly compressed archives in many different formats. It uses
8672 Python's @code{ctypes} foreign function interface (FFI).")
8673 (license license:lgpl2.0+)))
8674
8675 (define-public python2-libarchive-c
8676 (package-with-python2 python-libarchive-c))
8677
8678 (define-public python-file
8679 (package
8680 (inherit file)
8681 (name "python-file")
8682 (build-system python-build-system)
8683 (arguments
8684 '(#:tests? #f ;no tests
8685 #:configure-flags '("--single-version-externally-managed" "--root=/")
8686 #:phases (modify-phases %standard-phases
8687 (add-before 'build 'change-directory
8688 (lambda _
8689 (chdir "python")
8690 #t))
8691 (add-before 'build 'set-library-file-name
8692 (lambda* (#:key inputs #:allow-other-keys)
8693 (let ((file (assoc-ref inputs "file")))
8694 (substitute* "magic.py"
8695 (("find_library\\('magic'\\)")
8696 (string-append "'" file "/lib/libmagic.so'")))
8697 #t))))))
8698 (inputs `(("file" ,file)))
8699 (native-inputs (if (%current-target-system)
8700 `(("self" ,this-package))
8701 '()))
8702 (synopsis "Python bindings to the libmagic file type guesser. Note that
8703 this module and the python-magic module both provide a \"magic.py\" file;
8704 these two modules, which are different and were developed separately, both
8705 serve the same purpose: provide Python bindings for libmagic.")))
8706
8707 (define-public python2-file
8708 (package-with-python2 python-file))
8709
8710 (define-public python-debian
8711 (package
8712 (name "python-debian")
8713 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8714 (version "0.1.36")
8715 (source
8716 (origin
8717 ;; Use git-fetch, as pypi doesn't include test suite.
8718 (method git-fetch)
8719 (uri (git-reference
8720 (url home-page)
8721 (commit version)))
8722 (file-name (git-file-name name version))
8723 (sha256
8724 (base32
8725 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8726 (build-system python-build-system)
8727 (arguments
8728 `(#:phases (modify-phases %standard-phases
8729 (add-after 'unpack 'remove-debian-specific-tests
8730 ;; python-apt, apt and dpkg are not yet available in guix,
8731 ;; and these tests heavily depend on them.
8732 (lambda _
8733 (delete-file "lib/debian/tests/test_deb822.py")
8734 (delete-file "lib/debian/tests/test_debfile.py")
8735 #t)))))
8736 (propagated-inputs
8737 `(("python-six" ,python-six)
8738 ("python-chardet" ,python-chardet)))
8739 (synopsis "Debian package related modules")
8740 (description
8741 ;; XXX: Use @enumerate instead of @itemize to work around
8742 ;; <http://bugs.gnu.org/21772>.
8743 "This package provides Python modules that abstract many formats of
8744 Debian-related files, such as:
8745
8746 @enumerate
8747 @item Debtags information;
8748 @item @file{debian/changelog} files;
8749 @item packages files, pdiffs;
8750 @item control files of single or multiple RFC822-style paragraphs---e.g.
8751 @file{debian/control}, @file{.changes}, @file{.dsc};
8752 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8753 contained files and meta-information.
8754 @end enumerate\n")
8755
8756 ;; Modules are either GPLv2+ or GPLv3+.
8757 (license license:gpl3+)))
8758
8759 (define-public python-nbformat
8760 (package
8761 (name "python-nbformat")
8762 (version "4.4.0")
8763 (source
8764 (origin
8765 (method url-fetch)
8766 (uri (pypi-uri "nbformat" version))
8767 (sha256
8768 (base32
8769 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8770 (build-system python-build-system)
8771 (arguments `(#:tests? #f)) ; no test target
8772 (propagated-inputs
8773 `(("python-ipython-genutils" ,python-ipython-genutils)
8774 ("python-jsonschema" ,python-jsonschema)
8775 ("python-jupyter-core" ,python-jupyter-core)
8776 ("python-traitlets" ,python-traitlets)))
8777 (home-page "http://jupyter.org")
8778 (synopsis "Jupyter Notebook format")
8779 (description "This package provides the reference implementation of the
8780 Jupyter Notebook format and Python APIs for working with notebooks.")
8781 (license license:bsd-3)))
8782
8783 (define-public python2-nbformat
8784 (package-with-python2 python-nbformat))
8785
8786 (define-public python-bleach
8787 (package
8788 (name "python-bleach")
8789 (version "3.1.3")
8790 (source
8791 (origin
8792 (method url-fetch)
8793 (uri (pypi-uri "bleach" version))
8794 (sha256
8795 (base32
8796 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8797 (build-system python-build-system)
8798 (propagated-inputs
8799 `(("python-webencodings" ,python-webencodings)
8800 ("python-six" ,python-six)))
8801 (native-inputs
8802 `(("python-datrie" ,python-datrie)
8803 ("python-genshi" ,python-genshi)
8804 ("python-lxml" ,python-lxml)
8805 ("python-pytest" ,python-pytest)))
8806 (home-page "https://github.com/mozilla/bleach")
8807 (synopsis "Whitelist-based HTML-sanitizing tool")
8808 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8809 (license license:asl2.0)))
8810
8811 (define-public python2-bleach
8812 (package-with-python2 python-bleach))
8813
8814 (define-public python-entrypoints
8815 (package
8816 (name "python-entrypoints")
8817 (version "0.3")
8818 (source
8819 (origin
8820 (method url-fetch)
8821 (uri (pypi-uri "entrypoints" version))
8822 (sha256
8823 (base32
8824 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8825 (build-system python-build-system)
8826 ;; The package does not come with a setup.py file, so we have to generate
8827 ;; one ourselves.
8828 (arguments
8829 `(#:tests? #f
8830 #:phases
8831 (modify-phases %standard-phases
8832 (add-after 'unpack 'create-setup.py
8833 (lambda _
8834 (call-with-output-file "setup.py"
8835 (lambda (port)
8836 (format port "\
8837 from setuptools import setup
8838 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8839 " ,version))))))))
8840 (home-page "https://github.com/takluyver/entrypoints")
8841 (synopsis "Discover and load entry points from installed Python packages")
8842 (description "Entry points are a way for Python packages to advertise
8843 objects with some common interface. The most common examples are
8844 @code{console_scripts} entry points, which define shell commands by
8845 identifying a Python function to run. The @code{entrypoints} module contains
8846 functions to find and load entry points.")
8847 (license license:expat)))
8848
8849 (define-public python2-entrypoints
8850 (package-with-python2 python-entrypoints))
8851
8852 (define-public python-epc
8853 (package
8854 (name "python-epc")
8855 (version "0.0.5")
8856 (source
8857 (origin
8858 (method url-fetch)
8859 (uri (pypi-uri "epc" version))
8860 (sha256
8861 (base32
8862 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
8863 (build-system python-build-system)
8864 (propagated-inputs
8865 `(("python-sexpdata" ,python-sexpdata)))
8866 (native-inputs
8867 `(("python-nose" ,python-nose)))
8868 (home-page "https://github.com/tkf/python-epc")
8869 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
8870 (description
8871 "Python-EPC can call elisp functions from Python and Python functions
8872 from elisp.")
8873 (license license:gpl3)))
8874
8875 (define-public python-nbconvert
8876 (package
8877 (name "python-nbconvert")
8878 (version "5.0.0b1")
8879 (source
8880 (origin
8881 (method url-fetch)
8882 (uri (pypi-uri "nbconvert" version))
8883 (sha256
8884 (base32
8885 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8886 (build-system python-build-system)
8887 (arguments
8888 `(;; The "bdist_egg" target is disabled by default, causing the installation
8889 ;; to fail.
8890 #:configure-flags (list "bdist_egg")
8891 ;; FIXME: 5 failures, 40 errors.
8892 #:tests? #f))
8893 ;; #:phases
8894 ;; (modify-phases %standard-phases
8895 ;; (replace 'check
8896 ;; (lambda _
8897 ;; (zero? (system* "py.test" "-v")))))
8898 (native-inputs
8899 `(("python-pytest" ,python-pytest)))
8900 (propagated-inputs
8901 `(("python-bleach" ,python-bleach)
8902 ("python-entrypoints" ,python-entrypoints)
8903 ("python-jinja2" ,python-jinja2)
8904 ("python-jupyter-core" ,python-jupyter-core)
8905 ("python-mistune" ,python-mistune)
8906 ("python-nbformat" ,python-nbformat)
8907 ("python-pygments" ,python-pygments)
8908 ("python-traitlets" ,python-traitlets)))
8909 (home-page "http://jupyter.org")
8910 (synopsis "Converting Jupyter Notebooks")
8911 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8912 notebooks to various other formats via Jinja templates. It allows you to
8913 convert an @code{.ipynb} notebook file into various static formats including:
8914
8915 @enumerate
8916 @item HTML
8917 @item LaTeX
8918 @item PDF
8919 @item Reveal JS
8920 @item Markdown (md)
8921 @item ReStructured Text (rst)
8922 @item executable script
8923 @end enumerate\n")
8924 (license license:bsd-3)))
8925
8926 (define-public python2-nbconvert
8927 (package-with-python2 python-nbconvert))
8928
8929 (define-public python-notebook
8930 (package
8931 (name "python-notebook")
8932 (version "5.7.4")
8933 (source (origin
8934 (method url-fetch)
8935 (uri (pypi-uri "notebook" version))
8936 (sha256
8937 (base32
8938 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8939 (build-system python-build-system)
8940 (arguments
8941 `(#:phases
8942 (modify-phases %standard-phases
8943 (replace 'check
8944 (lambda _
8945 ;; These tests require a browser
8946 (delete-file-recursively "notebook/tests/selenium")
8947 ;; Some tests need HOME
8948 (setenv "HOME" "/tmp")
8949 ;; This file contains "warningfilters", which are not supported
8950 ;; by this version of nose.
8951 (delete-file "setup.cfg")
8952 (with-directory-excursion "/tmp"
8953 (invoke "nosetests" "-v"))
8954 #t)))))
8955 (propagated-inputs
8956 `(("python-jupyter-core" ,python-jupyter-core)
8957 ("python-nbformat" ,python-nbformat)
8958 ("python-nbconvert" ,python-nbconvert)
8959 ("python-prometheus-client" ,python-prometheus-client)
8960 ("python-send2trash" ,python-send2trash)
8961 ("python-terminado" ,python-terminado)))
8962 (native-inputs
8963 `(("python-nose" ,python-nose)
8964 ("python-sphinx" ,python-sphinx)
8965 ("python-requests" ,python-requests)))
8966 (home-page "http://jupyter.org/")
8967 (synopsis "Web-based notebook environment for interactive computing")
8968 (description
8969 "The Jupyter HTML notebook is a web-based notebook environment for
8970 interactive computing.")
8971 (properties `((python2-variant . ,(delay python2-notebook))))
8972 (license license:bsd-3)))
8973
8974 (define-public python2-notebook
8975 (let ((base (package-with-python2
8976 (strip-python2-variant python-notebook))))
8977 (package (inherit base)
8978 (native-inputs
8979 `(("python2-mock" ,python2-mock)
8980 ,@(package-native-inputs base)))
8981 (arguments
8982 (substitute-keyword-arguments (package-arguments base)
8983 ((#:phases phases)
8984 `(modify-phases ,phases
8985 (add-before 'check 'disable-test-case
8986 ;; The test requires network access to localhost. Curiously it
8987 ;; fails with Python 2 only. Simply make the test-case return
8988 ;; immediately.
8989 (lambda _
8990 (substitute*
8991 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8992 (("formats = self.nbconvert_api") "return #")))))))))))
8993
8994 (define-public python-widgetsnbextension
8995 (package
8996 (name "python-widgetsnbextension")
8997 (version "3.5.1")
8998 (source
8999 (origin
9000 (method url-fetch)
9001 (uri (pypi-uri "widgetsnbextension" version))
9002 (sha256
9003 (base32
9004 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9005 (build-system python-build-system)
9006 (propagated-inputs
9007 `(("python-ipykernel"
9008 ,(prompt-toolkit-2-instead-of-prompt-toolkit python-ipykernel))
9009 ("python-notebook" ,python-notebook)))
9010 (native-inputs
9011 `(("python-certifi" ,python-certifi)
9012 ("python-nose" ,python-nose)))
9013 (home-page "https://ipython.org")
9014 (synopsis "IPython HTML widgets for Jupyter")
9015 (description "This package provides interactive HTML widgets for Jupyter
9016 notebooks.")
9017 (license license:bsd-3)))
9018
9019 (define-public python2-widgetsnbextension
9020 (package-with-python2 python-widgetsnbextension))
9021
9022 (define-public python-ipywidgets
9023 (package
9024 (name "python-ipywidgets")
9025 (version "7.5.1")
9026 (source
9027 (origin
9028 (method url-fetch)
9029 (uri (pypi-uri "ipywidgets" version))
9030 (sha256
9031 (base32
9032 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9033 (build-system python-build-system)
9034 (propagated-inputs
9035 `(("python-ipython" ,(prompt-toolkit-2-instead-of-prompt-toolkit
9036 python-ipython))
9037 ("python-traitlets" ,python-traitlets)
9038 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9039 (native-inputs
9040 `(("python-nose" ,python-nose)
9041 ("python-pytest" ,python-pytest)))
9042 (home-page "https://ipython.org")
9043 (synopsis "IPython HTML widgets for Jupyter")
9044 (description "Ipywidgets are interactive HTML widgets for Jupyter
9045 notebooks and the IPython kernel. Notebooks come alive when interactive
9046 widgets are used. Users gain control of their data and can visualize changes
9047 in the data.")
9048 (license license:bsd-3)))
9049
9050 (define-public python2-ipywidgets
9051 (package-with-python2 python-ipywidgets))
9052
9053 (define-public python-jupyter-console
9054 (package
9055 (name "python-jupyter-console")
9056 (version "6.1.0")
9057 (source
9058 (origin
9059 (method url-fetch)
9060 (uri (pypi-uri "jupyter_console" version))
9061 (sha256
9062 (base32
9063 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9064 (build-system python-build-system)
9065 (propagated-inputs
9066 `(("python-ipykernel" ,(prompt-toolkit-2-instead-of-prompt-toolkit
9067 python-ipykernel))
9068 ("python-jupyter-client" ,python-jupyter-client)
9069 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9070 ("python-pygments" ,python-pygments)))
9071 (native-inputs
9072 `(("python-nose" ,python-nose)))
9073 (home-page "https://jupyter.org")
9074 (synopsis "Jupyter terminal console")
9075 (description "This package provides a terminal-based console frontend for
9076 Jupyter kernels. It also allows for console-based interaction with non-Python
9077 Jupyter kernels such as IJulia and IRKernel.")
9078 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9079 (license license:bsd-3)))
9080
9081 (define-public python2-jupyter-console
9082 (package
9083 (name "python2-jupyter-console")
9084 (version "5.2.0")
9085 (source
9086 (origin
9087 (method url-fetch)
9088 (uri (pypi-uri "jupyter_console" version))
9089 (sha256
9090 (base32
9091 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9092 (build-system python-build-system)
9093 (arguments
9094 `(#:python ,python-2
9095 #:tests? #f)) ; Tests only run in a TTY.
9096 (propagated-inputs
9097 `(("python2-ipykernel" ,python2-ipykernel)
9098 ("python2-jupyter-client" ,python2-jupyter-client)
9099 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9100 ("python2-pygments" ,python2-pygments)))
9101 (native-inputs
9102 `(("python2-nose" ,python2-nose)))
9103 (home-page "https://jupyter.org")
9104 (synopsis "Jupyter terminal console")
9105 (description "This package provides a terminal-based console frontend for
9106 Jupyter kernels. It also allows for console-based interaction with non-Python
9107 Jupyter kernels such as IJulia and IRKernel.")
9108 (license license:bsd-3)))
9109
9110 ;; The python-ipython and python-jupyter-console require each other. To get
9111 ;; the functionality in both packages working, strip down the
9112 ;; python-jupyter-console package when using it as an input to python-ipython.
9113 (define python-jupyter-console-minimal
9114 (package
9115 (inherit python-jupyter-console)
9116 (name "python-jupyter-console-minimal")
9117 (arguments
9118 (substitute-keyword-arguments
9119 (package-arguments python-jupyter-console)
9120 ((#:phases phases)
9121 `(modify-phases ,phases
9122 (add-after 'install 'delete-bin
9123 (lambda* (#:key outputs #:allow-other-keys)
9124 ;; Delete the bin files, to avoid conflicts in profiles
9125 ;; where python-ipython and python-jupyter-console are
9126 ;; both present.
9127 (delete-file-recursively
9128 (string-append
9129 (assoc-ref outputs "out") "/bin"))))))))
9130 ;; Remove the python-ipython propagated input, to avoid the cycle
9131 (propagated-inputs
9132 (alist-delete
9133 "python-ipython"
9134 (package-propagated-inputs python-jupyter-console)))))
9135
9136 (define-public python-qtconsole
9137 (package
9138 (name "python-qtconsole")
9139 (version "4.4.3")
9140 (source
9141 (origin
9142 (method url-fetch)
9143 (uri (pypi-uri "qtconsole" version))
9144 (sha256
9145 (base32
9146 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9147 (build-system python-build-system)
9148 (arguments
9149 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9150 ;; but we only have the LTS version 5.x. This means that there might be
9151 ;; runtime errors, but since this is a dependency of the Jupyter package,
9152 ;; and Jupyter can be used without the qtconsole we can overlook this for
9153 ;; now.
9154 `(#:tests? #f
9155 #:phases
9156 (modify-phases %standard-phases
9157 (add-before 'check 'pre-check
9158 (lambda _
9159 (setenv "QT_QPA_PLATFORM" "offscreen")
9160 #t)))))
9161 (propagated-inputs
9162 `(("python-ipykernel" ,python-ipykernel)
9163 ("python-ipython" ,python-ipython)))
9164 (native-inputs
9165 `(("python-pytest" ,python-pytest)))
9166 (home-page "http://jupyter.org")
9167 (synopsis "Jupyter Qt console")
9168 (description "This package provides a Qt-based console for Jupyter with
9169 support for rich media output.")
9170 (license license:bsd-3)))
9171
9172 (define-public python-jsbeautifier
9173 (package
9174 (name "python-jsbeautifier")
9175 (version "1.10.2")
9176 (home-page "https://github.com/beautify-web/js-beautify")
9177 (source (origin
9178 (method git-fetch)
9179 (uri (git-reference
9180 (url home-page)
9181 (commit (string-append "v" version))))
9182 (file-name (git-file-name name version))
9183 (sha256
9184 (base32
9185 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9186 (build-system python-build-system)
9187 (arguments
9188 `(#:phases (modify-phases %standard-phases
9189 (add-after 'unpack 'chdir
9190 (lambda _
9191 ;; The upstream Git repository contains all the code,
9192 ;; but this package only builds the python code.
9193 (chdir "python")
9194 #t))
9195 (add-after 'unpack 'patch-python-six-requirements
9196 (lambda _
9197 (substitute* "python/setup.py"
9198 (("six>=1.12.0")
9199 "six>=1.11.0"))
9200 #t)))))
9201 (propagated-inputs
9202 `(("python-editorconfig" ,python-editorconfig)
9203 ("python-six" ,python-six)))
9204 (native-inputs
9205 `(("python-pytest" ,python-pytest)))
9206 (synopsis "JavaScript unobfuscator and beautifier")
9207 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9208 popular online obfuscators.")
9209 (license license:expat)))
9210
9211 (define-public jupyter
9212 (package
9213 (name "jupyter")
9214 (version "1.0.0")
9215 (source
9216 (origin
9217 (method url-fetch)
9218 (uri (pypi-uri "jupyter" version))
9219 (sha256
9220 (base32
9221 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9222 (build-system python-build-system)
9223 (arguments '(#:tests? #f)) ; there are none.
9224 (propagated-inputs
9225 `(("python-ipykernel" ,python-ipykernel)
9226 ("python-ipywidgets" ,python-ipywidgets)
9227 ("python-jupyter-console" ,python-jupyter-console)
9228 ("python-nbconvert" ,python-nbconvert)
9229 ("python-notebook" ,python-notebook)
9230 ("python-qtconsole" ,python-qtconsole)))
9231 (native-search-paths
9232 (list (search-path-specification
9233 (variable "JUPYTER_PATH")
9234 (files '("share/jupyter")))))
9235 (home-page "https://jupyter.org")
9236 (synopsis "Web application for interactive documents")
9237 (description
9238 "The Jupyter Notebook is a web application that allows you to create and
9239 share documents that contain live code, equations, visualizations and
9240 explanatory text. Uses include: data cleaning and transformation, numerical
9241 simulation, statistical modeling, machine learning and much more.")
9242 (license license:bsd-3)))
9243
9244 (define-public python-chardet
9245 (package
9246 (name "python-chardet")
9247 (version "3.0.4")
9248 (source
9249 (origin
9250 (method url-fetch)
9251 (uri (pypi-uri "chardet" version))
9252 (sha256
9253 (base32
9254 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9255 (native-inputs
9256 `(("python-hypothesis" ,python-hypothesis)
9257 ("python-pytest" ,python-pytest)
9258 ("python-pytest-runner" ,python-pytest-runner)))
9259 (build-system python-build-system)
9260 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9261 (arguments `(#:tests? #f))
9262 (home-page "https://github.com/chardet/chardet")
9263 (synopsis "Universal encoding detector for Python 2 and 3")
9264 (description
9265 "This package provides @code{chardet}, a Python module that can
9266 automatically detect a wide range of file encodings.")
9267 (license license:lgpl2.1+)))
9268
9269 (define-public python2-chardet
9270 (package-with-python2 python-chardet))
9271
9272 (define-public python-docopt
9273 (package
9274 (name "python-docopt")
9275 (version "0.6.2")
9276 (source
9277 (origin
9278 (method git-fetch)
9279 ;; The release on PyPI does not include tests.
9280 (uri (git-reference
9281 (url "https://github.com/docopt/docopt")
9282 (commit version)))
9283 (file-name (git-file-name name version))
9284 (sha256
9285 (base32
9286 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9287 (build-system python-build-system)
9288 (native-inputs
9289 `(("python-pytest" ,python-pytest)))
9290 (arguments
9291 `(#:phases
9292 (modify-phases %standard-phases
9293 (replace 'check
9294 (lambda _ (invoke "py.test"))))))
9295 (home-page "http://docopt.org")
9296 (synopsis "Command-line interface description language for Python")
9297 (description "This library allows the user to define a command-line
9298 interface from a program's help message rather than specifying it
9299 programmatically with command-line parsers like @code{getopt} and
9300 @code{argparse}.")
9301 (license license:expat)))
9302
9303 (define-public python2-docopt
9304 (package-with-python2 python-docopt))
9305
9306 (define-public python-pythondialog
9307 (package
9308 (name "python-pythondialog")
9309 (version "3.4.0")
9310 (source
9311 (origin
9312 (method url-fetch)
9313 (uri (pypi-uri "pythondialog" version))
9314 (sha256
9315 (base32
9316 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9317 (build-system python-build-system)
9318 (arguments
9319 `(#:phases
9320 (modify-phases %standard-phases
9321 (add-after 'unpack 'patch-path
9322 (lambda* (#:key inputs #:allow-other-keys)
9323 (let* ((dialog (assoc-ref inputs "dialog")))
9324 ;; Since this library really wants to grovel the search path, we
9325 ;; must hardcode dialog's store path into it.
9326 (substitute* "dialog.py"
9327 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9328 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9329 #t))))
9330 #:tests? #f)) ; no test suite
9331 (propagated-inputs
9332 `(("dialog" ,dialog)))
9333 (home-page "http://pythondialog.sourceforge.net/")
9334 (synopsis "Python interface to the UNIX dialog utility")
9335 (description "A Python wrapper for the dialog utility. Its purpose is to
9336 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9337 This allows one to make simple text-mode user interfaces on Unix-like systems")
9338 (license license:lgpl2.1)
9339 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9340
9341 (define-public python2-pythondialog
9342 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9343 (package
9344 (inherit base)
9345 (version (package-version python-pythondialog))
9346 (source (origin
9347 (method url-fetch)
9348 (uri (pypi-uri "python2-pythondialog" version))
9349 (sha256
9350 (base32
9351 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9352
9353 (define-public python-configobj
9354 (package
9355 (name "python-configobj")
9356 (version "5.0.6")
9357 (source (origin
9358 (method url-fetch)
9359 (uri (pypi-uri "configobj" version))
9360 (sha256
9361 (base32
9362 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9363 ;; Patch setup.py so it looks for python-setuptools, which is
9364 ;; required to parse the keyword 'install_requires' in setup.py.
9365 (patches (search-patches "python-configobj-setuptools.patch"))))
9366 (build-system python-build-system)
9367 (propagated-inputs
9368 `(("python-six" ,python-six)))
9369 (synopsis "Config file reading, writing and validation")
9370 (description "ConfigObj is a simple but powerful config file reader and
9371 writer: an ini file round tripper. Its main feature is that it is very easy to
9372 use, with a straightforward programmer’s interface and a simple syntax for
9373 config files.")
9374 (home-page "https://github.com/DiffSK/configobj")
9375 (license license:bsd-3)))
9376
9377 (define-public python2-configobj
9378 (package-with-python2 python-configobj))
9379
9380 (define-public python-configargparse
9381 (package
9382 (name "python-configargparse")
9383 (version "0.14.0")
9384 (source (origin
9385 (method url-fetch)
9386 (uri (pypi-uri "ConfigArgParse" version))
9387 (sha256
9388 (base32
9389 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9390 (build-system python-build-system)
9391 (native-inputs
9392 `(("python-pyyaml" ,python-pyyaml)))
9393 (arguments
9394 `(#:phases
9395 (modify-phases %standard-phases
9396 (replace 'check
9397 (lambda _
9398 ;; Bypass setuptools-shim because one test relies on "setup.py"
9399 ;; being the first argument passed to the python call.
9400 ;;
9401 ;; NOTE: Many tests do not run because they rely on Python's
9402 ;; built-in test.test_argparse, but we remove the unit tests from
9403 ;; our Python installation.
9404 (invoke "python" "setup.py" "test"))))))
9405 (synopsis "Replacement for argparse")
9406 (description "A drop-in replacement for argparse that allows options to also
9407 be set via config files and/or environment variables.")
9408 (home-page "https://github.com/bw2/ConfigArgParse")
9409 (license license:expat)))
9410
9411 (define-public python2-configargparse
9412 (package-with-python2 python-configargparse))
9413
9414 (define-public python-argparse-manpage
9415 (package
9416 (name "python-argparse-manpage")
9417 (version "1.1")
9418 (source
9419 (origin
9420 (method url-fetch)
9421 (uri (pypi-uri "argparse-manpage" version))
9422 (sha256
9423 (base32
9424 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9425 (build-system python-build-system)
9426 (home-page "https://github.com/praiskup/argparse-manpage")
9427 (synopsis "Build manual page from Python's ArgumentParser object")
9428 (description
9429 "This package provides tools to build manual pages from Python's
9430 @code{ArgumentParser} object.")
9431 (license license:asl2.0)))
9432
9433 (define-public python-contextlib2
9434 (package
9435 (name "python-contextlib2")
9436 (version "0.6.0.post1")
9437 (source
9438 (origin
9439 (method url-fetch)
9440 (uri (pypi-uri "contextlib2" version))
9441 (sha256
9442 (base32
9443 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9444 (build-system python-build-system)
9445 (home-page "https://contextlib2.readthedocs.org/")
9446 (synopsis "Tools for decorators and context managers")
9447 (description "This module is primarily a backport of the Python
9448 3.2 contextlib to earlier Python versions. Like contextlib, it
9449 provides utilities for common tasks involving decorators and context
9450 managers. It also contains additional features that are not part of
9451 the standard library.")
9452 (properties `((python2-variant . ,(delay python2-contextlib2))))
9453 (license license:psfl)))
9454
9455 (define-public python2-contextlib2
9456 (let ((base (package-with-python2
9457 (strip-python2-variant python-contextlib2))))
9458 (package
9459 (inherit base)
9460 (arguments
9461 (substitute-keyword-arguments (package-arguments base)
9462 ((#:phases phases)
9463 `(modify-phases ,phases
9464 (replace 'check
9465 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9466 (native-inputs
9467 `(("python2-unittest2" ,python2-unittest2))))))
9468
9469 ;; This package is used by python2-pytest via python2-importlib-metadata,
9470 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9471 (define-public python2-contextlib2-bootstrap
9472 (hidden-package
9473 (package/inherit
9474 python2-contextlib2
9475 (name "python2-contextlib2-bootstrap")
9476 (arguments
9477 `(#:tests? #f
9478 ,@(package-arguments python2-contextlib2)))
9479 (native-inputs '()))))
9480
9481 (define-public python-texttable
9482 (package
9483 (name "python-texttable")
9484 (version "1.6.2")
9485 (source
9486 (origin
9487 (method url-fetch)
9488 (uri (pypi-uri "texttable" version))
9489 (sha256
9490 (base32
9491 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9492 (build-system python-build-system)
9493 (arguments
9494 `(#:phases
9495 (modify-phases %standard-phases
9496 (replace 'check
9497 (lambda _ (invoke "pytest" "tests.py"))))))
9498 (native-inputs
9499 `(("python-pytest" ,python-pytest)))
9500 (home-page "https://github.com/foutaise/texttable/")
9501 (synopsis "Python module for creating simple ASCII tables")
9502 (description "Texttable is a Python module for creating simple ASCII
9503 tables.")
9504 (license license:expat)))
9505
9506 (define-public python2-texttable
9507 (package-with-python2 python-texttable))
9508
9509 (define-public python-atomicwrites
9510 (package
9511 (name "python-atomicwrites")
9512 (version "1.3.0")
9513 (source (origin
9514 (method url-fetch)
9515 (uri (pypi-uri "atomicwrites" version))
9516 (sha256
9517 (base32
9518 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9519 (build-system python-build-system)
9520 (synopsis "Atomic file writes in Python")
9521 (description "Library for atomic file writes using platform dependent tools
9522 for atomic file system operations.")
9523 (home-page "https://github.com/untitaker/python-atomicwrites")
9524 (license license:expat)))
9525
9526 (define-public python2-atomicwrites
9527 (package-with-python2 python-atomicwrites))
9528
9529 (define-public python-click-threading
9530 (package
9531 (name "python-click-threading")
9532 (version "0.4.4")
9533 (source (origin
9534 (method url-fetch)
9535 (uri (pypi-uri "click-threading" version))
9536 (sha256
9537 (base32
9538 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9539 (build-system python-build-system)
9540 (propagated-inputs
9541 `(("python-click" ,python-click)))
9542 (synopsis "Utilities for multithreading in Click")
9543 (description "This package provides utilities for multithreading in Click
9544 applications.")
9545 (home-page "https://github.com/click-contrib/click-threading")
9546 (license license:expat)))
9547
9548 (define-public python-click-log
9549 (package
9550 (name "python-click-log")
9551 (version "0.3.2")
9552 (source (origin
9553 (method url-fetch)
9554 (uri (pypi-uri "click-log" version))
9555 (sha256
9556 (base32
9557 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9558 (build-system python-build-system)
9559 (propagated-inputs
9560 `(("python-click" ,python-click)))
9561 (synopsis "Logging for click applications")
9562 (description "This package provides a Python library for logging Click
9563 applications.")
9564 (home-page "https://github.com/click-contrib/click-log")
9565 (license license:expat)))
9566
9567 (define-public python-apipkg
9568 (package
9569 (name "python-apipkg")
9570 (version "1.5")
9571 (source (origin
9572 (method url-fetch)
9573 (uri (pypi-uri "apipkg" version))
9574 (sha256
9575 (base32
9576 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9577 (build-system python-build-system)
9578 (native-inputs
9579 `(("python-pytest" ,python-pytest)
9580 ("python-setuptools-scm" ,python-setuptools-scm)))
9581 (synopsis "Namespace control and lazy-import mechanism")
9582 (description "With apipkg you can control the exported namespace of a Python
9583 package and greatly reduce the number of imports for your users. It is a small
9584 pure Python module that works on virtually all Python versions.")
9585 (home-page "https://github.com/pytest-dev/apipkg")
9586 (license license:expat)))
9587
9588 (define-public python-execnet
9589 (package
9590 (name "python-execnet")
9591 (version "1.4.1")
9592 (source (origin
9593 (method url-fetch)
9594 (uri (pypi-uri "execnet" version))
9595 (sha256
9596 (base32
9597 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9598 (build-system python-build-system)
9599 (arguments
9600 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9601 ;; The two test failures are caused by the lack of an `ssh` executable.
9602 ;; The test suite can be run with pytest after the 'install' phase.
9603 #:tests? #f))
9604 (native-inputs
9605 `(("python-pytest" ,python-pytest)
9606 ("python-setuptools-scm" ,python-setuptools-scm)))
9607 (propagated-inputs
9608 `(("python-apipkg" ,python-apipkg)))
9609 (synopsis "Rapid multi-Python deployment")
9610 (description "Execnet provides a share-nothing model with
9611 channel-send/receive communication for distributing execution across many
9612 Python interpreters across version, platform and network barriers. It has a
9613 minimal and fast API targeting the following uses:
9614 @enumerate
9615 @item distribute tasks to (many) local or remote CPUs
9616 @item write and deploy hybrid multi-process applications
9617 @item write scripts to administer multiple environments
9618 @end enumerate")
9619 (home-page "https://codespeak.net/execnet/")
9620 (license license:expat)))
9621
9622 (define-public python2-execnet
9623 (package-with-python2 python-execnet))
9624
9625 (define-public python-icalendar
9626 (package
9627 (name "python-icalendar")
9628 (version "4.0.5")
9629 (source (origin
9630 (method url-fetch)
9631 (uri (pypi-uri "icalendar" version))
9632 (sha256
9633 (base32
9634 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9635 (build-system python-build-system)
9636 (propagated-inputs
9637 `(("python-dateutil" ,python-dateutil)
9638 ("python-pytz" ,python-pytz)))
9639 (synopsis "Python library for parsing iCalendar files")
9640 (description "The icalendar package is a parser/generator of iCalendar
9641 files for use with Python.")
9642 (home-page "https://github.com/collective/icalendar")
9643 (license license:bsd-2)))
9644
9645 (define-public python-args
9646 (package
9647 (name "python-args")
9648 (version "0.1.0")
9649 (source (origin
9650 (method url-fetch)
9651 (uri (pypi-uri "args" version))
9652 (sha256
9653 (base32
9654 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9655 (build-system python-build-system)
9656 (home-page "https://github.com/kennethreitz/args")
9657 (synopsis "Command-line argument parser")
9658 (description
9659 "This library provides a Python module to parse command-line arguments.")
9660 (license license:bsd-3)))
9661
9662 (define-public python2-args
9663 (package-with-python2 python-args))
9664
9665 (define-public python-clint
9666 (package
9667 (name "python-clint")
9668 (version "0.5.1")
9669 (source (origin
9670 (method url-fetch)
9671 (uri (pypi-uri "clint" version))
9672 (sha256
9673 (base32
9674 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9675 (build-system python-build-system)
9676 (arguments
9677 '(#:phases
9678 (modify-phases %standard-phases
9679 (replace 'check
9680 (lambda _ (invoke "py.test" "-v"))))))
9681 (native-inputs
9682 `(("python-pytest" ,python-pytest)))
9683 (propagated-inputs
9684 `(("python-args" ,python-args)))
9685 (home-page "https://github.com/kennethreitz/clint")
9686 (synopsis "Command-line interface tools")
9687 (description
9688 "Clint is a Python module filled with a set of tools for developing
9689 command-line applications, including tools for colored and indented
9690 output, progress bar display, and pipes.")
9691 (license license:isc)))
9692
9693 (define-public python2-clint
9694 (package-with-python2 python-clint))
9695
9696 (define-public python-rply
9697 (package
9698 (name "python-rply")
9699 (version "0.7.5")
9700 (source (origin
9701 (method url-fetch)
9702 (uri (pypi-uri "rply" version))
9703 (sha256
9704 (base32
9705 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9706 (build-system python-build-system)
9707 (propagated-inputs
9708 `(("python-appdirs" ,python-appdirs)))
9709 (home-page "https://github.com/alex/rply")
9710 (synopsis "Parser generator for Python")
9711 (description
9712 "This package provides a pure Python based parser generator, that also
9713 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9714 with a new public API, and RPython support.")
9715 (license license:bsd-3)))
9716
9717 (define-public python2-rply
9718 (package-with-python2 python-rply))
9719
9720 (define-public python-hy
9721 (package
9722 (name "python-hy")
9723 (version "0.18.0")
9724 (source (origin
9725 (method url-fetch)
9726 (uri (pypi-uri "hy" version))
9727 (sha256
9728 (base32
9729 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9730 (build-system python-build-system)
9731 (arguments
9732 '(#:phases
9733 (modify-phases %standard-phases
9734 (add-before 'install 'set-HOME
9735 (lambda _
9736 (setenv "HOME" "/tmp") #t))
9737 (replace 'check
9738 (lambda _
9739 ;; Tests require write access to HOME.
9740 (setenv "HOME" "/tmp")
9741 (invoke "nosetests"))))))
9742 (native-inputs
9743 `(("python-coverage" ,python-coverage)
9744 ("python-nose" ,python-nose)))
9745 (propagated-inputs
9746 `(("python-astor" ,python-astor)
9747 ("python-colorama" ,python-colorama)
9748 ("python-rply" ,python-rply)
9749 ("python-funcparserlib"
9750 ,python-funcparserlib)))
9751 (home-page "http://hylang.org/")
9752 (synopsis "Lisp frontend to Python")
9753 (description
9754 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9755 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9756 Python at your fingertips, in Lisp form.")
9757 (license license:expat)))
9758
9759 (define-public python2-functools32
9760 (package
9761 (name "python2-functools32")
9762 (version "3.2.3-2")
9763 (source
9764 (origin
9765 (method url-fetch)
9766 (uri (pypi-uri "functools32" version))
9767 (sha256
9768 (base32
9769 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9770 (build-system python-build-system)
9771 (arguments
9772 `(#:python ,python-2
9773 #:tests? #f)) ; no test target
9774 (home-page "https://github.com/MiCHiLU/python-functools32")
9775 (synopsis
9776 "Backport of the functools module from Python 3.2.3")
9777 (description
9778 "This package is a backport of the @code{functools} module from Python
9779 3.2.3 for use with older versions of Python and PyPy.")
9780 (license license:expat)))
9781
9782 (define-public python2-subprocess32
9783 (package
9784 (name "python2-subprocess32")
9785 (version "3.2.7")
9786 (source (origin
9787 (method url-fetch)
9788 (uri (pypi-uri "subprocess32" version))
9789 (sha256
9790 (base32
9791 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9792 (patches
9793 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9794 (build-system python-build-system)
9795 (arguments
9796 `(#:python ,python-2
9797 ;; The test suite fails with Python > 2.7.13:
9798 ;; import test.support
9799 ;; ImportError: No module named support
9800 #:tests? #f
9801 #:phases
9802 (modify-phases %standard-phases
9803 (add-after 'unpack 'patch-/bin/sh
9804 (lambda _
9805 (substitute* '("subprocess32.py"
9806 "test_subprocess32.py")
9807 (("/bin/sh") (which "sh")))
9808 #t)))))
9809 (home-page "https://github.com/google/python-subprocess32")
9810 (synopsis "Backport of the subprocess module from Python 3.2")
9811 (description
9812 "This is a backport of the @code{subprocess} standard library module
9813 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9814 new features. On POSIX systems it is guaranteed to be reliable when used
9815 in threaded applications. It includes timeout support from Python 3.3 but
9816 otherwise matches 3.2’s API.")
9817 (license license:psfl)))
9818
9819 (define-public python2-futures
9820 (package
9821 (name "python2-futures")
9822 (version "3.2.0")
9823 (source
9824 (origin
9825 (method url-fetch)
9826 (uri (pypi-uri "futures" version))
9827 (sha256
9828 (base32
9829 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9830 (build-system python-build-system)
9831 (arguments
9832 `(#:python ,python-2
9833 #:phases
9834 (modify-phases %standard-phases
9835 (replace 'check
9836 (lambda _
9837 (invoke "python" "test_futures.py")
9838 #t)))))
9839 (home-page "https://github.com/agronholm/pythonfutures")
9840 (synopsis
9841 "Backport of the concurrent.futures package from Python 3.2")
9842 (description
9843 "The concurrent.futures module provides a high-level interface for
9844 asynchronously executing callables. This package backports the
9845 concurrent.futures package from Python 3.2")
9846 (license license:bsd-3)))
9847
9848 (define-public python-promise
9849 (package
9850 (name "python-promise")
9851 (version "0.4.2")
9852 (source
9853 (origin
9854 (method url-fetch)
9855 (uri (pypi-uri "promise" version))
9856 (sha256
9857 (base32
9858 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9859 (build-system python-build-system)
9860 ;; Tests wants python-futures, which is a python2 only program, and
9861 ;; can't be found by python-promise at test time.
9862 (arguments `(#:tests? #f))
9863 (home-page "https://github.com/syrusakbary/promise")
9864 (synopsis "Promises/A+ implementation for Python")
9865 (description
9866 "Promises/A+ implementation for Python")
9867 (properties `((python2-variant . ,(delay python2-promise))))
9868 (license license:expat)))
9869
9870 (define-public python2-promise
9871 (let ((promise (package-with-python2
9872 (strip-python2-variant python-promise))))
9873 (package (inherit promise)
9874 (arguments (substitute-keyword-arguments (package-arguments promise)
9875 ((#:tests? _) #t)))
9876 (native-inputs
9877 `(("python2-futures" ,python2-futures)
9878 ("python2-pytest" ,python2-pytest)
9879 ,@(package-native-inputs promise))))))
9880
9881 (define-public python-progressbar33
9882 (package
9883 (name "python-progressbar33")
9884 (version "2.4")
9885 (source
9886 (origin
9887 (method url-fetch)
9888 (uri (pypi-uri "progressbar33" version))
9889 (sha256
9890 (base32
9891 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9892 (build-system python-build-system)
9893 (home-page "http://github.com/germangh/python-progressbar")
9894 (synopsis "Text progress bar library for Python")
9895 (description
9896 "This package provides a text progress bar library for Python. This
9897 version only differs from the original @code{progressbar} package in that it
9898 uses relative package imports instead of absolute imports, which is necessary
9899 for the module to work under Python 3.3.")
9900 ;; Either or both of these licenses may be selected.
9901 (license (list license:lgpl2.1+ license:bsd-3))))
9902
9903 (define-public python-colorama
9904 (package
9905 (name "python-colorama")
9906 (version "0.4.3")
9907 (source
9908 (origin
9909 (method url-fetch)
9910 (uri (pypi-uri "colorama" version))
9911 (sha256
9912 (base32
9913 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9914 (build-system python-build-system)
9915 (synopsis "Colored terminal text rendering for Python")
9916 (description "Colorama is a Python library for rendering colored terminal
9917 text.")
9918 (home-page "https://pypi.org/project/colorama/")
9919 (license license:bsd-3)))
9920
9921 (define-public python2-colorama
9922 (package-with-python2 python-colorama))
9923
9924 (define-public python-rsa
9925 (package
9926 (name "python-rsa")
9927 (version "3.4.2")
9928 (source
9929 (origin
9930 (method url-fetch)
9931 (uri (pypi-uri "rsa" version))
9932 (sha256
9933 (base32
9934 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9935 (build-system python-build-system)
9936 (propagated-inputs
9937 `(("python-pyasn1" ,python-pyasn1)))
9938 (synopsis "Pure-Python RSA implementation")
9939 (description "Python-RSA is a pure-Python RSA implementation. It supports
9940 encryption and decryption, signing and verifying signatures, and key
9941 generation according to PKCS#1 version 1.5. It can be used as a Python
9942 library as well as on the command line.")
9943 (home-page "https://stuvel.eu/rsa")
9944 (license license:asl2.0)))
9945
9946 (define-public python2-rsa
9947 (package-with-python2 python-rsa))
9948
9949 (define-public python-pluggy
9950 (package
9951 (name "python-pluggy")
9952 (version "0.13.1")
9953 (source
9954 (origin
9955 (method url-fetch)
9956 (uri (pypi-uri "pluggy" version))
9957 (sha256
9958 (base32
9959 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
9960 (build-system python-build-system)
9961 (native-inputs
9962 `(("python-setuptools-scm" ,python-setuptools-scm)))
9963 (synopsis "Plugin and hook calling mechanism for Python")
9964 (description "Pluggy is an extraction of the plugin manager as used by
9965 Pytest but stripped of Pytest specific details.")
9966 (home-page "https://pypi.org/project/pluggy/")
9967 (properties `((python2-variant . ,(delay python2-pluggy))))
9968 (license license:expat)))
9969
9970 (define-public python2-pluggy
9971 (let ((base (package-with-python2 (strip-python2-variant
9972 python-pluggy))))
9973 (package/inherit
9974 base
9975 (propagated-inputs
9976 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
9977
9978 ;; This package requires python2-importlib-metadata, but that package
9979 ;; ends up needing python2-pluggy via python2-pytest, so we need this
9980 ;; variant to solve the circular dependency.
9981 (define-public python2-pluggy-bootstrap
9982 (hidden-package
9983 (package/inherit
9984 python2-pluggy
9985 (name "python2-pluggy-bootstrap")
9986 (arguments
9987 `(#:tests? #f
9988 ,@(package-arguments python2-pluggy)))
9989 (propagated-inputs
9990 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
9991
9992 (define-public python-tox
9993 (package
9994 (name "python-tox")
9995 (version "2.8.1")
9996 (source
9997 (origin
9998 (method url-fetch)
9999 (uri (pypi-uri "tox" version))
10000 (sha256
10001 (base32
10002 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10003 (build-system python-build-system)
10004 (arguments
10005 ;; FIXME: Tests require pytest-timeout, which itself requires
10006 ;; pytest>=2.8.0 for installation.
10007 '(#:tests? #f))
10008 (propagated-inputs
10009 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10010 ("python-py" ,python-py)
10011 ("python-virtualenv" ,python-virtualenv)))
10012 (native-inputs
10013 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10014 ("python-pytest" ,python-pytest) ; >= 2.3.5
10015 ("python-setuptools-scm" ,python-setuptools-scm)))
10016 (home-page "https://tox.readthedocs.io")
10017 (synopsis "Virtualenv-based automation of test activities")
10018 (description "Tox is a generic virtualenv management and test command line
10019 tool. It can be used to check that a package installs correctly with
10020 different Python versions and interpreters, or run tests in each type of
10021 supported environment, or act as a frontend to continuous integration
10022 servers.")
10023 (license license:expat)))
10024
10025 (define-public python2-tox
10026 (package-with-python2 python-tox))
10027
10028 (define-public python-jmespath
10029 (package
10030 (name "python-jmespath")
10031 (version "0.9.4")
10032 (source
10033 (origin
10034 (method url-fetch)
10035 (uri (pypi-uri "jmespath" version))
10036 (sha256
10037 (base32
10038 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10039 (build-system python-build-system)
10040 (native-inputs
10041 `(("python-nose" ,python-nose)))
10042 (synopsis "JSON Matching Expressions")
10043 (description "JMESPath (pronounced “james path”) is a Python library that
10044 allows one to declaratively specify how to extract elements from a JSON
10045 document.")
10046 (home-page "https://github.com/jmespath/jmespath.py")
10047 (license license:expat)))
10048
10049 (define-public python2-jmespath
10050 (package-with-python2 python-jmespath))
10051
10052 (define-public python-botocore
10053 (package
10054 (name "python-botocore")
10055 (version "1.15.26")
10056 (source
10057 (origin
10058 (method url-fetch)
10059 (uri (pypi-uri "botocore" version))
10060 (sha256
10061 (base32
10062 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10063 (build-system python-build-system)
10064 (arguments
10065 ;; FIXME: Many tests are failing.
10066 '(#:tests? #f))
10067 (propagated-inputs
10068 `(("python-dateutil" ,python-dateutil)
10069 ("python-docutils" ,python-docutils)
10070 ("python-jmespath" ,python-jmespath)))
10071 (native-inputs
10072 `(("python-mock" ,python-mock)
10073 ("python-nose" ,python-nose)
10074 ("behave" ,behave)
10075 ("python-tox" ,python-tox)
10076 ("python-urllib3" ,python-urllib3)
10077 ("python-wheel" ,python-wheel)))
10078 (home-page "https://github.com/boto/botocore")
10079 (synopsis "Low-level interface to AWS")
10080 (description "Botocore is a Python library that provides a low-level
10081 interface to the Amazon Web Services (AWS) API.")
10082 (license license:asl2.0)))
10083
10084 (define-public python2-botocore
10085 (package-with-python2 python-botocore))
10086
10087 (define-public python-xdo
10088 (package
10089 (name "python-xdo")
10090 (version "0.3")
10091 (source (origin
10092 (method url-fetch)
10093 (uri (string-append
10094 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10095 "python-xdo_" version ".orig.tar.gz"))
10096 (sha256
10097 (base32
10098 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10099 (build-system python-build-system)
10100 (arguments
10101 '(#:phases
10102 (modify-phases %standard-phases
10103 (add-before 'install 'patch-libxdo-path
10104 ;; Hardcode the path of dynamically loaded libxdo library.
10105 (lambda* (#:key inputs #:allow-other-keys)
10106 (let ((libxdo (string-append
10107 (assoc-ref inputs "xdotool")
10108 "/lib/libxdo.so")))
10109 (substitute* "xdo/_xdo.py"
10110 (("find_library\\(\"xdo\"\\)")
10111 (simple-format #f "\"~a\"" libxdo)))
10112 #t))))
10113 #:tests? #f)) ; no tests provided
10114 (propagated-inputs
10115 `(("python-six" ,python-six)))
10116 (inputs
10117 `(("xdotool" ,xdotool)
10118 ("libX11" ,libx11)))
10119 (home-page "https://tracker.debian.org/pkg/python-xdo")
10120 (synopsis "Python library for simulating X11 keyboard/mouse input")
10121 (description "Provides bindings to libxdo for manipulating X11 via simulated
10122 input. (Note that this is mostly a legacy library; you may wish to look at
10123 python-xdo for newer bindings.)")
10124 (license license:bsd-3)))
10125
10126 (define-public python2-xdo
10127 (package-with-python2 python-xdo))
10128
10129 (define-public python-mako
10130 (package
10131 (name "python-mako")
10132 (version "1.1.2")
10133 (source
10134 (origin
10135 (method url-fetch)
10136 (uri (pypi-uri "Mako" version))
10137 (sha256
10138 (base32
10139 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10140 (build-system python-build-system)
10141 (arguments
10142 `(#:phases (modify-phases %standard-phases
10143 (replace 'check
10144 (lambda* (#:key tests? #:allow-other-keys)
10145 (if tests?
10146 (invoke "nosetests" "-v")
10147 (format #t "test suite not run~%"))
10148 #t)))))
10149 (propagated-inputs
10150 `(("python-markupsafe" ,python-markupsafe)))
10151 (native-inputs
10152 `(("python-mock" ,python-mock)
10153 ("python-nose" ,python-nose)))
10154 (home-page "https://www.makotemplates.org/")
10155 (synopsis "Templating language for Python")
10156 (description "Mako is a templating language for Python that compiles
10157 templates into Python modules.")
10158 (license license:expat)))
10159
10160 (define-public python2-mako
10161 (package-with-python2 python-mako))
10162
10163 (define-public python-waitress
10164 (package
10165 (name "python-waitress")
10166 (version "1.1.0")
10167 (source
10168 (origin
10169 (method url-fetch)
10170 (uri (pypi-uri "waitress" version))
10171 (patches (search-patches "python-waitress-fix-tests.patch"))
10172 (sha256
10173 (base32
10174 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10175 (build-system python-build-system)
10176 (home-page "https://github.com/Pylons/waitress")
10177 (synopsis "Waitress WSGI server")
10178 (description "Waitress is meant to be a production-quality pure-Python WSGI
10179 server with very acceptable performance.")
10180 (license license:zpl2.1)))
10181
10182 (define-public python2-waitress
10183 (package-with-python2 python-waitress))
10184
10185 (define-public python-whichcraft
10186 (package
10187 (name "python-whichcraft")
10188 (version "0.6.1")
10189 (source
10190 (origin
10191 (method url-fetch)
10192 (uri (pypi-uri "whichcraft" version))
10193 (sha256
10194 (base32
10195 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10196 (build-system python-build-system)
10197 (native-inputs
10198 `(("python-pytest" ,python-pytest)))
10199 (home-page "https://github.com/pydanny/whichcraft")
10200 (synopsis "Cross-platform cross-python shutil.which functionality")
10201 (description
10202 "This package provides a shim of the shutil.which function that's
10203 designed to work across multiple versions of Python.")
10204 (license license:bsd-3)))
10205
10206 (define-public python-cookiecutter
10207 (package
10208 (name "python-cookiecutter")
10209 (version "1.6.0")
10210 (source
10211 (origin
10212 (method url-fetch)
10213 (uri (pypi-uri "cookiecutter" version))
10214 (sha256
10215 (base32
10216 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10217 (build-system python-build-system)
10218 (native-inputs
10219 `(("python-freezegun" ,python-freezegun)
10220 ("python-pytest" ,python-pytest)
10221 ("python-pytest-catchlog" ,python-pytest-catchlog)
10222 ("python-pytest-cov" ,python-pytest-cov)
10223 ("python-pytest-mock" ,python-pytest-mock)))
10224 (propagated-inputs
10225 `(("python-binaryornot" ,python-binaryornot)
10226 ("python-click" ,python-click)
10227 ("python-future" ,python-future)
10228 ("python-jinja2" ,python-jinja2)
10229 ("python-jinja2-time" ,python-jinja2-time)
10230 ("python-poyo" ,python-poyo)
10231 ("python-requests" ,python-requests)
10232 ("python-whichcraft" ,python-whichcraft)))
10233 (home-page "https://github.com/audreyr/cookiecutter")
10234 (synopsis
10235 "Command-line utility that creates projects from project templates")
10236 (description
10237 "This package provides a command-line utility that creates projects from
10238 project templates, e.g. creating a Python package project from a Python package
10239 project template.")
10240 (license license:bsd-3)))
10241
10242 (define-public python-pyquery
10243 (package
10244 (name "python-pyquery")
10245 (version "1.2.17")
10246 (source
10247 (origin
10248 (method url-fetch)
10249 (uri (pypi-uri "pyquery" version))
10250 (sha256
10251 (base32
10252 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10253 (build-system python-build-system)
10254 (native-inputs
10255 `(("python-webob" ,python-webob)
10256 ("python-webtest" ,python-webtest)))
10257 (propagated-inputs
10258 `(("python-lxml" ,python-lxml)
10259 ("python-cssselect" ,python-cssselect)))
10260 (home-page "https://github.com/gawel/pyquery")
10261 (synopsis "Make jQuery-like queries on xml documents")
10262 (description "pyquery allows you to make jQuery queries on xml documents.
10263 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10264 fast xml and html manipulation.")
10265 (license license:bsd-3)))
10266
10267 (define-public python-anyjson
10268 (package
10269 (name "python-anyjson")
10270 (version "0.3.3")
10271 (source
10272 (origin
10273 (method url-fetch)
10274 (uri (pypi-uri "anyjson" version))
10275 (sha256
10276 (base32
10277 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10278 (build-system python-build-system)
10279 (arguments
10280 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10281 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10282 ;; whatever) so this transformation needs to be done before the tests
10283 ;; can be run. Maybe we could add a build step to transform beforehand
10284 ;; but it could be annoying/difficult.
10285 ;; We can enable tests for the Python 2 version, though, and do below.
10286 #:tests? #f))
10287 (home-page "https://bitbucket.org/runeh/anyjson/")
10288 (synopsis
10289 "Wraps best available JSON implementation in a common interface")
10290 (description
10291 "Anyjson loads whichever is the fastest JSON module installed
10292 and provides a uniform API regardless of which JSON implementation is used.")
10293 (license license:bsd-3)
10294 (properties `((python2-variant . ,(delay python2-anyjson))))))
10295
10296 (define-public python2-anyjson
10297 (let ((anyjson (package-with-python2
10298 (strip-python2-variant python-anyjson))))
10299 (package
10300 (inherit anyjson)
10301 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10302 #:tests? #t
10303 ,@(package-arguments anyjson)))
10304 (native-inputs `(("python2-nose" ,python2-nose))))))
10305
10306 (define-public python-amqp
10307 (package
10308 (name "python-amqp")
10309 (version "2.3.2")
10310 (source
10311 (origin
10312 (method url-fetch)
10313 (uri (pypi-uri "amqp" version))
10314 (sha256
10315 (base32
10316 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10317 (build-system python-build-system)
10318 (native-inputs
10319 `(("python-case" ,python-case)
10320 ("python-pytest-sugar" ,python-pytest-sugar)
10321 ("python-mock" ,python-mock)))
10322 (propagated-inputs
10323 `(("python-vine" ,python-vine)))
10324 (home-page "https://github.com/celery/py-amqp")
10325 (synopsis
10326 "Low-level AMQP client for Python (fork of amqplib)")
10327 (description
10328 "This is a fork of amqplib which was originally written by Barry Pederson.
10329 It is maintained by the Celery project, and used by kombu as a pure python
10330 alternative when librabbitmq is not available.")
10331 (license license:lgpl2.1+)
10332 (properties `((python2-variant . ,(delay python2-amqp))))))
10333
10334 (define-public python2-amqp
10335 (let ((amqp (package-with-python2
10336 (strip-python2-variant python-amqp))))
10337 (package
10338 (inherit amqp)
10339 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10340 ;; unmaintained. Weirdly, does not do this on the python 3
10341 ;; version?
10342 #:tests? #f
10343 ,@(package-arguments amqp))))))
10344
10345 (define-public python-txamqp
10346 (package
10347 (name "python-txamqp")
10348 (version "0.8.2")
10349 (source
10350 (origin
10351 (method url-fetch)
10352 (uri (pypi-uri "txAMQP" version))
10353 (sha256
10354 (base32
10355 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10356 (build-system python-build-system)
10357 (propagated-inputs
10358 `(("python-six" ,python-six)
10359 ("python-twisted" ,python-twisted)))
10360 (home-page "https://github.com/txamqp/txamqp")
10361 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10362 (description
10363 "This package provides a Python library for communicating with AMQP peers
10364 and brokers using the asynchronous networking framework Twisted. It contains
10365 all the necessary code to connect, send and receive messages to/from an
10366 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10367 also includes support for using Thrift RPC over AMQP in Twisted
10368 applications.")
10369 (license license:asl2.0)))
10370
10371 (define-public python2-txamqp
10372 (package-with-python2 python-txamqp))
10373
10374 (define-public python-kombu
10375 (package
10376 (name "python-kombu")
10377 (version "4.2.2")
10378 (source
10379 (origin
10380 (method url-fetch)
10381 (uri (pypi-uri "kombu" version))
10382 (sha256
10383 (base32
10384 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10385 (build-system python-build-system)
10386 (native-inputs
10387 `(("python-mock" ,python-mock)
10388 ("python-case" ,python-case)
10389 ("python-pyro4" ,python-pyro4)
10390 ("python-pytest-sugar" ,python-pytest-sugar)
10391 ("python-pytz" ,python-pytz)))
10392 (propagated-inputs
10393 `(("python-anyjson" ,python-anyjson)
10394 ("python-amqp" ,python-amqp)
10395 ("python-redis" ,python-redis)))
10396 (home-page "https://kombu.readthedocs.io")
10397 (synopsis "Message passing library for Python")
10398 (description "The aim of Kombu is to make messaging in Python as easy as
10399 possible by providing an idiomatic high-level interface for the AMQ protocol,
10400 and also provide proven and tested solutions to common messaging problems.
10401 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10402 message orientation, queuing, routing, reliability and security, for which the
10403 RabbitMQ messaging server is the most popular implementation.")
10404 (license license:bsd-3)
10405 (properties `((python2-variant . ,(delay python2-kombu))))))
10406
10407 (define-public python2-kombu
10408 (let ((kombu (package-with-python2
10409 (strip-python2-variant python-kombu))))
10410 (package
10411 (inherit kombu)
10412 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10413 ;; It works fine on the python3 variant.
10414 #:tests? #f
10415 ,@(package-arguments kombu)))
10416 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10417 ,@(package-native-inputs kombu))))))
10418
10419 (define-public python-billiard
10420 (package
10421 (name "python-billiard")
10422 (version "3.5.0.5")
10423 (source
10424 (origin
10425 (method url-fetch)
10426 (uri (pypi-uri "billiard" version))
10427 (sha256
10428 (base32
10429 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10430 (build-system python-build-system)
10431 (native-inputs
10432 `(("python-case" ,python-case)
10433 ("python-pytest" ,python-pytest)))
10434 (home-page "https://github.com/celery/billiard")
10435 (synopsis
10436 "Python multiprocessing fork with improvements and bugfixes")
10437 (description
10438 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10439 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10440 pyprocessing package. This standalone variant is intended to be compatible with
10441 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10442 (license license:bsd-3)
10443 (properties `((python2-variant . ,(delay python2-billiard))))))
10444
10445 (define-public python2-billiard
10446 (let ((billiard (package-with-python2
10447 (strip-python2-variant python-billiard))))
10448 (package
10449 (inherit billiard)
10450 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10451 ("python2-mock" ,python2-mock)
10452 ,@(package-native-inputs billiard))))))
10453
10454 (define-public python-celery
10455 (package
10456 (name "python-celery")
10457 (version "4.2.1")
10458 (source
10459 (origin
10460 (method url-fetch)
10461 (uri (pypi-uri "celery" version))
10462 (sha256
10463 (base32
10464 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10465 (build-system python-build-system)
10466 (arguments
10467 '(;; TODO The tests fail with Python 3.7
10468 ;; https://github.com/celery/celery/issues/4849
10469 #:tests? #f
10470 #:phases
10471 (modify-phases %standard-phases
10472 (add-after 'unpack 'patch-requirements
10473 (lambda _
10474 (substitute* "requirements/test.txt"
10475 (("pytest>=3\\.0,<3\\.3")
10476 "pytest>=3.0"))
10477 #t)))))
10478 (native-inputs
10479 `(("python-case" ,python-case)
10480 ("python-pytest" ,python-pytest)))
10481 (propagated-inputs
10482 `(("python-pytz" ,python-pytz)
10483 ("python-billiard" ,python-billiard)
10484 ("python-kombu" ,python-kombu)))
10485 (home-page "https://celeryproject.org")
10486 (synopsis "Distributed Task Queue")
10487 (description "Celery is an asynchronous task queue/job queue based on
10488 distributed message passing. It is focused on real-time operation, but
10489 supports scheduling as well. The execution units, called tasks, are executed
10490 concurrently on a single or more worker servers using multiprocessing,
10491 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10492 synchronously (wait until ready).")
10493 (license license:bsd-3)
10494 (properties `((python2-variant . ,(delay python2-celery))))))
10495
10496 (define-public python2-celery
10497 (let ((celery (package-with-python2
10498 (strip-python2-variant python-celery))))
10499 (package
10500 (inherit celery)
10501 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10502 ("python2-mock" ,python2-mock)
10503 ,@(package-native-inputs celery))))))
10504
10505 (define-public python-translitcodec
10506 (package
10507 (name "python-translitcodec")
10508 (version "0.4.0")
10509 (source
10510 (origin
10511 (method url-fetch)
10512 (uri (pypi-uri "translitcodec" version))
10513 (sha256
10514 (base32
10515 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10516 (build-system python-build-system)
10517 (arguments
10518 `(#:tests? #f)) ; no tests provided
10519 (home-page
10520 "https://github.com/claudep/translitcodec")
10521 (synopsis
10522 "Unicode to 8-bit charset transliteration codec")
10523 (description
10524 "This package contains codecs for transliterating ISO 10646 texts into
10525 best-effort representations using smaller coded character sets (ASCII,
10526 ISO 8859, etc.).")
10527 (license license:expat)))
10528
10529 (define-public python2-translitcodec
10530 (package-with-python2 python-translitcodec))
10531
10532 (define-public python-editor
10533 (package
10534 (name "python-editor")
10535 (version "1.0.4")
10536 (source
10537 (origin
10538 (method url-fetch)
10539 (uri (pypi-uri "python-editor" version))
10540 (sha256
10541 (base32
10542 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10543 (build-system python-build-system)
10544 (arguments
10545 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10546 (home-page "https://github.com/fmoo/python-editor")
10547 (synopsis "Programmatically open an editor, capture the result")
10548 (description
10549 "python-editor is a library that provides the editor module for
10550 programmatically interfacing with your system's $EDITOR.")
10551 (license license:asl2.0)))
10552
10553 (define-public python2-editor
10554 (package-with-python2 python-editor))
10555
10556 (define-public python-vobject
10557 (package
10558 (name "python-vobject")
10559 (version "0.9.6.1")
10560 (source (origin
10561 (method url-fetch)
10562 (uri (pypi-uri "vobject" version))
10563 (sha256
10564 (base32
10565 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10566 (build-system python-build-system)
10567 (arguments
10568 '(;; The test suite relies on some non-portable Windows interfaces.
10569 #:tests? #f))
10570 (propagated-inputs
10571 `(("python-dateutil" ,python-dateutil)
10572 ("python-pyicu" ,python-pyicu)))
10573 (synopsis "Parse and generate vCard and vCalendar files")
10574 (description "Vobject is intended to be a full featured Python package for
10575 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10576 are supported and well tested. vCard 3.0 files are supported, and all data
10577 should be imported, but only a few components are understood in a sophisticated
10578 way.")
10579 (home-page "https://eventable.github.io/vobject/")
10580 (license license:asl2.0)))
10581
10582 (define-public python2-vobject
10583 (package-with-python2 python-vobject))
10584
10585 (define-public python-munkres
10586 (package
10587 (name "python-munkres")
10588 (version "1.0.8")
10589 (source (origin
10590 (method url-fetch)
10591 (uri (pypi-uri "munkres" version))
10592 (sha256
10593 (base32
10594 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10595 (build-system python-build-system)
10596 (arguments
10597 '(#:tests? #f)) ; no test suite
10598 (home-page "https://software.clapper.org/munkres/")
10599 (synopsis "Implementation of the Munkres algorithm")
10600 (description "The Munkres module provides an implementation of the Munkres
10601 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10602 useful for solving the Assignment Problem.")
10603 (license license:bsd-3)))
10604
10605 (define-public python2-munkres
10606 (package-with-python2 python-munkres))
10607
10608 (define-public python-whoosh
10609 (package
10610 (name "python-whoosh")
10611 (version "2.7.4")
10612 (source
10613 (origin
10614 (method url-fetch)
10615 (uri (pypi-uri "Whoosh" version))
10616 (sha256
10617 (base32
10618 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10619 (build-system python-build-system)
10620 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10621 (native-inputs
10622 `(("python-pytest" ,python-pytest)))
10623 (home-page "https://bitbucket.org/mchaput/whoosh")
10624 (synopsis "Full text indexing, search, and spell checking library")
10625 (description
10626 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10627 checking library.")
10628 (license license:bsd-2)))
10629
10630 (define-public python2-whoosh
10631 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10632 (package (inherit whoosh)
10633 (propagated-inputs
10634 `(("python2-backport-ssl-match-hostname"
10635 ,python2-backport-ssl-match-hostname)
10636 ,@(package-propagated-inputs whoosh))))))
10637
10638 (define-public python-pathlib
10639 (package
10640 (name "python-pathlib")
10641 (version "1.0.1")
10642 (source (origin
10643 (method url-fetch)
10644 (uri (pypi-uri "pathlib" version))
10645 (sha256
10646 (base32
10647 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10648 (build-system python-build-system)
10649 ;; The tests depend on the internal "test" module, which does not provide
10650 ;; a stable interface.
10651 (arguments `(#:tests? #f))
10652 (home-page "https://pathlib.readthedocs.org/")
10653 (synopsis "Object-oriented file system paths")
10654 (description "Pathlib offers a set of classes to handle file system paths.
10655 It offers the following advantages over using string objects:
10656
10657 @enumerate
10658 @item No more cumbersome use of os and os.path functions. Everything can
10659 be done easily through operators, attribute accesses, and method calls.
10660 @item Embodies the semantics of different path types. For example,
10661 comparing Windows paths ignores casing.
10662 @item Well-defined semantics, eliminating any inconsistencies or
10663 ambiguities (forward vs. backward slashes, etc.).
10664 @end enumerate
10665
10666 Note: In Python 3.4, pathlib is now part of the standard library. For other
10667 Python versions please consider python-pathlib2 instead, which tracks the
10668 standard library module. This module (python-pathlib) isn't maintained
10669 anymore.")
10670 (license license:expat)))
10671
10672 (define-public python2-pathlib
10673 (package-with-python2 python-pathlib))
10674
10675 (define-public python2-pathlib2
10676 (package
10677 (name "python2-pathlib2")
10678 (version "2.3.5")
10679 (source (origin
10680 (method url-fetch)
10681 (uri (pypi-uri "pathlib2" version))
10682 (sha256
10683 (base32
10684 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10685 (build-system python-build-system)
10686 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10687 ;; version is 3.4 which already includes this package as part of the
10688 ;; standard library.
10689 (arguments
10690 `(#:python ,python-2))
10691 (propagated-inputs
10692 `(("python2-scandir" ,python2-scandir)
10693 ("python2-six" ,python2-six)))
10694 (home-page "https://pypi.org/project/pathlib2/")
10695 (synopsis "Object-oriented file system paths - backport of standard
10696 pathlib module")
10697 (description "The goal of pathlib2 is to provide a backport of standard
10698 pathlib module which tracks the standard library module, so all the newest
10699 features of the standard pathlib can be used also on older Python versions.
10700
10701 Pathlib offers a set of classes to handle file system paths. It offers the
10702 following advantages over using string objects:
10703
10704 @enumerate
10705 @item No more cumbersome use of os and os.path functions. Everything can
10706 be done easily through operators, attribute accesses, and method calls.
10707 @item Embodies the semantics of different path types. For example,
10708 comparing Windows paths ignores casing.
10709 @item Well-defined semantics, eliminating any inconsistencies or
10710 ambiguities (forward vs. backward slashes, etc.).
10711 @end enumerate")
10712 (license license:expat)))
10713
10714 (define-public python2-pathlib2-bootstrap
10715 (hidden-package
10716 (package
10717 (inherit python2-pathlib2)
10718 (name "python2-pathlib2-bootstrap")
10719 (propagated-inputs
10720 `(("python2-scandir" ,python2-scandir)
10721 ("python2-six" ,python2-six-bootstrap))))))
10722
10723 (define-public python-jellyfish
10724 (package
10725 (name "python-jellyfish")
10726 (version "0.5.6")
10727 (source (origin
10728 (method url-fetch)
10729 (uri (pypi-uri "jellyfish" version))
10730 (sha256
10731 (base32
10732 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10733 (build-system python-build-system)
10734 (native-inputs
10735 `(("python-pytest" ,python-pytest)))
10736 (home-page "https://github.com/jamesturk/jellyfish")
10737 (synopsis "Approximate and phonetic matching of strings")
10738 (description "Jellyfish uses a variety of string comparison and phonetic
10739 encoding algorithms to do fuzzy string matching.")
10740 (license license:bsd-2)
10741 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10742
10743 (define-public python2-jellyfish
10744 (let ((jellyfish (package-with-python2
10745 (strip-python2-variant python-jellyfish))))
10746 (package (inherit jellyfish)
10747 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10748 ,@(package-native-inputs jellyfish))))))
10749
10750 (define-public python2-unicodecsv
10751 (package
10752 (name "python2-unicodecsv")
10753 (version "0.14.1")
10754 (source (origin
10755 (method git-fetch)
10756 ;; The test suite is not included in the PyPi release.
10757 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10758 (uri (git-reference
10759 (url "https://github.com/jdunck/python-unicodecsv")
10760 (commit version)))
10761 (file-name (git-file-name name version))
10762 (sha256
10763 (base32
10764 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10765 (build-system python-build-system)
10766 (arguments
10767 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10768 #:python ,python-2))
10769 (native-inputs
10770 `(("python2-unittest2" ,python2-unittest2)))
10771 (home-page "https://github.com/jdunck/python-unicodecsv")
10772 (synopsis "Unicode CSV module for Python 2")
10773 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10774 module, adding support for Unicode strings.")
10775 (license license:bsd-2)))
10776
10777 (define-public python-rarfile
10778 (package
10779 (name "python-rarfile")
10780 (version "2.8")
10781 (source (origin
10782 (method url-fetch)
10783 (uri (pypi-uri "rarfile" version))
10784 (sha256
10785 (base32
10786 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10787 (build-system python-build-system)
10788 (arguments
10789 '(#:phases
10790 (modify-phases %standard-phases
10791 (replace 'check
10792 ;; Many tests fail, but the installation proceeds.
10793 (lambda _ (invoke "make" "-C" "test" "test"))))))
10794 (native-inputs
10795 `(("which" ,which))) ; required for tests
10796 (propagated-inputs
10797 `(("libarchive" ,libarchive)))
10798 (home-page "https://github.com/markokr/rarfile")
10799 (synopsis "RAR archive reader for Python")
10800 (description "This is Python module for RAR archive reading. The interface
10801 is made as zipfile like as possible.")
10802 (license license:isc)))
10803
10804 (define-public python2-rarfile
10805 (package-with-python2 python-rarfile))
10806
10807 (define-public python-magic
10808 (package
10809 (name "python-magic")
10810 (version "0.4.15")
10811 (source
10812 (origin
10813 (method url-fetch)
10814 (uri (pypi-uri "python-magic" version))
10815 (sha256
10816 (base32
10817 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10818 (file-name (string-append name "-" version "-checkout"))))
10819 (build-system python-build-system)
10820 (arguments
10821 ;; The tests are unreliable, so don't run them. The tests fail
10822 ;; under Python3 because they were written for Python2 and
10823 ;; contain import statements that do not work in Python3. One of
10824 ;; the tests fails under Python2 because its assertions are
10825 ;; overly stringent; it relies on comparing output strings which
10826 ;; are brittle and can change depending on the version of
10827 ;; libmagic being used and the system on which the test is
10828 ;; running. In my case, under GuixSD 0.10.0, only one test
10829 ;; failed, and it seems to have failed only because the version
10830 ;; of libmagic that is packaged in Guix outputs a slightly
10831 ;; different (but not wrong) string than the one that the test
10832 ;; expected.
10833 '(#:tests? #f
10834 #:phases (modify-phases %standard-phases
10835 ;; Replace a specific method call with a hard-coded
10836 ;; path to the necessary libmagic.so file in the
10837 ;; store. If we don't do this, then the method call
10838 ;; will fail to find the libmagic.so file, which in
10839 ;; turn will cause any application using
10840 ;; python-magic to fail.
10841 (add-before 'build 'hard-code-path-to-libmagic
10842 (lambda* (#:key inputs #:allow-other-keys)
10843 (let ((file (assoc-ref inputs "file")))
10844 (substitute* "magic.py"
10845 (("ctypes.util.find_library\\('magic'\\)")
10846 (string-append "'" file "/lib/libmagic.so'")))
10847 #t)))
10848 (add-before 'install 'disable-egg-compression
10849 (lambda _
10850 (let ((port (open-file "setup.cfg" "a")))
10851 (display "\n[easy_install]\nzip_ok = 0\n"
10852 port)
10853 (close-port port)
10854 #t))))))
10855 (inputs
10856 ;; python-magic needs to be able to find libmagic.so.
10857 `(("file" ,file)))
10858 (home-page
10859 "https://github.com/ahupp/python-magic")
10860 (synopsis
10861 "File type identification using libmagic")
10862 (description
10863 "This module uses ctypes to access the libmagic file type
10864 identification library. It makes use of the local magic database and
10865 supports both textual and MIME-type output. Note that this module and
10866 the python-file module both provide a \"magic.py\" file; these two
10867 modules, which are different and were developed separately, both serve
10868 the same purpose: to provide Python bindings for libmagic.")
10869 (license license:expat)))
10870
10871 (define-public python2-magic
10872 (package-with-python2 python-magic))
10873
10874 (define-public python2-s3cmd
10875 (package
10876 (name "python2-s3cmd")
10877 (version "1.6.1")
10878 (source
10879 (origin
10880 (method url-fetch)
10881 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10882 "s3cmd-" version ".tar.gz"))
10883 (sha256
10884 (base32
10885 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10886 (build-system python-build-system)
10887 (arguments
10888 ;; s3cmd is written for python2 only and contains no tests.
10889 `(#:python ,python-2
10890 #:tests? #f))
10891 (propagated-inputs
10892 `(("python2-dateutil" ,python2-dateutil)
10893 ;; The python-file package also provides a magic.py module.
10894 ;; This is an unfortunate state of affairs; however, s3cmd
10895 ;; fails to install if it cannot find specifically the
10896 ;; python-magic package. Thus we include it, instead of using
10897 ;; python-file. Ironically, s3cmd sometimes works better
10898 ;; without libmagic bindings at all:
10899 ;; https://github.com/s3tools/s3cmd/issues/198
10900 ("python2-magic" ,python2-magic)))
10901 (home-page "https://s3tools.org/s3cmd")
10902 (synopsis "Command line tool for S3-compatible storage services")
10903 (description
10904 "S3cmd is a command line tool for uploading, retrieving and managing data
10905 in storage services that are compatible with the Amazon Simple Storage
10906 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10907 GnuPG encryption, and more. It also supports management of Amazon's
10908 CloudFront content delivery network.")
10909 (license license:gpl2+)))
10910
10911 (define-public python-pkgconfig
10912 (package
10913 (name "python-pkgconfig")
10914 (version "1.3.1")
10915 (source
10916 (origin
10917 (method url-fetch)
10918 (uri (pypi-uri "pkgconfig" version))
10919 (sha256
10920 (base32
10921 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10922 (build-system python-build-system)
10923 (native-inputs
10924 `(("python-nose" ,python-nose)))
10925 (inputs
10926 `(("pkg-config" ,pkg-config)))
10927 (arguments
10928 `(#:phases
10929 (modify-phases %standard-phases
10930 (add-before 'build 'patch
10931 ;; Hard-code the path to pkg-config.
10932 (lambda _
10933 (substitute* "pkgconfig/pkgconfig.py"
10934 (("cmd = 'pkg-config")
10935 (string-append "cmd = '" (which "pkg-config"))))
10936 #t))
10937 (replace 'check
10938 (lambda _
10939 (invoke "nosetests" "test.py"))))))
10940 (home-page "https://github.com/matze/pkgconfig")
10941 (synopsis "Python interface for pkg-config")
10942 (description "This module provides a Python interface to pkg-config. It
10943 can be used to find all pkg-config packages, check if a package exists,
10944 check if a package meets certain version requirements, query CFLAGS and
10945 LDFLAGS and parse the output to build extensions with setup.py.")
10946 (license license:expat)))
10947
10948 (define-public python2-pkgconfig
10949 (package-with-python2 python-pkgconfig))
10950
10951 (define-public python-bz2file
10952 (package
10953 (name "python-bz2file")
10954 (version "0.98")
10955 (source
10956 (origin
10957 (method url-fetch)
10958 (uri (pypi-uri "bz2file" version))
10959 (sha256
10960 (base32
10961 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10962 (build-system python-build-system)
10963 (arguments
10964 `(#:tests? #f)) ; Tests use deprecated python modules.
10965 (home-page "https://github.com/nvawda/bz2file")
10966 (synopsis "Read and write bzip2-compressed files")
10967 (description
10968 "Bz2file is a Python library for reading and writing bzip2-compressed
10969 files. It contains a drop-in replacement for the I/O interface in the
10970 standard library's @code{bz2} module, including features from the latest
10971 development version of CPython that are not available in older releases.")
10972 (license license:asl2.0)))
10973
10974 (define-public python2-bz2file
10975 (package-with-python2 python-bz2file))
10976
10977 (define-public python-future
10978 (package
10979 (name "python-future")
10980 (version "0.17.1")
10981 (source
10982 (origin
10983 (method url-fetch)
10984 (uri (pypi-uri "future" version))
10985 (sha256
10986 (base32
10987 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
10988 (build-system python-build-system)
10989 ;; Many tests connect to the network or are otherwise flawed.
10990 ;; https://github.com/PythonCharmers/python-future/issues/210
10991 (arguments
10992 `(#:tests? #f))
10993 (home-page "https://python-future.org")
10994 (synopsis "Single-source support for Python 3 and 2")
10995 (description
10996 "@code{python-future} is the missing compatibility layer between Python 2 and
10997 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10998 to support both Python 2 and Python 3 with minimal overhead.")
10999 (license license:expat)))
11000
11001 (define-public python2-future
11002 (package-with-python2 python-future))
11003
11004 (define-public python-cysignals
11005 (package
11006 (name "python-cysignals")
11007 (version "1.9.0")
11008 (source
11009 (origin
11010 (method url-fetch)
11011 (uri (pypi-uri "cysignals" version))
11012 (sha256
11013 (base32
11014 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11015 (build-system python-build-system)
11016 (native-inputs
11017 `(("python-cython" ,python-cython)
11018 ("python-sphinx" ,python-sphinx)))
11019 (inputs
11020 `(("pari-gp" ,pari-gp)))
11021 (arguments
11022 `(#:modules ((guix build python-build-system)
11023 ((guix build gnu-build-system) #:prefix gnu:)
11024 (guix build utils))
11025 ;; FIXME: Tests are executed after installation and currently fail
11026 ;; when not installing into standard locations; the author is working
11027 ;; on a fix.
11028 #:tests? #f
11029 #:phases
11030 (modify-phases %standard-phases
11031 (add-before
11032 'build 'configure
11033 (assoc-ref gnu:%standard-phases 'configure)))))
11034 (home-page
11035 "https://github.com/sagemath/cysignals")
11036 (synopsis
11037 "Handling of interrupts and signals for Cython")
11038 (description
11039 "The cysignals package provides mechanisms to handle interrupts (and
11040 other signals and errors) in Cython code, using two related approaches,
11041 for mixed Cython/Python code or external C libraries and pure Cython code,
11042 respectively.")
11043 (license license:lgpl3+)))
11044
11045 (define-public python2-cysignals
11046 (package-with-python2 python-cysignals))
11047
11048 (define-public python2-shedskin
11049 (package
11050 (name "python2-shedskin")
11051 (version "0.9.4")
11052 (source
11053 (origin
11054 (method url-fetch)
11055 (uri (string-append "https://github.com/shedskin/shedskin/"
11056 "releases/download/v" version
11057 "/shedskin-" version ".tgz"))
11058 (sha256
11059 (base32
11060 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11061 (build-system python-build-system)
11062 (arguments
11063 `(#:python ,python-2
11064 #:phases (modify-phases %standard-phases
11065 (add-after 'unpack 'fix-resulting-include-libs
11066 (lambda* (#:key inputs #:allow-other-keys)
11067 (let ((libgc (assoc-ref inputs "libgc"))
11068 (pcre (assoc-ref inputs "pcre")))
11069 (substitute* "shedskin/makefile.py"
11070 (("variable == 'CCFLAGS':[ ]*")
11071 (string-append "variable == 'CCFLAGS':\n"
11072 " line += ' -I " pcre "/include"
11073 " -I " libgc "/include'"))
11074 (("variable == 'LFLAGS':[ ]*")
11075 (string-append "variable == 'LFLAGS':\n"
11076 " line += ' -L" pcre "/lib"
11077 " -L " libgc "/lib'")))
11078 #t))))))
11079 (inputs `(("pcre" ,pcre)
11080 ("libgc" ,libgc)))
11081 (home-page "https://shedskin.github.io/")
11082 (synopsis "Experimental Python-2 to C++ Compiler")
11083 (description (string-append "This is an experimental compiler for a subset of
11084 Python. It generates C++ code and a Makefile."))
11085 (license (list license:gpl3 license:bsd-3 license:expat))))
11086
11087 (define-public python2-rope
11088 (package
11089 (name "python2-rope")
11090 (version "0.11.0")
11091 (source
11092 (origin
11093 (method url-fetch)
11094 (uri (pypi-uri "rope" version))
11095 (sha256
11096 (base32
11097 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11098 (arguments
11099 ;; Rope has only partial python3 support, see `python-rope'
11100 `(#:python ,python-2))
11101 (build-system python-build-system)
11102 (native-inputs
11103 `(("python2-unittest2" ,python2-unittest2)))
11104 (home-page "https://github.com/python-rope/rope")
11105 (synopsis "Refactoring library for Python")
11106 (description "Rope is a refactoring library for Python. It facilitates
11107 the renaming, moving and extracting of attributes, functions, modules, fields
11108 and parameters in Python 2 source code. These refactorings can also be applied
11109 to occurrences in strings and comments.")
11110 (license license:gpl2)))
11111
11112 (define-public python-rope
11113 (package
11114 (inherit python2-rope)
11115 (name "python-rope")
11116 (arguments `(#:python ,python-wrapper
11117 ;; XXX: Only partial python3 support, results in some failing
11118 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11119 #:tests? #f))
11120 (properties `((python2-variant . ,(delay python2-rope))))))
11121
11122 (define-public python-py3status
11123 (package
11124 (name "python-py3status")
11125 (version "3.21")
11126 (source
11127 (origin
11128 (method url-fetch)
11129 (uri (pypi-uri "py3status" version))
11130 (sha256
11131 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11132 (build-system python-build-system)
11133 (inputs
11134 `(("file" ,file)))
11135 (arguments
11136 '(#:phases
11137 (modify-phases %standard-phases
11138 ;; 'file' is used for detection of configuration file encoding
11139 ;; let's make link the dependency to particular input
11140 (add-before 'build 'patch-file-path
11141 (lambda* (#:key inputs #:allow-other-keys)
11142 (let ((file-path (assoc-ref inputs "file")))
11143 (substitute* "py3status/parse_config.py"
11144 (("\\[\"file\", \"-b\"")
11145 (string-append "['" file-path "/bin/file', '-b'")))
11146 #t))))
11147 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11148 (home-page "https://github.com/ultrabug/py3status")
11149 (synopsis "Extensible i3status wrapper written in Python")
11150 (description "py3status is an i3status wrapper which extends i3status
11151 functionality in a modular way, allowing you to extend your panel with your
11152 own code, responding to click events and updating clock every second.")
11153 (license license:bsd-3)))
11154
11155 (define-public python-tblib
11156 (package
11157 (name "python-tblib")
11158 (version "1.6.0")
11159 (source (origin
11160 (method url-fetch)
11161 (uri (pypi-uri "tblib" version))
11162 (sha256
11163 (base32
11164 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11165 (build-system python-build-system)
11166 (arguments
11167 `(#:phases
11168 (modify-phases %standard-phases
11169 (replace 'check
11170 (lambda _
11171 ;; Upstream runs tests after installation and the package itself
11172 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11173 ;; found.
11174 (setenv "PYTHONPATH"
11175 (string-append (getcwd) "/build/lib:"
11176 (getenv "PYTHONPATH")))
11177 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11178 (native-inputs
11179 `(("python-pytest" ,python-pytest)
11180 ("python-six" ,python-six)))
11181 (home-page "https://github.com/ionelmc/python-tblib")
11182 (synopsis "Traceback serialization library")
11183 (description
11184 "Traceback serialization allows you to:
11185
11186 @enumerate
11187 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11188 different processes. This allows better error handling when running code over
11189 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11190
11191 @item Parse traceback strings and raise with the parsed tracebacks.
11192 @end enumerate\n")
11193 (license license:bsd-3)))
11194
11195 (define-public python2-tblib
11196 (package-with-python2 python-tblib))
11197
11198 (define-public python-greenlet
11199 (package
11200 (name "python-greenlet")
11201 (version "0.4.15")
11202 (source (origin
11203 (method url-fetch)
11204 (uri (pypi-uri "greenlet" version))
11205 (sha256
11206 (base32
11207 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
11208 (build-system python-build-system)
11209 (home-page "https://greenlet.readthedocs.io/")
11210 (synopsis "Lightweight in-process concurrent programming")
11211 (description
11212 "Greenlet package is a spin-off of Stackless, a version of CPython
11213 that supports micro-threads called \"tasklets\". Tasklets run
11214 pseudo-concurrently (typically in a single or a few OS-level threads) and
11215 are synchronized with data exchanges on \"channels\".")
11216 (license (list license:psfl license:expat))))
11217
11218 (define-public python2-greenlet
11219 (package-with-python2 python-greenlet))
11220
11221 (define-public python-objgraph
11222 (package
11223 (name "python-objgraph")
11224 (version "3.4.1")
11225 (source
11226 (origin
11227 (method url-fetch)
11228 (uri (pypi-uri "objgraph" version))
11229 (sha256
11230 (base32
11231 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11232 (build-system python-build-system)
11233 (propagated-inputs
11234 `(("python-graphviz" ,python-graphviz)))
11235 (native-inputs
11236 `(("python-mock" ,python-mock)
11237 ("graphviz" ,graphviz)))
11238 (home-page "https://mg.pov.lt/objgraph/")
11239 (synopsis "Draw Python object reference graphs with graphviz")
11240 (description
11241 "This package provides tools to draw Python object reference graphs with
11242 graphviz.")
11243 (license license:expat)))
11244
11245 (define-public python2-objgraph
11246 (package-with-python2 python-objgraph))
11247
11248 (define-public python-gevent
11249 (package
11250 (name "python-gevent")
11251 (version "20.5.0")
11252 (source (origin
11253 (method url-fetch)
11254 (uri (pypi-uri "gevent" version))
11255 (sha256
11256 (base32
11257 "1yppsrs0ccld9j9zfbsd0bxb987b2zkh2ar7whjxcrqzpkvg3iqx"))
11258 (modules '((guix build utils)))
11259 (snippet
11260 '(begin
11261 ;; unbunding libev and c-ares
11262 (delete-file-recursively "deps")
11263 #t))))
11264 (build-system python-build-system)
11265 (arguments
11266 `(#:modules ((ice-9 ftw)
11267 (ice-9 match)
11268 (srfi srfi-26)
11269 (guix build utils)
11270 (guix build python-build-system))
11271 #:phases (modify-phases %standard-phases
11272 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11273 (lambda _
11274 (substitute* "src/gevent/subprocess.py"
11275 (("/bin/sh") (which "sh")))
11276 (for-each (lambda (file)
11277 (substitute* file
11278 (("/bin/sh") (which "sh"))
11279 (("/bin/true") (which "true"))))
11280 (find-files "src/greentest" "\\.py$"))
11281 #t))
11282 (add-before 'build 'do-not-use-bundled-sources
11283 (lambda _
11284 (setenv "GEVENTSETUP_EMBED" "0")
11285
11286 ;; Prevent building bundled libev.
11287 (substitute* "setup.py"
11288 (("run_make=_BUILDING")
11289 "run_make=False"))
11290 #t))
11291 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11292 (lambda* (#:key inputs #:allow-other-keys)
11293 (let ((greenlet (string-append
11294 (assoc-ref inputs "python-greenlet")
11295 "/include")))
11296 (match (scandir greenlet
11297 (lambda (item)
11298 (string-prefix? "python" item)))
11299 ((python)
11300 (setenv "C_INCLUDE_PATH"
11301 (string-append greenlet "/" python ":"
11302 (or (getenv "C_INCLUDE_PATH")
11303 ""))))))
11304 #t))
11305 (add-before 'check 'pretend-to-be-CI
11306 (lambda _
11307 ;; A few tests are skipped due to network constraints or
11308 ;; get longer timeouts when running in a CI environment.
11309 ;; Piggy-back on that, as we need the same adjustments.
11310 (setenv "TRAVIS" "1")
11311 (setenv "APPVEYOR" "1")
11312 #t))
11313 (add-before 'check 'adjust-tests
11314 (lambda _
11315 (let ((disabled-tests
11316 '(;; These tests rely on networking which is not
11317 ;; available in the build container.
11318 "test_urllib2net.py"
11319 "test__server.py"
11320 "test__server_pywsgi.py"
11321 "test_socket.py"
11322 "test__socket.py"
11323 "test__socket_ssl.py"
11324 "test__socket_dns.py"
11325 "test__socket_dns6.py"
11326 "test___example_servers.py"
11327 "test__getaddrinfo_import.py"
11328 "test__examples.py"
11329 "test_httplib.py"
11330 "test_https.py"
11331 "test_urllib2_localnet.py"
11332 "test_ssl.py"
11333 "test__ssl.py"
11334 ;; XXX: These tests borrow functionality from the
11335 ;; Python builtin 'test' module, but it is not
11336 ;; installed with the Guix Python distribution.
11337 "test_smtpd.py"
11338 "test_wsgiref.py"
11339 "test_urllib2.py"
11340 "test_thread.py"
11341 "test_threading.py"
11342 "test__threading_2.py"
11343 ;; These tests rely on KeyboardInterrupts which do not
11344 ;; work inside the build container for some reason
11345 ;; (lack of controlling terminal?).
11346 "test_subprocess.py"
11347 "test__issues461_471.py"
11348 ;; TODO: Patch out the tests that use getprotobyname, etc
11349 ;; instead of disabling all the tests from these files.
11350 "test__resolver_dnspython.py"
11351 "test__doctests.py"
11352 "test__all__.py"
11353 "test___config.py"
11354 "test__execmodules.py")))
11355 (call-with-output-file "skipped_tests.txt"
11356 (lambda (port)
11357 (format port "~a~%"
11358 (string-join disabled-tests "\n"))))
11359 #t)))
11360 (replace 'check
11361 (lambda _
11362 ;; Make sure the build directory is on PYTHONPATH.
11363 (setenv "PYTHONPATH"
11364 (string-append
11365 (getenv "PYTHONPATH") ":"
11366 (getcwd) "/build/"
11367 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11368
11369 ;; Use the build daemons configured number of workers.
11370 (setenv "NWORKERS" (number->string (parallel-job-count)))
11371
11372 (invoke "python" "-m" "gevent.tests" "--config"
11373 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11374 (propagated-inputs
11375 `(("python-greenlet" ,python-greenlet)
11376 ("python-objgraph" ,python-objgraph)))
11377 (native-inputs
11378 `(("python-six" ,python-six)
11379
11380 ;; For tests.
11381 ("python-dnspython" ,python-dnspython)
11382 ("python-psutil" ,python-psutil)
11383 ("python-zope.event" ,python-zope-event)
11384 ("python-zope.interface" ,python-zope-interface)))
11385 (inputs
11386 `(("c-ares" ,c-ares)
11387 ("libev" ,libev)))
11388 (home-page "http://www.gevent.org/")
11389 (synopsis "Coroutine-based network library")
11390 (description
11391 "gevent is a coroutine-based Python networking library that uses greenlet
11392 to provide a high-level synchronous API on top of the libev event loop.")
11393 (license license:expat)
11394 (properties `((python2-variant . ,(delay python2-gevent))))))
11395
11396 (define-public python2-gevent
11397 (let ((base (package-with-python2
11398 (strip-python2-variant python-gevent))))
11399 (package
11400 (inherit base)
11401 (native-inputs `(,@(package-native-inputs base)
11402 ("python-mock" ,python2-mock))))))
11403
11404 (define-public python-fastimport
11405 (package
11406 (name "python-fastimport")
11407 (version "0.9.6")
11408 (source
11409 (origin
11410 (method url-fetch)
11411 (uri (pypi-uri "fastimport" version))
11412 (sha256
11413 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11414 (build-system python-build-system)
11415 (home-page "https://github.com/jelmer/python-fastimport")
11416 (synopsis "VCS fastimport parser and generator in Python")
11417 (description "This package provides a parser for and generator of the Git
11418 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11419 format.")
11420 (license license:gpl2+)))
11421
11422 (define-public python2-fastimport
11423 (package-with-python2 python-fastimport))
11424
11425 (define-public python-twisted
11426 (package
11427 (name "python-twisted")
11428 (version "19.7.0")
11429 (source (origin
11430 (method url-fetch)
11431 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11432 (sha256
11433 (base32
11434 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11435 (build-system python-build-system)
11436 (arguments
11437 '(#:tests? #f)) ; FIXME: some tests fail
11438 (propagated-inputs
11439 `(("python-zope-interface" ,python-zope-interface)
11440 ("python-pyhamcrest" ,python-pyhamcrest)
11441 ("python-incremental" ,python-incremental)
11442 ("python-hyperlink" ,python-hyperlink)
11443 ("python-constantly" ,python-constantly)
11444 ("python-automat" ,python-automat)))
11445 (home-page "https://twistedmatrix.com/")
11446 (synopsis "Asynchronous networking framework written in Python")
11447 (description
11448 "Twisted is an extensible framework for Python programming, with special
11449 focus on event-based network programming and multiprotocol integration.")
11450 (license license:expat)))
11451
11452 (define-public python2-twisted
11453 (package-with-python2 python-twisted))
11454
11455 (define-public python-pika
11456 (package
11457 (name "python-pika")
11458 (version "0.12.0")
11459 (source
11460 (origin
11461 (method url-fetch)
11462 (uri (pypi-uri "pika" version))
11463 (sha256
11464 (base32
11465 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11466 (build-system python-build-system)
11467 (native-inputs
11468 `(("python-pyev" ,python-pyev)
11469 ("python-tornado" ,python-tornado)
11470 ("python-twisted" ,python-twisted)))
11471 (home-page "https://pika.readthedocs.org")
11472 (synopsis "Pure Python AMQP Client Library")
11473 (description
11474 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11475 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11476 network support library.")
11477 (license license:bsd-3)))
11478
11479 (define-public python2-pika
11480 (package-with-python2 python-pika))
11481
11482 (define-public python-ply
11483 (package
11484 (name "python-ply")
11485 (version "3.11")
11486 (source
11487 (origin
11488 (method url-fetch)
11489 (uri (pypi-uri "ply" version))
11490 (sha256
11491 (base32
11492 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11493 (build-system python-build-system)
11494 (home-page "http://www.dabeaz.com/ply/")
11495 (synopsis "Python Lex & Yacc")
11496 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11497 It uses LR parsing and does extensive error checking.")
11498 (license license:bsd-3)))
11499
11500 (define-public python-tabulate
11501 (package
11502 (name "python-tabulate")
11503 (version "0.7.7")
11504 (source (origin
11505 (method url-fetch)
11506 (uri (pypi-uri "tabulate" version))
11507 (sha256
11508 (base32
11509 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11510 (build-system python-build-system)
11511 (arguments
11512 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11513 ;; and the latest release is not tagged in the upstream repository.
11514 '(#:tests? #f))
11515 (home-page "https://bitbucket.org/astanin/python-tabulate")
11516 (synopsis "Pretty-print tabular data")
11517 (description
11518 "Tabulate is a library and command-line utility to pretty-print tabular
11519 data in Python.")
11520 (license license:expat)))
11521
11522 (define-public python2-tabulate
11523 (package-with-python2 python-tabulate))
11524
11525 (define-public python-kazoo
11526 (package
11527 (name "python-kazoo")
11528 (version "2.4.0")
11529 (source
11530 (origin
11531 (method url-fetch)
11532 (uri (pypi-uri "kazoo" version))
11533 (sha256
11534 (base32
11535 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11536 (build-system python-build-system)
11537 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11538 (propagated-inputs
11539 `(("python-six" ,python-six)))
11540 (home-page "https://kazoo.readthedocs.org")
11541 (synopsis "High-level Zookeeper client library")
11542 (description
11543 "Kazoo is a Python client library for the Apache Zookeeper distributed
11544 application service. It is designed to be easy to use and to avoid common
11545 programming errors.")
11546 (license license:asl2.0)))
11547
11548 (define-public python2-kazoo
11549 (package-with-python2 python-kazoo))
11550
11551 (define-public python-pykafka
11552 (package
11553 (name "python-pykafka")
11554 (version "2.4.0")
11555 (source (origin
11556 (method url-fetch)
11557 (uri (pypi-uri "pykafka" version))
11558 (sha256
11559 (base32
11560 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11561 (build-system python-build-system)
11562 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11563 (propagated-inputs
11564 `(("python-gevent" ,python-gevent)
11565 ("python-kazoo" ,python-kazoo)
11566 ("python-tabulate" ,python-tabulate)))
11567 (inputs
11568 `(("librdkafka" ,librdkafka)))
11569 (home-page "https://pykafka.readthedocs.io/")
11570 (synopsis "Apache Kafka client for Python")
11571 (description
11572 "PyKafka is a client for the Apache Kafka distributed messaging system.
11573 It includes Python implementations of Kafka producers and consumers, which
11574 are optionally backed by a C extension built on librdkafka.")
11575 (license license:asl2.0)))
11576
11577 (define-public python2-pykafka
11578 (package-with-python2 python-pykafka))
11579
11580 (define-public python-wcwidth
11581 (package
11582 (name "python-wcwidth")
11583 (version "0.1.8")
11584 (source (origin
11585 (method url-fetch)
11586 (uri (pypi-uri "wcwidth" version))
11587 (sha256
11588 (base32
11589 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11590 (build-system python-build-system)
11591 (home-page "https://github.com/jquast/wcwidth")
11592 (synopsis "Measure number of terminal column cells of wide-character codes")
11593 (description "Wcwidth measures the number of terminal column cells of
11594 wide-character codes. It is useful for those implementing a terminal emulator,
11595 or programs that carefully produce output to be interpreted by one. It is a
11596 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11597 specified in POSIX.1-2001 and POSIX.1-2008.")
11598 (license license:expat)))
11599
11600 (define-public python2-wcwidth
11601 (package-with-python2 python-wcwidth))
11602
11603 (define-public python2-jsonrpclib
11604 (package
11605 (name "python2-jsonrpclib")
11606 (version "0.1.7")
11607 (source (origin
11608 (method url-fetch)
11609 (uri (pypi-uri "jsonrpclib" version))
11610 (sha256
11611 (base32
11612 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11613 (build-system python-build-system)
11614 (arguments
11615 `(#:tests? #f
11616 #:python ,python-2))
11617 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11618 (synopsis "Implementation of JSON-RPC specification for Python")
11619 (description
11620 "This library is an implementation of the JSON-RPC specification.
11621 It supports both the original 1.0 specification, as well as the
11622 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11623 etc.")
11624 (license license:asl2.0)))
11625
11626 (define-public python-chai
11627 (package
11628 (name "python-chai")
11629 (version "1.1.2")
11630 (source (origin
11631 (method url-fetch)
11632 (uri (pypi-uri "chai" version))
11633 (sha256
11634 (base32
11635 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11636 (build-system python-build-system)
11637 (home-page "https://github.com/agoragames/chai")
11638 (synopsis "Mocking framework for Python")
11639 (description
11640 "Chai provides an api for mocking, stubbing and spying your python
11641 objects, patterned after the Mocha library for Ruby.")
11642 (license license:bsd-3)))
11643
11644 (define-public python2-chai
11645 (package-with-python2 python-chai))
11646
11647 (define-public python-inflection
11648 (package
11649 (name "python-inflection")
11650 (version "0.3.1")
11651 (source
11652 (origin (method url-fetch)
11653 (uri (pypi-uri "inflection" version))
11654 (sha256
11655 (base32
11656 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11657 (build-system python-build-system)
11658 (native-inputs
11659 `(("python-pytest" ,python-pytest)))
11660 (home-page "https://github.com/jpvanhal/inflection")
11661 (synopsis "Python string transformation library")
11662 (description
11663 "Inflection is a string transformation library. It singularizes
11664 and pluralizes English words, and transforms strings from CamelCase to
11665 underscored string.")
11666 (license license:expat)))
11667
11668 (define-public python2-inflection
11669 (package-with-python2 python-inflection))
11670
11671 (define-public python-pylev
11672 (package
11673 (name "python-pylev")
11674 (version "1.3.0")
11675 (source (origin
11676 (method url-fetch)
11677 (uri (pypi-uri "pylev" version))
11678 (sha256
11679 (base32
11680 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11681 (build-system python-build-system)
11682 (home-page "https://github.com/toastdriven/pylev")
11683 (synopsis "Levenshtein distance implementation in Python")
11684 (description "Pure Python Levenshtein implementation, based off the
11685 Wikipedia code samples at
11686 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11687 (license license:bsd-3)))
11688
11689 (define-public python2-pylev
11690 (package-with-python2 python-pylev))
11691
11692 (define-public python-cleo
11693 (package
11694 (name "python-cleo")
11695 (version "0.7.6")
11696 (source (origin
11697 (method url-fetch)
11698 (uri (pypi-uri "cleo" version))
11699 (sha256
11700 (base32
11701 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11702 (build-system python-build-system)
11703 (native-inputs
11704 `( ;; For testing
11705 ("python-mock" ,python-mock)
11706 ("python-pytest-mock" ,python-pytest-mock)
11707 ("python-pytest" ,python-pytest)))
11708 (propagated-inputs
11709 `(("python-backpack" ,python-backpack)
11710 ("python-clikit" ,python-clikit)
11711 ("python-pastel" ,python-pastel)
11712 ("python-pylev" ,python-pylev)))
11713 (home-page "https://github.com/sdispater/cleo")
11714 (synopsis "Command-line arguments library for Python")
11715 (description
11716 "Cleo allows you to create command-line commands with signature in
11717 docstring and colored output.")
11718 (license license:expat)))
11719
11720 (define-public python2-cleo
11721 (package-with-python2 python-cleo))
11722
11723 (define-public python-tomlkit
11724 (package
11725 (name "python-tomlkit")
11726 (version "0.5.11")
11727 (source
11728 (origin
11729 (method url-fetch)
11730 (uri (pypi-uri "tomlkit" version))
11731 (sha256
11732 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11733 (build-system python-build-system)
11734 (native-inputs
11735 `(("python-pytest" ,python-pytest)))
11736 (home-page "https://github.com/sdispater/tomlkit")
11737 (synopsis "Style-preserving TOML library")
11738 (description
11739 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11740 preserves all comments, indentations, whitespace and internal element ordering,
11741 and makes them accessible and editable via an intuitive API. It can also
11742 create new TOML documents from scratch using the provided helpers. Part of the
11743 implementation has been adapted, improved, and fixed from Molten.")
11744 (license license:expat)))
11745
11746 (define-public python-shellingham
11747 (package
11748 (name "python-shellingham")
11749 (version "1.3.2")
11750 (source
11751 (origin
11752 (method url-fetch)
11753 (uri (pypi-uri "shellingham" version))
11754 (sha256
11755 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
11756 (build-system python-build-system)
11757 (arguments
11758 `(#:phases
11759 (modify-phases %standard-phases
11760 (add-after 'unpack 'restore-setup.py
11761 ;; setup.py will return in the next release.
11762 ;; <https://github.com/sarugaku/shellingham/issues/33>
11763 (lambda _
11764 (with-output-to-file "setup.py"
11765 (lambda _
11766 (display "from setuptools import setup\nsetup()\n")))
11767 #t)))))
11768 (home-page "https://github.com/sarugaku/shellingham")
11769 (synopsis "Tool to detect surrounding shell")
11770 (description
11771 "Shellingham detects what shell the current Python executable is
11772 running in.")
11773 (license license:isc)))
11774
11775 (define-public python-memcached
11776 (package
11777 (name "python-memcached")
11778 (version "1.59")
11779 (source
11780 (origin
11781 (method url-fetch)
11782 (uri (pypi-uri "python-memcached" version))
11783 (sha256
11784 (base32
11785 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))))
11786 (build-system python-build-system)
11787 (propagated-inputs `(("python-six" ,python-six)))
11788 (home-page
11789 "https://github.com/linsomniac/python-memcached")
11790 (synopsis "Pure python memcached client")
11791 (description
11792 "This software is a pure Python interface to the memcached memory cache
11793 daemon. It is the client side software which allows storing values in one or
11794 more, possibly remote, memcached servers.")
11795 (license license:psfl)))
11796
11797 (define-public python-clikit
11798 (package
11799 (name "python-clikit")
11800 (version "0.4.2")
11801 (source
11802 (origin
11803 (method url-fetch)
11804 (uri (pypi-uri "clikit" version))
11805 (sha256
11806 (base32
11807 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11808 (build-system python-build-system)
11809 (propagated-inputs
11810 `(("python-pastel" ,python-pastel)
11811 ("python-pylev" ,python-pylev)))
11812 (home-page "https://github.com/sdispater/clikit")
11813 (synopsis "Group of utilities to build command line interfaces")
11814 (description
11815 "CliKit is a group of utilities to build testable command line
11816 interfaces.")
11817 (properties `((python2-variant . ,(delay python2-clikit))))
11818 (license license:expat)))
11819
11820 (define-public python2-clikit
11821 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11822 (package/inherit
11823 base
11824 (propagated-inputs
11825 `(("python-enum34" ,python2-enum34)
11826 ("python-typing" ,python2-typing)
11827 ,@(package-propagated-inputs base))))))
11828
11829 (define-public python-msgpack-python
11830 (package
11831 (name "python-msgpack-python")
11832 (version "0.5.6")
11833 (source
11834 (origin
11835 (method url-fetch)
11836 (uri (pypi-uri "msgpack-python" version))
11837 (sha256
11838 (base32
11839 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11840 (build-system python-build-system)
11841 (home-page "http://msgpack.org/")
11842 (synopsis "Package to deserialize messages in MessagePack binary format")
11843 (description
11844 "MessagePack is an efficient binary serialization format. It lets you
11845 exchange data among multiple languages like JSON. But it's faster and
11846 smaller. Small integers are encoded into a single byte, and typical short
11847 strings require only one extra byte in addition to the strings themselves.")
11848 (license license:asl2.0)))
11849
11850 (define-public python-cachy
11851 (package
11852 (name "python-cachy")
11853 (version "0.3.0")
11854 (source
11855 (origin
11856 (method url-fetch)
11857 (uri (pypi-uri "cachy" version))
11858 (sha256
11859 (base32
11860 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11861 (build-system python-build-system)
11862 (arguments
11863 '(#:phases
11864 (modify-phases %standard-phases
11865 (replace 'check
11866 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11867 "pytest"))))))
11868 (native-inputs
11869 `(("memcached" ,memcached)
11870 ("python-fakeredis" ,python-fakeredis)
11871 ("python-flexmock" ,python-flexmock)
11872 ("python-pifpaf" ,python-pifpaf)
11873 ("python-pytest" ,python-pytest)))
11874 (propagated-inputs
11875 `(("python-memcached" ,python-memcached)
11876 ("python-msgpack-python" ,python-msgpack-python)
11877 ("python-redis" ,python-redis)))
11878 (home-page "https://github.com/sdispater/cachy")
11879 (synopsis "Simple yet effective caching library")
11880 (description
11881 "Cachy provides a simple yet effective caching library. A simple but
11882 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11883 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11884 (license license:expat)))
11885
11886 (define-public poetry
11887 (package
11888 (name "poetry")
11889 (version "1.0.5")
11890 ;; Poetry can only be built from source with Poetry.
11891 (source
11892 (origin
11893 (method url-fetch)
11894 (uri (pypi-uri "poetry" version))
11895 (sha256
11896 (base32
11897 "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf"))))
11898 (build-system python-build-system)
11899 (arguments
11900 `(#:tests? #f ;; Pypi does not have tests.
11901 #:phases
11902 (modify-phases %standard-phases
11903 (add-before 'build 'patch-setup-py
11904 (lambda _
11905 (substitute* "setup.py"
11906 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11907 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11908 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0")
11909 (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0"))
11910 #t)))))
11911 (propagated-inputs
11912 `(("python-cachecontrol" ,python-cachecontrol)
11913 ("python-cachy" ,python-cachy)
11914 ("python-cleo" ,python-cleo)
11915 ("python-clikit" ,python-clikit)
11916 ("python-html5lib" ,python-html5lib)
11917 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
11918 ("python-jsonschema" ,python-jsonschema)
11919 ("python-keyring" ,python-keyring)
11920 ("python-pexpect" ,python-pexpect)
11921 ("python-pkginfo" ,python-pkginfo)
11922 ("python-pyparsing" ,python-pyparsing)
11923 ("python-pyrsistent" ,python-pyrsistent)
11924 ("python-requests" ,python-requests)
11925 ("python-requests-toolbelt" ,python-requests-toolbelt)
11926 ("python-shellingham" ,python-shellingham)
11927 ("python-tomlkit" ,python-tomlkit)
11928 ("python-virtualenv" ,python-virtualenv)))
11929 (home-page "https://python-poetry.org")
11930 (synopsis "Python dependency management and packaging made easy")
11931 (description "Poetry is a tool for dependency management and packaging
11932 in Python. It allows you to declare the libraries your project depends on and
11933 it will manage (install/update) them for you.")
11934 (license license:expat)))
11935
11936 (define-public python-lazy-object-proxy
11937 (package
11938 (name "python-lazy-object-proxy")
11939 (version "1.4.3")
11940 (source (origin
11941 (method url-fetch)
11942 (uri (pypi-uri "lazy-object-proxy" version))
11943 (sha256
11944 (base32
11945 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11946 (native-inputs
11947 `(("python-setuptools-scm" ,python-setuptools-scm)))
11948 (build-system python-build-system)
11949 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11950 (synopsis "Lazy object proxy for python")
11951 (description
11952 "Lazy object proxy is an object that wraps a callable but defers the call
11953 until the object is actually required, and caches the result of said call.")
11954 (license license:bsd-2)))
11955
11956 (define-public python2-lazy-object-proxy
11957 (package-with-python2 python-lazy-object-proxy))
11958
11959 (define-public python-dnspython
11960 (package
11961 (name "python-dnspython")
11962 (version "1.16.0")
11963 (source (origin
11964 (method url-fetch)
11965 (uri (string-append "http://www.dnspython.org/kits/"
11966 version "/dnspython-" version ".tar.gz"))
11967 (sha256
11968 (base32
11969 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11970 (build-system python-build-system)
11971 (arguments '(#:tests? #f)) ; XXX: requires internet access
11972 (home-page "http://www.dnspython.org")
11973 (synopsis "DNS toolkit for Python")
11974 (description
11975 "dnspython is a DNS toolkit for Python. It supports almost all record
11976 types. It can be used for queries, zone transfers, and dynamic updates.
11977 It supports TSIG authenticated messages and EDNS0.")
11978 (license license:expat)))
11979
11980 (define-public python2-dnspython
11981 (package-with-python2 python-dnspython))
11982
11983 (define-public python-email-validator
11984 (package
11985 (name "python-email-validator")
11986 (version "1.0.2")
11987 (source
11988 (origin (method url-fetch)
11989 (uri (pypi-uri "email_validator" version))
11990 (sha256
11991 (base32
11992 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11993 (build-system python-build-system)
11994 (arguments
11995 '(#:phases
11996 (modify-phases %standard-phases
11997 (add-before 'build 'use-dnspython
11998 (lambda _
11999 (substitute* "setup.py"
12000 (("dnspython3") "dnspython"))
12001 #t)))))
12002 (propagated-inputs
12003 `(("python-dnspython" ,python-dnspython)
12004 ("python-idna" ,python-idna)))
12005 (home-page "https://github.com/JoshData/python-email-validator")
12006 (synopsis "Email address validation library for Python")
12007 (description
12008 "This library validates email address syntax and deliverability.")
12009 (license license:cc0)))
12010
12011 (define-public python2-email-validator
12012 (package-with-python2 python-email-validator))
12013
12014 (define-public python-ukpostcodeparser
12015 (package
12016 (name "python-ukpostcodeparser")
12017 (version "1.0.3")
12018 (source (origin
12019 (method url-fetch)
12020 (uri (pypi-uri "UkPostcodeParser" version))
12021 (sha256
12022 (base32
12023 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12024 (build-system python-build-system)
12025 (home-page "https://github.com/hamstah/ukpostcodeparser")
12026 (synopsis "UK Postcode parser for Python")
12027 (description
12028 "This library provides the @code{parse_uk_postcode} function for
12029 parsing UK postcodes.")
12030 (license license:expat)))
12031
12032 (define-public python2-ukpostcodeparser
12033 (package-with-python2 python-ukpostcodeparser))
12034
12035 (define-public python-faker
12036 (package
12037 (name "python-faker")
12038 (version "4.0.2")
12039 (source (origin
12040 (method url-fetch)
12041 (uri (pypi-uri "Faker" version))
12042 (sha256
12043 (base32
12044 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12045 (build-system python-build-system)
12046 (arguments
12047 '(#:phases
12048 (modify-phases %standard-phases
12049 (replace 'check
12050 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12051 (native-inputs
12052 `(;; For testing
12053 ("python-freezegun" ,python-freezegun)
12054 ("python-pytest" ,python-pytest)
12055 ("python-random2" ,python-random2)
12056 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12057 ("python-validators" ,python-validators)))
12058 (propagated-inputs
12059 `(("python-dateutil" ,python-dateutil)
12060 ("python-text-unidecode" ,python-text-unidecode)))
12061 (home-page "https://github.com/joke2k/faker")
12062 (synopsis "Python package that generates fake data")
12063 (description
12064 "Faker is a Python package that generates fake data such as names,
12065 addresses, and phone numbers.")
12066 (license license:expat)
12067 (properties `((python2-variant . ,(delay python2-faker))))))
12068
12069 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12070 (define-public python2-faker
12071 (let ((base (package-with-python2 (strip-python2-variant
12072 python-faker))))
12073 (package
12074 (inherit base)
12075 (version "3.0.1")
12076 (source (origin
12077 (method url-fetch)
12078 (uri (pypi-uri "Faker" version))
12079 (sha256
12080 (base32
12081 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12082 (native-inputs
12083 `(("python-mock" ,python2-mock)
12084 ,@(package-native-inputs base)))
12085 (propagated-inputs
12086 `(("python2-ipaddress" ,python2-ipaddress)
12087 ("python2-six" ,python2-six)
12088 ,@(package-propagated-inputs base))))))
12089
12090 (define-public python-pyaml
12091 (package
12092 (name "python-pyaml")
12093 (version "18.11.0")
12094 (source (origin
12095 (method url-fetch)
12096 (uri (pypi-uri "pyaml" version))
12097 (sha256
12098 (base32
12099 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12100 (build-system python-build-system)
12101 (native-inputs
12102 `(("python-unidecode" ,python-unidecode)))
12103 (propagated-inputs
12104 `(("python-pyyaml" ,python-pyyaml)))
12105 (home-page "https://github.com/mk-fg/pretty-yaml")
12106 (synopsis "YAML pretty-print library for Python")
12107 (description
12108 "pyaml is a PyYAML based python module to produce pretty and readable
12109 YAML-serialized data.")
12110 (license license:wtfpl2)))
12111
12112 (define-public python2-pyaml
12113 (package-with-python2 python-pyaml))
12114
12115 (define-public python-backpack
12116 (package
12117 (name "python-backpack")
12118 (version "0.1")
12119 (source
12120 (origin
12121 (method url-fetch)
12122 (uri (pypi-uri "backpack" version))
12123 (sha256
12124 (base32
12125 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12126 (build-system python-build-system)
12127 (native-inputs
12128 `(("python-pytest" ,python-pytest)
12129 ("python-nose" ,python-nose)))
12130 (propagated-inputs
12131 `(("python-simplejson" ,python-simplejson)))
12132 (home-page "https://github.com/sdispater/backpack")
12133 (synopsis "Utilities for working with Python collections")
12134 (description "Backpack provides some useful utilities for working with
12135 collections of data.")
12136 (license license:expat)))
12137
12138 (define-public python2-backpack
12139 (package-with-python2 python-backpack))
12140
12141 (define-public python-prompt-toolkit
12142 (package
12143 (name "python-prompt-toolkit")
12144 (version "3.0.5")
12145 (source
12146 (origin
12147 (method url-fetch)
12148 (uri (pypi-uri "prompt_toolkit" version))
12149 (sha256
12150 (base32
12151 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12152 (build-system python-build-system)
12153 (arguments
12154 `(#:phases
12155 (modify-phases %standard-phases
12156 (delete 'check)
12157 (add-after 'install 'post-install-check
12158 (lambda* (#:key inputs outputs #:allow-other-keys)
12159 ;; HOME is needed for the test
12160 ;; "test_pathcompleter_can_expanduser".
12161 (setenv "HOME" "/tmp")
12162 (add-installed-pythonpath inputs outputs)
12163 (invoke "py.test"))))))
12164 (propagated-inputs
12165 `(("python-wcwidth" ,python-wcwidth)))
12166 (native-inputs
12167 `(("python-pytest" ,python-pytest)))
12168 (home-page
12169 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12170 (synopsis "Library for building command line interfaces in Python")
12171 (description
12172 "Prompt-Toolkit is a library for building interactive command line
12173 interfaces in Python. It's like GNU Readline but it also features syntax
12174 highlighting while typing, out-of-the-box multi-line input editing, advanced
12175 code completion, incremental search, support for Chinese double-width
12176 characters, mouse support, and auto suggestions.")
12177 (license license:bsd-3)))
12178
12179 (define-public python-prompt-toolkit-2
12180 (package (inherit python-prompt-toolkit)
12181 (name "python-prompt-toolkit")
12182 (version "2.0.7")
12183 (source
12184 (origin
12185 (method url-fetch)
12186 (uri (pypi-uri "prompt_toolkit" version))
12187 (sha256
12188 (base32
12189 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12190 (propagated-inputs
12191 `(("python-wcwidth" ,python-wcwidth)
12192 ("python-six" ,python-six)
12193 ("python-pygments" ,python-pygments)))))
12194
12195 (define-public prompt-toolkit-2-instead-of-prompt-toolkit
12196 (package-input-rewriting/spec
12197 `(("python-prompt-toolkit" . ,(const python-prompt-toolkit-2)))))
12198
12199 (define-public python2-prompt-toolkit
12200 (package-with-python2 python-prompt-toolkit-2))
12201
12202 (define-public python-prompt-toolkit-1
12203 (package (inherit python-prompt-toolkit-2)
12204 (version "1.0.15")
12205 (source
12206 (origin
12207 (method url-fetch)
12208 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12209 (sha256
12210 (base32
12211 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12212
12213 (define-public python2-prompt-toolkit-1
12214 (package-with-python2 python-prompt-toolkit-1))
12215
12216 (define-public python-jedi
12217 (package
12218 (name "python-jedi")
12219 (version "0.17.0")
12220 (source
12221 (origin
12222 (method url-fetch)
12223 (uri (pypi-uri "jedi" version))
12224 (patches (search-patches "python-jedi-sort-project-test.patch"))
12225 (sha256
12226 (base32
12227 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12228 (build-system python-build-system)
12229 (arguments
12230 `(#:phases
12231 (modify-phases %standard-phases
12232 (add-before 'check 'adjust-test-for-python-3.8
12233 (lambda _
12234 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12235 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12236 (substitute* "test/test_utils.py"
12237 (("assert len\\(difference\\) < 20")
12238 "assert len(difference) < 22"))
12239 #t))
12240 (replace 'check
12241 (lambda _
12242 (setenv "HOME" "/tmp")
12243 (invoke "python" "-m" "pytest" "-vv"))))))
12244 (native-inputs
12245 `(("python-pytest" ,python-pytest)
12246 ("python-docopt" ,python-docopt)))
12247 (propagated-inputs
12248 `(("python-parso" ,python-parso)))
12249 (home-page "https://github.com/davidhalter/jedi")
12250 (synopsis "Autocompletion and static analysis library for Python")
12251 (description
12252 "Jedi is a static analysis tool for Python that can be used in Integrated
12253 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12254 on a deeper level than many other static analysis frameworks for Python.
12255
12256 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12257 well.")
12258 (license license:expat)))
12259
12260 (define-public python2-jedi
12261 (package-with-python2 python-jedi))
12262
12263 (define-public ptpython
12264 (package
12265 (name "ptpython")
12266 (version "0.34")
12267 (source (origin
12268 (method url-fetch)
12269 (uri (pypi-uri "ptpython" version))
12270 (sha256
12271 (base32
12272 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12273 (build-system python-build-system)
12274 (arguments
12275 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12276 (propagated-inputs
12277 `(("python-docopt" ,python-docopt)
12278 ("python-jedi" ,python-jedi)
12279 ("python-prompt-toolkit" ,python-prompt-toolkit)
12280 ("python-pygments" ,python-pygments)))
12281 (home-page "https://github.com/jonathanslenders/ptpython")
12282 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12283 (description
12284 "ptpython is a Python read-eval-print loop with IDE-like features.
12285 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12286 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12287 etc.")
12288 (license license:bsd-3)
12289 (properties `((python2-variant . ,(delay ptpython-2))))))
12290
12291 (define-public ptpython-2
12292 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12293 (package
12294 (inherit base)
12295 (name "ptpython2"))))
12296
12297 (define-public python-stem
12298 (package
12299 (name "python-stem")
12300 (version "1.8.0")
12301 (source
12302 (origin
12303 (method url-fetch)
12304 (uri (pypi-uri "stem" version))
12305 (sha256
12306 (base32
12307 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12308 (build-system python-build-system)
12309 (arguments
12310 `(#:phases
12311 (modify-phases %standard-phases
12312 (replace 'check
12313 (lambda _
12314 (invoke "./run_tests.py" "--unit")
12315 #t)))))
12316 (native-inputs
12317 `(("python-mock" ,python-mock)
12318 ("python-pycodestyle" ,python-pycodestyle)
12319 ("python-pyflakes" ,python-pyflakes)))
12320 (home-page "https://stem.torproject.org/")
12321 (synopsis
12322 "Python controller library that allows applications to interact with Tor")
12323 (description
12324 "Stem is a Python controller library for Tor. With it you can use Tor's
12325 control protocol to script against the Tor process and read descriptor data
12326 relays publish about themselves.")
12327 (license license:lgpl3)))
12328
12329 (define-public python2-stem
12330 (package-with-python2 python-stem))
12331
12332 (define-public python-pyserial
12333 (package
12334 (name "python-pyserial")
12335 (version "3.4")
12336 (source
12337 (origin
12338 (method url-fetch)
12339 (uri (pypi-uri "pyserial" version))
12340 (sha256
12341 (base32
12342 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12343 (build-system python-build-system)
12344 (arguments
12345 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12346 ;; #:phases
12347 ;; (modify-phases %standard-phases
12348 ;; (replace 'check
12349 ;; (lambda _
12350 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12351 (home-page
12352 "https://github.com/pyserial/pyserial")
12353 (synopsis "Python Serial Port Bindings")
12354 (description "@code{pyserial} provide serial port bindings for Python. It
12355 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12356 and/or Xon/Xoff. The port is accessed in RAW mode.")
12357 (license license:bsd-3)))
12358
12359 (define-public python2-pyserial
12360 (package-with-python2 python-pyserial))
12361
12362 (define-public python-kivy
12363 (package
12364 (name "python-kivy")
12365 (version "1.10.1")
12366 (source
12367 (origin
12368 (method url-fetch)
12369 (uri (pypi-uri "Kivy" version))
12370 (file-name (string-append name "-" version ".tar.gz"))
12371 (sha256
12372 (base32
12373 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12374 (build-system python-build-system)
12375 (arguments
12376 `(#:tests? #f ; Tests require many optional packages
12377 #:phases
12378 (modify-phases %standard-phases
12379 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12380 (lambda* (#:key inputs #:allow-other-keys)
12381 (setenv "KIVY_SDL2_PATH"
12382 (string-append (assoc-ref inputs "sdl-union")
12383 "/include/SDL2"))
12384 #t)))))
12385 (native-inputs
12386 `(("pkg-config" ,pkg-config)
12387 ("python-cython" ,python-cython)))
12388 (inputs
12389 `(("gstreamer" ,gstreamer)
12390 ("mesa" ,mesa)
12391 ("sdl-union"
12392 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12393 (home-page "https://kivy.org")
12394 (synopsis
12395 "Multitouch application framework")
12396 (description
12397 "A software library for rapid development of
12398 hardware-accelerated multitouch applications.")
12399 (license license:expat)))
12400
12401 (define-public python2-kivy
12402 (package-with-python2 python-kivy))
12403
12404 (define-public python-binaryornot
12405 (package
12406 (name "python-binaryornot")
12407 (version "0.4.4")
12408 (source (origin
12409 (method url-fetch)
12410 (uri (pypi-uri "binaryornot" version))
12411 (sha256
12412 (base32
12413 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12414 (build-system python-build-system)
12415 (arguments
12416 `(#:phases
12417 (modify-phases %standard-phases
12418 (add-after 'unpack 'patch-tests
12419 (lambda _
12420 ;; TypeError: binary() got an unexpected keyword argument
12421 ;; 'average_size'.
12422 (substitute* "tests/test_check.py"
12423 (("average_size=512") ""))
12424 #t)))))
12425 (propagated-inputs
12426 `(("python-chardet" ,python-chardet)
12427 ("python-hypothesis" ,python-hypothesis)))
12428 (home-page "https://github.com/audreyr/binaryornot")
12429 (synopsis "Package to check if a file is binary or text")
12430 (description "Ultra-lightweight pure Python package to check if a file is
12431 binary or text.")
12432 (license license:bsd-3)
12433 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12434
12435 (define-public python2-binaryornot
12436 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12437 (package (inherit base)
12438 (propagated-inputs
12439 `(("python2-enum34" ,python2-enum34)
12440 ,@(package-propagated-inputs base))))))
12441
12442 (define-public python-binwalk
12443 (package
12444 (name "python-binwalk")
12445 (version "2.2.0")
12446 (source
12447 (origin
12448 (method git-fetch)
12449 (uri (git-reference
12450 (url "https://github.com/ReFirmLabs/binwalk")
12451 (commit (string-append "v" version))))
12452 (file-name (git-file-name name version))
12453 (sha256
12454 (base32
12455 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12456 (build-system python-build-system)
12457 (arguments
12458 `(#:phases
12459 (modify-phases %standard-phases
12460 (add-before 'check 'set-pythonpath
12461 (lambda _
12462 (setenv "PYTHONPATH"
12463 (string-append
12464 (getcwd) "/src/"
12465 ":" (getenv "PYTHONPATH")))
12466 (setenv "HOME" "")
12467 #t)))))
12468 (native-inputs
12469 `(("python-coverage" ,python-coverage)
12470 ("python-nose" ,python-nose)))
12471 (home-page "https://github.com/ReFirmLabs/binwalk")
12472 (synopsis "Firmware analysis tool")
12473 (description "Binwalk is a tool for analyzing, reverse engineering, and
12474 extracting firmware images")
12475 (license license:expat)))
12476
12477 (define-public python-nltk
12478 (package
12479 (name "python-nltk")
12480 (version "3.2.1")
12481 (source (origin
12482 (method url-fetch)
12483 (uri (pypi-uri "nltk" version))
12484 (sha256
12485 (base32
12486 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12487 (build-system python-build-system)
12488 (arguments
12489 '(;; The tests require some extra resources to be downloaded.
12490 ;; TODO Try packaging these resources.
12491 #:tests? #f))
12492 (home-page "http://nltk.org/")
12493 (synopsis "Natural Language Toolkit")
12494 (description "It provides interfaces to over 50 corpora and lexical
12495 resources such as WordNet, along with a suite of text processing libraries
12496 for classification, tokenization, stemming, tagging, parsing, and semantic
12497 reasoning, wrappers for natural language processing libraries.")
12498 (license license:asl2.0)))
12499
12500 (define-public python2-nltk
12501 (package-with-python2 python-nltk))
12502
12503 (define-public python-pymongo
12504 (package
12505 (name "python-pymongo")
12506 (version "3.7.2")
12507 (source (origin
12508 (method url-fetch)
12509 (uri (pypi-uri "pymongo" version))
12510 (sha256
12511 (base32
12512 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12513 (build-system python-build-system)
12514 (propagated-inputs
12515 `(("python-certifi" ,python-certifi)))
12516 (home-page "https://github.com/mongodb/mongo-python-driver")
12517 (synopsis "Python driver for MongoDB")
12518 (description "Python driver for MongoDB.")
12519 (license license:asl2.0)))
12520
12521 (define-public python2-pymongo
12522 (package-with-python2 python-pymongo))
12523
12524 (define-public python-consul
12525 (package
12526 (name "python-consul")
12527 (version "0.6.1")
12528 (source
12529 (origin
12530 (method url-fetch)
12531 (uri (pypi-uri "python-consul" version))
12532 (sha256
12533 (base32
12534 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12535 (build-system python-build-system)
12536 (arguments
12537 '(#:tests? #f)) ; The tests are not distributed
12538 (propagated-inputs
12539 `(("python-requests" ,python-requests)
12540 ("python-six" ,python-six)))
12541 (home-page "https://github.com/cablehead/python-consul")
12542 (synopsis "Python client for Consul")
12543 (description
12544 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12545 discovery, monitoring and configuration.")
12546 (license license:expat)))
12547
12548 (define-public python2-consul
12549 (package-with-python2 python-consul))
12550
12551 (define-public python-schematics
12552 (package
12553 (name "python-schematics")
12554 (version "1.1.1")
12555 (source
12556 (origin
12557 (method git-fetch)
12558 (uri (git-reference
12559 (url "https://github.com/schematics/schematics.git")
12560 (commit (string-append "v" version))))
12561 (file-name (git-file-name name version))
12562 (sha256
12563 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12564 (build-system python-build-system)
12565 (propagated-inputs
12566 `(("python-six" ,python-six)))
12567 (arguments
12568 ;; The tests require a bunch of not very nice packages with fixed
12569 ;; version requirements (e.g. python-coveralls).
12570 `(#:tests? #f))
12571 (home-page "https://github.com/schematics/schematics")
12572 (synopsis "Python Data Structures for Humans")
12573 (description "Python Data Structures for Humans.")
12574 (license license:bsd-3)))
12575
12576 (define-public python2-schematics
12577 (package-with-python2 python-schematics))
12578
12579 (define-public python-odfpy
12580 (package
12581 (name "python-odfpy")
12582 (version "1.4.1")
12583 (source (origin
12584 (method url-fetch)
12585 (uri (pypi-uri "odfpy" version))
12586 (sha256
12587 (base32
12588 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
12589 (arguments
12590 `(#:phases
12591 (modify-phases %standard-phases
12592 (replace 'check
12593 (lambda _
12594 (setenv "PYTHONPATH" (string-append "./build/lib:"
12595 (getenv "PYTHONPATH")))
12596 (invoke "pytest" "-vv"))))))
12597 (build-system python-build-system)
12598 (native-inputs
12599 `(("python-pytest" ,python-pytest)))
12600 (propagated-inputs
12601 `(("python-defusedxml" ,python-defusedxml)))
12602 (home-page "https://github.com/eea/odfpy")
12603 (synopsis "Python API and tools to manipulate OpenDocument files")
12604 (description "Collection of libraries and utility programs written in
12605 Python to manipulate OpenDocument 1.2 files.")
12606 (license
12607 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12608 ;; number of files with other licenses.
12609 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12610
12611 (define-public python2-odfpy
12612 (package-with-python2 python-odfpy))
12613
12614 (define-public python-natsort
12615 (package
12616 (name "python-natsort")
12617 (version "7.0.1")
12618 (source (origin
12619 (method url-fetch)
12620 (uri (pypi-uri "natsort" version))
12621 (sha256
12622 (base32
12623 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12624 (build-system python-build-system)
12625 (arguments
12626 `(#:modules ((guix build utils)
12627 (guix build python-build-system)
12628 (srfi srfi-1)
12629 (srfi srfi-26)
12630 (ice-9 ftw))
12631 #:phases
12632 (modify-phases %standard-phases
12633 (add-before 'check 'set-cachedir
12634 ;; Tests require write access to $HOME by default
12635 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12636 (replace 'check
12637 (lambda _
12638 (let ((cwd (getcwd)))
12639 (setenv "PYTHONPATH"
12640 (string-append
12641 cwd "/build/"
12642 (find (cut string-prefix? "lib" <>)
12643 (scandir (string-append cwd "/build")))
12644 ":"
12645 (getenv "PYTHONPATH")))
12646 (invoke "pytest" "-v")))))))
12647 (native-inputs
12648 `(("python-hypothesis" ,python-hypothesis)
12649 ("python-pytest-cov" ,python-pytest-cov)
12650 ("python-pytest-mock" ,python-pytest-mock)
12651 ("python-pytest" ,python-pytest)))
12652 (propagated-inputs ; TODO: Add python-fastnumbers.
12653 `(("python-pyicu" ,python-pyicu)))
12654 (home-page "https://github.com/SethMMorton/natsort")
12655 (synopsis "Natural sorting for python and shell")
12656 (description
12657 "Natsort lets you apply natural sorting on lists instead of
12658 lexicographical. If you use the built-in @code{sorted} method in python
12659 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12660 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12661 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12662 identifies numbers and sorts them separately from strings. It can also sort
12663 version numbers, real numbers, mixed types and more, and comes with a shell
12664 command @command{natsort} that exposes this functionality in the command line.")
12665 (license license:expat)
12666 (properties `((python2-variant . ,(delay python2-natsort))))))
12667
12668 ;; Natsort 6.x are the last versions with support for Python 2.
12669 (define-public python2-natsort
12670 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12671 (package (inherit base)
12672 (version "6.2.1")
12673 (source (origin
12674 (method url-fetch)
12675 (uri (pypi-uri "natsort" version))
12676 (sha256
12677 (base32
12678 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12679 (native-inputs
12680 `(("python2-pathlib" ,python2-pathlib)
12681 ,@(package-native-inputs base))))))
12682
12683 (define-public glances
12684 (package
12685 (name "glances")
12686 (version "3.1.4")
12687 (source
12688 (origin
12689 (method url-fetch)
12690 (uri (pypi-uri "Glances" version))
12691 (sha256
12692 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12693 (modules '((guix build utils)))
12694 (snippet
12695 '(begin
12696 ;; Glances phones PyPI for weekly update checks by default.
12697 ;; Disable these. The user can re-enable them if desired.
12698 (substitute* "glances/outdated.py"
12699 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12700 (string-append indentation
12701 "self.args.disable_check_update = True\n"
12702 line)))
12703 #t))))
12704 (build-system python-build-system)
12705 (propagated-inputs
12706 `(("python-future" ,python-future)
12707 ("python-psutil" ,python-psutil)))
12708 (home-page "https://github.com/nicolargo/glances")
12709 (synopsis "Cross-platform curses-based monitoring tool")
12710 (description
12711 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12712 Glances uses the PsUtil library to get information from your system. It
12713 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12714 (license license:lgpl3+)))
12715
12716 (define-public python-glances
12717 (deprecated-package "python-glances" glances))
12718
12719 (define-public python-graphql-core
12720 (package
12721 (name "python-graphql-core")
12722 (version "0.5.3")
12723 (source
12724 (origin
12725 (method url-fetch)
12726 (uri (pypi-uri "graphql-core" version))
12727 (sha256
12728 (base32
12729 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12730 (build-system python-build-system)
12731 (arguments
12732 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12733 #:phases
12734 (modify-phases %standard-phases
12735 (add-after 'unpack 'patch-hardcoded-version
12736 (lambda _ (substitute*
12737 "setup.py"
12738 (("'gevent==1.1rc1'") "'gevent'"))
12739 #t)))))
12740 (native-inputs
12741 `(("python-gevent" ,python-gevent)
12742 ("python-mock" ,python-mock)
12743 ("python-pytest-mock" ,python-pytest-mock)))
12744 (propagated-inputs
12745 `(("python-promise" ,python-promise)
12746 ("python-six" ,python-six)))
12747 (home-page "https://github.com/graphql-python/graphql-core")
12748 (synopsis "GraphQL implementation for Python")
12749 (description
12750 "GraphQL implementation for Python. GraphQL is a data query language and
12751 runtime designed and used to request and deliver data to mobile and web apps.
12752 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12753 to Python.")
12754 (license license:expat)))
12755
12756 (define-public python2-graphql-core
12757 (package-with-python2 python-graphql-core))
12758
12759 (define-public python-graphql-relay
12760 (package
12761 (name "python-graphql-relay")
12762 (version "0.4.5")
12763 (source
12764 (origin
12765 (method url-fetch)
12766 (uri (pypi-uri "graphql-relay" version))
12767 (sha256
12768 (base32
12769 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12770 (build-system python-build-system)
12771 (arguments
12772 '(#:tests? #f)) ; The tests are not distributed
12773 (propagated-inputs
12774 `(("python-graphql-core" ,python-graphql-core)
12775 ("python-promise" ,python-promise)
12776 ("python-six" ,python-six)))
12777 (home-page "https://github.com/graphql-python/graphql-relay-py")
12778 (synopsis "Relay implementation for Python")
12779 (description
12780 "This is a library to allow the easy creation of Relay-compliant servers
12781 using the GraphQL Python reference implementation of a GraphQL server. It
12782 should be noted that the code is a exact port of the original
12783 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12784 from Facebook.")
12785 (license license:expat)))
12786
12787 (define-public python2-graphql-relay
12788 (package-with-python2 python-graphql-relay))
12789
12790 (define-public python-graphene
12791 (package
12792 (name "python-graphene")
12793 (version "0.10.2")
12794 (source
12795 (origin
12796 (method url-fetch)
12797 (uri (pypi-uri "graphene" version))
12798 (sha256
12799 (base32
12800 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12801 (build-system python-build-system)
12802 (propagated-inputs
12803 `(("python-graphql-core" ,python-graphql-core)
12804 ("python-graphql-relay" ,python-graphql-relay)
12805 ("python-iso8601" ,python-iso8601)
12806 ("python-promise" ,python-promise)
12807 ("python-six" ,python-six)))
12808 (arguments
12809 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12810 (home-page "https://graphene-python.org/")
12811 (synopsis "GraphQL Framework for Python")
12812 (description
12813 "Graphene is a Python library for building GraphQL schemas/types.
12814 A GraphQL schema describes your data model, and provides a GraphQL server
12815 with an associated set of resolve methods that know how to fetch data.")
12816 (properties `((python2-variant . ,(delay python2-graphene))))
12817 (license license:expat)))
12818
12819 (define-public python2-graphene
12820 (let ((base (package-with-python2
12821 (strip-python2-variant python-graphene))))
12822 (package (inherit base)
12823 (native-inputs
12824 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12825 ,@(package-native-inputs base))))))
12826
12827 (define-public python-nautilus
12828 (package
12829 (name "python-nautilus")
12830 (version "0.4.9")
12831 (source
12832 (origin
12833 (method url-fetch)
12834 (uri (pypi-uri "nautilus" version))
12835 (sha256
12836 (base32
12837 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12838 (build-system python-build-system)
12839 (arguments `(#:tests? #f)) ; fails to import test modules
12840 (propagated-inputs
12841 `(("python-bcrypt" ,python-bcrypt)
12842 ("python-click" ,python-click)
12843 ("python-consul" ,python-consul)
12844 ("python-graphene" ,python-graphene)
12845 ("python-jinja2" ,python-jinja2)
12846 ("python-peewee" ,python-peewee)
12847 ("python-pika" ,python-pika)
12848 ("python-tornado" ,python-tornado)
12849 ("python-wtforms" ,python-wtforms)))
12850 (native-inputs
12851 `(("python-nose2" ,python-nose2)))
12852 (home-page "https://github.com/AlecAivazis/nautilus")
12853 (synopsis "Library for creating microservice applications")
12854 (description
12855 "Nautilus is a framework for flux based microservices that looks to
12856 provide extendible implementations of common aspects of a cloud so that you can
12857 focus on building massively scalable web applications.")
12858 (license license:expat)))
12859
12860 (define-public python-random2
12861 (package
12862 (name "python-random2")
12863 (version "1.0.1")
12864 (source (origin
12865 (method url-fetch)
12866 (uri (pypi-uri "random2" version ".zip"))
12867 (sha256
12868 (base32
12869 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12870 (build-system python-build-system)
12871 (native-inputs `(("unzip" ,unzip)))
12872 (home-page "http://pypi.python.org/pypi/random2")
12873 (synopsis "Python 3 version of the Python 2 @code{random} module")
12874 (description
12875 "This package provides a Python 3 ported version of Python 2.7’s
12876 @code{random} module. It has also been back-ported to work in Python 2.6.
12877
12878 In Python 3, the implementation of @code{randrange()} was changed, so that
12879 even with the same seed you get different sequences in Python 2 and 3.
12880
12881 This package closes that gap, allowing stable random number generation
12882 between the different Python versions.")
12883 (license license:psfl)))
12884
12885 (define-public python2-random2
12886 (package-with-python2 python-random2))
12887
12888 (define-public python-snowballstemmer
12889 (package
12890 (name "python-snowballstemmer")
12891 (version "2.0.0")
12892 (source (origin
12893 (method url-fetch)
12894 (uri (pypi-uri "snowballstemmer" version))
12895 (sha256
12896 (base32
12897 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12898 (build-system python-build-system)
12899 (arguments
12900 `(;; No tests exist
12901 #:tests? #f))
12902 (home-page "https://github.com/shibukawa/snowball_py")
12903 (synopsis "Snowball stemming library collection for Python")
12904 (description "This package provides 16 word stemmer algorithms generated
12905 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12906 English stemmer.")
12907 (license license:bsd-3)))
12908
12909 (define-public python2-snowballstemmer
12910 (package-with-python2 python-snowballstemmer))
12911
12912 (define-public python-setproctitle
12913 (package
12914 (name "python-setproctitle")
12915 (version "1.1.10")
12916 (source
12917 (origin
12918 (method url-fetch)
12919 (uri (pypi-uri "setproctitle" version))
12920 (sha256
12921 (base32
12922 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12923 (build-system python-build-system)
12924 (arguments
12925 '(#:phases
12926 (modify-phases %standard-phases
12927 (add-before 'check 'patch-Makefile
12928 ;; Stricly this is only required for the python2 variant.
12929 ;; But adding a phase in an inherited package seems to be
12930 ;; cumbersum. So we patch even for python3.
12931 (lambda _
12932 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12933 (when nose
12934 (substitute* "Makefile"
12935 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12936 (string-append nose "/bin/nosetests "))))
12937 #t)))
12938 (replace 'check
12939 (lambda _
12940 (setenv "PYTHON" (or (which "python3") (which "python")))
12941 (setenv "PYCONFIG" (or (which "python3-config")
12942 (which "python-config")))
12943 (setenv "CC" "gcc")
12944 ;; No need to extend PYTHONPATH to find the built package, since
12945 ;; the Makefile will build anyway
12946 (invoke "make" "check"))))))
12947 (native-inputs
12948 `(("procps" ,procps))) ; required for tests
12949 (home-page
12950 "https://github.com/dvarrazzo/py-setproctitle")
12951 (synopsis
12952 "Setproctitle implementation for Python to customize the process title")
12953 (description "The library allows a process to change its title (as displayed
12954 by system tools such as ps and top).
12955
12956 Changing the title is mostly useful in multi-process systems, for
12957 example when a master process is forked: changing the children's title
12958 allows identifying the task each process is busy with. The technique
12959 is used by PostgreSQL and the OpenSSH Server for example.")
12960 (license license:bsd-3)
12961 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12962
12963 (define-public python2-setproctitle
12964 (let ((base (package-with-python2
12965 (strip-python2-variant python-setproctitle))))
12966 (package
12967 (inherit base)
12968 (native-inputs `(("python2-nose" ,python2-nose)
12969 ,@(package-native-inputs base))))))
12970
12971 (define-public python-validictory
12972 (package
12973 (name "python-validictory")
12974 (version "1.0.1")
12975 (source
12976 (origin
12977 (method url-fetch)
12978 (uri (pypi-uri "validictory" version))
12979 (sha256
12980 (base32
12981 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12982 (build-system python-build-system)
12983 (arguments
12984 '(#:phases
12985 (modify-phases %standard-phases
12986 (add-after 'unpack 'bootstrap
12987 ;; Move the tests out of the package directory to avoid
12988 ;; packaging them.
12989 (lambda* _
12990 (rename-file "validictory/tests" "tests")
12991 (delete-file "tests/__init__.py")))
12992 (replace 'check
12993 (lambda _
12994 ;; Extend PYTHONPATH so the built package will be found.
12995 (setenv "PYTHONPATH"
12996 (string-append (getcwd) "/build/lib:"
12997 (getenv "PYTHONPATH")))
12998 (invoke "py.test" "-vv" ))))))
12999 (native-inputs
13000 `(("python-pytest" ,python-pytest)))
13001 (home-page
13002 "https://github.com/jamesturk/validictory")
13003 (synopsis "General purpose Python data validator")
13004 (description "It allows validation of arbitrary Python data structures.
13005
13006 The schema format is based on the JSON Schema
13007 proposal (http://json-schema.org), so combined with json the library is also
13008 useful as a validator for JSON data.")
13009 (license license:expat)))
13010
13011 (define-public python2-validictory
13012 (package-with-python2 python-validictory))
13013
13014 (define-public python-pyelftools
13015 (package
13016 (name "python-pyelftools")
13017 (version "0.25")
13018 (source
13019 (origin
13020 (method url-fetch)
13021 (uri (pypi-uri "pyelftools" version))
13022 (sha256
13023 (base32
13024 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13025 (build-system python-build-system)
13026 (arguments
13027 `(#:phases
13028 (modify-phases %standard-phases
13029 (add-before 'check 'set-pythonpath
13030 (lambda _
13031 (setenv "PYTHONPATH"
13032 (string-append
13033 (getcwd) "/test/"
13034 ":" (getenv "PYTHONPATH")))
13035 #t)))))
13036 (home-page
13037 "https://github.com/eliben/pyelftools")
13038 (synopsis
13039 "Analyze binary and library file information")
13040 (description "This Python library provides interfaces for parsing and
13041 analyzing two binary and library file formats; the Executable and Linking
13042 Format (ELF), and debugging information in the Debugging With Attributed
13043 Record Format (DWARF).")
13044 (license license:public-domain)))
13045
13046 (define-public python-pyev
13047 (package
13048 (name "python-pyev")
13049 (version "0.9.0")
13050 (source
13051 (origin
13052 (method url-fetch)
13053 (uri (pypi-uri "pyev" version))
13054 (sha256
13055 (base32
13056 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13057 (build-system python-build-system)
13058 (arguments
13059 `(#:tests? #f ; no test suite
13060 #:phases
13061 (modify-phases %standard-phases
13062 (add-after 'unpack 'patch
13063 (lambda* (#:key inputs #:allow-other-keys)
13064 (let ((libev (string-append (assoc-ref inputs "libev")
13065 "/lib/libev.so.4")))
13066 (substitute* "setup.py"
13067 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13068 (string-append "libev_dll_name = \"" libev "\"")))))))))
13069 (inputs
13070 `(("libev" ,libev)))
13071 (home-page "http://pythonhosted.org/pyev/")
13072 (synopsis "Python libev interface")
13073 (description "Pyev provides a Python interface to libev.")
13074 (license license:gpl3)))
13075
13076 (define-public python2-pyev
13077 (package-with-python2 python-pyev))
13078
13079 (define-public python-imagesize
13080 (package
13081 (name "python-imagesize")
13082 (version "1.2.0")
13083 (source
13084 (origin
13085 (method url-fetch)
13086 (uri (pypi-uri "imagesize" version))
13087 (sha256
13088 (base32
13089 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13090 (build-system python-build-system)
13091 (home-page "https://github.com/shibukawa/imagesize_py")
13092 (synopsis "Gets image size of files in various formats in Python")
13093 (description
13094 "This package allows determination of image size from
13095 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13096 (license license:expat)))
13097
13098 (define-public python2-imagesize
13099 (package-with-python2 python-imagesize))
13100
13101 (define-public python-termstyle
13102 (package
13103 (name "python-termstyle")
13104 (version "0.1.11")
13105 (source
13106 (origin
13107 (method url-fetch)
13108 (uri (pypi-uri "termstyle" version))
13109 (sha256
13110 (base32
13111 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13112 (build-system python-build-system)
13113 (arguments
13114 '(#:phases
13115 (modify-phases %standard-phases
13116 (replace 'check
13117 (lambda _
13118 (invoke "python" "test3.py"))))))
13119 (home-page "https://github.com/gfxmonk/termstyle")
13120 (synopsis "Console text coloring for Python")
13121 (description "This package provides console text coloring for Python.")
13122 (license license:bsd-3)))
13123
13124 (define-public python-argcomplete
13125 (package
13126 (name "python-argcomplete")
13127 (version "1.11.1")
13128 (source
13129 (origin
13130 (method url-fetch)
13131 (uri (pypi-uri "argcomplete" version))
13132 (sha256
13133 (base32
13134 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13135 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13136 (build-system python-build-system)
13137 (native-inputs
13138 `(("python-coverage" ,python-coverage)
13139 ("python-flake8" ,python-flake8)
13140 ("python-pexpect" ,python-pexpect)
13141 ("python-wheel" ,python-wheel)
13142 ("tcsh" ,tcsh)
13143 ("fish" ,fish)
13144 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13145 (home-page "https://github.com/kislyuk/argcomplete")
13146 (synopsis "Shell tab completion for Python argparse")
13147 (description "argcomplete provides extensible command line tab completion
13148 of arguments and options for Python scripts using @code{argparse}. It's
13149 particularly useful for programs with many options or sub-parsers that can
13150 dynamically suggest completions; for example, when browsing resources over the
13151 network.")
13152 (license license:asl2.0)))
13153
13154 (define-public python2-argcomplete
13155 (package-with-python2 python-argcomplete))
13156
13157 (define-public python-xopen
13158 (package
13159 (name "python-xopen")
13160 (version "0.5.0")
13161 (source
13162 (origin
13163 (method url-fetch)
13164 (uri (pypi-uri "xopen" version))
13165 (sha256
13166 (base32
13167 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13168 (build-system python-build-system)
13169 (propagated-inputs
13170 `(("python-setuptools-scm" ,python-setuptools-scm)))
13171 (home-page "https://github.com/marcelm/xopen/")
13172 (synopsis "Open compressed files transparently")
13173 (description "This module provides an @code{xopen} function that works like
13174 Python's built-in @code{open} function, but can also deal with compressed files.
13175 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13176 recognized by their file extensions. The focus is on being as efficient as
13177 possible on all supported Python versions.")
13178 (license license:expat)))
13179
13180 (define-public python2-xopen
13181 (let ((base (package-with-python2
13182 (strip-python2-variant python-xopen))))
13183 (package
13184 (inherit base)
13185 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13186 ,@(package-propagated-inputs base))))))
13187
13188 (define-public python-cheetah
13189 (package
13190 (name "python-cheetah")
13191 (version "3.2.4")
13192 (source
13193 (origin
13194 (method url-fetch)
13195 (uri (pypi-uri "Cheetah3" version))
13196 (sha256
13197 (base32
13198 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13199 (build-system python-build-system)
13200 (arguments
13201 `(#:modules ((guix build utils)
13202 (guix build python-build-system)
13203 (ice-9 ftw)
13204 (srfi srfi-1)
13205 (srfi srfi-26))
13206 #:phases (modify-phases %standard-phases
13207 (add-after 'unpack 'use-absolute-python
13208 (lambda _
13209 (substitute* "Cheetah/CheetahWrapper.py"
13210 (("#!/usr/bin/env python")
13211 (string-append "#!" (which "python"))))
13212 #t))
13213 (add-after 'unpack 'fix-tests
13214 (lambda _
13215 (substitute* "Cheetah/Tests/ImportHooks.py"
13216 (("os.path.dirname\\(__file__\\)")
13217 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13218 #t))
13219 (replace 'check
13220 (lambda _
13221 (let ((cwd (getcwd)))
13222 (setenv "PYTHONPATH"
13223 (string-append
13224 cwd "/build/"
13225 (find (cut string-prefix? "lib" <>)
13226 (scandir (string-append cwd "/build")))
13227 ":" (getenv "PYTHONPATH")))
13228 (setenv "PATH"
13229 (string-append (getenv "PATH")
13230 ":" cwd "/bin"))
13231 (setenv "TMPDIR" "/tmp")
13232
13233 (substitute* "Cheetah/Tests/Test.py"
13234 (("unittest.TextTestRunner\\(\\)")
13235 "unittest.TextTestRunner(verbosity=2)"))
13236
13237 (invoke "python" "Cheetah/Tests/Test.py")))))))
13238 (propagated-inputs
13239 `(("python-markdown" ,python-markdown))) ;optional
13240 (home-page "https://cheetahtemplate.org/")
13241 (synopsis "Template engine")
13242 (description "Cheetah is a text-based template engine and Python code
13243 generator.
13244
13245 Cheetah can be used as a standalone templating utility or referenced as
13246 a library from other Python applications. It has many potential uses,
13247 but web developers looking for a viable alternative to ASP, JSP, PHP and
13248 PSP are expected to be its principle user group.
13249
13250 Features:
13251 @enumerate
13252 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13253 text-based format.
13254 @item Cleanly separates content, graphic design, and program code.
13255 @item Blends the power and flexibility of Python with a simple template language
13256 that non-programmers can understand.
13257 @item Gives template writers full access to any Python data structure, module,
13258 function, object, or method in their templates.
13259 @item Makes code reuse easy by providing an object-orientated interface to
13260 templates that is accessible from Python code or other Cheetah templates.
13261 One template can subclass another and selectively reimplement sections of it.
13262 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13263 improve the performance of a dynamic website.
13264 @item Compiles templates into optimized, yet readable, Python code.
13265 @end enumerate")
13266 (license (license:x11-style "file://LICENSE"))))
13267
13268 (define-public python2-cheetah
13269 (package-with-python2 python-cheetah))
13270
13271 (define-public python-dulwich
13272 (package
13273 (name "python-dulwich")
13274 (version "0.19.16")
13275 (source
13276 (origin
13277 (method url-fetch)
13278 (uri (list (string-append "https://www.dulwich.io/releases/"
13279 "dulwich-" version ".tar.gz")
13280 (pypi-uri "dulwich" version)))
13281 (sha256
13282 (base32
13283 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13284 (build-system python-build-system)
13285 (arguments
13286 `(#:phases
13287 (modify-phases %standard-phases
13288 (add-before 'check 'fix-tests
13289 (lambda* (#:key inputs #:allow-other-keys)
13290 ;; The tests use Popen with a custom environment which doesn't
13291 ;; include PATH.
13292 (substitute* "dulwich/tests/compat/utils.py"
13293 (("'git'") (string-append "'"
13294 (which "git")
13295 "'")))
13296 (substitute* '("dulwich/tests/test_repository.py"
13297 "dulwich/tests/test_hooks.py")
13298 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13299 (setenv "TEST_RUNNER" "unittest")
13300 (setenv "PYTHONHASHSEED" "random")
13301 #t)))))
13302 (propagated-inputs
13303 `(("python-fastimport" ,python-fastimport)
13304 ("python-urllib3" ,python-urllib3)))
13305 (native-inputs
13306 `(("python-mock" ,python-mock)
13307 ("python-geventhttpclient" ,python-geventhttpclient)
13308 ("git" ,git)))
13309 (home-page "https://www.dulwich.io/")
13310 (synopsis "Git implementation in Python")
13311 (description "Dulwich is an implementation of the Git file formats and
13312 protocols written in pure Python.")
13313 ;; Can be used with either license.
13314 (license (list license:asl2.0 license:gpl2+))))
13315
13316 (define-public python2-dulwich
13317 (package-with-python2 python-dulwich))
13318
13319 (define-public python-pbkdf2
13320 (package
13321 (name "python-pbkdf2")
13322 (version "1.3")
13323 (source
13324 (origin
13325 (method url-fetch)
13326 (uri (pypi-uri "pbkdf2" version))
13327 (sha256
13328 (base32
13329 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13330 (build-system python-build-system)
13331 (arguments
13332 '(#:phases
13333 (modify-phases %standard-phases
13334 (replace 'check
13335 (lambda _
13336 (setenv "PYTHONPATH"
13337 (string-append (getcwd) "/build/lib:"
13338 (getenv "PYTHONPATH")))
13339 (invoke "python" "test/test_pbkdf2.py"))))))
13340 (propagated-inputs
13341 `(("python-pycrypto" ,python-pycrypto))) ; optional
13342 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13343 (synopsis "Password-based key derivation")
13344 (description "This module implements the password-based key derivation
13345 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13346
13347 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13348 is part of the RSA Public Key Cryptography Standards series. The provided
13349 implementation takes a password or a passphrase and a salt value (and
13350 optionally a iteration count, a digest module, and a MAC module) and provides
13351 a file-like object from which an arbitrarly-sized key can be read.")
13352 (license license:expat)))
13353
13354 (define-public python2-pbkdf2
13355 (package-with-python2 python-pbkdf2))
13356
13357 (define-public python-qrcode
13358 (package
13359 (name "python-qrcode")
13360 (version "6.1")
13361 (source
13362 (origin
13363 (method url-fetch)
13364 (uri (pypi-uri "qrcode" version))
13365 (sha256
13366 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13367 (build-system python-build-system)
13368 (arguments
13369 ;; FIXME: Tests require packaging 'pymaging'.
13370 '(#:tests? #f))
13371 (propagated-inputs
13372 `(("python-lxml" ,python-lxml) ; for SVG output
13373 ("python-pillow" ,python-pillow) ; for PNG output
13374 ("python-six" ,python-six)))
13375 (home-page "https://github.com/lincolnloop/python-qrcode")
13376 (synopsis "QR Code image generator")
13377 (description "This package provides a pure Python QR Code generator
13378 module. It uses the Python Imaging Library (PIL) to allow for the generation
13379 of QR Codes.
13380
13381 In addition this package provides a command line tool to generate QR codes and
13382 either write these QR codes to a file or do the output as ascii art at the
13383 console.")
13384 (license license:bsd-3)))
13385
13386 (define-public python2-qrcode
13387 (package-with-python2 python-qrcode))
13388
13389 (define-public python-rst2ansi
13390 (package
13391 (name "python-rst2ansi")
13392 (version "0.1.5")
13393 (source
13394 (origin
13395 (method url-fetch)
13396 (uri (pypi-uri "rst2ansi" version))
13397 (sha256
13398 (base32
13399 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13400 (build-system python-build-system)
13401 (propagated-inputs
13402 `(("python-docutils" ,python-docutils)))
13403 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13404 (synopsis "Convert RST to ANSI-decorated console output")
13405 (description
13406 "Python module dedicated to rendering RST (reStructuredText) documents
13407 to ansi-escaped strings suitable for display in a terminal.")
13408 (license license:expat)))
13409
13410 (define-public python-ansi2html
13411 (package
13412 (name "python-ansi2html")
13413 (version "1.2.0")
13414 (source
13415 (origin
13416 (method url-fetch)
13417 (uri (pypi-uri "ansi2html" version))
13418 (sha256
13419 (base32
13420 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13421 (build-system python-build-system)
13422 (native-inputs
13423 `(("python-mock" ,python-mock)
13424 ("python-nose" ,python-nose)))
13425 (propagated-inputs
13426 `(("python-six" ,python-six)))
13427 (home-page "https://github.com/ralphbean/ansi2html")
13428 (synopsis "Convert ANSI-decorated console output to HTML")
13429 (description
13430 "@command{ansi2html} is a Python library and command line utility for
13431 convering text with ANSI color codes to HTML or LaTeX.")
13432 (license license:gpl3+)))
13433
13434 (define-public python2-ansi2html
13435 (package-with-python2 python-ansi2html))
13436
13437 (define-public python-ddt
13438 (package
13439 (name "python-ddt")
13440 (version "1.1.3")
13441 (source
13442 (origin
13443 (method url-fetch)
13444 (uri (pypi-uri "ddt" version))
13445 (sha256
13446 (base32
13447 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13448 (build-system python-build-system)
13449 (native-inputs
13450 `(("python-mock" ,python-mock)
13451 ("python-nose" ,python-nose)))
13452 (propagated-inputs
13453 `(("python-six" ,python-six)
13454 ("python-pyyaml" ,python-pyyaml)))
13455 (home-page "https://github.com/txels/ddt")
13456 (synopsis "Data-Driven Tests")
13457 (description
13458 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13459 running it with different test data, and make it appear as multiple test
13460 cases.")
13461 (license license:expat)))
13462
13463 (define-public python2-ddt
13464 (package-with-python2 python-ddt))
13465
13466 (define-public python-pycountry
13467 (package
13468 (name "python-pycountry")
13469 (version "18.5.26")
13470 (source
13471 (origin
13472 (method url-fetch)
13473 (uri (pypi-uri "pycountry" version))
13474 (sha256
13475 (base32
13476 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13477 (build-system python-build-system)
13478 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13479 (synopsis "ISO databases for languages, countries, currencies, etc.")
13480 (description
13481 "@code{pycountry} provides the ISO databases for the standards:
13482 @enumerate
13483 @item 639-3 (Languages)
13484 @item 3166 (Countries)
13485 @item 3166-3 (Deleted Countries)
13486 @item 3166-2 (Subdivisions of countries)
13487 @item 4217 (Currencies)
13488 @item 15924 (Scripts)
13489 @end enumerate
13490 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13491 through a Python API.")
13492 (license license:lgpl2.1+)))
13493
13494 (define-public python2-pycountry
13495 (package-with-python2 python-pycountry))
13496
13497 (define-public python-pycosat
13498 (package
13499 (name "python-pycosat")
13500 (version "0.6.1")
13501 (source
13502 (origin
13503 (method url-fetch)
13504 (uri (pypi-uri "pycosat" version))
13505 (sha256
13506 (base32
13507 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13508 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13509 (build-system python-build-system)
13510 (home-page "https://github.com/ContinuumIO/pycosat")
13511 (synopsis "Bindings to picosat (a SAT solver)")
13512 (description
13513 "This package provides efficient Python bindings to @code{picosat} on
13514 the C level. When importing pycosat, the @code{picosat} solver becomes part
13515 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13516 Problem} (SAT) solver.")
13517 (license license:expat)))
13518
13519 (define-public python2-pycosat
13520 (package-with-python2 python-pycosat))
13521
13522 (define-public python2-ruamel.ordereddict
13523 (package
13524 (name "python2-ruamel.ordereddict")
13525 (version "0.4.9")
13526 (source
13527 (origin
13528 (method url-fetch)
13529 (uri (pypi-uri "ruamel.ordereddict" version))
13530 (sha256
13531 (base32
13532 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13533 (build-system python-build-system)
13534 (arguments
13535 `(#:python ,python-2
13536 #:phases
13537 (modify-phases %standard-phases
13538 (delete 'check)
13539 (add-after 'install 'check
13540 (lambda* (#:key inputs outputs #:allow-other-keys)
13541 (add-installed-pythonpath inputs outputs)
13542 (invoke "python" "test/testordereddict.py"))))))
13543 (home-page "https://bitbucket.org/ruamel/ordereddict")
13544 (synopsis "Version of dict that keeps keys in insertion order")
13545 (description
13546 "This is an implementation of an ordered dictionary with @dfn{Key
13547 Insertion Order} (KIO: updates of values do not affect the position of the
13548 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13549 removed and put at the back). The standard library module @code{OrderedDict},
13550 implemented later, implements a subset of @code{ordereddict} functionality.
13551 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13552 Order} (KSO, no sorting function can be specified, but a transform can be
13553 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13554 (license license:expat)))
13555
13556 (define-public python-pypeg2
13557 (package
13558 (name "python-pypeg2")
13559 (version "2.15.2")
13560 (source
13561 (origin
13562 (method url-fetch)
13563 (uri (pypi-uri "pyPEG2" version))
13564 (sha256
13565 (base32
13566 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13567 (build-system python-build-system)
13568 (propagated-inputs `(("python-lxml" ,python-lxml)))
13569 (arguments
13570 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13571 '(#:tests? #f))
13572 (home-page "https://fdik.org/pyPEG/")
13573 (synopsis "Parsering Expression Grammars in Python")
13574 (description "PyPEG is an intrinsic parser interpreter framework for
13575 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13576 parse many formal languages.")
13577 (license license:gpl2)))
13578
13579 (define-public python-incremental
13580 (package
13581 (name "python-incremental")
13582 (version "17.5.0")
13583 (source
13584 (origin
13585 (method url-fetch)
13586 (uri (pypi-uri "incremental" version))
13587 (sha256
13588 (base32
13589 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13590 (build-system python-build-system)
13591 (home-page "https://github.com/hawkowl/incremental")
13592 (synopsis "Library for versioning Python projects")
13593 (description "Incremental is a small library that versions your Python
13594 projects.")
13595 (license license:expat)))
13596
13597 (define-public python2-incremental
13598 (package-with-python2 python-incremental))
13599
13600 (define-public python-invoke
13601 (package
13602 (name "python-invoke")
13603 (home-page "https://www.pyinvoke.org/")
13604 (version "1.3.0")
13605 (source (origin
13606 (method url-fetch)
13607 (uri (pypi-uri "invoke" version))
13608 (sha256
13609 (base32
13610 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13611 (build-system python-build-system)
13612 (arguments
13613 ;; XXX: Requires many dependencies that are not yet in Guix.
13614 `(#:tests? #f))
13615 (synopsis "Pythonic task execution")
13616 (description
13617 "Invoke is a Python task execution tool and library, drawing inspiration
13618 from various sources to arrive at a powerful and clean feature set. It is
13619 evolved from the Fabric project, but focuses on local and abstract concerns
13620 instead of servers and network commands.")
13621 (license license:bsd-3)))
13622
13623 (define-public python2-invoke
13624 (package-with-python2 python-invoke))
13625
13626 (define-public python-automat
13627 (package
13628 (name "python-automat")
13629 (version "20.2.0")
13630 (source (origin
13631 (method url-fetch)
13632 (uri (pypi-uri "Automat" version))
13633 (sha256
13634 (base32
13635 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13636 (build-system python-build-system)
13637 ;; We disable the tests because they require python-twisted, while
13638 ;; python-twisted depends on python-automat. Twisted is optional, but the
13639 ;; tests fail if it is not available. Also see
13640 ;; <https://github.com/glyph/automat/issues/71>.
13641 (arguments '(#:tests? #f))
13642 (native-inputs
13643 `(("python-m2r" ,python-m2r)
13644 ("python-setuptools-scm" ,python-setuptools-scm)
13645 ("python-graphviz" ,python-graphviz)))
13646 (propagated-inputs
13647 `(("python-six" ,python-six)
13648 ("python-attrs" ,python-attrs)))
13649 (home-page "https://github.com/glyph/Automat")
13650 (synopsis "Self-service finite-state machines")
13651 (description "Automat is a library for concise, idiomatic Python
13652 expression of finite-state automata (particularly deterministic finite-state
13653 transducers).")
13654 (license license:expat)))
13655
13656 (define-public python2-automat
13657 (package-with-python2 python-automat))
13658
13659 (define-public python-m2r
13660 (package
13661 (name "python-m2r")
13662 (version "0.2.1")
13663 (source (origin
13664 (method url-fetch)
13665 (uri (pypi-uri "m2r" version))
13666 (sha256
13667 (base32
13668 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13669 (build-system python-build-system)
13670 (propagated-inputs
13671 `(("python-docutils" ,python-docutils)
13672 ("python-mistune" ,python-mistune)))
13673 (native-inputs
13674 `(("python-pygments" ,python-pygments)
13675 ("python-mock" ,python-mock)))
13676 (home-page "https://github.com/miyakogi/m2r")
13677 (synopsis "Markdown to reStructuredText converter")
13678 (description "M2R converts a markdown file including reST markups to valid
13679 reST format.")
13680 (license license:expat)))
13681
13682 (define-public python2-m2r
13683 (package-with-python2 python-m2r))
13684
13685 (define-public python-constantly
13686 (package
13687 (name "python-constantly")
13688 (version "15.1.0")
13689 (source (origin
13690 (method url-fetch)
13691 (uri (pypi-uri "constantly" version))
13692 (sha256
13693 (base32
13694 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13695 (build-system python-build-system)
13696 (home-page "https://github.com/twisted/constantly")
13697 (synopsis "Symbolic constants in Python")
13698 (description "Constantly is a Python library that provides symbolic
13699 constant support. It includes collections and constants with text, numeric,
13700 and bit flag values.")
13701 (license license:expat)))
13702
13703 (define-public python2-constantly
13704 (package-with-python2 python-constantly))
13705
13706 (define-public python-attrs
13707 (package
13708 (name "python-attrs")
13709 (version "19.3.0")
13710 (source (origin
13711 (method url-fetch)
13712 (uri (pypi-uri "attrs" version))
13713 (sha256
13714 (base32
13715 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13716 (build-system python-build-system)
13717 (arguments
13718 `(#:modules ((guix build utils)
13719 (guix build python-build-system)
13720 (ice-9 ftw)
13721 (srfi srfi-1)
13722 (srfi srfi-26))
13723 #:phases (modify-phases %standard-phases
13724 (replace 'check
13725 (lambda _
13726 (let ((cwd (getcwd)))
13727 (setenv "PYTHONPATH"
13728 (string-append
13729 cwd "/build/"
13730 (find (cut string-prefix? "lib" <>)
13731 (scandir (string-append cwd "/build")))
13732 ":"
13733 (getenv "PYTHONPATH")))
13734 (invoke "python" "-m" "pytest")))))))
13735 (native-inputs
13736 `(("python-coverage" ,python-coverage)
13737 ("python-hypothesis" ,python-hypothesis)
13738 ("python-pympler" ,python-pympler)
13739 ("python-pytest" ,python-pytest)
13740 ("python-six" ,python-six)
13741 ("python-sphinx" ,python-sphinx)
13742 ("python-zope-interface" ,python-zope-interface)))
13743 (home-page "https://github.com/python-attrs/attrs/")
13744 (synopsis "Attributes without boilerplate")
13745 (description "@code{attrs} is a Python package with class decorators that
13746 ease the chores of implementing the most common attribute-related object
13747 protocols.")
13748 (license license:expat)))
13749
13750 (define-public python2-attrs
13751 (package-with-python2 python-attrs))
13752
13753 (define-public python-attrs-bootstrap
13754 (package
13755 (inherit python-attrs)
13756 (name "python-attrs-bootstrap")
13757 (native-inputs `())
13758 (arguments `(#:tests? #f))))
13759
13760 (define-public python2-attrs-bootstrap
13761 (package-with-python2 python-attrs-bootstrap))
13762
13763 (define-public python2-cliapp
13764 (package
13765 (name "python2-cliapp")
13766 (version "1.20180812.1")
13767 (source
13768 (origin
13769 (method url-fetch)
13770 (uri (string-append
13771 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13772 version ".tar.gz"))
13773 (sha256
13774 (base32
13775 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13776 (build-system python-build-system)
13777 (arguments
13778 `(#:python ,python-2
13779 #:phases
13780 (modify-phases %standard-phases
13781 ;; check phase needs to be run before the build phase. If not,
13782 ;; coverage-test-runner looks for tests for the built source files,
13783 ;; and fails.
13784 (delete 'check)
13785 (add-before 'build 'check
13786 (lambda _
13787 ;; Disable python3 tests
13788 (substitute* "check"
13789 (("python3") "# python3"))
13790 (invoke "./check"))))))
13791 (native-inputs
13792 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13793 ("python2-pep8" ,python2-pep8)))
13794 (propagated-inputs
13795 `(("python2-pyaml" ,python2-pyaml)))
13796 (home-page "https://liw.fi/cliapp/")
13797 (synopsis "Python framework for command line programs")
13798 (description "@code{python2-cliapp} is a python framework for
13799 command line programs. It contains the typical stuff such programs
13800 need to do, such as parsing the command line for options, and
13801 iterating over input files.")
13802 (license license:gpl2+)))
13803
13804 (define-public python2-ttystatus
13805 (package
13806 (name "python2-ttystatus")
13807 (version "0.36")
13808 (source
13809 (origin
13810 (method url-fetch)
13811 (uri (string-append
13812 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13813 version ".tar.gz"))
13814 (sha256
13815 (base32
13816 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13817 (build-system python-build-system)
13818 (native-inputs
13819 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13820 ("python2-pep8" ,python2-pep8)))
13821 (arguments
13822 `(#:python ,python-2
13823 #:phases
13824 (modify-phases %standard-phases
13825 ;; check phase needs to be run before the build phase. If not,
13826 ;; coverage-test-runner looks for tests for the built source files,
13827 ;; and fails.
13828 (delete 'check)
13829 (add-before 'build 'check
13830 (lambda _ (invoke "make" "check"))))))
13831 (home-page "https://liw.fi/ttystatus/")
13832 (synopsis "Python library for showing progress reporting and
13833 status updates on terminals")
13834 (description "@code{python2-ttystatus} is a python library for
13835 showing progress reporting and status updates on terminals, for
13836 command line programs. Output is automatically adapted to the width
13837 of the terminal: truncated if it does not fit, and resized if the
13838 terminal size changes.")
13839 (license license:gpl3+)))
13840
13841 (define-public python2-tracing
13842 (package
13843 (name "python2-tracing")
13844 (version "0.10")
13845 (source
13846 (origin
13847 (method url-fetch)
13848 (uri (string-append
13849 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13850 version ".tar.gz"))
13851 (sha256
13852 (base32
13853 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13854 (build-system python-build-system)
13855 (arguments
13856 `(#:python ,python-2))
13857 (home-page "https://liw.fi/tracing/")
13858 (synopsis "Python debug logging helper")
13859 (description "@code{python2-tracing} is a python library for
13860 logging debug messages. It provides a way to turn debugging messages
13861 on and off, based on the filename they occur in. It is much faster
13862 than using @code{logging.Filter} to accomplish the same thing, which
13863 matters when code is run in production mode. The actual logging still
13864 happens using the @code{logging} library.")
13865 (license license:gpl3+)))
13866
13867 (define-public python2-larch
13868 (package
13869 (name "python2-larch")
13870 (version "1.20151025")
13871 (source
13872 (origin
13873 (method url-fetch)
13874 (uri (string-append
13875 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13876 version ".tar.gz"))
13877 (patches (search-patches
13878 "python2-larch-coverage-4.0a6-compatibility.patch"))
13879 (sha256
13880 (base32
13881 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13882 (build-system python-build-system)
13883 (arguments
13884 `(#:python ,python-2
13885 #:phases
13886 (modify-phases %standard-phases
13887 ;; check phase needs to be run before the build phase. If not,
13888 ;; coverage-test-runner looks for tests for the built source files,
13889 ;; and fails.
13890 (delete 'check)
13891 (add-before 'build 'check
13892 (lambda _ (invoke "make" "check"))))))
13893 (native-inputs
13894 `(("cmdtest" ,cmdtest)
13895 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13896 (propagated-inputs
13897 `(("python2-tracing" ,python2-tracing)))
13898 (home-page "https://liw.fi/larch/")
13899 (synopsis "Python copy-on-write B-tree library")
13900 (description "@code{python2-larch} is an implementation of
13901 particular kind of B-tree, based on research by Ohad Rodeh. See
13902 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13903 on the data structure.
13904
13905 The distinctive feature of this B-tree is that a node is never
13906 (conceptually) modified. Instead, all updates are done by
13907 copy-on-write. This makes it easy to clone a tree, and modify only the
13908 clone, while other processes access the original tree.")
13909 (license license:gpl3+)))
13910
13911 (define-public python-astroid
13912 (package
13913 (name "python-astroid")
13914 (version "2.4.1")
13915 (source
13916 (origin
13917 (method url-fetch)
13918 (uri (pypi-uri "astroid" version))
13919 (sha256
13920 (base32 "1h99jal7ax07xna1djw5z7hpgb8vjrl3hrrg49p1phljwniww5sc"))))
13921 (build-system python-build-system)
13922 (propagated-inputs
13923 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13924 ("python-six" ,python-six)
13925 ("python-wrapt" ,python-wrapt)))
13926 (native-inputs
13927 `(("python-dateutil" ,python-dateutil)
13928 ("python-pytest" ,python-pytest)
13929 ("python-pytest-runner" ,python-pytest-runner)))
13930 (home-page "https://github.com/PyCQA/astroid")
13931 (synopsis "Common base representation of python source code for pylint and
13932 other projects")
13933 (description "@code{python-astroid} provides a common base representation
13934 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13935
13936 It provides a compatible representation which comes from the _ast module. It
13937 rebuilds the tree generated by the builtin _ast module by recursively walking
13938 down the AST and building an extended ast. The new node classes have
13939 additional methods and attributes for different usages. They include some
13940 support for static inference and local name scopes. Furthermore, astroid
13941 builds partial trees by inspecting living objects.")
13942 (license license:lgpl2.1+)
13943 (properties `((python2-variant . ,(delay python2-astroid))))))
13944
13945 (define-public python2-astroid
13946 (let ((base (package-with-python2
13947 (strip-python2-variant python-astroid))))
13948 (package (inherit base)
13949 ;; Version 2.x removes python2 support.
13950 (version "1.6.5")
13951 (source
13952 (origin
13953 (method url-fetch)
13954 (uri (pypi-uri "astroid" version))
13955 (sha256
13956 (base32
13957 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13958 (arguments
13959 (substitute-keyword-arguments (package-arguments base)
13960 ((#:phases phases)
13961 `(modify-phases ,phases
13962 (add-after 'unpack 'remove-spurious-test
13963 (lambda _
13964 ;; https://github.com/PyCQA/astroid/issues/276
13965 (delete-file "astroid/tests/unittest_brain.py")
13966 #t))
13967 (replace 'check
13968 (lambda _
13969 (invoke"python" "-m" "unittest" "discover"
13970 "-p" "unittest*.py")))))))
13971 (native-inputs `())
13972 (propagated-inputs
13973 `(("python2-backports-functools-lru-cache"
13974 ,python2-backports-functools-lru-cache)
13975 ("python2-enum34" ,python2-enum34)
13976 ("python2-singledispatch" ,python2-singledispatch)
13977 ,@(alist-delete "python-typed-ast"
13978 (package-propagated-inputs base)))))))
13979
13980 (define-public python-isort
13981 (package
13982 (name "python-isort")
13983 (version "4.3.4")
13984 (source
13985 (origin
13986 (method git-fetch)
13987 (uri (git-reference
13988 ;; Tests pass only from the Github sources
13989 (url "https://github.com/timothycrosley/isort")
13990 (commit version)))
13991 (file-name (git-file-name name version))
13992 (sha256
13993 (base32
13994 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
13995 (build-system python-build-system)
13996 (native-inputs
13997 `(("python-mock" ,python-mock)
13998 ("python-pytest" ,python-pytest)))
13999 (home-page "https://github.com/timothycrosley/isort")
14000 (synopsis "Python utility/library to sort python imports")
14001 (description "@code{python-isort} is a python utility/library to sort
14002 imports alphabetically, and automatically separated into sections. It
14003 provides a command line utility, a python library and plugins for various
14004 editors.")
14005 (license license:expat)
14006 (properties `((python2-variant . ,(delay python2-isort))))))
14007
14008 (define-public python2-isort
14009 (let ((base (package-with-python2
14010 (strip-python2-variant python-isort))))
14011 (package (inherit base)
14012 (native-inputs
14013 `(("python2-futures" ,python2-futures)
14014 ,@(package-native-inputs base))))))
14015
14016 (define-public python2-backports-functools-lru-cache
14017 (package
14018 (name "python2-backports-functools-lru-cache")
14019 (version "1.5")
14020 (source
14021 (origin
14022 (method url-fetch)
14023 ;; only the pypi tarballs contain the necessary metadata
14024 (uri (pypi-uri "backports.functools_lru_cache" version))
14025 (sha256
14026 (base32
14027 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
14028 (build-system python-build-system)
14029 (native-inputs
14030 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14031 (arguments
14032 `(#:python ,python-2))
14033 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14034 (synopsis "Backport of functools.lru_cache from Python 3.3")
14035 (description "@code{python2-backports-functools-lru-cache} is a backport
14036 of @code{functools.lru_cache} from python 3.3.")
14037 (license license:expat)))
14038
14039 (define-public python-configparser
14040 (package
14041 (name "python-configparser")
14042 (version "4.0.2")
14043 (source
14044 (origin
14045 (method url-fetch)
14046 (uri (pypi-uri "configparser" version))
14047 (sha256
14048 (base32
14049 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14050 (native-inputs
14051 `(("python-setuptools_scm" ,python-setuptools-scm)))
14052 (build-system python-build-system)
14053 (home-page "https://github.com/jaraco/configparser/")
14054 (synopsis "Backport of configparser from python 3.5")
14055 (description "@code{python-configparser} is a backport of
14056 @code{configparser} from Python 3.5 so that it can be used directly
14057 in other versions.")
14058 (license license:expat)))
14059
14060 (define-public python2-configparser
14061 (package-with-python2 python-configparser))
14062
14063 (define-public python-mando
14064 (package
14065 (name "python-mando")
14066 (version "0.6.4")
14067 (source (origin
14068 (method url-fetch)
14069 (uri (pypi-uri "mando" version))
14070 (sha256
14071 (base32
14072 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14073 (build-system python-build-system)
14074 (propagated-inputs
14075 `(("python-rst2ansi" ,python-rst2ansi)
14076 ("python-six" ,python-six)))
14077 (native-inputs
14078 `(("python-pytest" ,python-pytest)))
14079 (home-page "https://mando.readthedocs.org/")
14080 (synopsis
14081 "Wrapper around argparse, allowing creation of complete CLI applications")
14082 (description
14083 "This package is a wrapper around argparse, allowing you to write complete CLI
14084 applications in seconds while maintaining all the flexibility.")
14085 (license license:expat)))
14086
14087 (define-public python2-mando
14088 (package-with-python2 python-mando))
14089
14090 (define-public python2-argparse
14091 (package
14092 (name "python2-argparse")
14093 (version "1.4.0")
14094 (source
14095 (origin
14096 (method url-fetch)
14097 (uri (pypi-uri "argparse" version))
14098 (sha256
14099 (base32
14100 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14101 (build-system python-build-system)
14102 (arguments
14103 `(#:python ,python-2))
14104 (home-page "https://github.com/ThomasWaldmann/argparse/")
14105 (synopsis "Python command-line parsing library")
14106 (description
14107 "This package is mostly for people who want to have @code{argparse} on
14108 older Pythons because it was not part of the standard library back then.")
14109 (license license:psfl)))
14110
14111 (define-public python-fudge
14112 (package
14113 (name "python-fudge")
14114 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14115 ;; package, which is currently the only use of this package.
14116 (version "0.9.6")
14117 (source
14118 (origin
14119 (method url-fetch)
14120 (uri (pypi-uri "fudge" version))
14121 (sha256
14122 (base32
14123 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14124 (build-system python-build-system)
14125 (arguments
14126 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14127 (home-page "https://github.com/fudge-py/fudge")
14128 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14129 (description
14130 "Fudge is a Python module for using fake objects (mocks and stubs) to
14131 test real ones.
14132
14133 In readable Python code, you declare the methods available on your fake object
14134 and how they should be called. Then you inject that into your application and
14135 start testing. This declarative approach means you don’t have to record and
14136 playback actions and you don’t have to inspect your fakes after running code.
14137 If the fake object was used incorrectly then you’ll see an informative
14138 exception message with a traceback that points to the culprit.")
14139 (license license:expat)))
14140
14141 (define-public python2-fudge
14142 (package-with-python2 python-fudge))
14143
14144 (define-public python-mwclient
14145 (package
14146 (name "python-mwclient")
14147 (version "0.10.1")
14148 (source
14149 (origin
14150 (method git-fetch)
14151 ;; The PyPI version wouldn't contain tests.
14152 (uri (git-reference
14153 (url "https://github.com/mwclient/mwclient")
14154 (commit (string-append "v" version))))
14155 (file-name (git-file-name name version))
14156 (sha256
14157 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
14158 (build-system python-build-system)
14159 (propagated-inputs
14160 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14161 ("python-six" ,python-six)))
14162 (native-inputs
14163 `(("python-mock" ,python-mock)
14164 ("python-pytest" ,python-pytest)
14165 ("python-pytest-cov" ,python-pytest-cov)
14166 ("python-pytest-runner" ,python-pytest-runner)
14167 ("python-responses" ,python-responses)))
14168 (home-page "https://github.com/btongminh/mwclient")
14169 (synopsis "MediaWiki API client")
14170 (description "This package provides a MediaWiki API client.")
14171 (license license:expat)))
14172
14173 (define-public python2-mwclient
14174 (package-with-python2 python-mwclient))
14175
14176 (define-public python-utils
14177 (package
14178 (name "python-utils")
14179 (version "2.1.0")
14180 (source (origin
14181 (method url-fetch)
14182 (uri (pypi-uri "python-utils" version))
14183 (sha256
14184 (base32
14185 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14186 (build-system python-build-system)
14187 (native-inputs
14188 `(("pytest-runner" ,python-pytest-runner)
14189 ("pytest" ,python-pytest)
14190 ("six" ,python-six)))
14191 (home-page "https://github.com/WoLpH/python-utils")
14192 (synopsis "Convenient utilities not included with the standard Python install")
14193 (description
14194 "Python Utils is a collection of small Python functions and classes which
14195 make common patterns shorter and easier.")
14196 (license license:bsd-2)))
14197
14198 (define-public python2-utils
14199 (package-with-python2 python-utils))
14200
14201 (define-public python-diff-match-patch
14202 (package
14203 (name "python-diff-match-patch")
14204 (version "20121119")
14205 (source
14206 (origin
14207 (method url-fetch)
14208 (uri (pypi-uri "diff-match-patch" version))
14209 (sha256
14210 (base32
14211 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14212 (build-system python-build-system)
14213 (home-page "https://code.google.com/p/google-diff-match-patch")
14214 (synopsis "Synchronize plain text")
14215 (description "Diff Match and Patch libraries offer robust algorithms to
14216 perform the operations required for synchronizing plain text.")
14217 (license license:asl2.0)))
14218
14219 (define-public python2-diff-match-patch
14220 (package-with-python2 python-diff-match-patch))
14221
14222 (define-public python-dirsync
14223 (package
14224 (name "python-dirsync")
14225 (version "2.2.3")
14226 (source
14227 (origin
14228 (method url-fetch)
14229 (uri (pypi-uri "dirsync" version))
14230 (sha256
14231 (base32
14232 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14233 (build-system python-build-system)
14234 (propagated-inputs
14235 `(("six" ,python-six)))
14236 (home-page "https://bitbucket.org/tkhyn/dirsync")
14237 (synopsis "Advanced directory tree synchronisation tool")
14238 (description "Advanced directory tree synchronisation tool.")
14239 (license license:expat)))
14240
14241 (define-public python2-dirsync
14242 (package-with-python2 python-dirsync))
14243
14244 (define-public python-levenshtein
14245 (package
14246 (name "python-levenshtein")
14247 (version "0.12.0")
14248 (source
14249 (origin
14250 (method url-fetch)
14251 (uri (pypi-uri "python-Levenshtein" version))
14252 (sha256
14253 (base32
14254 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14255 (build-system python-build-system)
14256 (home-page "https://github.com/ztane/python-Levenshtein")
14257 (synopsis "Fast computation of Levenshtein distance and string similarity")
14258 (description
14259 "The Levenshtein Python C extension module contains functions for fast computation of
14260 @enumerate
14261 @item Levenshtein (edit) distance, and edit operations
14262 @item string similarity
14263 @item approximate median strings, and generally string averaging
14264 @item string sequence and set similarity
14265 @end enumerate
14266 It supports both normal and Unicode strings.")
14267 (license license:gpl2+)))
14268
14269 (define-public python2-levenshtein
14270 (package-with-python2 python-levenshtein))
14271
14272 (define-public python-scandir
14273 (package
14274 (name "python-scandir")
14275 (version "1.10.0")
14276 (source
14277 (origin
14278 (method url-fetch)
14279 (uri (pypi-uri "scandir" version))
14280 (sha256
14281 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14282 (build-system python-build-system)
14283 (arguments
14284 `(#:phases (modify-phases %standard-phases
14285 (replace 'check
14286 (lambda _
14287 (invoke "python" "test/run_tests.py"))))))
14288 (home-page "https://github.com/benhoyt/scandir")
14289 (synopsis "Directory iteration function")
14290 (description
14291 "Directory iteration function like os.listdir(), except that instead of
14292 returning a list of bare filenames, it yields DirEntry objects that include
14293 file type and stat information along with the name. Using scandir() increases
14294 the speed of os.walk() by 2-20 times (depending on the platform and file
14295 system) by avoiding unnecessary calls to os.stat() in most cases.
14296
14297 This package is part of the Python standard library since version 3.5.")
14298 (license license:bsd-3)))
14299
14300 (define-public python2-scandir
14301 (package-with-python2 python-scandir))
14302
14303 (define-public python2-stemming
14304 (package
14305 (name "python2-stemming")
14306 (version "1.0.1")
14307 (source
14308 (origin
14309 (method url-fetch)
14310 (uri (pypi-uri "stemming" version))
14311 (sha256
14312 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14313 (build-system python-build-system)
14314 (arguments
14315 `(#:python ,python-2))
14316 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14317 (synopsis "Python implementations of various stemming algorithms")
14318 (description
14319 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14320 stemming algorithms for English. These implementations are straightforward and
14321 efficient, unlike some Python versions of the same algorithms available on the
14322 Web. This package is an extraction of the stemming code included in the Whoosh
14323 search engine.")
14324 (license license:public-domain)))
14325
14326 (define-public python-factory-boy
14327 (package
14328 (name "python-factory-boy")
14329 (version "2.8.1")
14330 (source
14331 (origin
14332 (method url-fetch)
14333 (uri (pypi-uri "factory_boy" version))
14334 (sha256
14335 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14336 (build-system python-build-system)
14337 (arguments
14338 ;; Tests are not included in the tarball.
14339 `(#:tests? #f))
14340 (propagated-inputs
14341 `(("faker" ,python-faker)))
14342 (home-page "https://github.com/benhoyt/scandir")
14343 (synopsis "Versatile test fixtures replacement")
14344 (description
14345 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14346
14347 As a fixtures replacement tool, it aims to replace static, hard to maintain
14348 fixtures with easy-to-use factories for complex object.
14349
14350 Instead of building an exhaustive test setup with every possible combination
14351 of corner cases, factory_boy allows you to use objects customized for the
14352 current test, while only declaring the test-specific fields")
14353 (license license:expat)))
14354
14355 (define-public python2-factory-boy
14356 (package-with-python2 python-factory-boy))
14357
14358 (define-public python-translate-toolkit
14359 (package
14360 (name "python-translate-toolkit")
14361 (version "2.1.0")
14362 (source
14363 (origin
14364 (method url-fetch)
14365 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14366 (sha256
14367 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14368 (build-system python-build-system)
14369 (native-inputs
14370 `(("python-pytest" ,python-pytest)
14371 ("python-sphinx" ,python-sphinx)))
14372 (propagated-inputs
14373 `(("python-babel" ,python-babel)
14374 ("python-beautifulsoup4" ,python-beautifulsoup4)
14375 ("python-chardet" ,python-chardet)
14376 ("python-diff-match-patch" ,python-diff-match-patch)
14377 ("python-levenshtein" ,python-levenshtein)
14378 ("python-lxml" ,python-lxml)
14379 ("python-six" ,python-six)
14380 ("python-vobject" ,python-vobject)
14381 ("python-pyyaml" ,python-pyyaml)))
14382 (arguments
14383 ;; TODO: tests are not run, because they end with
14384 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14385 ;; 'parse_funcs'
14386 ;; during test setup.
14387 `(#:tests? #f))
14388 (home-page "https://toolkit.translatehouse.org")
14389 (synopsis "Tools and API for translation and localization engineering")
14390 (description
14391 "Tools and API for translation and localization engineering. It contains
14392 several utilities, as well as an API for building localization tools.")
14393 (license license:gpl2+)))
14394
14395 (define-public python2-translate-toolkit
14396 (package-with-python2 python-translate-toolkit))
14397
14398 (define-public python-packaging
14399 (package
14400 (name "python-packaging")
14401 (version "20.0")
14402 (source
14403 (origin
14404 (method url-fetch)
14405 (uri (pypi-uri "packaging" version))
14406 ;; XXX: The URL in the patch file is wrong, it should be
14407 ;; <https://github.com/pypa/packaging/pull/256>.
14408 (patches (search-patches "python-packaging-test-arch.patch"))
14409 (sha256
14410 (base32
14411 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14412 (build-system python-build-system)
14413 (arguments
14414 `(#:phases (modify-phases %standard-phases
14415 (replace 'check
14416 (lambda* (#:key tests? #:allow-other-keys)
14417 (if tests?
14418 (invoke "py.test" "-vv")
14419 (format #t "test suite not run~%"))
14420 #t)))))
14421 (native-inputs
14422 `(("python-pretend" ,python-pretend)
14423 ("python-pytest" ,python-pytest)))
14424 (propagated-inputs
14425 `(("python-pyparsing" ,python-pyparsing)
14426 ("python-six" ,python-six)))
14427 (home-page "https://github.com/pypa/packaging")
14428 (synopsis "Core utilities for Python packages")
14429 (description "Packaging is a Python module for dealing with Python packages.
14430 It offers an interface for working with package versions, names, and dependency
14431 information.")
14432 ;; From 'LICENSE': This software is made available under the terms of
14433 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14434 ;; Contributions to this software is made under the terms of *both* these
14435 ;; licenses.
14436 (license (list license:asl2.0 license:bsd-2))))
14437
14438 (define-public python2-packaging
14439 (package-with-python2 python-packaging))
14440
14441 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14442 (define-public python-packaging-bootstrap
14443 (hidden-package
14444 (package/inherit
14445 python-packaging
14446 (name "python-packaging-bootstrap")
14447 (native-inputs '())
14448 (propagated-inputs
14449 `(("python-pyparsing" ,python-pyparsing)))
14450 (arguments '(#:tests? #f)))))
14451
14452 (define-public python2-packaging-bootstrap
14453 (hidden-package
14454 (package/inherit
14455 python2-packaging
14456 (name "python2-packaging-bootstrap")
14457 (native-inputs '())
14458 (propagated-inputs
14459 `(("python-pyparsing" ,python2-pyparsing)))
14460 (arguments
14461 `(#:tests? #f
14462 ,@(package-arguments python2-packaging))))))
14463
14464 (define-public python-relatorio
14465 (package
14466 (name "python-relatorio")
14467 (version "0.8.0")
14468 (source
14469 (origin
14470 (method url-fetch)
14471 (uri (pypi-uri "relatorio" version))
14472 (sha256
14473 (base32
14474 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14475 (build-system python-build-system)
14476 (propagated-inputs
14477 `(("python-lxml" ,python-lxml)
14478 ("python-genshi" ,python-genshi)))
14479 (native-inputs
14480 `(("python-magic" ,python-magic)))
14481 (home-page "https://relatorio.tryton.org/")
14482 (synopsis "Templating library able to output ODT and PDF files")
14483 (description "Relatorio is a templating library which provides a way to
14484 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14485 for more filetypes can be easily added by creating plugins for them.")
14486 (license license:gpl3+)))
14487
14488 (define-public python2-relatorio
14489 (package-with-python2 python-relatorio))
14490
14491 (define-public python-radon
14492 (package
14493 (name "python-radon")
14494 (version "4.1.0")
14495 (source
14496 (origin
14497 (method url-fetch)
14498 (uri (pypi-uri "radon" version))
14499 (sha256
14500 (base32
14501 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14502 (build-system python-build-system)
14503 (arguments
14504 `(#:phases (modify-phases %standard-phases
14505 (replace 'check
14506 (lambda _
14507 (invoke "python" "radon/tests/run.py"))))))
14508 (propagated-inputs
14509 `(("python-colorama" ,python-colorama)
14510 ("python-flake8-polyfill" ,python-flake8-polyfill)
14511 ("python-mando" ,python-mando)))
14512 (native-inputs
14513 `(("python-pytest" ,python-pytest)
14514 ("python-pytest-mock" ,python-pytest-mock)))
14515 (home-page "https://radon.readthedocs.org/")
14516 (synopsis "Code Metrics in Python")
14517 (description "Radon is a Python tool which computes various code metrics.
14518 Supported metrics are:
14519 @itemize @bullet
14520 @item raw metrics: SLOC, comment lines, blank lines, &c.
14521 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14522 @item Halstead metrics (all of them)
14523 @item the Maintainability Index (a Visual Studio metric)
14524 @end itemize")
14525 (properties `((python2-variant . ,(delay python2-radon))))
14526 (license license:expat)))
14527
14528 (define-public python2-radon
14529 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14530 (package
14531 (inherit base)
14532 (propagated-inputs
14533 `(("python-configparser" ,python2-configparser)
14534 ("python-future" ,python2-future)
14535 ,@(package-propagated-inputs base))))))
14536
14537 (define-public python-sure
14538 (package
14539 (name "python-sure")
14540 (version "1.4.11")
14541 (source
14542 (origin
14543 (method url-fetch)
14544 (uri (pypi-uri "sure" version))
14545 (sha256
14546 (base32
14547 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14548 (build-system python-build-system)
14549 (propagated-inputs
14550 `(("python-mock" ,python-mock)
14551 ("python-six" ,python-six)))
14552 (native-inputs
14553 `(("python-nose" ,python-nose)))
14554 (home-page "https://github.com/gabrielfalcao/sure")
14555 (synopsis "Automated testing library in python for python")
14556 (description
14557 "Sure is a python library that leverages a DSL for writing assertions.
14558 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14559 (license license:gpl3+)))
14560
14561 (define-public python2-sure
14562 (package-with-python2 python-sure))
14563
14564 (define-public python2-couleur
14565 ;; This package does not seem to support python3 at all, hence,
14566 ;; only the python2 variant definition is provided.
14567 (package
14568 (name "python2-couleur")
14569 (version "0.6.2")
14570 (source
14571 (origin
14572 (method url-fetch)
14573 (uri (pypi-uri "couleur" version))
14574 (sha256
14575 (base32
14576 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14577 (build-system python-build-system)
14578 (arguments
14579 `(#:python ,python-2))
14580 (home-page "https://github.com/gabrielfalcao/couleur")
14581 (synopsis
14582 "ANSI terminal tool for python, colored shell and other handy fancy features")
14583 (description
14584 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14585 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14586 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14587 ;; https://github.com/gabrielfalcao/couleur/issues/11
14588 (license license:lgpl3+)))
14589
14590 (define-public python-misaka
14591 (package
14592 (name "python-misaka")
14593 (version "2.1.1")
14594 (source
14595 (origin
14596 (method url-fetch)
14597 (uri (pypi-uri "misaka" version))
14598 (sha256
14599 (base32
14600 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14601 (build-system python-build-system)
14602 (arguments
14603 `(;; Line 37 of setup.py calls self.run_command('develop')
14604 ;; in the 'check' phase. This command seems to be trying
14605 ;; to write to
14606 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14607 ;; for which it does not have the permission to write.
14608 #:tests? #f))
14609 (propagated-inputs
14610 `(("python-cffi" ,python-cffi)))
14611 (home-page "https://github.com/FSX/misaka")
14612 (synopsis "Python binding for Hoedown")
14613 (description
14614 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14615 library written in C. It features a fast HTML renderer and functionality to make custom
14616 renderers (e.g. man pages or LaTeX).")
14617 (license license:expat)))
14618
14619 (define-public python2-misaka
14620 (package-with-python2 python-misaka))
14621
14622 (define-public python2-steadymark
14623 ;; This is forced into being a python2 only variant
14624 ;; due to its dependence on couleur that has no support
14625 ;; for python3
14626 (package
14627 (name "python2-steadymark")
14628 (version "0.7.3")
14629 (source
14630 (origin
14631 (method url-fetch)
14632 (uri (pypi-uri "steadymark" version))
14633 (sha256
14634 (base32
14635 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14636 (build-system python-build-system)
14637 (native-inputs
14638 `(("python-couleur" ,python2-couleur)
14639 ("python-sure" ,python2-sure)
14640 ("python-misaka" ,python2-misaka)))
14641 (arguments
14642 `(#:python ,python-2
14643 #:phases
14644 (modify-phases %standard-phases
14645 (add-before 'build 'patch-setup-py
14646 (lambda _
14647 ;; Update requirements from dependency==version
14648 ;; to dependency>=version
14649 (substitute* "setup.py"
14650 (("==") ">="))
14651 #t)))))
14652 (home-page "https://github.com/gabrielfalcao/steadymark")
14653 (synopsis "Markdown-based test runner for python")
14654 (description
14655 "@code{Steadymark} allows documentation to be written in github-flavoured
14656 markdown. The documentation may contain snippets of code surrounded by python
14657 code blocks and @code{Steadymark} will find these snippets and run them, making
14658 sure that there are no old malfunctional examples in the documentation examples.")
14659 (license license:expat)))
14660
14661 (define-public python-jsonpointer
14662 (package
14663 (name "python-jsonpointer")
14664 (version "1.10")
14665 (source
14666 (origin
14667 (method url-fetch)
14668 (uri (pypi-uri "jsonpointer" version))
14669 (sha256
14670 (base32
14671 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14672 (build-system python-build-system)
14673 (home-page "https://github.com/stefankoegl/python-json-pointer")
14674 (synopsis "Identify specific nodes in a JSON document")
14675 (description "@code{jsonpointer} allows you to access specific nodes
14676 by path in a JSON document (see RFC 6901).")
14677 (license license:bsd-3)))
14678
14679 (define-public python2-jsonpointer
14680 (package-with-python2 python-jsonpointer))
14681
14682 (define-public python-jsonpatch
14683 (package
14684 (name "python-jsonpatch")
14685 (version "1.16")
14686 (source
14687 (origin
14688 (method git-fetch)
14689 ;; pypi version lacks tests.js
14690 (uri (git-reference
14691 (url "https://github.com/stefankoegl/python-json-patch")
14692 (commit (string-append "v" version))))
14693 (file-name (git-file-name name version))
14694 (sha256
14695 (base32
14696 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14697 (build-system python-build-system)
14698 (native-inputs
14699 `(("python-jsonpointer" ,python-jsonpointer)))
14700 (home-page "https://github.com/stefankoegl/python-json-patch")
14701 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14702 (description "@code{jsonpatch} is a library and program that allows
14703 applying JSON Patches according to RFC 6902.")
14704 (license license:bsd-3)))
14705
14706 (define-public python2-jsonpatch
14707 (package-with-python2 python-jsonpatch))
14708
14709 (define-public python-jsonpatch-0.4
14710 (package (inherit python-jsonpatch)
14711 (name "python-jsonpatch")
14712 (version "0.4")
14713 (source
14714 (origin
14715 (method git-fetch)
14716 (uri (git-reference
14717 (url "https://github.com/stefankoegl/python-json-patch")
14718 (commit (string-append "v" version))))
14719 (file-name (git-file-name name version))
14720 (sha256
14721 (base32
14722 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14723
14724 (define-public python2-jsonpatch-0.4
14725 (package-with-python2 python-jsonpatch-0.4))
14726
14727 (define-public python-rfc3986
14728 (package
14729 (name "python-rfc3986")
14730 (version "1.1.0")
14731 (source (origin
14732 (method url-fetch)
14733 (uri (pypi-uri "rfc3986" version))
14734 (sha256
14735 (base32
14736 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14737 (build-system python-build-system)
14738 (arguments
14739 `(#:modules ((guix build utils)
14740 (guix build python-build-system)
14741 (ice-9 ftw)
14742 (srfi srfi-1)
14743 (srfi srfi-26))
14744 #:phases
14745 (modify-phases %standard-phases
14746 (replace 'check
14747 (lambda _
14748 (let ((cwd (getcwd)))
14749 (setenv "PYTHONPATH"
14750 (string-append cwd "/build/"
14751 (find (cut string-prefix? "lib" <>)
14752 (scandir (string-append cwd "/build")))
14753 ":"
14754 (getenv "PYTHONPATH")))
14755 (invoke "pytest" "-v")))))))
14756 (native-inputs
14757 `(("python-pytest" ,python-pytest)))
14758 (home-page "https://rfc3986.readthedocs.io/")
14759 (synopsis "Parse and validate URI references")
14760 (description
14761 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14762 validation and authority parsing. This module also supports RFC@tie{}6874
14763 which adds support for zone identifiers to IPv6 addresses.")
14764 (license license:asl2.0)))
14765
14766 (define-public python2-rfc3986
14767 (package-with-python2 python-rfc3986))
14768
14769 (define-public python-rfc3987
14770 (package
14771 (name "python-rfc3987")
14772 (version "1.3.7")
14773 (source
14774 (origin
14775 (method url-fetch)
14776 (uri (pypi-uri "rfc3987" version))
14777 (sha256
14778 (base32
14779 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14780 (build-system python-build-system)
14781 (home-page "https://pypi.org/project/rfc3987/")
14782 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14783 (description "@code{rfc3987} provides routines for parsing and
14784 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14785 (license license:gpl3+)))
14786
14787 (define-public python2-rfc3987
14788 (package-with-python2 python-rfc3987))
14789
14790 (define-public python-validators
14791 (package
14792 (name "python-validators")
14793 (version "0.14.2")
14794 (source (origin
14795 (method url-fetch)
14796 (uri (pypi-uri "validators" version))
14797 (sha256
14798 (base32
14799 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14800 (build-system python-build-system)
14801 (arguments
14802 '(#:phases (modify-phases %standard-phases
14803 (replace 'check
14804 (lambda _
14805 (invoke "pytest" "-vv"))))))
14806 (propagated-inputs
14807 `(("python-decorator" ,python-decorator)
14808 ("python-six" ,python-six)))
14809 (native-inputs
14810 `(("python-flake8" ,python-flake8)
14811 ("python-isort" ,python-isort)
14812 ("python-pytest" ,python-pytest)))
14813 (home-page "https://github.com/kvesteri/validators")
14814 (synopsis "Data validation library")
14815 (description
14816 "This package contains validators for different things such as email
14817 addresses, IP addresses, URLs, hashes and more. It has been designed to
14818 be easy to use and not require defining a schema or form just to validate
14819 some input.")
14820 (license license:expat)))
14821
14822 (define-public python2-validators
14823 (package-with-python2 python-validators))
14824
14825 (define-public python-validate-email
14826 (package
14827 (name "python-validate-email")
14828 (version "1.3")
14829 (source
14830 (origin
14831 (method url-fetch)
14832 (uri (pypi-uri "validate_email" version))
14833 (sha256
14834 (base32
14835 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14836 (build-system python-build-system)
14837 (home-page "https://github.com/syrusakbary/validate_email")
14838 (synopsis "Verifies if an email address is valid and really exists")
14839 (description "@code{validate_email} can be used to verify if an email
14840 address is valid and really exists.")
14841 (license license:lgpl3+)))
14842
14843 (define-public python2-validate-email
14844 (package-with-python2 python-validate-email))
14845
14846 (define-public python-flex
14847 (package
14848 (name "python-flex")
14849 (version "6.10.0")
14850 (source
14851 (origin
14852 (method url-fetch)
14853 (uri (pypi-uri "flex" version))
14854 (sha256
14855 (base32
14856 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14857 (build-system python-build-system)
14858 (propagated-inputs
14859 `(("python-click" ,python-click)
14860 ("python-iso8601" ,python-iso8601)
14861 ("python-jsonpointer" ,python-jsonpointer)
14862 ("python-pyyaml" ,python-pyyaml)
14863 ("python-requests" ,python-requests)
14864 ("python-rfc3987" ,python-rfc3987)
14865 ("python-six" ,python-six)
14866 ("python-validate-email" ,python-validate-email)))
14867 (home-page "https://github.com/pipermerriam/flex")
14868 (synopsis "Validates Swagger schemata")
14869 (description "@code{flex} can be used to validate Swagger schemata.")
14870 (license license:bsd-3)))
14871
14872 (define-public python2-flex
14873 (package-with-python2 python-flex))
14874
14875 (define-public python-marshmallow
14876 (package
14877 (name "python-marshmallow")
14878 (version "3.0.0b14")
14879 (source
14880 (origin
14881 (method url-fetch)
14882 (uri (pypi-uri "marshmallow" version))
14883 (sha256
14884 (base32
14885 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14886 (build-system python-build-system)
14887 (propagated-inputs
14888 `(("python-dateutil" ,python-dateutil)
14889 ("python-simplejson" ,python-simplejson)))
14890 (native-inputs
14891 `(("python-pytest" ,python-pytest)
14892 ("python-pytz" ,python-pytz)))
14893 (home-page "https://github.com/marshmallow-code/marshmallow")
14894 (synopsis "Convert complex datatypes to and from native
14895 Python datatypes.")
14896 (description "@code{marshmallow} provides a library for converting
14897 complex datatypes to and from native Python datatypes.")
14898 (license license:expat)))
14899
14900 (define-public python2-marshmallow
14901 (package-with-python2 python-marshmallow))
14902
14903 (define-public python-apispec
14904 (package
14905 (name "python-apispec")
14906 (version "0.25.3")
14907 (source
14908 (origin
14909 (method url-fetch)
14910 (uri (pypi-uri "apispec" version))
14911 (sha256
14912 (base32
14913 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14914 (build-system python-build-system)
14915 (propagated-inputs
14916 `(("python-pyyaml" ,python-pyyaml)))
14917 (native-inputs
14918 `(("python-pytest" ,python-pytest)
14919 ("python-flask" ,python-flask)
14920 ("python-marshmallow" ,python-marshmallow)
14921 ("python-tornado" ,python-tornado)
14922 ("python-bottle" ,python-bottle)
14923 ("python-mock" ,python-mock)))
14924 (home-page "https://github.com/marshmallow-code/apispec")
14925 (synopsis "Swagger 2.0 API specification generator")
14926 (description "@code{python-apispec} is a pluggable API specification
14927 generator. Currently supports the OpenAPI specification (f.k.a.
14928 Swagger 2.0).")
14929 (license license:expat)))
14930
14931 (define-public python2-apispec
14932 (package-with-python2 python-apispec))
14933
14934 (define-public python-flasgger
14935 (package
14936 (name "python-flasgger")
14937 (version "0.6.3")
14938 (source
14939 (origin
14940 (method git-fetch)
14941 (uri (git-reference
14942 (url "https://github.com/rochacbruno/flasgger.git")
14943 (commit version)))
14944 (file-name (git-file-name name version))
14945 (sha256
14946 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14947 (build-system python-build-system)
14948 (arguments
14949 `(#:phases
14950 (modify-phases %standard-phases
14951 (replace 'check
14952 (lambda* (#:key inputs outputs #:allow-other-keys)
14953 (substitute* "Makefile"
14954 (("flake8 flasgger --ignore=F403")
14955 "flake8 flasgger --ignore=E731,F403"))
14956 (setenv "PYTHONPATH" (string-append (getcwd)
14957 ":"
14958 (getenv "PYTHONPATH")))
14959 (invoke "py.test"))))))
14960 (propagated-inputs
14961 `(("python-flask" ,python-flask)
14962 ("python-pyyaml" ,python-pyyaml)
14963 ("python-jsonschema" ,python-jsonschema)
14964 ("python-mistune" ,python-mistune)
14965 ("python-six" ,python-six)))
14966 (native-inputs
14967 `(("python-decorator" ,python-decorator)
14968 ("python-flake8" ,python-flake8)
14969 ("python-flask-restful" ,python-flask-restful)
14970 ("python-flex" ,python-flex)
14971 ("python-pytest" ,python-pytest)
14972 ("python-pytest-cov" ,python-pytest-cov)
14973 ("python-marshmallow" ,python-marshmallow)
14974 ("python-apispec" ,python-apispec)))
14975 (home-page "https://github.com/rochacbruno/flasgger/")
14976 (synopsis "Extract Swagger specs from your Flask project")
14977 (description "@code{python-flasgger} allows extracting Swagger specs
14978 from your Flask project. It is a fork of Flask-Swagger.")
14979 (license license:expat)))
14980
14981 (define-public python2-flasgger
14982 (package-with-python2 python-flasgger))
14983
14984 (define-public python-swagger-spec-validator
14985 (package
14986 (name "python-swagger-spec-validator")
14987 (version "2.4.3")
14988 (source
14989 (origin
14990 (method url-fetch)
14991 (uri (pypi-uri "swagger-spec-validator" version))
14992 (sha256
14993 (base32
14994 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
14995 (build-system python-build-system)
14996 (propagated-inputs
14997 `(("python-jsonschema" ,python-jsonschema)
14998 ("python-pyyaml" ,python-pyyaml)
14999 ("python-six" ,python-six)))
15000 (home-page
15001 "https://github.com/Yelp/swagger_spec_validator")
15002 (synopsis "Validation of Swagger specifications")
15003 (description "@code{swagger_spec_validator} provides a library for
15004 validating Swagger API specifications.")
15005 (license license:asl2.0)))
15006
15007 (define-public python2-swagger-spec-validator
15008 (package-with-python2 python-swagger-spec-validator))
15009
15010 (define-public python-apache-libcloud
15011 (package
15012 (name "python-apache-libcloud")
15013 (version "2.4.0")
15014 (source
15015 (origin
15016 (method url-fetch)
15017 (uri (pypi-uri "apache-libcloud" version))
15018 (sha256
15019 (base32
15020 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15021 (build-system python-build-system)
15022 (arguments
15023 `(#:phases
15024 (modify-phases %standard-phases
15025 (add-after 'unpack 'patch-ssh
15026 (lambda* (#:key inputs #:allow-other-keys)
15027 (substitute* "libcloud/compute/ssh.py"
15028 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15029 "/bin/ssh" "'")))
15030 #t))
15031 (add-after 'unpack 'patch-tests
15032 (lambda _
15033 (substitute* "./libcloud/test/test_file_fixtures.py"
15034 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15035 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15036 return (httplib.OK,
15037 \"1234abcd\",
15038 {\"test\": \"value\"},
15039 httplib.responses[httplib.OK])
15040 def _ascii"))
15041 (substitute* "libcloud/test/compute/test_ssh_client.py"
15042 (("class ShellOutSSHClientTests")
15043 "@unittest.skip(\"Guix container doesn't have ssh service\")
15044 class ShellOutSSHClientTests")
15045 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15046 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15047 (("'.xF0', '.x90', '.x8D', '.x88'")
15048 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15049 #t))
15050 (add-before 'check 'copy-secret
15051 (lambda _
15052 (copy-file "libcloud/test/secrets.py-dist"
15053 "libcloud/test/secrets.py")
15054 #t)))))
15055 (inputs
15056 `(("openssh" ,openssh)))
15057 (propagated-inputs
15058 `(("python-paramiko" ,python-paramiko)
15059 ("python-requests" ,python-requests)))
15060 (native-inputs
15061 `(("python-lockfile" ,python-lockfile)
15062 ("python-mock" ,python-mock)
15063 ("python-pytest" ,python-pytest)
15064 ("python-pytest-runner" ,python-pytest-runner)
15065 ("python-requests-mock" ,python-requests-mock)))
15066 (home-page "https://libcloud.apache.org/")
15067 (synopsis "Unified Cloud API")
15068 (description "@code{libcloud} is a Python library for interacting with
15069 many of the popular cloud service providers using a unified API.")
15070 (license license:asl2.0)))
15071
15072 (define-public python2-apache-libcloud
15073 (package-with-python2 python-apache-libcloud))
15074
15075 (define-public python-smmap
15076 (package
15077 (name "python-smmap")
15078 (version "3.0.1")
15079 (source
15080 (origin
15081 (method url-fetch)
15082 (uri (pypi-uri "smmap" version))
15083 (sha256
15084 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15085 (build-system python-build-system)
15086 (native-inputs
15087 `(("python-nosexcover" ,python-nosexcover)))
15088 (home-page "https://github.com/Byron/smmap")
15089 (synopsis "Python sliding window memory map manager")
15090 (description "@code{smmap} is a pure Python implementation of a sliding
15091 window memory map manager.")
15092 (license license:bsd-3)))
15093
15094 (define-public python-smmap2
15095 (deprecated-package "python-smmap2" python-smmap))
15096
15097 (define-public python2-smmap
15098 (package-with-python2 python-smmap))
15099
15100 (define-public python2-smmap2
15101 (deprecated-package "python2-smmap2" python2-smmap))
15102
15103 (define-public python-regex
15104 (package
15105 (name "python-regex")
15106 (version "2020.6.8")
15107 (source (origin
15108 (method url-fetch)
15109 (uri (pypi-uri "regex" version))
15110 (sha256
15111 (base32
15112 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
15113 (build-system python-build-system)
15114 (arguments
15115 '(#:phases
15116 (modify-phases %standard-phases
15117 (replace 'check
15118 (lambda* (#:key inputs outputs #:allow-other-keys)
15119 (add-installed-pythonpath inputs outputs)
15120 (invoke "python" "-c"
15121 "from regex.test_regex import test_main; test_main()"))))))
15122 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15123 (synopsis "Alternative regular expression module")
15124 (description "This regular expression implementation is backwards-
15125 compatible with the standard @code{re} module, but offers additional
15126 functionality like full case-folding for case-insensitive matches in Unicode.")
15127 (license license:psfl)))
15128
15129 (define-public python2-regex
15130 (package-with-python2 python-regex))
15131
15132 (define-public python2-pyopengl
15133 (package
15134 (name "python2-pyopengl")
15135 (version "3.1.0")
15136 (source
15137 (origin
15138 (method url-fetch)
15139 (uri (pypi-uri "PyOpenGL" version))
15140 (sha256
15141 (base32
15142 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
15143 (arguments
15144 `(#:python ,python-2))
15145 (build-system python-build-system)
15146 (home-page "http://pyopengl.sourceforge.net")
15147 (synopsis "Standard OpenGL bindings for Python")
15148 (description
15149 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15150 related APIs. The binding is created using the standard @code{ctypes}
15151 library.")
15152 (license license:bsd-3)))
15153
15154 (define-public python2-pyopengl-accelerate
15155 (package
15156 (inherit python2-pyopengl)
15157 (name "python2-pyopengl-accelerate")
15158 (version "3.1.0")
15159 (source
15160 (origin
15161 (method url-fetch)
15162 (uri (pypi-uri "PyOpenGL-accelerate" version))
15163 (sha256
15164 (base32
15165 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
15166 (synopsis "Acceleration code for PyOpenGL")
15167 (description
15168 "This is the Cython-coded accelerator module for PyOpenGL.")))
15169
15170 (define-public python-rencode
15171 (package
15172 (name "python-rencode")
15173 (version "1.0.5")
15174 (source
15175 (origin
15176 (method url-fetch)
15177 (uri (pypi-uri "rencode" version))
15178 (sha256
15179 (base32
15180 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15181 (build-system python-build-system)
15182 (arguments
15183 `(#:phases
15184 (modify-phases %standard-phases
15185 (add-before 'check 'delete-bogus-test
15186 ;; This test requires /home/aresch/Downloads, which is not provided by
15187 ;; the build environment.
15188 (lambda _
15189 (delete-file "rencode/t.py")
15190 #t)))))
15191 (native-inputs `(("pkg-config" ,pkg-config)
15192 ("python-cython" ,python-cython)))
15193 (home-page "https://github.com/aresch/rencode")
15194 (synopsis "Serialization of heterogeneous data structures")
15195 (description
15196 "The @code{rencode} module is a data structure serialization library,
15197 similar to @code{bencode} from the BitTorrent project. For complex,
15198 heterogeneous data structures with many small elements, r-encoding stake up
15199 significantly less space than b-encodings. This version of rencode is a
15200 complete rewrite in Cython to attempt to increase the performance over the
15201 pure Python module.")
15202 (license license:bsd-3)))
15203
15204 (define-public python2-rencode
15205 (package-with-python2 python-rencode))
15206
15207 (define-public python-xenon
15208 (package
15209 (name "python-xenon")
15210 (version "0.7.0")
15211 (source
15212 (origin
15213 (method url-fetch)
15214 (uri (pypi-uri "xenon" version))
15215 (sha256
15216 (base32
15217 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15218 (build-system python-build-system)
15219 (native-inputs
15220 `(("python-pyyaml" ,python-pyyaml)
15221 ("python-radon" ,python-radon)
15222 ("python-requests" ,python-requests)
15223 ("python-flake8" ,python-flake8)
15224 ("python-tox" ,python-tox)))
15225 (arguments
15226 `(#:tests? #f ;test suite not shipped with the PyPI archive
15227 #:phases
15228 (modify-phases %standard-phases
15229 (add-before 'build 'patch-test-requirements
15230 (lambda _
15231 ;; Remove httpretty dependency for tests.
15232 (substitute* "setup.py"
15233 (("httpretty") ""))
15234 #t)))))
15235 (home-page "https://xenon.readthedocs.org/")
15236 (synopsis "Monitor code metrics for Python on your CI server")
15237 (description
15238 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15239 Ideally, @code{xenon} is run every time code is committed. Through command
15240 line options, various thresholds can be set for the complexity of code. It
15241 will fail (i.e. it will exit with a non-zero exit code) when any of these
15242 requirements is not met.")
15243 (license license:expat)))
15244
15245 (define-public python2-xenon
15246 (package-with-python2 python-xenon))
15247
15248 (define-public python-pysocks
15249 (package
15250 (name "python-pysocks")
15251 (version "1.7.0")
15252 (source
15253 (origin
15254 (method url-fetch)
15255 (uri (pypi-uri "PySocks" version))
15256 (sha256
15257 (base32
15258 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15259 (build-system python-build-system)
15260 (arguments `(#:tests? #f))
15261 (home-page "https://github.com/Anorov/PySocks")
15262 (synopsis "SOCKS client module")
15263 (description "@code{pysocks} is an updated and semi-actively maintained
15264 version of @code{SocksiPy} with bug fixes and extra features.")
15265 (license license:bsd-3)))
15266
15267 (define-public python2-pysocks
15268 (package-with-python2 python-pysocks))
15269
15270 (define-public python-pydiff
15271 (package
15272 (name "python-pydiff")
15273 (version "0.2")
15274 (source
15275 (origin
15276 (method url-fetch)
15277 (uri (pypi-uri "pydiff" version))
15278 (sha256
15279 (base32
15280 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15281 (build-system python-build-system)
15282 (home-page "https://github.com/myint/pydiff")
15283 (synopsis "Library to diff two Python files at the bytecode level")
15284 (description
15285 "@code{pydiff} makes it easy to look for actual code changes while
15286 ignoring formatting changes.")
15287 (license license:expat)))
15288
15289 (define-public python2-pydiff
15290 (package-with-python2 python-pydiff))
15291
15292 (define-public python-tqdm
15293 (package
15294 (name "python-tqdm")
15295 (version "4.43.0")
15296 (source
15297 (origin
15298 (method url-fetch)
15299 (uri (pypi-uri "tqdm" version))
15300 (sha256
15301 (base32
15302 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15303 (build-system python-build-system)
15304 (arguments
15305 '(#:phases (modify-phases %standard-phases
15306 (replace 'check
15307 (lambda* (#:key inputs outputs #:allow-other-keys)
15308 (add-installed-pythonpath inputs outputs)
15309 ;; This invokation is taken from tox.ini.
15310 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15311 "-d" "-v" "tqdm/"))))))
15312 (native-inputs
15313 `(("python-nose" ,python-nose)))
15314 (home-page "https://github.com/tqdm/tqdm")
15315 (synopsis "Fast, extensible progress meter")
15316 (description
15317 "Make loops show a progress bar on the console by just wrapping any
15318 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15319 design and layout.")
15320 (license (list license:mpl2.0 license:expat))))
15321
15322 (define-public python2-tqdm
15323 (package-with-python2 python-tqdm))
15324
15325 (define-public python-pkginfo
15326 (package
15327 (name "python-pkginfo")
15328 (version "1.4.2")
15329 (source
15330 (origin
15331 (method url-fetch)
15332 (uri (pypi-uri "pkginfo" version))
15333 (sha256
15334 (base32
15335 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15336 (build-system python-build-system)
15337 (arguments
15338 ;; The tests are broken upstream.
15339 '(#:tests? #f))
15340 (home-page
15341 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15342 (synopsis
15343 "Query metadatdata from sdists, bdists, and installed packages")
15344 (description
15345 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15346 source distriubtion (an sdist) or a binary distribution (e.g., created by
15347 running bdist_egg). It can also query the EGG-INFO directory of an installed
15348 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15349 created by running @code{python setup.py develop}).")
15350 (license license:expat)))
15351
15352 (define-public python2-pkginfo
15353 (package-with-python2 python-pkginfo))
15354
15355 (define-public python-twine
15356 (package
15357 (name "python-twine")
15358 (version "1.9.1")
15359 (source
15360 (origin
15361 (method url-fetch)
15362 (uri (pypi-uri "twine" version))
15363 (sha256
15364 (base32
15365 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15366 (build-system python-build-system)
15367 (propagated-inputs
15368 `(("python-tqdm" ,python-tqdm)
15369 ("python-pkginfo" ,python-pkginfo)
15370 ("python-requests" ,python-requests)
15371 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15372 (home-page "https://github.com/pypa/twine")
15373 (synopsis "Collection of utilities for interacting with PyPI")
15374 (description
15375 "@code{twine} currently supports registering projects and uploading
15376 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15377 their files and supports any packaging format (including wheels).")
15378 (license license:asl2.0)))
15379
15380 (define-public python2-twine
15381 (package-with-python2 python-twine))
15382
15383 (define-public python-linecache2
15384 (package
15385 (name "python-linecache2")
15386 (version "1.0.0")
15387 (source
15388 (origin
15389 (method url-fetch)
15390 (uri (pypi-uri "linecache2" version))
15391 (sha256
15392 (base32
15393 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15394 (build-system python-build-system)
15395 (arguments
15396 `(;; The tests depend on unittest2, and our version is a bit too old.
15397 #:tests? #f))
15398 (native-inputs
15399 `(("python-pbr" ,python-pbr-minimal)))
15400 (home-page
15401 "https://github.com/testing-cabal/linecache2")
15402 (synopsis "Backports of the linecache module")
15403 (description
15404 "The linecache module allows one to get any line from any file, while
15405 attempting to optimize internally, using a cache, the common case where many
15406 lines are read from a single file.")
15407 (license license:psfl)))
15408
15409 (define-public python2-linecache2
15410 (package-with-python2 python-linecache2))
15411
15412 (define-public python-traceback2
15413 (package
15414 (name "python-traceback2")
15415 (version "1.4.0")
15416 (source
15417 (origin
15418 (method url-fetch)
15419 (uri (pypi-uri "traceback2" version))
15420 (sha256
15421 (base32
15422 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15423 (build-system python-build-system)
15424 (arguments
15425 `(;; python-traceback2 and python-unittest2 depend on one another.
15426 #:tests? #f))
15427 (native-inputs
15428 `(("python-pbr" ,python-pbr-minimal)))
15429 (propagated-inputs
15430 `(("python-linecache2" ,python-linecache2)))
15431 (home-page
15432 "https://github.com/testing-cabal/traceback2")
15433 (synopsis "Backports of the traceback module")
15434 (description
15435 "This module provides a standard interface to extract, format and print
15436 stack traces of Python programs. It exactly mimics the behavior of the Python
15437 interpreter when it prints a stack trace.")
15438 (license license:psfl)))
15439
15440 (define-public python2-traceback2
15441 (package-with-python2 python-traceback2))
15442
15443 (define-public python-ratelimiter
15444 (package
15445 (name "python-ratelimiter")
15446 (version "1.2.0")
15447 (source
15448 (origin
15449 (method url-fetch)
15450 (uri (pypi-uri "ratelimiter" version))
15451 (sha256
15452 (base32
15453 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15454 (build-system python-build-system)
15455 (arguments
15456 '(#:tests? #f)) ; There are no tests in the pypi archive.
15457 (home-page "https://github.com/RazerM/ratelimiter")
15458 (synopsis "Simple rate limiting object")
15459 (description
15460 "The @code{ratelimiter} module ensures that an operation will not be
15461 executed more than a given number of times during a given period.")
15462 (license license:asl2.0)))
15463
15464 (define-public python2-ratelimiter
15465 (package-with-python2 python-ratelimiter))
15466
15467 (define-public python-dukpy
15468 (package
15469 (name "python-dukpy")
15470 (version "0.3")
15471 (source
15472 (origin
15473 (method git-fetch)
15474 (uri (git-reference
15475 (url "https://github.com/kovidgoyal/dukpy.git")
15476 (commit (string-append "v" version))))
15477 (file-name (git-file-name name version))
15478 (sha256
15479 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15480 (build-system python-build-system)
15481 (home-page "https://github.com/kovidgoyal/dukpy")
15482 (synopsis "Run JavaScript in python")
15483 (description
15484 "dukpy is a JavaScript runtime environment for Python using the duktape
15485 embeddable JavaScript engine.")
15486 ;; Dukpy is licensed under MIT like the embedded duktape library,
15487 ;; with 'errors.c' as GPL3.
15488 (license (list license:expat license:gpl3))))
15489
15490 (define-public python2-dukpy
15491 (package-with-python2 python-dukpy))
15492
15493 (define-public python-jsonrpclib-pelix
15494 (package
15495 (name "python-jsonrpclib-pelix")
15496 (version "0.3.2")
15497 (source
15498 (origin
15499 (method url-fetch)
15500 (uri (pypi-uri "jsonrpclib-pelix" version))
15501 (sha256
15502 (base32
15503 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15504 (build-system python-build-system)
15505 (arguments
15506 `(#:tests? #f)) ; no tests in PyPI tarball
15507 (home-page "https://github.com/tcalmant/jsonrpclib/")
15508 (synopsis "JSON-RPC 2.0 client library for Python")
15509 (description
15510 "This library implements the JSON-RPC v2.0
15511 specification (backwards-compatible) as a client library for Python. This
15512 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15513 services.")
15514 (license license:asl2.0)))
15515
15516 (define-public python2-jsonrpclib-pelix
15517 (package-with-python2 python-jsonrpclib-pelix))
15518
15519 (define-public python-setuptools-scm-git-archive
15520 (package
15521 (name "python-setuptools-scm-git-archive")
15522 (version "1.0")
15523 (source
15524 (origin
15525 (method url-fetch)
15526 (uri (pypi-uri "setuptools_scm_git_archive" version))
15527 (sha256
15528 (base32
15529 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15530 (build-system python-build-system)
15531 (native-inputs
15532 `(("python-pytest" ,python-pytest)))
15533 (propagated-inputs
15534 `(("python-setuptools-scm" ,python-setuptools-scm)))
15535 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15536 (synopsis "Setuptools_scm plugin for git archives")
15537 (description
15538 "The setuptools_scm_git_archive package is a plugin to
15539 setuptools_scm, which supports obtaining versions from git archives that
15540 belong to tagged versions.")
15541 (license license:expat)))
15542
15543 (define-public python2-setuptools-scm-git-archive
15544 (package-with-python2 python-setuptools-scm-git-archive))
15545
15546 (define-public python-setuptools-git
15547 (package
15548 (name "python-setuptools-git")
15549 (version "1.2")
15550 (source
15551 (origin
15552 (method url-fetch)
15553 (uri (pypi-uri "setuptools-git" version))
15554 (sha256
15555 (base32
15556 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15557 (build-system python-build-system)
15558 (arguments
15559 `(#:phases
15560 (modify-phases %standard-phases
15561 ;; This is needed for tests.
15562 (add-after 'unpack 'configure-git
15563 (lambda _
15564 (setenv "HOME" "/tmp")
15565 (invoke "git" "config" "--global" "user.email" "guix")
15566 (invoke "git" "config" "--global" "user.name" "guix")
15567 #t)))))
15568 (native-inputs
15569 `(("git" ,git-minimal)))
15570 (home-page "https://github.com/msabramo/setuptools-git")
15571 (synopsis "Setuptools revision control system plugin for Git")
15572 (description
15573 "This package provides a plugin for Setuptools for revision control with
15574 Git.")
15575 (license license:bsd-3)))
15576
15577 (define-public python-pyclipper
15578 (package
15579 (name "python-pyclipper")
15580 (version "1.1.0.post3")
15581 (source
15582 (origin
15583 (method url-fetch)
15584 (uri (pypi-uri "pyclipper" version ".zip"))
15585 (sha256
15586 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15587 (modules '((guix build utils)))
15588 (snippet
15589 '(begin
15590 ;; This file is generated by Cython.
15591 (delete-file "pyclipper/pyclipper.cpp") #t))))
15592 (build-system python-build-system)
15593 (arguments
15594 `(#:phases
15595 (modify-phases %standard-phases
15596 (add-before 'build 'cythonize-sources
15597 (lambda _
15598 (with-directory-excursion "pyclipper"
15599 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15600 (propagated-inputs
15601 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15602 (native-inputs
15603 `(("python-cython" ,python-cython)
15604 ("python-pytest" ,python-pytest)
15605 ("python-pytest-runner" ,python-pytest-runner)
15606 ("python-unittest2" ,python-unittest2)
15607 ("unzip" ,unzip)))
15608 (home-page "https://github.com/greginvm/pyclipper")
15609 (synopsis "Wrapper for Angus Johnson's Clipper library")
15610 (description
15611 "Pyclipper is a Cython wrapper for the C++ translation of the
15612 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15613 (license license:expat)))
15614
15615 (define-public python2-pyclipper
15616 (package-with-python2 python-pyclipper))
15617
15618 (define-public python2-booleanoperations
15619 (package
15620 (name "python2-booleanoperations")
15621 (version "0.7.1")
15622 (source
15623 (origin
15624 (method url-fetch)
15625 (uri (pypi-uri "booleanOperations" version ".zip"))
15626 (sha256
15627 (base32
15628 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15629 (build-system python-build-system)
15630 (arguments
15631 `(#:python ,python-2))
15632 (native-inputs
15633 `(("unzip" ,unzip)
15634 ("python2-pytest" ,python2-pytest)
15635 ("python2-pytest-runner" ,python2-pytest-runner)))
15636 (propagated-inputs
15637 `(("python-fonttools" ,python2-fonttools)
15638 ("python-pyclipper" ,python2-pyclipper)
15639 ("python-ufolib" ,python2-ufolib)))
15640 (home-page "https://github.com/typemytype/booleanOperations")
15641 (synopsis "Boolean operations on paths")
15642 (description
15643 "BooleanOperations provides a Python library that enables
15644 boolean operations on paths.")
15645 (license license:expat)))
15646
15647 (define-public python-tempdir
15648 (package
15649 (name "python-tempdir")
15650 (version "0.7.1")
15651 (source
15652 (origin
15653 (method url-fetch)
15654 (uri (pypi-uri "tempdir" version))
15655 (sha256
15656 (base32
15657 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15658 (build-system python-build-system)
15659 (home-page "https://pypi.org/project/tempdir/")
15660 (arguments
15661 ;; the package has no tests
15662 '(#:tests? #f))
15663 (synopsis "Python library for managing temporary directories")
15664 (description
15665 "This library manages temporary directories that are automatically
15666 deleted with all their contents when they are no longer needed. It is
15667 particularly convenient for use in tests.")
15668 (license license:expat)))
15669
15670 (define-public python2-tempdir
15671 (package-with-python2 python-tempdir))
15672
15673 (define-public python-activepapers
15674 (package
15675 (name "python-activepapers")
15676 (version "0.2.2")
15677 (source
15678 (origin
15679 (method url-fetch)
15680 (uri (pypi-uri "ActivePapers.Py" version))
15681 (sha256
15682 (base32
15683 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15684 (build-system python-build-system)
15685 (arguments
15686 `(#:modules ((ice-9 ftw)
15687 (srfi srfi-1)
15688 (guix build utils)
15689 (guix build python-build-system))
15690
15691 #:phases
15692 (modify-phases %standard-phases
15693 (add-after 'unpack 'delete-python2-code
15694 (lambda _
15695 (for-each delete-file
15696 '("lib/activepapers/builtins2.py"
15697 "lib/activepapers/standardlib2.py"
15698 "lib/activepapers/utility2.py"))))
15699 (replace 'check
15700 (lambda _
15701 ;; Deactivate the test cases that download files
15702 (setenv "NO_NETWORK_ACCESS" "1")
15703 ;; For some strange reason, some tests fail if nosetests runs all
15704 ;; test modules in a single execution. They pass if each test
15705 ;; module is run individually.
15706 (for-each (lambda (filename)
15707 (invoke "nosetests"
15708 (string-append "tests/" filename)))
15709 (scandir "tests"
15710 (lambda (filename)
15711 (string-suffix? ".py" filename)))))))))
15712 (native-inputs
15713 `(("python-tempdir" ,python-tempdir)
15714 ("python-nose" ,python-nose)))
15715 (propagated-inputs
15716 `(("python-h5py" ,python-h5py)))
15717 (home-page "https://www.activepapers.org/")
15718 (synopsis "Executable papers for scientific computing")
15719 (description
15720 "ActivePapers is a tool for working with executable papers, which
15721 combine data, code, and documentation in single-file packages,
15722 suitable for publication as supplementary material or on repositories
15723 such as figshare or Zenodo.")
15724 (properties `((python2-variant . ,(delay python2-activepapers))))
15725 (license license:bsd-3)))
15726
15727 (define-public python2-activepapers
15728 (let ((base (package-with-python2
15729 (strip-python2-variant python-activepapers))))
15730 (package
15731 (inherit base)
15732 (arguments
15733 (substitute-keyword-arguments (package-arguments base)
15734 ((#:phases phases)
15735 `(modify-phases ,phases
15736 (delete 'delete-python2-code)
15737 (add-after 'unpack 'delete-python3-code
15738 (lambda _
15739 (for-each delete-file
15740 '("lib/activepapers/builtins3.py"
15741 "lib/activepapers/standardlib3.py"
15742 "lib/activepapers/utility3.py")))))))))))
15743
15744 (define-public python-semver
15745 (package
15746 (name "python-semver")
15747 (version "2.9.0")
15748 (source
15749 (origin
15750 (method url-fetch)
15751 (uri (pypi-uri "semver" version))
15752 (sha256
15753 (base32
15754 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15755 (build-system python-build-system)
15756 (native-inputs
15757 `(("python-appdirs" ,python-appdirs)
15758 ("python-distlib" ,python-distlib)
15759 ("python-importlib-metadata" ,python-importlib-metadata)
15760 ("python-filelock" ,python-filelock)
15761 ("python-six" ,python-six)
15762 ("python-tox" ,python-tox)
15763 ("python-virtualenv" ,python-virtualenv)))
15764 (home-page "https://github.com/k-bx/python-semver")
15765 (synopsis "Python helper for Semantic Versioning")
15766 (description "This package provides a Python library for
15767 @url{Semantic Versioning, http://semver.org/}.")
15768 (license license:bsd-3)))
15769
15770 (define-public python2-semver
15771 (package-with-python2 python-semver))
15772
15773 (define-public python-pyro4
15774 (package
15775 (name "python-pyro4")
15776 (version "4.77")
15777 (source
15778 (origin
15779 (method url-fetch)
15780 (uri (pypi-uri "Pyro4" version))
15781 (sha256
15782 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15783 (build-system python-build-system)
15784 (arguments
15785 '(#:tests? #f)) ;FIXME: Some tests require network access.
15786 (native-inputs
15787 `(("python-cloudpickle" ,python-cloudpickle)
15788 ("python-dill" ,python-dill)
15789 ("python-msgpack" ,python-msgpack)))
15790 (propagated-inputs
15791 `(("python-serpent" ,python-serpent)))
15792 (home-page "https://pyro4.readthedocs.io")
15793 (synopsis "Distributed object middleware for Python")
15794 (description
15795 "Pyro enables you to build applications in which objects can talk to each
15796 other over the network. You can just use normal Python method calls to call
15797 objects on other machines, also known as remote procedure calls (RPC).")
15798 (license license:expat)))
15799
15800 (define-public python2-pyro
15801 (package
15802 (name "python2-pyro")
15803 (version "3.16")
15804 (source
15805 (origin
15806 (method url-fetch)
15807 (uri (pypi-uri "Pyro" version))
15808 (file-name (string-append "Pyro-" version ".tar.gz"))
15809 (sha256
15810 (base32
15811 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15812 (build-system python-build-system)
15813 (arguments
15814 ;; Pyro is not compatible with Python 3
15815 `(#:python ,python-2
15816 ;; Pyro has no test cases for automatic execution
15817 #:tests? #f))
15818 (home-page "https://pythonhosted.org/Pyro/")
15819 (synopsis "Distributed object manager for Python")
15820 (description "Pyro is a Distributed Object Technology system
15821 written in Python that is designed to be easy to use. It resembles
15822 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15823 which is a system and language independent Distributed Object Technology
15824 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15825 longer maintained. New projects should use Pyro4 instead, which
15826 is the new Pyro version that is actively developed.")
15827 (license license:expat)))
15828
15829 (define-public python2-scientific
15830 (package
15831 (name "python2-scientific")
15832 (version "2.9.4")
15833 (source
15834 (origin
15835 (method git-fetch)
15836 (uri (git-reference
15837 (url "https://github.com/khinsen/ScientificPython")
15838 (commit (string-append "rel" version))))
15839 (file-name (git-file-name name version))
15840 (sha256
15841 (base32
15842 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15843 (build-system python-build-system)
15844 (inputs
15845 `(("netcdf" ,netcdf)))
15846 (propagated-inputs
15847 `(("python-numpy" ,python2-numpy-1.8)
15848 ("python-pyro" ,python2-pyro)))
15849 (arguments
15850 ;; ScientificPython is not compatible with Python 3
15851 `(#:python ,python-2
15852 #:tests? #f ; No test suite
15853 #:phases
15854 (modify-phases %standard-phases
15855 (replace 'build
15856 (lambda* (#:key inputs #:allow-other-keys)
15857 (invoke "python" "setup.py" "build"
15858 (string-append "--netcdf_prefix="
15859 (assoc-ref inputs "netcdf"))))))))
15860 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15861 (synopsis "Python modules for scientific computing")
15862 (description "ScientificPython is a collection of Python modules that are
15863 useful for scientific computing. Most modules are rather general (Geometry,
15864 physical units, automatic derivatives, ...) whereas others are more
15865 domain-specific (e.g. netCDF and PDB support). The library is currently
15866 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15867 (license license:cecill-c)))
15868
15869 (define-public python2-mmtk
15870 (package
15871 (name "python2-mmtk")
15872 (version "2.7.12")
15873 (source
15874 (origin
15875 (method git-fetch)
15876 (uri (git-reference
15877 (url "https://github.com/khinsen/MMTK")
15878 (commit (string-append "rel" version))))
15879 (file-name (git-file-name name version))
15880 (sha256
15881 (base32
15882 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15883 (build-system python-build-system)
15884 (native-inputs
15885 `(("netcdf" ,netcdf)))
15886 (propagated-inputs
15887 `(("python-scientific" ,python2-scientific)
15888 ("python-tkinter" ,python-2 "tk")))
15889 (arguments
15890 `(#:python ,python-2
15891 #:tests? #f
15892 #:phases
15893 (modify-phases %standard-phases
15894 (add-before 'build 'includes-from-scientific
15895 (lambda* (#:key inputs #:allow-other-keys)
15896 (mkdir-p "Include/Scientific")
15897 (copy-recursively
15898 (string-append
15899 (assoc-ref inputs "python-scientific")
15900 "/include/python2.7/Scientific")
15901 "Include/Scientific"))))))
15902 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15903 (synopsis "Python library for molecular simulation")
15904 (description "MMTK is a library for molecular simulations with an emphasis
15905 on biomolecules. It provides widely used methods such as Molecular Dynamics
15906 and normal mode analysis, but also basic routines for implementing new methods
15907 for simulation and analysis. The library is currently not actively maintained
15908 and works only with Python 2 and NumPy < 1.9.")
15909 (license license:cecill-c)))
15910
15911 (define-public python-phonenumbers
15912 (package
15913 (name "python-phonenumbers")
15914 (version "8.9.1")
15915 (source
15916 (origin
15917 (method url-fetch)
15918 (uri (pypi-uri "phonenumbers" version))
15919 (sha256
15920 (base32
15921 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15922 (build-system python-build-system)
15923 (home-page
15924 "https://github.com/daviddrysdale/python-phonenumbers")
15925 (synopsis
15926 "Python library for dealing with international phone numbers")
15927 (description
15928 "This package provides a Python port of Google's libphonenumber library.")
15929 (license license:asl2.0)))
15930
15931 (define-public python2-phonenumbers
15932 (package-with-python2 python-phonenumbers))
15933
15934 (define-public python-send2trash
15935 (package
15936 (name "python-send2trash")
15937 (version "1.5.0")
15938 (source
15939 (origin (method git-fetch)
15940 ;; Source tarball on PyPI doesn't include tests.
15941 (uri (git-reference
15942 (url "https://github.com/hsoft/send2trash.git")
15943 (commit version)))
15944 (file-name (git-file-name name version))
15945 (sha256
15946 (base32
15947 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15948 (build-system python-build-system)
15949 (arguments
15950 '(#:phases
15951 (modify-phases %standard-phases
15952 (add-before 'check 'pre-check
15953 (lambda _
15954 (mkdir-p "/tmp/foo")
15955 (setenv "HOME" "/tmp/foo")
15956 #t)))))
15957 (home-page "https://github.com/hsoft/send2trash")
15958 (synopsis "Send files to the user's @file{~/Trash} directory")
15959 (description "This package provides a Python library to send files to the
15960 user's @file{~/Trash} directory.")
15961 (properties `((python2-variant . ,(delay python2-send2trash))))
15962 (license license:bsd-3)))
15963
15964 (define-public python2-send2trash
15965 (package
15966 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15967 (arguments
15968 (substitute-keyword-arguments (package-arguments python-send2trash)
15969 ((#:phases phases)
15970 `(modify-phases ,phases
15971 (add-before 'check 'setenv
15972 (lambda _
15973 (setenv "PYTHONPATH"
15974 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15975 #t))))))))
15976
15977 (define-public python-yapf
15978 (package
15979 (name "python-yapf")
15980 (version "0.29.0")
15981 (source
15982 (origin
15983 (method url-fetch)
15984 (uri (pypi-uri "yapf" version))
15985 (sha256
15986 (base32
15987 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
15988 (build-system python-build-system)
15989 (home-page "https://github.com/google/yapf")
15990 (synopsis "Formatter for Python code")
15991 (description "YAPF is a formatter for Python code. It's based off of
15992 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
15993 takes the code and reformats it to the best formatting that conforms to the
15994 style guide, even if the original code didn't violate the style guide.")
15995 (license license:asl2.0)))
15996
15997 (define-public python2-yapf
15998 (package-with-python2 python-yapf))
15999
16000 (define-public python-gyp
16001 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16002 (revision "0"))
16003 (package
16004 (name "python-gyp")
16005 ;; Google does not release versions,
16006 ;; based on second most recent commit date.
16007 (version (git-version "0.0.0" revision commit))
16008 (source
16009 (origin
16010 ;; Google does not release tarballs,
16011 ;; git checkout is needed.
16012 (method git-fetch)
16013 (uri (git-reference
16014 (url "https://chromium.googlesource.com/external/gyp")
16015 (commit commit)))
16016 (file-name (git-file-name name version))
16017 (sha256
16018 (base32
16019 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
16020 (build-system python-build-system)
16021 (home-page "https://gyp.gsrc.io/")
16022 (synopsis "GYP is a Meta-Build system")
16023 (description
16024 "GYP builds build systems for large, cross platform applications.
16025 It can be used to generate XCode projects, Visual Studio projects, Ninja build
16026 files, and Makefiles.")
16027 (license license:bsd-3))))
16028
16029 (define-public python2-gyp
16030 (package-with-python2 python-gyp))
16031
16032 (define-public python-whatever
16033 (package
16034 (name "python-whatever")
16035 (version "0.6")
16036 (source
16037 (origin
16038 (method git-fetch)
16039 (uri (git-reference
16040 (url "https://github.com/Suor/whatever")
16041 (commit version)))
16042 (file-name (git-file-name name version))
16043 (sha256
16044 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16045 (build-system python-build-system)
16046 (arguments
16047 `(#:phases
16048 (modify-phases %standard-phases
16049 (replace 'check
16050 (lambda _
16051 (invoke "py.test"))))))
16052 (native-inputs
16053 `(("python-pytest" ,python-pytest)))
16054 (home-page "http://github.com/Suor/whatever")
16055 (synopsis "Make anonymous functions by partial application of operators")
16056 (description "@code{whatever} provides an easy way to make anonymous
16057 functions by partial application of operators.")
16058 (license license:bsd-3)))
16059
16060 (define-public python2-whatever
16061 (package-with-python2 python-whatever))
16062
16063 (define-public python-funcy
16064 (package
16065 (name "python-funcy")
16066 (version "1.11")
16067 (source
16068 (origin
16069 (method git-fetch)
16070 (uri (git-reference
16071 (url "https://github.com/Suor/funcy.git")
16072 (commit version)))
16073 (sha256
16074 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16075 (file-name (git-file-name name version))))
16076 (build-system python-build-system)
16077 (arguments
16078 `(#:phases
16079 (modify-phases %standard-phases
16080 (replace 'check
16081 (lambda _
16082 (invoke "py.test"))))))
16083 (native-inputs
16084 `(("python-pytest" ,python-pytest)
16085 ("python-whatever" ,python-whatever)))
16086 (home-page "http://github.com/Suor/funcy")
16087 (synopsis "Functional tools")
16088 (description "@code{funcy} is a library that provides functional tools.
16089 Examples are:
16090 @enumerate
16091 @item merge - Merges collections of the same type
16092 @item walk - Type-preserving map
16093 @item select - Selects a part of a collection
16094 @item take - Takes the first n items of a collection
16095 @item first - Takes the first item of a collection
16096 @item remove - Predicated-removes items of a collection
16097 @item concat - Concatenates two collections
16098 @item flatten - Flattens a collection with subcollections
16099 @item distinct - Returns only distinct items
16100 @item split - Predicated-splits a collection
16101 @item split_at - Splits a collection at a given item
16102 @item group_by - Groups items by group
16103 @item pairwise - Pairs off adjacent items
16104 @item partial - Partially-applies a function
16105 @item curry - Curries a function
16106 @item compose - Composes functions
16107 @item complement - Complements a predicate
16108 @item all_fn - \"all\" with predicate
16109 @end enumerate")
16110 (license license:bsd-3)))
16111
16112 (define-public python2-funcy
16113 (package-with-python2 python-funcy))
16114
16115 (define-public python-isoweek
16116 (package
16117 (name "python-isoweek")
16118 (version "1.3.3")
16119 (source
16120 (origin
16121 (method url-fetch)
16122 (uri (pypi-uri "isoweek" version))
16123 (sha256
16124 (base32
16125 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16126 (build-system python-build-system)
16127 (home-page "https://github.com/gisle/isoweek")
16128 (synopsis "Objects representing a week")
16129 (description "The @code{isoweek} module provide the class Week that
16130 implements the week definition of ISO 8601. This standard also defines
16131 a notation for identifying weeks; yyyyWww (where the W is a literal).
16132 Week instances stringify to this form.")
16133 (license license:bsd-3)))
16134
16135 (define-public python2-isoweek
16136 (package-with-python2 python-isoweek))
16137
16138 (define-public python-tokenize-rt
16139 (package
16140 (name "python-tokenize-rt")
16141 (version "2.0.1")
16142 (source
16143 (origin
16144 (method url-fetch)
16145 (uri (pypi-uri "tokenize-rt" version))
16146 (sha256
16147 (base32
16148 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16149 (build-system python-build-system)
16150 (home-page "https://github.com/asottile/tokenize-rt")
16151 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16152 (description
16153 "This Python library is a wrapper around @code{tokenize} from the Python
16154 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16155 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16156 and @code{tokens_to_src} to roundtrip.")
16157 (license license:expat)))
16158
16159 (define-public python-future-fstrings
16160 (package
16161 (name "python-future-fstrings")
16162 (version "0.4.1")
16163 (source
16164 (origin
16165 (method url-fetch)
16166 (uri (pypi-uri "future_fstrings" version))
16167 (sha256
16168 (base32
16169 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16170 (build-system python-build-system)
16171 (propagated-inputs
16172 `(("python-tokenize-rt" ,python-tokenize-rt)))
16173 (home-page "https://github.com/asottile/future-fstrings")
16174 (synopsis "Backport of fstrings to Python < 3.6")
16175 (description
16176 "This package provides a UTF-8 compatible encoding
16177 @code{future_fstrings}, which performs source manipulation. It decodes the
16178 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16179 @code{f} strings.")
16180 (license license:expat)))
16181
16182 (define-public python-typed-ast
16183 (package
16184 (name "python-typed-ast")
16185 (version "1.4.0")
16186 (source
16187 (origin
16188 (method git-fetch)
16189 (uri (git-reference
16190 (url "https://github.com/python/typed_ast.git")
16191 (commit version)))
16192 (sha256
16193 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16194 (file-name (git-file-name name version))))
16195 (build-system python-build-system)
16196 (arguments
16197 `(#:modules ((guix build utils)
16198 (guix build python-build-system)
16199 (ice-9 ftw)
16200 (srfi srfi-1)
16201 (srfi srfi-26))
16202 #:phases
16203 (modify-phases %standard-phases
16204 (replace 'check
16205 (lambda _
16206 (let ((cwd (getcwd)))
16207 (setenv "PYTHONPATH"
16208 (string-append cwd "/build/"
16209 (find (cut string-prefix? "lib" <>)
16210 (scandir (string-append cwd "/build")))
16211 ":"
16212 (getenv "PYTHONPATH"))))
16213 (invoke "pytest")
16214 #t)))))
16215 (native-inputs `(("python-pytest" ,python-pytest)))
16216 (home-page "https://github.com/python/typed_ast")
16217 (synopsis "Fork of Python @code{ast} modules with type comment support")
16218 (description "This package provides a parser similar to the standard
16219 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16220 include PEP 484 type comments and are independent of the version of Python
16221 under which they are run. The @code{typed_ast} parsers produce the standard
16222 Python AST (plus type comments), and are both fast and correct, as they are
16223 based on the CPython 2.7 and 3.7 parsers.")
16224 ;; See the file "LICENSE" for the details.
16225 (license (list license:psfl
16226 license:asl2.0
16227 license:expat)))) ;ast27/Parser/spark.py
16228
16229 (define-public python-typing
16230 (package
16231 (name "python-typing")
16232 (version "3.7.4.1")
16233 (source
16234 (origin
16235 (method url-fetch)
16236 (uri (pypi-uri "typing" version))
16237 (sha256
16238 (base32
16239 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16240 (build-system python-build-system)
16241 (home-page "https://docs.python.org/3/library/typing.html")
16242 (synopsis "Type hints for Python")
16243 (description "This is a backport of the standard library @code{typing}
16244 module to Python versions older than 3.5. Typing defines a standard notation
16245 for Python function and variable type annotations. The notation can be used
16246 for documenting code in a concise, standard format, and it has been designed
16247 to also be used by static and runtime type checkers, static analyzers, IDEs
16248 and other tools.")
16249 (license license:psfl)))
16250
16251 (define-public python2-typing
16252 (package-with-python2 python-typing))
16253
16254 (define-public python-typing-extensions
16255 (package
16256 (name "python-typing-extensions")
16257 (version "3.7.4.1")
16258 (source
16259 (origin
16260 (method url-fetch)
16261 (uri (pypi-uri "typing_extensions" version))
16262 (sha256
16263 (base32
16264 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16265 (build-system python-build-system)
16266 (home-page
16267 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16268 (synopsis "Experimental type hints for Python")
16269 (description
16270 "The typing_extensions module contains additional @code{typing} hints not
16271 yet present in the of the @code{typing} standard library.
16272 Included are implementations of:
16273 @enumerate
16274 @item ClassVar
16275 @item ContextManager
16276 @item Counter
16277 @item DefaultDict
16278 @item Deque
16279 @item NewType
16280 @item NoReturn
16281 @item overload
16282 @item Protocol
16283 @item runtime
16284 @item Text
16285 @item Type
16286 @item TYPE_CHECKING
16287 @item AsyncGenerator
16288 @end enumerate\n")
16289 (license license:psfl)))
16290
16291 (define-public bpython
16292 (package
16293 (name "bpython")
16294 (version "0.18")
16295 (source
16296 (origin
16297 (method url-fetch)
16298 (uri (pypi-uri "bpython" version))
16299 (sha256
16300 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16301 (build-system python-build-system)
16302 (arguments
16303 `(#:phases
16304 (modify-phases %standard-phases
16305 (add-after 'unpack 'remove-failing-test
16306 (lambda _
16307 ;; Remove failing test. FIXME: make it pass
16308 (delete-file "bpython/test/test_args.py")
16309 #t))
16310 (add-after 'wrap 'add-aliases
16311 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16312 (lambda* (#:key outputs #:allow-other-keys)
16313 (let ((out (assoc-ref outputs "out")))
16314 (for-each
16315 (lambda (old new)
16316 (symlink old (string-append out "/bin/" new)))
16317 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16318 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16319 #t)))))
16320 (propagated-inputs
16321 `(("python-pygments" ,python-pygments)
16322 ("python-requests" ,python-requests)
16323 ("python-babel" ,python-babel) ; optional, for internationalization
16324 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16325 ("python-greenlet" ,python-greenlet)
16326 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16327 ("python-six" ,python-six)))
16328 (native-inputs
16329 `(("python-sphinx" ,python-sphinx)
16330 ("python-mock" ,python-mock)))
16331 (home-page "https://bpython-interpreter.org/")
16332 (synopsis "Fancy interface to the Python interpreter")
16333 (description "Bpython is a fancy interface to the Python
16334 interpreter. bpython's main features are
16335
16336 @enumerate
16337 @item in-line syntax highlighting,
16338 @item readline-like autocomplete with suggestions displayed as you type,
16339 @item expected parameter list for any Python function,
16340 @item \"rewind\" function to pop the last line of code from memory and
16341 re-evaluate,
16342 @item send the code you've entered off to a pastebin,
16343 @item save the code you've entered to a file, and
16344 @item auto-indentation.
16345 @end enumerate")
16346 (license license:expat)))
16347
16348 (define-public bpython2
16349 (let ((base (package-with-python2
16350 (strip-python2-variant bpython))))
16351 (package (inherit base)
16352 (name "bpython2")
16353 (arguments
16354 `(#:python ,python-2
16355 #:phases
16356 (modify-phases %standard-phases
16357 (add-after 'unpack 'remove-failing-test
16358 (lambda _
16359 ;; Remove failing test. FIXME: make it pass
16360 (delete-file "bpython/test/test_args.py")
16361 ;; Disable failing test-cases (renaming inhibits they are
16362 ;; discovered)
16363 (substitute* "bpython/test/test_curtsies_repl.py"
16364 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16365 (string-append a "xxx_off_" b))
16366 (("^(\\s*def )(test_complex\\W)" _ a b)
16367 (string-append a "xxx_off_" b)))
16368 #t))
16369 (add-before 'build 'rename-scripts
16370 ;; rename the scripts to bypthon2, bpdb2, etc.
16371 (lambda _
16372 (substitute* "setup.py"
16373 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16374 (string-append name "2" rest "\n"))
16375 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16376 (string-append name "2" (or sub "") rest "\n")))
16377 #t))))))))
16378
16379 (define-public python-pyinotify
16380 (package
16381 (name "python-pyinotify")
16382 (version "0.9.6")
16383 (source (origin
16384 (method url-fetch)
16385 (uri (pypi-uri "pyinotify" version))
16386 (sha256
16387 (base32
16388 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16389 (build-system python-build-system)
16390 (arguments `(#:tests? #f)) ;no tests
16391 (home-page "https://github.com/seb-m/pyinotify")
16392 (synopsis "Python library for monitoring inotify events")
16393 (description
16394 "@code{pyinotify} provides a Python interface for monitoring
16395 file system events on Linux.")
16396 (license license:expat)))
16397
16398 (define-public python2-pyinotify
16399 (package-with-python2 python-pyinotify))
16400
16401 ;; Ada parser uses this version.
16402 (define-public python2-quex-0.67.3
16403 (package
16404 (name "python2-quex")
16405 (version "0.67.3")
16406 (source
16407 (origin
16408 (method url-fetch)
16409 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16410 (version-major+minor version)
16411 "/quex-" version ".zip"))
16412 (sha256
16413 (base32
16414 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16415 (build-system python-build-system)
16416 (native-inputs
16417 `(("unzip" ,unzip)))
16418 (arguments
16419 `(#:python ,python-2
16420 #:tests? #f
16421 #:phases
16422 (modify-phases %standard-phases
16423 (delete 'configure)
16424 (delete 'build)
16425 (replace 'install
16426 (lambda* (#:key outputs #:allow-other-keys)
16427 (let* ((out (assoc-ref outputs "out"))
16428 (share/quex (string-append out "/share/quex"))
16429 (bin (string-append out "/bin")))
16430 (copy-recursively "." share/quex)
16431 (mkdir-p bin)
16432 (symlink (string-append share/quex "/quex-exe.py")
16433 (string-append bin "/quex"))
16434 #t))))))
16435 (native-search-paths
16436 (list (search-path-specification
16437 (variable "QUEX_PATH")
16438 (files '("share/quex")))))
16439 (home-page "http://quex.sourceforge.net/")
16440 (synopsis "Lexical analyzer generator in Python")
16441 (description "@code{quex} is a lexical analyzer generator in Python.")
16442 (license license:lgpl2.1+))) ; Non-military
16443
16444 (define-public python2-quex
16445 (package (inherit python2-quex-0.67.3)
16446 (name "python2-quex")
16447 (version "0.68.1")
16448 (source
16449 (origin
16450 (method url-fetch)
16451 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16452 (sha256
16453 (base32
16454 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16455 (file-name (string-append name "-" version ".tar.gz"))))))
16456
16457 (define-public python-more-itertools
16458 (package
16459 (name "python-more-itertools")
16460 (version "8.2.0")
16461 (source
16462 (origin
16463 (method url-fetch)
16464 (uri (pypi-uri "more-itertools" version))
16465 (sha256
16466 (base32
16467 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16468 (build-system python-build-system)
16469 (home-page "https://github.com/erikrose/more-itertools")
16470 (synopsis "More routines for operating on iterables, beyond itertools")
16471 (description "Python's built-in @code{itertools} module implements a
16472 number of iterator building blocks inspired by constructs from APL, Haskell,
16473 and SML. @code{more-itertools} includes additional building blocks for
16474 working with iterables.")
16475 (properties `((python2-variant . ,(delay python2-more-itertools))))
16476 (license license:expat)))
16477
16478 ;; The 5.x series are the last versions supporting Python 2.7.
16479 (define-public python2-more-itertools
16480 (package
16481 (inherit python-more-itertools)
16482 (name "python2-more-itertools")
16483 (version "5.0.0")
16484 (source (origin
16485 (method url-fetch)
16486 (uri (pypi-uri "more-itertools" version))
16487 (sha256
16488 (base32
16489 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16490 (arguments
16491 `(#:python ,python-2))
16492 (propagated-inputs
16493 `(("python2-six" ,python2-six-bootstrap)))))
16494
16495 (define-public python-latexcodec
16496 (package
16497 (name "python-latexcodec")
16498 (version "1.0.7")
16499 (source
16500 (origin
16501 (method url-fetch)
16502 (uri (pypi-uri "latexcodec" version))
16503 (sha256
16504 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16505 (build-system python-build-system)
16506 (inputs
16507 `(("python-six" ,python-six)))
16508 (home-page "https://readthedocs.org/projects/latexcodec/")
16509 (synopsis "Work with LaTeX code in Python")
16510 (description "Lexer and codec to work with LaTeX code in Python.")
16511 (license license:expat)))
16512
16513 (define-public python-pybtex
16514 (package
16515 (name "python-pybtex")
16516 (version "0.22.2")
16517 (source
16518 (origin
16519 (method url-fetch)
16520 (uri (pypi-uri "pybtex" version))
16521 (sha256
16522 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16523 (build-system python-build-system)
16524 (native-inputs
16525 `(("python-nose" ,python-nose)))
16526 (inputs
16527 `(("python-latexcodec" ,python-latexcodec)
16528 ("python-pyyaml" ,python-pyyaml)
16529 ("python-six" ,python-six)))
16530 (arguments
16531 `(#:test-target "nosetests"))
16532 (home-page "https://pybtex.org/")
16533 (synopsis "BibTeX-compatible bibliography processor")
16534 (description "Pybtex is a BibTeX-compatible bibliography processor written
16535 in Python. You can simply type pybtex instead of bibtex.")
16536 (license license:expat)))
16537
16538 (define-public python-onetimepass
16539 (package
16540 (name "python-onetimepass")
16541 (version "1.0.1")
16542 (source
16543 (origin
16544 (method url-fetch)
16545 (uri (pypi-uri "onetimepass" version))
16546 (sha256
16547 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16548 (build-system python-build-system)
16549 (propagated-inputs `(("python-six" ,python-six)))
16550 (home-page "https://github.com/tadeck/onetimepass/")
16551 (synopsis "One-time password library")
16552 (description "Python one-time password library for HMAC-based (HOTP) and
16553 time-based (TOTP) passwords.")
16554 (license license:expat)))
16555
16556 (define-public python-parso
16557 (package
16558 (name "python-parso")
16559 (version "0.7.0")
16560 (source
16561 (origin
16562 (method url-fetch)
16563 (uri (pypi-uri "parso" version))
16564 (sha256
16565 (base32
16566 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16567 (native-inputs
16568 `(("python-pytest" ,python-pytest)))
16569 (build-system python-build-system)
16570 (arguments
16571 `(#:phases (modify-phases %standard-phases
16572 (replace 'check
16573 (lambda _ (invoke "pytest" "-vv"))))))
16574 (home-page "https://github.com/davidhalter/parso")
16575 (synopsis "Python Parser")
16576 (description "Parso is a Python parser that supports error recovery and
16577 round-trip parsing for different Python versions (in multiple Python versions).
16578 Parso is also able to list multiple syntax errors in your Python file.")
16579 (license license:expat)))
16580
16581 (define-public python2-parso
16582 (package-with-python2 python-parso))
16583
16584 (define-public python-async-generator
16585 (package
16586 (name "python-async-generator")
16587 (version "1.10")
16588 (source
16589 (origin
16590 (method url-fetch)
16591 (uri (pypi-uri "async_generator" version))
16592 (sha256
16593 (base32
16594 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16595 (build-system python-build-system)
16596 (native-inputs
16597 `(("python-pytest" ,python-pytest)))
16598 (home-page "https://github.com/python-trio/async_generator")
16599 (synopsis "Async generators and context managers for Python 3.5+")
16600 (description "@code{async_generator} back-ports Python 3.6's native async
16601 generators and Python 3.7's context managers into Python 3.5.")
16602 ;; Dual licensed.
16603 (license (list license:expat license:asl2.0))))
16604
16605 (define-public python-async-timeout
16606 (package
16607 (name "python-async-timeout")
16608 (version "3.0.1")
16609 (source
16610 (origin
16611 (method url-fetch)
16612 (uri (pypi-uri "async-timeout" version))
16613 (sha256
16614 (base32
16615 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16616 (build-system python-build-system)
16617 (home-page "https://github.com/aio-libs/async_timeout/")
16618 (synopsis "Timeout context manager for asyncio programs")
16619 (description "@code{async-timeout} provides a timeout timeout context
16620 manager compatible with @code{asyncio}.")
16621 (license license:asl2.0)))
16622
16623 (define-public python-glob2
16624 (package
16625 (name "python-glob2")
16626 (version "0.7")
16627 (source
16628 (origin
16629 (method git-fetch)
16630 (uri (git-reference
16631 (url "https://github.com/miracle2k/python-glob2.git")
16632 (commit (string-append "v" version))))
16633 (file-name (git-file-name name version))
16634 (sha256
16635 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16636 (build-system python-build-system)
16637 (home-page "https://github.com/miracle2k/python-glob2/")
16638 (synopsis "Extended Version of the python buildin glob module")
16639 (description "This is an extended version of the Python
16640 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16641 adds:
16642
16643 @itemize
16644 @item The ability to capture the text matched by glob patterns, and return
16645 those matches alongside the file names.
16646 @item A recursive @code{**} globbing syntax, akin for example to the
16647 @code{globstar} option of Bash.
16648 @item The ability to replace the file system functions used, in order to glob
16649 on virtual file systems.
16650 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16651 @end itemize
16652
16653 Glob2 currently based on the glob code from Python 3.3.1.")
16654 (license license:bsd-2)))
16655
16656 (define-public python2-glob2
16657 (package-with-python2 python-glob2))
16658
16659 (define-public python-gipc
16660 (package
16661 (name "python-gipc")
16662 (version "0.6.0")
16663 (source
16664 (origin
16665 (method url-fetch)
16666 (uri (pypi-uri "gipc" version ".zip"))
16667 (sha256
16668 (base32
16669 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16670 (build-system python-build-system)
16671 (native-inputs
16672 `(("unzip" ,unzip)))
16673 (propagated-inputs
16674 `(("python-gevent" ,python-gevent)))
16675 (home-page "https://gehrcke.de/gipc/")
16676 (synopsis "Child process management in the context of gevent")
16677 (description "Usage of Python's multiprocessing package in a
16678 gevent-powered application may raise problems. With @code{gipc},
16679 process-based child processes can safely be created anywhere within a
16680 gevent-powered application.")
16681 (license license:expat)))
16682
16683 (define-public python2-gipc
16684 (package-with-python2 python-gipc))
16685
16686 (define-public python-fusepy
16687 (package
16688 (name "python-fusepy")
16689 (version "2.0.4")
16690 (source
16691 (origin
16692 (method url-fetch)
16693 (uri (pypi-uri "fusepy" version))
16694 (sha256
16695 (base32
16696 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16697 (build-system python-build-system)
16698 (arguments
16699 `(#:phases
16700 (modify-phases %standard-phases
16701 (add-before 'build 'set-library-file-name
16702 (lambda* (#:key inputs #:allow-other-keys)
16703 (let ((fuse (assoc-ref inputs "fuse")))
16704 (substitute* "fuse.py"
16705 (("find_library\\('fuse'\\)")
16706 (string-append "'" fuse "/lib/libfuse.so'")))
16707 #t))))))
16708 (propagated-inputs
16709 `(("fuse" ,fuse)))
16710 (home-page "https://github.com/fusepy/fusepy")
16711 (synopsis "Simple ctypes bindings for FUSE")
16712 (description "Python module that provides a simple interface to FUSE and
16713 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16714 (license license:isc)))
16715
16716 (define-public python2-fusepy
16717 (package-with-python2 python-fusepy))
16718
16719 (define-public python-fusepyng
16720 (package
16721 (name "python-fusepyng")
16722 (version "1.0.7")
16723 (source
16724 (origin
16725 (method url-fetch)
16726 (uri (pypi-uri "fusepyng" version))
16727 (sha256
16728 (base32
16729 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16730 (build-system python-build-system)
16731 (arguments
16732 '(#:phases
16733 (modify-phases %standard-phases
16734 (add-after 'unpack 'set-libfuse-path
16735 (lambda* (#:key inputs #:allow-other-keys)
16736 (let ((fuse (assoc-ref inputs "fuse")))
16737 (substitute* "fusepyng.py"
16738 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16739 (string-append "\"" fuse "/lib/libfuse.so\""))))
16740 #t)))))
16741 (inputs
16742 `(("fuse" ,fuse)))
16743 (propagated-inputs
16744 `(("python-paramiko" ,python-paramiko)))
16745 (home-page "https://github.com/rianhunter/fusepyng")
16746 (synopsis "Simple ctypes bindings for FUSE")
16747 (description "@code{fusepyng} is a Python module that provides a simple
16748 interface to FUSE on various operating systems. It's just one file and is
16749 implemented using @code{ctypes}.")
16750 (license license:isc)))
16751
16752 (define-public python2-gdrivefs
16753 (package
16754 (name "python2-gdrivefs")
16755 (version "0.14.9")
16756 (source
16757 (origin
16758 (method url-fetch)
16759 (uri (pypi-uri "gdrivefs" version))
16760 (sha256
16761 (base32
16762 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16763 (build-system python-build-system)
16764 (arguments
16765 `(#:python ,python-2
16766 #:phases
16767 (modify-phases %standard-phases
16768 (add-before 'build 'patch-setup-py
16769 (lambda _
16770 ;; Update requirements from dependency==version
16771 ;; to dependency>=version
16772 (substitute* "gdrivefs/resources/requirements.txt"
16773 (("==") ">="))
16774 #t)))))
16775 (native-inputs
16776 `(("python2-gipc" ,python2-gipc)
16777 ("python2-gevent" ,python2-gevent)
16778 ("python2-greenlet" ,python2-greenlet)
16779 ("python2-httplib2" ,python2-httplib2)
16780 ("python2-uritemplate" ,python2-uritemplate)
16781 ("python2-oauth2client" ,python2-oauth2client)
16782 ("python2-six" ,python2-six)))
16783 (propagated-inputs
16784 `(("python2-dateutil" ,python2-dateutil)
16785 ("python2-fusepy" ,python2-fusepy)
16786 ("python2-google-api-client" ,python2-google-api-client)))
16787 (home-page "https://github.com/dsoprea/GDriveFS")
16788 (synopsis "Mount Google Drive as a local file system")
16789 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16790 under Python 2.7.")
16791 (license license:gpl2)))
16792
16793 (define-public python-userspacefs
16794 (package
16795 (name "python-userspacefs")
16796 (version "1.0.13")
16797 (source
16798 (origin
16799 (method url-fetch)
16800 (uri (pypi-uri "userspacefs" version))
16801 (sha256
16802 (base32
16803 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16804 (build-system python-build-system)
16805 (propagated-inputs
16806 `(("python-fusepyng" ,python-fusepyng)))
16807 (home-page "https://github.com/rianhunter/userspacefs")
16808 (synopsis "User-space file systems for Python")
16809 (description
16810 "@code{userspacefs} is a library that allows you to easily write
16811 user-space file systems in Python.")
16812 (license license:gpl3+)))
16813
16814 (define-public pybind11
16815 (package
16816 (name "pybind11")
16817 (version "2.4.3")
16818 (source (origin
16819 (method git-fetch)
16820 (uri (git-reference
16821 (url "https://github.com/pybind/pybind11.git")
16822 (commit (string-append "v" version))))
16823 (sha256
16824 (base32
16825 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16826 (file-name (git-file-name name version))))
16827 (build-system cmake-build-system)
16828 (native-inputs
16829 `(("python" ,python-wrapper)
16830
16831 ;; The following dependencies are used for tests.
16832 ("python-pytest" ,python-pytest)
16833 ("catch" ,catch-framework2-1)
16834 ("eigen" ,eigen)))
16835 (arguments
16836 `(#:configure-flags
16837 (list (string-append "-DCATCH_INCLUDE_DIR="
16838 (assoc-ref %build-inputs "catch")
16839 "/include/catch"))
16840
16841 #:phases (modify-phases %standard-phases
16842 (add-after 'install 'install-python
16843 (lambda* (#:key outputs #:allow-other-keys)
16844 (let ((out (assoc-ref outputs "out")))
16845 (with-directory-excursion "../source"
16846 (setenv "PYBIND11_USE_CMAKE" "yes")
16847 (invoke "python" "setup.py" "install"
16848 "--single-version-externally-managed"
16849 "--root=/"
16850 (string-append "--prefix=" out)))))))
16851
16852 #:test-target "check"))
16853 (home-page "https://github.com/pybind/pybind11/")
16854 (synopsis "Seamless operability between C++11 and Python")
16855 (description
16856 "@code{pybind11} is a lightweight header-only library that exposes C++
16857 types in Python and vice versa, mainly to create Python bindings of existing
16858 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16859 library: to minimize boilerplate code in traditional extension modules by
16860 inferring type information using compile-time introspection.")
16861 (license license:bsd-3)))
16862
16863 (define-public python-fasteners
16864 (package
16865 (name "python-fasteners")
16866 (version "0.14.1")
16867 (source
16868 (origin
16869 (method url-fetch)
16870 (uri (pypi-uri "fasteners" version))
16871 (sha256
16872 (base32
16873 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16874 (build-system python-build-system)
16875 (propagated-inputs
16876 `(("python-monotonic" ,python-monotonic)
16877 ("python-six" ,python-six)
16878 ("python-testtools" ,python-testtools)))
16879 (home-page "https://github.com/harlowja/fasteners")
16880 (synopsis "Python package that provides useful locks")
16881 (description
16882 "This package provides a Python program that provides following locks:
16883
16884 @itemize
16885 @item Locking decorator
16886 @item Reader-writer locks
16887 @item Inter-process locks
16888 @item Generic helpers
16889 @end itemize\n")
16890 (properties `((python2-variant . ,(delay python2-fasteners))))
16891 (license license:asl2.0)))
16892
16893 (define-public python2-fasteners
16894 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16895 (package
16896 (inherit base)
16897 (propagated-inputs
16898 `(("python2-futures" ,python2-futures)
16899 ,@(package-propagated-inputs base))))))
16900
16901 (define-public python-requests-file
16902 (package
16903 (name "python-requests-file")
16904 (version "1.4.3")
16905 (source
16906 (origin
16907 (method url-fetch)
16908 (uri (pypi-uri "requests-file" version))
16909 (sha256
16910 (base32
16911 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16912 (build-system python-build-system)
16913 (propagated-inputs
16914 `(("python-requests" ,python-requests)
16915 ("python-six" ,python-six)))
16916 (home-page
16917 "https://github.com/dashea/requests-file")
16918 (synopsis "File transport adapter for Requests")
16919 (description
16920 "Requests-File is a transport adapter for use with the Requests Python
16921 library to allow local file system access via @code{file://} URLs.")
16922 (license license:asl2.0)))
16923
16924 (define-public python2-requests-file
16925 (package-with-python2 python-requests-file))
16926
16927 (define-public python-tldextract
16928 (package
16929 (name "python-tldextract")
16930 (version "2.2.0")
16931 (source
16932 (origin
16933 (method url-fetch)
16934 (uri (pypi-uri "tldextract" version))
16935 (sha256
16936 (base32
16937 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16938 (build-system python-build-system)
16939 (native-inputs
16940 `(("python-pytest" ,python-pytest)
16941 ("python-responses" ,python-responses)))
16942 (propagated-inputs
16943 `(("python-idna" ,python-idna)
16944 ("python-requests" ,python-requests)
16945 ("python-requests-file" ,python-requests-file)))
16946 (home-page
16947 "https://github.com/john-kurkowski/tldextract")
16948 (synopsis
16949 "Separate the TLD from the registered domain and subdomains of a URL")
16950 (description
16951 "TLDExtract accurately separates the TLD from the registered domain and
16952 subdomains of a URL, using the Public Suffix List. By default, this includes
16953 the public ICANN TLDs and their exceptions. It can optionally support the
16954 Public Suffix List's private domains as well.")
16955 (license license:bsd-3)))
16956
16957 (define-public python2-tldextract
16958 (package-with-python2 python-tldextract))
16959
16960 (define-public python-pynamecheap
16961 (package
16962 (name "python-pynamecheap")
16963 (version "0.0.3")
16964 (source
16965 (origin
16966 (method url-fetch)
16967 (uri (pypi-uri "PyNamecheap" version))
16968 (sha256
16969 (base32
16970 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16971 (build-system python-build-system)
16972 (propagated-inputs
16973 `(("python-requests" ,python-requests)))
16974 (home-page
16975 "https://github.com/Bemmu/PyNamecheap")
16976 (synopsis
16977 "Namecheap API client in Python")
16978 (description
16979 "PyNamecheap is a Namecheap API client in Python.")
16980 (license license:expat)))
16981
16982 (define-public python2-pynamecheap
16983 (package-with-python2 python-pynamecheap))
16984
16985 (define-public python-dns-lexicon
16986 (package
16987 (name "python-dns-lexicon")
16988 (version "2.4.0")
16989 (source
16990 (origin
16991 (method url-fetch)
16992 (uri (pypi-uri "dns-lexicon" version))
16993 (sha256
16994 (base32
16995 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
16996 (build-system python-build-system)
16997 (arguments
16998 `(#:tests? #f)) ;requires internet access
16999 (propagated-inputs
17000 `(("python-future" ,python-future)
17001 ("python-pynamecheap" ,python-pynamecheap)
17002 ("python-requests" ,python-requests)
17003 ("python-tldextract" ,python-tldextract)
17004 ("python-urllib3" ,python-urllib3)))
17005 (home-page "https://github.com/AnalogJ/lexicon")
17006 (synopsis
17007 "Manipulate DNS records on various DNS providers")
17008 (description
17009 "Lexicon provides a way to manipulate DNS records on multiple DNS
17010 providers in a standardized way. It has a CLI but it can also be used as a
17011 Python library. It was designed to be used in automation, specifically with
17012 Let's Encrypt.")
17013 (license license:expat)))
17014
17015 (define-public python2-dns-lexicon
17016 (package-with-python2 python-dns-lexicon))
17017
17018 (define-public python-commandlines
17019 (package
17020 (name "python-commandlines")
17021 (version "0.4.1")
17022 (source
17023 (origin
17024 (method url-fetch)
17025 (uri (pypi-uri "commandlines" version))
17026 (sha256
17027 (base32
17028 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
17029 (build-system python-build-system)
17030 (home-page "https://github.com/chrissimpkins/commandlines")
17031 (synopsis "Command line argument to object parsing library")
17032 (description
17033 "@code{Commandlines} is a Python library for command line application
17034 development that supports command line argument parsing, command string
17035 validation testing and application logic.")
17036 (license license:expat)))
17037
17038 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
17039 ;; python-numba. They have a very unflexible relationship.
17040 (define-public python-numba
17041 (package
17042 (name "python-numba")
17043 (version "0.46.0")
17044 (source
17045 (origin
17046 (method url-fetch)
17047 (uri (pypi-uri "numba" version))
17048 (sha256
17049 (base32
17050 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17051 (build-system python-build-system)
17052 (arguments
17053 `(#:modules ((guix build utils)
17054 (guix build python-build-system)
17055 (ice-9 ftw)
17056 (srfi srfi-1)
17057 (srfi srfi-26))
17058 #:phases
17059 (modify-phases %standard-phases
17060 (add-after 'unpack 'disable-proprietary-features
17061 (lambda _
17062 (setenv "NUMBA_DISABLE_HSA" "1")
17063 (setenv "NUMBA_DISABLE_CUDA" "1")
17064 #t))
17065 (add-after 'unpack 'remove-failing-tests
17066 (lambda _
17067 ;; FIXME: These tests fail for unknown reasons:
17068 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17069 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17070 (substitute* "numba/tests/test_dispatcher.py"
17071 (("def test(_non_writable_pycache)" _ m)
17072 (string-append "def guix_skip" m))
17073 (("def test(_non_creatable_pycache)" _ m)
17074 (string-append "def guix_skip" m))
17075 (("def test(_frozen)" _ m)
17076 (string-append "def guix_skip" m)))
17077
17078 ;; These tests fail because we don't run the tests from the build
17079 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17080 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17081 (substitute* "numba/tests/test_pycc.py"
17082 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17083 (string-append "def guix_skip" m)))
17084
17085 ;; These tests fail because our version of Python does not have
17086 ;; a recognizable front-end for the Numba distribution to use
17087 ;; to check against.
17088 (substitute* "numba/tests/test_entrypoints.py"
17089 (("def test(_init_entrypoint)" _ m)
17090 (string-append "def guix_skip" m)))
17091 (substitute* "numba/tests/test_jitclasses.py"
17092 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17093 (string-append "def guix_skip" m)))
17094 #t))
17095 (replace 'check
17096 (lambda _
17097 (let ((cwd (getcwd)))
17098 (setenv "PYTHONPATH"
17099 (string-append cwd "/build/"
17100 (find (cut string-prefix? "lib" <>)
17101 (scandir (string-append cwd "/build")))
17102 ":"
17103 (getenv "PYTHONPATH")))
17104 ;; Something is wrong with the PYTHONPATH when running the
17105 ;; tests from the build directory, as it complains about not being
17106 ;; able to import certain modules.
17107 (with-directory-excursion "/tmp"
17108 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17109 #t)))))
17110 (propagated-inputs
17111 `(("python-llvmlite" ,python-llvmlite)
17112 ("python-numpy" ,python-numpy)
17113 ("python-singledispatch" ,python-singledispatch)))
17114 ;; Needed for tests.
17115 (inputs
17116 `(("python-jinja2" ,python-jinja2)
17117 ("python-pygments" ,python-pygments)))
17118 (home-page "https://numba.pydata.org")
17119 (synopsis "Compile Python code using LLVM")
17120 (description "Numba gives you the power to speed up your applications with
17121 high performance functions written directly in Python. With a few
17122 annotations, array-oriented and math-heavy Python code can be just-in-time
17123 compiled to native machine instructions, similar in performance to C, C++ and
17124 Fortran, without having to switch languages or Python interpreters.
17125
17126 Numba works by generating optimized machine code using the LLVM compiler
17127 infrastructure at import time, runtime, or statically (using the included pycc
17128 tool).")
17129 (license license:bsd-3)))
17130
17131 (define-public python-numcodecs
17132 (package
17133 (name "python-numcodecs")
17134 (version "0.6.4")
17135 (source
17136 (origin
17137 (method url-fetch)
17138 (uri (pypi-uri "numcodecs" version))
17139 (sha256
17140 (base32
17141 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17142 (build-system python-build-system)
17143 (propagated-inputs
17144 `(("python-numpy" ,python-numpy)
17145 ("python-msgpack" ,python-msgpack)))
17146 (native-inputs
17147 `(("python-pytest" ,python-pytest)
17148 ("python-setuptools-scm" ,python-setuptools-scm)))
17149 (home-page "https://github.com/zarr-developers/numcodecs")
17150 (synopsis "Buffer compression and transformation codecs")
17151 (description
17152 "This Python package provides buffer compression and transformation
17153 codecs for use in data storage and communication applications.")
17154 (license license:expat)))
17155
17156 (define-public python-asciitree
17157 (package
17158 (name "python-asciitree")
17159 (version "0.3.3")
17160 (source
17161 (origin
17162 (method url-fetch)
17163 (uri (pypi-uri "asciitree" version))
17164 (sha256
17165 (base32
17166 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17167 (build-system python-build-system)
17168 (home-page "https://github.com/mbr/asciitree")
17169 (synopsis "Draws ASCII trees")
17170 (description "This package draws tree structures using characters.")
17171 (license license:expat)))
17172
17173 (define-public python-zarr
17174 (package
17175 (name "python-zarr")
17176 (version "2.4.0")
17177 (source
17178 (origin
17179 (method url-fetch)
17180 (uri (pypi-uri "zarr" version))
17181 (sha256
17182 (base32
17183 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17184 (build-system python-build-system)
17185 (arguments
17186 `(#:phases
17187 (modify-phases %standard-phases
17188 (add-after 'unpack 'disable-service-tests
17189 (lambda _
17190 (setenv "ZARR_TEST_ABS" "0")
17191 (setenv "ZARR_TEST_MONGO" "0")
17192 (setenv "ZARR_TEST_REDIS" "0")
17193 #t))
17194 (replace 'check
17195 (lambda _
17196 (invoke "pytest" "-vv" "-k" "not lmdb")
17197 #t)))))
17198 (propagated-inputs
17199 `(("python-asciitree" ,python-asciitree)
17200 ("python-fasteners" ,python-fasteners)
17201 ("python-numcodecs" ,python-numcodecs)
17202 ("python-numpy" ,python-numpy)))
17203 (native-inputs
17204 `(("python-pytest" ,python-pytest)
17205 ("python-setuptools-scm" ,python-setuptools-scm)))
17206 (home-page "https://github.com/zarr-developers/zarr-python")
17207 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17208 (description
17209 "This package provides an implementation of chunked, compressed,
17210 N-dimensional arrays for Python.")
17211 (license license:expat)))
17212
17213 (define-public python-anndata
17214 (package
17215 (name "python-anndata")
17216 (version "0.7.1")
17217 (source
17218 (origin
17219 (method url-fetch)
17220 (uri (pypi-uri "anndata" version))
17221 (sha256
17222 (base32
17223 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17224 (build-system python-build-system)
17225 (arguments
17226 `(#:phases
17227 (modify-phases %standard-phases
17228 (add-after 'unpack 'delete-inconvenient-tests
17229 (lambda _
17230 ;; This test depends on python-scikit-learn.
17231 (delete-file "anndata/tests/test_inplace_subset.py")
17232 #t))
17233 (delete 'check)
17234 (add-after 'install 'check
17235 (lambda* (#:key inputs outputs #:allow-other-keys)
17236 (add-installed-pythonpath inputs outputs)
17237 (invoke "pytest" "-vv"))))))
17238 (propagated-inputs
17239 `(("python-h5py" ,python-h5py)
17240 ("python-importlib-metadata" ,python-importlib-metadata)
17241 ("python-natsort" ,python-natsort)
17242 ("python-numcodecs" ,python-numcodecs)
17243 ("python-packaging" ,python-packaging)
17244 ("python-pandas" ,python-pandas)
17245 ("python-scipy" ,python-scipy)
17246 ("python-zarr" ,python-zarr)))
17247 (native-inputs
17248 `(("python-joblib" ,python-joblib)
17249 ("python-pytest" ,python-pytest)
17250 ("python-setuptools-scm" ,python-setuptools-scm)))
17251 (home-page "https://github.com/theislab/anndata")
17252 (synopsis "Annotated data for data analysis pipelines")
17253 (description "Anndata is a package for simple (functional) high-level APIs
17254 for data analysis pipelines. In this context, it provides an efficient,
17255 scalable way of keeping track of data together with learned annotations and
17256 reduces the code overhead typically encountered when using a mostly
17257 object-oriented library such as @code{scikit-learn}.")
17258 (license license:bsd-3)))
17259
17260 (define-public python-dill
17261 (package
17262 (name "python-dill")
17263 (version "0.3.1.1")
17264 (source
17265 (origin
17266 (method url-fetch)
17267 (uri (pypi-uri "dill" version))
17268 (sha256
17269 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17270 (build-system python-build-system)
17271 (arguments
17272 `(#:phases
17273 (modify-phases %standard-phases
17274 (replace 'check
17275 (lambda _
17276 (with-directory-excursion "/tmp"
17277 (invoke "nosetests" "-v"))
17278 #t)))))
17279 (native-inputs
17280 `(("python-nose" ,python-nose)))
17281 (home-page "https://pypi.org/project/dill/")
17282 (synopsis "Serialize all of Python")
17283 (description "Dill extends Python's @code{pickle} module for serializing
17284 and de-serializing Python objects to the majority of the built-in Python
17285 types. Dill provides the user the same interface as the @code{pickle} module,
17286 and also includes some additional features. In addition to pickling Python
17287 objects, @code{dill} provides the ability to save the state of an interpreter
17288 session in a single command. Hence, it would be feasible to save a
17289 interpreter session, close the interpreter, ship the pickled file to another
17290 computer, open a new interpreter, unpickle the session and thus continue from
17291 the saved state of the original interpreter session.")
17292 (license license:bsd-3)))
17293
17294 (define-public python-multiprocess
17295 (package
17296 (name "python-multiprocess")
17297 (version "0.70.9")
17298 (source
17299 (origin
17300 (method url-fetch)
17301 (uri (pypi-uri "multiprocess" version))
17302 (sha256
17303 (base32
17304 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17305 (build-system python-build-system)
17306 (arguments
17307 `(#:phases
17308 (modify-phases %standard-phases
17309 (add-after 'unpack 'disable-broken-tests
17310 (lambda _
17311 ;; This test is broken as there is no keyboard interrupt.
17312 (substitute* "py3.7/multiprocess/tests/__init__.py"
17313 (("^(.*)def test_wait_result"
17314 line indent)
17315 (string-append indent
17316 "@unittest.skip(\"Disabled by Guix\")\n"
17317 line)))
17318 #t))
17319 ;; Tests must be run after installation.
17320 (delete 'check)
17321 (add-after 'install 'check
17322 (lambda* (#:key inputs outputs #:allow-other-keys)
17323 (add-installed-pythonpath inputs outputs)
17324 (invoke "python" "-m" "multiprocess.tests")
17325 #t)))))
17326 (propagated-inputs
17327 `(("python-dill" ,python-dill)))
17328 (home-page "https://pypi.org/project/multiprocess/")
17329 (synopsis "Multiprocessing and multithreading in Python")
17330 (description
17331 "This package is a fork of the multiprocessing Python package, a package
17332 which supports the spawning of processes using the API of the standard
17333 library's @code{threading} module.")
17334 (license license:bsd-3)))
17335
17336 (define-public python-toolz
17337 (package
17338 (name "python-toolz")
17339 (version "0.9.0")
17340 (source
17341 (origin
17342 (method url-fetch)
17343 (uri (pypi-uri "toolz" version))
17344 (sha256
17345 (base32
17346 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17347 (build-system python-build-system)
17348 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17349 ;; unregistered loader type"
17350 (arguments '(#:tests? #f))
17351 (home-page "https://github.com/pytoolz/toolz/")
17352 (synopsis "List processing tools and functional utilities")
17353 (description
17354 "This package provides a set of utility functions for iterators,
17355 functions, and dictionaries.")
17356 (license license:bsd-3)))
17357
17358 (define-public python2-toolz
17359 (package-with-python2 python-toolz))
17360
17361 (define-public python-cytoolz
17362 (package
17363 (name "python-cytoolz")
17364 (version "0.9.0.1")
17365 (source
17366 (origin
17367 (method url-fetch)
17368 (uri (pypi-uri "cytoolz" version))
17369 (sha256
17370 (base32
17371 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17372 (build-system python-build-system)
17373 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17374 ;; 'exceptions'"
17375 (arguments '(#:tests? #f))
17376 (propagated-inputs
17377 `(("python-toolz" ,python-toolz)))
17378 (native-inputs
17379 `(("python-cython" ,python-cython)))
17380 (home-page "https://github.com/pytoolz/cytoolz")
17381 (synopsis "High performance functional utilities")
17382 (description
17383 "The cytoolz package implements the same API as provided by toolz. The
17384 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17385 that is accessible to other projects developed in Cython.")
17386 (license license:bsd-3)))
17387
17388 (define-public python-sortedcontainers
17389 (package
17390 (name "python-sortedcontainers")
17391 (version "2.1.0")
17392 (source
17393 (origin
17394 (method url-fetch)
17395 (uri (pypi-uri "sortedcontainers" version))
17396 (sha256
17397 (base32
17398 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17399 (build-system python-build-system)
17400 (arguments
17401 ;; FIXME: Tests require many extra dependencies, and would introduce
17402 ;; a circular dependency on hypothesis, which uses this package.
17403 '(#:tests? #f))
17404 (propagated-inputs
17405 `(("python-appdirs" ,python-appdirs)
17406 ("python-distlib" ,python-distlib)
17407 ("python-filelock" ,python-filelock)
17408 ("python-six" ,python-six-bootstrap)))
17409 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17410 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17411 (description
17412 "This package provides a sorted collections library, written in
17413 pure-Python.")
17414 (license license:asl2.0)))
17415
17416 (define-public python2-sortedcontainers
17417 (package-with-python2 python-sortedcontainers))
17418
17419 (define-public python-cloudpickle
17420 (package
17421 (name "python-cloudpickle")
17422 (version "1.3.0")
17423 (source
17424 (origin
17425 (method url-fetch)
17426 (uri (pypi-uri "cloudpickle" version))
17427 (sha256
17428 (base32
17429 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17430 (build-system python-build-system)
17431 (arguments
17432 '(#:phases (modify-phases %standard-phases
17433 (add-before 'check 'do-not-override-PYTHONPATH
17434 (lambda _
17435 ;; Append to PYTHONPATH instead of overriding it so
17436 ;; that dependencies from Guix can be found.
17437 (substitute* "tests/testutils.py"
17438 (("env\\['PYTHONPATH'\\] = pythonpath")
17439 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17440 #t))
17441 (replace 'check
17442 (lambda* (#:key tests? #:allow-other-keys)
17443 (if tests?
17444 (invoke "pytest" "-s" "-vv")
17445 (format #t "test suite not run~%"))
17446 #t)))))
17447 (native-inputs
17448 `(;; For tests.
17449 ("python-psutil" ,python-psutil)
17450 ("python-pytest" ,python-pytest)
17451 ("python-tornado" ,python-tornado)))
17452 (home-page "https://github.com/cloudpipe/cloudpickle")
17453 (synopsis "Extended pickling support for Python objects")
17454 (description
17455 "Cloudpickle makes it possible to serialize Python constructs not
17456 supported by the default pickle module from the Python standard library. It
17457 is especially useful for cluster computing where Python expressions are
17458 shipped over the network to execute on remote hosts, possibly close to the
17459 data.")
17460 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17461 (license license:bsd-3)))
17462
17463 (define-public python2-cloudpickle
17464 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17465 (package
17466 (inherit base)
17467 (native-inputs
17468 `(("python-mock" ,python2-mock)
17469 ,@(package-native-inputs base)))
17470 (propagated-inputs
17471 `(("python-futures" ,python2-futures)
17472 ,@(package-propagated-inputs base))))))
17473
17474 (define-public python-locket
17475 (package
17476 (name "python-locket")
17477 (version "0.2.0")
17478 (source
17479 (origin
17480 (method url-fetch)
17481 (uri (pypi-uri "locket" version))
17482 (sha256
17483 (base32
17484 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17485 (build-system python-build-system)
17486 (home-page "https://github.com/mwilliamson/locket.py")
17487 (synopsis "File-based locks for Python")
17488 (description
17489 "Locket implements a lock that can be used by multiple processes provided
17490 they use the same path.")
17491 (license license:bsd-2)))
17492
17493 (define-public python2-locket
17494 (package-with-python2 python-locket))
17495
17496 (define-public python-blosc
17497 (package
17498 (name "python-blosc")
17499 (version "1.5.1")
17500 (source
17501 (origin
17502 (method url-fetch)
17503 (uri (pypi-uri "blosc" version))
17504 (sha256
17505 (base32
17506 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17507 (build-system python-build-system)
17508 ;; FIXME: all tests pass, but then this error is printed:
17509 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17510 (arguments '(#:tests? #f))
17511 (propagated-inputs
17512 `(("python-numpy" ,python-numpy)))
17513 (home-page "https://github.com/blosc/python-blosc")
17514 (synopsis "Python wrapper for the Blosc data compressor library")
17515 (description "Blosc is a high performance compressor optimized for binary
17516 data. It has been designed to transmit data to the processor cache faster
17517 than the traditional, non-compressed, direct memory fetch approach via a
17518 @code{memcpy()} system call.
17519
17520 Blosc works well for compressing numerical arrays that contains data with
17521 relatively low entropy, like sparse data, time series, grids with
17522 regular-spaced values, etc.
17523
17524 This Python package wraps the Blosc library.")
17525 (license license:bsd-3)))
17526
17527 (define-public python2-blosc
17528 (package-with-python2 python-blosc))
17529
17530 (define-public python-partd
17531 (package
17532 (name "python-partd")
17533 (version "0.3.9")
17534 (source
17535 (origin
17536 (method url-fetch)
17537 (uri (pypi-uri "partd" version))
17538 (sha256
17539 (base32
17540 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17541 (build-system python-build-system)
17542 (propagated-inputs
17543 `(("python-blosc" ,python-blosc)
17544 ("python-locket" ,python-locket)
17545 ("python-numpy" ,python-numpy)
17546 ("python-pandas" ,python-pandas)
17547 ("python-pyzmq" ,python-pyzmq)
17548 ("python-toolz" ,python-toolz)))
17549 (home-page "https://github.com/dask/partd/")
17550 (synopsis "Appendable key-value storage")
17551 (description "Partd stores key-value pairs. Values are raw bytes. We
17552 append on old values. Partd excels at shuffling operations.")
17553 (license license:bsd-3)))
17554
17555 (define-public python2-partd
17556 (package-with-python2 python-partd))
17557
17558 (define-public python-fsspec
17559 (package
17560 (name "python-fsspec")
17561 (version "0.6.1")
17562 (source
17563 (origin
17564 (method url-fetch)
17565 (uri (pypi-uri "fsspec" version))
17566 (sha256
17567 (base32
17568 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17569 (build-system python-build-system)
17570 (arguments '(#:tests? #f)) ; there are none
17571 (home-page "https://github.com/intake/filesystem_spec")
17572 (synopsis "File-system specification")
17573 (description "The purpose of this package is to produce a template or
17574 specification for a file-system interface, that specific implementations
17575 should follow, so that applications making use of them can rely on a common
17576 behavior and not have to worry about the specific internal implementation
17577 decisions with any given backend.")
17578 (license license:bsd-3)))
17579
17580 (define-public python-dask
17581 (package
17582 (name "python-dask")
17583 (version "2.14.0")
17584 (source
17585 (origin
17586 (method url-fetch)
17587 (uri (pypi-uri "dask" version))
17588 (sha256
17589 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17590 (build-system python-build-system)
17591 (arguments
17592 `(#:phases
17593 (modify-phases %standard-phases
17594 (add-after 'unpack 'disable-broken-tests
17595 (lambda _
17596 ;; This test is marked as xfail when pytest-xdist is used.
17597 (substitute* "dask/tests/test_threaded.py"
17598 (("def test_interrupt\\(\\)" m)
17599 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17600 m)))
17601 ;; This one fails with a type error:
17602 ;; TypeError: Already tz-aware, use tz_convert to convert.
17603 (substitute* "dask/dataframe/tests/test_shuffle.py"
17604 (("def test_set_index_timestamp\\(\\)" m)
17605 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17606 m)))
17607 #t))
17608 (replace 'check
17609 (lambda _ (invoke "pytest" "-vv"))))))
17610 (propagated-inputs
17611 `(("python-cloudpickle" ,python-cloudpickle)
17612 ("python-fsspec" ,python-fsspec)
17613 ("python-numpy" ,python-numpy)
17614 ("python-packaging" ,python-packaging)
17615 ("python-pandas" ,python-pandas)
17616 ("python-partd" ,python-partd)
17617 ("python-toolz" ,python-toolz)
17618 ("python-pyyaml" ,python-pyyaml)))
17619 (native-inputs
17620 `(("python-pytest" ,python-pytest)
17621 ("python-pytest-runner" ,python-pytest-runner)))
17622 (home-page "https://github.com/dask/dask/")
17623 (synopsis "Parallel computing with task scheduling")
17624 (description
17625 "Dask is a flexible parallel computing library for analytics. It
17626 consists of two components: dynamic task scheduling optimized for computation,
17627 and large data collections like parallel arrays, dataframes, and lists that
17628 extend common interfaces like NumPy, Pandas, or Python iterators to
17629 larger-than-memory or distributed environments. These parallel collections
17630 run on top of the dynamic task schedulers. ")
17631 (license license:bsd-3)))
17632
17633 (define-public python-ilinkedlist
17634 (package
17635 (name "python-ilinkedlist")
17636 (version "0.4.0")
17637 (source
17638 (origin
17639 (method url-fetch)
17640 (uri (pypi-uri "ilinkedlist" version))
17641 (sha256
17642 (base32
17643 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17644 (build-system python-build-system)
17645 (native-inputs `(("python-pytest" ,python-pytest)))
17646 (inputs `(("python" ,python)))
17647 (home-page "https://github.com/luther9/ilinkedlist-py")
17648 (synopsis "Immutable linked list library")
17649 (description
17650 "This is a implementation of immutable linked lists for Python. It
17651 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17652 Since a linked list is treated as immutable, it is hashable, and its length
17653 can be retrieved in constant time. Some of the terminology is inspired by
17654 LISP. It is possible to create an improper list by creating a @code{Pair}
17655 with a non-list @code{cdr}.")
17656 (license license:gpl3+)))
17657
17658 (define-public python-readlike
17659 (package
17660 (name "python-readlike")
17661 (version "0.1.3")
17662 (source
17663 (origin
17664 (method url-fetch)
17665 (uri (pypi-uri "readlike" version))
17666 (sha256
17667 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17668 (build-system python-build-system)
17669 (home-page "https://github.com/jangler/readlike")
17670 (synopsis "GNU Readline-like line editing module")
17671 (description
17672 "This Python module provides line editing functions similar to the default
17673 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17674 @code{readline} package, this one allows access to those capabilties in settings
17675 outside of a standard command-line interface. It is especially well-suited to
17676 interfacing with Urwid, due to a shared syntax for describing key inputs.
17677
17678 Currently, all stateless Readline commands are implemented. Yanking and history
17679 are not supported.")
17680 (license license:expat)))
17681
17682 (define-public python2-readlike
17683 (package-with-python2 python-readlike))
17684
17685 (define-public python-reparser
17686 (package
17687 (name "python-reparser")
17688 (version "1.4.3")
17689 (source
17690 (origin
17691 (method url-fetch)
17692 (uri (pypi-uri "ReParser" version))
17693 (sha256
17694 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17695 (build-system python-build-system)
17696 (home-page "https://github.com/xmikos/reparser")
17697 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17698 (description
17699 "This Python library provides a simple lexer/parser for inline markup based
17700 on regular expressions.")
17701 (license license:expat)))
17702
17703 (define-public python2-reparser
17704 (let ((reparser (package-with-python2
17705 (strip-python2-variant python-reparser))))
17706 (package (inherit reparser)
17707 (propagated-inputs
17708 `(("python2-enum34" ,python2-enum34)
17709 ,@(package-propagated-inputs reparser))))))
17710
17711 (define-public python-precis-i18n
17712 (package
17713 (name "python-precis-i18n")
17714 (version "1.0.0")
17715 (source
17716 (origin
17717 (method url-fetch)
17718 (uri (pypi-uri "precis_i18n" version))
17719 (sha256
17720 (base32
17721 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17722 (build-system python-build-system)
17723 (home-page "https://github.com/byllyfish/precis_i18n")
17724 (synopsis "Implementation of the PRECIS framework")
17725 (description
17726 "This module implements the PRECIS Framework as described in RFC 8264,
17727 RFC 8265 and RFC 8266.")
17728 (license license:expat)))
17729
17730 (define-public python-absl-py
17731 (package
17732 (name "python-absl-py")
17733 (version "0.6.1")
17734 (source
17735 (origin
17736 (method url-fetch)
17737 (uri (pypi-uri "absl-py" version))
17738 (sha256
17739 (base32
17740 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17741 (build-system python-build-system)
17742 (propagated-inputs
17743 `(("python-six" ,python-six)))
17744 (home-page "https://github.com/abseil/abseil-py")
17745 (synopsis "Abseil Python common libraries")
17746 (description
17747 "This package provides the Abseil Python Common Libraries, a collection
17748 of Python libraries for building Python applications.")
17749 (license license:asl2.0)))
17750
17751 (define-public python-astor
17752 (package
17753 (name "python-astor")
17754 (version "0.7.1")
17755 (source
17756 (origin
17757 (method url-fetch)
17758 (uri (pypi-uri "astor" version))
17759 (sha256
17760 (base32
17761 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17762 (build-system python-build-system)
17763 ;; FIXME: There are two errors and two test failures.
17764 (arguments `(#:tests? #f))
17765 (home-page "https://github.com/berkerpeksag/astor")
17766 (synopsis "Read and write Python ASTs")
17767 (description "Astor is designed to allow easy manipulation of Python
17768 source via the Abstract Syntax Tree.")
17769 (license license:bsd-3)))
17770
17771 (define-public python2-astor
17772 (package-with-python2 python-astor))
17773
17774 (define-public python-astunparse
17775 (package
17776 (name "python-astunparse")
17777 (version "1.6.2")
17778 (source
17779 (origin
17780 (method url-fetch)
17781 (uri (pypi-uri "astunparse" version))
17782 (sha256
17783 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17784 (build-system python-build-system)
17785 (arguments '(#:tests? #f)) ; there are none
17786 (propagated-inputs
17787 `(("python-six" ,python-six)
17788 ("python-wheel" ,python-wheel)))
17789 (home-page "https://github.com/simonpercivall/astunparse")
17790 (synopsis "AST unparser for Python")
17791 (description "This package provides an AST unparser for Python. It is a
17792 factored out version of @code{unparse} found in the Python source
17793 distribution.")
17794 (license license:bsd-3)))
17795
17796 (define-public python-gast
17797 (package
17798 (name "python-gast")
17799 (version "0.3.3")
17800 (source
17801 (origin
17802 (method url-fetch)
17803 (uri (pypi-uri "gast" version))
17804 (sha256
17805 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17806 (build-system python-build-system)
17807 (propagated-inputs
17808 `(("python-astunparse" ,python-astunparse)))
17809 (home-page "https://pypi.org/project/gast/")
17810 (synopsis "Generic Python AST that abstracts the underlying Python version")
17811 (description
17812 "GAST provides a compatibility layer between the AST of various Python
17813 versions, as produced by @code{ast.parse} from the standard @code{ast}
17814 module.")
17815 (license license:bsd-3)))
17816
17817 (define-public python-wikidata
17818 (package
17819 (name "python-wikidata")
17820 (version "0.6.1")
17821 (source
17822 (origin
17823 (method url-fetch)
17824 (uri (pypi-uri "Wikidata" version))
17825 (sha256
17826 (base32
17827 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17828 (build-system python-build-system)
17829 (propagated-inputs
17830 `(("python-babel" ,python-babel)))
17831 (home-page "https://github.com/dahlia/wikidata")
17832 (synopsis "Wikidata client library")
17833 (description
17834 "This package provides a Python interface to
17835 @url{https://www.wikidata.org/, Wikidata}.")
17836 (properties '((upstream-name . "Wikidata")))
17837 (license license:gpl3+)))
17838
17839 (define-public python-doctest-ignore-unicode
17840 (package
17841 (name "python-doctest-ignore-unicode")
17842 (version "0.1.2")
17843 (source
17844 (origin
17845 (method url-fetch)
17846 (uri (pypi-uri "doctest-ignore-unicode" version))
17847 (sha256
17848 (base32
17849 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17850 (build-system python-build-system)
17851 (native-inputs
17852 `(("python-nose" ,python-nose)))
17853 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17854 (synopsis "Ignore Unicode literal prefixes in doctests")
17855 (description
17856 "This package adds support for a flag to ignore Unicode literal prefixes
17857 in doctests.")
17858 (license license:asl2.0)))
17859
17860 (define-public python-attr
17861 (package
17862 (name "python-attr")
17863 (version "0.3.1")
17864 (source
17865 (origin
17866 (method url-fetch)
17867 (uri (pypi-uri "attr" version))
17868 (sha256
17869 (base32
17870 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17871 (build-system python-build-system)
17872 (home-page "https://github.com/denis-ryzhkov/attr")
17873 (synopsis "Decorator for attributes of target function or class")
17874 (description "Simple decorator to set attributes of target function or
17875 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17876 (license license:expat)))
17877
17878 (define-public python-construct
17879 (package
17880 (name "python-construct")
17881 (version "2.10.56")
17882 (source
17883 (origin
17884 (method url-fetch)
17885 (uri (pypi-uri "construct" version))
17886 (sha256
17887 (base32
17888 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17889 (build-system python-build-system)
17890 (arguments
17891 `(#:tests? #f)) ; No tests exist.
17892 (propagated-inputs
17893 `(("python-extras" ,python-extras)
17894 ("python-arrow" ,python-arrow)
17895 ("python-numpy" ,python-numpy)
17896 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17897 (home-page "https://construct.readthedocs.io")
17898 (synopsis "Declarative and symmetrical parser and builder for binary data")
17899 (description
17900 "This package provides both simple, atomic constructs (such as
17901 integers of various sizes), as well as composite ones which allow you
17902 form hierarchical and sequential structures of increasing complexity.
17903 It features bit and byte granularity, easy debugging and testing, an
17904 easy-to-extend subclass system, and lots of primitive constructs to
17905 make your work easier.")
17906 (license license:expat)))
17907
17908 (define-public python-humanize
17909 (package
17910 (name "python-humanize")
17911 (version "0.5.1")
17912 (source
17913 (origin
17914 (method url-fetch)
17915 (uri (pypi-uri "humanize" version))
17916 (sha256
17917 (base32
17918 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17919 (arguments
17920 '(#:tests? #f)) ; tests not in pypi archive
17921 (build-system python-build-system)
17922 (home-page "https://github.com/jmoiron/humanize")
17923 (synopsis "Print numerical information in a human-readable form")
17924 (description "This package provides a Python module that displays numbers
17925 and dates in \"human readable\" forms. For example, it would display
17926 \"12345591313\" as \"12.3 billion\".")
17927 (license license:expat)))
17928
17929 (define-public python-txaio
17930 (package
17931 (name "python-txaio")
17932 (version "18.8.1")
17933 (source
17934 (origin
17935 (method url-fetch)
17936 (uri (pypi-uri "txaio" version))
17937 (sha256
17938 (base32
17939 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17940 (build-system python-build-system)
17941 (propagated-inputs
17942 `(("python-twisted" ,python-twisted)
17943 ("python-six" ,python-six)))
17944 (home-page "https://github.com/crossbario/txaio")
17945 (synopsis "Compatibility layer between Python asyncio and Twisted")
17946 (description "Txaio provides a compatibility layer between the Python
17947 @code{asyncio} module and @code{Twisted}.")
17948 (license license:expat)))
17949
17950 (define-public python-toolshed
17951 (package
17952 (name "python-toolshed")
17953 (version "0.4.6")
17954 (source
17955 (origin
17956 (method url-fetch)
17957 (uri (pypi-uri "toolshed" version))
17958 (sha256
17959 (base32
17960 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
17961 (build-system python-build-system)
17962 (native-inputs
17963 `(("python-nose" ,python-nose)))
17964 (home-page "https://github.com/brentp/toolshed/")
17965 (synopsis "Collection of modules and functions for working with data")
17966 (description "This is a collection of well-tested, simple modules and
17967 functions that aim to reduce boilerplate when working with data.")
17968 (license license:bsd-2)))
17969
17970 (define-public python-annoy
17971 (package
17972 (name "python-annoy")
17973 (version "1.15.1")
17974 (source
17975 (origin
17976 (method url-fetch)
17977 (uri (pypi-uri "annoy" version))
17978 (sha256
17979 (base32
17980 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
17981 (build-system python-build-system)
17982 (native-inputs
17983 `(("python-nose" ,python-nose)))
17984 (home-page "https://github.com/spotify/annoy/")
17985 (synopsis "Approximate nearest neighbors library")
17986 (description
17987 "Annoy is a C++ library with Python bindings to search for points in
17988 space that are close to a given query point. It also creates large read-only
17989 file-based data structures that are @code{mmap}ped into memory so that many
17990 processes may share the same data.")
17991 (license license:asl2.0)))
17992
17993 (define-public python-pylzma
17994 (package
17995 (name "python-pylzma")
17996 (version "0.5.0")
17997 (source
17998 (origin
17999 (method url-fetch)
18000 (uri (pypi-uri "pylzma" version))
18001 (sha256
18002 (base32
18003 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
18004 (build-system python-build-system)
18005 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
18006 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
18007 (description "This package provides Python bindings for the LZMA library
18008 by Igor Pavlov.")
18009 (license license:lgpl2.1+)))
18010
18011 (define-public python2-pylzma
18012 (package-with-python2 python-pylzma))
18013
18014 (define-public python2-zeroconf
18015 (package
18016 (name "python2-zeroconf")
18017
18018 ;; This is the last version that supports Python 2.x.
18019 (version "0.19.1")
18020 (source
18021 (origin
18022 (method url-fetch)
18023 (uri (pypi-uri "zeroconf" version))
18024 (sha256
18025 (base32
18026 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
18027 (build-system python-build-system)
18028 (arguments
18029 `(#:python ,python-2
18030 #:phases
18031 (modify-phases %standard-phases
18032 (add-after 'unpack 'patch-requires
18033 (lambda* (#:key inputs #:allow-other-keys)
18034 (substitute* "setup.py"
18035 (("enum-compat")
18036 "enum34"))
18037 #t)))))
18038 (native-inputs
18039 `(("python2-six" ,python2-six)
18040 ("python2-enum32" ,python2-enum34)
18041 ("python2-netifaces" ,python2-netifaces)
18042 ("python2-typing" ,python2-typing)))
18043 (home-page "https://github.com/jstasiak/python-zeroconf")
18044 (synopsis "Pure Python mDNS service discovery")
18045 (description
18046 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18047 compatible).")
18048 (license license:lgpl2.1+)))
18049
18050 (define-public python-bsddb3
18051 (package
18052 (name "python-bsddb3")
18053 (version "6.2.6")
18054 (source
18055 (origin
18056 (method url-fetch)
18057 (uri (pypi-uri "bsddb3" version))
18058 (sha256
18059 (base32
18060 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18061 (build-system python-build-system)
18062 (inputs
18063 `(("bdb" ,bdb)))
18064 (arguments
18065 '(#:phases
18066 (modify-phases %standard-phases
18067 (add-after 'unpack 'configure-locations
18068 (lambda* (#:key inputs #:allow-other-keys)
18069 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18070 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18071 #t))
18072 (replace 'check
18073 (lambda _
18074 (invoke "python3" "test3.py" "-v"))))))
18075 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18076 (synopsis "Python bindings for Oracle Berkeley DB")
18077 (description
18078 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18079 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18080 Transaction objects, and each of these is exposed as a Python type in the
18081 bsddb3.db module. The database objects can use various access methods: btree,
18082 hash, recno, and queue. Complete support of Berkeley DB distributed
18083 transactions. Complete support for Berkeley DB Replication Manager.
18084 Complete support for Berkeley DB Base Replication. Support for RPC.")
18085 (license license:bsd-3)))
18086
18087 (define-public python-dbfread
18088 (package
18089 (name "python-dbfread")
18090 (version "2.0.7")
18091 (source (origin
18092 (method url-fetch)
18093 (uri (pypi-uri "dbfread" version))
18094 (sha256
18095 (base32
18096 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18097 (build-system python-build-system)
18098 (native-inputs
18099 `(("python-pytest" ,python-pytest)))
18100 (home-page "https://dbfread.readthedocs.io")
18101 (synopsis "Read DBF Files with Python")
18102 (description
18103 "This library reads DBF files and returns the data as native Python data
18104 types for further processing. It is primarily intended for batch jobs and
18105 one-off scripts.")
18106 (license license:expat)))
18107
18108 (define-public python-cached-property
18109 (package
18110 (name "python-cached-property")
18111 (version "1.5.1")
18112 (source
18113 (origin
18114 (method url-fetch)
18115 (uri (pypi-uri "cached-property" version))
18116 (sha256
18117 (base32
18118 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18119 (build-system python-build-system)
18120 (arguments
18121 `(#:phases
18122 (modify-phases %standard-phases
18123 ;; https://github.com/pydanny/cached-property/issues/131
18124 ;; recent versions of freezegun break one test
18125 (add-after 'unpack 'disable-broken-test
18126 (lambda _
18127 (substitute* "tests/test_cached_property.py"
18128 (("def test_threads_ttl_expiry\\(self\\)" m)
18129 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18130 " " m)))
18131 #t)))))
18132 (native-inputs
18133 `(("python-freezegun" ,python-freezegun)))
18134 (home-page
18135 "https://github.com/pydanny/cached-property")
18136 (synopsis
18137 "Decorator for caching properties in classes")
18138 (description
18139 "This package provides a decorator which makes caching
18140 time-or-computationally-expensive properties quick and easy and works in Python
18141 2 or 3.")
18142 (license license:bsd-3)))
18143
18144 (define-public python-folium
18145 (package
18146 (name "python-folium")
18147 (version "0.10.1")
18148 (source
18149 (origin
18150 (method url-fetch)
18151 (uri (pypi-uri "folium" version))
18152 (sha256
18153 (base32
18154 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
18155 (build-system python-build-system)
18156 (propagated-inputs
18157 `(("python-branca" ,python-branca)
18158 ("python-jinja2" ,python-jinja2)
18159 ("python-numpy" ,python-numpy)
18160 ("python-requests" ,python-requests)))
18161 (native-inputs
18162 `(("python-pytest" ,python-pytest)))
18163 (home-page "https://github.com/python-visualization/folium")
18164 (synopsis "Make beautiful maps with Leaflet.js & Python")
18165 (description "@code{folium} makes it easy to visualize data that’s been
18166 manipulated in Python on an interactive leaflet map. It enables both the
18167 binding of data to a map for @code{choropleth} visualizations as well as
18168 passing rich vector/raster/HTML visualizations as markers on the map.
18169
18170 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18171 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18172 supports Image, Video, GeoJSON and TopoJSON overlays.")
18173 (license license:expat)))
18174
18175 (define-public jube
18176 (package
18177 ;; This is a command-line tool, so no "python-" prefix.
18178 (name "jube")
18179 (version "2.2.2")
18180 (source (origin
18181 (method url-fetch)
18182 (uri (string-append
18183 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18184 version))
18185 (sha256
18186 (base32
18187 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18188 (file-name (string-append "jube-" version ".tar.gz"))))
18189 (build-system python-build-system)
18190 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18191 (synopsis "Benchmarking environment")
18192 (description
18193 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18194 benchmarked application, benchmark data is stored in a format that allows JUBE
18195 to deduct the desired information. This data can be parsed by automatic pre-
18196 and post-processing scripts that draw information and store it more densely
18197 for manual interpretation.")
18198 (license license:gpl3+)))
18199
18200 (define-public python-pyroutelib3
18201 (package
18202 (name "python-pyroutelib3")
18203 (version "1.3.post1")
18204 (source
18205 (origin
18206 (method url-fetch)
18207 (uri (pypi-uri "pyroutelib3" version))
18208 (sha256
18209 (base32
18210 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18211 (build-system python-build-system)
18212 (propagated-inputs
18213 `(("python-dateutil" ,python-dateutil)))
18214 (home-page "https://github.com/MKuranowski/pyroutelib3")
18215 (synopsis "Library for simple routing on OSM data")
18216 (description "Library for simple routing on OSM data")
18217 (license license:gpl3+)))
18218
18219 (define-public python-bibtexparser
18220 (package
18221 (name "python-bibtexparser")
18222 (version "1.1.0")
18223 (source
18224 (origin
18225 (method url-fetch)
18226 (uri (pypi-uri "bibtexparser" version))
18227 (sha256
18228 (base32
18229 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18230 (build-system python-build-system)
18231 (propagated-inputs
18232 `(("python-pyparsing" ,python-pyparsing)))
18233 (native-inputs
18234 `(("python-future" ,python-future)))
18235 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18236 (synopsis "Python library to parse BibTeX files")
18237 (description "BibtexParser is a Python library to parse BibTeX files.")
18238 (license (list license:bsd-3 license:lgpl3))))
18239
18240 (define-public python-distro
18241 (package
18242 (name "python-distro")
18243 (version "1.4.0")
18244 (source
18245 (origin
18246 (method url-fetch)
18247 (uri (pypi-uri "distro" version))
18248 (sha256
18249 (base32
18250 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18251 (build-system python-build-system)
18252 (native-inputs
18253 `(("python-pytest" ,python-pytest)))
18254 (home-page "https://github.com/nir0s/distro")
18255 (synopsis
18256 "OS platform information API")
18257 (description
18258 "@code{distro} provides information about the OS distribution it runs on,
18259 such as a reliable machine-readable ID, or version information.
18260
18261 It is the recommended replacement for Python's original
18262 `platform.linux_distribution` function (which will be removed in Python 3.8).
18263 @code{distro} also provides a command-line interface to output the platform
18264 information in various formats.")
18265 (license license:asl2.0)))
18266
18267 (define-public python-cairosvg
18268 (package
18269 (name "python-cairosvg")
18270 (version "2.4.2")
18271 (source
18272 (origin
18273 (method url-fetch)
18274 (uri (pypi-uri "CairoSVG" version))
18275 (sha256
18276 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18277 (build-system python-build-system)
18278 (arguments
18279 `(#:phases
18280 (modify-phases %standard-phases
18281 (replace 'check
18282 (lambda _ (invoke "pytest"))))))
18283 (propagated-inputs
18284 `(("python-cairocffi" ,python-cairocffi)
18285 ("python-cssselect2" ,python-cssselect2)
18286 ("python-defusedxml" ,python-defusedxml)
18287 ("python-pillow" ,python-pillow)
18288 ("python-tinycss2" ,python-tinycss2)))
18289 (native-inputs
18290 `(("python-pytest-flake8" ,python-pytest-flake8)
18291 ("python-pytest-isort" ,python-pytest-isort)
18292 ("python-pytest-runner" ,python-pytest-runner)))
18293 (home-page "https://cairosvg.org/")
18294 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18295 (description "CairoSVG is a SVG converter based on Cairo. It can export
18296 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18297 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18298 parsed, the result is drawn to a Cairo surface that can be exported to
18299 qvarious formats: PDF, PostScript, PNG and even SVG.")
18300 (license license:lgpl3+)))
18301
18302 (define-public python-pyphen
18303 (package
18304 (name "python-pyphen")
18305 (version "0.9.5")
18306 (source
18307 (origin
18308 (method url-fetch)
18309 (uri (pypi-uri "Pyphen" version))
18310 (sha256
18311 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18312 (build-system python-build-system)
18313 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18314 ;; embedded set provided by upstream - like Debian does.
18315 (home-page "https://github.com/Kozea/Pyphen")
18316 (synopsis "Pure Python module to hyphenate text")
18317 (description "Pyphen is a pure Python module to hyphenate text using
18318 existing Hunspell hyphenation dictionaries.")
18319 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18320
18321 (define-public python-intelhex
18322 (package
18323 (name "python-intelhex")
18324 (version "2.2.1")
18325 (source
18326 (origin
18327 (method url-fetch)
18328 (uri (pypi-uri "intelhex" version))
18329 (sha256
18330 (base32
18331 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18332 (build-system python-build-system)
18333 (arguments '(#:tests? #f)) ;issue with version
18334 (home-page "https://pypi.org/project/IntelHex/")
18335 (synopsis "Python library for Intel HEX files manipulations")
18336 (description "The Intel HEX file format is widely used in microprocessors
18337 and microcontrollers area (embedded systems etc.) as the de facto standard for
18338 representation of code to be programmed into microelectronic devices. This
18339 package provides an intelhex Python library to read, write, create from
18340 scratch and manipulate data from Intel HEX file format. It also includes
18341 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18342 converters and more, those based on the library itself.")
18343 (license license:bsd-3)))
18344
18345 (define-public python-pykwalify
18346 (package
18347 (name "python-pykwalify")
18348 (version "1.7.0")
18349 (source
18350 (origin
18351 (method url-fetch)
18352 (uri (pypi-uri "pykwalify" version))
18353 (sha256
18354 (base32
18355 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18356 (build-system python-build-system)
18357 (arguments '(#:tests? #f)) ;missing dependencies
18358 (propagated-inputs
18359 `(("python-dateutil" ,python-dateutil)
18360 ("python-docopt" ,python-docopt)
18361 ("python-pyyaml" ,python-pyyaml)))
18362 (home-page "https://github.com/grokzen/pykwalify")
18363 (synopsis
18364 "Python lib/cli for JSON/YAML schema validation")
18365 (description
18366 "This package provides a parser, schema validator, and data binding tool
18367 for YAML and JSON.")
18368 (license license:expat)))
18369
18370 (define-public python-dbusmock
18371 (package
18372 (name "python-dbusmock")
18373 (version "0.18.3")
18374 (source
18375 (origin
18376 (method url-fetch)
18377 (uri (pypi-uri "python-dbusmock" version))
18378 (sha256
18379 (base32
18380 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18381 (build-system python-build-system)
18382 (arguments
18383 '(#:phases
18384 (modify-phases %standard-phases
18385 (add-after 'unpack 'patch-shell-path
18386 (lambda _
18387 (substitute* "tests/test_code.py"
18388 (("/bin/bash") (which "bash")))
18389 #t)))))
18390 (native-inputs
18391 `(;; For tests.
18392 ("dbus" ,dbus) ; for dbus-daemon
18393 ("python-nose" ,python-nose)
18394 ("which" ,which)))
18395 (propagated-inputs
18396 `(("python-dbus" ,python-dbus)
18397 ("python-pygobject" ,python-pygobject)))
18398 (home-page "https://github.com/martinpitt/python-dbusmock")
18399 (synopsis "Python library for mock D-Bus objects")
18400 (description "python-dbusmock allows for the easy creation of mock objects on
18401 D-Bus. This is useful for writing tests for software which talks to D-Bus
18402 services such as upower, systemd, logind, gnome-session or others, and it is
18403 hard (or impossible without root privileges) to set the state of the real
18404 services to what you expect in your tests.")
18405 (license license:lgpl3+)))
18406
18407 (define-public python-ujson
18408 (package
18409 (name "python-ujson")
18410 (version "2.0.3")
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "ujson" version))
18415 (sha256
18416 (base32
18417 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18418 (modules '((guix build utils)))
18419 (snippet
18420 '(begin (delete-file-recursively "deps") #t))))
18421 (build-system python-build-system)
18422 (arguments
18423 `(#:phases
18424 (modify-phases %standard-phases
18425 (add-after 'unpack 'link-to-system-double-conversion
18426 (lambda* (#:key inputs #:allow-other-keys)
18427 (let ((d-c (assoc-ref inputs "double-conversion")))
18428 (substitute* "setup.py"
18429 (("./deps/double-conversion/double-conversion\"")
18430 (string-append d-c "/include/double-conversion\""))
18431 (("-lstdc++" stdc)
18432 (string-append "-L" d-c "/lib\","
18433 " \"-ldouble-conversion\","
18434 " \"" stdc)))
18435 #t)))
18436 (replace 'check
18437 (lambda* (#:key inputs outputs #:allow-other-keys)
18438 (add-installed-pythonpath inputs outputs)
18439 (invoke "pytest"))))))
18440 (native-inputs
18441 `(("double-conversion" ,double-conversion)
18442 ("python-setuptools-scm" ,python-setuptools-scm)
18443 ("python-pytest" ,python-pytest)))
18444 (home-page "https://github.com/ultrajson/ultrajson")
18445 (synopsis "Ultra fast JSON encoder and decoder for Python")
18446 (description
18447 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18448 bindings for Python 3.")
18449 (license license:bsd-3)))
18450
18451 (define-public python-ujson-1
18452 (package
18453 (inherit python-ujson)
18454 (version "1.35")
18455 (source
18456 (origin
18457 (method url-fetch)
18458 (uri (pypi-uri "ujson" version))
18459 (sha256
18460 (base32
18461 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18462 (arguments
18463 '(#:phases %standard-phases))
18464 (native-inputs '())
18465 (home-page "http://www.esn.me")
18466 (description
18467 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18468 bindings for Python 2.5+ and 3.")))
18469
18470 (define-public python2-ujson-1
18471 (package-with-python2 python-ujson-1))
18472
18473 (define-public python-iocapture
18474 ;; The latest release is more than a year older than this commit.
18475 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18476 (revision "1"))
18477 (package
18478 (name "python-iocapture")
18479 (version "0.1.2")
18480 (source
18481 (origin
18482 (method git-fetch)
18483 (uri (git-reference
18484 (url "https://github.com/oinume/iocapture.git")
18485 (commit commit)))
18486 (file-name (git-file-name name version))
18487 (sha256
18488 (base32
18489 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18490 (build-system python-build-system)
18491 (arguments
18492 `(#:phases
18493 (modify-phases %standard-phases
18494 (delete 'check)
18495 (add-after 'install 'check
18496 (lambda* (#:key inputs outputs #:allow-other-keys)
18497 (add-installed-pythonpath inputs outputs)
18498 (invoke "py.test" "-v" "tests")
18499 #t)))))
18500 (propagated-inputs
18501 `(("python-flexmock" ,python-flexmock)
18502 ("python-pytest" ,python-pytest)
18503 ("python-pytest-cov" ,python-pytest-cov)
18504 ("python-six" ,python-six)))
18505 (home-page "https://github.com/oinume/iocapture")
18506 (synopsis "Python capturing tool for stdout and stderr")
18507 (description
18508 "This package helps you to capture the standard out (stdout) and the
18509 standard error channel (stderr) in your program.")
18510 (license license:expat))))
18511
18512 (define-public python-argh
18513 ;; There are 21 commits since the latest release containing important
18514 ;; improvements.
18515 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18516 (revision "1"))
18517 (package
18518 (name "python-argh")
18519 (version (git-version "0.26.2" revision commit))
18520 (source
18521 (origin
18522 (method git-fetch)
18523 (uri (git-reference
18524 (url "https://github.com/neithere/argh.git")
18525 (commit commit)))
18526 (file-name (git-file-name name version))
18527 (sha256
18528 (base32
18529 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18530 (build-system python-build-system)
18531 (propagated-inputs
18532 `(("python-iocapture" ,python-iocapture)
18533 ("python-mock" ,python-mock)
18534 ("python-pytest" ,python-pytest)
18535 ("python-pytest-cov" ,python-pytest-cov)
18536 ("python-pytest-xdist" ,python-pytest-xdist)
18537 ("python-tox" ,python-tox)))
18538 (home-page "https://github.com/neithere/argh/")
18539 (synopsis "Argparse wrapper with natural syntax")
18540 (description
18541 "python-argh is a small library that provides several layers of
18542 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18543 always possible to declare a command with the highest possible (and least
18544 flexible) layer and then tune the behaviour with any of the lower layers
18545 including the native API of @code{python-argparse}.")
18546 (license license:lgpl3+))))
18547
18548 (define-public python-ppft
18549 (package
18550 (name "python-ppft")
18551 (version "1.6.6.1")
18552 (source
18553 (origin
18554 (method url-fetch)
18555 (uri (pypi-uri "ppft" version))
18556 (sha256
18557 (base32
18558 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18559 (build-system python-build-system)
18560 (arguments '(#:tests? #f)) ; there are none
18561 (propagated-inputs
18562 `(("python-six" ,python-six)))
18563 (home-page "https://pypi.org/project/ppft/")
18564 (synopsis "Fork of Parallel Python")
18565 (description
18566 "This package is a fork of Parallel Python. The Parallel Python
18567 module (@code{pp}) provides an easy and efficient way to create
18568 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18569 computers and clusters. It features cross-platform portability and dynamic
18570 load balancing.")
18571 (license license:bsd-3)))
18572
18573 (define-public python-pox
18574 (package
18575 (name "python-pox")
18576 (version "0.2.7")
18577 (source
18578 (origin
18579 (method url-fetch)
18580 (uri (pypi-uri "pox" version))
18581 (sha256
18582 (base32
18583 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18584 (build-system python-build-system)
18585 (arguments
18586 `(#:phases
18587 (modify-phases %standard-phases
18588 (replace 'check
18589 (lambda _
18590 (mkdir-p "/tmp/guix")
18591 (setenv "SHELL" "bash")
18592 (setenv "USERNAME" "guix")
18593 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18594 (invoke "py.test" "-vv")
18595 #t)))))
18596 (native-inputs
18597 `(("python-pytest" ,python-pytest)
18598 ("which" ,which)))
18599 (home-page "https://pypi.org/project/pox/")
18600 (synopsis "Python utilities for filesystem exploration and automated builds")
18601 (description
18602 "Pox provides a collection of utilities for navigating and manipulating
18603 filesystems. This module is designed to facilitate some of the low level
18604 operating system interactions that are useful when exploring a filesystem on a
18605 remote host. Pox provides Python equivalents of several shell commands such
18606 as @command{which} and @command{find}. These commands allow automated
18607 discovery of what has been installed on an operating system, and where the
18608 essential tools are located.")
18609 (license license:bsd-3)))
18610
18611 (define-public python-pathos
18612 (package
18613 (name "python-pathos")
18614 (version "0.2.5")
18615 (source
18616 (origin
18617 (method url-fetch)
18618 (uri (pypi-uri "pathos" version))
18619 (sha256
18620 (base32
18621 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18622 (build-system python-build-system)
18623 (arguments
18624 '(#:phases
18625 (modify-phases %standard-phases
18626 (replace 'check
18627 (lambda _
18628 (setenv "PYTHONPATH"
18629 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18630 (invoke "python" "./tests/__main__.py"))))))
18631 (propagated-inputs
18632 `(("python-dill" ,python-dill)
18633 ("python-multiprocess" ,python-multiprocess)
18634 ("python-pox" ,python-pox)
18635 ("python-ppft" ,python-ppft)))
18636 (native-inputs
18637 `(("python-pytest" ,python-pytest)))
18638 (home-page "https://pypi.org/project/pathos/")
18639 (synopsis
18640 "Parallel graph management and execution in heterogeneous computing")
18641 (description
18642 "Python-pathos is a framework for heterogenous computing. It provides a
18643 consistent high-level interface for configuring and launching parallel
18644 computations across heterogenous resources. Python-pathos provides configurable
18645 launchers for parallel and distributed computing, where each launcher contains
18646 the syntactic logic to configure and launch jobs in an execution environment.")
18647 (license license:bsd-3)))
18648
18649 (define-public python-flit
18650 (package
18651 (name "python-flit")
18652 (version "2.1.0")
18653 (source
18654 (origin
18655 (method url-fetch)
18656 (uri (pypi-uri "flit" version))
18657 (sha256
18658 (base32
18659 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18660 (build-system python-build-system)
18661 (arguments
18662 `(#:tests? #f)) ; XXX: Check requires network access.
18663 (home-page "https://flit.readthedocs.io/")
18664 (synopsis
18665 "Simple packaging tool for simple packages")
18666 (description
18667 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18668 packages a single importable module or package at a time, using the import
18669 name as the name on PyPI. All subpackages and data files within a package
18670 are included automatically.")
18671 (license license:bsd-3)))
18672
18673 (define-public python-pathtools
18674 (package
18675 (name "python-pathtools")
18676 (version "0.1.2")
18677 (source
18678 (origin
18679 (method url-fetch)
18680 (uri (pypi-uri "pathtools" version))
18681 (sha256
18682 (base32
18683 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18684 (build-system python-build-system)
18685 (home-page
18686 "https://github.com/gorakhargosh/pathtools")
18687 (synopsis "Path utilities for Python")
18688 (description "Pattern matching and various utilities for file systems
18689 paths.")
18690 (license license:expat)))
18691
18692 (define-public python-fastentrypoints
18693 (package
18694 (name "python-fastentrypoints")
18695 (version "0.12")
18696 (source
18697 (origin
18698 (method url-fetch)
18699 (uri (pypi-uri "fastentrypoints" version))
18700 (sha256
18701 (base32
18702 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18703 (build-system python-build-system)
18704 (home-page
18705 "https://github.com/ninjaaron/fast-entry_points")
18706 (synopsis
18707 "Makes entry_points specified in setup.py load more quickly")
18708 (description
18709 "Using entry_points in your setup.py makes scripts that start really
18710 slowly because it imports pkg_resources. This package allows such setup
18711 scripts to load entry points more quickly.")
18712 (license license:bsd-3)))
18713
18714 (define-public python-funcparserlib
18715 (package
18716 (name "python-funcparserlib")
18717 (version "0.3.6")
18718 (source
18719 (origin
18720 (method url-fetch)
18721 (uri (pypi-uri "funcparserlib" version))
18722 (sha256
18723 (base32
18724 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18725 (native-inputs
18726 `(("python-tox" ,python-tox)))
18727 (arguments
18728 `(#:phases
18729 (modify-phases %standard-phases
18730 (replace 'check
18731 (lambda _
18732 (invoke "tox"))))))
18733 (build-system python-build-system)
18734 (home-page
18735 "https://github.com/vlasovskikh/funcparserlib")
18736 (synopsis
18737 "Recursive descent parsing library based on functional combinators")
18738 (description
18739 "This package is a recursive descent parsing library for Python based on
18740 functional combinators. Parser combinators are just higher-order functions
18741 that take parsers as their arguments and return them as result values.")
18742 (license license:expat)))
18743
18744 (define-public python-speg
18745 (package
18746 (name "python-speg")
18747 (version "0.3")
18748 (source
18749 (origin
18750 (method url-fetch)
18751 (uri (pypi-uri "speg" version ".zip"))
18752 (sha256
18753 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18754 (arguments
18755 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18756 (native-inputs
18757 `(("unzip" ,unzip)))
18758 (build-system python-build-system)
18759 (home-page "https://github.com/avakar/speg")
18760 (synopsis "PEG-based parser interpreter with memoization")
18761 (description "This package is a PEG-based parser and interpreter with
18762 memoization.")
18763 (license license:expat)))
18764
18765 (define-public python-cson
18766 (package
18767 (name "python-cson")
18768 (version "0.8")
18769 (source
18770 (origin
18771 (method url-fetch)
18772 (uri (pypi-uri "cson" version))
18773 (sha256
18774 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18775 (build-system python-build-system)
18776 (propagated-inputs
18777 `(("python-speg" ,python-speg)))
18778 (home-page "https://github.com/avakar/pycson")
18779 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18780 (description "This package is a parser for Coffeescript Object
18781 Notation (CSON).")
18782 (license license:expat)))
18783
18784 (define-public python-asynctest
18785 (package
18786 (name "python-asynctest")
18787 (version "0.13.0")
18788 (source
18789 (origin
18790 (method url-fetch)
18791 (uri (pypi-uri "asynctest" version))
18792 (sha256
18793 (base32
18794 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18795 (build-system python-build-system)
18796 (arguments
18797 '(#:phases
18798 (modify-phases %standard-phases
18799 (replace 'check
18800 (lambda _
18801 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18802 (add-after 'unpack 'disable-tests
18803 (lambda* _
18804 (substitute* "test/test_selector.py"
18805 ;; XXX: This test fails for unknown reason inside the build
18806 ;; environment.
18807 (("def test_events_watched_outside_test_are_ignored")
18808 "@unittest.skip('disabled by guix')
18809 def test_events_watched_outside_test_are_ignored")))))))
18810 (home-page "https://github.com/Martiusweb/asynctest")
18811 (synopsis "Extension of unittest for testing asyncio libraries")
18812 (description
18813 "The package asynctest is built on top of the standard unittest module
18814 and cuts down boilerplate code when testing libraries for asyncio.")
18815 (license license:asl2.0)))
18816
18817 (define-public python-aionotify
18818 (package
18819 (name "python-aionotify")
18820 (version "0.2.0")
18821 (source
18822 (origin
18823 ;; Source tarball on PyPi lacks tests
18824 (method git-fetch)
18825 (uri (git-reference
18826 (url "https://github.com/rbarrois/aionotify")
18827 (commit (string-append "v" version))))
18828 (file-name (git-file-name name version))
18829 (sha256
18830 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18831 (build-system python-build-system)
18832 (native-inputs `(("python-asynctest" ,python-asynctest)))
18833 (home-page "https://github.com/rbarrois/aionotify")
18834 (synopsis "Asyncio-powered inotify library")
18835 (description
18836 "@code{aionotify} is a simple, asyncio-based inotify library.")
18837 (license license:bsd-3)))
18838
18839 (define-public python-forbiddenfruit
18840 (package
18841 (name "python-forbiddenfruit")
18842 (version "0.1.3")
18843 (source
18844 (origin
18845 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18846 (method git-fetch)
18847 (uri (git-reference
18848 (url "https://github.com/clarete/forbiddenfruit")
18849 (commit version)))
18850 (file-name (git-file-name name version))
18851 (sha256
18852 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18853 (build-system python-build-system)
18854 (arguments
18855 '(#:phases
18856 (modify-phases %standard-phases
18857 (replace 'check
18858 (lambda _
18859 (invoke "make" "SKIP_DEPS=1"))))))
18860 (native-inputs
18861 `(("python-nose" ,python-nose)
18862 ("python-coverage" ,python-coverage)))
18863 (home-page "https://github.com/clarete/forbiddenfruit")
18864 (synopsis "Patch python built-in objects")
18865 (description "This project allows Python code to extend built-in types.")
18866 (license (list license:gpl3+ license:expat))))
18867
18868 (define-public python-shouldbe
18869 (package
18870 (name "python-shouldbe")
18871 (version "0.1.2")
18872 (source
18873 (origin
18874 (method url-fetch)
18875 (uri (pypi-uri "shouldbe" version))
18876 (sha256
18877 (base32
18878 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
18879 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
18880 (build-system python-build-system)
18881 (propagated-inputs
18882 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18883 (native-inputs
18884 `(("python-nose" ,python-nose)))
18885 (home-page "https://github.com/directxman12/should_be")
18886 (synopsis "Python Assertion Helpers inspired by Shouldly")
18887 (description
18888 "Python Assertion Helpers inspired by Shouldly.")
18889 (license license:isc)))
18890
18891 (define-public python-k5test
18892 (package
18893 (name "python-k5test")
18894 (version "0.9.2")
18895 (source
18896 (origin
18897 (method url-fetch)
18898 (uri (pypi-uri "k5test" version))
18899 (sha256
18900 (base32
18901 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18902 (build-system python-build-system)
18903 (propagated-inputs
18904 `(("python-six" ,python-six)
18905 ;; `which`, `kadmin.local` binaries called inside library
18906 ("which" ,which)
18907 ("mit-krb5" ,mit-krb5)))
18908 (native-inputs `(("mit-krb5" ,mit-krb5)))
18909 (arguments
18910 '(#:phases
18911 (modify-phases %standard-phases
18912 (add-after 'unpack 'patch-paths
18913 (lambda* _
18914 (substitute* "k5test/realm.py"
18915 (("'kadmin_local'") "'kadmin.local'")))))))
18916 (home-page "https://github.com/pythongssapi/k5test")
18917 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18918 (description
18919 "@code{k5test} is a library for setting up self-contained Kerberos 5
18920 environments, and running Python unit tests inside those environments. It is
18921 based on the file of the same name found alongside the MIT Kerberos 5 unit
18922 tests.")
18923 (license license:isc)))
18924
18925 (define-public python-gssapi
18926 (package
18927 (name "python-gssapi")
18928 (version "1.6.5")
18929 (source
18930 (origin
18931 (method url-fetch)
18932 (uri (pypi-uri "gssapi" version))
18933 (sha256
18934 (base32
18935 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
18936 (build-system python-build-system)
18937 (propagated-inputs
18938 `(("python-decorator" ,python-decorator)
18939 ("python-six" ,python-six)))
18940 (inputs
18941 `(("mit-krb5" ,mit-krb5)))
18942 ;; for tests
18943 (native-inputs
18944 `(("python-shouldbe" ,python-shouldbe)
18945 ("python-parameterized" ,python-parameterized)
18946 ("python-k5test" ,python-k5test)
18947 ("python-nose" ,python-nose)))
18948 (home-page "https://github.com/pythongssapi/python-gssapi")
18949 (synopsis "Python GSSAPI Wrapper")
18950 (description
18951 "Python-GSSAPI provides both low-level and high level wrappers around the
18952 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
18953 also be useable with other GSSAPI mechanisms.")
18954 (license license:isc)))
18955
18956 (define-public python-check-manifest
18957 (package
18958 (name "python-check-manifest")
18959 (version "0.37")
18960 (source
18961 (origin
18962 (method url-fetch)
18963 (uri (pypi-uri "check-manifest" version))
18964 (sha256
18965 (base32
18966 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
18967 (build-system python-build-system)
18968 (native-inputs
18969 `(("python-mock" ,python-mock)
18970 ("git" ,git)))
18971 (home-page "https://github.com/mgedmin/check-manifest")
18972 (synopsis "Check MANIFEST.in in a Python source package for completeness")
18973 (description "Python package can include a MANIFEST.in file to help with
18974 sending package files to the Python Package Index. This package checks that
18975 file to ensure it completely and accurately describes your project.")
18976 (license license:expat)))
18977
18978 (define-public python-android-stringslib
18979 (package
18980 (name "python-android-stringslib")
18981 (version "0.1.2")
18982 (source
18983 (origin
18984 (method git-fetch)
18985 (uri (git-reference
18986 (url "https://framagit.org/tyreunom/python-android-strings-lib")
18987 (commit (string-append "v" version))))
18988 (file-name (git-file-name name version))
18989 (sha256
18990 (base32
18991 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
18992 (build-system python-build-system)
18993 (arguments
18994 `(#:tests? #f))
18995 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
18996 (synopsis "Android strings.xml support")
18997 (description "Android Strings Lib provides support for android's strings.xml
18998 files. These files are used to translate strings in android apps.")
18999 (license license:expat)))
19000
19001 (define-public python-watchdog
19002 (package
19003 (name "python-watchdog")
19004 (version "0.9.0")
19005 (source
19006 (origin
19007 (method url-fetch)
19008 (uri (pypi-uri "watchdog" version))
19009 (sha256
19010 (base32
19011 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
19012 (build-system python-build-system)
19013 (arguments
19014 `(#:phases
19015 (modify-phases %standard-phases
19016 (add-before 'check 'remove-failing
19017 (lambda _
19018 (delete-file "tests/test_inotify_buffer.py")
19019 (delete-file "tests/test_snapshot_diff.py")
19020 #t)))))
19021 (propagated-inputs
19022 `(("python-argh" ,python-argh)
19023 ("python-pathtools" ,python-pathtools)
19024 ("python-pyyaml" ,python-pyyaml)))
19025 (native-inputs
19026 `(("python-pytest-cov" ,python-pytest-cov)
19027 ("python-pytest-timeout" ,python-pytest-timeout)))
19028 (home-page "https://github.com/gorakhargosh/watchdog")
19029 (synopsis "Filesystem events monitoring")
19030 (description "This package provides a way to monitor filesystem events
19031 such as a file modification and trigger an action. This is similar to inotify,
19032 but portable.")
19033 (license license:asl2.0)))
19034
19035 (define-public python-wget
19036 (package
19037 (name "python-wget")
19038 (version "3.2")
19039 (source
19040 (origin
19041 (method url-fetch)
19042 (uri (pypi-uri "wget" version ".zip"))
19043 (sha256
19044 (base32
19045 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19046 (build-system python-build-system)
19047 (native-inputs `(("unzip" ,unzip)))
19048 (home-page "https://bitbucket.org/techtonik/python-wget/")
19049 (synopsis "Pure Python download utility")
19050 (description "The python-wget library provides an API to download files
19051 with features similar to the @command{wget} utility.")
19052 (license license:unlicense)))
19053
19054 (define-public offlate
19055 (package
19056 (name "offlate")
19057 (version "0.5")
19058 (source
19059 (origin
19060 (method git-fetch)
19061 (uri (git-reference
19062 (url "https://framagit.org/tyreunom/offlate")
19063 (commit version)))
19064 (file-name (git-file-name name version))
19065 (sha256
19066 (base32
19067 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19068 (build-system python-build-system)
19069 (arguments
19070 ;; No tests
19071 `(#:tests? #f))
19072 (propagated-inputs
19073 `(("python-android-stringslib" ,python-android-stringslib)
19074 ("python-dateutil" ,python-dateutil)
19075 ("python-gitlab" ,python-gitlab)
19076 ("python-lxml" ,python-lxml)
19077 ("python-polib" ,python-polib)
19078 ("python-pyenchant" ,python-pyenchant)
19079 ("python-pygit2" ,python-pygit2)
19080 ("python-pygithub" ,python-pygithub)
19081 ("python-pyqt" ,python-pyqt)
19082 ("python-requests" ,python-requests)
19083 ("python-ruamel.yaml" ,python-ruamel.yaml)
19084 ("python-translation-finder" ,python-translation-finder)
19085 ("python-watchdog" ,python-watchdog)))
19086 (native-inputs
19087 `(("qttools" ,qttools)))
19088 (home-page "https://framagit.org/tyreunom/offlate")
19089 (synopsis "Offline translation interface for online translation tools")
19090 (description "Offlate offers a unified interface for different translation
19091 file formats, as well as many different online translation platforms. You can
19092 use it to get work from online platforms, specialized such as the Translation
19093 Project, or not such a gitlab instance when your upstream doesn't use any
19094 dedicated platform. The tool proposes a unified interface for any format and
19095 an upload option to send your work back to the platform.")
19096 (license license:gpl3+)))
19097
19098 (define-public python-titlecase
19099 (package
19100 (name "python-titlecase")
19101 (version "0.12.0")
19102 (source
19103 (origin
19104 (method url-fetch)
19105 (uri (pypi-uri "titlecase" version))
19106 (sha256
19107 (base32
19108 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19109 (build-system python-build-system)
19110 (native-inputs
19111 `(("python-nose" ,python-nose)))
19112 (home-page "https://github.com/ppannuto/python-titlecase")
19113 (synopsis "Capitalize strings similar to book titles")
19114 (description
19115 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19116 It capitalizes (predominantly English) strings in a way that is similar to
19117 book titles, using the New York Times Manual of Style to leave certain words
19118 lowercase.")
19119 (license license:expat)))
19120
19121 (define-public python-pypng
19122 (package
19123 (name "python-pypng")
19124 (version "0.0.20")
19125 (source
19126 (origin
19127 (method url-fetch)
19128 (uri (pypi-uri "pypng" version))
19129 (sha256
19130 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19131 (build-system python-build-system)
19132 (home-page "https://github.com/drj11/pypng")
19133 (synopsis "Pure Python PNG image encoder/decoder")
19134 (description
19135 "The PyPNG module implements support for PNG images. It reads and writes
19136 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19137 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19138 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19139 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19140 A number of optional chunks can be specified (when writing) and
19141 understood (when reading): tRNS, bKGD, gAMA.
19142
19143 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19144 aim at being a replacement or competitor. Its strength lies in fine-grained
19145 extensive support of PNG features. It can also read and write Netpbm PAM
19146 files, with a focus on its use as an intermediate format for implementing
19147 custom PNG processing.")
19148 (license license:expat)))
19149
19150 (define-public python-fuzzywuzzy
19151 (package
19152 (name "python-fuzzywuzzy")
19153 (version "0.18.0")
19154 (source
19155 (origin
19156 (method url-fetch)
19157 (uri (pypi-uri "fuzzywuzzy" version))
19158 (sha256
19159 (base32
19160 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19161 (build-system python-build-system)
19162 (native-inputs
19163 `(("python-hypothesis" ,python-hypothesis)
19164 ("python-pycodestyle" ,python-pycodestyle)
19165 ("python-pytest" ,python-pytest)))
19166 (propagated-inputs
19167 `(("python-levenshtein" ,python-levenshtein)))
19168 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19169 (synopsis "Fuzzy string matching in Python")
19170 (description "Approximate string matching using
19171 @emph{Levenshtein Distance} to calculate the differences between
19172 sequences.")
19173 (license license:gpl2)))
19174
19175 (define-public python2-fuzzywuzzy
19176 (package-with-python2 python-fuzzywuzzy))
19177
19178 (define-public python-block-tracing
19179 (package
19180 (name "python-block-tracing")
19181 (version "1.0.1")
19182 (source
19183 (origin
19184 (method url-fetch)
19185 (uri (pypi-uri "block_tracing" version))
19186 (sha256
19187 (base32
19188 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19189 (build-system python-build-system)
19190 (arguments '(#:tests? #f)) ; no tests
19191 (home-page "https://github.com/rianhunter/block_tracing")
19192 (synopsis "Protect process memory")
19193 (description
19194 "@code{block_tracing} is a tiny Python library that can be used to
19195 prevent debuggers and other applications from inspecting the memory within
19196 your process.")
19197 (license license:expat)))
19198
19199 (define-public python-gcovr
19200 (package
19201 (name "python-gcovr")
19202 (version "4.2")
19203 (source
19204 (origin
19205 (method url-fetch)
19206 (uri (pypi-uri "gcovr" version))
19207 (sha256
19208 (base32
19209 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19210 (build-system python-build-system)
19211 (propagated-inputs
19212 `(("python-lxml" ,python-lxml)
19213 ("python-jinja2" ,python-jinja2)))
19214 (home-page "https://gcovr.com/")
19215 (synopsis "Utility for generating code coverage results")
19216 (description
19217 "Gcovr provides a utility for managing the use of the GNU gcov
19218 utility and generating summarized code coverage results. It is inspired
19219 by the Python coverage.py package, which provides a similar utility for
19220 Python.")
19221 (license license:bsd-3)))
19222
19223 (define-public python-owslib
19224 (package
19225 (name "python-owslib")
19226 (version "0.19.2")
19227 (source
19228 (origin
19229 (method url-fetch)
19230 (uri (pypi-uri "OWSLib" version))
19231 (sha256
19232 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19233 (build-system python-build-system)
19234 (arguments
19235 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19236 (synopsis "Interface for Open Geospatial Consortium web service")
19237 (description
19238 "OWSLib is a Python package for client programming with Open Geospatial
19239 Consortium (OGC) web service (hence OWS) interface standards, and their related
19240 content models.")
19241 (home-page "https://geopython.github.io/OWSLib/")
19242 (license license:bsd-3)))
19243
19244 (define-public python-docusign-esign
19245 (package
19246 (name "python-docusign-esign")
19247 (version "3.1.0")
19248 (source (origin
19249 (method url-fetch)
19250 (uri (pypi-uri "docusign_esign" version))
19251 (sha256
19252 (base32
19253 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19254 (build-system python-build-system)
19255 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19256 (arguments `(#:tests? #f))
19257 (propagated-inputs
19258 `(("python-certifi", python-certifi)
19259 ("python-six", python-six)
19260 ("python-dateutil", python-dateutil)
19261 ("python-urllib3", python-urllib3)
19262 ("python-pyjwt", python-pyjwt)
19263 ("python-cryptography", python-cryptography)
19264 ("python-nose", python-nose)))
19265 (synopsis "DocuSign Python Client")
19266 (description "The Official DocuSign Python Client Library used to interact
19267 with the eSign REST API. Send, sign, and approve documents using this client.")
19268 (home-page "https://www.docusign.com/devcenter")
19269 (license license:expat)))
19270
19271 (define-public python-xattr
19272 (package
19273 (name "python-xattr")
19274 (version "0.9.7")
19275 (source
19276 (origin
19277 (method url-fetch)
19278 (uri (pypi-uri "xattr" version))
19279 (sha256
19280 (base32
19281 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19282 (build-system python-build-system)
19283 (propagated-inputs
19284 `(("python-cffi" ,python-cffi)))
19285 (home-page "https://github.com/xattr/xattr")
19286 (synopsis
19287 "Python wrapper for extended filesystem attributes")
19288 (description "This package provides a Python wrapper for using extended
19289 filesystem attributes. Extended attributes extend the basic attributes of files
19290 and directories in the file system. They are stored as name:data pairs
19291 associated with file system objects (files, directories, symlinks, etc).")
19292 (license license:expat)))
19293
19294 (define-public python-json-logger
19295 (package
19296 (name "python-json-logger")
19297 (version "0.1.11")
19298 (source
19299 (origin
19300 (method url-fetch)
19301 (uri (pypi-uri "python-json-logger" version))
19302 (sha256
19303 (base32
19304 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19305 (build-system python-build-system)
19306 (home-page
19307 "https://github.com/madzak/python-json-logger")
19308 (synopsis "JSON log formatter in Python")
19309 (description "This library allows standard Python logging to output log data
19310 as JSON objects. With JSON we can make our logs more readable by machines and
19311 we can stop writing custom parsers for syslog-type records.")
19312 (license license:bsd-3)))
19313
19314 (define-public python-daiquiri
19315 (package
19316 (name "python-daiquiri")
19317 (version "2.1.1")
19318 (source
19319 (origin
19320 (method url-fetch)
19321 (uri (pypi-uri "daiquiri" version))
19322 (sha256
19323 (base32
19324 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19325 (build-system python-build-system)
19326 (propagated-inputs
19327 `(("python-json-logger" ,python-json-logger)))
19328 (native-inputs
19329 `(("python-mock" ,python-mock)
19330 ("python-pytest" ,python-pytest)
19331 ("python-setuptools-scm" ,python-setuptools-scm)
19332 ("python-six" ,python-six)))
19333 (home-page "https://github.com/jd/daiquiri")
19334 (synopsis
19335 "Library to configure Python logging easily")
19336 (description "The daiquiri library provides an easy way to configure
19337 logging in Python. It also provides some custom formatters and handlers.")
19338 (license license:asl2.0)))
19339
19340 (define-public python-pifpaf
19341 (package
19342 (name "python-pifpaf")
19343 (version "2.4.0")
19344 (source
19345 (origin
19346 (method url-fetch)
19347 (uri (pypi-uri "pifpaf" version))
19348 (sha256
19349 (base32
19350 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19351 (build-system python-build-system)
19352 (arguments
19353 `(#:tests? #f))
19354 (propagated-inputs
19355 `(("python-click" ,python-click)
19356 ("python-daiquiri" ,python-daiquiri)
19357 ("python-fixtures" ,python-fixtures)
19358 ("python-jinja2" ,python-jinja2)
19359 ("python-pbr" ,python-pbr)
19360 ("python-psutil" ,python-psutil)
19361 ("python-six" ,python-six)
19362 ("python-xattr" ,python-xattr)))
19363 (native-inputs
19364 `(("python-mock" ,python-mock)
19365 ("python-os-testr" ,python-os-testr)
19366 ("python-requests" ,python-requests)
19367 ("python-testrepository" ,python-testrepository)
19368 ("python-testtools" ,python-testtools)))
19369 (home-page "https://github.com/jd/pifpaf")
19370 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19371 (description "Pifpaf is a suite of fixtures and a command-line tool that
19372 starts and stops daemons for a quick throw-away usage. This is typically
19373 useful when needing these daemons to run integration testing. It originally
19374 evolved from its precursor @code{overtest}.")
19375 (license license:asl2.0)))
19376
19377 (define-public python-pytest-check-links
19378 (package
19379 (name "python-pytest-check-links")
19380 (version "0.3.0")
19381 (source
19382 (origin
19383 (method url-fetch)
19384 ;; URI uses underscores
19385 (uri (pypi-uri "pytest_check_links" version))
19386 (sha256
19387 (base32
19388 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19389 (build-system python-build-system)
19390 (propagated-inputs
19391 `(("python-docutils" ,python-docutils)
19392 ("python-html5lib" ,python-html5lib)
19393 ("python-nbconvert" ,python-nbconvert)
19394 ("python-nbformat" ,python-nbformat)
19395 ("python-pytest" ,python-pytest)
19396 ("python-six" ,python-six)))
19397 (native-inputs
19398 `(("python-pbr-minimal" ,python-pbr-minimal)))
19399 (home-page "https://github.com/minrk/pytest-check-links")
19400 (synopsis "Check links in files")
19401 (description "This package provides a pytest plugin that checks URLs for
19402 HTML-containing files.")
19403 (license license:bsd-3)))
19404
19405 (define-public python-json5
19406 (package
19407 (name "python-json5")
19408 (version "0.8.5")
19409 (source
19410 (origin
19411 ;; sample.json5 is missing from PyPi source tarball
19412 (method git-fetch)
19413 (uri (git-reference
19414 (url "https://github.com/dpranke/pyjson5.git")
19415 (commit (string-append "v" version))))
19416 (file-name (git-file-name name version))
19417 (sha256
19418 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19419 (build-system python-build-system)
19420 (home-page "https://github.com/dpranke/pyjson5")
19421 (synopsis
19422 "Python implementation of the JSON5 data format")
19423 (description
19424 "JSON5 extends the JSON data interchange format to make it slightly more
19425 usable as a configuration language. This Python package implements parsing and
19426 dumping of JSON5 data structures.")
19427 (license license:asl2.0)))
19428
19429 (define-public python-frozendict
19430 (package
19431 (name "python-frozendict")
19432 (version "1.2")
19433 (source
19434 (origin
19435 (method url-fetch)
19436 (uri (pypi-uri "frozendict" version))
19437 (sha256
19438 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19439 (build-system python-build-system)
19440 (home-page "https://github.com/slezica/python-frozendict")
19441 (synopsis "Simple immutable mapping for Python")
19442 (description
19443 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19444 implements the complete mapping interface. It can be used as a drop-in
19445 replacement for dictionaries where immutability is desired.")
19446 (license license:expat)))
19447
19448 (define-public python-unpaddedbase64
19449 (package
19450 (name "python-unpaddedbase64")
19451 (version "1.1.0")
19452 (source
19453 (origin
19454 (method git-fetch)
19455 (uri (git-reference
19456 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19457 (commit (string-append "v" version))))
19458 (file-name (git-file-name name version))
19459 (sha256
19460 (base32
19461 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19462 (build-system python-build-system)
19463 (home-page "https://pypi.org/project/unpaddedbase64/")
19464 (synopsis "Encode and decode Base64 without “=” padding")
19465 (description
19466 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19467 using “=” characters. However this conveys no benefit so many protocols
19468 choose to use Base64 without the “=” padding.")
19469 (license license:asl2.0)))
19470
19471 (define-public python-canonicaljson
19472 (package
19473 (name "python-canonicaljson")
19474 (version "1.1.4")
19475 (source
19476 (origin
19477 (method url-fetch)
19478 (uri (pypi-uri "canonicaljson" version))
19479 (sha256
19480 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19481 (build-system python-build-system)
19482 (propagated-inputs
19483 `(("python-six" ,python-six)
19484 ("python-frozendict" ,python-frozendict)
19485 ("python-simplejson" ,python-simplejson)))
19486 (home-page "https://github.com/matrix-org/python-canonicaljson")
19487 (synopsis "Canonical JSON")
19488 (description
19489 "Deterministically encode JSON.
19490
19491 @itemize
19492 @item Encodes objects and arrays as RFC 7159 JSON.
19493 @item Sorts object keys so that you get the same result each time.
19494 @item Has no insignificant whitespace to make the output as small as possible.
19495 @item Escapes only the characters that must be escaped, U+0000 to
19496 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19497 @item Uses the shortest escape sequence for each escaped character.
19498 @item Encodes the JSON as UTF-8.
19499 @item Can encode frozendict immutable dictionaries.
19500 @end itemize")
19501 (license license:asl2.0)))
19502
19503 (define-public python-signedjson
19504 (package
19505 (name "python-signedjson")
19506 (version "1.1.1")
19507 (source
19508 (origin
19509 (method url-fetch)
19510 (uri (pypi-uri "signedjson" version))
19511 (sha256
19512 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19513 (build-system python-build-system)
19514 (propagated-inputs
19515 `(("python-canonicaljson" ,python-canonicaljson)
19516 ("python-importlib-metadata" ,python-importlib-metadata)
19517 ("python-pynacl" ,python-pynacl)
19518 ("python-typing-extensions" ,python-typing-extensions)
19519 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19520 (native-inputs
19521 `(("python-setuptools-scm" ,python-setuptools-scm)))
19522 (home-page "https://github.com/matrix-org/python-signedjson")
19523 (synopsis "Sign JSON objects with ED25519 signatures")
19524 (description
19525 "Sign JSON objects with ED25519 signatures.
19526
19527 @itemize
19528 @item More than one entity can sign the same object.
19529 @item Each entity can sign the object with more than one key making it easier to
19530 rotate keys
19531 @item ED25519 can be replaced with a different algorithm.
19532 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19533 key.
19534 @end itemize")
19535 (license license:asl2.0)))
19536
19537 (define-public python-daemonize
19538 (package
19539 (name "python-daemonize")
19540 (version "2.5.0")
19541 (source
19542 (origin
19543 (method url-fetch)
19544 (uri (pypi-uri "daemonize" version))
19545 (sha256
19546 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19547 (build-system python-build-system)
19548 (home-page "https://github.com/thesharp/daemonize")
19549 (synopsis "Library for writing system daemons in Python")
19550 (description "Daemonize is a library for writing system daemons in Python.")
19551 (license license:expat)))
19552
19553 (define-public python-pymacaroons
19554 (package
19555 (name "python-pymacaroons")
19556 (version "0.13.0")
19557 (source
19558 (origin
19559 (method url-fetch)
19560 (uri (pypi-uri "pymacaroons" version))
19561 (sha256
19562 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19563 (build-system python-build-system)
19564 (propagated-inputs
19565 `(("python-six" ,python-six)
19566 ("python-pynacl" ,python-pynacl)))
19567 (home-page "https://github.com/ecordell/pymacaroons")
19568 (synopsis "Python Macaroon Library")
19569 (description
19570 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19571 tokens, macaroons embed caveats that define specific authorization
19572 requirements for the target service, the service that issued the root macaroon
19573 and which is capable of verifying the integrity of macaroons it receives.
19574
19575 Macaroons allow for delegation and attenuation of authorization. They are
19576 simple and fast to verify, and decouple authorization policy from the
19577 enforcement of that policy.")
19578 (license license:expat)))
19579
19580 (define-public python-ldap3
19581 (package
19582 (name "python-ldap3")
19583 (version "2.7")
19584 (home-page "https://github.com/cannatag/ldap3")
19585 (source
19586 (origin
19587 (method git-fetch)
19588 (uri (git-reference (url home-page)
19589 (commit (string-append "v" version))))
19590 (file-name (git-file-name name version))
19591 (sha256
19592 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19593 (build-system python-build-system)
19594 (arguments
19595 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19596 #:phases (modify-phases %standard-phases
19597 (replace 'check
19598 (lambda* (#:key tests? #:allow-other-keys)
19599 (when tests?
19600 (invoke "nosetests" "-s" "test"))
19601 #t)))))
19602 (native-inputs
19603 `(("python-nose" ,python-nose)))
19604 (propagated-inputs
19605 `(("python-gssapi" ,python-gssapi)
19606 ("python-pyasn1" ,python-pyasn1)))
19607 (synopsis "Python LDAP client")
19608 (description
19609 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19610 library.")
19611 (license license:lgpl3+)))
19612
19613 (define-public python-boltons
19614 (package
19615 (name "python-boltons")
19616 (version "20.0.0")
19617 (source
19618 (origin
19619 (method url-fetch)
19620 (uri (pypi-uri "boltons" version))
19621 (sha256
19622 (base32
19623 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19624 (build-system python-build-system)
19625 (home-page "https://github.com/mahmoud/boltons")
19626 (synopsis "Extensions to the Python standard library")
19627 (description
19628 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19629 as — and yet conspicuously missing from — the standard library, including:
19630
19631 @itemize
19632 @item Atomic file saving, bolted on with fileutils
19633 @item A highly-optimized OrderedMultiDict, in dictutils
19634 @item Two types of PriorityQueue, in queueutils
19635 @item Chunked and windowed iteration, in iterutils
19636 @item Recursive data structure iteration and merging, with iterutils.remap
19637 @item Exponential backoff functionality, including jitter, through
19638 iterutils.backoff
19639 @item A full-featured TracebackInfo type, for representing stack traces, in
19640 tbutils
19641 @end itemize")
19642 (license license:bsd-3)))
19643
19644 (define-public python-eliot
19645 (package
19646 (name "python-eliot")
19647 (version "1.12.0")
19648 (source
19649 (origin
19650 (method url-fetch)
19651 (uri (pypi-uri "eliot" version))
19652 (sha256
19653 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19654 (build-system python-build-system)
19655 (arguments
19656 `(#:phases
19657 (modify-phases %standard-phases
19658 (add-after 'unpack 'remove-journald-support
19659 (lambda _
19660 (for-each delete-file
19661 '("eliot/tests/test_journald.py"
19662 "eliot/journald.py"))
19663 #t))
19664 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19665 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19666 ;; be installed and these tests should pass.
19667 (lambda _
19668 (delete-file "eliot/tests/test_prettyprint.py")
19669 #t)))))
19670 (propagated-inputs
19671 `(("python-boltons" ,python-boltons)
19672 ("python-pyrsistent" ,python-pyrsistent)
19673 ("python-six" ,python-six)
19674 ("python-zope-interface" ,python-zope-interface)))
19675 (native-inputs
19676 `(("python-black" ,python-black)
19677 ("python-coverage" ,python-coverage)
19678 ("python-dask" ,python-dask)
19679 ("python-flake8" ,python-flake8)
19680 ("python-hypothesis" ,python-hypothesis)
19681 ("python-pytest" ,python-pytest)
19682 ("python-setuptools" ,python-setuptools)
19683 ("python-sphinx" ,python-sphinx)
19684 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19685 ("python-testtools" ,python-testtools)
19686 ("python-twine" ,python-twine)
19687 ("python-twisted" ,python-twisted)))
19688 (home-page "https://github.com/itamarst/eliot/")
19689 (synopsis "Eliot: the logging system that tells you why it happened")
19690 (description
19691 "@dfn{eliot} is a Python logging system that outputs causal chains of
19692 actions: actions can spawn other actions, and eventually they either succeed
19693 or fail. The resulting logs tell you the story of what your software did: what
19694 happened, and what caused it.")
19695 (license license:asl2.0)))
19696
19697 (define-public python-pem
19698 (package
19699 (name "python-pem")
19700 (version "20.1.0")
19701 (source
19702 (origin
19703 (method url-fetch)
19704 (uri (pypi-uri "pem" version))
19705 (sha256
19706 (base32
19707 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19708 (build-system python-build-system)
19709 (native-inputs
19710 `(("python-certifi" ,python-certifi)
19711 ("python-coverage" ,python-coverage)
19712 ("python-pretend" ,python-pretend)
19713 ("python-pyopenssl" ,python-pyopenssl)
19714 ("python-pytest" ,python-pytest)
19715 ("python-sphinx" ,python-sphinx)
19716 ("python-twisted" ,python-twisted)))
19717 (home-page "https://pem.readthedocs.io/")
19718 (synopsis "Easy PEM file parsing in Python")
19719 (description
19720 "This package provides a Python module for parsing and splitting PEM files.")
19721 (license license:expat)))
19722
19723 (define-public python-txsni
19724 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19725 ;; Python and OpenSSL.
19726 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19727 (revision "0"))
19728 (package
19729 (name "python-txsni")
19730 (version (git-version "0.1.9" revision commit))
19731 (home-page "https://github.com/glyph/txsni")
19732 (source
19733 (origin
19734 (method git-fetch)
19735 (uri (git-reference (url home-page) (commit commit)))
19736 (file-name (git-file-name name version))
19737 (sha256
19738 (base32
19739 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19740 (build-system python-build-system)
19741 (propagated-inputs
19742 `(("python-pyopenssl" ,python-pyopenssl)
19743 ("python-service-identity" ,python-service-identity)
19744 ("python-twisted" ,python-twisted)))
19745 (synopsis "Run TLS servers with Twisted")
19746 (description
19747 "This package provides an easy-to-use SNI endpoint for use
19748 with the Twisted web framework.")
19749 (license license:expat))))
19750
19751 (define-public python-txacme
19752 (package
19753 (name "python-txacme")
19754 (version "0.9.2")
19755 (source
19756 (origin
19757 (method url-fetch)
19758 (uri (pypi-uri "txacme" version))
19759 (sha256
19760 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19761 (build-system python-build-system)
19762 (propagated-inputs
19763 `(("python-acme" ,python-acme)
19764 ("python-attrs" ,python-attrs)
19765 ("python-eliot" ,python-eliot)
19766 ("python-josepy" ,python-josepy)
19767 ("python-pem" ,python-pem)
19768 ("python-treq" ,python-treq)
19769 ("python-twisted" ,python-twisted)
19770 ("python-txsni" ,python-txsni)))
19771 (native-inputs
19772 `(("python-fixtures" ,python-fixtures)
19773 ("python-hypothesis" ,python-hypothesis)
19774 ("python-mock" ,python-mock)
19775 ("python-service-identity"
19776 ,python-service-identity)
19777 ("python-testrepository" ,python-testrepository)
19778 ("python-testscenarios" ,python-testscenarios)
19779 ("python-testtools" ,python-testtools)))
19780 (home-page "https://github.com/twisted/txacme")
19781 (synopsis "Twisted implexmentation of the ACME protocol")
19782 (description
19783 "ACME is Automatic Certificate Management Environment, a protocol that
19784 allows clients and certificate authorities to automate verification and
19785 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19786 Certificate Authority.
19787
19788 txacme is an implementation of the protocol for Twisted, the event-driven
19789 networking engine for Python.")
19790 (license license:expat)))
19791
19792 (define-public python-pysaml2
19793 (package
19794 (name "python-pysaml2")
19795 (version "5.0.0")
19796 (source
19797 (origin
19798 (method url-fetch)
19799 (uri (pypi-uri "pysaml2" version))
19800 (sha256
19801 (base32
19802 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19803 (build-system python-build-system)
19804 (propagated-inputs
19805 `(("python-cryptography" ,python-cryptography)
19806 ("python-dateutil" ,python-dateutil)
19807 ("python-defusedxml" ,python-defusedxml)
19808 ("python-pyopenssl" ,python-pyopenssl)
19809 ("python-pytz" ,python-pytz)
19810 ("python-requests" ,python-requests)
19811 ("python-six" ,python-six)))
19812 (home-page "https://idpy.org")
19813 (synopsis "Python implementation of SAML Version 2 Standard")
19814 (description
19815 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19816 It contains all necessary pieces for building a SAML2 service provider or
19817 an identity provider. The distribution contains examples of both.
19818
19819 This package was originally written to work in a WSGI environment, but
19820 there are extensions that allow you to use it with other frameworks.")
19821 (license license:asl2.0)))
19822
19823 (define-public python-click-plugins
19824 (package
19825 (name "python-click-plugins")
19826 (version "1.1.1")
19827 (source
19828 (origin
19829 (method url-fetch)
19830 (uri (pypi-uri "click-plugins" version))
19831 (sha256
19832 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19833 (build-system python-build-system)
19834 (native-inputs
19835 `(("python-pytest" ,python-pytest)))
19836 (propagated-inputs
19837 `(("python-click" ,python-click)))
19838 (synopsis "Extension for Click to register external CLI commands")
19839 (description "This package provides n extension module for Click to
19840 register external CLI commands via setuptools entry-points.")
19841 (home-page "https://github.com/click-contrib/click-plugins")
19842 (license license:bsd-3)))
19843
19844 (define-public python-diceware
19845 (package
19846 (name "python-diceware")
19847 (version "0.9.6")
19848 (source
19849 (origin
19850 (method url-fetch)
19851 (uri (pypi-uri "diceware" version))
19852 (sha256
19853 (base32
19854 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19855 (build-system python-build-system)
19856 (native-inputs
19857 `(("python-coverage" ,python-coverage)
19858 ("python-pytest" ,python-pytest)
19859 ("python-pytest-runner" ,python-pytest-runner)))
19860 (home-page "https://github.com/ulif/diceware/")
19861 (synopsis "Generates memorable passphrases")
19862 (description "This package generates passphrases by concatenating words
19863 randomly picked from wordlists. It supports several sources of
19864 randomness (including real life dice) and different wordlists (including
19865 cryptographically signed ones).")
19866 (license license:gpl3+)))
19867
19868 (define-public pyzo
19869 (package
19870 (name "pyzo")
19871 (version "4.10.2")
19872 (source
19873 (origin
19874 (method url-fetch)
19875 (uri (pypi-uri "pyzo" version))
19876 (sha256
19877 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
19878 (build-system python-build-system)
19879 (arguments
19880 `(#:phases
19881 (modify-phases %standard-phases
19882 (add-before 'check 'fix-home-directory
19883 (lambda _
19884 ;; Tests fail with "Permission denied: '/homeless-shelter'".
19885 (setenv "HOME" "/tmp")
19886 #t)))
19887 ;; Tests fail with "Uncaught Python exception: invalid literal for
19888 ;; int() with base 10: 'test'".
19889 #:tests? #f))
19890 (propagated-inputs
19891 `(("python-pyqt" ,python-pyqt)))
19892 (home-page "https://pyzo.org")
19893 (synopsis
19894 "Python IDE for scientific computing")
19895 (description
19896 "Pyzo is a Python IDE focused on interactivity and introspection,
19897 which makes it very suitable for scientific computing. Its practical
19898 design is aimed at simplicity and efficiency.
19899
19900 It consists of two main components, the editor and the shell, and uses
19901 a set of pluggable tools to help the programmer in various ways. Some
19902 example tools are source structure, project manager, interactive help,
19903 workspace...")
19904 (license license:bsd-2)))
19905
19906 (define-public python-osc
19907 (package
19908 (name "python-osc")
19909 (version "1.7.4")
19910 (source
19911 (origin
19912 (method url-fetch)
19913 (uri (pypi-uri "python-osc" version))
19914 (sha256
19915 (base32
19916 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
19917 (build-system python-build-system)
19918 (home-page "https://github.com/attwad/python-osc")
19919 (synopsis "Open Sound Control server and client implementations")
19920 (description
19921 "@code{python-osc} is a pure Python library with no external
19922 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
19923 Open Sound Control 1.0} specification.")
19924 (license license:unlicense)))
19925
19926 (define-public python-voluptuous
19927 (package
19928 (name "python-voluptuous")
19929 (version "0.11.7")
19930 (source
19931 (origin
19932 (method url-fetch)
19933 (uri (pypi-uri "voluptuous" version))
19934 (sha256
19935 (base32
19936 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
19937 (build-system python-build-system)
19938 (native-inputs
19939 `(("python-nose" ,python-nose)))
19940 (home-page "https://github.com/alecthomas/voluptuous")
19941 (synopsis "Python data validation library")
19942 (description
19943 "Voluptuous is a Python data validation library. It is primarily
19944 intended for validating data coming into Python as JSON, YAML, etc.")
19945 (license license:bsd-3)))
19946
19947 (define-public python-cmd2
19948 (package
19949 (name "python-cmd2")
19950 (version "1.0.2")
19951 (source
19952 (origin
19953 (method url-fetch)
19954 (uri (pypi-uri "cmd2" version))
19955 (sha256
19956 (base32
19957 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
19958 (build-system python-build-system)
19959 (propagated-inputs
19960 `(("python-attrs" ,python-attrs)
19961 ("python-colorama" ,python-colorama)
19962 ("python-pyperclip" ,python-pyperclip)
19963 ("python-wcwidth" ,python-wcwidth)))
19964 (native-inputs
19965 `(("python-codecov" ,python-codecov)
19966 ("python-coverage" ,python-coverage)
19967 ("python-doc8" ,python-doc8)
19968 ("python-flake8" ,python-flake8)
19969 ("python-invoke" ,python-invoke)
19970 ("python-mock" ,python-mock)
19971 ("python-pytest" ,python-pytest)
19972 ("python-pytest-cov" ,python-pytest-cov)
19973 ("python-pytest-mock" ,python-pytest-mock)
19974 ("python-setuptools-scm" ,python-setuptools-scm)
19975 ("python-sphinx" ,python-sphinx)
19976 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
19977 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19978 ("python-tox" ,python-tox)
19979 ("python-twine" ,python-twine)
19980 ("which" ,which)))
19981 (home-page "https://github.com/python-cmd2/cmd2")
19982 (synopsis "Tool for building interactive command line applications")
19983 (description
19984 "Cmd2 is a tool for building interactive command line applications in
19985 Python. Its goal is to make it quick and easy for developers to build
19986 feature-rich and user-friendly interactive command line applications. It
19987 provides a simple API which is an extension of Python's built-in @code{cmd}
19988 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
19989 make your life easier and eliminates much of the boilerplate code which would
19990 be necessary when using @code{cmd}.")
19991 (license license:expat)))
19992
19993 (define-public python-pytidylib
19994 (package
19995 (name "python-pytidylib")
19996 (version "0.3.2")
19997 (source (origin
19998 (method url-fetch)
19999 (uri (pypi-uri "pytidylib" version))
20000 (sha256
20001 (base32
20002 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
20003 (build-system python-build-system)
20004 (arguments
20005 '(#:phases
20006 (modify-phases %standard-phases
20007 (add-before 'build 'qualify-libtidy
20008 (lambda* (#:key inputs #:allow-other-keys)
20009 (let ((libtidy (string-append (assoc-ref inputs "tidy")
20010 "/lib/libtidy.so")))
20011 (substitute* "tidylib/tidy.py"
20012 (("ctypes\\.util\\.find_library\\('tidy'\\)")
20013 (format #f "'~a'" libtidy)))
20014 #t))))))
20015 (inputs `(("tidy" ,tidy)))
20016 (home-page "https://github.com/countergram/pytidylib")
20017 (synopsis "Python wrapper for HTML Tidy library")
20018 (description
20019 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
20020 allows you, from Python code, to “fix” invalid (X)HTML markup.")
20021 (license license:expat)))
20022
20023 (define-public python2-pytidylib
20024 (package-with-python2 python-pytidylib))
20025
20026 (define-public python-mujson
20027 (package
20028 (name "python-mujson")
20029 (version "1.4")
20030 (source
20031 (origin
20032 (method url-fetch)
20033 (uri (pypi-uri "mujson" version))
20034 (sha256
20035 (base32
20036 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
20037 (build-system python-build-system)
20038 (home-page "https://github.com/mattgiles/mujson")
20039 (synopsis "Use the fastest JSON functions available at import time")
20040 (description "This packages selects the fastest JSON functions available
20041 at import time.")
20042 (license license:expat)))
20043
20044 (define-public python-bashlex
20045 (package
20046 (name "python-bashlex")
20047 (version "0.14")
20048 (source
20049 (origin
20050 (method url-fetch)
20051 (uri (pypi-uri "bashlex" version))
20052 (sha256
20053 (base32
20054 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
20055 (build-system python-build-system)
20056 (arguments
20057 `(#:phases
20058 (modify-phases %standard-phases
20059 (add-before 'build 'pregenerate-yacc-tables
20060 (lambda _
20061 ;; parser.py caches tables, which attempts to write to site lib
20062 ;; see https://github.com/idank/bashlex/issues/51
20063 (invoke "python" "-c" "import bashlex"))))))
20064 (home-page
20065 "https://github.com/idank/bashlex")
20066 (synopsis "Python parser for bash")
20067 (description "@code{bashlex} is a Python port of the parser used
20068 internally by GNU bash.
20069
20070 For the most part it's transliterated from C, the major differences are:
20071
20072 @itemize
20073 @item it does not execute anything
20074 @item it is reentrant
20075 @item it generates a complete AST
20076 @end itemize
20077 ")
20078 (license license:gpl3+)))