gnu: Add python-diceware.
[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 ng0 <ng0@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 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 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 Jakub Kądziołka <kuba@kadziolka.net>
71 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
72 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
73 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
74 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
75 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
76 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
77 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
78 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
79 ;;;
80 ;;; This file is part of GNU Guix.
81 ;;;
82 ;;; GNU Guix is free software; you can redistribute it and/or modify it
83 ;;; under the terms of the GNU General Public License as published by
84 ;;; the Free Software Foundation; either version 3 of the License, or (at
85 ;;; your option) any later version.
86 ;;;
87 ;;; GNU Guix is distributed in the hope that it will be useful, but
88 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
89 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
90 ;;; GNU General Public License for more details.
91 ;;;
92 ;;; You should have received a copy of the GNU General Public License
93 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
94
95 (define-module (gnu packages python-xyz)
96 #:use-module ((guix licenses) #:prefix license:)
97 #:use-module (gnu packages)
98 #:use-module (gnu packages algebra)
99 #:use-module (gnu packages adns)
100 #:use-module (gnu packages attr)
101 #:use-module (gnu packages backup)
102 #:use-module (gnu packages bash)
103 #:use-module (gnu packages check)
104 #:use-module (gnu packages compression)
105 #:use-module (gnu packages crypto)
106 #:use-module (gnu packages databases)
107 #:use-module (gnu packages dbm)
108 #:use-module (gnu packages enchant)
109 #:use-module (gnu packages file)
110 #:use-module (gnu packages fontutils)
111 #:use-module (gnu packages gcc)
112 #:use-module (gnu packages geo)
113 #:use-module (gnu packages ghostscript)
114 #:use-module (gnu packages gl)
115 #:use-module (gnu packages glib)
116 #:use-module (gnu packages gnome)
117 #:use-module (gnu packages graphviz)
118 #:use-module (gnu packages graphics)
119 #:use-module (gnu packages gsasl)
120 #:use-module (gnu packages gstreamer)
121 #:use-module (gnu packages gtk)
122 #:use-module (gnu packages icu4c)
123 #:use-module (gnu packages image)
124 #:use-module (gnu packages imagemagick)
125 #:use-module (gnu packages kerberos)
126 #:use-module (gnu packages libevent)
127 #:use-module (gnu packages libffi)
128 #:use-module (gnu packages linux)
129 #:use-module (gnu packages llvm)
130 #:use-module (gnu packages man)
131 #:use-module (gnu packages maths)
132 #:use-module (gnu packages monitoring)
133 #:use-module (gnu packages multiprecision)
134 #:use-module (gnu packages networking)
135 #:use-module (gnu packages ncurses)
136 #:use-module (gnu packages openstack)
137 #:use-module (gnu packages pcre)
138 #:use-module (gnu packages perl)
139 #:use-module (gnu packages photo)
140 #:use-module (gnu packages pkg-config)
141 #:use-module (gnu packages python)
142 #:use-module (gnu packages python-check)
143 #:use-module (gnu packages python-compression)
144 #:use-module (gnu packages python-crypto)
145 #:use-module (gnu packages python-science)
146 #:use-module (gnu packages python-web)
147 #:use-module (gnu packages qt)
148 #:use-module (gnu packages readline)
149 #:use-module (gnu packages sdl)
150 #:use-module (gnu packages search)
151 #:use-module (gnu packages shells)
152 #:use-module (gnu packages sphinx)
153 #:use-module (gnu packages ssh)
154 #:use-module (gnu packages terminals)
155 #:use-module (gnu packages tex)
156 #:use-module (gnu packages texinfo)
157 #:use-module (gnu packages time)
158 #:use-module (gnu packages tls)
159 #:use-module (gnu packages version-control)
160 #:use-module (gnu packages video)
161 #:use-module (gnu packages web)
162 #:use-module (gnu packages base)
163 #:use-module (gnu packages xml)
164 #:use-module (gnu packages xorg)
165 #:use-module (gnu packages xdisorg)
166 #:use-module (gnu packages tcl)
167 #:use-module (gnu packages bdw-gc)
168 #:use-module (gnu packages serialization)
169 #:use-module (guix packages)
170 #:use-module (guix download)
171 #:use-module (guix git-download)
172 #:use-module (guix hg-download)
173 #:use-module (guix utils)
174 #:use-module (guix build-system gnu)
175 #:use-module (guix build-system cmake)
176 #:use-module (guix build-system python)
177 #:use-module (guix build-system trivial)
178 #:use-module (srfi srfi-1)
179 #:use-module (srfi srfi-26))
180
181 (define-public python-tenacity
182 (package
183 (name "python-tenacity")
184 (version "6.1.0")
185 (source (origin
186 (method url-fetch)
187 (uri (pypi-uri "tenacity" version))
188 (sha256
189 (base32
190 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
191 (build-system python-build-system)
192 (native-inputs
193 `(("python-setuptools-scm" ,python-setuptools-scm)
194 ("python-sphinx" ,python-sphinx)
195 ("python-tornado" ,python-tornado)
196 ("python-pytest" ,python-pytest)))
197 (propagated-inputs
198 `(("python-six" ,python-six)))
199 (arguments
200 `(#:phases (modify-phases %standard-phases
201 (replace 'check
202 (lambda _
203 (invoke "pytest")
204 #t)))))
205 (home-page "https://github.com/jd/tenacity")
206 (synopsis "Retrying library for python")
207 (description "Tenacity is a general-purpose python library to simplify the
208 task of adding retry behavior to just about anything.")
209 (license license:asl2.0)))
210
211 (define-public python-colorlog
212 (package
213 (name "python-colorlog")
214 (version "4.1.0")
215 (source (origin
216 (method url-fetch)
217 (uri (pypi-uri "colorlog" version))
218 (sha256
219 (base32
220 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
221 (build-system python-build-system)
222 (native-inputs
223 `(("python-pytest" ,python-pytest)))
224 (arguments
225 `(#:phases (modify-phases %standard-phases
226 (replace 'check
227 (lambda _
228 ;; Extend PYTHONPATH so the built package will be found.
229 (setenv "PYTHONPATH"
230 (string-append (getcwd) "/build/lib:"
231 (getenv "PYTHONPATH")))
232 (invoke "pytest" "-p" "no:logging")
233 #t)))))
234 (home-page "https://github.com/borntyping/python-colorlog")
235 (synopsis "Log formatting with colors for python")
236 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
237 with Python's logging module that outputs records using terminal colors.")
238 (license license:expat)))
239
240 (define-public python-pyprind
241 (package
242 (name "python-pyprind")
243 (version "2.11.2")
244 (source (origin
245 (method url-fetch)
246 (uri (pypi-uri "PyPrind" version))
247 (sha256
248 (base32
249 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
250 (build-system python-build-system)
251 (propagated-inputs
252 `(("python-psutil" ,python-psutil)))
253 (home-page "https://github.com/rasbt/pyprind")
254 (synopsis "Python Progress Bar and Percent Indicator Utility")
255 (description "The PyPrind (Python Progress Indicator) module provides a
256 progress bar and a percentage indicator object that let you track the progress
257 of a loop structure or other iterative computation.")
258 (license license:bsd-3)))
259
260 (define-public python-gphoto2
261 (package
262 (name "python-gphoto2")
263 (version "2.2.1")
264 (source (origin
265 (method url-fetch)
266 (uri (pypi-uri "gphoto2" version))
267 (sha256
268 (base32
269 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
270 (build-system python-build-system)
271 (native-inputs
272 `(("pkg-config" ,pkg-config)))
273 (inputs
274 `(("libgphoto2" ,libgphoto2)))
275 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
276 (synopsis "Python interface to libgphoto2")
277 (description "@code{python-gphoto2} is a comprehensive Python interface
278 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
279 automatically generate the interface code.")
280 (license license:gpl3+)))
281
282 (define-public python-colour
283 (package
284 (name "python-colour")
285 (version "0.1.5")
286 (source (origin
287 (method url-fetch)
288 (uri (pypi-uri "colour" version))
289 (sha256
290 (base32
291 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
292 (build-system python-build-system)
293 (native-inputs
294 `(("python-d2to1" ,python-d2to1)))
295 (home-page "https://github.com/vaab/colour")
296 (synopsis "Convert and manipulate various color representations")
297 (description "Pythonic way to manipulate color representations (HSL, RVB,
298 web, X11, ...).")
299 (license license:expat)))
300
301 (define-public python-d2to1
302 (package
303 (name "python-d2to1")
304 (version "0.2.12.post1")
305 (source (origin
306 (method url-fetch)
307 (uri (pypi-uri "d2to1" version))
308 (sha256
309 (base32
310 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
311 (build-system python-build-system)
312 (native-inputs
313 `(("python-nose" ,python-nose)))
314 (home-page "https://github.com/embray/d2to1")
315 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
316 in python")
317 (description "The python package d2to1 (the d is for distutils) allows
318 using distutils2-like setup.cfg files for a package's metadata with a
319 distribute/setuptools setup.py script.")
320 (license license:bsd-2)))
321
322 (define-public python-rawkit
323 (package
324 (name "python-rawkit")
325 (version "0.6.0")
326 (source (origin
327 (method url-fetch)
328 (uri (pypi-uri "rawkit" version))
329 (sha256
330 (base32
331 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
332 (build-system python-build-system)
333 (native-inputs
334 `(("python-pytest" ,python-pytest)
335 ("python-mock" ,python-mock)))
336 (inputs
337 `(("libraw" ,libraw)))
338 (home-page "https://rawkit.readthedocs.io")
339 (synopsis "Ctypes-based LibRaw binding for Python")
340 (description "The rawkit package provides two modules: rawkit and libraw.
341 The rawkit module provides a high-level Pythonic interface for developing raw
342 photos, while the libraw module provides a CTypes based interface for
343 interacting with the low-level LibRaw C APIs.")
344 (license license:expat)))
345
346 (define-public python-easygui
347 (package
348 (name "python-easygui")
349 (version "0.98.1")
350 (source (origin
351 (method url-fetch)
352 (uri (pypi-uri "easygui" version))
353 (sha256
354 (base32
355 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
356 (build-system python-build-system)
357 (propagated-inputs
358 `(("python-tkinter" ,python "tk")))
359 (home-page "https://github.com/robertlugg/easygui")
360 (synopsis "GUI programming module for Python")
361 (description "EasyGUI is a module for very simple, very easy GUI
362 programming in Python. EasyGUI is different from other GUI generators in that
363 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
364 simple function calls.")
365 (license license:bsd-3)))
366
367 (define-public python-pymediainfo
368 (package
369 (name "python-pymediainfo")
370 (version "4.1")
371 (source
372 (origin
373 (method url-fetch)
374 (uri (pypi-uri "pymediainfo" version))
375 (sha256
376 (base32
377 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
378 (build-system python-build-system)
379 (native-inputs
380 `(("python-setuptools-scm" ,python-setuptools-scm)
381 ("python-pytest" ,python-pytest)))
382 (inputs
383 `(("libmediainfo" ,libmediainfo)))
384 (arguments
385 `(#:phases
386 (modify-phases %standard-phases
387 (add-after 'unpack 'patch-libmediainfo
388 (lambda _
389 (substitute* "pymediainfo/__init__.py"
390 (("libmediainfo.so.0")
391 (string-append (assoc-ref %build-inputs "libmediainfo")
392 "/lib/libmediainfo.so.0")))
393 #t))
394 (replace 'check
395 (lambda _
396 ;; Extend PYTHONPATH so the built package will be found.
397 (setenv "PYTHONPATH"
398 (string-append (getcwd) "/build/lib:"
399 (getenv "PYTHONPATH")))
400 ;; Skip the only failing test "test_parse_url"
401 (invoke "pytest" "-vv" "-k" "not test_parse_url")
402 #t)))))
403 (home-page
404 "https://github.com/sbraz/pymediainfo")
405 (synopsis
406 "Python wrapper for the mediainfo library")
407 (description
408 "Python wrapper for the mediainfo library to access the technical and tag
409 data for video and audio files.")
410 (license license:expat)))
411
412 (define-public python-psutil
413 (package
414 (name "python-psutil")
415 (version "5.6.5")
416 (source
417 (origin
418 (method url-fetch)
419 (uri (pypi-uri "psutil" version))
420 (sha256
421 (base32 "0isil5jxwwd8awz54qk28rpgjg43i5l6yl70g40vxwa4r4m56lfh"))))
422 (build-system python-build-system)
423 (arguments
424 ;; FIXME: some tests does not return and times out.
425 '(#:tests? #f))
426 (home-page "https://www.github.com/giampaolo/psutil")
427 (synopsis "Library for retrieving information on running processes")
428 (description
429 "psutil (Python system and process utilities) is a library for retrieving
430 information on running processes and system utilization (CPU, memory, disks,
431 network) in Python. It is useful mainly for system monitoring, profiling and
432 limiting process resources and management of running processes. It implements
433 many functionalities offered by command line tools such as: ps, top, lsof,
434 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
435 pidof, tty, taskset, pmap.")
436 (properties `((python2-variant . ,(delay python2-psutil))))
437 (license license:bsd-3)))
438
439 (define-public python2-psutil
440 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
441 (package
442 (inherit base)
443 (propagated-inputs
444 `(("python2-enum34" ,python2-enum34) ;optional
445 ,@(package-propagated-inputs base))))))
446
447 (define-public python-shapely
448 (package
449 (name "python-shapely")
450 (version "1.6.4.post2")
451 (source
452 (origin
453 (method url-fetch)
454 (uri (pypi-uri "Shapely" version))
455 (sha256
456 (base32
457 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
458 (build-system python-build-system)
459 (native-inputs
460 `(("python-cython" ,python-cython)
461 ("python-matplotlib" ,python-matplotlib)
462 ("python-pytest" ,python-pytest)
463 ("python-pytest-cov" ,python-pytest-cov)))
464 (inputs
465 `(("geos" ,geos)))
466 (propagated-inputs
467 `(("python-numpy" ,python-numpy)))
468 (arguments
469 `(#:phases
470 (modify-phases %standard-phases
471 (add-after 'unpack 'patch-geos-path
472 (lambda* (#:key inputs #:allow-other-keys)
473 (let ((geos (assoc-ref inputs "geos"))
474 (glibc (assoc-ref inputs ,(if (%current-target-system)
475 "cross-libc" "libc"))))
476 (substitute* "shapely/geos.py"
477 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
478 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
479 geos "/lib/libgeos_c.so'])"))
480 (("free = load_dll\\('c'\\)\\.free")
481 (string-append "free = load_dll('c', fallbacks=['"
482 glibc "/lib/libc.so.6']).free"))))
483 #t)))))
484 (home-page "https://github.com/Toblerity/Shapely")
485 (synopsis "Library for the manipulation and analysis of geometric objects")
486 (description "Shapely is a Python package for manipulation and analysis of
487 planar geometric objects. It is based on the @code{GEOS} library.")
488 (license license:bsd-3)))
489
490 (define-public python-shortuuid
491 (package
492 (name "python-shortuuid")
493 (version "0.5.0")
494 (source
495 (origin
496 (method url-fetch)
497 (uri (pypi-uri "shortuuid" version))
498 (sha256
499 (base32
500 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
501 (build-system python-build-system)
502 (native-inputs
503 `(("python-pep8" ,python-pep8)))
504 (home-page "https://github.com/skorokithakis/shortuuid")
505 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
506 (description
507 "@code{shortuuid} is a Python library for generating concise, unambiguous
508 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
509 module and then similar looking characters are removed.")
510 (license license:bsd-3)))
511
512 (define-public python-logwrap
513 (package
514 (name "python-logwrap")
515 (version "3.2.1")
516 (source
517 (origin
518 (method url-fetch)
519 (uri (pypi-uri "logwrap" version ".zip"))
520 (sha256
521 (base32
522 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
523 (build-system python-build-system)
524 (propagated-inputs
525 `(("python-six" ,python-six)
526 ("python-typing" ,python-typing)))
527 (native-inputs
528 `(("unzip" ,unzip)
529 ("python-cython" ,python-cython)
530 ("python-pytest" ,python-pytest)
531 ("python-pytest-cov" ,python-pytest-cov)
532 ("python-pytest-runner" ,python-pytest-runner)))
533 (home-page "https://github.com/penguinolog/logwrap")
534 (synopsis "Decorator for logging function arguments")
535 (description "This package provides a decorator to log function arguments
536 and function call return values in a human-readable way.")
537 (license license:asl2.0)))
538
539 (define-public python2-shapely
540 (package-with-python2 python-shapely))
541
542 (define-public python-clyent
543 (package
544 (name "python-clyent")
545 (version "1.2.1")
546 (source
547 (origin
548 (method url-fetch)
549 (uri (pypi-uri "clyent" version))
550 (sha256
551 (base32
552 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
553 (build-system python-build-system)
554 (native-inputs
555 `(("python-mock" ,python-mock)))
556 (home-page "https://github.com/binstar/clyent")
557 (synopsis "Command line client library")
558 (description "Clyent is a Python command line utiliy library. It is used
559 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
560 (license license:bsd-3)))
561
562 (define-public python2-clyent
563 (package-with-python2 python-clyent))
564
565 (define-public python-babel
566 (package
567 (name "python-babel")
568 (version "2.8.0")
569 (source
570 (origin
571 (method url-fetch)
572 (uri (pypi-uri "Babel" version))
573 (sha256
574 (base32
575 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
576 (build-system python-build-system)
577 (native-inputs
578 `(("python-freezegun" ,python-freezegun)
579 ("python-pytest" ,python-pytest)))
580 (propagated-inputs
581 `(("python-pytz" ,python-pytz)))
582 (arguments
583 `(#:phases (modify-phases %standard-phases
584 (replace 'check
585 (lambda _
586 (invoke "pytest" "-vv" "-k"
587 (string-append
588 ;; XXX: These tests fail when using Pytest 4.x and
589 ;; Babel 2.6.0. Try removing this for later versions.
590 "not test_no_inherit_metazone_marker_never_in_output"
591 " and not test_smoke_dates"
592 " and not test_smoke_numbers")))))))
593 (home-page "http://babel.pocoo.org/")
594 (synopsis
595 "Tools for internationalizing Python applications")
596 (description
597 "Babel is composed of two major parts:
598 - tools to build and work with gettext message catalogs
599 - a Python interface to the CLDR (Common Locale Data Repository), providing
600 access to various locale display names, localized number and date formatting,
601 etc. ")
602 (license license:bsd-3)))
603
604 (define-public python2-babel
605 (package-with-python2 python-babel))
606
607 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
608 (define-public python2-babel-2.6
609 (package
610 (inherit python2-babel)
611 (version "2.6.0")
612 (source (origin
613 (method url-fetch)
614 (uri (pypi-uri "Babel" version))
615 (sha256
616 (base32
617 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
618
619 (define-public python2-backport-ssl-match-hostname
620 (package
621 (name "python2-backport-ssl-match-hostname")
622 (version "3.5.0.1")
623 (source
624 (origin
625 (method url-fetch)
626 (uri (pypi-uri "backports.ssl_match_hostname" version))
627 (sha256
628 (base32
629 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
630 (build-system python-build-system)
631 (arguments
632 `(#:python ,python-2
633 #:tests? #f)) ; no test target
634 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
635 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
636 (description
637 "This backport brings the ssl.match_hostname() function to users of
638 earlier versions of Python. The function checks the hostname in the
639 certificate returned by the server to which a connection has been established,
640 and verifies that it matches the intended target hostname.")
641 (license license:psfl)))
642
643 (define-public python-boolean.py
644 (package
645 (name "python-boolean.py")
646 (version "3.6")
647 (source
648 (origin
649 ;; There's no source tarball on PyPI.
650 (method git-fetch)
651 (uri (git-reference
652 (url "https://github.com/bastikr/boolean.py")
653 (commit (string-append "v" version))))
654 (file-name (git-file-name name version))
655 (sha256
656 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
657 (build-system python-build-system)
658 (home-page "https://github.com/bastikr/boolean.py")
659 (synopsis "Boolean algebra in one Python module")
660 (description
661 "This is a small Python library that implements boolean algebra.
662 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
663 @code{Symbol} class that can take on one of these two values. Calculations
664 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
665 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
666 Expressions are constructed from parsed strings or directly in Python.")
667 (license license:bsd-2)))
668
669 (define-public python-hdf4
670 (package
671 (name "python-hdf4")
672 (version "0.9")
673 (source
674 (origin
675 (method url-fetch)
676 (uri (pypi-uri name version))
677 (sha256
678 (base32
679 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
680 (build-system python-build-system)
681 (native-inputs `(("nose" ,python-nose)))
682 (propagated-inputs `(("numpy" ,python-numpy)))
683 (inputs
684 `(("hdf4" ,hdf4)
685 ("libjpeg" ,libjpeg)
686 ("zlib" ,zlib)))
687 (arguments
688 `(#:phases
689 (modify-phases %standard-phases
690 (replace 'check
691 (lambda _
692 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
693 ;; on to import numpy. Somehow this works on their CI system.
694 ;; Let's just manage PYTHONPATH here instead.
695 (substitute* "runexamples.sh"
696 (("export PYTHONPATH=.*") ""))
697 (setenv "PYTHONPATH"
698 (string-append (getcwd) ":"
699 (getenv "PYTHONPATH")))
700 (invoke "./runexamples.sh")
701 (invoke "nosetests" "-v"))))))
702 (home-page "https://github.com/fhs/python-hdf4")
703 (synopsis "Python interface to the NCSA HDF4 library")
704 (description
705 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
706 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
707 NetCDF files can also be read and modified. Python-HDF4 is a fork of
708 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
709 (license license:expat)))
710
711 (define-public python2-hdf4
712 (package-with-python2 python-hdf4))
713
714 (define-public python-h5py
715 (package
716 (name "python-h5py")
717 (version "2.10.0")
718 (source
719 (origin
720 (method url-fetch)
721 (uri (pypi-uri "h5py" version))
722 (sha256
723 (base32
724 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
725 (build-system python-build-system)
726 (arguments
727 `(#:tests? #f ; no test target
728 #:phases
729 (modify-phases %standard-phases
730 (add-after 'unpack 'fix-hdf5-paths
731 (lambda* (#:key inputs #:allow-other-keys)
732 (let ((prefix (assoc-ref inputs "hdf5")))
733 (substitute* "setup_build.py"
734 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
735 (string-append "['" prefix "/lib" "']"))
736 (("'/opt/local/include', '/usr/local/include'")
737 (string-append "'" prefix "/include" "'")))
738 (substitute* "setup_configure.py"
739 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
740 (string-append "['" prefix "/lib" "']")))
741 #t))))))
742 (propagated-inputs
743 `(("python-six" ,python-six)
744 ("python-numpy" ,python-numpy)))
745 (inputs
746 `(("hdf5" ,hdf5-1.10)))
747 (native-inputs
748 `(("python-cython" ,python-cython)
749 ("python-pkgconfig" ,python-pkgconfig)
750 ("pkg-config" ,pkg-config)))
751 (home-page "https://www.h5py.org/")
752 (synopsis "Read and write HDF5 files from Python")
753 (description
754 "The h5py package provides both a high- and low-level interface to the
755 HDF5 library from Python. The low-level interface is intended to be a
756 complete wrapping of the HDF5 API, while the high-level component supports
757 access to HDF5 files, datasets and groups using established Python and NumPy
758 concepts.")
759 (license license:bsd-3)))
760
761 (define-public python2-h5py
762 (package-with-python2 python-h5py))
763
764 (define-public python-sh
765 (package
766 (name "python-sh")
767 (version "1.12.14")
768 (source
769 (origin
770 (method url-fetch)
771 (uri (pypi-uri "sh" version))
772 (sha256
773 (base32
774 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
775 (build-system python-build-system)
776 (arguments
777 '(#:phases
778 (modify-phases %standard-phases
779 (replace 'check
780 (lambda _
781 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
782 (setenv "HOME" "/tmp")
783 (invoke "python" "sh.py" "test"))))))
784 (native-inputs
785 `(("python-coverage" ,python-coverage)))
786 (home-page "https://github.com/amoffat/sh")
787 (synopsis "Python subprocess replacement")
788 (description "This package provides a replacement for Python's
789 @code{subprocess} feature.")
790 (license license:expat)))
791
792 (define-public python2-sh
793 (package-with-python2 python-sh))
794
795 (define-public python-cftime
796 (package
797 (name "python-cftime")
798 (version "1.0.4.2")
799 (source
800 (origin
801 (method url-fetch)
802 (uri (pypi-uri "cftime" version))
803 (sha256
804 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
805 (build-system python-build-system)
806 (propagated-inputs
807 `(("python-numpy" ,python-numpy)))
808 (native-inputs
809 `(("python-coveralls" ,python-coveralls)
810 ("python-cython" ,python-cython)
811 ("python-pytest-cov" ,python-pytest-cov)))
812 (home-page "https://github.com/Unidata/cftime")
813 (synopsis "Library for time handling")
814 (description
815 "This package provides time-handling functionality that used to be part
816 of the netcdf4 package before.")
817 ;; This package claims to include code under the GPLv3 but is released
818 ;; under ISC.
819 (license (list license:isc license:gpl3+))))
820
821 (define-public python-netcdf4
822 (package
823 (name "python-netcdf4")
824 (version "1.4.2")
825 (source
826 (origin
827 (method url-fetch)
828 (uri (pypi-uri "netCDF4" version))
829 (sha256
830 (base32
831 "0c0sklgrmv15ygliin8qq0hp7vanmbi74m6zpi0r1ksr0hssyd5r"))))
832 (build-system python-build-system)
833 (arguments
834 '(#:phases
835 (modify-phases %standard-phases
836 (add-after 'unpack 'configure-locations
837 (lambda* (#:key inputs #:allow-other-keys)
838 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
839 #t)))))
840 (native-inputs
841 `(("python-cython" ,python-cython)))
842 (propagated-inputs
843 `(("python-numpy" ,python-numpy)
844 ("python-cftime" ,python-cftime)))
845 (inputs
846 `(("netcdf" ,netcdf)
847 ("hdf4" ,hdf4)
848 ("hdf5" ,hdf5)))
849 (home-page "https://github.com/Unidata/netcdf4-python")
850 (synopsis "Python/numpy interface to the netCDF library")
851 (description "Netcdf4-python is a Python interface to the netCDF C
852 library. netCDF version 4 has many features not found in earlier
853 versions of the library and is implemented on top of HDF5. This module
854 can read and write files in both the new netCDF 4 and the old netCDF 3
855 format, and can create files that are readable by HDF5 clients. The
856 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
857 to users of that module.")
858 ;; The software is mainly ISC, but includes some files covered
859 ;; by the Expat license.
860 (license (list license:isc license:expat))))
861
862 (define-public python2-netcdf4
863 (package-with-python2 python-netcdf4))
864
865 (define-public python-license-expression
866 (package
867 (name "python-license-expression")
868 (version "0.999")
869 (source
870 (origin
871 (method url-fetch)
872 (uri (pypi-uri "license-expression" version))
873 (sha256
874 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
875 (build-system python-build-system)
876 (propagated-inputs
877 `(("python-boolean.py" ,python-boolean.py)))
878 (home-page "https://github.com/nexB/license-expression")
879 (synopsis "Apply boolean logic to license expressions")
880 (description
881 "This Python module defines a tiny language to evaluate and compare
882 license expressions using boolean logic. Logical combinations of licenses can
883 be tested for equality, containment, and equivalence. They can be normalised
884 and simplified. It supports SPDX license expressions as well as other naming
885 conventions and aliases in the same expression.")
886 (license license:gpl2+)))
887
888 (define-public python-lockfile
889 (package
890 (name "python-lockfile")
891 (version "0.12.2")
892 (source
893 (origin
894 (method url-fetch)
895 (uri (pypi-uri "lockfile" version))
896 (sha256
897 (base32
898 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
899 (build-system python-build-system)
900 (arguments '(#:test-target "check"))
901 (native-inputs
902 `(("python-pbr" ,python-pbr)))
903 (home-page "https://launchpad.net/pylockfile")
904 (synopsis "Platform-independent file locking module")
905 (description
906 "The lockfile package exports a LockFile class which provides a simple
907 API for locking files.")
908 (license license:expat)))
909
910 (define-public python2-lockfile
911 (package-with-python2 python-lockfile))
912
913 (define-public python-filelock
914 (package
915 (name "python-filelock")
916 (version "3.0.12")
917 (source
918 (origin
919 (method url-fetch)
920 (uri (pypi-uri "filelock" version))
921 (sha256
922 (base32
923 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
924 (build-system python-build-system)
925 (home-page
926 "https://github.com/benediktschmitt/py-filelock")
927 (synopsis "Platform independent file lock")
928 (description "@code{filelock} contains a single module implementing
929 a platform independent file lock in Python, which provides a simple way of
930 inter-process communication.")
931 (license license:unlicense)))
932
933 (define-public python-semantic-version
934 (package
935 (name "python-semantic-version")
936 (version "2.6.0")
937 (source
938 (origin
939 (method url-fetch)
940 (uri (pypi-uri "semantic_version" version))
941 (sha256
942 (base32
943 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
944 (build-system python-build-system)
945 (arguments
946 `(#:tests? #f)) ; PyPI tarball lacks tests
947 (home-page "https://github.com/rbarrois/python-semanticversion")
948 (synopsis "Semantic versioning module for Python")
949 (description
950 "The @code{semantic_version} class is a small library for handling
951 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
952
953 It can compare versions, generate a new version that represents a bump in one of
954 the version levels, and check whether any given string is a proper semantic
955 version identifier.")
956 (license license:bsd-3)))
957
958 (define-public python2-semantic-version
959 (package-with-python2 python-semantic-version))
960
961 (define-public python-serpent
962 (package
963 (name "python-serpent")
964 (version "1.28")
965 (source
966 (origin
967 (method url-fetch)
968 (uri (pypi-uri "serpent" version))
969 (sha256
970 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
971 (build-system python-build-system)
972 (native-inputs
973 `(("python-attrs" ,python-attrs)
974 ("python-pytz" ,python-pytz)))
975 (home-page "https://github.com/irmen/Serpent")
976 (synopsis "Serializer for literal Python expressions")
977 (description
978 "Serpent provides @code{ast.literal_eval()}-compatible object tree
979 serialization. It serializes an object tree into bytes (an utf-8 encoded
980 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
981 to rebuild the original object tree.
982
983 Because only safe literals are encoded, it is safe to send serpent data to
984 other machines, such as over the network.")
985 (properties `((python2-variant . ,(delay python2-serpent))))
986 (license license:expat)))
987
988 (define-public python2-serpent
989 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
990 (package
991 (inherit base)
992 (propagated-inputs
993 `(("python-enum34" ,python2-enum34)
994 ,@(package-propagated-inputs base))))))
995
996 (define-public python-setuptools
997 (package
998 (name "python-setuptools")
999 (version "41.0.1")
1000 (source
1001 (origin
1002 (method url-fetch)
1003 (uri (pypi-uri "setuptools" version ".zip"))
1004 (sha256
1005 (base32
1006 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1007 (modules '((guix build utils)))
1008 (snippet
1009 '(begin
1010 ;; Remove included binaries which are used to build self-extracting
1011 ;; installers for Windows.
1012 ;; TODO: Find some way to build them ourself so we can include them.
1013 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1014 #t))))
1015 (build-system python-build-system)
1016 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1017 ;; One could bootstrap with an internal untested setuptools.
1018 (arguments
1019 `(#:tests? #f))
1020 (home-page "https://pypi.org/project/setuptools/")
1021 (synopsis
1022 "Library designed to facilitate packaging Python projects")
1023 (description
1024 "Setuptools is a fully-featured, stable library designed to facilitate
1025 packaging Python projects, where packaging includes:
1026 Python package and module definitions,
1027 distribution package metadata,
1028 test hooks,
1029 project installation,
1030 platform-specific details,
1031 Python 3 support.")
1032 ;; TODO: setuptools now bundles the following libraries:
1033 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1034 (license (list license:psfl ; setuptools itself
1035 license:expat ; six, appdirs, pyparsing
1036 license:asl2.0 ; packaging is dual ASL2/BSD-2
1037 license:bsd-2))))
1038
1039 (define-public python2-setuptools
1040 (package-with-python2 python-setuptools))
1041
1042 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1043 (define-public python-setuptools-for-tensorflow
1044 (hidden-package
1045 (package
1046 (inherit python-setuptools)
1047 (version "39.1.0")
1048 (source (origin
1049 (inherit (package-source python-setuptools))
1050 (uri (pypi-uri "setuptools" version ".zip"))
1051 (sha256
1052 (base32
1053 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1054
1055 (define-public python-uniseg
1056 (package
1057 (name "python-uniseg")
1058 (version "0.7.1")
1059 (source
1060 (origin
1061 (method url-fetch)
1062 (uri (pypi-uri "uniseg" version ".zip"))
1063 (sha256
1064 (base32
1065 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1066 (build-system python-build-system)
1067 (arguments
1068 '(#:tests? #f)) ; The test suite requires network access.
1069 (native-inputs
1070 `(("unzip" ,unzip)))
1071 (home-page
1072 "https://bitbucket.org/emptypage/uniseg-python")
1073 (synopsis
1074 "Python library to determine Unicode text segmentations")
1075 (description
1076 "Uniseg is a Python package used to determine Unicode text segmentations.
1077 Supported segmentations include:
1078 @enumerate
1079 @item @dfn{Code point} (any value in the Unicode codespace)
1080 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1081 multiple Unicode code points, e.g. \"G\" + acute-accent)
1082 @item Word break
1083 @item Sentence break
1084 @item Line break
1085 @end enumerate")
1086 (license license:expat)))
1087
1088 (define-public python2-uniseg
1089 (package-with-python2 python-uniseg))
1090
1091 (define-public python-humanfriendly
1092 (package
1093 (name "python-humanfriendly")
1094 (version "4.4.1")
1095 (source
1096 (origin
1097 (method url-fetch)
1098 (uri (pypi-uri "humanfriendly" version))
1099 (sha256
1100 (base32
1101 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1102 (build-system python-build-system)
1103 (arguments
1104 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1105 #:tests? #f))
1106 (propagated-inputs
1107 `(("python-monotonic" ,python-monotonic)))
1108 (home-page "https://humanfriendly.readthedocs.io")
1109 (synopsis "Human-friendly input and output in Python")
1110 (description
1111 "The functions and classes in @code{humanfriendly} can be used to make
1112 text interfaces more user-friendly. It includes tools to parse and format
1113 numbers, file sizes, and timespans, timers for long-running operations, menus
1114 to allow the user to choose from a list of options, and terminal interaction
1115 helpers.")
1116 (license license:expat)))
1117
1118 (define-public python2-humanfriendly
1119 (package-with-python2 python-humanfriendly))
1120
1121 (define-public python-textparser
1122 (package
1123 (name "python-textparser")
1124 (version "0.23.0")
1125 (source
1126 (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "textparser" version))
1129 (sha256
1130 (base32
1131 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1132 (build-system python-build-system)
1133 (home-page "https://github.com/eerimoq/textparser")
1134 (synopsis "Fast text parser for Python")
1135 (description "This library provides a text parser written in the Python
1136 language. It aims to be fast.")
1137 (license license:expat)))
1138
1139 (define-public python-aenum
1140 (package
1141 (name "python-aenum")
1142 (version "2.2.3")
1143 (source
1144 (origin
1145 (method url-fetch)
1146 (uri (pypi-uri "aenum" version))
1147 (sha256
1148 (base32
1149 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1150 (build-system python-build-system)
1151 (arguments
1152 `(#:phases (modify-phases %standard-phases
1153 (replace 'check
1154 (lambda _
1155 (format #t "current working dir ~s~%" (getcwd))
1156 (setenv "PYTHONPATH"
1157 (string-append ".:" (getenv "PYTHONPATH")))
1158 ;; We must run the test suite module directly, as it
1159 ;; fails to define the 'tempdir' variable in scope for
1160 ;; the tests otherwise
1161 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1162 ;; issues/32/running-tests-with-python-setuppy-test).
1163 (invoke "python3" "aenum/test.py")
1164 ;; This one fails with "NameError: name
1165 ;; 'test_pickle_dump_load' is not defined" (see:
1166 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1167 ;; /error-running-the-test_v3py-test-suite).
1168 ;; (invoke "python3" "aenum/test_v3.py")
1169 #t)))))
1170 (home-page "https://bitbucket.org/stoneleaf/aenum")
1171 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1172 (description "The aenum library includes an @code{Enum} base class, a
1173 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1174 class.")
1175 (license license:bsd-3)))
1176
1177 (define-public python-can
1178 (package
1179 (name "python-can")
1180 (version "3.3.2")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "python-can" version))
1185 (sha256
1186 (base32
1187 "0bkbxi45sckzir6s0j3h01pkfn4vkz3ymih2zjp7zw77wz0vbvsz"))))
1188 (build-system python-build-system)
1189 (arguments
1190 `(#:phases (modify-phases %standard-phases
1191 (add-after 'unpack 'fix-broken-tests
1192 ;; The tests try to run two scripts it expects should be
1193 ;; in PATH, but they aren't at this time (see:
1194 ;; https://github.com/hardbyte/python-can/issues/805).
1195 (lambda _
1196 (substitute* "test/test_scripts.py"
1197 (("\"can_logger\\.py --help\"") "")
1198 (("\"can_player\\.py --help\"") ""))
1199 #t)))))
1200 (propagated-inputs
1201 `(("python-aenum" ,python-aenum)
1202 ("python-wrapt" ,python-wrapt)))
1203 (native-inputs
1204 `(("python-codecov" ,python-codecov)
1205 ("python-future" ,python-future)
1206 ("python-hypothesis" ,python-hypothesis)
1207 ("python-mock" ,python-mock)
1208 ("python-pyserial" ,python-pyserial)
1209 ("python-pytest" ,python-pytest)
1210 ("python-pytest-cov" ,python-pytest-cov)
1211 ("python-pytest-runner" ,python-pytest-runner)
1212 ("python-pytest-timeout" ,python-pytest-timeout)))
1213 (home-page "https://github.com/hardbyte/python-can")
1214 (synopsis "Controller Area Network (CAN) interface module for Python")
1215 (description "This package defines the @code{can} module, which provides
1216 controller area network (CAN) support for Python developers; providing common
1217 abstractions to different hardware devices, and a suite of utilities for
1218 sending and receiving messages on a CAN bus.")
1219 (license license:gpl3+)))
1220
1221 (define-public python-diskcache
1222 (package
1223 (name "python-diskcache")
1224 (version "4.1.0")
1225 (source
1226 (origin
1227 (method url-fetch)
1228 (uri (pypi-uri "diskcache" version))
1229 (sha256
1230 (base32
1231 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1232 (build-system python-build-system)
1233 (arguments
1234 `(#:tests? #f)) ;test suite not included in the release
1235 (home-page "http://www.grantjenks.com/docs/diskcache/")
1236 (synopsis "Disk and file backed cache library")
1237 (description "DiskCache is a disk and file backed persistent cache.")
1238 (license license:asl2.0)))
1239
1240 (define-public python-bitstruct
1241 (package
1242 (name "python-bitstruct")
1243 (version "8.9.0")
1244 (source
1245 (origin
1246 (method url-fetch)
1247 (uri (pypi-uri "bitstruct" version))
1248 (sha256
1249 (base32
1250 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1251 (build-system python-build-system)
1252 (home-page "https://github.com/eerimoq/bitstruct")
1253 (synopsis "Python values to and C bit field structs converter")
1254 (description "This module performs conversions between Python values and C
1255 bit field structs represented as Python byte strings. It is intended to have
1256 a similar interface as the @code{struct} module from Python, but working on
1257 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1258 (license license:expat)))
1259
1260 (define-public python-cantools
1261 (package
1262 (name "python-cantools")
1263 (version "33.1.1")
1264 (source
1265 (origin
1266 ;; We take the sources from the Git repository as the documentation is
1267 ;; not included with the PyPI archive.
1268 (method git-fetch)
1269 (uri (git-reference
1270 (url "https://github.com/eerimoq/cantools.git")
1271 (commit version)))
1272 (file-name (git-file-name name version))
1273 (sha256
1274 (base32
1275 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1276 (build-system python-build-system)
1277 (arguments
1278 `(#:phases
1279 (modify-phases %standard-phases
1280 (add-after 'build 'build-doc
1281 (lambda _
1282 ;; See: https://github.com/eerimoq/cantools/issues/190.
1283 (substitute* "README.rst"
1284 (("https://github.com/eerimoq/cantools/raw/master\
1285 /docs/monitor.png")
1286 "monitor.png"))
1287 (with-directory-excursion "docs"
1288 (invoke "make" "man" "info"))))
1289 (add-after 'install 'install-doc
1290 (lambda* (#:key outputs #:allow-other-keys)
1291 (let* ((out (assoc-ref outputs "out"))
1292 (info (string-append out "/share/info"))
1293 (man1 (string-append out "/share/man/man1")))
1294 (format #t "CWD: ~s~%" (getcwd))
1295 (install-file "docs/_build/texinfo/cantools.info" info)
1296 (install-file "docs/_build/man/cantools.1" man1)
1297 #t))))))
1298 (native-inputs
1299 `(("sphinx" ,python-sphinx)
1300 ("texinfo" ,texinfo)))
1301 (propagated-inputs
1302 `(("python-bitstruct" ,python-bitstruct)
1303 ("python-can" ,python-can)
1304 ("python-diskcache" ,python-diskcache)
1305 ("python-textparser" ,python-textparser)))
1306 (home-page "https://github.com/eerimoq/cantools")
1307 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1308 (description "This package includes Controller Area Network (CAN) related
1309 tools that can be used to:
1310 @itemize
1311 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1312 @item encode and decode CAN messages
1313 @item multiplex simple and extended signals
1314 @item diagnose DID encoding and decoding
1315 @item dump the CAN decoder output
1316 @item test CAN nodes
1317 @item generate C source code
1318 @item monitor the CAN bus
1319 @end itemize")
1320 (license license:expat)))
1321
1322 (define-public python-capturer
1323 (package
1324 (name "python-capturer")
1325 (version "2.4")
1326 (source
1327 (origin
1328 (method url-fetch)
1329 (uri (pypi-uri "capturer" version))
1330 (sha256
1331 (base32
1332 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1333 (build-system python-build-system)
1334 (arguments
1335 `(#:tests? #f))
1336 (propagated-inputs
1337 `(("python-humanfriendly" ,python-humanfriendly)))
1338 (home-page "https://capturer.readthedocs.io")
1339 (synopsis "Capture stdout and stderr streams of the current process")
1340 (description
1341 "The capturer package makes it easy to capture the stdout and stderr
1342 streams of the current process and subprocesses. Output can be relayed
1343 to the terminal in real time but is also available to the Python program
1344 for additional processing.")
1345 (license license:expat)))
1346
1347 (define-public python2-capturer
1348 (package-with-python2 python-capturer))
1349
1350 (define-public python-case
1351 (package
1352 (name "python-case")
1353 (version "1.5.3")
1354 (source
1355 (origin
1356 (method url-fetch)
1357 (uri (pypi-uri "case" version))
1358 (sha256
1359 (base32
1360 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1361 (build-system python-build-system)
1362 (propagated-inputs
1363 `(("python-mock" ,python-mock)
1364 ("python-nose" ,python-nose)
1365 ("python-six" ,python-six)
1366 ("python-unittest2" ,python-unittest2)))
1367 (native-inputs
1368 `(("python-coverage" ,python-coverage)))
1369 (home-page "https://github.com/celery/case")
1370 (synopsis "Unittest utilities and convenience methods")
1371 (description
1372 "The @code{case} package provides utilities on top of unittest, including
1373 some helpful Python 2 compatibility convenience methods.")
1374 (license license:bsd-3)))
1375
1376 (define-public python-verboselogs
1377 (package
1378 (name "python-verboselogs")
1379 (version "1.7")
1380 (source
1381 (origin
1382 (method url-fetch)
1383 (uri (pypi-uri "verboselogs" version))
1384 (sha256
1385 (base32
1386 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1387 (build-system python-build-system)
1388 (arguments
1389 `(#:phases
1390 (modify-phases %standard-phases
1391 (replace 'check
1392 (lambda _
1393 ;; Do not run pylint plugin test, as astroid is an old
1394 ;; unsupported version.
1395 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1396 "verboselogs/tests.py"))))))
1397 (native-inputs
1398 `(("python-mock" ,python-mock)
1399 ("python-pytest" ,python-pytest)))
1400 (home-page "https://verboselogs.readthedocs.io")
1401 (synopsis "Verbose logging level for Python's logging module")
1402 (description
1403 "The @code{verboselogs} package extends Python's @code{logging} module to
1404 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1405 (license license:expat)))
1406
1407 (define-public python2-verboselogs
1408 (package-with-python2 python-verboselogs))
1409
1410 (define-public python-coloredlogs
1411 (package
1412 (name "python-coloredlogs")
1413 (version "10.0")
1414 (source
1415 (origin
1416 (method url-fetch)
1417 (uri (pypi-uri "coloredlogs" version))
1418 (sha256
1419 (base32
1420 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1421 (build-system python-build-system)
1422 (arguments
1423 `(;Tests require some updated modules
1424 #:tests? #f))
1425 (propagated-inputs
1426 `(("python-capturer" ,python-capturer)))
1427 (home-page "https://coloredlogs.readthedocs.io")
1428 (synopsis "Colored stream handler for Python's logging module")
1429 (description
1430 "The @code{coloredlogs} package enables colored terminal output for
1431 Python's logging module. The @code{ColoredFormatter} class inherits from
1432 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1433 messages in color.")
1434 (license license:expat)))
1435
1436 (define-public python2-coloredlogs
1437 (package-with-python2 python-coloredlogs))
1438
1439 (define-public python-editorconfig
1440 (package
1441 (name "python-editorconfig")
1442 (version "0.12.2")
1443 (source
1444 (origin
1445 (method url-fetch)
1446 (uri (pypi-uri "EditorConfig" version))
1447 (sha256
1448 (base32
1449 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1450 (build-system python-build-system)
1451 (home-page "https://editorconfig.org/")
1452 (synopsis "EditorConfig bindings for python")
1453 (description "The EditorConfig project consists of a file format for
1454 defining coding styles and a collection of text editor plugins that enable
1455 editors to read the file format and adhere to defined styles. EditorConfig
1456 files are easily readable and they work nicely with version control systems.")
1457 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1458 (license (list license:bsd-2 license:psfl))))
1459
1460 (define-public python-et-xmlfile
1461 (package
1462 (name "python-et-xmlfile")
1463 (version "1.0.1")
1464 (source
1465 (origin
1466 (method url-fetch)
1467 (uri (pypi-uri "et_xmlfile" version))
1468 (sha256
1469 (base32
1470 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1471 (build-system python-build-system)
1472 (arguments
1473 `(#:phases (modify-phases %standard-phases
1474 (replace 'check
1475 (lambda _
1476 (invoke "pytest"))))))
1477 (native-inputs
1478 `(("python-pytest" ,python-pytest)
1479 ("python-lxml" ,python-lxml))) ;used for the tests
1480 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1481 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1482 (description "This Python library is based upon the @code{xmlfile} module
1483 from @code{lxml}. It aims to provide a low memory, compatible implementation
1484 of @code{xmlfile}.")
1485 (license license:expat)))
1486
1487 (define-public python2-et-xmlfile
1488 (package-with-python2 python-et-xmlfile))
1489
1490 (define-public python-openpyxl
1491 (package
1492 (name "python-openpyxl")
1493 (version "2.6.2")
1494 (source
1495 (origin
1496 ;; We use the upstream repository, as the tests are not included in the
1497 ;; PyPI releases.
1498 (method hg-fetch)
1499 (uri (hg-reference
1500 (url "https://bitbucket.org/openpyxl/openpyxl")
1501 (changeset version)))
1502 (file-name (string-append name "-" version "-checkout"))
1503 (sha256
1504 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1505 (build-system python-build-system)
1506 (arguments
1507 `(#:phases (modify-phases %standard-phases
1508 (replace 'check
1509 (lambda _
1510 (invoke "pytest"))))))
1511 (native-inputs
1512 ;; For the test suite.
1513 `(("python-lxml" ,python-lxml)
1514 ("python-pillow" ,python-pillow)
1515 ("python-pytest" ,python-pytest)))
1516 (propagated-inputs
1517 `(("python-et-xmlfile" ,python-et-xmlfile)
1518 ("python-jdcal" ,python-jdcal)))
1519 (home-page "https://openpyxl.readthedocs.io")
1520 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1521 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1522 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1523 standard.")
1524 (license license:expat)))
1525
1526 (define-public python-eventlet
1527 (package
1528 (name "python-eventlet")
1529 (version "0.25.1")
1530 (source
1531 (origin
1532 (method url-fetch)
1533 (uri (pypi-uri "eventlet" version))
1534 (sha256
1535 (base32
1536 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1537 (build-system python-build-system)
1538 (propagated-inputs
1539 `(("python-greenlet" ,python-greenlet)))
1540 (arguments
1541 ;; TODO: Requires unpackaged 'enum-compat'.
1542 '(#:tests? #f))
1543 (home-page "https://eventlet.net")
1544 (synopsis "Concurrent networking library for Python")
1545 (description
1546 "Eventlet is a concurrent networking library for Python that
1547 allows you to change how you run your code, not how you write it.
1548 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1549 Coroutines ensure that the developer uses a blocking style of programming
1550 that is similar to threading, but provide the benefits of non-blocking I/O.
1551 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1552 from the Python interpreter, or as a small part of a larger application.")
1553 (license license:expat)))
1554
1555 (define-public python2-eventlet
1556 (let ((base (package-with-python2
1557 (strip-python2-variant python-eventlet))))
1558 (package (inherit base)
1559 (propagated-inputs
1560 `(("python2-enum34" ,python2-enum34)
1561 ,@(package-propagated-inputs base))))))
1562
1563 (define-public python-six
1564 (package
1565 (name "python-six")
1566 (version "1.12.0")
1567 (source
1568 (origin
1569 (method url-fetch)
1570 (uri (pypi-uri "six" version))
1571 (sha256
1572 (base32
1573 "0wxs1q74v07ssjywbbm7x6h5v9qx209ld2yfsif4060sxi0h2sni"))))
1574 (build-system python-build-system)
1575 (arguments
1576 `(#:phases
1577 (modify-phases %standard-phases
1578 (replace 'check
1579 (lambda _
1580 (invoke "py.test" "-v"))))))
1581 (native-inputs
1582 `(("python-py" ,python-py)
1583 ("python-pytest" ,python-pytest-bootstrap)))
1584 (home-page "https://pypi.org/project/six/")
1585 (synopsis "Python 2 and 3 compatibility utilities")
1586 (description
1587 "Six is a Python 2 and 3 compatibility library. It provides utility
1588 functions for smoothing over the differences between the Python versions with
1589 the goal of writing Python code that is compatible on both Python versions.
1590 Six supports every Python version since 2.5. It is contained in only one
1591 Python file, so it can be easily copied into your project.")
1592 (license license:x11)))
1593
1594 (define-public python2-six
1595 (package-with-python2 python-six))
1596
1597 (define-public python-six-bootstrap
1598 (package
1599 (inherit python-six)
1600 (name "python-six-bootstrap")
1601 (native-inputs `())
1602 (arguments `(#:tests? #f))))
1603
1604 (define-public python2-six-bootstrap
1605 (package-with-python2 python-six-bootstrap))
1606
1607 (define-public python-schedule
1608 (package
1609 (name "python-schedule")
1610 (version "0.4.3")
1611 (source
1612 (origin
1613 (method url-fetch)
1614 (uri (pypi-uri "schedule" version))
1615 (sha256
1616 (base32
1617 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1618 (build-system python-build-system)
1619 (native-inputs
1620 `(("python-pytest" ,python-pytest)
1621 ("python-mock" ,python-mock)))
1622 (home-page "https://github.com/dbader/schedule")
1623 (synopsis "Schedule periodic function calls in Python")
1624 (description
1625 "Schedule is an in-process scheduler for periodic jobs that uses the
1626 builder pattern for configuration. Schedule lets you run Python functions (or
1627 any other callable) periodically at pre-determined intervals using a simple,
1628 human-friendly syntax.")
1629 (license license:expat)))
1630
1631 (define-public python2-schedule
1632 (package-with-python2 python-schedule))
1633
1634 (define-public python2-mechanize
1635 (package
1636 (name "python2-mechanize")
1637 (version "0.2.5")
1638 (source
1639 (origin
1640 (method url-fetch)
1641 (uri (pypi-uri "mechanize" version))
1642 (sha256
1643 (base32
1644 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1645 (build-system python-build-system)
1646 (arguments
1647 `(#:python ,python-2 ; apparently incompatible with Python 3
1648 #:tests? #f))
1649 ;; test fails with message
1650 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1651 ;; (python-3.3.2) or
1652 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1653 ;; (python-2.7.5).
1654 ;; The source code is from March 2011 and probably not up-to-date
1655 ;; with respect to python unit tests.
1656 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1657 (synopsis
1658 "Stateful programmatic web browsing in Python")
1659 (description
1660 "Mechanize implements stateful programmatic web browsing in Python,
1661 after Andy Lester’s Perl module WWW::Mechanize.")
1662 (license (license:non-copyleft
1663 "file://COPYING"
1664 "See COPYING in the distribution."))))
1665
1666
1667 (define-public python-simplejson
1668 (package
1669 (name "python-simplejson")
1670 (version "3.14.0")
1671 (source
1672 (origin
1673 (method url-fetch)
1674 (uri (pypi-uri "simplejson" version))
1675 (sha256
1676 (base32
1677 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1678 (build-system python-build-system)
1679 (home-page "http://simplejson.readthedocs.org/en/latest/")
1680 (synopsis
1681 "Json library for Python")
1682 (description
1683 "JSON (JavaScript Object Notation) is a subset of JavaScript
1684 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1685 format.
1686
1687 Simplejson exposes an API familiar to users of the standard library marshal
1688 and pickle modules. It is the externally maintained version of the json
1689 library contained in Python 2.6, but maintains compatibility with Python 2.5
1690 and (currently) has significant performance advantages, even without using
1691 the optional C extension for speedups. Simplejson is also supported on
1692 Python 3.3+.")
1693 (license license:x11)))
1694
1695 (define-public python2-simplejson
1696 (package-with-python2 python-simplejson))
1697
1698
1699 (define-public python-pyicu
1700 (package
1701 (name "python-pyicu")
1702 (version "2.3.1")
1703 (source
1704 (origin
1705 (method url-fetch)
1706 (uri (pypi-uri "PyICU" version))
1707 (sha256
1708 (base32
1709 "1x4w8m7ifki9z2a187pgjr33z6z0rp2fii9b73djak1vhm9v9cnx"))))
1710 (build-system python-build-system)
1711 (inputs
1712 `(("icu4c" ,icu4c)))
1713 (native-inputs
1714 `(("python-pytest" ,python-pytest)
1715 ("python-six" ,python-six)))
1716 (home-page "https://github.com/ovalhub/pyicu")
1717 (synopsis "Python extension wrapping the ICU C++ API")
1718 (description
1719 "PyICU is a python extension wrapping the ICU C++ API.")
1720 (properties `((python2-variant . ,(delay python2-pyicu))))
1721 (license license:x11)))
1722
1723 (define-public python2-pyicu
1724 (let ((base (package-with-python2
1725 (strip-python2-variant python-pyicu))))
1726 (package
1727 (inherit base)
1728 (arguments
1729 `(,@(package-arguments base)
1730 #:phases
1731 (modify-phases %standard-phases
1732 (add-before 'check 'delete-failing-test
1733 (λ _
1734 ;; XXX: This fails due to Unicode issues unique to Python 2,
1735 ;; it seems: <https://github.com/ovalhub/pyicu/issues/61>.
1736 (delete-file "test/test_Script.py")
1737 #t))))))))
1738
1739 (define-public python2-dogtail
1740 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1741 ;; spaces in indentation" with Python 3.
1742 (package
1743 (name "python2-dogtail")
1744 (version "0.9.9")
1745 (source (origin
1746 (method url-fetch)
1747 (uri (pypi-uri "dogtail" version))
1748 (sha256
1749 (base32
1750 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1751 (build-system python-build-system)
1752 (arguments `(#:python ,python-2
1753 #:tests? #f)) ; invalid command "test"
1754 ;; Currently no offical homepage.
1755 (home-page "https://pypi.org/project/dogtail/")
1756 (synopsis "GUI test tool and automation framework written in Python")
1757 (description
1758 "Dogtail is a GUI test tool and automation framework written in Python.
1759 It uses Accessibility (a11y) technologies to communicate with desktop
1760 applications. dogtail scripts are written in Python and executed like any
1761 other Python program.")
1762 (license license:gpl2+)))
1763
1764 (define-public python-empy
1765 (package
1766 (name "python-empy")
1767 (version "3.3.3")
1768 (source (origin
1769 (method url-fetch)
1770 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1771 version ".tar.gz"))
1772 (sha256
1773 (base32
1774 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1775 (build-system python-build-system)
1776 (arguments
1777 `(#:tests? #f)) ; python2 only
1778 (home-page "http://www.alcyone.com/software/empy/")
1779 (synopsis "Templating system for Python")
1780 (description
1781 "EmPy is a system for embedding Python expressions and statements in
1782 template text; it takes an EmPy source file, processes it, and produces
1783 output. This is accomplished via expansions, which are special signals to the
1784 EmPy system and are set off by a special prefix (by default the at sign, @@).
1785 EmPy can expand arbitrary Python expressions and statements in this way, as
1786 well as a variety of special forms. Textual data not explicitly delimited in
1787 this way is sent unaffected to the output, allowing Python to be used in
1788 effect as a markup language. Also supported are callbacks via hooks,
1789 recording and playback via diversions, and dynamic, chainable filters. The
1790 system is highly configurable via command line options and embedded
1791 commands.")
1792 (license license:lgpl2.1+)))
1793
1794 (define-public python2-empy
1795 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1796 (package
1797 (inherit base)
1798 (arguments `(,@(package-arguments base)
1799 #:tests? #t)))))
1800
1801 (define-public python2-element-tree
1802 (package
1803 (name "python2-element-tree")
1804 (version "1.2.6")
1805 (source (origin
1806 (method url-fetch)
1807 (uri (string-append
1808 "http://effbot.org/media/downloads/elementtree-"
1809 version "-20050316.tar.gz"))
1810 (sha256
1811 (base32
1812 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1813 (build-system python-build-system)
1814 (arguments
1815 `(#:python ,python-2 ; seems to be part of Python 3
1816 #:tests? #f)) ; no 'test' sub-command
1817 (synopsis "Toolkit for XML processing in Python")
1818 (description
1819 "ElementTree is a Python library supporting lightweight XML processing.")
1820 (home-page "https://effbot.org/zone/element-index.htm")
1821 (license (license:x11-style
1822 "http://docs.python.org/2/license.html"
1823 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1824
1825 (define-public python2-pybugz
1826 (package
1827 (name "python2-pybugz")
1828 (version "0.6.11")
1829 (source (origin
1830 (method url-fetch)
1831 (uri (string-append
1832 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1833 version ".tar.gz"))
1834 (sha256
1835 (base32
1836 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1837 (patches (search-patches "pybugz-stty.patch"
1838 "pybugz-encode-error.patch"))))
1839 (build-system python-build-system)
1840 (arguments
1841 `(#:python ,python-2 ; SyntaxError with Python 3
1842 #:tests? #f)) ; no 'test' sub-command
1843 (propagated-inputs
1844 `(("element-tree" ,python2-element-tree)))
1845 (synopsis "Python and command-line interface to Bugzilla")
1846 (description
1847 "PyBugz is a Python library and command-line tool to query the Bugzilla
1848 bug tracking system. It is meant as an aid to speed up interaction with the
1849 bug tracker.")
1850 (home-page "http://www.liquidx.net/pybugz/")
1851 (license license:gpl2)))
1852
1853 (define-public python2-enum
1854 (package
1855 (name "python2-enum")
1856 (version "0.4.6")
1857 (source (origin
1858 (method url-fetch)
1859 (uri (pypi-uri "enum" version))
1860 (sha256
1861 (base32
1862 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1863 (build-system python-build-system)
1864 (arguments
1865 `(#:python ,python-2))
1866 (home-page "https://pypi.org/project/enum/")
1867 (synopsis "Robust enumerated type support in Python")
1868 (description
1869 "This provides a module for robust enumerations in Python. It has
1870 been superseded by the Python standard library and is provided only for
1871 compatibility.")
1872 ;; Choice of either license.
1873 (license (list license:gpl3+ license:psfl))))
1874
1875 (define-public python-enum34
1876 (package
1877 (name "python-enum34")
1878 (version "1.1.6")
1879 (source
1880 (origin
1881 (method url-fetch)
1882 (uri (pypi-uri "enum34" version))
1883 (sha256
1884 (base32
1885 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1886 (build-system python-build-system)
1887 (home-page "https://pypi.org/project/enum34/")
1888 (synopsis "Backported Python 3.4 Enum")
1889 (description
1890 "Enum34 is the new Python stdlib enum module available in Python 3.4
1891 backported for previous versions of Python from 2.4 to 3.3.")
1892 (license license:bsd-3)))
1893
1894 (define-public python2-enum34
1895 (package-with-python2 python-enum34))
1896
1897 (define-public python-parse-type
1898 (package
1899 (name "python-parse-type")
1900 (version "0.4.2")
1901 (source
1902 (origin
1903 (method url-fetch)
1904 (uri (pypi-uri "parse_type" version))
1905 (sha256
1906 (base32
1907 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1908 (build-system python-build-system)
1909 (propagated-inputs
1910 `(("python-six" ,python-six)
1911 ("python-parse" ,python-parse)))
1912 (native-inputs
1913 `(("python-pytest" ,python-pytest)
1914 ("python-pytest-runner" ,python-pytest-runner)))
1915 (home-page "https://github.com/jenisys/parse_type")
1916 (synopsis "Extended parse module")
1917 (description
1918 "Parse_type extends the python parse module.")
1919 (properties
1920 `((python2-variant . ,(delay python2-parse-type))))
1921 (license license:bsd-3)))
1922
1923 (define-public python2-parse-type
1924 (let ((base (package-with-python2
1925 (strip-python2-variant python-parse-type))))
1926 (package (inherit base)
1927 (propagated-inputs
1928 `(("python2-enum34" ,python2-enum34)
1929 ,@(package-propagated-inputs base))))))
1930
1931 (define-public python-parse
1932 (package
1933 (name "python-parse")
1934 (version "1.8.4")
1935 (source
1936 (origin
1937 (method url-fetch)
1938 (uri (pypi-uri "parse" version))
1939 (sha256
1940 (base32
1941 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1942 (build-system python-build-system)
1943 (arguments
1944 `(#:phases
1945 (modify-phases %standard-phases
1946 (replace 'check
1947 (lambda _ (invoke "python" "test_parse.py"))))))
1948 (home-page "https://github.com/r1chardj0n3s/parse")
1949 (synopsis "Parse strings")
1950 (description
1951 "Parse strings using a specification based on the Python @code{format()}
1952 syntax.")
1953 (license license:x11)))
1954
1955 (define-public python-polib
1956 (package
1957 (name "python-polib")
1958 (version "1.0.8")
1959 (source (origin
1960 (method url-fetch)
1961 (uri (pypi-uri "polib" version))
1962 (sha256
1963 (base32
1964 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1965 (build-system python-build-system)
1966 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1967 (synopsis "Manipulate, create and modify gettext files")
1968 (description "Polib can manipulate any gettext format (po, pot and mo)
1969 files. It can be used to create po files from scratch or to modify
1970 existing ones.")
1971 (license license:expat)))
1972
1973 (define-public python2-polib
1974 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1975 (package
1976 (inherit base)
1977 (arguments `(,@(package-arguments base)
1978 ;; Tests don't work with python2.
1979 #:tests? #f)))))
1980
1981 (define-public python-poyo
1982 (package
1983 (name "python-poyo")
1984 (version "0.5.0")
1985 (source
1986 (origin
1987 (method url-fetch)
1988 (uri (pypi-uri "poyo" version))
1989 (sha256
1990 (base32
1991 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
1992 (build-system python-build-system)
1993 (home-page "https://github.com/hackebrot/poyo")
1994 (synopsis "Lightweight YAML Parser for Python")
1995 (description
1996 "This package provides a lightweight YAML Parser for Python. It supports
1997 only a chosen subset of the YAML format that is required to parse cookiecutter
1998 user configuration files. It does not have support for serializing into YAML
1999 and is not compatible with JSON.")
2000 (license license:expat)))
2001
2002 (define-public scons
2003 (package
2004 (name "scons")
2005 (version "3.0.4")
2006 (source (origin
2007 (method git-fetch)
2008 (uri (git-reference
2009 (url "https://github.com/SCons/scons.git")
2010 (commit version)))
2011 (file-name (git-file-name name version))
2012 (sha256
2013 (base32
2014 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2015 (build-system python-build-system)
2016 (arguments
2017 `(#:use-setuptools? #f ; still relies on distutils
2018 #:tests? #f ; no 'python setup.py test' command
2019 #:phases
2020 (modify-phases %standard-phases
2021 (add-before 'build 'bootstrap
2022 (lambda _
2023 (substitute* "src/engine/SCons/compat/__init__.py"
2024 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2025 "sys.modules[new] = __import__(old)"))
2026 (substitute* "src/engine/SCons/Platform/__init__.py"
2027 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2028 "mod = __import__(full_name)"))
2029 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2030 (chdir "build/scons")
2031 #t)))))
2032 (home-page "https://scons.org/")
2033 (synopsis "Software construction tool written in Python")
2034 (description
2035 "SCons is a software construction tool. Think of SCons as an improved,
2036 cross-platform substitute for the classic Make utility with integrated
2037 functionality similar to autoconf/automake and compiler caches such as ccache.
2038 In short, SCons is an easier, more reliable and faster way to build
2039 software.")
2040 (license license:x11)))
2041
2042 (define-public scons-python2
2043 (package
2044 (inherit (package-with-python2 scons))
2045 (name "scons-python2")))
2046
2047 (define-public python-extras
2048 (package
2049 (name "python-extras")
2050 (version "1.0.0")
2051 (source
2052 (origin
2053 (method url-fetch)
2054 (uri (pypi-uri "extras" version))
2055 (sha256
2056 (base32
2057 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2058 (build-system python-build-system)
2059 (arguments
2060 ;; FIXME: Circular dependency on testtools.
2061 '(#:tests? #f))
2062 (home-page "https://github.com/testing-cabal/extras")
2063 (synopsis "Useful extensions to the Python standard library")
2064 (description
2065 "Extras is a set of extensions to the Python standard library.")
2066 (license license:expat)))
2067
2068 (define-public python2-extras
2069 (package-with-python2 python-extras))
2070
2071 (define-public python-mimeparse
2072 (package
2073 (name "python-mimeparse")
2074 (version "1.6.0")
2075 (source
2076 (origin
2077 (method url-fetch)
2078 (uri (pypi-uri "python-mimeparse" version))
2079 (sha256
2080 (base32
2081 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2082 (build-system python-build-system)
2083 (arguments
2084 '(#:phases
2085 (modify-phases %standard-phases
2086 (replace 'check
2087 (lambda _
2088 (invoke "./mimeparse_test.py"))))))
2089 (home-page
2090 "https://github.com/dbtsai/python-mimeparse")
2091 (synopsis "Python library for parsing MIME types")
2092 (description
2093 "Mimeparse provides basic functions for parsing MIME type names and
2094 matching them against a list of media-ranges.")
2095 (license license:expat)))
2096
2097 (define-public python2-mimeparse
2098 (package-with-python2 python-mimeparse))
2099
2100 (define-public python-miniboa
2101 (package
2102 (name "python-miniboa")
2103 (version "1.0.7")
2104 (source
2105 (origin
2106 (method url-fetch)
2107 (uri (pypi-uri "miniboa" version))
2108 (sha256
2109 (base32
2110 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2111 (build-system python-build-system)
2112 (home-page "https://github.com/shmup/miniboa")
2113 (synopsis "Simple, single-threaded Telnet server")
2114 (description
2115 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2116 server.")
2117 (license license:asl2.0)))
2118
2119 (define-public python2-miniboa
2120 (package-with-python2 python-miniboa))
2121
2122 (define-public python-pafy
2123 (package
2124 (name "python-pafy")
2125 (version "0.5.3.1")
2126 (source
2127 (origin
2128 (method url-fetch)
2129 (uri (pypi-uri "pafy" version))
2130 (sha256
2131 (base32
2132 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2133 (build-system python-build-system)
2134 (arguments
2135 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2136 (propagated-inputs
2137 ;; Youtube-dl is a python package which is imported in the file
2138 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2139 `(("youtube-dl" ,youtube-dl)))
2140 (home-page "https://np1.github.io/pafy/")
2141 (synopsis "Retrieve YouTube content and metadata")
2142 (description
2143 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2144 (license license:lgpl3+)))
2145
2146 (define-public python2-funcsigs
2147 (package
2148 (name "python2-funcsigs")
2149 (version "1.0.2")
2150 (source (origin
2151 (method url-fetch)
2152 (uri (pypi-uri "funcsigs" version))
2153 (sha256
2154 (base32
2155 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2156 (build-system python-build-system)
2157 (arguments
2158 `(#:python ,python-2))
2159 (native-inputs
2160 `(("python2-unittest2" ,python2-unittest2)))
2161 (home-page "http://funcsigs.readthedocs.org")
2162 (synopsis "Python function signatures from PEP362")
2163 (description
2164 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2165 (license license:asl2.0)))
2166
2167 (define-public python2-funcsigs-bootstrap
2168 (package
2169 (inherit python2-funcsigs)
2170 (name "python2-funcsigs-bootstrap")
2171 (native-inputs `())
2172 (arguments
2173 `(#:tests? #f
2174 ,@(package-arguments python2-funcsigs)))))
2175
2176 (define-public python-py
2177 (package
2178 (name "python-py")
2179 (version "1.8.0")
2180 (source
2181 (origin
2182 (method url-fetch)
2183 (uri (pypi-uri "py" version))
2184 (sha256
2185 (base32
2186 "0lsy1gajva083pzc7csj1cvbmminb7b4l6a0prdzyb3fd829nqyw"))))
2187 (build-system python-build-system)
2188 (arguments
2189 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2190 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2191 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2192 ;; Is this module globally installed?"
2193 '(#:tests? #f))
2194 (native-inputs
2195 `(("python-setuptools-scm" ,python-setuptools-scm)))
2196 (home-page "https://github.com/pytest-dev/py")
2197 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2198 (description
2199 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2200 code introspection, and logging.")
2201 (license license:expat)))
2202
2203 (define-public python2-py
2204 (package-with-python2 python-py))
2205
2206 ;; Recent versions of python-fixtures and python-testrepository need
2207 ;; python-pbr for packaging, which itself needs these two packages for
2208 ;; testing.
2209 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2210 ;; same source, just without any test dependencies and with tests disabled.
2211 ;; python-pbr-minmal is then used to package python-fixtures and
2212 ;; python-testrepository.
2213 ;; Strictly speaking we currently could remove the test-requirements from the
2214 ;; normal python-pbr package (and save this package) since test are disabled
2215 ;; there anyway. But this may change in future.
2216 (define-public python-pbr-minimal
2217 (package
2218 (name "python-pbr-minimal")
2219 (version "3.0.1")
2220 (source
2221 (origin
2222 (method url-fetch)
2223 (uri (pypi-uri "pbr" version))
2224 (sha256
2225 (base32
2226 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2227 (build-system python-build-system)
2228 (arguments
2229 `(#:tests? #f))
2230 (home-page "https://docs.openstack.org/pbr/latest/")
2231 (synopsis "Minimal build of python-pbr used for bootstrapping")
2232 (description
2233 "Used only for bootstrapping python2-pbr, you should not need this.")
2234 (license license:asl2.0)))
2235
2236 (define-public python2-pbr-minimal
2237 (package-with-python2 python-pbr-minimal))
2238
2239 (define-public python-pbr
2240 (package
2241 (inherit python-pbr-minimal)
2242 (name "python-pbr")
2243 (arguments
2244 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2245 (propagated-inputs
2246 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2247 (native-inputs
2248 `(("python-fixtures" ,python-fixtures-bootstrap)
2249 ;; discover, coverage, hacking, subunit
2250 ("python-mock" ,python-mock)
2251 ("python-six" ,python-six)
2252 ("python-sphinx" ,python-sphinx)
2253 ("python-testrepository" ,python-testrepository-bootstrap)
2254 ("python-testresources" ,python-testresources-bootstrap)
2255 ("python-testscenarios" ,python-testscenarios-bootstrap)
2256 ("python-testtools" ,python-testtools-bootstrap)
2257 ("python-virtualenv" ,python-virtualenv)))
2258 (synopsis "Enhance the default behavior of Python’s setuptools")
2259 (description
2260 "Python Build Reasonableness (PBR) is a library that injects some useful
2261 and sensible default behaviors into your setuptools run. It will set
2262 versions, process requirements files and generate AUTHORS and ChangeLog file
2263 from git information.
2264 ")))
2265
2266 (define-public python2-pbr
2267 (package-with-python2 python-pbr))
2268
2269 (define-public python-pyrsistent
2270 (package
2271 (name "python-pyrsistent")
2272 (version "0.15.7")
2273 (home-page "https://github.com/tobgu/pyrsistent")
2274 (source (origin
2275 (method url-fetch)
2276 (uri (pypi-uri "pyrsistent" version))
2277 (sha256
2278 (base32
2279 "103j63g6lb5dfspph96zxjdpnq9h991kazd4f09ddgkpxpivbiyd"))))
2280 (build-system python-build-system)
2281 (native-inputs
2282 `(("python-hypothesis" ,python-hypothesis)
2283 ("python-pytest" ,python-pytest)
2284 ("python-pytest-runner" ,python-pytest-runner)))
2285 (propagated-inputs
2286 `(("python-six" ,python-six)))
2287 (synopsis "Persistent data structures for Python")
2288 (description
2289 "Pyrsistent is a number of persistent collections (by some referred to as
2290 functional data structures). Persistent in the sense that they are immutable.
2291
2292 All methods on a data structure that would normally mutate it instead return a
2293 new copy of the structure containing the requested updates. The original
2294 structure is left untouched.")
2295 (license license:expat)))
2296
2297 (define-public python2-pyrsistent
2298 (package-with-python2 python-pyrsistent))
2299
2300 (define-public python-exif-read
2301 (package
2302 (name "python-exif-read")
2303 (version "2.1.2")
2304 (source (origin
2305 (method url-fetch)
2306 (uri (pypi-uri "ExifRead" version))
2307 (sha256
2308 (base32
2309 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2310 (build-system python-build-system)
2311 (arguments `(#:tests? #f)) ; no tests
2312 (home-page "https://github.com/ianare/exif-py")
2313 (synopsis "Python library to extract EXIF data from image files")
2314 (description
2315 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2316 files.")
2317 (license license:bsd-3)))
2318
2319 (define-public python2-exif-read
2320 (package-with-python2 python-exif-read))
2321
2322 (define-public python-pyld
2323 (package
2324 (name "python-pyld")
2325 (version "1.0.5")
2326 (source (origin
2327 (method url-fetch)
2328 (uri (pypi-uri "PyLD" version))
2329 (sha256
2330 (base32
2331 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2332 (build-system python-build-system)
2333 (home-page "https://github.com/digitalbazaar/pyld")
2334 (synopsis "Python implementation of the JSON-LD specification")
2335 (description
2336 "PyLD is an implementation of the JSON-LD specification.")
2337 (license license:bsd-3)))
2338
2339 (define-public python2-pyld
2340 (package-with-python2 python-pyld))
2341
2342 (define-public python-click
2343 (package
2344 (name "python-click")
2345 (version "7.0")
2346 (source
2347 (origin
2348 (method url-fetch)
2349 (uri (pypi-uri "click" version))
2350 (sha256
2351 (base32
2352 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2353 (build-system python-build-system)
2354 (arguments
2355 `(#:phases
2356 (modify-phases %standard-phases
2357 (add-after 'unpack 'fix-paths
2358 (lambda* (#:key inputs #:allow-other-keys)
2359 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2360 "cross-libc" "libc"))))
2361 (substitute* "click/_unicodefun.py"
2362 (("'locale'")
2363 (string-append "'" glibc "/bin/locale'"))))
2364 #t))
2365 (replace 'check
2366 (lambda _
2367 (invoke "python" "-m" "pytest"))))))
2368 (native-inputs
2369 `(("python-pytest" ,python-pytest)))
2370 (home-page "https://palletsprojects.com/p/click/")
2371 (synopsis "Command line library for Python")
2372 (description
2373 "Click is a Python package for creating command line interfaces in a
2374 composable way with as little code as necessary. Its name stands for
2375 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2376 with sensible defaults out of the box.")
2377 (license license:bsd-3)))
2378
2379 (define-public python2-click
2380 (package-with-python2 python-click))
2381
2382 (define-public python-wheel
2383 (package
2384 (name "python-wheel")
2385 (version "0.33.6")
2386 (source
2387 (origin
2388 (method url-fetch)
2389 (uri (pypi-uri "wheel" version))
2390 (sha256
2391 (base32
2392 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2393 (build-system python-build-system)
2394 (arguments
2395 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2396 ;; fails to find the newly-built bdist_wheel library, even though it is
2397 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2398 '(#:tests? #f))
2399 (home-page "https://bitbucket.org/pypa/wheel/")
2400 (synopsis "Format for built Python packages")
2401 (description
2402 "A wheel is a ZIP-format archive with a specially formatted filename and
2403 the @code{.whl} extension. It is designed to contain all the files for a PEP
2404 376 compatible install in a way that is very close to the on-disk format. Many
2405 packages will be properly installed with only the @code{Unpack} step and the
2406 unpacked archive preserves enough information to @code{Spread} (copy data and
2407 scripts to their final locations) at any later time. Wheel files can be
2408 installed with a newer @code{pip} or with wheel's own command line utility.")
2409 (license license:expat)))
2410
2411 (define-public python2-wheel
2412 (package-with-python2 python-wheel))
2413
2414 (define-public python-vcversioner
2415 (package
2416 (name "python-vcversioner")
2417 (version "2.16.0.0")
2418 (source
2419 (origin
2420 (method url-fetch)
2421 (uri (pypi-uri "vcversioner" version))
2422 (sha256
2423 (base32
2424 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2425 (build-system python-build-system)
2426 (synopsis "Python library for version number discovery")
2427 (description "Vcversioner is a Python library that inspects tagging
2428 information in a variety of version control systems in order to discover
2429 version numbers.")
2430 (home-page "https://github.com/habnabit/vcversioner")
2431 (license license:isc)))
2432
2433 (define-public python2-vcversioner
2434 (package-with-python2 python-vcversioner))
2435
2436 (define-public python-jdcal
2437 (package
2438 (name "python-jdcal")
2439 (version "1.4")
2440 (source
2441 (origin
2442 (method url-fetch)
2443 (uri (pypi-uri "jdcal" version))
2444 (sha256
2445 (base32
2446 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2447 (build-system python-build-system)
2448 (arguments
2449 `(#:phases (modify-phases %standard-phases
2450 (replace 'check
2451 (lambda _
2452 (invoke "pytest"))))))
2453 (native-inputs
2454 `(("python-pytest" ,python-pytest)))
2455 (home-page "https://github.com/phn/jdcal")
2456 (synopsis "Functions to convert between Julian dates Gregorian dates")
2457 (description "This Python library provides functions for converting
2458 between Julian dates and Gregorian dates.")
2459 (license license:bsd-2)))
2460
2461 (define-public python2-jdcal
2462 (package-with-python2 python-jdcal))
2463
2464 (define-public python-jsondiff
2465 (package
2466 (name "python-jsondiff")
2467 (version "1.2.0")
2468 (source
2469 (origin
2470 (method url-fetch)
2471 (uri (pypi-uri "jsondiff" version))
2472 (sha256
2473 (base32
2474 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2475 (build-system python-build-system)
2476 (native-inputs
2477 `(("python-nose" ,python-nose)
2478 ("python-nose-random" ,python-nose-random)))
2479 (home-page
2480 "https://github.com/fzumstein/jsondiff")
2481 (synopsis "Compare JSON and JSON-like structures in Python")
2482 (description "@code{jsondiff} is a Python library which lets you
2483 compare, diff, and patch JSON and JSON-like structures in Python.")
2484 (license license:expat)))
2485
2486 (define-public python-jsonschema
2487 (package
2488 (name "python-jsonschema")
2489 (version "3.2.0")
2490 (source (origin
2491 (method url-fetch)
2492 (uri (pypi-uri "jsonschema" version))
2493 (sha256
2494 (base32
2495 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2496 (build-system python-build-system)
2497 (arguments
2498 '(#:phases
2499 (modify-phases %standard-phases
2500 (replace 'check
2501 (lambda* (#:key inputs outputs #:allow-other-keys)
2502 (add-installed-pythonpath inputs outputs)
2503 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2504 (invoke "trial" "jsonschema"))))))
2505 (native-inputs
2506 `(("python-setuptools_scm" ,python-setuptools-scm)
2507 ("python-twisted" ,python-twisted)))
2508 (propagated-inputs
2509 `(("python-attrs" ,python-attrs)
2510 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2511 ("python-pyrsistent" ,python-pyrsistent)
2512 ("python-six" ,python-six)))
2513 (home-page "https://github.com/Julian/jsonschema")
2514 (synopsis "Implementation of JSON Schema for Python")
2515 (description
2516 "Jsonschema is an implementation of JSON Schema for Python.")
2517 (license license:expat)
2518 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2519
2520 (define-public python2-jsonschema
2521 (let ((jsonschema (package-with-python2
2522 (strip-python2-variant python-jsonschema))))
2523 (package (inherit jsonschema)
2524 (propagated-inputs
2525 `(("python2-functools32" ,python2-functools32)
2526 ,@(package-propagated-inputs jsonschema))))))
2527
2528 (define-public python-schema
2529 (package
2530 (name "python-schema")
2531 (version "0.6.6")
2532 (source
2533 (origin
2534 (method url-fetch)
2535 (uri (pypi-uri "schema" version))
2536 (sha256
2537 (base32
2538 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2539 (build-system python-build-system)
2540 (native-inputs
2541 `(("python-pytest" ,python-pytest)))
2542 (home-page "https://github.com/keleshev/schema")
2543 (synopsis "Simple data validation library")
2544 (description
2545 "@code{python-schema} is a library for validating Python data
2546 structures, such as those obtained from config-files, forms, external
2547 services or command-line parsing, converted from JSON/YAML (or
2548 something else) to Python data-types.")
2549 (license license:psfl)))
2550
2551 (define-public python2-schema
2552 (package-with-python2 python-schema))
2553
2554 (define-public python-schema-0.5
2555 (package (inherit python-schema)
2556 (version "0.5.0")
2557 (source
2558 (origin
2559 (method url-fetch)
2560 (uri (pypi-uri "schema" version))
2561 (sha256
2562 (base32
2563 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2564
2565 (define-public python2-schema-0.5
2566 (package-with-python2 python-schema-0.5))
2567
2568 (define-public python-kitchen
2569 (package
2570 (name "python-kitchen")
2571 (version "1.2.5")
2572 (source
2573 (origin
2574 (method url-fetch)
2575 (uri (pypi-uri "kitchen" version))
2576 (sha256
2577 (base32
2578 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2579 (build-system python-build-system)
2580 (propagated-inputs
2581 `(("python-chardet" ,python-chardet)))
2582 (home-page "https://github.com/fedora-infra/kitchen")
2583 (synopsis "Python API for snippets")
2584 (description "@code{kitchen} module provides a python API for all sorts of
2585 little useful snippets of code that everybody ends up writing for their projects
2586 but never seem big enough to build an independent release. Use kitchen and stop
2587 cutting and pasting that code over and over.")
2588 (license (list license:lgpl2.1+
2589 ;; subprocess.py, test_subprocess.py,
2590 ;; kitchen/pycompat25/defaultdict.py:
2591 license:psfl))))
2592
2593 (define-public python2-kitchen
2594 (package-with-python2 python-kitchen))
2595
2596 (define-public python-unidecode
2597 (package
2598 (name "python-unidecode")
2599 (version "1.1.1")
2600 (source (origin
2601 (method url-fetch)
2602 (uri (pypi-uri "Unidecode" version))
2603 (sha256
2604 (base32
2605 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2606 (build-system python-build-system)
2607 (home-page "https://pypi.org/project/Unidecode/")
2608 (synopsis "ASCII transliterations of Unicode text")
2609 (description
2610 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2611 useful when integrating with legacy code that doesn't support Unicode, or for
2612 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2613 machine identifiers from human-readable Unicode strings that should still be
2614 somewhat intelligible.")
2615 (license license:gpl2+)))
2616
2617 (define-public python2-unidecode
2618 (package-with-python2 python-unidecode))
2619
2620 (define-public python-text-unidecode
2621 (package
2622 (name "python-text-unidecode")
2623 (version "1.3")
2624 (source (origin
2625 (method url-fetch)
2626 (uri (pypi-uri "text-unidecode" version))
2627 (sha256
2628 (base32
2629 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2630 (build-system python-build-system)
2631 (arguments
2632 '(#:phases (modify-phases %standard-phases
2633 (replace 'check
2634 (lambda _
2635 (setenv "PYTHONPATH"
2636 (string-append "./build/lib:"
2637 (getenv "PYTHONPATH")))
2638 (invoke "pytest" "-vv"))))))
2639 (native-inputs
2640 `(("python-pytest" ,python-pytest)))
2641 (home-page "https://github.com/kmike/text-unidecode/")
2642 (synopsis "Decode Unicode data")
2643 (description
2644 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2645 Perl library. It can create ASCII representations of Unicode data. In general
2646 users should prefer the @code{python-unidecode} package which offers better
2647 memory usage and transliteration quality.")
2648 ;; The user can choose either license.
2649 (license (list license:clarified-artistic license:gpl2+))))
2650
2651 (define-public python2-text-unidecode
2652 (package-with-python2 python-text-unidecode))
2653
2654 (define-public python-pyjwt
2655 (package
2656 (name "python-pyjwt")
2657 (version "1.7.1")
2658 (source
2659 (origin
2660 (method url-fetch)
2661 (uri (pypi-uri "PyJWT" version))
2662 (sha256
2663 (base32
2664 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2665 (modules '((guix build utils)))
2666 (snippet
2667 '(begin
2668 (for-each delete-file-recursively
2669 (find-files "." "\\.pyc$"))
2670 #t))))
2671 (build-system python-build-system)
2672 (native-inputs
2673 `(("python-pytest" ,python-pytest)
2674 ("python-pytest-cov" ,python-pytest-cov)
2675 ("python-pytest-runner" ,python-pytest-runner)))
2676 (home-page "https://github.com/progrium/pyjwt")
2677 (synopsis "JSON Web Token implementation in Python")
2678 (description
2679 "PyJWT is a JSON Web Token implementation written in Python.")
2680 (license license:expat)))
2681
2682 (define-public python2-pyjwt
2683 (package-with-python2 python-pyjwt))
2684
2685 (define-public python-pykka
2686 (package
2687 (name "python-pykka")
2688 (version "1.2.1")
2689 (source
2690 (origin
2691 (method url-fetch)
2692 (uri (pypi-uri "Pykka" version))
2693 (sha256
2694 (base32
2695 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2696 (build-system python-build-system)
2697 (native-inputs
2698 `(("python-mock" ,python-mock)
2699 ("python-nose" ,python-nose)
2700 ("python-gevent" ,python-gevent)
2701 ("python-eventlet" ,python-eventlet)))
2702 (home-page "https://www.pykka.org/")
2703 (synopsis "Pykka is a Python implementation of the actor model")
2704 (description
2705 "Pykka is a Python implementation of the actor model.
2706 The actor model introduces some simple rules to control the sharing
2707 of state and cooperation between execution units, which makes it
2708 easier to build concurrent applications.")
2709 (license license:asl2.0)))
2710
2711 (define-public python2-pykka
2712 (package-with-python2 python-pykka))
2713
2714 (define-public python-pymsgbox
2715 (package
2716 (name "python-pymsgbox")
2717 (version "1.0.6")
2718 (source
2719 (origin
2720 (method git-fetch)
2721 (uri (git-reference
2722 ;; LICENSE.txt is not present on pypi
2723 (url "https://github.com/asweigart/PyMsgBox")
2724 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2725 (file-name (git-file-name name version))
2726 (sha256
2727 (base32
2728 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2729 (arguments
2730 ;; Circular dependency to run tests:
2731 ;; Tests need pyautogui, which depends on pymsgbox.
2732 '(#:tests? #f))
2733 (build-system python-build-system)
2734 (home-page "https://github.com/asweigart/PyMsgBox")
2735 (synopsis "Python module for JavaScript-like message boxes")
2736 (description
2737 "PyMsgBox is a simple, cross-platform, pure Python module for
2738 JavaScript-like message boxes. Types of dialog boxes include:
2739 @enumerate
2740 @item alert
2741 @item confirm
2742 @item prompt
2743 @item password
2744 @end enumerate
2745 ")
2746 (license license:bsd-3)))
2747
2748 (define-public python-pympler
2749 (package
2750 (name "python-pympler")
2751 (home-page "https://pythonhosted.org/Pympler/")
2752 (version "0.8")
2753 (source (origin
2754 (method url-fetch)
2755 (uri (pypi-uri "Pympler" version))
2756 (sha256
2757 (base32
2758 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2759 (build-system python-build-system)
2760 (arguments
2761 `(#:phases (modify-phases %standard-phases
2762 (delete 'check)
2763 (add-after 'install 'check
2764 (lambda* (#:key inputs outputs #:allow-other-keys)
2765 (add-installed-pythonpath inputs outputs)
2766 (invoke "python" "setup.py" "test"))))))
2767 (synopsis "Measure, monitor and analyze memory behavior")
2768 (description
2769 "Pympler is a development tool to measure, monitor and analyze
2770 the memory behavior of Python objects in a running Python application.
2771
2772 By pympling a Python application, detailed insight in the size and the
2773 lifetime of Python objects can be obtained. Undesirable or unexpected
2774 runtime behavior like memory bloat and other @samp{pymples} can easily
2775 be identified.
2776
2777 A web profiling frontend exposes process statistics, garbage
2778 visualisation and class tracker statistics.")
2779 (license license:asl2.0)))
2780
2781 (define-public python2-pympler
2782 (package-with-python2 python-pympler))
2783
2784 (define-public python-itsdangerous
2785 (package
2786 (name "python-itsdangerous")
2787 (version "1.1.0")
2788 (source
2789 (origin
2790 (method url-fetch)
2791 (uri (pypi-uri "itsdangerous" version))
2792 (sha256
2793 (base32
2794 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2795 (build-system python-build-system)
2796 (home-page "https://palletsprojects.com/p/itsdangerous/")
2797 (synopsis "Python library for passing data to/from untrusted environments")
2798 (description
2799 "Itsdangerous provides various helpers to pass trusted data to untrusted
2800 environments and back.")
2801 (license license:bsd-3)))
2802
2803 (define-public python2-itsdangerous
2804 (package-with-python2 python-itsdangerous))
2805
2806 (define-public python-pyyaml
2807 (package
2808 (name "python-pyyaml")
2809 (version "5.3.1")
2810 (source
2811 (origin
2812 (method url-fetch)
2813 (uri (pypi-uri "PyYAML" version))
2814 (sha256
2815 (base32
2816 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2817 (build-system python-build-system)
2818 (inputs
2819 `(("libyaml" ,libyaml)))
2820 (home-page "https://pyyaml.org")
2821 (synopsis "YAML parser and emitter for Python")
2822 (description
2823 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2824 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2825 API, and sensible error messages. PyYAML supports standard YAML tags and
2826 provides Python-specific tags that represent an arbitrary Python object.")
2827 (license license:expat)))
2828
2829 (define-public python2-pyyaml
2830 (package-with-python2 python-pyyaml))
2831
2832 (define-public python-vine
2833 (package
2834 (name "python-vine")
2835 (version "1.1.4")
2836 (source
2837 (origin
2838 (method url-fetch)
2839 (uri (pypi-uri "vine" version))
2840 (sha256
2841 (base32
2842 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2843 (build-system python-build-system)
2844 (native-inputs
2845 `(("python-pytest" ,python-pytest)
2846 ("python-case" ,python-case)))
2847 (home-page "https://github.com/celery/vine")
2848 (synopsis "Promises for Python")
2849 (description
2850 "@code{vine} provides a special implementation of promises in that it can
2851 be used both for \"promise of a value\" and lazy evaluation. The biggest
2852 upside for this is that everything in a promise can also be a promise,
2853 e.g. filters, callbacks and errbacks can all be promises.")
2854 (license license:bsd-3)))
2855
2856 (define-public python-virtualenv
2857 (package
2858 (name "python-virtualenv")
2859 (version "20.0.10")
2860 (source
2861 (origin
2862 (method url-fetch)
2863 (uri (pypi-uri "virtualenv" version))
2864 (sha256
2865 (base32
2866 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2867 (build-system python-build-system)
2868 (native-inputs
2869 `(("python-mock" ,python-mock)
2870 ("python-pytest" ,python-pytest)
2871 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2872 ;; be an input at all". However, removing the input makes the build error:
2873 ;; File "setup.py", line 4, in <module>
2874 ;; raise RuntimeError("setuptools >= 41 required to build")
2875 ("python-setuptools" ,python-setuptools)
2876 ("python-setuptools-scm" ,python-setuptools-scm)))
2877 (propagated-inputs
2878 `(("python-appdirs" ,python-appdirs)
2879 ("python-distlib" ,python-distlib)
2880 ("python-filelock" ,python-filelock)
2881 ("python-six" ,python-six)
2882 ("python-importlib-metadata" ,python-importlib-metadata)))
2883 (home-page "https://virtualenv.pypa.io/")
2884 (synopsis "Virtual Python environment builder")
2885 (description
2886 "Virtualenv is a tool to create isolated Python environments.")
2887 (properties `((python2-variant . ,(delay python2-virtualenv))))
2888 (license license:expat)))
2889
2890 (define-public python2-virtualenv
2891 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2892 (package
2893 (inherit base)
2894 (arguments
2895 `(#:python ,python-2
2896 #:phases
2897 (modify-phases %standard-phases
2898 (add-after 'set-paths 'adjust-PYTHONPATH
2899 (lambda* (#:key inputs #:allow-other-keys)
2900 (let* ((python (assoc-ref inputs "python"))
2901 (python-sitedir (string-append python "/lib/python2.7"
2902 "/site-packages")))
2903 ;; XXX: 'python2' always comes first on PYTHONPATH
2904 ;; and shadows the 'setuptools' input. Move python2
2905 ;; last: this should be fixed in python-build-system
2906 ;; in a future rebuild cycle.
2907 (setenv "PYTHONPATH"
2908 (string-append (string-join (delete python-sitedir
2909 (string-split
2910 (getenv "PYTHONPATH")
2911 #\:))
2912 ":")
2913 ":" python-sitedir))
2914 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2915 (getenv "PYTHONPATH"))
2916 #t))))))
2917 (propagated-inputs
2918 `(("python-contextlib2" ,python2-contextlib2)
2919 ,@(package-propagated-inputs base))))))
2920
2921 (define-public python-markupsafe
2922 (package
2923 (name "python-markupsafe")
2924 (version "1.1.1")
2925 (source
2926 (origin
2927 (method url-fetch)
2928 (uri (pypi-uri "MarkupSafe" version))
2929 (sha256
2930 (base32
2931 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2932 (build-system python-build-system)
2933 (arguments
2934 `(#:modules ((ice-9 ftw)
2935 (srfi srfi-1)
2936 (srfi srfi-26)
2937 (guix build utils)
2938 (guix build python-build-system))
2939 #:phases (modify-phases %standard-phases
2940 (replace 'check
2941 (lambda _
2942 (let ((cwd (getcwd))
2943 (libdir (find (cut string-prefix? "lib." <>)
2944 (scandir "build"))))
2945 (setenv "PYTHONPATH"
2946 (string-append cwd "/build/" libdir ":"
2947 (getenv "PYTHONPATH")))
2948 (invoke "pytest" "-vv")))))))
2949 (native-inputs
2950 `(("python-pytest" ,python-pytest)))
2951 (home-page "https://github.com/mitsuhiko/markupsafe")
2952 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
2953 (description
2954 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
2955 for Python.")
2956 (license license:bsd-3)))
2957
2958 (define-public python2-markupsafe
2959 (package-with-python2 python-markupsafe))
2960
2961 (define-public python-jinja2
2962 (package
2963 (name "python-jinja2")
2964 (version "2.11.1")
2965 (source
2966 (origin
2967 (method url-fetch)
2968 (uri (pypi-uri "Jinja2" version))
2969 (sha256
2970 (base32
2971 "0l72c11n959yzb8d3ankckb6yhjhm6x729zm7rkpk040qzxpy64k"))))
2972 (build-system python-build-system)
2973 (arguments
2974 '(#:phases (modify-phases %standard-phases
2975 (replace 'check
2976 (lambda* (#:key tests? #:allow-other-keys)
2977 (if tests?
2978 (begin
2979 (setenv "PYTHONPATH"
2980 (string-append "./build/lib:"
2981 (getenv "PYTHONPATH")))
2982 (invoke "pytest" "-vv"))
2983 (format #t "test suite not run~%"))
2984 #t)))))
2985 (native-inputs
2986 `(("python-pytest" ,python-pytest)))
2987 (propagated-inputs
2988 `(("python-markupsafe" ,python-markupsafe)))
2989 (home-page "http://jinja.pocoo.org/")
2990 (synopsis "Python template engine")
2991 (description
2992 "Jinja2 is a small but fast and easy to use stand-alone template engine
2993 written in pure Python.")
2994 (license license:bsd-3)))
2995
2996 (define-public python2-jinja2
2997 (package-with-python2 python-jinja2))
2998
2999 (define-public python-jinja2-time
3000 (package
3001 (name "python-jinja2-time")
3002 (version "0.2.0")
3003 (source
3004 (origin
3005 (method url-fetch)
3006 (uri (pypi-uri "jinja2-time" version))
3007 (sha256
3008 (base32
3009 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3010 (build-system python-build-system)
3011 (propagated-inputs
3012 `(("python-arrow" ,python-arrow)
3013 ("python-jinja2" ,python-jinja2)))
3014 (home-page
3015 "https://github.com/hackebrot/jinja2-time")
3016 (synopsis "Jinja2 Extension for Dates and Times")
3017 (description
3018 "This package provides an extension for the template engine Jinja2. It
3019 adds a 'now' tag providing a convenient access to the arrow.now() API from
3020 templates. A format string can be provided to control the output.")
3021 (license license:expat)))
3022
3023 (define-public python-pystache
3024 (package
3025 (name "python-pystache")
3026 (version "0.5.4")
3027 (source (origin
3028 (method url-fetch)
3029 (uri (pypi-uri "pystache" version))
3030 (sha256
3031 (base32
3032 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3033 (build-system python-build-system)
3034 (arguments
3035 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3036 (home-page "http://defunkt.io/pystache/")
3037 (synopsis "Python logic-less template engine")
3038 (description
3039 "Pystache is a Python implementation of the framework agnostic,
3040 logic-free templating system Mustache.")
3041 (license license:expat)
3042 (properties `((python2-variant . ,(delay python2-pystache))))))
3043
3044 (define-public python2-pystache
3045 (package (inherit (package-with-python2
3046 (strip-python2-variant python-pystache)))
3047 (arguments
3048 `(#:python ,python-2
3049 #:phases
3050 (modify-phases %standard-phases
3051 (replace 'check
3052 (lambda _
3053 (invoke "python" "test_pystache.py"))))))))
3054
3055 (define-public python-joblib
3056 (package
3057 (name "python-joblib")
3058 (version "0.14.1")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "joblib" version))
3062 (sha256
3063 (base32
3064 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3065 (build-system python-build-system)
3066 (arguments
3067 `(#:phases
3068 (modify-phases %standard-phases
3069 (replace 'check
3070 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3071 (native-inputs
3072 `(("python-pytest" ,python-pytest)))
3073 (home-page "https://joblib.readthedocs.io/")
3074 (synopsis "Using Python functions as pipeline jobs")
3075 (description
3076 "Joblib is a set of tools to provide lightweight pipelining in Python.
3077 In particular, joblib offers: transparent disk-caching of the output values
3078 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3079 logging and tracing of the execution.")
3080 (license license:bsd-3)))
3081
3082 (define-public python2-joblib
3083 (package-with-python2 python-joblib))
3084
3085 (define-public python-daemon
3086 (package
3087 (name "python-daemon")
3088 (version "2.2.3")
3089 (source
3090 (origin
3091 (method url-fetch)
3092 (uri (pypi-uri "python-daemon" version))
3093 (sha256
3094 (base32
3095 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3096 (build-system python-build-system)
3097 (arguments
3098 `(#:phases
3099 (modify-phases %standard-phases
3100 (add-before 'check 'disable-tests
3101 (lambda _
3102 ;; FIXME: Determine why test fails
3103 (substitute* "test/test_daemon.py"
3104 (("test_detaches_process_context")
3105 "skip_test_detaches_process_context"))
3106 #t)))))
3107 (propagated-inputs
3108 `(("python-lockfile" ,python-lockfile)))
3109 (native-inputs
3110 `(("python-unittest2" ,python-unittest2)
3111 ("python-testtools" ,python-testtools)
3112 ("python-testscenarios" ,python-testscenarios)
3113 ("python-mock" ,python-mock)
3114 ("python-docutils" ,python-docutils)))
3115 (home-page "https://pagure.io/python-daemon/")
3116 (synopsis "Python library for making a Unix daemon process")
3117 (description "Python-daemon is a library that assists a Python program to
3118 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3119
3120 This library provides a @code{DaemonContext} class that manages the following
3121 important tasks for becoming a daemon process:
3122 @enumerate
3123 @item Detach the process into its own process group.
3124 @item Set process environment appropriate for running inside a chroot.
3125 @item Renounce suid and sgid privileges.
3126 @item Close all open file descriptors.
3127 @item Change the working directory, uid, gid, and umask.
3128 @item Set appropriate signal handlers.
3129 @item Open new file descriptors for stdin, stdout, and stderr.
3130 @item Manage a specified PID lock file.
3131 @item Register cleanup functions for at-exit processing.
3132 @end enumerate")
3133 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3134 (license (list license:asl2.0 license:gpl3+))))
3135
3136 (define-public python-anytree
3137 (package
3138 (name "python-anytree")
3139 (version "2.8.0")
3140 (source (origin
3141 (method url-fetch)
3142 (uri (pypi-uri "anytree" version))
3143 (sha256
3144 (base32
3145 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3146 (build-system python-build-system)
3147 (propagated-inputs
3148 `(("python-six" ,python-six)))
3149 (native-inputs
3150 `(;; For tests.
3151 ("graphviz" ,graphviz) ;for 'dot'
3152 ("python-nose" ,python-nose)))
3153 (home-page "https://github.com/c0fec0de/anytree")
3154 (synopsis "Lightweight tree data library")
3155 (description
3156 "@code{anytree} is a simple, lightweight, and extensible tree data
3157 structure for Python.")
3158 (license license:asl2.0)))
3159
3160 (define-public python-docutils
3161 (package
3162 (name "python-docutils")
3163 (version "0.16")
3164 (source
3165 (origin
3166 (method url-fetch)
3167 (uri (pypi-uri "docutils" version))
3168 (sha256
3169 (base32
3170 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3171 (build-system python-build-system)
3172 (arguments
3173 '(#:phases (modify-phases %standard-phases
3174 (replace 'check
3175 (lambda* (#:key tests? #:allow-other-keys)
3176 (if tests?
3177 (invoke "python" "test/alltests.py")
3178 (format #t "test suite not run~%"))
3179 #t)))))
3180 (home-page "http://docutils.sourceforge.net/")
3181 (synopsis "Python Documentation Utilities")
3182 (description
3183 "Docutils is a modular system for processing documentation into useful
3184 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3185 reStructuredText.")
3186 ;; Most of the source code is public domain, but some source files are
3187 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3188 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3189
3190 (define-public python2-docutils
3191 (package-with-python2 python-docutils))
3192
3193 ;; python2-sphinx fails its test suite with newer versions.
3194 (define-public python2-docutils-0.14
3195 (package
3196 (inherit python2-docutils)
3197 (version "0.14")
3198 (source (origin
3199 (method url-fetch)
3200 (uri (pypi-uri "docutils" version))
3201 (sha256
3202 (base32
3203 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3204
3205 (define-public python-pygments
3206 (package
3207 (name "python-pygments")
3208 (version "2.5.2")
3209 (source
3210 (origin
3211 (method url-fetch)
3212 (uri (pypi-uri "Pygments" version))
3213 (sha256
3214 (base32
3215 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3216 (build-system python-build-system)
3217 (arguments
3218 ;; FIXME: Tests require sphinx, which depends on this.
3219 '(#:tests? #f))
3220 (home-page "https://pygments.org/")
3221 (synopsis "Syntax highlighting")
3222 (description
3223 "Pygments is a syntax highlighting package written in Python.")
3224 (license license:bsd-2)))
3225
3226 (define-public python2-pygments
3227 (package-with-python2 python-pygments))
3228
3229 (define-public python-bumpversion
3230 (package
3231 (name "python-bumpversion")
3232 (version "0.5.3")
3233 (source
3234 (origin
3235 (method url-fetch)
3236 (uri (pypi-uri "bumpversion" version))
3237 (sha256
3238 (base32
3239 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3240 (build-system python-build-system)
3241 (home-page "https://github.com/peritus/bumpversion")
3242 (synopsis "Tool to bump software version")
3243 (description "This tool provides a command-line interface (CLI) to bump a
3244 software version simply.")
3245 (license license:expat)))
3246
3247 (define-public python-deprecated
3248 (package
3249 (name "python-deprecated")
3250 (version "1.2.5")
3251 (source
3252 (origin
3253 (method git-fetch)
3254 (uri (git-reference
3255 (url "https://github.com/tantale/deprecated.git")
3256 (commit (string-append "v" version))))
3257 (file-name (git-file-name name version))
3258 (sha256
3259 (base32
3260 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3261 (build-system python-build-system)
3262 (arguments
3263 `(#:phases (modify-phases %standard-phases
3264 (replace 'check
3265 (lambda _
3266 (invoke "pytest"))))))
3267 (propagated-inputs
3268 `(("python-wrapt" ,python-wrapt)))
3269 (native-inputs
3270 `(("python-bumpversion" ,python-bumpversion)
3271 ("python-pytest" ,python-pytest)
3272 ("python-pytest-cov" ,python-pytest-cov)
3273 ("python-sphinx" ,python-sphinx)
3274 ("python-tox" ,python-tox)))
3275 (home-page "https://github.com/tantale/deprecated")
3276 (synopsis "Python decorator to deprecate classes, functions or methods")
3277 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3278 to deprecate classes, functions or methods.")
3279 (license license:expat)))
3280
3281 (define-public python-pygithub
3282 (package
3283 (name "python-pygithub")
3284 (version "1.43.8")
3285 (source
3286 ;; We fetch from the Git repo because there are no tests in the PyPI
3287 ;; archive.
3288 (origin
3289 (method git-fetch)
3290 (uri (git-reference
3291 (url "https://github.com/PyGithub/PyGithub.git")
3292 (commit (string-append "v" version))))
3293 (file-name (git-file-name name version))
3294 (sha256
3295 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3296 (build-system python-build-system)
3297 (arguments
3298 `(#:phases (modify-phases %standard-phases
3299 ;; Some tests rely on the network.
3300 (add-after 'unpack 'disable-failing-tests
3301 (lambda _
3302 (substitute* "tests/Issue142.py"
3303 (("testDecodeJson") "disabled_testDecodeJson"))
3304 #t))
3305 (add-before 'check 'prepare-for-tests
3306 (lambda _
3307 (for-each (lambda (f)
3308 (chmod f #o666))
3309 (find-files "./tests"))
3310 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3311 (setenv "PYTHONPATH"
3312 (string-append "./tests:" (getenv "PYTHONPATH")))
3313 #t)))))
3314 (propagated-inputs
3315 `(("python-deprecated" ,python-deprecated)
3316 ("python-pyjwt" ,python-pyjwt)
3317 ("python-requests" ,python-requests)))
3318 (native-inputs `(("python-httpretty" ,python-httpretty)))
3319 (home-page "https://pygithub.readthedocs.io/en/latest/")
3320 (synopsis "Python library for the GitHub API")
3321 (description "This library allows managing GitHub resources such as
3322 repositories, user profiles, and organizations in your Python applications,
3323 using version 3 of the GitHub application programming interface (API).")
3324 (license license:lgpl3+)))
3325
3326 (define-public python-rellu
3327 (package
3328 (name "python-rellu")
3329 (version "0.7")
3330 (source
3331 (origin
3332 (method url-fetch)
3333 (uri (pypi-uri "rellu" version))
3334 (sha256
3335 (base32
3336 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3337 (build-system python-build-system)
3338 (propagated-inputs
3339 `(("python-invoke" ,python-invoke)
3340 ("python-pygithub" ,python-pygithub)))
3341 (home-page "https://github.com/robotframework/rellu")
3342 (synopsis "Utilities to create PyPI releases")
3343 (description "This collection of utilities contains tooling and templates
3344 to assist in creating releases on GitHub and publishing them on PyPI. It is
3345 designed to be used by Robot Framework and tools and libraries in its
3346 ecosystem, but can naturally be used also by other projects.")
3347 (license license:asl2.0)))
3348
3349 (define-public python-robotframework
3350 (package
3351 (name "python-robotframework")
3352 (version "3.1.2")
3353 ;; There are no tests in the PyPI archive.
3354 (source
3355 (origin
3356 (method git-fetch)
3357 (uri (git-reference
3358 (url "https://github.com/robotframework/robotframework.git")
3359 (commit (string-append "v" version))))
3360 (file-name (git-file-name name version))
3361 (sha256
3362 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3363 (patches (search-patches
3364 "python-robotframework-honor-source-date-epoch.patch"))))
3365 (build-system python-build-system)
3366 (arguments
3367 `(#:phases (modify-phases %standard-phases
3368 (add-before 'build 'build-and-install-doc
3369 (lambda* (#:key outputs #:allow-other-keys)
3370 (let* ((doc-output (assoc-ref outputs "doc"))
3371 (doc (string-append doc-output "/share/"
3372 ,name "-" ,version "/")))
3373 (invoke "invoke" "library-docs" "all")
3374 (mkdir-p doc)
3375 (copy-recursively "doc/libraries"
3376 (string-append doc "/libraries"))
3377 #t)))
3378 (replace 'check
3379 (lambda _
3380 (invoke "python" "utest/run.py"))))))
3381 (native-inputs
3382 `(("python-invoke" ,python-invoke)
3383 ("python-rellu" ,python-rellu)
3384 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3385 (outputs '("out" "doc"))
3386 (home-page "https://robotframework.org")
3387 (synopsis "Generic automation framework")
3388 (description "Robot Framework is a generic automation framework for
3389 acceptance testing, acceptance test driven development (ATDD), and robotic
3390 process automation (RPA).")
3391 (license license:asl2.0)))
3392
3393 (define-public python-robotframework-lint
3394 ;; There is no properly tagged release; the commit below seems to correspond
3395 ;; to the 0.9 stable release available from PyPI. The tests are not
3396 ;; included in the PyPI archive, so we fetch the sources from the upstream
3397 ;; Git repo.
3398 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3399 (revision "1"))
3400 (package
3401 (name "python-robotframework-lint")
3402 (version (git-version "0.9.0" revision commit))
3403 (source
3404 (origin
3405 (method git-fetch)
3406 (uri (git-reference
3407 (url "https://github.com/boakley/robotframework-lint.git")
3408 (commit commit)))
3409 (file-name (git-file-name name version))
3410 (sha256
3411 (base32
3412 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3413 (build-system python-build-system)
3414 (arguments
3415 `(#:phases
3416 (modify-phases %standard-phases
3417 (replace 'check
3418 (lambda _
3419 (invoke "python" "-m" "robot" "-A"
3420 "tests/conf/default.args" "tests"))))))
3421 (propagated-inputs
3422 `(("python-robotframework" ,python-robotframework)))
3423 (home-page "https://github.com/boakley/robotframework-lint/")
3424 (synopsis "Static analysis tool (linter) for Robot Framework")
3425 (description "This package provides the @code{rflint} command-line
3426 utility, a static analysis tool (linter) for Robot Framework source files.")
3427 (license license:asl2.0))))
3428
3429 (define-public python-robotframework-sshlibrary
3430 (package
3431 (name "python-robotframework-sshlibrary")
3432 (version "3.3.0")
3433 ;; There are no tests in the PyPI archive.
3434 (source
3435 (origin
3436 (method git-fetch)
3437 (uri (git-reference
3438 (url "https://github.com/robotframework/SSHLibrary.git")
3439 (commit (string-append "v" version))))
3440 (file-name (git-file-name name version))
3441 (sha256
3442 (base32
3443 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3444 (build-system python-build-system)
3445 (arguments
3446 `(#:phases
3447 (modify-phases %standard-phases
3448 (add-before 'build 'build-and-install-doc
3449 (lambda* (#:key outputs #:allow-other-keys)
3450 (let* ((doc-output (assoc-ref outputs "doc"))
3451 (doc (string-append doc-output "/share/"
3452 ,name "-" ,version "/")))
3453 (invoke "chmod" "-R" "+w" "docs")
3454 (invoke "invoke" "kw-docs" "project-docs")
3455 (mkdir-p doc)
3456 (for-each delete-file (find-files "docs" "\\.rst"))
3457 (copy-recursively "docs" doc)
3458 #t)))
3459 (replace 'check
3460 (lambda _
3461 ;; Some tests require an SSH server; we remove them.
3462 (delete-file "utest/test_client_api.py")
3463 (delete-file "utest/test_scp.py")
3464 (invoke "python" "utest/run.py"))))))
3465 (propagated-inputs
3466 `(("python-robotframework" ,python-robotframework)
3467 ("python-paramiko" ,python-paramiko)
3468 ("python-scp" ,python-scp)))
3469 (native-inputs
3470 `(("openssh" ,openssh)
3471 ("which" ,which)
3472 ;; To generate the documentation
3473 ("python-docutils" ,python-docutils)
3474 ("python-invoke" ,python-invoke)
3475 ("python-pygments" ,python-pygments)
3476 ("python-rellu" ,python-rellu)))
3477 (outputs '("out" "doc"))
3478 (home-page "https://github.com/robotframework/SSHLibrary")
3479 (synopsis "Robot Framework library for SSH and SFTP")
3480 (description "SSHLibrary is a Robot Framework library providing support
3481 for SSH and SFTP. It has the following main usages:
3482 @itemize @bullet
3483 @item Executing commands on the remote machine, either blocking or non-blocking.
3484 @item Writing and reading in an interactive shell.
3485 @item Transferring files and directories over SFTP.
3486 @item Ensuring that files and directories exist on the remote machine.
3487 @end itemize")
3488 (license license:asl2.0)))
3489
3490 (define-public python-rstr
3491 (package
3492 (name "python-rstr")
3493 (version "2.2.6")
3494 (source
3495 (origin
3496 (method url-fetch)
3497 (uri (pypi-uri "rstr" version))
3498 (sha256
3499 (base32
3500 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3501 (build-system python-build-system)
3502 (home-page
3503 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3504 (synopsis "Generate random strings in Python")
3505 (description "This package provides a python module for generating
3506 random strings of various types. It could be useful for fuzz testing,
3507 generating dummy data, or other applications. It has no dependencies
3508 outside the standard library.")
3509 (license license:bsd-3)))
3510
3511 (define-public python-scp
3512 (package
3513 (name "python-scp")
3514 (version "0.13.2")
3515 (source
3516 (origin
3517 (method url-fetch)
3518 (uri (pypi-uri "scp" version))
3519 (sha256
3520 (base32
3521 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3522 (build-system python-build-system)
3523 (arguments
3524 '(#:tests? #f)) ;tests require an SSH server
3525 (propagated-inputs
3526 `(("python-paramiko" ,python-paramiko)))
3527 (home-page "https://github.com/jbardin/scp.py")
3528 (synopsis "SCP protocol module for Python and Paramiko")
3529 (description "The scp module extends the Paramiko library to send and
3530 receive files via the SCP1 protocol, as implemented by the OpenSSH
3531 @command{scp} program.")
3532 (license license:gpl2+)))
3533
3534 (define-public python-rst.linker
3535 (package
3536 (name "python-rst.linker")
3537 (version "1.11")
3538 (source
3539 (origin
3540 (method url-fetch)
3541 (uri (pypi-uri "rst.linker" version))
3542 (sha256
3543 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3544 (build-system python-build-system)
3545 (propagated-inputs
3546 `(("python-dateutil" ,python-dateutil)
3547 ("python-six" ,python-six)))
3548 (native-inputs
3549 `(("python-setuptools-scm" ,python-setuptools-scm)))
3550 ;; Test would require path.py, which would introduce a cyclic dependence.
3551 (arguments `(#:tests? #f))
3552 ;; Note: As of version 1.7 the documentation is not worth building.
3553 (home-page "https://github.com/jaraco/rst.linker")
3554 (synopsis "Sphinx plugin to add links and timestamps")
3555 (description "rst.linker automatically replaces text by a
3556 reStructuredText external reference or timestamps. It's primary purpose is to
3557 augment the changelog, but it can be used for other documents, too.")
3558 (license license:expat)))
3559
3560 (define-public python2-rst.linker
3561 (package-with-python2 python-rst.linker))
3562
3563 (define-public python-feedgenerator
3564 (package
3565 (name "python-feedgenerator")
3566 (version "1.9")
3567 (source
3568 (origin
3569 (method url-fetch)
3570 (uri (pypi-uri "feedgenerator" version))
3571 (sha256
3572 (base32
3573 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3574 (modules '((guix build utils)))
3575 (snippet
3576 '(begin
3577 ;; Remove pre-compiled .pyc files from source.
3578 (for-each delete-file-recursively
3579 (find-files "." "__pycache__" #:directories? #t))
3580 (for-each delete-file (find-files "." "\\.pyc$"))
3581 #t))))
3582 (build-system python-build-system)
3583 (propagated-inputs
3584 `(("python-pytz" ,python-pytz)
3585 ("python-six" ,python-six)))
3586 (home-page "https://github.com/getpelican/feedgenerator")
3587 (synopsis
3588 "Standalone version of Django's Atom/RSS feed generator")
3589 (description
3590 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3591 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3592 (license license:bsd-3)))
3593
3594 (define-public python2-feedgenerator
3595 (package-with-python2 python-feedgenerator))
3596
3597 (define-public python-toml
3598 (package
3599 (name "python-toml")
3600 (version "0.9.4")
3601 (source
3602 (origin
3603 (method url-fetch)
3604 (uri (pypi-uri "toml" version))
3605 (sha256
3606 (base32
3607 "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf"))))
3608 (build-system python-build-system)
3609 (arguments
3610 `(#:tests? #f)) ;no tests suite in release
3611 (home-page "https://github.com/uiri/toml")
3612 (synopsis "Library for TOML")
3613 (description
3614 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3615 Language (TOML) configuration files.")
3616 (license license:expat)))
3617
3618 (define-public python-jsonrpc-server
3619 (package
3620 (name "python-jsonrpc-server")
3621 (version "0.3.2")
3622 (source
3623 (origin
3624 (method url-fetch)
3625 (uri (pypi-uri "python-jsonrpc-server" version))
3626 (sha256
3627 (base32
3628 "0ddgdp26dfxaz6isjbb12974b3rxavgsqrn2zrmck62cmipg5g05"))))
3629 (build-system python-build-system)
3630 (propagated-inputs
3631 `(("python-future" ,python-future)
3632 ("python-mock" ,python-mock)
3633 ("python-pytest" ,python-pytest)
3634 ("python-ujson" ,python-ujson)))
3635 (home-page
3636 "https://github.com/palantir/python-jsonrpc-server")
3637 (synopsis "JSON RPC 2.0 server library")
3638 (description
3639 "This package provides a JSON RPC 2.0 server library for Python.")
3640 (license license:expat)))
3641
3642 (define-public python-pydocstyle
3643 (package
3644 (name "python-pydocstyle")
3645 (version "3.0.0")
3646 (source
3647 (origin
3648 (method url-fetch)
3649 (uri (pypi-uri "pydocstyle" version))
3650 (sha256
3651 (base32
3652 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3653 (build-system python-build-system)
3654 (propagated-inputs
3655 `(("python-six" ,python-six)
3656 ("python-snowballstemmer" ,python-snowballstemmer)))
3657 (home-page
3658 "https://github.com/PyCQA/pydocstyle/")
3659 (synopsis "Python docstring style checker")
3660 (description
3661 "This package provides a style checker for the Python Language
3662 Server (PLS).")
3663 (license license:expat)))
3664
3665 (define-public python-language-server
3666 (package
3667 (name "python-language-server")
3668 (version "0.31.7")
3669 (source
3670 (origin
3671 (method url-fetch)
3672 (uri (pypi-uri "python-language-server" version))
3673 (sha256
3674 (base32
3675 "0f8rljff4h2ay9m2n9ang7axai37nzd39zd7m6c90rci5wh8cmxh"))))
3676 (build-system python-build-system)
3677 (propagated-inputs
3678 `(("python-pluggy" ,python-pluggy)
3679 ("python-jsonrpc-server" ,python-jsonrpc-server)
3680 ;; Note: Remove the special versions of Jedi and Parso when updating
3681 ;; this package.
3682 ("python-jedi" ,python-jedi-0.15)
3683 ("python-yapf" ,python-yapf)
3684 ("python-pyflakes" ,python-pyflakes)
3685 ("python-pydocstyle" ,python-pydocstyle)
3686 ("python-pycodestyle" ,python-pycodestyle)
3687 ("python-mccabe" ,python-mccabe)
3688 ("python-rope" ,python-rope)
3689 ("python-autopep8" ,python-autopep8)
3690 ("python-flake8" ,python-flake8)
3691 ("python-pylint" ,python-pylint)))
3692 (home-page "https://github.com/palantir/python-language-server")
3693 (synopsis "Python implementation of the Language Server Protocol")
3694 (description
3695 "The Python Language Server (pyls) is an implementation of the Python 3
3696 language specification for the Language Server Protocol (LSP). This tool is
3697 used in text editing environments to provide a complete and integrated
3698 feature-set for programming Python effectively.")
3699 (license license:expat)))
3700
3701 (define-public python-pathspec
3702 (package
3703 (name "python-pathspec")
3704 (version "0.7.0")
3705 (source
3706 (origin
3707 (method url-fetch)
3708 (uri (pypi-uri "pathspec" version))
3709 (sha256
3710 (base32
3711 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3712 (build-system python-build-system)
3713 (home-page "https://github.com/cpburnz/python-path-specification")
3714 (synopsis "Utility library for gitignore style pattern matching of file paths")
3715 (description
3716 "This package provides a utility library for gitignore style pattern
3717 matching of file paths.")
3718 (license license:mpl2.0)))
3719
3720 (define-public python-black
3721 (package
3722 (name "python-black")
3723 (version "19.10b0")
3724 (source
3725 (origin
3726 (method url-fetch)
3727 (uri (pypi-uri "black" version))
3728 (sha256
3729 (base32
3730 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3731 (build-system python-build-system)
3732 (arguments
3733 `(#:phases
3734 (modify-phases %standard-phases
3735 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3736 (lambda _
3737 (let ((python3 (which "python3")))
3738 (substitute* '("tests/data/fmtonoff.py"
3739 "tests/data/string_prefixes.py"
3740 "tests/data/function.py"
3741 "tests/data/python37.py")
3742 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3743 (string-append "#!" python3 (if (string? minor-version)
3744 minor-version
3745 "")))))
3746 #t))
3747 (add-after 'unpack 'disable-broken-tests
3748 (lambda _
3749 ;; These tests are supposed to be skipped when the blackd
3750 ;; dependencies are missing, but this doesn't quite work.
3751 (substitute* "tests/test_black.py"
3752 (("( *)class BlackDTestCase.*" match indent)
3753 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3754 indent "class BlackDTestCase(unittest.TestCase):\n"))
3755 (("web.Application") "False")
3756 (("@unittest_run_loop") ""))
3757
3758 ;; Patching the above file breaks the self test
3759 (substitute* "tests/test_black.py"
3760 (("( *)def test_self" match indent)
3761 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3762 #t)))))
3763 (propagated-inputs
3764 `(("python-click" ,python-click)
3765 ("python-attrs" ,python-attrs)
3766 ("python-appdirs" ,python-appdirs)
3767 ("python-pathspec" ,python-pathspec)
3768 ("python-regex" ,python-regex)
3769 ("python-toml" ,python-toml)
3770 ("python-typed-ast" ,python-typed-ast)))
3771 (native-inputs
3772 `(("python-setuptools-scm" ,python-setuptools-scm)))
3773 (home-page "https://github.com/ambv/black")
3774 (synopsis "The uncompromising code formatter")
3775 (description "Black is the uncompromising Python code formatter.")
3776 (license license:expat)))
3777
3778 (define-public python-blinker
3779 (package
3780 (name "python-blinker")
3781 (version "1.4")
3782 (source
3783 (origin
3784 (method url-fetch)
3785 (uri (pypi-uri "blinker" version))
3786 (sha256
3787 (base32
3788 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3789 (build-system python-build-system)
3790 (home-page "https://pythonhosted.org/blinker/")
3791 (synopsis "Fast, simple object-to-object and broadcast signaling")
3792 (description
3793 "Blinker provides a fast dispatching system that allows any number of
3794 interested parties to subscribe to events, or \"signals\".")
3795 (license license:expat)))
3796
3797 (define-public python2-blinker
3798 (package-with-python2 python-blinker))
3799
3800 (define-public pelican
3801 (package
3802 (name "pelican")
3803 (version "4.2.0")
3804 (source
3805 (origin
3806 (method url-fetch)
3807 (uri (pypi-uri "pelican" version))
3808 (sha256
3809 (base32
3810 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3811 (build-system python-build-system)
3812 (propagated-inputs
3813 `(("python-blinker" ,python-blinker)
3814 ("python-dateutil" ,python-dateutil)
3815 ("python-docutils" ,python-docutils)
3816 ("python-feedgenerator" ,python-feedgenerator)
3817 ("python-jinja2" ,python-jinja2)
3818 ("python-markdown" ,python-markdown)
3819 ("python-pygments" ,python-pygments)
3820 ("python-pytz" ,python-pytz)
3821 ("python-six" ,python-six)
3822 ("python-unidecode" ,python-unidecode)))
3823 (home-page "https://getpelican.com/")
3824 (arguments
3825 `(;; XXX Requires a lot more packages to do unit tests :P
3826 #:tests? #f))
3827 (synopsis "Python-based static site publishing system")
3828 (description
3829 "Pelican is a tool to generate a static blog from reStructuredText,
3830 Markdown input files, and more. Pelican uses Jinja2 for templating
3831 and is very extensible.")
3832 (license license:agpl3+)))
3833
3834 (define-public mallard-ducktype
3835 (package
3836 (name "mallard-ducktype")
3837 (version "1.0.2")
3838 (source
3839 (origin
3840 (method git-fetch)
3841 ;; git-reference because tests are not included in pypi source tarball
3842 ;; https://issues.guix.gnu.org/issue/36755#2
3843 (uri (git-reference
3844 (url "https://github.com/projectmallard/mallard-ducktype.git")
3845 (commit version)))
3846 (file-name (git-file-name name version))
3847 (sha256
3848 (base32
3849 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3850 (build-system python-build-system)
3851 (arguments
3852 '(#:phases
3853 (modify-phases %standard-phases
3854 (replace 'check
3855 (lambda _
3856 (with-directory-excursion "tests"
3857 (invoke "sh" "runtests")))))))
3858 (home-page "http://projectmallard.org")
3859 (synopsis "Convert Ducktype to Mallard documentation markup")
3860 (description
3861 "Ducktype is a lightweight syntax that can represent all the semantics
3862 of the Mallard XML documentation system. Ducktype files can be converted to
3863 Mallard using the @command{ducktype} tool. The yelp-tools package
3864 provides additional functionality on the produced Mallard documents.")
3865 (license license:expat)))
3866
3867 (define-public python-cython
3868 (package
3869 (name "python-cython")
3870 (version "0.29.15")
3871 (source
3872 (origin
3873 (method url-fetch)
3874 (uri (pypi-uri "Cython" version))
3875 (sha256
3876 (base32
3877 "0c5cjyxfvba6c0vih1fvhywp8bpz30vwvbjqdm1q1k55xzhmkn30"))))
3878 (build-system python-build-system)
3879 ;; we need the full python package and not just the python-wrapper
3880 ;; because we need libpython3.3m.so
3881 (inputs
3882 `(("python" ,python)))
3883 (arguments
3884 `(#:phases
3885 (modify-phases %standard-phases
3886 (add-before 'check 'set-HOME
3887 ;; some tests require access to "$HOME/.cython"
3888 (lambda _ (setenv "HOME" "/tmp") #t))
3889 (replace 'check
3890 (lambda _
3891 ;; Disable compiler optimizations to greatly reduce the running
3892 ;; time of the test suite.
3893 (setenv "CFLAGS" "-O0")
3894
3895 (invoke "python" "runtests.py" "-vv"
3896 "-j" (number->string (parallel-job-count))))))))
3897 (home-page "https://cython.org/")
3898 (synopsis "C extensions for Python")
3899 (description "Cython is an optimising static compiler for both the Python
3900 programming language and the extended Cython programming language. It makes
3901 writing C extensions for Python as easy as Python itself.")
3902 (license license:asl2.0)
3903 (properties `((python2-variant . ,(delay python2-cython))))))
3904
3905 (define-public python2-cython
3906 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
3907 (package
3908 (inherit base)
3909 (name "python2-cython")
3910 (inputs
3911 `(("python-2" ,python-2))) ;this is not automatically changed
3912 (arguments
3913 (substitute-keyword-arguments (package-arguments base)
3914 ((#:phases phases)
3915 `(modify-phases ,phases
3916 ;; XXX: On i686-linux, running the parallel tests fails on many-core
3917 ;; systems, see <https://github.com/cython/cython/issues/2807>.
3918 ;; TODO: Move this logic to the regular check phase in a future
3919 ;; rebuild cycle.
3920 ,@(if (string-prefix? "i686" (%current-system))
3921 '((replace 'check
3922 (lambda _
3923 (setenv "CFLAGS" "-O0")
3924 (invoke "python" "runtests.py" "-vv"
3925 "-j" (number->string (parallel-job-count))
3926 "-x" "run.parallel"))))
3927 '())
3928 (add-before 'check 'adjust-test_embed
3929 (lambda _
3930 (substitute* "runtests.py"
3931 ;; test_embed goes great lengths to find the static libpythonX.Y.a
3932 ;; so it can give the right -L flag to GCC when embedding static
3933 ;; builds of Python. It is unaware that the Python "config"
3934 ;; directory (where the static library lives) was renamed in
3935 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
3936 ;; which works fine, because that is where the shared library is.
3937 ;;
3938 ;; It also appears to be unaware that the Makefile in Demos/embed
3939 ;; already unconditionally pass the static library location to GCC,
3940 ;; after checking sysconfig.get_config_var('LIBPL).
3941 ;;
3942 ;; The effect is that the linker is unable to resolve libexpat
3943 ;; symbols when building for Python 2, because neither the Python 2
3944 ;; shared library nor Expat is available. To fix it, we can either
3945 ;; add Expat as an input and make it visible to the linker, or just
3946 ;; prevent it from overriding the Python shared library location.
3947 ;; The end result is identical, so we take the easy route.
3948 ((" or libname not in os\\.listdir\\(libdir\\)")
3949 ""))
3950 #t)))))))))
3951
3952 ;; The RPython toolchain currently does not support Python 3.
3953 (define-public python2-rpython
3954 (package
3955 (name "python2-rpython")
3956 (version "0.2.1")
3957 (source
3958 (origin
3959 (method url-fetch)
3960 (uri (pypi-uri "rpython" version))
3961 (sha256
3962 (base32
3963 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
3964 (build-system python-build-system)
3965 (arguments `(#:python ,python-2))
3966 (native-inputs
3967 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
3968 (home-page "https://rpython.readthedocs.org")
3969 (synopsis "Framework for implementing interpreters and virtual machines")
3970 (description "RPython is a translation and support framework for
3971 producing implementations of dynamic languages, emphasizing a clean separation
3972 between language specification and implementation aspects.")
3973 (license license:expat)))
3974
3975 ;; NOTE: when upgrading numpy please make sure that python-pandas and
3976 ;; python-scipy still build, as these three packages are often used together.
3977 (define-public python-numpy
3978 (package
3979 (name "python-numpy")
3980 (version "1.17.3")
3981 (source
3982 (origin
3983 (method url-fetch)
3984 (uri (string-append
3985 "https://github.com/numpy/numpy/releases/download/v"
3986 version "/numpy-" version ".tar.gz"))
3987 (sha256
3988 (base32
3989 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
3990 (build-system python-build-system)
3991 (inputs
3992 `(("openblas" ,openblas)
3993 ("lapack" ,lapack)))
3994 (native-inputs
3995 `(("python-cython" ,python-cython)
3996 ("python-pytest" ,python-pytest)
3997 ("gfortran" ,gfortran)))
3998 (arguments
3999 `(#:phases
4000 (modify-phases %standard-phases
4001 (add-before 'build 'configure-blas-lapack
4002 (lambda* (#:key inputs #:allow-other-keys)
4003 (call-with-output-file "site.cfg"
4004 (lambda (port)
4005 (format port
4006 "[openblas]
4007 libraries = openblas
4008 library_dirs = ~a/lib
4009 include_dirs = ~a/include
4010
4011 # backslash-n to make emacs happy
4012 \n[lapack]
4013 lapack_libs = lapack
4014 library_dirs = ~a/lib
4015 include_dirs = ~a/include
4016 "
4017 (assoc-ref inputs "openblas")
4018 (assoc-ref inputs "openblas")
4019 (assoc-ref inputs "lapack")
4020 (assoc-ref inputs "lapack"))))
4021 #t))
4022 (add-before 'build 'fix-executable-paths
4023 (lambda* (#:key inputs #:allow-other-keys)
4024 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4025 ;; instead of /bin/sh.
4026 (substitute* "numpy/distutils/exec_command.py"
4027 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4028 (string-append match-start (assoc-ref inputs "bash") match-end)))
4029 ;; Use "gcc" executable, not "cc".
4030 (substitute* "numpy/distutils/system_info.py"
4031 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4032 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4033 #t))
4034 ;; Tests can only be run after the library has been installed and not
4035 ;; within the source directory.
4036 (delete 'check)
4037 (add-after 'install 'check
4038 (lambda* (#:key outputs inputs #:allow-other-keys)
4039 ;; Make installed package available for running the tests
4040 (add-installed-pythonpath inputs outputs)
4041 ;; Make sure "f2py" etc is found.
4042 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4043 ":" (getenv "PATH")))
4044 (with-directory-excursion "/tmp"
4045 (invoke "python" "-c"
4046 "import numpy; numpy.test(verbose=2)")))))))
4047 (home-page "https://numpy.org")
4048 (synopsis "Fundamental package for scientific computing with Python")
4049 (description "NumPy is the fundamental package for scientific computing
4050 with Python. It contains among other things: a powerful N-dimensional array
4051 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4052 and Fortran code, useful linear algebra, Fourier transform, and random number
4053 capabilities.")
4054 (properties `((python2-variant . ,(delay python2-numpy))))
4055 (license license:bsd-3)))
4056
4057 ;; Numpy 1.16.x are the last versions that support Python 2.
4058 (define-public python2-numpy
4059 (let ((numpy (package-with-python2
4060 (strip-python2-variant python-numpy))))
4061 (package/inherit
4062 numpy
4063 (version "1.16.5")
4064 (source (origin
4065 (method url-fetch)
4066 (uri (string-append
4067 "https://github.com/numpy/numpy/releases/download/v"
4068 version "/numpy-" version ".tar.gz"))
4069 (sha256
4070 (base32
4071 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4072
4073 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4074 ;; interest only for legacy code going back to NumPy's predecessor
4075 ;; Numeric.
4076 (define-public python2-numpy-1.8
4077 (package (inherit python2-numpy)
4078 (version "1.8.2")
4079 (source
4080 (origin
4081 (method git-fetch)
4082 (uri (git-reference
4083 (url "https://github.com/numpy/numpy")
4084 (commit (string-append "v" version))))
4085 (file-name (git-file-name "numpy" version))
4086 (sha256
4087 (base32
4088 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4089 (arguments
4090 (substitute-keyword-arguments (package-arguments python2-numpy)
4091 ((#:phases phases)
4092 `(modify-phases ,phases
4093 (replace 'configure-blas-lapack
4094 (lambda* (#:key inputs #:allow-other-keys)
4095 (call-with-output-file "site.cfg"
4096 (lambda (port)
4097 (format port
4098 "[openblas]
4099 libraries = openblas,lapack
4100 library_dirs = ~a/lib:~a/lib
4101 include_dirs = ~a/include:~a/include
4102 "
4103 (assoc-ref inputs "openblas")
4104 (assoc-ref inputs "lapack")
4105 (assoc-ref inputs "openblas")
4106 (assoc-ref inputs "lapack"))))
4107 #t))))))
4108 (native-inputs
4109 `(("python2-nose" ,python2-nose)))
4110 (description "NumPy is the fundamental package for scientific computing
4111 with Python. It contains among other things: a powerful N-dimensional array
4112 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4113 and Fortran code, useful linear algebra, Fourier transform, and random number
4114 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4115 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4116 Numeric.")
4117 (license license:bsd-3)))
4118
4119 (define-public python-munch
4120 (package
4121 (name "python-munch")
4122 (version "2.0.4")
4123 (source
4124 (origin
4125 (method url-fetch)
4126 (uri (pypi-uri "munch" version))
4127 (sha256
4128 (base32
4129 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4130 (build-system python-build-system)
4131 (home-page "https://github.com/Infinidat/munch")
4132 (synopsis "Dot-accessible dictionary")
4133 (description "Munch is a dot-accessible dictionary similar to JavaScript
4134 objects.")
4135 (license license:expat)))
4136
4137 (define-public python2-munch
4138 (package-with-python2 python-munch))
4139
4140 (define-public python-colormath
4141 (package
4142 (name "python-colormath")
4143 (version "3.0.0")
4144 (source
4145 (origin
4146 (method url-fetch)
4147 (uri (pypi-uri "colormath" version))
4148 (sha256
4149 (base32
4150 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4151 (build-system python-build-system)
4152 (propagated-inputs
4153 `(("python-networkx" ,python-networkx)
4154 ("python-numpy" ,python-numpy)))
4155 (home-page "https://github.com/gtaylor/python-colormath")
4156 (synopsis "Color math and conversion library")
4157 (description
4158 "This is a Python library for color math and conversions.")
4159 (license license:bsd-3)))
4160
4161 (define-public python2-colormath
4162 (package-with-python2 python-colormath))
4163
4164 (define-public python-spectra
4165 (package
4166 (name "python-spectra")
4167 (version "0.0.11")
4168 (source
4169 (origin
4170 (method url-fetch)
4171 (uri (pypi-uri "spectra" version))
4172 (sha256
4173 (base32
4174 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4175 (build-system python-build-system)
4176 (arguments
4177 `(#:phases
4178 (modify-phases %standard-phases
4179 (replace 'check
4180 (lambda _ (invoke "nosetests" "-v"))))))
4181 (propagated-inputs
4182 `(("python-colormath" ,python-colormath)))
4183 (native-inputs
4184 `(("python-nose" ,python-nose)))
4185 (home-page "https://github.com/jsvine/spectra")
4186 (synopsis "Color scales and color conversion")
4187 (description
4188 "This package provides a Python library intended to make color math,
4189 color scales, and color space conversion easy. It has support for:
4190
4191 @enumerate
4192 @item Color scales
4193 @item Color ranges
4194 @item Color blending
4195 @item Brightening/darkening colors
4196 @item Saturating/desaturating colors
4197 @item Conversion to/from multiple color spaces.
4198 @end enumerate\n")
4199 (license license:expat)))
4200
4201 (define-public python2-spectra
4202 (package-with-python2 python-spectra))
4203
4204 (define-public python-numpy-documentation
4205 (package
4206 (name "python-numpy-documentation")
4207 (version (package-version python-numpy))
4208 (source (package-source python-numpy))
4209 (build-system python-build-system)
4210 (native-inputs
4211 `(("python-matplotlib" ,python-matplotlib)
4212 ("python-numpy" ,python-numpy)
4213 ("pkg-config" ,pkg-config)
4214 ("python-sphinx" ,python-sphinx)
4215 ("python-numpydoc" ,python-numpydoc)
4216 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4217 texlive-fonts-ec
4218 texlive-generic-ifxetex
4219 texlive-generic-pdftex
4220 texlive-amsfonts
4221 texlive-latex-capt-of
4222 texlive-latex-cmap
4223 texlive-latex-environ
4224 texlive-latex-eqparbox
4225 texlive-latex-etoolbox
4226 texlive-latex-expdlist
4227 texlive-latex-fancyhdr
4228 texlive-latex-fancyvrb
4229 texlive-latex-fncychap
4230 texlive-latex-float
4231 texlive-latex-framed
4232 texlive-latex-geometry
4233 texlive-latex-graphics
4234 texlive-latex-hyperref
4235 texlive-latex-mdwtools
4236 texlive-latex-multirow
4237 texlive-latex-needspace
4238 texlive-latex-oberdiek
4239 texlive-latex-parskip
4240 texlive-latex-preview
4241 texlive-latex-tabulary
4242 texlive-latex-threeparttable
4243 texlive-latex-titlesec
4244 texlive-latex-trimspaces
4245 texlive-latex-ucs
4246 texlive-latex-upquote
4247 texlive-latex-url
4248 texlive-latex-varwidth
4249 texlive-latex-wrapfig)))
4250 ("texinfo" ,texinfo)
4251 ("perl" ,perl)
4252 ("scipy-sphinx-theme"
4253 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4254 (method git-fetch)
4255 (uri (git-reference
4256 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4257 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4258 (sha256
4259 (base32
4260 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4261 ,@(package-native-inputs python-numpy)))
4262 (arguments
4263 `(#:tests? #f ; we're only generating the documentation
4264 #:phases
4265 (modify-phases %standard-phases
4266 (delete 'build)
4267 (replace 'install
4268 (lambda* (#:key inputs outputs #:allow-other-keys)
4269 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4270 (doc (string-append
4271 data "/doc/" ,name "-"
4272 ,(package-version python-numpy)))
4273 (info-reader (string-append data "/info"))
4274 (html (string-append doc "/html"))
4275 (scipy-sphinx-theme "scipy-sphinx-theme")
4276 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4277 (pyver ,(string-append "PYVER=")))
4278
4279 ;; FIXME: this is needed to for texlive-union to generate
4280 ;; fonts, which are not found.
4281 (setenv "HOME" "/tmp")
4282
4283 (with-directory-excursion "doc"
4284 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4285 (mkdir-p html)
4286 (invoke "make" "html" pyver)
4287 (invoke "make" "latex" "PAPER=a4" pyver)
4288 (invoke "make" "-C" "build/latex"
4289 "all-pdf" "PAPER=a4" pyver)
4290 ;; FIXME: Generation of the info file fails.
4291 ;; (invoke "make" "info" pyver)
4292 ;; (mkdir-p info)
4293 ;; (copy-file "build/texinfo/numpy.info"
4294 ;; (string-append info "/numpy.info"))
4295 (for-each (lambda (file)
4296 (copy-file (string-append "build/latex" file)
4297 (string-append doc file)))
4298 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4299 (with-directory-excursion "build/html"
4300 (for-each (lambda (file)
4301 (let* ((dir (dirname file))
4302 (tgt-dir (string-append html "/" dir)))
4303 (unless (equal? "." dir)
4304 (mkdir-p tgt-dir))
4305 (install-file file html)))
4306 (find-files "." ".*")))))
4307 #t)))))
4308 (home-page (package-home-page python-numpy))
4309 (synopsis "Documentation for the python-numpy package")
4310 (description (package-description python-numpy))
4311 (license (package-license python-numpy))))
4312
4313 (define-public python2-numpy-documentation
4314 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4315 (package
4316 (inherit numpy-documentation)
4317 (native-inputs `(("python2-functools32" ,python2-functools32)
4318 ,@(package-native-inputs numpy-documentation))))))
4319
4320 (define-public python-pygit2
4321 (package
4322 (name "python-pygit2")
4323 (version "1.1.0")
4324 (source
4325 (origin
4326 (method url-fetch)
4327 (uri (pypi-uri "pygit2" version))
4328 (sha256
4329 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4330 (build-system python-build-system)
4331 (arguments
4332 '(#:tests? #f)) ; tests don't run correctly in our environment
4333 (propagated-inputs
4334 `(("python-cached-property" ,python-cached-property)
4335 ("python-cffi" ,python-cffi)
4336 ("libgit2" ,libgit2)))
4337 (native-inputs
4338 `(("python-pytest" ,python-pytest)))
4339 (home-page "https://github.com/libgit2/pygit2")
4340 (synopsis "Python bindings for libgit2")
4341 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4342 library, libgit2 implements Git plumbing.")
4343 ;; GPL2.0 only, with linking exception.
4344 (license license:gpl2)))
4345
4346 (define-public python-pyparsing
4347 (package
4348 (name "python-pyparsing")
4349 (version "2.3.1")
4350 (source
4351 (origin
4352 (method url-fetch)
4353 (uri (pypi-uri "pyparsing" version))
4354 (sha256
4355 (base32 "0yk6xl885b91dmlhlsap7x78hk2rdr879fln9anbq6k4ca42djb6"))))
4356 (build-system python-build-system)
4357 (outputs '("out" "doc"))
4358 (arguments
4359 `(#:tests? #f ; no test target
4360 #:phases
4361 (modify-phases %standard-phases
4362 (add-after 'install 'install-doc
4363 (lambda* (#:key outputs #:allow-other-keys)
4364 (let* ((doc (string-append (assoc-ref outputs "doc")
4365 "/share/doc/" ,name "-" ,version))
4366 (html-doc (string-append doc "/html"))
4367 (examples (string-append doc "/examples")))
4368 (mkdir-p html-doc)
4369 (mkdir-p examples)
4370 (for-each
4371 (lambda (dir tgt)
4372 (map (lambda (file)
4373 (install-file file tgt))
4374 (find-files dir ".*")))
4375 (list "docs" "htmldoc" "examples")
4376 (list doc html-doc examples))
4377 #t))))))
4378 (home-page "https://github.com/pyparsing/pyparsing")
4379 (synopsis "Python parsing class library")
4380 (description
4381 "The pyparsing module is an alternative approach to creating and
4382 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4383 of regular expressions. The pyparsing module provides a library of classes
4384 that client code uses to construct the grammar directly in Python code.")
4385 (license license:expat)))
4386
4387 (define-public python2-pyparsing
4388 (package-with-python2 python-pyparsing))
4389
4390 (define-public python-numpydoc
4391 (package
4392 (name "python-numpydoc")
4393 (version "0.8.0")
4394 (source
4395 (origin
4396 (method url-fetch)
4397 (uri (pypi-uri "numpydoc" version))
4398 (sha256
4399 (base32
4400 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4401 (build-system python-build-system)
4402 (propagated-inputs
4403 `(("python-sphinx" ,python-sphinx)))
4404 (native-inputs
4405 `(("python-nose" ,python-nose)))
4406 (home-page "https://pypi.org/project/numpydoc/")
4407 (synopsis
4408 "Numpy's Sphinx extensions")
4409 (description
4410 "Sphinx extension to support docstrings in Numpy format.")
4411 (license license:bsd-2)))
4412
4413 (define-public python2-numpydoc
4414 (package-with-python2 python-numpydoc))
4415
4416 (define-public python-numexpr
4417 (package
4418 (name "python-numexpr")
4419 (version "2.6.5")
4420 (source
4421 (origin
4422 (method url-fetch)
4423 (uri (pypi-uri "numexpr" version))
4424 (sha256
4425 (base32
4426 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4427 (build-system python-build-system)
4428 (arguments `(#:tests? #f)) ; no tests included
4429 (propagated-inputs
4430 `(("python-numpy" ,python-numpy)))
4431 (home-page "https://github.com/pydata/numexpr")
4432 (synopsis "Fast numerical expression evaluator for NumPy")
4433 (description
4434 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4435 expressions that operate on arrays are accelerated and use less memory than
4436 doing the same calculation in Python. In addition, its multi-threaded
4437 capabilities can make use of all your cores, which may accelerate
4438 computations, most specially if they are not memory-bounded (e.g. those using
4439 transcendental functions).")
4440 (license license:expat)))
4441
4442 (define-public python2-numexpr
4443 (package-with-python2 python-numexpr))
4444
4445 (define-public python-cycler
4446 (package
4447 (name "python-cycler")
4448 (version "0.10.0")
4449 (source (origin
4450 (method url-fetch)
4451 (uri (pypi-uri "cycler" version))
4452 (sha256
4453 (base32
4454 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4455 (build-system python-build-system)
4456 (arguments
4457 ;; XXX: The current version requires 'coveralls' which we don't have.
4458 ;; Enable this for the next release which uses 'python-pytest'.
4459 '(#:tests? #f))
4460 (propagated-inputs
4461 `(("python-six" ,python-six)))
4462 (home-page "http://matplotlib.org/cycler/")
4463 (synopsis "Composable keyword argument iterator")
4464 (description
4465 "When using @code{matplotlib} and plotting more than one line, it is
4466 common to want to be able to want to be able to cycle over one or more artist
4467 styles; but the plotting logic can quickly become involved.
4468 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4469 @code{Cycler} class was developed.")
4470 (license license:bsd-3)))
4471
4472 (define-public python2-cycler
4473 (package-with-python2 python-cycler))
4474
4475 (define-public python-colorspacious
4476 (package
4477 (name "python-colorspacious")
4478 (version "1.1.2")
4479 (source
4480 (origin
4481 (method git-fetch)
4482 (uri (git-reference
4483 (url "https://github.com/njsmith/colorspacious.git")
4484 (commit (string-append "v" version))))
4485 (file-name (git-file-name name version))
4486 (sha256
4487 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4488 (build-system python-build-system)
4489 (propagated-inputs
4490 `(("python-numpy" ,python-numpy)))
4491 (native-inputs
4492 `(("python-nose" ,python-nose)))
4493 (arguments
4494 `(#:phases
4495 (modify-phases %standard-phases
4496 (replace 'check
4497 (lambda _
4498 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4499 (home-page "https://github.com/njsmith/colorspacious")
4500 (synopsis "Python library for colorspace conversions")
4501 (description "@code{colorspacious} is a Python library that lets you
4502 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4503 (license license:expat)))
4504
4505 (define-public python2-colorspacious
4506 (package-with-python2 python-colorspacious))
4507
4508 (define-public python-matplotlib
4509 (package
4510 (name "python-matplotlib")
4511 (version "3.1.2")
4512 (source
4513 (origin
4514 (method url-fetch)
4515 (uri (pypi-uri "matplotlib" version))
4516 (sha256
4517 (base32
4518 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4519 (build-system python-build-system)
4520 (propagated-inputs ; the following packages are all needed at run time
4521 `(("python-cycler" ,python-cycler)
4522 ("python-kiwisolver" ,python-kiwisolver)
4523 ("python-pyparsing" ,python-pyparsing)
4524 ("python-pygobject" ,python-pygobject)
4525 ("gobject-introspection" ,gobject-introspection)
4526 ("python-tkinter" ,python "tk")
4527 ("python-dateutil" ,python-dateutil)
4528 ("python-numpy" ,python-numpy)
4529 ("python-pillow" ,python-pillow)
4530 ("python-pytz" ,python-pytz)
4531 ("python-six" ,python-six)
4532 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4533 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4534 ;; object. For this reason we need to import both libraries.
4535 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4536 ("python-pycairo" ,python-pycairo)
4537 ("python-cairocffi" ,python-cairocffi)))
4538 (inputs
4539 `(("libpng" ,libpng)
4540 ("imagemagick" ,imagemagick)
4541 ("freetype" ,freetype)
4542 ("cairo" ,cairo)
4543 ("glib" ,glib)
4544 ;; FIXME: Add backends when available.
4545 ;("python-wxpython" ,python-wxpython)
4546 ("tcl" ,tcl)
4547 ("tk" ,tk)))
4548 (native-inputs
4549 `(("pkg-config" ,pkg-config)
4550 ("python-pytest" ,python-pytest)
4551 ("python-mock" ,python-mock)
4552 ("unzip" ,unzip)
4553 ("jquery-ui"
4554 ,(origin
4555 (method url-fetch)
4556 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4557 (sha256
4558 (base32
4559 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4560 (arguments
4561 `(#:phases
4562 (modify-phases %standard-phases
4563 ;; XXX We disable all image comparison tests because we're using a
4564 ;; newer version of FreeType than matplotlib expects. This leads to
4565 ;; minor differences throughout the tests.
4566 (add-after 'unpack 'fix-and-disable-failing-tests
4567 (lambda _
4568 (substitute* (append (find-files "lib/matplotlib/tests/"
4569 "test_.*\\.py$")
4570 (find-files "lib/mpl_toolkits/tests"
4571 "test_.*\\.py$"))
4572 (("^from matplotlib" match)
4573 (string-append "import pytest\n" match))
4574 (("( *)@image_comparison" match indent)
4575 (string-append indent
4576 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4577 match)))
4578 (substitute* "lib/matplotlib/tests/test_animation.py"
4579 (("/bin/sh") (which "sh")))
4580 (for-each delete-file
4581 ;; test_normal_axes, test_get_tightbbox_polar
4582 '("lib/matplotlib/tests/test_axes.py"
4583 ;; We don't use the webagg backend and this test forces it.
4584 "lib/matplotlib/tests/test_backend_webagg.py"
4585 ;; test_outward_ticks
4586 "lib/matplotlib/tests/test_tightlayout.py"
4587 ;; test_hidden_axes fails with minor extent
4588 ;; differences, possibly due to the use of a
4589 ;; different version of FreeType.
4590 "lib/matplotlib/tests/test_constrainedlayout.py"
4591 ;; Fontconfig returns no fonts.
4592 "lib/matplotlib/tests/test_font_manager.py"))
4593 #t))
4594 (add-before 'install 'install-jquery-ui
4595 (lambda* (#:key outputs inputs #:allow-other-keys)
4596 (let ((dir (string-append (assoc-ref outputs "out")
4597 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4598 (mkdir-p dir)
4599 (invoke "unzip"
4600 (assoc-ref inputs "jquery-ui")
4601 "-d" dir))
4602 #t))
4603 (replace 'check
4604 (lambda* (#:key outputs inputs #:allow-other-keys)
4605 (add-installed-pythonpath inputs outputs)
4606 (invoke "python" "tests.py" "-v"
4607 "-m" "not network and not webagg")))
4608 (add-before 'build 'configure-environment
4609 (lambda* (#:key outputs inputs #:allow-other-keys)
4610 (let ((cairo (assoc-ref inputs "cairo")))
4611 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4612 ;; has not effect.
4613 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4614 (setenv "HOME" (getcwd))
4615 (call-with-output-file "setup.cfg"
4616 (lambda (port)
4617 (format port "[directories]~%
4618 basedirlist = ~a,~a~%
4619 [packages]~%
4620 tests = True~%"
4621 (assoc-ref inputs "tcl")
4622 (assoc-ref inputs "tk")))))
4623 #t)))))
4624 (home-page "https://matplotlib.org/")
4625 (synopsis "2D plotting library for Python")
4626 (description
4627 "Matplotlib is a Python 2D plotting library which produces publication
4628 quality figures in a variety of hardcopy formats and interactive environments
4629 across platforms. Matplotlib can be used in Python scripts, the python and
4630 ipython shell, web application servers, and six graphical user interface
4631 toolkits.")
4632 (license license:psfl)
4633 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4634
4635 (define-public python2-matplotlib
4636 (let ((matplotlib (package-with-python2
4637 (strip-python2-variant python-matplotlib))))
4638 (package (inherit matplotlib)
4639 (version "2.2.4")
4640 (source
4641 (origin
4642 (method url-fetch)
4643 (uri (pypi-uri "matplotlib" version))
4644 (sha256
4645 (base32
4646 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4647 (arguments
4648 (substitute-keyword-arguments (package-arguments matplotlib)
4649 ((#:phases phases)
4650 `(modify-phases ,phases
4651 (replace 'install-jquery-ui
4652 (lambda* (#:key outputs inputs #:allow-other-keys)
4653 (let ((dir (string-append (assoc-ref outputs "out")
4654 "/lib/python2.7/site-packages/"
4655 "matplotlib/backends/web_backend/")))
4656 (mkdir-p dir)
4657 (invoke "unzip"
4658 (assoc-ref inputs "jquery-ui")
4659 "-d" dir))
4660 #t))
4661 (delete 'fix-and-disable-failing-tests)
4662 (delete 'check))))) ; These tests weren't run the the past.
4663 ;; Make sure to use special packages for Python 2 instead
4664 ;; of those automatically rewritten by package-with-python2.
4665 (propagated-inputs
4666 `(("python2-pycairo" ,python2-pycairo)
4667 ("python2-backports-functools-lru-cache"
4668 ,python2-backports-functools-lru-cache)
4669 ("python2-functools32" ,python2-functools32)
4670 ("python2-pygobject-2" ,python2-pygobject-2)
4671 ("python2-subprocess32" ,python2-subprocess32)
4672 ("python2-tkinter" ,python-2 "tk")
4673 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4674 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4675
4676 (define-public python-matplotlib-documentation
4677 (package
4678 (name "python-matplotlib-documentation")
4679 (version (package-version python-matplotlib))
4680 (source (package-source python-matplotlib))
4681 (build-system python-build-system)
4682 (native-inputs
4683 `(("python-matplotlib" ,python-matplotlib)
4684 ("python-colorspacious" ,python-colorspacious)
4685 ("python-sphinx" ,python-sphinx)
4686 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4687 ("python-sphinx-gallery" ,python-sphinx-gallery)
4688 ("python-numpydoc" ,python-numpydoc)
4689 ("python-ipython" ,python-ipython)
4690 ("python-ipykernel" ,python-ipykernel)
4691 ("python-mock" ,python-mock)
4692 ("graphviz" ,graphviz)
4693 ("texlive" ,(texlive-union (list texlive-amsfonts
4694 texlive-latex-amsmath
4695 texlive-latex-enumitem
4696 texlive-latex-expdlist
4697 texlive-latex-geometry
4698 texlive-latex-preview
4699 texlive-latex-type1cm
4700 texlive-latex-ucs
4701
4702 texlive-generic-pdftex
4703
4704 texlive-fonts-ec
4705 texlive-fonts-adobe-times
4706 texlive-fonts-txfonts)))
4707 ("texinfo" ,texinfo)
4708 ,@(package-native-inputs python-matplotlib)))
4709 (arguments
4710 `(#:tests? #f ; we're only generating documentation
4711 #:phases
4712 (modify-phases %standard-phases
4713 ;; The tests in python-matplotlib are run after the install phase, so
4714 ;; we need to delete the extra phase here.
4715 (delete 'check)
4716 (replace 'build
4717 (lambda _
4718 (chdir "doc")
4719 (setenv "PYTHONPATH"
4720 (string-append (getenv "PYTHONPATH")
4721 ":" (getcwd) "/../examples/units"))
4722 (substitute* "conf.py"
4723 ;; Don't use git.
4724 (("^SHA = check_output.*")
4725 (string-append "SHA = \"" ,version "\"\n"))
4726 ;; Don't fetch intersphinx files from the Internet
4727 (("^explicit_order_folders" m)
4728 (string-append "intersphinx_mapping = {}\n" m))
4729 (("'sphinx.ext.intersphinx',") "")
4730 ;; Disable URL embedding which requires internet access.
4731 (("'https://docs.scipy.org/doc/numpy'") "None")
4732 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4733 (invoke "make"
4734 "SPHINXBUILD=sphinx-build"
4735 "SPHINXOPTS=" ; don't abort on warnings
4736 "html" "texinfo")))
4737 (replace 'install
4738 (lambda* (#:key inputs outputs #:allow-other-keys)
4739 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4740 (doc (string-append data "/doc/python-matplotlib-" ,version))
4741 (info (string-append data "/info"))
4742 (html (string-append doc "/html")))
4743 (mkdir-p html)
4744 (mkdir-p info)
4745 (copy-recursively "build/html" html)
4746 (symlink (string-append html "/_images")
4747 (string-append info "/matplotlib-figures"))
4748 (with-directory-excursion "build/texinfo"
4749 (substitute* "matplotlib.texi"
4750 (("@image\\{([^,]*)" all file)
4751 (string-append "@image{matplotlib-figures/" file)))
4752 (symlink (string-append html "/_images")
4753 "./matplotlib-figures")
4754 (invoke "makeinfo" "--no-split"
4755 "-o" "matplotlib.info" "matplotlib.texi"))
4756 (install-file "build/texinfo/matplotlib.info" info))
4757 #t)))))
4758 (home-page (package-home-page python-matplotlib))
4759 (synopsis "Documentation for the python-matplotlib package")
4760 (description (package-description python-matplotlib))
4761 (license (package-license python-matplotlib))))
4762
4763 (define-public python2-matplotlib-documentation
4764 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4765 (package
4766 (inherit parent)
4767 (native-inputs
4768 (alist-delete "python-sphinx-copybutton"
4769 (package-native-inputs parent))))))
4770
4771 (define-public python-matplotlib-venn
4772 (package
4773 (name "python-matplotlib-venn")
4774 (version "0.11.5")
4775 (source
4776 (origin
4777 (method url-fetch)
4778 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4779 (sha256
4780 (base32
4781 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4782 (build-system python-build-system)
4783 (arguments '(#:tests? #f)) ; tests are not included
4784 (propagated-inputs
4785 `(("python-matplotlib" ,python-matplotlib)
4786 ("python-numpy" ,python-numpy)
4787 ("python-scipy" ,python-scipy)))
4788 (native-inputs
4789 `(("unzip" ,unzip)))
4790 (home-page "https://github.com/konstantint/matplotlib-venn")
4791 (synopsis "Plot area-proportional Venn diagrams")
4792 (description
4793 "This package provides tools for plotting area-proportional two- and
4794 three-way Venn diagrams in @code{matplotlib}.")
4795 (license license:expat)))
4796
4797 (define-public python2-pysnptools
4798 (package
4799 (name "python2-pysnptools")
4800 (version "0.3.13")
4801 (source
4802 (origin
4803 (method url-fetch)
4804 (uri (pypi-uri "pysnptools" version))
4805 (sha256
4806 (base32
4807 "0lnis5xsl7bi0hz4f7gbicahzi5zlxkc21nk3g374xv8fb5hb3qm"))))
4808 (build-system python-build-system)
4809 (arguments
4810 `(#:python ,python-2 ; only Python 2.7 is supported
4811 #:tests? #f)) ; test files (e.g. examples/toydata.bim) not included
4812 (propagated-inputs
4813 `(("python2-numpy" ,python2-numpy)
4814 ("python2-scipy" ,python2-scipy)
4815 ("python2-pandas" ,python2-pandas)))
4816 (native-inputs
4817 `(("python2-cython" ,python2-cython)))
4818 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4819 (synopsis "Library for reading and manipulating genetic data")
4820 (description
4821 "PySnpTools is a library for reading and manipulating genetic data. It
4822 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4823 those files. It can also efficiently manipulate ranges of integers using set
4824 operators such as union, intersection, and difference.")
4825 (license license:asl2.0)))
4826
4827 (define-public python-socksipy-branch
4828 (package
4829 (name "python-socksipy-branch")
4830 (version "1.01")
4831 (source
4832 (origin
4833 (method url-fetch)
4834 (uri (pypi-uri "SocksiPy-branch" version))
4835 (sha256
4836 (base32
4837 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4838 (build-system python-build-system)
4839 (arguments
4840 `(#:tests? #f)) ; There are no tests
4841 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4842 (synopsis "Python SOCKS module")
4843 (description
4844 "SocksiPy - A Python SOCKS client module. It provides a
4845 socket-like interface that supports connections to any TCP
4846 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4847 The original version was developed by Dan Haim, this is a
4848 branch created by Mario Vilas to address some open issues,
4849 as the original project seems to have been abandoned circa 2007.")
4850 (license license:bsd-3)))
4851
4852 (define-public python2-socksipy-branch
4853 (package-with-python2 python-socksipy-branch))
4854
4855 (define-public python-socksipychain
4856 (let ((commit "eb5ee8741ce006ac0c5c3e2e83204062c348c155")
4857 (revision "1")
4858 (version "2.1.1"))
4859 (package
4860 (name "python-socksipychain")
4861 (version (git-version version revision commit))
4862 (source
4863 (origin
4864 (method git-fetch)
4865 (uri (git-reference
4866 (url "https://github.com/pagekite/PySocksipyChain.git")
4867 (commit commit)))
4868 (file-name (git-file-name name version))
4869 (sha256
4870 (base32
4871 "0fpphn6xnpm7qk8a914s4abycsbq9w6qkci07my632v0fylnm5n7"))))
4872 (build-system python-build-system)
4873 (arguments
4874 `(#:tests? #f)) ; Tests try to access the network.
4875 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
4876 (synopsis "Python SOCKS module with chained proxies support")
4877 (description
4878 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
4879 adds support for arbitrary chaining of proxy servers and various modes of
4880 TLS/SSL encryption. It was developed for use in PageKite, and also includes
4881 a simple netcat replacement with chaining support.")
4882 (license license:bsd-3))))
4883
4884 (define-public python-pycodestyle
4885 (package
4886 (name "python-pycodestyle")
4887 (version "2.5.0")
4888 (source
4889 (origin
4890 (method url-fetch)
4891 (uri (pypi-uri "pycodestyle" version))
4892 (sha256
4893 (base32
4894 "0v4prb05n21bm8650v0a01k1nyqjdmkrsm3zycfxh2j5k9n962p4"))))
4895 (build-system python-build-system)
4896 (home-page "https://pycodestyle.readthedocs.io/")
4897 (synopsis "Python style guide checker")
4898 (description "@code{pycodestyle} (formerly pep8) is a tool to check
4899 Python code against some of the style conventions in
4900 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
4901 (license license:expat)))
4902
4903 (define-public python2-pycodestyle
4904 (package-with-python2 python-pycodestyle))
4905
4906 (define-public python-multidict
4907 (package
4908 (name "python-multidict")
4909 (version "4.7.5")
4910 (source
4911 (origin
4912 (method url-fetch)
4913 (uri (pypi-uri "multidict" version))
4914 (sha256
4915 (base32
4916 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
4917 (build-system python-build-system)
4918 (arguments
4919 '(#:modules ((ice-9 ftw)
4920 (srfi srfi-1)
4921 (srfi srfi-26)
4922 (guix build utils)
4923 (guix build python-build-system))
4924 #:phases (modify-phases %standard-phases
4925 (replace 'check
4926 (lambda* (#:key tests? #:allow-other-keys)
4927 (if tests?
4928 (begin
4929 (let ((libdir (find (cut string-prefix? "lib." <>)
4930 (scandir "build"))))
4931 (setenv "PYTHONPATH"
4932 (string-append "./build/" libdir ":"
4933 (getenv "PYTHONPATH")))
4934 (invoke "pytest" "-vv")))
4935 (format #t "test suite not run~%"))
4936 #t)))))
4937 (native-inputs
4938 `(("python-pytest" ,python-pytest)
4939 ("python-pytest-cov" ,python-pytest-cov)))
4940 (home-page "https://github.com/aio-libs/multidict/")
4941 (synopsis "Multidict implementation")
4942 (description "Multidict is dict-like collection of key-value pairs
4943 where key might be occurred more than once in the container.")
4944 (license license:asl2.0)))
4945
4946 (define-public python-orderedmultidict
4947 (package
4948 (name "python-orderedmultidict")
4949 (version "0.7.11")
4950 (source
4951 (origin
4952 (method url-fetch)
4953 (uri (pypi-uri "orderedmultidict" version))
4954 (sha256
4955 (base32
4956 "0dls862ibm7qbq4fnvwx0xn1v9hwyzywbff8xjjdr42dd75208yw"))))
4957 (build-system python-build-system)
4958 (arguments
4959 `(#:phases
4960 (modify-phases %standard-phases
4961 (add-after 'unpack 'fix-tests
4962 (lambda _
4963 ;; The package uses nosetest for running the tests.
4964 ;; Adding this initfile allows to run the test suite
4965 ;; without requiring nosetest.
4966 (with-output-to-file "tests/__init__.py" newline)
4967 #t)))))
4968 (propagated-inputs
4969 `(("python-six" ,python-six)))
4970 (native-inputs
4971 `(("python-pycodestyle" ,python-pycodestyle)))
4972 (home-page "https://github.com/gruns/orderedmultidict")
4973 (synopsis "Python Ordered Multivalue Dictionary - omdict")
4974 (description "This package contains a library for ordered multivalue
4975 dictionaries. A multivalue dictionary is a dictionary that can store
4976 multiple values for the same key. An ordered multivalue dictionary is a
4977 multivalue dictionary that retains the order of insertions and deletions.")
4978 (license license:unlicense)))
4979
4980 (define-public python2-orderedmultidict
4981 (package-with-python2 python-orderedmultidict))
4982
4983 (define-public python-autopep8
4984 (package
4985 (name "python-autopep8")
4986 (version "1.3.5")
4987 (source
4988 (origin
4989 (method url-fetch)
4990 (uri (pypi-uri "autopep8" version))
4991 (sha256
4992 (base32
4993 "192bvhzi4d0claqxgzymvv7k3qnj627742bc8sgxpzjj42pd9112"))))
4994 (build-system python-build-system)
4995 (propagated-inputs
4996 `(("python-pycodestyle" ,python-pycodestyle)))
4997 (home-page "https://github.com/hhatto/autopep8")
4998 (synopsis "Format Python code according to the PEP 8 style guide")
4999 (description
5000 "@code{autopep8} automatically formats Python code to conform to
5001 the PEP 8 style guide. It uses the pycodestyle utility to determine
5002 what parts of the code needs to be formatted. @code{autopep8} is
5003 capable of fixing most of the formatting issues that can be reported
5004 by pycodestyle.")
5005 (license (license:non-copyleft
5006 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5007
5008 (define-public python2-autopep8
5009 (package-with-python2 python-autopep8))
5010
5011 (define-public python-distlib
5012 (package
5013 (name "python-distlib")
5014 (version "0.3.0")
5015 (source
5016 (origin
5017 (method url-fetch)
5018 (uri (pypi-uri "distlib" version ".zip"))
5019 (sha256
5020 (base32
5021 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5022 (build-system python-build-system)
5023 (arguments
5024 `(#:phases
5025 (modify-phases %standard-phases
5026 (add-before 'build 'no-/bin/sh
5027 (lambda _
5028 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5029 (("/bin/sh") (which "sh")))
5030 #t))
5031 (add-before 'check 'prepare-test-env
5032 (lambda _
5033 (setenv "HOME" "/tmp")
5034 ;; NOTE: Any value works, the variable just has to be present.
5035 (setenv "SKIP_ONLINE" "1")
5036 #t)))))
5037 (native-inputs `(("unzip" ,unzip)))
5038 (home-page "https://bitbucket.org/pypa/distlib")
5039 (synopsis "Distribution utilities")
5040 (description "Distlib is a library which implements low-level functions that
5041 relate to packaging and distribution of Python software. It is intended to be
5042 used as the basis for third-party packaging tools.")
5043 (license license:psfl)))
5044
5045 (define-public python-distutils-extra
5046 (package
5047 (name "python-distutils-extra")
5048 (version "2.38")
5049 (source
5050 (origin
5051 (method url-fetch)
5052 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5053 version "/+download/python-distutils-extra-"
5054 version ".tar.gz"))
5055 (sha256
5056 (base32
5057 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5058 (build-system python-build-system)
5059 (home-page "https://launchpad.net/python-distutils-extra/")
5060 (synopsis "Enhancements to Python's distutils")
5061 (description
5062 "The python-distutils-extra module enables you to easily integrate
5063 gettext support, themed icons, and scrollkeeper-based documentation into
5064 Python's distutils.")
5065 (license license:gpl2)))
5066
5067 (define-public python2-distutils-extra
5068 (package-with-python2 python-distutils-extra))
5069
5070 (define-public python2-elib.intl
5071 (package
5072 (name "python2-elib.intl")
5073 (version "0.0.3")
5074 (source
5075 (origin
5076 ;; This project doesn't tag releases or publish tarballs, so we take
5077 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5078 (method git-fetch)
5079 (uri (git-reference
5080 (url "https://github.com/dieterv/elib.intl.git")
5081 (commit "d09997cfef")))
5082 (file-name (string-append name "-" version "-checkout"))
5083 (sha256
5084 (base32
5085 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5086 (build-system python-build-system)
5087 (arguments
5088 ;; incompatible with Python 3 (exception syntax)
5089 `(#:python ,python-2
5090 #:tests? #f))
5091 (home-page "https://github.com/dieterv/elib.intl")
5092 (synopsis "Enhanced internationalization for Python")
5093 (description
5094 "The elib.intl module provides enhanced internationalization (I18N)
5095 services for your Python modules and applications.")
5096 (license license:lgpl3+)))
5097
5098 (define-public python-olefile
5099 (package
5100 (name "python-olefile")
5101 (version "0.46")
5102 (source
5103 (origin
5104 (method url-fetch)
5105 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5106 "download/v" version "/olefile-" version ".tar.gz"))
5107 (file-name (string-append name "-" version ".tar.gz"))
5108 (sha256
5109 (base32
5110 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5111 (build-system python-build-system)
5112 (home-page "https://www.decalage.info/python/olefileio")
5113 (synopsis "Read and write Microsoft OLE2 files.")
5114 (description
5115 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5116 Storage or Compound Document, Microsoft Office). It is an improved version of
5117 the OleFileIO module from PIL, the Python Image Library.")
5118 (license license:bsd-3)))
5119
5120 (define-public python2-olefile
5121 (package-with-python2 python-olefile))
5122
5123 (define-public python-pillow
5124 (package
5125 (name "python-pillow")
5126 (version "6.2.1")
5127 (source
5128 (origin
5129 (method url-fetch)
5130 (uri (pypi-uri "Pillow" version))
5131 (sha256
5132 (base32
5133 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5134 (build-system python-build-system)
5135 (native-inputs
5136 `(("python-pytest" ,python-pytest)))
5137 (inputs
5138 `(("freetype" ,freetype)
5139 ("lcms" ,lcms)
5140 ("libjpeg" ,libjpeg)
5141 ("libtiff" ,libtiff)
5142 ("libwebp" ,libwebp)
5143 ("openjpeg" ,openjpeg)
5144 ("zlib" ,zlib)))
5145 (propagated-inputs
5146 `(("python-olefile" ,python-olefile)))
5147 (arguments
5148 `(#:phases
5149 (modify-phases %standard-phases
5150 (add-after 'unpack 'patch-ldconfig
5151 (lambda _
5152 (substitute* "setup.py"
5153 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5154 (replace 'check
5155 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5156 (if tests?
5157 (begin
5158 (setenv "HOME" (getcwd))
5159 ;; Make installed package available for running the tests.
5160 (add-installed-pythonpath inputs outputs)
5161 (invoke "python" "selftest.py" "--installed")
5162 (invoke "python" "-m" "pytest" "-vv"))
5163 #t))))))
5164 (home-page "https://python-pillow.org")
5165 (synopsis "Fork of the Python Imaging Library")
5166 (description
5167 "The Python Imaging Library adds image processing capabilities to your
5168 Python interpreter. This library provides extensive file format support, an
5169 efficient internal representation, and fairly powerful image processing
5170 capabilities. The core image library is designed for fast access to data
5171 stored in a few basic pixel formats. It should provide a solid foundation for
5172 a general image processing tool.")
5173 (license (license:x11-style
5174 "http://www.pythonware.com/products/pil/license.htm"
5175 "The PIL Software License"))))
5176
5177 (define-public python2-pillow
5178 (package-with-python2 python-pillow))
5179
5180 (define-public python-pycparser
5181 (package
5182 (name "python-pycparser")
5183 (version "2.19")
5184 (source
5185 (origin
5186 (method url-fetch)
5187 (uri (pypi-uri "pycparser" version))
5188 (sha256
5189 (base32
5190 "1cr5dcj9628lkz1qlwq3fv97c25363qppkmcayqvd05dpy573259"))))
5191 (outputs '("out" "doc"))
5192 (build-system python-build-system)
5193 (native-inputs
5194 `(("pkg-config" ,pkg-config)))
5195 (arguments
5196 `(#:phases
5197 (modify-phases %standard-phases
5198 (replace 'check
5199 (lambda _
5200 (with-directory-excursion "tests"
5201 (invoke "python" "all_tests.py"))
5202 #t))
5203 (add-after 'install 'install-doc
5204 (lambda* (#:key outputs #:allow-other-keys)
5205 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5206 (doc (string-append data "/doc/" ,name "-" ,version))
5207 (examples (string-append doc "/examples")))
5208 (mkdir-p examples)
5209 (for-each (lambda (file)
5210 (copy-file (string-append "." file)
5211 (string-append doc file)))
5212 '("/README.rst" "/CHANGES" "/LICENSE"))
5213 (copy-recursively "examples" examples)
5214 #t))))))
5215 (home-page "https://github.com/eliben/pycparser")
5216 (synopsis "C parser in Python")
5217 (description
5218 "Pycparser is a complete parser of the C language, written in pure Python
5219 using the PLY parsing library. It parses C code into an AST and can serve as
5220 a front-end for C compilers or analysis tools.")
5221 (license license:bsd-3)))
5222
5223 (define-public python2-pycparser
5224 (package-with-python2 python-pycparser))
5225
5226 (define-public python-pywavelets
5227 (package
5228 (name "python-pywavelets")
5229 (version "1.0.1")
5230 (home-page "https://github.com/PyWavelets/pywt")
5231 (source (origin
5232 (method url-fetch)
5233 (uri (pypi-uri "PyWavelets" version))
5234 (sha256
5235 (base32
5236 "1p3qv2v66ghnqrb1f98wyyhp9dz71jwcd6kfpsax65sfdpiyqp1w"))))
5237 (build-system python-build-system)
5238 (arguments
5239 '(#:modules ((ice-9 ftw)
5240 (srfi srfi-1)
5241 (srfi srfi-26)
5242 (guix build utils)
5243 (guix build python-build-system))
5244 #:phases (modify-phases %standard-phases
5245 (replace 'check
5246 (lambda _
5247 (let ((cwd (getcwd))
5248 (libdir (find (cut string-prefix? "lib." <>)
5249 (scandir "build"))))
5250 (with-directory-excursion (string-append cwd "/build/" libdir)
5251 (invoke "nosetests" "-v" "."))))))))
5252 (native-inputs
5253 `(("python-matplotlib" ,python-matplotlib) ;for tests
5254 ("python-nose" ,python-nose)))
5255 (propagated-inputs
5256 `(("python-numpy" ,python-numpy)))
5257 (synopsis "Wavelet transforms in Python")
5258 (description
5259 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5260 mathematical basis functions that are localized in both time and frequency.
5261 Wavelet transforms are time-frequency transforms employing wavelets. They are
5262 similar to Fourier transforms, the difference being that Fourier transforms are
5263 localized only in frequency instead of in time and frequency.")
5264 (license license:expat)))
5265
5266 (define-public python2-pywavelets
5267 (package-with-python2 python-pywavelets))
5268
5269 (define-public python-pywinrm
5270 (package
5271 (name "python-pywinrm")
5272 (version "0.4.1")
5273 (source
5274 (origin
5275 (method url-fetch)
5276 (uri (pypi-uri "pywinrm" version))
5277 (sha256
5278 (base32
5279 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5280 (build-system python-build-system)
5281 (propagated-inputs
5282 `(("python-six" ,python-six)
5283 ("python-requests_ntlm" ,python-requests_ntlm)
5284 ("python-xmltodict" ,python-xmltodict)
5285 ("python-kerberos" ,python-kerberos)))
5286 (native-inputs
5287 `(("python-mock" ,python-mock)
5288 ("python-pytest" ,python-pytest)))
5289 (home-page "https://github.com/diyan/pywinrm/")
5290 (synopsis
5291 "Python library for Windows Remote Management (WinRM)")
5292 (description
5293 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5294 service. It allows you to invoke commands on target Windows machines from
5295 any machine that can run Python.")
5296 (license license:expat)))
5297
5298 (define-public python-xcffib
5299 (package
5300 (name "python-xcffib")
5301 (version "0.6.0")
5302 (source
5303 (origin
5304 (method url-fetch)
5305 (uri (pypi-uri "xcffib" version))
5306 (sha256
5307 (base32
5308 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5309 (build-system python-build-system)
5310 (inputs
5311 `(("libxcb" ,libxcb)))
5312 (propagated-inputs
5313 `(("python-cffi" ,python-cffi) ; used at run time
5314 ("python-six" ,python-six)))
5315 (arguments
5316 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5317 #:tests? #f
5318 #:phases
5319 (modify-phases %standard-phases
5320 (add-after 'unpack 'fix-libxcb-path
5321 (lambda* (#:key inputs #:allow-other-keys)
5322 (let ((libxcb (assoc-ref inputs "libxcb")))
5323 (substitute* '("xcffib/__init__.py")
5324 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5325 #t)))
5326 (add-after 'install 'install-doc
5327 (lambda* (#:key outputs #:allow-other-keys)
5328 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5329 "/doc/" ,name "-" ,version)))
5330 (mkdir-p doc)
5331 (copy-file "README.md"
5332 (string-append doc "/README.md"))
5333 #t))))))
5334 (home-page "https://github.com/tych0/xcffib")
5335 (synopsis "XCB Python bindings")
5336 (description
5337 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5338 support for Python 3 and PyPy. It is based on cffi.")
5339 (license license:expat)))
5340
5341 (define-public python2-xcffib
5342 (package-with-python2 python-xcffib))
5343
5344 (define-public python-cairocffi
5345 (package
5346 (name "python-cairocffi")
5347 (version "0.9.0")
5348 (source
5349 (origin
5350 (method url-fetch)
5351 (uri (pypi-uri "cairocffi" version))
5352 (sha256
5353 (base32
5354 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5355 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5356 (build-system python-build-system)
5357 (outputs '("out" "doc"))
5358 (inputs
5359 `(("glib" ,glib)
5360 ("gtk+" ,gtk+)
5361 ("gdk-pixbuf" ,gdk-pixbuf)
5362 ("cairo" ,cairo)
5363 ("pango" ,pango)))
5364 (native-inputs
5365 `(("pkg-config" ,pkg-config)
5366 ("python-pytest" ,python-pytest)
5367 ("python-pytest-cov" ,python-pytest-cov)
5368 ("python-pytest-runner" ,python-pytest-runner)
5369 ("python-sphinx" ,python-sphinx)
5370 ("python-docutils" ,python-docutils)))
5371 (propagated-inputs
5372 `(("python-xcffib" ,python-xcffib))) ; used at run time
5373 (arguments
5374 `(#:phases
5375 (modify-phases %standard-phases
5376 (add-after 'unpack 'patch-paths
5377 (lambda* (#:key inputs outputs #:allow-other-keys)
5378 (substitute* (find-files "." "\\.py$")
5379 (("dlopen\\(ffi, 'cairo'")
5380 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5381 "/lib/libcairo.so.2'"))
5382 (("dlopen\\(ffi, 'gdk-3'")
5383 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5384 "/lib/libgtk-3.so.0'"))
5385 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5386 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5387 "/lib/libgdk_pixbuf-2.0.so.0'"))
5388 (("dlopen\\(ffi, 'glib-2.0'")
5389 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5390 "/lib/libglib-2.0.so.0'"))
5391 (("dlopen\\(ffi, 'gobject-2.0'")
5392 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5393 "/lib/libgobject-2.0.so.0'"))
5394 (("dlopen\\(ffi, 'pangocairo-1.0'")
5395 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5396 "/lib/libpangocairo-1.0.so.0'"))
5397 (("dlopen\\(ffi, 'pango-1.0'")
5398 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5399 "/lib/libpango-1.0.so.0'")))
5400 #t))
5401 (add-after 'install 'install-doc
5402 (lambda* (#:key inputs outputs #:allow-other-keys)
5403 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5404 (doc (string-append data "/doc/" ,name "-" ,version))
5405 (html (string-append doc "/html")))
5406 (setenv "LD_LIBRARY_PATH"
5407 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5408 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5409 (setenv "LANG" "en_US.UTF-8")
5410 (mkdir-p html)
5411 (for-each (lambda (file)
5412 (copy-file (string-append "." file)
5413 (string-append doc file)))
5414 '("/README.rst" "/CHANGES" "/LICENSE"))
5415 (system* "python" "setup.py" "build_sphinx")
5416 (copy-recursively "docs/_build/html" html)
5417 #t))))))
5418 (home-page "https://github.com/Kozea/cairocffi")
5419 (synopsis "Python bindings and object-oriented API for Cairo")
5420 (description
5421 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5422 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5423 graphics library with support for multiple backends including image buffers,
5424 PNG, PostScript, PDF, and SVG file output.")
5425 (license license:bsd-3)))
5426
5427 (define-public python2-cairocffi
5428 (package-with-python2 python-cairocffi))
5429
5430 (define-public python-decorator
5431 (package
5432 (name "python-decorator")
5433 (version "4.3.0")
5434 (source
5435 (origin
5436 (method url-fetch)
5437 (uri (pypi-uri "decorator" version))
5438 (sha256
5439 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5440 (build-system python-build-system)
5441 (home-page "https://pypi.org/project/decorator/")
5442 (synopsis "Python module to simplify usage of decorators")
5443 (description
5444 "The aim of the decorator module is to simplify the usage of decorators
5445 for the average programmer, and to popularize decorators usage giving examples
5446 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5447 etc. The core of this module is a decorator factory.")
5448 (license license:expat)))
5449
5450 (define-public python2-decorator
5451 (package-with-python2 python-decorator))
5452
5453 (define-public python-drmaa
5454 (package
5455 (name "python-drmaa")
5456 (version "0.7.7")
5457 (source
5458 (origin
5459 (method url-fetch)
5460 (uri (pypi-uri "drmaa" version))
5461 (sha256
5462 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5463 (build-system python-build-system)
5464 ;; The test suite requires libdrmaa which is provided by the cluster
5465 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5466 ;; should be set to the path of the libdrmaa library.
5467 (arguments '(#:tests? #f))
5468 (native-inputs
5469 `(("python-nose" ,python-nose)))
5470 (home-page "https://pypi.org/project/drmaa/")
5471 (synopsis "Python bindings for the DRMAA library")
5472 (description
5473 "A Python package for Distributed Resource Management (DRM) job
5474 submission and control. This package is an implementation of the DRMAA 1.0
5475 Python language binding specification.")
5476 (license license:bsd-3)))
5477
5478 (define-public python2-drmaa
5479 (package-with-python2 python-drmaa))
5480
5481 (define-public python-grako
5482 (package
5483 (name "python-grako")
5484 (version "3.99.9")
5485 (source
5486 (origin
5487 (method url-fetch)
5488 (uri
5489 (pypi-uri "grako" version ".zip"))
5490 (sha256
5491 (base32
5492 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5493 (build-system python-build-system)
5494 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5495 (native-inputs
5496 `(("unzip" ,unzip)
5497 ("python-pytest" ,python-pytest)
5498 ("python-pytest-runner" ,python-pytest-runner)))
5499 (home-page "https://bitbucket.org/neogeny/grako")
5500 (synopsis "EBNF parser generator")
5501 (description
5502 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5503 memoizing PEG/Packrat parser in Python.")
5504 (license license:bsd-3)))
5505
5506 (define-public python2-grako
5507 (package-with-python2 python-grako))
5508
5509 (define-public python-gridmap
5510 (package
5511 (name "python-gridmap")
5512 (version "0.13.0")
5513 (source
5514 (origin
5515 (method git-fetch)
5516 (uri (git-reference
5517 (url "https://github.com/pygridtools/gridmap.git")
5518 (commit (string-append "v" version))))
5519 (file-name (git-file-name name version))
5520 (sha256
5521 (base32 "1478lbwsr1w24cii2x01m2910fvh8r43ghnb78nc972a96hqiknm"))))
5522 (build-system python-build-system)
5523 (arguments
5524 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5525 (propagated-inputs
5526 `(("python-psutil" ,python-psutil)
5527 ("python-drmaa" ,python-drmaa)
5528 ("python-pyzmq" ,python-pyzmq)))
5529 (home-page "https://github.com/pygridtools/gridmap")
5530 (synopsis "Create jobs on a cluster directly from Python")
5531 (description
5532 "Gridmap is a Python package to allow you to easily create jobs on the
5533 cluster directly from Python. You can directly map Python functions onto the
5534 cluster without needing to write any wrapper code yourself.")
5535 (license license:gpl3+)))
5536
5537 (define-public python2-gridmap
5538 (package-with-python2 python-gridmap))
5539
5540 (define-public python-honcho
5541 (package
5542 (name "python-honcho")
5543 (version "1.0.1")
5544 (source
5545 (origin
5546 (method git-fetch)
5547 (uri (git-reference
5548 (url "https://github.com/nickstenning/honcho.git")
5549 (commit (string-append "v" version))))
5550 (file-name (git-file-name name version))
5551 (sha256
5552 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5553 (build-system python-build-system)
5554 (native-inputs
5555 `(("python-pytest" ,python-pytest)
5556 ("python-mock" ,python-mock)
5557 ("python-tox" ,python-tox)
5558 ("which" ,which))) ;for tests
5559 (propagated-inputs
5560 `(("python-jinja2" ,python-jinja2)))
5561 (arguments
5562 `(#:phases
5563 (modify-phases %standard-phases
5564 (delete 'check)
5565 (add-after 'install 'check
5566 (lambda* (#:key outputs inputs #:allow-other-keys)
5567 ;; fix honcho path in testsuite
5568 (substitute* "tests/conftest.py"
5569 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5570 "/bin/honcho" "'")))
5571 ;; It's easier to run tests after install.
5572 ;; Make installed package available for running the tests
5573 (add-installed-pythonpath inputs outputs)
5574 (invoke "py.test" "-v"))))))
5575 (home-page "https://github.com/nickstenning/honcho")
5576 (synopsis "Manage Procfile-based applications")
5577 (description
5578 "A Procfile is a file which describes how to run an application
5579 consisting of several processes. honcho starts all listed processes.
5580 The output of all running processes is collected by honcho and
5581 displayed.")
5582 (license license:expat)))
5583
5584 (define-public python2-honcho
5585 (package-with-python2 python-honcho))
5586
5587 (define-public python-pexpect
5588 (package
5589 (name "python-pexpect")
5590 (version "4.8.0")
5591 (source
5592 (origin
5593 (method url-fetch)
5594 (uri (pypi-uri "pexpect" version))
5595 (sha256
5596 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5597 (build-system python-build-system)
5598 (arguments
5599 `(#:phases
5600 (modify-phases %standard-phases
5601 (add-before 'check 'prepare-tests
5602 (lambda _
5603 (substitute* (find-files "tests")
5604 (("/bin/ls") (which "ls"))
5605 (("/bin/echo") (which "echo"))
5606 (("/bin/which") (which "which"))
5607 ;; Many tests try to use the /bin directory which
5608 ;; is not present in the build environment.
5609 ;; Use one that's non-empty and unlikely to change.
5610 (("/bin'") "/dev'")
5611 ;; Disable failing test. See upstream bug report
5612 ;; https://github.com/pexpect/pexpect/issues/568
5613 (("def test_bash") "def _test_bash"))
5614 ;; XXX: Socket connection test gets "Connection reset by peer".
5615 ;; Why does it not work? Delete for now.
5616 (delete-file "tests/test_socket.py")
5617 #t))
5618 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5619 (native-inputs
5620 `(("python-nose" ,python-nose)
5621 ("python-pytest" ,python-pytest)
5622 ("man-db" ,man-db)
5623 ("which" ,which)
5624 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5625 (propagated-inputs
5626 `(("python-ptyprocess" ,python-ptyprocess)))
5627 (home-page "http://pexpect.readthedocs.org/")
5628 (synopsis "Controlling interactive console applications")
5629 (description
5630 "Pexpect is a pure Python module for spawning child applications;
5631 controlling them; and responding to expected patterns in their output.
5632 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5633 child application and control it as if a human were typing commands.")
5634 (license license:isc)))
5635
5636 (define-public python2-pexpect
5637 (package-with-python2 python-pexpect))
5638
5639 (define-public python-setuptools-scm
5640 (package
5641 (name "python-setuptools-scm")
5642 (version "3.2.0")
5643 (source (origin
5644 (method url-fetch)
5645 (uri (pypi-uri "setuptools_scm" version))
5646 (sha256
5647 (base32
5648 "0n3knn3p1sqlx31k2lahn7z9bacvlv8nhlfidj77vz50bxqlgasj"))))
5649 (build-system python-build-system)
5650 (home-page "https://github.com/pypa/setuptools_scm/")
5651 (synopsis "Manage Python package versions in SCM metadata")
5652 (description
5653 "Setuptools_scm handles managing your Python package versions in
5654 @dfn{software configuration management} (SCM) metadata instead of declaring
5655 them as the version argument or in a SCM managed file.")
5656 (license license:expat)))
5657
5658 ;; Needed by python-lazy-object-proxy, remove on next update cycle.
5659 (define-public python-setuptools-scm-3.3
5660 (package
5661 (inherit python-setuptools-scm)
5662 (version "3.3.3")
5663 (source (origin
5664 (method url-fetch)
5665 (uri (pypi-uri "setuptools_scm" version))
5666 (sha256
5667 (base32
5668 "19cyndx23xmpbhz4qrwmfwsmnnaczd0dw7qg977ksq2dbvxy29dx"))))))
5669
5670 (define-public python2-setuptools-scm
5671 (package-with-python2 python-setuptools-scm))
5672
5673 (define-public python-pathlib2
5674 (package
5675 (name "python-pathlib2")
5676 (version "2.3.3")
5677 (source
5678 (origin
5679 (method url-fetch)
5680 (uri (pypi-uri "pathlib2" version))
5681 (sha256
5682 (base32
5683 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5684 (build-system python-build-system)
5685 (propagated-inputs
5686 `(("python-scandir" ,python-scandir)
5687 ("python-six" ,python-six)))
5688 (home-page "https://pypi.org/project/pathlib2/")
5689 (synopsis "Object-oriented file system paths")
5690 (description "The goal of pathlib2 is to provide a backport of the
5691 standard @code{pathlib} module which tracks the standard library module, so
5692 all the newest features of the standard @code{pathlib} can be used also on
5693 older Python versions.")
5694 (license license:expat)))
5695
5696 (define-public python2-importlib-resources
5697 (package
5698 (name "python2-importlib-resources")
5699 (version "1.0.2")
5700 (source (origin
5701 (method url-fetch)
5702 (uri (pypi-uri "importlib_resources" version))
5703 (sha256
5704 (base32
5705 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5706 (build-system python-build-system)
5707 (arguments
5708 `(#:python ,python-2))
5709 (native-inputs
5710 `(("python-wheel" ,python2-wheel)))
5711 (propagated-inputs
5712 `(("python-pathlib2" ,python2-pathlib2)
5713 ("python-typing" ,python2-typing)))
5714 (home-page "https://gitlab.com/python-devs/importlib_resources")
5715 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5716 (description
5717 "This package provides an implementation of @code{importlib.resources}
5718 for older versions of Python.")
5719 (license license:asl2.0)))
5720
5721 (define-public python-importlib-metadata
5722 (package
5723 (name "python-importlib-metadata")
5724 (version "1.4.0")
5725 (source
5726 (origin
5727 (method url-fetch)
5728 (uri (pypi-uri "importlib_metadata" version))
5729 (sha256
5730 (base32 "1n76444v7zn910xrhh8954jdn4byxbn9f1jck6b85a716mbh2z7i"))))
5731 (build-system python-build-system)
5732 (propagated-inputs
5733 `(("python-zipp" ,python-zipp)))
5734 (native-inputs
5735 `(("python-setuptools-scm" ,python-setuptools-scm)
5736 ("python-packaging" ,python-packaging)))
5737 (home-page "https://importlib-metadata.readthedocs.io/")
5738 (synopsis "Read metadata from Python packages")
5739 (description
5740 "@code{importlib_metadata} is a library which provides an API for
5741 accessing an installed Python package's metadata, such as its entry points or
5742 its top-level name. This functionality intends to replace most uses of
5743 @code{pkg_resources} entry point API and metadata API. Along with
5744 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5745 need to use the older and less efficient @code{pkg_resources} package.")
5746 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5747 (license license:asl2.0)))
5748
5749 (define-public python2-importlib-metadata
5750 (let ((base (package-with-python2 (strip-python2-variant
5751 python-importlib-metadata))))
5752 (package/inherit
5753 base
5754 (name "python2-importlib-metadata")
5755 (propagated-inputs
5756 `(("python-configparser" ,python2-configparser)
5757 ("python-contextlib2" ,python2-contextlib2)
5758 ("python-importlib-resources" ,python2-importlib-resources)
5759 ("python-pathlib2" ,python2-pathlib2)
5760 ,@(package-propagated-inputs base))))))
5761
5762 (define-public python-jaraco-packaging
5763 (package
5764 (name "python-jaraco-packaging")
5765 (version "6.1")
5766 (source
5767 (origin
5768 (method url-fetch)
5769 (uri (pypi-uri "jaraco.packaging" version))
5770 (sha256
5771 (base32
5772 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5773 (build-system python-build-system)
5774 (propagated-inputs
5775 `(("python-pytest" ,python-pytest)
5776 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5777 ("python-pytest-flake8" ,python-pytest-flake8)
5778 ("python-rst.linker" ,python-rst.linker)
5779 ("python-setuptools" ,python-setuptools)
5780 ("python-setuptools-scm" ,python-setuptools-scm)
5781 ("python-six" ,python-six)
5782 ("python-sphinx" ,python-sphinx)))
5783 (home-page "https://github.com/jaraco/jaraco.packaging")
5784 (synopsis "Tools to supplement packaging Python releases")
5785 (description
5786 "This package provides various tools to supplement packaging Python
5787 releases.")
5788 (license license:expat)))
5789
5790 (define-public python-pathpy
5791 (package
5792 (name "python-pathpy")
5793 (version "11.5.1")
5794 (source
5795 (origin
5796 (method url-fetch)
5797 (uri (pypi-uri "path.py" version))
5798 (sha256
5799 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
5800 (outputs '("out" "doc"))
5801 (build-system python-build-system)
5802 (propagated-inputs
5803 `(("python-appdirs" ,python-appdirs)
5804 ("python-importlib-metadata" ,python-importlib-metadata)))
5805 (native-inputs
5806 `(("python-setuptools-scm" ,python-setuptools-scm)
5807 ("python-sphinx" ,python-sphinx)
5808 ("python-rst.linker" ,python-rst.linker)
5809 ("python-pytest" ,python-pytest)
5810 ("python-pytest-runner" ,python-pytest-runner)
5811 ("python-jaraco-packaging" ,python-jaraco-packaging)))
5812 (arguments
5813 `(#:phases
5814 (modify-phases %standard-phases
5815 (add-after 'build 'build-doc
5816 (lambda _
5817 (setenv "LANG" "en_US.UTF-8")
5818 (invoke "python" "setup.py" "build_sphinx")))
5819 (add-after 'install 'install-doc
5820 (lambda* (#:key outputs #:allow-other-keys)
5821 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5822 (doc (string-append data "/doc/" ,name "-" ,version))
5823 (html (string-append doc "/html")))
5824 (mkdir-p html)
5825 (for-each (lambda (file)
5826 (copy-file file (string-append doc "/" file)))
5827 '("README.rst" "CHANGES.rst"))
5828 (copy-recursively "build/sphinx/html" html)
5829 #t)))
5830 (replace 'check
5831 (lambda _
5832 ;; The import time test aborts if an import takes longer than
5833 ;; 100ms. It may very well take a little longer than that.
5834 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
5835 (home-page "https://github.com/jaraco/path.py")
5836 (synopsis "Python module wrapper for built-in os.path")
5837 (description
5838 "@code{path.py} implements path objects as first-class entities, allowing
5839 common operations on files to be invoked on those path objects directly.")
5840 (license license:expat)))
5841
5842 (define-public python2-pathpy
5843 (package-with-python2 python-pathpy))
5844
5845 (define-public python-simplegeneric
5846 (package
5847 (name "python-simplegeneric")
5848 (version "0.8.1")
5849 (source
5850 (origin
5851 (method url-fetch)
5852 (uri (pypi-uri "simplegeneric" version ".zip"))
5853 (sha256
5854 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
5855 (build-system python-build-system)
5856 (native-inputs
5857 `(("unzip" ,unzip)))
5858 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
5859 (synopsis "Python module for simple generic functions")
5860 (description
5861 "The simplegeneric module lets you define simple single-dispatch generic
5862 functions, akin to Python’s built-in generic functions like @code{len()},
5863 @code{iter()} and so on. However, instead of using specially-named methods,
5864 these generic functions use simple lookup tables, akin to those used by
5865 e.g. @code{pickle.dump()} and other generic functions found in the Python
5866 standard library.")
5867 (license license:zpl2.1)))
5868
5869 (define-public python2-simplegeneric
5870 (package-with-python2 python-simplegeneric))
5871
5872 (define-public python-ipython-genutils
5873 ;; TODO: This package is retired, check if can be removed, see description.
5874 (package
5875 (name "python-ipython-genutils")
5876 (version "0.1.0")
5877 (source
5878 (origin
5879 (method url-fetch)
5880 (uri (pypi-uri "ipython_genutils" version))
5881 (sha256
5882 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
5883 (build-system python-build-system)
5884 (arguments `(#:tests? #f)) ; no tests
5885 (home-page "https://ipython.org")
5886 (synopsis "Vestigial utilities from IPython")
5887 (description
5888 "This package provides retired utilities from IPython. No packages
5889 outside IPython/Jupyter should depend on it.
5890
5891 This package shouldn't exist. It contains some common utilities shared by
5892 Jupyter and IPython projects during The Big Split. As soon as possible, those
5893 packages will remove their dependency on this, and this package will go
5894 away.")
5895 (license license:bsd-3)))
5896
5897 (define-public python2-ipython-genutils
5898 (package-with-python2 python-ipython-genutils))
5899
5900 (define-public python-ipyparallel
5901 (package
5902 (name "python-ipyparallel")
5903 (version "6.2.4")
5904 (source
5905 (origin
5906 (method url-fetch)
5907 (uri (pypi-uri "ipyparallel" version))
5908 (sha256
5909 (base32
5910 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
5911 (build-system python-build-system)
5912 (arguments
5913 `(#:tests? #f ; RuntimeError: IO Loop failed to start
5914 #:phases
5915 (modify-phases %standard-phases
5916 (add-before 'check 'prepare-for-tests
5917 (lambda _
5918 (setenv "HOME" (getcwd))
5919 #t)))))
5920 (propagated-inputs
5921 `(("python-dateutil" ,python-dateutil)
5922 ("python-decorator" ,python-decorator)
5923 ("python-ipykernel" ,python-ipykernel)
5924 ("python-ipython" ,python-ipython)
5925 ("python-ipython-genutils" ,python-ipython-genutils)
5926 ("python-jupyter-client" ,python-jupyter-client)
5927 ("python-pyzmq" ,python-pyzmq)
5928 ("python-tornado" ,python-tornado)
5929 ("python-traitlets" ,python-traitlets)))
5930 (native-inputs
5931 `(("python-ipython" ,python-ipython)
5932 ("python-mock" ,python-mock)
5933 ("python-nose" ,python-nose)
5934 ("python-pytest" ,python-pytest)
5935 ("python-pytest-cov" ,python-pytest-cov)
5936 ("python-testpath" ,python-testpath)))
5937 (home-page "https://ipython.org/")
5938 (synopsis "Interactive Parallel Computing with IPython")
5939 (description
5940 "@code{ipyparallel} is a Python package and collection of CLI scripts for
5941 controlling clusters for Jupyter. @code{ipyparallel} contains the following
5942 CLI scripts:
5943 @enumerate
5944 @item ipcluster - start/stop a cluster
5945 @item ipcontroller - start a scheduler
5946 @item ipengine - start an engine
5947 @end enumerate")
5948 (license license:bsd-3)))
5949
5950 (define-public python2-ipyparallel
5951 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
5952 (package
5953 (inherit ipyparallel)
5954 (propagated-inputs
5955 `(("python2-futures" ,python2-futures)
5956 ,@(package-propagated-inputs ipyparallel))))))
5957
5958 (define-public python-ipython-cluster-helper
5959 (package
5960 (name "python-ipython-cluster-helper")
5961 (version "0.6.4")
5962 (source
5963 (origin
5964 (method url-fetch)
5965 (uri (pypi-uri "ipython-cluster-helper" version))
5966 (sha256
5967 (base32
5968 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
5969 (modules '((guix build utils)))
5970 (snippet
5971 '(begin (substitute* "requirements.txt"
5972 (("ipython.*") "ipython\n"))
5973 #t))))
5974 (build-system python-build-system)
5975 (arguments
5976 `(#:tests? #f ; Test suite can't find IPython.
5977 #:phases
5978 (modify-phases %standard-phases
5979 (replace 'check
5980 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5981 (if tests?
5982 (begin
5983 (setenv "HOME" (getcwd))
5984 (add-installed-pythonpath inputs outputs)
5985 (invoke "python" "example/example.py" "--local"))
5986 #t))))))
5987 (propagated-inputs
5988 `(("python-ipyparallel" ,python-ipyparallel)
5989 ("python-ipython" ,python-ipython)
5990 ("python-netifaces" ,python-netifaces)
5991 ("python-pyzmq" ,python-pyzmq)
5992 ("python-setuptools" ,python-setuptools)
5993 ("python-six" ,python-six)))
5994 (home-page "https://github.com/roryk/ipython-cluster-helper")
5995 (synopsis
5996 "Simplify IPython cluster start up and use for multiple schedulers")
5997 (description
5998 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
5999 profile, launches a cluster and returns a view. On program exit it shuts the
6000 cluster down and deletes the throwaway profile.")
6001 (license license:expat)))
6002
6003 (define-public python2-ipython-cluster-helper
6004 (package-with-python2 python-ipython-cluster-helper))
6005
6006 (define-public python-traitlets
6007 (package
6008 (name "python-traitlets")
6009 (version "4.3.3")
6010 (source
6011 (origin
6012 (method url-fetch)
6013 (uri (pypi-uri "traitlets" version))
6014 (sha256
6015 (base32
6016 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6017 (build-system python-build-system)
6018 (arguments
6019 `(#:phases
6020 (modify-phases %standard-phases
6021 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6022 (propagated-inputs
6023 `(("python-ipython-genutils" ,python-ipython-genutils)
6024 ("python-decorator" ,python-decorator)))
6025 (native-inputs
6026 `(("python-pytest" ,python-pytest)))
6027 (properties `((python2-variant . ,(delay python2-traitlets))))
6028 (home-page "https://ipython.org")
6029 (synopsis "Configuration system for Python applications")
6030 (description
6031 "Traitlets is a framework that lets Python classes have attributes with
6032 type checking, dynamically calculated default values, and ‘on change’
6033 callbacks. The package also includes a mechanism to use traitlets for
6034 configuration, loading values from files or from command line arguments. This
6035 is a distinct layer on top of traitlets, so you can use traitlets in your code
6036 without using the configuration machinery.")
6037 (license license:bsd-3)))
6038
6039 (define-public python2-traitlets
6040 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6041 (package
6042 (inherit traitlets)
6043 (propagated-inputs
6044 `(("python2-enum34" ,python2-enum34)
6045 ,@(package-propagated-inputs traitlets))))))
6046
6047 (define-public python-jupyter-core
6048 (package
6049 (name "python-jupyter-core")
6050 (version "4.4.0")
6051 (source
6052 (origin
6053 (method url-fetch)
6054 (uri (string-append (pypi-uri "jupyter_core" version)))
6055 (sha256
6056 (base32
6057 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6058 (build-system python-build-system)
6059 ;; FIXME: not sure how to run the tests
6060 (arguments `(#:tests? #f))
6061 (propagated-inputs
6062 `(("python-traitlets" ,python-traitlets)))
6063 (home-page "http://jupyter.org/")
6064 (synopsis "Jupyter base package")
6065 (description
6066 "Jupyter core is the base package on which Jupyter projects rely.")
6067 (license license:bsd-3)))
6068
6069 (define-public python2-jupyter-core
6070 (package-with-python2 python-jupyter-core))
6071
6072 (define-public python-jupyter-client
6073 (package
6074 (name "python-jupyter-client")
6075 (version "5.2.4")
6076 (source
6077 (origin
6078 (method url-fetch)
6079 (uri (pypi-uri "jupyter_client" version))
6080 (sha256
6081 (base32
6082 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6083 (build-system python-build-system)
6084 ;; Tests fail because of missing native python kernel which I assume is
6085 ;; provided by the ipython package, which we cannot use because it would
6086 ;; cause a dependency cycle.
6087 (arguments
6088 `(#:tests? #f
6089
6090 #:phases (modify-phases %standard-phases
6091 (add-after 'unpack 'set-tool-file-names
6092 (lambda* (#:key inputs #:allow-other-keys)
6093 (let ((iproute (assoc-ref inputs "iproute")))
6094 (substitute* "jupyter_client/localinterfaces.py"
6095 (("'ip'")
6096 (string-append "'" iproute "/sbin/ip'")))
6097 #t))))))
6098 (inputs
6099 `(("iproute" ,iproute)))
6100 (propagated-inputs
6101 `(("python-pyzmq" ,python-pyzmq)
6102 ("python-traitlets" ,python-traitlets)
6103 ("python-jupyter-core" ,python-jupyter-core)))
6104 (home-page "http://jupyter.org/")
6105 (synopsis "Jupyter protocol implementation and client libraries")
6106 (description
6107 "The @code{jupyter_client} package contains the reference implementation
6108 of the Jupyter protocol. It also provides client and kernel management APIs
6109 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6110 installing @code{kernelspec}s for use with Jupyter frontends.")
6111 (license license:bsd-3)))
6112
6113 (define-public python2-jupyter-client
6114 (package-with-python2 python-jupyter-client))
6115
6116 (define-public python-ipykernel
6117 (package
6118 (name "python-ipykernel")
6119 (version "5.1.3")
6120 (source
6121 (origin
6122 (method url-fetch)
6123 (uri (pypi-uri "ipykernel" version))
6124 (sha256
6125 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6126 (build-system python-build-system)
6127 (arguments
6128 `(#:phases
6129 (modify-phases %standard-phases
6130 (replace 'check
6131 (lambda _
6132 (setenv "HOME" "/tmp")
6133 (invoke "pytest" "-v")
6134 #t))
6135 (add-after 'install 'set-python-file-name
6136 (lambda* (#:key outputs #:allow-other-keys)
6137 ;; Record the absolute file name of the 'python' executable in
6138 ;; 'kernel.json'.
6139 (let ((out (assoc-ref outputs "out")))
6140 (substitute* (string-append out "/share/jupyter"
6141 "/kernels/python3/kernel.json")
6142 (("\"python\"")
6143 (string-append "\"" (which "python") "\"")))
6144 #t))))))
6145 (propagated-inputs
6146 `(("python-ipython" ,python-ipython)
6147 ;; imported at runtime during connect
6148 ("python-jupyter-client" ,python-jupyter-client)))
6149 (native-inputs
6150 `(("python-flaky" ,python-flaky)
6151 ("python-nose" ,python-nose)
6152 ("python-pytest" ,python-pytest)))
6153 (home-page "https://ipython.org")
6154 (synopsis "IPython Kernel for Jupyter")
6155 (description
6156 "This package provides the IPython kernel for Jupyter.")
6157 (properties `((python2-variant . ,(delay python2-ipykernel))))
6158 (license license:bsd-3)))
6159
6160 ;; Version 5.x and above no longer support Python 2.
6161 (define-public python2-ipykernel
6162 (package
6163 (name "python2-ipykernel")
6164 (version "4.10.1")
6165 (source
6166 (origin
6167 (method url-fetch)
6168 (uri (pypi-uri "ipykernel" version))
6169 (sha256
6170 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6171 (build-system python-build-system)
6172 (arguments
6173 `(#:python ,python-2))
6174 (propagated-inputs
6175 `(("python2-ipython" ,python2-ipython)
6176 ;; imported at runtime during connect
6177 ("python2-jupyter-client" ,python2-jupyter-client)
6178 ("python2-tornado" ,python2-tornado)
6179 ("python2-traitlets" ,python2-traitlets)))
6180 (native-inputs
6181 `(("python2-mock" ,python2-mock)
6182 ("python2-nose" ,python2-nose)
6183 ("python2-pytest" ,python2-pytest)
6184 ("python2-pytest-cov" ,python2-pytest-cov)))
6185 (home-page "https://ipython.org")
6186 (synopsis "IPython Kernel for Jupyter")
6187 (description
6188 "This package provides the IPython kernel for Jupyter.")
6189 (license license:bsd-3)))
6190
6191 (define-public python-pari-jupyter
6192 (package
6193 (name "python-pari-jupyter")
6194 (version "1.3.2")
6195 (source
6196 (origin
6197 (method url-fetch)
6198 (uri (pypi-uri "pari_jupyter" version))
6199 (sha256
6200 (base32
6201 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6202 (build-system python-build-system)
6203 (propagated-inputs
6204 `(("python-ipykernel" ,python-ipykernel)))
6205 (inputs
6206 `(("pari-gp" ,pari-gp)
6207 ("readline" ,readline)))
6208 (arguments
6209 `(#:tests? #f)) ; no test suite
6210 (home-page
6211 "https://github.com/jdemeyer/pari_jupyter")
6212 (synopsis "A Jupyter kernel for PARI/GP")
6213 (description "The package provides a PARI/GP kernel for Jupyter.")
6214 (license license:gpl3+)))
6215
6216 (define-public python-backcall
6217 (package
6218 (name "python-backcall")
6219 (version "0.1.0")
6220 (source
6221 (origin
6222 (method url-fetch)
6223 (uri (pypi-uri "backcall" version))
6224 (sha256
6225 (base32
6226 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6227 (build-system python-build-system)
6228 (home-page "https://github.com/takluyver/backcall/")
6229 (synopsis "Specifications for callback functions passed in to an API")
6230 (description
6231 "If your code lets other people supply callback functions, it's important
6232 to specify the function signature you expect, and check that functions support
6233 that. Adding extra parameters later would break other peoples code unless
6234 you're careful. The @code{backcall} package provides a way of specifying the
6235 callback signature using a prototype function.")
6236 (license license:bsd-3)))
6237
6238 (define-public python-ipython
6239 (package
6240 (name "python-ipython")
6241 (version "7.9.0")
6242 (source
6243 (origin
6244 (method url-fetch)
6245 (uri (pypi-uri "ipython" version ".tar.gz"))
6246 (sha256
6247 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6248 (build-system python-build-system)
6249 (propagated-inputs
6250 `(("python-backcall" ,python-backcall)
6251 ("python-pyzmq" ,python-pyzmq)
6252 ("python-prompt-toolkit" ,python-prompt-toolkit)
6253 ("python-terminado" ,python-terminado)
6254 ("python-matplotlib" ,python-matplotlib)
6255 ("python-numpy" ,python-numpy)
6256 ("python-numpydoc" ,python-numpydoc)
6257 ("python-jedi" ,python-jedi)
6258 ("python-jinja2" ,python-jinja2)
6259 ("python-mistune" ,python-mistune)
6260 ("python-pexpect" ,python-pexpect)
6261 ("python-pickleshare" ,python-pickleshare)
6262 ("python-simplegeneric" ,python-simplegeneric)
6263 ("python-jsonschema" ,python-jsonschema)
6264 ("python-traitlets" ,python-traitlets)
6265 ("python-nbformat" ,python-nbformat)
6266 ("python-pygments" ,python-pygments)))
6267 (inputs
6268 `(("readline" ,readline)
6269 ("which" ,which)))
6270 (native-inputs
6271 `(("graphviz" ,graphviz)
6272 ("pkg-config" ,pkg-config)
6273 ("python-requests" ,python-requests) ;; for tests
6274 ("python-testpath" ,python-testpath)
6275 ("python-nose" ,python-nose)))
6276 (arguments
6277 `(#:phases
6278 (modify-phases %standard-phases
6279 (add-after 'unpack 'make-docs-reproducible
6280 (lambda _
6281 (substitute* "IPython/sphinxext/ipython_directive.py"
6282 ((".*import datetime") "")
6283 ((".*datetime.datetime.now\\(\\)") "")
6284 (("%timeit") "# %timeit"))
6285 #t))
6286 ;; Tests can only be run after the library has been installed and not
6287 ;; within the source directory.
6288 (delete 'check)
6289 (add-after 'install 'check
6290 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6291 (if tests?
6292 (begin
6293 ;; Make installed package available for running the tests
6294 (add-installed-pythonpath inputs outputs)
6295 (setenv "HOME" "/tmp/") ;; required by a test
6296 ;; We only test the core because one of the other tests
6297 ;; tries to import ipykernel.
6298 (invoke "python" "IPython/testing/iptest.py"
6299 "-v" "IPython/core/tests"))
6300 #t)))
6301 (add-before 'check 'fix-tests
6302 (lambda* (#:key inputs #:allow-other-keys)
6303 (substitute* "./IPython/utils/_process_posix.py"
6304 (("/usr/bin/env', 'which") (which "which")))
6305 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6306 (("#!/usr/bin/env python")
6307 (string-append "#!" (which "python"))))
6308 ;; This test introduces a circular dependency on ipykernel
6309 ;; (which depends on ipython).
6310 (delete-file "IPython/core/tests/test_display.py")
6311 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6312 (delete-file "IPython/core/tests/test_interactiveshell.py")
6313 #t)))))
6314 (home-page "https://ipython.org")
6315 (synopsis "IPython is a tool for interactive computing in Python")
6316 (description
6317 "IPython provides a rich architecture for interactive computing with:
6318 Powerful interactive shells, a browser-based notebook, support for interactive
6319 data visualization, embeddable interpreters and tools for parallel
6320 computing.")
6321 (properties `((python2-variant . ,(delay python2-ipython))))
6322 (license license:bsd-3)))
6323
6324 ;; This is the latest release of the LTS version of ipython with support for
6325 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6326 ;; dropped support for Python 2.7.
6327 (define-public python2-ipython
6328 (package
6329 (name "python2-ipython")
6330 (version "5.8.0")
6331 (source
6332 (origin
6333 (method url-fetch)
6334 (uri (pypi-uri "ipython" version ".tar.gz"))
6335 (sha256
6336 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6337 (build-system python-build-system)
6338 (propagated-inputs
6339 `(("python2-backports-shutil-get-terminal-size"
6340 ,python2-backports-shutil-get-terminal-size)
6341 ("python2-pathlib2" ,python2-pathlib2)
6342 ("python2-pyzmq" ,python2-pyzmq)
6343 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6344 ("python2-terminado" ,python2-terminado)
6345 ("python2-matplotlib" ,python2-matplotlib)
6346 ("python2-numpy" ,python2-numpy)
6347 ("python2-numpydoc" ,python2-numpydoc)
6348 ("python2-jinja2" ,python2-jinja2)
6349 ("python2-mistune" ,python2-mistune)
6350 ("python2-pexpect" ,python2-pexpect)
6351 ("python2-pickleshare" ,python2-pickleshare)
6352 ("python2-simplegeneric" ,python2-simplegeneric)
6353 ("python2-jsonschema" ,python2-jsonschema)
6354 ("python2-traitlets" ,python2-traitlets)
6355 ("python2-nbformat" ,python2-nbformat)
6356 ("python2-pygments" ,python2-pygments)))
6357 (inputs
6358 `(("readline" ,readline)
6359 ("which" ,which)))
6360 (native-inputs
6361 `(("graphviz" ,graphviz)
6362 ("pkg-config" ,pkg-config)
6363 ("python2-requests" ,python2-requests) ;; for tests
6364 ("python2-testpath" ,python2-testpath)
6365 ("python2-mock" ,python2-mock)
6366 ("python2-nose" ,python2-nose)))
6367 (arguments
6368 `(#:python ,python-2
6369 #:phases
6370 (modify-phases %standard-phases
6371 (add-before 'check 'delete-broken-tests
6372 (lambda* (#:key inputs #:allow-other-keys)
6373 ;; These tests throw errors for unknown reasons.
6374 (delete-file "IPython/core/tests/test_displayhook.py")
6375 (delete-file "IPython/core/tests/test_magic_terminal.py")
6376 (delete-file "IPython/core/tests/test_profile.py")
6377 #t)))))
6378 (home-page "https://ipython.org")
6379 (synopsis "IPython is a tool for interactive computing in Python")
6380 (description
6381 "IPython provides a rich architecture for interactive computing with:
6382 Powerful interactive shells, a browser-based notebook, support for interactive
6383 data visualization, embeddable interpreters and tools for parallel
6384 computing.")
6385 (license license:bsd-3)))
6386
6387 (define-public python-ipython-documentation
6388 (package
6389 (inherit python-ipython)
6390 (name "python-ipython-documentation")
6391 (version (package-version python-ipython))
6392 (arguments
6393 `(#:phases
6394 (modify-phases %standard-phases
6395 (delete 'build)
6396 (delete 'check)
6397 (replace 'install
6398 (lambda* (#:key outputs #:allow-other-keys)
6399 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6400 (doc (string-append data "/doc/" ,name "-" ,version))
6401 (html (string-append doc "/html"))
6402 (man1 (string-append data "/man/man1"))
6403 (info (string-append data "/info"))
6404 (examples (string-append doc "/examples"))
6405 (python-arg (string-append "PYTHON=" (which "python"))))
6406 (setenv "LANG" "en_US.utf8")
6407 (with-directory-excursion "docs"
6408 ;; FIXME: pdf fails to build
6409 ;;(system* "make" "pdf" "PAPER=a4")
6410 (system* "make" python-arg "html")
6411 ;; FIXME: the generated texi file contains ^@^@, which trips
6412 ;; up the parser.
6413 ;; (system* "make" python-arg "info")
6414 )
6415 (copy-recursively "docs/man" man1)
6416 (copy-recursively "examples" examples)
6417 (copy-recursively "docs/build/html" html)
6418 ;; (copy-file "docs/build/latex/ipython.pdf"
6419 ;; (string-append doc "/ipython.pdf"))
6420 (mkdir-p info)
6421 ;; (copy-file "docs/build/texinfo/ipython.info"
6422 ;; (string-append info "/ipython.info"))
6423 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6424 #t)))))
6425 (inputs
6426 `(("python-ipython" ,python-ipython)
6427 ("python-ipykernel" ,python-ipykernel)))
6428 (native-inputs
6429 `(("python-sphinx" ,python-sphinx)
6430 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6431 ;; FIXME: It's possible that a smaller union would work just as well.
6432 ("texlive" ,(texlive-union (list texlive-amsfonts
6433 texlive-fonts-ec
6434 texlive-generic-ifxetex
6435 texlive-generic-pdftex
6436 texlive-latex-capt-of
6437 texlive-latex-cmap
6438 texlive-latex-environ
6439 texlive-latex-eqparbox
6440 texlive-latex-etoolbox
6441 texlive-latex-expdlist
6442 texlive-latex-fancyhdr
6443 texlive-latex-fancyvrb
6444 texlive-latex-fncychap
6445 texlive-latex-float
6446 texlive-latex-framed
6447 texlive-latex-geometry
6448 texlive-latex-graphics
6449 texlive-latex-hyperref
6450 texlive-latex-mdwtools
6451 texlive-latex-multirow
6452 texlive-latex-needspace
6453 texlive-latex-oberdiek
6454 texlive-latex-parskip
6455 texlive-latex-preview
6456 texlive-latex-tabulary
6457 texlive-latex-threeparttable
6458 texlive-latex-titlesec
6459 texlive-latex-trimspaces
6460 texlive-latex-ucs
6461 texlive-latex-upquote
6462 texlive-latex-url
6463 texlive-latex-varwidth
6464 texlive-latex-wrapfig)))
6465 ("texinfo" ,texinfo)))))
6466
6467 (define-public python-urwid
6468 (package
6469 (name "python-urwid")
6470 (version "2.0.1")
6471 (source
6472 (origin
6473 (method url-fetch)
6474 (uri (pypi-uri "urwid" version))
6475 (sha256
6476 (base32
6477 "1g6cpicybvbananpjikmjk8npmjk4xvak1wjzji62wc600wkwkb4"))))
6478 (build-system python-build-system)
6479 (home-page "http://urwid.org")
6480 (synopsis "Console user interface library for Python")
6481 (description
6482 "Urwid is a curses-based UI/widget library for Python. It includes many
6483 features useful for text console applications.")
6484 (license license:lgpl2.1+)))
6485
6486 (define-public python2-urwid
6487 (package-with-python2 python-urwid))
6488
6489 (define-public python-urwidtrees
6490 (package
6491 (name "python-urwidtrees")
6492 (version "1.0.2")
6493 (source
6494 (origin
6495 (method git-fetch)
6496 ;; package author intends on distributing via github rather than pypi:
6497 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6498 (uri (git-reference
6499 (url "https://github.com/pazz/urwidtrees")
6500 (commit version)))
6501 (file-name (git-file-name name version))
6502 (sha256
6503 (base32
6504 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6505 (build-system python-build-system)
6506 (arguments
6507 '(#:use-setuptools? #f
6508 #:tests? #f)) ; no tests
6509 (propagated-inputs `(("python-urwid" ,python-urwid)))
6510 (home-page "https://github.com/pazz/urwidtrees")
6511 (synopsis "Tree widgets for urwid")
6512 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6513 toolkit. Use it to build trees of widgets.")
6514 (license license:gpl3+)))
6515
6516 (define-public python2-urwidtrees
6517 (package-with-python2 python-urwidtrees))
6518
6519 (define-public python-ua-parser
6520 (package
6521 (name "python-ua-parser")
6522 (version "0.8.0")
6523 (source
6524 (origin
6525 (method url-fetch)
6526 (uri (pypi-uri "ua-parser" version))
6527 (sha256
6528 (base32
6529 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6530 (build-system python-build-system)
6531 (arguments
6532 `(#:tests? #f)) ;no test suite in release
6533 (native-inputs
6534 `(("python-pyyaml" ,python-pyyaml)))
6535 (home-page "https://github.com/ua-parser/uap-python")
6536 (synopsis "User agent parser")
6537 (description
6538 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6539 (license license:asl2.0)))
6540
6541 (define-public python2-ua-parser
6542 (package-with-python2 python-ua-parser))
6543
6544 (define-public python-user-agents
6545 (package
6546 (name "python-user-agents")
6547 (version "1.1.0")
6548 (source
6549 (origin
6550 (method url-fetch)
6551 (uri (pypi-uri "user-agents" version))
6552 (sha256
6553 (base32
6554 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6555 (build-system python-build-system)
6556 (arguments
6557 `(#:tests? #f)) ;missing devices.json test file in release
6558 (propagated-inputs
6559 `(("python-ua-parser" ,python-ua-parser)))
6560 (home-page "https://github.com/selwin/python-user-agents")
6561 (synopsis "User Agent strings parsing library")
6562 (description
6563 "A library to identify devices (phones, tablets) and their capabilities by
6564 parsing (browser/HTTP) user agent strings.")
6565 (license license:expat)))
6566
6567 (define-public python2-user-agents
6568 (package-with-python2 python-user-agents))
6569
6570 (define-public python-dbus
6571 (package
6572 (name "python-dbus")
6573 (version "1.2.14")
6574 (source
6575 (origin
6576 (method url-fetch)
6577 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6578 "dbus-python-" version ".tar.gz"))
6579 (sha256
6580 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6581 (build-system gnu-build-system)
6582 (native-inputs
6583 `(("pkg-config" ,pkg-config)))
6584 (inputs
6585 `(("python" ,python-wrapper)
6586 ("dbus-glib" ,dbus-glib)))
6587 (synopsis "Python bindings for D-bus")
6588 (description "python-dbus provides bindings for libdbus, the reference
6589 implementation of D-Bus.")
6590 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6591 (license license:expat)))
6592
6593 (define-public python2-dbus
6594 (package (inherit python-dbus)
6595 (name "python2-dbus")
6596 (inputs `(("python" ,python-2)
6597 ,@(alist-delete "python"
6598 (package-inputs python-dbus)
6599 equal?)))))
6600
6601 (define-public python-notify2
6602 (package
6603 (name "python-notify2")
6604 (version "0.3.1")
6605 (source
6606 (origin
6607 (method url-fetch)
6608 (uri (pypi-uri "notify2" version))
6609 (sha256
6610 (base32
6611 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6612 (build-system python-build-system)
6613 (arguments `(#:tests? #f)) ; tests depend on system state
6614 (native-inputs
6615 `(("python-dbus" ,python-dbus)))
6616 (home-page "https://bitbucket.org/takluyver/pynotify2")
6617 (synopsis "Python interface to D-Bus notifications")
6618 (description
6619 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6620 It is a reimplementation of pynotify in pure Python, and an alternative to
6621 the GObject Introspection bindings to libnotify for non-GTK applications.")
6622 (license (list license:bsd-2
6623 license:lgpl2.1+))))
6624
6625 (define-public python2-notify2
6626 (package-with-python2 python-notify2))
6627
6628 ;; beautifulsoup4 has a totally different namespace than 3.x,
6629 ;; and pypi seems to put it under its own name, so I guess we should too
6630 (define-public python-beautifulsoup4
6631 (package
6632 (name "python-beautifulsoup4")
6633 (version "4.7.1")
6634 (source
6635 (origin
6636 (method url-fetch)
6637 (uri (pypi-uri "beautifulsoup4" version))
6638 (sha256
6639 (base32
6640 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6641 (build-system python-build-system)
6642 (arguments
6643 `(#:phases
6644 (modify-phases %standard-phases
6645 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6646 ;; must use this conversion script when building with Python 3. The
6647 ;; conversion script also runs the tests.
6648 ;; For more information, see the file 'convert-py3k' in the source
6649 ;; distribution.
6650 (replace 'check
6651 (lambda _ (invoke "./convert-py3k"))))))
6652 (propagated-inputs
6653 `(("python-soupsieve" ,python-soupsieve)))
6654 (home-page
6655 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6656 (synopsis
6657 "Python screen-scraping library")
6658 (description
6659 "Beautiful Soup is a Python library designed for rapidly setting up
6660 screen-scraping projects. It offers Pythonic idioms for navigating,
6661 searching, and modifying a parse tree, providing a toolkit for
6662 dissecting a document and extracting what you need. It automatically
6663 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6664 (license license:expat)
6665 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6666
6667 (define-public python2-beautifulsoup4
6668 (package
6669 (inherit (package-with-python2
6670 (strip-python2-variant python-beautifulsoup4)))
6671 (arguments `(#:python ,python-2))))
6672
6673 (define-public python-soupsieve
6674 (package
6675 (name "python-soupsieve")
6676 (version "1.9.5")
6677 (source
6678 (origin
6679 (method url-fetch)
6680 (uri (pypi-uri "soupsieve" version))
6681 (sha256
6682 (base32
6683 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6684 (build-system python-build-system)
6685 (arguments `(#:tests? #f))
6686 ;;XXX: 2 tests fail currently despite claming they were to be
6687 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6688 ;;don't want to create a circular dependency.
6689 (home-page "https://github.com/facelessuser/soupsieve")
6690 (synopsis "CSS selector library")
6691 (description
6692 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6693 Soup 4. It aims to provide selecting, matching, and filtering using modern
6694 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6695 specifications up through the latest CSS level 4 drafts and beyond (though
6696 some are not yet implemented).")
6697 (properties `((python2-variant . ,(delay python2-soupsieve))))
6698 (license license:expat)))
6699
6700 (define-public python2-soupsieve
6701 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6702 (package
6703 (inherit base)
6704 (propagated-inputs
6705 `(("python2-backports-functools-lru-cache"
6706 ,python2-backports-functools-lru-cache)
6707 ,@(package-propagated-inputs base))))))
6708
6709 (define-public python-netifaces
6710 (package
6711 (name "python-netifaces")
6712 (version "0.10.7")
6713 (source
6714 (origin
6715 (method url-fetch)
6716 (uri (pypi-uri "netifaces" version))
6717 (sha256
6718 (base32
6719 "1gccklrcplbbqh81g1mdgpa5y8na7kkf29cq2ka3f5a2fp5hyndx"))))
6720 (build-system python-build-system)
6721 (home-page "https://github.com/al45tair/netifaces")
6722 (synopsis
6723 "Python module for portable network interface information")
6724 (description
6725 "Netifaces is a Python module providing information on network
6726 interfaces in an easy and portable manner.")
6727 (license license:expat)))
6728
6729 (define-public python2-netifaces
6730 (package-with-python2 python-netifaces))
6731
6732 (define-public python-networkx
6733 (package
6734 (name "python-networkx")
6735 (version "2.4")
6736 (source
6737 (origin
6738 (method url-fetch)
6739 (uri (pypi-uri "networkx" version))
6740 (sha256
6741 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6742 (build-system python-build-system)
6743 (arguments
6744 '(#:phases (modify-phases %standard-phases
6745 (replace 'check
6746 (lambda* (#:key tests? #:allow-other-keys)
6747 (if tests?
6748 (invoke "pytest" "-vv" "--pyargs" "networkx")
6749 (format #t "test suite not run~%"))
6750 #t)))))
6751 ;; python-decorator is needed at runtime.
6752 (propagated-inputs
6753 `(("python-decorator" ,python-decorator)))
6754 (native-inputs
6755 `(("python-pytest" ,python-pytest)))
6756 (home-page "https://networkx.github.io/")
6757 (synopsis "Python module for creating and manipulating graphs and networks")
6758 (description
6759 "NetworkX is a Python package for the creation, manipulation, and study
6760 of the structure, dynamics, and functions of complex networks.")
6761 (properties `((python2-variant . ,(delay python2-networkx))))
6762 (license license:bsd-3)))
6763
6764 ;; NetworkX 2.2 is the last version with support for Python 2.
6765 (define-public python2-networkx
6766 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6767 (package
6768 (inherit base)
6769 (version "2.2")
6770 (source (origin
6771 (method url-fetch)
6772 (uri (pypi-uri "networkx" version ".zip"))
6773 (sha256
6774 (base32
6775 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6776 (arguments
6777 `(#:python ,python-2))
6778 (native-inputs
6779 `(("python-nose" ,python2-nose)
6780 ("unzip" ,unzip))))))
6781
6782 (define-public python-datrie
6783 (package
6784 (name "python-datrie")
6785 (version "0.8.2")
6786 (source
6787 (origin
6788 (method url-fetch)
6789 (uri (pypi-uri "datrie" version))
6790 (sha256
6791 (base32
6792 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6793 (build-system python-build-system)
6794 (native-inputs
6795 `(("python-cython" ,python-cython)
6796 ("python-hypothesis" ,python-hypothesis)
6797 ("python-pytest" ,python-pytest)
6798 ("python-pytest-runner" ,python-pytest-runner)))
6799 (home-page "https://github.com/kmike/datrie")
6800 (synopsis "Fast, efficiently stored trie for Python")
6801 (description
6802 "This package provides a fast, efficiently stored trie implementation for
6803 Python.")
6804 (license license:lgpl2.1+)))
6805
6806 (define-public snakemake
6807 (package
6808 (name "snakemake")
6809 (version "5.7.1")
6810 (source
6811 (origin
6812 (method url-fetch)
6813 (uri (pypi-uri "snakemake" version))
6814 (sha256
6815 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
6816 (build-system python-build-system)
6817 (arguments
6818 ;; TODO: Package missing test dependencies.
6819 '(#:tests? #f
6820 #:phases
6821 (modify-phases %standard-phases
6822 ;; For cluster execution Snakemake will call Python. Since there is
6823 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
6824 ;; this by calling the snakemake wrapper instead.
6825 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6826 (lambda* (#:key outputs #:allow-other-keys)
6827 (substitute* "snakemake/executors.py"
6828 (("\\{sys.executable\\} -m snakemake")
6829 (string-append (assoc-ref outputs "out")
6830 "/bin/snakemake")))
6831 #t)))))
6832 (propagated-inputs
6833 `(("python-appdirs" ,python-appdirs)
6834 ("python-configargparse" ,python-configargparse)
6835 ("python-datrie" ,python-datrie)
6836 ("python-docutils" ,python-docutils)
6837 ("python-gitpython" ,python-gitpython)
6838 ("python-jinja2" ,python-jinja2)
6839 ("python-jsonschema" ,python-jsonschema)
6840 ("python-networkx" ,python-networkx)
6841 ("python-psutil" ,python-psutil)
6842 ("python-pyyaml" ,python-pyyaml)
6843 ("python-ratelimiter" ,python-ratelimiter)
6844 ("python-requests" ,python-requests)
6845 ("python-wrapt" ,python-wrapt)))
6846 (home-page "https://snakemake.readthedocs.io")
6847 (synopsis "Python-based execution environment for make-like workflows")
6848 (description
6849 "Snakemake aims to reduce the complexity of creating workflows by
6850 providing a clean and modern domain specific specification language (DSL) in
6851 Python style, together with a fast and comfortable execution environment.")
6852 (license license:expat)))
6853
6854 (define-public python-pyqrcode
6855 (package
6856 (name "python-pyqrcode")
6857 (version "1.2.1")
6858 (source
6859 (origin
6860 (method url-fetch)
6861 (uri (pypi-uri "PyQRCode" version))
6862 (sha256
6863 (base32
6864 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
6865 (build-system python-build-system)
6866 (home-page
6867 "https://github.com/mnooner256/pyqrcode")
6868 (synopsis "QR code generator")
6869 (description
6870 "Pyqrcode is a QR code generator written purely in Python with
6871 SVG, EPS, PNG and terminal output.")
6872 (license license:bsd-3)))
6873
6874 (define-public python-seaborn
6875 (package
6876 (name "python-seaborn")
6877 (version "0.10.0")
6878 (source
6879 (origin
6880 (method url-fetch)
6881 (uri (pypi-uri "seaborn" version))
6882 (sha256
6883 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
6884 (build-system python-build-system)
6885 (arguments
6886 `(#:phases
6887 (modify-phases %standard-phases
6888 (add-before 'check 'start-xserver
6889 (lambda* (#:key inputs #:allow-other-keys)
6890 (let ((xorg-server (assoc-ref inputs "xorg-server")))
6891 ;; There must be a running X server and make check doesn't
6892 ;; start one. Therefore we must do it.
6893 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
6894 (setenv "DISPLAY" ":1")
6895 #t)))
6896 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
6897 (propagated-inputs
6898 `(("python-pandas" ,python-pandas)
6899 ("python-matplotlib" ,python-matplotlib)
6900 ("python-numpy" ,python-numpy)
6901 ("python-scipy" ,python-scipy)))
6902 (native-inputs
6903 `(("python-pytest" ,python-pytest)
6904 ("xorg-server" ,xorg-server-for-tests)))
6905 (home-page "https://seaborn.pydata.org/")
6906 (synopsis "Statistical data visualization")
6907 (description
6908 "Seaborn is a library for making attractive and informative statistical
6909 graphics in Python. It is built on top of matplotlib and tightly integrated
6910 with the PyData stack, including support for numpy and pandas data structures
6911 and statistical routines from scipy and statsmodels.")
6912 (properties `((python2-variant . ,(delay python2-seaborn))))
6913 (license license:bsd-3)))
6914
6915 ;; 0.9.1 is the last release with support for Python 2.
6916 (define-public python2-seaborn
6917 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
6918 (package
6919 (inherit base)
6920 (version "0.9.1")
6921 (source (origin
6922 (method url-fetch)
6923 (uri (pypi-uri "seaborn" version))
6924 (sha256
6925 (base32
6926 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
6927
6928 (define-public python-mpmath
6929 (package
6930 (name "python-mpmath")
6931 (version "0.19")
6932 (source (origin
6933 (method url-fetch)
6934 (uri (string-append "http://mpmath.org/files/mpmath-"
6935 version ".tar.gz"))
6936 (sha256
6937 (base32
6938 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
6939 (build-system python-build-system)
6940 (arguments
6941 '(#:phases
6942 (modify-phases %standard-phases
6943 (replace 'check
6944 (lambda _
6945 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
6946 (home-page "http://mpmath.org")
6947 (synopsis "Arbitrary-precision floating-point arithmetic in python")
6948 (description
6949 "@code{mpmath} can be used as an arbitrary-precision substitute for
6950 Python's float/complex types and math/cmath modules, but also does much
6951 more advanced mathematics.")
6952 (license license:bsd-3)))
6953
6954 (define-public python2-mpmath
6955 (package-with-python2 python-mpmath))
6956
6957 (define-public python-bigfloat
6958 (package
6959 (name "python-bigfloat")
6960 (version "0.3.0")
6961 (source
6962 (origin
6963 (method url-fetch)
6964 (uri (pypi-uri "bigfloat" version))
6965 (sha256
6966 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
6967 (build-system python-build-system)
6968 (inputs
6969 `(("mpfr" ,mpfr)))
6970 (home-page "https://github.com/mdickinson/bigfloat")
6971 (synopsis "Arbitrary precision floating-point arithmetic for Python")
6972 (description
6973 "This package provides a Python interface to the MPFR library for
6974 multiprecision arithmetic.")
6975 (license license:lgpl3+)))
6976
6977 (define-public python2-bigfloat
6978 (package-with-python2 python-bigfloat))
6979
6980 (define-public python-sympy
6981 (package
6982 (name "python-sympy")
6983 (version "1.1.1")
6984 (source
6985 (origin
6986 (method url-fetch)
6987 (uri (string-append
6988 "https://github.com/sympy/sympy/releases/download/sympy-"
6989 version "/sympy-" version ".tar.gz"))
6990 (sha256
6991 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
6992 (build-system python-build-system)
6993 (arguments
6994 `(#:phases
6995 (modify-phases %standard-phases
6996 ;; Run the core tests after installation. By default it would run
6997 ;; *all* tests, which take a very long time to complete and are known
6998 ;; to be flaky.
6999 (delete 'check)
7000 (add-after 'install 'check
7001 (lambda* (#:key outputs #:allow-other-keys)
7002 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7003 #t)))))
7004 (propagated-inputs
7005 `(("python-mpmath" ,python-mpmath)))
7006 (home-page "https://www.sympy.org/")
7007 (synopsis "Python library for symbolic mathematics")
7008 (description
7009 "SymPy is a Python library for symbolic mathematics. It aims to become a
7010 full-featured computer algebra system (CAS) while keeping the code as simple
7011 as possible in order to be comprehensible and easily extensible.")
7012 (license license:bsd-3)))
7013
7014 (define-public python2-sympy
7015 (package
7016 (inherit (package-with-python2 python-sympy))
7017 (arguments
7018 `(#:phases
7019 (modify-phases %standard-phases
7020 ;; Run the core tests after installation. By default it would run
7021 ;; *all* tests, which take a very long time to complete and are known
7022 ;; to be flaky.
7023 (delete 'check)
7024 (add-after 'install 'check
7025 (lambda* (#:key outputs #:allow-other-keys)
7026 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7027 #t)))))))
7028
7029 (define-public python-q
7030 (package
7031 (name "python-q")
7032 (version "2.6")
7033 (source
7034 (origin
7035 (method url-fetch)
7036 (uri (pypi-uri "q" version))
7037 (sha256
7038 (base32
7039 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7040 (build-system python-build-system)
7041 (home-page "https://github.com/zestyping/q")
7042 (synopsis "Quick-and-dirty debugging output for tired programmers")
7043 (description
7044 "q is a Python module for \"print\" style of debugging Python code. It
7045 provides convenient short API for print out of values, tracebacks, and
7046 falling into the Python interpreter.")
7047 (license license:asl2.0)))
7048
7049 (define-public python2-q
7050 (package-with-python2 python-q))
7051
7052 (define-public python2-xlib
7053 (package
7054 (name "python2-xlib")
7055 (version "0.14")
7056 (source (origin
7057 (method url-fetch)
7058 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7059 "/" version "/"
7060 "python-xlib-" version ".tar.gz"))
7061 (sha256
7062 (base32
7063 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7064 (build-system python-build-system)
7065 (arguments
7066 `(#:python ,python-2 ;Python 2 only
7067 #:tests? #f)) ;no tests
7068 (home-page "http://python-xlib.sourceforge.net/")
7069 (synopsis "Python X11 client library")
7070 (description
7071 "The Python X Library is intended to be a fully functional X client
7072 library for Python programs. It is useful to implement low-level X clients.
7073 It is written entirely in Python.")
7074 (license license:gpl2+)))
7075
7076 (define-public python-singledispatch
7077 (package
7078 (name "python-singledispatch")
7079 (version "3.4.0.3")
7080 (source
7081 (origin
7082 (method url-fetch)
7083 (uri (pypi-uri "singledispatch" version))
7084 (sha256
7085 (base32
7086 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7087 (build-system python-build-system)
7088 (native-inputs
7089 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7090 (home-page
7091 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7092 (synopsis "Backport of singledispatch feature from Python 3.4")
7093 (description
7094 "This library brings functools.singledispatch from Python 3.4 to Python
7095 2.6-3.3.")
7096 (license license:expat)))
7097
7098 (define-public python2-singledispatch
7099 (package-with-python2 python-singledispatch))
7100
7101 ;; the python- version can be removed with python-3.5
7102 (define-public python-backports-abc
7103 (package
7104 (name "python-backports-abc")
7105 (version "0.5")
7106 (source
7107 (origin
7108 (method url-fetch)
7109 (uri (pypi-uri "backports_abc" version))
7110 (sha256
7111 (base32
7112 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7113 (build-system python-build-system)
7114 (home-page "https://github.com/cython/backports_abc")
7115 (synopsis "Backport of additions to the 'collections.abc' module")
7116 (description
7117 "Python-backports-abc provides a backport of additions to the
7118 @code{collections.abc} module in Python-3.5.")
7119 (license license:psfl)))
7120
7121 (define-public python2-backports-abc
7122 (package-with-python2 python-backports-abc))
7123
7124 (define-public python-backports-csv
7125 (package
7126 (name "python-backports-csv")
7127 (version "1.0.5")
7128 (source
7129 (origin
7130 (method url-fetch)
7131 (uri (pypi-uri "backports.csv" version))
7132 (sha256
7133 (base32
7134 "1imzbrradkfn8s2m1qcimyn74dn1mz2p3j381jljn166rf2i6hlc"))))
7135 (build-system python-build-system)
7136 (home-page "https://github.com/ryanhiebert/backports.csv")
7137 (synopsis "Backport of Python 3's csv module for Python 2")
7138 (description
7139 "Provides a backport of Python 3's @code{csv} module for parsing
7140 comma separated values. The API of the @code{csv} module in Python 2
7141 is drastically different from the @code{csv} module in Python 3.
7142 This is due, for the most part, to the difference between str in
7143 Python 2 and Python 3.")
7144 (license license:psfl)))
7145
7146 (define-public python2-backports-csv
7147 (package-with-python2 python-backports-csv))
7148
7149 (define-public python2-backports-shutil-get-terminal-size
7150 (package
7151 (name "python2-backports-shutil-get-terminal-size")
7152 (version "1.0.0")
7153 (source
7154 (origin
7155 (method url-fetch)
7156 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7157 (sha256
7158 (base32
7159 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7160 (build-system python-build-system)
7161 (arguments
7162 `(#:python ,python-2
7163 #:phases
7164 (modify-phases %standard-phases
7165 (replace 'check
7166 (lambda _
7167 (invoke "py.test" "-v"))))))
7168 (native-inputs
7169 `(("python2-pytest" ,python2-pytest)))
7170 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7171 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7172 (description
7173 "This package provides a backport of the @code{get_terminal_size
7174 function} from Python 3.3's @code{shutil}.
7175 Unlike the original version it is written in pure Python rather than C,
7176 so it might be a tiny bit slower.")
7177 (license license:expat)))
7178
7179 (define-public python-waf
7180 (package
7181 (name "python-waf")
7182 (version "2.0.19")
7183 (source (origin
7184 (method url-fetch)
7185 (uri (string-append "https://waf.io/"
7186 "waf-" version ".tar.bz2"))
7187 (sha256
7188 (base32
7189 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7190 (build-system python-build-system)
7191 (arguments
7192 '(#:phases
7193 (modify-phases %standard-phases
7194 (replace 'build
7195 (lambda _
7196 ;; XXX: Find a way to add all extra tools.
7197 (let ((tools '("gccdeps"
7198 "clang_compilation_database")))
7199 (invoke "python" "waf-light" "configure" "build"
7200 (string-append "--tools="
7201 (string-join tools ","))))))
7202 (replace 'check
7203 (lambda _
7204 (invoke "python" "waf" "--version")))
7205 (replace 'install
7206 (lambda* (#:key outputs #:allow-other-keys)
7207 (let ((out (assoc-ref outputs "out")))
7208 (install-file "waf" (string-append out "/bin")))
7209 #t))
7210 ;; waf breaks when it is wrapped.
7211 (delete 'wrap))))
7212 (home-page "https://waf.io/")
7213 (synopsis "Python-based build system")
7214 (description
7215 "Waf is a Python-based framework for configuring, compiling and installing
7216 applications.")
7217 (license license:bsd-3)))
7218
7219 (define-public python2-waf
7220 (package-with-python2 python-waf))
7221
7222 (define-public python-pyzmq
7223 (package
7224 (name "python-pyzmq")
7225 (version "17.1.2")
7226 (source
7227 (origin
7228 (method url-fetch)
7229 (uri (pypi-uri "pyzmq" version))
7230 (sha256
7231 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7232 (build-system python-build-system)
7233 (arguments
7234 `(#:configure-flags
7235 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7236 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7237 ;; --inplace' for 'python setup.py test' to work.
7238 #:tests? #f))
7239 (inputs
7240 `(("zeromq" ,zeromq)))
7241 (native-inputs
7242 `(("pkg-config" ,pkg-config)
7243 ("python-nose" ,python-nose)))
7244 (home-page "https://github.com/zeromq/pyzmq")
7245 (synopsis "Python bindings for 0MQ")
7246 (description
7247 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7248 (license license:bsd-4)))
7249
7250 (define-public python2-pyzmq
7251 (package-with-python2 python-pyzmq))
7252
7253 (define-public python-pep8
7254 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7255 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7256 ;; some dependents' test suites, and nothing more.
7257 (package
7258 (name "python-pep8")
7259 (version "1.7.0")
7260 (source
7261 (origin
7262 (method url-fetch)
7263 (uri (pypi-uri "pep8" version))
7264 (sha256
7265 (base32
7266 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7267 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7268 (build-system python-build-system)
7269 (home-page "https://pep8.readthedocs.org/")
7270 (synopsis "Python style guide checker")
7271 (description
7272 "This tools checks Python code against some of the style conventions in
7273 PEP 8.")
7274 (license license:expat)))
7275
7276 (define-public python2-pep8
7277 (package-with-python2 python-pep8))
7278
7279 (define-public python-pyflakes
7280 (package
7281 (name "python-pyflakes")
7282 (version "2.1.1")
7283 (source
7284 (origin
7285 (method url-fetch)
7286 (uri (pypi-uri "pyflakes" version))
7287 (sha256
7288 (base32
7289 "18pq95a1xj2dgdd0m85gyfsn40jajj4xc3lp8wfv7igqhrc86xnr"))))
7290 (build-system python-build-system)
7291 (home-page
7292 "https://github.com/pyflakes/pyflakes")
7293 (synopsis "Passive checker of Python programs")
7294 (description
7295 "Pyflakes statically checks Python source code for common errors.")
7296 (license license:expat)))
7297
7298 (define-public python2-pyflakes
7299 (package-with-python2 python-pyflakes))
7300
7301 (define-public python-mccabe
7302 (package
7303 (name "python-mccabe")
7304 (version "0.6.1")
7305 (source
7306 (origin
7307 (method url-fetch)
7308 (uri (pypi-uri "mccabe" version))
7309 (sha256
7310 (base32
7311 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7312 (build-system python-build-system)
7313 (native-inputs
7314 `(("python-pytest" ,python-pytest-bootstrap)
7315 ("python-pytest-runner" ,python-pytest-runner)))
7316 (home-page "https://github.com/flintwork/mccabe")
7317 (synopsis "McCabe checker, plugin for flake8")
7318 (description
7319 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7320 complexity of Python source code.")
7321 (license license:expat)))
7322
7323 (define-public python2-mccabe
7324 (package-with-python2 python-mccabe))
7325
7326 (define-public python-mccabe-0.2.1
7327 (package (inherit python-mccabe)
7328 (version "0.2.1")
7329 (source
7330 (origin
7331 (method url-fetch)
7332 (uri (pypi-uri "mccabe" version))
7333 (sha256
7334 (base32
7335 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7336
7337 (define-public python2-mccabe-0.2.1
7338 (package-with-python2 python-mccabe-0.2.1))
7339
7340 ;; Flake8 2.4.1 requires an older version of pep8.
7341 ;; This should be removed ASAP.
7342 (define-public python-pep8-1.5.7
7343 (package (inherit python-pep8)
7344 (version "1.5.7")
7345 (source
7346 (origin
7347 (method url-fetch)
7348 (uri (pypi-uri "pep8" version))
7349 (sha256
7350 (base32
7351 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7352 (arguments
7353 ;; XXX Tests not compatible with Python 3.5.
7354 '(#:tests? #f))))
7355
7356 (define-public python2-pep8-1.5.7
7357 (package-with-python2 python-pep8-1.5.7))
7358
7359 ;; Flake8 2.4.1 requires an older version of pyflakes.
7360 ;; This should be removed ASAP.
7361 (define-public python-pyflakes-0.8.1
7362 (package (inherit python-pyflakes)
7363 (version "0.8.1")
7364 (source
7365 (origin
7366 (method url-fetch)
7367 (uri (pypi-uri "pyflakes" version))
7368 (sha256
7369 (base32
7370 "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
7371 (arguments
7372 ;; XXX Tests not compatible with Python 3.5.
7373 '(#:tests? #f))))
7374
7375 (define-public python2-pyflakes-0.8.1
7376 (package-with-python2 python-pyflakes-0.8.1))
7377
7378 (define-public python-flake8
7379 (package
7380 (name "python-flake8")
7381 (version "3.7.7")
7382 (source (origin
7383 (method url-fetch)
7384 (uri (pypi-uri "flake8" version))
7385 (sha256
7386 (base32
7387 "0qg6zggqigrd4k3gv88shd1a27d0cwgfql8vfiq2c7rl7w3rd6c5"))))
7388 (build-system python-build-system)
7389 (arguments
7390 `(#:phases
7391 (modify-phases %standard-phases
7392 (delete 'check)
7393 (add-after 'install 'check
7394 (lambda* (#:key inputs outputs #:allow-other-keys)
7395 (add-installed-pythonpath inputs outputs)
7396 (invoke "pytest" "-v")
7397 #t)))))
7398 (propagated-inputs
7399 `(("python-pycodestyle" ,python-pycodestyle)
7400 ("python-entrypoints" ,python-entrypoints)
7401 ("python-pyflakes" ,python-pyflakes)
7402 ("python-mccabe" ,python-mccabe)))
7403 (native-inputs
7404 `(("python-mock" ,python-mock)
7405 ("python-pytest" ,python-pytest-bootstrap)
7406 ("python-pytest-runner" ,python-pytest-runner)))
7407 (home-page "https://gitlab.com/pycqa/flake8")
7408 (synopsis
7409 "The modular source code checker: pep8, pyflakes and co")
7410 (description
7411 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7412 (properties `((python2-variant . ,(delay python2-flake8))))
7413 (license license:expat)))
7414
7415 (define-public python2-flake8
7416 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7417 (package (inherit base)
7418 (propagated-inputs
7419 `(("python2-configparser" ,python2-configparser)
7420 ("python2-enum34" ,python2-enum34)
7421 ("python2-functools32" ,python2-functools32)
7422 ("python2-typing" ,python2-typing)
7423 ,@(package-propagated-inputs base))))))
7424
7425 ;; python-hacking requires flake8 <2.6.0.
7426 (define-public python-flake8-2.5
7427 (package
7428 (inherit python-flake8)
7429 (version "2.5.5")
7430 (source (origin
7431 (method url-fetch)
7432 (uri (pypi-uri "flake8" version))
7433 (sha256
7434 (base32
7435 "1snylqwbmrylbx3r1wpz8ggk98f6bcag4441ag8mm2l7wyn58sij"))))
7436 (propagated-inputs
7437 `(("python-pep8" ,python-pep8)
7438 ,@(package-propagated-inputs python-flake8)))
7439 (properties `((python2-variant . ,(delay python2-flake8-2.5))))))
7440
7441 (define-public python2-flake8-2.5
7442 (package
7443 (inherit python2-flake8)
7444 (version (package-version python-flake8-2.5))
7445 (source (origin
7446 (inherit (package-source python-flake8-2.5))))
7447 (propagated-inputs
7448 `(("python2-pep8" ,python2-pep8)
7449 ,@(package-propagated-inputs python2-flake8)))))
7450
7451 (define-public python-flake8-polyfill
7452 (package
7453 (name "python-flake8-polyfill")
7454 (version "1.0.2")
7455 (source
7456 (origin
7457 (method url-fetch)
7458 (uri (pypi-uri "flake8-polyfill" version))
7459 (sha256
7460 (base32
7461 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7462 (build-system python-build-system)
7463 (arguments
7464 '(#:phases
7465 (modify-phases %standard-phases
7466 (replace 'check
7467 (lambda _
7468 ;; Be compatible with Pytest 4:
7469 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7470 (substitute* "setup.cfg"
7471 (("\\[pytest\\]")
7472 "[tool:pytest]"))
7473
7474 (setenv "PYTHONPATH"
7475 (string-append (getcwd) "/build/lib:"
7476 (getenv "PYTHONPATH")))
7477 (invoke "py.test" "-v"))))))
7478 (native-inputs
7479 `(("python-flake8" ,python-flake8)
7480 ("python-mock" ,python-mock)
7481 ("python-pep8" ,python-pep8)
7482 ("python-pycodestyle" ,python-pycodestyle)
7483 ("python-pytest" ,python-pytest)))
7484 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7485 (synopsis "Polyfill package for Flake8 plugins")
7486 (description
7487 "This package that provides some compatibility helpers for Flake8
7488 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7489 (license license:expat)))
7490
7491 (define-public python2-flake8-polyfill
7492 (package-with-python2 python-flake8-polyfill))
7493
7494 (define-public python-mistune
7495 (package
7496 (name "python-mistune")
7497 (version "0.8.4")
7498 (source
7499 (origin
7500 (method url-fetch)
7501 (uri (pypi-uri "mistune" version))
7502 (sha256
7503 (base32
7504 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7505 (build-system python-build-system)
7506 (native-inputs
7507 `(("python-nose" ,python-nose)
7508 ("python-cython" ,python-cython)))
7509 (home-page "https://github.com/lepture/mistune")
7510 (synopsis "Markdown parser in pure Python")
7511 (description "This package provides a fast markdown parser in pure
7512 Python.")
7513 (license license:bsd-3)))
7514
7515 (define-public python2-mistune
7516 (package-with-python2 python-mistune))
7517
7518 (define-public python-markdown
7519 (package
7520 (name "python-markdown")
7521 (version "3.2.1")
7522 (source
7523 (origin
7524 (method url-fetch)
7525 (uri (pypi-uri "Markdown" version))
7526 (sha256
7527 (base32
7528 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7529 (build-system python-build-system)
7530 (native-inputs
7531 `(("python-nose" ,python-nose)
7532 ("python-pyyaml" ,python-pyyaml)))
7533 (home-page "https://python-markdown.github.io/")
7534 (synopsis "Python implementation of Markdown")
7535 (description
7536 "This package provides a Python implementation of John Gruber's
7537 Markdown. The library features international input, various Markdown
7538 extensions, and several HTML output formats. A command line wrapper
7539 markdown_py is also provided to convert Markdown files to HTML.")
7540 (properties `((python2-variant . ,(delay python2-markdown))))
7541 (license license:bsd-3)))
7542
7543 ;; Markdown 3.2 dropped support for Python 2.
7544 (define-public python2-markdown
7545 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7546 (package/inherit
7547 base
7548 (version "3.1.1")
7549 (source (origin
7550 (method url-fetch)
7551 (uri (pypi-uri "Markdown" version))
7552 (sha256
7553 (base32
7554 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7555
7556 (define-public python-ptyprocess
7557 (package
7558 (name "python-ptyprocess")
7559 (version "0.5.2")
7560 (source
7561 (origin
7562 (method url-fetch)
7563 (uri (pypi-uri "ptyprocess" version))
7564 (sha256
7565 (base32
7566 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7567 (build-system python-build-system)
7568 (native-inputs
7569 `(("python-nose" ,python-nose)))
7570 (arguments
7571 `(#:phases
7572 (modify-phases %standard-phases
7573 (replace 'check
7574 (lambda _ (invoke "nosetests"))))))
7575 (home-page "https://github.com/pexpect/ptyprocess")
7576 (synopsis "Run a subprocess in a pseudo terminal")
7577 (description
7578 "This package provides a Python library used to launch a subprocess in a
7579 pseudo terminal (pty), and interact with both the process and its pty.")
7580 (license license:isc)))
7581
7582 (define-public python2-ptyprocess
7583 (package-with-python2 python-ptyprocess))
7584
7585 (define-public python-cram
7586 (package
7587 (name "python-cram")
7588 (version "0.7")
7589 (home-page "https://bitheap.org/cram/")
7590 (source (origin
7591 (method url-fetch)
7592 (uri (list (string-append home-page "cram-"
7593 version ".tar.gz")
7594 (pypi-uri "cram" version)))
7595 (sha256
7596 (base32
7597 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7598 (arguments
7599 '(#:phases
7600 (modify-phases %standard-phases
7601 (add-after 'unpack 'patch-source
7602 (lambda _
7603 (substitute* (find-files "cram" ".*\\.py$")
7604 ;; Replace default shell path.
7605 (("/bin/sh") (which "sh")))
7606 (substitute* (find-files "tests" ".*\\.t$")
7607 (("md5") "md5sum")
7608 (("/bin/bash") (which "bash"))
7609 (("/bin/sh") (which "sh")))
7610 (substitute* "cram/_test.py"
7611 ;; This hack works around a bug triggered by substituting
7612 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7613 ;; "cram -h", which breaks the output at 80 characters. This
7614 ;; causes the line showing the default shell to break into two
7615 ;; lines, but the test expects a single line...
7616 (("env\\['COLUMNS'\\] = '80'")
7617 "env['COLUMNS'] = '160'"))
7618
7619 (substitute* "Makefile"
7620 ;; Recent versions of python-coverage have caused the test
7621 ;; coverage to decrease (as of version 0.7). Allow that.
7622 (("--fail-under=100")
7623 "--fail-under=90"))
7624
7625 #t))
7626 (replace 'check
7627 ;; The test phase uses the built library and executable.
7628 (lambda* (#:key inputs outputs #:allow-other-keys)
7629 (add-installed-pythonpath inputs outputs)
7630 (setenv "PATH" (string-append (getenv "PATH") ":"
7631 (assoc-ref outputs "out") "/bin"))
7632 (invoke "make" "test"))))))
7633 (build-system python-build-system)
7634 (native-inputs
7635 `(("python-coverage" ,python-coverage)
7636 ("which" ,which)))
7637 (synopsis "Simple testing framework for command line applications")
7638 (description
7639 "Cram is a functional testing framework for command line applications.
7640 Cram tests look like snippets of interactive shell sessions. Cram runs each
7641 command and compares the command output in the test with the command’s actual
7642 output.")
7643 (license license:gpl2+)))
7644
7645 (define-public python2-cram
7646 (package-with-python2 python-cram))
7647
7648 (define-public python-straight-plugin
7649 (package
7650 (name "python-straight-plugin")
7651 (version "1.4.1")
7652 (source
7653 (origin
7654 (method url-fetch)
7655 (uri (pypi-uri "straight.plugin" version))
7656 (sha256
7657 (base32
7658 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7659 (build-system python-build-system)
7660 (home-page "https://github.com/ironfroggy/straight.plugin")
7661 (synopsis "Simple namespaced plugin facility")
7662 (description "Straight Plugin provides a type of plugin you can create from
7663 almost any existing Python modules, and an easy way for outside developers to
7664 add functionality and customization to your projects with their own plugins.")
7665 (license license:expat)))
7666
7667 (define-public python2-straight-plugin
7668 (package-with-python2 python-straight-plugin))
7669
7670 (define-public python-fonttools
7671 (package
7672 (name "python-fonttools")
7673 (version "3.38.0")
7674 (source (origin
7675 (method url-fetch)
7676 (uri (pypi-uri "fonttools" version ".zip"))
7677 (sha256
7678 (base32
7679 "12ripk3s7skgxr1bs9r8n13r94ym3s8iir7ivfixls9fa4dabmlh"))))
7680 (build-system python-build-system)
7681 (native-inputs
7682 `(("unzip" ,unzip)
7683 ("python-pytest" ,python-pytest)
7684 ("python-pytest-runner" ,python-pytest-runner)))
7685 (home-page "https://github.com/fonttools/fonttools")
7686 (synopsis "Tools to manipulate font files")
7687 (description
7688 "FontTools/TTX is a library to manipulate font files from Python. It
7689 supports reading and writing of TrueType/OpenType fonts, reading and writing
7690 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7691 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7692 from an XML-based format.")
7693 (license license:expat)))
7694
7695 (define-public python2-fonttools
7696 (package-with-python2 python-fonttools))
7697
7698 (define-public python-ly
7699 (package
7700 (name "python-ly")
7701 (version "0.9.5")
7702 (source
7703 (origin
7704 (method url-fetch)
7705 (uri (pypi-uri name version))
7706 (sha256
7707 (base32
7708 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7709 (build-system python-build-system)
7710 (arguments
7711 ;; FIXME: Some tests need network access.
7712 '(#:tests? #f))
7713 (synopsis "Tool and library for manipulating LilyPond files")
7714 (description "This package provides a Python library to parse, manipulate
7715 or create documents in LilyPond format. A command line program ly is also
7716 provided that can be used to do various manipulations with LilyPond files.")
7717 (home-page "https://pypi.org/project/python-ly/")
7718 (license license:gpl2+)))
7719
7720 (define-public python-appdirs
7721 (package
7722 (name "python-appdirs")
7723 (version "1.4.3")
7724 (source
7725 (origin
7726 (method url-fetch)
7727 (uri (pypi-uri "appdirs" version))
7728 (sha256
7729 (base32
7730 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7731 (build-system python-build-system)
7732 (home-page "https://github.com/ActiveState/appdirs")
7733 (synopsis
7734 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7735 (description
7736 "This module provides a portable way of finding out where user data
7737 should be stored on various operating systems.")
7738 (license license:expat)))
7739
7740 (define-public python2-appdirs
7741 (package-with-python2 python-appdirs))
7742
7743 (define-public python-llfuse
7744 (package
7745 (name "python-llfuse")
7746 (version "1.3.5")
7747 (source (origin
7748 (method url-fetch)
7749 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7750 (sha256
7751 (base32
7752 "1n7a90jww3ly49fm7x27m3xw3la3qfrnykcakga654g6kcyjlhbf"))))
7753 (build-system python-build-system)
7754 (inputs
7755 `(("fuse" ,fuse)
7756 ("attr" ,attr)))
7757 (native-inputs
7758 `(("pkg-config" ,pkg-config)))
7759 (synopsis "Python bindings for FUSE")
7760 (description
7761 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7762 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7763 (license license:lgpl2.0+)
7764 (properties `((python2-variant . ,(delay python2-llfuse))))))
7765
7766 (define-public python2-llfuse
7767 (package (inherit (package-with-python2
7768 (strip-python2-variant python-llfuse)))
7769 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7770
7771 ;; For attic-0.16
7772 (define-public python-llfuse-0.41
7773 (package (inherit python-llfuse)
7774 (version "0.41.1")
7775 (source (origin
7776 (method url-fetch)
7777 (uri (string-append
7778 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
7779 "llfuse-" version ".tar.bz2"))
7780 (sha256
7781 (base32
7782 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
7783 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
7784 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
7785 (license (list license:expat license:lgpl2.0+))))
7786
7787 (define-public python-msgpack
7788 (package
7789 (name "python-msgpack")
7790 (version "1.0.0")
7791 (source (origin
7792 (method url-fetch)
7793 (uri (pypi-uri "msgpack" version))
7794 (sha256
7795 (base32
7796 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
7797 (build-system python-build-system)
7798 (arguments
7799 `(#:modules ((guix build utils)
7800 (guix build python-build-system)
7801 (ice-9 ftw)
7802 (srfi srfi-1)
7803 (srfi srfi-26))
7804 #:phases
7805 (modify-phases %standard-phases
7806 (replace 'check
7807 (lambda _
7808 (let ((cwd (getcwd)))
7809 (setenv "PYTHONPATH"
7810 (string-append cwd "/build/"
7811 (find (cut string-prefix? "lib" <>)
7812 (scandir (string-append cwd "/build")))
7813 ":"
7814 (getenv "PYTHONPATH")))
7815 (invoke "pytest" "-v" "test")))))))
7816 (native-inputs
7817 `(("python-pytest" ,python-pytest)))
7818 (synopsis "MessagePack (de)serializer")
7819 (description "MessagePack is a fast, compact binary serialization format,
7820 suitable for similar data to JSON. This package provides CPython bindings for
7821 reading and writing MessagePack data.")
7822 (home-page "https://pypi.org/project/msgpack/")
7823 (license license:asl2.0)))
7824
7825 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
7826 ;; release 0.5. Some packages like borg still call it by the old name for now.
7827 ;; <https://bugs.gnu.org/30662>
7828 (define-public python-msgpack-transitional
7829 (package
7830 (inherit python-msgpack)
7831 (name "python-msgpack-transitional")
7832 (version "0.5.6")
7833 (source (origin
7834 (method url-fetch)
7835 (uri (pypi-uri "msgpack" version))
7836 (sha256
7837 (base32
7838 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
7839 (arguments
7840 (substitute-keyword-arguments (package-arguments python-msgpack)
7841 ((#:phases phases)
7842 `(modify-phases ,phases
7843 (add-after 'unpack 'configure-transitional
7844 (lambda _
7845 ;; Keep using the old name.
7846 (substitute* "setup.py"
7847 (("TRANSITIONAL = False")
7848 "TRANSITIONAL = 1"))
7849 #t))))))))
7850
7851 (define-public python2-msgpack
7852 (package-with-python2 python-msgpack))
7853
7854 (define-public python-netaddr
7855 (package
7856 (name "python-netaddr")
7857 (version "0.7.19")
7858 (source
7859 (origin
7860 (method url-fetch)
7861 (uri (pypi-uri "netaddr" version))
7862 (sha256
7863 (base32
7864 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
7865 (build-system python-build-system)
7866 (arguments `(#:tests? #f)) ;; No tests.
7867 (home-page "https://github.com/drkjam/netaddr/")
7868 (synopsis "Pythonic manipulation of network addresses")
7869 (description
7870 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7871 and MAC network addresses.")
7872 (license license:bsd-3)))
7873
7874 (define-public python2-netaddr
7875 (package-with-python2 python-netaddr))
7876
7877 (define-public python2-pyroute2
7878 (package
7879 (name "python2-pyroute2")
7880 (version "0.5.6")
7881 (source
7882 (origin
7883 (method url-fetch)
7884 (uri (pypi-uri "pyroute2" version))
7885 (sha256
7886 (base32
7887 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
7888 (build-system python-build-system)
7889 (arguments
7890 `(#:python ,python-2)) ;Python 3.x is not supported
7891 (home-page "https://github.com/svinota/pyroute2")
7892 (synopsis "Python netlink library")
7893 (description
7894 "Pyroute2 is a pure Python netlink library with minimal dependencies.
7895 Supported netlink families and protocols include:
7896 @itemize
7897 @item rtnl, network settings - addresses, routes, traffic controls
7898 @item nfnetlink - netfilter API: ipset, nftables, ...
7899 @item ipq - simplest userspace packet filtering, iptables QUEUE target
7900 @item devlink - manage and monitor devlink-enabled hardware
7901 @item generic - generic netlink families
7902 @itemize
7903 @item nl80211 - wireless functions API (basic support)
7904 @item taskstats - extended process statistics
7905 @item acpi_events - ACPI events monitoring
7906 @item thermal_events - thermal events monitoring
7907 @item VFS_DQUOT - disk quota events monitoring
7908 @end itemize
7909 @end itemize")
7910 (license license:gpl2+)))
7911
7912 (define-public python-wrapt
7913 (package
7914 (name "python-wrapt")
7915 (version "1.11.2")
7916 (source
7917 (origin
7918 (method url-fetch)
7919 (uri (pypi-uri "wrapt" version))
7920 (sha256
7921 (base32
7922 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
7923 (build-system python-build-system)
7924 (arguments
7925 ;; Tests are not included in the tarball, they are only available in the
7926 ;; git repository.
7927 `(#:tests? #f))
7928 (home-page "https://github.com/GrahamDumpleton/wrapt")
7929 (synopsis "Module for decorators, wrappers and monkey patching")
7930 (description
7931 "The aim of the wrapt module is to provide a transparent object proxy for
7932 Python, which can be used as the basis for the construction of function
7933 wrappers and decorator functions.")
7934 (license license:bsd-2)))
7935
7936 (define-public python2-wrapt
7937 (package-with-python2 python-wrapt))
7938
7939 (define-public python-xlrd
7940 (package
7941 (name "python-xlrd")
7942 (version "1.2.0")
7943 (source (origin
7944 (method url-fetch)
7945 (uri (pypi-uri "xlrd" version))
7946 (sha256
7947 (base32
7948 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
7949 (build-system python-build-system)
7950 (arguments
7951 `(#:phases
7952 (modify-phases %standard-phases
7953 ;; Some tests depend on writing a temporary file to the user's home
7954 ;; directory.
7955 (add-after 'unpack 'fix-tests
7956 (lambda _
7957 (delete-file "tests/test_open_workbook.py")
7958 #t)))))
7959 (home-page "http://www.python-excel.org/")
7960 (synopsis "Library for extracting data from Excel files")
7961 (description "This package provides a library to extract data from
7962 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
7963 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
7964 Unicode-aware. It is not intended as an end-user tool.")
7965 (license license:bsd-3)))
7966
7967 (define-public python2-xlrd
7968 (package-with-python2 python-xlrd))
7969
7970 (define-public python-prettytable
7971 (package
7972 (name "python-prettytable")
7973 (version "0.7.2")
7974 (source
7975 (origin
7976 (method url-fetch)
7977 (uri (pypi-uri "prettytable" version ".tar.bz2"))
7978 (sha256
7979 (base32
7980 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
7981 (build-system python-build-system)
7982 (home-page "https://code.google.com/archive/p/prettytable/")
7983 (synopsis "Display tabular data in an ASCII table format")
7984 (description
7985 "A library designed to represent tabular data in visually appealing ASCII
7986 tables. PrettyTable allows for selection of which columns are to be printed,
7987 independent alignment of columns (left or right justified or centred) and
7988 printing of sub-tables by specifying a row range.")
7989 (license license:bsd-3)))
7990
7991 (define-public python2-prettytable
7992 (package-with-python2 python-prettytable))
7993
7994 (define-public python-tables
7995 (package
7996 (name "python-tables")
7997 (version "3.4.4")
7998 (source
7999 (origin
8000 (method url-fetch)
8001 (uri (pypi-uri "tables" version))
8002 (sha256
8003 (base32
8004 "0affz7k8babh8wdmsgrz5jxrd569by2w8ffimcxs9wiaf5rw1idx"))
8005 (modules '((guix build utils)))
8006 (snippet
8007 '(begin
8008 ;; Remove pre-compiled .pyc files from source.
8009 (for-each delete-file-recursively
8010 (find-files "." "__pycache__" #:directories? #t))
8011 (for-each delete-file (find-files "." "\\.pyc$"))
8012 #t))))
8013 (build-system python-build-system)
8014 (arguments
8015 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8016 ;; or "check", so we must override the build and check phases.
8017 #:phases
8018 (modify-phases %standard-phases
8019 (add-after 'unpack 'use-gcc
8020 (lambda _
8021 (substitute* "setup.py"
8022 (("compiler = new_compiler\\(\\)" line)
8023 (string-append line
8024 "\ncompiler.set_executables(compiler='gcc',"
8025 "compiler_so='gcc',"
8026 "linker_exe='gcc',"
8027 "linker_so='gcc -shared')")))
8028 #t))
8029 (add-after 'unpack 'disable-tuning
8030 (lambda _
8031 (substitute* "setup.py"
8032 (("cpu_flags = .*")
8033 "cpu_flags = ['sse2']\n"))
8034 #t))
8035 (replace 'build
8036 (lambda* (#:key inputs #:allow-other-keys)
8037 (invoke "python" "setup.py" "build"
8038 (string-append "--hdf5="
8039 (assoc-ref inputs "hdf5")))))
8040 (replace 'check
8041 (lambda* (#:key inputs #:allow-other-keys)
8042 (invoke "python" "setup.py" "check"
8043 (string-append "--hdf5="
8044 (assoc-ref inputs "hdf5"))))))))
8045 (propagated-inputs
8046 `(("python-numexpr" ,python-numexpr)
8047 ("python-numpy" ,python-numpy)))
8048 (native-inputs
8049 `(("python-cython" ,python-cython)
8050 ("pkg-config" ,pkg-config)))
8051 (inputs
8052 `(("hdf5" ,hdf5-1.10)
8053 ("bzip2" ,bzip2)
8054 ("zlib" ,zlib)))
8055 (home-page "https://www.pytables.org/")
8056 (synopsis "Hierarchical datasets for Python")
8057 (description "PyTables is a package for managing hierarchical datasets and
8058 designed to efficiently cope with extremely large amounts of data.")
8059 (license license:bsd-3)))
8060
8061 (define-public python2-tables
8062 (package-with-python2 python-tables))
8063
8064 (define-public python-pytest-black
8065 (package
8066 (name "python-pytest-black")
8067 (version "0.3.8")
8068 (source
8069 (origin
8070 (method url-fetch)
8071 (uri (pypi-uri "pytest-black" version))
8072 (sha256
8073 (base32
8074 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8075 (build-system python-build-system)
8076 (propagated-inputs
8077 `(("python-pytest" ,python-pytest)
8078 ("python-black" ,python-black)
8079 ("python-toml" ,python-toml)))
8080 (native-inputs
8081 `(("python-setuptools-scm" ,python-setuptools-scm)))
8082 (home-page "https://github.com/shopkeep/pytest-black")
8083 (synopsis "Pytest plugin to enable format checking with black")
8084 (description
8085 "This package provides a pytest plugin to enable format checking with the
8086 Python code formatter \"black\".")
8087 (license license:expat)))
8088
8089 (define-public python-get-version
8090 (package
8091 (name "python-get-version")
8092 (version "2.1")
8093 (source
8094 (origin
8095 (method url-fetch)
8096 (uri (pypi-uri "get_version" version))
8097 (sha256
8098 (base32
8099 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8100 (build-system python-build-system)
8101 (propagated-inputs
8102 `(("python-pygments" ,python-pygments)
8103 ("python-pytest" ,python-pytest)
8104 ("python-pytest-black" ,python-pytest-black)
8105 ("python-pytest-cov" ,python-pytest-cov)
8106 ("python-setuptools" ,python-setuptools)
8107 ("python-testpath" ,python-testpath)))
8108 (home-page "https://github.com/flying-sheep/get_version")
8109 (synopsis "Version helper in the spirit of versioneer")
8110 (description
8111 "This package provides a version helper that lets you automatically use
8112 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8113 also supports getting the version from Python source distributions or, once
8114 your package is installed, via @code{pkg_resources} (part of
8115 @code{setuptools}).")
8116 (license license:gpl3+)))
8117
8118 (define-public python-legacy-api-wrap
8119 (package
8120 (name "python-legacy-api-wrap")
8121 (version "1.2")
8122 (source
8123 (origin
8124 (method url-fetch)
8125 (uri (pypi-uri "legacy-api-wrap" version))
8126 (sha256
8127 (base32
8128 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8129 (build-system python-build-system)
8130 (propagated-inputs
8131 `(("python-get-version" ,python-get-version)
8132 ("python-pytest" ,python-pytest)
8133 ("python-pytest-black" ,python-pytest-black)
8134 ("python-pytest-cov" ,python-pytest-cov)
8135 ("python-setuptools" ,python-setuptools)))
8136 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8137 (synopsis "Legacy API wrapper")
8138 (description "This module defines a decorator to wrap legacy APIs. The
8139 primary use case is APIs defined before keyword-only parameters existed.")
8140 (license license:gpl3+)))
8141
8142 (define-public python-pyasn1
8143 (package
8144 (name "python-pyasn1")
8145 (version "0.4.8")
8146 (source
8147 (origin
8148 (method url-fetch)
8149 (uri (pypi-uri "pyasn1" version))
8150 (sha256
8151 (base32
8152 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8153 (build-system python-build-system)
8154 (home-page "http://pyasn1.sourceforge.net/")
8155 (synopsis "ASN.1 types and codecs")
8156 (description
8157 "This is an implementation of ASN.1 types and codecs in Python. It is
8158 suitable for a wide range of protocols based on the ASN.1 specification.")
8159 (license license:bsd-2)))
8160
8161 (define-public python2-pyasn1
8162 (package-with-python2 python-pyasn1))
8163
8164 (define-public python-pyasn1-modules
8165 (package
8166 (name "python-pyasn1-modules")
8167 (version "0.2.2")
8168 (source
8169 (origin
8170 (method url-fetch)
8171 (uri (pypi-uri "pyasn1-modules" version))
8172 (sha256
8173 (base32
8174 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8175 (build-system python-build-system)
8176 (propagated-inputs
8177 `(("python-pyasn1" ,python-pyasn1)))
8178 (home-page "https://sourceforge.net/projects/pyasn1/")
8179 (synopsis "ASN.1 codec implementations")
8180 (description
8181 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8182 implementations of ASN.1-based codecs and protocols.")
8183 (license license:bsd-3)))
8184
8185 (define-public python2-pyasn1-modules
8186 (package-with-python2 python-pyasn1-modules))
8187
8188 (define-public python-ipaddress
8189 (package
8190 (name "python-ipaddress")
8191 (version "1.0.22")
8192 (source (origin
8193 (method url-fetch)
8194 (uri (pypi-uri "ipaddress" version))
8195 (sha256
8196 (base32
8197 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8198 (build-system python-build-system)
8199 (home-page "https://github.com/phihag/ipaddress")
8200 (synopsis "IP address manipulation library")
8201 (description
8202 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8203 in Python. This library is used to create, poke at, and manipulate IPv4 and
8204 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8205 module to older versions of Python.")
8206 (license license:psfl)))
8207
8208 (define-public python2-ipaddress
8209 (package-with-python2 python-ipaddress))
8210
8211 (define-public python2-ipaddr
8212 (package
8213 (name "python2-ipaddr")
8214 (version "2.1.11")
8215 (source
8216 (origin
8217 (method url-fetch)
8218 (uri (pypi-uri "ipaddr" version))
8219 (sha256
8220 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8221 (build-system python-build-system)
8222 (arguments
8223 `(#:python ,python-2 ;version 2 only
8224 #:phases
8225 (modify-phases %standard-phases
8226 (replace 'check
8227 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8228 (home-page "https://github.com/google/ipaddr-py")
8229 (synopsis "IP address manipulation library")
8230 (description
8231 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8232 IPv6 addresses and networks.
8233
8234 For new implementations you may prefer to use the standard module
8235 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8236 versions of Python.")
8237 (license license:asl2.0)))
8238
8239 (define-public python-idna
8240 (package
8241 (name "python-idna")
8242 (version "2.8")
8243 (source
8244 (origin
8245 (method url-fetch)
8246 (uri (pypi-uri "idna" version))
8247 (sha256
8248 (base32
8249 "01rlkigdxg17sf9yar1jl8n18ls59367wqh59hnawlyg53vb6my3"))))
8250 (build-system python-build-system)
8251 (home-page "https://github.com/kjd/idna")
8252 (synopsis "Internationalized domain names in applications")
8253 (description
8254 "This is a library to support the Internationalised Domain Names in
8255 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8256 protocol is often referred to as “IDNA2008” and can produce different results
8257 from the earlier standard from 2003. The library is also intended to act as a
8258 suitable drop-in replacement for the “encodings.idna” module that comes with
8259 the Python standard library but currently only supports the older 2003
8260 specification.")
8261 (license license:bsd-4)))
8262
8263 (define-public python-idna-2.7
8264 (package (inherit python-idna)
8265 (version "2.7")
8266 (source (origin
8267 (method url-fetch)
8268 (uri (pypi-uri "idna" version))
8269 (sha256
8270 (base32
8271 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8272
8273
8274 (define-public python2-idna
8275 (package-with-python2 python-idna))
8276
8277 (define-public python-idna-ssl
8278 (package
8279 (name "python-idna-ssl")
8280 (version "1.0.1")
8281 (source
8282 (origin
8283 (method url-fetch)
8284 (uri (pypi-uri "idna-ssl" version))
8285 (sha256
8286 (base32
8287 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8288 (build-system python-build-system)
8289 (arguments
8290 `(#:tests? #f)) ;circular dependency with python-aiohttp
8291 (home-page "https://github.com/aio-libs/idna-ssl")
8292 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8293 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8294 domains support.")
8295 (license license:expat)))
8296
8297 (define-public python-pretend
8298 (package
8299 (name "python-pretend")
8300 (version "1.0.9")
8301 (source
8302 (origin
8303 (method url-fetch)
8304 (uri (pypi-uri "pretend" version))
8305 (sha256
8306 (base32
8307 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8308 (build-system python-build-system)
8309 (home-page "https://github.com/alex/pretend")
8310 (synopsis "Library for stubbing in Python")
8311 (description
8312 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8313 technique for writing tests. You may hear the term mixed up with mocks,
8314 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8315 responses, rather than doing any computation.")
8316 (license license:bsd-3)))
8317
8318 (define-public python2-pretend
8319 (package-with-python2 python-pretend))
8320
8321 (define-public python-pip
8322 (package
8323 (name "python-pip")
8324 (version "20.0.2")
8325 (source
8326 (origin
8327 (method url-fetch)
8328 (uri (pypi-uri "pip" version))
8329 (sha256
8330 (base32
8331 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8332 (build-system python-build-system)
8333 (arguments
8334 '(#:tests? #f)) ; there are no tests in the pypi archive.
8335 (home-page "https://pip.pypa.io/")
8336 (synopsis "Package manager for Python software")
8337 (description
8338 "Pip is a package manager for Python software, that finds packages on the
8339 Python Package Index (PyPI).")
8340 (license license:expat)))
8341
8342 (define-public python2-pip
8343 (package-with-python2 python-pip))
8344
8345 (define-public python-tlsh
8346 (package
8347 (name "python-tlsh")
8348 (version "3.4.5")
8349 (home-page "https://github.com/trendmicro/tlsh")
8350 (source
8351 (origin
8352 (method git-fetch)
8353 (uri (git-reference
8354 (url "https://github.com/trendmicro/tlsh.git")
8355 (commit (string-append "v" version))))
8356 (file-name (git-file-name name version))
8357 (sha256
8358 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8359 (build-system cmake-build-system)
8360 (arguments
8361 '(#:out-of-source? #f
8362 #:phases (modify-phases %standard-phases
8363 (replace
8364 'install
8365 (lambda* (#:key outputs #:allow-other-keys)
8366 ;; Build and install the Python bindings. The underlying
8367 ;; C++ library is apparently not meant to be installed.
8368 (let ((out (assoc-ref outputs "out")))
8369 (with-directory-excursion "py_ext"
8370 (and (system* "python" "setup.py" "build")
8371 (system* "python" "setup.py" "install"
8372 (string-append "--prefix=" out))))))))))
8373 (inputs `(("python" ,python-wrapper))) ;for the bindings
8374 (synopsis "Fuzzy matching library for Python")
8375 (description
8376 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8377 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8378 value which can be used for similarity comparisons. Similar objects have
8379 similar hash values, which allows for the detection of similar objects by
8380 comparing their hash values. The byte stream should have a sufficient amount
8381 of complexity; for example, a byte stream of identical bytes will not generate
8382 a hash value.")
8383 (license license:asl2.0)))
8384
8385 (define-public python2-tlsh
8386 (package
8387 (inherit python-tlsh)
8388 (name "python2-tlsh")
8389 (inputs `(("python" ,python-2)))))
8390
8391 (define-public python-termcolor
8392 (package
8393 (name "python-termcolor")
8394 (version "1.1.0")
8395 (source
8396 (origin
8397 (method url-fetch)
8398 (uri (pypi-uri "termcolor" version))
8399 (sha256
8400 (base32
8401 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8402 (build-system python-build-system)
8403 (arguments
8404 ;; There are no tests.
8405 `(#:tests? #f))
8406 (home-page "https://pypi.org/project/termcolor/")
8407 (synopsis "ANSII Color formatting for terminal output")
8408 (description
8409 "This package provides ANSII Color formatting for output in terminals.")
8410 (license license:expat)))
8411
8412 (define-public python2-termcolor
8413 (package-with-python2 python-termcolor))
8414
8415 (define-public python-libarchive-c
8416 (package
8417 (name "python-libarchive-c")
8418 (version "2.9")
8419 (source (origin
8420 (method url-fetch)
8421 (uri (pypi-uri "libarchive-c" version))
8422 (sha256
8423 (base32
8424 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8425 (build-system python-build-system)
8426 (arguments
8427 '(#:phases (modify-phases %standard-phases
8428 (add-before
8429 'build 'reference-libarchive
8430 (lambda* (#:key inputs #:allow-other-keys)
8431 ;; Retain the absolute file name of libarchive.so.
8432 (let ((libarchive (assoc-ref inputs "libarchive")))
8433 (substitute* "libarchive/ffi.py"
8434 (("find_library\\('archive'\\)")
8435 (string-append "'" libarchive
8436 "/lib/libarchive.so'"))))))
8437 (replace 'check
8438 (lambda _ (invoke "pytest" "-vv"))))))
8439 (native-inputs
8440 `(("python-mock" ,python-mock)
8441 ("python-pytest" ,python-pytest)))
8442 (inputs
8443 `(("libarchive" ,libarchive)))
8444 (home-page "https://github.com/Changaco/python-libarchive-c")
8445 (synopsis "Python interface to libarchive")
8446 (description
8447 "This package provides Python bindings to libarchive, a C library to
8448 access possibly compressed archives in many different formats. It uses
8449 Python's @code{ctypes} foreign function interface (FFI).")
8450 (license license:lgpl2.0+)))
8451
8452 (define-public python2-libarchive-c
8453 (package-with-python2 python-libarchive-c))
8454
8455 (define-public python-file
8456 (package
8457 (inherit file)
8458 (name "python-file")
8459 (build-system python-build-system)
8460 (arguments
8461 '(#:tests? #f ;no tests
8462 #:configure-flags '("--single-version-externally-managed" "--root=/")
8463 #:phases (modify-phases %standard-phases
8464 (add-before 'build 'change-directory
8465 (lambda _
8466 (chdir "python")
8467 #t))
8468 (add-before 'build 'set-library-file-name
8469 (lambda* (#:key inputs #:allow-other-keys)
8470 (let ((file (assoc-ref inputs "file")))
8471 (substitute* "magic.py"
8472 (("find_library\\('magic'\\)")
8473 (string-append "'" file "/lib/libmagic.so'")))
8474 #t))))))
8475 (inputs `(("file" ,file)))
8476 (native-inputs (if (%current-target-system)
8477 `(("self" ,this-package))
8478 '()))
8479 (synopsis "Python bindings to the libmagic file type guesser. Note that
8480 this module and the python-magic module both provide a \"magic.py\" file;
8481 these two modules, which are different and were developed separately, both
8482 serve the same purpose: provide Python bindings for libmagic.")))
8483
8484 (define-public python2-file
8485 (package-with-python2 python-file))
8486
8487 (define-public python-debian
8488 (package
8489 (name "python-debian")
8490 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8491 (version "0.1.36")
8492 (source
8493 (origin
8494 ;; Use git-fetch, as pypi doesn't include test suite.
8495 (method git-fetch)
8496 (uri (git-reference
8497 (url home-page)
8498 (commit version)))
8499 (file-name (git-file-name name version))
8500 (sha256
8501 (base32
8502 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8503 (build-system python-build-system)
8504 (arguments
8505 `(#:phases (modify-phases %standard-phases
8506 (add-after 'unpack 'remove-debian-specific-tests
8507 ;; python-apt, apt and dpkg are not yet available in guix,
8508 ;; and these tests heavily depend on them.
8509 (lambda _
8510 (delete-file "lib/debian/tests/test_deb822.py")
8511 (delete-file "lib/debian/tests/test_debfile.py")
8512 #t)))))
8513 (propagated-inputs
8514 `(("python-six" ,python-six)
8515 ("python-chardet" ,python-chardet)))
8516 (synopsis "Debian package related modules")
8517 (description
8518 ;; XXX: Use @enumerate instead of @itemize to work around
8519 ;; <http://bugs.gnu.org/21772>.
8520 "This package provides Python modules that abstract many formats of
8521 Debian-related files, such as:
8522
8523 @enumerate
8524 @item Debtags information;
8525 @item @file{debian/changelog} files;
8526 @item packages files, pdiffs;
8527 @item control files of single or multiple RFC822-style paragraphs---e.g.
8528 @file{debian/control}, @file{.changes}, @file{.dsc};
8529 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8530 contained files and meta-information.
8531 @end enumerate\n")
8532
8533 ;; Modules are either GPLv2+ or GPLv3+.
8534 (license license:gpl3+)))
8535
8536 (define-public python-nbformat
8537 (package
8538 (name "python-nbformat")
8539 (version "4.4.0")
8540 (source
8541 (origin
8542 (method url-fetch)
8543 (uri (pypi-uri "nbformat" version))
8544 (sha256
8545 (base32
8546 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8547 (build-system python-build-system)
8548 (arguments `(#:tests? #f)) ; no test target
8549 (propagated-inputs
8550 `(("python-ipython-genutils" ,python-ipython-genutils)
8551 ("python-jsonschema" ,python-jsonschema)
8552 ("python-jupyter-core" ,python-jupyter-core)
8553 ("python-traitlets" ,python-traitlets)))
8554 (home-page "http://jupyter.org")
8555 (synopsis "Jupyter Notebook format")
8556 (description "This package provides the reference implementation of the
8557 Jupyter Notebook format and Python APIs for working with notebooks.")
8558 (license license:bsd-3)))
8559
8560 (define-public python2-nbformat
8561 (package-with-python2 python-nbformat))
8562
8563 (define-public python-bleach
8564 (package
8565 (name "python-bleach")
8566 (version "3.1.3")
8567 (source
8568 (origin
8569 (method url-fetch)
8570 (uri (pypi-uri "bleach" version))
8571 (sha256
8572 (base32
8573 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8574 (build-system python-build-system)
8575 (propagated-inputs
8576 `(("python-webencodings" ,python-webencodings)
8577 ("python-six" ,python-six)))
8578 (native-inputs
8579 `(("python-datrie" ,python-datrie)
8580 ("python-genshi" ,python-genshi)
8581 ("python-lxml" ,python-lxml)
8582 ("python-pytest" ,python-pytest)))
8583 (home-page "https://github.com/mozilla/bleach")
8584 (synopsis "Whitelist-based HTML-sanitizing tool")
8585 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8586 (license license:asl2.0)))
8587
8588 (define-public python2-bleach
8589 (package-with-python2 python-bleach))
8590
8591 (define-public python-entrypoints
8592 (package
8593 (name "python-entrypoints")
8594 (version "0.3")
8595 (source
8596 (origin
8597 (method url-fetch)
8598 (uri (pypi-uri "entrypoints" version))
8599 (sha256
8600 (base32
8601 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8602 (build-system python-build-system)
8603 ;; The package does not come with a setup.py file, so we have to generate
8604 ;; one ourselves.
8605 (arguments
8606 `(#:tests? #f
8607 #:phases
8608 (modify-phases %standard-phases
8609 (add-after 'unpack 'create-setup.py
8610 (lambda _
8611 (call-with-output-file "setup.py"
8612 (lambda (port)
8613 (format port "\
8614 from setuptools import setup
8615 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8616 " ,version))))))))
8617 (home-page "https://github.com/takluyver/entrypoints")
8618 (synopsis "Discover and load entry points from installed Python packages")
8619 (description "Entry points are a way for Python packages to advertise
8620 objects with some common interface. The most common examples are
8621 @code{console_scripts} entry points, which define shell commands by
8622 identifying a Python function to run. The @code{entrypoints} module contains
8623 functions to find and load entry points.")
8624 (license license:expat)))
8625
8626 (define-public python2-entrypoints
8627 (package-with-python2 python-entrypoints))
8628
8629 (define-public python-nbconvert
8630 (package
8631 (name "python-nbconvert")
8632 (version "5.0.0b1")
8633 (source
8634 (origin
8635 (method url-fetch)
8636 (uri (pypi-uri "nbconvert" version))
8637 (sha256
8638 (base32
8639 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8640 (build-system python-build-system)
8641 (arguments
8642 `(;; The "bdist_egg" target is disabled by default, causing the installation
8643 ;; to fail.
8644 #:configure-flags (list "bdist_egg")
8645 ;; FIXME: 5 failures, 40 errors.
8646 #:tests? #f))
8647 ;; #:phases
8648 ;; (modify-phases %standard-phases
8649 ;; (replace 'check
8650 ;; (lambda _
8651 ;; (zero? (system* "py.test" "-v")))))
8652 (native-inputs
8653 `(("python-pytest" ,python-pytest)))
8654 (propagated-inputs
8655 `(("python-bleach" ,python-bleach)
8656 ("python-entrypoints" ,python-entrypoints)
8657 ("python-jinja2" ,python-jinja2)
8658 ("python-jupyter-core" ,python-jupyter-core)
8659 ("python-mistune" ,python-mistune)
8660 ("python-nbformat" ,python-nbformat)
8661 ("python-pygments" ,python-pygments)
8662 ("python-traitlets" ,python-traitlets)))
8663 (home-page "http://jupyter.org")
8664 (synopsis "Converting Jupyter Notebooks")
8665 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8666 notebooks to various other formats via Jinja templates. It allows you to
8667 convert an @code{.ipynb} notebook file into various static formats including:
8668
8669 @enumerate
8670 @item HTML
8671 @item LaTeX
8672 @item PDF
8673 @item Reveal JS
8674 @item Markdown (md)
8675 @item ReStructured Text (rst)
8676 @item executable script
8677 @end enumerate\n")
8678 (license license:bsd-3)))
8679
8680 (define-public python2-nbconvert
8681 (package-with-python2 python-nbconvert))
8682
8683 (define-public python-notebook
8684 (package
8685 (name "python-notebook")
8686 (version "5.7.4")
8687 (source (origin
8688 (method url-fetch)
8689 (uri (pypi-uri "notebook" version))
8690 (sha256
8691 (base32
8692 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8693 (build-system python-build-system)
8694 (arguments
8695 `(#:phases
8696 (modify-phases %standard-phases
8697 (replace 'check
8698 (lambda _
8699 ;; These tests require a browser
8700 (delete-file-recursively "notebook/tests/selenium")
8701 ;; Some tests need HOME
8702 (setenv "HOME" "/tmp")
8703 ;; This file contains "warningfilters", which are not supported
8704 ;; by this version of nose.
8705 (delete-file "setup.cfg")
8706 (with-directory-excursion "/tmp"
8707 (invoke "nosetests" "-v"))
8708 #t)))))
8709 (propagated-inputs
8710 `(("python-jupyter-core" ,python-jupyter-core)
8711 ("python-nbformat" ,python-nbformat)
8712 ("python-nbconvert" ,python-nbconvert)
8713 ("python-prometheus-client" ,python-prometheus-client)
8714 ("python-send2trash" ,python-send2trash)
8715 ("python-terminado" ,python-terminado)))
8716 (native-inputs
8717 `(("python-nose" ,python-nose)
8718 ("python-sphinx" ,python-sphinx)
8719 ("python-requests" ,python-requests)))
8720 (home-page "http://jupyter.org/")
8721 (synopsis "Web-based notebook environment for interactive computing")
8722 (description
8723 "The Jupyter HTML notebook is a web-based notebook environment for
8724 interactive computing.")
8725 (properties `((python2-variant . ,(delay python2-notebook))))
8726 (license license:bsd-3)))
8727
8728 (define-public python2-notebook
8729 (let ((base (package-with-python2
8730 (strip-python2-variant python-notebook))))
8731 (package (inherit base)
8732 (native-inputs
8733 `(("python2-mock" ,python2-mock)
8734 ,@(package-native-inputs base)))
8735 (arguments
8736 (substitute-keyword-arguments (package-arguments base)
8737 ((#:phases phases)
8738 `(modify-phases ,phases
8739 (add-before 'check 'disable-test-case
8740 ;; The test requires network access to localhost. Curiously it
8741 ;; fails with Python 2 only. Simply make the test-case return
8742 ;; immediately.
8743 (lambda _
8744 (substitute*
8745 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8746 (("formats = self.nbconvert_api") "return #")))))))))))
8747
8748 (define-public python-widgetsnbextension
8749 (package
8750 (name "python-widgetsnbextension")
8751 (version "3.4.2")
8752 (source
8753 (origin
8754 (method url-fetch)
8755 (uri (pypi-uri "widgetsnbextension" version))
8756 (sha256
8757 (base32
8758 "0rc2nivdy7k4m3vljx7wdh2jh11djapcgwhvzlbs0isl8gl8nqgs"))))
8759 (build-system python-build-system)
8760 (propagated-inputs
8761 `(("python-ipykernel" ,python-ipykernel)
8762 ("python-notebook" ,python-notebook)))
8763 (native-inputs
8764 `(("python-certifi" ,python-certifi)
8765 ("python-nose" ,python-nose)))
8766 (home-page "https://ipython.org")
8767 (synopsis "IPython HTML widgets for Jupyter")
8768 (description "This package provides interactive HTML widgets for Jupyter
8769 notebooks.")
8770 (license license:bsd-3)))
8771
8772 (define-public python2-widgetsnbextension
8773 (package-with-python2 python-widgetsnbextension))
8774
8775 (define-public python-ipywidgets
8776 (package
8777 (name "python-ipywidgets")
8778 (version "5.2.2")
8779 (source
8780 (origin
8781 (method url-fetch)
8782 (uri (pypi-uri "ipywidgets" version))
8783 (sha256
8784 (base32
8785 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
8786 (build-system python-build-system)
8787 (propagated-inputs
8788 `(("python-ipython" ,python-ipython)
8789 ("python-traitlets" ,python-traitlets)
8790 ("python-widgetsnbextension" ,python-widgetsnbextension)))
8791 (native-inputs
8792 `(("python-nose" ,python-nose)
8793 ("python-pytest" ,python-pytest)))
8794 (home-page "https://ipython.org")
8795 (synopsis "IPython HTML widgets for Jupyter")
8796 (description "Ipywidgets are interactive HTML widgets for Jupyter
8797 notebooks and the IPython kernel. Notebooks come alive when interactive
8798 widgets are used. Users gain control of their data and can visualize changes
8799 in the data.")
8800 (license license:bsd-3)))
8801
8802 (define-public python2-ipywidgets
8803 (package-with-python2 python-ipywidgets))
8804
8805 (define-public python-jupyter-console
8806 (package
8807 (name "python-jupyter-console")
8808 (version "6.0.0")
8809 (source
8810 (origin
8811 (method url-fetch)
8812 (uri (pypi-uri "jupyter_console" version))
8813 (sha256
8814 (base32
8815 "1xdjw11cppf1fxvwkw2bk13ckkwas3bdah8baingn9296mvfi31h"))))
8816 (build-system python-build-system)
8817 (propagated-inputs
8818 `(("python-ipykernel" ,python-ipykernel)
8819 ("python-jupyter-client" ,python-jupyter-client)
8820 ("python-prompt-toolkit" ,python-prompt-toolkit)
8821 ("python-pygments" ,python-pygments)))
8822 (native-inputs
8823 `(("python-nose" ,python-nose)))
8824 (home-page "https://jupyter.org")
8825 (synopsis "Jupyter terminal console")
8826 (description "This package provides a terminal-based console frontend for
8827 Jupyter kernels. It also allows for console-based interaction with non-Python
8828 Jupyter kernels such as IJulia and IRKernel.")
8829 (properties `((python2-variant . ,(delay python2-jupyter-console))))
8830 (license license:bsd-3)))
8831
8832 (define-public python2-jupyter-console
8833 (package
8834 (name "python2-jupyter-console")
8835 (version "5.2.0")
8836 (source
8837 (origin
8838 (method url-fetch)
8839 (uri (pypi-uri "jupyter_console" version))
8840 (sha256
8841 (base32
8842 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
8843 (build-system python-build-system)
8844 (arguments
8845 `(#:python ,python-2
8846 #:tests? #f)) ; Tests only run in a TTY.
8847 (propagated-inputs
8848 `(("python2-ipykernel" ,python2-ipykernel)
8849 ("python2-jupyter-client" ,python2-jupyter-client)
8850 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
8851 ("python2-pygments" ,python2-pygments)))
8852 (native-inputs
8853 `(("python2-nose" ,python2-nose)))
8854 (home-page "https://jupyter.org")
8855 (synopsis "Jupyter terminal console")
8856 (description "This package provides a terminal-based console frontend for
8857 Jupyter kernels. It also allows for console-based interaction with non-Python
8858 Jupyter kernels such as IJulia and IRKernel.")
8859 (license license:bsd-3)))
8860
8861 ;; The python-ipython and python-jupyter-console require each other. To get
8862 ;; the functionality in both packages working, strip down the
8863 ;; python-jupyter-console package when using it as an input to python-ipython.
8864 (define python-jupyter-console-minimal
8865 (package
8866 (inherit python-jupyter-console)
8867 (name "python-jupyter-console-minimal")
8868 (arguments
8869 (substitute-keyword-arguments
8870 (package-arguments python-jupyter-console)
8871 ((#:phases phases)
8872 `(modify-phases ,phases
8873 (add-after 'install 'delete-bin
8874 (lambda* (#:key outputs #:allow-other-keys)
8875 ;; Delete the bin files, to avoid conflicts in profiles
8876 ;; where python-ipython and python-jupyter-console are
8877 ;; both present.
8878 (delete-file-recursively
8879 (string-append
8880 (assoc-ref outputs "out") "/bin"))))))))
8881 ;; Remove the python-ipython propagated input, to avoid the cycle
8882 (propagated-inputs
8883 (alist-delete
8884 "python-ipython"
8885 (package-propagated-inputs python-jupyter-console)))))
8886
8887 (define-public python-qtconsole
8888 (package
8889 (name "python-qtconsole")
8890 (version "4.4.3")
8891 (source
8892 (origin
8893 (method url-fetch)
8894 (uri (pypi-uri "qtconsole" version))
8895 (sha256
8896 (base32
8897 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
8898 (build-system python-build-system)
8899 (arguments
8900 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
8901 ;; but we only have the LTS version 5.x. This means that there might be
8902 ;; runtime errors, but since this is a dependency of the Jupyter package,
8903 ;; and Jupyter can be used without the qtconsole we can overlook this for
8904 ;; now.
8905 `(#:tests? #f
8906 #:phases
8907 (modify-phases %standard-phases
8908 (add-before 'check 'pre-check
8909 (lambda _
8910 (setenv "QT_QPA_PLATFORM" "offscreen")
8911 #t)))))
8912 (propagated-inputs
8913 `(("python-ipykernel" ,python-ipykernel)
8914 ("python-ipython" ,python-ipython)))
8915 (native-inputs
8916 `(("python-pytest" ,python-pytest)))
8917 (home-page "http://jupyter.org")
8918 (synopsis "Jupyter Qt console")
8919 (description "This package provides a Qt-based console for Jupyter with
8920 support for rich media output.")
8921 (license license:bsd-3)))
8922
8923 (define-public python-jsbeautifier
8924 (package
8925 (name "python-jsbeautifier")
8926 (version "1.10.2")
8927 (home-page "https://github.com/beautify-web/js-beautify")
8928 (source (origin
8929 (method git-fetch)
8930 (uri (git-reference
8931 (url home-page)
8932 (commit (string-append "v" version))))
8933 (file-name (git-file-name name version))
8934 (sha256
8935 (base32
8936 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
8937 (build-system python-build-system)
8938 (arguments
8939 `(#:phases (modify-phases %standard-phases
8940 (add-after 'unpack 'chdir
8941 (lambda _
8942 ;; The upstream Git repository contains all the code,
8943 ;; but this package only builds the python code.
8944 (chdir "python")
8945 #t))
8946 (add-after 'unpack 'patch-python-six-requirements
8947 (lambda _
8948 (substitute* "python/setup.py"
8949 (("six>=1.12.0")
8950 "six>=1.11.0"))
8951 #t)))))
8952 (propagated-inputs
8953 `(("python-editorconfig" ,python-editorconfig)
8954 ("python-six" ,python-six)))
8955 (native-inputs
8956 `(("python-pytest" ,python-pytest)))
8957 (synopsis "JavaScript unobfuscator and beautifier")
8958 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
8959 popular online obfuscators.")
8960 (license license:expat)))
8961
8962 (define-public jupyter
8963 (package
8964 (name "jupyter")
8965 (version "1.0.0")
8966 (source
8967 (origin
8968 (method url-fetch)
8969 (uri (pypi-uri "jupyter" version))
8970 (sha256
8971 (base32
8972 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
8973 (build-system python-build-system)
8974 (arguments '(#:tests? #f)) ; there are none.
8975 (propagated-inputs
8976 `(("python-ipykernel" ,python-ipykernel)
8977 ("python-ipywidgets" ,python-ipywidgets)
8978 ("python-jupyter-console" ,python-jupyter-console)
8979 ("python-nbconvert" ,python-nbconvert)
8980 ("python-notebook" ,python-notebook)
8981 ("python-qtconsole" ,python-qtconsole)))
8982 (native-search-paths
8983 (list (search-path-specification
8984 (variable "JUPYTER_PATH")
8985 (files '("share/jupyter")))))
8986 (home-page "https://jupyter.org")
8987 (synopsis "Web application for interactive documents")
8988 (description
8989 "The Jupyter Notebook is a web application that allows you to create and
8990 share documents that contain live code, equations, visualizations and
8991 explanatory text. Uses include: data cleaning and transformation, numerical
8992 simulation, statistical modeling, machine learning and much more.")
8993 (license license:bsd-3)))
8994
8995 (define-public python-chardet
8996 (package
8997 (name "python-chardet")
8998 (version "3.0.4")
8999 (source
9000 (origin
9001 (method url-fetch)
9002 (uri (pypi-uri "chardet" version))
9003 (sha256
9004 (base32
9005 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9006 (native-inputs
9007 `(("python-hypothesis" ,python-hypothesis)
9008 ("python-pytest" ,python-pytest)
9009 ("python-pytest-runner" ,python-pytest-runner)))
9010 (build-system python-build-system)
9011 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9012 (arguments `(#:tests? #f))
9013 (home-page "https://github.com/chardet/chardet")
9014 (synopsis "Universal encoding detector for Python 2 and 3")
9015 (description
9016 "This package provides @code{chardet}, a Python module that can
9017 automatically detect a wide range of file encodings.")
9018 (license license:lgpl2.1+)))
9019
9020 (define-public python2-chardet
9021 (package-with-python2 python-chardet))
9022
9023 (define-public python-docopt
9024 (package
9025 (name "python-docopt")
9026 (version "0.6.2")
9027 (source
9028 (origin
9029 (method git-fetch)
9030 ;; The release on PyPI does not include tests.
9031 (uri (git-reference
9032 (url "https://github.com/docopt/docopt")
9033 (commit version)))
9034 (file-name (git-file-name name version))
9035 (sha256
9036 (base32
9037 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9038 (build-system python-build-system)
9039 (native-inputs
9040 `(("python-pytest" ,python-pytest)))
9041 (arguments
9042 `(#:phases
9043 (modify-phases %standard-phases
9044 (replace 'check
9045 (lambda _ (invoke "py.test"))))))
9046 (home-page "http://docopt.org")
9047 (synopsis "Command-line interface description language for Python")
9048 (description "This library allows the user to define a command-line
9049 interface from a program's help message rather than specifying it
9050 programmatically with command-line parsers like @code{getopt} and
9051 @code{argparse}.")
9052 (license license:expat)))
9053
9054 (define-public python2-docopt
9055 (package-with-python2 python-docopt))
9056
9057 (define-public python-pythondialog
9058 (package
9059 (name "python-pythondialog")
9060 (version "3.4.0")
9061 (source
9062 (origin
9063 (method url-fetch)
9064 (uri (pypi-uri "pythondialog" version))
9065 (sha256
9066 (base32
9067 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9068 (build-system python-build-system)
9069 (arguments
9070 `(#:phases
9071 (modify-phases %standard-phases
9072 (add-after 'unpack 'patch-path
9073 (lambda* (#:key inputs #:allow-other-keys)
9074 (let* ((dialog (assoc-ref inputs "dialog")))
9075 ;; Since this library really wants to grovel the search path, we
9076 ;; must hardcode dialog's store path into it.
9077 (substitute* "dialog.py"
9078 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9079 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9080 #t))))
9081 #:tests? #f)) ; no test suite
9082 (propagated-inputs
9083 `(("dialog" ,dialog)))
9084 (home-page "http://pythondialog.sourceforge.net/")
9085 (synopsis "Python interface to the UNIX dialog utility")
9086 (description "A Python wrapper for the dialog utility. Its purpose is to
9087 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9088 This allows one to make simple text-mode user interfaces on Unix-like systems")
9089 (license license:lgpl2.1)
9090 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9091
9092 (define-public python2-pythondialog
9093 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9094 (package
9095 (inherit base)
9096 (version (package-version python-pythondialog))
9097 (source (origin
9098 (method url-fetch)
9099 (uri (pypi-uri "python2-pythondialog" version))
9100 (sha256
9101 (base32
9102 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9103
9104 (define-public python-configobj
9105 (package
9106 (name "python-configobj")
9107 (version "5.0.6")
9108 (source (origin
9109 (method url-fetch)
9110 (uri (pypi-uri "configobj" version))
9111 (sha256
9112 (base32
9113 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9114 ;; Patch setup.py so it looks for python-setuptools, which is
9115 ;; required to parse the keyword 'install_requires' in setup.py.
9116 (patches (search-patches "python-configobj-setuptools.patch"))))
9117 (build-system python-build-system)
9118 (propagated-inputs
9119 `(("python-six" ,python-six)))
9120 (synopsis "Config file reading, writing and validation")
9121 (description "ConfigObj is a simple but powerful config file reader and
9122 writer: an ini file round tripper. Its main feature is that it is very easy to
9123 use, with a straightforward programmer’s interface and a simple syntax for
9124 config files.")
9125 (home-page "https://github.com/DiffSK/configobj")
9126 (license license:bsd-3)))
9127
9128 (define-public python2-configobj
9129 (package-with-python2 python-configobj))
9130
9131 (define-public python-configargparse
9132 (package
9133 (name "python-configargparse")
9134 (version "0.14.0")
9135 (source (origin
9136 (method url-fetch)
9137 (uri (pypi-uri "ConfigArgParse" version))
9138 (sha256
9139 (base32
9140 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9141 (build-system python-build-system)
9142 (native-inputs
9143 `(("python-pyyaml" ,python-pyyaml)))
9144 (arguments
9145 `(#:phases
9146 (modify-phases %standard-phases
9147 (replace 'check
9148 (lambda _
9149 ;; Bypass setuptools-shim because one test relies on "setup.py"
9150 ;; being the first argument passed to the python call.
9151 ;;
9152 ;; NOTE: Many tests do not run because they rely on Python's
9153 ;; built-in test.test_argparse, but we remove the unit tests from
9154 ;; our Python installation.
9155 (invoke "python" "setup.py" "test"))))))
9156 (synopsis "Replacement for argparse")
9157 (description "A drop-in replacement for argparse that allows options to also
9158 be set via config files and/or environment variables.")
9159 (home-page "https://github.com/bw2/ConfigArgParse")
9160 (license license:expat)))
9161
9162 (define-public python2-configargparse
9163 (package-with-python2 python-configargparse))
9164
9165 (define-public python-argparse-manpage
9166 (package
9167 (name "python-argparse-manpage")
9168 (version "1.1")
9169 (source
9170 (origin
9171 (method url-fetch)
9172 (uri (pypi-uri "argparse-manpage" version))
9173 (sha256
9174 (base32
9175 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9176 (build-system python-build-system)
9177 (home-page "https://github.com/praiskup/argparse-manpage")
9178 (synopsis "Build manual page from Python's ArgumentParser object")
9179 (description
9180 "This package provides tools to build manual pages from Python's
9181 @code{ArgumentParser} object.")
9182 (license license:asl2.0)))
9183
9184 (define-public python-contextlib2
9185 (package
9186 (name "python-contextlib2")
9187 (version "0.6.0.post1")
9188 (source
9189 (origin
9190 (method url-fetch)
9191 (uri (pypi-uri "contextlib2" version))
9192 (sha256
9193 (base32
9194 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9195 (build-system python-build-system)
9196 (home-page "https://contextlib2.readthedocs.org/")
9197 (synopsis "Tools for decorators and context managers")
9198 (description "This module is primarily a backport of the Python
9199 3.2 contextlib to earlier Python versions. Like contextlib, it
9200 provides utilities for common tasks involving decorators and context
9201 managers. It also contains additional features that are not part of
9202 the standard library.")
9203 (properties `((python2-variant . ,(delay python2-contextlib2))))
9204 (license license:psfl)))
9205
9206 (define-public python2-contextlib2
9207 (let ((base (package-with-python2
9208 (strip-python2-variant python-contextlib2))))
9209 (package
9210 (inherit base)
9211 (arguments
9212 (substitute-keyword-arguments (package-arguments base)
9213 ((#:phases phases)
9214 `(modify-phases ,phases
9215 (replace 'check
9216 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9217 (native-inputs
9218 `(("python2-unittest2" ,python2-unittest2))))))
9219
9220 (define-public python-texttable
9221 (package
9222 (name "python-texttable")
9223 (version "1.6.2")
9224 (source
9225 (origin
9226 (method url-fetch)
9227 (uri (pypi-uri "texttable" version))
9228 (sha256
9229 (base32
9230 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9231 (build-system python-build-system)
9232 (arguments
9233 `(#:phases
9234 (modify-phases %standard-phases
9235 (replace 'check
9236 (lambda _ (invoke "pytest" "tests.py"))))))
9237 (native-inputs
9238 `(("python-pytest" ,python-pytest)))
9239 (home-page "https://github.com/foutaise/texttable/")
9240 (synopsis "Python module for creating simple ASCII tables")
9241 (description "Texttable is a Python module for creating simple ASCII
9242 tables.")
9243 (license license:expat)))
9244
9245 (define-public python2-texttable
9246 (package-with-python2 python-texttable))
9247
9248 (define-public python-atomicwrites
9249 (package
9250 (name "python-atomicwrites")
9251 (version "1.3.0")
9252 (source (origin
9253 (method url-fetch)
9254 (uri (pypi-uri "atomicwrites" version))
9255 (sha256
9256 (base32
9257 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9258 (build-system python-build-system)
9259 (synopsis "Atomic file writes in Python")
9260 (description "Library for atomic file writes using platform dependent tools
9261 for atomic file system operations.")
9262 (home-page "https://github.com/untitaker/python-atomicwrites")
9263 (license license:expat)))
9264
9265 (define-public python2-atomicwrites
9266 (package-with-python2 python-atomicwrites))
9267
9268 (define-public python-click-threading
9269 (package
9270 (name "python-click-threading")
9271 (version "0.4.4")
9272 (source (origin
9273 (method url-fetch)
9274 (uri (pypi-uri "click-threading" version))
9275 (sha256
9276 (base32
9277 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9278 (build-system python-build-system)
9279 (propagated-inputs
9280 `(("python-click" ,python-click)))
9281 (synopsis "Utilities for multithreading in Click")
9282 (description "This package provides utilities for multithreading in Click
9283 applications.")
9284 (home-page "https://github.com/click-contrib/click-threading")
9285 (license license:expat)))
9286
9287 (define-public python-click-log
9288 (package
9289 (name "python-click-log")
9290 (version "0.3.2")
9291 (source (origin
9292 (method url-fetch)
9293 (uri (pypi-uri "click-log" version))
9294 (sha256
9295 (base32
9296 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9297 (build-system python-build-system)
9298 (propagated-inputs
9299 `(("python-click" ,python-click)))
9300 (synopsis "Logging for click applications")
9301 (description "This package provides a Python library for logging Click
9302 applications.")
9303 (home-page "https://github.com/click-contrib/click-log")
9304 (license license:expat)))
9305
9306 (define-public python-apipkg
9307 (package
9308 (name "python-apipkg")
9309 (version "1.4")
9310 (source (origin
9311 (method url-fetch)
9312 (uri (pypi-uri "apipkg" version))
9313 (sha256
9314 (base32
9315 "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
9316 (build-system python-build-system)
9317 (native-inputs
9318 `(("python-pytest" ,python-pytest)))
9319 (synopsis "Namespace control and lazy-import mechanism")
9320 (description "With apipkg you can control the exported namespace of a Python
9321 package and greatly reduce the number of imports for your users. It is a small
9322 pure Python module that works on virtually all Python versions.")
9323 (home-page "https://github.com/pytest-dev/apipkg")
9324 (license license:expat)))
9325
9326 (define-public python2-apipkg
9327 (package-with-python2 python-apipkg))
9328
9329 (define-public python-execnet
9330 (package
9331 (name "python-execnet")
9332 (version "1.4.1")
9333 (source (origin
9334 (method url-fetch)
9335 (uri (pypi-uri "execnet" version))
9336 (sha256
9337 (base32
9338 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9339 (build-system python-build-system)
9340 (arguments
9341 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9342 ;; The two test failures are caused by the lack of an `ssh` executable.
9343 ;; The test suite can be run with pytest after the 'install' phase.
9344 #:tests? #f))
9345 (native-inputs
9346 `(("python-pytest" ,python-pytest)
9347 ("python-setuptools-scm" ,python-setuptools-scm)))
9348 (propagated-inputs
9349 `(("python-apipkg" ,python-apipkg)))
9350 (synopsis "Rapid multi-Python deployment")
9351 (description "Execnet provides a share-nothing model with
9352 channel-send/receive communication for distributing execution across many
9353 Python interpreters across version, platform and network barriers. It has a
9354 minimal and fast API targeting the following uses:
9355 @enumerate
9356 @item distribute tasks to (many) local or remote CPUs
9357 @item write and deploy hybrid multi-process applications
9358 @item write scripts to administer multiple environments
9359 @end enumerate")
9360 (home-page "https://codespeak.net/execnet/")
9361 (license license:expat)))
9362
9363 (define-public python2-execnet
9364 (package-with-python2 python-execnet))
9365
9366 (define-public python-icalendar
9367 (package
9368 (name "python-icalendar")
9369 (version "4.0.4")
9370 (source (origin
9371 (method url-fetch)
9372 (uri (pypi-uri "icalendar" version))
9373 (sha256
9374 (base32
9375 "16gjvqv0n05jrb9g228pdjgzd3amz2pdhvcgsn1jypszjg5m2w9l"))))
9376 (build-system python-build-system)
9377 (propagated-inputs
9378 `(("python-dateutil" ,python-dateutil)
9379 ("python-pytz" ,python-pytz)))
9380 (synopsis "Python library for parsing iCalendar files")
9381 (description "The icalendar package is a parser/generator of iCalendar
9382 files for use with Python.")
9383 (home-page "https://github.com/collective/icalendar")
9384 (license license:bsd-2)))
9385
9386 (define-public python-args
9387 (package
9388 (name "python-args")
9389 (version "0.1.0")
9390 (source (origin
9391 (method url-fetch)
9392 (uri (pypi-uri "args" version))
9393 (sha256
9394 (base32
9395 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9396 (build-system python-build-system)
9397 (home-page "https://github.com/kennethreitz/args")
9398 (synopsis "Command-line argument parser")
9399 (description
9400 "This library provides a Python module to parse command-line arguments.")
9401 (license license:bsd-3)))
9402
9403 (define-public python2-args
9404 (package-with-python2 python-args))
9405
9406 (define-public python-clint
9407 (package
9408 (name "python-clint")
9409 (version "0.5.1")
9410 (source (origin
9411 (method url-fetch)
9412 (uri (pypi-uri "clint" version))
9413 (sha256
9414 (base32
9415 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9416 (build-system python-build-system)
9417 (arguments
9418 '(#:phases
9419 (modify-phases %standard-phases
9420 (replace 'check
9421 (lambda _ (invoke "py.test" "-v"))))))
9422 (native-inputs
9423 `(("python-pytest" ,python-pytest)))
9424 (propagated-inputs
9425 `(("python-args" ,python-args)))
9426 (home-page "https://github.com/kennethreitz/clint")
9427 (synopsis "Command-line interface tools")
9428 (description
9429 "Clint is a Python module filled with a set of tools for developing
9430 command-line applications, including tools for colored and indented
9431 output, progress bar display, and pipes.")
9432 (license license:isc)))
9433
9434 (define-public python2-clint
9435 (package-with-python2 python-clint))
9436
9437 (define-public python-rply
9438 (package
9439 (name "python-rply")
9440 (version "0.7.5")
9441 (source (origin
9442 (method url-fetch)
9443 (uri (pypi-uri "rply" version))
9444 (sha256
9445 (base32
9446 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9447 (build-system python-build-system)
9448 (propagated-inputs
9449 `(("python-appdirs" ,python-appdirs)))
9450 (home-page "https://github.com/alex/rply")
9451 (synopsis "Parser generator for Python")
9452 (description
9453 "This package provides a pure Python based parser generator, that also
9454 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9455 with a new public API, and RPython support.")
9456 (license license:bsd-3)))
9457
9458 (define-public python2-rply
9459 (package-with-python2 python-rply))
9460
9461 (define-public python-hy
9462 (package
9463 (name "python-hy")
9464 (version "0.17.0")
9465 (source (origin
9466 (method url-fetch)
9467 (uri (pypi-uri "hy" version))
9468 (sha256
9469 (base32
9470 "1gdbqsirsdxj320wnp7my5awzs1kfs6m4fqmkzbd1zd47qzj0zfi"))))
9471 (build-system python-build-system)
9472 (arguments
9473 '(#:phases
9474 (modify-phases %standard-phases
9475 (add-before 'install 'set-HOME
9476 (lambda _
9477 (setenv "HOME" "/tmp")))
9478 (replace 'check
9479 (lambda _
9480 ;; Tests require write access to HOME.
9481 (setenv "HOME" "/tmp")
9482 (invoke "nosetests"))))))
9483 (native-inputs
9484 `(("python-coverage" ,python-coverage)
9485 ("python-nose" ,python-nose)))
9486 (propagated-inputs
9487 `(("python-astor" ,python-astor)
9488 ("python-clint" ,python-clint)
9489 ("python-rply" ,python-rply)
9490 ("python-fastentrypoints"
9491 ,python-fastentrypoints)
9492 ("python-funcparserlib"
9493 ,python-funcparserlib)))
9494 (home-page "http://hylang.org/")
9495 (synopsis "Lisp frontend to Python")
9496 (description
9497 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9498 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9499 Python at your fingertips, in Lisp form.")
9500 (license license:expat)))
9501
9502 (define-public python2-hy
9503 (package-with-python2 python-hy))
9504
9505 (define-public python2-functools32
9506 (package
9507 (name "python2-functools32")
9508 (version "3.2.3-2")
9509 (source
9510 (origin
9511 (method url-fetch)
9512 (uri (pypi-uri "functools32" version))
9513 (sha256
9514 (base32
9515 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9516 (build-system python-build-system)
9517 (arguments
9518 `(#:python ,python-2
9519 #:tests? #f)) ; no test target
9520 (home-page "https://github.com/MiCHiLU/python-functools32")
9521 (synopsis
9522 "Backport of the functools module from Python 3.2.3")
9523 (description
9524 "This package is a backport of the @code{functools} module from Python
9525 3.2.3 for use with older versions of Python and PyPy.")
9526 (license license:expat)))
9527
9528 (define-public python2-subprocess32
9529 (package
9530 (name "python2-subprocess32")
9531 (version "3.2.7")
9532 (source (origin
9533 (method url-fetch)
9534 (uri (pypi-uri "subprocess32" version))
9535 (sha256
9536 (base32
9537 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9538 (patches
9539 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9540 (build-system python-build-system)
9541 (arguments
9542 `(#:python ,python-2
9543 ;; The test suite fails with Python > 2.7.13:
9544 ;; import test.support
9545 ;; ImportError: No module named support
9546 #:tests? #f
9547 #:phases
9548 (modify-phases %standard-phases
9549 (add-after 'unpack 'patch-/bin/sh
9550 (lambda _
9551 (substitute* '("subprocess32.py"
9552 "test_subprocess32.py")
9553 (("/bin/sh") (which "sh")))
9554 #t)))))
9555 (home-page "https://github.com/google/python-subprocess32")
9556 (synopsis "Backport of the subprocess module from Python 3.2")
9557 (description
9558 "This is a backport of the @code{subprocess} standard library module
9559 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9560 new features. On POSIX systems it is guaranteed to be reliable when used
9561 in threaded applications. It includes timeout support from Python 3.3 but
9562 otherwise matches 3.2’s API.")
9563 (license license:psfl)))
9564
9565 (define-public python2-futures
9566 (package
9567 (name "python2-futures")
9568 (version "3.2.0")
9569 (source
9570 (origin
9571 (method url-fetch)
9572 (uri (pypi-uri "futures" version))
9573 (sha256
9574 (base32
9575 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9576 (build-system python-build-system)
9577 (arguments
9578 `(#:python ,python-2
9579 #:phases
9580 (modify-phases %standard-phases
9581 (replace 'check
9582 (lambda _
9583 (invoke "python" "test_futures.py")
9584 #t)))))
9585 (home-page "https://github.com/agronholm/pythonfutures")
9586 (synopsis
9587 "Backport of the concurrent.futures package from Python 3.2")
9588 (description
9589 "The concurrent.futures module provides a high-level interface for
9590 asynchronously executing callables. This package backports the
9591 concurrent.futures package from Python 3.2")
9592 (license license:bsd-3)))
9593
9594 (define-public python-promise
9595 (package
9596 (name "python-promise")
9597 (version "0.4.2")
9598 (source
9599 (origin
9600 (method url-fetch)
9601 (uri (pypi-uri "promise" version))
9602 (sha256
9603 (base32
9604 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9605 (build-system python-build-system)
9606 ;; Tests wants python-futures, which is a python2 only program, and
9607 ;; can't be found by python-promise at test time.
9608 (arguments `(#:tests? #f))
9609 (home-page "https://github.com/syrusakbary/promise")
9610 (synopsis "Promises/A+ implementation for Python")
9611 (description
9612 "Promises/A+ implementation for Python")
9613 (properties `((python2-variant . ,(delay python2-promise))))
9614 (license license:expat)))
9615
9616 (define-public python2-promise
9617 (let ((promise (package-with-python2
9618 (strip-python2-variant python-promise))))
9619 (package (inherit promise)
9620 (arguments (substitute-keyword-arguments (package-arguments promise)
9621 ((#:tests? _) #t)))
9622 (native-inputs
9623 `(("python2-futures" ,python2-futures)
9624 ("python2-pytest" ,python2-pytest)
9625 ,@(package-native-inputs promise))))))
9626
9627 (define-public python-progressbar33
9628 (package
9629 (name "python-progressbar33")
9630 (version "2.4")
9631 (source
9632 (origin
9633 (method url-fetch)
9634 (uri (pypi-uri "progressbar33" version))
9635 (sha256
9636 (base32
9637 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9638 (build-system python-build-system)
9639 (home-page "http://github.com/germangh/python-progressbar")
9640 (synopsis "Text progress bar library for Python")
9641 (description
9642 "This package provides a text progress bar library for Python. This
9643 version only differs from the original @code{progressbar} package in that it
9644 uses relative package imports instead of absolute imports, which is necessary
9645 for the module to work under Python 3.3.")
9646 ;; Either or both of these licenses may be selected.
9647 (license (list license:lgpl2.1+ license:bsd-3))))
9648
9649 (define-public python-colorama
9650 (package
9651 (name "python-colorama")
9652 (version "0.4.3")
9653 (source
9654 (origin
9655 (method url-fetch)
9656 (uri (pypi-uri "colorama" version))
9657 (sha256
9658 (base32
9659 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9660 (build-system python-build-system)
9661 (synopsis "Colored terminal text rendering for Python")
9662 (description "Colorama is a Python library for rendering colored terminal
9663 text.")
9664 (home-page "https://pypi.org/project/colorama/")
9665 (license license:bsd-3)))
9666
9667 (define-public python2-colorama
9668 (package-with-python2 python-colorama))
9669
9670 (define-public python-rsa
9671 (package
9672 (name "python-rsa")
9673 (version "3.4.2")
9674 (source
9675 (origin
9676 (method url-fetch)
9677 (uri (pypi-uri "rsa" version))
9678 (sha256
9679 (base32
9680 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9681 (build-system python-build-system)
9682 (propagated-inputs
9683 `(("python-pyasn1" ,python-pyasn1)))
9684 (synopsis "Pure-Python RSA implementation")
9685 (description "Python-RSA is a pure-Python RSA implementation. It supports
9686 encryption and decryption, signing and verifying signatures, and key
9687 generation according to PKCS#1 version 1.5. It can be used as a Python
9688 library as well as on the command line.")
9689 (home-page "https://stuvel.eu/rsa")
9690 (license license:asl2.0)))
9691
9692 (define-public python2-rsa
9693 (package-with-python2 python-rsa))
9694
9695 (define-public python-pluggy
9696 (package
9697 (name "python-pluggy")
9698 (version "0.11.0")
9699 (source
9700 (origin
9701 (method url-fetch)
9702 (uri (pypi-uri "pluggy" version))
9703 (sha256
9704 (base32
9705 "10511a54dvafw1jrk75mrhml53c7b7w4yaw7241696lc2hfvr895"))))
9706 (build-system python-build-system)
9707 (native-inputs
9708 `(("python-setuptools-scm" ,python-setuptools-scm)))
9709 (synopsis "Plugin and hook calling mechanism for Python")
9710 (description "Pluggy is an extraction of the plugin manager as used by
9711 Pytest but stripped of Pytest specific details.")
9712 (home-page "https://pypi.org/project/pluggy/")
9713 (license license:expat)))
9714
9715 (define-public python2-pluggy
9716 (package-with-python2 python-pluggy))
9717
9718 (define-public python-tox
9719 (package
9720 (name "python-tox")
9721 (version "2.8.1")
9722 (source
9723 (origin
9724 (method url-fetch)
9725 (uri (pypi-uri "tox" version))
9726 (sha256
9727 (base32
9728 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
9729 (build-system python-build-system)
9730 (arguments
9731 ;; FIXME: Tests require pytest-timeout, which itself requires
9732 ;; pytest>=2.8.0 for installation.
9733 '(#:tests? #f))
9734 (propagated-inputs
9735 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9736 ("python-py" ,python-py)
9737 ("python-virtualenv" ,python-virtualenv)))
9738 (native-inputs
9739 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9740 ("python-pytest" ,python-pytest) ; >= 2.3.5
9741 ("python-setuptools-scm" ,python-setuptools-scm)))
9742 (home-page "https://tox.readthedocs.io")
9743 (synopsis "Virtualenv-based automation of test activities")
9744 (description "Tox is a generic virtualenv management and test command line
9745 tool. It can be used to check that a package installs correctly with
9746 different Python versions and interpreters, or run tests in each type of
9747 supported environment, or act as a frontend to continuous integration
9748 servers.")
9749 (license license:expat)))
9750
9751 (define-public python2-tox
9752 (package-with-python2 python-tox))
9753
9754 (define-public python-jmespath
9755 (package
9756 (name "python-jmespath")
9757 (version "0.9.4")
9758 (source
9759 (origin
9760 (method url-fetch)
9761 (uri (pypi-uri "jmespath" version))
9762 (sha256
9763 (base32
9764 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
9765 (build-system python-build-system)
9766 (native-inputs
9767 `(("python-nose" ,python-nose)))
9768 (synopsis "JSON Matching Expressions")
9769 (description "JMESPath (pronounced “james path”) is a Python library that
9770 allows one to declaratively specify how to extract elements from a JSON
9771 document.")
9772 (home-page "https://github.com/jmespath/jmespath.py")
9773 (license license:expat)))
9774
9775 (define-public python2-jmespath
9776 (package-with-python2 python-jmespath))
9777
9778 (define-public python-botocore
9779 (package
9780 (name "python-botocore")
9781 (version "1.15.26")
9782 (source
9783 (origin
9784 (method url-fetch)
9785 (uri (pypi-uri "botocore" version))
9786 (sha256
9787 (base32
9788 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
9789 (build-system python-build-system)
9790 (arguments
9791 ;; FIXME: Many tests are failing.
9792 '(#:tests? #f))
9793 (propagated-inputs
9794 `(("python-dateutil" ,python-dateutil)
9795 ("python-docutils" ,python-docutils)
9796 ("python-jmespath" ,python-jmespath)))
9797 (native-inputs
9798 `(("python-mock" ,python-mock)
9799 ("python-nose" ,python-nose)
9800 ("behave" ,behave)
9801 ("python-tox" ,python-tox)
9802 ("python-urllib3" ,python-urllib3)
9803 ("python-wheel" ,python-wheel)))
9804 (home-page "https://github.com/boto/botocore")
9805 (synopsis "Low-level interface to AWS")
9806 (description "Botocore is a Python library that provides a low-level
9807 interface to the Amazon Web Services (AWS) API.")
9808 (license license:asl2.0)))
9809
9810 (define-public python2-botocore
9811 (package-with-python2 python-botocore))
9812
9813 (define-public python-xdo
9814 (package
9815 (name "python-xdo")
9816 (version "0.3")
9817 (source (origin
9818 (method url-fetch)
9819 (uri (string-append
9820 "http://http.debian.net/debian/pool/main/p/python-xdo/"
9821 "python-xdo_" version ".orig.tar.gz"))
9822 (sha256
9823 (base32
9824 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
9825 (build-system python-build-system)
9826 (arguments
9827 '(#:phases
9828 (modify-phases %standard-phases
9829 (add-before 'install 'patch-libxdo-path
9830 ;; Hardcode the path of dynamically loaded libxdo library.
9831 (lambda* (#:key inputs #:allow-other-keys)
9832 (let ((libxdo (string-append
9833 (assoc-ref inputs "xdotool")
9834 "/lib/libxdo.so")))
9835 (substitute* "xdo/_xdo.py"
9836 (("find_library\\(\"xdo\"\\)")
9837 (simple-format #f "\"~a\"" libxdo)))
9838 #t))))
9839 #:tests? #f)) ; no tests provided
9840 (propagated-inputs
9841 `(("python-six" ,python-six)))
9842 (inputs
9843 `(("xdotool" ,xdotool)
9844 ("libX11" ,libx11)))
9845 (home-page "https://tracker.debian.org/pkg/python-xdo")
9846 (synopsis "Python library for simulating X11 keyboard/mouse input")
9847 (description "Provides bindings to libxdo for manipulating X11 via simulated
9848 input. (Note that this is mostly a legacy library; you may wish to look at
9849 python-xdo for newer bindings.)")
9850 (license license:bsd-3)))
9851
9852 (define-public python2-xdo
9853 (package-with-python2 python-xdo))
9854
9855 (define-public python-mako
9856 (package
9857 (name "python-mako")
9858 (version "1.1.1")
9859 (source
9860 (origin
9861 (method url-fetch)
9862 (uri (pypi-uri "Mako" version))
9863 (sha256
9864 (base32
9865 "193mds7lv91pphnvn6c1n55rhjkgq94asdzgrsb2fiqx7rrsd119"))))
9866 (build-system python-build-system)
9867 (arguments
9868 `(#:phases (modify-phases %standard-phases
9869 (replace 'check
9870 (lambda _
9871 (invoke "pytest" "-vv"))))))
9872 (propagated-inputs
9873 `(("python-markupsafe" ,python-markupsafe)))
9874 (native-inputs
9875 `(("python-mock" ,python-mock)
9876 ("python-pytest" ,python-pytest)))
9877 (home-page "https://www.makotemplates.org/")
9878 (synopsis "Templating language for Python")
9879 (description "Mako is a templating language for Python that compiles
9880 templates into Python modules.")
9881 (license license:expat)))
9882
9883 (define-public python2-mako
9884 (package-with-python2 python-mako))
9885
9886 (define-public python-waitress
9887 (package
9888 (name "python-waitress")
9889 (version "1.1.0")
9890 (source
9891 (origin
9892 (method url-fetch)
9893 (uri (pypi-uri "waitress" version))
9894 (patches (search-patches "python-waitress-fix-tests.patch"))
9895 (sha256
9896 (base32
9897 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
9898 (build-system python-build-system)
9899 (home-page "https://github.com/Pylons/waitress")
9900 (synopsis "Waitress WSGI server")
9901 (description "Waitress is meant to be a production-quality pure-Python WSGI
9902 server with very acceptable performance.")
9903 (license license:zpl2.1)))
9904
9905 (define-public python2-waitress
9906 (package-with-python2 python-waitress))
9907
9908 (define-public python-whichcraft
9909 (package
9910 (name "python-whichcraft")
9911 (version "0.6.1")
9912 (source
9913 (origin
9914 (method url-fetch)
9915 (uri (pypi-uri "whichcraft" version))
9916 (sha256
9917 (base32
9918 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
9919 (build-system python-build-system)
9920 (native-inputs
9921 `(("python-pytest" ,python-pytest)))
9922 (home-page "https://github.com/pydanny/whichcraft")
9923 (synopsis "Cross-platform cross-python shutil.which functionality")
9924 (description
9925 "This package provides a shim of the shutil.which function that's
9926 designed to work across multiple versions of Python.")
9927 (license license:bsd-3)))
9928
9929 (define-public python-cookiecutter
9930 (package
9931 (name "python-cookiecutter")
9932 (version "1.6.0")
9933 (source
9934 (origin
9935 (method url-fetch)
9936 (uri (pypi-uri "cookiecutter" version))
9937 (sha256
9938 (base32
9939 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
9940 (build-system python-build-system)
9941 (native-inputs
9942 `(("python-freezegun" ,python-freezegun)
9943 ("python-pytest" ,python-pytest)
9944 ("python-pytest-catchlog" ,python-pytest-catchlog)
9945 ("python-pytest-cov" ,python-pytest-cov)
9946 ("python-pytest-mock" ,python-pytest-mock)))
9947 (propagated-inputs
9948 `(("python-binaryornot" ,python-binaryornot)
9949 ("python-click" ,python-click)
9950 ("python-future" ,python-future)
9951 ("python-jinja2" ,python-jinja2)
9952 ("python-jinja2-time" ,python-jinja2-time)
9953 ("python-poyo" ,python-poyo)
9954 ("python-requests" ,python-requests)
9955 ("python-whichcraft" ,python-whichcraft)))
9956 (home-page "https://github.com/audreyr/cookiecutter")
9957 (synopsis
9958 "Command-line utility that creates projects from project templates")
9959 (description
9960 "This package provides a command-line utility that creates projects from
9961 project templates, e.g. creating a Python package project from a Python package
9962 project template.")
9963 (license license:bsd-3)))
9964
9965 (define-public python-pyquery
9966 (package
9967 (name "python-pyquery")
9968 (version "1.2.17")
9969 (source
9970 (origin
9971 (method url-fetch)
9972 (uri (pypi-uri "pyquery" version))
9973 (sha256
9974 (base32
9975 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
9976 (build-system python-build-system)
9977 (native-inputs
9978 `(("python-webob" ,python-webob)
9979 ("python-webtest" ,python-webtest)))
9980 (propagated-inputs
9981 `(("python-lxml" ,python-lxml)
9982 ("python-cssselect" ,python-cssselect)))
9983 (home-page "https://github.com/gawel/pyquery")
9984 (synopsis "Make jQuery-like queries on xml documents")
9985 (description "pyquery allows you to make jQuery queries on xml documents.
9986 The API is as much as possible the similar to jQuery. pyquery uses lxml for
9987 fast xml and html manipulation.")
9988 (license license:bsd-3)))
9989
9990 (define-public python-anyjson
9991 (package
9992 (name "python-anyjson")
9993 (version "0.3.3")
9994 (source
9995 (origin
9996 (method url-fetch)
9997 (uri (pypi-uri "anyjson" version))
9998 (sha256
9999 (base32
10000 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10001 (build-system python-build-system)
10002 (arguments
10003 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10004 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10005 ;; whatever) so this transformation needs to be done before the tests
10006 ;; can be run. Maybe we could add a build step to transform beforehand
10007 ;; but it could be annoying/difficult.
10008 ;; We can enable tests for the Python 2 version, though, and do below.
10009 #:tests? #f))
10010 (home-page "https://bitbucket.org/runeh/anyjson/")
10011 (synopsis
10012 "Wraps best available JSON implementation in a common interface")
10013 (description
10014 "Anyjson loads whichever is the fastest JSON module installed
10015 and provides a uniform API regardless of which JSON implementation is used.")
10016 (license license:bsd-3)
10017 (properties `((python2-variant . ,(delay python2-anyjson))))))
10018
10019 (define-public python2-anyjson
10020 (let ((anyjson (package-with-python2
10021 (strip-python2-variant python-anyjson))))
10022 (package
10023 (inherit anyjson)
10024 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10025 #:tests? #t
10026 ,@(package-arguments anyjson)))
10027 (native-inputs `(("python2-nose" ,python2-nose))))))
10028
10029 (define-public python-amqp
10030 (package
10031 (name "python-amqp")
10032 (version "2.3.2")
10033 (source
10034 (origin
10035 (method url-fetch)
10036 (uri (pypi-uri "amqp" version))
10037 (sha256
10038 (base32
10039 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10040 (build-system python-build-system)
10041 (native-inputs
10042 `(("python-case" ,python-case)
10043 ("python-pytest-sugar" ,python-pytest-sugar)
10044 ("python-mock" ,python-mock)))
10045 (propagated-inputs
10046 `(("python-vine" ,python-vine)))
10047 (home-page "https://github.com/celery/py-amqp")
10048 (synopsis
10049 "Low-level AMQP client for Python (fork of amqplib)")
10050 (description
10051 "This is a fork of amqplib which was originally written by Barry Pederson.
10052 It is maintained by the Celery project, and used by kombu as a pure python
10053 alternative when librabbitmq is not available.")
10054 (license license:lgpl2.1+)
10055 (properties `((python2-variant . ,(delay python2-amqp))))))
10056
10057 (define-public python2-amqp
10058 (let ((amqp (package-with-python2
10059 (strip-python2-variant python-amqp))))
10060 (package
10061 (inherit amqp)
10062 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10063 ;; unmaintained. Weirdly, does not do this on the python 3
10064 ;; version?
10065 #:tests? #f
10066 ,@(package-arguments amqp))))))
10067
10068 (define-public python-txamqp
10069 (package
10070 (name "python-txamqp")
10071 (version "0.8.2")
10072 (source
10073 (origin
10074 (method url-fetch)
10075 (uri (pypi-uri "txAMQP" version))
10076 (sha256
10077 (base32
10078 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10079 (build-system python-build-system)
10080 (propagated-inputs
10081 `(("python-six" ,python-six)
10082 ("python-twisted" ,python-twisted)))
10083 (home-page "https://github.com/txamqp/txamqp")
10084 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10085 (description
10086 "This package provides a Python library for communicating with AMQP peers
10087 and brokers using the asynchronous networking framework Twisted. It contains
10088 all the necessary code to connect, send and receive messages to/from an
10089 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10090 also includes support for using Thrift RPC over AMQP in Twisted
10091 applications.")
10092 (license license:asl2.0)))
10093
10094 (define-public python2-txamqp
10095 (package-with-python2 python-txamqp))
10096
10097 (define-public python-kombu
10098 (package
10099 (name "python-kombu")
10100 (version "4.2.2")
10101 (source
10102 (origin
10103 (method url-fetch)
10104 (uri (pypi-uri "kombu" version))
10105 (sha256
10106 (base32
10107 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10108 (build-system python-build-system)
10109 (native-inputs
10110 `(("python-mock" ,python-mock)
10111 ("python-case" ,python-case)
10112 ("python-pyro4" ,python-pyro4)
10113 ("python-pytest-sugar" ,python-pytest-sugar)
10114 ("python-pytz" ,python-pytz)))
10115 (propagated-inputs
10116 `(("python-anyjson" ,python-anyjson)
10117 ("python-amqp" ,python-amqp)
10118 ("python-redis" ,python-redis)))
10119 (home-page "https://kombu.readthedocs.io")
10120 (synopsis "Message passing library for Python")
10121 (description "The aim of Kombu is to make messaging in Python as easy as
10122 possible by providing an idiomatic high-level interface for the AMQ protocol,
10123 and also provide proven and tested solutions to common messaging problems.
10124 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10125 message orientation, queuing, routing, reliability and security, for which the
10126 RabbitMQ messaging server is the most popular implementation.")
10127 (license license:bsd-3)
10128 (properties `((python2-variant . ,(delay python2-kombu))))))
10129
10130 (define-public python2-kombu
10131 (let ((kombu (package-with-python2
10132 (strip-python2-variant python-kombu))))
10133 (package
10134 (inherit kombu)
10135 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10136 ;; It works fine on the python3 variant.
10137 #:tests? #f
10138 ,@(package-arguments kombu)))
10139 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10140 ,@(package-native-inputs kombu))))))
10141
10142 (define-public python-billiard
10143 (package
10144 (name "python-billiard")
10145 (version "3.5.0.5")
10146 (source
10147 (origin
10148 (method url-fetch)
10149 (uri (pypi-uri "billiard" version))
10150 (sha256
10151 (base32
10152 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10153 (build-system python-build-system)
10154 (native-inputs
10155 `(("python-case" ,python-case)
10156 ("python-pytest" ,python-pytest)))
10157 (home-page "https://github.com/celery/billiard")
10158 (synopsis
10159 "Python multiprocessing fork with improvements and bugfixes")
10160 (description
10161 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10162 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10163 pyprocessing package. This standalone variant is intended to be compatible with
10164 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10165 (license license:bsd-3)
10166 (properties `((python2-variant . ,(delay python2-billiard))))))
10167
10168 (define-public python2-billiard
10169 (let ((billiard (package-with-python2
10170 (strip-python2-variant python-billiard))))
10171 (package
10172 (inherit billiard)
10173 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10174 ("python2-mock" ,python2-mock)
10175 ,@(package-native-inputs billiard))))))
10176
10177 (define-public python-celery
10178 (package
10179 (name "python-celery")
10180 (version "4.2.1")
10181 (source
10182 (origin
10183 (method url-fetch)
10184 (uri (pypi-uri "celery" version))
10185 (sha256
10186 (base32
10187 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10188 (build-system python-build-system)
10189 (arguments
10190 '(;; TODO The tests fail with Python 3.7
10191 ;; https://github.com/celery/celery/issues/4849
10192 #:tests? #f
10193 #:phases
10194 (modify-phases %standard-phases
10195 (add-after 'unpack 'patch-requirements
10196 (lambda _
10197 (substitute* "requirements/test.txt"
10198 (("pytest>=3\\.0,<3\\.3")
10199 "pytest>=3.0"))
10200 #t)))))
10201 (native-inputs
10202 `(("python-case" ,python-case)
10203 ("python-pytest" ,python-pytest)))
10204 (propagated-inputs
10205 `(("python-pytz" ,python-pytz)
10206 ("python-billiard" ,python-billiard)
10207 ("python-kombu" ,python-kombu)))
10208 (home-page "https://celeryproject.org")
10209 (synopsis "Distributed Task Queue")
10210 (description "Celery is an asynchronous task queue/job queue based on
10211 distributed message passing. It is focused on real-time operation, but
10212 supports scheduling as well. The execution units, called tasks, are executed
10213 concurrently on a single or more worker servers using multiprocessing,
10214 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10215 synchronously (wait until ready).")
10216 (license license:bsd-3)
10217 (properties `((python2-variant . ,(delay python2-celery))))))
10218
10219 (define-public python2-celery
10220 (let ((celery (package-with-python2
10221 (strip-python2-variant python-celery))))
10222 (package
10223 (inherit celery)
10224 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10225 ("python2-mock" ,python2-mock)
10226 ,@(package-native-inputs celery))))))
10227
10228 (define-public python-translitcodec
10229 (package
10230 (name "python-translitcodec")
10231 (version "0.4.0")
10232 (source
10233 (origin
10234 (method url-fetch)
10235 (uri (pypi-uri "translitcodec" version))
10236 (sha256
10237 (base32
10238 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10239 (build-system python-build-system)
10240 (arguments
10241 `(#:tests? #f)) ; no tests provided
10242 (home-page
10243 "https://github.com/claudep/translitcodec")
10244 (synopsis
10245 "Unicode to 8-bit charset transliteration codec")
10246 (description
10247 "This package contains codecs for transliterating ISO 10646 texts into
10248 best-effort representations using smaller coded character sets (ASCII,
10249 ISO 8859, etc.).")
10250 (license license:expat)))
10251
10252 (define-public python2-translitcodec
10253 (package-with-python2 python-translitcodec))
10254
10255 (define-public python-editor
10256 (package
10257 (name "python-editor")
10258 (version "1.0.4")
10259 (source
10260 (origin
10261 (method url-fetch)
10262 (uri (pypi-uri "python-editor" version))
10263 (sha256
10264 (base32
10265 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10266 (build-system python-build-system)
10267 (arguments
10268 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10269 (home-page "https://github.com/fmoo/python-editor")
10270 (synopsis "Programmatically open an editor, capture the result")
10271 (description
10272 "python-editor is a library that provides the editor module for
10273 programmatically interfacing with your system's $EDITOR.")
10274 (license license:asl2.0)))
10275
10276 (define-public python2-editor
10277 (package-with-python2 python-editor))
10278
10279 (define-public python-vobject
10280 (package
10281 (name "python-vobject")
10282 (version "0.9.5")
10283 (source (origin
10284 (method url-fetch)
10285 (uri (pypi-uri "vobject" version))
10286 (sha256
10287 (base32
10288 "0hqjgf3ay1m5w1c0k00g5yfpdz1zni5qnr5rh9b8fg9hjvhwlmhg"))))
10289 (build-system python-build-system)
10290 (arguments
10291 '(;; The test suite relies on some non-portable Windows interfaces.
10292 #:tests? #f))
10293 (propagated-inputs
10294 `(("python-dateutil" ,python-dateutil)
10295 ("python-pyicu" ,python-pyicu)))
10296 (synopsis "Parse and generate vCard and vCalendar files")
10297 (description "Vobject is intended to be a full featured Python package for
10298 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10299 are supported and well tested. vCard 3.0 files are supported, and all data
10300 should be imported, but only a few components are understood in a sophisticated
10301 way.")
10302 (home-page "https://eventable.github.io/vobject/")
10303 (license license:asl2.0)))
10304
10305 (define-public python2-vobject
10306 (package-with-python2 python-vobject))
10307
10308 (define-public python-munkres
10309 (package
10310 (name "python-munkres")
10311 (version "1.0.8")
10312 (source (origin
10313 (method url-fetch)
10314 (uri (pypi-uri "munkres" version))
10315 (sha256
10316 (base32
10317 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10318 (build-system python-build-system)
10319 (arguments
10320 '(#:tests? #f)) ; no test suite
10321 (home-page "https://software.clapper.org/munkres/")
10322 (synopsis "Implementation of the Munkres algorithm")
10323 (description "The Munkres module provides an implementation of the Munkres
10324 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10325 useful for solving the Assignment Problem.")
10326 (license license:bsd-3)))
10327
10328 (define-public python2-munkres
10329 (package-with-python2 python-munkres))
10330
10331 (define-public python-whoosh
10332 (package
10333 (name "python-whoosh")
10334 (version "2.7.4")
10335 (source
10336 (origin
10337 (method url-fetch)
10338 (uri (pypi-uri "Whoosh" version))
10339 (sha256
10340 (base32
10341 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10342 (build-system python-build-system)
10343 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10344 (native-inputs
10345 `(("python-pytest" ,python-pytest)))
10346 (home-page "https://bitbucket.org/mchaput/whoosh")
10347 (synopsis "Full text indexing, search, and spell checking library")
10348 (description
10349 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10350 checking library.")
10351 (license license:bsd-2)))
10352
10353 (define-public python2-whoosh
10354 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10355 (package (inherit whoosh)
10356 (propagated-inputs
10357 `(("python2-backport-ssl-match-hostname"
10358 ,python2-backport-ssl-match-hostname)
10359 ,@(package-propagated-inputs whoosh))))))
10360
10361 (define-public python-pathlib
10362 (package
10363 (name "python-pathlib")
10364 (version "1.0.1")
10365 (source (origin
10366 (method url-fetch)
10367 (uri (pypi-uri "pathlib" version))
10368 (sha256
10369 (base32
10370 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10371 (build-system python-build-system)
10372 ;; The tests depend on the internal "test" module, which does not provide
10373 ;; a stable interface.
10374 (arguments `(#:tests? #f))
10375 (home-page "https://pathlib.readthedocs.org/")
10376 (synopsis "Object-oriented file system paths")
10377 (description "Pathlib offers a set of classes to handle file system paths.
10378 It offers the following advantages over using string objects:
10379
10380 @enumerate
10381 @item No more cumbersome use of os and os.path functions. Everything can
10382 be done easily through operators, attribute accesses, and method calls.
10383 @item Embodies the semantics of different path types. For example,
10384 comparing Windows paths ignores casing.
10385 @item Well-defined semantics, eliminating any inconsistencies or
10386 ambiguities (forward vs. backward slashes, etc.).
10387 @end enumerate
10388
10389 Note: In Python 3.4, pathlib is now part of the standard library. For other
10390 Python versions please consider python-pathlib2 instead, which tracks the
10391 standard library module. This module (python-pathlib) isn't maintained
10392 anymore.")
10393 (license license:expat)))
10394
10395 (define-public python2-pathlib
10396 (package-with-python2 python-pathlib))
10397
10398 (define-public python2-pathlib2
10399 (package
10400 (name "python2-pathlib2")
10401 (version "2.3.3")
10402 (source (origin
10403 (method url-fetch)
10404 (uri (pypi-uri "pathlib2" version))
10405 (sha256
10406 (base32
10407 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
10408 (build-system python-build-system)
10409 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10410 ;; version is 3.4 which already includes this package as part of the
10411 ;; standard library.
10412 (arguments
10413 `(#:python ,python-2))
10414 (propagated-inputs
10415 `(("python2-scandir" ,python2-scandir)
10416 ("python2-six" ,python2-six)))
10417 (home-page "https://pypi.org/project/pathlib2/")
10418 (synopsis "Object-oriented file system paths - backport of standard
10419 pathlib module")
10420 (description "The goal of pathlib2 is to provide a backport of standard
10421 pathlib module which tracks the standard library module, so all the newest
10422 features of the standard pathlib can be used also on older Python versions.
10423
10424 Pathlib offers a set of classes to handle file system paths. It offers the
10425 following advantages over using string objects:
10426
10427 @enumerate
10428 @item No more cumbersome use of os and os.path functions. Everything can
10429 be done easily through operators, attribute accesses, and method calls.
10430 @item Embodies the semantics of different path types. For example,
10431 comparing Windows paths ignores casing.
10432 @item Well-defined semantics, eliminating any inconsistencies or
10433 ambiguities (forward vs. backward slashes, etc.).
10434 @end enumerate")
10435 (license license:expat)))
10436
10437 (define-public python2-pathlib2-bootstrap
10438 (hidden-package
10439 (package
10440 (inherit python2-pathlib2)
10441 (name "python2-pathlib2-bootstrap")
10442 (propagated-inputs
10443 `(("python2-scandir" ,python2-scandir)
10444 ("python2-six" ,python2-six-bootstrap))))))
10445
10446 (define-public python-jellyfish
10447 (package
10448 (name "python-jellyfish")
10449 (version "0.5.6")
10450 (source (origin
10451 (method url-fetch)
10452 (uri (pypi-uri "jellyfish" version))
10453 (sha256
10454 (base32
10455 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10456 (build-system python-build-system)
10457 (native-inputs
10458 `(("python-pytest" ,python-pytest)))
10459 (home-page "https://github.com/jamesturk/jellyfish")
10460 (synopsis "Approximate and phonetic matching of strings")
10461 (description "Jellyfish uses a variety of string comparison and phonetic
10462 encoding algorithms to do fuzzy string matching.")
10463 (license license:bsd-2)
10464 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10465
10466 (define-public python2-jellyfish
10467 (let ((jellyfish (package-with-python2
10468 (strip-python2-variant python-jellyfish))))
10469 (package (inherit jellyfish)
10470 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10471 ,@(package-native-inputs jellyfish))))))
10472
10473 (define-public python2-unicodecsv
10474 (package
10475 (name "python2-unicodecsv")
10476 (version "0.14.1")
10477 (source (origin
10478 (method git-fetch)
10479 ;; The test suite is not included in the PyPi release.
10480 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10481 (uri (git-reference
10482 (url "https://github.com/jdunck/python-unicodecsv")
10483 (commit version)))
10484 (file-name (git-file-name name version))
10485 (sha256
10486 (base32
10487 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10488 (build-system python-build-system)
10489 (arguments
10490 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10491 #:python ,python-2))
10492 (native-inputs
10493 `(("python2-unittest2" ,python2-unittest2)))
10494 (home-page "https://github.com/jdunck/python-unicodecsv")
10495 (synopsis "Unicode CSV module for Python 2")
10496 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10497 module, adding support for Unicode strings.")
10498 (license license:bsd-2)))
10499
10500 (define-public python-rarfile
10501 (package
10502 (name "python-rarfile")
10503 (version "2.8")
10504 (source (origin
10505 (method url-fetch)
10506 (uri (pypi-uri "rarfile" version))
10507 (sha256
10508 (base32
10509 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10510 (build-system python-build-system)
10511 (arguments
10512 '(#:phases
10513 (modify-phases %standard-phases
10514 (replace 'check
10515 ;; Many tests fail, but the installation proceeds.
10516 (lambda _ (invoke "make" "-C" "test" "test"))))))
10517 (native-inputs
10518 `(("which" ,which))) ; required for tests
10519 (propagated-inputs
10520 `(("libarchive" ,libarchive)))
10521 (home-page "https://github.com/markokr/rarfile")
10522 (synopsis "RAR archive reader for Python")
10523 (description "This is Python module for RAR archive reading. The interface
10524 is made as zipfile like as possible.")
10525 (license license:isc)))
10526
10527 (define-public python2-rarfile
10528 (package-with-python2 python-rarfile))
10529
10530 (define-public python-magic
10531 (package
10532 (name "python-magic")
10533 (version "0.4.15")
10534 (source
10535 (origin
10536 (method url-fetch)
10537 (uri (pypi-uri "python-magic" version))
10538 (sha256
10539 (base32
10540 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10541 (file-name (string-append name "-" version "-checkout"))))
10542 (build-system python-build-system)
10543 (arguments
10544 ;; The tests are unreliable, so don't run them. The tests fail
10545 ;; under Python3 because they were written for Python2 and
10546 ;; contain import statements that do not work in Python3. One of
10547 ;; the tests fails under Python2 because its assertions are
10548 ;; overly stringent; it relies on comparing output strings which
10549 ;; are brittle and can change depending on the version of
10550 ;; libmagic being used and the system on which the test is
10551 ;; running. In my case, under GuixSD 0.10.0, only one test
10552 ;; failed, and it seems to have failed only because the version
10553 ;; of libmagic that is packaged in Guix outputs a slightly
10554 ;; different (but not wrong) string than the one that the test
10555 ;; expected.
10556 '(#:tests? #f
10557 #:phases (modify-phases %standard-phases
10558 ;; Replace a specific method call with a hard-coded
10559 ;; path to the necessary libmagic.so file in the
10560 ;; store. If we don't do this, then the method call
10561 ;; will fail to find the libmagic.so file, which in
10562 ;; turn will cause any application using
10563 ;; python-magic to fail.
10564 (add-before 'build 'hard-code-path-to-libmagic
10565 (lambda* (#:key inputs #:allow-other-keys)
10566 (let ((file (assoc-ref inputs "file")))
10567 (substitute* "magic.py"
10568 (("ctypes.util.find_library\\('magic'\\)")
10569 (string-append "'" file "/lib/libmagic.so'")))
10570 #t)))
10571 (add-before 'install 'disable-egg-compression
10572 (lambda _
10573 (let ((port (open-file "setup.cfg" "a")))
10574 (display "\n[easy_install]\nzip_ok = 0\n"
10575 port)
10576 (close-port port)
10577 #t))))))
10578 (inputs
10579 ;; python-magic needs to be able to find libmagic.so.
10580 `(("file" ,file)))
10581 (home-page
10582 "https://github.com/ahupp/python-magic")
10583 (synopsis
10584 "File type identification using libmagic")
10585 (description
10586 "This module uses ctypes to access the libmagic file type
10587 identification library. It makes use of the local magic database and
10588 supports both textual and MIME-type output. Note that this module and
10589 the python-file module both provide a \"magic.py\" file; these two
10590 modules, which are different and were developed separately, both serve
10591 the same purpose: to provide Python bindings for libmagic.")
10592 (license license:expat)))
10593
10594 (define-public python2-magic
10595 (package-with-python2 python-magic))
10596
10597 (define-public python2-s3cmd
10598 (package
10599 (name "python2-s3cmd")
10600 (version "1.6.1")
10601 (source
10602 (origin
10603 (method url-fetch)
10604 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10605 "s3cmd-" version ".tar.gz"))
10606 (sha256
10607 (base32
10608 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10609 (build-system python-build-system)
10610 (arguments
10611 ;; s3cmd is written for python2 only and contains no tests.
10612 `(#:python ,python-2
10613 #:tests? #f))
10614 (propagated-inputs
10615 `(("python2-dateutil" ,python2-dateutil)
10616 ;; The python-file package also provides a magic.py module.
10617 ;; This is an unfortunate state of affairs; however, s3cmd
10618 ;; fails to install if it cannot find specifically the
10619 ;; python-magic package. Thus we include it, instead of using
10620 ;; python-file. Ironically, s3cmd sometimes works better
10621 ;; without libmagic bindings at all:
10622 ;; https://github.com/s3tools/s3cmd/issues/198
10623 ("python2-magic" ,python2-magic)))
10624 (home-page "https://s3tools.org/s3cmd")
10625 (synopsis "Command line tool for S3-compatible storage services")
10626 (description
10627 "S3cmd is a command line tool for uploading, retrieving and managing data
10628 in storage services that are compatible with the Amazon Simple Storage
10629 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10630 GnuPG encryption, and more. It also supports management of Amazon's
10631 CloudFront content delivery network.")
10632 (license license:gpl2+)))
10633
10634 (define-public python-pkgconfig
10635 (package
10636 (name "python-pkgconfig")
10637 (version "1.3.1")
10638 (source
10639 (origin
10640 (method url-fetch)
10641 (uri (pypi-uri "pkgconfig" version))
10642 (sha256
10643 (base32
10644 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10645 (build-system python-build-system)
10646 (native-inputs
10647 `(("python-nose" ,python-nose)))
10648 (inputs
10649 `(("pkg-config" ,pkg-config)))
10650 (arguments
10651 `(#:phases
10652 (modify-phases %standard-phases
10653 (add-before 'build 'patch
10654 ;; Hard-code the path to pkg-config.
10655 (lambda _
10656 (substitute* "pkgconfig/pkgconfig.py"
10657 (("cmd = 'pkg-config")
10658 (string-append "cmd = '" (which "pkg-config"))))
10659 #t))
10660 (replace 'check
10661 (lambda _
10662 (invoke "nosetests" "test.py"))))))
10663 (home-page "https://github.com/matze/pkgconfig")
10664 (synopsis "Python interface for pkg-config")
10665 (description "This module provides a Python interface to pkg-config. It
10666 can be used to find all pkg-config packages, check if a package exists,
10667 check if a package meets certain version requirements, query CFLAGS and
10668 LDFLAGS and parse the output to build extensions with setup.py.")
10669 (license license:expat)))
10670
10671 (define-public python2-pkgconfig
10672 (package-with-python2 python-pkgconfig))
10673
10674 (define-public python-bz2file
10675 (package
10676 (name "python-bz2file")
10677 (version "0.98")
10678 (source
10679 (origin
10680 (method url-fetch)
10681 (uri (pypi-uri "bz2file" version))
10682 (sha256
10683 (base32
10684 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10685 (build-system python-build-system)
10686 (arguments
10687 `(#:tests? #f)) ; Tests use deprecated python modules.
10688 (home-page "https://github.com/nvawda/bz2file")
10689 (synopsis "Read and write bzip2-compressed files")
10690 (description
10691 "Bz2file is a Python library for reading and writing bzip2-compressed
10692 files. It contains a drop-in replacement for the I/O interface in the
10693 standard library's @code{bz2} module, including features from the latest
10694 development version of CPython that are not available in older releases.")
10695 (license license:asl2.0)))
10696
10697 (define-public python2-bz2file
10698 (package-with-python2 python-bz2file))
10699
10700 (define-public python-future
10701 (package
10702 (name "python-future")
10703 (version "0.17.1")
10704 (source
10705 (origin
10706 (method url-fetch)
10707 (uri (pypi-uri "future" version))
10708 (sha256
10709 (base32
10710 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
10711 (build-system python-build-system)
10712 ;; Many tests connect to the network or are otherwise flawed.
10713 ;; https://github.com/PythonCharmers/python-future/issues/210
10714 (arguments
10715 `(#:tests? #f))
10716 (home-page "https://python-future.org")
10717 (synopsis "Single-source support for Python 3 and 2")
10718 (description
10719 "@code{python-future} is the missing compatibility layer between Python 2 and
10720 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10721 to support both Python 2 and Python 3 with minimal overhead.")
10722 (license license:expat)))
10723
10724 (define-public python2-future
10725 (package-with-python2 python-future))
10726
10727 (define-public python-cysignals
10728 (package
10729 (name "python-cysignals")
10730 (version "1.9.0")
10731 (source
10732 (origin
10733 (method url-fetch)
10734 (uri (pypi-uri "cysignals" version))
10735 (sha256
10736 (base32
10737 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
10738 (build-system python-build-system)
10739 (native-inputs
10740 `(("python-cython" ,python-cython)
10741 ("python-sphinx" ,python-sphinx)))
10742 (inputs
10743 `(("pari-gp" ,pari-gp)))
10744 (arguments
10745 `(#:modules ((guix build python-build-system)
10746 ((guix build gnu-build-system) #:prefix gnu:)
10747 (guix build utils))
10748 ;; FIXME: Tests are executed after installation and currently fail
10749 ;; when not installing into standard locations; the author is working
10750 ;; on a fix.
10751 #:tests? #f
10752 #:phases
10753 (modify-phases %standard-phases
10754 (add-before
10755 'build 'configure
10756 (assoc-ref gnu:%standard-phases 'configure)))))
10757 (home-page
10758 "https://github.com/sagemath/cysignals")
10759 (synopsis
10760 "Handling of interrupts and signals for Cython")
10761 (description
10762 "The cysignals package provides mechanisms to handle interrupts (and
10763 other signals and errors) in Cython code, using two related approaches,
10764 for mixed Cython/Python code or external C libraries and pure Cython code,
10765 respectively.")
10766 (license license:lgpl3+)))
10767
10768 (define-public python2-cysignals
10769 (package-with-python2 python-cysignals))
10770
10771 (define-public python2-shedskin
10772 (package
10773 (name "python2-shedskin")
10774 (version "0.9.4")
10775 (source
10776 (origin
10777 (method url-fetch)
10778 (uri (string-append "https://github.com/shedskin/shedskin/"
10779 "releases/download/v" version
10780 "/shedskin-" version ".tgz"))
10781 (sha256
10782 (base32
10783 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
10784 (build-system python-build-system)
10785 (arguments
10786 `(#:python ,python-2
10787 #:phases (modify-phases %standard-phases
10788 (add-after 'unpack 'fix-resulting-include-libs
10789 (lambda* (#:key inputs #:allow-other-keys)
10790 (let ((libgc (assoc-ref inputs "libgc"))
10791 (pcre (assoc-ref inputs "pcre")))
10792 (substitute* "shedskin/makefile.py"
10793 (("variable == 'CCFLAGS':[ ]*")
10794 (string-append "variable == 'CCFLAGS':\n"
10795 " line += ' -I " pcre "/include"
10796 " -I " libgc "/include'"))
10797 (("variable == 'LFLAGS':[ ]*")
10798 (string-append "variable == 'LFLAGS':\n"
10799 " line += ' -L" pcre "/lib"
10800 " -L " libgc "/lib'")))
10801 #t))))))
10802 (inputs `(("pcre" ,pcre)
10803 ("libgc" ,libgc)))
10804 (home-page "https://shedskin.github.io/")
10805 (synopsis "Experimental Python-2 to C++ Compiler")
10806 (description (string-append "This is an experimental compiler for a subset of
10807 Python. It generates C++ code and a Makefile."))
10808 (license (list license:gpl3 license:bsd-3 license:expat))))
10809
10810 (define-public python2-rope
10811 (package
10812 (name "python2-rope")
10813 (version "0.11.0")
10814 (source
10815 (origin
10816 (method url-fetch)
10817 (uri (pypi-uri "rope" version))
10818 (sha256
10819 (base32
10820 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
10821 (arguments
10822 ;; Rope has only partial python3 support, see `python-rope'
10823 `(#:python ,python-2))
10824 (build-system python-build-system)
10825 (native-inputs
10826 `(("python2-unittest2" ,python2-unittest2)))
10827 (home-page "https://github.com/python-rope/rope")
10828 (synopsis "Refactoring library for Python")
10829 (description "Rope is a refactoring library for Python. It facilitates
10830 the renaming, moving and extracting of attributes, functions, modules, fields
10831 and parameters in Python 2 source code. These refactorings can also be applied
10832 to occurrences in strings and comments.")
10833 (license license:gpl2)))
10834
10835 (define-public python-rope
10836 (package
10837 (inherit python2-rope)
10838 (name "python-rope")
10839 (arguments `(#:python ,python-wrapper
10840 ;; XXX: Only partial python3 support, results in some failing
10841 ;; tests: <https://github.com/python-rope/rope/issues/247>.
10842 #:tests? #f))
10843 (properties `((python2-variant . ,(delay python2-rope))))))
10844
10845 (define-public python-py3status
10846 (package
10847 (name "python-py3status")
10848 (version "3.21")
10849 (source
10850 (origin
10851 (method url-fetch)
10852 (uri (pypi-uri "py3status" version))
10853 (sha256
10854 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
10855 (build-system python-build-system)
10856 (inputs
10857 `(("file" ,file)))
10858 (arguments
10859 '(#:phases
10860 (modify-phases %standard-phases
10861 ;; 'file' is used for detection of configuration file encoding
10862 ;; let's make link the dependency to particular input
10863 (add-before 'build 'patch-file-path
10864 (lambda* (#:key inputs #:allow-other-keys)
10865 (let ((file-path (assoc-ref inputs "file")))
10866 (substitute* "py3status/parse_config.py"
10867 (("\\[\"file\", \"-b\"")
10868 (string-append "['" file-path "/bin/file', '-b'")))
10869 #t))))
10870 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
10871 (home-page "https://github.com/ultrabug/py3status")
10872 (synopsis "Extensible i3status wrapper written in Python")
10873 (description "py3status is an i3status wrapper which extends i3status
10874 functionality in a modular way, allowing you to extend your panel with your
10875 own code, responding to click events and updating clock every second.")
10876 (license license:bsd-3)))
10877
10878 (define-public python-tblib
10879 (package
10880 (name "python-tblib")
10881 (version "1.6.0")
10882 (source (origin
10883 (method url-fetch)
10884 (uri (pypi-uri "tblib" version))
10885 (sha256
10886 (base32
10887 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
10888 (build-system python-build-system)
10889 (arguments
10890 `(#:phases
10891 (modify-phases %standard-phases
10892 (replace 'check
10893 (lambda _
10894 ;; Upstream runs tests after installation and the package itself
10895 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
10896 ;; found.
10897 (setenv "PYTHONPATH"
10898 (string-append (getcwd) "/build/lib:"
10899 (getenv "PYTHONPATH")))
10900 (invoke "py.test" "-vv" "tests" "README.rst"))))))
10901 (native-inputs
10902 `(("python-pytest" ,python-pytest)
10903 ("python-six" ,python-six)))
10904 (home-page "https://github.com/ionelmc/python-tblib")
10905 (synopsis "Traceback serialization library")
10906 (description
10907 "Traceback serialization allows you to:
10908
10909 @enumerate
10910 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
10911 different processes. This allows better error handling when running code over
10912 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
10913
10914 @item Parse traceback strings and raise with the parsed tracebacks.
10915 @end enumerate\n")
10916 (license license:bsd-3)))
10917
10918 (define-public python2-tblib
10919 (package-with-python2 python-tblib))
10920
10921 (define-public python-greenlet
10922 (package
10923 (name "python-greenlet")
10924 (version "0.4.15")
10925 (source (origin
10926 (method url-fetch)
10927 (uri (pypi-uri "greenlet" version))
10928 (sha256
10929 (base32
10930 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
10931 (build-system python-build-system)
10932 (home-page "https://greenlet.readthedocs.io/")
10933 (synopsis "Lightweight in-process concurrent programming")
10934 (description
10935 "Greenlet package is a spin-off of Stackless, a version of CPython
10936 that supports micro-threads called \"tasklets\". Tasklets run
10937 pseudo-concurrently (typically in a single or a few OS-level threads) and
10938 are synchronized with data exchanges on \"channels\".")
10939 (license (list license:psfl license:expat))))
10940
10941 (define-public python2-greenlet
10942 (package-with-python2 python-greenlet))
10943
10944 (define-public python-objgraph
10945 (package
10946 (name "python-objgraph")
10947 (version "3.4.1")
10948 (source
10949 (origin
10950 (method url-fetch)
10951 (uri (pypi-uri "objgraph" version))
10952 (sha256
10953 (base32
10954 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
10955 (build-system python-build-system)
10956 (propagated-inputs
10957 `(("python-graphviz" ,python-graphviz)))
10958 (native-inputs
10959 `(("python-mock" ,python-mock)
10960 ("graphviz" ,graphviz)))
10961 (home-page "https://mg.pov.lt/objgraph/")
10962 (synopsis "Draw Python object reference graphs with graphviz")
10963 (description
10964 "This package provides tools to draw Python object reference graphs with
10965 graphviz.")
10966 (license license:expat)))
10967
10968 (define-public python2-objgraph
10969 (package-with-python2 python-objgraph))
10970
10971 (define-public python-gevent
10972 (package
10973 (name "python-gevent")
10974 (version "1.4.0")
10975 (source (origin
10976 (method url-fetch)
10977 (uri (pypi-uri "gevent" version))
10978 (sha256
10979 (base32
10980 "1lchr4akw2jkm5v4kz7bdm4wv3knkfhbfn9vkkz4s5yrkcxzmdqy"))
10981 (modules '((guix build utils)))
10982 (snippet
10983 '(begin
10984 ;; unbunding libev and c-ares
10985 (delete-file-recursively "deps")
10986 #t))))
10987 (build-system python-build-system)
10988 (arguments
10989 `(#:modules ((ice-9 ftw)
10990 (ice-9 match)
10991 (srfi srfi-26)
10992 (guix build utils)
10993 (guix build python-build-system))
10994 #:phases (modify-phases %standard-phases
10995 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
10996 (lambda _
10997 (substitute* "src/gevent/subprocess.py"
10998 (("/bin/sh") (which "sh")))
10999 (for-each (lambda (file)
11000 (substitute* file
11001 (("/bin/sh") (which "sh"))
11002 (("/bin/true") (which "true"))))
11003 (find-files "src/greentest" "\\.py$"))
11004 #t))
11005 (add-before 'build 'do-not-use-bundled-sources
11006 (lambda* (#:key inputs #:allow-other-keys)
11007 (setenv "GEVENTSETUP_EMBED" "0")
11008
11009 ;; Prevent building bundled libev.
11010 (substitute* "setup.py"
11011 (("run_make=_BUILDING")
11012 "run_make=False"))
11013
11014 (let ((greenlet (string-append
11015 (assoc-ref inputs "python-greenlet")
11016 "/include")))
11017 (match (scandir greenlet
11018 (lambda (item)
11019 (string-prefix? "python" item)))
11020 ((python)
11021 (setenv "C_INCLUDE_PATH"
11022 (string-append greenlet "/" python ":"
11023 (or (getenv "C_INCLUDE_PATH")
11024 ""))))))
11025 #t))
11026 (add-before 'check 'pretend-to-be-CI
11027 (lambda _
11028 ;; A few tests are skipped due to network constraints or
11029 ;; get longer timeouts when running in a CI environment.
11030 ;; Piggy-back on that, as we need the same adjustments.
11031 (setenv "TRAVIS" "1")
11032 (setenv "APPVEYOR" "1")
11033 #t))
11034 (add-before 'check 'adjust-tests
11035 (lambda _
11036 (let ((disabled-tests
11037 '(;; These tests rely on networking which is not
11038 ;; available in the build container.
11039 "test_urllib2net.py"
11040 "test__server.py"
11041 "test__server_pywsgi.py"
11042 "test_socket.py"
11043 "test__socket.py"
11044 "test__socket_ssl.py"
11045 "test__socket_dns.py"
11046 "test__socket_dns6.py"
11047 "test___example_servers.py"
11048 "test__getaddrinfo_import.py"
11049 "test__examples.py"
11050 "test_httplib.py"
11051 "test_https.py"
11052 "test_urllib2_localnet.py"
11053 "test_ssl.py"
11054 "test__ssl.py"
11055 ;; XXX: These tests borrow functionality from the
11056 ;; Python builtin 'test' module, but it is not
11057 ;; installed with the Guix Python distribution.
11058 "test_smtpd.py"
11059 "test_wsgiref.py"
11060 "test_urllib2.py"
11061 "test_thread.py"
11062 "test_threading.py"
11063 "test__threading_2.py"
11064 ;; FIXME: test_patch_twice_warning_events fails for
11065 ;; no apparent reason. Needs more investigation!
11066 "test__monkey.py"
11067 ;; These tests rely on KeyboardInterrupts which do not
11068 ;; work inside the build container for some reason
11069 ;; (lack of controlling terminal?).
11070 "test_subprocess.py"
11071 "test__issues461_471.py"
11072 ;; TODO: Patch out the tests that use getprotobyname, etc
11073 ;; instead of disabling all the tests from these files.
11074 "test__all__.py"
11075 "test___config.py"
11076 "test__execmodules.py")))
11077 (call-with-output-file "skipped_tests.txt"
11078 (lambda (port)
11079 (display (string-join disabled-tests "\n") port)))
11080 #t)))
11081 (replace 'check
11082 (lambda _
11083 ;; Make sure the build directory is on PYTHONPATH.
11084 (setenv "PYTHONPATH"
11085 (string-append
11086 (getenv "PYTHONPATH") ":"
11087 (getcwd) "/build/"
11088 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11089
11090 ;; Use the build daemons configured number of workers.
11091 (setenv "NWORKERS" (number->string (parallel-job-count)))
11092
11093 (invoke "python" "-m" "gevent.tests" "--config"
11094 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11095 (propagated-inputs
11096 `(("python-greenlet" ,python-greenlet)
11097 ("python-objgraph" ,python-objgraph)))
11098 (native-inputs
11099 `(("python-six" ,python-six)
11100
11101 ;; For tests.
11102 ("python-dnspython" ,python-dnspython)
11103 ("python-psutil" ,python-psutil)
11104 ("python-zope.event" ,python-zope-event)
11105 ("python-zope.interface" ,python-zope-interface)))
11106 (inputs
11107 `(("c-ares" ,c-ares)
11108 ("libev" ,libev)))
11109 (home-page "http://www.gevent.org/")
11110 (synopsis "Coroutine-based network library")
11111 (description
11112 "gevent is a coroutine-based Python networking library that uses greenlet
11113 to provide a high-level synchronous API on top of the libev event loop.")
11114 (license license:expat)
11115 (properties `((python2-variant . ,(delay python2-gevent))))))
11116
11117 (define-public python2-gevent
11118 (let ((base (package-with-python2
11119 (strip-python2-variant python-gevent))))
11120 (package
11121 (inherit base)
11122 (native-inputs `(,@(package-native-inputs base)
11123 ("python-mock" ,python2-mock))))))
11124
11125 (define-public python-fastimport
11126 (package
11127 (name "python-fastimport")
11128 (version "0.9.6")
11129 (source
11130 (origin
11131 (method url-fetch)
11132 (uri (pypi-uri "fastimport" version))
11133 (sha256
11134 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11135 (build-system python-build-system)
11136 (home-page "https://github.com/jelmer/python-fastimport")
11137 (synopsis "VCS fastimport parser and generator in Python")
11138 (description "This package provides a parser for and generator of the Git
11139 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11140 format.")
11141 (license license:gpl2+)))
11142
11143 (define-public python2-fastimport
11144 (package-with-python2 python-fastimport))
11145
11146 (define-public python-twisted
11147 (package
11148 (name "python-twisted")
11149 (version "19.7.0")
11150 (source (origin
11151 (method url-fetch)
11152 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11153 (sha256
11154 (base32
11155 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11156 (build-system python-build-system)
11157 (arguments
11158 '(#:tests? #f)) ; FIXME: some tests fail
11159 (propagated-inputs
11160 `(("python-zope-interface" ,python-zope-interface)
11161 ("python-pyhamcrest" ,python-pyhamcrest)
11162 ("python-incremental" ,python-incremental)
11163 ("python-hyperlink" ,python-hyperlink)
11164 ("python-constantly" ,python-constantly)
11165 ("python-automat" ,python-automat)))
11166 (home-page "https://twistedmatrix.com/")
11167 (synopsis "Asynchronous networking framework written in Python")
11168 (description
11169 "Twisted is an extensible framework for Python programming, with special
11170 focus on event-based network programming and multiprotocol integration.")
11171 (license license:expat)))
11172
11173 (define-public python2-twisted
11174 (package-with-python2 python-twisted))
11175
11176 (define-public python-pika
11177 (package
11178 (name "python-pika")
11179 (version "0.12.0")
11180 (source
11181 (origin
11182 (method url-fetch)
11183 (uri (pypi-uri "pika" version))
11184 (sha256
11185 (base32
11186 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11187 (build-system python-build-system)
11188 (native-inputs
11189 `(("python-pyev" ,python-pyev)
11190 ("python-tornado" ,python-tornado)
11191 ("python-twisted" ,python-twisted)))
11192 (home-page "https://pika.readthedocs.org")
11193 (synopsis "Pure Python AMQP Client Library")
11194 (description
11195 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11196 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11197 network support library.")
11198 (license license:bsd-3)))
11199
11200 (define-public python2-pika
11201 (package-with-python2 python-pika))
11202
11203 (define-public python-ply
11204 (package
11205 (name "python-ply")
11206 (version "3.10")
11207 (source
11208 (origin
11209 (method url-fetch)
11210 (uri (pypi-uri "ply" version))
11211 (sha256
11212 (base32
11213 "1jxsr1d2f732r6ljhvm827113dckwl6qwakfvpbdhcbhvpvlmscn"))))
11214 (build-system python-build-system)
11215 (home-page "http://www.dabeaz.com/ply/")
11216 (synopsis "Python Lex & Yacc")
11217 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11218 It uses LR parsing and does extensive error checking.")
11219 (license license:bsd-3)))
11220
11221 (define-public python2-ply
11222 (package-with-python2 python-ply))
11223
11224 (define-public python-tabulate
11225 (package
11226 (name "python-tabulate")
11227 (version "0.7.7")
11228 (source (origin
11229 (method url-fetch)
11230 (uri (pypi-uri "tabulate" version))
11231 (sha256
11232 (base32
11233 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11234 (build-system python-build-system)
11235 (arguments
11236 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11237 ;; and the latest release is not tagged in the upstream repository.
11238 '(#:tests? #f))
11239 (home-page "https://bitbucket.org/astanin/python-tabulate")
11240 (synopsis "Pretty-print tabular data")
11241 (description
11242 "Tabulate is a library and command-line utility to pretty-print tabular
11243 data in Python.")
11244 (license license:expat)))
11245
11246 (define-public python2-tabulate
11247 (package-with-python2 python-tabulate))
11248
11249 (define-public python-kazoo
11250 (package
11251 (name "python-kazoo")
11252 (version "2.4.0")
11253 (source
11254 (origin
11255 (method url-fetch)
11256 (uri (pypi-uri "kazoo" version))
11257 (sha256
11258 (base32
11259 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11260 (build-system python-build-system)
11261 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11262 (propagated-inputs
11263 `(("python-six" ,python-six)))
11264 (home-page "https://kazoo.readthedocs.org")
11265 (synopsis "High-level Zookeeper client library")
11266 (description
11267 "Kazoo is a Python client library for the Apache Zookeeper distributed
11268 application service. It is designed to be easy to use and to avoid common
11269 programming errors.")
11270 (license license:asl2.0)))
11271
11272 (define-public python2-kazoo
11273 (package-with-python2 python-kazoo))
11274
11275 (define-public python-pykafka
11276 (package
11277 (name "python-pykafka")
11278 (version "2.4.0")
11279 (source (origin
11280 (method url-fetch)
11281 (uri (pypi-uri "pykafka" version))
11282 (sha256
11283 (base32
11284 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11285 (build-system python-build-system)
11286 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11287 (propagated-inputs
11288 `(("python-gevent" ,python-gevent)
11289 ("python-kazoo" ,python-kazoo)
11290 ("python-tabulate" ,python-tabulate)))
11291 (inputs
11292 `(("librdkafka" ,librdkafka)))
11293 (home-page "https://pykafka.readthedocs.io/")
11294 (synopsis "Apache Kafka client for Python")
11295 (description
11296 "PyKafka is a client for the Apache Kafka distributed messaging system.
11297 It includes Python implementations of Kafka producers and consumers, which
11298 are optionally backed by a C extension built on librdkafka.")
11299 (license license:asl2.0)))
11300
11301 (define-public python2-pykafka
11302 (package-with-python2 python-pykafka))
11303
11304 (define-public python-wcwidth
11305 (package
11306 (name "python-wcwidth")
11307 (version "0.1.8")
11308 (source (origin
11309 (method url-fetch)
11310 (uri (pypi-uri "wcwidth" version))
11311 (sha256
11312 (base32
11313 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11314 (build-system python-build-system)
11315 (home-page "https://github.com/jquast/wcwidth")
11316 (synopsis "Measure number of terminal column cells of wide-character codes")
11317 (description "Wcwidth measures the number of terminal column cells of
11318 wide-character codes. It is useful for those implementing a terminal emulator,
11319 or programs that carefully produce output to be interpreted by one. It is a
11320 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11321 specified in POSIX.1-2001 and POSIX.1-2008.")
11322 (license license:expat)))
11323
11324 (define-public python2-wcwidth
11325 (package-with-python2 python-wcwidth))
11326
11327 (define-public python2-jsonrpclib
11328 (package
11329 (name "python2-jsonrpclib")
11330 (version "0.1.7")
11331 (source (origin
11332 (method url-fetch)
11333 (uri (pypi-uri "jsonrpclib" version))
11334 (sha256
11335 (base32
11336 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11337 (build-system python-build-system)
11338 (arguments
11339 `(#:tests? #f
11340 #:python ,python-2))
11341 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11342 (synopsis "Implementation of JSON-RPC specification for Python")
11343 (description
11344 "This library is an implementation of the JSON-RPC specification.
11345 It supports both the original 1.0 specification, as well as the
11346 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11347 etc.")
11348 (license license:asl2.0)))
11349
11350 (define-public python-chai
11351 (package
11352 (name "python-chai")
11353 (version "1.1.2")
11354 (source (origin
11355 (method url-fetch)
11356 (uri (pypi-uri "chai" version))
11357 (sha256
11358 (base32
11359 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11360 (build-system python-build-system)
11361 (home-page "https://github.com/agoragames/chai")
11362 (synopsis "Mocking framework for Python")
11363 (description
11364 "Chai provides an api for mocking, stubbing and spying your python
11365 objects, patterned after the Mocha library for Ruby.")
11366 (license license:bsd-3)))
11367
11368 (define-public python2-chai
11369 (package-with-python2 python-chai))
11370
11371 (define-public python-inflection
11372 (package
11373 (name "python-inflection")
11374 (version "0.3.1")
11375 (source
11376 (origin (method url-fetch)
11377 (uri (pypi-uri "inflection" version))
11378 (sha256
11379 (base32
11380 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11381 (build-system python-build-system)
11382 (native-inputs
11383 `(("python-pytest" ,python-pytest)))
11384 (home-page "https://github.com/jpvanhal/inflection")
11385 (synopsis "Python string transformation library")
11386 (description
11387 "Inflection is a string transformation library. It singularizes
11388 and pluralizes English words, and transforms strings from CamelCase to
11389 underscored string.")
11390 (license license:expat)))
11391
11392 (define-public python2-inflection
11393 (package-with-python2 python-inflection))
11394
11395 (define-public python-pylev
11396 (package
11397 (name "python-pylev")
11398 (version "1.3.0")
11399 (source (origin
11400 (method url-fetch)
11401 (uri (pypi-uri "pylev" version))
11402 (sha256
11403 (base32
11404 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11405 (build-system python-build-system)
11406 (home-page "https://github.com/toastdriven/pylev")
11407 (synopsis "Levenshtein distance implementation in Python")
11408 (description "Pure Python Levenshtein implementation, based off the
11409 Wikipedia code samples at
11410 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11411 (license license:bsd-3)))
11412
11413 (define-public python2-pylev
11414 (package-with-python2 python-pylev))
11415
11416 (define-public python-cleo
11417 (package
11418 (name "python-cleo")
11419 (version "0.7.6")
11420 (source (origin
11421 (method url-fetch)
11422 (uri (pypi-uri "cleo" version))
11423 (sha256
11424 (base32
11425 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11426 (build-system python-build-system)
11427 (native-inputs
11428 `( ;; For testing
11429 ("python-mock" ,python-mock)
11430 ("python-pytest-mock" ,python-pytest-mock)
11431 ("python-pytest" ,python-pytest)))
11432 (propagated-inputs
11433 `(("python-backpack" ,python-backpack)
11434 ("python-clikit" ,python-clikit)
11435 ("python-pastel" ,python-pastel)
11436 ("python-pylev" ,python-pylev)))
11437 (home-page "https://github.com/sdispater/cleo")
11438 (synopsis "Command-line arguments library for Python")
11439 (description
11440 "Cleo allows you to create command-line commands with signature in
11441 docstring and colored output.")
11442 (license license:expat)))
11443
11444 (define-public python2-cleo
11445 (package-with-python2 python-cleo))
11446
11447 (define-public python-tomlkit
11448 (package
11449 (name "python-tomlkit")
11450 (version "0.5.11")
11451 (source
11452 (origin
11453 (method url-fetch)
11454 (uri (pypi-uri "tomlkit" version))
11455 (sha256
11456 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11457 (build-system python-build-system)
11458 (native-inputs
11459 `(("python-pytest" ,python-pytest)))
11460 (home-page "https://github.com/sdispater/tomlkit")
11461 (synopsis "Style-preserving TOML library")
11462 (description
11463 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11464 preserves all comments, indentations, whitespace and internal element ordering,
11465 and makes them accessible and editable via an intuitive API. It can also
11466 create new TOML documents from scratch using the provided helpers. Part of the
11467 implementation has been adapted, improved, and fixed from Molten.")
11468 (license license:expat)))
11469
11470 (define-public python-shellingham
11471 (package
11472 (name "python-shellingham")
11473 (version "1.3.1")
11474 (source
11475 (origin
11476 (method url-fetch)
11477 (uri (pypi-uri "shellingham" version))
11478 (sha256
11479 (base32
11480 "1q7kws7w4x2hji3g7y0ni9ddk4sd676ylrb3db54gbpys6xj6nwq"))))
11481 (build-system python-build-system)
11482 (home-page
11483 "https://github.com/sarugaku/shellingham")
11484 (synopsis "Tool to detect surrounding shell")
11485 (description
11486 "Shellingham detects what shell the current Python executable is
11487 running in.")
11488 (license license:isc)))
11489
11490 (define-public python-memcached
11491 (package
11492 (name "python-memcached")
11493 (version "1.59")
11494 (source
11495 (origin
11496 (method url-fetch)
11497 (uri (pypi-uri "python-memcached" version))
11498 (sha256
11499 (base32
11500 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))))
11501 (build-system python-build-system)
11502 (propagated-inputs `(("python-six" ,python-six)))
11503 (home-page
11504 "https://github.com/linsomniac/python-memcached")
11505 (synopsis "Pure python memcached client")
11506 (description
11507 "This software is a pure Python interface to the memcached memory cache
11508 daemon. It is the client side software which allows storing values in one or
11509 more, possibly remote, memcached servers.")
11510 (license license:psfl)))
11511
11512 (define-public python-clikit
11513 (package
11514 (name "python-clikit")
11515 (version "0.4.2")
11516 (source
11517 (origin
11518 (method url-fetch)
11519 (uri (pypi-uri "clikit" version))
11520 (sha256
11521 (base32
11522 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11523 (build-system python-build-system)
11524 (propagated-inputs
11525 `(("python-pastel" ,python-pastel)
11526 ("python-pylev" ,python-pylev)))
11527 (home-page "https://github.com/sdispater/clikit")
11528 (synopsis "Group of utilities to build command line interfaces")
11529 (description
11530 "CliKit is a group of utilities to build testable command line
11531 interfaces.")
11532 (properties `((python2-variant . ,(delay python2-clikit))))
11533 (license license:expat)))
11534
11535 (define-public python2-clikit
11536 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11537 (package/inherit
11538 base
11539 (propagated-inputs
11540 `(("python-enum34" ,python2-enum34)
11541 ("python-typing" ,python2-typing)
11542 ,@(package-propagated-inputs base))))))
11543
11544 (define-public python-msgpack-python
11545 (package
11546 (name "python-msgpack-python")
11547 (version "0.5.6")
11548 (source
11549 (origin
11550 (method url-fetch)
11551 (uri (pypi-uri "msgpack-python" version))
11552 (sha256
11553 (base32
11554 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11555 (build-system python-build-system)
11556 (home-page "http://msgpack.org/")
11557 (synopsis "Package to deserialize messages in MessagePack binary format")
11558 (description
11559 "MessagePack is an efficient binary serialization format. It lets you
11560 exchange data among multiple languages like JSON. But it's faster and
11561 smaller. Small integers are encoded into a single byte, and typical short
11562 strings require only one extra byte in addition to the strings themselves.")
11563 (license license:asl2.0)))
11564
11565 (define-public python-cachy
11566 (package
11567 (name "python-cachy")
11568 (version "0.3.0")
11569 (source
11570 (origin
11571 (method url-fetch)
11572 (uri (pypi-uri "cachy" version))
11573 (sha256
11574 (base32
11575 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11576 (build-system python-build-system)
11577 (arguments
11578 '(#:phases
11579 (modify-phases %standard-phases
11580 (replace 'check
11581 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11582 "pytest"))))))
11583 (native-inputs
11584 `(("memcached" ,memcached)
11585 ("python-fakeredis" ,python-fakeredis)
11586 ("python-flexmock" ,python-flexmock)
11587 ("python-pifpaf" ,python-pifpaf)
11588 ("python-pytest" ,python-pytest)))
11589 (propagated-inputs
11590 `(("python-memcached" ,python-memcached)
11591 ("python-msgpack-python" ,python-msgpack-python)
11592 ("python-redis" ,python-redis)))
11593 (home-page "https://github.com/sdispater/cachy")
11594 (synopsis "Simple yet effective caching library")
11595 (description
11596 "Cachy provides a simple yet effective caching library. A simple but
11597 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11598 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11599 (license license:expat)))
11600
11601 (define-public poetry
11602 (package
11603 (name "poetry")
11604 (version "1.0.5")
11605 ;; Poetry can only be built from source with Poetry.
11606 (source
11607 (origin
11608 (method url-fetch)
11609 (uri (pypi-uri "poetry" version))
11610 (sha256
11611 (base32
11612 "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf"))))
11613 (build-system python-build-system)
11614 (arguments
11615 `(#:tests? #f ;; Pypi does not have tests.
11616 #:phases
11617 (modify-phases %standard-phases
11618 (add-before 'build 'patch-setup-py
11619 (lambda _
11620 (substitute* "setup.py"
11621 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11622 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11623 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0")
11624 (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0"))
11625 #t)))))
11626 (propagated-inputs
11627 `(("python-cachecontrol" ,python-cachecontrol)
11628 ("python-cachy" ,python-cachy)
11629 ("python-cleo" ,python-cleo)
11630 ("python-clikit" ,python-clikit)
11631 ("python-html5lib" ,python-html5lib)
11632 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
11633 ("python-jsonschema" ,python-jsonschema)
11634 ("python-keyring" ,python-keyring)
11635 ("python-pexpect" ,python-pexpect)
11636 ("python-pkginfo" ,python-pkginfo)
11637 ("python-pyparsing" ,python-pyparsing)
11638 ("python-pyrsistent" ,python-pyrsistent)
11639 ("python-requests" ,python-requests)
11640 ("python-requests-toolbelt" ,python-requests-toolbelt)
11641 ("python-shellingham" ,python-shellingham)
11642 ("python-tomlkit" ,python-tomlkit)
11643 ("python-virtualenv" ,python-virtualenv)))
11644 (home-page "https://python-poetry.org")
11645 (synopsis "Python dependency management and packaging made easy")
11646 (description "Poetry is a tool for dependency management and packaging
11647 in Python. It allows you to declare the libraries your project depends on and
11648 it will manage (install/update) them for you.")
11649 (license license:expat)))
11650
11651 (define-public python-lazy-object-proxy
11652 (package
11653 (name "python-lazy-object-proxy")
11654 (version "1.4.3")
11655 (source (origin
11656 (method url-fetch)
11657 (uri (pypi-uri "lazy-object-proxy" version))
11658 (sha256
11659 (base32
11660 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11661 (native-inputs
11662 `(("python-setuptools-scm" ,python-setuptools-scm-3.3)))
11663 (build-system python-build-system)
11664 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11665 (synopsis "Lazy object proxy for python")
11666 (description
11667 "Lazy object proxy is an object that wraps a callable but defers the call
11668 until the object is actually required, and caches the result of said call.")
11669 (license license:bsd-2)))
11670
11671 (define-public python2-lazy-object-proxy
11672 (package-with-python2 python-lazy-object-proxy))
11673
11674 (define-public python-dnspython
11675 (package
11676 (name "python-dnspython")
11677 (version "1.16.0")
11678 (source (origin
11679 (method url-fetch)
11680 (uri (string-append "http://www.dnspython.org/kits/"
11681 version "/dnspython-" version ".tar.gz"))
11682 (sha256
11683 (base32
11684 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11685 (build-system python-build-system)
11686 (arguments '(#:tests? #f)) ; XXX: requires internet access
11687 (home-page "http://www.dnspython.org")
11688 (synopsis "DNS toolkit for Python")
11689 (description
11690 "dnspython is a DNS toolkit for Python. It supports almost all record
11691 types. It can be used for queries, zone transfers, and dynamic updates.
11692 It supports TSIG authenticated messages and EDNS0.")
11693 (license license:expat)))
11694
11695 (define-public python2-dnspython
11696 (package-with-python2 python-dnspython))
11697
11698 (define-public python-email-validator
11699 (package
11700 (name "python-email-validator")
11701 (version "1.0.2")
11702 (source
11703 (origin (method url-fetch)
11704 (uri (pypi-uri "email_validator" version))
11705 (sha256
11706 (base32
11707 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11708 (build-system python-build-system)
11709 (arguments
11710 '(#:phases
11711 (modify-phases %standard-phases
11712 (add-before 'build 'use-dnspython
11713 (lambda _
11714 (substitute* "setup.py"
11715 (("dnspython3") "dnspython"))
11716 #t)))))
11717 (propagated-inputs
11718 `(("python-dnspython" ,python-dnspython)
11719 ("python-idna" ,python-idna)))
11720 (home-page "https://github.com/JoshData/python-email-validator")
11721 (synopsis "Email address validation library for Python")
11722 (description
11723 "This library validates email address syntax and deliverability.")
11724 (license license:cc0)))
11725
11726 (define-public python2-email-validator
11727 (package-with-python2 python-email-validator))
11728
11729 (define-public python-ukpostcodeparser
11730 (package
11731 (name "python-ukpostcodeparser")
11732 (version "1.0.3")
11733 (source (origin
11734 (method url-fetch)
11735 (uri (pypi-uri "UkPostcodeParser" version))
11736 (sha256
11737 (base32
11738 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
11739 (build-system python-build-system)
11740 (home-page "https://github.com/hamstah/ukpostcodeparser")
11741 (synopsis "UK Postcode parser for Python")
11742 (description
11743 "This library provides the @code{parse_uk_postcode} function for
11744 parsing UK postcodes.")
11745 (license license:expat)))
11746
11747 (define-public python2-ukpostcodeparser
11748 (package-with-python2 python-ukpostcodeparser))
11749
11750 (define-public python-faker
11751 (package
11752 (name "python-faker")
11753 (version "4.0.2")
11754 (source (origin
11755 (method url-fetch)
11756 (uri (pypi-uri "Faker" version))
11757 (sha256
11758 (base32
11759 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
11760 (build-system python-build-system)
11761 (arguments
11762 '(#:phases
11763 (modify-phases %standard-phases
11764 (replace 'check
11765 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
11766 (native-inputs
11767 `(;; For testing
11768 ("python-freezegun" ,python-freezegun)
11769 ("python-pytest" ,python-pytest)
11770 ("python-random2" ,python-random2)
11771 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
11772 ("python-validators" ,python-validators)))
11773 (propagated-inputs
11774 `(("python-dateutil" ,python-dateutil)
11775 ("python-text-unidecode" ,python-text-unidecode)))
11776 (home-page "https://github.com/joke2k/faker")
11777 (synopsis "Python package that generates fake data")
11778 (description
11779 "Faker is a Python package that generates fake data such as names,
11780 addresses, and phone numbers.")
11781 (license license:expat)
11782 (properties `((python2-variant . ,(delay python2-faker))))))
11783
11784 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
11785 (define-public python2-faker
11786 (let ((base (package-with-python2 (strip-python2-variant
11787 python-faker))))
11788 (package
11789 (inherit base)
11790 (version "3.0.1")
11791 (source (origin
11792 (method url-fetch)
11793 (uri (pypi-uri "Faker" version))
11794 (sha256
11795 (base32
11796 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
11797 (native-inputs
11798 `(("python-mock" ,python2-mock)
11799 ,@(package-native-inputs base)))
11800 (propagated-inputs
11801 `(("python2-ipaddress" ,python2-ipaddress)
11802 ("python2-six" ,python2-six)
11803 ,@(package-propagated-inputs base))))))
11804
11805 (define-public python-pyaml
11806 (package
11807 (name "python-pyaml")
11808 (version "18.11.0")
11809 (source (origin
11810 (method url-fetch)
11811 (uri (pypi-uri "pyaml" version))
11812 (sha256
11813 (base32
11814 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
11815 (build-system python-build-system)
11816 (native-inputs
11817 `(("python-unidecode" ,python-unidecode)))
11818 (propagated-inputs
11819 `(("python-pyyaml" ,python-pyyaml)))
11820 (home-page "https://github.com/mk-fg/pretty-yaml")
11821 (synopsis "YAML pretty-print library for Python")
11822 (description
11823 "pyaml is a PyYAML based python module to produce pretty and readable
11824 YAML-serialized data.")
11825 (license license:wtfpl2)))
11826
11827 (define-public python2-pyaml
11828 (package-with-python2 python-pyaml))
11829
11830 (define-public python-backpack
11831 (package
11832 (name "python-backpack")
11833 (version "0.1")
11834 (source
11835 (origin
11836 (method url-fetch)
11837 (uri (pypi-uri "backpack" version))
11838 (sha256
11839 (base32
11840 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
11841 (build-system python-build-system)
11842 (native-inputs
11843 `(("python-pytest" ,python-pytest)
11844 ("python-nose" ,python-nose)))
11845 (propagated-inputs
11846 `(("python-simplejson" ,python-simplejson)))
11847 (home-page "https://github.com/sdispater/backpack")
11848 (synopsis "Utilities for working with Python collections")
11849 (description "Backpack provides some useful utilities for working with
11850 collections of data.")
11851 (license license:expat)))
11852
11853 (define-public python2-backpack
11854 (package-with-python2 python-backpack))
11855
11856 (define-public python-prompt-toolkit
11857 (package
11858 (name "python-prompt-toolkit")
11859 (version "2.0.7")
11860 (source
11861 (origin
11862 (method url-fetch)
11863 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11864 (sha256
11865 (base32
11866 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
11867 (build-system python-build-system)
11868 (arguments
11869 `(#:phases
11870 (modify-phases %standard-phases
11871 (delete 'check)
11872 (add-after 'install 'post-install-check
11873 (lambda* (#:key inputs outputs #:allow-other-keys)
11874 ;; HOME is needed for the test
11875 ;; "test_pathcompleter_can_expanduser".
11876 (setenv "HOME" "/tmp")
11877 (add-installed-pythonpath inputs outputs)
11878 (invoke "py.test"))))))
11879 (propagated-inputs
11880 `(("python-wcwidth" ,python-wcwidth)
11881 ("python-six" ,python-six)
11882 ("python-pygments" ,python-pygments)))
11883 (native-inputs
11884 `(("python-pytest" ,python-pytest)))
11885 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
11886 (synopsis "Library for building command line interfaces in Python")
11887 (description
11888 "Prompt-Toolkit is a library for building interactive command line
11889 interfaces in Python. It's like GNU Readline but it also features syntax
11890 highlighting while typing, out-of-the-box multi-line input editing, advanced
11891 code completion, incremental search, support for Chinese double-width
11892 characters, mouse support, and auto suggestions.")
11893 (license license:bsd-3)))
11894
11895 (define-public python2-prompt-toolkit
11896 (package-with-python2 python-prompt-toolkit))
11897
11898 (define-public python-prompt-toolkit-1
11899 (package (inherit python-prompt-toolkit)
11900 (version "1.0.15")
11901 (source
11902 (origin
11903 (method url-fetch)
11904 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11905 (sha256
11906 (base32
11907 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
11908
11909 (define-public python2-prompt-toolkit-1
11910 (package-with-python2 python-prompt-toolkit-1))
11911
11912 (define-public python-jedi
11913 (package
11914 (name "python-jedi")
11915 (version "0.16.0")
11916 (source
11917 (origin
11918 (method url-fetch)
11919 (uri (pypi-uri "jedi" version))
11920 (patches (search-patches "python-jedi-deleted-variables.patch"))
11921 (sha256
11922 (base32
11923 "1mb5kmrk9bkc3kwzx02j62cdan1jqd92q1z7h7wi9d30jg5p3j6m"))))
11924 (build-system python-build-system)
11925 (arguments
11926 `(#:phases
11927 (modify-phases %standard-phases
11928 (replace 'check
11929 (lambda _
11930 (setenv "HOME" "/tmp")
11931 (invoke "python" "-m" "pytest"))))))
11932 (native-inputs
11933 `(("python-pytest" ,python-pytest)
11934 ("python-docopt" ,python-docopt)))
11935 (propagated-inputs
11936 `(("python-parso" ,python-parso)))
11937 (home-page "https://github.com/davidhalter/jedi")
11938 (synopsis "Autocompletion and static analysis library for Python")
11939 (description
11940 "Jedi is a static analysis tool for Python that can be used in Integrated
11941 Development Environments (@dfn{IDE}s) and text editors. It understands Python
11942 on a deeper level than many other static analysis frameworks for Python.
11943
11944 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
11945 well.")
11946 (license license:expat)))
11947
11948 (define-public python2-jedi
11949 (package-with-python2 python-jedi))
11950
11951 ;; python-language-server requires 0.15 specifically. Remove once unused.
11952 (define-public python-jedi-0.15
11953 (package
11954 (inherit python-jedi)
11955 (version "0.15.2")
11956 (source (origin
11957 (method url-fetch)
11958 (uri (pypi-uri "jedi" version))
11959 (sha256
11960 (base32
11961 "01zqasl690x1i6dq4mvh13pz0cw8i276xsivsrnn00x90iqm42g9"))))
11962 (propagated-inputs
11963 `(("python-parso" ,python-parso-0.5)))))
11964
11965 (define-public ptpython
11966 (package
11967 (name "ptpython")
11968 (version "0.34")
11969 (source (origin
11970 (method url-fetch)
11971 (uri (pypi-uri "ptpython" version))
11972 (sha256
11973 (base32
11974 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
11975 (build-system python-build-system)
11976 (arguments
11977 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
11978 (propagated-inputs
11979 `(("python-docopt" ,python-docopt)
11980 ("python-jedi" ,python-jedi)
11981 ("python-prompt-toolkit" ,python-prompt-toolkit)
11982 ("python-pygments" ,python-pygments)))
11983 (home-page "https://github.com/jonathanslenders/ptpython")
11984 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
11985 (description
11986 "ptpython is a Python read-eval-print loop with IDE-like features.
11987 It supports syntax highlighting, multiline editing, autocompletion, mouse,
11988 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
11989 etc.")
11990 (license license:bsd-3)
11991 (properties `((python2-variant . ,(delay ptpython-2))))))
11992
11993 (define-public ptpython-2
11994 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
11995 (package
11996 (inherit base)
11997 (name "ptpython2"))))
11998
11999 (define-public python-stem
12000 (package
12001 (name "python-stem")
12002 (version "1.8.0")
12003 (source
12004 (origin
12005 (method url-fetch)
12006 (uri (pypi-uri "stem" version))
12007 (sha256
12008 (base32
12009 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12010 (build-system python-build-system)
12011 (arguments
12012 `(#:phases
12013 (modify-phases %standard-phases
12014 (replace 'check
12015 (lambda _
12016 (invoke "./run_tests.py" "--unit")
12017 #t)))))
12018 (native-inputs
12019 `(("python-mock" ,python-mock)
12020 ("python-pycodestyle" ,python-pycodestyle)
12021 ("python-pyflakes" ,python-pyflakes)))
12022 (home-page "https://stem.torproject.org/")
12023 (synopsis
12024 "Python controller library that allows applications to interact with Tor")
12025 (description
12026 "Stem is a Python controller library for Tor. With it you can use Tor's
12027 control protocol to script against the Tor process and read descriptor data
12028 relays publish about themselves.")
12029 (license license:lgpl3)))
12030
12031 (define-public python2-stem
12032 (package-with-python2 python-stem))
12033
12034 (define-public python-pyserial
12035 (package
12036 (name "python-pyserial")
12037 (version "3.4")
12038 (source
12039 (origin
12040 (method url-fetch)
12041 (uri (pypi-uri "pyserial" version))
12042 (sha256
12043 (base32
12044 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12045 (build-system python-build-system)
12046 (arguments
12047 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12048 ;; #:phases
12049 ;; (modify-phases %standard-phases
12050 ;; (replace 'check
12051 ;; (lambda _
12052 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12053 (home-page
12054 "https://github.com/pyserial/pyserial")
12055 (synopsis "Python Serial Port Bindings")
12056 (description "@code{pyserial} provide serial port bindings for Python. It
12057 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12058 and/or Xon/Xoff. The port is accessed in RAW mode.")
12059 (license license:bsd-3)))
12060
12061 (define-public python2-pyserial
12062 (package-with-python2 python-pyserial))
12063
12064 (define-public python-kivy
12065 (package
12066 (name "python-kivy")
12067 (version "1.10.1")
12068 (source
12069 (origin
12070 (method url-fetch)
12071 (uri (pypi-uri "Kivy" version))
12072 (file-name (string-append name "-" version ".tar.gz"))
12073 (sha256
12074 (base32
12075 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12076 (build-system python-build-system)
12077 (arguments
12078 `(#:tests? #f ; Tests require many optional packages
12079 #:phases
12080 (modify-phases %standard-phases
12081 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12082 (lambda* (#:key inputs #:allow-other-keys)
12083 (setenv "KIVY_SDL2_PATH"
12084 (string-append (assoc-ref inputs "sdl-union")
12085 "/include/SDL2"))
12086 #t)))))
12087 (native-inputs
12088 `(("pkg-config" ,pkg-config)
12089 ("python-cython" ,python-cython)))
12090 (inputs
12091 `(("gstreamer" ,gstreamer)
12092 ("mesa" ,mesa)
12093 ("sdl-union"
12094 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12095 (home-page "https://kivy.org")
12096 (synopsis
12097 "Multitouch application framework")
12098 (description
12099 "A software library for rapid development of
12100 hardware-accelerated multitouch applications.")
12101 (license license:expat)))
12102
12103 (define-public python2-kivy
12104 (package-with-python2 python-kivy))
12105
12106 (define-public python-binaryornot
12107 (package
12108 (name "python-binaryornot")
12109 (version "0.4.4")
12110 (source (origin
12111 (method url-fetch)
12112 (uri (pypi-uri "binaryornot" version))
12113 (sha256
12114 (base32
12115 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12116 (build-system python-build-system)
12117 (arguments
12118 `(#:phases
12119 (modify-phases %standard-phases
12120 (add-after 'unpack 'patch-tests
12121 (lambda _
12122 ;; TypeError: binary() got an unexpected keyword argument
12123 ;; 'average_size'.
12124 (substitute* "tests/test_check.py"
12125 (("average_size=512") ""))
12126 #t)))))
12127 (propagated-inputs
12128 `(("python-chardet" ,python-chardet)
12129 ("python-hypothesis" ,python-hypothesis)))
12130 (home-page "https://github.com/audreyr/binaryornot")
12131 (synopsis "Package to check if a file is binary or text")
12132 (description "Ultra-lightweight pure Python package to check if a file is
12133 binary or text.")
12134 (license license:bsd-3)
12135 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12136
12137 (define-public python2-binaryornot
12138 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12139 (package (inherit base)
12140 (propagated-inputs
12141 `(("python2-enum34" ,python2-enum34)
12142 ,@(package-propagated-inputs base))))))
12143
12144 (define-public python-binwalk
12145 (package
12146 (name "python-binwalk")
12147 (version "2.2.0")
12148 (source
12149 (origin
12150 (method git-fetch)
12151 (uri (git-reference
12152 (url "https://github.com/ReFirmLabs/binwalk")
12153 (commit (string-append "v" version))))
12154 (file-name (git-file-name name version))
12155 (sha256
12156 (base32
12157 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12158 (build-system python-build-system)
12159 (arguments
12160 `(#:phases
12161 (modify-phases %standard-phases
12162 (add-before 'check 'set-pythonpath
12163 (lambda _
12164 (setenv "PYTHONPATH"
12165 (string-append
12166 (getcwd) "/src/"
12167 ":" (getenv "PYTHONPATH")))
12168 (setenv "HOME" "")
12169 #t)))))
12170 (native-inputs
12171 `(("python-coverage" ,python-coverage)
12172 ("python-nose" ,python-nose)))
12173 (home-page "https://github.com/ReFirmLabs/binwalk")
12174 (synopsis "Firmware analysis tool")
12175 (description "Binwalk is a tool for analyzing, reverse engineering, and
12176 extracting firmware images")
12177 (license license:expat)))
12178
12179 (define-public python-nltk
12180 (package
12181 (name "python-nltk")
12182 (version "3.2.1")
12183 (source (origin
12184 (method url-fetch)
12185 (uri (pypi-uri "nltk" version))
12186 (sha256
12187 (base32
12188 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12189 (build-system python-build-system)
12190 (arguments
12191 '(;; The tests require some extra resources to be downloaded.
12192 ;; TODO Try packaging these resources.
12193 #:tests? #f))
12194 (home-page "http://nltk.org/")
12195 (synopsis "Natural Language Toolkit")
12196 (description "It provides interfaces to over 50 corpora and lexical
12197 resources such as WordNet, along with a suite of text processing libraries
12198 for classification, tokenization, stemming, tagging, parsing, and semantic
12199 reasoning, wrappers for natural language processing libraries.")
12200 (license license:asl2.0)))
12201
12202 (define-public python2-nltk
12203 (package-with-python2 python-nltk))
12204
12205 (define-public python-pymongo
12206 (package
12207 (name "python-pymongo")
12208 (version "3.7.2")
12209 (source (origin
12210 (method url-fetch)
12211 (uri (pypi-uri "pymongo" version))
12212 (sha256
12213 (base32
12214 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12215 (build-system python-build-system)
12216 (propagated-inputs
12217 `(("python-certifi" ,python-certifi)))
12218 (home-page "https://github.com/mongodb/mongo-python-driver")
12219 (synopsis "Python driver for MongoDB")
12220 (description "Python driver for MongoDB.")
12221 (license license:asl2.0)))
12222
12223 (define-public python2-pymongo
12224 (package-with-python2 python-pymongo))
12225
12226 (define-public python-consul
12227 (package
12228 (name "python-consul")
12229 (version "0.6.1")
12230 (source
12231 (origin
12232 (method url-fetch)
12233 (uri (pypi-uri "python-consul" version))
12234 (sha256
12235 (base32
12236 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12237 (build-system python-build-system)
12238 (arguments
12239 '(#:tests? #f)) ; The tests are not distributed
12240 (propagated-inputs
12241 `(("python-requests" ,python-requests)
12242 ("python-six" ,python-six)))
12243 (home-page "https://github.com/cablehead/python-consul")
12244 (synopsis "Python client for Consul")
12245 (description
12246 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12247 discovery, monitoring and configuration.")
12248 (license license:expat)))
12249
12250 (define-public python2-consul
12251 (package-with-python2 python-consul))
12252
12253 (define-public python-schematics
12254 (package
12255 (name "python-schematics")
12256 (version "1.1.1")
12257 (source
12258 (origin
12259 (method git-fetch)
12260 (uri (git-reference
12261 (url "https://github.com/schematics/schematics.git")
12262 (commit (string-append "v" version))))
12263 (file-name (git-file-name name version))
12264 (sha256
12265 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12266 (build-system python-build-system)
12267 (propagated-inputs
12268 `(("python-six" ,python-six)))
12269 (arguments
12270 ;; The tests require a bunch of not very nice packages with fixed
12271 ;; version requirements (e.g. python-coveralls).
12272 `(#:tests? #f))
12273 (home-page "https://github.com/schematics/schematics")
12274 (synopsis "Python Data Structures for Humans")
12275 (description "Python Data Structures for Humans.")
12276 (license license:bsd-3)))
12277
12278 (define-public python2-schematics
12279 (package-with-python2 python-schematics))
12280
12281 (define-public python-odfpy
12282 (package
12283 (name "python-odfpy")
12284 (version "1.3.3")
12285 (source (origin
12286 (method url-fetch)
12287 (uri (pypi-uri "odfpy" version))
12288 (sha256
12289 (base32
12290 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12291 (arguments
12292 `(#:modules ((srfi srfi-1)
12293 (guix build python-build-system)
12294 (guix build utils))
12295 #:phases
12296 (modify-phases %standard-phases
12297 (replace 'check
12298 ;; The test runner invokes python2 and python3 for test*.py.
12299 ;; To avoid having both in inputs, we replicate it here.
12300 (lambda _
12301 (for-each (lambda (test-file) (invoke "python" test-file))
12302 (find-files "tests" "^test.*\\.py$"))
12303 #t)))))
12304 (build-system python-build-system)
12305 (home-page "https://github.com/eea/odfpy")
12306 (synopsis "Python API and tools to manipulate OpenDocument files")
12307 (description "Collection of libraries and utility programs written in
12308 Python to manipulate OpenDocument 1.2 files.")
12309 (license
12310 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12311 ;; number of files with other licenses.
12312 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12313
12314 (define-public python2-odfpy
12315 (package-with-python2 python-odfpy))
12316
12317 (define-public python-natsort
12318 (package
12319 (name "python-natsort")
12320 (version "7.0.1")
12321 (source (origin
12322 (method url-fetch)
12323 (uri (pypi-uri "natsort" version))
12324 (sha256
12325 (base32
12326 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12327 (build-system python-build-system)
12328 (arguments
12329 `(#:modules ((guix build utils)
12330 (guix build python-build-system)
12331 (srfi srfi-1)
12332 (srfi srfi-26)
12333 (ice-9 ftw))
12334 #:phases
12335 (modify-phases %standard-phases
12336 (add-before 'check 'set-cachedir
12337 ;; Tests require write access to $HOME by default
12338 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12339 (replace 'check
12340 (lambda _
12341 (let ((cwd (getcwd)))
12342 (setenv "PYTHONPATH"
12343 (string-append
12344 cwd "/build/"
12345 (find (cut string-prefix? "lib" <>)
12346 (scandir (string-append cwd "/build")))
12347 ":"
12348 (getenv "PYTHONPATH")))
12349 (invoke "pytest" "-v")))))))
12350 (native-inputs
12351 `(("python-hypothesis" ,python-hypothesis)
12352 ("python-pytest-cov" ,python-pytest-cov)
12353 ("python-pytest-mock" ,python-pytest-mock)
12354 ("python-pytest" ,python-pytest)))
12355 (propagated-inputs ; TODO: Add python-fastnumbers.
12356 `(("python-pyicu" ,python-pyicu)))
12357 (home-page "https://github.com/SethMMorton/natsort")
12358 (synopsis "Natural sorting for python and shell")
12359 (description
12360 "Natsort lets you apply natural sorting on lists instead of
12361 lexicographical. If you use the built-in @code{sorted} method in python
12362 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12363 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12364 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12365 identifies numbers and sorts them separately from strings. It can also sort
12366 version numbers, real numbers, mixed types and more, and comes with a shell
12367 command @command{natsort} that exposes this functionality in the command line.")
12368 (license license:expat)
12369 (properties `((python2-variant . ,(delay python2-natsort))))))
12370
12371 ;; Natsort 6.x are the last versions with support for Python 2.
12372 (define-public python2-natsort
12373 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12374 (package (inherit base)
12375 (version "6.2.1")
12376 (source (origin
12377 (method url-fetch)
12378 (uri (pypi-uri "natsort" version))
12379 (sha256
12380 (base32
12381 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12382 (native-inputs
12383 `(("python2-pathlib" ,python2-pathlib)
12384 ,@(package-native-inputs base))))))
12385
12386 (define-public glances
12387 (package
12388 (name "glances")
12389 (version "3.1.4")
12390 (source
12391 (origin
12392 (method url-fetch)
12393 (uri (pypi-uri "Glances" version))
12394 (sha256
12395 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12396 (modules '((guix build utils)))
12397 (snippet
12398 '(begin
12399 ;; Glances phones PyPI for weekly update checks by default.
12400 ;; Disable these. The user can re-enable them if desired.
12401 (substitute* "glances/outdated.py"
12402 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12403 (string-append indentation
12404 "self.args.disable_check_update = True\n"
12405 line)))
12406 #t))))
12407 (build-system python-build-system)
12408 (propagated-inputs
12409 `(("python-future" ,python-future)
12410 ("python-psutil" ,python-psutil)))
12411 (home-page "https://github.com/nicolargo/glances")
12412 (synopsis "Cross-platform curses-based monitoring tool")
12413 (description
12414 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12415 Glances uses the PsUtil library to get information from your system. It
12416 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12417 (license license:lgpl3+)))
12418
12419 (define-public python-glances
12420 (deprecated-package "python-glances" glances))
12421
12422 (define-public python-graphql-core
12423 (package
12424 (name "python-graphql-core")
12425 (version "0.5.3")
12426 (source
12427 (origin
12428 (method url-fetch)
12429 (uri (pypi-uri "graphql-core" version))
12430 (sha256
12431 (base32
12432 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12433 (build-system python-build-system)
12434 (arguments
12435 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12436 #:phases
12437 (modify-phases %standard-phases
12438 (add-after 'unpack 'patch-hardcoded-version
12439 (lambda _ (substitute*
12440 "setup.py"
12441 (("'gevent==1.1rc1'") "'gevent'"))
12442 #t)))))
12443 (native-inputs
12444 `(("python-gevent" ,python-gevent)
12445 ("python-mock" ,python-mock)
12446 ("python-pytest-mock" ,python-pytest-mock)))
12447 (propagated-inputs
12448 `(("python-promise" ,python-promise)
12449 ("python-six" ,python-six)))
12450 (home-page "https://github.com/graphql-python/graphql-core")
12451 (synopsis "GraphQL implementation for Python")
12452 (description
12453 "GraphQL implementation for Python. GraphQL is a data query language and
12454 runtime designed and used to request and deliver data to mobile and web apps.
12455 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12456 to Python.")
12457 (license license:expat)))
12458
12459 (define-public python2-graphql-core
12460 (package-with-python2 python-graphql-core))
12461
12462 (define-public python-graphql-relay
12463 (package
12464 (name "python-graphql-relay")
12465 (version "0.4.5")
12466 (source
12467 (origin
12468 (method url-fetch)
12469 (uri (pypi-uri "graphql-relay" version))
12470 (sha256
12471 (base32
12472 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12473 (build-system python-build-system)
12474 (arguments
12475 '(#:tests? #f)) ; The tests are not distributed
12476 (propagated-inputs
12477 `(("python-graphql-core" ,python-graphql-core)
12478 ("python-promise" ,python-promise)
12479 ("python-six" ,python-six)))
12480 (home-page "https://github.com/graphql-python/graphql-relay-py")
12481 (synopsis "Relay implementation for Python")
12482 (description
12483 "This is a library to allow the easy creation of Relay-compliant servers
12484 using the GraphQL Python reference implementation of a GraphQL server. It
12485 should be noted that the code is a exact port of the original
12486 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12487 from Facebook.")
12488 (license license:expat)))
12489
12490 (define-public python2-graphql-relay
12491 (package-with-python2 python-graphql-relay))
12492
12493 (define-public python-graphene
12494 (package
12495 (name "python-graphene")
12496 (version "0.10.2")
12497 (source
12498 (origin
12499 (method url-fetch)
12500 (uri (pypi-uri "graphene" version))
12501 (sha256
12502 (base32
12503 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12504 (build-system python-build-system)
12505 (propagated-inputs
12506 `(("python-graphql-core" ,python-graphql-core)
12507 ("python-graphql-relay" ,python-graphql-relay)
12508 ("python-iso8601" ,python-iso8601)
12509 ("python-promise" ,python-promise)
12510 ("python-six" ,python-six)))
12511 (arguments
12512 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12513 (home-page "https://graphene-python.org/")
12514 (synopsis "GraphQL Framework for Python")
12515 (description
12516 "Graphene is a Python library for building GraphQL schemas/types.
12517 A GraphQL schema describes your data model, and provides a GraphQL server
12518 with an associated set of resolve methods that know how to fetch data.")
12519 (properties `((python2-variant . ,(delay python2-graphene))))
12520 (license license:expat)))
12521
12522 (define-public python2-graphene
12523 (let ((base (package-with-python2
12524 (strip-python2-variant python-graphene))))
12525 (package (inherit base)
12526 (native-inputs
12527 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12528 ,@(package-native-inputs base))))))
12529
12530 (define-public python-nautilus
12531 (package
12532 (name "python-nautilus")
12533 (version "0.4.9")
12534 (source
12535 (origin
12536 (method url-fetch)
12537 (uri (pypi-uri "nautilus" version))
12538 (sha256
12539 (base32
12540 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12541 (build-system python-build-system)
12542 (arguments `(#:tests? #f)) ; fails to import test modules
12543 (propagated-inputs
12544 `(("python-bcrypt" ,python-bcrypt)
12545 ("python-click" ,python-click)
12546 ("python-consul" ,python-consul)
12547 ("python-graphene" ,python-graphene)
12548 ("python-jinja2" ,python-jinja2)
12549 ("python-peewee" ,python-peewee)
12550 ("python-pika" ,python-pika)
12551 ("python-tornado" ,python-tornado)
12552 ("python-wtforms" ,python-wtforms)))
12553 (native-inputs
12554 `(("python-nose2" ,python-nose2)))
12555 (home-page "https://github.com/AlecAivazis/nautilus")
12556 (synopsis "Library for creating microservice applications")
12557 (description
12558 "Nautilus is a framework for flux based microservices that looks to
12559 provide extendible implementations of common aspects of a cloud so that you can
12560 focus on building massively scalable web applications.")
12561 (license license:expat)))
12562
12563 (define-public python-random2
12564 (package
12565 (name "python-random2")
12566 (version "1.0.1")
12567 (source (origin
12568 (method url-fetch)
12569 (uri (pypi-uri "random2" version ".zip"))
12570 (sha256
12571 (base32
12572 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12573 (build-system python-build-system)
12574 (native-inputs `(("unzip" ,unzip)))
12575 (home-page "http://pypi.python.org/pypi/random2")
12576 (synopsis "Python 3 version of the Python 2 @code{random} module")
12577 (description
12578 "This package provides a Python 3 ported version of Python 2.7’s
12579 @code{random} module. It has also been back-ported to work in Python 2.6.
12580
12581 In Python 3, the implementation of @code{randrange()} was changed, so that
12582 even with the same seed you get different sequences in Python 2 and 3.
12583
12584 This package closes that gap, allowing stable random number generation
12585 between the different Python versions.")
12586 (license license:psfl)))
12587
12588 (define-public python2-random2
12589 (package-with-python2 python-random2))
12590
12591 (define-public python-snowballstemmer
12592 (package
12593 (name "python-snowballstemmer")
12594 (version "2.0.0")
12595 (source (origin
12596 (method url-fetch)
12597 (uri (pypi-uri "snowballstemmer" version))
12598 (sha256
12599 (base32
12600 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12601 (build-system python-build-system)
12602 (arguments
12603 `(;; No tests exist
12604 #:tests? #f))
12605 (home-page "https://github.com/shibukawa/snowball_py")
12606 (synopsis "Snowball stemming library collection for Python")
12607 (description "This package provides 16 word stemmer algorithms generated
12608 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12609 English stemmer.")
12610 (license license:bsd-3)))
12611
12612 (define-public python2-snowballstemmer
12613 (package-with-python2 python-snowballstemmer))
12614
12615 (define-public python-setproctitle
12616 (package
12617 (name "python-setproctitle")
12618 (version "1.1.10")
12619 (source
12620 (origin
12621 (method url-fetch)
12622 (uri (pypi-uri "setproctitle" version))
12623 (sha256
12624 (base32
12625 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12626 (build-system python-build-system)
12627 (arguments
12628 '(#:phases
12629 (modify-phases %standard-phases
12630 (add-before 'check 'patch-Makefile
12631 ;; Stricly this is only required for the python2 variant.
12632 ;; But adding a phase in an inherited package seems to be
12633 ;; cumbersum. So we patch even for python3.
12634 (lambda _
12635 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12636 (when nose
12637 (substitute* "Makefile"
12638 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12639 (string-append nose "/bin/nosetests "))))
12640 #t)))
12641 (replace 'check
12642 (lambda _
12643 (setenv "PYTHON" (or (which "python3") (which "python")))
12644 (setenv "PYCONFIG" (or (which "python3-config")
12645 (which "python-config")))
12646 (setenv "CC" "gcc")
12647 ;; No need to extend PYTHONPATH to find the built package, since
12648 ;; the Makefile will build anyway
12649 (invoke "make" "check"))))))
12650 (native-inputs
12651 `(("procps" ,procps))) ; required for tests
12652 (home-page
12653 "https://github.com/dvarrazzo/py-setproctitle")
12654 (synopsis
12655 "Setproctitle implementation for Python to customize the process title")
12656 (description "The library allows a process to change its title (as displayed
12657 by system tools such as ps and top).
12658
12659 Changing the title is mostly useful in multi-process systems, for
12660 example when a master process is forked: changing the children's title
12661 allows identifying the task each process is busy with. The technique
12662 is used by PostgreSQL and the OpenSSH Server for example.")
12663 (license license:bsd-3)
12664 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12665
12666 (define-public python2-setproctitle
12667 (let ((base (package-with-python2
12668 (strip-python2-variant python-setproctitle))))
12669 (package
12670 (inherit base)
12671 (native-inputs `(("python2-nose" ,python2-nose)
12672 ,@(package-native-inputs base))))))
12673
12674 (define-public python-validictory
12675 (package
12676 (name "python-validictory")
12677 (version "1.0.1")
12678 (source
12679 (origin
12680 (method url-fetch)
12681 (uri (pypi-uri "validictory" version))
12682 (sha256
12683 (base32
12684 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12685 (build-system python-build-system)
12686 (arguments
12687 '(#:phases
12688 (modify-phases %standard-phases
12689 (add-after 'unpack 'bootstrap
12690 ;; Move the tests out of the package directory to avoid
12691 ;; packaging them.
12692 (lambda* _
12693 (rename-file "validictory/tests" "tests")
12694 (delete-file "tests/__init__.py")))
12695 (replace 'check
12696 (lambda _
12697 ;; Extend PYTHONPATH so the built package will be found.
12698 (setenv "PYTHONPATH"
12699 (string-append (getcwd) "/build/lib:"
12700 (getenv "PYTHONPATH")))
12701 (invoke "py.test" "-vv" ))))))
12702 (native-inputs
12703 `(("python-pytest" ,python-pytest)))
12704 (home-page
12705 "https://github.com/jamesturk/validictory")
12706 (synopsis "General purpose Python data validator")
12707 (description "It allows validation of arbitrary Python data structures.
12708
12709 The schema format is based on the JSON Schema
12710 proposal (http://json-schema.org), so combined with json the library is also
12711 useful as a validator for JSON data.")
12712 (license license:expat)))
12713
12714 (define-public python2-validictory
12715 (package-with-python2 python-validictory))
12716
12717 (define-public python-pyelftools
12718 (package
12719 (name "python-pyelftools")
12720 (version "0.25")
12721 (source
12722 (origin
12723 (method url-fetch)
12724 (uri (pypi-uri "pyelftools" version))
12725 (sha256
12726 (base32
12727 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
12728 (build-system python-build-system)
12729 (arguments
12730 `(#:phases
12731 (modify-phases %standard-phases
12732 (add-before 'check 'set-pythonpath
12733 (lambda _
12734 (setenv "PYTHONPATH"
12735 (string-append
12736 (getcwd) "/test/"
12737 ":" (getenv "PYTHONPATH")))
12738 #t)))))
12739 (home-page
12740 "https://github.com/eliben/pyelftools")
12741 (synopsis
12742 "Analyze binary and library file information")
12743 (description "This Python library provides interfaces for parsing and
12744 analyzing two binary and library file formats; the Executable and Linking
12745 Format (ELF), and debugging information in the Debugging With Attributed
12746 Record Format (DWARF).")
12747 (license license:public-domain)))
12748
12749 (define-public python-pyev
12750 (package
12751 (name "python-pyev")
12752 (version "0.9.0")
12753 (source
12754 (origin
12755 (method url-fetch)
12756 (uri (pypi-uri "pyev" version))
12757 (sha256
12758 (base32
12759 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
12760 (build-system python-build-system)
12761 (arguments
12762 `(#:tests? #f ; no test suite
12763 #:phases
12764 (modify-phases %standard-phases
12765 (add-after 'unpack 'patch
12766 (lambda* (#:key inputs #:allow-other-keys)
12767 (let ((libev (string-append (assoc-ref inputs "libev")
12768 "/lib/libev.so.4")))
12769 (substitute* "setup.py"
12770 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
12771 (string-append "libev_dll_name = \"" libev "\"")))))))))
12772 (inputs
12773 `(("libev" ,libev)))
12774 (home-page "http://pythonhosted.org/pyev/")
12775 (synopsis "Python libev interface")
12776 (description "Pyev provides a Python interface to libev.")
12777 (license license:gpl3)))
12778
12779 (define-public python2-pyev
12780 (package-with-python2 python-pyev))
12781
12782 (define-public python-imagesize
12783 (package
12784 (name "python-imagesize")
12785 (version "1.2.0")
12786 (source
12787 (origin
12788 (method url-fetch)
12789 (uri (pypi-uri "imagesize" version))
12790 (sha256
12791 (base32
12792 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
12793 (build-system python-build-system)
12794 (home-page "https://github.com/shibukawa/imagesize_py")
12795 (synopsis "Gets image size of files in various formats in Python")
12796 (description
12797 "This package allows determination of image size from
12798 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
12799 (license license:expat)))
12800
12801 (define-public python2-imagesize
12802 (package-with-python2 python-imagesize))
12803
12804 (define-public python-termstyle
12805 (package
12806 (name "python-termstyle")
12807 (version "0.1.11")
12808 (source
12809 (origin
12810 (method url-fetch)
12811 (uri (pypi-uri "termstyle" version))
12812 (sha256
12813 (base32
12814 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
12815 (build-system python-build-system)
12816 (arguments
12817 '(#:phases
12818 (modify-phases %standard-phases
12819 (replace 'check
12820 (lambda _
12821 (invoke "python" "test3.py"))))))
12822 (home-page "https://github.com/gfxmonk/termstyle")
12823 (synopsis "Console text coloring for Python")
12824 (description "This package provides console text coloring for Python.")
12825 (license license:bsd-3)))
12826
12827 (define-public python-argcomplete
12828 (package
12829 (name "python-argcomplete")
12830 (version "1.10.3")
12831 (source
12832 (origin
12833 (method url-fetch)
12834 (uri (pypi-uri "argcomplete" version))
12835 (sha256
12836 (base32
12837 "02jkc44drb0yjz6x28lvg6rj607n8r2irdpdvyylm8xnycn54zx3"))))
12838 (build-system python-build-system)
12839 (arguments
12840 `(#:phases
12841 (modify-phases %standard-phases
12842 (add-after 'unpack 'embed-tool-references
12843 (lambda _
12844 (substitute* "argcomplete/bash_completion.d/python-argcomplete.sh"
12845 ((" grep")
12846 (string-append " " (which "grep")))
12847 ((" egrep")
12848 (string-append " " (which "egrep")))
12849 (("elif which")
12850 (string-append "elif " (which "which")))
12851 (("\\$\\(which")
12852 (string-append "$(" (which "which"))))
12853 #t)))))
12854 (inputs
12855 `(("grep" ,grep)
12856 ("which" ,which)))
12857 (native-inputs
12858 `(("python-coverage" ,python-coverage)
12859 ("python-flake8" ,python-flake8)
12860 ("python-pexpect" ,python-pexpect)
12861 ("python-wheel" ,python-wheel)
12862 ("tcsh" ,tcsh)
12863 ("fish" ,fish)
12864 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
12865 (home-page "https://github.com/kislyuk/argcomplete")
12866 (synopsis "Shell tab completion for Python argparse")
12867 (description "argcomplete provides extensible command line tab completion
12868 of arguments and options for Python scripts using @code{argparse}. It's
12869 particularly useful for programs with many options or sub-parsers that can
12870 dynamically suggest completions; for example, when browsing resources over the
12871 network.")
12872 (license license:asl2.0)))
12873
12874 (define-public python2-argcomplete
12875 (package-with-python2 python-argcomplete))
12876
12877 (define-public python-xopen
12878 (package
12879 (name "python-xopen")
12880 (version "0.5.0")
12881 (source
12882 (origin
12883 (method url-fetch)
12884 (uri (pypi-uri "xopen" version))
12885 (sha256
12886 (base32
12887 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
12888 (build-system python-build-system)
12889 (propagated-inputs
12890 `(("python-setuptools-scm" ,python-setuptools-scm)))
12891 (home-page "https://github.com/marcelm/xopen/")
12892 (synopsis "Open compressed files transparently")
12893 (description "This module provides an @code{xopen} function that works like
12894 Python's built-in @code{open} function, but can also deal with compressed files.
12895 Supported compression formats are gzip, bzip2 and, xz, and are automatically
12896 recognized by their file extensions. The focus is on being as efficient as
12897 possible on all supported Python versions.")
12898 (license license:expat)))
12899
12900 (define-public python2-xopen
12901 (let ((base (package-with-python2
12902 (strip-python2-variant python-xopen))))
12903 (package
12904 (inherit base)
12905 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
12906 ,@(package-propagated-inputs base))))))
12907
12908 (define-public python-cheetah
12909 (package
12910 (name "python-cheetah")
12911 (version "3.1.0")
12912 (source
12913 (origin
12914 (method url-fetch)
12915 (uri (pypi-uri "Cheetah3" version))
12916 (sha256
12917 (base32
12918 "1ihag9cxll6b86fc8v5lkhmr3brdbi4yiz16zpgw79yylmv8fgr9"))))
12919 (build-system python-build-system)
12920 (arguments
12921 `(#:modules ((guix build utils)
12922 (guix build python-build-system)
12923 (ice-9 ftw)
12924 (srfi srfi-1)
12925 (srfi srfi-26))
12926 #:phases (modify-phases %standard-phases
12927 (add-after 'unpack 'use-absolute-python
12928 (lambda _
12929 (substitute* "Cheetah/CheetahWrapper.py"
12930 (("#!/usr/bin/env python")
12931 (string-append "#!" (which "python"))))
12932 #t))
12933 (replace 'check
12934 (lambda _
12935 (let ((cwd (getcwd)))
12936 (setenv "PYTHONPATH"
12937 (string-append
12938 cwd "/build/"
12939 (find (cut string-prefix? "lib" <>)
12940 (scandir (string-append cwd "/build")))
12941 ":" (getenv "PYTHONPATH")))
12942 (setenv "PATH"
12943 (string-append (getenv "PATH")
12944 ":" cwd "/bin"))
12945 (setenv "TMPDIR" "/tmp")
12946
12947 (substitute* "Cheetah/Tests/Test.py"
12948 (("unittest.TextTestRunner\\(\\)")
12949 "unittest.TextTestRunner(verbosity=2)"))
12950
12951 (invoke "python" "Cheetah/Tests/Test.py")))))))
12952 (propagated-inputs
12953 `(("python-markdown" ,python-markdown))) ;optional
12954 (home-page "https://cheetahtemplate.org/")
12955 (synopsis "Template engine")
12956 (description "Cheetah is a text-based template engine and Python code
12957 generator.
12958
12959 Cheetah can be used as a standalone templating utility or referenced as
12960 a library from other Python applications. It has many potential uses,
12961 but web developers looking for a viable alternative to ASP, JSP, PHP and
12962 PSP are expected to be its principle user group.
12963
12964 Features:
12965 @enumerate
12966 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
12967 text-based format.
12968 @item Cleanly separates content, graphic design, and program code.
12969 @item Blends the power and flexibility of Python with a simple template language
12970 that non-programmers can understand.
12971 @item Gives template writers full access to any Python data structure, module,
12972 function, object, or method in their templates.
12973 @item Makes code reuse easy by providing an object-orientated interface to
12974 templates that is accessible from Python code or other Cheetah templates.
12975 One template can subclass another and selectively reimplement sections of it.
12976 @item Provides a simple, yet powerful, caching mechanism that can dramatically
12977 improve the performance of a dynamic website.
12978 @item Compiles templates into optimized, yet readable, Python code.
12979 @end enumerate")
12980 (license (license:x11-style "file://LICENSE"))))
12981
12982 (define-public python2-cheetah
12983 (package-with-python2 python-cheetah))
12984
12985 (define-public python-dulwich
12986 (package
12987 (name "python-dulwich")
12988 (version "0.18.6")
12989 (source
12990 (origin
12991 (method url-fetch)
12992 (uri (list (string-append "https://www.dulwich.io/releases/"
12993 "dulwich-" version ".tar.gz")
12994 (pypi-uri "dulwich" version)))
12995 (sha256
12996 (base32
12997 "1aa1xfrxkc3j9s4xi0llhf5gndyi9ryprcxsqfa5fcb8ph34981q"))))
12998 (build-system python-build-system)
12999 (arguments
13000 `(#:phases
13001 (modify-phases %standard-phases
13002 (add-before 'check 'fix-tests
13003 (lambda* (#:key inputs #:allow-other-keys)
13004 ;; The tests use Popen with a custom environment which doesn't
13005 ;; include PATH.
13006 (substitute* "dulwich/tests/compat/utils.py"
13007 (("'git'") (string-append "'"
13008 (which "git")
13009 "'")))
13010 (substitute* '("dulwich/tests/test_repository.py"
13011 "dulwich/tests/test_hooks.py")
13012 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13013 (setenv "TEST_RUNNER" "unittest")
13014 (setenv "PYTHONHASHSEED" "random")
13015 #t)))))
13016 (propagated-inputs
13017 `(("python-fastimport" ,python-fastimport)))
13018 (native-inputs
13019 `(("python-mock" ,python-mock)
13020 ("python-geventhttpclient" ,python-geventhttpclient)
13021 ("git" ,git)))
13022 (home-page "https://www.dulwich.io/")
13023 (synopsis "Git implementation in Python")
13024 (description "Dulwich is an implementation of the Git file formats and
13025 protocols written in pure Python.")
13026 ;; Can be used with either license.
13027 (license (list license:asl2.0 license:gpl2+))))
13028
13029 (define-public python2-dulwich
13030 (package-with-python2 python-dulwich))
13031
13032 (define-public python-pbkdf2
13033 (package
13034 (name "python-pbkdf2")
13035 (version "1.3")
13036 (source
13037 (origin
13038 (method url-fetch)
13039 (uri (pypi-uri "pbkdf2" version))
13040 (sha256
13041 (base32
13042 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13043 (build-system python-build-system)
13044 (arguments
13045 '(#:phases
13046 (modify-phases %standard-phases
13047 (replace 'check
13048 (lambda _
13049 (setenv "PYTHONPATH"
13050 (string-append (getcwd) "/build/lib:"
13051 (getenv "PYTHONPATH")))
13052 (invoke "python" "test/test_pbkdf2.py"))))))
13053 (propagated-inputs
13054 `(("python-pycrypto" ,python-pycrypto))) ; optional
13055 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13056 (synopsis "Password-based key derivation")
13057 (description "This module implements the password-based key derivation
13058 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13059
13060 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13061 is part of the RSA Public Key Cryptography Standards series. The provided
13062 implementation takes a password or a passphrase and a salt value (and
13063 optionally a iteration count, a digest module, and a MAC module) and provides
13064 a file-like object from which an arbitrarly-sized key can be read.")
13065 (license license:expat)))
13066
13067 (define-public python2-pbkdf2
13068 (package-with-python2 python-pbkdf2))
13069
13070 (define-public python-qrcode
13071 (package
13072 (name "python-qrcode")
13073 (version "6.1")
13074 (source
13075 (origin
13076 (method url-fetch)
13077 (uri (pypi-uri "qrcode" version))
13078 (sha256
13079 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13080 (build-system python-build-system)
13081 (arguments
13082 ;; FIXME: Tests require packaging 'pymaging'.
13083 '(#:tests? #f))
13084 (propagated-inputs
13085 `(("python-lxml" ,python-lxml) ; for SVG output
13086 ("python-pillow" ,python-pillow) ; for PNG output
13087 ("python-six" ,python-six)))
13088 (home-page "https://github.com/lincolnloop/python-qrcode")
13089 (synopsis "QR Code image generator")
13090 (description "This package provides a pure Python QR Code generator
13091 module. It uses the Python Imaging Library (PIL) to allow for the generation
13092 of QR Codes.
13093
13094 In addition this package provides a command line tool to generate QR codes and
13095 either write these QR codes to a file or do the output as ascii art at the
13096 console.")
13097 (license license:bsd-3)))
13098
13099 (define-public python2-qrcode
13100 (package-with-python2 python-qrcode))
13101
13102 (define-public python-rst2ansi
13103 (package
13104 (name "python-rst2ansi")
13105 (version "0.1.5")
13106 (source
13107 (origin
13108 (method url-fetch)
13109 (uri (pypi-uri "rst2ansi" version))
13110 (sha256
13111 (base32
13112 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13113 (build-system python-build-system)
13114 (propagated-inputs
13115 `(("python-docutils" ,python-docutils)))
13116 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13117 (synopsis "Convert RST to ANSI-decorated console output")
13118 (description
13119 "Python module dedicated to rendering RST (reStructuredText) documents
13120 to ansi-escaped strings suitable for display in a terminal.")
13121 (license license:expat)))
13122
13123 (define-public python-ansi2html
13124 (package
13125 (name "python-ansi2html")
13126 (version "1.2.0")
13127 (source
13128 (origin
13129 (method url-fetch)
13130 (uri (pypi-uri "ansi2html" version))
13131 (sha256
13132 (base32
13133 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13134 (build-system python-build-system)
13135 (native-inputs
13136 `(("python-mock" ,python-mock)
13137 ("python-nose" ,python-nose)))
13138 (propagated-inputs
13139 `(("python-six" ,python-six)))
13140 (home-page "https://github.com/ralphbean/ansi2html")
13141 (synopsis "Convert ANSI-decorated console output to HTML")
13142 (description
13143 "@command{ansi2html} is a Python library and command line utility for
13144 convering text with ANSI color codes to HTML or LaTeX.")
13145 (license license:gpl3+)))
13146
13147 (define-public python2-ansi2html
13148 (package-with-python2 python-ansi2html))
13149
13150 (define-public python-ddt
13151 (package
13152 (name "python-ddt")
13153 (version "1.1.3")
13154 (source
13155 (origin
13156 (method url-fetch)
13157 (uri (pypi-uri "ddt" version))
13158 (sha256
13159 (base32
13160 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13161 (build-system python-build-system)
13162 (native-inputs
13163 `(("python-mock" ,python-mock)
13164 ("python-nose" ,python-nose)))
13165 (propagated-inputs
13166 `(("python-six" ,python-six)
13167 ("python-pyyaml" ,python-pyyaml)))
13168 (home-page "https://github.com/txels/ddt")
13169 (synopsis "Data-Driven Tests")
13170 (description
13171 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13172 running it with different test data, and make it appear as multiple test
13173 cases.")
13174 (license license:expat)))
13175
13176 (define-public python2-ddt
13177 (package-with-python2 python-ddt))
13178
13179 (define-public python-pycountry
13180 (package
13181 (name "python-pycountry")
13182 (version "18.5.26")
13183 (source
13184 (origin
13185 (method url-fetch)
13186 (uri (pypi-uri "pycountry" version))
13187 (sha256
13188 (base32
13189 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13190 (build-system python-build-system)
13191 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13192 (synopsis "ISO databases for languages, countries, currencies, etc.")
13193 (description
13194 "@code{pycountry} provides the ISO databases for the standards:
13195 @enumerate
13196 @item 639-3 (Languages)
13197 @item 3166 (Countries)
13198 @item 3166-3 (Deleted Countries)
13199 @item 3166-2 (Subdivisions of countries)
13200 @item 4217 (Currencies)
13201 @item 15924 (Scripts)
13202 @end enumerate
13203 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13204 through a Python API.")
13205 (license license:lgpl2.1+)))
13206
13207 (define-public python2-pycountry
13208 (package-with-python2 python-pycountry))
13209
13210 (define-public python-pycosat
13211 (package
13212 (name "python-pycosat")
13213 (version "0.6.1")
13214 (source
13215 (origin
13216 (method url-fetch)
13217 (uri (pypi-uri "pycosat" version))
13218 (sha256
13219 (base32
13220 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13221 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13222 (build-system python-build-system)
13223 (home-page "https://github.com/ContinuumIO/pycosat")
13224 (synopsis "Bindings to picosat (a SAT solver)")
13225 (description
13226 "This package provides efficient Python bindings to @code{picosat} on
13227 the C level. When importing pycosat, the @code{picosat} solver becomes part
13228 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13229 Problem} (SAT) solver.")
13230 (license license:expat)))
13231
13232 (define-public python2-pycosat
13233 (package-with-python2 python-pycosat))
13234
13235 (define-public python2-ruamel.ordereddict
13236 (package
13237 (name "python2-ruamel.ordereddict")
13238 (version "0.4.9")
13239 (source
13240 (origin
13241 (method url-fetch)
13242 (uri (pypi-uri "ruamel.ordereddict" version))
13243 (sha256
13244 (base32
13245 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13246 (build-system python-build-system)
13247 (arguments
13248 `(#:python ,python-2
13249 #:phases
13250 (modify-phases %standard-phases
13251 (delete 'check)
13252 (add-after 'install 'check
13253 (lambda* (#:key inputs outputs #:allow-other-keys)
13254 (add-installed-pythonpath inputs outputs)
13255 (invoke "python" "test/testordereddict.py"))))))
13256 (home-page "https://bitbucket.org/ruamel/ordereddict")
13257 (synopsis "Version of dict that keeps keys in insertion order")
13258 (description
13259 "This is an implementation of an ordered dictionary with @dfn{Key
13260 Insertion Order} (KIO: updates of values do not affect the position of the
13261 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13262 removed and put at the back). The standard library module @code{OrderedDict},
13263 implemented later, implements a subset of @code{ordereddict} functionality.
13264 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13265 Order} (KSO, no sorting function can be specified, but a transform can be
13266 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13267 (license license:expat)))
13268
13269 (define-public python-pypeg2
13270 (package
13271 (name "python-pypeg2")
13272 (version "2.15.2")
13273 (source
13274 (origin
13275 (method url-fetch)
13276 (uri (pypi-uri "pyPEG2" version))
13277 (sha256
13278 (base32
13279 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13280 (build-system python-build-system)
13281 (propagated-inputs `(("python-lxml" ,python-lxml)))
13282 (arguments
13283 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13284 '(#:tests? #f))
13285 (home-page "https://fdik.org/pyPEG/")
13286 (synopsis "Parsering Expression Grammars in Python")
13287 (description "PyPEG is an intrinsic parser interpreter framework for
13288 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13289 parse many formal languages.")
13290 (license license:gpl2)))
13291
13292 (define-public python-incremental
13293 (package
13294 (name "python-incremental")
13295 (version "17.5.0")
13296 (source
13297 (origin
13298 (method url-fetch)
13299 (uri (pypi-uri "incremental" version))
13300 (sha256
13301 (base32
13302 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13303 (build-system python-build-system)
13304 (home-page "https://github.com/hawkowl/incremental")
13305 (synopsis "Library for versioning Python projects")
13306 (description "Incremental is a small library that versions your Python
13307 projects.")
13308 (license license:expat)))
13309
13310 (define-public python2-incremental
13311 (package-with-python2 python-incremental))
13312
13313 (define-public python-invoke
13314 (package
13315 (name "python-invoke")
13316 (home-page "https://www.pyinvoke.org/")
13317 (version "1.3.0")
13318 (source (origin
13319 (method url-fetch)
13320 (uri (pypi-uri "invoke" version))
13321 (sha256
13322 (base32
13323 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13324 (build-system python-build-system)
13325 (arguments
13326 ;; XXX: Requires many dependencies that are not yet in Guix.
13327 `(#:tests? #f))
13328 (synopsis "Pythonic task execution")
13329 (description
13330 "Invoke is a Python task execution tool and library, drawing inspiration
13331 from various sources to arrive at a powerful and clean feature set. It is
13332 evolved from the Fabric project, but focuses on local and abstract concerns
13333 instead of servers and network commands.")
13334 (license license:bsd-3)))
13335
13336 (define-public python2-invoke
13337 (package-with-python2 python-invoke))
13338
13339 (define-public python-automat
13340 (package
13341 (name "python-automat")
13342 (version "0.7.0")
13343 (source (origin
13344 (method url-fetch)
13345 (uri (pypi-uri "Automat" version))
13346 (sha256
13347 (base32
13348 "03ivg70n3b1cbcd2zvjhk8y4kmqxcvhmili39lmgx09dza1qpmyb"))))
13349 (build-system python-build-system)
13350 ;; We disable the tests because they require python-twisted, while
13351 ;; python-twisted depends on python-automat. Twisted is optional, but the
13352 ;; tests fail if it is not available. Also see
13353 ;; <https://github.com/glyph/automat/issues/71>.
13354 (arguments '(#:tests? #f))
13355 (native-inputs
13356 `(("python-m2r" ,python-m2r)
13357 ("python-setuptools-scm" ,python-setuptools-scm)
13358 ("python-graphviz" ,python-graphviz)))
13359 (propagated-inputs
13360 `(("python-six" ,python-six)
13361 ("python-attrs" ,python-attrs)))
13362 (home-page "https://github.com/glyph/Automat")
13363 (synopsis "Self-service finite-state machines")
13364 (description "Automat is a library for concise, idiomatic Python
13365 expression of finite-state automata (particularly deterministic finite-state
13366 transducers).")
13367 (license license:expat)))
13368
13369 (define-public python2-automat
13370 (package-with-python2 python-automat))
13371
13372 (define-public python-m2r
13373 (package
13374 (name "python-m2r")
13375 (version "0.2.1")
13376 (source (origin
13377 (method url-fetch)
13378 (uri (pypi-uri "m2r" version))
13379 (sha256
13380 (base32
13381 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13382 (build-system python-build-system)
13383 (propagated-inputs
13384 `(("python-docutils" ,python-docutils)
13385 ("python-mistune" ,python-mistune)))
13386 (native-inputs
13387 `(("python-pygments" ,python-pygments)
13388 ("python-mock" ,python-mock)))
13389 (home-page "https://github.com/miyakogi/m2r")
13390 (synopsis "Markdown to reStructuredText converter")
13391 (description "M2R converts a markdown file including reST markups to valid
13392 reST format.")
13393 (license license:expat)))
13394
13395 (define-public python2-m2r
13396 (package-with-python2 python-m2r))
13397
13398 (define-public python-constantly
13399 (package
13400 (name "python-constantly")
13401 (version "15.1.0")
13402 (source (origin
13403 (method url-fetch)
13404 (uri (pypi-uri "constantly" version))
13405 (sha256
13406 (base32
13407 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13408 (build-system python-build-system)
13409 (home-page "https://github.com/twisted/constantly")
13410 (synopsis "Symbolic constants in Python")
13411 (description "Constantly is a Python library that provides symbolic
13412 constant support. It includes collections and constants with text, numeric,
13413 and bit flag values.")
13414 (license license:expat)))
13415
13416 (define-public python2-constantly
13417 (package-with-python2 python-constantly))
13418
13419 (define-public python-attrs
13420 (package
13421 (name "python-attrs")
13422 (version "19.1.0")
13423 (source (origin
13424 (method url-fetch)
13425 (uri (pypi-uri "attrs" version))
13426 (sha256
13427 (base32
13428 "16g33zr5f449lqc5wgvzpknxryfzrfsxcr6kpgxwn7l5fkv71f7h"))))
13429 (build-system python-build-system)
13430 (arguments
13431 `(#:modules ((guix build utils)
13432 (guix build python-build-system)
13433 (ice-9 ftw)
13434 (srfi srfi-1)
13435 (srfi srfi-26))
13436 #:phases (modify-phases %standard-phases
13437 (replace 'check
13438 (lambda _
13439 (let ((cwd (getcwd)))
13440 (setenv "PYTHONPATH"
13441 (string-append
13442 cwd "/build/"
13443 (find (cut string-prefix? "lib" <>)
13444 (scandir (string-append cwd "/build")))
13445 ":"
13446 (getenv "PYTHONPATH")))
13447 (invoke "python" "-m" "pytest")))))))
13448 (native-inputs
13449 `(("python-coverage" ,python-coverage)
13450 ("python-hypothesis" ,python-hypothesis)
13451 ("python-pympler" ,python-pympler)
13452 ("python-pytest" ,python-pytest)
13453 ("python-six" ,python-six)
13454 ("python-sphinx" ,python-sphinx)
13455 ("python-zope-interface" ,python-zope-interface)))
13456 (home-page "https://github.com/python-attrs/attrs/")
13457 (synopsis "Attributes without boilerplate")
13458 (description "@code{attrs} is a Python package with class decorators that
13459 ease the chores of implementing the most common attribute-related object
13460 protocols.")
13461 (license license:expat)))
13462
13463 (define-public python2-attrs
13464 (package-with-python2 python-attrs))
13465
13466 (define-public python-attrs-bootstrap
13467 (package
13468 (inherit python-attrs)
13469 (name "python-attrs-bootstrap")
13470 (native-inputs `())
13471 (arguments `(#:tests? #f))))
13472
13473 (define-public python2-attrs-bootstrap
13474 (package-with-python2 python-attrs-bootstrap))
13475
13476 (define-public python2-cliapp
13477 (package
13478 (name "python2-cliapp")
13479 (version "1.20180812.1")
13480 (source
13481 (origin
13482 (method url-fetch)
13483 (uri (string-append
13484 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13485 version ".tar.gz"))
13486 (sha256
13487 (base32
13488 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13489 (build-system python-build-system)
13490 (arguments
13491 `(#:python ,python-2
13492 #:phases
13493 (modify-phases %standard-phases
13494 ;; check phase needs to be run before the build phase. If not,
13495 ;; coverage-test-runner looks for tests for the built source files,
13496 ;; and fails.
13497 (delete 'check)
13498 (add-before 'build 'check
13499 (lambda _
13500 ;; Disable python3 tests
13501 (substitute* "check"
13502 (("python3") "# python3"))
13503 (invoke "./check"))))))
13504 (native-inputs
13505 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13506 ("python2-pep8" ,python2-pep8)))
13507 (propagated-inputs
13508 `(("python2-pyaml" ,python2-pyaml)))
13509 (home-page "https://liw.fi/cliapp/")
13510 (synopsis "Python framework for command line programs")
13511 (description "@code{python2-cliapp} is a python framework for
13512 command line programs. It contains the typical stuff such programs
13513 need to do, such as parsing the command line for options, and
13514 iterating over input files.")
13515 (license license:gpl2+)))
13516
13517 (define-public python2-ttystatus
13518 (package
13519 (name "python2-ttystatus")
13520 (version "0.36")
13521 (source
13522 (origin
13523 (method url-fetch)
13524 (uri (string-append
13525 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13526 version ".tar.gz"))
13527 (sha256
13528 (base32
13529 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13530 (build-system python-build-system)
13531 (native-inputs
13532 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13533 ("python2-pep8" ,python2-pep8)))
13534 (arguments
13535 `(#:python ,python-2
13536 #:phases
13537 (modify-phases %standard-phases
13538 ;; check phase needs to be run before the build phase. If not,
13539 ;; coverage-test-runner looks for tests for the built source files,
13540 ;; and fails.
13541 (delete 'check)
13542 (add-before 'build 'check
13543 (lambda _ (invoke "make" "check"))))))
13544 (home-page "https://liw.fi/ttystatus/")
13545 (synopsis "Python library for showing progress reporting and
13546 status updates on terminals")
13547 (description "@code{python2-ttystatus} is a python library for
13548 showing progress reporting and status updates on terminals, for
13549 command line programs. Output is automatically adapted to the width
13550 of the terminal: truncated if it does not fit, and resized if the
13551 terminal size changes.")
13552 (license license:gpl3+)))
13553
13554 (define-public python2-tracing
13555 (package
13556 (name "python2-tracing")
13557 (version "0.10")
13558 (source
13559 (origin
13560 (method url-fetch)
13561 (uri (string-append
13562 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13563 version ".tar.gz"))
13564 (sha256
13565 (base32
13566 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13567 (build-system python-build-system)
13568 (arguments
13569 `(#:python ,python-2))
13570 (home-page "https://liw.fi/tracing/")
13571 (synopsis "Python debug logging helper")
13572 (description "@code{python2-tracing} is a python library for
13573 logging debug messages. It provides a way to turn debugging messages
13574 on and off, based on the filename they occur in. It is much faster
13575 than using @code{logging.Filter} to accomplish the same thing, which
13576 matters when code is run in production mode. The actual logging still
13577 happens using the @code{logging} library.")
13578 (license license:gpl3+)))
13579
13580 (define-public python2-larch
13581 (package
13582 (name "python2-larch")
13583 (version "1.20151025")
13584 (source
13585 (origin
13586 (method url-fetch)
13587 (uri (string-append
13588 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13589 version ".tar.gz"))
13590 (patches (search-patches
13591 "python2-larch-coverage-4.0a6-compatibility.patch"))
13592 (sha256
13593 (base32
13594 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13595 (build-system python-build-system)
13596 (arguments
13597 `(#:python ,python-2
13598 #:phases
13599 (modify-phases %standard-phases
13600 ;; check phase needs to be run before the build phase. If not,
13601 ;; coverage-test-runner looks for tests for the built source files,
13602 ;; and fails.
13603 (delete 'check)
13604 (add-before 'build 'check
13605 (lambda _ (invoke "make" "check"))))))
13606 (native-inputs
13607 `(("cmdtest" ,cmdtest)
13608 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13609 (propagated-inputs
13610 `(("python2-tracing" ,python2-tracing)))
13611 (home-page "https://liw.fi/larch/")
13612 (synopsis "Python copy-on-write B-tree library")
13613 (description "@code{python2-larch} is an implementation of
13614 particular kind of B-tree, based on research by Ohad Rodeh. See
13615 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13616 on the data structure.
13617
13618 The distinctive feature of this B-tree is that a node is never
13619 (conceptually) modified. Instead, all updates are done by
13620 copy-on-write. This makes it easy to clone a tree, and modify only the
13621 clone, while other processes access the original tree.")
13622 (license license:gpl3+)))
13623
13624 (define-public python-astroid
13625 (package
13626 (name "python-astroid")
13627 (version "2.3.3")
13628 (source
13629 (origin
13630 (method url-fetch)
13631 (uri (pypi-uri "astroid" version))
13632 (sha256
13633 (base32 "0fnibsl2cb5mvzbfm7sycj85smx48f8w8m7ks1sqlmpr9ps0gski"))))
13634 (build-system python-build-system)
13635 (propagated-inputs
13636 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13637 ("python-six" ,python-six)
13638 ("python-typed-ast" ,python-typed-ast)
13639 ("python-wrapt" ,python-wrapt)))
13640 (native-inputs
13641 `(("python-dateutil" ,python-dateutil)
13642 ("python-nose" ,python-nose)
13643 ("python-pytest" ,python-pytest)
13644 ("python-pytest-runner" ,python-pytest-runner)))
13645 (arguments
13646 `(#:phases
13647 (modify-phases %standard-phases
13648 (add-after 'unpack 'remove-spurious-test
13649 (lambda _
13650 ;; This can be removed after upgrading from python-3.7
13651 ;; https://github.com/PyCQA/astroid/issues/593
13652 ;; https://bugs.python.org/issue34056
13653 (delete-file "astroid/tests/unittest_modutils.py")
13654 #t))
13655 (replace 'check
13656 (lambda _
13657 (invoke "pytest" "astroid"))))))
13658 (home-page "https://github.com/PyCQA/astroid")
13659 (synopsis "Common base representation of python source code for pylint and
13660 other projects")
13661 (description "@code{python-astroid} provides a common base representation
13662 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13663
13664 It provides a compatible representation which comes from the _ast module. It
13665 rebuilds the tree generated by the builtin _ast module by recursively walking
13666 down the AST and building an extended ast. The new node classes have
13667 additional methods and attributes for different usages. They include some
13668 support for static inference and local name scopes. Furthermore, astroid
13669 builds partial trees by inspecting living objects.")
13670 (license license:lgpl2.1+)
13671 (properties `((python2-variant . ,(delay python2-astroid))))))
13672
13673 (define-public python2-astroid
13674 (let ((base (package-with-python2
13675 (strip-python2-variant python-astroid))))
13676 (package (inherit base)
13677 ;; Version 2.x removes python2 support.
13678 (version "1.6.5")
13679 (source
13680 (origin
13681 (method url-fetch)
13682 (uri (pypi-uri "astroid" version))
13683 (sha256
13684 (base32
13685 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13686 (arguments
13687 (substitute-keyword-arguments (package-arguments base)
13688 ((#:phases phases)
13689 `(modify-phases ,phases
13690 (add-after 'unpack 'remove-spurious-test
13691 (lambda _
13692 ;; https://github.com/PyCQA/astroid/issues/276
13693 (delete-file "astroid/tests/unittest_brain.py")
13694 #t))
13695 (replace 'check
13696 (lambda _
13697 (invoke"python" "-m" "unittest" "discover"
13698 "-p" "unittest*.py")))))))
13699 (native-inputs `())
13700 (propagated-inputs
13701 `(("python2-backports-functools-lru-cache"
13702 ,python2-backports-functools-lru-cache)
13703 ("python2-enum34" ,python2-enum34)
13704 ("python2-singledispatch" ,python2-singledispatch)
13705 ,@(alist-delete "python-typed-ast"
13706 (package-propagated-inputs base)))))))
13707
13708 (define-public python-isort
13709 (package
13710 (name "python-isort")
13711 (version "4.3.4")
13712 (source
13713 (origin
13714 (method git-fetch)
13715 (uri (git-reference
13716 ;; Tests pass only from the Github sources
13717 (url "https://github.com/timothycrosley/isort")
13718 (commit version)))
13719 (file-name (git-file-name name version))
13720 (sha256
13721 (base32
13722 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
13723 (build-system python-build-system)
13724 (native-inputs
13725 `(("python-mock" ,python-mock)
13726 ("python-pytest" ,python-pytest)))
13727 (home-page "https://github.com/timothycrosley/isort")
13728 (synopsis "Python utility/library to sort python imports")
13729 (description "@code{python-isort} is a python utility/library to sort
13730 imports alphabetically, and automatically separated into sections. It
13731 provides a command line utility, a python library and plugins for various
13732 editors.")
13733 (license license:expat)
13734 (properties `((python2-variant . ,(delay python2-isort))))))
13735
13736 (define-public python2-isort
13737 (let ((base (package-with-python2
13738 (strip-python2-variant python-isort))))
13739 (package (inherit base)
13740 (native-inputs
13741 `(("python2-futures" ,python2-futures)
13742 ,@(package-native-inputs base))))))
13743
13744 (define-public python2-backports-functools-lru-cache
13745 (package
13746 (name "python2-backports-functools-lru-cache")
13747 (version "1.5")
13748 (source
13749 (origin
13750 (method url-fetch)
13751 ;; only the pypi tarballs contain the necessary metadata
13752 (uri (pypi-uri "backports.functools_lru_cache" version))
13753 (sha256
13754 (base32
13755 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
13756 (build-system python-build-system)
13757 (native-inputs
13758 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
13759 (arguments
13760 `(#:python ,python-2))
13761 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
13762 (synopsis "Backport of functools.lru_cache from Python 3.3")
13763 (description "@code{python2-backports-functools-lru-cache} is a backport
13764 of @code{functools.lru_cache} from python 3.3.")
13765 (license license:expat)))
13766
13767 (define-public python-configparser
13768 (package
13769 (name "python-configparser")
13770 (version "3.7.1")
13771 (source
13772 (origin
13773 (method url-fetch)
13774 (uri (pypi-uri "configparser" version))
13775 (sha256
13776 (base32
13777 "0cnz213il9lhgda6x70fw7mfqr8da43s3wm343lwzhqx94mgmmav"))))
13778 (build-system python-build-system)
13779 (home-page "https://github.com/jaraco/configparser/")
13780 (synopsis "Backport of configparser from python 3.5")
13781 (description "@code{python-configparser} is a backport of
13782 @code{configparser} from Python 3.5 so that it can be used directly
13783 in other versions.")
13784 (license license:expat)))
13785
13786 (define-public python2-configparser
13787 (package-with-python2 python-configparser))
13788
13789 (define-public python-mando
13790 (package
13791 (name "python-mando")
13792 (version "0.6.4")
13793 (source (origin
13794 (method url-fetch)
13795 (uri (pypi-uri "mando" version))
13796 (sha256
13797 (base32
13798 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
13799 (build-system python-build-system)
13800 (propagated-inputs
13801 `(("python-rst2ansi" ,python-rst2ansi)
13802 ("python-six" ,python-six)))
13803 (native-inputs
13804 `(("python-pytest" ,python-pytest)))
13805 (home-page "https://mando.readthedocs.org/")
13806 (synopsis
13807 "Wrapper around argparse, allowing creation of complete CLI applications")
13808 (description
13809 "This package is a wrapper around argparse, allowing you to write complete CLI
13810 applications in seconds while maintaining all the flexibility.")
13811 (license license:expat)))
13812
13813 (define-public python2-mando
13814 (package-with-python2 python-mando))
13815
13816 (define-public python2-argparse
13817 (package
13818 (name "python2-argparse")
13819 (version "1.4.0")
13820 (source
13821 (origin
13822 (method url-fetch)
13823 (uri (pypi-uri "argparse" version))
13824 (sha256
13825 (base32
13826 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
13827 (build-system python-build-system)
13828 (arguments
13829 `(#:python ,python-2))
13830 (home-page "https://github.com/ThomasWaldmann/argparse/")
13831 (synopsis "Python command-line parsing library")
13832 (description
13833 "This package is mostly for people who want to have @code{argparse} on
13834 older Pythons because it was not part of the standard library back then.")
13835 (license license:psfl)))
13836
13837 (define-public python-fudge
13838 (package
13839 (name "python-fudge")
13840 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
13841 ;; package, which is currently the only use of this package.
13842 (version "0.9.6")
13843 (source
13844 (origin
13845 (method url-fetch)
13846 (uri (pypi-uri "fudge" version))
13847 (sha256
13848 (base32
13849 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
13850 (build-system python-build-system)
13851 (arguments
13852 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
13853 (home-page "https://github.com/fudge-py/fudge")
13854 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
13855 (description
13856 "Fudge is a Python module for using fake objects (mocks and stubs) to
13857 test real ones.
13858
13859 In readable Python code, you declare the methods available on your fake object
13860 and how they should be called. Then you inject that into your application and
13861 start testing. This declarative approach means you don’t have to record and
13862 playback actions and you don’t have to inspect your fakes after running code.
13863 If the fake object was used incorrectly then you’ll see an informative
13864 exception message with a traceback that points to the culprit.")
13865 (license license:expat)))
13866
13867 (define-public python2-fudge
13868 (package-with-python2 python-fudge))
13869
13870 (define-public python-mwclient
13871 (package
13872 (name "python-mwclient")
13873 (version "0.10.0")
13874 (source
13875 (origin
13876 (method git-fetch)
13877 ;; The PyPI version wouldn't contain tests.
13878 (uri (git-reference
13879 (url "https://github.com/mwclient/mwclient")
13880 (commit (string-append "v" version))))
13881 (file-name (git-file-name name version))
13882 (sha256
13883 (base32
13884 "1c3q6lwmb05yqywc4ya98ca7hsl15niili8rccl4n1yqp77c103v"))))
13885 (build-system python-build-system)
13886 (propagated-inputs
13887 `(("python-requests-oauthlib" ,python-requests-oauthlib)
13888 ("python-six" ,python-six)))
13889 (native-inputs
13890 `(("python-mock" ,python-mock)
13891 ("python-pytest" ,python-pytest)
13892 ("python-pytest-cov" ,python-pytest-cov)
13893 ("python-pytest-runner" ,python-pytest-runner)
13894 ("python-responses" ,python-responses)))
13895 (home-page "https://github.com/btongminh/mwclient")
13896 (synopsis "MediaWiki API client")
13897 (description "This package provides a MediaWiki API client.")
13898 (license license:expat)))
13899
13900 (define-public python2-mwclient
13901 (package-with-python2 python-mwclient))
13902
13903 (define-public python-utils
13904 (package
13905 (name "python-utils")
13906 (version "2.1.0")
13907 (source (origin
13908 (method url-fetch)
13909 (uri (pypi-uri "python-utils" version))
13910 (sha256
13911 (base32
13912 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
13913 (build-system python-build-system)
13914 (native-inputs
13915 `(("pytest-runner" ,python-pytest-runner)
13916 ("pytest" ,python-pytest)
13917 ("six" ,python-six)))
13918 (home-page "https://github.com/WoLpH/python-utils")
13919 (synopsis "Convenient utilities not included with the standard Python install")
13920 (description
13921 "Python Utils is a collection of small Python functions and classes which
13922 make common patterns shorter and easier.")
13923 (license license:bsd-2)))
13924
13925 (define-public python2-utils
13926 (package-with-python2 python-utils))
13927
13928 (define-public python-diff-match-patch
13929 (package
13930 (name "python-diff-match-patch")
13931 (version "20121119")
13932 (source
13933 (origin
13934 (method url-fetch)
13935 (uri (pypi-uri "diff-match-patch" version))
13936 (sha256
13937 (base32
13938 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
13939 (build-system python-build-system)
13940 (home-page "https://code.google.com/p/google-diff-match-patch")
13941 (synopsis "Synchronize plain text")
13942 (description "Diff Match and Patch libraries offer robust algorithms to
13943 perform the operations required for synchronizing plain text.")
13944 (license license:asl2.0)))
13945
13946 (define-public python2-diff-match-patch
13947 (package-with-python2 python-diff-match-patch))
13948
13949 (define-public python-dirsync
13950 (package
13951 (name "python-dirsync")
13952 (version "2.2.3")
13953 (source
13954 (origin
13955 (method url-fetch)
13956 (uri (pypi-uri "dirsync" version))
13957 (sha256
13958 (base32
13959 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
13960 (build-system python-build-system)
13961 (propagated-inputs
13962 `(("six" ,python-six)))
13963 (home-page "https://bitbucket.org/tkhyn/dirsync")
13964 (synopsis "Advanced directory tree synchronisation tool")
13965 (description "Advanced directory tree synchronisation tool.")
13966 (license license:expat)))
13967
13968 (define-public python2-dirsync
13969 (package-with-python2 python-dirsync))
13970
13971 (define-public python-levenshtein
13972 (package
13973 (name "python-levenshtein")
13974 (version "0.12.0")
13975 (source
13976 (origin
13977 (method url-fetch)
13978 (uri (pypi-uri "python-Levenshtein" version))
13979 (sha256
13980 (base32
13981 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
13982 (build-system python-build-system)
13983 (home-page "https://github.com/ztane/python-Levenshtein")
13984 (synopsis "Fast computation of Levenshtein distance and string similarity")
13985 (description
13986 "The Levenshtein Python C extension module contains functions for fast computation of
13987 @enumerate
13988 @item Levenshtein (edit) distance, and edit operations
13989 @item string similarity
13990 @item approximate median strings, and generally string averaging
13991 @item string sequence and set similarity
13992 @end enumerate
13993 It supports both normal and Unicode strings.")
13994 (license license:gpl2+)))
13995
13996 (define-public python2-levenshtein
13997 (package-with-python2 python-levenshtein))
13998
13999 (define-public python-scandir
14000 (package
14001 (name "python-scandir")
14002 (version "1.9.0")
14003 (source
14004 (origin
14005 (method url-fetch)
14006 (uri (pypi-uri "scandir" version))
14007 (sha256
14008 (base32 "0r3hvf1a9jm1rkqgx40gxkmccknkaiqjavs8lccgq9s8khh5x5s4"))))
14009 (build-system python-build-system)
14010 (arguments
14011 `(#:phases (modify-phases %standard-phases
14012 (replace 'check
14013 (lambda _
14014 (invoke "python" "test/run_tests.py"))))))
14015 (home-page "https://github.com/benhoyt/scandir")
14016 (synopsis "Directory iteration function")
14017 (description
14018 "Directory iteration function like os.listdir(), except that instead of
14019 returning a list of bare filenames, it yields DirEntry objects that include
14020 file type and stat information along with the name. Using scandir() increases
14021 the speed of os.walk() by 2-20 times (depending on the platform and file
14022 system) by avoiding unnecessary calls to os.stat() in most cases.
14023
14024 This package is part of the Python standard library since version 3.5.")
14025 (license license:bsd-3)))
14026
14027 (define-public python2-scandir
14028 (package-with-python2 python-scandir))
14029
14030 (define-public python2-stemming
14031 (package
14032 (name "python2-stemming")
14033 (version "1.0.1")
14034 (source
14035 (origin
14036 (method url-fetch)
14037 (uri (pypi-uri "stemming" version))
14038 (sha256
14039 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14040 (build-system python-build-system)
14041 (arguments
14042 `(#:python ,python-2))
14043 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14044 (synopsis "Python implementations of various stemming algorithms")
14045 (description
14046 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14047 stemming algorithms for English. These implementations are straightforward and
14048 efficient, unlike some Python versions of the same algorithms available on the
14049 Web. This package is an extraction of the stemming code included in the Whoosh
14050 search engine.")
14051 (license license:public-domain)))
14052
14053 (define-public python-factory-boy
14054 (package
14055 (name "python-factory-boy")
14056 (version "2.8.1")
14057 (source
14058 (origin
14059 (method url-fetch)
14060 (uri (pypi-uri "factory_boy" version))
14061 (sha256
14062 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14063 (build-system python-build-system)
14064 (arguments
14065 ;; Tests are not included in the tarball.
14066 `(#:tests? #f))
14067 (propagated-inputs
14068 `(("faker" ,python-faker)))
14069 (home-page "https://github.com/benhoyt/scandir")
14070 (synopsis "Versatile test fixtures replacement")
14071 (description
14072 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14073
14074 As a fixtures replacement tool, it aims to replace static, hard to maintain
14075 fixtures with easy-to-use factories for complex object.
14076
14077 Instead of building an exhaustive test setup with every possible combination
14078 of corner cases, factory_boy allows you to use objects customized for the
14079 current test, while only declaring the test-specific fields")
14080 (license license:expat)))
14081
14082 (define-public python2-factory-boy
14083 (package-with-python2 python-factory-boy))
14084
14085 (define-public python-translate-toolkit
14086 (package
14087 (name "python-translate-toolkit")
14088 (version "2.1.0")
14089 (source
14090 (origin
14091 (method url-fetch)
14092 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14093 (sha256
14094 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14095 (build-system python-build-system)
14096 (native-inputs
14097 `(("python-pytest" ,python-pytest)
14098 ("python-sphinx" ,python-sphinx)))
14099 (propagated-inputs
14100 `(("python-babel" ,python-babel)
14101 ("python-beautifulsoup4" ,python-beautifulsoup4)
14102 ("python-chardet" ,python-chardet)
14103 ("python-diff-match-patch" ,python-diff-match-patch)
14104 ("python-levenshtein" ,python-levenshtein)
14105 ("python-lxml" ,python-lxml)
14106 ("python-six" ,python-six)
14107 ("python-vobject" ,python-vobject)
14108 ("python-pyyaml" ,python-pyyaml)))
14109 (arguments
14110 ;; TODO: tests are not run, because they end with
14111 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14112 ;; 'parse_funcs'
14113 ;; during test setup.
14114 `(#:tests? #f))
14115 (home-page "https://toolkit.translatehouse.org")
14116 (synopsis "Tools and API for translation and localization engineering")
14117 (description
14118 "Tools and API for translation and localization engineering. It contains
14119 several utilities, as well as an API for building localization tools.")
14120 (license license:gpl2+)))
14121
14122 (define-public python2-translate-toolkit
14123 (package-with-python2 python-translate-toolkit))
14124
14125 (define-public python-packaging
14126 (package
14127 (name "python-packaging")
14128 (version "20.0")
14129 (source
14130 (origin
14131 (method url-fetch)
14132 (uri (pypi-uri "packaging" version))
14133 ;; XXX: The URL in the patch file is wrong, it should be
14134 ;; <https://github.com/pypa/packaging/pull/256>.
14135 (patches (search-patches "python-packaging-test-arch.patch"))
14136 (sha256
14137 (base32
14138 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14139 (build-system python-build-system)
14140 (arguments
14141 `(#:phases (modify-phases %standard-phases
14142 (replace 'check
14143 (lambda _ (invoke "py.test" "-vv"))))))
14144 (native-inputs
14145 `(("python-pretend" ,python-pretend)
14146 ("python-pytest" ,python-pytest)))
14147 (propagated-inputs
14148 `(("python-pyparsing" ,python-pyparsing)
14149 ("python-six" ,python-six)))
14150 (home-page "https://github.com/pypa/packaging")
14151 (synopsis "Core utilities for Python packages")
14152 (description "Packaging is a Python module for dealing with Python packages.
14153 It offers an interface for working with package versions, names, and dependency
14154 information.")
14155 ;; From 'LICENSE': This software is made available under the terms of
14156 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14157 ;; Contributions to this software is made under the terms of *both* these
14158 ;; licenses.
14159 (license (list license:asl2.0 license:bsd-2))))
14160
14161 (define-public python2-packaging
14162 (package-with-python2 python-packaging))
14163
14164 (define-public python-relatorio
14165 (package
14166 (name "python-relatorio")
14167 (version "0.8.0")
14168 (source
14169 (origin
14170 (method url-fetch)
14171 (uri (pypi-uri "relatorio" version))
14172 (sha256
14173 (base32
14174 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14175 (build-system python-build-system)
14176 (propagated-inputs
14177 `(("python-lxml" ,python-lxml)
14178 ("python-genshi" ,python-genshi)))
14179 (native-inputs
14180 `(("python-magic" ,python-magic)))
14181 (home-page "https://relatorio.tryton.org/")
14182 (synopsis "Templating library able to output ODT and PDF files")
14183 (description "Relatorio is a templating library which provides a way to
14184 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14185 for more filetypes can be easily added by creating plugins for them.")
14186 (license license:gpl3+)))
14187
14188 (define-public python2-relatorio
14189 (package-with-python2 python-relatorio))
14190
14191 (define-public python-radon
14192 (package
14193 (name "python-radon")
14194 (version "4.1.0")
14195 (source
14196 (origin
14197 (method url-fetch)
14198 (uri (pypi-uri "radon" version))
14199 (sha256
14200 (base32
14201 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14202 (build-system python-build-system)
14203 (arguments
14204 `(#:phases (modify-phases %standard-phases
14205 (replace 'check
14206 (lambda _
14207 (invoke "python" "radon/tests/run.py"))))))
14208 (propagated-inputs
14209 `(("python-colorama" ,python-colorama)
14210 ("python-flake8-polyfill" ,python-flake8-polyfill)
14211 ("python-mando" ,python-mando)))
14212 (native-inputs
14213 `(("python-pytest" ,python-pytest)
14214 ("python-pytest-mock" ,python-pytest-mock)))
14215 (home-page "https://radon.readthedocs.org/")
14216 (synopsis "Code Metrics in Python")
14217 (description "Radon is a Python tool which computes various code metrics.
14218 Supported metrics are:
14219 @itemize @bullet
14220 @item raw metrics: SLOC, comment lines, blank lines, &c.
14221 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14222 @item Halstead metrics (all of them)
14223 @item the Maintainability Index (a Visual Studio metric)
14224 @end itemize")
14225 (properties `((python2-variant . ,(delay python2-radon))))
14226 (license license:expat)))
14227
14228 (define-public python2-radon
14229 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14230 (package
14231 (inherit base)
14232 (propagated-inputs
14233 `(("python-configparser" ,python2-configparser)
14234 ("python-future" ,python2-future)
14235 ,@(package-propagated-inputs base))))))
14236
14237 (define-public python-sure
14238 (package
14239 (name "python-sure")
14240 (version "1.4.11")
14241 (source
14242 (origin
14243 (method url-fetch)
14244 (uri (pypi-uri "sure" version))
14245 (sha256
14246 (base32
14247 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14248 (build-system python-build-system)
14249 (propagated-inputs
14250 `(("python-mock" ,python-mock)
14251 ("python-six" ,python-six)))
14252 (native-inputs
14253 `(("python-nose" ,python-nose)))
14254 (home-page "https://github.com/gabrielfalcao/sure")
14255 (synopsis "Automated testing library in python for python")
14256 (description
14257 "Sure is a python library that leverages a DSL for writing assertions.
14258 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14259 (license license:gpl3+)))
14260
14261 (define-public python2-sure
14262 (package-with-python2 python-sure))
14263
14264 (define-public python2-couleur
14265 ;; This package does not seem to support python3 at all, hence,
14266 ;; only the python2 variant definition is provided.
14267 (package
14268 (name "python2-couleur")
14269 (version "0.6.2")
14270 (source
14271 (origin
14272 (method url-fetch)
14273 (uri (pypi-uri "couleur" version))
14274 (sha256
14275 (base32
14276 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14277 (build-system python-build-system)
14278 (arguments
14279 `(#:python ,python-2))
14280 (home-page "https://github.com/gabrielfalcao/couleur")
14281 (synopsis
14282 "ANSI terminal tool for python, colored shell and other handy fancy features")
14283 (description
14284 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14285 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14286 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14287 ;; https://github.com/gabrielfalcao/couleur/issues/11
14288 (license license:lgpl3+)))
14289
14290 (define-public python-misaka
14291 (package
14292 (name "python-misaka")
14293 (version "2.1.1")
14294 (source
14295 (origin
14296 (method url-fetch)
14297 (uri (pypi-uri "misaka" version))
14298 (sha256
14299 (base32
14300 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14301 (build-system python-build-system)
14302 (arguments
14303 `(;; Line 37 of setup.py calls self.run_command('develop')
14304 ;; in the 'check' phase. This command seems to be trying
14305 ;; to write to
14306 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14307 ;; for which it does not have the permission to write.
14308 #:tests? #f))
14309 (propagated-inputs
14310 `(("python-cffi" ,python-cffi)))
14311 (home-page "https://github.com/FSX/misaka")
14312 (synopsis "Python binding for Hoedown")
14313 (description
14314 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14315 library written in C. It features a fast HTML renderer and functionality to make custom
14316 renderers (e.g. man pages or LaTeX).")
14317 (license license:expat)))
14318
14319 (define-public python2-misaka
14320 (package-with-python2 python-misaka))
14321
14322 (define-public python2-steadymark
14323 ;; This is forced into being a python2 only variant
14324 ;; due to its dependence on couleur that has no support
14325 ;; for python3
14326 (package
14327 (name "python2-steadymark")
14328 (version "0.7.3")
14329 (source
14330 (origin
14331 (method url-fetch)
14332 (uri (pypi-uri "steadymark" version))
14333 (sha256
14334 (base32
14335 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14336 (build-system python-build-system)
14337 (native-inputs
14338 `(("python-couleur" ,python2-couleur)
14339 ("python-sure" ,python2-sure)
14340 ("python-misaka" ,python2-misaka)))
14341 (arguments
14342 `(#:python ,python-2
14343 #:phases
14344 (modify-phases %standard-phases
14345 (add-before 'build 'patch-setup-py
14346 (lambda _
14347 ;; Update requirements from dependency==version
14348 ;; to dependency>=version
14349 (substitute* "setup.py"
14350 (("==") ">="))
14351 #t)))))
14352 (home-page "https://github.com/gabrielfalcao/steadymark")
14353 (synopsis "Markdown-based test runner for python")
14354 (description
14355 "@code{Steadymark} allows documentation to be written in github-flavoured
14356 markdown. The documentation may contain snippets of code surrounded by python
14357 code blocks and @code{Steadymark} will find these snippets and run them, making
14358 sure that there are no old malfunctional examples in the documentation examples.")
14359 (license license:expat)))
14360
14361 (define-public python-jsonpointer
14362 (package
14363 (name "python-jsonpointer")
14364 (version "1.10")
14365 (source
14366 (origin
14367 (method url-fetch)
14368 (uri (pypi-uri "jsonpointer" version))
14369 (sha256
14370 (base32
14371 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14372 (build-system python-build-system)
14373 (home-page "https://github.com/stefankoegl/python-json-pointer")
14374 (synopsis "Identify specific nodes in a JSON document")
14375 (description "@code{jsonpointer} allows you to access specific nodes
14376 by path in a JSON document (see RFC 6901).")
14377 (license license:bsd-3)))
14378
14379 (define-public python2-jsonpointer
14380 (package-with-python2 python-jsonpointer))
14381
14382 (define-public python-jsonpatch
14383 (package
14384 (name "python-jsonpatch")
14385 (version "1.16")
14386 (source
14387 (origin
14388 (method git-fetch)
14389 ;; pypi version lacks tests.js
14390 (uri (git-reference
14391 (url "https://github.com/stefankoegl/python-json-patch")
14392 (commit (string-append "v" version))))
14393 (file-name (git-file-name name version))
14394 (sha256
14395 (base32
14396 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14397 (build-system python-build-system)
14398 (native-inputs
14399 `(("python-jsonpointer" ,python-jsonpointer)))
14400 (home-page "https://github.com/stefankoegl/python-json-patch")
14401 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14402 (description "@code{jsonpatch} is a library and program that allows
14403 applying JSON Patches according to RFC 6902.")
14404 (license license:bsd-3)))
14405
14406 (define-public python2-jsonpatch
14407 (package-with-python2 python-jsonpatch))
14408
14409 (define-public python-jsonpatch-0.4
14410 (package (inherit python-jsonpatch)
14411 (name "python-jsonpatch")
14412 (version "0.4")
14413 (source
14414 (origin
14415 (method git-fetch)
14416 (uri (git-reference
14417 (url "https://github.com/stefankoegl/python-json-patch")
14418 (commit (string-append "v" version))))
14419 (file-name (git-file-name name version))
14420 (sha256
14421 (base32
14422 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14423
14424 (define-public python2-jsonpatch-0.4
14425 (package-with-python2 python-jsonpatch-0.4))
14426
14427 (define-public python-rfc3986
14428 (package
14429 (name "python-rfc3986")
14430 (version "1.1.0")
14431 (source (origin
14432 (method url-fetch)
14433 (uri (pypi-uri "rfc3986" version))
14434 (sha256
14435 (base32
14436 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14437 (build-system python-build-system)
14438 (arguments
14439 `(#:modules ((guix build utils)
14440 (guix build python-build-system)
14441 (ice-9 ftw)
14442 (srfi srfi-1)
14443 (srfi srfi-26))
14444 #:phases
14445 (modify-phases %standard-phases
14446 (replace 'check
14447 (lambda _
14448 (let ((cwd (getcwd)))
14449 (setenv "PYTHONPATH"
14450 (string-append cwd "/build/"
14451 (find (cut string-prefix? "lib" <>)
14452 (scandir (string-append cwd "/build")))
14453 ":"
14454 (getenv "PYTHONPATH")))
14455 (invoke "pytest" "-v")))))))
14456 (native-inputs
14457 `(("python-pytest" ,python-pytest)))
14458 (home-page "https://rfc3986.readthedocs.io/")
14459 (synopsis "Parse and validate URI references")
14460 (description
14461 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14462 validation and authority parsing. This module also supports RFC@tie{}6874
14463 which adds support for zone identifiers to IPv6 addresses.")
14464 (license license:asl2.0)))
14465
14466 (define-public python2-rfc3986
14467 (package-with-python2 python-rfc3986))
14468
14469 (define-public python-rfc3987
14470 (package
14471 (name "python-rfc3987")
14472 (version "1.3.7")
14473 (source
14474 (origin
14475 (method url-fetch)
14476 (uri (pypi-uri "rfc3987" version))
14477 (sha256
14478 (base32
14479 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14480 (build-system python-build-system)
14481 (home-page "https://pypi.org/project/rfc3987/")
14482 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14483 (description "@code{rfc3987} provides routines for parsing and
14484 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14485 (license license:gpl3+)))
14486
14487 (define-public python2-rfc3987
14488 (package-with-python2 python-rfc3987))
14489
14490 (define-public python-validators
14491 (package
14492 (name "python-validators")
14493 (version "0.14.2")
14494 (source (origin
14495 (method url-fetch)
14496 (uri (pypi-uri "validators" version))
14497 (sha256
14498 (base32
14499 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14500 (build-system python-build-system)
14501 (arguments
14502 '(#:phases (modify-phases %standard-phases
14503 (replace 'check
14504 (lambda _
14505 (invoke "pytest" "-vv"))))))
14506 (propagated-inputs
14507 `(("python-decorator" ,python-decorator)
14508 ("python-six" ,python-six)))
14509 (native-inputs
14510 `(("python-flake8" ,python-flake8)
14511 ("python-isort" ,python-isort)
14512 ("python-pytest" ,python-pytest)))
14513 (home-page "https://github.com/kvesteri/validators")
14514 (synopsis "Data validation library")
14515 (description
14516 "This package contains validators for different things such as email
14517 addresses, IP addresses, URLs, hashes and more. It has been designed to
14518 be easy to use and not require defining a schema or form just to validate
14519 some input.")
14520 (license license:expat)))
14521
14522 (define-public python2-validators
14523 (package-with-python2 python-validators))
14524
14525 (define-public python-validate-email
14526 (package
14527 (name "python-validate-email")
14528 (version "1.3")
14529 (source
14530 (origin
14531 (method url-fetch)
14532 (uri (pypi-uri "validate_email" version))
14533 (sha256
14534 (base32
14535 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14536 (build-system python-build-system)
14537 (home-page "https://github.com/syrusakbary/validate_email")
14538 (synopsis "Verifies if an email address is valid and really exists")
14539 (description "@code{validate_email} can be used to verify if an email
14540 address is valid and really exists.")
14541 (license license:lgpl3+)))
14542
14543 (define-public python2-validate-email
14544 (package-with-python2 python-validate-email))
14545
14546 (define-public python-flex
14547 (package
14548 (name "python-flex")
14549 (version "6.10.0")
14550 (source
14551 (origin
14552 (method url-fetch)
14553 (uri (pypi-uri "flex" version))
14554 (sha256
14555 (base32
14556 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14557 (build-system python-build-system)
14558 (propagated-inputs
14559 `(("python-click" ,python-click)
14560 ("python-iso8601" ,python-iso8601)
14561 ("python-jsonpointer" ,python-jsonpointer)
14562 ("python-pyyaml" ,python-pyyaml)
14563 ("python-requests" ,python-requests)
14564 ("python-rfc3987" ,python-rfc3987)
14565 ("python-six" ,python-six)
14566 ("python-validate-email" ,python-validate-email)))
14567 (home-page "https://github.com/pipermerriam/flex")
14568 (synopsis "Validates Swagger schemata")
14569 (description "@code{flex} can be used to validate Swagger schemata.")
14570 (license license:bsd-3)))
14571
14572 (define-public python2-flex
14573 (package-with-python2 python-flex))
14574
14575 (define-public python-marshmallow
14576 (package
14577 (name "python-marshmallow")
14578 (version "3.0.0b14")
14579 (source
14580 (origin
14581 (method url-fetch)
14582 (uri (pypi-uri "marshmallow" version))
14583 (sha256
14584 (base32
14585 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14586 (build-system python-build-system)
14587 (propagated-inputs
14588 `(("python-dateutil" ,python-dateutil)
14589 ("python-simplejson" ,python-simplejson)))
14590 (native-inputs
14591 `(("python-pytest" ,python-pytest)
14592 ("python-pytz" ,python-pytz)))
14593 (home-page "https://github.com/marshmallow-code/marshmallow")
14594 (synopsis "Convert complex datatypes to and from native
14595 Python datatypes.")
14596 (description "@code{marshmallow} provides a library for converting
14597 complex datatypes to and from native Python datatypes.")
14598 (license license:expat)))
14599
14600 (define-public python2-marshmallow
14601 (package-with-python2 python-marshmallow))
14602
14603 (define-public python-apispec
14604 (package
14605 (name "python-apispec")
14606 (version "0.25.3")
14607 (source
14608 (origin
14609 (method url-fetch)
14610 (uri (pypi-uri "apispec" version))
14611 (sha256
14612 (base32
14613 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14614 (build-system python-build-system)
14615 (propagated-inputs
14616 `(("python-pyyaml" ,python-pyyaml)))
14617 (native-inputs
14618 `(("python-pytest" ,python-pytest)
14619 ("python-flask" ,python-flask)
14620 ("python-marshmallow" ,python-marshmallow)
14621 ("python-tornado" ,python-tornado)
14622 ("python-bottle" ,python-bottle)
14623 ("python-mock" ,python-mock)))
14624 (home-page "https://github.com/marshmallow-code/apispec")
14625 (synopsis "Swagger 2.0 API specification generator")
14626 (description "@code{python-apispec} is a pluggable API specification
14627 generator. Currently supports the OpenAPI specification (f.k.a.
14628 Swagger 2.0).")
14629 (license license:expat)))
14630
14631 (define-public python2-apispec
14632 (package-with-python2 python-apispec))
14633
14634 (define-public python-flasgger
14635 (package
14636 (name "python-flasgger")
14637 (version "0.6.3")
14638 (source
14639 (origin
14640 (method git-fetch)
14641 (uri (git-reference
14642 (url "https://github.com/rochacbruno/flasgger.git")
14643 (commit version)))
14644 (file-name (git-file-name name version))
14645 (sha256
14646 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14647 (build-system python-build-system)
14648 (arguments
14649 `(#:phases
14650 (modify-phases %standard-phases
14651 (replace 'check
14652 (lambda* (#:key inputs outputs #:allow-other-keys)
14653 (substitute* "Makefile"
14654 (("flake8 flasgger --ignore=F403")
14655 "flake8 flasgger --ignore=E731,F403"))
14656 (setenv "PYTHONPATH" (string-append (getcwd)
14657 ":"
14658 (getenv "PYTHONPATH")))
14659 (invoke "py.test"))))))
14660 (propagated-inputs
14661 `(("python-flask" ,python-flask)
14662 ("python-pyyaml" ,python-pyyaml)
14663 ("python-jsonschema" ,python-jsonschema)
14664 ("python-mistune" ,python-mistune)
14665 ("python-six" ,python-six)))
14666 (native-inputs
14667 `(("python-decorator" ,python-decorator)
14668 ("python-flake8" ,python-flake8)
14669 ("python-flask-restful" ,python-flask-restful)
14670 ("python-flex" ,python-flex)
14671 ("python-pytest" ,python-pytest)
14672 ("python-pytest-cov" ,python-pytest-cov)
14673 ("python-marshmallow" ,python-marshmallow)
14674 ("python-apispec" ,python-apispec)))
14675 (home-page "https://github.com/rochacbruno/flasgger/")
14676 (synopsis "Extract Swagger specs from your Flask project")
14677 (description "@code{python-flasgger} allows extracting Swagger specs
14678 from your Flask project. It is a fork of Flask-Swagger.")
14679 (license license:expat)))
14680
14681 (define-public python2-flasgger
14682 (package-with-python2 python-flasgger))
14683
14684 (define-public python-swagger-spec-validator
14685 (package
14686 (name "python-swagger-spec-validator")
14687 (version "2.4.3")
14688 (source
14689 (origin
14690 (method url-fetch)
14691 (uri (pypi-uri "swagger-spec-validator" version))
14692 (sha256
14693 (base32
14694 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
14695 (build-system python-build-system)
14696 (propagated-inputs
14697 `(("python-jsonschema" ,python-jsonschema)
14698 ("python-pyyaml" ,python-pyyaml)
14699 ("python-six" ,python-six)))
14700 (home-page
14701 "https://github.com/Yelp/swagger_spec_validator")
14702 (synopsis "Validation of Swagger specifications")
14703 (description "@code{swagger_spec_validator} provides a library for
14704 validating Swagger API specifications.")
14705 (license license:asl2.0)))
14706
14707 (define-public python2-swagger-spec-validator
14708 (package-with-python2 python-swagger-spec-validator))
14709
14710 (define-public python-apache-libcloud
14711 (package
14712 (name "python-apache-libcloud")
14713 (version "2.4.0")
14714 (source
14715 (origin
14716 (method url-fetch)
14717 (uri (pypi-uri "apache-libcloud" version))
14718 (sha256
14719 (base32
14720 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
14721 (build-system python-build-system)
14722 (arguments
14723 `(#:phases
14724 (modify-phases %standard-phases
14725 (add-after 'unpack 'patch-ssh
14726 (lambda* (#:key inputs #:allow-other-keys)
14727 (substitute* "libcloud/compute/ssh.py"
14728 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
14729 "/bin/ssh" "'")))
14730 #t))
14731 (add-after 'unpack 'patch-tests
14732 (lambda _
14733 (substitute* "./libcloud/test/test_file_fixtures.py"
14734 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
14735 (("def _ascii") "def _raw_data(self, method, url, body, headers):
14736 return (httplib.OK,
14737 \"1234abcd\",
14738 {\"test\": \"value\"},
14739 httplib.responses[httplib.OK])
14740 def _ascii"))
14741 (substitute* "libcloud/test/compute/test_ssh_client.py"
14742 (("class ShellOutSSHClientTests")
14743 "@unittest.skip(\"Guix container doesn't have ssh service\")
14744 class ShellOutSSHClientTests")
14745 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
14746 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
14747 (("'.xF0', '.x90', '.x8D', '.x88'")
14748 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
14749 #t))
14750 (add-before 'check 'copy-secret
14751 (lambda _
14752 (copy-file "libcloud/test/secrets.py-dist"
14753 "libcloud/test/secrets.py")
14754 #t)))))
14755 (inputs
14756 `(("openssh" ,openssh)))
14757 (propagated-inputs
14758 `(("python-paramiko" ,python-paramiko)
14759 ("python-requests" ,python-requests)))
14760 (native-inputs
14761 `(("python-lockfile" ,python-lockfile)
14762 ("python-mock" ,python-mock)
14763 ("python-pytest" ,python-pytest)
14764 ("python-pytest-runner" ,python-pytest-runner)
14765 ("python-requests-mock" ,python-requests-mock)))
14766 (home-page "https://libcloud.apache.org/")
14767 (synopsis "Unified Cloud API")
14768 (description "@code{libcloud} is a Python library for interacting with
14769 many of the popular cloud service providers using a unified API.")
14770 (license license:asl2.0)))
14771
14772 (define-public python2-apache-libcloud
14773 (package-with-python2 python-apache-libcloud))
14774
14775 (define-public python-smmap
14776 (package
14777 (name "python-smmap")
14778 (version "3.0.1")
14779 (source
14780 (origin
14781 (method url-fetch)
14782 (uri (pypi-uri "smmap" version))
14783 (sha256
14784 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
14785 (build-system python-build-system)
14786 (native-inputs
14787 `(("python-nosexcover" ,python-nosexcover)))
14788 (home-page "https://github.com/Byron/smmap")
14789 (synopsis "Python sliding window memory map manager")
14790 (description "@code{smmap} is a pure Python implementation of a sliding
14791 window memory map manager.")
14792 (license license:bsd-3)))
14793
14794 (define-public python-smmap2
14795 (deprecated-package "python-smmap2" python-smmap))
14796
14797 (define-public python2-smmap
14798 (package-with-python2 python-smmap))
14799
14800 (define-public python2-smmap2
14801 (deprecated-package "python2-smmap2" python2-smmap))
14802
14803 (define-public python-regex
14804 (package
14805 (name "python-regex")
14806 (version "2019.04.14")
14807 (source (origin
14808 (method url-fetch)
14809 (uri (pypi-uri "regex" version))
14810 (sha256
14811 (base32
14812 "1a6hhfs6l6snr1z654ay6wzbmwdkmv282fzfkd5hk2d1n73y8v6m"))))
14813 ;; TODO: Fix and enable regex_test.py tests that complain about the
14814 ;; test.support module not existing.
14815 (build-system python-build-system)
14816 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
14817 (synopsis "Alternative regular expression module")
14818 (description "This regular expression implementation is backwards-
14819 compatible with the standard @code{re} module, but offers additional
14820 functionality like full case-folding for case-insensitive matches in Unicode.")
14821 (license license:psfl)))
14822
14823 (define-public python2-regex
14824 (package-with-python2 python-regex))
14825
14826 (define-public python2-pyopengl
14827 (package
14828 (name "python2-pyopengl")
14829 (version "3.1.0")
14830 (source
14831 (origin
14832 (method url-fetch)
14833 (uri (pypi-uri "PyOpenGL" version))
14834 (sha256
14835 (base32
14836 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
14837 (arguments
14838 `(#:python ,python-2))
14839 (build-system python-build-system)
14840 (home-page "http://pyopengl.sourceforge.net")
14841 (synopsis "Standard OpenGL bindings for Python")
14842 (description
14843 "PyOpenGL is the most common cross platform Python binding to OpenGL and
14844 related APIs. The binding is created using the standard @code{ctypes}
14845 library.")
14846 (license license:bsd-3)))
14847
14848 (define-public python2-pyopengl-accelerate
14849 (package
14850 (inherit python2-pyopengl)
14851 (name "python2-pyopengl-accelerate")
14852 (version "3.1.0")
14853 (source
14854 (origin
14855 (method url-fetch)
14856 (uri (pypi-uri "PyOpenGL-accelerate" version))
14857 (sha256
14858 (base32
14859 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
14860 (synopsis "Acceleration code for PyOpenGL")
14861 (description
14862 "This is the Cython-coded accelerator module for PyOpenGL.")))
14863
14864 (define-public python-rencode
14865 (package
14866 (name "python-rencode")
14867 (version "1.0.5")
14868 (source
14869 (origin
14870 (method url-fetch)
14871 (uri (pypi-uri "rencode" version))
14872 (sha256
14873 (base32
14874 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
14875 (build-system python-build-system)
14876 (arguments
14877 `(#:phases
14878 (modify-phases %standard-phases
14879 (add-before 'check 'delete-bogus-test
14880 ;; This test requires /home/aresch/Downloads, which is not provided by
14881 ;; the build environment.
14882 (lambda _
14883 (delete-file "rencode/t.py")
14884 #t)))))
14885 (native-inputs `(("pkg-config" ,pkg-config)
14886 ("python-cython" ,python-cython)))
14887 (home-page "https://github.com/aresch/rencode")
14888 (synopsis "Serialization of heterogeneous data structures")
14889 (description
14890 "The @code{rencode} module is a data structure serialization library,
14891 similar to @code{bencode} from the BitTorrent project. For complex,
14892 heterogeneous data structures with many small elements, r-encoding stake up
14893 significantly less space than b-encodings. This version of rencode is a
14894 complete rewrite in Cython to attempt to increase the performance over the
14895 pure Python module.")
14896 (license license:bsd-3)))
14897
14898 (define-public python2-rencode
14899 (package-with-python2 python-rencode))
14900
14901 (define-public python-xenon
14902 (package
14903 (name "python-xenon")
14904 (version "0.7.0")
14905 (source
14906 (origin
14907 (method url-fetch)
14908 (uri (pypi-uri "xenon" version))
14909 (sha256
14910 (base32
14911 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
14912 (build-system python-build-system)
14913 (native-inputs
14914 `(("python-pyyaml" ,python-pyyaml)
14915 ("python-radon" ,python-radon)
14916 ("python-requests" ,python-requests)
14917 ("python-flake8" ,python-flake8)
14918 ("python-tox" ,python-tox)))
14919 (arguments
14920 `(#:tests? #f ;test suite not shipped with the PyPI archive
14921 #:phases
14922 (modify-phases %standard-phases
14923 (add-before 'build 'patch-test-requirements
14924 (lambda _
14925 ;; Remove httpretty dependency for tests.
14926 (substitute* "setup.py"
14927 (("httpretty") ""))
14928 #t)))))
14929 (home-page "https://xenon.readthedocs.org/")
14930 (synopsis "Monitor code metrics for Python on your CI server")
14931 (description
14932 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
14933 Ideally, @code{xenon} is run every time code is committed. Through command
14934 line options, various thresholds can be set for the complexity of code. It
14935 will fail (i.e. it will exit with a non-zero exit code) when any of these
14936 requirements is not met.")
14937 (license license:expat)))
14938
14939 (define-public python2-xenon
14940 (package-with-python2 python-xenon))
14941
14942 (define-public python-pysocks
14943 (package
14944 (name "python-pysocks")
14945 (version "1.7.0")
14946 (source
14947 (origin
14948 (method url-fetch)
14949 (uri (pypi-uri "PySocks" version))
14950 (sha256
14951 (base32
14952 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
14953 (build-system python-build-system)
14954 (arguments `(#:tests? #f))
14955 (home-page "https://github.com/Anorov/PySocks")
14956 (synopsis "SOCKS client module")
14957 (description "@code{pysocks} is an updated and semi-actively maintained
14958 version of @code{SocksiPy} with bug fixes and extra features.")
14959 (license license:bsd-3)))
14960
14961 (define-public python2-pysocks
14962 (package-with-python2 python-pysocks))
14963
14964 (define-public python-pydiff
14965 (package
14966 (name "python-pydiff")
14967 (version "0.2")
14968 (source
14969 (origin
14970 (method url-fetch)
14971 (uri (pypi-uri "pydiff" version))
14972 (sha256
14973 (base32
14974 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
14975 (build-system python-build-system)
14976 (home-page "https://github.com/myint/pydiff")
14977 (synopsis "Library to diff two Python files at the bytecode level")
14978 (description
14979 "@code{pydiff} makes it easy to look for actual code changes while
14980 ignoring formatting changes.")
14981 (license license:expat)))
14982
14983 (define-public python2-pydiff
14984 (package-with-python2 python-pydiff))
14985
14986 (define-public python-tqdm
14987 (package
14988 (name "python-tqdm")
14989 (version "4.43.0")
14990 (source
14991 (origin
14992 (method url-fetch)
14993 (uri (pypi-uri "tqdm" version))
14994 (sha256
14995 (base32
14996 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
14997 (build-system python-build-system)
14998 (arguments
14999 '(#:phases (modify-phases %standard-phases
15000 (replace 'check
15001 (lambda* (#:key inputs outputs #:allow-other-keys)
15002 (add-installed-pythonpath inputs outputs)
15003 ;; This invokation is taken from tox.ini.
15004 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15005 "-d" "-v" "tqdm/"))))))
15006 (native-inputs
15007 `(("python-nose" ,python-nose)))
15008 (home-page "https://github.com/tqdm/tqdm")
15009 (synopsis "Fast, extensible progress meter")
15010 (description
15011 "Make loops show a progress bar on the console by just wrapping any
15012 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15013 design and layout.")
15014 (license (list license:mpl2.0 license:expat))))
15015
15016 (define-public python2-tqdm
15017 (package-with-python2 python-tqdm))
15018
15019 (define-public python-pkginfo
15020 (package
15021 (name "python-pkginfo")
15022 (version "1.4.2")
15023 (source
15024 (origin
15025 (method url-fetch)
15026 (uri (pypi-uri "pkginfo" version))
15027 (sha256
15028 (base32
15029 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15030 (build-system python-build-system)
15031 (arguments
15032 ;; The tests are broken upstream.
15033 '(#:tests? #f))
15034 (home-page
15035 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15036 (synopsis
15037 "Query metadatdata from sdists, bdists, and installed packages")
15038 (description
15039 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15040 source distriubtion (an sdist) or a binary distribution (e.g., created by
15041 running bdist_egg). It can also query the EGG-INFO directory of an installed
15042 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15043 created by running @code{python setup.py develop}).")
15044 (license license:expat)))
15045
15046 (define-public python2-pkginfo
15047 (package-with-python2 python-pkginfo))
15048
15049 (define-public python-twine
15050 (package
15051 (name "python-twine")
15052 (version "1.9.1")
15053 (source
15054 (origin
15055 (method url-fetch)
15056 (uri (pypi-uri "twine" version))
15057 (sha256
15058 (base32
15059 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15060 (build-system python-build-system)
15061 (propagated-inputs
15062 `(("python-tqdm" ,python-tqdm)
15063 ("python-pkginfo" ,python-pkginfo)
15064 ("python-requests" ,python-requests)
15065 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15066 (home-page "https://github.com/pypa/twine")
15067 (synopsis "Collection of utilities for interacting with PyPI")
15068 (description
15069 "@code{twine} currently supports registering projects and uploading
15070 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15071 their files and supports any packaging format (including wheels).")
15072 (license license:asl2.0)))
15073
15074 (define-public python2-twine
15075 (package-with-python2 python-twine))
15076
15077 (define-public python-linecache2
15078 (package
15079 (name "python-linecache2")
15080 (version "1.0.0")
15081 (source
15082 (origin
15083 (method url-fetch)
15084 (uri (pypi-uri "linecache2" version))
15085 (sha256
15086 (base32
15087 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15088 (build-system python-build-system)
15089 (arguments
15090 `(;; The tests depend on unittest2, and our version is a bit too old.
15091 #:tests? #f))
15092 (native-inputs
15093 `(("python-pbr" ,python-pbr-minimal)))
15094 (home-page
15095 "https://github.com/testing-cabal/linecache2")
15096 (synopsis "Backports of the linecache module")
15097 (description
15098 "The linecache module allows one to get any line from any file, while
15099 attempting to optimize internally, using a cache, the common case where many
15100 lines are read from a single file.")
15101 (license license:psfl)))
15102
15103 (define-public python2-linecache2
15104 (package-with-python2 python-linecache2))
15105
15106 (define-public python-traceback2
15107 (package
15108 (name "python-traceback2")
15109 (version "1.4.0")
15110 (source
15111 (origin
15112 (method url-fetch)
15113 (uri (pypi-uri "traceback2" version))
15114 (sha256
15115 (base32
15116 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15117 (build-system python-build-system)
15118 (arguments
15119 `(;; python-traceback2 and python-unittest2 depend on one another.
15120 #:tests? #f))
15121 (native-inputs
15122 `(("python-pbr" ,python-pbr-minimal)))
15123 (propagated-inputs
15124 `(("python-linecache2" ,python-linecache2)))
15125 (home-page
15126 "https://github.com/testing-cabal/traceback2")
15127 (synopsis "Backports of the traceback module")
15128 (description
15129 "This module provides a standard interface to extract, format and print
15130 stack traces of Python programs. It exactly mimics the behavior of the Python
15131 interpreter when it prints a stack trace.")
15132 (license license:psfl)))
15133
15134 (define-public python2-traceback2
15135 (package-with-python2 python-traceback2))
15136
15137 (define-public python-ratelimiter
15138 (package
15139 (name "python-ratelimiter")
15140 (version "1.2.0")
15141 (source
15142 (origin
15143 (method url-fetch)
15144 (uri (pypi-uri "ratelimiter" version))
15145 (sha256
15146 (base32
15147 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15148 (build-system python-build-system)
15149 (arguments
15150 '(#:tests? #f)) ; There are no tests in the pypi archive.
15151 (home-page "https://github.com/RazerM/ratelimiter")
15152 (synopsis "Simple rate limiting object")
15153 (description
15154 "The @code{ratelimiter} module ensures that an operation will not be
15155 executed more than a given number of times during a given period.")
15156 (license license:asl2.0)))
15157
15158 (define-public python2-ratelimiter
15159 (package-with-python2 python-ratelimiter))
15160
15161 (define-public python-dukpy
15162 (package
15163 (name "python-dukpy")
15164 (version "0.3")
15165 (source
15166 (origin
15167 (method git-fetch)
15168 (uri (git-reference
15169 (url "https://github.com/kovidgoyal/dukpy.git")
15170 (commit (string-append "v" version))))
15171 (file-name (git-file-name name version))
15172 (sha256
15173 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15174 (build-system python-build-system)
15175 (home-page "https://github.com/kovidgoyal/dukpy")
15176 (synopsis "Run JavaScript in python")
15177 (description
15178 "dukpy is a JavaScript runtime environment for Python using the duktape
15179 embeddable JavaScript engine.")
15180 ;; Dukpy is licensed under MIT like the embedded duktape library,
15181 ;; with 'errors.c' as GPL3.
15182 (license (list license:expat license:gpl3))))
15183
15184 (define-public python2-dukpy
15185 (package-with-python2 python-dukpy))
15186
15187 (define-public python-jsonrpclib-pelix
15188 (package
15189 (name "python-jsonrpclib-pelix")
15190 (version "0.3.2")
15191 (source
15192 (origin
15193 (method url-fetch)
15194 (uri (pypi-uri "jsonrpclib-pelix" version))
15195 (sha256
15196 (base32
15197 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15198 (build-system python-build-system)
15199 (arguments
15200 `(#:tests? #f)) ; no tests in PyPI tarball
15201 (home-page "https://github.com/tcalmant/jsonrpclib/")
15202 (synopsis "JSON-RPC 2.0 client library for Python")
15203 (description
15204 "This library implements the JSON-RPC v2.0
15205 specification (backwards-compatible) as a client library for Python. This
15206 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15207 services.")
15208 (license license:asl2.0)))
15209
15210 (define-public python2-jsonrpclib-pelix
15211 (package-with-python2 python-jsonrpclib-pelix))
15212
15213 (define-public python-setuptools-scm-git-archive
15214 (package
15215 (name "python-setuptools-scm-git-archive")
15216 (version "1.0")
15217 (source
15218 (origin
15219 (method url-fetch)
15220 (uri (pypi-uri "setuptools_scm_git_archive" version))
15221 (sha256
15222 (base32
15223 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15224 (build-system python-build-system)
15225 (native-inputs
15226 `(("python-pytest" ,python-pytest)))
15227 (propagated-inputs
15228 `(("python-setuptools-scm" ,python-setuptools-scm)))
15229 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15230 (synopsis "Setuptools_scm plugin for git archives")
15231 (description
15232 "The setuptools_scm_git_archive package is a plugin to
15233 setuptools_scm, which supports obtaining versions from git archives that
15234 belong to tagged versions.")
15235 (license license:expat)))
15236
15237 (define-public python2-setuptools-scm-git-archive
15238 (package-with-python2 python-setuptools-scm-git-archive))
15239
15240 (define-public python-setuptools-git
15241 (package
15242 (name "python-setuptools-git")
15243 (version "1.2")
15244 (source
15245 (origin
15246 (method url-fetch)
15247 (uri (pypi-uri "setuptools-git" version))
15248 (sha256
15249 (base32
15250 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15251 (build-system python-build-system)
15252 (arguments
15253 `(#:phases
15254 (modify-phases %standard-phases
15255 ;; This is needed for tests.
15256 (add-after 'unpack 'configure-git
15257 (lambda _
15258 (setenv "HOME" "/tmp")
15259 (invoke "git" "config" "--global" "user.email" "guix")
15260 (invoke "git" "config" "--global" "user.name" "guix")
15261 #t)))))
15262 (native-inputs
15263 `(("git" ,git-minimal)))
15264 (home-page "https://github.com/msabramo/setuptools-git")
15265 (synopsis "Setuptools revision control system plugin for Git")
15266 (description
15267 "This package provides a plugin for Setuptools for revision control with
15268 Git.")
15269 (license license:bsd-3)))
15270
15271 (define-public python-pyclipper
15272 (package
15273 (name "python-pyclipper")
15274 (version "1.1.0.post3")
15275 (source
15276 (origin
15277 (method url-fetch)
15278 (uri (pypi-uri "pyclipper" version ".zip"))
15279 (sha256
15280 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15281 (modules '((guix build utils)))
15282 (snippet
15283 '(begin
15284 ;; This file is generated by Cython.
15285 (delete-file "pyclipper/pyclipper.cpp") #t))))
15286 (build-system python-build-system)
15287 (arguments
15288 `(#:phases
15289 (modify-phases %standard-phases
15290 (add-before 'build 'cythonize-sources
15291 (lambda _
15292 (with-directory-excursion "pyclipper"
15293 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15294 (propagated-inputs
15295 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15296 (native-inputs
15297 `(("python-cython" ,python-cython)
15298 ("python-pytest" ,python-pytest)
15299 ("python-pytest-runner" ,python-pytest-runner)
15300 ("python-unittest2" ,python-unittest2)
15301 ("unzip" ,unzip)))
15302 (home-page "https://github.com/greginvm/pyclipper")
15303 (synopsis "Wrapper for Angus Johnson's Clipper library")
15304 (description
15305 "Pyclipper is a Cython wrapper for the C++ translation of the
15306 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15307 (license license:expat)))
15308
15309 (define-public python2-pyclipper
15310 (package-with-python2 python-pyclipper))
15311
15312 (define-public python2-booleanoperations
15313 (package
15314 (name "python2-booleanoperations")
15315 (version "0.7.1")
15316 (source
15317 (origin
15318 (method url-fetch)
15319 (uri (pypi-uri "booleanOperations" version ".zip"))
15320 (sha256
15321 (base32
15322 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15323 (build-system python-build-system)
15324 (arguments
15325 `(#:python ,python-2))
15326 (native-inputs
15327 `(("unzip" ,unzip)
15328 ("python2-pytest" ,python2-pytest)
15329 ("python2-pytest-runner" ,python2-pytest-runner)))
15330 (propagated-inputs
15331 `(("python-fonttools" ,python2-fonttools)
15332 ("python-pyclipper" ,python2-pyclipper)
15333 ("python-ufolib" ,python2-ufolib)))
15334 (home-page "https://github.com/typemytype/booleanOperations")
15335 (synopsis "Boolean operations on paths")
15336 (description
15337 "BooleanOperations provides a Python library that enables
15338 boolean operations on paths.")
15339 (license license:expat)))
15340
15341 (define-public python-tempdir
15342 (package
15343 (name "python-tempdir")
15344 (version "0.7.1")
15345 (source
15346 (origin
15347 (method url-fetch)
15348 (uri (pypi-uri "tempdir" version))
15349 (sha256
15350 (base32
15351 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15352 (build-system python-build-system)
15353 (home-page "https://pypi.org/project/tempdir/")
15354 (arguments
15355 ;; the package has no tests
15356 '(#:tests? #f))
15357 (synopsis "Python library for managing temporary directories")
15358 (description
15359 "This library manages temporary directories that are automatically
15360 deleted with all their contents when they are no longer needed. It is
15361 particularly convenient for use in tests.")
15362 (license license:expat)))
15363
15364 (define-public python2-tempdir
15365 (package-with-python2 python-tempdir))
15366
15367 (define-public python-activepapers
15368 (package
15369 (name "python-activepapers")
15370 (version "0.2.2")
15371 (source
15372 (origin
15373 (method url-fetch)
15374 (uri (pypi-uri "ActivePapers.Py" version))
15375 (sha256
15376 (base32
15377 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15378 (build-system python-build-system)
15379 (arguments
15380 `(#:modules ((ice-9 ftw)
15381 (srfi srfi-1)
15382 (guix build utils)
15383 (guix build python-build-system))
15384
15385 #:phases
15386 (modify-phases %standard-phases
15387 (add-after 'unpack 'delete-python2-code
15388 (lambda _
15389 (for-each delete-file
15390 '("lib/activepapers/builtins2.py"
15391 "lib/activepapers/standardlib2.py"
15392 "lib/activepapers/utility2.py"))))
15393 (replace 'check
15394 (lambda _
15395 ;; Deactivate the test cases that download files
15396 (setenv "NO_NETWORK_ACCESS" "1")
15397 ;; For some strange reason, some tests fail if nosetests runs all
15398 ;; test modules in a single execution. They pass if each test
15399 ;; module is run individually.
15400 (for-each (lambda (filename)
15401 (invoke "nosetests"
15402 (string-append "tests/" filename)))
15403 (scandir "tests"
15404 (lambda (filename)
15405 (string-suffix? ".py" filename)))))))))
15406 (native-inputs
15407 `(("python-tempdir" ,python-tempdir)
15408 ("python-nose" ,python-nose)))
15409 (propagated-inputs
15410 `(("python-h5py" ,python-h5py)))
15411 (home-page "https://www.activepapers.org/")
15412 (synopsis "Executable papers for scientific computing")
15413 (description
15414 "ActivePapers is a tool for working with executable papers, which
15415 combine data, code, and documentation in single-file packages,
15416 suitable for publication as supplementary material or on repositories
15417 such as figshare or Zenodo.")
15418 (properties `((python2-variant . ,(delay python2-activepapers))))
15419 (license license:bsd-3)))
15420
15421 (define-public python2-activepapers
15422 (let ((base (package-with-python2
15423 (strip-python2-variant python-activepapers))))
15424 (package
15425 (inherit base)
15426 (arguments
15427 (substitute-keyword-arguments (package-arguments base)
15428 ((#:phases phases)
15429 `(modify-phases ,phases
15430 (delete 'delete-python2-code)
15431 (add-after 'unpack 'delete-python3-code
15432 (lambda _
15433 (for-each delete-file
15434 '("lib/activepapers/builtins3.py"
15435 "lib/activepapers/standardlib3.py"
15436 "lib/activepapers/utility3.py")))))))))))
15437
15438 (define-public python-semver
15439 (package
15440 (name "python-semver")
15441 (version "2.9.0")
15442 (source
15443 (origin
15444 (method url-fetch)
15445 (uri (pypi-uri "semver" version))
15446 (sha256
15447 (base32
15448 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15449 (build-system python-build-system)
15450 (native-inputs
15451 `(("python-appdirs" ,python-appdirs)
15452 ("python-distlib" ,python-distlib)
15453 ("python-importlib-metadata" ,python-importlib-metadata)
15454 ("python-filelock" ,python-filelock)
15455 ("python-six" ,python-six)
15456 ("python-tox" ,python-tox)
15457 ("python-virtualenv" ,python-virtualenv)))
15458 (home-page "https://github.com/k-bx/python-semver")
15459 (synopsis "Python helper for Semantic Versioning")
15460 (description "This package provides a Python library for
15461 @url{Semantic Versioning, http://semver.org/}.")
15462 (license license:bsd-3)))
15463
15464 (define-public python2-semver
15465 (package-with-python2 python-semver))
15466
15467 (define-public python-pyro4
15468 (package
15469 (name "python-pyro4")
15470 (version "4.77")
15471 (source
15472 (origin
15473 (method url-fetch)
15474 (uri (pypi-uri "Pyro4" version))
15475 (sha256
15476 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15477 (build-system python-build-system)
15478 (arguments
15479 '(#:tests? #f)) ;FIXME: Some tests require network access.
15480 (native-inputs
15481 `(("python-cloudpickle" ,python-cloudpickle)
15482 ("python-dill" ,python-dill)
15483 ("python-msgpack" ,python-msgpack)))
15484 (propagated-inputs
15485 `(("python-serpent" ,python-serpent)))
15486 (home-page "https://pyro4.readthedocs.io")
15487 (synopsis "Distributed object middleware for Python")
15488 (description
15489 "Pyro enables you to build applications in which objects can talk to each
15490 other over the network. You can just use normal Python method calls to call
15491 objects on other machines, also known as remote procedure calls (RPC).")
15492 (license license:expat)))
15493
15494 (define-public python2-pyro
15495 (package
15496 (name "python2-pyro")
15497 (version "3.16")
15498 (source
15499 (origin
15500 (method url-fetch)
15501 (uri (pypi-uri "Pyro" version))
15502 (file-name (string-append "Pyro-" version ".tar.gz"))
15503 (sha256
15504 (base32
15505 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15506 (build-system python-build-system)
15507 (arguments
15508 ;; Pyro is not compatible with Python 3
15509 `(#:python ,python-2
15510 ;; Pyro has no test cases for automatic execution
15511 #:tests? #f))
15512 (home-page "https://pythonhosted.org/Pyro/")
15513 (synopsis "Distributed object manager for Python")
15514 (description "Pyro is a Distributed Object Technology system
15515 written in Python that is designed to be easy to use. It resembles
15516 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15517 which is a system and language independent Distributed Object Technology
15518 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15519 longer maintained. New projects should use Pyro4 instead, which
15520 is the new Pyro version that is actively developed.")
15521 (license license:expat)))
15522
15523 (define-public python2-scientific
15524 (package
15525 (name "python2-scientific")
15526 (version "2.9.4")
15527 (source
15528 (origin
15529 (method git-fetch)
15530 (uri (git-reference
15531 (url "https://github.com/khinsen/ScientificPython")
15532 (commit (string-append "rel" version))))
15533 (file-name (git-file-name name version))
15534 (sha256
15535 (base32
15536 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15537 (build-system python-build-system)
15538 (inputs
15539 `(("netcdf" ,netcdf)))
15540 (propagated-inputs
15541 `(("python-numpy" ,python2-numpy-1.8)
15542 ("python-pyro" ,python2-pyro)))
15543 (arguments
15544 ;; ScientificPython is not compatible with Python 3
15545 `(#:python ,python-2
15546 #:tests? #f ; No test suite
15547 #:phases
15548 (modify-phases %standard-phases
15549 (replace 'build
15550 (lambda* (#:key inputs #:allow-other-keys)
15551 (invoke "python" "setup.py" "build"
15552 (string-append "--netcdf_prefix="
15553 (assoc-ref inputs "netcdf"))))))))
15554 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15555 (synopsis "Python modules for scientific computing")
15556 (description "ScientificPython is a collection of Python modules that are
15557 useful for scientific computing. Most modules are rather general (Geometry,
15558 physical units, automatic derivatives, ...) whereas others are more
15559 domain-specific (e.g. netCDF and PDB support). The library is currently
15560 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15561 (license license:cecill-c)))
15562
15563 (define-public python2-mmtk
15564 (package
15565 (name "python2-mmtk")
15566 (version "2.7.12")
15567 (source
15568 (origin
15569 (method git-fetch)
15570 (uri (git-reference
15571 (url "https://github.com/khinsen/MMTK")
15572 (commit (string-append "rel" version))))
15573 (file-name (git-file-name name version))
15574 (sha256
15575 (base32
15576 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15577 (build-system python-build-system)
15578 (native-inputs
15579 `(("netcdf" ,netcdf)))
15580 (propagated-inputs
15581 `(("python-scientific" ,python2-scientific)
15582 ("python-tkinter" ,python-2 "tk")))
15583 (arguments
15584 `(#:python ,python-2
15585 #:tests? #f
15586 #:phases
15587 (modify-phases %standard-phases
15588 (add-before 'build 'includes-from-scientific
15589 (lambda* (#:key inputs #:allow-other-keys)
15590 (mkdir-p "Include/Scientific")
15591 (copy-recursively
15592 (string-append
15593 (assoc-ref inputs "python-scientific")
15594 "/include/python2.7/Scientific")
15595 "Include/Scientific"))))))
15596 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15597 (synopsis "Python library for molecular simulation")
15598 (description "MMTK is a library for molecular simulations with an emphasis
15599 on biomolecules. It provides widely used methods such as Molecular Dynamics
15600 and normal mode analysis, but also basic routines for implementing new methods
15601 for simulation and analysis. The library is currently not actively maintained
15602 and works only with Python 2 and NumPy < 1.9.")
15603 (license license:cecill-c)))
15604
15605 (define-public python-phonenumbers
15606 (package
15607 (name "python-phonenumbers")
15608 (version "8.9.1")
15609 (source
15610 (origin
15611 (method url-fetch)
15612 (uri (pypi-uri "phonenumbers" version))
15613 (sha256
15614 (base32
15615 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15616 (build-system python-build-system)
15617 (home-page
15618 "https://github.com/daviddrysdale/python-phonenumbers")
15619 (synopsis
15620 "Python library for dealing with international phone numbers")
15621 (description
15622 "This package provides a Python port of Google's libphonenumber library.")
15623 (license license:asl2.0)))
15624
15625 (define-public python2-phonenumbers
15626 (package-with-python2 python-phonenumbers))
15627
15628 (define-public python-send2trash
15629 (package
15630 (name "python-send2trash")
15631 (version "1.5.0")
15632 (source
15633 (origin (method git-fetch)
15634 ;; Source tarball on PyPI doesn't include tests.
15635 (uri (git-reference
15636 (url "https://github.com/hsoft/send2trash.git")
15637 (commit version)))
15638 (file-name (git-file-name name version))
15639 (sha256
15640 (base32
15641 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15642 (build-system python-build-system)
15643 (arguments
15644 '(#:phases
15645 (modify-phases %standard-phases
15646 (add-before 'check 'pre-check
15647 (lambda _
15648 (mkdir-p "/tmp/foo")
15649 (setenv "HOME" "/tmp/foo")
15650 #t)))))
15651 (home-page "https://github.com/hsoft/send2trash")
15652 (synopsis "Send files to the user's @file{~/Trash} directory")
15653 (description "This package provides a Python library to send files to the
15654 user's @file{~/Trash} directory.")
15655 (properties `((python2-variant . ,(delay python2-send2trash))))
15656 (license license:bsd-3)))
15657
15658 (define-public python2-send2trash
15659 (package
15660 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15661 (arguments
15662 (substitute-keyword-arguments (package-arguments python-send2trash)
15663 ((#:phases phases)
15664 `(modify-phases ,phases
15665 (add-before 'check 'setenv
15666 (lambda _
15667 (setenv "PYTHONPATH"
15668 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15669 #t))))))))
15670
15671 (define-public python-yapf
15672 (package
15673 (name "python-yapf")
15674 (version "0.29.0")
15675 (source
15676 (origin
15677 (method url-fetch)
15678 (uri (pypi-uri "yapf" version))
15679 (sha256
15680 (base32
15681 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
15682 (build-system python-build-system)
15683 (home-page "https://github.com/google/yapf")
15684 (synopsis "Formatter for Python code")
15685 (description "YAPF is a formatter for Python code. It's based off of
15686 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
15687 takes the code and reformats it to the best formatting that conforms to the
15688 style guide, even if the original code didn't violate the style guide.")
15689 (license license:asl2.0)))
15690
15691 (define-public python2-yapf
15692 (package-with-python2 python-yapf))
15693
15694 (define-public python-gyp
15695 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
15696 (revision "0"))
15697 (package
15698 (name "python-gyp")
15699 ;; Google does not release versions,
15700 ;; based on second most recent commit date.
15701 (version (git-version "0.0.0" revision commit))
15702 (source
15703 (origin
15704 ;; Google does not release tarballs,
15705 ;; git checkout is needed.
15706 (method git-fetch)
15707 (uri (git-reference
15708 (url "https://chromium.googlesource.com/external/gyp")
15709 (commit commit)))
15710 (file-name (git-file-name name version))
15711 (sha256
15712 (base32
15713 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
15714 (build-system python-build-system)
15715 (home-page "https://gyp.gsrc.io/")
15716 (synopsis "GYP is a Meta-Build system")
15717 (description
15718 "GYP builds build systems for large, cross platform applications.
15719 It can be used to generate XCode projects, Visual Studio projects, Ninja build
15720 files, and Makefiles.")
15721 (license license:bsd-3))))
15722
15723 (define-public python2-gyp
15724 (package-with-python2 python-gyp))
15725
15726 (define-public python-whatever
15727 (package
15728 (name "python-whatever")
15729 (version "0.6")
15730 (source
15731 (origin
15732 (method git-fetch)
15733 (uri (git-reference
15734 (url "https://github.com/Suor/whatever")
15735 (commit version)))
15736 (file-name (git-file-name name version))
15737 (sha256
15738 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
15739 (build-system python-build-system)
15740 (arguments
15741 `(#:phases
15742 (modify-phases %standard-phases
15743 (replace 'check
15744 (lambda _
15745 (invoke "py.test"))))))
15746 (native-inputs
15747 `(("python-pytest" ,python-pytest)))
15748 (home-page "http://github.com/Suor/whatever")
15749 (synopsis "Make anonymous functions by partial application of operators")
15750 (description "@code{whatever} provides an easy way to make anonymous
15751 functions by partial application of operators.")
15752 (license license:bsd-3)))
15753
15754 (define-public python2-whatever
15755 (package-with-python2 python-whatever))
15756
15757 (define-public python-funcy
15758 (package
15759 (name "python-funcy")
15760 (version "1.11")
15761 (source
15762 (origin
15763 (method git-fetch)
15764 (uri (git-reference
15765 (url "https://github.com/Suor/funcy.git")
15766 (commit version)))
15767 (sha256
15768 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
15769 (file-name (git-file-name name version))))
15770 (build-system python-build-system)
15771 (arguments
15772 `(#:phases
15773 (modify-phases %standard-phases
15774 (replace 'check
15775 (lambda _
15776 (invoke "py.test"))))))
15777 (native-inputs
15778 `(("python-pytest" ,python-pytest)
15779 ("python-whatever" ,python-whatever)))
15780 (home-page "http://github.com/Suor/funcy")
15781 (synopsis "Functional tools")
15782 (description "@code{funcy} is a library that provides functional tools.
15783 Examples are:
15784 @enumerate
15785 @item merge - Merges collections of the same type
15786 @item walk - Type-preserving map
15787 @item select - Selects a part of a collection
15788 @item take - Takes the first n items of a collection
15789 @item first - Takes the first item of a collection
15790 @item remove - Predicated-removes items of a collection
15791 @item concat - Concatenates two collections
15792 @item flatten - Flattens a collection with subcollections
15793 @item distinct - Returns only distinct items
15794 @item split - Predicated-splits a collection
15795 @item split_at - Splits a collection at a given item
15796 @item group_by - Groups items by group
15797 @item pairwise - Pairs off adjacent items
15798 @item partial - Partially-applies a function
15799 @item curry - Curries a function
15800 @item compose - Composes functions
15801 @item complement - Complements a predicate
15802 @item all_fn - \"all\" with predicate
15803 @end enumerate")
15804 (license license:bsd-3)))
15805
15806 (define-public python2-funcy
15807 (package-with-python2 python-funcy))
15808
15809 (define-public python-isoweek
15810 (package
15811 (name "python-isoweek")
15812 (version "1.3.3")
15813 (source
15814 (origin
15815 (method url-fetch)
15816 (uri (pypi-uri "isoweek" version))
15817 (sha256
15818 (base32
15819 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
15820 (build-system python-build-system)
15821 (home-page "https://github.com/gisle/isoweek")
15822 (synopsis "Objects representing a week")
15823 (description "The @code{isoweek} module provide the class Week that
15824 implements the week definition of ISO 8601. This standard also defines
15825 a notation for identifying weeks; yyyyWww (where the W is a literal).
15826 Week instances stringify to this form.")
15827 (license license:bsd-3)))
15828
15829 (define-public python2-isoweek
15830 (package-with-python2 python-isoweek))
15831
15832 (define-public python-tokenize-rt
15833 (package
15834 (name "python-tokenize-rt")
15835 (version "2.0.1")
15836 (source
15837 (origin
15838 (method url-fetch)
15839 (uri (pypi-uri "tokenize-rt" version))
15840 (sha256
15841 (base32
15842 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
15843 (build-system python-build-system)
15844 (home-page "https://github.com/asottile/tokenize-rt")
15845 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
15846 (description
15847 "This Python library is a wrapper around @code{tokenize} from the Python
15848 standard library. It provides two additional tokens @code{ESCAPED_NL} and
15849 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
15850 and @code{tokens_to_src} to roundtrip.")
15851 (license license:expat)))
15852
15853 (define-public python-future-fstrings
15854 (package
15855 (name "python-future-fstrings")
15856 (version "0.4.1")
15857 (source
15858 (origin
15859 (method url-fetch)
15860 (uri (pypi-uri "future_fstrings" version))
15861 (sha256
15862 (base32
15863 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
15864 (build-system python-build-system)
15865 (propagated-inputs
15866 `(("python-tokenize-rt" ,python-tokenize-rt)))
15867 (home-page "https://github.com/asottile/future-fstrings")
15868 (synopsis "Backport of fstrings to Python < 3.6")
15869 (description
15870 "This package provides a UTF-8 compatible encoding
15871 @code{future_fstrings}, which performs source manipulation. It decodes the
15872 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
15873 @code{f} strings.")
15874 (license license:expat)))
15875
15876 (define-public python-typed-ast
15877 (package
15878 (name "python-typed-ast")
15879 (version "1.4.0")
15880 (source
15881 (origin
15882 (method git-fetch)
15883 (uri (git-reference
15884 (url "https://github.com/python/typed_ast.git")
15885 (commit version)))
15886 (sha256
15887 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
15888 (file-name (git-file-name name version))))
15889 (build-system python-build-system)
15890 (arguments
15891 `(#:modules ((guix build utils)
15892 (guix build python-build-system)
15893 (ice-9 ftw)
15894 (srfi srfi-1)
15895 (srfi srfi-26))
15896 #:phases
15897 (modify-phases %standard-phases
15898 (replace 'check
15899 (lambda _
15900 (let ((cwd (getcwd)))
15901 (setenv "PYTHONPATH"
15902 (string-append cwd "/build/"
15903 (find (cut string-prefix? "lib" <>)
15904 (scandir (string-append cwd "/build")))
15905 ":"
15906 (getenv "PYTHONPATH"))))
15907 (invoke "pytest")
15908 #t)))))
15909 (native-inputs `(("python-pytest" ,python-pytest)))
15910 (home-page "https://github.com/python/typed_ast")
15911 (synopsis "Fork of Python @code{ast} modules with type comment support")
15912 (description "This package provides a parser similar to the standard
15913 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
15914 include PEP 484 type comments and are independent of the version of Python
15915 under which they are run. The @code{typed_ast} parsers produce the standard
15916 Python AST (plus type comments), and are both fast and correct, as they are
15917 based on the CPython 2.7 and 3.7 parsers.")
15918 ;; See the file "LICENSE" for the details.
15919 (license (list license:psfl
15920 license:asl2.0
15921 license:expat)))) ;ast27/Parser/spark.py
15922
15923 (define-public python-typing
15924 (package
15925 (name "python-typing")
15926 (version "3.6.6")
15927 (source
15928 (origin
15929 (method url-fetch)
15930 (uri (pypi-uri "typing" version))
15931 (sha256
15932 (base32
15933 "0ba9acs4awx15bf9v3nrs781msbd2nx826906nj6fqks2bvca9s0"))))
15934 (build-system python-build-system)
15935 (home-page "https://docs.python.org/3/library/typing.html")
15936 (synopsis "Type hints for Python")
15937 (description "This is a backport of the standard library @code{typing}
15938 module to Python versions older than 3.5. Typing defines a standard notation
15939 for Python function and variable type annotations. The notation can be used
15940 for documenting code in a concise, standard format, and it has been designed
15941 to also be used by static and runtime type checkers, static analyzers, IDEs
15942 and other tools.")
15943 (license license:psfl)))
15944
15945 (define-public python2-typing
15946 (package-with-python2 python-typing))
15947
15948 (define-public python-typing-extensions
15949 (package
15950 (name "python-typing-extensions")
15951 (version "3.7.4.1")
15952 (source
15953 (origin
15954 (method url-fetch)
15955 (uri (pypi-uri "typing_extensions" version))
15956 (sha256
15957 (base32
15958 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
15959 (build-system python-build-system)
15960 (home-page
15961 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
15962 (synopsis "Experimental type hints for Python")
15963 (description
15964 "The typing_extensions module contains additional @code{typing} hints not
15965 yet present in the of the @code{typing} standard library.
15966 Included are implementations of:
15967 @enumerate
15968 @item ClassVar
15969 @item ContextManager
15970 @item Counter
15971 @item DefaultDict
15972 @item Deque
15973 @item NewType
15974 @item NoReturn
15975 @item overload
15976 @item Protocol
15977 @item runtime
15978 @item Text
15979 @item Type
15980 @item TYPE_CHECKING
15981 @item AsyncGenerator
15982 @end enumerate\n")
15983 (license license:psfl)))
15984
15985 (define-public bpython
15986 (package
15987 (name "bpython")
15988 (version "0.18")
15989 (source
15990 (origin
15991 (method url-fetch)
15992 (uri (pypi-uri "bpython" version))
15993 (sha256
15994 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
15995 (build-system python-build-system)
15996 (arguments
15997 `(#:phases
15998 (modify-phases %standard-phases
15999 (add-after 'unpack 'remove-failing-test
16000 (lambda _
16001 ;; Remove failing test. FIXME: make it pass
16002 (delete-file "bpython/test/test_args.py")
16003 #t))
16004 (add-after 'wrap 'add-aliases
16005 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16006 (lambda* (#:key outputs #:allow-other-keys)
16007 (let ((out (assoc-ref outputs "out")))
16008 (for-each
16009 (lambda (old new)
16010 (symlink old (string-append out "/bin/" new)))
16011 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16012 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16013 #t)))))
16014 (propagated-inputs
16015 `(("python-pygments" ,python-pygments)
16016 ("python-requests" ,python-requests)
16017 ("python-babel" ,python-babel) ; optional, for internationalization
16018 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16019 ("python-greenlet" ,python-greenlet)
16020 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16021 ("python-six" ,python-six)))
16022 (native-inputs
16023 `(("python-sphinx" ,python-sphinx)
16024 ("python-mock" ,python-mock)))
16025 (home-page "https://bpython-interpreter.org/")
16026 (synopsis "Fancy interface to the Python interpreter")
16027 (description "Bpython is a fancy interface to the Python
16028 interpreter. bpython's main features are
16029
16030 @enumerate
16031 @item in-line syntax highlighting,
16032 @item readline-like autocomplete with suggestions displayed as you type,
16033 @item expected parameter list for any Python function,
16034 @item \"rewind\" function to pop the last line of code from memory and
16035 re-evaluate,
16036 @item send the code you've entered off to a pastebin,
16037 @item save the code you've entered to a file, and
16038 @item auto-indentation.
16039 @end enumerate")
16040 (license license:expat)))
16041
16042 (define-public bpython2
16043 (let ((base (package-with-python2
16044 (strip-python2-variant bpython))))
16045 (package (inherit base)
16046 (name "bpython2")
16047 (arguments
16048 `(#:python ,python-2
16049 #:phases
16050 (modify-phases %standard-phases
16051 (add-after 'unpack 'remove-failing-test
16052 (lambda _
16053 ;; Remove failing test. FIXME: make it pass
16054 (delete-file "bpython/test/test_args.py")
16055 ;; Disable failing test-cases (renaming inhibits they are
16056 ;; discovered)
16057 (substitute* "bpython/test/test_curtsies_repl.py"
16058 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16059 (string-append a "xxx_off_" b))
16060 (("^(\\s*def )(test_complex\\W)" _ a b)
16061 (string-append a "xxx_off_" b)))
16062 #t))
16063 (add-before 'build 'rename-scripts
16064 ;; rename the scripts to bypthon2, bpdb2, etc.
16065 (lambda _
16066 (substitute* "setup.py"
16067 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16068 (string-append name "2" rest "\n"))
16069 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16070 (string-append name "2" (or sub "") rest "\n")))
16071 #t))))))))
16072
16073 (define-public python-pyinotify
16074 (package
16075 (name "python-pyinotify")
16076 (version "0.9.6")
16077 (source (origin
16078 (method url-fetch)
16079 (uri (pypi-uri "pyinotify" version))
16080 (sha256
16081 (base32
16082 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16083 (build-system python-build-system)
16084 (arguments `(#:tests? #f)) ;no tests
16085 (home-page "https://github.com/seb-m/pyinotify")
16086 (synopsis "Python library for monitoring inotify events")
16087 (description
16088 "@code{pyinotify} provides a Python interface for monitoring
16089 file system events on Linux.")
16090 (license license:expat)))
16091
16092 (define-public python2-pyinotify
16093 (package-with-python2 python-pyinotify))
16094
16095 ;; Ada parser uses this version.
16096 (define-public python2-quex-0.67.3
16097 (package
16098 (name "python2-quex")
16099 (version "0.67.3")
16100 (source
16101 (origin
16102 (method url-fetch)
16103 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16104 (version-major+minor version)
16105 "/quex-" version ".zip"))
16106 (sha256
16107 (base32
16108 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16109 (build-system python-build-system)
16110 (native-inputs
16111 `(("unzip" ,unzip)))
16112 (arguments
16113 `(#:python ,python-2
16114 #:tests? #f
16115 #:phases
16116 (modify-phases %standard-phases
16117 (delete 'configure)
16118 (delete 'build)
16119 (replace 'install
16120 (lambda* (#:key outputs #:allow-other-keys)
16121 (let* ((out (assoc-ref outputs "out"))
16122 (share/quex (string-append out "/share/quex"))
16123 (bin (string-append out "/bin")))
16124 (copy-recursively "." share/quex)
16125 (mkdir-p bin)
16126 (symlink (string-append share/quex "/quex-exe.py")
16127 (string-append bin "/quex"))
16128 #t))))))
16129 (native-search-paths
16130 (list (search-path-specification
16131 (variable "QUEX_PATH")
16132 (files '("share/quex")))))
16133 (home-page "http://quex.sourceforge.net/")
16134 (synopsis "Lexical analyzer generator in Python")
16135 (description "@code{quex} is a lexical analyzer generator in Python.")
16136 (license license:lgpl2.1+))) ; Non-military
16137
16138 (define-public python2-quex
16139 (package (inherit python2-quex-0.67.3)
16140 (name "python2-quex")
16141 (version "0.68.1")
16142 (source
16143 (origin
16144 (method url-fetch)
16145 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16146 (sha256
16147 (base32
16148 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16149 (file-name (string-append name "-" version ".tar.gz"))))))
16150
16151 (define-public python-more-itertools
16152 (package
16153 (name "python-more-itertools")
16154 (version "7.1.0")
16155 (source
16156 (origin
16157 (method url-fetch)
16158 (uri (pypi-uri "more-itertools" version))
16159 (sha256
16160 (base32
16161 "16phg2f2dvm6ci5wr49ncha5lmc0m2in3bsl33c61vzca4gkvd4b"))))
16162 (build-system python-build-system)
16163 (home-page "https://github.com/erikrose/more-itertools")
16164 (synopsis "More routines for operating on iterables, beyond itertools")
16165 (description "Python's built-in @code{itertools} module implements a
16166 number of iterator building blocks inspired by constructs from APL, Haskell,
16167 and SML. @code{more-itertools} includes additional building blocks for
16168 working with iterables.")
16169 (properties `((python2-variant . ,(delay python2-more-itertools))))
16170 (license license:expat)))
16171
16172 ;; The 5.x series are the last versions supporting Python 2.7.
16173 (define-public python2-more-itertools
16174 (package
16175 (inherit python-more-itertools)
16176 (name "python2-more-itertools")
16177 (version "5.0.0")
16178 (source (origin
16179 (method url-fetch)
16180 (uri (pypi-uri "more-itertools" version))
16181 (sha256
16182 (base32
16183 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16184 (arguments
16185 `(#:python ,python2-minimal))
16186 (propagated-inputs
16187 `(("python2-six" ,python2-six-bootstrap)))))
16188
16189 (define-public python-latexcodec
16190 (package
16191 (name "python-latexcodec")
16192 (version "1.0.7")
16193 (source
16194 (origin
16195 (method url-fetch)
16196 (uri (pypi-uri "latexcodec" version))
16197 (sha256
16198 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16199 (build-system python-build-system)
16200 (inputs
16201 `(("python-six" ,python-six)))
16202 (home-page "https://readthedocs.org/projects/latexcodec/")
16203 (synopsis "Work with LaTeX code in Python")
16204 (description "Lexer and codec to work with LaTeX code in Python.")
16205 (license license:expat)))
16206
16207 (define-public python-pybtex
16208 (package
16209 (name "python-pybtex")
16210 (version "0.22.2")
16211 (source
16212 (origin
16213 (method url-fetch)
16214 (uri (pypi-uri "pybtex" version))
16215 (sha256
16216 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16217 (build-system python-build-system)
16218 (native-inputs
16219 `(("python-nose" ,python-nose)))
16220 (inputs
16221 `(("python-latexcodec" ,python-latexcodec)
16222 ("python-pyyaml" ,python-pyyaml)
16223 ("python-six" ,python-six)))
16224 (arguments
16225 `(#:test-target "nosetests"))
16226 (home-page "https://pybtex.org/")
16227 (synopsis "BibTeX-compatible bibliography processor")
16228 (description "Pybtex is a BibTeX-compatible bibliography processor written
16229 in Python. You can simply type pybtex instead of bibtex.")
16230 (license license:expat)))
16231
16232 (define-public python-onetimepass
16233 (package
16234 (name "python-onetimepass")
16235 (version "1.0.1")
16236 (source
16237 (origin
16238 (method url-fetch)
16239 (uri (pypi-uri "onetimepass" version))
16240 (sha256
16241 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16242 (build-system python-build-system)
16243 (propagated-inputs `(("python-six" ,python-six)))
16244 (home-page "https://github.com/tadeck/onetimepass/")
16245 (synopsis "One-time password library")
16246 (description "Python one-time password library for HMAC-based (HOTP) and
16247 time-based (TOTP) passwords.")
16248 (license license:expat)))
16249
16250 (define-public python-parso
16251 (package
16252 (name "python-parso")
16253 (version "0.6.2")
16254 (source
16255 (origin
16256 (method url-fetch)
16257 (uri (pypi-uri "parso" version))
16258 (sha256
16259 (base32
16260 "0mr1j4ijqnrihz1yap34g6i8vjldg5lz814sz4v0d8pbqvh5jmhc"))))
16261 (native-inputs
16262 `(("python-pytest" ,python-pytest)))
16263 (build-system python-build-system)
16264 (arguments
16265 `(#:phases (modify-phases %standard-phases
16266 (replace 'check
16267 (lambda _ (invoke "pytest" "-vv"))))))
16268 (home-page "https://github.com/davidhalter/parso")
16269 (synopsis "Python Parser")
16270 (description "Parso is a Python parser that supports error recovery and
16271 round-trip parsing for different Python versions (in multiple Python versions).
16272 Parso is also able to list multiple syntax errors in your Python file.")
16273 (license license:expat)))
16274
16275 (define-public python2-parso
16276 (package-with-python2 python-parso))
16277
16278 ;; This version is required for Jedi@0.15, which in turn is needed for
16279 ;; python-language-server.
16280 (define-public python-parso-0.5
16281 (package
16282 (inherit python-parso)
16283 (version "0.5.2")
16284 (source (origin
16285 (method url-fetch)
16286 (uri (pypi-uri "parso" version))
16287 (sha256
16288 (base32
16289 "1qgvrkpma7vylrk047mxxvqd66nwqk978n3ig2w8iz9m3bgjbksm"))))))
16290
16291 (define-public python-async-generator
16292 (package
16293 (name "python-async-generator")
16294 (version "1.10")
16295 (source
16296 (origin
16297 (method url-fetch)
16298 (uri (pypi-uri "async_generator" version))
16299 (sha256
16300 (base32
16301 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16302 (build-system python-build-system)
16303 (native-inputs
16304 `(("python-pytest" ,python-pytest)))
16305 (home-page "https://github.com/python-trio/async_generator")
16306 (synopsis "Async generators and context managers for Python 3.5+")
16307 (description "@code{async_generator} back-ports Python 3.6's native async
16308 generators and Python 3.7's context managers into Python 3.5.")
16309 ;; Dual licensed.
16310 (license (list license:expat license:asl2.0))))
16311
16312 (define-public python-async-timeout
16313 (package
16314 (name "python-async-timeout")
16315 (version "3.0.1")
16316 (source
16317 (origin
16318 (method url-fetch)
16319 (uri (pypi-uri "async-timeout" version))
16320 (sha256
16321 (base32
16322 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16323 (build-system python-build-system)
16324 (home-page "https://github.com/aio-libs/async_timeout/")
16325 (synopsis "Timeout context manager for asyncio programs")
16326 (description "@code{async-timeout} provides a timeout timeout context
16327 manager compatible with @code{asyncio}.")
16328 (license license:asl2.0)))
16329
16330 (define-public python-glob2
16331 (package
16332 (name "python-glob2")
16333 (version "0.7")
16334 (source
16335 (origin
16336 (method git-fetch)
16337 (uri (git-reference
16338 (url "https://github.com/miracle2k/python-glob2.git")
16339 (commit (string-append "v" version))))
16340 (file-name (git-file-name name version))
16341 (sha256
16342 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16343 (build-system python-build-system)
16344 (home-page "https://github.com/miracle2k/python-glob2/")
16345 (synopsis "Extended Version of the python buildin glob module")
16346 (description "This is an extended version of the Python
16347 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16348 adds:
16349
16350 @itemize
16351 @item The ability to capture the text matched by glob patterns, and return
16352 those matches alongside the file names.
16353 @item A recursive @code{**} globbing syntax, akin for example to the
16354 @code{globstar} option of Bash.
16355 @item The ability to replace the file system functions used, in order to glob
16356 on virtual file systems.
16357 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16358 @end itemize
16359
16360 Glob2 currently based on the glob code from Python 3.3.1.")
16361 (license license:bsd-2)))
16362
16363 (define-public python2-glob2
16364 (package-with-python2 python-glob2))
16365
16366 (define-public python-gipc
16367 (package
16368 (name "python-gipc")
16369 (version "0.6.0")
16370 (source
16371 (origin
16372 (method url-fetch)
16373 (uri (pypi-uri "gipc" version ".zip"))
16374 (sha256
16375 (base32
16376 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16377 (build-system python-build-system)
16378 (native-inputs
16379 `(("unzip" ,unzip)))
16380 (propagated-inputs
16381 `(("python-gevent" ,python-gevent)))
16382 (home-page "https://gehrcke.de/gipc/")
16383 (synopsis "Child process management in the context of gevent")
16384 (description "Usage of Python's multiprocessing package in a
16385 gevent-powered application may raise problems. With @code{gipc},
16386 process-based child processes can safely be created anywhere within a
16387 gevent-powered application.")
16388 (license license:expat)))
16389
16390 (define-public python2-gipc
16391 (package-with-python2 python-gipc))
16392
16393 (define-public python-fusepy
16394 (package
16395 (name "python-fusepy")
16396 (version "2.0.4")
16397 (source
16398 (origin
16399 (method url-fetch)
16400 (uri (pypi-uri "fusepy" version))
16401 (sha256
16402 (base32
16403 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16404 (build-system python-build-system)
16405 (arguments
16406 `(#:phases
16407 (modify-phases %standard-phases
16408 (add-before 'build 'set-library-file-name
16409 (lambda* (#:key inputs #:allow-other-keys)
16410 (let ((fuse (assoc-ref inputs "fuse")))
16411 (substitute* "fuse.py"
16412 (("find_library\\('fuse'\\)")
16413 (string-append "'" fuse "/lib/libfuse.so'")))
16414 #t))))))
16415 (propagated-inputs
16416 `(("fuse" ,fuse)))
16417 (home-page "https://github.com/fusepy/fusepy")
16418 (synopsis "Simple ctypes bindings for FUSE")
16419 (description "Python module that provides a simple interface to FUSE and
16420 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16421 (license license:isc)))
16422
16423 (define-public python2-fusepy
16424 (package-with-python2 python-fusepy))
16425
16426 (define-public python-fusepyng
16427 (package
16428 (name "python-fusepyng")
16429 (version "1.0.7")
16430 (source
16431 (origin
16432 (method url-fetch)
16433 (uri (pypi-uri "fusepyng" version))
16434 (sha256
16435 (base32
16436 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16437 (build-system python-build-system)
16438 (arguments
16439 '(#:phases
16440 (modify-phases %standard-phases
16441 (add-after 'unpack 'set-libfuse-path
16442 (lambda* (#:key inputs #:allow-other-keys)
16443 (let ((fuse (assoc-ref inputs "fuse")))
16444 (substitute* "fusepyng.py"
16445 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16446 (string-append "\"" fuse "/lib/libfuse.so\""))))
16447 #t)))))
16448 (inputs
16449 `(("fuse" ,fuse)))
16450 (propagated-inputs
16451 `(("python-paramiko" ,python-paramiko)))
16452 (home-page "https://github.com/rianhunter/fusepyng")
16453 (synopsis "Simple ctypes bindings for FUSE")
16454 (description "@code{fusepyng} is a Python module that provides a simple
16455 interface to FUSE on various operating systems. It's just one file and is
16456 implemented using @code{ctypes}.")
16457 (license license:isc)))
16458
16459 (define-public python2-gdrivefs
16460 (package
16461 (name "python2-gdrivefs")
16462 (version "0.14.9")
16463 (source
16464 (origin
16465 (method url-fetch)
16466 (uri (pypi-uri "gdrivefs" version))
16467 (sha256
16468 (base32
16469 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16470 (build-system python-build-system)
16471 (arguments
16472 `(#:python ,python-2
16473 #:phases
16474 (modify-phases %standard-phases
16475 (add-before 'build 'patch-setup-py
16476 (lambda _
16477 ;; Update requirements from dependency==version
16478 ;; to dependency>=version
16479 (substitute* "gdrivefs/resources/requirements.txt"
16480 (("==") ">="))
16481 #t)))))
16482 (native-inputs
16483 `(("python2-gipc" ,python2-gipc)
16484 ("python2-gevent" ,python2-gevent)
16485 ("python2-greenlet" ,python2-greenlet)
16486 ("python2-httplib2" ,python2-httplib2)
16487 ("python2-uritemplate" ,python2-uritemplate)
16488 ("python2-oauth2client" ,python2-oauth2client)
16489 ("python2-six" ,python2-six)))
16490 (propagated-inputs
16491 `(("python2-dateutil" ,python2-dateutil)
16492 ("python2-fusepy" ,python2-fusepy)
16493 ("python2-google-api-client" ,python2-google-api-client)))
16494 (home-page "https://github.com/dsoprea/GDriveFS")
16495 (synopsis "Mount Google Drive as a local file system")
16496 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16497 under Python 2.7.")
16498 (license license:gpl2)))
16499
16500 (define-public python-userspacefs
16501 (package
16502 (name "python-userspacefs")
16503 (version "1.0.13")
16504 (source
16505 (origin
16506 (method url-fetch)
16507 (uri (pypi-uri "userspacefs" version))
16508 (sha256
16509 (base32
16510 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16511 (build-system python-build-system)
16512 (propagated-inputs
16513 `(("python-fusepyng" ,python-fusepyng)))
16514 (home-page "https://github.com/rianhunter/userspacefs")
16515 (synopsis "User-space file systems for Python")
16516 (description
16517 "@code{userspacefs} is a library that allows you to easily write
16518 user-space file systems in Python.")
16519 (license license:gpl3+)))
16520
16521 (define-public pybind11
16522 (package
16523 (name "pybind11")
16524 (version "2.4.3")
16525 (source (origin
16526 (method git-fetch)
16527 (uri (git-reference
16528 (url "https://github.com/pybind/pybind11.git")
16529 (commit (string-append "v" version))))
16530 (sha256
16531 (base32
16532 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16533 (file-name (git-file-name name version))))
16534 (build-system cmake-build-system)
16535 (native-inputs
16536 `(("python" ,python-wrapper)
16537
16538 ;; The following dependencies are used for tests.
16539 ("python-pytest" ,python-pytest)
16540 ("catch" ,catch-framework2-1)
16541 ("eigen" ,eigen)))
16542 (arguments
16543 `(#:configure-flags
16544 (list (string-append "-DCATCH_INCLUDE_DIR="
16545 (assoc-ref %build-inputs "catch")
16546 "/include/catch"))
16547
16548 #:phases (modify-phases %standard-phases
16549 (add-after 'install 'install-python
16550 (lambda* (#:key outputs #:allow-other-keys)
16551 (let ((out (assoc-ref outputs "out")))
16552 (with-directory-excursion "../source"
16553 (setenv "PYBIND11_USE_CMAKE" "yes")
16554 (invoke "python" "setup.py" "install"
16555 "--single-version-externally-managed"
16556 "--root=/"
16557 (string-append "--prefix=" out)))))))
16558
16559 #:test-target "check"))
16560 (home-page "https://github.com/pybind/pybind11/")
16561 (synopsis "Seamless operability between C++11 and Python")
16562 (description
16563 "@code{pybind11} is a lightweight header-only library that exposes C++
16564 types in Python and vice versa, mainly to create Python bindings of existing
16565 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16566 library: to minimize boilerplate code in traditional extension modules by
16567 inferring type information using compile-time introspection.")
16568 (license license:bsd-3)))
16569
16570 (define-public python-fasteners
16571 (package
16572 (name "python-fasteners")
16573 (version "0.14.1")
16574 (source
16575 (origin
16576 (method url-fetch)
16577 (uri (pypi-uri "fasteners" version))
16578 (sha256
16579 (base32
16580 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16581 (build-system python-build-system)
16582 (propagated-inputs
16583 `(("python-monotonic" ,python-monotonic)
16584 ("python-six" ,python-six)
16585 ("python-testtools" ,python-testtools)))
16586 (home-page "https://github.com/harlowja/fasteners")
16587 (synopsis "Python package that provides useful locks")
16588 (description
16589 "This package provides a Python program that provides following locks:
16590
16591 @itemize
16592 @item Locking decorator
16593 @item Reader-writer locks
16594 @item Inter-process locks
16595 @item Generic helpers
16596 @end itemize\n")
16597 (properties `((python2-variant . ,(delay python2-fasteners))))
16598 (license license:asl2.0)))
16599
16600 (define-public python2-fasteners
16601 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16602 (package
16603 (inherit base)
16604 (propagated-inputs
16605 `(("python2-futures" ,python2-futures)
16606 ,@(package-propagated-inputs base))))))
16607
16608 (define-public python-requests-file
16609 (package
16610 (name "python-requests-file")
16611 (version "1.4.3")
16612 (source
16613 (origin
16614 (method url-fetch)
16615 (uri (pypi-uri "requests-file" version))
16616 (sha256
16617 (base32
16618 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16619 (build-system python-build-system)
16620 (propagated-inputs
16621 `(("python-requests" ,python-requests)
16622 ("python-six" ,python-six)))
16623 (home-page
16624 "https://github.com/dashea/requests-file")
16625 (synopsis "File transport adapter for Requests")
16626 (description
16627 "Requests-File is a transport adapter for use with the Requests Python
16628 library to allow local file system access via @code{file://} URLs.")
16629 (license license:asl2.0)))
16630
16631 (define-public python2-requests-file
16632 (package-with-python2 python-requests-file))
16633
16634 (define-public python-tldextract
16635 (package
16636 (name "python-tldextract")
16637 (version "2.2.0")
16638 (source
16639 (origin
16640 (method url-fetch)
16641 (uri (pypi-uri "tldextract" version))
16642 (sha256
16643 (base32
16644 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16645 (build-system python-build-system)
16646 (native-inputs
16647 `(("python-pytest" ,python-pytest)
16648 ("python-responses" ,python-responses)))
16649 (propagated-inputs
16650 `(("python-idna" ,python-idna)
16651 ("python-requests" ,python-requests)
16652 ("python-requests-file" ,python-requests-file)))
16653 (home-page
16654 "https://github.com/john-kurkowski/tldextract")
16655 (synopsis
16656 "Separate the TLD from the registered domain and subdomains of a URL")
16657 (description
16658 "TLDExtract accurately separates the TLD from the registered domain and
16659 subdomains of a URL, using the Public Suffix List. By default, this includes
16660 the public ICANN TLDs and their exceptions. It can optionally support the
16661 Public Suffix List's private domains as well.")
16662 (license license:bsd-3)))
16663
16664 (define-public python2-tldextract
16665 (package-with-python2 python-tldextract))
16666
16667 (define-public python-pynamecheap
16668 (package
16669 (name "python-pynamecheap")
16670 (version "0.0.3")
16671 (source
16672 (origin
16673 (method url-fetch)
16674 (uri (pypi-uri "PyNamecheap" version))
16675 (sha256
16676 (base32
16677 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16678 (build-system python-build-system)
16679 (propagated-inputs
16680 `(("python-requests" ,python-requests)))
16681 (home-page
16682 "https://github.com/Bemmu/PyNamecheap")
16683 (synopsis
16684 "Namecheap API client in Python")
16685 (description
16686 "PyNamecheap is a Namecheap API client in Python.")
16687 (license license:expat)))
16688
16689 (define-public python2-pynamecheap
16690 (package-with-python2 python-pynamecheap))
16691
16692 (define-public python-dns-lexicon
16693 (package
16694 (name "python-dns-lexicon")
16695 (version "2.4.0")
16696 (source
16697 (origin
16698 (method url-fetch)
16699 (uri (pypi-uri "dns-lexicon" version))
16700 (sha256
16701 (base32
16702 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
16703 (build-system python-build-system)
16704 (arguments
16705 `(#:tests? #f)) ;requires internet access
16706 (propagated-inputs
16707 `(("python-future" ,python-future)
16708 ("python-pynamecheap" ,python-pynamecheap)
16709 ("python-requests" ,python-requests)
16710 ("python-tldextract" ,python-tldextract)
16711 ("python-urllib3" ,python-urllib3)))
16712 (home-page "https://github.com/AnalogJ/lexicon")
16713 (synopsis
16714 "Manipulate DNS records on various DNS providers")
16715 (description
16716 "Lexicon provides a way to manipulate DNS records on multiple DNS
16717 providers in a standardized way. It has a CLI but it can also be used as a
16718 Python library. It was designed to be used in automation, specifically with
16719 Let's Encrypt.")
16720 (license license:expat)))
16721
16722 (define-public python2-dns-lexicon
16723 (package-with-python2 python-dns-lexicon))
16724
16725 (define-public python-commandlines
16726 (package
16727 (name "python-commandlines")
16728 (version "0.4.1")
16729 (source
16730 (origin
16731 (method url-fetch)
16732 (uri (pypi-uri "commandlines" version))
16733 (sha256
16734 (base32
16735 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
16736 (build-system python-build-system)
16737 (home-page "https://github.com/chrissimpkins/commandlines")
16738 (synopsis "Command line argument to object parsing library")
16739 (description
16740 "@code{Commandlines} is a Python library for command line application
16741 development that supports command line argument parsing, command string
16742 validation testing and application logic.")
16743 (license license:expat)))
16744
16745 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
16746 ;; python-numba. They have a very unflexible relationship.
16747 (define-public python-numba
16748 (package
16749 (name "python-numba")
16750 (version "0.46.0")
16751 (source
16752 (origin
16753 (method url-fetch)
16754 (uri (pypi-uri "numba" version))
16755 (sha256
16756 (base32
16757 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
16758 (build-system python-build-system)
16759 (arguments
16760 `(#:modules ((guix build utils)
16761 (guix build python-build-system)
16762 (ice-9 ftw)
16763 (srfi srfi-1)
16764 (srfi srfi-26))
16765 #:phases
16766 (modify-phases %standard-phases
16767 (add-after 'unpack 'disable-proprietary-features
16768 (lambda _
16769 (setenv "NUMBA_DISABLE_HSA" "1")
16770 (setenv "NUMBA_DISABLE_CUDA" "1")
16771 #t))
16772 (add-after 'unpack 'remove-failing-tests
16773 (lambda _
16774 ;; FIXME: These tests fail for unknown reasons:
16775 ;; test_non_writable_pycache, test_non_creatable_pycache, and
16776 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
16777 (substitute* "numba/tests/test_dispatcher.py"
16778 (("def test(_non_writable_pycache)" _ m)
16779 (string-append "def guix_skip" m))
16780 (("def test(_non_creatable_pycache)" _ m)
16781 (string-append "def guix_skip" m))
16782 (("def test(_frozen)" _ m)
16783 (string-append "def guix_skip" m)))
16784
16785 ;; These tests fail because we don't run the tests from the build
16786 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
16787 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
16788 (substitute* "numba/tests/test_pycc.py"
16789 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
16790 (string-append "def guix_skip" m)))
16791
16792 ;; These tests fail because our version of Python does not have
16793 ;; a recognizable front-end for the Numba distribution to use
16794 ;; to check against.
16795 (substitute* "numba/tests/test_entrypoints.py"
16796 (("def test(_init_entrypoint)" _ m)
16797 (string-append "def guix_skip" m)))
16798 (substitute* "numba/tests/test_jitclasses.py"
16799 (("def test(_jitclass_longlabel_not_truncated)" _ m)
16800 (string-append "def guix_skip" m)))
16801 #t))
16802 (replace 'check
16803 (lambda _
16804 (let ((cwd (getcwd)))
16805 (setenv "PYTHONPATH"
16806 (string-append cwd "/build/"
16807 (find (cut string-prefix? "lib" <>)
16808 (scandir (string-append cwd "/build")))
16809 ":"
16810 (getenv "PYTHONPATH")))
16811 ;; Something is wrong with the PYTHONPATH when running the
16812 ;; tests from the build directory, as it complains about not being
16813 ;; able to import certain modules.
16814 (with-directory-excursion "/tmp"
16815 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
16816 #t)))))
16817 (propagated-inputs
16818 `(("python-llvmlite" ,python-llvmlite)
16819 ("python-numpy" ,python-numpy)
16820 ("python-singledispatch" ,python-singledispatch)))
16821 ;; Needed for tests.
16822 (inputs
16823 `(("python-jinja2" ,python-jinja2)
16824 ("python-pygments" ,python-pygments)))
16825 (home-page "https://numba.pydata.org")
16826 (synopsis "Compile Python code using LLVM")
16827 (description "Numba gives you the power to speed up your applications with
16828 high performance functions written directly in Python. With a few
16829 annotations, array-oriented and math-heavy Python code can be just-in-time
16830 compiled to native machine instructions, similar in performance to C, C++ and
16831 Fortran, without having to switch languages or Python interpreters.
16832
16833 Numba works by generating optimized machine code using the LLVM compiler
16834 infrastructure at import time, runtime, or statically (using the included pycc
16835 tool).")
16836 (license license:bsd-3)))
16837
16838 (define-public python-numcodecs
16839 (package
16840 (name "python-numcodecs")
16841 (version "0.6.4")
16842 (source
16843 (origin
16844 (method url-fetch)
16845 (uri (pypi-uri "numcodecs" version))
16846 (sha256
16847 (base32
16848 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
16849 (build-system python-build-system)
16850 (propagated-inputs
16851 `(("python-numpy" ,python-numpy)
16852 ("python-msgpack" ,python-msgpack)))
16853 (native-inputs
16854 `(("python-pytest" ,python-pytest)
16855 ("python-setuptools-scm" ,python-setuptools-scm)))
16856 (home-page "https://github.com/zarr-developers/numcodecs")
16857 (synopsis "Buffer compression and transformation codecs")
16858 (description
16859 "This Python package provides buffer compression and transformation
16860 codecs for use in data storage and communication applications.")
16861 (license license:expat)))
16862
16863 (define-public python-asciitree
16864 (package
16865 (name "python-asciitree")
16866 (version "0.3.3")
16867 (source
16868 (origin
16869 (method url-fetch)
16870 (uri (pypi-uri "asciitree" version))
16871 (sha256
16872 (base32
16873 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
16874 (build-system python-build-system)
16875 (home-page "https://github.com/mbr/asciitree")
16876 (synopsis "Draws ASCII trees")
16877 (description "This package draws tree structures using characters.")
16878 (license license:expat)))
16879
16880 (define-public python-zarr
16881 (package
16882 (name "python-zarr")
16883 (version "2.4.0")
16884 (source
16885 (origin
16886 (method url-fetch)
16887 (uri (pypi-uri "zarr" version))
16888 (sha256
16889 (base32
16890 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
16891 (build-system python-build-system)
16892 (arguments
16893 `(#:phases
16894 (modify-phases %standard-phases
16895 (add-after 'unpack 'disable-service-tests
16896 (lambda _
16897 (setenv "ZARR_TEST_ABS" "0")
16898 (setenv "ZARR_TEST_MONGO" "0")
16899 (setenv "ZARR_TEST_REDIS" "0")
16900 #t))
16901 (replace 'check
16902 (lambda _
16903 (invoke "pytest" "-vv" "-k" "not lmdb")
16904 #t)))))
16905 (propagated-inputs
16906 `(("python-asciitree" ,python-asciitree)
16907 ("python-fasteners" ,python-fasteners)
16908 ("python-numcodecs" ,python-numcodecs)
16909 ("python-numpy" ,python-numpy)))
16910 (native-inputs
16911 `(("python-pytest" ,python-pytest)
16912 ("python-setuptools-scm" ,python-setuptools-scm)))
16913 (home-page "https://github.com/zarr-developers/zarr-python")
16914 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
16915 (description
16916 "This package provides an implementation of chunked, compressed,
16917 N-dimensional arrays for Python.")
16918 (license license:expat)))
16919
16920 (define-public python-anndata
16921 (package
16922 (name "python-anndata")
16923 (version "0.7.1")
16924 (source
16925 (origin
16926 (method url-fetch)
16927 (uri (pypi-uri "anndata" version))
16928 (sha256
16929 (base32
16930 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
16931 (build-system python-build-system)
16932 (arguments
16933 `(#:phases
16934 (modify-phases %standard-phases
16935 (add-after 'unpack 'delete-inconvenient-tests
16936 (lambda _
16937 ;; This test depends on python-scikit-learn.
16938 (delete-file "anndata/tests/test_inplace_subset.py")
16939 #t))
16940 (delete 'check)
16941 (add-after 'install 'check
16942 (lambda* (#:key inputs outputs #:allow-other-keys)
16943 (add-installed-pythonpath inputs outputs)
16944 (invoke "pytest" "-vv"))))))
16945 (propagated-inputs
16946 `(("python-h5py" ,python-h5py)
16947 ("python-importlib-metadata" ,python-importlib-metadata)
16948 ("python-natsort" ,python-natsort)
16949 ("python-numcodecs" ,python-numcodecs)
16950 ("python-packaging" ,python-packaging)
16951 ("python-pandas" ,python-pandas)
16952 ("python-scipy" ,python-scipy)
16953 ("python-zarr" ,python-zarr)))
16954 (native-inputs
16955 `(("python-joblib" ,python-joblib)
16956 ("python-pytest" ,python-pytest)
16957 ("python-setuptools-scm" ,python-setuptools-scm)))
16958 (home-page "https://github.com/theislab/anndata")
16959 (synopsis "Annotated data for data analysis pipelines")
16960 (description "Anndata is a package for simple (functional) high-level APIs
16961 for data analysis pipelines. In this context, it provides an efficient,
16962 scalable way of keeping track of data together with learned annotations and
16963 reduces the code overhead typically encountered when using a mostly
16964 object-oriented library such as @code{scikit-learn}.")
16965 (license license:bsd-3)))
16966
16967 (define-public python-dill
16968 (package
16969 (name "python-dill")
16970 (version "0.3.1.1")
16971 (source
16972 (origin
16973 (method url-fetch)
16974 (uri (pypi-uri "dill" version))
16975 (sha256
16976 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
16977 (build-system python-build-system)
16978 (arguments
16979 `(#:phases
16980 (modify-phases %standard-phases
16981 (replace 'check
16982 (lambda _
16983 (with-directory-excursion "/tmp"
16984 (invoke "nosetests" "-v"))
16985 #t)))))
16986 (native-inputs
16987 `(("python-nose" ,python-nose)))
16988 (home-page "https://pypi.org/project/dill/")
16989 (synopsis "Serialize all of Python")
16990 (description "Dill extends Python's @code{pickle} module for serializing
16991 and de-serializing Python objects to the majority of the built-in Python
16992 types. Dill provides the user the same interface as the @code{pickle} module,
16993 and also includes some additional features. In addition to pickling Python
16994 objects, @code{dill} provides the ability to save the state of an interpreter
16995 session in a single command. Hence, it would be feasible to save a
16996 interpreter session, close the interpreter, ship the pickled file to another
16997 computer, open a new interpreter, unpickle the session and thus continue from
16998 the saved state of the original interpreter session.")
16999 (license license:bsd-3)))
17000
17001 (define-public python-multiprocess
17002 (package
17003 (name "python-multiprocess")
17004 (version "0.70.9")
17005 (source
17006 (origin
17007 (method url-fetch)
17008 (uri (pypi-uri "multiprocess" version))
17009 (sha256
17010 (base32
17011 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17012 (build-system python-build-system)
17013 (arguments
17014 `(#:phases
17015 (modify-phases %standard-phases
17016 (add-after 'unpack 'disable-broken-tests
17017 (lambda _
17018 ;; This test is broken as there is no keyboard interrupt.
17019 (substitute* "py3.7/multiprocess/tests/__init__.py"
17020 (("^(.*)def test_wait_result"
17021 line indent)
17022 (string-append indent
17023 "@unittest.skip(\"Disabled by Guix\")\n"
17024 line)))
17025 #t))
17026 ;; Tests must be run after installation.
17027 (delete 'check)
17028 (add-after 'install 'check
17029 (lambda* (#:key inputs outputs #:allow-other-keys)
17030 (add-installed-pythonpath inputs outputs)
17031 (invoke "python" "-m" "multiprocess.tests")
17032 #t)))))
17033 (propagated-inputs
17034 `(("python-dill" ,python-dill)))
17035 (home-page "https://pypi.org/project/multiprocess/")
17036 (synopsis "Multiprocessing and multithreading in Python")
17037 (description
17038 "This package is a fork of the multiprocessing Python package, a package
17039 which supports the spawning of processes using the API of the standard
17040 library's @code{threading} module.")
17041 (license license:bsd-3)))
17042
17043 (define-public python-toolz
17044 (package
17045 (name "python-toolz")
17046 (version "0.9.0")
17047 (source
17048 (origin
17049 (method url-fetch)
17050 (uri (pypi-uri "toolz" version))
17051 (sha256
17052 (base32
17053 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17054 (build-system python-build-system)
17055 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17056 ;; unregistered loader type"
17057 (arguments '(#:tests? #f))
17058 (home-page "https://github.com/pytoolz/toolz/")
17059 (synopsis "List processing tools and functional utilities")
17060 (description
17061 "This package provides a set of utility functions for iterators,
17062 functions, and dictionaries.")
17063 (license license:bsd-3)))
17064
17065 (define-public python2-toolz
17066 (package-with-python2 python-toolz))
17067
17068 (define-public python-cytoolz
17069 (package
17070 (name "python-cytoolz")
17071 (version "0.9.0.1")
17072 (source
17073 (origin
17074 (method url-fetch)
17075 (uri (pypi-uri "cytoolz" version))
17076 (sha256
17077 (base32
17078 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17079 (build-system python-build-system)
17080 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17081 ;; 'exceptions'"
17082 (arguments '(#:tests? #f))
17083 (propagated-inputs
17084 `(("python-toolz" ,python-toolz)))
17085 (native-inputs
17086 `(("python-cython" ,python-cython)))
17087 (home-page "https://github.com/pytoolz/cytoolz")
17088 (synopsis "High performance functional utilities")
17089 (description
17090 "The cytoolz package implements the same API as provided by toolz. The
17091 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17092 that is accessible to other projects developed in Cython.")
17093 (license license:bsd-3)))
17094
17095 (define-public python-sortedcontainers
17096 (package
17097 (name "python-sortedcontainers")
17098 (version "2.1.0")
17099 (source
17100 (origin
17101 (method url-fetch)
17102 (uri (pypi-uri "sortedcontainers" version))
17103 (sha256
17104 (base32
17105 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17106 (build-system python-build-system)
17107 (native-inputs
17108 `(("python-tox" ,python-tox)))
17109 (propagated-inputs
17110 `(("python-appdirs" ,python-appdirs)
17111 ("python-distlib" ,python-distlib)
17112 ("python-filelock" ,python-filelock)
17113 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
17114 ("python-six" ,python-six)))
17115 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17116 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17117 (description
17118 "This package provides a sorted collections library, written in
17119 pure-Python.")
17120 (license license:asl2.0)))
17121
17122 (define-public python-cloudpickle
17123 (package
17124 (name "python-cloudpickle")
17125 (version "1.3.0")
17126 (source
17127 (origin
17128 (method url-fetch)
17129 (uri (pypi-uri "cloudpickle" version))
17130 (sha256
17131 (base32
17132 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17133 (build-system python-build-system)
17134 (arguments
17135 '(#:phases (modify-phases %standard-phases
17136 (add-before 'check 'do-not-override-PYTHONPATH
17137 (lambda _
17138 ;; Append to PYTHONPATH instead of overriding it so
17139 ;; that dependencies from Guix can be found.
17140 (substitute* "tests/testutils.py"
17141 (("env\\['PYTHONPATH'\\] = pythonpath")
17142 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17143 #t))
17144 (replace 'check
17145 (lambda* (#:key tests? #:allow-other-keys)
17146 (if tests?
17147 (invoke "pytest" "-s" "-vv")
17148 (format #t "test suite not run~%"))
17149 #t)))))
17150 (native-inputs
17151 `(;; For tests.
17152 ("python-psutil" ,python-psutil)
17153 ("python-pytest" ,python-pytest)
17154 ("python-tornado" ,python-tornado)))
17155 (home-page "https://github.com/cloudpipe/cloudpickle")
17156 (synopsis "Extended pickling support for Python objects")
17157 (description
17158 "Cloudpickle makes it possible to serialize Python constructs not
17159 supported by the default pickle module from the Python standard library. It
17160 is especially useful for cluster computing where Python expressions are
17161 shipped over the network to execute on remote hosts, possibly close to the
17162 data.")
17163 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17164 (license license:bsd-3)))
17165
17166 (define-public python2-cloudpickle
17167 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17168 (package
17169 (inherit base)
17170 (native-inputs
17171 `(("python-mock" ,python2-mock)
17172 ,@(package-native-inputs base)))
17173 (propagated-inputs
17174 `(("python-futures" ,python2-futures)
17175 ,@(package-propagated-inputs base))))))
17176
17177 (define-public python-locket
17178 (package
17179 (name "python-locket")
17180 (version "0.2.0")
17181 (source
17182 (origin
17183 (method url-fetch)
17184 (uri (pypi-uri "locket" version))
17185 (sha256
17186 (base32
17187 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17188 (build-system python-build-system)
17189 (home-page "https://github.com/mwilliamson/locket.py")
17190 (synopsis "File-based locks for Python")
17191 (description
17192 "Locket implements a lock that can be used by multiple processes provided
17193 they use the same path.")
17194 (license license:bsd-2)))
17195
17196 (define-public python2-locket
17197 (package-with-python2 python-locket))
17198
17199 (define-public python-blosc
17200 (package
17201 (name "python-blosc")
17202 (version "1.5.1")
17203 (source
17204 (origin
17205 (method url-fetch)
17206 (uri (pypi-uri "blosc" version))
17207 (sha256
17208 (base32
17209 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17210 (build-system python-build-system)
17211 ;; FIXME: all tests pass, but then this error is printed:
17212 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17213 (arguments '(#:tests? #f))
17214 (propagated-inputs
17215 `(("python-numpy" ,python-numpy)))
17216 (home-page "https://github.com/blosc/python-blosc")
17217 (synopsis "Python wrapper for the Blosc data compressor library")
17218 (description "Blosc is a high performance compressor optimized for binary
17219 data. It has been designed to transmit data to the processor cache faster
17220 than the traditional, non-compressed, direct memory fetch approach via a
17221 @code{memcpy()} system call.
17222
17223 Blosc works well for compressing numerical arrays that contains data with
17224 relatively low entropy, like sparse data, time series, grids with
17225 regular-spaced values, etc.
17226
17227 This Python package wraps the Blosc library.")
17228 (license license:bsd-3)))
17229
17230 (define-public python2-blosc
17231 (package-with-python2 python-blosc))
17232
17233 (define-public python-partd
17234 (package
17235 (name "python-partd")
17236 (version "0.3.9")
17237 (source
17238 (origin
17239 (method url-fetch)
17240 (uri (pypi-uri "partd" version))
17241 (sha256
17242 (base32
17243 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17244 (build-system python-build-system)
17245 (propagated-inputs
17246 `(("python-blosc" ,python-blosc)
17247 ("python-locket" ,python-locket)
17248 ("python-numpy" ,python-numpy)
17249 ("python-pandas" ,python-pandas)
17250 ("python-pyzmq" ,python-pyzmq)
17251 ("python-toolz" ,python-toolz)))
17252 (home-page "https://github.com/dask/partd/")
17253 (synopsis "Appendable key-value storage")
17254 (description "Partd stores key-value pairs. Values are raw bytes. We
17255 append on old values. Partd excels at shuffling operations.")
17256 (license license:bsd-3)))
17257
17258 (define-public python2-partd
17259 (package-with-python2 python-partd))
17260
17261 (define-public python-fsspec
17262 (package
17263 (name "python-fsspec")
17264 (version "0.6.1")
17265 (source
17266 (origin
17267 (method url-fetch)
17268 (uri (pypi-uri "fsspec" version))
17269 (sha256
17270 (base32
17271 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17272 (build-system python-build-system)
17273 (arguments '(#:tests? #f)) ; there are none
17274 (home-page "https://github.com/intake/filesystem_spec")
17275 (synopsis "File-system specification")
17276 (description "The purpose of this package is to produce a template or
17277 specification for a file-system interface, that specific implementations
17278 should follow, so that applications making use of them can rely on a common
17279 behavior and not have to worry about the specific internal implementation
17280 decisions with any given backend.")
17281 (license license:bsd-3)))
17282
17283 (define-public python-dask
17284 (package
17285 (name "python-dask")
17286 (version "2.14.0")
17287 (source
17288 (origin
17289 (method url-fetch)
17290 (uri (pypi-uri "dask" version))
17291 (sha256
17292 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17293 (build-system python-build-system)
17294 (arguments
17295 `(#:phases
17296 (modify-phases %standard-phases
17297 (add-after 'unpack 'disable-broken-tests
17298 (lambda _
17299 ;; This test is marked as xfail when pytest-xdist is used.
17300 (substitute* "dask/tests/test_threaded.py"
17301 (("def test_interrupt\\(\\)" m)
17302 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17303 m)))
17304 ;; This one fails with a type error:
17305 ;; TypeError: Already tz-aware, use tz_convert to convert.
17306 (substitute* "dask/dataframe/tests/test_shuffle.py"
17307 (("def test_set_index_timestamp\\(\\)" m)
17308 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17309 m)))
17310 #t))
17311 (replace 'check
17312 (lambda _ (invoke "pytest" "-vv"))))))
17313 (propagated-inputs
17314 `(("python-cloudpickle" ,python-cloudpickle)
17315 ("python-fsspec" ,python-fsspec)
17316 ("python-numpy" ,python-numpy)
17317 ("python-packaging" ,python-packaging)
17318 ("python-pandas" ,python-pandas)
17319 ("python-partd" ,python-partd)
17320 ("python-toolz" ,python-toolz)
17321 ("python-pyyaml" ,python-pyyaml)))
17322 (native-inputs
17323 `(("python-pytest" ,python-pytest)
17324 ("python-pytest-runner" ,python-pytest-runner)))
17325 (home-page "https://github.com/dask/dask/")
17326 (synopsis "Parallel computing with task scheduling")
17327 (description
17328 "Dask is a flexible parallel computing library for analytics. It
17329 consists of two components: dynamic task scheduling optimized for computation,
17330 and large data collections like parallel arrays, dataframes, and lists that
17331 extend common interfaces like NumPy, Pandas, or Python iterators to
17332 larger-than-memory or distributed environments. These parallel collections
17333 run on top of the dynamic task schedulers. ")
17334 (license license:bsd-3)))
17335
17336 (define-public python-ilinkedlist
17337 (package
17338 (name "python-ilinkedlist")
17339 (version "0.4.0")
17340 (source
17341 (origin
17342 (method url-fetch)
17343 (uri (pypi-uri "ilinkedlist" version))
17344 (sha256
17345 (base32
17346 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17347 (build-system python-build-system)
17348 (native-inputs `(("python-pytest" ,python-pytest)))
17349 (inputs `(("python" ,python)))
17350 (home-page "https://github.com/luther9/ilinkedlist-py")
17351 (synopsis "Immutable linked list library")
17352 (description
17353 "This is a implementation of immutable linked lists for Python. It
17354 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17355 Since a linked list is treated as immutable, it is hashable, and its length
17356 can be retrieved in constant time. Some of the terminology is inspired by
17357 LISP. It is possible to create an improper list by creating a @code{Pair}
17358 with a non-list @code{cdr}.")
17359 (license license:gpl3+)))
17360
17361 (define-public python-readlike
17362 (package
17363 (name "python-readlike")
17364 (version "0.1.3")
17365 (source
17366 (origin
17367 (method url-fetch)
17368 (uri (pypi-uri "readlike" version))
17369 (sha256
17370 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17371 (build-system python-build-system)
17372 (home-page "https://github.com/jangler/readlike")
17373 (synopsis "GNU Readline-like line editing module")
17374 (description
17375 "This Python module provides line editing functions similar to the default
17376 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17377 @code{readline} package, this one allows access to those capabilties in settings
17378 outside of a standard command-line interface. It is especially well-suited to
17379 interfacing with Urwid, due to a shared syntax for describing key inputs.
17380
17381 Currently, all stateless Readline commands are implemented. Yanking and history
17382 are not supported.")
17383 (license license:expat)))
17384
17385 (define-public python2-readlike
17386 (package-with-python2 python-readlike))
17387
17388 (define-public python-reparser
17389 (package
17390 (name "python-reparser")
17391 (version "1.4.3")
17392 (source
17393 (origin
17394 (method url-fetch)
17395 (uri (pypi-uri "ReParser" version))
17396 (sha256
17397 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17398 (build-system python-build-system)
17399 (home-page "https://github.com/xmikos/reparser")
17400 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17401 (description
17402 "This Python library provides a simple lexer/parser for inline markup based
17403 on regular expressions.")
17404 (license license:expat)))
17405
17406 (define-public python2-reparser
17407 (let ((reparser (package-with-python2
17408 (strip-python2-variant python-reparser))))
17409 (package (inherit reparser)
17410 (propagated-inputs
17411 `(("python2-enum34" ,python2-enum34)
17412 ,@(package-propagated-inputs reparser))))))
17413
17414 (define-public python-precis-i18n
17415 (package
17416 (name "python-precis-i18n")
17417 (version "1.0.0")
17418 (source
17419 (origin
17420 (method url-fetch)
17421 (uri (pypi-uri "precis_i18n" version))
17422 (sha256
17423 (base32
17424 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17425 (build-system python-build-system)
17426 (home-page "https://github.com/byllyfish/precis_i18n")
17427 (synopsis "Implementation of the PRECIS framework")
17428 (description
17429 "This module implements the PRECIS Framework as described in RFC 8264,
17430 RFC 8265 and RFC 8266.")
17431 (license license:expat)))
17432
17433 (define-public python-absl-py
17434 (package
17435 (name "python-absl-py")
17436 (version "0.6.1")
17437 (source
17438 (origin
17439 (method url-fetch)
17440 (uri (pypi-uri "absl-py" version))
17441 (sha256
17442 (base32
17443 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17444 (build-system python-build-system)
17445 (propagated-inputs
17446 `(("python-six" ,python-six)))
17447 (home-page "https://github.com/abseil/abseil-py")
17448 (synopsis "Abseil Python common libraries")
17449 (description
17450 "This package provides the Abseil Python Common Libraries, a collection
17451 of Python libraries for building Python applications.")
17452 (license license:asl2.0)))
17453
17454 (define-public python-astor
17455 (package
17456 (name "python-astor")
17457 (version "0.7.1")
17458 (source
17459 (origin
17460 (method url-fetch)
17461 (uri (pypi-uri "astor" version))
17462 (sha256
17463 (base32
17464 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17465 (build-system python-build-system)
17466 ;; FIXME: There are two errors and two test failures.
17467 (arguments `(#:tests? #f))
17468 (home-page "https://github.com/berkerpeksag/astor")
17469 (synopsis "Read and write Python ASTs")
17470 (description "Astor is designed to allow easy manipulation of Python
17471 source via the Abstract Syntax Tree.")
17472 (license license:bsd-3)))
17473
17474 (define-public python2-astor
17475 (package-with-python2 python-astor))
17476
17477 (define-public python-astunparse
17478 (package
17479 (name "python-astunparse")
17480 (version "1.6.2")
17481 (source
17482 (origin
17483 (method url-fetch)
17484 (uri (pypi-uri "astunparse" version))
17485 (sha256
17486 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17487 (build-system python-build-system)
17488 (arguments '(#:tests? #f)) ; there are none
17489 (propagated-inputs
17490 `(("python-six" ,python-six)
17491 ("python-wheel" ,python-wheel)))
17492 (home-page "https://github.com/simonpercivall/astunparse")
17493 (synopsis "AST unparser for Python")
17494 (description "This package provides an AST unparser for Python. It is a
17495 factored out version of @code{unparse} found in the Python source
17496 distribution.")
17497 (license license:bsd-3)))
17498
17499 (define-public python-gast
17500 (package
17501 (name "python-gast")
17502 (version "0.3.3")
17503 (source
17504 (origin
17505 (method url-fetch)
17506 (uri (pypi-uri "gast" version))
17507 (sha256
17508 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17509 (build-system python-build-system)
17510 (propagated-inputs
17511 `(("python-astunparse" ,python-astunparse)))
17512 (home-page "https://pypi.org/project/gast/")
17513 (synopsis "Generic Python AST that abstracts the underlying Python version")
17514 (description
17515 "GAST provides a compatibility layer between the AST of various Python
17516 versions, as produced by @code{ast.parse} from the standard @code{ast}
17517 module.")
17518 (license license:bsd-3)))
17519
17520 (define-public python-wikidata
17521 (package
17522 (name "python-wikidata")
17523 (version "0.6.1")
17524 (source
17525 (origin
17526 (method url-fetch)
17527 (uri (pypi-uri "Wikidata" version))
17528 (sha256
17529 (base32
17530 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17531 (build-system python-build-system)
17532 (propagated-inputs
17533 `(("python-babel" ,python-babel)))
17534 (home-page "https://github.com/dahlia/wikidata")
17535 (synopsis "Wikidata client library")
17536 (description
17537 "This package provides a Python interface to
17538 @url{https://www.wikidata.org/, Wikidata}.")
17539 (properties '((upstream-name . "Wikidata")))
17540 (license license:gpl3+)))
17541
17542 (define-public python-doctest-ignore-unicode
17543 (package
17544 (name "python-doctest-ignore-unicode")
17545 (version "0.1.2")
17546 (source
17547 (origin
17548 (method url-fetch)
17549 (uri (pypi-uri "doctest-ignore-unicode" version))
17550 (sha256
17551 (base32
17552 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17553 (build-system python-build-system)
17554 (native-inputs
17555 `(("python-nose" ,python-nose)))
17556 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17557 (synopsis "Ignore Unicode literal prefixes in doctests")
17558 (description
17559 "This package adds support for a flag to ignore Unicode literal prefixes
17560 in doctests.")
17561 (license license:asl2.0)))
17562
17563 (define-public python-attr
17564 (package
17565 (name "python-attr")
17566 (version "0.3.1")
17567 (source
17568 (origin
17569 (method url-fetch)
17570 (uri (pypi-uri "attr" version))
17571 (sha256
17572 (base32
17573 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17574 (build-system python-build-system)
17575 (home-page "https://github.com/denis-ryzhkov/attr")
17576 (synopsis "Decorator for attributes of target function or class")
17577 (description "Simple decorator to set attributes of target function or
17578 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17579 (license license:expat)))
17580
17581 (define-public python-construct
17582 (package
17583 (name "python-construct")
17584 (version "2.10.56")
17585 (source
17586 (origin
17587 (method url-fetch)
17588 (uri (pypi-uri "construct" version))
17589 (sha256
17590 (base32
17591 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17592 (build-system python-build-system)
17593 (arguments
17594 `(#:tests? #f)) ; No tests exist.
17595 (propagated-inputs
17596 `(("python-extras" ,python-extras)
17597 ("python-arrow" ,python-arrow)
17598 ("python-numpy" ,python-numpy)
17599 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17600 (home-page "https://construct.readthedocs.io")
17601 (synopsis "Declarative and symmetrical parser and builder for binary data")
17602 (description
17603 "This package provides both simple, atomic constructs (such as
17604 integers of various sizes), as well as composite ones which allow you
17605 form hierarchical and sequential structures of increasing complexity.
17606 It features bit and byte granularity, easy debugging and testing, an
17607 easy-to-extend subclass system, and lots of primitive constructs to
17608 make your work easier.")
17609 (license license:expat)))
17610
17611 (define-public python-humanize
17612 (package
17613 (name "python-humanize")
17614 (version "0.5.1")
17615 (source
17616 (origin
17617 (method url-fetch)
17618 (uri (pypi-uri "humanize" version))
17619 (sha256
17620 (base32
17621 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17622 (arguments
17623 '(#:tests? #f)) ; tests not in pypi archive
17624 (build-system python-build-system)
17625 (home-page "https://github.com/jmoiron/humanize")
17626 (synopsis "Print numerical information in a human-readable form")
17627 (description "This package provides a Python module that displays numbers
17628 and dates in \"human readable\" forms. For example, it would display
17629 \"12345591313\" as \"12.3 billion\".")
17630 (license license:expat)))
17631
17632 (define-public python-txaio
17633 (package
17634 (name "python-txaio")
17635 (version "18.8.1")
17636 (source
17637 (origin
17638 (method url-fetch)
17639 (uri (pypi-uri "txaio" version))
17640 (sha256
17641 (base32
17642 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17643 (build-system python-build-system)
17644 (propagated-inputs
17645 `(("python-twisted" ,python-twisted)
17646 ("python-six" ,python-six)))
17647 (home-page "https://github.com/crossbario/txaio")
17648 (synopsis "Compatibility layer between Python asyncio and Twisted")
17649 (description "Txaio provides a compatibility layer between the Python
17650 @code{asyncio} module and @code{Twisted}.")
17651 (license license:expat)))
17652
17653 (define-public python-toolshed
17654 (package
17655 (name "python-toolshed")
17656 (version "0.4.6")
17657 (source
17658 (origin
17659 (method url-fetch)
17660 (uri (pypi-uri "toolshed" version))
17661 (sha256
17662 (base32
17663 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
17664 (build-system python-build-system)
17665 (native-inputs
17666 `(("python-nose" ,python-nose)))
17667 (home-page "https://github.com/brentp/toolshed/")
17668 (synopsis "Collection of modules and functions for working with data")
17669 (description "This is a collection of well-tested, simple modules and
17670 functions that aim to reduce boilerplate when working with data.")
17671 (license license:bsd-2)))
17672
17673 (define-public python-annoy
17674 (package
17675 (name "python-annoy")
17676 (version "1.15.1")
17677 (source
17678 (origin
17679 (method url-fetch)
17680 (uri (pypi-uri "annoy" version))
17681 (sha256
17682 (base32
17683 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
17684 (build-system python-build-system)
17685 (native-inputs
17686 `(("python-nose" ,python-nose)))
17687 (home-page "https://github.com/spotify/annoy/")
17688 (synopsis "Approximate nearest neighbors library")
17689 (description
17690 "Annoy is a C++ library with Python bindings to search for points in
17691 space that are close to a given query point. It also creates large read-only
17692 file-based data structures that are @code{mmap}ped into memory so that many
17693 processes may share the same data.")
17694 (license license:asl2.0)))
17695
17696 (define-public python-pylzma
17697 (package
17698 (name "python-pylzma")
17699 (version "0.5.0")
17700 (source
17701 (origin
17702 (method url-fetch)
17703 (uri (pypi-uri "pylzma" version))
17704 (sha256
17705 (base32
17706 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
17707 (build-system python-build-system)
17708 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
17709 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
17710 (description "This package provides Python bindings for the LZMA library
17711 by Igor Pavlov.")
17712 (license license:lgpl2.1+)))
17713
17714 (define-public python2-pylzma
17715 (package-with-python2 python-pylzma))
17716
17717 (define-public python2-zeroconf
17718 (package
17719 (name "python2-zeroconf")
17720
17721 ;; This is the last version that supports Python 2.x.
17722 (version "0.19.1")
17723 (source
17724 (origin
17725 (method url-fetch)
17726 (uri (pypi-uri "zeroconf" version))
17727 (sha256
17728 (base32
17729 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
17730 (build-system python-build-system)
17731 (arguments
17732 `(#:python ,python-2
17733 #:phases
17734 (modify-phases %standard-phases
17735 (add-after 'unpack 'patch-requires
17736 (lambda* (#:key inputs #:allow-other-keys)
17737 (substitute* "setup.py"
17738 (("enum-compat")
17739 "enum34"))
17740 #t)))))
17741 (native-inputs
17742 `(("python2-six" ,python2-six)
17743 ("python2-enum32" ,python2-enum34)
17744 ("python2-netifaces" ,python2-netifaces)
17745 ("python2-typing" ,python2-typing)))
17746 (home-page "https://github.com/jstasiak/python-zeroconf")
17747 (synopsis "Pure Python mDNS service discovery")
17748 (description
17749 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
17750 compatible).")
17751 (license license:lgpl2.1+)))
17752
17753 (define-public python-bsddb3
17754 (package
17755 (name "python-bsddb3")
17756 (version "6.2.6")
17757 (source
17758 (origin
17759 (method url-fetch)
17760 (uri (pypi-uri "bsddb3" version))
17761 (sha256
17762 (base32
17763 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
17764 (build-system python-build-system)
17765 (inputs
17766 `(("bdb" ,bdb)))
17767 (arguments
17768 '(#:phases
17769 (modify-phases %standard-phases
17770 (add-after 'unpack 'configure-locations
17771 (lambda* (#:key inputs #:allow-other-keys)
17772 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
17773 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
17774 #t))
17775 (replace 'check
17776 (lambda _
17777 (invoke "python3" "test3.py" "-v"))))))
17778 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
17779 (synopsis "Python bindings for Oracle Berkeley DB")
17780 (description
17781 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
17782 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
17783 Transaction objects, and each of these is exposed as a Python type in the
17784 bsddb3.db module. The database objects can use various access methods: btree,
17785 hash, recno, and queue. Complete support of Berkeley DB distributed
17786 transactions. Complete support for Berkeley DB Replication Manager.
17787 Complete support for Berkeley DB Base Replication. Support for RPC.")
17788 (license license:bsd-3)))
17789
17790 (define-public python-dbfread
17791 (package
17792 (name "python-dbfread")
17793 (version "2.0.7")
17794 (source (origin
17795 (method url-fetch)
17796 (uri (pypi-uri "dbfread" version))
17797 (sha256
17798 (base32
17799 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
17800 (build-system python-build-system)
17801 (native-inputs
17802 `(("python-pytest" ,python-pytest)))
17803 (home-page "https://dbfread.readthedocs.io")
17804 (synopsis "Read DBF Files with Python")
17805 (description
17806 "This library reads DBF files and returns the data as native Python data
17807 types for further processing. It is primarily intended for batch jobs and
17808 one-off scripts.")
17809 (license license:expat)))
17810
17811 (define-public python-cached-property
17812 (package
17813 (name "python-cached-property")
17814 (version "1.5.1")
17815 (source
17816 (origin
17817 (method url-fetch)
17818 (uri (pypi-uri "cached-property" version))
17819 (sha256
17820 (base32
17821 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
17822 (build-system python-build-system)
17823 (arguments
17824 `(#:phases
17825 (modify-phases %standard-phases
17826 ;; https://github.com/pydanny/cached-property/issues/131
17827 ;; recent versions of freezegun break one test
17828 (add-after 'unpack 'disable-broken-test
17829 (lambda _
17830 (substitute* "tests/test_cached_property.py"
17831 (("def test_threads_ttl_expiry\\(self\\)" m)
17832 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
17833 " " m)))
17834 #t)))))
17835 (native-inputs
17836 `(("python-freezegun" ,python-freezegun)))
17837 (home-page
17838 "https://github.com/pydanny/cached-property")
17839 (synopsis
17840 "Decorator for caching properties in classes")
17841 (description
17842 "This package provides a decorator which makes caching
17843 time-or-computationally-expensive properties quick and easy and works in Python
17844 2 or 3.")
17845 (license license:bsd-3)))
17846
17847 (define-public python-folium
17848 (package
17849 (name "python-folium")
17850 (version "0.10.1")
17851 (source
17852 (origin
17853 (method url-fetch)
17854 (uri (pypi-uri "folium" version))
17855 (sha256
17856 (base32
17857 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
17858 (build-system python-build-system)
17859 (propagated-inputs
17860 `(("python-branca" ,python-branca)
17861 ("python-jinja2" ,python-jinja2)
17862 ("python-numpy" ,python-numpy)
17863 ("python-requests" ,python-requests)))
17864 (native-inputs
17865 `(("python-pytest" ,python-pytest)))
17866 (home-page "https://github.com/python-visualization/folium")
17867 (synopsis "Make beautiful maps with Leaflet.js & Python")
17868 (description "@code{folium} makes it easy to visualize data that’s been
17869 manipulated in Python on an interactive leaflet map. It enables both the
17870 binding of data to a map for @code{choropleth} visualizations as well as
17871 passing rich vector/raster/HTML visualizations as markers on the map.
17872
17873 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
17874 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
17875 supports Image, Video, GeoJSON and TopoJSON overlays.")
17876 (license license:expat)))
17877
17878 (define-public jube
17879 (package
17880 ;; This is a command-line tool, so no "python-" prefix.
17881 (name "jube")
17882 (version "2.2.2")
17883 (source (origin
17884 (method url-fetch)
17885 (uri (string-append
17886 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
17887 version))
17888 (sha256
17889 (base32
17890 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
17891 (file-name (string-append "jube-" version ".tar.gz"))))
17892 (build-system python-build-system)
17893 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
17894 (synopsis "Benchmarking environment")
17895 (description
17896 "JUBE helps perform and analyze benchmarks in a systematic way. For each
17897 benchmarked application, benchmark data is stored in a format that allows JUBE
17898 to deduct the desired information. This data can be parsed by automatic pre-
17899 and post-processing scripts that draw information and store it more densely
17900 for manual interpretation.")
17901 (license license:gpl3+)))
17902
17903 (define-public python-pyroutelib3
17904 (package
17905 (name "python-pyroutelib3")
17906 (version "1.3.post1")
17907 (source
17908 (origin
17909 (method url-fetch)
17910 (uri (pypi-uri "pyroutelib3" version))
17911 (sha256
17912 (base32
17913 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
17914 (build-system python-build-system)
17915 (propagated-inputs
17916 `(("python-dateutil" ,python-dateutil)))
17917 (home-page "https://github.com/MKuranowski/pyroutelib3")
17918 (synopsis "Library for simple routing on OSM data")
17919 (description "Library for simple routing on OSM data")
17920 (license license:gpl3+)))
17921
17922 (define-public python-bibtexparser
17923 (package
17924 (name "python-bibtexparser")
17925 (version "1.1.0")
17926 (source
17927 (origin
17928 (method url-fetch)
17929 (uri (pypi-uri "bibtexparser" version))
17930 (sha256
17931 (base32
17932 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
17933 (build-system python-build-system)
17934 (propagated-inputs
17935 `(("python-pyparsing" ,python-pyparsing)))
17936 (native-inputs
17937 `(("python-future" ,python-future)))
17938 (home-page "https://github.com/sciunto-org/python-bibtexparser")
17939 (synopsis "Python library to parse BibTeX files")
17940 (description "BibtexParser is a Python library to parse BibTeX files.")
17941 (license (list license:bsd-3 license:lgpl3))))
17942
17943 (define-public python-distro
17944 (package
17945 (name "python-distro")
17946 (version "1.4.0")
17947 (source
17948 (origin
17949 (method url-fetch)
17950 (uri (pypi-uri "distro" version))
17951 (sha256
17952 (base32
17953 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
17954 (build-system python-build-system)
17955 (native-inputs
17956 `(("python-pytest" ,python-pytest)))
17957 (home-page "https://github.com/nir0s/distro")
17958 (synopsis
17959 "OS platform information API")
17960 (description
17961 "@code{distro} provides information about the OS distribution it runs on,
17962 such as a reliable machine-readable ID, or version information.
17963
17964 It is the recommended replacement for Python's original
17965 `platform.linux_distribution` function (which will be removed in Python 3.8).
17966 @code{distro} also provides a command-line interface to output the platform
17967 information in various formats.")
17968 (license license:asl2.0)))
17969
17970 (define-public python-cairosvg
17971 (package
17972 (name "python-cairosvg")
17973 (version "2.4.2")
17974 (source
17975 (origin
17976 (method url-fetch)
17977 (uri (pypi-uri "CairoSVG" version))
17978 (sha256
17979 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
17980 (build-system python-build-system)
17981 (arguments
17982 `(#:phases
17983 (modify-phases %standard-phases
17984 (replace 'check
17985 (lambda _ (invoke "pytest"))))))
17986 (propagated-inputs
17987 `(("python-cairocffi" ,python-cairocffi)
17988 ("python-cssselect2" ,python-cssselect2)
17989 ("python-defusedxml" ,python-defusedxml)
17990 ("python-pillow" ,python-pillow)
17991 ("python-tinycss2" ,python-tinycss2)))
17992 (native-inputs
17993 `(("python-pytest-flake8" ,python-pytest-flake8)
17994 ("python-pytest-isort" ,python-pytest-isort)
17995 ("python-pytest-runner" ,python-pytest-runner)))
17996 (home-page "https://cairosvg.org/")
17997 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
17998 (description "CairoSVG is a SVG converter based on Cairo. It can export
17999 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18000 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18001 parsed, the result is drawn to a Cairo surface that can be exported to
18002 qvarious formats: PDF, PostScript, PNG and even SVG.")
18003 (license license:lgpl3+)))
18004
18005 (define-public python-pyphen
18006 (package
18007 (name "python-pyphen")
18008 (version "0.9.5")
18009 (source
18010 (origin
18011 (method url-fetch)
18012 (uri (pypi-uri "Pyphen" version))
18013 (sha256
18014 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18015 (build-system python-build-system)
18016 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18017 ;; embedded set provided by upstream - like Debian does.
18018 (home-page "https://github.com/Kozea/Pyphen")
18019 (synopsis "Pure Python module to hyphenate text")
18020 (description "Pyphen is a pure Python module to hyphenate text using
18021 existing Hunspell hyphenation dictionaries.")
18022 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18023
18024 (define-public python-intelhex
18025 (package
18026 (name "python-intelhex")
18027 (version "2.2.1")
18028 (source
18029 (origin
18030 (method url-fetch)
18031 (uri (pypi-uri "intelhex" version))
18032 (sha256
18033 (base32
18034 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18035 (build-system python-build-system)
18036 (arguments '(#:tests? #f)) ;issue with version
18037 (home-page "https://pypi.org/project/IntelHex/")
18038 (synopsis "Python library for Intel HEX files manipulations")
18039 (description "The Intel HEX file format is widely used in microprocessors
18040 and microcontrollers area (embedded systems etc.) as the de facto standard for
18041 representation of code to be programmed into microelectronic devices. This
18042 package provides an intelhex Python library to read, write, create from
18043 scratch and manipulate data from Intel HEX file format. It also includes
18044 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18045 converters and more, those based on the library itself.")
18046 (license license:bsd-3)))
18047
18048 (define-public python-pykwalify
18049 (package
18050 (name "python-pykwalify")
18051 (version "1.7.0")
18052 (source
18053 (origin
18054 (method url-fetch)
18055 (uri (pypi-uri "pykwalify" version))
18056 (sha256
18057 (base32
18058 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18059 (build-system python-build-system)
18060 (arguments '(#:tests? #f)) ;missing dependencies
18061 (propagated-inputs
18062 `(("python-dateutil" ,python-dateutil)
18063 ("python-docopt" ,python-docopt)
18064 ("python-pyyaml" ,python-pyyaml)))
18065 (home-page "https://github.com/grokzen/pykwalify")
18066 (synopsis
18067 "Python lib/cli for JSON/YAML schema validation")
18068 (description
18069 "This package provides a parser, schema validator, and data binding tool
18070 for YAML and JSON.")
18071 (license license:expat)))
18072
18073 (define-public python-dbusmock
18074 (package
18075 (name "python-dbusmock")
18076 (version "0.18.3")
18077 (source
18078 (origin
18079 (method url-fetch)
18080 (uri (pypi-uri "python-dbusmock" version))
18081 (sha256
18082 (base32
18083 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18084 (build-system python-build-system)
18085 (arguments
18086 '(#:phases
18087 (modify-phases %standard-phases
18088 (add-after 'unpack 'patch-shell-path
18089 (lambda _
18090 (substitute* "tests/test_code.py"
18091 (("/bin/bash") (which "bash")))
18092 #t)))))
18093 (native-inputs
18094 `(;; For tests.
18095 ("dbus" ,dbus) ; for dbus-daemon
18096 ("python-nose" ,python-nose)
18097 ("which" ,which)))
18098 (propagated-inputs
18099 `(("python-dbus" ,python-dbus)
18100 ("python-pygobject" ,python-pygobject)))
18101 (home-page "https://github.com/martinpitt/python-dbusmock")
18102 (synopsis "Python library for mock D-Bus objects")
18103 (description "python-dbusmock allows for the easy creation of mock objects on
18104 D-Bus. This is useful for writing tests for software which talks to D-Bus
18105 services such as upower, systemd, logind, gnome-session or others, and it is
18106 hard (or impossible without root privileges) to set the state of the real
18107 services to what you expect in your tests.")
18108 (license license:lgpl3+)))
18109
18110 (define-public python-ujson
18111 (package
18112 (name "python-ujson")
18113 (version "1.35")
18114 (source
18115 (origin
18116 (method url-fetch)
18117 (uri (pypi-uri "ujson" version))
18118 (sha256
18119 (base32
18120 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18121 (build-system python-build-system)
18122 (home-page "http://www.esn.me")
18123 (synopsis
18124 "Ultra fast JSON encoder and decoder for Python")
18125 (description
18126 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18127 bindings for Python 2.5+ and 3.")
18128 (license license:bsd-3)))
18129
18130 (define-public python2-ujson
18131 (package-with-python2 python-ujson))
18132
18133 (define-public python-iocapture
18134 ;; The latest release is more than a year older than this commit.
18135 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18136 (revision "1"))
18137 (package
18138 (name "python-iocapture")
18139 (version "0.1.2")
18140 (source
18141 (origin
18142 (method git-fetch)
18143 (uri (git-reference
18144 (url "https://github.com/oinume/iocapture.git")
18145 (commit commit)))
18146 (file-name (git-file-name name version))
18147 (sha256
18148 (base32
18149 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18150 (build-system python-build-system)
18151 (arguments
18152 `(#:phases
18153 (modify-phases %standard-phases
18154 (delete 'check)
18155 (add-after 'install 'check
18156 (lambda* (#:key inputs outputs #:allow-other-keys)
18157 (add-installed-pythonpath inputs outputs)
18158 (invoke "py.test" "-v" "tests")
18159 #t)))))
18160 (propagated-inputs
18161 `(("python-flexmock" ,python-flexmock)
18162 ("python-pytest" ,python-pytest)
18163 ("python-pytest-cov" ,python-pytest-cov)
18164 ("python-six" ,python-six)))
18165 (home-page "https://github.com/oinume/iocapture")
18166 (synopsis "Python capturing tool for stdout and stderr")
18167 (description
18168 "This package helps you to capture the standard out (stdout) and the
18169 standard error channel (stderr) in your program.")
18170 (license license:expat))))
18171
18172 (define-public python-argh
18173 ;; There are 21 commits since the latest release containing important
18174 ;; improvements.
18175 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18176 (revision "1"))
18177 (package
18178 (name "python-argh")
18179 (version (git-version "0.26.2" revision commit))
18180 (source
18181 (origin
18182 (method git-fetch)
18183 (uri (git-reference
18184 (url "https://github.com/neithere/argh.git")
18185 (commit commit)))
18186 (file-name (git-file-name name version))
18187 (sha256
18188 (base32
18189 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18190 (build-system python-build-system)
18191 (propagated-inputs
18192 `(("python-iocapture" ,python-iocapture)
18193 ("python-mock" ,python-mock)
18194 ("python-pytest" ,python-pytest)
18195 ("python-pytest-cov" ,python-pytest-cov)
18196 ("python-pytest-xdist" ,python-pytest-xdist)
18197 ("python-tox" ,python-tox)))
18198 (home-page "https://github.com/neithere/argh/")
18199 (synopsis "Argparse wrapper with natural syntax")
18200 (description
18201 "python-argh is a small library that provides several layers of
18202 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18203 always possible to declare a command with the highest possible (and least
18204 flexible) layer and then tune the behaviour with any of the lower layers
18205 including the native API of @code{python-argparse}.")
18206 (license license:lgpl3+))))
18207
18208 (define-public python-ppft
18209 (package
18210 (name "python-ppft")
18211 (version "1.6.6.1")
18212 (source
18213 (origin
18214 (method url-fetch)
18215 (uri (pypi-uri "ppft" version))
18216 (sha256
18217 (base32
18218 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18219 (build-system python-build-system)
18220 (arguments '(#:tests? #f)) ; there are none
18221 (propagated-inputs
18222 `(("python-six" ,python-six)))
18223 (home-page "https://pypi.org/project/ppft/")
18224 (synopsis "Fork of Parallel Python")
18225 (description
18226 "This package is a fork of Parallel Python. The Parallel Python
18227 module (@code{pp}) provides an easy and efficient way to create
18228 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18229 computers and clusters. It features cross-platform portability and dynamic
18230 load balancing.")
18231 (license license:bsd-3)))
18232
18233 (define-public python-pox
18234 (package
18235 (name "python-pox")
18236 (version "0.2.7")
18237 (source
18238 (origin
18239 (method url-fetch)
18240 (uri (pypi-uri "pox" version))
18241 (sha256
18242 (base32
18243 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18244 (build-system python-build-system)
18245 (arguments
18246 `(#:phases
18247 (modify-phases %standard-phases
18248 (replace 'check
18249 (lambda _
18250 (mkdir-p "/tmp/guix")
18251 (setenv "SHELL" "bash")
18252 (setenv "USERNAME" "guix")
18253 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18254 (invoke "py.test" "-vv")
18255 #t)))))
18256 (native-inputs
18257 `(("python-pytest" ,python-pytest)
18258 ("which" ,which)))
18259 (home-page "https://pypi.org/project/pox/")
18260 (synopsis "Python utilities for filesystem exploration and automated builds")
18261 (description
18262 "Pox provides a collection of utilities for navigating and manipulating
18263 filesystems. This module is designed to facilitate some of the low level
18264 operating system interactions that are useful when exploring a filesystem on a
18265 remote host. Pox provides Python equivalents of several shell commands such
18266 as @command{which} and @command{find}. These commands allow automated
18267 discovery of what has been installed on an operating system, and where the
18268 essential tools are located.")
18269 (license license:bsd-3)))
18270
18271 (define-public python-pathos
18272 (package
18273 (name "python-pathos")
18274 (version "0.2.5")
18275 (source
18276 (origin
18277 (method url-fetch)
18278 (uri (pypi-uri "pathos" version))
18279 (sha256
18280 (base32
18281 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18282 (build-system python-build-system)
18283 (arguments
18284 '(#:phases
18285 (modify-phases %standard-phases
18286 (replace 'check
18287 (lambda _
18288 (setenv "PYTHONPATH"
18289 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18290 (invoke "python" "./tests/__main__.py"))))))
18291 (propagated-inputs
18292 `(("python-dill" ,python-dill)
18293 ("python-multiprocess" ,python-multiprocess)
18294 ("python-pox" ,python-pox)
18295 ("python-ppft" ,python-ppft)))
18296 (native-inputs
18297 `(("python-pytest" ,python-pytest)))
18298 (home-page "https://pypi.org/project/pathos/")
18299 (synopsis
18300 "Parallel graph management and execution in heterogeneous computing")
18301 (description
18302 "Python-pathos is a framework for heterogenous computing. It provides a
18303 consistent high-level interface for configuring and launching parallel
18304 computations across heterogenous resources. Python-pathos provides configurable
18305 launchers for parallel and distributed computing, where each launcher contains
18306 the syntactic logic to configure and launch jobs in an execution environment.")
18307 (license license:bsd-3)))
18308
18309 (define-public python-flit
18310 (package
18311 (name "python-flit")
18312 (version "2.1.0")
18313 (source
18314 (origin
18315 (method url-fetch)
18316 (uri (pypi-uri "flit" version))
18317 (sha256
18318 (base32
18319 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18320 (build-system python-build-system)
18321 (arguments
18322 `(#:tests? #f)) ; XXX: Check requires network access.
18323 (home-page "https://flit.readthedocs.io/")
18324 (synopsis
18325 "Simple packaging tool for simple packages")
18326 (description
18327 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18328 packages a single importable module or package at a time, using the import
18329 name as the name on PyPI. All subpackages and data files within a package
18330 are included automatically.")
18331 (license license:bsd-3)))
18332
18333 (define-public python-pathtools
18334 (package
18335 (name "python-pathtools")
18336 (version "0.1.2")
18337 (source
18338 (origin
18339 (method url-fetch)
18340 (uri (pypi-uri "pathtools" version))
18341 (sha256
18342 (base32
18343 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18344 (build-system python-build-system)
18345 (home-page
18346 "https://github.com/gorakhargosh/pathtools")
18347 (synopsis "Path utilities for Python")
18348 (description "Pattern matching and various utilities for file systems
18349 paths.")
18350 (license license:expat)))
18351
18352 (define-public python-fastentrypoints
18353 (package
18354 (name "python-fastentrypoints")
18355 (version "0.12")
18356 (source
18357 (origin
18358 (method url-fetch)
18359 (uri (pypi-uri "fastentrypoints" version))
18360 (sha256
18361 (base32
18362 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18363 (build-system python-build-system)
18364 (home-page
18365 "https://github.com/ninjaaron/fast-entry_points")
18366 (synopsis
18367 "Makes entry_points specified in setup.py load more quickly")
18368 (description
18369 "Using entry_points in your setup.py makes scripts that start really
18370 slowly because it imports pkg_resources. This package allows such setup
18371 scripts to load entry points more quickly.")
18372 (license license:bsd-3)))
18373
18374 (define-public python-funcparserlib
18375 (package
18376 (name "python-funcparserlib")
18377 (version "0.3.6")
18378 (source
18379 (origin
18380 (method url-fetch)
18381 (uri (pypi-uri "funcparserlib" version))
18382 (sha256
18383 (base32
18384 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18385 (native-inputs
18386 `(("python-tox" ,python-tox)))
18387 (arguments
18388 `(#:phases
18389 (modify-phases %standard-phases
18390 (replace 'check
18391 (lambda _
18392 (invoke "tox"))))))
18393 (build-system python-build-system)
18394 (home-page
18395 "https://github.com/vlasovskikh/funcparserlib")
18396 (synopsis
18397 "Recursive descent parsing library based on functional combinators")
18398 (description
18399 "This package is a recursive descent parsing library for Python based on
18400 functional combinators. Parser combinators are just higher-order functions
18401 that take parsers as their arguments and return them as result values.")
18402 (license license:expat)))
18403
18404 (define-public python-speg
18405 (package
18406 (name "python-speg")
18407 (version "0.3")
18408 (source
18409 (origin
18410 (method url-fetch)
18411 (uri (pypi-uri "speg" version ".zip"))
18412 (sha256
18413 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18414 (arguments
18415 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18416 (native-inputs
18417 `(("unzip" ,unzip)))
18418 (build-system python-build-system)
18419 (home-page "https://github.com/avakar/speg")
18420 (synopsis "PEG-based parser interpreter with memoization")
18421 (description "This package is a PEG-based parser and interpreter with
18422 memoization.")
18423 (license license:expat)))
18424
18425 (define-public python-cson
18426 (package
18427 (name "python-cson")
18428 (version "0.8")
18429 (source
18430 (origin
18431 (method url-fetch)
18432 (uri (pypi-uri "cson" version))
18433 (sha256
18434 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18435 (build-system python-build-system)
18436 (propagated-inputs
18437 `(("python-speg" ,python-speg)))
18438 (home-page "https://github.com/avakar/pycson")
18439 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18440 (description "This package is a parser for Coffeescript Object
18441 Notation (CSON).")
18442 (license license:expat)))
18443
18444 (define-public python-asynctest
18445 (package
18446 (name "python-asynctest")
18447 (version "0.13.0")
18448 (source
18449 (origin
18450 (method url-fetch)
18451 (uri (pypi-uri "asynctest" version))
18452 (sha256
18453 (base32
18454 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18455 (build-system python-build-system)
18456 (arguments
18457 '(#:phases
18458 (modify-phases %standard-phases
18459 (replace 'check
18460 (lambda _
18461 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18462 (add-after 'unpack 'disable-tests
18463 (lambda* _
18464 (substitute* "test/test_selector.py"
18465 ;; XXX: This test fails for unknown reason inside the build
18466 ;; environment.
18467 (("def test_events_watched_outside_test_are_ignored")
18468 "@unittest.skip('disabled by guix')
18469 def test_events_watched_outside_test_are_ignored")))))))
18470 (home-page "https://github.com/Martiusweb/asynctest")
18471 (synopsis "Extension of unittest for testing asyncio libraries")
18472 (description
18473 "The package asynctest is built on top of the standard unittest module
18474 and cuts down boilerplate code when testing libraries for asyncio.")
18475 (license license:asl2.0)))
18476
18477 (define-public python-aionotify
18478 (package
18479 (name "python-aionotify")
18480 (version "0.2.0")
18481 (source
18482 (origin
18483 ;; Source tarball on PyPi lacks tests
18484 (method git-fetch)
18485 (uri (git-reference
18486 (url "https://github.com/rbarrois/aionotify")
18487 (commit (string-append "v" version))))
18488 (file-name (git-file-name name version))
18489 (sha256
18490 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18491 (build-system python-build-system)
18492 (native-inputs `(("python-asynctest" ,python-asynctest)))
18493 (home-page "https://github.com/rbarrois/aionotify")
18494 (synopsis "Asyncio-powered inotify library")
18495 (description
18496 "@code{aionotify} is a simple, asyncio-based inotify library.")
18497 (license license:bsd-3)))
18498
18499 (define-public python-forbiddenfruit
18500 (package
18501 (name "python-forbiddenfruit")
18502 (version "0.1.3")
18503 (source
18504 (origin
18505 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18506 (method git-fetch)
18507 (uri (git-reference
18508 (url "https://github.com/clarete/forbiddenfruit")
18509 (commit version)))
18510 (file-name (git-file-name name version))
18511 (sha256
18512 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18513 (build-system python-build-system)
18514 (arguments
18515 '(#:phases
18516 (modify-phases %standard-phases
18517 (replace 'check
18518 (lambda _
18519 (invoke "make" "SKIP_DEPS=1"))))))
18520 (native-inputs
18521 `(("python-nose" ,python-nose)
18522 ("python-coverage" ,python-coverage)))
18523 (home-page "https://github.com/clarete/forbiddenfruit")
18524 (synopsis "Patch python built-in objects")
18525 (description "This project allows Python code to extend built-in types.")
18526 (license (list license:gpl3+ license:expat))))
18527
18528 (define-public python-shouldbe
18529 (package
18530 (name "python-shouldbe")
18531 (version "0.1.2")
18532 (source
18533 (origin
18534 (method url-fetch)
18535 (uri (pypi-uri "shouldbe" version))
18536 (sha256
18537 (base32
18538 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))))
18539 (build-system python-build-system)
18540 (propagated-inputs
18541 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18542 (native-inputs
18543 `(("python-nose" ,python-nose)))
18544 (home-page "https://github.com/directxman12/should_be")
18545 (synopsis "Python Assertion Helpers inspired by Shouldly")
18546 (description
18547 "Python Assertion Helpers inspired by Shouldly.")
18548 (license license:isc)))
18549
18550 (define-public python-k5test
18551 (package
18552 (name "python-k5test")
18553 (version "0.9.2")
18554 (source
18555 (origin
18556 (method url-fetch)
18557 (uri (pypi-uri "k5test" version))
18558 (sha256
18559 (base32
18560 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18561 (build-system python-build-system)
18562 (propagated-inputs
18563 `(("python-six" ,python-six)
18564 ;; `which`, `kadmin.local` binaries called inside library
18565 ("which" ,which)
18566 ("mit-krb5" ,mit-krb5)))
18567 (native-inputs `(("mit-krb5" ,mit-krb5)))
18568 (arguments
18569 '(#:phases
18570 (modify-phases %standard-phases
18571 (add-after 'unpack 'patch-paths
18572 (lambda* _
18573 (substitute* "k5test/realm.py"
18574 (("'kadmin_local'") "'kadmin.local'")))))))
18575 (home-page "https://github.com/pythongssapi/k5test")
18576 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18577 (description
18578 "@code{k5test} is a library for setting up self-contained Kerberos 5
18579 environments, and running Python unit tests inside those environments. It is
18580 based on the file of the same name found alongside the MIT Kerberos 5 unit
18581 tests.")
18582 (license license:isc)))
18583
18584 (define-public python-gssapi
18585 (package
18586 (name "python-gssapi")
18587 (version "1.6.1")
18588 (source
18589 (origin
18590 (method url-fetch)
18591 (uri (pypi-uri "gssapi" version))
18592 (sha256
18593 (base32
18594 "1gymg4asvwrz7y13qpwp2s5g8qwq179d72gkj09q6bfcgs82l5wr"))))
18595 (build-system python-build-system)
18596 (propagated-inputs
18597 `(("python-decorator" ,python-decorator)
18598 ("python-six" ,python-six)))
18599 (inputs
18600 `(("mit-krb5" ,mit-krb5)))
18601 ;; for tests
18602 (native-inputs
18603 `(("python-shouldbe" ,python-shouldbe)
18604 ("python-parameterized" ,python-parameterized)
18605 ("python-k5test" ,python-k5test)
18606 ("python-nose" ,python-nose)))
18607 (home-page "https://github.com/pythongssapi/python-gssapi")
18608 (synopsis "Python GSSAPI Wrapper")
18609 (description
18610 "Python-GSSAPI provides both low-level and high level wrappers around the
18611 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
18612 also be useable with other GSSAPI mechanisms.")
18613 (license license:isc)))
18614
18615 (define-public python-check-manifest
18616 (package
18617 (name "python-check-manifest")
18618 (version "0.37")
18619 (source
18620 (origin
18621 (method url-fetch)
18622 (uri (pypi-uri "check-manifest" version))
18623 (sha256
18624 (base32
18625 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
18626 (build-system python-build-system)
18627 (native-inputs
18628 `(("python-mock" ,python-mock)
18629 ("git" ,git)))
18630 (home-page "https://github.com/mgedmin/check-manifest")
18631 (synopsis "Check MANIFEST.in in a Python source package for completeness")
18632 (description "Python package can include a MANIFEST.in file to help with
18633 sending package files to the Python Package Index. This package checks that
18634 file to ensure it completely and accurately describes your project.")
18635 (license license:expat)))
18636
18637 (define-public python-android-stringslib
18638 (package
18639 (name "python-android-stringslib")
18640 (version "0.1.2")
18641 (source
18642 (origin
18643 (method git-fetch)
18644 (uri (git-reference
18645 (url "https://framagit.org/tyreunom/python-android-strings-lib")
18646 (commit (string-append "v" version))))
18647 (file-name (git-file-name name version))
18648 (sha256
18649 (base32
18650 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
18651 (build-system python-build-system)
18652 (arguments
18653 `(#:tests? #f))
18654 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
18655 (synopsis "Android strings.xml support")
18656 (description "Android Strings Lib provides support for android's strings.xml
18657 files. These files are used to translate strings in android apps.")
18658 (license license:expat)))
18659
18660 (define-public python-watchdog
18661 (package
18662 (name "python-watchdog")
18663 (version "0.9.0")
18664 (source
18665 (origin
18666 (method url-fetch)
18667 (uri (pypi-uri "watchdog" version))
18668 (sha256
18669 (base32
18670 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
18671 (build-system python-build-system)
18672 (arguments
18673 `(#:phases
18674 (modify-phases %standard-phases
18675 (add-before 'check 'remove-failing
18676 (lambda _
18677 (delete-file "tests/test_inotify_buffer.py")
18678 (delete-file "tests/test_snapshot_diff.py")
18679 #t)))))
18680 (propagated-inputs
18681 `(("python-argh" ,python-argh)
18682 ("python-pathtools" ,python-pathtools)
18683 ("python-pyyaml" ,python-pyyaml)))
18684 (native-inputs
18685 `(("python-pytest-cov" ,python-pytest-cov)
18686 ("python-pytest-timeout" ,python-pytest-timeout)))
18687 (home-page "https://github.com/gorakhargosh/watchdog")
18688 (synopsis "Filesystem events monitoring")
18689 (description "This package provides a way to monitor filesystem events
18690 such as a file modification and trigger an action. This is similar to inotify,
18691 but portable.")
18692 (license license:asl2.0)))
18693
18694 (define-public python-wget
18695 (package
18696 (name "python-wget")
18697 (version "3.2")
18698 (source
18699 (origin
18700 (method url-fetch)
18701 (uri (pypi-uri "wget" version ".zip"))
18702 (sha256
18703 (base32
18704 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
18705 (build-system python-build-system)
18706 (native-inputs `(("unzip" ,unzip)))
18707 (home-page "https://bitbucket.org/techtonik/python-wget/")
18708 (synopsis "Pure Python download utility")
18709 (description "The python-wget library provides an API to download files
18710 with features similar to the @command{wget} utility.")
18711 (license license:unlicense)))
18712
18713 (define-public offlate
18714 (package
18715 (name "offlate")
18716 (version "0.5")
18717 (source
18718 (origin
18719 (method git-fetch)
18720 (uri (git-reference
18721 (url "https://framagit.org/tyreunom/offlate")
18722 (commit version)))
18723 (file-name (git-file-name name version))
18724 (sha256
18725 (base32
18726 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
18727 (build-system python-build-system)
18728 (arguments
18729 ;; No tests
18730 `(#:tests? #f))
18731 (propagated-inputs
18732 `(("python-android-stringslib" ,python-android-stringslib)
18733 ("python-dateutil" ,python-dateutil)
18734 ("python-gitlab" ,python-gitlab)
18735 ("python-lxml" ,python-lxml)
18736 ("python-polib" ,python-polib)
18737 ("python-pyenchant" ,python-pyenchant)
18738 ("python-pygit2" ,python-pygit2)
18739 ("python-pygithub" ,python-pygithub)
18740 ("python-pyqt" ,python-pyqt)
18741 ("python-requests" ,python-requests)
18742 ("python-ruamel.yaml" ,python-ruamel.yaml)
18743 ("python-translation-finder" ,python-translation-finder)
18744 ("python-watchdog" ,python-watchdog)))
18745 (native-inputs
18746 `(("qttools" ,qttools)))
18747 (home-page "https://framagit.org/tyreunom/offlate")
18748 (synopsis "Offline translation interface for online translation tools")
18749 (description "Offlate offers a unified interface for different translation
18750 file formats, as well as many different online translation platforms. You can
18751 use it to get work from online platforms, specialized such as the Translation
18752 Project, or not such a gitlab instance when your upstream doesn't use any
18753 dedicated platform. The tool proposes a unified interface for any format and
18754 an upload option to send your work back to the platform.")
18755 (license license:gpl3+)))
18756
18757 (define-public python-titlecase
18758 (package
18759 (name "python-titlecase")
18760 (version "0.12.0")
18761 (source
18762 (origin
18763 (method url-fetch)
18764 (uri (pypi-uri "titlecase" version))
18765 (sha256
18766 (base32
18767 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
18768 (build-system python-build-system)
18769 (native-inputs
18770 `(("python-nose" ,python-nose)))
18771 (home-page "https://github.com/ppannuto/python-titlecase")
18772 (synopsis "Capitalize strings similar to book titles")
18773 (description
18774 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
18775 It capitalizes (predominantly English) strings in a way that is similar to
18776 book titles, using the New York Times Manual of Style to leave certain words
18777 lowercase.")
18778 (license license:expat)))
18779
18780 (define-public python-pypng
18781 (package
18782 (name "python-pypng")
18783 (version "0.0.20")
18784 (source
18785 (origin
18786 (method url-fetch)
18787 (uri (pypi-uri "pypng" version))
18788 (sha256
18789 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
18790 (build-system python-build-system)
18791 (home-page "https://github.com/drj11/pypng")
18792 (synopsis "Pure Python PNG image encoder/decoder")
18793 (description
18794 "The PyPNG module implements support for PNG images. It reads and writes
18795 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
18796 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
18797 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
18798 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
18799 A number of optional chunks can be specified (when writing) and
18800 understood (when reading): tRNS, bKGD, gAMA.
18801
18802 PyPNG is not a high level toolkit for image processing (like PIL) and does not
18803 aim at being a replacement or competitor. Its strength lies in fine-grained
18804 extensive support of PNG features. It can also read and write Netpbm PAM
18805 files, with a focus on its use as an intermediate format for implementing
18806 custom PNG processing.")
18807 (license license:expat)))
18808
18809 (define-public python-fuzzywuzzy
18810 (package
18811 (name "python-fuzzywuzzy")
18812 (version "0.18.0")
18813 (source
18814 (origin
18815 (method url-fetch)
18816 (uri (pypi-uri "fuzzywuzzy" version))
18817 (sha256
18818 (base32
18819 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
18820 (build-system python-build-system)
18821 (native-inputs
18822 `(("python-hypothesis" ,python-hypothesis)
18823 ("python-pycodestyle" ,python-pycodestyle)
18824 ("python-pytest" ,python-pytest)))
18825 (propagated-inputs
18826 `(("python-levenshtein" ,python-levenshtein)))
18827 (home-page "https://github.com/seatgeek/fuzzywuzzy")
18828 (synopsis "Fuzzy string matching in Python")
18829 (description "Approximate string matching using
18830 @emph{Levenshtein Distance} to calculate the differences between
18831 sequences.")
18832 (license license:gpl2)))
18833
18834 (define-public python2-fuzzywuzzy
18835 (package-with-python2 python-fuzzywuzzy))
18836
18837 (define-public python-block-tracing
18838 (package
18839 (name "python-block-tracing")
18840 (version "1.0.1")
18841 (source
18842 (origin
18843 (method url-fetch)
18844 (uri (pypi-uri "block_tracing" version))
18845 (sha256
18846 (base32
18847 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
18848 (build-system python-build-system)
18849 (arguments '(#:tests? #f)) ; no tests
18850 (home-page "https://github.com/rianhunter/block_tracing")
18851 (synopsis "Protect process memory")
18852 (description
18853 "@code{block_tracing} is a tiny Python library that can be used to
18854 prevent debuggers and other applications from inspecting the memory within
18855 your process.")
18856 (license license:expat)))
18857
18858 (define-public python-gcovr
18859 (package
18860 (name "python-gcovr")
18861 (version "4.2")
18862 (source
18863 (origin
18864 (method url-fetch)
18865 (uri (pypi-uri "gcovr" version))
18866 (sha256
18867 (base32
18868 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
18869 (build-system python-build-system)
18870 (propagated-inputs
18871 `(("python-lxml" ,python-lxml)
18872 ("python-jinja2" ,python-jinja2)))
18873 (home-page "https://gcovr.com/")
18874 (synopsis "Utility for generating code coverage results")
18875 (description
18876 "Gcovr provides a utility for managing the use of the GNU gcov
18877 utility and generating summarized code coverage results. It is inspired
18878 by the Python coverage.py package, which provides a similar utility for
18879 Python.")
18880 (license license:bsd-3)))
18881
18882 (define-public python-owslib
18883 (package
18884 (name "python-owslib")
18885 (version "0.19.2")
18886 (source
18887 (origin
18888 (method url-fetch)
18889 (uri (pypi-uri "OWSLib" version))
18890 (sha256
18891 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
18892 (build-system python-build-system)
18893 (arguments
18894 '(#:tests? #f)) ; TODO: package dependencies required for tests.
18895 (synopsis "Interface for Open Geospatial Consortium web service")
18896 (description
18897 "OWSLib is a Python package for client programming with Open Geospatial
18898 Consortium (OGC) web service (hence OWS) interface standards, and their related
18899 content models.")
18900 (home-page "https://geopython.github.io/OWSLib/")
18901 (license license:bsd-3)))
18902
18903 (define-public python-docusign-esign
18904 (package
18905 (name "python-docusign-esign")
18906 (version "3.1.0")
18907 (source (origin
18908 (method url-fetch)
18909 (uri (pypi-uri "docusign_esign" version))
18910 (sha256
18911 (base32
18912 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
18913 (build-system python-build-system)
18914 ;; Testing requires undocumented setup changes, and so testing is disabled here.
18915 (arguments `(#:tests? #f))
18916 (propagated-inputs
18917 `(("python-certifi", python-certifi)
18918 ("python-six", python-six)
18919 ("python-dateutil", python-dateutil)
18920 ("python-urllib3", python-urllib3)
18921 ("python-pyjwt", python-pyjwt)
18922 ("python-cryptography", python-cryptography)
18923 ("python-nose", python-nose)))
18924 (synopsis "DocuSign Python Client")
18925 (description "The Official DocuSign Python Client Library used to interact
18926 with the eSign REST API. Send, sign, and approve documents using this client.")
18927 (home-page "https://www.docusign.com/devcenter")
18928 (license license:expat)))
18929
18930 (define-public python-xattr
18931 (package
18932 (name "python-xattr")
18933 (version "0.9.7")
18934 (source
18935 (origin
18936 (method url-fetch)
18937 (uri (pypi-uri "xattr" version))
18938 (sha256
18939 (base32
18940 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
18941 (build-system python-build-system)
18942 (propagated-inputs
18943 `(("python-cffi" ,python-cffi)))
18944 (home-page "https://github.com/xattr/xattr")
18945 (synopsis
18946 "Python wrapper for extended filesystem attributes")
18947 (description "This package provides a Python wrapper for using extended
18948 filesystem attributes. Extended attributes extend the basic attributes of files
18949 and directories in the file system. They are stored as name:data pairs
18950 associated with file system objects (files, directories, symlinks, etc).")
18951 (license license:expat)))
18952
18953 (define-public python-json-logger
18954 (package
18955 (name "python-json-logger")
18956 (version "0.1.11")
18957 (source
18958 (origin
18959 (method url-fetch)
18960 (uri (pypi-uri "python-json-logger" version))
18961 (sha256
18962 (base32
18963 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
18964 (build-system python-build-system)
18965 (home-page
18966 "https://github.com/madzak/python-json-logger")
18967 (synopsis "JSON log formatter in Python")
18968 (description "This library allows standard Python logging to output log data
18969 as JSON objects. With JSON we can make our logs more readable by machines and
18970 we can stop writing custom parsers for syslog-type records.")
18971 (license license:bsd-3)))
18972
18973 (define-public python-daiquiri
18974 (package
18975 (name "python-daiquiri")
18976 (version "2.1.1")
18977 (source
18978 (origin
18979 (method url-fetch)
18980 (uri (pypi-uri "daiquiri" version))
18981 (sha256
18982 (base32
18983 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
18984 (build-system python-build-system)
18985 (propagated-inputs
18986 `(("python-json-logger" ,python-json-logger)))
18987 (native-inputs
18988 `(("python-mock" ,python-mock)
18989 ("python-pytest" ,python-pytest)
18990 ("python-setuptools-scm" ,python-setuptools-scm)
18991 ("python-six" ,python-six)))
18992 (home-page "https://github.com/jd/daiquiri")
18993 (synopsis
18994 "Library to configure Python logging easily")
18995 (description "The daiquiri library provides an easy way to configure
18996 logging in Python. It also provides some custom formatters and handlers.")
18997 (license license:asl2.0)))
18998
18999 (define-public python-pifpaf
19000 (package
19001 (name "python-pifpaf")
19002 (version "2.4.0")
19003 (source
19004 (origin
19005 (method url-fetch)
19006 (uri (pypi-uri "pifpaf" version))
19007 (sha256
19008 (base32
19009 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19010 (build-system python-build-system)
19011 (arguments
19012 `(#:tests? #f))
19013 (propagated-inputs
19014 `(("python-click" ,python-click)
19015 ("python-daiquiri" ,python-daiquiri)
19016 ("python-fixtures" ,python-fixtures)
19017 ("python-jinja2" ,python-jinja2)
19018 ("python-pbr" ,python-pbr)
19019 ("python-psutil" ,python-psutil)
19020 ("python-six" ,python-six)
19021 ("python-xattr" ,python-xattr)))
19022 (native-inputs
19023 `(("python-mock" ,python-mock)
19024 ("python-os-testr" ,python-os-testr)
19025 ("python-requests" ,python-requests)
19026 ("python-testrepository" ,python-testrepository)
19027 ("python-testtools" ,python-testtools)))
19028 (home-page "https://github.com/jd/pifpaf")
19029 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19030 (description "Pifpaf is a suite of fixtures and a command-line tool that
19031 starts and stops daemons for a quick throw-away usage. This is typically
19032 useful when needing these daemons to run integration testing. It originally
19033 evolved from its precursor @code{overtest}.")
19034 (license license:asl2.0)))
19035
19036 (define-public python-pytest-check-links
19037 (package
19038 (name "python-pytest-check-links")
19039 (version "0.3.0")
19040 (source
19041 (origin
19042 (method url-fetch)
19043 ;; URI uses underscores
19044 (uri (pypi-uri "pytest_check_links" version))
19045 (sha256
19046 (base32
19047 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19048 (build-system python-build-system)
19049 (propagated-inputs
19050 `(("python-docutils" ,python-docutils)
19051 ("python-html5lib" ,python-html5lib)
19052 ("python-nbconvert" ,python-nbconvert)
19053 ("python-nbformat" ,python-nbformat)
19054 ("python-pytest" ,python-pytest)
19055 ("python-six" ,python-six)))
19056 (native-inputs
19057 `(("python-pbr-minimal" ,python-pbr-minimal)))
19058 (home-page "https://github.com/minrk/pytest-check-links")
19059 (synopsis "Check links in files")
19060 (description "This package provides a pytest plugin that checks URLs for
19061 HTML-containing files.")
19062 (license license:bsd-3)))
19063
19064 (define-public python-json5
19065 (package
19066 (name "python-json5")
19067 (version "0.8.5")
19068 (source
19069 (origin
19070 ;; sample.json5 is missing from PyPi source tarball
19071 (method git-fetch)
19072 (uri (git-reference
19073 (url "https://github.com/dpranke/pyjson5.git")
19074 (commit (string-append "v" version))))
19075 (file-name (git-file-name name version))
19076 (sha256
19077 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19078 (build-system python-build-system)
19079 (home-page "https://github.com/dpranke/pyjson5")
19080 (synopsis
19081 "Python implementation of the JSON5 data format")
19082 (description
19083 "JSON5 extends the JSON data interchange format to make it slightly more
19084 usable as a configuration language. This Python package implements parsing and
19085 dumping of JSON5 data structures.")
19086 (license license:asl2.0)))
19087
19088 (define-public python-frozendict
19089 (package
19090 (name "python-frozendict")
19091 (version "1.2")
19092 (source
19093 (origin
19094 (method url-fetch)
19095 (uri (pypi-uri "frozendict" version))
19096 (sha256
19097 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19098 (build-system python-build-system)
19099 (home-page "https://github.com/slezica/python-frozendict")
19100 (synopsis "Simple immutable mapping for Python")
19101 (description
19102 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19103 implements the complete mapping interface. It can be used as a drop-in
19104 replacement for dictionaries where immutability is desired.")
19105 (license license:expat)))
19106
19107 (define-public python-unpaddedbase64
19108 (package
19109 (name "python-unpaddedbase64")
19110 (version "1.1.0")
19111 (source
19112 (origin
19113 (method git-fetch)
19114 (uri (git-reference
19115 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19116 (commit (string-append "v" version))))
19117 (file-name (git-file-name name version))
19118 (sha256
19119 (base32
19120 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19121 (build-system python-build-system)
19122 (home-page "https://pypi.org/project/unpaddedbase64/")
19123 (synopsis "Encode and decode Base64 without “=” padding")
19124 (description
19125 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19126 using “=” characters. However this conveys no benefit so many protocols
19127 choose to use Base64 without the “=” padding.")
19128 (license license:asl2.0)))
19129
19130 (define-public python-canonicaljson
19131 (package
19132 (name "python-canonicaljson")
19133 (version "1.1.4")
19134 (source
19135 (origin
19136 (method url-fetch)
19137 (uri (pypi-uri "canonicaljson" version))
19138 (sha256
19139 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19140 (build-system python-build-system)
19141 (propagated-inputs
19142 `(("python-six" ,python-six)
19143 ("python-frozendict" ,python-frozendict)
19144 ("python-simplejson" ,python-simplejson)))
19145 (home-page "https://github.com/matrix-org/python-canonicaljson")
19146 (synopsis "Canonical JSON")
19147 (description
19148 "Deterministically encode JSON.
19149
19150 @itemize
19151 @item Encodes objects and arrays as RFC 7159 JSON.
19152 @item Sorts object keys so that you get the same result each time.
19153 @item Has no insignificant whitespace to make the output as small as possible.
19154 @item Escapes only the characters that must be escaped, U+0000 to
19155 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19156 @item Uses the shortest escape sequence for each escaped character.
19157 @item Encodes the JSON as UTF-8.
19158 @item Can encode frozendict immutable dictionaries.
19159 @end itemize")
19160 (license license:asl2.0)))
19161
19162 (define-public python-signedjson
19163 (package
19164 (name "python-signedjson")
19165 (version "1.1.1")
19166 (source
19167 (origin
19168 (method url-fetch)
19169 (uri (pypi-uri "signedjson" version))
19170 (sha256
19171 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19172 (build-system python-build-system)
19173 (propagated-inputs
19174 `(("python-canonicaljson" ,python-canonicaljson)
19175 ("python-importlib-metadata" ,python-importlib-metadata)
19176 ("python-pynacl" ,python-pynacl)
19177 ("python-typing-extensions" ,python-typing-extensions)
19178 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19179 (native-inputs
19180 `(("python-setuptools-scm" ,python-setuptools-scm)))
19181 (home-page "https://github.com/matrix-org/python-signedjson")
19182 (synopsis "Sign JSON objects with ED25519 signatures")
19183 (description
19184 "Sign JSON objects with ED25519 signatures.
19185
19186 @itemize
19187 @item More than one entity can sign the same object.
19188 @item Each entity can sign the object with more than one key making it easier to
19189 rotate keys
19190 @item ED25519 can be replaced with a different algorithm.
19191 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19192 key.
19193 @end itemize")
19194 (license license:asl2.0)))
19195
19196 (define-public python-daemonize
19197 (package
19198 (name "python-daemonize")
19199 (version "2.5.0")
19200 (source
19201 (origin
19202 (method url-fetch)
19203 (uri (pypi-uri "daemonize" version))
19204 (sha256
19205 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19206 (build-system python-build-system)
19207 (home-page "https://github.com/thesharp/daemonize")
19208 (synopsis "Library for writing system daemons in Python")
19209 (description "Daemonize is a library for writing system daemons in Python.")
19210 (license license:expat)))
19211
19212 (define-public python-pymacaroons
19213 (package
19214 (name "python-pymacaroons")
19215 (version "0.13.0")
19216 (source
19217 (origin
19218 (method url-fetch)
19219 (uri (pypi-uri "pymacaroons" version))
19220 (sha256
19221 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19222 (build-system python-build-system)
19223 (propagated-inputs
19224 `(("python-six" ,python-six)
19225 ("python-pynacl" ,python-pynacl)))
19226 (home-page "https://github.com/ecordell/pymacaroons")
19227 (synopsis "Python Macaroon Library")
19228 (description
19229 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19230 tokens, macaroons embed caveats that define specific authorization
19231 requirements for the target service, the service that issued the root macaroon
19232 and which is capable of verifying the integrity of macaroons it receives.
19233
19234 Macaroons allow for delegation and attenuation of authorization. They are
19235 simple and fast to verify, and decouple authorization policy from the
19236 enforcement of that policy.")
19237 (license license:expat)))
19238
19239 (define-public python-ldap3
19240 (package
19241 (name "python-ldap3")
19242 (version "2.7")
19243 (home-page "https://github.com/cannatag/ldap3")
19244 (source
19245 (origin
19246 (method git-fetch)
19247 (uri (git-reference (url home-page)
19248 (commit (string-append "v" version))))
19249 (file-name (git-file-name name version))
19250 (sha256
19251 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19252 (build-system python-build-system)
19253 (arguments
19254 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19255 #:phases (modify-phases %standard-phases
19256 (replace 'check
19257 (lambda* (#:key tests? #:allow-other-keys)
19258 (when tests?
19259 (invoke "nosetests" "-s" "test"))
19260 #t)))))
19261 (native-inputs
19262 `(("python-nose" ,python-nose)))
19263 (propagated-inputs
19264 `(("python-gssapi" ,python-gssapi)
19265 ("python-pyasn1" ,python-pyasn1)))
19266 (synopsis "Python LDAP client")
19267 (description
19268 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19269 library.")
19270 (license license:lgpl3+)))
19271
19272 (define-public python-boltons
19273 (package
19274 (name "python-boltons")
19275 (version "20.0.0")
19276 (source
19277 (origin
19278 (method url-fetch)
19279 (uri (pypi-uri "boltons" version))
19280 (sha256
19281 (base32
19282 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19283 (build-system python-build-system)
19284 (home-page "https://github.com/mahmoud/boltons")
19285 (synopsis "Extensions to the Python standard library")
19286 (description
19287 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19288 as — and yet conspicuously missing from — the standard library, including:
19289
19290 @itemize
19291 @item Atomic file saving, bolted on with fileutils
19292 @item A highly-optimized OrderedMultiDict, in dictutils
19293 @item Two types of PriorityQueue, in queueutils
19294 @item Chunked and windowed iteration, in iterutils
19295 @item Recursive data structure iteration and merging, with iterutils.remap
19296 @item Exponential backoff functionality, including jitter, through
19297 iterutils.backoff
19298 @item A full-featured TracebackInfo type, for representing stack traces, in
19299 tbutils
19300 @end itemize")
19301 (license license:bsd-3)))
19302
19303 (define-public python-eliot
19304 (package
19305 (name "python-eliot")
19306 (version "1.12.0")
19307 (source
19308 (origin
19309 (method url-fetch)
19310 (uri (pypi-uri "eliot" version))
19311 (sha256
19312 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19313 (build-system python-build-system)
19314 (arguments
19315 `(#:phases
19316 (modify-phases %standard-phases
19317 (add-after 'unpack 'remove-journald-support
19318 (lambda _
19319 (for-each delete-file
19320 '("eliot/tests/test_journald.py"
19321 "eliot/journald.py"))
19322 #t))
19323 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19324 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19325 ;; be installed and these tests should pass.
19326 (lambda _
19327 (delete-file "eliot/tests/test_prettyprint.py")
19328 #t)))))
19329 (propagated-inputs
19330 `(("python-boltons" ,python-boltons)
19331 ("python-pyrsistent" ,python-pyrsistent)
19332 ("python-six" ,python-six)
19333 ("python-zope-interface" ,python-zope-interface)))
19334 (native-inputs
19335 `(("python-black" ,python-black)
19336 ("python-coverage" ,python-coverage)
19337 ("python-dask" ,python-dask)
19338 ("python-flake8" ,python-flake8)
19339 ("python-hypothesis" ,python-hypothesis)
19340 ("python-pytest" ,python-pytest)
19341 ("python-setuptools" ,python-setuptools)
19342 ("python-sphinx" ,python-sphinx)
19343 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19344 ("python-testtools" ,python-testtools)
19345 ("python-twine" ,python-twine)
19346 ("python-twisted" ,python-twisted)))
19347 (home-page "https://github.com/itamarst/eliot/")
19348 (synopsis "Eliot: the logging system that tells you why it happened")
19349 (description
19350 "@dfn{eliot} is a Python logging system that outputs causal chains of
19351 actions: actions can spawn other actions, and eventually they either succeed
19352 or fail. The resulting logs tell you the story of what your software did: what
19353 happened, and what caused it.")
19354 (license license:asl2.0)))
19355
19356 (define-public python-pem
19357 (package
19358 (name "python-pem")
19359 (version "20.1.0")
19360 (source
19361 (origin
19362 (method url-fetch)
19363 (uri (pypi-uri "pem" version))
19364 (sha256
19365 (base32
19366 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19367 (build-system python-build-system)
19368 (native-inputs
19369 `(("python-certifi" ,python-certifi)
19370 ("python-coverage" ,python-coverage)
19371 ("python-pretend" ,python-pretend)
19372 ("python-pyopenssl" ,python-pyopenssl)
19373 ("python-pytest" ,python-pytest)
19374 ("python-sphinx" ,python-sphinx)
19375 ("python-twisted" ,python-twisted)))
19376 (home-page "https://pem.readthedocs.io/")
19377 (synopsis "Easy PEM file parsing in Python")
19378 (description
19379 "This package provides a Python module for parsing and splitting PEM files.")
19380 (license license:expat)))
19381
19382 (define-public python-txsni
19383 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19384 ;; Python and OpenSSL.
19385 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19386 (revision "0"))
19387 (package
19388 (name "python-txsni")
19389 (version (git-version "0.1.9" revision commit))
19390 (home-page "https://github.com/glyph/txsni")
19391 (source
19392 (origin
19393 (method git-fetch)
19394 (uri (git-reference (url home-page) (commit commit)))
19395 (file-name (git-file-name name version))
19396 (sha256
19397 (base32
19398 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19399 (build-system python-build-system)
19400 (propagated-inputs
19401 `(("python-pyopenssl" ,python-pyopenssl)
19402 ("python-service-identity" ,python-service-identity)
19403 ("python-twisted" ,python-twisted)))
19404 (synopsis "Run TLS servers with Twisted")
19405 (description
19406 "This package provides an easy-to-use SNI endpoint for use
19407 with the Twisted web framework.")
19408 (license license:expat))))
19409
19410 (define-public python-txacme
19411 (package
19412 (name "python-txacme")
19413 (version "0.9.2")
19414 (source
19415 (origin
19416 (method url-fetch)
19417 (uri (pypi-uri "txacme" version))
19418 (sha256
19419 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19420 (build-system python-build-system)
19421 (propagated-inputs
19422 `(("python-acme" ,python-acme)
19423 ("python-attrs" ,python-attrs)
19424 ("python-eliot" ,python-eliot)
19425 ("python-josepy" ,python-josepy)
19426 ("python-pem" ,python-pem)
19427 ("python-treq" ,python-treq)
19428 ("python-twisted" ,python-twisted)
19429 ("python-txsni" ,python-txsni)))
19430 (native-inputs
19431 `(("python-fixtures" ,python-fixtures)
19432 ("python-hypothesis" ,python-hypothesis)
19433 ("python-mock" ,python-mock)
19434 ("python-service-identity"
19435 ,python-service-identity)
19436 ("python-testrepository" ,python-testrepository)
19437 ("python-testscenarios" ,python-testscenarios)
19438 ("python-testtools" ,python-testtools)))
19439 (home-page "https://github.com/twisted/txacme")
19440 (synopsis "Twisted implexmentation of the ACME protocol")
19441 (description
19442 "ACME is Automatic Certificate Management Environment, a protocol that
19443 allows clients and certificate authorities to automate verification and
19444 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19445 Certificate Authority.
19446
19447 txacme is an implementation of the protocol for Twisted, the event-driven
19448 networking engine for Python.")
19449 (license license:expat)))
19450
19451 (define-public python-pysaml2
19452 (package
19453 (name "python-pysaml2")
19454 (version "5.0.0")
19455 (source
19456 (origin
19457 (method url-fetch)
19458 (uri (pypi-uri "pysaml2" version))
19459 (sha256
19460 (base32
19461 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19462 (build-system python-build-system)
19463 (propagated-inputs
19464 `(("python-cryptography" ,python-cryptography)
19465 ("python-dateutil" ,python-dateutil)
19466 ("python-defusedxml" ,python-defusedxml)
19467 ("python-pyopenssl" ,python-pyopenssl)
19468 ("python-pytz" ,python-pytz)
19469 ("python-requests" ,python-requests)
19470 ("python-six" ,python-six)))
19471 (home-page "https://idpy.org")
19472 (synopsis "Python implementation of SAML Version 2 Standard")
19473 (description
19474 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19475 It contains all necessary pieces for building a SAML2 service provider or
19476 an identity provider. The distribution contains examples of both.
19477
19478 This package was originally written to work in a WSGI environment, but
19479 there are extensions that allow you to use it with other frameworks.")
19480 (license license:asl2.0)))
19481
19482 (define-public python-click-plugins
19483 (package
19484 (name "python-click-plugins")
19485 (version "1.1.1")
19486 (source
19487 (origin
19488 (method url-fetch)
19489 (uri (pypi-uri "click-plugins" version))
19490 (sha256
19491 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19492 (build-system python-build-system)
19493 (native-inputs
19494 `(("python-pytest" ,python-pytest)))
19495 (propagated-inputs
19496 `(("python-click" ,python-click)))
19497 (synopsis "Extension for Click to register external CLI commands")
19498 (description "This package provides n extension module for Click to
19499 register external CLI commands via setuptools entry-points.")
19500 (home-page "https://github.com/click-contrib/click-plugins")
19501 (license license:bsd-3)))
19502
19503 (define-public python-diceware
19504 (package
19505 (name "python-diceware")
19506 (version "0.9.6")
19507 (source
19508 (origin
19509 (method url-fetch)
19510 (uri (pypi-uri "diceware" version))
19511 (sha256
19512 (base32
19513 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19514 (build-system python-build-system)
19515 (native-inputs
19516 `(("python-coverage" ,python-coverage)
19517 ("python-pytest" ,python-pytest)
19518 ("python-pytest-runner" ,python-pytest-runner)))
19519 (home-page "https://github.com/ulif/diceware/")
19520 (synopsis "Generates memorable passphrases")
19521 (description "This package generates passphrases by concatenating words
19522 randomly picked from wordlists. It supports several sources of
19523 randomness (including real life dice) and different wordlists (including
19524 cryptographically signed ones).")
19525 (license license:gpl3+)))