gnu: python-pyrsistent: Fix build with Pytest 5.
[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 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;;
81 ;;; This file is part of GNU Guix.
82 ;;;
83 ;;; GNU Guix is free software; you can redistribute it and/or modify it
84 ;;; under the terms of the GNU General Public License as published by
85 ;;; the Free Software Foundation; either version 3 of the License, or (at
86 ;;; your option) any later version.
87 ;;;
88 ;;; GNU Guix is distributed in the hope that it will be useful, but
89 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
90 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91 ;;; GNU General Public License for more details.
92 ;;;
93 ;;; You should have received a copy of the GNU General Public License
94 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
95
96 (define-module (gnu packages python-xyz)
97 #:use-module ((guix licenses) #:prefix license:)
98 #:use-module (gnu packages)
99 #:use-module (gnu packages algebra)
100 #:use-module (gnu packages adns)
101 #:use-module (gnu packages attr)
102 #:use-module (gnu packages backup)
103 #:use-module (gnu packages bash)
104 #:use-module (gnu packages check)
105 #:use-module (gnu packages compression)
106 #:use-module (gnu packages crypto)
107 #:use-module (gnu packages databases)
108 #:use-module (gnu packages dbm)
109 #:use-module (gnu packages enchant)
110 #:use-module (gnu packages file)
111 #:use-module (gnu packages fontutils)
112 #:use-module (gnu packages gcc)
113 #:use-module (gnu packages geo)
114 #:use-module (gnu packages ghostscript)
115 #:use-module (gnu packages gl)
116 #:use-module (gnu packages glib)
117 #:use-module (gnu packages gnome)
118 #:use-module (gnu packages graphviz)
119 #:use-module (gnu packages graphics)
120 #:use-module (gnu packages gsasl)
121 #:use-module (gnu packages gstreamer)
122 #:use-module (gnu packages gtk)
123 #:use-module (gnu packages icu4c)
124 #:use-module (gnu packages image)
125 #:use-module (gnu packages imagemagick)
126 #:use-module (gnu packages kerberos)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages linux)
130 #:use-module (gnu packages llvm)
131 #:use-module (gnu packages man)
132 #:use-module (gnu packages maths)
133 #:use-module (gnu packages monitoring)
134 #:use-module (gnu packages multiprecision)
135 #:use-module (gnu packages networking)
136 #:use-module (gnu packages ncurses)
137 #:use-module (gnu packages openstack)
138 #:use-module (gnu packages pcre)
139 #:use-module (gnu packages perl)
140 #:use-module (gnu packages photo)
141 #:use-module (gnu packages pkg-config)
142 #:use-module (gnu packages python)
143 #:use-module (gnu packages python-check)
144 #:use-module (gnu packages python-compression)
145 #:use-module (gnu packages python-crypto)
146 #:use-module (gnu packages python-science)
147 #:use-module (gnu packages python-web)
148 #:use-module (gnu packages qt)
149 #:use-module (gnu packages readline)
150 #:use-module (gnu packages sdl)
151 #:use-module (gnu packages search)
152 #:use-module (gnu packages shells)
153 #:use-module (gnu packages sphinx)
154 #:use-module (gnu packages ssh)
155 #:use-module (gnu packages terminals)
156 #:use-module (gnu packages tex)
157 #:use-module (gnu packages texinfo)
158 #:use-module (gnu packages time)
159 #:use-module (gnu packages tls)
160 #:use-module (gnu packages version-control)
161 #:use-module (gnu packages video)
162 #:use-module (gnu packages web)
163 #:use-module (gnu packages base)
164 #:use-module (gnu packages xml)
165 #:use-module (gnu packages xorg)
166 #:use-module (gnu packages xdisorg)
167 #:use-module (gnu packages tcl)
168 #:use-module (gnu packages bdw-gc)
169 #:use-module (gnu packages serialization)
170 #:use-module (guix packages)
171 #:use-module (guix download)
172 #:use-module (guix git-download)
173 #:use-module (guix hg-download)
174 #:use-module (guix utils)
175 #:use-module (guix build-system gnu)
176 #:use-module (guix build-system cmake)
177 #:use-module (guix build-system python)
178 #:use-module (guix build-system trivial)
179 #:use-module (srfi srfi-1)
180 #:use-module (srfi srfi-26))
181
182 (define-public python-tenacity
183 (package
184 (name "python-tenacity")
185 (version "6.1.0")
186 (source (origin
187 (method url-fetch)
188 (uri (pypi-uri "tenacity" version))
189 (sha256
190 (base32
191 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
192 (build-system python-build-system)
193 (native-inputs
194 `(("python-setuptools-scm" ,python-setuptools-scm)
195 ("python-sphinx" ,python-sphinx)
196 ("python-tornado" ,python-tornado)
197 ("python-pytest" ,python-pytest)))
198 (propagated-inputs
199 `(("python-six" ,python-six)))
200 (arguments
201 `(#:phases (modify-phases %standard-phases
202 (replace 'check
203 (lambda _
204 (invoke "pytest")
205 #t)))))
206 (home-page "https://github.com/jd/tenacity")
207 (synopsis "Retrying library for python")
208 (description "Tenacity is a general-purpose python library to simplify the
209 task of adding retry behavior to just about anything.")
210 (license license:asl2.0)))
211
212 (define-public python-colorlog
213 (package
214 (name "python-colorlog")
215 (version "4.1.0")
216 (source (origin
217 (method url-fetch)
218 (uri (pypi-uri "colorlog" version))
219 (sha256
220 (base32
221 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
222 (build-system python-build-system)
223 (native-inputs
224 `(("python-pytest" ,python-pytest)))
225 (arguments
226 `(#:phases (modify-phases %standard-phases
227 (replace 'check
228 (lambda _
229 ;; Extend PYTHONPATH so the built package will be found.
230 (setenv "PYTHONPATH"
231 (string-append (getcwd) "/build/lib:"
232 (getenv "PYTHONPATH")))
233 (invoke "pytest" "-p" "no:logging")
234 #t)))))
235 (home-page "https://github.com/borntyping/python-colorlog")
236 (synopsis "Log formatting with colors for python")
237 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
238 with Python's logging module that outputs records using terminal colors.")
239 (license license:expat)))
240
241 (define-public python-pyprind
242 (package
243 (name "python-pyprind")
244 (version "2.11.2")
245 (source (origin
246 (method url-fetch)
247 (uri (pypi-uri "PyPrind" version))
248 (sha256
249 (base32
250 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
251 (build-system python-build-system)
252 (propagated-inputs
253 `(("python-psutil" ,python-psutil)))
254 (home-page "https://github.com/rasbt/pyprind")
255 (synopsis "Python Progress Bar and Percent Indicator Utility")
256 (description "The PyPrind (Python Progress Indicator) module provides a
257 progress bar and a percentage indicator object that let you track the progress
258 of a loop structure or other iterative computation.")
259 (license license:bsd-3)))
260
261 (define-public python-gphoto2
262 (package
263 (name "python-gphoto2")
264 (version "2.2.1")
265 (source (origin
266 (method url-fetch)
267 (uri (pypi-uri "gphoto2" version))
268 (sha256
269 (base32
270 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
271 (build-system python-build-system)
272 (native-inputs
273 `(("pkg-config" ,pkg-config)))
274 (inputs
275 `(("libgphoto2" ,libgphoto2)))
276 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
277 (synopsis "Python interface to libgphoto2")
278 (description "@code{python-gphoto2} is a comprehensive Python interface
279 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
280 automatically generate the interface code.")
281 (license license:gpl3+)))
282
283 (define-public python-colour
284 (package
285 (name "python-colour")
286 (version "0.1.5")
287 (source (origin
288 (method url-fetch)
289 (uri (pypi-uri "colour" version))
290 (sha256
291 (base32
292 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
293 (build-system python-build-system)
294 (native-inputs
295 `(("python-d2to1" ,python-d2to1)))
296 (home-page "https://github.com/vaab/colour")
297 (synopsis "Convert and manipulate various color representations")
298 (description "Pythonic way to manipulate color representations (HSL, RVB,
299 web, X11, ...).")
300 (license license:expat)))
301
302 (define-public python-d2to1
303 (package
304 (name "python-d2to1")
305 (version "0.2.12.post1")
306 (source (origin
307 (method url-fetch)
308 (uri (pypi-uri "d2to1" version))
309 (sha256
310 (base32
311 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
312 (build-system python-build-system)
313 (native-inputs
314 `(("python-nose" ,python-nose)))
315 (home-page "https://github.com/embray/d2to1")
316 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
317 in python")
318 (description "The python package d2to1 (the d is for distutils) allows
319 using distutils2-like setup.cfg files for a package's metadata with a
320 distribute/setuptools setup.py script.")
321 (license license:bsd-2)))
322
323 (define-public python-rawkit
324 (package
325 (name "python-rawkit")
326 (version "0.6.0")
327 (source (origin
328 (method url-fetch)
329 (uri (pypi-uri "rawkit" version))
330 (sha256
331 (base32
332 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
333 (build-system python-build-system)
334 (native-inputs
335 `(("python-pytest" ,python-pytest)
336 ("python-mock" ,python-mock)))
337 (inputs
338 `(("libraw" ,libraw)))
339 (home-page "https://rawkit.readthedocs.io")
340 (synopsis "Ctypes-based LibRaw binding for Python")
341 (description "The rawkit package provides two modules: rawkit and libraw.
342 The rawkit module provides a high-level Pythonic interface for developing raw
343 photos, while the libraw module provides a CTypes based interface for
344 interacting with the low-level LibRaw C APIs.")
345 (license license:expat)))
346
347 (define-public python-easygui
348 (package
349 (name "python-easygui")
350 (version "0.98.1")
351 (source (origin
352 (method url-fetch)
353 (uri (pypi-uri "easygui" version))
354 (sha256
355 (base32
356 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
357 (build-system python-build-system)
358 (propagated-inputs
359 `(("python-tkinter" ,python "tk")))
360 (home-page "https://github.com/robertlugg/easygui")
361 (synopsis "GUI programming module for Python")
362 (description "EasyGUI is a module for very simple, very easy GUI
363 programming in Python. EasyGUI is different from other GUI generators in that
364 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
365 simple function calls.")
366 (license license:bsd-3)))
367
368 (define-public python-pymediainfo
369 (package
370 (name "python-pymediainfo")
371 (version "4.1")
372 (source
373 (origin
374 (method url-fetch)
375 (uri (pypi-uri "pymediainfo" version))
376 (sha256
377 (base32
378 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
379 (build-system python-build-system)
380 (native-inputs
381 `(("python-setuptools-scm" ,python-setuptools-scm)
382 ("python-pytest" ,python-pytest)))
383 (inputs
384 `(("libmediainfo" ,libmediainfo)))
385 (arguments
386 `(#:phases
387 (modify-phases %standard-phases
388 (add-after 'unpack 'patch-libmediainfo
389 (lambda _
390 (substitute* "pymediainfo/__init__.py"
391 (("libmediainfo.so.0")
392 (string-append (assoc-ref %build-inputs "libmediainfo")
393 "/lib/libmediainfo.so.0")))
394 #t))
395 (replace 'check
396 (lambda _
397 ;; Extend PYTHONPATH so the built package will be found.
398 (setenv "PYTHONPATH"
399 (string-append (getcwd) "/build/lib:"
400 (getenv "PYTHONPATH")))
401 ;; Skip the only failing test "test_parse_url"
402 (invoke "pytest" "-vv" "-k" "not test_parse_url")
403 #t)))))
404 (home-page
405 "https://github.com/sbraz/pymediainfo")
406 (synopsis
407 "Python wrapper for the mediainfo library")
408 (description
409 "Python wrapper for the mediainfo library to access the technical and tag
410 data for video and audio files.")
411 (license license:expat)))
412
413 (define-public python-psutil
414 (package
415 (name "python-psutil")
416 (version "5.6.5")
417 (source
418 (origin
419 (method url-fetch)
420 (uri (pypi-uri "psutil" version))
421 (sha256
422 (base32 "0isil5jxwwd8awz54qk28rpgjg43i5l6yl70g40vxwa4r4m56lfh"))))
423 (build-system python-build-system)
424 (arguments
425 ;; FIXME: some tests does not return and times out.
426 '(#:tests? #f))
427 (home-page "https://www.github.com/giampaolo/psutil")
428 (synopsis "Library for retrieving information on running processes")
429 (description
430 "psutil (Python system and process utilities) is a library for retrieving
431 information on running processes and system utilization (CPU, memory, disks,
432 network) in Python. It is useful mainly for system monitoring, profiling and
433 limiting process resources and management of running processes. It implements
434 many functionalities offered by command line tools such as: ps, top, lsof,
435 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
436 pidof, tty, taskset, pmap.")
437 (properties `((python2-variant . ,(delay python2-psutil))))
438 (license license:bsd-3)))
439
440 (define-public python2-psutil
441 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
442 (package
443 (inherit base)
444 (propagated-inputs
445 `(("python2-enum34" ,python2-enum34) ;optional
446 ,@(package-propagated-inputs base))))))
447
448 (define-public python-shapely
449 (package
450 (name "python-shapely")
451 (version "1.6.4.post2")
452 (source
453 (origin
454 (method url-fetch)
455 (uri (pypi-uri "Shapely" version))
456 (sha256
457 (base32
458 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
459 (build-system python-build-system)
460 (native-inputs
461 `(("python-cython" ,python-cython)
462 ("python-matplotlib" ,python-matplotlib)
463 ("python-pytest" ,python-pytest)
464 ("python-pytest-cov" ,python-pytest-cov)))
465 (inputs
466 `(("geos" ,geos)))
467 (propagated-inputs
468 `(("python-numpy" ,python-numpy)))
469 (arguments
470 `(#:phases
471 (modify-phases %standard-phases
472 (add-after 'unpack 'patch-geos-path
473 (lambda* (#:key inputs #:allow-other-keys)
474 (let ((geos (assoc-ref inputs "geos"))
475 (glibc (assoc-ref inputs ,(if (%current-target-system)
476 "cross-libc" "libc"))))
477 (substitute* "shapely/geos.py"
478 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
479 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
480 geos "/lib/libgeos_c.so'])"))
481 (("free = load_dll\\('c'\\)\\.free")
482 (string-append "free = load_dll('c', fallbacks=['"
483 glibc "/lib/libc.so.6']).free"))))
484 #t)))))
485 (home-page "https://github.com/Toblerity/Shapely")
486 (synopsis "Library for the manipulation and analysis of geometric objects")
487 (description "Shapely is a Python package for manipulation and analysis of
488 planar geometric objects. It is based on the @code{GEOS} library.")
489 (license license:bsd-3)))
490
491 (define-public python-shortuuid
492 (package
493 (name "python-shortuuid")
494 (version "0.5.0")
495 (source
496 (origin
497 (method url-fetch)
498 (uri (pypi-uri "shortuuid" version))
499 (sha256
500 (base32
501 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
502 (build-system python-build-system)
503 (native-inputs
504 `(("python-pep8" ,python-pep8)))
505 (home-page "https://github.com/skorokithakis/shortuuid")
506 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
507 (description
508 "@code{shortuuid} is a Python library for generating concise, unambiguous
509 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
510 module and then similar looking characters are removed.")
511 (license license:bsd-3)))
512
513 (define-public python-logwrap
514 (package
515 (name "python-logwrap")
516 (version "3.2.1")
517 (source
518 (origin
519 (method url-fetch)
520 (uri (pypi-uri "logwrap" version ".zip"))
521 (sha256
522 (base32
523 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
524 (build-system python-build-system)
525 (propagated-inputs
526 `(("python-six" ,python-six)
527 ("python-typing" ,python-typing)))
528 (native-inputs
529 `(("unzip" ,unzip)
530 ("python-cython" ,python-cython)
531 ("python-pytest" ,python-pytest)
532 ("python-pytest-cov" ,python-pytest-cov)
533 ("python-pytest-runner" ,python-pytest-runner)))
534 (home-page "https://github.com/penguinolog/logwrap")
535 (synopsis "Decorator for logging function arguments")
536 (description "This package provides a decorator to log function arguments
537 and function call return values in a human-readable way.")
538 (license license:asl2.0)))
539
540 (define-public python2-shapely
541 (package-with-python2 python-shapely))
542
543 (define-public python-clyent
544 (package
545 (name "python-clyent")
546 (version "1.2.1")
547 (source
548 (origin
549 (method url-fetch)
550 (uri (pypi-uri "clyent" version))
551 (sha256
552 (base32
553 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
554 (build-system python-build-system)
555 (native-inputs
556 `(("python-mock" ,python-mock)))
557 (home-page "https://github.com/binstar/clyent")
558 (synopsis "Command line client library")
559 (description "Clyent is a Python command line utiliy library. It is used
560 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
561 (license license:bsd-3)))
562
563 (define-public python2-clyent
564 (package-with-python2 python-clyent))
565
566 (define-public python-babel
567 (package
568 (name "python-babel")
569 (version "2.8.0")
570 (source
571 (origin
572 (method url-fetch)
573 (uri (pypi-uri "Babel" version))
574 (sha256
575 (base32
576 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
577 (build-system python-build-system)
578 (native-inputs
579 `(("python-freezegun" ,python-freezegun)
580 ("python-pytest" ,python-pytest)))
581 (propagated-inputs
582 `(("python-pytz" ,python-pytz)))
583 (arguments
584 `(#:phases (modify-phases %standard-phases
585 (replace 'check
586 (lambda _
587 (invoke "pytest" "-vv" "-k"
588 (string-append
589 ;; XXX: These tests fail when using Pytest 4.x and
590 ;; Babel 2.6.0. Try removing this for later versions.
591 "not test_no_inherit_metazone_marker_never_in_output"
592 " and not test_smoke_dates"
593 " and not test_smoke_numbers")))))))
594 (home-page "http://babel.pocoo.org/")
595 (synopsis
596 "Tools for internationalizing Python applications")
597 (description
598 "Babel is composed of two major parts:
599 - tools to build and work with gettext message catalogs
600 - a Python interface to the CLDR (Common Locale Data Repository), providing
601 access to various locale display names, localized number and date formatting,
602 etc. ")
603 (license license:bsd-3)))
604
605 (define-public python2-babel
606 (package-with-python2 python-babel))
607
608 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
609 (define-public python2-babel-2.6
610 (package
611 (inherit python2-babel)
612 (version "2.6.0")
613 (source (origin
614 (method url-fetch)
615 (uri (pypi-uri "Babel" version))
616 (sha256
617 (base32
618 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
619
620 (define-public python2-backport-ssl-match-hostname
621 (package
622 (name "python2-backport-ssl-match-hostname")
623 (version "3.5.0.1")
624 (source
625 (origin
626 (method url-fetch)
627 (uri (pypi-uri "backports.ssl_match_hostname" version))
628 (sha256
629 (base32
630 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
631 (build-system python-build-system)
632 (arguments
633 `(#:python ,python-2
634 #:tests? #f)) ; no test target
635 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
636 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
637 (description
638 "This backport brings the ssl.match_hostname() function to users of
639 earlier versions of Python. The function checks the hostname in the
640 certificate returned by the server to which a connection has been established,
641 and verifies that it matches the intended target hostname.")
642 (license license:psfl)))
643
644 (define-public python-boolean.py
645 (package
646 (name "python-boolean.py")
647 (version "3.6")
648 (source
649 (origin
650 ;; There's no source tarball on PyPI.
651 (method git-fetch)
652 (uri (git-reference
653 (url "https://github.com/bastikr/boolean.py")
654 (commit (string-append "v" version))))
655 (file-name (git-file-name name version))
656 (sha256
657 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
658 (build-system python-build-system)
659 (home-page "https://github.com/bastikr/boolean.py")
660 (synopsis "Boolean algebra in one Python module")
661 (description
662 "This is a small Python library that implements boolean algebra.
663 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
664 @code{Symbol} class that can take on one of these two values. Calculations
665 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
666 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
667 Expressions are constructed from parsed strings or directly in Python.")
668 (license license:bsd-2)))
669
670 (define-public python-hdf4
671 (package
672 (name "python-hdf4")
673 (version "0.9")
674 (source
675 (origin
676 (method url-fetch)
677 (uri (pypi-uri name version))
678 (sha256
679 (base32
680 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
681 (build-system python-build-system)
682 (native-inputs `(("nose" ,python-nose)))
683 (propagated-inputs `(("numpy" ,python-numpy)))
684 (inputs
685 `(("hdf4" ,hdf4)
686 ("libjpeg" ,libjpeg-turbo)
687 ("zlib" ,zlib)))
688 (arguments
689 `(#:phases
690 (modify-phases %standard-phases
691 (replace 'check
692 (lambda _
693 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
694 ;; on to import numpy. Somehow this works on their CI system.
695 ;; Let's just manage PYTHONPATH here instead.
696 (substitute* "runexamples.sh"
697 (("export PYTHONPATH=.*") ""))
698 (setenv "PYTHONPATH"
699 (string-append (getcwd) ":"
700 (getenv "PYTHONPATH")))
701 (invoke "./runexamples.sh")
702 (invoke "nosetests" "-v"))))))
703 (home-page "https://github.com/fhs/python-hdf4")
704 (synopsis "Python interface to the NCSA HDF4 library")
705 (description
706 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
707 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
708 NetCDF files can also be read and modified. Python-HDF4 is a fork of
709 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
710 (license license:expat)))
711
712 (define-public python2-hdf4
713 (package-with-python2 python-hdf4))
714
715 (define-public python-h5py
716 (package
717 (name "python-h5py")
718 (version "2.10.0")
719 (source
720 (origin
721 (method url-fetch)
722 (uri (pypi-uri "h5py" version))
723 (sha256
724 (base32
725 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
726 (build-system python-build-system)
727 (arguments
728 `(#:tests? #f ; no test target
729 #:phases
730 (modify-phases %standard-phases
731 (add-after 'unpack 'fix-hdf5-paths
732 (lambda* (#:key inputs #:allow-other-keys)
733 (let ((prefix (assoc-ref inputs "hdf5")))
734 (substitute* "setup_build.py"
735 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
736 (string-append "['" prefix "/lib" "']"))
737 (("'/opt/local/include', '/usr/local/include'")
738 (string-append "'" prefix "/include" "'")))
739 (substitute* "setup_configure.py"
740 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
741 (string-append "['" prefix "/lib" "']")))
742 #t))))))
743 (propagated-inputs
744 `(("python-six" ,python-six)
745 ("python-numpy" ,python-numpy)))
746 (inputs
747 `(("hdf5" ,hdf5-1.10)))
748 (native-inputs
749 `(("python-cython" ,python-cython)
750 ("python-pkgconfig" ,python-pkgconfig)
751 ("pkg-config" ,pkg-config)))
752 (home-page "https://www.h5py.org/")
753 (synopsis "Read and write HDF5 files from Python")
754 (description
755 "The h5py package provides both a high- and low-level interface to the
756 HDF5 library from Python. The low-level interface is intended to be a
757 complete wrapping of the HDF5 API, while the high-level component supports
758 access to HDF5 files, datasets and groups using established Python and NumPy
759 concepts.")
760 (license license:bsd-3)))
761
762 (define-public python2-h5py
763 (package-with-python2 python-h5py))
764
765 (define-public python-sh
766 (package
767 (name "python-sh")
768 (version "1.12.14")
769 (source
770 (origin
771 (method url-fetch)
772 (uri (pypi-uri "sh" version))
773 (sha256
774 (base32
775 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
776 (build-system python-build-system)
777 (arguments
778 '(#:phases
779 (modify-phases %standard-phases
780 (replace 'check
781 (lambda _
782 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
783 (setenv "HOME" "/tmp")
784 (invoke "python" "sh.py" "test"))))))
785 (native-inputs
786 `(("python-coverage" ,python-coverage)))
787 (home-page "https://github.com/amoffat/sh")
788 (synopsis "Python subprocess replacement")
789 (description "This package provides a replacement for Python's
790 @code{subprocess} feature.")
791 (license license:expat)))
792
793 (define-public python2-sh
794 (package-with-python2 python-sh))
795
796 (define-public python-cftime
797 (package
798 (name "python-cftime")
799 (version "1.0.4.2")
800 (source
801 (origin
802 (method url-fetch)
803 (uri (pypi-uri "cftime" version))
804 (sha256
805 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
806 (build-system python-build-system)
807 (propagated-inputs
808 `(("python-numpy" ,python-numpy)))
809 (native-inputs
810 `(("python-coveralls" ,python-coveralls)
811 ("python-cython" ,python-cython)
812 ("python-pytest-cov" ,python-pytest-cov)))
813 (home-page "https://github.com/Unidata/cftime")
814 (synopsis "Library for time handling")
815 (description
816 "This package provides time-handling functionality that used to be part
817 of the netcdf4 package before.")
818 ;; This package claims to include code under the GPLv3 but is released
819 ;; under ISC.
820 (license (list license:isc license:gpl3+))))
821
822 (define-public python-netcdf4
823 (package
824 (name "python-netcdf4")
825 (version "1.4.2")
826 (source
827 (origin
828 (method url-fetch)
829 (uri (pypi-uri "netCDF4" version))
830 (sha256
831 (base32
832 "0c0sklgrmv15ygliin8qq0hp7vanmbi74m6zpi0r1ksr0hssyd5r"))))
833 (build-system python-build-system)
834 (arguments
835 '(#:phases
836 (modify-phases %standard-phases
837 (add-after 'unpack 'configure-locations
838 (lambda* (#:key inputs #:allow-other-keys)
839 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
840 #t)))))
841 (native-inputs
842 `(("python-cython" ,python-cython)))
843 (propagated-inputs
844 `(("python-numpy" ,python-numpy)
845 ("python-cftime" ,python-cftime)))
846 (inputs
847 `(("netcdf" ,netcdf)
848 ("hdf4" ,hdf4)
849 ("hdf5" ,hdf5)))
850 (home-page "https://github.com/Unidata/netcdf4-python")
851 (synopsis "Python/numpy interface to the netCDF library")
852 (description "Netcdf4-python is a Python interface to the netCDF C
853 library. netCDF version 4 has many features not found in earlier
854 versions of the library and is implemented on top of HDF5. This module
855 can read and write files in both the new netCDF 4 and the old netCDF 3
856 format, and can create files that are readable by HDF5 clients. The
857 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
858 to users of that module.")
859 ;; The software is mainly ISC, but includes some files covered
860 ;; by the Expat license.
861 (license (list license:isc license:expat))))
862
863 (define-public python2-netcdf4
864 (package-with-python2 python-netcdf4))
865
866 (define-public python-license-expression
867 (package
868 (name "python-license-expression")
869 (version "0.999")
870 (source
871 (origin
872 (method url-fetch)
873 (uri (pypi-uri "license-expression" version))
874 (sha256
875 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
876 (build-system python-build-system)
877 (propagated-inputs
878 `(("python-boolean.py" ,python-boolean.py)))
879 (home-page "https://github.com/nexB/license-expression")
880 (synopsis "Apply boolean logic to license expressions")
881 (description
882 "This Python module defines a tiny language to evaluate and compare
883 license expressions using boolean logic. Logical combinations of licenses can
884 be tested for equality, containment, and equivalence. They can be normalised
885 and simplified. It supports SPDX license expressions as well as other naming
886 conventions and aliases in the same expression.")
887 (license license:gpl2+)))
888
889 (define-public python-lockfile
890 (package
891 (name "python-lockfile")
892 (version "0.12.2")
893 (source
894 (origin
895 (method url-fetch)
896 (uri (pypi-uri "lockfile" version))
897 (sha256
898 (base32
899 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
900 (build-system python-build-system)
901 (arguments '(#:test-target "check"))
902 (native-inputs
903 `(("python-pbr" ,python-pbr)))
904 (home-page "https://launchpad.net/pylockfile")
905 (synopsis "Platform-independent file locking module")
906 (description
907 "The lockfile package exports a LockFile class which provides a simple
908 API for locking files.")
909 (license license:expat)))
910
911 (define-public python2-lockfile
912 (package-with-python2 python-lockfile))
913
914 (define-public python-filelock
915 (package
916 (name "python-filelock")
917 (version "3.0.12")
918 (source
919 (origin
920 (method url-fetch)
921 (uri (pypi-uri "filelock" version))
922 (sha256
923 (base32
924 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
925 (build-system python-build-system)
926 (home-page
927 "https://github.com/benediktschmitt/py-filelock")
928 (synopsis "Platform independent file lock")
929 (description "@code{filelock} contains a single module implementing
930 a platform independent file lock in Python, which provides a simple way of
931 inter-process communication.")
932 (license license:unlicense)))
933
934 (define-public python-semantic-version
935 (package
936 (name "python-semantic-version")
937 (version "2.6.0")
938 (source
939 (origin
940 (method url-fetch)
941 (uri (pypi-uri "semantic_version" version))
942 (sha256
943 (base32
944 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
945 (build-system python-build-system)
946 (arguments
947 `(#:tests? #f)) ; PyPI tarball lacks tests
948 (home-page "https://github.com/rbarrois/python-semanticversion")
949 (synopsis "Semantic versioning module for Python")
950 (description
951 "The @code{semantic_version} class is a small library for handling
952 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
953
954 It can compare versions, generate a new version that represents a bump in one of
955 the version levels, and check whether any given string is a proper semantic
956 version identifier.")
957 (license license:bsd-3)))
958
959 (define-public python2-semantic-version
960 (package-with-python2 python-semantic-version))
961
962 (define-public python-serpent
963 (package
964 (name "python-serpent")
965 (version "1.28")
966 (source
967 (origin
968 (method url-fetch)
969 (uri (pypi-uri "serpent" version))
970 (sha256
971 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
972 (build-system python-build-system)
973 (native-inputs
974 `(("python-attrs" ,python-attrs)
975 ("python-pytz" ,python-pytz)))
976 (home-page "https://github.com/irmen/Serpent")
977 (synopsis "Serializer for literal Python expressions")
978 (description
979 "Serpent provides @code{ast.literal_eval()}-compatible object tree
980 serialization. It serializes an object tree into bytes (an utf-8 encoded
981 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
982 to rebuild the original object tree.
983
984 Because only safe literals are encoded, it is safe to send serpent data to
985 other machines, such as over the network.")
986 (properties `((python2-variant . ,(delay python2-serpent))))
987 (license license:expat)))
988
989 (define-public python2-serpent
990 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
991 (package
992 (inherit base)
993 (propagated-inputs
994 `(("python-enum34" ,python2-enum34)
995 ,@(package-propagated-inputs base))))))
996
997 (define-public python-setuptools
998 (package
999 (name "python-setuptools")
1000 (version "41.0.1")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "setuptools" version ".zip"))
1005 (sha256
1006 (base32
1007 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1008 (modules '((guix build utils)))
1009 (snippet
1010 '(begin
1011 ;; Remove included binaries which are used to build self-extracting
1012 ;; installers for Windows.
1013 ;; TODO: Find some way to build them ourself so we can include them.
1014 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1015 #t))))
1016 (build-system python-build-system)
1017 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1018 ;; One could bootstrap with an internal untested setuptools.
1019 (arguments
1020 `(#:tests? #f))
1021 (home-page "https://pypi.org/project/setuptools/")
1022 (synopsis
1023 "Library designed to facilitate packaging Python projects")
1024 (description
1025 "Setuptools is a fully-featured, stable library designed to facilitate
1026 packaging Python projects, where packaging includes:
1027 Python package and module definitions,
1028 distribution package metadata,
1029 test hooks,
1030 project installation,
1031 platform-specific details,
1032 Python 3 support.")
1033 ;; TODO: setuptools now bundles the following libraries:
1034 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1035 (license (list license:psfl ; setuptools itself
1036 license:expat ; six, appdirs, pyparsing
1037 license:asl2.0 ; packaging is dual ASL2/BSD-2
1038 license:bsd-2))))
1039
1040 (define-public python2-setuptools
1041 (package-with-python2 python-setuptools))
1042
1043 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1044 (define-public python-setuptools-for-tensorflow
1045 (hidden-package
1046 (package
1047 (inherit python-setuptools)
1048 (version "39.1.0")
1049 (source (origin
1050 (inherit (package-source python-setuptools))
1051 (uri (pypi-uri "setuptools" version ".zip"))
1052 (sha256
1053 (base32
1054 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1055
1056 (define-public python-uniseg
1057 (package
1058 (name "python-uniseg")
1059 (version "0.7.1")
1060 (source
1061 (origin
1062 (method url-fetch)
1063 (uri (pypi-uri "uniseg" version ".zip"))
1064 (sha256
1065 (base32
1066 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1067 (build-system python-build-system)
1068 (arguments
1069 '(#:tests? #f)) ; The test suite requires network access.
1070 (native-inputs
1071 `(("unzip" ,unzip)))
1072 (home-page
1073 "https://bitbucket.org/emptypage/uniseg-python")
1074 (synopsis
1075 "Python library to determine Unicode text segmentations")
1076 (description
1077 "Uniseg is a Python package used to determine Unicode text segmentations.
1078 Supported segmentations include:
1079 @enumerate
1080 @item @dfn{Code point} (any value in the Unicode codespace)
1081 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1082 multiple Unicode code points, e.g. \"G\" + acute-accent)
1083 @item Word break
1084 @item Sentence break
1085 @item Line break
1086 @end enumerate")
1087 (license license:expat)))
1088
1089 (define-public python2-uniseg
1090 (package-with-python2 python-uniseg))
1091
1092 (define-public python-humanfriendly
1093 (package
1094 (name "python-humanfriendly")
1095 (version "4.4.1")
1096 (source
1097 (origin
1098 (method url-fetch)
1099 (uri (pypi-uri "humanfriendly" version))
1100 (sha256
1101 (base32
1102 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1103 (build-system python-build-system)
1104 (arguments
1105 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1106 #:tests? #f))
1107 (propagated-inputs
1108 `(("python-monotonic" ,python-monotonic)))
1109 (home-page "https://humanfriendly.readthedocs.io")
1110 (synopsis "Human-friendly input and output in Python")
1111 (description
1112 "The functions and classes in @code{humanfriendly} can be used to make
1113 text interfaces more user-friendly. It includes tools to parse and format
1114 numbers, file sizes, and timespans, timers for long-running operations, menus
1115 to allow the user to choose from a list of options, and terminal interaction
1116 helpers.")
1117 (license license:expat)))
1118
1119 (define-public python2-humanfriendly
1120 (package-with-python2 python-humanfriendly))
1121
1122 (define-public python-textparser
1123 (package
1124 (name "python-textparser")
1125 (version "0.23.0")
1126 (source
1127 (origin
1128 (method url-fetch)
1129 (uri (pypi-uri "textparser" version))
1130 (sha256
1131 (base32
1132 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1133 (build-system python-build-system)
1134 (home-page "https://github.com/eerimoq/textparser")
1135 (synopsis "Fast text parser for Python")
1136 (description "This library provides a text parser written in the Python
1137 language. It aims to be fast.")
1138 (license license:expat)))
1139
1140 (define-public python-aenum
1141 (package
1142 (name "python-aenum")
1143 (version "2.2.3")
1144 (source
1145 (origin
1146 (method url-fetch)
1147 (uri (pypi-uri "aenum" version))
1148 (sha256
1149 (base32
1150 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1151 (build-system python-build-system)
1152 (arguments
1153 `(#:phases (modify-phases %standard-phases
1154 (replace 'check
1155 (lambda _
1156 (format #t "current working dir ~s~%" (getcwd))
1157 (setenv "PYTHONPATH"
1158 (string-append ".:" (getenv "PYTHONPATH")))
1159 ;; We must run the test suite module directly, as it
1160 ;; fails to define the 'tempdir' variable in scope for
1161 ;; the tests otherwise
1162 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1163 ;; issues/32/running-tests-with-python-setuppy-test).
1164 (invoke "python3" "aenum/test.py")
1165 ;; This one fails with "NameError: name
1166 ;; 'test_pickle_dump_load' is not defined" (see:
1167 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1168 ;; /error-running-the-test_v3py-test-suite).
1169 ;; (invoke "python3" "aenum/test_v3.py")
1170 #t)))))
1171 (home-page "https://bitbucket.org/stoneleaf/aenum")
1172 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1173 (description "The aenum library includes an @code{Enum} base class, a
1174 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1175 class.")
1176 (license license:bsd-3)))
1177
1178 (define-public python-can
1179 (package
1180 (name "python-can")
1181 (version "3.3.2")
1182 (source
1183 (origin
1184 (method url-fetch)
1185 (uri (pypi-uri "python-can" version))
1186 (sha256
1187 (base32
1188 "0bkbxi45sckzir6s0j3h01pkfn4vkz3ymih2zjp7zw77wz0vbvsz"))))
1189 (build-system python-build-system)
1190 (arguments
1191 `(#:phases (modify-phases %standard-phases
1192 (add-after 'unpack 'fix-broken-tests
1193 ;; The tests try to run two scripts it expects should be
1194 ;; in PATH, but they aren't at this time (see:
1195 ;; https://github.com/hardbyte/python-can/issues/805).
1196 (lambda _
1197 (substitute* "test/test_scripts.py"
1198 (("\"can_logger\\.py --help\"") "")
1199 (("\"can_player\\.py --help\"") ""))
1200 #t)))))
1201 (propagated-inputs
1202 `(("python-aenum" ,python-aenum)
1203 ("python-wrapt" ,python-wrapt)))
1204 (native-inputs
1205 `(("python-codecov" ,python-codecov)
1206 ("python-future" ,python-future)
1207 ("python-hypothesis" ,python-hypothesis)
1208 ("python-mock" ,python-mock)
1209 ("python-pyserial" ,python-pyserial)
1210 ("python-pytest" ,python-pytest)
1211 ("python-pytest-cov" ,python-pytest-cov)
1212 ("python-pytest-runner" ,python-pytest-runner)
1213 ("python-pytest-timeout" ,python-pytest-timeout)))
1214 (home-page "https://github.com/hardbyte/python-can")
1215 (synopsis "Controller Area Network (CAN) interface module for Python")
1216 (description "This package defines the @code{can} module, which provides
1217 controller area network (CAN) support for Python developers; providing common
1218 abstractions to different hardware devices, and a suite of utilities for
1219 sending and receiving messages on a CAN bus.")
1220 (license license:gpl3+)))
1221
1222 (define-public python-diskcache
1223 (package
1224 (name "python-diskcache")
1225 (version "4.1.0")
1226 (source
1227 (origin
1228 (method url-fetch)
1229 (uri (pypi-uri "diskcache" version))
1230 (sha256
1231 (base32
1232 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1233 (build-system python-build-system)
1234 (arguments
1235 `(#:tests? #f)) ;test suite not included in the release
1236 (home-page "http://www.grantjenks.com/docs/diskcache/")
1237 (synopsis "Disk and file backed cache library")
1238 (description "DiskCache is a disk and file backed persistent cache.")
1239 (license license:asl2.0)))
1240
1241 (define-public python-bitstruct
1242 (package
1243 (name "python-bitstruct")
1244 (version "8.9.0")
1245 (source
1246 (origin
1247 (method url-fetch)
1248 (uri (pypi-uri "bitstruct" version))
1249 (sha256
1250 (base32
1251 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1252 (build-system python-build-system)
1253 (home-page "https://github.com/eerimoq/bitstruct")
1254 (synopsis "Python values to and C bit field structs converter")
1255 (description "This module performs conversions between Python values and C
1256 bit field structs represented as Python byte strings. It is intended to have
1257 a similar interface as the @code{struct} module from Python, but working on
1258 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1259 (license license:expat)))
1260
1261 (define-public python-cantools
1262 (package
1263 (name "python-cantools")
1264 (version "33.1.1")
1265 (source
1266 (origin
1267 ;; We take the sources from the Git repository as the documentation is
1268 ;; not included with the PyPI archive.
1269 (method git-fetch)
1270 (uri (git-reference
1271 (url "https://github.com/eerimoq/cantools.git")
1272 (commit version)))
1273 (file-name (git-file-name name version))
1274 (sha256
1275 (base32
1276 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1277 (build-system python-build-system)
1278 (arguments
1279 `(#:phases
1280 (modify-phases %standard-phases
1281 (add-after 'build 'build-doc
1282 (lambda _
1283 ;; See: https://github.com/eerimoq/cantools/issues/190.
1284 (substitute* "README.rst"
1285 (("https://github.com/eerimoq/cantools/raw/master\
1286 /docs/monitor.png")
1287 "monitor.png"))
1288 (with-directory-excursion "docs"
1289 (invoke "make" "man" "info"))))
1290 (add-after 'install 'install-doc
1291 (lambda* (#:key outputs #:allow-other-keys)
1292 (let* ((out (assoc-ref outputs "out"))
1293 (info (string-append out "/share/info"))
1294 (man1 (string-append out "/share/man/man1")))
1295 (format #t "CWD: ~s~%" (getcwd))
1296 (install-file "docs/_build/texinfo/cantools.info" info)
1297 (install-file "docs/_build/man/cantools.1" man1)
1298 #t))))))
1299 (native-inputs
1300 `(("sphinx" ,python-sphinx)
1301 ("texinfo" ,texinfo)))
1302 (propagated-inputs
1303 `(("python-bitstruct" ,python-bitstruct)
1304 ("python-can" ,python-can)
1305 ("python-diskcache" ,python-diskcache)
1306 ("python-textparser" ,python-textparser)))
1307 (home-page "https://github.com/eerimoq/cantools")
1308 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1309 (description "This package includes Controller Area Network (CAN) related
1310 tools that can be used to:
1311 @itemize
1312 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1313 @item encode and decode CAN messages
1314 @item multiplex simple and extended signals
1315 @item diagnose DID encoding and decoding
1316 @item dump the CAN decoder output
1317 @item test CAN nodes
1318 @item generate C source code
1319 @item monitor the CAN bus
1320 @end itemize")
1321 (license license:expat)))
1322
1323 (define-public python-capturer
1324 (package
1325 (name "python-capturer")
1326 (version "2.4")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "capturer" version))
1331 (sha256
1332 (base32
1333 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1334 (build-system python-build-system)
1335 (arguments
1336 `(#:tests? #f))
1337 (propagated-inputs
1338 `(("python-humanfriendly" ,python-humanfriendly)))
1339 (home-page "https://capturer.readthedocs.io")
1340 (synopsis "Capture stdout and stderr streams of the current process")
1341 (description
1342 "The capturer package makes it easy to capture the stdout and stderr
1343 streams of the current process and subprocesses. Output can be relayed
1344 to the terminal in real time but is also available to the Python program
1345 for additional processing.")
1346 (license license:expat)))
1347
1348 (define-public python2-capturer
1349 (package-with-python2 python-capturer))
1350
1351 (define-public python-case
1352 (package
1353 (name "python-case")
1354 (version "1.5.3")
1355 (source
1356 (origin
1357 (method url-fetch)
1358 (uri (pypi-uri "case" version))
1359 (sha256
1360 (base32
1361 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1362 (build-system python-build-system)
1363 (propagated-inputs
1364 `(("python-mock" ,python-mock)
1365 ("python-nose" ,python-nose)
1366 ("python-six" ,python-six)
1367 ("python-unittest2" ,python-unittest2)))
1368 (native-inputs
1369 `(("python-coverage" ,python-coverage)))
1370 (home-page "https://github.com/celery/case")
1371 (synopsis "Unittest utilities and convenience methods")
1372 (description
1373 "The @code{case} package provides utilities on top of unittest, including
1374 some helpful Python 2 compatibility convenience methods.")
1375 (license license:bsd-3)))
1376
1377 (define-public python-verboselogs
1378 (package
1379 (name "python-verboselogs")
1380 (version "1.7")
1381 (source
1382 (origin
1383 (method url-fetch)
1384 (uri (pypi-uri "verboselogs" version))
1385 (sha256
1386 (base32
1387 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1388 (build-system python-build-system)
1389 (arguments
1390 `(#:phases
1391 (modify-phases %standard-phases
1392 (replace 'check
1393 (lambda _
1394 ;; Do not run pylint plugin test, as astroid is an old
1395 ;; unsupported version.
1396 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1397 "verboselogs/tests.py"))))))
1398 (native-inputs
1399 `(("python-mock" ,python-mock)
1400 ("python-pytest" ,python-pytest)))
1401 (home-page "https://verboselogs.readthedocs.io")
1402 (synopsis "Verbose logging level for Python's logging module")
1403 (description
1404 "The @code{verboselogs} package extends Python's @code{logging} module to
1405 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1406 (license license:expat)))
1407
1408 (define-public python2-verboselogs
1409 (package-with-python2 python-verboselogs))
1410
1411 (define-public python-coloredlogs
1412 (package
1413 (name "python-coloredlogs")
1414 (version "10.0")
1415 (source
1416 (origin
1417 (method url-fetch)
1418 (uri (pypi-uri "coloredlogs" version))
1419 (sha256
1420 (base32
1421 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1422 (build-system python-build-system)
1423 (arguments
1424 `(;Tests require some updated modules
1425 #:tests? #f))
1426 (propagated-inputs
1427 `(("python-capturer" ,python-capturer)))
1428 (home-page "https://coloredlogs.readthedocs.io")
1429 (synopsis "Colored stream handler for Python's logging module")
1430 (description
1431 "The @code{coloredlogs} package enables colored terminal output for
1432 Python's logging module. The @code{ColoredFormatter} class inherits from
1433 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1434 messages in color.")
1435 (license license:expat)))
1436
1437 (define-public python2-coloredlogs
1438 (package-with-python2 python-coloredlogs))
1439
1440 (define-public python-editorconfig
1441 (package
1442 (name "python-editorconfig")
1443 (version "0.12.2")
1444 (source
1445 (origin
1446 (method url-fetch)
1447 (uri (pypi-uri "EditorConfig" version))
1448 (sha256
1449 (base32
1450 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1451 (build-system python-build-system)
1452 (home-page "https://editorconfig.org/")
1453 (synopsis "EditorConfig bindings for python")
1454 (description "The EditorConfig project consists of a file format for
1455 defining coding styles and a collection of text editor plugins that enable
1456 editors to read the file format and adhere to defined styles. EditorConfig
1457 files are easily readable and they work nicely with version control systems.")
1458 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1459 (license (list license:bsd-2 license:psfl))))
1460
1461 (define-public python-et-xmlfile
1462 (package
1463 (name "python-et-xmlfile")
1464 (version "1.0.1")
1465 (source
1466 (origin
1467 (method url-fetch)
1468 (uri (pypi-uri "et_xmlfile" version))
1469 (sha256
1470 (base32
1471 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1472 (build-system python-build-system)
1473 (arguments
1474 `(#:phases (modify-phases %standard-phases
1475 (replace 'check
1476 (lambda _
1477 (invoke "pytest"))))))
1478 (native-inputs
1479 `(("python-pytest" ,python-pytest)
1480 ("python-lxml" ,python-lxml))) ;used for the tests
1481 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1482 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1483 (description "This Python library is based upon the @code{xmlfile} module
1484 from @code{lxml}. It aims to provide a low memory, compatible implementation
1485 of @code{xmlfile}.")
1486 (license license:expat)))
1487
1488 (define-public python2-et-xmlfile
1489 (package-with-python2 python-et-xmlfile))
1490
1491 (define-public python-openpyxl
1492 (package
1493 (name "python-openpyxl")
1494 (version "2.6.2")
1495 (source
1496 (origin
1497 ;; We use the upstream repository, as the tests are not included in the
1498 ;; PyPI releases.
1499 (method hg-fetch)
1500 (uri (hg-reference
1501 (url "https://bitbucket.org/openpyxl/openpyxl")
1502 (changeset version)))
1503 (file-name (string-append name "-" version "-checkout"))
1504 (sha256
1505 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1506 (build-system python-build-system)
1507 (arguments
1508 `(#:phases (modify-phases %standard-phases
1509 (replace 'check
1510 (lambda _
1511 (invoke "pytest"))))))
1512 (native-inputs
1513 ;; For the test suite.
1514 `(("python-lxml" ,python-lxml)
1515 ("python-pillow" ,python-pillow)
1516 ("python-pytest" ,python-pytest)))
1517 (propagated-inputs
1518 `(("python-et-xmlfile" ,python-et-xmlfile)
1519 ("python-jdcal" ,python-jdcal)))
1520 (home-page "https://openpyxl.readthedocs.io")
1521 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1522 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1523 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1524 standard.")
1525 (license license:expat)))
1526
1527 (define-public python-eventlet
1528 (package
1529 (name "python-eventlet")
1530 (version "0.25.1")
1531 (source
1532 (origin
1533 (method url-fetch)
1534 (uri (pypi-uri "eventlet" version))
1535 (sha256
1536 (base32
1537 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1538 (build-system python-build-system)
1539 (propagated-inputs
1540 `(("python-greenlet" ,python-greenlet)))
1541 (arguments
1542 ;; TODO: Requires unpackaged 'enum-compat'.
1543 '(#:tests? #f))
1544 (home-page "https://eventlet.net")
1545 (synopsis "Concurrent networking library for Python")
1546 (description
1547 "Eventlet is a concurrent networking library for Python that
1548 allows you to change how you run your code, not how you write it.
1549 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1550 Coroutines ensure that the developer uses a blocking style of programming
1551 that is similar to threading, but provide the benefits of non-blocking I/O.
1552 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1553 from the Python interpreter, or as a small part of a larger application.")
1554 (license license:expat)))
1555
1556 (define-public python2-eventlet
1557 (let ((base (package-with-python2
1558 (strip-python2-variant python-eventlet))))
1559 (package (inherit base)
1560 (propagated-inputs
1561 `(("python2-enum34" ,python2-enum34)
1562 ,@(package-propagated-inputs base))))))
1563
1564 (define-public python-six
1565 (package
1566 (name "python-six")
1567 (version "1.14.0")
1568 (source
1569 (origin
1570 (method url-fetch)
1571 (uri (pypi-uri "six" version))
1572 (sha256
1573 (base32
1574 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1575 (build-system python-build-system)
1576 (arguments
1577 `(#:phases
1578 (modify-phases %standard-phases
1579 (replace 'check
1580 (lambda _
1581 (invoke "py.test" "-v"))))))
1582 (native-inputs
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.4.3")
1703 (source
1704 (origin
1705 (method url-fetch)
1706 (uri (pypi-uri "PyICU" version))
1707 (sha256
1708 (base32
1709 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
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 (license license:x11)))
1721
1722 (define-public python2-pyicu
1723 (package-with-python2 python-pyicu))
1724
1725 (define-public python2-dogtail
1726 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1727 ;; spaces in indentation" with Python 3.
1728 (package
1729 (name "python2-dogtail")
1730 (version "0.9.9")
1731 (source (origin
1732 (method url-fetch)
1733 (uri (pypi-uri "dogtail" version))
1734 (sha256
1735 (base32
1736 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1737 (build-system python-build-system)
1738 (arguments `(#:python ,python-2
1739 #:tests? #f)) ; invalid command "test"
1740 ;; Currently no offical homepage.
1741 (home-page "https://pypi.org/project/dogtail/")
1742 (synopsis "GUI test tool and automation framework written in Python")
1743 (description
1744 "Dogtail is a GUI test tool and automation framework written in Python.
1745 It uses Accessibility (a11y) technologies to communicate with desktop
1746 applications. dogtail scripts are written in Python and executed like any
1747 other Python program.")
1748 (license license:gpl2+)))
1749
1750 (define-public python-empy
1751 (package
1752 (name "python-empy")
1753 (version "3.3.3")
1754 (source (origin
1755 (method url-fetch)
1756 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1757 version ".tar.gz"))
1758 (sha256
1759 (base32
1760 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1761 (build-system python-build-system)
1762 (arguments
1763 `(#:tests? #f)) ; python2 only
1764 (home-page "http://www.alcyone.com/software/empy/")
1765 (synopsis "Templating system for Python")
1766 (description
1767 "EmPy is a system for embedding Python expressions and statements in
1768 template text; it takes an EmPy source file, processes it, and produces
1769 output. This is accomplished via expansions, which are special signals to the
1770 EmPy system and are set off by a special prefix (by default the at sign, @@).
1771 EmPy can expand arbitrary Python expressions and statements in this way, as
1772 well as a variety of special forms. Textual data not explicitly delimited in
1773 this way is sent unaffected to the output, allowing Python to be used in
1774 effect as a markup language. Also supported are callbacks via hooks,
1775 recording and playback via diversions, and dynamic, chainable filters. The
1776 system is highly configurable via command line options and embedded
1777 commands.")
1778 (license license:lgpl2.1+)))
1779
1780 (define-public python2-empy
1781 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1782 (package
1783 (inherit base)
1784 (arguments `(,@(package-arguments base)
1785 #:tests? #t)))))
1786
1787 (define-public python2-element-tree
1788 (package
1789 (name "python2-element-tree")
1790 (version "1.2.6")
1791 (source (origin
1792 (method url-fetch)
1793 (uri (string-append
1794 "http://effbot.org/media/downloads/elementtree-"
1795 version "-20050316.tar.gz"))
1796 (sha256
1797 (base32
1798 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1799 (build-system python-build-system)
1800 (arguments
1801 `(#:python ,python-2 ; seems to be part of Python 3
1802 #:tests? #f)) ; no 'test' sub-command
1803 (synopsis "Toolkit for XML processing in Python")
1804 (description
1805 "ElementTree is a Python library supporting lightweight XML processing.")
1806 (home-page "https://effbot.org/zone/element-index.htm")
1807 (license (license:x11-style
1808 "http://docs.python.org/2/license.html"
1809 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1810
1811 (define-public python2-pybugz
1812 (package
1813 (name "python2-pybugz")
1814 (version "0.6.11")
1815 (source (origin
1816 (method url-fetch)
1817 (uri (string-append
1818 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1819 version ".tar.gz"))
1820 (sha256
1821 (base32
1822 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1823 (patches (search-patches "pybugz-stty.patch"
1824 "pybugz-encode-error.patch"))))
1825 (build-system python-build-system)
1826 (arguments
1827 `(#:python ,python-2 ; SyntaxError with Python 3
1828 #:tests? #f)) ; no 'test' sub-command
1829 (propagated-inputs
1830 `(("element-tree" ,python2-element-tree)))
1831 (synopsis "Python and command-line interface to Bugzilla")
1832 (description
1833 "PyBugz is a Python library and command-line tool to query the Bugzilla
1834 bug tracking system. It is meant as an aid to speed up interaction with the
1835 bug tracker.")
1836 (home-page "http://www.liquidx.net/pybugz/")
1837 (license license:gpl2)))
1838
1839 (define-public python2-enum
1840 (package
1841 (name "python2-enum")
1842 (version "0.4.6")
1843 (source (origin
1844 (method url-fetch)
1845 (uri (pypi-uri "enum" version))
1846 (sha256
1847 (base32
1848 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1849 (build-system python-build-system)
1850 (arguments
1851 `(#:python ,python-2))
1852 (home-page "https://pypi.org/project/enum/")
1853 (synopsis "Robust enumerated type support in Python")
1854 (description
1855 "This provides a module for robust enumerations in Python. It has
1856 been superseded by the Python standard library and is provided only for
1857 compatibility.")
1858 ;; Choice of either license.
1859 (license (list license:gpl3+ license:psfl))))
1860
1861 (define-public python-enum34
1862 (package
1863 (name "python-enum34")
1864 (version "1.1.6")
1865 (source
1866 (origin
1867 (method url-fetch)
1868 (uri (pypi-uri "enum34" version))
1869 (sha256
1870 (base32
1871 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1872 (build-system python-build-system)
1873 (home-page "https://pypi.org/project/enum34/")
1874 (synopsis "Backported Python 3.4 Enum")
1875 (description
1876 "Enum34 is the new Python stdlib enum module available in Python 3.4
1877 backported for previous versions of Python from 2.4 to 3.3.")
1878 (license license:bsd-3)))
1879
1880 (define-public python2-enum34
1881 (package-with-python2 python-enum34))
1882
1883 (define-public python-parse-type
1884 (package
1885 (name "python-parse-type")
1886 (version "0.4.2")
1887 (source
1888 (origin
1889 (method url-fetch)
1890 (uri (pypi-uri "parse_type" version))
1891 (sha256
1892 (base32
1893 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1894 (build-system python-build-system)
1895 (propagated-inputs
1896 `(("python-six" ,python-six)
1897 ("python-parse" ,python-parse)))
1898 (native-inputs
1899 `(("python-pytest" ,python-pytest)
1900 ("python-pytest-runner" ,python-pytest-runner)))
1901 (home-page "https://github.com/jenisys/parse_type")
1902 (synopsis "Extended parse module")
1903 (description
1904 "Parse_type extends the python parse module.")
1905 (properties
1906 `((python2-variant . ,(delay python2-parse-type))))
1907 (license license:bsd-3)))
1908
1909 (define-public python2-parse-type
1910 (let ((base (package-with-python2
1911 (strip-python2-variant python-parse-type))))
1912 (package (inherit base)
1913 (propagated-inputs
1914 `(("python2-enum34" ,python2-enum34)
1915 ,@(package-propagated-inputs base))))))
1916
1917 (define-public python-parse
1918 (package
1919 (name "python-parse")
1920 (version "1.8.4")
1921 (source
1922 (origin
1923 (method url-fetch)
1924 (uri (pypi-uri "parse" version))
1925 (sha256
1926 (base32
1927 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1928 (build-system python-build-system)
1929 (arguments
1930 `(#:phases
1931 (modify-phases %standard-phases
1932 (replace 'check
1933 (lambda _ (invoke "python" "test_parse.py"))))))
1934 (home-page "https://github.com/r1chardj0n3s/parse")
1935 (synopsis "Parse strings")
1936 (description
1937 "Parse strings using a specification based on the Python @code{format()}
1938 syntax.")
1939 (license license:x11)))
1940
1941 (define-public python-polib
1942 (package
1943 (name "python-polib")
1944 (version "1.0.8")
1945 (source (origin
1946 (method url-fetch)
1947 (uri (pypi-uri "polib" version))
1948 (sha256
1949 (base32
1950 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1951 (build-system python-build-system)
1952 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1953 (synopsis "Manipulate, create and modify gettext files")
1954 (description "Polib can manipulate any gettext format (po, pot and mo)
1955 files. It can be used to create po files from scratch or to modify
1956 existing ones.")
1957 (license license:expat)))
1958
1959 (define-public python2-polib
1960 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1961 (package
1962 (inherit base)
1963 (arguments `(,@(package-arguments base)
1964 ;; Tests don't work with python2.
1965 #:tests? #f)))))
1966
1967 (define-public python-poyo
1968 (package
1969 (name "python-poyo")
1970 (version "0.5.0")
1971 (source
1972 (origin
1973 (method url-fetch)
1974 (uri (pypi-uri "poyo" version))
1975 (sha256
1976 (base32
1977 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
1978 (build-system python-build-system)
1979 (home-page "https://github.com/hackebrot/poyo")
1980 (synopsis "Lightweight YAML Parser for Python")
1981 (description
1982 "This package provides a lightweight YAML Parser for Python. It supports
1983 only a chosen subset of the YAML format that is required to parse cookiecutter
1984 user configuration files. It does not have support for serializing into YAML
1985 and is not compatible with JSON.")
1986 (license license:expat)))
1987
1988 (define-public scons
1989 (package
1990 (name "scons")
1991 (version "3.0.4")
1992 (source (origin
1993 (method git-fetch)
1994 (uri (git-reference
1995 (url "https://github.com/SCons/scons.git")
1996 (commit version)))
1997 (file-name (git-file-name name version))
1998 (sha256
1999 (base32
2000 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2001 (build-system python-build-system)
2002 (arguments
2003 `(#:use-setuptools? #f ; still relies on distutils
2004 #:tests? #f ; no 'python setup.py test' command
2005 #:phases
2006 (modify-phases %standard-phases
2007 (add-before 'build 'bootstrap
2008 (lambda _
2009 (substitute* "src/engine/SCons/compat/__init__.py"
2010 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2011 "sys.modules[new] = __import__(old)"))
2012 (substitute* "src/engine/SCons/Platform/__init__.py"
2013 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2014 "mod = __import__(full_name)"))
2015 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2016 (chdir "build/scons")
2017 #t)))))
2018 (home-page "https://scons.org/")
2019 (synopsis "Software construction tool written in Python")
2020 (description
2021 "SCons is a software construction tool. Think of SCons as an improved,
2022 cross-platform substitute for the classic Make utility with integrated
2023 functionality similar to autoconf/automake and compiler caches such as ccache.
2024 In short, SCons is an easier, more reliable and faster way to build
2025 software.")
2026 (license license:x11)))
2027
2028 (define-public scons-python2
2029 (package
2030 (inherit (package-with-python2 scons))
2031 (name "scons-python2")))
2032
2033 (define-public python-extras
2034 (package
2035 (name "python-extras")
2036 (version "1.0.0")
2037 (source
2038 (origin
2039 (method url-fetch)
2040 (uri (pypi-uri "extras" version))
2041 (sha256
2042 (base32
2043 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2044 (build-system python-build-system)
2045 (arguments
2046 ;; FIXME: Circular dependency on testtools.
2047 '(#:tests? #f))
2048 (home-page "https://github.com/testing-cabal/extras")
2049 (synopsis "Useful extensions to the Python standard library")
2050 (description
2051 "Extras is a set of extensions to the Python standard library.")
2052 (license license:expat)))
2053
2054 (define-public python2-extras
2055 (package-with-python2 python-extras))
2056
2057 (define-public python-mimeparse
2058 (package
2059 (name "python-mimeparse")
2060 (version "1.6.0")
2061 (source
2062 (origin
2063 (method url-fetch)
2064 (uri (pypi-uri "python-mimeparse" version))
2065 (sha256
2066 (base32
2067 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2068 (build-system python-build-system)
2069 (arguments
2070 '(#:phases
2071 (modify-phases %standard-phases
2072 (replace 'check
2073 (lambda _
2074 (invoke "./mimeparse_test.py"))))))
2075 (home-page
2076 "https://github.com/dbtsai/python-mimeparse")
2077 (synopsis "Python library for parsing MIME types")
2078 (description
2079 "Mimeparse provides basic functions for parsing MIME type names and
2080 matching them against a list of media-ranges.")
2081 (license license:expat)))
2082
2083 (define-public python2-mimeparse
2084 (package-with-python2 python-mimeparse))
2085
2086 (define-public python-miniboa
2087 (package
2088 (name "python-miniboa")
2089 (version "1.0.7")
2090 (source
2091 (origin
2092 (method url-fetch)
2093 (uri (pypi-uri "miniboa" version))
2094 (sha256
2095 (base32
2096 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2097 (build-system python-build-system)
2098 (home-page "https://github.com/shmup/miniboa")
2099 (synopsis "Simple, single-threaded Telnet server")
2100 (description
2101 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2102 server.")
2103 (license license:asl2.0)))
2104
2105 (define-public python2-miniboa
2106 (package-with-python2 python-miniboa))
2107
2108 (define-public python-pafy
2109 (package
2110 (name "python-pafy")
2111 (version "0.5.3.1")
2112 (source
2113 (origin
2114 (method url-fetch)
2115 (uri (pypi-uri "pafy" version))
2116 (sha256
2117 (base32
2118 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2119 (build-system python-build-system)
2120 (arguments
2121 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2122 (propagated-inputs
2123 ;; Youtube-dl is a python package which is imported in the file
2124 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2125 `(("youtube-dl" ,youtube-dl)))
2126 (home-page "https://np1.github.io/pafy/")
2127 (synopsis "Retrieve YouTube content and metadata")
2128 (description
2129 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2130 (license license:lgpl3+)))
2131
2132 (define-public python2-funcsigs
2133 (package
2134 (name "python2-funcsigs")
2135 (version "1.0.2")
2136 (source (origin
2137 (method url-fetch)
2138 (uri (pypi-uri "funcsigs" version))
2139 (sha256
2140 (base32
2141 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2142 (build-system python-build-system)
2143 (arguments
2144 `(#:python ,python-2))
2145 (native-inputs
2146 `(("python2-unittest2" ,python2-unittest2)))
2147 (home-page "http://funcsigs.readthedocs.org")
2148 (synopsis "Python function signatures from PEP362")
2149 (description
2150 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2151 (license license:asl2.0)))
2152
2153 (define-public python2-funcsigs-bootstrap
2154 (package
2155 (inherit python2-funcsigs)
2156 (name "python2-funcsigs-bootstrap")
2157 (native-inputs `())
2158 (arguments
2159 `(#:tests? #f
2160 ,@(package-arguments python2-funcsigs)))))
2161
2162 (define-public python-py
2163 (package
2164 (name "python-py")
2165 (version "1.8.1")
2166 (source
2167 (origin
2168 (method url-fetch)
2169 (uri (pypi-uri "py" version))
2170 (sha256
2171 (base32
2172 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2173 (build-system python-build-system)
2174 (arguments
2175 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2176 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2177 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2178 ;; Is this module globally installed?"
2179 '(#:tests? #f))
2180 (native-inputs
2181 `(("python-setuptools-scm" ,python-setuptools-scm)))
2182 (home-page "https://github.com/pytest-dev/py")
2183 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2184 (description
2185 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2186 code introspection, and logging.")
2187 (license license:expat)))
2188
2189 (define-public python2-py
2190 (package-with-python2 python-py))
2191
2192 ;; Recent versions of python-fixtures and python-testrepository need
2193 ;; python-pbr for packaging, which itself needs these two packages for
2194 ;; testing.
2195 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2196 ;; same source, just without any test dependencies and with tests disabled.
2197 ;; python-pbr-minmal is then used to package python-fixtures and
2198 ;; python-testrepository.
2199 ;; Strictly speaking we currently could remove the test-requirements from the
2200 ;; normal python-pbr package (and save this package) since test are disabled
2201 ;; there anyway. But this may change in future.
2202 (define-public python-pbr-minimal
2203 (package
2204 (name "python-pbr-minimal")
2205 (version "3.0.1")
2206 (source
2207 (origin
2208 (method url-fetch)
2209 (uri (pypi-uri "pbr" version))
2210 (sha256
2211 (base32
2212 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2213 (build-system python-build-system)
2214 (arguments
2215 `(#:tests? #f))
2216 (home-page "https://docs.openstack.org/pbr/latest/")
2217 (synopsis "Minimal build of python-pbr used for bootstrapping")
2218 (description
2219 "Used only for bootstrapping python2-pbr, you should not need this.")
2220 (license license:asl2.0)))
2221
2222 (define-public python2-pbr-minimal
2223 (package-with-python2 python-pbr-minimal))
2224
2225 (define-public python-pbr
2226 (package
2227 (inherit python-pbr-minimal)
2228 (name "python-pbr")
2229 (arguments
2230 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2231 (propagated-inputs
2232 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2233 (native-inputs
2234 `(("python-fixtures" ,python-fixtures-bootstrap)
2235 ;; discover, coverage, hacking, subunit
2236 ("python-mock" ,python-mock)
2237 ("python-six" ,python-six)
2238 ("python-sphinx" ,python-sphinx)
2239 ("python-testrepository" ,python-testrepository-bootstrap)
2240 ("python-testresources" ,python-testresources-bootstrap)
2241 ("python-testscenarios" ,python-testscenarios-bootstrap)
2242 ("python-testtools" ,python-testtools-bootstrap)
2243 ("python-virtualenv" ,python-virtualenv)))
2244 (synopsis "Enhance the default behavior of Python’s setuptools")
2245 (description
2246 "Python Build Reasonableness (PBR) is a library that injects some useful
2247 and sensible default behaviors into your setuptools run. It will set
2248 versions, process requirements files and generate AUTHORS and ChangeLog file
2249 from git information.
2250 ")))
2251
2252 (define-public python2-pbr
2253 (package-with-python2 python-pbr))
2254
2255 (define-public python-pyrsistent
2256 (package
2257 (name "python-pyrsistent")
2258 (version "0.16.0")
2259 (home-page "https://github.com/tobgu/pyrsistent")
2260 (source (origin
2261 (method url-fetch)
2262 (uri (pypi-uri "pyrsistent" version))
2263 (sha256
2264 (base32
2265 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2266 (build-system python-build-system)
2267 (arguments
2268 '(#:phases (modify-phases %standard-phases
2269 ;; The package works fine with newer Pytest and Hypothesis, but
2270 ;; has pinned older versions to stay compatible with Python 2.
2271 (add-before 'check 'loosen-pytest-requirement
2272 (lambda _
2273 (substitute* "setup.py"
2274 (("pytest<5") "pytest")
2275 (("hypothesis<5") "hypothesis"))
2276 #t)))))
2277 (native-inputs
2278 `(("python-hypothesis" ,python-hypothesis)
2279 ("python-pytest" ,python-pytest)
2280 ("python-pytest-runner" ,python-pytest-runner)))
2281 (propagated-inputs
2282 `(("python-six" ,python-six)))
2283 (synopsis "Persistent data structures for Python")
2284 (description
2285 "Pyrsistent is a number of persistent collections (by some referred to as
2286 functional data structures). Persistent in the sense that they are immutable.
2287
2288 All methods on a data structure that would normally mutate it instead return a
2289 new copy of the structure containing the requested updates. The original
2290 structure is left untouched.")
2291 (license license:expat)))
2292
2293 (define-public python2-pyrsistent
2294 (package-with-python2 python-pyrsistent))
2295
2296 (define-public python-exif-read
2297 (package
2298 (name "python-exif-read")
2299 (version "2.1.2")
2300 (source (origin
2301 (method url-fetch)
2302 (uri (pypi-uri "ExifRead" version))
2303 (sha256
2304 (base32
2305 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2306 (build-system python-build-system)
2307 (arguments `(#:tests? #f)) ; no tests
2308 (home-page "https://github.com/ianare/exif-py")
2309 (synopsis "Python library to extract EXIF data from image files")
2310 (description
2311 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2312 files.")
2313 (license license:bsd-3)))
2314
2315 (define-public python2-exif-read
2316 (package-with-python2 python-exif-read))
2317
2318 (define-public python-pyld
2319 (package
2320 (name "python-pyld")
2321 (version "1.0.5")
2322 (source (origin
2323 (method url-fetch)
2324 (uri (pypi-uri "PyLD" version))
2325 (sha256
2326 (base32
2327 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2328 (build-system python-build-system)
2329 (home-page "https://github.com/digitalbazaar/pyld")
2330 (synopsis "Python implementation of the JSON-LD specification")
2331 (description
2332 "PyLD is an implementation of the JSON-LD specification.")
2333 (license license:bsd-3)))
2334
2335 (define-public python2-pyld
2336 (package-with-python2 python-pyld))
2337
2338 (define-public python-click
2339 (package
2340 (name "python-click")
2341 (version "7.0")
2342 (source
2343 (origin
2344 (method url-fetch)
2345 (uri (pypi-uri "click" version))
2346 (sha256
2347 (base32
2348 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2349 (build-system python-build-system)
2350 (arguments
2351 `(#:phases
2352 (modify-phases %standard-phases
2353 (add-after 'unpack 'fix-paths
2354 (lambda* (#:key inputs #:allow-other-keys)
2355 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2356 "cross-libc" "libc"))))
2357 (substitute* "click/_unicodefun.py"
2358 (("'locale'")
2359 (string-append "'" glibc "/bin/locale'"))))
2360 #t))
2361 (replace 'check
2362 (lambda _
2363 (invoke "python" "-m" "pytest"))))))
2364 (native-inputs
2365 `(("python-pytest" ,python-pytest)))
2366 (home-page "https://palletsprojects.com/p/click/")
2367 (synopsis "Command line library for Python")
2368 (description
2369 "Click is a Python package for creating command line interfaces in a
2370 composable way with as little code as necessary. Its name stands for
2371 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2372 with sensible defaults out of the box.")
2373 (license license:bsd-3)))
2374
2375 (define-public python2-click
2376 (package-with-python2 python-click))
2377
2378 (define-public python-wheel
2379 (package
2380 (name "python-wheel")
2381 (version "0.33.6")
2382 (source
2383 (origin
2384 (method url-fetch)
2385 (uri (pypi-uri "wheel" version))
2386 (sha256
2387 (base32
2388 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2389 (build-system python-build-system)
2390 (arguments
2391 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2392 ;; fails to find the newly-built bdist_wheel library, even though it is
2393 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2394 '(#:tests? #f))
2395 (home-page "https://bitbucket.org/pypa/wheel/")
2396 (synopsis "Format for built Python packages")
2397 (description
2398 "A wheel is a ZIP-format archive with a specially formatted filename and
2399 the @code{.whl} extension. It is designed to contain all the files for a PEP
2400 376 compatible install in a way that is very close to the on-disk format. Many
2401 packages will be properly installed with only the @code{Unpack} step and the
2402 unpacked archive preserves enough information to @code{Spread} (copy data and
2403 scripts to their final locations) at any later time. Wheel files can be
2404 installed with a newer @code{pip} or with wheel's own command line utility.")
2405 (license license:expat)))
2406
2407 (define-public python2-wheel
2408 (package-with-python2 python-wheel))
2409
2410 (define-public python-vcversioner
2411 (package
2412 (name "python-vcversioner")
2413 (version "2.16.0.0")
2414 (source
2415 (origin
2416 (method url-fetch)
2417 (uri (pypi-uri "vcversioner" version))
2418 (sha256
2419 (base32
2420 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2421 (build-system python-build-system)
2422 (synopsis "Python library for version number discovery")
2423 (description "Vcversioner is a Python library that inspects tagging
2424 information in a variety of version control systems in order to discover
2425 version numbers.")
2426 (home-page "https://github.com/habnabit/vcversioner")
2427 (license license:isc)))
2428
2429 (define-public python2-vcversioner
2430 (package-with-python2 python-vcversioner))
2431
2432 (define-public python-jdcal
2433 (package
2434 (name "python-jdcal")
2435 (version "1.4")
2436 (source
2437 (origin
2438 (method url-fetch)
2439 (uri (pypi-uri "jdcal" version))
2440 (sha256
2441 (base32
2442 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2443 (build-system python-build-system)
2444 (arguments
2445 `(#:phases (modify-phases %standard-phases
2446 (replace 'check
2447 (lambda _
2448 (invoke "pytest"))))))
2449 (native-inputs
2450 `(("python-pytest" ,python-pytest)))
2451 (home-page "https://github.com/phn/jdcal")
2452 (synopsis "Functions to convert between Julian dates Gregorian dates")
2453 (description "This Python library provides functions for converting
2454 between Julian dates and Gregorian dates.")
2455 (license license:bsd-2)))
2456
2457 (define-public python2-jdcal
2458 (package-with-python2 python-jdcal))
2459
2460 (define-public python-jsondiff
2461 (package
2462 (name "python-jsondiff")
2463 (version "1.2.0")
2464 (source
2465 (origin
2466 (method url-fetch)
2467 (uri (pypi-uri "jsondiff" version))
2468 (sha256
2469 (base32
2470 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2471 (build-system python-build-system)
2472 (native-inputs
2473 `(("python-nose" ,python-nose)
2474 ("python-nose-random" ,python-nose-random)))
2475 (home-page
2476 "https://github.com/fzumstein/jsondiff")
2477 (synopsis "Compare JSON and JSON-like structures in Python")
2478 (description "@code{jsondiff} is a Python library which lets you
2479 compare, diff, and patch JSON and JSON-like structures in Python.")
2480 (license license:expat)))
2481
2482 (define-public python-jsonschema
2483 (package
2484 (name "python-jsonschema")
2485 (version "3.2.0")
2486 (source (origin
2487 (method url-fetch)
2488 (uri (pypi-uri "jsonschema" version))
2489 (sha256
2490 (base32
2491 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2492 (build-system python-build-system)
2493 (arguments
2494 '(#:phases
2495 (modify-phases %standard-phases
2496 (replace 'check
2497 (lambda* (#:key inputs outputs #:allow-other-keys)
2498 (add-installed-pythonpath inputs outputs)
2499 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2500 (invoke "trial" "jsonschema"))))))
2501 (native-inputs
2502 `(("python-setuptools_scm" ,python-setuptools-scm)
2503 ("python-twisted" ,python-twisted)))
2504 (propagated-inputs
2505 `(("python-attrs" ,python-attrs)
2506 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2507 ("python-pyrsistent" ,python-pyrsistent)
2508 ("python-six" ,python-six)))
2509 (home-page "https://github.com/Julian/jsonschema")
2510 (synopsis "Implementation of JSON Schema for Python")
2511 (description
2512 "Jsonschema is an implementation of JSON Schema for Python.")
2513 (license license:expat)
2514 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2515
2516 (define-public python2-jsonschema
2517 (let ((jsonschema (package-with-python2
2518 (strip-python2-variant python-jsonschema))))
2519 (package (inherit jsonschema)
2520 (propagated-inputs
2521 `(("python2-functools32" ,python2-functools32)
2522 ,@(package-propagated-inputs jsonschema))))))
2523
2524 (define-public python-schema
2525 (package
2526 (name "python-schema")
2527 (version "0.6.6")
2528 (source
2529 (origin
2530 (method url-fetch)
2531 (uri (pypi-uri "schema" version))
2532 (sha256
2533 (base32
2534 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2535 (build-system python-build-system)
2536 (native-inputs
2537 `(("python-pytest" ,python-pytest)))
2538 (home-page "https://github.com/keleshev/schema")
2539 (synopsis "Simple data validation library")
2540 (description
2541 "@code{python-schema} is a library for validating Python data
2542 structures, such as those obtained from config-files, forms, external
2543 services or command-line parsing, converted from JSON/YAML (or
2544 something else) to Python data-types.")
2545 (license license:psfl)))
2546
2547 (define-public python2-schema
2548 (package-with-python2 python-schema))
2549
2550 (define-public python-schema-0.5
2551 (package (inherit python-schema)
2552 (version "0.5.0")
2553 (source
2554 (origin
2555 (method url-fetch)
2556 (uri (pypi-uri "schema" version))
2557 (sha256
2558 (base32
2559 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2560
2561 (define-public python2-schema-0.5
2562 (package-with-python2 python-schema-0.5))
2563
2564 (define-public python-kitchen
2565 (package
2566 (name "python-kitchen")
2567 (version "1.2.5")
2568 (source
2569 (origin
2570 (method url-fetch)
2571 (uri (pypi-uri "kitchen" version))
2572 (sha256
2573 (base32
2574 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2575 (build-system python-build-system)
2576 (propagated-inputs
2577 `(("python-chardet" ,python-chardet)))
2578 (home-page "https://github.com/fedora-infra/kitchen")
2579 (synopsis "Python API for snippets")
2580 (description "@code{kitchen} module provides a python API for all sorts of
2581 little useful snippets of code that everybody ends up writing for their projects
2582 but never seem big enough to build an independent release. Use kitchen and stop
2583 cutting and pasting that code over and over.")
2584 (license (list license:lgpl2.1+
2585 ;; subprocess.py, test_subprocess.py,
2586 ;; kitchen/pycompat25/defaultdict.py:
2587 license:psfl))))
2588
2589 (define-public python2-kitchen
2590 (package-with-python2 python-kitchen))
2591
2592 (define-public python-unidecode
2593 (package
2594 (name "python-unidecode")
2595 (version "1.1.1")
2596 (source (origin
2597 (method url-fetch)
2598 (uri (pypi-uri "Unidecode" version))
2599 (sha256
2600 (base32
2601 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2602 (build-system python-build-system)
2603 (home-page "https://pypi.org/project/Unidecode/")
2604 (synopsis "ASCII transliterations of Unicode text")
2605 (description
2606 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2607 useful when integrating with legacy code that doesn't support Unicode, or for
2608 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2609 machine identifiers from human-readable Unicode strings that should still be
2610 somewhat intelligible.")
2611 (license license:gpl2+)))
2612
2613 (define-public python2-unidecode
2614 (package-with-python2 python-unidecode))
2615
2616 (define-public python-text-unidecode
2617 (package
2618 (name "python-text-unidecode")
2619 (version "1.3")
2620 (source (origin
2621 (method url-fetch)
2622 (uri (pypi-uri "text-unidecode" version))
2623 (sha256
2624 (base32
2625 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2626 (build-system python-build-system)
2627 (arguments
2628 '(#:phases (modify-phases %standard-phases
2629 (replace 'check
2630 (lambda _
2631 (setenv "PYTHONPATH"
2632 (string-append "./build/lib:"
2633 (getenv "PYTHONPATH")))
2634 (invoke "pytest" "-vv"))))))
2635 (native-inputs
2636 `(("python-pytest" ,python-pytest)))
2637 (home-page "https://github.com/kmike/text-unidecode/")
2638 (synopsis "Decode Unicode data")
2639 (description
2640 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2641 Perl library. It can create ASCII representations of Unicode data. In general
2642 users should prefer the @code{python-unidecode} package which offers better
2643 memory usage and transliteration quality.")
2644 ;; The user can choose either license.
2645 (license (list license:clarified-artistic license:gpl2+))))
2646
2647 (define-public python2-text-unidecode
2648 (package-with-python2 python-text-unidecode))
2649
2650 (define-public python-pyjwt
2651 (package
2652 (name "python-pyjwt")
2653 (version "1.7.1")
2654 (source
2655 (origin
2656 (method url-fetch)
2657 (uri (pypi-uri "PyJWT" version))
2658 (sha256
2659 (base32
2660 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2661 (modules '((guix build utils)))
2662 (snippet
2663 '(begin
2664 (for-each delete-file-recursively
2665 (find-files "." "\\.pyc$"))
2666 #t))))
2667 (build-system python-build-system)
2668 (arguments
2669 '(#:phases (modify-phases %standard-phases
2670 (replace 'check
2671 (lambda _
2672 ;; Mimic upstream commit 3a20892442b34c7 to get
2673 ;; rid of dependency on pytest-runner < 5.0.
2674 ;; Remove substitution for PyJWT > 1.7.1.
2675 (substitute* "setup.py"
2676 ((".*pytest-runner.*")
2677 ""))
2678 (invoke "pytest" "-vv"))))))
2679 (native-inputs
2680 `(("python-pytest" ,python-pytest)
2681 ("python-pytest-cov" ,python-pytest-cov)))
2682 (home-page "https://github.com/progrium/pyjwt")
2683 (synopsis "JSON Web Token implementation in Python")
2684 (description
2685 "PyJWT is a JSON Web Token implementation written in Python.")
2686 (license license:expat)))
2687
2688 (define-public python2-pyjwt
2689 (package-with-python2 python-pyjwt))
2690
2691 (define-public python-pykka
2692 (package
2693 (name "python-pykka")
2694 (version "1.2.1")
2695 (source
2696 (origin
2697 (method url-fetch)
2698 (uri (pypi-uri "Pykka" version))
2699 (sha256
2700 (base32
2701 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2702 (build-system python-build-system)
2703 (native-inputs
2704 `(("python-mock" ,python-mock)
2705 ("python-nose" ,python-nose)
2706 ("python-gevent" ,python-gevent)
2707 ("python-eventlet" ,python-eventlet)))
2708 (home-page "https://www.pykka.org/")
2709 (synopsis "Pykka is a Python implementation of the actor model")
2710 (description
2711 "Pykka is a Python implementation of the actor model.
2712 The actor model introduces some simple rules to control the sharing
2713 of state and cooperation between execution units, which makes it
2714 easier to build concurrent applications.")
2715 (license license:asl2.0)))
2716
2717 (define-public python2-pykka
2718 (package-with-python2 python-pykka))
2719
2720 (define-public python-pymsgbox
2721 (package
2722 (name "python-pymsgbox")
2723 (version "1.0.6")
2724 (source
2725 (origin
2726 (method git-fetch)
2727 (uri (git-reference
2728 ;; LICENSE.txt is not present on pypi
2729 (url "https://github.com/asweigart/PyMsgBox")
2730 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2731 (file-name (git-file-name name version))
2732 (sha256
2733 (base32
2734 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2735 (arguments
2736 ;; Circular dependency to run tests:
2737 ;; Tests need pyautogui, which depends on pymsgbox.
2738 '(#:tests? #f))
2739 (build-system python-build-system)
2740 (home-page "https://github.com/asweigart/PyMsgBox")
2741 (synopsis "Python module for JavaScript-like message boxes")
2742 (description
2743 "PyMsgBox is a simple, cross-platform, pure Python module for
2744 JavaScript-like message boxes. Types of dialog boxes include:
2745 @enumerate
2746 @item alert
2747 @item confirm
2748 @item prompt
2749 @item password
2750 @end enumerate
2751 ")
2752 (license license:bsd-3)))
2753
2754 (define-public python-pympler
2755 (package
2756 (name "python-pympler")
2757 (home-page "https://pythonhosted.org/Pympler/")
2758 (version "0.8")
2759 (source (origin
2760 (method url-fetch)
2761 (uri (pypi-uri "Pympler" version))
2762 (sha256
2763 (base32
2764 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2765 (build-system python-build-system)
2766 (arguments
2767 `(#:phases (modify-phases %standard-phases
2768 (delete 'check)
2769 (add-after 'install 'check
2770 (lambda* (#:key inputs outputs #:allow-other-keys)
2771 (add-installed-pythonpath inputs outputs)
2772 (invoke "python" "setup.py" "test"))))))
2773 (synopsis "Measure, monitor and analyze memory behavior")
2774 (description
2775 "Pympler is a development tool to measure, monitor and analyze
2776 the memory behavior of Python objects in a running Python application.
2777
2778 By pympling a Python application, detailed insight in the size and the
2779 lifetime of Python objects can be obtained. Undesirable or unexpected
2780 runtime behavior like memory bloat and other @samp{pymples} can easily
2781 be identified.
2782
2783 A web profiling frontend exposes process statistics, garbage
2784 visualisation and class tracker statistics.")
2785 (license license:asl2.0)))
2786
2787 (define-public python2-pympler
2788 (package-with-python2 python-pympler))
2789
2790 (define-public python-itsdangerous
2791 (package
2792 (name "python-itsdangerous")
2793 (version "1.1.0")
2794 (source
2795 (origin
2796 (method url-fetch)
2797 (uri (pypi-uri "itsdangerous" version))
2798 (sha256
2799 (base32
2800 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2801 (build-system python-build-system)
2802 (home-page "https://palletsprojects.com/p/itsdangerous/")
2803 (synopsis "Python library for passing data to/from untrusted environments")
2804 (description
2805 "Itsdangerous provides various helpers to pass trusted data to untrusted
2806 environments and back.")
2807 (license license:bsd-3)))
2808
2809 (define-public python2-itsdangerous
2810 (package-with-python2 python-itsdangerous))
2811
2812 (define-public python-pyyaml
2813 (package
2814 (name "python-pyyaml")
2815 (version "5.3.1")
2816 (source
2817 (origin
2818 (method url-fetch)
2819 (uri (pypi-uri "PyYAML" version))
2820 (sha256
2821 (base32
2822 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2823 (build-system python-build-system)
2824 (inputs
2825 `(("libyaml" ,libyaml)))
2826 (home-page "https://pyyaml.org")
2827 (synopsis "YAML parser and emitter for Python")
2828 (description
2829 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2830 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2831 API, and sensible error messages. PyYAML supports standard YAML tags and
2832 provides Python-specific tags that represent an arbitrary Python object.")
2833 (license license:expat)))
2834
2835 (define-public python2-pyyaml
2836 (package-with-python2 python-pyyaml))
2837
2838 (define-public python-vine
2839 (package
2840 (name "python-vine")
2841 (version "1.1.4")
2842 (source
2843 (origin
2844 (method url-fetch)
2845 (uri (pypi-uri "vine" version))
2846 (sha256
2847 (base32
2848 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2849 (build-system python-build-system)
2850 (native-inputs
2851 `(("python-pytest" ,python-pytest)
2852 ("python-case" ,python-case)))
2853 (home-page "https://github.com/celery/vine")
2854 (synopsis "Promises for Python")
2855 (description
2856 "@code{vine} provides a special implementation of promises in that it can
2857 be used both for \"promise of a value\" and lazy evaluation. The biggest
2858 upside for this is that everything in a promise can also be a promise,
2859 e.g. filters, callbacks and errbacks can all be promises.")
2860 (license license:bsd-3)))
2861
2862 (define-public python-virtualenv
2863 (package
2864 (name "python-virtualenv")
2865 (version "20.0.10")
2866 (source
2867 (origin
2868 (method url-fetch)
2869 (uri (pypi-uri "virtualenv" version))
2870 (sha256
2871 (base32
2872 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2873 (build-system python-build-system)
2874 (native-inputs
2875 `(("python-mock" ,python-mock)
2876 ("python-pytest" ,python-pytest)
2877 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2878 ;; be an input at all". However, removing the input makes the build error:
2879 ;; File "setup.py", line 4, in <module>
2880 ;; raise RuntimeError("setuptools >= 41 required to build")
2881 ("python-setuptools" ,python-setuptools)
2882 ("python-setuptools-scm" ,python-setuptools-scm)))
2883 (propagated-inputs
2884 `(("python-appdirs" ,python-appdirs)
2885 ("python-distlib" ,python-distlib)
2886 ("python-filelock" ,python-filelock)
2887 ("python-six" ,python-six)
2888 ("python-importlib-metadata" ,python-importlib-metadata)))
2889 (home-page "https://virtualenv.pypa.io/")
2890 (synopsis "Virtual Python environment builder")
2891 (description
2892 "Virtualenv is a tool to create isolated Python environments.")
2893 (properties `((python2-variant . ,(delay python2-virtualenv))))
2894 (license license:expat)))
2895
2896 (define-public python2-virtualenv
2897 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2898 (package
2899 (inherit base)
2900 (arguments
2901 `(#:python ,python-2
2902 #:phases
2903 (modify-phases %standard-phases
2904 (add-after 'set-paths 'adjust-PYTHONPATH
2905 (lambda* (#:key inputs #:allow-other-keys)
2906 (let* ((python (assoc-ref inputs "python"))
2907 (python-sitedir (string-append python "/lib/python2.7"
2908 "/site-packages")))
2909 ;; XXX: 'python2' always comes first on PYTHONPATH
2910 ;; and shadows the 'setuptools' input. Move python2
2911 ;; last: this should be fixed in python-build-system
2912 ;; in a future rebuild cycle.
2913 (setenv "PYTHONPATH"
2914 (string-append (string-join (delete python-sitedir
2915 (string-split
2916 (getenv "PYTHONPATH")
2917 #\:))
2918 ":")
2919 ":" python-sitedir))
2920 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2921 (getenv "PYTHONPATH"))
2922 #t))))))
2923 (propagated-inputs
2924 `(("python-contextlib2" ,python2-contextlib2)
2925 ,@(package-propagated-inputs base))))))
2926
2927 (define-public python-markupsafe
2928 (package
2929 (name "python-markupsafe")
2930 (version "1.1.1")
2931 (source
2932 (origin
2933 (method url-fetch)
2934 (uri (pypi-uri "MarkupSafe" version))
2935 (sha256
2936 (base32
2937 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2938 (build-system python-build-system)
2939 (arguments
2940 `(#:modules ((ice-9 ftw)
2941 (srfi srfi-1)
2942 (srfi srfi-26)
2943 (guix build utils)
2944 (guix build python-build-system))
2945 #:phases (modify-phases %standard-phases
2946 (replace 'check
2947 (lambda _
2948 (let ((cwd (getcwd))
2949 (libdir (find (cut string-prefix? "lib." <>)
2950 (scandir "build"))))
2951 (setenv "PYTHONPATH"
2952 (string-append cwd "/build/" libdir ":"
2953 (getenv "PYTHONPATH")))
2954 (invoke "pytest" "-vv")))))))
2955 (native-inputs
2956 `(("python-pytest" ,python-pytest)))
2957 (home-page "https://github.com/mitsuhiko/markupsafe")
2958 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
2959 (description
2960 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
2961 for Python.")
2962 (license license:bsd-3)))
2963
2964 (define-public python2-markupsafe
2965 (package-with-python2 python-markupsafe))
2966
2967 (define-public python-jinja2
2968 (package
2969 (name "python-jinja2")
2970 (version "2.11.1")
2971 (source
2972 (origin
2973 (method url-fetch)
2974 (uri (pypi-uri "Jinja2" version))
2975 (sha256
2976 (base32
2977 "0l72c11n959yzb8d3ankckb6yhjhm6x729zm7rkpk040qzxpy64k"))))
2978 (build-system python-build-system)
2979 (arguments
2980 '(#:phases (modify-phases %standard-phases
2981 (replace 'check
2982 (lambda* (#:key tests? #:allow-other-keys)
2983 (if tests?
2984 (begin
2985 (setenv "PYTHONPATH"
2986 (string-append "./build/lib:"
2987 (getenv "PYTHONPATH")))
2988 (invoke "pytest" "-vv"))
2989 (format #t "test suite not run~%"))
2990 #t)))))
2991 (native-inputs
2992 `(("python-pytest" ,python-pytest)))
2993 (propagated-inputs
2994 `(("python-markupsafe" ,python-markupsafe)))
2995 (home-page "http://jinja.pocoo.org/")
2996 (synopsis "Python template engine")
2997 (description
2998 "Jinja2 is a small but fast and easy to use stand-alone template engine
2999 written in pure Python.")
3000 (license license:bsd-3)))
3001
3002 (define-public python2-jinja2
3003 (package-with-python2 python-jinja2))
3004
3005 (define-public python-jinja2-time
3006 (package
3007 (name "python-jinja2-time")
3008 (version "0.2.0")
3009 (source
3010 (origin
3011 (method url-fetch)
3012 (uri (pypi-uri "jinja2-time" version))
3013 (sha256
3014 (base32
3015 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3016 (build-system python-build-system)
3017 (propagated-inputs
3018 `(("python-arrow" ,python-arrow)
3019 ("python-jinja2" ,python-jinja2)))
3020 (home-page
3021 "https://github.com/hackebrot/jinja2-time")
3022 (synopsis "Jinja2 Extension for Dates and Times")
3023 (description
3024 "This package provides an extension for the template engine Jinja2. It
3025 adds a 'now' tag providing a convenient access to the arrow.now() API from
3026 templates. A format string can be provided to control the output.")
3027 (license license:expat)))
3028
3029 (define-public python-pystache
3030 (package
3031 (name "python-pystache")
3032 (version "0.5.4")
3033 (source (origin
3034 (method url-fetch)
3035 (uri (pypi-uri "pystache" version))
3036 (sha256
3037 (base32
3038 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3039 (build-system python-build-system)
3040 (arguments
3041 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3042 (home-page "http://defunkt.io/pystache/")
3043 (synopsis "Python logic-less template engine")
3044 (description
3045 "Pystache is a Python implementation of the framework agnostic,
3046 logic-free templating system Mustache.")
3047 (license license:expat)
3048 (properties `((python2-variant . ,(delay python2-pystache))))))
3049
3050 (define-public python2-pystache
3051 (package (inherit (package-with-python2
3052 (strip-python2-variant python-pystache)))
3053 (arguments
3054 `(#:python ,python-2
3055 #:phases
3056 (modify-phases %standard-phases
3057 (replace 'check
3058 (lambda _
3059 (invoke "python" "test_pystache.py"))))))))
3060
3061 (define-public python-joblib
3062 (package
3063 (name "python-joblib")
3064 (version "0.14.1")
3065 (source (origin
3066 (method url-fetch)
3067 (uri (pypi-uri "joblib" version))
3068 (sha256
3069 (base32
3070 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3071 (build-system python-build-system)
3072 (arguments
3073 `(#:phases
3074 (modify-phases %standard-phases
3075 (replace 'check
3076 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3077 (native-inputs
3078 `(("python-pytest" ,python-pytest)))
3079 (home-page "https://joblib.readthedocs.io/")
3080 (synopsis "Using Python functions as pipeline jobs")
3081 (description
3082 "Joblib is a set of tools to provide lightweight pipelining in Python.
3083 In particular, joblib offers: transparent disk-caching of the output values
3084 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3085 logging and tracing of the execution.")
3086 (license license:bsd-3)))
3087
3088 (define-public python2-joblib
3089 (package-with-python2 python-joblib))
3090
3091 (define-public python-daemon
3092 (package
3093 (name "python-daemon")
3094 (version "2.2.3")
3095 (source
3096 (origin
3097 (method url-fetch)
3098 (uri (pypi-uri "python-daemon" version))
3099 (sha256
3100 (base32
3101 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3102 (build-system python-build-system)
3103 (arguments
3104 `(#:phases
3105 (modify-phases %standard-phases
3106 (add-before 'check 'disable-tests
3107 (lambda _
3108 ;; FIXME: Determine why test fails
3109 (substitute* "test/test_daemon.py"
3110 (("test_detaches_process_context")
3111 "skip_test_detaches_process_context"))
3112 #t)))))
3113 (propagated-inputs
3114 `(("python-lockfile" ,python-lockfile)))
3115 (native-inputs
3116 `(("python-unittest2" ,python-unittest2)
3117 ("python-testtools" ,python-testtools)
3118 ("python-testscenarios" ,python-testscenarios)
3119 ("python-mock" ,python-mock)
3120 ("python-docutils" ,python-docutils)))
3121 (home-page "https://pagure.io/python-daemon/")
3122 (synopsis "Python library for making a Unix daemon process")
3123 (description "Python-daemon is a library that assists a Python program to
3124 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3125
3126 This library provides a @code{DaemonContext} class that manages the following
3127 important tasks for becoming a daemon process:
3128 @enumerate
3129 @item Detach the process into its own process group.
3130 @item Set process environment appropriate for running inside a chroot.
3131 @item Renounce suid and sgid privileges.
3132 @item Close all open file descriptors.
3133 @item Change the working directory, uid, gid, and umask.
3134 @item Set appropriate signal handlers.
3135 @item Open new file descriptors for stdin, stdout, and stderr.
3136 @item Manage a specified PID lock file.
3137 @item Register cleanup functions for at-exit processing.
3138 @end enumerate")
3139 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3140 (license (list license:asl2.0 license:gpl3+))))
3141
3142 (define-public python-anytree
3143 (package
3144 (name "python-anytree")
3145 (version "2.8.0")
3146 (source (origin
3147 (method url-fetch)
3148 (uri (pypi-uri "anytree" version))
3149 (sha256
3150 (base32
3151 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3152 (build-system python-build-system)
3153 (propagated-inputs
3154 `(("python-six" ,python-six)))
3155 (native-inputs
3156 `(;; For tests.
3157 ("graphviz" ,graphviz) ;for 'dot'
3158 ("python-nose" ,python-nose)))
3159 (home-page "https://github.com/c0fec0de/anytree")
3160 (synopsis "Lightweight tree data library")
3161 (description
3162 "@code{anytree} is a simple, lightweight, and extensible tree data
3163 structure for Python.")
3164 (license license:asl2.0)))
3165
3166 (define-public python-docutils
3167 (package
3168 (name "python-docutils")
3169 (version "0.16")
3170 (source
3171 (origin
3172 (method url-fetch)
3173 (uri (pypi-uri "docutils" version))
3174 (sha256
3175 (base32
3176 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3177 (build-system python-build-system)
3178 (arguments
3179 '(#:phases (modify-phases %standard-phases
3180 (replace 'check
3181 (lambda* (#:key tests? #:allow-other-keys)
3182 (if tests?
3183 (invoke "python" "test/alltests.py")
3184 (format #t "test suite not run~%"))
3185 #t)))))
3186 (home-page "http://docutils.sourceforge.net/")
3187 (synopsis "Python Documentation Utilities")
3188 (description
3189 "Docutils is a modular system for processing documentation into useful
3190 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3191 reStructuredText.")
3192 ;; Most of the source code is public domain, but some source files are
3193 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3194 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3195
3196 (define-public python2-docutils
3197 (package-with-python2 python-docutils))
3198
3199 ;; python2-sphinx fails its test suite with newer versions.
3200 (define-public python2-docutils-0.14
3201 (package
3202 (inherit python2-docutils)
3203 (version "0.14")
3204 (source (origin
3205 (method url-fetch)
3206 (uri (pypi-uri "docutils" version))
3207 (sha256
3208 (base32
3209 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3210
3211 (define-public python-pygments
3212 (package
3213 (name "python-pygments")
3214 (version "2.5.2")
3215 (source
3216 (origin
3217 (method url-fetch)
3218 (uri (pypi-uri "Pygments" version))
3219 (sha256
3220 (base32
3221 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3222 (build-system python-build-system)
3223 (arguments
3224 ;; FIXME: Tests require sphinx, which depends on this.
3225 '(#:tests? #f))
3226 (home-page "https://pygments.org/")
3227 (synopsis "Syntax highlighting")
3228 (description
3229 "Pygments is a syntax highlighting package written in Python.")
3230 (license license:bsd-2)))
3231
3232 (define-public python2-pygments
3233 (package-with-python2 python-pygments))
3234
3235 (define-public python-bumpversion
3236 (package
3237 (name "python-bumpversion")
3238 (version "0.5.3")
3239 (source
3240 (origin
3241 (method url-fetch)
3242 (uri (pypi-uri "bumpversion" version))
3243 (sha256
3244 (base32
3245 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3246 (build-system python-build-system)
3247 (home-page "https://github.com/peritus/bumpversion")
3248 (synopsis "Tool to bump software version")
3249 (description "This tool provides a command-line interface (CLI) to bump a
3250 software version simply.")
3251 (license license:expat)))
3252
3253 (define-public python-deprecated
3254 (package
3255 (name "python-deprecated")
3256 (version "1.2.5")
3257 (source
3258 (origin
3259 (method git-fetch)
3260 (uri (git-reference
3261 (url "https://github.com/tantale/deprecated.git")
3262 (commit (string-append "v" version))))
3263 (file-name (git-file-name name version))
3264 (sha256
3265 (base32
3266 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3267 (build-system python-build-system)
3268 (arguments
3269 `(#:phases (modify-phases %standard-phases
3270 (replace 'check
3271 (lambda _
3272 (invoke "pytest"))))))
3273 (propagated-inputs
3274 `(("python-wrapt" ,python-wrapt)))
3275 (native-inputs
3276 `(("python-bumpversion" ,python-bumpversion)
3277 ("python-pytest" ,python-pytest)
3278 ("python-pytest-cov" ,python-pytest-cov)
3279 ("python-sphinx" ,python-sphinx)
3280 ("python-tox" ,python-tox)))
3281 (home-page "https://github.com/tantale/deprecated")
3282 (synopsis "Python decorator to deprecate classes, functions or methods")
3283 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3284 to deprecate classes, functions or methods.")
3285 (license license:expat)))
3286
3287 (define-public python-pygithub
3288 (package
3289 (name "python-pygithub")
3290 (version "1.43.8")
3291 (source
3292 ;; We fetch from the Git repo because there are no tests in the PyPI
3293 ;; archive.
3294 (origin
3295 (method git-fetch)
3296 (uri (git-reference
3297 (url "https://github.com/PyGithub/PyGithub.git")
3298 (commit (string-append "v" version))))
3299 (file-name (git-file-name name version))
3300 (sha256
3301 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3302 (build-system python-build-system)
3303 (arguments
3304 `(#:phases (modify-phases %standard-phases
3305 ;; Some tests rely on the network.
3306 (add-after 'unpack 'disable-failing-tests
3307 (lambda _
3308 (substitute* "tests/Issue142.py"
3309 (("testDecodeJson") "disabled_testDecodeJson"))
3310 #t))
3311 (add-before 'check 'prepare-for-tests
3312 (lambda _
3313 (for-each (lambda (f)
3314 (chmod f #o666))
3315 (find-files "./tests"))
3316 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3317 (setenv "PYTHONPATH"
3318 (string-append "./tests:" (getenv "PYTHONPATH")))
3319 #t)))))
3320 (propagated-inputs
3321 `(("python-deprecated" ,python-deprecated)
3322 ("python-pyjwt" ,python-pyjwt)
3323 ("python-requests" ,python-requests)))
3324 (native-inputs `(("python-httpretty" ,python-httpretty)))
3325 (home-page "https://pygithub.readthedocs.io/en/latest/")
3326 (synopsis "Python library for the GitHub API")
3327 (description "This library allows managing GitHub resources such as
3328 repositories, user profiles, and organizations in your Python applications,
3329 using version 3 of the GitHub application programming interface (API).")
3330 (license license:lgpl3+)))
3331
3332 (define-public python-rellu
3333 (package
3334 (name "python-rellu")
3335 (version "0.7")
3336 (source
3337 (origin
3338 (method url-fetch)
3339 (uri (pypi-uri "rellu" version))
3340 (sha256
3341 (base32
3342 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3343 (build-system python-build-system)
3344 (propagated-inputs
3345 `(("python-invoke" ,python-invoke)
3346 ("python-pygithub" ,python-pygithub)))
3347 (home-page "https://github.com/robotframework/rellu")
3348 (synopsis "Utilities to create PyPI releases")
3349 (description "This collection of utilities contains tooling and templates
3350 to assist in creating releases on GitHub and publishing them on PyPI. It is
3351 designed to be used by Robot Framework and tools and libraries in its
3352 ecosystem, but can naturally be used also by other projects.")
3353 (license license:asl2.0)))
3354
3355 (define-public python-robotframework
3356 (package
3357 (name "python-robotframework")
3358 (version "3.1.2")
3359 ;; There are no tests in the PyPI archive.
3360 (source
3361 (origin
3362 (method git-fetch)
3363 (uri (git-reference
3364 (url "https://github.com/robotframework/robotframework.git")
3365 (commit (string-append "v" version))))
3366 (file-name (git-file-name name version))
3367 (sha256
3368 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3369 (patches (search-patches
3370 "python-robotframework-honor-source-date-epoch.patch"))))
3371 (build-system python-build-system)
3372 (arguments
3373 `(#:phases (modify-phases %standard-phases
3374 (add-before 'build 'build-and-install-doc
3375 (lambda* (#:key outputs #:allow-other-keys)
3376 (let* ((doc-output (assoc-ref outputs "doc"))
3377 (doc (string-append doc-output "/share/"
3378 ,name "-" ,version "/")))
3379 (invoke "invoke" "library-docs" "all")
3380 (mkdir-p doc)
3381 (copy-recursively "doc/libraries"
3382 (string-append doc "/libraries"))
3383 #t)))
3384 (replace 'check
3385 (lambda _
3386 (invoke "python" "utest/run.py"))))))
3387 (native-inputs
3388 `(("python-invoke" ,python-invoke)
3389 ("python-rellu" ,python-rellu)
3390 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3391 (outputs '("out" "doc"))
3392 (home-page "https://robotframework.org")
3393 (synopsis "Generic automation framework")
3394 (description "Robot Framework is a generic automation framework for
3395 acceptance testing, acceptance test driven development (ATDD), and robotic
3396 process automation (RPA).")
3397 (license license:asl2.0)))
3398
3399 (define-public python-robotframework-lint
3400 ;; There is no properly tagged release; the commit below seems to correspond
3401 ;; to the 0.9 stable release available from PyPI. The tests are not
3402 ;; included in the PyPI archive, so we fetch the sources from the upstream
3403 ;; Git repo.
3404 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3405 (revision "1"))
3406 (package
3407 (name "python-robotframework-lint")
3408 (version (git-version "0.9.0" revision commit))
3409 (source
3410 (origin
3411 (method git-fetch)
3412 (uri (git-reference
3413 (url "https://github.com/boakley/robotframework-lint.git")
3414 (commit commit)))
3415 (file-name (git-file-name name version))
3416 (sha256
3417 (base32
3418 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3419 (build-system python-build-system)
3420 (arguments
3421 `(#:phases
3422 (modify-phases %standard-phases
3423 (replace 'check
3424 (lambda _
3425 (invoke "python" "-m" "robot" "-A"
3426 "tests/conf/default.args" "tests"))))))
3427 (propagated-inputs
3428 `(("python-robotframework" ,python-robotframework)))
3429 (home-page "https://github.com/boakley/robotframework-lint/")
3430 (synopsis "Static analysis tool (linter) for Robot Framework")
3431 (description "This package provides the @code{rflint} command-line
3432 utility, a static analysis tool (linter) for Robot Framework source files.")
3433 (license license:asl2.0))))
3434
3435 (define-public python-robotframework-sshlibrary
3436 (package
3437 (name "python-robotframework-sshlibrary")
3438 (version "3.3.0")
3439 ;; There are no tests in the PyPI archive.
3440 (source
3441 (origin
3442 (method git-fetch)
3443 (uri (git-reference
3444 (url "https://github.com/robotframework/SSHLibrary.git")
3445 (commit (string-append "v" version))))
3446 (file-name (git-file-name name version))
3447 (sha256
3448 (base32
3449 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3450 (build-system python-build-system)
3451 (arguments
3452 `(#:phases
3453 (modify-phases %standard-phases
3454 (add-before 'build 'build-and-install-doc
3455 (lambda* (#:key outputs #:allow-other-keys)
3456 (let* ((doc-output (assoc-ref outputs "doc"))
3457 (doc (string-append doc-output "/share/"
3458 ,name "-" ,version "/")))
3459 (invoke "chmod" "-R" "+w" "docs")
3460 (invoke "invoke" "kw-docs" "project-docs")
3461 (mkdir-p doc)
3462 (for-each delete-file (find-files "docs" "\\.rst"))
3463 (copy-recursively "docs" doc)
3464 #t)))
3465 (replace 'check
3466 (lambda _
3467 ;; Some tests require an SSH server; we remove them.
3468 (delete-file "utest/test_client_api.py")
3469 (delete-file "utest/test_scp.py")
3470 (invoke "python" "utest/run.py"))))))
3471 (propagated-inputs
3472 `(("python-robotframework" ,python-robotframework)
3473 ("python-paramiko" ,python-paramiko)
3474 ("python-scp" ,python-scp)))
3475 (native-inputs
3476 `(("openssh" ,openssh)
3477 ("which" ,which)
3478 ;; To generate the documentation
3479 ("python-docutils" ,python-docutils)
3480 ("python-invoke" ,python-invoke)
3481 ("python-pygments" ,python-pygments)
3482 ("python-rellu" ,python-rellu)))
3483 (outputs '("out" "doc"))
3484 (home-page "https://github.com/robotframework/SSHLibrary")
3485 (synopsis "Robot Framework library for SSH and SFTP")
3486 (description "SSHLibrary is a Robot Framework library providing support
3487 for SSH and SFTP. It has the following main usages:
3488 @itemize @bullet
3489 @item Executing commands on the remote machine, either blocking or non-blocking.
3490 @item Writing and reading in an interactive shell.
3491 @item Transferring files and directories over SFTP.
3492 @item Ensuring that files and directories exist on the remote machine.
3493 @end itemize")
3494 (license license:asl2.0)))
3495
3496 (define-public python-rstr
3497 (package
3498 (name "python-rstr")
3499 (version "2.2.6")
3500 (source
3501 (origin
3502 (method url-fetch)
3503 (uri (pypi-uri "rstr" version))
3504 (sha256
3505 (base32
3506 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3507 (build-system python-build-system)
3508 (home-page
3509 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3510 (synopsis "Generate random strings in Python")
3511 (description "This package provides a python module for generating
3512 random strings of various types. It could be useful for fuzz testing,
3513 generating dummy data, or other applications. It has no dependencies
3514 outside the standard library.")
3515 (license license:bsd-3)))
3516
3517 (define-public python-scp
3518 (package
3519 (name "python-scp")
3520 (version "0.13.2")
3521 (source
3522 (origin
3523 (method url-fetch)
3524 (uri (pypi-uri "scp" version))
3525 (sha256
3526 (base32
3527 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3528 (build-system python-build-system)
3529 (arguments
3530 '(#:tests? #f)) ;tests require an SSH server
3531 (propagated-inputs
3532 `(("python-paramiko" ,python-paramiko)))
3533 (home-page "https://github.com/jbardin/scp.py")
3534 (synopsis "SCP protocol module for Python and Paramiko")
3535 (description "The scp module extends the Paramiko library to send and
3536 receive files via the SCP1 protocol, as implemented by the OpenSSH
3537 @command{scp} program.")
3538 (license license:gpl2+)))
3539
3540 (define-public python-rst.linker
3541 (package
3542 (name "python-rst.linker")
3543 (version "1.11")
3544 (source
3545 (origin
3546 (method url-fetch)
3547 (uri (pypi-uri "rst.linker" version))
3548 (sha256
3549 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3550 (build-system python-build-system)
3551 (propagated-inputs
3552 `(("python-dateutil" ,python-dateutil)
3553 ("python-six" ,python-six)))
3554 (native-inputs
3555 `(("python-setuptools-scm" ,python-setuptools-scm)))
3556 ;; Test would require path.py, which would introduce a cyclic dependence.
3557 (arguments `(#:tests? #f))
3558 ;; Note: As of version 1.7 the documentation is not worth building.
3559 (home-page "https://github.com/jaraco/rst.linker")
3560 (synopsis "Sphinx plugin to add links and timestamps")
3561 (description "rst.linker automatically replaces text by a
3562 reStructuredText external reference or timestamps. It's primary purpose is to
3563 augment the changelog, but it can be used for other documents, too.")
3564 (license license:expat)))
3565
3566 (define-public python2-rst.linker
3567 (package-with-python2 python-rst.linker))
3568
3569 (define-public python-feedgenerator
3570 (package
3571 (name "python-feedgenerator")
3572 (version "1.9")
3573 (source
3574 (origin
3575 (method url-fetch)
3576 (uri (pypi-uri "feedgenerator" version))
3577 (sha256
3578 (base32
3579 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3580 (modules '((guix build utils)))
3581 (snippet
3582 '(begin
3583 ;; Remove pre-compiled .pyc files from source.
3584 (for-each delete-file-recursively
3585 (find-files "." "__pycache__" #:directories? #t))
3586 (for-each delete-file (find-files "." "\\.pyc$"))
3587 #t))))
3588 (build-system python-build-system)
3589 (propagated-inputs
3590 `(("python-pytz" ,python-pytz)
3591 ("python-six" ,python-six)))
3592 (home-page "https://github.com/getpelican/feedgenerator")
3593 (synopsis
3594 "Standalone version of Django's Atom/RSS feed generator")
3595 (description
3596 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3597 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3598 (license license:bsd-3)))
3599
3600 (define-public python2-feedgenerator
3601 (package-with-python2 python-feedgenerator))
3602
3603 (define-public python-toml
3604 (package
3605 (name "python-toml")
3606 (version "0.9.4")
3607 (source
3608 (origin
3609 (method url-fetch)
3610 (uri (pypi-uri "toml" version))
3611 (sha256
3612 (base32
3613 "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf"))))
3614 (build-system python-build-system)
3615 (arguments
3616 `(#:tests? #f)) ;no tests suite in release
3617 (home-page "https://github.com/uiri/toml")
3618 (synopsis "Library for TOML")
3619 (description
3620 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3621 Language (TOML) configuration files.")
3622 (license license:expat)))
3623
3624 (define-public python-jsonrpc-server
3625 (package
3626 (name "python-jsonrpc-server")
3627 (version "0.3.2")
3628 (source
3629 (origin
3630 (method url-fetch)
3631 (uri (pypi-uri "python-jsonrpc-server" version))
3632 (sha256
3633 (base32
3634 "0ddgdp26dfxaz6isjbb12974b3rxavgsqrn2zrmck62cmipg5g05"))))
3635 (build-system python-build-system)
3636 (propagated-inputs
3637 `(("python-future" ,python-future)
3638 ("python-mock" ,python-mock)
3639 ("python-pytest" ,python-pytest)
3640 ("python-ujson" ,python-ujson)))
3641 (home-page
3642 "https://github.com/palantir/python-jsonrpc-server")
3643 (synopsis "JSON RPC 2.0 server library")
3644 (description
3645 "This package provides a JSON RPC 2.0 server library for Python.")
3646 (license license:expat)))
3647
3648 (define-public python-pydocstyle
3649 (package
3650 (name "python-pydocstyle")
3651 (version "3.0.0")
3652 (source
3653 (origin
3654 (method url-fetch)
3655 (uri (pypi-uri "pydocstyle" version))
3656 (sha256
3657 (base32
3658 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3659 (build-system python-build-system)
3660 (propagated-inputs
3661 `(("python-six" ,python-six)
3662 ("python-snowballstemmer" ,python-snowballstemmer)))
3663 (home-page
3664 "https://github.com/PyCQA/pydocstyle/")
3665 (synopsis "Python docstring style checker")
3666 (description
3667 "This package provides a style checker for the Python Language
3668 Server (PLS).")
3669 (license license:expat)))
3670
3671 (define-public python-language-server
3672 (package
3673 (name "python-language-server")
3674 (version "0.31.7")
3675 (source
3676 (origin
3677 (method url-fetch)
3678 (uri (pypi-uri "python-language-server" version))
3679 (sha256
3680 (base32
3681 "0f8rljff4h2ay9m2n9ang7axai37nzd39zd7m6c90rci5wh8cmxh"))))
3682 (build-system python-build-system)
3683 (propagated-inputs
3684 `(("python-pluggy" ,python-pluggy)
3685 ("python-jsonrpc-server" ,python-jsonrpc-server)
3686 ;; Note: Remove the special versions of Jedi and Parso when updating
3687 ;; this package.
3688 ("python-jedi" ,python-jedi-0.15)
3689 ("python-yapf" ,python-yapf)
3690 ("python-pyflakes" ,python-pyflakes)
3691 ("python-pydocstyle" ,python-pydocstyle)
3692 ("python-pycodestyle" ,python-pycodestyle)
3693 ("python-mccabe" ,python-mccabe)
3694 ("python-rope" ,python-rope)
3695 ("python-autopep8" ,python-autopep8)
3696 ("python-flake8" ,python-flake8)
3697 ("python-pylint" ,python-pylint)))
3698 (home-page "https://github.com/palantir/python-language-server")
3699 (synopsis "Python implementation of the Language Server Protocol")
3700 (description
3701 "The Python Language Server (pyls) is an implementation of the Python 3
3702 language specification for the Language Server Protocol (LSP). This tool is
3703 used in text editing environments to provide a complete and integrated
3704 feature-set for programming Python effectively.")
3705 (license license:expat)))
3706
3707 (define-public python-pathspec
3708 (package
3709 (name "python-pathspec")
3710 (version "0.7.0")
3711 (source
3712 (origin
3713 (method url-fetch)
3714 (uri (pypi-uri "pathspec" version))
3715 (sha256
3716 (base32
3717 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3718 (build-system python-build-system)
3719 (home-page "https://github.com/cpburnz/python-path-specification")
3720 (synopsis "Utility library for gitignore style pattern matching of file paths")
3721 (description
3722 "This package provides a utility library for gitignore style pattern
3723 matching of file paths.")
3724 (license license:mpl2.0)))
3725
3726 (define-public python-black
3727 (package
3728 (name "python-black")
3729 (version "19.10b0")
3730 (source
3731 (origin
3732 (method url-fetch)
3733 (uri (pypi-uri "black" version))
3734 (sha256
3735 (base32
3736 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3737 (build-system python-build-system)
3738 (arguments
3739 `(#:phases
3740 (modify-phases %standard-phases
3741 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3742 (lambda _
3743 (let ((python3 (which "python3")))
3744 (substitute* '("tests/data/fmtonoff.py"
3745 "tests/data/string_prefixes.py"
3746 "tests/data/function.py"
3747 "tests/data/python37.py")
3748 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3749 (string-append "#!" python3 (if (string? minor-version)
3750 minor-version
3751 "")))))
3752 #t))
3753 (add-after 'unpack 'disable-broken-tests
3754 (lambda _
3755 ;; These tests are supposed to be skipped when the blackd
3756 ;; dependencies are missing, but this doesn't quite work.
3757 (substitute* "tests/test_black.py"
3758 (("( *)class BlackDTestCase.*" match indent)
3759 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3760 indent "class BlackDTestCase(unittest.TestCase):\n"))
3761 (("web.Application") "False")
3762 (("@unittest_run_loop") ""))
3763
3764 ;; Patching the above file breaks the self test
3765 (substitute* "tests/test_black.py"
3766 (("( *)def test_self" match indent)
3767 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3768 #t)))))
3769 (propagated-inputs
3770 `(("python-click" ,python-click)
3771 ("python-attrs" ,python-attrs)
3772 ("python-appdirs" ,python-appdirs)
3773 ("python-pathspec" ,python-pathspec)
3774 ("python-regex" ,python-regex)
3775 ("python-toml" ,python-toml)
3776 ("python-typed-ast" ,python-typed-ast)))
3777 (native-inputs
3778 `(("python-setuptools-scm" ,python-setuptools-scm)))
3779 (home-page "https://github.com/ambv/black")
3780 (synopsis "The uncompromising code formatter")
3781 (description "Black is the uncompromising Python code formatter.")
3782 (license license:expat)))
3783
3784 (define-public python-blinker
3785 (package
3786 (name "python-blinker")
3787 (version "1.4")
3788 (source
3789 (origin
3790 (method url-fetch)
3791 (uri (pypi-uri "blinker" version))
3792 (sha256
3793 (base32
3794 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3795 (build-system python-build-system)
3796 (home-page "https://pythonhosted.org/blinker/")
3797 (synopsis "Fast, simple object-to-object and broadcast signaling")
3798 (description
3799 "Blinker provides a fast dispatching system that allows any number of
3800 interested parties to subscribe to events, or \"signals\".")
3801 (license license:expat)))
3802
3803 (define-public python2-blinker
3804 (package-with-python2 python-blinker))
3805
3806 (define-public pelican
3807 (package
3808 (name "pelican")
3809 (version "4.2.0")
3810 (source
3811 (origin
3812 (method url-fetch)
3813 (uri (pypi-uri "pelican" version))
3814 (sha256
3815 (base32
3816 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3817 (build-system python-build-system)
3818 (propagated-inputs
3819 `(("python-blinker" ,python-blinker)
3820 ("python-dateutil" ,python-dateutil)
3821 ("python-docutils" ,python-docutils)
3822 ("python-feedgenerator" ,python-feedgenerator)
3823 ("python-jinja2" ,python-jinja2)
3824 ("python-markdown" ,python-markdown)
3825 ("python-pygments" ,python-pygments)
3826 ("python-pytz" ,python-pytz)
3827 ("python-six" ,python-six)
3828 ("python-unidecode" ,python-unidecode)))
3829 (home-page "https://getpelican.com/")
3830 (arguments
3831 `(;; XXX Requires a lot more packages to do unit tests :P
3832 #:tests? #f))
3833 (synopsis "Python-based static site publishing system")
3834 (description
3835 "Pelican is a tool to generate a static blog from reStructuredText,
3836 Markdown input files, and more. Pelican uses Jinja2 for templating
3837 and is very extensible.")
3838 (license license:agpl3+)))
3839
3840 (define-public mallard-ducktype
3841 (package
3842 (name "mallard-ducktype")
3843 (version "1.0.2")
3844 (source
3845 (origin
3846 (method git-fetch)
3847 ;; git-reference because tests are not included in pypi source tarball
3848 ;; https://issues.guix.gnu.org/issue/36755#2
3849 (uri (git-reference
3850 (url "https://github.com/projectmallard/mallard-ducktype.git")
3851 (commit version)))
3852 (file-name (git-file-name name version))
3853 (sha256
3854 (base32
3855 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3856 (build-system python-build-system)
3857 (arguments
3858 '(#:phases
3859 (modify-phases %standard-phases
3860 (replace 'check
3861 (lambda _
3862 (with-directory-excursion "tests"
3863 (invoke "sh" "runtests")))))))
3864 (home-page "http://projectmallard.org")
3865 (synopsis "Convert Ducktype to Mallard documentation markup")
3866 (description
3867 "Ducktype is a lightweight syntax that can represent all the semantics
3868 of the Mallard XML documentation system. Ducktype files can be converted to
3869 Mallard using the @command{ducktype} tool. The yelp-tools package
3870 provides additional functionality on the produced Mallard documents.")
3871 (license license:expat)))
3872
3873 (define-public python-cython
3874 (package
3875 (name "python-cython")
3876 (version "0.29.16")
3877 (source
3878 (origin
3879 (method url-fetch)
3880 (uri (pypi-uri "Cython" version))
3881 (sha256
3882 (base32
3883 "01gs10myw0rw4jsikvqs0859fg7gficxhv508cxvnb4l9wl5a9r3"))))
3884 (build-system python-build-system)
3885 ;; we need the full python package and not just the python-wrapper
3886 ;; because we need libpython3.3m.so
3887 (inputs
3888 `(("python" ,python)))
3889 (arguments
3890 `(#:phases
3891 (modify-phases %standard-phases
3892 (add-before 'check 'set-HOME
3893 ;; some tests require access to "$HOME/.cython"
3894 (lambda _ (setenv "HOME" "/tmp") #t))
3895 (replace 'check
3896 (lambda _
3897 ;; Disable compiler optimizations to greatly reduce the running
3898 ;; time of the test suite.
3899 (setenv "CFLAGS" "-O0")
3900
3901 (invoke "python" "runtests.py" "-vv"
3902 "-j" (number->string (parallel-job-count))
3903 ;; XXX: On 32-bit architectures, running the parallel tests
3904 ;; fails on many-core systems, see
3905 ;; <https://github.com/cython/cython/issues/2807>.
3906 ,@(if (not (target-64bit?))
3907 '("-x" "run.parallel")
3908 '())))))))
3909 (home-page "https://cython.org/")
3910 (synopsis "C extensions for Python")
3911 (description "Cython is an optimising static compiler for both the Python
3912 programming language and the extended Cython programming language. It makes
3913 writing C extensions for Python as easy as Python itself.")
3914 (license license:asl2.0)
3915 (properties `((python2-variant . ,(delay python2-cython))))))
3916
3917 (define-public python2-cython
3918 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
3919 (package
3920 (inherit base)
3921 (name "python2-cython")
3922 (inputs
3923 `(("python-2" ,python-2))) ;this is not automatically changed
3924 (arguments
3925 (substitute-keyword-arguments (package-arguments base)
3926 ((#:phases phases)
3927 `(modify-phases ,phases
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.4.6")
4350 (source
4351 (origin
4352 (method url-fetch)
4353 (uri (pypi-uri "pyparsing" version))
4354 (sha256
4355 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
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-turbo)
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.4.3")
5643 (source (origin
5644 (method url-fetch)
5645 (uri (pypi-uri "setuptools_scm" version))
5646 (sha256
5647 (base32
5648 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
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 (define-public python2-setuptools-scm
5659 (package-with-python2 python-setuptools-scm))
5660
5661 (define-public python-pathlib2
5662 (package
5663 (name "python-pathlib2")
5664 (version "2.3.3")
5665 (source
5666 (origin
5667 (method url-fetch)
5668 (uri (pypi-uri "pathlib2" version))
5669 (sha256
5670 (base32
5671 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5672 (build-system python-build-system)
5673 (propagated-inputs
5674 `(("python-scandir" ,python-scandir)
5675 ("python-six" ,python-six)))
5676 (home-page "https://pypi.org/project/pathlib2/")
5677 (synopsis "Object-oriented file system paths")
5678 (description "The goal of pathlib2 is to provide a backport of the
5679 standard @code{pathlib} module which tracks the standard library module, so
5680 all the newest features of the standard @code{pathlib} can be used also on
5681 older Python versions.")
5682 (license license:expat)))
5683
5684 (define-public python2-importlib-resources
5685 (package
5686 (name "python2-importlib-resources")
5687 (version "1.0.2")
5688 (source (origin
5689 (method url-fetch)
5690 (uri (pypi-uri "importlib_resources" version))
5691 (sha256
5692 (base32
5693 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5694 (build-system python-build-system)
5695 (arguments
5696 `(#:python ,python-2
5697 #:phases (modify-phases %standard-phases
5698 ;; The build system tests for python-wheel, but it is
5699 ;; not required for Guix nor the test suite. Just drop
5700 ;; it to make bootstrapping pytest easier.
5701 (add-after 'unpack 'drop-wheel-dependency
5702 (lambda _
5703 (substitute* "setup.cfg"
5704 (("^[[:blank:]]+wheel")
5705 ""))
5706 #t)))))
5707 (propagated-inputs
5708 `(("python-pathlib2" ,python2-pathlib2)
5709 ("python-typing" ,python2-typing)))
5710 (home-page "https://gitlab.com/python-devs/importlib_resources")
5711 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5712 (description
5713 "This package provides an implementation of @code{importlib.resources}
5714 for older versions of Python.")
5715 (license license:asl2.0)))
5716
5717 ;; For importlib-metadata-bootstrap below.
5718 (define-public python2-importlib-resources-bootstrap
5719 (hidden-package
5720 (package/inherit
5721 python2-importlib-resources
5722 (name "python2-importlib-resources-bootstrap")
5723 (propagated-inputs
5724 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
5725 ("python-typing" ,python2-typing))))))
5726
5727 (define-public python-importlib-metadata
5728 (package
5729 (name "python-importlib-metadata")
5730 (version "1.5.0")
5731 (source
5732 (origin
5733 (method url-fetch)
5734 (uri (pypi-uri "importlib_metadata" version))
5735 (sha256
5736 (base32
5737 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
5738 (build-system python-build-system)
5739 (propagated-inputs
5740 `(("python-zipp" ,python-zipp)))
5741 (native-inputs
5742 `(("python-setuptools-scm" ,python-setuptools-scm)
5743 ("python-pyfakefs" ,python-pyfakefs)
5744 ("python-packaging" ,python-packaging)))
5745 (home-page "https://importlib-metadata.readthedocs.io/")
5746 (synopsis "Read metadata from Python packages")
5747 (description
5748 "@code{importlib_metadata} is a library which provides an API for
5749 accessing an installed Python package's metadata, such as its entry points or
5750 its top-level name. This functionality intends to replace most uses of
5751 @code{pkg_resources} entry point API and metadata API. Along with
5752 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5753 need to use the older and less efficient @code{pkg_resources} package.")
5754 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5755 (license license:asl2.0)))
5756
5757 (define-public python2-importlib-metadata
5758 (let ((base (package-with-python2 (strip-python2-variant
5759 python-importlib-metadata))))
5760 (package/inherit
5761 base
5762 (name "python2-importlib-metadata")
5763 (native-inputs
5764 `(("python-setuptools-scm" ,python2-setuptools-scm)
5765 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
5766 ("python-packaging" ,python2-packaging-bootstrap)))
5767 (propagated-inputs
5768 `(("python-configparser" ,python2-configparser)
5769 ("python-contextlib2" ,python2-contextlib2)
5770 ("python-importlib-resources" ,python2-importlib-resources)
5771 ("python-pathlib2" ,python2-pathlib2)
5772 ,@(package-propagated-inputs base))))))
5773
5774 ;; This package is used by python2-pytest, and thus must not depend on it.
5775 (define-public python2-importlib-metadata-bootstrap
5776 (hidden-package
5777 (package/inherit
5778 python2-importlib-metadata
5779 (name "python2-importlib-metadata-bootstrap")
5780 (arguments
5781 `(#:tests? #f
5782 ,@(package-arguments python2-importlib-metadata)))
5783 (propagated-inputs
5784 `(("python-zipp" ,python2-zipp-bootstrap)
5785 ("python-pathlib2" ,python2-pathlib2-bootstrap)
5786 ("python-configparser" ,python2-configparser)
5787 ("python-contextlib2" ,python2-contextlib2-bootstrap)
5788 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
5789
5790 (define-public python-jaraco-packaging
5791 (package
5792 (name "python-jaraco-packaging")
5793 (version "6.1")
5794 (source
5795 (origin
5796 (method url-fetch)
5797 (uri (pypi-uri "jaraco.packaging" version))
5798 (sha256
5799 (base32
5800 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5801 (build-system python-build-system)
5802 (propagated-inputs
5803 `(("python-pytest" ,python-pytest)
5804 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5805 ("python-pytest-flake8" ,python-pytest-flake8)
5806 ("python-rst.linker" ,python-rst.linker)
5807 ("python-setuptools" ,python-setuptools)
5808 ("python-setuptools-scm" ,python-setuptools-scm)
5809 ("python-six" ,python-six)
5810 ("python-sphinx" ,python-sphinx)))
5811 (home-page "https://github.com/jaraco/jaraco.packaging")
5812 (synopsis "Tools to supplement packaging Python releases")
5813 (description
5814 "This package provides various tools to supplement packaging Python
5815 releases.")
5816 (license license:expat)))
5817
5818 (define-public python-pathpy
5819 (package
5820 (name "python-pathpy")
5821 (version "11.5.1")
5822 (source
5823 (origin
5824 (method url-fetch)
5825 (uri (pypi-uri "path.py" version))
5826 (sha256
5827 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
5828 (outputs '("out" "doc"))
5829 (build-system python-build-system)
5830 (propagated-inputs
5831 `(("python-appdirs" ,python-appdirs)
5832 ("python-importlib-metadata" ,python-importlib-metadata)))
5833 (native-inputs
5834 `(("python-setuptools-scm" ,python-setuptools-scm)
5835 ("python-sphinx" ,python-sphinx)
5836 ("python-rst.linker" ,python-rst.linker)
5837 ("python-pytest" ,python-pytest)
5838 ("python-pytest-runner" ,python-pytest-runner)
5839 ("python-jaraco-packaging" ,python-jaraco-packaging)))
5840 (arguments
5841 `(#:phases
5842 (modify-phases %standard-phases
5843 (add-after 'build 'build-doc
5844 (lambda _
5845 (setenv "LANG" "en_US.UTF-8")
5846 (invoke "python" "setup.py" "build_sphinx")))
5847 (add-after 'install 'install-doc
5848 (lambda* (#:key outputs #:allow-other-keys)
5849 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5850 (doc (string-append data "/doc/" ,name "-" ,version))
5851 (html (string-append doc "/html")))
5852 (mkdir-p html)
5853 (for-each (lambda (file)
5854 (copy-file file (string-append doc "/" file)))
5855 '("README.rst" "CHANGES.rst"))
5856 (copy-recursively "build/sphinx/html" html)
5857 #t)))
5858 (replace 'check
5859 (lambda _
5860 ;; The import time test aborts if an import takes longer than
5861 ;; 100ms. It may very well take a little longer than that.
5862 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
5863 (home-page "https://github.com/jaraco/path.py")
5864 (synopsis "Python module wrapper for built-in os.path")
5865 (description
5866 "@code{path.py} implements path objects as first-class entities, allowing
5867 common operations on files to be invoked on those path objects directly.")
5868 (license license:expat)))
5869
5870 (define-public python2-pathpy
5871 (package-with-python2 python-pathpy))
5872
5873 (define-public python-simplegeneric
5874 (package
5875 (name "python-simplegeneric")
5876 (version "0.8.1")
5877 (source
5878 (origin
5879 (method url-fetch)
5880 (uri (pypi-uri "simplegeneric" version ".zip"))
5881 (sha256
5882 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
5883 (build-system python-build-system)
5884 (native-inputs
5885 `(("unzip" ,unzip)))
5886 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
5887 (synopsis "Python module for simple generic functions")
5888 (description
5889 "The simplegeneric module lets you define simple single-dispatch generic
5890 functions, akin to Python’s built-in generic functions like @code{len()},
5891 @code{iter()} and so on. However, instead of using specially-named methods,
5892 these generic functions use simple lookup tables, akin to those used by
5893 e.g. @code{pickle.dump()} and other generic functions found in the Python
5894 standard library.")
5895 (license license:zpl2.1)))
5896
5897 (define-public python2-simplegeneric
5898 (package-with-python2 python-simplegeneric))
5899
5900 (define-public python-ipython-genutils
5901 ;; TODO: This package is retired, check if can be removed, see description.
5902 (package
5903 (name "python-ipython-genutils")
5904 (version "0.1.0")
5905 (source
5906 (origin
5907 (method url-fetch)
5908 (uri (pypi-uri "ipython_genutils" version))
5909 (sha256
5910 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
5911 (build-system python-build-system)
5912 (arguments `(#:tests? #f)) ; no tests
5913 (home-page "https://ipython.org")
5914 (synopsis "Vestigial utilities from IPython")
5915 (description
5916 "This package provides retired utilities from IPython. No packages
5917 outside IPython/Jupyter should depend on it.
5918
5919 This package shouldn't exist. It contains some common utilities shared by
5920 Jupyter and IPython projects during The Big Split. As soon as possible, those
5921 packages will remove their dependency on this, and this package will go
5922 away.")
5923 (license license:bsd-3)))
5924
5925 (define-public python2-ipython-genutils
5926 (package-with-python2 python-ipython-genutils))
5927
5928 (define-public python-ipyparallel
5929 (package
5930 (name "python-ipyparallel")
5931 (version "6.2.4")
5932 (source
5933 (origin
5934 (method url-fetch)
5935 (uri (pypi-uri "ipyparallel" version))
5936 (sha256
5937 (base32
5938 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
5939 (build-system python-build-system)
5940 (arguments
5941 `(#:tests? #f ; RuntimeError: IO Loop failed to start
5942 #:phases
5943 (modify-phases %standard-phases
5944 (add-before 'check 'prepare-for-tests
5945 (lambda _
5946 (setenv "HOME" (getcwd))
5947 #t)))))
5948 (propagated-inputs
5949 `(("python-dateutil" ,python-dateutil)
5950 ("python-decorator" ,python-decorator)
5951 ("python-ipykernel" ,python-ipykernel)
5952 ("python-ipython" ,python-ipython)
5953 ("python-ipython-genutils" ,python-ipython-genutils)
5954 ("python-jupyter-client" ,python-jupyter-client)
5955 ("python-pyzmq" ,python-pyzmq)
5956 ("python-tornado" ,python-tornado)
5957 ("python-traitlets" ,python-traitlets)))
5958 (native-inputs
5959 `(("python-ipython" ,python-ipython)
5960 ("python-mock" ,python-mock)
5961 ("python-nose" ,python-nose)
5962 ("python-pytest" ,python-pytest)
5963 ("python-pytest-cov" ,python-pytest-cov)
5964 ("python-testpath" ,python-testpath)))
5965 (home-page "https://ipython.org/")
5966 (synopsis "Interactive Parallel Computing with IPython")
5967 (description
5968 "@code{ipyparallel} is a Python package and collection of CLI scripts for
5969 controlling clusters for Jupyter. @code{ipyparallel} contains the following
5970 CLI scripts:
5971 @enumerate
5972 @item ipcluster - start/stop a cluster
5973 @item ipcontroller - start a scheduler
5974 @item ipengine - start an engine
5975 @end enumerate")
5976 (license license:bsd-3)))
5977
5978 (define-public python2-ipyparallel
5979 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
5980 (package
5981 (inherit ipyparallel)
5982 (propagated-inputs
5983 `(("python2-futures" ,python2-futures)
5984 ,@(package-propagated-inputs ipyparallel))))))
5985
5986 (define-public python-ipython-cluster-helper
5987 (package
5988 (name "python-ipython-cluster-helper")
5989 (version "0.6.4")
5990 (source
5991 (origin
5992 (method url-fetch)
5993 (uri (pypi-uri "ipython-cluster-helper" version))
5994 (sha256
5995 (base32
5996 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
5997 (modules '((guix build utils)))
5998 (snippet
5999 '(begin (substitute* "requirements.txt"
6000 (("ipython.*") "ipython\n"))
6001 #t))))
6002 (build-system python-build-system)
6003 (arguments
6004 `(#:tests? #f ; Test suite can't find IPython.
6005 #:phases
6006 (modify-phases %standard-phases
6007 (replace 'check
6008 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6009 (if tests?
6010 (begin
6011 (setenv "HOME" (getcwd))
6012 (add-installed-pythonpath inputs outputs)
6013 (invoke "python" "example/example.py" "--local"))
6014 #t))))))
6015 (propagated-inputs
6016 `(("python-ipyparallel" ,python-ipyparallel)
6017 ("python-ipython" ,python-ipython)
6018 ("python-netifaces" ,python-netifaces)
6019 ("python-pyzmq" ,python-pyzmq)
6020 ("python-setuptools" ,python-setuptools)
6021 ("python-six" ,python-six)))
6022 (home-page "https://github.com/roryk/ipython-cluster-helper")
6023 (synopsis
6024 "Simplify IPython cluster start up and use for multiple schedulers")
6025 (description
6026 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6027 profile, launches a cluster and returns a view. On program exit it shuts the
6028 cluster down and deletes the throwaway profile.")
6029 (license license:expat)))
6030
6031 (define-public python2-ipython-cluster-helper
6032 (package-with-python2 python-ipython-cluster-helper))
6033
6034 (define-public python-traitlets
6035 (package
6036 (name "python-traitlets")
6037 (version "4.3.3")
6038 (source
6039 (origin
6040 (method url-fetch)
6041 (uri (pypi-uri "traitlets" version))
6042 (sha256
6043 (base32
6044 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6045 (build-system python-build-system)
6046 (arguments
6047 `(#:phases
6048 (modify-phases %standard-phases
6049 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6050 (propagated-inputs
6051 `(("python-ipython-genutils" ,python-ipython-genutils)
6052 ("python-decorator" ,python-decorator)))
6053 (native-inputs
6054 `(("python-pytest" ,python-pytest)))
6055 (properties `((python2-variant . ,(delay python2-traitlets))))
6056 (home-page "https://ipython.org")
6057 (synopsis "Configuration system for Python applications")
6058 (description
6059 "Traitlets is a framework that lets Python classes have attributes with
6060 type checking, dynamically calculated default values, and ‘on change’
6061 callbacks. The package also includes a mechanism to use traitlets for
6062 configuration, loading values from files or from command line arguments. This
6063 is a distinct layer on top of traitlets, so you can use traitlets in your code
6064 without using the configuration machinery.")
6065 (license license:bsd-3)))
6066
6067 (define-public python2-traitlets
6068 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6069 (package
6070 (inherit traitlets)
6071 (propagated-inputs
6072 `(("python2-enum34" ,python2-enum34)
6073 ,@(package-propagated-inputs traitlets))))))
6074
6075 (define-public python-jupyter-core
6076 (package
6077 (name "python-jupyter-core")
6078 (version "4.4.0")
6079 (source
6080 (origin
6081 (method url-fetch)
6082 (uri (string-append (pypi-uri "jupyter_core" version)))
6083 (sha256
6084 (base32
6085 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6086 (build-system python-build-system)
6087 ;; FIXME: not sure how to run the tests
6088 (arguments `(#:tests? #f))
6089 (propagated-inputs
6090 `(("python-traitlets" ,python-traitlets)))
6091 (home-page "http://jupyter.org/")
6092 (synopsis "Jupyter base package")
6093 (description
6094 "Jupyter core is the base package on which Jupyter projects rely.")
6095 (license license:bsd-3)))
6096
6097 (define-public python2-jupyter-core
6098 (package-with-python2 python-jupyter-core))
6099
6100 (define-public python-jupyter-client
6101 (package
6102 (name "python-jupyter-client")
6103 (version "5.2.4")
6104 (source
6105 (origin
6106 (method url-fetch)
6107 (uri (pypi-uri "jupyter_client" version))
6108 (sha256
6109 (base32
6110 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6111 (build-system python-build-system)
6112 ;; Tests fail because of missing native python kernel which I assume is
6113 ;; provided by the ipython package, which we cannot use because it would
6114 ;; cause a dependency cycle.
6115 (arguments
6116 `(#:tests? #f
6117
6118 #:phases (modify-phases %standard-phases
6119 (add-after 'unpack 'set-tool-file-names
6120 (lambda* (#:key inputs #:allow-other-keys)
6121 (let ((iproute (assoc-ref inputs "iproute")))
6122 (substitute* "jupyter_client/localinterfaces.py"
6123 (("'ip'")
6124 (string-append "'" iproute "/sbin/ip'")))
6125 #t))))))
6126 (inputs
6127 `(("iproute" ,iproute)))
6128 (propagated-inputs
6129 `(("python-pyzmq" ,python-pyzmq)
6130 ("python-traitlets" ,python-traitlets)
6131 ("python-jupyter-core" ,python-jupyter-core)))
6132 (home-page "http://jupyter.org/")
6133 (synopsis "Jupyter protocol implementation and client libraries")
6134 (description
6135 "The @code{jupyter_client} package contains the reference implementation
6136 of the Jupyter protocol. It also provides client and kernel management APIs
6137 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6138 installing @code{kernelspec}s for use with Jupyter frontends.")
6139 (license license:bsd-3)))
6140
6141 (define-public python2-jupyter-client
6142 (package-with-python2 python-jupyter-client))
6143
6144 (define-public python-ipykernel
6145 (package
6146 (name "python-ipykernel")
6147 (version "5.1.3")
6148 (source
6149 (origin
6150 (method url-fetch)
6151 (uri (pypi-uri "ipykernel" version))
6152 (sha256
6153 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6154 (build-system python-build-system)
6155 (arguments
6156 `(#:phases
6157 (modify-phases %standard-phases
6158 (replace 'check
6159 (lambda _
6160 (setenv "HOME" "/tmp")
6161 (invoke "pytest" "-v")
6162 #t))
6163 (add-after 'install 'set-python-file-name
6164 (lambda* (#:key outputs #:allow-other-keys)
6165 ;; Record the absolute file name of the 'python' executable in
6166 ;; 'kernel.json'.
6167 (let ((out (assoc-ref outputs "out")))
6168 (substitute* (string-append out "/share/jupyter"
6169 "/kernels/python3/kernel.json")
6170 (("\"python\"")
6171 (string-append "\"" (which "python") "\"")))
6172 #t))))))
6173 (propagated-inputs
6174 `(("python-ipython" ,python-ipython)
6175 ;; imported at runtime during connect
6176 ("python-jupyter-client" ,python-jupyter-client)))
6177 (native-inputs
6178 `(("python-flaky" ,python-flaky)
6179 ("python-nose" ,python-nose)
6180 ("python-pytest" ,python-pytest)))
6181 (home-page "https://ipython.org")
6182 (synopsis "IPython Kernel for Jupyter")
6183 (description
6184 "This package provides the IPython kernel for Jupyter.")
6185 (properties `((python2-variant . ,(delay python2-ipykernel))))
6186 (license license:bsd-3)))
6187
6188 ;; Version 5.x and above no longer support Python 2.
6189 (define-public python2-ipykernel
6190 (package
6191 (name "python2-ipykernel")
6192 (version "4.10.1")
6193 (source
6194 (origin
6195 (method url-fetch)
6196 (uri (pypi-uri "ipykernel" version))
6197 (sha256
6198 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6199 (build-system python-build-system)
6200 (arguments
6201 `(#:python ,python-2))
6202 (propagated-inputs
6203 `(("python2-ipython" ,python2-ipython)
6204 ;; imported at runtime during connect
6205 ("python2-jupyter-client" ,python2-jupyter-client)
6206 ("python2-tornado" ,python2-tornado)
6207 ("python2-traitlets" ,python2-traitlets)))
6208 (native-inputs
6209 `(("python2-mock" ,python2-mock)
6210 ("python2-nose" ,python2-nose)
6211 ("python2-pytest" ,python2-pytest)
6212 ("python2-pytest-cov" ,python2-pytest-cov)))
6213 (home-page "https://ipython.org")
6214 (synopsis "IPython Kernel for Jupyter")
6215 (description
6216 "This package provides the IPython kernel for Jupyter.")
6217 (license license:bsd-3)))
6218
6219 (define-public python-pari-jupyter
6220 (package
6221 (name "python-pari-jupyter")
6222 (version "1.3.2")
6223 (source
6224 (origin
6225 (method url-fetch)
6226 (uri (pypi-uri "pari_jupyter" version))
6227 (sha256
6228 (base32
6229 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6230 (build-system python-build-system)
6231 (propagated-inputs
6232 `(("python-ipykernel" ,python-ipykernel)))
6233 (inputs
6234 `(("pari-gp" ,pari-gp)
6235 ("readline" ,readline)))
6236 (arguments
6237 `(#:tests? #f)) ; no test suite
6238 (home-page
6239 "https://github.com/jdemeyer/pari_jupyter")
6240 (synopsis "A Jupyter kernel for PARI/GP")
6241 (description "The package provides a PARI/GP kernel for Jupyter.")
6242 (license license:gpl3+)))
6243
6244 (define-public python-backcall
6245 (package
6246 (name "python-backcall")
6247 (version "0.1.0")
6248 (source
6249 (origin
6250 (method url-fetch)
6251 (uri (pypi-uri "backcall" version))
6252 (sha256
6253 (base32
6254 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6255 (build-system python-build-system)
6256 (home-page "https://github.com/takluyver/backcall/")
6257 (synopsis "Specifications for callback functions passed in to an API")
6258 (description
6259 "If your code lets other people supply callback functions, it's important
6260 to specify the function signature you expect, and check that functions support
6261 that. Adding extra parameters later would break other peoples code unless
6262 you're careful. The @code{backcall} package provides a way of specifying the
6263 callback signature using a prototype function.")
6264 (license license:bsd-3)))
6265
6266 (define-public python-ipython
6267 (package
6268 (name "python-ipython")
6269 (version "7.9.0")
6270 (source
6271 (origin
6272 (method url-fetch)
6273 (uri (pypi-uri "ipython" version ".tar.gz"))
6274 (sha256
6275 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6276 (build-system python-build-system)
6277 (propagated-inputs
6278 `(("python-backcall" ,python-backcall)
6279 ("python-pyzmq" ,python-pyzmq)
6280 ("python-prompt-toolkit" ,python-prompt-toolkit)
6281 ("python-terminado" ,python-terminado)
6282 ("python-matplotlib" ,python-matplotlib)
6283 ("python-numpy" ,python-numpy)
6284 ("python-numpydoc" ,python-numpydoc)
6285 ("python-jedi" ,python-jedi)
6286 ("python-jinja2" ,python-jinja2)
6287 ("python-mistune" ,python-mistune)
6288 ("python-pexpect" ,python-pexpect)
6289 ("python-pickleshare" ,python-pickleshare)
6290 ("python-simplegeneric" ,python-simplegeneric)
6291 ("python-jsonschema" ,python-jsonschema)
6292 ("python-traitlets" ,python-traitlets)
6293 ("python-nbformat" ,python-nbformat)
6294 ("python-pygments" ,python-pygments)))
6295 (inputs
6296 `(("readline" ,readline)
6297 ("which" ,which)))
6298 (native-inputs
6299 `(("graphviz" ,graphviz)
6300 ("pkg-config" ,pkg-config)
6301 ("python-requests" ,python-requests) ;; for tests
6302 ("python-testpath" ,python-testpath)
6303 ("python-nose" ,python-nose)))
6304 (arguments
6305 `(#:phases
6306 (modify-phases %standard-phases
6307 (add-after 'unpack 'make-docs-reproducible
6308 (lambda _
6309 (substitute* "IPython/sphinxext/ipython_directive.py"
6310 ((".*import datetime") "")
6311 ((".*datetime.datetime.now\\(\\)") "")
6312 (("%timeit") "# %timeit"))
6313 #t))
6314 ;; Tests can only be run after the library has been installed and not
6315 ;; within the source directory.
6316 (delete 'check)
6317 (add-after 'install 'check
6318 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6319 (if tests?
6320 (begin
6321 ;; Make installed package available for running the tests
6322 (add-installed-pythonpath inputs outputs)
6323 (setenv "HOME" "/tmp/") ;; required by a test
6324 ;; We only test the core because one of the other tests
6325 ;; tries to import ipykernel.
6326 (invoke "python" "IPython/testing/iptest.py"
6327 "-v" "IPython/core/tests"))
6328 #t)))
6329 (add-before 'check 'fix-tests
6330 (lambda* (#:key inputs #:allow-other-keys)
6331 (substitute* "./IPython/utils/_process_posix.py"
6332 (("/usr/bin/env', 'which") (which "which")))
6333 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6334 (("#!/usr/bin/env python")
6335 (string-append "#!" (which "python"))))
6336 ;; This test introduces a circular dependency on ipykernel
6337 ;; (which depends on ipython).
6338 (delete-file "IPython/core/tests/test_display.py")
6339 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6340 (delete-file "IPython/core/tests/test_interactiveshell.py")
6341 #t)))))
6342 (home-page "https://ipython.org")
6343 (synopsis "IPython is a tool for interactive computing in Python")
6344 (description
6345 "IPython provides a rich architecture for interactive computing with:
6346 Powerful interactive shells, a browser-based notebook, support for interactive
6347 data visualization, embeddable interpreters and tools for parallel
6348 computing.")
6349 (properties `((python2-variant . ,(delay python2-ipython))))
6350 (license license:bsd-3)))
6351
6352 ;; This is the latest release of the LTS version of ipython with support for
6353 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6354 ;; dropped support for Python 2.7.
6355 (define-public python2-ipython
6356 (package
6357 (name "python2-ipython")
6358 (version "5.8.0")
6359 (source
6360 (origin
6361 (method url-fetch)
6362 (uri (pypi-uri "ipython" version ".tar.gz"))
6363 (sha256
6364 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6365 (build-system python-build-system)
6366 (propagated-inputs
6367 `(("python2-backports-shutil-get-terminal-size"
6368 ,python2-backports-shutil-get-terminal-size)
6369 ("python2-pathlib2" ,python2-pathlib2)
6370 ("python2-pyzmq" ,python2-pyzmq)
6371 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6372 ("python2-terminado" ,python2-terminado)
6373 ("python2-matplotlib" ,python2-matplotlib)
6374 ("python2-numpy" ,python2-numpy)
6375 ("python2-numpydoc" ,python2-numpydoc)
6376 ("python2-jinja2" ,python2-jinja2)
6377 ("python2-mistune" ,python2-mistune)
6378 ("python2-pexpect" ,python2-pexpect)
6379 ("python2-pickleshare" ,python2-pickleshare)
6380 ("python2-simplegeneric" ,python2-simplegeneric)
6381 ("python2-jsonschema" ,python2-jsonschema)
6382 ("python2-traitlets" ,python2-traitlets)
6383 ("python2-nbformat" ,python2-nbformat)
6384 ("python2-pygments" ,python2-pygments)))
6385 (inputs
6386 `(("readline" ,readline)
6387 ("which" ,which)))
6388 (native-inputs
6389 `(("graphviz" ,graphviz)
6390 ("pkg-config" ,pkg-config)
6391 ("python2-requests" ,python2-requests) ;; for tests
6392 ("python2-testpath" ,python2-testpath)
6393 ("python2-mock" ,python2-mock)
6394 ("python2-nose" ,python2-nose)))
6395 (arguments
6396 `(#:python ,python-2
6397 #:phases
6398 (modify-phases %standard-phases
6399 (add-before 'check 'delete-broken-tests
6400 (lambda* (#:key inputs #:allow-other-keys)
6401 ;; These tests throw errors for unknown reasons.
6402 (delete-file "IPython/core/tests/test_displayhook.py")
6403 (delete-file "IPython/core/tests/test_magic_terminal.py")
6404 (delete-file "IPython/core/tests/test_profile.py")
6405 #t)))))
6406 (home-page "https://ipython.org")
6407 (synopsis "IPython is a tool for interactive computing in Python")
6408 (description
6409 "IPython provides a rich architecture for interactive computing with:
6410 Powerful interactive shells, a browser-based notebook, support for interactive
6411 data visualization, embeddable interpreters and tools for parallel
6412 computing.")
6413 (license license:bsd-3)))
6414
6415 (define-public python-ipython-documentation
6416 (package
6417 (inherit python-ipython)
6418 (name "python-ipython-documentation")
6419 (version (package-version python-ipython))
6420 (arguments
6421 `(#:phases
6422 (modify-phases %standard-phases
6423 (delete 'build)
6424 (delete 'check)
6425 (replace 'install
6426 (lambda* (#:key outputs #:allow-other-keys)
6427 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6428 (doc (string-append data "/doc/" ,name "-" ,version))
6429 (html (string-append doc "/html"))
6430 (man1 (string-append data "/man/man1"))
6431 (info (string-append data "/info"))
6432 (examples (string-append doc "/examples"))
6433 (python-arg (string-append "PYTHON=" (which "python"))))
6434 (setenv "LANG" "en_US.utf8")
6435 (with-directory-excursion "docs"
6436 ;; FIXME: pdf fails to build
6437 ;;(system* "make" "pdf" "PAPER=a4")
6438 (system* "make" python-arg "html")
6439 ;; FIXME: the generated texi file contains ^@^@, which trips
6440 ;; up the parser.
6441 ;; (system* "make" python-arg "info")
6442 )
6443 (copy-recursively "docs/man" man1)
6444 (copy-recursively "examples" examples)
6445 (copy-recursively "docs/build/html" html)
6446 ;; (copy-file "docs/build/latex/ipython.pdf"
6447 ;; (string-append doc "/ipython.pdf"))
6448 (mkdir-p info)
6449 ;; (copy-file "docs/build/texinfo/ipython.info"
6450 ;; (string-append info "/ipython.info"))
6451 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6452 #t)))))
6453 (inputs
6454 `(("python-ipython" ,python-ipython)
6455 ("python-ipykernel" ,python-ipykernel)))
6456 (native-inputs
6457 `(("python-sphinx" ,python-sphinx)
6458 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6459 ;; FIXME: It's possible that a smaller union would work just as well.
6460 ("texlive" ,(texlive-union (list texlive-amsfonts
6461 texlive-fonts-ec
6462 texlive-generic-ifxetex
6463 texlive-generic-pdftex
6464 texlive-latex-capt-of
6465 texlive-latex-cmap
6466 texlive-latex-environ
6467 texlive-latex-eqparbox
6468 texlive-latex-etoolbox
6469 texlive-latex-expdlist
6470 texlive-latex-fancyhdr
6471 texlive-latex-fancyvrb
6472 texlive-latex-fncychap
6473 texlive-latex-float
6474 texlive-latex-framed
6475 texlive-latex-geometry
6476 texlive-latex-graphics
6477 texlive-latex-hyperref
6478 texlive-latex-mdwtools
6479 texlive-latex-multirow
6480 texlive-latex-needspace
6481 texlive-latex-oberdiek
6482 texlive-latex-parskip
6483 texlive-latex-preview
6484 texlive-latex-tabulary
6485 texlive-latex-threeparttable
6486 texlive-latex-titlesec
6487 texlive-latex-trimspaces
6488 texlive-latex-ucs
6489 texlive-latex-upquote
6490 texlive-latex-url
6491 texlive-latex-varwidth
6492 texlive-latex-wrapfig)))
6493 ("texinfo" ,texinfo)))))
6494
6495 (define-public python-urwid
6496 (package
6497 (name "python-urwid")
6498 (version "2.1.0")
6499 (source
6500 (origin
6501 (method url-fetch)
6502 (uri (pypi-uri "urwid" version))
6503 (sha256
6504 (base32
6505 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6506 (build-system python-build-system)
6507 (home-page "http://urwid.org")
6508 (synopsis "Console user interface library for Python")
6509 (description
6510 "Urwid is a curses-based UI/widget library for Python. It includes many
6511 features useful for text console applications.")
6512 (license license:lgpl2.1+)))
6513
6514 (define-public python2-urwid
6515 (package-with-python2 python-urwid))
6516
6517 (define-public python-urwidtrees
6518 (package
6519 (name "python-urwidtrees")
6520 (version "1.0.2")
6521 (source
6522 (origin
6523 (method git-fetch)
6524 ;; package author intends on distributing via github rather than pypi:
6525 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6526 (uri (git-reference
6527 (url "https://github.com/pazz/urwidtrees")
6528 (commit version)))
6529 (file-name (git-file-name name version))
6530 (sha256
6531 (base32
6532 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6533 (build-system python-build-system)
6534 (arguments
6535 '(#:use-setuptools? #f
6536 #:tests? #f)) ; no tests
6537 (propagated-inputs `(("python-urwid" ,python-urwid)))
6538 (home-page "https://github.com/pazz/urwidtrees")
6539 (synopsis "Tree widgets for urwid")
6540 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6541 toolkit. Use it to build trees of widgets.")
6542 (license license:gpl3+)))
6543
6544 (define-public python2-urwidtrees
6545 (package-with-python2 python-urwidtrees))
6546
6547 (define-public python-ua-parser
6548 (package
6549 (name "python-ua-parser")
6550 (version "0.8.0")
6551 (source
6552 (origin
6553 (method url-fetch)
6554 (uri (pypi-uri "ua-parser" version))
6555 (sha256
6556 (base32
6557 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6558 (build-system python-build-system)
6559 (arguments
6560 `(#:tests? #f)) ;no test suite in release
6561 (native-inputs
6562 `(("python-pyyaml" ,python-pyyaml)))
6563 (home-page "https://github.com/ua-parser/uap-python")
6564 (synopsis "User agent parser")
6565 (description
6566 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6567 (license license:asl2.0)))
6568
6569 (define-public python2-ua-parser
6570 (package-with-python2 python-ua-parser))
6571
6572 (define-public python-user-agents
6573 (package
6574 (name "python-user-agents")
6575 (version "1.1.0")
6576 (source
6577 (origin
6578 (method url-fetch)
6579 (uri (pypi-uri "user-agents" version))
6580 (sha256
6581 (base32
6582 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6583 (build-system python-build-system)
6584 (arguments
6585 `(#:tests? #f)) ;missing devices.json test file in release
6586 (propagated-inputs
6587 `(("python-ua-parser" ,python-ua-parser)))
6588 (home-page "https://github.com/selwin/python-user-agents")
6589 (synopsis "User Agent strings parsing library")
6590 (description
6591 "A library to identify devices (phones, tablets) and their capabilities by
6592 parsing (browser/HTTP) user agent strings.")
6593 (license license:expat)))
6594
6595 (define-public python2-user-agents
6596 (package-with-python2 python-user-agents))
6597
6598 (define-public python-dbus
6599 (package
6600 (name "python-dbus")
6601 (version "1.2.14")
6602 (source
6603 (origin
6604 (method url-fetch)
6605 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6606 "dbus-python-" version ".tar.gz"))
6607 (sha256
6608 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6609 (build-system gnu-build-system)
6610 (native-inputs
6611 `(("pkg-config" ,pkg-config)))
6612 (inputs
6613 `(("python" ,python-wrapper)
6614 ("dbus-glib" ,dbus-glib)))
6615 (synopsis "Python bindings for D-bus")
6616 (description "python-dbus provides bindings for libdbus, the reference
6617 implementation of D-Bus.")
6618 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6619 (license license:expat)))
6620
6621 (define-public python2-dbus
6622 (package (inherit python-dbus)
6623 (name "python2-dbus")
6624 (inputs `(("python" ,python-2)
6625 ,@(alist-delete "python"
6626 (package-inputs python-dbus)
6627 equal?)))))
6628
6629 (define-public python-notify2
6630 (package
6631 (name "python-notify2")
6632 (version "0.3.1")
6633 (source
6634 (origin
6635 (method url-fetch)
6636 (uri (pypi-uri "notify2" version))
6637 (sha256
6638 (base32
6639 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6640 (build-system python-build-system)
6641 (arguments `(#:tests? #f)) ; tests depend on system state
6642 (native-inputs
6643 `(("python-dbus" ,python-dbus)))
6644 (home-page "https://bitbucket.org/takluyver/pynotify2")
6645 (synopsis "Python interface to D-Bus notifications")
6646 (description
6647 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6648 It is a reimplementation of pynotify in pure Python, and an alternative to
6649 the GObject Introspection bindings to libnotify for non-GTK applications.")
6650 (license (list license:bsd-2
6651 license:lgpl2.1+))))
6652
6653 (define-public python2-notify2
6654 (package-with-python2 python-notify2))
6655
6656 ;; beautifulsoup4 has a totally different namespace than 3.x,
6657 ;; and pypi seems to put it under its own name, so I guess we should too
6658 (define-public python-beautifulsoup4
6659 (package
6660 (name "python-beautifulsoup4")
6661 (version "4.7.1")
6662 (source
6663 (origin
6664 (method url-fetch)
6665 (uri (pypi-uri "beautifulsoup4" version))
6666 (sha256
6667 (base32
6668 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6669 (build-system python-build-system)
6670 (arguments
6671 `(#:phases
6672 (modify-phases %standard-phases
6673 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6674 ;; must use this conversion script when building with Python 3. The
6675 ;; conversion script also runs the tests.
6676 ;; For more information, see the file 'convert-py3k' in the source
6677 ;; distribution.
6678 (replace 'check
6679 (lambda _ (invoke "./convert-py3k"))))))
6680 (propagated-inputs
6681 `(("python-soupsieve" ,python-soupsieve)))
6682 (home-page
6683 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6684 (synopsis
6685 "Python screen-scraping library")
6686 (description
6687 "Beautiful Soup is a Python library designed for rapidly setting up
6688 screen-scraping projects. It offers Pythonic idioms for navigating,
6689 searching, and modifying a parse tree, providing a toolkit for
6690 dissecting a document and extracting what you need. It automatically
6691 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6692 (license license:expat)
6693 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6694
6695 (define-public python2-beautifulsoup4
6696 (package
6697 (inherit (package-with-python2
6698 (strip-python2-variant python-beautifulsoup4)))
6699 (arguments `(#:python ,python-2))))
6700
6701 (define-public python-soupsieve
6702 (package
6703 (name "python-soupsieve")
6704 (version "1.9.5")
6705 (source
6706 (origin
6707 (method url-fetch)
6708 (uri (pypi-uri "soupsieve" version))
6709 (sha256
6710 (base32
6711 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6712 (build-system python-build-system)
6713 (arguments `(#:tests? #f))
6714 ;;XXX: 2 tests fail currently despite claming they were to be
6715 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6716 ;;don't want to create a circular dependency.
6717 (home-page "https://github.com/facelessuser/soupsieve")
6718 (synopsis "CSS selector library")
6719 (description
6720 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6721 Soup 4. It aims to provide selecting, matching, and filtering using modern
6722 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6723 specifications up through the latest CSS level 4 drafts and beyond (though
6724 some are not yet implemented).")
6725 (properties `((python2-variant . ,(delay python2-soupsieve))))
6726 (license license:expat)))
6727
6728 (define-public python2-soupsieve
6729 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6730 (package
6731 (inherit base)
6732 (propagated-inputs
6733 `(("python2-backports-functools-lru-cache"
6734 ,python2-backports-functools-lru-cache)
6735 ,@(package-propagated-inputs base))))))
6736
6737 (define-public python-netifaces
6738 (package
6739 (name "python-netifaces")
6740 (version "0.10.7")
6741 (source
6742 (origin
6743 (method url-fetch)
6744 (uri (pypi-uri "netifaces" version))
6745 (sha256
6746 (base32
6747 "1gccklrcplbbqh81g1mdgpa5y8na7kkf29cq2ka3f5a2fp5hyndx"))))
6748 (build-system python-build-system)
6749 (home-page "https://github.com/al45tair/netifaces")
6750 (synopsis
6751 "Python module for portable network interface information")
6752 (description
6753 "Netifaces is a Python module providing information on network
6754 interfaces in an easy and portable manner.")
6755 (license license:expat)))
6756
6757 (define-public python2-netifaces
6758 (package-with-python2 python-netifaces))
6759
6760 (define-public python-networkx
6761 (package
6762 (name "python-networkx")
6763 (version "2.4")
6764 (source
6765 (origin
6766 (method url-fetch)
6767 (uri (pypi-uri "networkx" version))
6768 (sha256
6769 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6770 (build-system python-build-system)
6771 (arguments
6772 '(#:phases (modify-phases %standard-phases
6773 (replace 'check
6774 (lambda* (#:key tests? #:allow-other-keys)
6775 (if tests?
6776 (invoke "pytest" "-vv" "--pyargs" "networkx")
6777 (format #t "test suite not run~%"))
6778 #t)))))
6779 ;; python-decorator is needed at runtime.
6780 (propagated-inputs
6781 `(("python-decorator" ,python-decorator)))
6782 (native-inputs
6783 `(("python-pytest" ,python-pytest)))
6784 (home-page "https://networkx.github.io/")
6785 (synopsis "Python module for creating and manipulating graphs and networks")
6786 (description
6787 "NetworkX is a Python package for the creation, manipulation, and study
6788 of the structure, dynamics, and functions of complex networks.")
6789 (properties `((python2-variant . ,(delay python2-networkx))))
6790 (license license:bsd-3)))
6791
6792 ;; NetworkX 2.2 is the last version with support for Python 2.
6793 (define-public python2-networkx
6794 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6795 (package
6796 (inherit base)
6797 (version "2.2")
6798 (source (origin
6799 (method url-fetch)
6800 (uri (pypi-uri "networkx" version ".zip"))
6801 (sha256
6802 (base32
6803 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6804 (arguments
6805 `(#:python ,python-2))
6806 (native-inputs
6807 `(("python-nose" ,python2-nose)
6808 ("unzip" ,unzip))))))
6809
6810 (define-public python-datrie
6811 (package
6812 (name "python-datrie")
6813 (version "0.8.2")
6814 (source
6815 (origin
6816 (method url-fetch)
6817 (uri (pypi-uri "datrie" version))
6818 (sha256
6819 (base32
6820 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6821 (build-system python-build-system)
6822 (native-inputs
6823 `(("python-cython" ,python-cython)
6824 ("python-hypothesis" ,python-hypothesis)
6825 ("python-pytest" ,python-pytest)
6826 ("python-pytest-runner" ,python-pytest-runner)))
6827 (home-page "https://github.com/kmike/datrie")
6828 (synopsis "Fast, efficiently stored trie for Python")
6829 (description
6830 "This package provides a fast, efficiently stored trie implementation for
6831 Python.")
6832 (license license:lgpl2.1+)))
6833
6834 (define-public snakemake
6835 (package
6836 (name "snakemake")
6837 (version "5.7.1")
6838 (source
6839 (origin
6840 (method url-fetch)
6841 (uri (pypi-uri "snakemake" version))
6842 (sha256
6843 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
6844 (build-system python-build-system)
6845 (arguments
6846 ;; TODO: Package missing test dependencies.
6847 '(#:tests? #f
6848 #:phases
6849 (modify-phases %standard-phases
6850 ;; For cluster execution Snakemake will call Python. Since there is
6851 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
6852 ;; this by calling the snakemake wrapper instead.
6853 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6854 (lambda* (#:key outputs #:allow-other-keys)
6855 (substitute* "snakemake/executors.py"
6856 (("\\{sys.executable\\} -m snakemake")
6857 (string-append (assoc-ref outputs "out")
6858 "/bin/snakemake")))
6859 #t)))))
6860 (propagated-inputs
6861 `(("python-appdirs" ,python-appdirs)
6862 ("python-configargparse" ,python-configargparse)
6863 ("python-datrie" ,python-datrie)
6864 ("python-docutils" ,python-docutils)
6865 ("python-gitpython" ,python-gitpython)
6866 ("python-jinja2" ,python-jinja2)
6867 ("python-jsonschema" ,python-jsonschema)
6868 ("python-networkx" ,python-networkx)
6869 ("python-psutil" ,python-psutil)
6870 ("python-pyyaml" ,python-pyyaml)
6871 ("python-ratelimiter" ,python-ratelimiter)
6872 ("python-requests" ,python-requests)
6873 ("python-wrapt" ,python-wrapt)))
6874 (home-page "https://snakemake.readthedocs.io")
6875 (synopsis "Python-based execution environment for make-like workflows")
6876 (description
6877 "Snakemake aims to reduce the complexity of creating workflows by
6878 providing a clean and modern domain specific specification language (DSL) in
6879 Python style, together with a fast and comfortable execution environment.")
6880 (license license:expat)))
6881
6882 (define-public python-pyqrcode
6883 (package
6884 (name "python-pyqrcode")
6885 (version "1.2.1")
6886 (source
6887 (origin
6888 (method url-fetch)
6889 (uri (pypi-uri "PyQRCode" version))
6890 (sha256
6891 (base32
6892 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
6893 (build-system python-build-system)
6894 (home-page
6895 "https://github.com/mnooner256/pyqrcode")
6896 (synopsis "QR code generator")
6897 (description
6898 "Pyqrcode is a QR code generator written purely in Python with
6899 SVG, EPS, PNG and terminal output.")
6900 (license license:bsd-3)))
6901
6902 (define-public python-seaborn
6903 (package
6904 (name "python-seaborn")
6905 (version "0.10.0")
6906 (source
6907 (origin
6908 (method url-fetch)
6909 (uri (pypi-uri "seaborn" version))
6910 (sha256
6911 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
6912 (build-system python-build-system)
6913 (arguments
6914 `(#:phases
6915 (modify-phases %standard-phases
6916 (add-before 'check 'start-xserver
6917 (lambda* (#:key inputs #:allow-other-keys)
6918 (let ((xorg-server (assoc-ref inputs "xorg-server")))
6919 ;; There must be a running X server and make check doesn't
6920 ;; start one. Therefore we must do it.
6921 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
6922 (setenv "DISPLAY" ":1")
6923 #t)))
6924 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
6925 (propagated-inputs
6926 `(("python-pandas" ,python-pandas)
6927 ("python-matplotlib" ,python-matplotlib)
6928 ("python-numpy" ,python-numpy)
6929 ("python-scipy" ,python-scipy)))
6930 (native-inputs
6931 `(("python-pytest" ,python-pytest)
6932 ("xorg-server" ,xorg-server-for-tests)))
6933 (home-page "https://seaborn.pydata.org/")
6934 (synopsis "Statistical data visualization")
6935 (description
6936 "Seaborn is a library for making attractive and informative statistical
6937 graphics in Python. It is built on top of matplotlib and tightly integrated
6938 with the PyData stack, including support for numpy and pandas data structures
6939 and statistical routines from scipy and statsmodels.")
6940 (properties `((python2-variant . ,(delay python2-seaborn))))
6941 (license license:bsd-3)))
6942
6943 ;; 0.9.1 is the last release with support for Python 2.
6944 (define-public python2-seaborn
6945 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
6946 (package
6947 (inherit base)
6948 (version "0.9.1")
6949 (source (origin
6950 (method url-fetch)
6951 (uri (pypi-uri "seaborn" version))
6952 (sha256
6953 (base32
6954 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
6955
6956 (define-public python-mpmath
6957 (package
6958 (name "python-mpmath")
6959 (version "0.19")
6960 (source (origin
6961 (method url-fetch)
6962 (uri (string-append "http://mpmath.org/files/mpmath-"
6963 version ".tar.gz"))
6964 (sha256
6965 (base32
6966 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
6967 (build-system python-build-system)
6968 (arguments
6969 '(#:phases
6970 (modify-phases %standard-phases
6971 (replace 'check
6972 (lambda _
6973 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
6974 (home-page "http://mpmath.org")
6975 (synopsis "Arbitrary-precision floating-point arithmetic in python")
6976 (description
6977 "@code{mpmath} can be used as an arbitrary-precision substitute for
6978 Python's float/complex types and math/cmath modules, but also does much
6979 more advanced mathematics.")
6980 (license license:bsd-3)))
6981
6982 (define-public python2-mpmath
6983 (package-with-python2 python-mpmath))
6984
6985 (define-public python-bigfloat
6986 (package
6987 (name "python-bigfloat")
6988 (version "0.3.0")
6989 (source
6990 (origin
6991 (method url-fetch)
6992 (uri (pypi-uri "bigfloat" version))
6993 (sha256
6994 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
6995 (build-system python-build-system)
6996 (inputs
6997 `(("mpfr" ,mpfr)))
6998 (home-page "https://github.com/mdickinson/bigfloat")
6999 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7000 (description
7001 "This package provides a Python interface to the MPFR library for
7002 multiprecision arithmetic.")
7003 (license license:lgpl3+)))
7004
7005 (define-public python2-bigfloat
7006 (package-with-python2 python-bigfloat))
7007
7008 (define-public python-sympy
7009 (package
7010 (name "python-sympy")
7011 (version "1.1.1")
7012 (source
7013 (origin
7014 (method url-fetch)
7015 (uri (string-append
7016 "https://github.com/sympy/sympy/releases/download/sympy-"
7017 version "/sympy-" version ".tar.gz"))
7018 (sha256
7019 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7020 (build-system python-build-system)
7021 (arguments
7022 `(#:phases
7023 (modify-phases %standard-phases
7024 ;; Run the core tests after installation. By default it would run
7025 ;; *all* tests, which take a very long time to complete and are known
7026 ;; to be flaky.
7027 (delete 'check)
7028 (add-after 'install 'check
7029 (lambda* (#:key outputs #:allow-other-keys)
7030 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7031 #t)))))
7032 (propagated-inputs
7033 `(("python-mpmath" ,python-mpmath)))
7034 (home-page "https://www.sympy.org/")
7035 (synopsis "Python library for symbolic mathematics")
7036 (description
7037 "SymPy is a Python library for symbolic mathematics. It aims to become a
7038 full-featured computer algebra system (CAS) while keeping the code as simple
7039 as possible in order to be comprehensible and easily extensible.")
7040 (license license:bsd-3)))
7041
7042 (define-public python2-sympy
7043 (package
7044 (inherit (package-with-python2 python-sympy))
7045 (arguments
7046 `(#:phases
7047 (modify-phases %standard-phases
7048 ;; Run the core tests after installation. By default it would run
7049 ;; *all* tests, which take a very long time to complete and are known
7050 ;; to be flaky.
7051 (delete 'check)
7052 (add-after 'install 'check
7053 (lambda* (#:key outputs #:allow-other-keys)
7054 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7055 #t)))))))
7056
7057 (define-public python-q
7058 (package
7059 (name "python-q")
7060 (version "2.6")
7061 (source
7062 (origin
7063 (method url-fetch)
7064 (uri (pypi-uri "q" version))
7065 (sha256
7066 (base32
7067 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7068 (build-system python-build-system)
7069 (home-page "https://github.com/zestyping/q")
7070 (synopsis "Quick-and-dirty debugging output for tired programmers")
7071 (description
7072 "q is a Python module for \"print\" style of debugging Python code. It
7073 provides convenient short API for print out of values, tracebacks, and
7074 falling into the Python interpreter.")
7075 (license license:asl2.0)))
7076
7077 (define-public python2-q
7078 (package-with-python2 python-q))
7079
7080 (define-public python2-xlib
7081 (package
7082 (name "python2-xlib")
7083 (version "0.14")
7084 (source (origin
7085 (method url-fetch)
7086 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7087 "/" version "/"
7088 "python-xlib-" version ".tar.gz"))
7089 (sha256
7090 (base32
7091 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7092 (build-system python-build-system)
7093 (arguments
7094 `(#:python ,python-2 ;Python 2 only
7095 #:tests? #f)) ;no tests
7096 (home-page "http://python-xlib.sourceforge.net/")
7097 (synopsis "Python X11 client library")
7098 (description
7099 "The Python X Library is intended to be a fully functional X client
7100 library for Python programs. It is useful to implement low-level X clients.
7101 It is written entirely in Python.")
7102 (license license:gpl2+)))
7103
7104 (define-public python-singledispatch
7105 (package
7106 (name "python-singledispatch")
7107 (version "3.4.0.3")
7108 (source
7109 (origin
7110 (method url-fetch)
7111 (uri (pypi-uri "singledispatch" version))
7112 (sha256
7113 (base32
7114 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7115 (build-system python-build-system)
7116 (native-inputs
7117 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7118 (home-page
7119 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7120 (synopsis "Backport of singledispatch feature from Python 3.4")
7121 (description
7122 "This library brings functools.singledispatch from Python 3.4 to Python
7123 2.6-3.3.")
7124 (license license:expat)))
7125
7126 (define-public python2-singledispatch
7127 (package-with-python2 python-singledispatch))
7128
7129 ;; the python- version can be removed with python-3.5
7130 (define-public python-backports-abc
7131 (package
7132 (name "python-backports-abc")
7133 (version "0.5")
7134 (source
7135 (origin
7136 (method url-fetch)
7137 (uri (pypi-uri "backports_abc" version))
7138 (sha256
7139 (base32
7140 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7141 (build-system python-build-system)
7142 (home-page "https://github.com/cython/backports_abc")
7143 (synopsis "Backport of additions to the 'collections.abc' module")
7144 (description
7145 "Python-backports-abc provides a backport of additions to the
7146 @code{collections.abc} module in Python-3.5.")
7147 (license license:psfl)))
7148
7149 (define-public python2-backports-abc
7150 (package-with-python2 python-backports-abc))
7151
7152 (define-public python-backports-csv
7153 (package
7154 (name "python-backports-csv")
7155 (version "1.0.5")
7156 (source
7157 (origin
7158 (method url-fetch)
7159 (uri (pypi-uri "backports.csv" version))
7160 (sha256
7161 (base32
7162 "1imzbrradkfn8s2m1qcimyn74dn1mz2p3j381jljn166rf2i6hlc"))))
7163 (build-system python-build-system)
7164 (home-page "https://github.com/ryanhiebert/backports.csv")
7165 (synopsis "Backport of Python 3's csv module for Python 2")
7166 (description
7167 "Provides a backport of Python 3's @code{csv} module for parsing
7168 comma separated values. The API of the @code{csv} module in Python 2
7169 is drastically different from the @code{csv} module in Python 3.
7170 This is due, for the most part, to the difference between str in
7171 Python 2 and Python 3.")
7172 (license license:psfl)))
7173
7174 (define-public python2-backports-csv
7175 (package-with-python2 python-backports-csv))
7176
7177 (define-public python2-backports-shutil-get-terminal-size
7178 (package
7179 (name "python2-backports-shutil-get-terminal-size")
7180 (version "1.0.0")
7181 (source
7182 (origin
7183 (method url-fetch)
7184 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7185 (sha256
7186 (base32
7187 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7188 (build-system python-build-system)
7189 (arguments
7190 `(#:python ,python-2
7191 #:phases
7192 (modify-phases %standard-phases
7193 (replace 'check
7194 (lambda _
7195 (setenv "PYTHONPATH" (string-append "./build/lib:"
7196 (getenv "PYTHONPATH")))
7197 (invoke "py.test" "-v"))))))
7198 (native-inputs
7199 `(("python2-pytest" ,python2-pytest)))
7200 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7201 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7202 (description
7203 "This package provides a backport of the @code{get_terminal_size
7204 function} from Python 3.3's @code{shutil}.
7205 Unlike the original version it is written in pure Python rather than C,
7206 so it might be a tiny bit slower.")
7207 (license license:expat)))
7208
7209 (define-public python-waf
7210 (package
7211 (name "python-waf")
7212 (version "2.0.19")
7213 (source (origin
7214 (method url-fetch)
7215 (uri (string-append "https://waf.io/"
7216 "waf-" version ".tar.bz2"))
7217 (sha256
7218 (base32
7219 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7220 (build-system python-build-system)
7221 (arguments
7222 '(#:phases
7223 (modify-phases %standard-phases
7224 (replace 'build
7225 (lambda _
7226 ;; XXX: Find a way to add all extra tools.
7227 (let ((tools '("gccdeps"
7228 "clang_compilation_database")))
7229 (invoke "python" "waf-light" "configure" "build"
7230 (string-append "--tools="
7231 (string-join tools ","))))))
7232 (replace 'check
7233 (lambda _
7234 (invoke "python" "waf" "--version")))
7235 (replace 'install
7236 (lambda* (#:key outputs #:allow-other-keys)
7237 (let ((out (assoc-ref outputs "out")))
7238 (install-file "waf" (string-append out "/bin")))
7239 #t))
7240 ;; waf breaks when it is wrapped.
7241 (delete 'wrap))))
7242 (home-page "https://waf.io/")
7243 (synopsis "Python-based build system")
7244 (description
7245 "Waf is a Python-based framework for configuring, compiling and installing
7246 applications.")
7247 (license license:bsd-3)))
7248
7249 (define-public python2-waf
7250 (package-with-python2 python-waf))
7251
7252 (define-public python-pyzmq
7253 (package
7254 (name "python-pyzmq")
7255 (version "17.1.2")
7256 (source
7257 (origin
7258 (method url-fetch)
7259 (uri (pypi-uri "pyzmq" version))
7260 (sha256
7261 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7262 (build-system python-build-system)
7263 (arguments
7264 `(#:configure-flags
7265 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7266 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7267 ;; --inplace' for 'python setup.py test' to work.
7268 #:tests? #f))
7269 (inputs
7270 `(("zeromq" ,zeromq)))
7271 (native-inputs
7272 `(("pkg-config" ,pkg-config)
7273 ("python-nose" ,python-nose)))
7274 (home-page "https://github.com/zeromq/pyzmq")
7275 (synopsis "Python bindings for 0MQ")
7276 (description
7277 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7278 (license license:bsd-4)))
7279
7280 (define-public python2-pyzmq
7281 (package-with-python2 python-pyzmq))
7282
7283 (define-public python-pep8
7284 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7285 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7286 ;; some dependents' test suites, and nothing more.
7287 (package
7288 (name "python-pep8")
7289 (version "1.7.0")
7290 (source
7291 (origin
7292 (method url-fetch)
7293 (uri (pypi-uri "pep8" version))
7294 (sha256
7295 (base32
7296 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7297 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7298 (build-system python-build-system)
7299 (home-page "https://pep8.readthedocs.org/")
7300 (synopsis "Python style guide checker")
7301 (description
7302 "This tools checks Python code against some of the style conventions in
7303 PEP 8.")
7304 (license license:expat)))
7305
7306 (define-public python2-pep8
7307 (package-with-python2 python-pep8))
7308
7309 (define-public python-pyflakes
7310 (package
7311 (name "python-pyflakes")
7312 (version "2.1.1")
7313 (source
7314 (origin
7315 (method url-fetch)
7316 (uri (pypi-uri "pyflakes" version))
7317 (sha256
7318 (base32
7319 "18pq95a1xj2dgdd0m85gyfsn40jajj4xc3lp8wfv7igqhrc86xnr"))))
7320 (build-system python-build-system)
7321 (home-page
7322 "https://github.com/pyflakes/pyflakes")
7323 (synopsis "Passive checker of Python programs")
7324 (description
7325 "Pyflakes statically checks Python source code for common errors.")
7326 (license license:expat)))
7327
7328 (define-public python2-pyflakes
7329 (package-with-python2 python-pyflakes))
7330
7331 (define-public python-mccabe
7332 (package
7333 (name "python-mccabe")
7334 (version "0.6.1")
7335 (source
7336 (origin
7337 (method url-fetch)
7338 (uri (pypi-uri "mccabe" version))
7339 (sha256
7340 (base32
7341 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7342 (build-system python-build-system)
7343 (native-inputs
7344 `(("python-pytest" ,python-pytest-bootstrap)
7345 ("python-pytest-runner" ,python-pytest-runner)))
7346 (home-page "https://github.com/flintwork/mccabe")
7347 (synopsis "McCabe checker, plugin for flake8")
7348 (description
7349 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7350 complexity of Python source code.")
7351 (license license:expat)))
7352
7353 (define-public python2-mccabe
7354 (package-with-python2 python-mccabe))
7355
7356 (define-public python-mccabe-0.2.1
7357 (package (inherit python-mccabe)
7358 (version "0.2.1")
7359 (source
7360 (origin
7361 (method url-fetch)
7362 (uri (pypi-uri "mccabe" version))
7363 (sha256
7364 (base32
7365 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7366
7367 (define-public python2-mccabe-0.2.1
7368 (package-with-python2 python-mccabe-0.2.1))
7369
7370 ;; Flake8 2.4.1 requires an older version of pep8.
7371 ;; This should be removed ASAP.
7372 (define-public python-pep8-1.5.7
7373 (package (inherit python-pep8)
7374 (version "1.5.7")
7375 (source
7376 (origin
7377 (method url-fetch)
7378 (uri (pypi-uri "pep8" version))
7379 (sha256
7380 (base32
7381 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7382 (arguments
7383 ;; XXX Tests not compatible with Python 3.5.
7384 '(#:tests? #f))))
7385
7386 (define-public python2-pep8-1.5.7
7387 (package-with-python2 python-pep8-1.5.7))
7388
7389 ;; Flake8 2.4.1 requires an older version of pyflakes.
7390 ;; This should be removed ASAP.
7391 (define-public python-pyflakes-0.8.1
7392 (package (inherit python-pyflakes)
7393 (version "0.8.1")
7394 (source
7395 (origin
7396 (method url-fetch)
7397 (uri (pypi-uri "pyflakes" version))
7398 (sha256
7399 (base32
7400 "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
7401 (arguments
7402 ;; XXX Tests not compatible with Python 3.5.
7403 '(#:tests? #f))))
7404
7405 (define-public python2-pyflakes-0.8.1
7406 (package-with-python2 python-pyflakes-0.8.1))
7407
7408 (define-public python-flake8
7409 (package
7410 (name "python-flake8")
7411 (version "3.7.9")
7412 (source (origin
7413 (method url-fetch)
7414 (uri (pypi-uri "flake8" version))
7415 (sha256
7416 (base32
7417 "1yscj6avirm6m12bjh4fn2lfgxaamqsjh9pirdqfi0fcgq8ils25"))))
7418 (build-system python-build-system)
7419 (arguments
7420 `(#:phases
7421 (modify-phases %standard-phases
7422 (delete 'check)
7423 (add-after 'install 'check
7424 (lambda* (#:key inputs outputs #:allow-other-keys)
7425 (add-installed-pythonpath inputs outputs)
7426 (invoke "pytest" "-v")
7427 #t)))))
7428 (propagated-inputs
7429 `(("python-pycodestyle" ,python-pycodestyle)
7430 ("python-entrypoints" ,python-entrypoints)
7431 ("python-pyflakes" ,python-pyflakes)
7432 ("python-mccabe" ,python-mccabe)))
7433 (native-inputs
7434 `(("python-mock" ,python-mock)
7435 ("python-pytest" ,python-pytest-bootstrap)))
7436 (home-page "https://gitlab.com/pycqa/flake8")
7437 (synopsis
7438 "The modular source code checker: pep8, pyflakes and co")
7439 (description
7440 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7441 (properties `((python2-variant . ,(delay python2-flake8))))
7442 (license license:expat)))
7443
7444 (define-public python2-flake8
7445 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7446 (package (inherit base)
7447 (propagated-inputs
7448 `(("python2-configparser" ,python2-configparser)
7449 ("python2-enum34" ,python2-enum34)
7450 ("python2-functools32" ,python2-functools32)
7451 ("python2-typing" ,python2-typing)
7452 ,@(package-propagated-inputs base))))))
7453
7454 ;; python-hacking requires flake8 <2.6.0.
7455 (define-public python-flake8-2.5
7456 (package
7457 (inherit python-flake8)
7458 (version "2.5.5")
7459 (source (origin
7460 (method url-fetch)
7461 (uri (pypi-uri "flake8" version))
7462 (sha256
7463 (base32
7464 "1snylqwbmrylbx3r1wpz8ggk98f6bcag4441ag8mm2l7wyn58sij"))))
7465 (propagated-inputs
7466 `(("python-pep8" ,python-pep8)
7467 ,@(package-propagated-inputs python-flake8)))
7468 (properties `((python2-variant . ,(delay python2-flake8-2.5))))))
7469
7470 (define-public python2-flake8-2.5
7471 (package
7472 (inherit python2-flake8)
7473 (version (package-version python-flake8-2.5))
7474 (source (origin
7475 (inherit (package-source python-flake8-2.5))))
7476 (propagated-inputs
7477 `(("python2-pep8" ,python2-pep8)
7478 ,@(package-propagated-inputs python2-flake8)))))
7479
7480 (define-public python-flake8-polyfill
7481 (package
7482 (name "python-flake8-polyfill")
7483 (version "1.0.2")
7484 (source
7485 (origin
7486 (method url-fetch)
7487 (uri (pypi-uri "flake8-polyfill" version))
7488 (sha256
7489 (base32
7490 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7491 (build-system python-build-system)
7492 (arguments
7493 '(#:phases
7494 (modify-phases %standard-phases
7495 (replace 'check
7496 (lambda _
7497 ;; Be compatible with Pytest 4:
7498 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7499 (substitute* "setup.cfg"
7500 (("\\[pytest\\]")
7501 "[tool:pytest]"))
7502
7503 (setenv "PYTHONPATH"
7504 (string-append (getcwd) "/build/lib:"
7505 (getenv "PYTHONPATH")))
7506 (invoke "py.test" "-v"))))))
7507 (native-inputs
7508 `(("python-flake8" ,python-flake8)
7509 ("python-mock" ,python-mock)
7510 ("python-pep8" ,python-pep8)
7511 ("python-pycodestyle" ,python-pycodestyle)
7512 ("python-pytest" ,python-pytest)))
7513 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7514 (synopsis "Polyfill package for Flake8 plugins")
7515 (description
7516 "This package that provides some compatibility helpers for Flake8
7517 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7518 (license license:expat)))
7519
7520 (define-public python2-flake8-polyfill
7521 (package-with-python2 python-flake8-polyfill))
7522
7523 (define-public python-mistune
7524 (package
7525 (name "python-mistune")
7526 (version "0.8.4")
7527 (source
7528 (origin
7529 (method url-fetch)
7530 (uri (pypi-uri "mistune" version))
7531 (sha256
7532 (base32
7533 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7534 (build-system python-build-system)
7535 (native-inputs
7536 `(("python-nose" ,python-nose)
7537 ("python-cython" ,python-cython)))
7538 (home-page "https://github.com/lepture/mistune")
7539 (synopsis "Markdown parser in pure Python")
7540 (description "This package provides a fast markdown parser in pure
7541 Python.")
7542 (license license:bsd-3)))
7543
7544 (define-public python2-mistune
7545 (package-with-python2 python-mistune))
7546
7547 (define-public python-markdown
7548 (package
7549 (name "python-markdown")
7550 (version "3.2.1")
7551 (source
7552 (origin
7553 (method url-fetch)
7554 (uri (pypi-uri "Markdown" version))
7555 (sha256
7556 (base32
7557 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7558 (build-system python-build-system)
7559 (native-inputs
7560 `(("python-nose" ,python-nose)
7561 ("python-pyyaml" ,python-pyyaml)))
7562 (home-page "https://python-markdown.github.io/")
7563 (synopsis "Python implementation of Markdown")
7564 (description
7565 "This package provides a Python implementation of John Gruber's
7566 Markdown. The library features international input, various Markdown
7567 extensions, and several HTML output formats. A command line wrapper
7568 markdown_py is also provided to convert Markdown files to HTML.")
7569 (properties `((python2-variant . ,(delay python2-markdown))))
7570 (license license:bsd-3)))
7571
7572 ;; Markdown 3.2 dropped support for Python 2.
7573 (define-public python2-markdown
7574 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7575 (package/inherit
7576 base
7577 (version "3.1.1")
7578 (source (origin
7579 (method url-fetch)
7580 (uri (pypi-uri "Markdown" version))
7581 (sha256
7582 (base32
7583 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7584
7585 (define-public python-ptyprocess
7586 (package
7587 (name "python-ptyprocess")
7588 (version "0.5.2")
7589 (source
7590 (origin
7591 (method url-fetch)
7592 (uri (pypi-uri "ptyprocess" version))
7593 (sha256
7594 (base32
7595 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7596 (build-system python-build-system)
7597 (native-inputs
7598 `(("python-nose" ,python-nose)))
7599 (arguments
7600 `(#:phases
7601 (modify-phases %standard-phases
7602 (replace 'check
7603 (lambda _ (invoke "nosetests"))))))
7604 (home-page "https://github.com/pexpect/ptyprocess")
7605 (synopsis "Run a subprocess in a pseudo terminal")
7606 (description
7607 "This package provides a Python library used to launch a subprocess in a
7608 pseudo terminal (pty), and interact with both the process and its pty.")
7609 (license license:isc)))
7610
7611 (define-public python2-ptyprocess
7612 (package-with-python2 python-ptyprocess))
7613
7614 (define-public python-cram
7615 (package
7616 (name "python-cram")
7617 (version "0.7")
7618 (home-page "https://bitheap.org/cram/")
7619 (source (origin
7620 (method url-fetch)
7621 (uri (list (string-append home-page "cram-"
7622 version ".tar.gz")
7623 (pypi-uri "cram" version)))
7624 (sha256
7625 (base32
7626 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7627 (arguments
7628 '(#:phases
7629 (modify-phases %standard-phases
7630 (add-after 'unpack 'patch-source
7631 (lambda _
7632 (substitute* (find-files "cram" ".*\\.py$")
7633 ;; Replace default shell path.
7634 (("/bin/sh") (which "sh")))
7635 (substitute* (find-files "tests" ".*\\.t$")
7636 (("md5") "md5sum")
7637 (("/bin/bash") (which "bash"))
7638 (("/bin/sh") (which "sh")))
7639 (substitute* "cram/_test.py"
7640 ;; This hack works around a bug triggered by substituting
7641 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7642 ;; "cram -h", which breaks the output at 80 characters. This
7643 ;; causes the line showing the default shell to break into two
7644 ;; lines, but the test expects a single line...
7645 (("env\\['COLUMNS'\\] = '80'")
7646 "env['COLUMNS'] = '160'"))
7647
7648 (substitute* "Makefile"
7649 ;; Recent versions of python-coverage have caused the test
7650 ;; coverage to decrease (as of version 0.7). Allow that.
7651 (("--fail-under=100")
7652 "--fail-under=90"))
7653
7654 #t))
7655 (replace 'check
7656 ;; The test phase uses the built library and executable.
7657 (lambda* (#:key inputs outputs #:allow-other-keys)
7658 (add-installed-pythonpath inputs outputs)
7659 (setenv "PATH" (string-append (getenv "PATH") ":"
7660 (assoc-ref outputs "out") "/bin"))
7661 (invoke "make" "test"))))))
7662 (build-system python-build-system)
7663 (native-inputs
7664 `(("python-coverage" ,python-coverage)
7665 ("which" ,which)))
7666 (synopsis "Simple testing framework for command line applications")
7667 (description
7668 "Cram is a functional testing framework for command line applications.
7669 Cram tests look like snippets of interactive shell sessions. Cram runs each
7670 command and compares the command output in the test with the command’s actual
7671 output.")
7672 (license license:gpl2+)))
7673
7674 (define-public python2-cram
7675 (package-with-python2 python-cram))
7676
7677 (define-public python-straight-plugin
7678 (package
7679 (name "python-straight-plugin")
7680 (version "1.4.1")
7681 (source
7682 (origin
7683 (method url-fetch)
7684 (uri (pypi-uri "straight.plugin" version))
7685 (sha256
7686 (base32
7687 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7688 (build-system python-build-system)
7689 (home-page "https://github.com/ironfroggy/straight.plugin")
7690 (synopsis "Simple namespaced plugin facility")
7691 (description "Straight Plugin provides a type of plugin you can create from
7692 almost any existing Python modules, and an easy way for outside developers to
7693 add functionality and customization to your projects with their own plugins.")
7694 (license license:expat)))
7695
7696 (define-public python2-straight-plugin
7697 (package-with-python2 python-straight-plugin))
7698
7699 (define-public python-fonttools
7700 (package
7701 (name "python-fonttools")
7702 (version "4.6.0")
7703 (source (origin
7704 (method url-fetch)
7705 (uri (pypi-uri "fonttools" version ".zip"))
7706 (sha256
7707 (base32
7708 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
7709 (build-system python-build-system)
7710 (native-inputs
7711 `(("unzip" ,unzip)
7712 ("python-pytest" ,python-pytest)
7713 ("python-pytest-runner" ,python-pytest-runner)))
7714 (home-page "https://github.com/fonttools/fonttools")
7715 (synopsis "Tools to manipulate font files")
7716 (description
7717 "FontTools/TTX is a library to manipulate font files from Python. It
7718 supports reading and writing of TrueType/OpenType fonts, reading and writing
7719 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7720 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7721 from an XML-based format.")
7722 (license license:expat)))
7723
7724 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
7725 (define-public python2-fonttools
7726 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
7727 (package/inherit
7728 base
7729 (version "3.44.0")
7730 (source (origin
7731 (method url-fetch)
7732 (uri (pypi-uri "fonttools" version ".zip"))
7733 (sha256
7734 (base32
7735 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
7736
7737 (define-public python-ly
7738 (package
7739 (name "python-ly")
7740 (version "0.9.5")
7741 (source
7742 (origin
7743 (method url-fetch)
7744 (uri (pypi-uri name version))
7745 (sha256
7746 (base32
7747 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7748 (build-system python-build-system)
7749 (arguments
7750 ;; FIXME: Some tests need network access.
7751 '(#:tests? #f))
7752 (synopsis "Tool and library for manipulating LilyPond files")
7753 (description "This package provides a Python library to parse, manipulate
7754 or create documents in LilyPond format. A command line program ly is also
7755 provided that can be used to do various manipulations with LilyPond files.")
7756 (home-page "https://pypi.org/project/python-ly/")
7757 (license license:gpl2+)))
7758
7759 (define-public python-appdirs
7760 (package
7761 (name "python-appdirs")
7762 (version "1.4.3")
7763 (source
7764 (origin
7765 (method url-fetch)
7766 (uri (pypi-uri "appdirs" version))
7767 (sha256
7768 (base32
7769 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7770 (build-system python-build-system)
7771 (home-page "https://github.com/ActiveState/appdirs")
7772 (synopsis
7773 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7774 (description
7775 "This module provides a portable way of finding out where user data
7776 should be stored on various operating systems.")
7777 (license license:expat)))
7778
7779 (define-public python2-appdirs
7780 (package-with-python2 python-appdirs))
7781
7782 (define-public python-llfuse
7783 (package
7784 (name "python-llfuse")
7785 (version "1.3.5")
7786 (source (origin
7787 (method url-fetch)
7788 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7789 (sha256
7790 (base32
7791 "1n7a90jww3ly49fm7x27m3xw3la3qfrnykcakga654g6kcyjlhbf"))))
7792 (build-system python-build-system)
7793 (inputs
7794 `(("fuse" ,fuse)
7795 ("attr" ,attr)))
7796 (native-inputs
7797 `(("pkg-config" ,pkg-config)))
7798 (synopsis "Python bindings for FUSE")
7799 (description
7800 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7801 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7802 (license license:lgpl2.0+)
7803 (properties `((python2-variant . ,(delay python2-llfuse))))))
7804
7805 (define-public python2-llfuse
7806 (package (inherit (package-with-python2
7807 (strip-python2-variant python-llfuse)))
7808 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7809
7810 ;; For attic-0.16
7811 (define-public python-llfuse-0.41
7812 (package (inherit python-llfuse)
7813 (version "0.41.1")
7814 (source (origin
7815 (method url-fetch)
7816 (uri (string-append
7817 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
7818 "llfuse-" version ".tar.bz2"))
7819 (sha256
7820 (base32
7821 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
7822 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
7823 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
7824 (license (list license:expat license:lgpl2.0+))))
7825
7826 (define-public python-msgpack
7827 (package
7828 (name "python-msgpack")
7829 (version "1.0.0")
7830 (source (origin
7831 (method url-fetch)
7832 (uri (pypi-uri "msgpack" version))
7833 (sha256
7834 (base32
7835 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
7836 (build-system python-build-system)
7837 (arguments
7838 `(#:modules ((guix build utils)
7839 (guix build python-build-system)
7840 (ice-9 ftw)
7841 (srfi srfi-1)
7842 (srfi srfi-26))
7843 #:phases
7844 (modify-phases %standard-phases
7845 (replace 'check
7846 (lambda _
7847 (let ((cwd (getcwd)))
7848 (setenv "PYTHONPATH"
7849 (string-append cwd "/build/"
7850 (find (cut string-prefix? "lib" <>)
7851 (scandir (string-append cwd "/build")))
7852 ":"
7853 (getenv "PYTHONPATH")))
7854 (invoke "pytest" "-v" "test")))))))
7855 (native-inputs
7856 `(("python-pytest" ,python-pytest)))
7857 (synopsis "MessagePack (de)serializer")
7858 (description "MessagePack is a fast, compact binary serialization format,
7859 suitable for similar data to JSON. This package provides CPython bindings for
7860 reading and writing MessagePack data.")
7861 (home-page "https://pypi.org/project/msgpack/")
7862 (license license:asl2.0)))
7863
7864 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
7865 ;; release 0.5. Some packages like borg still call it by the old name for now.
7866 ;; <https://bugs.gnu.org/30662>
7867 (define-public python-msgpack-transitional
7868 (package
7869 (inherit python-msgpack)
7870 (name "python-msgpack-transitional")
7871 (version "0.5.6")
7872 (source (origin
7873 (method url-fetch)
7874 (uri (pypi-uri "msgpack" version))
7875 (sha256
7876 (base32
7877 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
7878 (arguments
7879 (substitute-keyword-arguments (package-arguments python-msgpack)
7880 ((#:phases phases)
7881 `(modify-phases ,phases
7882 (add-after 'unpack 'configure-transitional
7883 (lambda _
7884 ;; Keep using the old name.
7885 (substitute* "setup.py"
7886 (("TRANSITIONAL = False")
7887 "TRANSITIONAL = 1"))
7888 #t))))))))
7889
7890 (define-public python2-msgpack
7891 (package-with-python2 python-msgpack))
7892
7893 (define-public python-netaddr
7894 (package
7895 (name "python-netaddr")
7896 (version "0.7.19")
7897 (source
7898 (origin
7899 (method url-fetch)
7900 (uri (pypi-uri "netaddr" version))
7901 (sha256
7902 (base32
7903 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
7904 (build-system python-build-system)
7905 (arguments `(#:tests? #f)) ;; No tests.
7906 (home-page "https://github.com/drkjam/netaddr/")
7907 (synopsis "Pythonic manipulation of network addresses")
7908 (description
7909 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7910 and MAC network addresses.")
7911 (license license:bsd-3)))
7912
7913 (define-public python2-netaddr
7914 (package-with-python2 python-netaddr))
7915
7916 (define-public python2-pyroute2
7917 (package
7918 (name "python2-pyroute2")
7919 (version "0.5.6")
7920 (source
7921 (origin
7922 (method url-fetch)
7923 (uri (pypi-uri "pyroute2" version))
7924 (sha256
7925 (base32
7926 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
7927 (build-system python-build-system)
7928 (arguments
7929 `(#:python ,python-2)) ;Python 3.x is not supported
7930 (home-page "https://github.com/svinota/pyroute2")
7931 (synopsis "Python netlink library")
7932 (description
7933 "Pyroute2 is a pure Python netlink library with minimal dependencies.
7934 Supported netlink families and protocols include:
7935 @itemize
7936 @item rtnl, network settings - addresses, routes, traffic controls
7937 @item nfnetlink - netfilter API: ipset, nftables, ...
7938 @item ipq - simplest userspace packet filtering, iptables QUEUE target
7939 @item devlink - manage and monitor devlink-enabled hardware
7940 @item generic - generic netlink families
7941 @itemize
7942 @item nl80211 - wireless functions API (basic support)
7943 @item taskstats - extended process statistics
7944 @item acpi_events - ACPI events monitoring
7945 @item thermal_events - thermal events monitoring
7946 @item VFS_DQUOT - disk quota events monitoring
7947 @end itemize
7948 @end itemize")
7949 (license license:gpl2+)))
7950
7951 (define-public python-wrapt
7952 (package
7953 (name "python-wrapt")
7954 (version "1.11.2")
7955 (source
7956 (origin
7957 (method url-fetch)
7958 (uri (pypi-uri "wrapt" version))
7959 (sha256
7960 (base32
7961 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
7962 (build-system python-build-system)
7963 (arguments
7964 ;; Tests are not included in the tarball, they are only available in the
7965 ;; git repository.
7966 `(#:tests? #f))
7967 (home-page "https://github.com/GrahamDumpleton/wrapt")
7968 (synopsis "Module for decorators, wrappers and monkey patching")
7969 (description
7970 "The aim of the wrapt module is to provide a transparent object proxy for
7971 Python, which can be used as the basis for the construction of function
7972 wrappers and decorator functions.")
7973 (license license:bsd-2)))
7974
7975 (define-public python2-wrapt
7976 (package-with-python2 python-wrapt))
7977
7978 (define-public python-xlrd
7979 (package
7980 (name "python-xlrd")
7981 (version "1.2.0")
7982 (source (origin
7983 (method url-fetch)
7984 (uri (pypi-uri "xlrd" version))
7985 (sha256
7986 (base32
7987 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
7988 (build-system python-build-system)
7989 (arguments
7990 `(#:phases
7991 (modify-phases %standard-phases
7992 ;; Some tests depend on writing a temporary file to the user's home
7993 ;; directory.
7994 (add-after 'unpack 'fix-tests
7995 (lambda _
7996 (delete-file "tests/test_open_workbook.py")
7997 #t)))))
7998 (home-page "http://www.python-excel.org/")
7999 (synopsis "Library for extracting data from Excel files")
8000 (description "This package provides a library to extract data from
8001 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8002 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8003 Unicode-aware. It is not intended as an end-user tool.")
8004 (license license:bsd-3)))
8005
8006 (define-public python2-xlrd
8007 (package-with-python2 python-xlrd))
8008
8009 (define-public python-prettytable
8010 (package
8011 (name "python-prettytable")
8012 (version "0.7.2")
8013 (source
8014 (origin
8015 (method url-fetch)
8016 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8017 (sha256
8018 (base32
8019 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8020 (build-system python-build-system)
8021 (home-page "https://code.google.com/archive/p/prettytable/")
8022 (synopsis "Display tabular data in an ASCII table format")
8023 (description
8024 "A library designed to represent tabular data in visually appealing ASCII
8025 tables. PrettyTable allows for selection of which columns are to be printed,
8026 independent alignment of columns (left or right justified or centred) and
8027 printing of sub-tables by specifying a row range.")
8028 (license license:bsd-3)))
8029
8030 (define-public python2-prettytable
8031 (package-with-python2 python-prettytable))
8032
8033 (define-public python-tables
8034 (package
8035 (name "python-tables")
8036 (version "3.6.1")
8037 (source
8038 (origin
8039 (method url-fetch)
8040 (uri (pypi-uri "tables" version))
8041 (sha256
8042 (base32
8043 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8044 (modules '((guix build utils)))
8045 (snippet
8046 '(begin
8047 ;; Remove pre-compiled .pyc files from source.
8048 (for-each delete-file-recursively
8049 (find-files "." "__pycache__" #:directories? #t))
8050 (for-each delete-file (find-files "." "\\.pyc$"))
8051 #t))))
8052 (build-system python-build-system)
8053 (arguments
8054 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8055 ;; or "check", so we must override the build and check phases.
8056 #:phases
8057 (modify-phases %standard-phases
8058 (add-after 'unpack 'use-gcc
8059 (lambda _
8060 (substitute* "setup.py"
8061 (("^( +)compiler = new_compiler\\(\\)" line indent)
8062 (string-append line
8063 "\n"
8064 indent
8065 "compiler.set_executables(compiler='gcc',"
8066 "compiler_so='gcc',"
8067 "linker_exe='gcc',"
8068 "linker_so='gcc -shared')")))
8069 #t))
8070 (add-after 'unpack 'disable-tuning
8071 (lambda _
8072 (substitute* "setup.py"
8073 (("cpu_flags = .*")
8074 "cpu_flags = ['sse2']\n"))
8075 #t))
8076 (replace 'build
8077 (lambda* (#:key inputs #:allow-other-keys)
8078 (invoke "python" "setup.py" "build"
8079 (string-append "--hdf5="
8080 (assoc-ref inputs "hdf5")))))
8081 (replace 'check
8082 (lambda* (#:key inputs #:allow-other-keys)
8083 (invoke "python" "setup.py" "check"
8084 (string-append "--hdf5="
8085 (assoc-ref inputs "hdf5"))))))))
8086 (propagated-inputs
8087 `(("python-numexpr" ,python-numexpr)
8088 ("python-numpy" ,python-numpy)))
8089 (native-inputs
8090 `(("python-cython" ,python-cython)
8091 ("pkg-config" ,pkg-config)))
8092 (inputs
8093 `(("hdf5" ,hdf5-1.10)
8094 ("bzip2" ,bzip2)
8095 ("zlib" ,zlib)))
8096 (home-page "https://www.pytables.org/")
8097 (synopsis "Hierarchical datasets for Python")
8098 (description "PyTables is a package for managing hierarchical datasets and
8099 designed to efficiently cope with extremely large amounts of data.")
8100 (license license:bsd-3)))
8101
8102 (define-public python2-tables
8103 (package-with-python2 python-tables))
8104
8105 (define-public python-pytest-black
8106 (package
8107 (name "python-pytest-black")
8108 (version "0.3.8")
8109 (source
8110 (origin
8111 (method url-fetch)
8112 (uri (pypi-uri "pytest-black" version))
8113 (sha256
8114 (base32
8115 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8116 (build-system python-build-system)
8117 (propagated-inputs
8118 `(("python-pytest" ,python-pytest)
8119 ("python-black" ,python-black)
8120 ("python-toml" ,python-toml)))
8121 (native-inputs
8122 `(("python-setuptools-scm" ,python-setuptools-scm)))
8123 (home-page "https://github.com/shopkeep/pytest-black")
8124 (synopsis "Pytest plugin to enable format checking with black")
8125 (description
8126 "This package provides a pytest plugin to enable format checking with the
8127 Python code formatter \"black\".")
8128 (license license:expat)))
8129
8130 (define-public python-get-version
8131 (package
8132 (name "python-get-version")
8133 (version "2.1")
8134 (source
8135 (origin
8136 (method url-fetch)
8137 (uri (pypi-uri "get_version" version))
8138 (sha256
8139 (base32
8140 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8141 (build-system python-build-system)
8142 (propagated-inputs
8143 `(("python-pygments" ,python-pygments)
8144 ("python-pytest" ,python-pytest)
8145 ("python-pytest-black" ,python-pytest-black)
8146 ("python-pytest-cov" ,python-pytest-cov)
8147 ("python-setuptools" ,python-setuptools)
8148 ("python-testpath" ,python-testpath)))
8149 (home-page "https://github.com/flying-sheep/get_version")
8150 (synopsis "Version helper in the spirit of versioneer")
8151 (description
8152 "This package provides a version helper that lets you automatically use
8153 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8154 also supports getting the version from Python source distributions or, once
8155 your package is installed, via @code{pkg_resources} (part of
8156 @code{setuptools}).")
8157 (license license:gpl3+)))
8158
8159 (define-public python-legacy-api-wrap
8160 (package
8161 (name "python-legacy-api-wrap")
8162 (version "1.2")
8163 (source
8164 (origin
8165 (method url-fetch)
8166 (uri (pypi-uri "legacy-api-wrap" version))
8167 (sha256
8168 (base32
8169 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8170 (build-system python-build-system)
8171 (propagated-inputs
8172 `(("python-get-version" ,python-get-version)
8173 ("python-pytest" ,python-pytest)
8174 ("python-pytest-black" ,python-pytest-black)
8175 ("python-pytest-cov" ,python-pytest-cov)
8176 ("python-setuptools" ,python-setuptools)))
8177 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8178 (synopsis "Legacy API wrapper")
8179 (description "This module defines a decorator to wrap legacy APIs. The
8180 primary use case is APIs defined before keyword-only parameters existed.")
8181 (license license:gpl3+)))
8182
8183 (define-public python-pyasn1
8184 (package
8185 (name "python-pyasn1")
8186 (version "0.4.8")
8187 (source
8188 (origin
8189 (method url-fetch)
8190 (uri (pypi-uri "pyasn1" version))
8191 (sha256
8192 (base32
8193 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8194 (build-system python-build-system)
8195 (home-page "http://pyasn1.sourceforge.net/")
8196 (synopsis "ASN.1 types and codecs")
8197 (description
8198 "This is an implementation of ASN.1 types and codecs in Python. It is
8199 suitable for a wide range of protocols based on the ASN.1 specification.")
8200 (license license:bsd-2)))
8201
8202 (define-public python2-pyasn1
8203 (package-with-python2 python-pyasn1))
8204
8205 (define-public python-pyasn1-modules
8206 (package
8207 (name "python-pyasn1-modules")
8208 (version "0.2.2")
8209 (source
8210 (origin
8211 (method url-fetch)
8212 (uri (pypi-uri "pyasn1-modules" version))
8213 (sha256
8214 (base32
8215 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8216 (build-system python-build-system)
8217 (propagated-inputs
8218 `(("python-pyasn1" ,python-pyasn1)))
8219 (home-page "https://sourceforge.net/projects/pyasn1/")
8220 (synopsis "ASN.1 codec implementations")
8221 (description
8222 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8223 implementations of ASN.1-based codecs and protocols.")
8224 (license license:bsd-3)))
8225
8226 (define-public python2-pyasn1-modules
8227 (package-with-python2 python-pyasn1-modules))
8228
8229 (define-public python-ipaddress
8230 (package
8231 (name "python-ipaddress")
8232 (version "1.0.22")
8233 (source (origin
8234 (method url-fetch)
8235 (uri (pypi-uri "ipaddress" version))
8236 (sha256
8237 (base32
8238 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8239 (build-system python-build-system)
8240 (home-page "https://github.com/phihag/ipaddress")
8241 (synopsis "IP address manipulation library")
8242 (description
8243 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8244 in Python. This library is used to create, poke at, and manipulate IPv4 and
8245 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8246 module to older versions of Python.")
8247 (license license:psfl)))
8248
8249 (define-public python2-ipaddress
8250 (package-with-python2 python-ipaddress))
8251
8252 (define-public python2-ipaddr
8253 (package
8254 (name "python2-ipaddr")
8255 (version "2.1.11")
8256 (source
8257 (origin
8258 (method url-fetch)
8259 (uri (pypi-uri "ipaddr" version))
8260 (sha256
8261 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8262 (build-system python-build-system)
8263 (arguments
8264 `(#:python ,python-2 ;version 2 only
8265 #:phases
8266 (modify-phases %standard-phases
8267 (replace 'check
8268 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8269 (home-page "https://github.com/google/ipaddr-py")
8270 (synopsis "IP address manipulation library")
8271 (description
8272 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8273 IPv6 addresses and networks.
8274
8275 For new implementations you may prefer to use the standard module
8276 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8277 versions of Python.")
8278 (license license:asl2.0)))
8279
8280 (define-public python-idna
8281 (package
8282 (name "python-idna")
8283 (version "2.8")
8284 (source
8285 (origin
8286 (method url-fetch)
8287 (uri (pypi-uri "idna" version))
8288 (sha256
8289 (base32
8290 "01rlkigdxg17sf9yar1jl8n18ls59367wqh59hnawlyg53vb6my3"))))
8291 (build-system python-build-system)
8292 (home-page "https://github.com/kjd/idna")
8293 (synopsis "Internationalized domain names in applications")
8294 (description
8295 "This is a library to support the Internationalised Domain Names in
8296 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8297 protocol is often referred to as “IDNA2008” and can produce different results
8298 from the earlier standard from 2003. The library is also intended to act as a
8299 suitable drop-in replacement for the “encodings.idna” module that comes with
8300 the Python standard library but currently only supports the older 2003
8301 specification.")
8302 (license license:bsd-4)))
8303
8304 (define-public python-idna-2.7
8305 (package (inherit python-idna)
8306 (version "2.7")
8307 (source (origin
8308 (method url-fetch)
8309 (uri (pypi-uri "idna" version))
8310 (sha256
8311 (base32
8312 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8313
8314
8315 (define-public python2-idna
8316 (package-with-python2 python-idna))
8317
8318 (define-public python-idna-ssl
8319 (package
8320 (name "python-idna-ssl")
8321 (version "1.0.1")
8322 (source
8323 (origin
8324 (method url-fetch)
8325 (uri (pypi-uri "idna-ssl" version))
8326 (sha256
8327 (base32
8328 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8329 (build-system python-build-system)
8330 (arguments
8331 `(#:tests? #f)) ;circular dependency with python-aiohttp
8332 (home-page "https://github.com/aio-libs/idna-ssl")
8333 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8334 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8335 domains support.")
8336 (license license:expat)))
8337
8338 (define-public python-pretend
8339 (package
8340 (name "python-pretend")
8341 (version "1.0.9")
8342 (source
8343 (origin
8344 (method url-fetch)
8345 (uri (pypi-uri "pretend" version))
8346 (sha256
8347 (base32
8348 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8349 (build-system python-build-system)
8350 (home-page "https://github.com/alex/pretend")
8351 (synopsis "Library for stubbing in Python")
8352 (description
8353 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8354 technique for writing tests. You may hear the term mixed up with mocks,
8355 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8356 responses, rather than doing any computation.")
8357 (license license:bsd-3)))
8358
8359 (define-public python2-pretend
8360 (package-with-python2 python-pretend))
8361
8362 (define-public python-pip
8363 (package
8364 (name "python-pip")
8365 (version "20.0.2")
8366 (source
8367 (origin
8368 (method url-fetch)
8369 (uri (pypi-uri "pip" version))
8370 (sha256
8371 (base32
8372 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8373 (build-system python-build-system)
8374 (arguments
8375 '(#:tests? #f)) ; there are no tests in the pypi archive.
8376 (home-page "https://pip.pypa.io/")
8377 (synopsis "Package manager for Python software")
8378 (description
8379 "Pip is a package manager for Python software, that finds packages on the
8380 Python Package Index (PyPI).")
8381 (license license:expat)))
8382
8383 (define-public python2-pip
8384 (package-with-python2 python-pip))
8385
8386 (define-public python-tlsh
8387 (package
8388 (name "python-tlsh")
8389 (version "3.4.5")
8390 (home-page "https://github.com/trendmicro/tlsh")
8391 (source
8392 (origin
8393 (method git-fetch)
8394 (uri (git-reference
8395 (url "https://github.com/trendmicro/tlsh.git")
8396 (commit (string-append "v" version))))
8397 (file-name (git-file-name name version))
8398 (sha256
8399 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8400 (build-system cmake-build-system)
8401 (arguments
8402 '(#:out-of-source? #f
8403 #:phases (modify-phases %standard-phases
8404 (replace
8405 'install
8406 (lambda* (#:key outputs #:allow-other-keys)
8407 ;; Build and install the Python bindings. The underlying
8408 ;; C++ library is apparently not meant to be installed.
8409 (let ((out (assoc-ref outputs "out")))
8410 (with-directory-excursion "py_ext"
8411 (and (system* "python" "setup.py" "build")
8412 (system* "python" "setup.py" "install"
8413 (string-append "--prefix=" out))))))))))
8414 (inputs `(("python" ,python-wrapper))) ;for the bindings
8415 (synopsis "Fuzzy matching library for Python")
8416 (description
8417 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8418 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8419 value which can be used for similarity comparisons. Similar objects have
8420 similar hash values, which allows for the detection of similar objects by
8421 comparing their hash values. The byte stream should have a sufficient amount
8422 of complexity; for example, a byte stream of identical bytes will not generate
8423 a hash value.")
8424 (license license:asl2.0)))
8425
8426 (define-public python2-tlsh
8427 (package
8428 (inherit python-tlsh)
8429 (name "python2-tlsh")
8430 (inputs `(("python" ,python-2)))))
8431
8432 (define-public python-termcolor
8433 (package
8434 (name "python-termcolor")
8435 (version "1.1.0")
8436 (source
8437 (origin
8438 (method url-fetch)
8439 (uri (pypi-uri "termcolor" version))
8440 (sha256
8441 (base32
8442 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8443 (build-system python-build-system)
8444 (arguments
8445 ;; There are no tests.
8446 `(#:tests? #f))
8447 (home-page "https://pypi.org/project/termcolor/")
8448 (synopsis "ANSII Color formatting for terminal output")
8449 (description
8450 "This package provides ANSII Color formatting for output in terminals.")
8451 (license license:expat)))
8452
8453 (define-public python2-termcolor
8454 (package-with-python2 python-termcolor))
8455
8456 (define-public python-libarchive-c
8457 (package
8458 (name "python-libarchive-c")
8459 (version "2.9")
8460 (source (origin
8461 (method url-fetch)
8462 (uri (pypi-uri "libarchive-c" version))
8463 (sha256
8464 (base32
8465 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8466 (build-system python-build-system)
8467 (arguments
8468 '(#:phases (modify-phases %standard-phases
8469 (add-before
8470 'build 'reference-libarchive
8471 (lambda* (#:key inputs #:allow-other-keys)
8472 ;; Retain the absolute file name of libarchive.so.
8473 (let ((libarchive (assoc-ref inputs "libarchive")))
8474 (substitute* "libarchive/ffi.py"
8475 (("find_library\\('archive'\\)")
8476 (string-append "'" libarchive
8477 "/lib/libarchive.so'"))))))
8478 (replace 'check
8479 (lambda _ (invoke "pytest" "-vv"))))))
8480 (native-inputs
8481 `(("python-mock" ,python-mock)
8482 ("python-pytest" ,python-pytest)))
8483 (inputs
8484 `(("libarchive" ,libarchive)))
8485 (home-page "https://github.com/Changaco/python-libarchive-c")
8486 (synopsis "Python interface to libarchive")
8487 (description
8488 "This package provides Python bindings to libarchive, a C library to
8489 access possibly compressed archives in many different formats. It uses
8490 Python's @code{ctypes} foreign function interface (FFI).")
8491 (license license:lgpl2.0+)))
8492
8493 (define-public python2-libarchive-c
8494 (package-with-python2 python-libarchive-c))
8495
8496 (define-public python-file
8497 (package
8498 (inherit file)
8499 (name "python-file")
8500 (build-system python-build-system)
8501 (arguments
8502 '(#:tests? #f ;no tests
8503 #:configure-flags '("--single-version-externally-managed" "--root=/")
8504 #:phases (modify-phases %standard-phases
8505 (add-before 'build 'change-directory
8506 (lambda _
8507 (chdir "python")
8508 #t))
8509 (add-before 'build 'set-library-file-name
8510 (lambda* (#:key inputs #:allow-other-keys)
8511 (let ((file (assoc-ref inputs "file")))
8512 (substitute* "magic.py"
8513 (("find_library\\('magic'\\)")
8514 (string-append "'" file "/lib/libmagic.so'")))
8515 #t))))))
8516 (inputs `(("file" ,file)))
8517 (native-inputs (if (%current-target-system)
8518 `(("self" ,this-package))
8519 '()))
8520 (synopsis "Python bindings to the libmagic file type guesser. Note that
8521 this module and the python-magic module both provide a \"magic.py\" file;
8522 these two modules, which are different and were developed separately, both
8523 serve the same purpose: provide Python bindings for libmagic.")))
8524
8525 (define-public python2-file
8526 (package-with-python2 python-file))
8527
8528 (define-public python-debian
8529 (package
8530 (name "python-debian")
8531 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8532 (version "0.1.36")
8533 (source
8534 (origin
8535 ;; Use git-fetch, as pypi doesn't include test suite.
8536 (method git-fetch)
8537 (uri (git-reference
8538 (url home-page)
8539 (commit version)))
8540 (file-name (git-file-name name version))
8541 (sha256
8542 (base32
8543 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8544 (build-system python-build-system)
8545 (arguments
8546 `(#:phases (modify-phases %standard-phases
8547 (add-after 'unpack 'remove-debian-specific-tests
8548 ;; python-apt, apt and dpkg are not yet available in guix,
8549 ;; and these tests heavily depend on them.
8550 (lambda _
8551 (delete-file "lib/debian/tests/test_deb822.py")
8552 (delete-file "lib/debian/tests/test_debfile.py")
8553 #t)))))
8554 (propagated-inputs
8555 `(("python-six" ,python-six)
8556 ("python-chardet" ,python-chardet)))
8557 (synopsis "Debian package related modules")
8558 (description
8559 ;; XXX: Use @enumerate instead of @itemize to work around
8560 ;; <http://bugs.gnu.org/21772>.
8561 "This package provides Python modules that abstract many formats of
8562 Debian-related files, such as:
8563
8564 @enumerate
8565 @item Debtags information;
8566 @item @file{debian/changelog} files;
8567 @item packages files, pdiffs;
8568 @item control files of single or multiple RFC822-style paragraphs---e.g.
8569 @file{debian/control}, @file{.changes}, @file{.dsc};
8570 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8571 contained files and meta-information.
8572 @end enumerate\n")
8573
8574 ;; Modules are either GPLv2+ or GPLv3+.
8575 (license license:gpl3+)))
8576
8577 (define-public python-nbformat
8578 (package
8579 (name "python-nbformat")
8580 (version "4.4.0")
8581 (source
8582 (origin
8583 (method url-fetch)
8584 (uri (pypi-uri "nbformat" version))
8585 (sha256
8586 (base32
8587 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8588 (build-system python-build-system)
8589 (arguments `(#:tests? #f)) ; no test target
8590 (propagated-inputs
8591 `(("python-ipython-genutils" ,python-ipython-genutils)
8592 ("python-jsonschema" ,python-jsonschema)
8593 ("python-jupyter-core" ,python-jupyter-core)
8594 ("python-traitlets" ,python-traitlets)))
8595 (home-page "http://jupyter.org")
8596 (synopsis "Jupyter Notebook format")
8597 (description "This package provides the reference implementation of the
8598 Jupyter Notebook format and Python APIs for working with notebooks.")
8599 (license license:bsd-3)))
8600
8601 (define-public python2-nbformat
8602 (package-with-python2 python-nbformat))
8603
8604 (define-public python-bleach
8605 (package
8606 (name "python-bleach")
8607 (version "3.1.3")
8608 (source
8609 (origin
8610 (method url-fetch)
8611 (uri (pypi-uri "bleach" version))
8612 (sha256
8613 (base32
8614 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8615 (build-system python-build-system)
8616 (propagated-inputs
8617 `(("python-webencodings" ,python-webencodings)
8618 ("python-six" ,python-six)))
8619 (native-inputs
8620 `(("python-datrie" ,python-datrie)
8621 ("python-genshi" ,python-genshi)
8622 ("python-lxml" ,python-lxml)
8623 ("python-pytest" ,python-pytest)))
8624 (home-page "https://github.com/mozilla/bleach")
8625 (synopsis "Whitelist-based HTML-sanitizing tool")
8626 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8627 (license license:asl2.0)))
8628
8629 (define-public python2-bleach
8630 (package-with-python2 python-bleach))
8631
8632 (define-public python-entrypoints
8633 (package
8634 (name "python-entrypoints")
8635 (version "0.3")
8636 (source
8637 (origin
8638 (method url-fetch)
8639 (uri (pypi-uri "entrypoints" version))
8640 (sha256
8641 (base32
8642 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8643 (build-system python-build-system)
8644 ;; The package does not come with a setup.py file, so we have to generate
8645 ;; one ourselves.
8646 (arguments
8647 `(#:tests? #f
8648 #:phases
8649 (modify-phases %standard-phases
8650 (add-after 'unpack 'create-setup.py
8651 (lambda _
8652 (call-with-output-file "setup.py"
8653 (lambda (port)
8654 (format port "\
8655 from setuptools import setup
8656 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8657 " ,version))))))))
8658 (home-page "https://github.com/takluyver/entrypoints")
8659 (synopsis "Discover and load entry points from installed Python packages")
8660 (description "Entry points are a way for Python packages to advertise
8661 objects with some common interface. The most common examples are
8662 @code{console_scripts} entry points, which define shell commands by
8663 identifying a Python function to run. The @code{entrypoints} module contains
8664 functions to find and load entry points.")
8665 (license license:expat)))
8666
8667 (define-public python2-entrypoints
8668 (package-with-python2 python-entrypoints))
8669
8670 (define-public python-nbconvert
8671 (package
8672 (name "python-nbconvert")
8673 (version "5.0.0b1")
8674 (source
8675 (origin
8676 (method url-fetch)
8677 (uri (pypi-uri "nbconvert" version))
8678 (sha256
8679 (base32
8680 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8681 (build-system python-build-system)
8682 (arguments
8683 `(;; The "bdist_egg" target is disabled by default, causing the installation
8684 ;; to fail.
8685 #:configure-flags (list "bdist_egg")
8686 ;; FIXME: 5 failures, 40 errors.
8687 #:tests? #f))
8688 ;; #:phases
8689 ;; (modify-phases %standard-phases
8690 ;; (replace 'check
8691 ;; (lambda _
8692 ;; (zero? (system* "py.test" "-v")))))
8693 (native-inputs
8694 `(("python-pytest" ,python-pytest)))
8695 (propagated-inputs
8696 `(("python-bleach" ,python-bleach)
8697 ("python-entrypoints" ,python-entrypoints)
8698 ("python-jinja2" ,python-jinja2)
8699 ("python-jupyter-core" ,python-jupyter-core)
8700 ("python-mistune" ,python-mistune)
8701 ("python-nbformat" ,python-nbformat)
8702 ("python-pygments" ,python-pygments)
8703 ("python-traitlets" ,python-traitlets)))
8704 (home-page "http://jupyter.org")
8705 (synopsis "Converting Jupyter Notebooks")
8706 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8707 notebooks to various other formats via Jinja templates. It allows you to
8708 convert an @code{.ipynb} notebook file into various static formats including:
8709
8710 @enumerate
8711 @item HTML
8712 @item LaTeX
8713 @item PDF
8714 @item Reveal JS
8715 @item Markdown (md)
8716 @item ReStructured Text (rst)
8717 @item executable script
8718 @end enumerate\n")
8719 (license license:bsd-3)))
8720
8721 (define-public python2-nbconvert
8722 (package-with-python2 python-nbconvert))
8723
8724 (define-public python-notebook
8725 (package
8726 (name "python-notebook")
8727 (version "5.7.4")
8728 (source (origin
8729 (method url-fetch)
8730 (uri (pypi-uri "notebook" version))
8731 (sha256
8732 (base32
8733 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8734 (build-system python-build-system)
8735 (arguments
8736 `(#:phases
8737 (modify-phases %standard-phases
8738 (replace 'check
8739 (lambda _
8740 ;; These tests require a browser
8741 (delete-file-recursively "notebook/tests/selenium")
8742 ;; Some tests need HOME
8743 (setenv "HOME" "/tmp")
8744 ;; This file contains "warningfilters", which are not supported
8745 ;; by this version of nose.
8746 (delete-file "setup.cfg")
8747 (with-directory-excursion "/tmp"
8748 (invoke "nosetests" "-v"))
8749 #t)))))
8750 (propagated-inputs
8751 `(("python-jupyter-core" ,python-jupyter-core)
8752 ("python-nbformat" ,python-nbformat)
8753 ("python-nbconvert" ,python-nbconvert)
8754 ("python-prometheus-client" ,python-prometheus-client)
8755 ("python-send2trash" ,python-send2trash)
8756 ("python-terminado" ,python-terminado)))
8757 (native-inputs
8758 `(("python-nose" ,python-nose)
8759 ("python-sphinx" ,python-sphinx)
8760 ("python-requests" ,python-requests)))
8761 (home-page "http://jupyter.org/")
8762 (synopsis "Web-based notebook environment for interactive computing")
8763 (description
8764 "The Jupyter HTML notebook is a web-based notebook environment for
8765 interactive computing.")
8766 (properties `((python2-variant . ,(delay python2-notebook))))
8767 (license license:bsd-3)))
8768
8769 (define-public python2-notebook
8770 (let ((base (package-with-python2
8771 (strip-python2-variant python-notebook))))
8772 (package (inherit base)
8773 (native-inputs
8774 `(("python2-mock" ,python2-mock)
8775 ,@(package-native-inputs base)))
8776 (arguments
8777 (substitute-keyword-arguments (package-arguments base)
8778 ((#:phases phases)
8779 `(modify-phases ,phases
8780 (add-before 'check 'disable-test-case
8781 ;; The test requires network access to localhost. Curiously it
8782 ;; fails with Python 2 only. Simply make the test-case return
8783 ;; immediately.
8784 (lambda _
8785 (substitute*
8786 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8787 (("formats = self.nbconvert_api") "return #")))))))))))
8788
8789 (define-public python-widgetsnbextension
8790 (package
8791 (name "python-widgetsnbextension")
8792 (version "3.4.2")
8793 (source
8794 (origin
8795 (method url-fetch)
8796 (uri (pypi-uri "widgetsnbextension" version))
8797 (sha256
8798 (base32
8799 "0rc2nivdy7k4m3vljx7wdh2jh11djapcgwhvzlbs0isl8gl8nqgs"))))
8800 (build-system python-build-system)
8801 (propagated-inputs
8802 `(("python-ipykernel" ,python-ipykernel)
8803 ("python-notebook" ,python-notebook)))
8804 (native-inputs
8805 `(("python-certifi" ,python-certifi)
8806 ("python-nose" ,python-nose)))
8807 (home-page "https://ipython.org")
8808 (synopsis "IPython HTML widgets for Jupyter")
8809 (description "This package provides interactive HTML widgets for Jupyter
8810 notebooks.")
8811 (license license:bsd-3)))
8812
8813 (define-public python2-widgetsnbextension
8814 (package-with-python2 python-widgetsnbextension))
8815
8816 (define-public python-ipywidgets
8817 (package
8818 (name "python-ipywidgets")
8819 (version "5.2.2")
8820 (source
8821 (origin
8822 (method url-fetch)
8823 (uri (pypi-uri "ipywidgets" version))
8824 (sha256
8825 (base32
8826 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
8827 (build-system python-build-system)
8828 (propagated-inputs
8829 `(("python-ipython" ,python-ipython)
8830 ("python-traitlets" ,python-traitlets)
8831 ("python-widgetsnbextension" ,python-widgetsnbextension)))
8832 (native-inputs
8833 `(("python-nose" ,python-nose)
8834 ("python-pytest" ,python-pytest)))
8835 (home-page "https://ipython.org")
8836 (synopsis "IPython HTML widgets for Jupyter")
8837 (description "Ipywidgets are interactive HTML widgets for Jupyter
8838 notebooks and the IPython kernel. Notebooks come alive when interactive
8839 widgets are used. Users gain control of their data and can visualize changes
8840 in the data.")
8841 (license license:bsd-3)))
8842
8843 (define-public python2-ipywidgets
8844 (package-with-python2 python-ipywidgets))
8845
8846 (define-public python-jupyter-console
8847 (package
8848 (name "python-jupyter-console")
8849 (version "6.0.0")
8850 (source
8851 (origin
8852 (method url-fetch)
8853 (uri (pypi-uri "jupyter_console" version))
8854 (sha256
8855 (base32
8856 "1xdjw11cppf1fxvwkw2bk13ckkwas3bdah8baingn9296mvfi31h"))))
8857 (build-system python-build-system)
8858 (propagated-inputs
8859 `(("python-ipykernel" ,python-ipykernel)
8860 ("python-jupyter-client" ,python-jupyter-client)
8861 ("python-prompt-toolkit" ,python-prompt-toolkit)
8862 ("python-pygments" ,python-pygments)))
8863 (native-inputs
8864 `(("python-nose" ,python-nose)))
8865 (home-page "https://jupyter.org")
8866 (synopsis "Jupyter terminal console")
8867 (description "This package provides a terminal-based console frontend for
8868 Jupyter kernels. It also allows for console-based interaction with non-Python
8869 Jupyter kernels such as IJulia and IRKernel.")
8870 (properties `((python2-variant . ,(delay python2-jupyter-console))))
8871 (license license:bsd-3)))
8872
8873 (define-public python2-jupyter-console
8874 (package
8875 (name "python2-jupyter-console")
8876 (version "5.2.0")
8877 (source
8878 (origin
8879 (method url-fetch)
8880 (uri (pypi-uri "jupyter_console" version))
8881 (sha256
8882 (base32
8883 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
8884 (build-system python-build-system)
8885 (arguments
8886 `(#:python ,python-2
8887 #:tests? #f)) ; Tests only run in a TTY.
8888 (propagated-inputs
8889 `(("python2-ipykernel" ,python2-ipykernel)
8890 ("python2-jupyter-client" ,python2-jupyter-client)
8891 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
8892 ("python2-pygments" ,python2-pygments)))
8893 (native-inputs
8894 `(("python2-nose" ,python2-nose)))
8895 (home-page "https://jupyter.org")
8896 (synopsis "Jupyter terminal console")
8897 (description "This package provides a terminal-based console frontend for
8898 Jupyter kernels. It also allows for console-based interaction with non-Python
8899 Jupyter kernels such as IJulia and IRKernel.")
8900 (license license:bsd-3)))
8901
8902 ;; The python-ipython and python-jupyter-console require each other. To get
8903 ;; the functionality in both packages working, strip down the
8904 ;; python-jupyter-console package when using it as an input to python-ipython.
8905 (define python-jupyter-console-minimal
8906 (package
8907 (inherit python-jupyter-console)
8908 (name "python-jupyter-console-minimal")
8909 (arguments
8910 (substitute-keyword-arguments
8911 (package-arguments python-jupyter-console)
8912 ((#:phases phases)
8913 `(modify-phases ,phases
8914 (add-after 'install 'delete-bin
8915 (lambda* (#:key outputs #:allow-other-keys)
8916 ;; Delete the bin files, to avoid conflicts in profiles
8917 ;; where python-ipython and python-jupyter-console are
8918 ;; both present.
8919 (delete-file-recursively
8920 (string-append
8921 (assoc-ref outputs "out") "/bin"))))))))
8922 ;; Remove the python-ipython propagated input, to avoid the cycle
8923 (propagated-inputs
8924 (alist-delete
8925 "python-ipython"
8926 (package-propagated-inputs python-jupyter-console)))))
8927
8928 (define-public python-qtconsole
8929 (package
8930 (name "python-qtconsole")
8931 (version "4.4.3")
8932 (source
8933 (origin
8934 (method url-fetch)
8935 (uri (pypi-uri "qtconsole" version))
8936 (sha256
8937 (base32
8938 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
8939 (build-system python-build-system)
8940 (arguments
8941 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
8942 ;; but we only have the LTS version 5.x. This means that there might be
8943 ;; runtime errors, but since this is a dependency of the Jupyter package,
8944 ;; and Jupyter can be used without the qtconsole we can overlook this for
8945 ;; now.
8946 `(#:tests? #f
8947 #:phases
8948 (modify-phases %standard-phases
8949 (add-before 'check 'pre-check
8950 (lambda _
8951 (setenv "QT_QPA_PLATFORM" "offscreen")
8952 #t)))))
8953 (propagated-inputs
8954 `(("python-ipykernel" ,python-ipykernel)
8955 ("python-ipython" ,python-ipython)))
8956 (native-inputs
8957 `(("python-pytest" ,python-pytest)))
8958 (home-page "http://jupyter.org")
8959 (synopsis "Jupyter Qt console")
8960 (description "This package provides a Qt-based console for Jupyter with
8961 support for rich media output.")
8962 (license license:bsd-3)))
8963
8964 (define-public python-jsbeautifier
8965 (package
8966 (name "python-jsbeautifier")
8967 (version "1.10.2")
8968 (home-page "https://github.com/beautify-web/js-beautify")
8969 (source (origin
8970 (method git-fetch)
8971 (uri (git-reference
8972 (url home-page)
8973 (commit (string-append "v" version))))
8974 (file-name (git-file-name name version))
8975 (sha256
8976 (base32
8977 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
8978 (build-system python-build-system)
8979 (arguments
8980 `(#:phases (modify-phases %standard-phases
8981 (add-after 'unpack 'chdir
8982 (lambda _
8983 ;; The upstream Git repository contains all the code,
8984 ;; but this package only builds the python code.
8985 (chdir "python")
8986 #t))
8987 (add-after 'unpack 'patch-python-six-requirements
8988 (lambda _
8989 (substitute* "python/setup.py"
8990 (("six>=1.12.0")
8991 "six>=1.11.0"))
8992 #t)))))
8993 (propagated-inputs
8994 `(("python-editorconfig" ,python-editorconfig)
8995 ("python-six" ,python-six)))
8996 (native-inputs
8997 `(("python-pytest" ,python-pytest)))
8998 (synopsis "JavaScript unobfuscator and beautifier")
8999 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9000 popular online obfuscators.")
9001 (license license:expat)))
9002
9003 (define-public jupyter
9004 (package
9005 (name "jupyter")
9006 (version "1.0.0")
9007 (source
9008 (origin
9009 (method url-fetch)
9010 (uri (pypi-uri "jupyter" version))
9011 (sha256
9012 (base32
9013 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9014 (build-system python-build-system)
9015 (arguments '(#:tests? #f)) ; there are none.
9016 (propagated-inputs
9017 `(("python-ipykernel" ,python-ipykernel)
9018 ("python-ipywidgets" ,python-ipywidgets)
9019 ("python-jupyter-console" ,python-jupyter-console)
9020 ("python-nbconvert" ,python-nbconvert)
9021 ("python-notebook" ,python-notebook)
9022 ("python-qtconsole" ,python-qtconsole)))
9023 (native-search-paths
9024 (list (search-path-specification
9025 (variable "JUPYTER_PATH")
9026 (files '("share/jupyter")))))
9027 (home-page "https://jupyter.org")
9028 (synopsis "Web application for interactive documents")
9029 (description
9030 "The Jupyter Notebook is a web application that allows you to create and
9031 share documents that contain live code, equations, visualizations and
9032 explanatory text. Uses include: data cleaning and transformation, numerical
9033 simulation, statistical modeling, machine learning and much more.")
9034 (license license:bsd-3)))
9035
9036 (define-public python-chardet
9037 (package
9038 (name "python-chardet")
9039 (version "3.0.4")
9040 (source
9041 (origin
9042 (method url-fetch)
9043 (uri (pypi-uri "chardet" version))
9044 (sha256
9045 (base32
9046 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9047 (native-inputs
9048 `(("python-hypothesis" ,python-hypothesis)
9049 ("python-pytest" ,python-pytest)
9050 ("python-pytest-runner" ,python-pytest-runner)))
9051 (build-system python-build-system)
9052 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9053 (arguments `(#:tests? #f))
9054 (home-page "https://github.com/chardet/chardet")
9055 (synopsis "Universal encoding detector for Python 2 and 3")
9056 (description
9057 "This package provides @code{chardet}, a Python module that can
9058 automatically detect a wide range of file encodings.")
9059 (license license:lgpl2.1+)))
9060
9061 (define-public python2-chardet
9062 (package-with-python2 python-chardet))
9063
9064 (define-public python-docopt
9065 (package
9066 (name "python-docopt")
9067 (version "0.6.2")
9068 (source
9069 (origin
9070 (method git-fetch)
9071 ;; The release on PyPI does not include tests.
9072 (uri (git-reference
9073 (url "https://github.com/docopt/docopt")
9074 (commit version)))
9075 (file-name (git-file-name name version))
9076 (sha256
9077 (base32
9078 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9079 (build-system python-build-system)
9080 (native-inputs
9081 `(("python-pytest" ,python-pytest)))
9082 (arguments
9083 `(#:phases
9084 (modify-phases %standard-phases
9085 (replace 'check
9086 (lambda _ (invoke "py.test"))))))
9087 (home-page "http://docopt.org")
9088 (synopsis "Command-line interface description language for Python")
9089 (description "This library allows the user to define a command-line
9090 interface from a program's help message rather than specifying it
9091 programmatically with command-line parsers like @code{getopt} and
9092 @code{argparse}.")
9093 (license license:expat)))
9094
9095 (define-public python2-docopt
9096 (package-with-python2 python-docopt))
9097
9098 (define-public python-pythondialog
9099 (package
9100 (name "python-pythondialog")
9101 (version "3.4.0")
9102 (source
9103 (origin
9104 (method url-fetch)
9105 (uri (pypi-uri "pythondialog" version))
9106 (sha256
9107 (base32
9108 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9109 (build-system python-build-system)
9110 (arguments
9111 `(#:phases
9112 (modify-phases %standard-phases
9113 (add-after 'unpack 'patch-path
9114 (lambda* (#:key inputs #:allow-other-keys)
9115 (let* ((dialog (assoc-ref inputs "dialog")))
9116 ;; Since this library really wants to grovel the search path, we
9117 ;; must hardcode dialog's store path into it.
9118 (substitute* "dialog.py"
9119 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9120 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9121 #t))))
9122 #:tests? #f)) ; no test suite
9123 (propagated-inputs
9124 `(("dialog" ,dialog)))
9125 (home-page "http://pythondialog.sourceforge.net/")
9126 (synopsis "Python interface to the UNIX dialog utility")
9127 (description "A Python wrapper for the dialog utility. Its purpose is to
9128 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9129 This allows one to make simple text-mode user interfaces on Unix-like systems")
9130 (license license:lgpl2.1)
9131 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9132
9133 (define-public python2-pythondialog
9134 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9135 (package
9136 (inherit base)
9137 (version (package-version python-pythondialog))
9138 (source (origin
9139 (method url-fetch)
9140 (uri (pypi-uri "python2-pythondialog" version))
9141 (sha256
9142 (base32
9143 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9144
9145 (define-public python-configobj
9146 (package
9147 (name "python-configobj")
9148 (version "5.0.6")
9149 (source (origin
9150 (method url-fetch)
9151 (uri (pypi-uri "configobj" version))
9152 (sha256
9153 (base32
9154 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9155 ;; Patch setup.py so it looks for python-setuptools, which is
9156 ;; required to parse the keyword 'install_requires' in setup.py.
9157 (patches (search-patches "python-configobj-setuptools.patch"))))
9158 (build-system python-build-system)
9159 (propagated-inputs
9160 `(("python-six" ,python-six)))
9161 (synopsis "Config file reading, writing and validation")
9162 (description "ConfigObj is a simple but powerful config file reader and
9163 writer: an ini file round tripper. Its main feature is that it is very easy to
9164 use, with a straightforward programmer’s interface and a simple syntax for
9165 config files.")
9166 (home-page "https://github.com/DiffSK/configobj")
9167 (license license:bsd-3)))
9168
9169 (define-public python2-configobj
9170 (package-with-python2 python-configobj))
9171
9172 (define-public python-configargparse
9173 (package
9174 (name "python-configargparse")
9175 (version "0.14.0")
9176 (source (origin
9177 (method url-fetch)
9178 (uri (pypi-uri "ConfigArgParse" version))
9179 (sha256
9180 (base32
9181 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9182 (build-system python-build-system)
9183 (native-inputs
9184 `(("python-pyyaml" ,python-pyyaml)))
9185 (arguments
9186 `(#:phases
9187 (modify-phases %standard-phases
9188 (replace 'check
9189 (lambda _
9190 ;; Bypass setuptools-shim because one test relies on "setup.py"
9191 ;; being the first argument passed to the python call.
9192 ;;
9193 ;; NOTE: Many tests do not run because they rely on Python's
9194 ;; built-in test.test_argparse, but we remove the unit tests from
9195 ;; our Python installation.
9196 (invoke "python" "setup.py" "test"))))))
9197 (synopsis "Replacement for argparse")
9198 (description "A drop-in replacement for argparse that allows options to also
9199 be set via config files and/or environment variables.")
9200 (home-page "https://github.com/bw2/ConfigArgParse")
9201 (license license:expat)))
9202
9203 (define-public python2-configargparse
9204 (package-with-python2 python-configargparse))
9205
9206 (define-public python-argparse-manpage
9207 (package
9208 (name "python-argparse-manpage")
9209 (version "1.1")
9210 (source
9211 (origin
9212 (method url-fetch)
9213 (uri (pypi-uri "argparse-manpage" version))
9214 (sha256
9215 (base32
9216 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9217 (build-system python-build-system)
9218 (home-page "https://github.com/praiskup/argparse-manpage")
9219 (synopsis "Build manual page from Python's ArgumentParser object")
9220 (description
9221 "This package provides tools to build manual pages from Python's
9222 @code{ArgumentParser} object.")
9223 (license license:asl2.0)))
9224
9225 (define-public python-contextlib2
9226 (package
9227 (name "python-contextlib2")
9228 (version "0.6.0.post1")
9229 (source
9230 (origin
9231 (method url-fetch)
9232 (uri (pypi-uri "contextlib2" version))
9233 (sha256
9234 (base32
9235 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9236 (build-system python-build-system)
9237 (home-page "https://contextlib2.readthedocs.org/")
9238 (synopsis "Tools for decorators and context managers")
9239 (description "This module is primarily a backport of the Python
9240 3.2 contextlib to earlier Python versions. Like contextlib, it
9241 provides utilities for common tasks involving decorators and context
9242 managers. It also contains additional features that are not part of
9243 the standard library.")
9244 (properties `((python2-variant . ,(delay python2-contextlib2))))
9245 (license license:psfl)))
9246
9247 (define-public python2-contextlib2
9248 (let ((base (package-with-python2
9249 (strip-python2-variant python-contextlib2))))
9250 (package
9251 (inherit base)
9252 (arguments
9253 (substitute-keyword-arguments (package-arguments base)
9254 ((#:phases phases)
9255 `(modify-phases ,phases
9256 (replace 'check
9257 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9258 (native-inputs
9259 `(("python2-unittest2" ,python2-unittest2))))))
9260
9261 ;; This package is used by python2-pytest via python2-importlib-metadata,
9262 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9263 (define-public python2-contextlib2-bootstrap
9264 (hidden-package
9265 (package/inherit
9266 python2-contextlib2
9267 (name "python2-contextlib2-bootstrap")
9268 (arguments
9269 `(#:tests? #f
9270 ,@(package-arguments python2-contextlib2)))
9271 (native-inputs '()))))
9272
9273 (define-public python-texttable
9274 (package
9275 (name "python-texttable")
9276 (version "1.6.2")
9277 (source
9278 (origin
9279 (method url-fetch)
9280 (uri (pypi-uri "texttable" version))
9281 (sha256
9282 (base32
9283 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9284 (build-system python-build-system)
9285 (arguments
9286 `(#:phases
9287 (modify-phases %standard-phases
9288 (replace 'check
9289 (lambda _ (invoke "pytest" "tests.py"))))))
9290 (native-inputs
9291 `(("python-pytest" ,python-pytest)))
9292 (home-page "https://github.com/foutaise/texttable/")
9293 (synopsis "Python module for creating simple ASCII tables")
9294 (description "Texttable is a Python module for creating simple ASCII
9295 tables.")
9296 (license license:expat)))
9297
9298 (define-public python2-texttable
9299 (package-with-python2 python-texttable))
9300
9301 (define-public python-atomicwrites
9302 (package
9303 (name "python-atomicwrites")
9304 (version "1.3.0")
9305 (source (origin
9306 (method url-fetch)
9307 (uri (pypi-uri "atomicwrites" version))
9308 (sha256
9309 (base32
9310 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9311 (build-system python-build-system)
9312 (synopsis "Atomic file writes in Python")
9313 (description "Library for atomic file writes using platform dependent tools
9314 for atomic file system operations.")
9315 (home-page "https://github.com/untitaker/python-atomicwrites")
9316 (license license:expat)))
9317
9318 (define-public python2-atomicwrites
9319 (package-with-python2 python-atomicwrites))
9320
9321 (define-public python-click-threading
9322 (package
9323 (name "python-click-threading")
9324 (version "0.4.4")
9325 (source (origin
9326 (method url-fetch)
9327 (uri (pypi-uri "click-threading" version))
9328 (sha256
9329 (base32
9330 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9331 (build-system python-build-system)
9332 (propagated-inputs
9333 `(("python-click" ,python-click)))
9334 (synopsis "Utilities for multithreading in Click")
9335 (description "This package provides utilities for multithreading in Click
9336 applications.")
9337 (home-page "https://github.com/click-contrib/click-threading")
9338 (license license:expat)))
9339
9340 (define-public python-click-log
9341 (package
9342 (name "python-click-log")
9343 (version "0.3.2")
9344 (source (origin
9345 (method url-fetch)
9346 (uri (pypi-uri "click-log" version))
9347 (sha256
9348 (base32
9349 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9350 (build-system python-build-system)
9351 (propagated-inputs
9352 `(("python-click" ,python-click)))
9353 (synopsis "Logging for click applications")
9354 (description "This package provides a Python library for logging Click
9355 applications.")
9356 (home-page "https://github.com/click-contrib/click-log")
9357 (license license:expat)))
9358
9359 (define-public python-apipkg
9360 (package
9361 (name "python-apipkg")
9362 (version "1.4")
9363 (source (origin
9364 (method url-fetch)
9365 (uri (pypi-uri "apipkg" version))
9366 (sha256
9367 (base32
9368 "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
9369 (build-system python-build-system)
9370 (native-inputs
9371 `(("python-pytest" ,python-pytest)))
9372 (synopsis "Namespace control and lazy-import mechanism")
9373 (description "With apipkg you can control the exported namespace of a Python
9374 package and greatly reduce the number of imports for your users. It is a small
9375 pure Python module that works on virtually all Python versions.")
9376 (home-page "https://github.com/pytest-dev/apipkg")
9377 (license license:expat)))
9378
9379 (define-public python2-apipkg
9380 (package-with-python2 python-apipkg))
9381
9382 (define-public python-execnet
9383 (package
9384 (name "python-execnet")
9385 (version "1.4.1")
9386 (source (origin
9387 (method url-fetch)
9388 (uri (pypi-uri "execnet" version))
9389 (sha256
9390 (base32
9391 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9392 (build-system python-build-system)
9393 (arguments
9394 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9395 ;; The two test failures are caused by the lack of an `ssh` executable.
9396 ;; The test suite can be run with pytest after the 'install' phase.
9397 #:tests? #f))
9398 (native-inputs
9399 `(("python-pytest" ,python-pytest)
9400 ("python-setuptools-scm" ,python-setuptools-scm)))
9401 (propagated-inputs
9402 `(("python-apipkg" ,python-apipkg)))
9403 (synopsis "Rapid multi-Python deployment")
9404 (description "Execnet provides a share-nothing model with
9405 channel-send/receive communication for distributing execution across many
9406 Python interpreters across version, platform and network barriers. It has a
9407 minimal and fast API targeting the following uses:
9408 @enumerate
9409 @item distribute tasks to (many) local or remote CPUs
9410 @item write and deploy hybrid multi-process applications
9411 @item write scripts to administer multiple environments
9412 @end enumerate")
9413 (home-page "https://codespeak.net/execnet/")
9414 (license license:expat)))
9415
9416 (define-public python2-execnet
9417 (package-with-python2 python-execnet))
9418
9419 (define-public python-icalendar
9420 (package
9421 (name "python-icalendar")
9422 (version "4.0.5")
9423 (source (origin
9424 (method url-fetch)
9425 (uri (pypi-uri "icalendar" version))
9426 (sha256
9427 (base32
9428 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9429 (build-system python-build-system)
9430 (propagated-inputs
9431 `(("python-dateutil" ,python-dateutil)
9432 ("python-pytz" ,python-pytz)))
9433 (synopsis "Python library for parsing iCalendar files")
9434 (description "The icalendar package is a parser/generator of iCalendar
9435 files for use with Python.")
9436 (home-page "https://github.com/collective/icalendar")
9437 (license license:bsd-2)))
9438
9439 (define-public python-args
9440 (package
9441 (name "python-args")
9442 (version "0.1.0")
9443 (source (origin
9444 (method url-fetch)
9445 (uri (pypi-uri "args" version))
9446 (sha256
9447 (base32
9448 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9449 (build-system python-build-system)
9450 (home-page "https://github.com/kennethreitz/args")
9451 (synopsis "Command-line argument parser")
9452 (description
9453 "This library provides a Python module to parse command-line arguments.")
9454 (license license:bsd-3)))
9455
9456 (define-public python2-args
9457 (package-with-python2 python-args))
9458
9459 (define-public python-clint
9460 (package
9461 (name "python-clint")
9462 (version "0.5.1")
9463 (source (origin
9464 (method url-fetch)
9465 (uri (pypi-uri "clint" version))
9466 (sha256
9467 (base32
9468 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9469 (build-system python-build-system)
9470 (arguments
9471 '(#:phases
9472 (modify-phases %standard-phases
9473 (replace 'check
9474 (lambda _ (invoke "py.test" "-v"))))))
9475 (native-inputs
9476 `(("python-pytest" ,python-pytest)))
9477 (propagated-inputs
9478 `(("python-args" ,python-args)))
9479 (home-page "https://github.com/kennethreitz/clint")
9480 (synopsis "Command-line interface tools")
9481 (description
9482 "Clint is a Python module filled with a set of tools for developing
9483 command-line applications, including tools for colored and indented
9484 output, progress bar display, and pipes.")
9485 (license license:isc)))
9486
9487 (define-public python2-clint
9488 (package-with-python2 python-clint))
9489
9490 (define-public python-rply
9491 (package
9492 (name "python-rply")
9493 (version "0.7.5")
9494 (source (origin
9495 (method url-fetch)
9496 (uri (pypi-uri "rply" version))
9497 (sha256
9498 (base32
9499 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9500 (build-system python-build-system)
9501 (propagated-inputs
9502 `(("python-appdirs" ,python-appdirs)))
9503 (home-page "https://github.com/alex/rply")
9504 (synopsis "Parser generator for Python")
9505 (description
9506 "This package provides a pure Python based parser generator, that also
9507 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9508 with a new public API, and RPython support.")
9509 (license license:bsd-3)))
9510
9511 (define-public python2-rply
9512 (package-with-python2 python-rply))
9513
9514 (define-public python-hy
9515 (package
9516 (name "python-hy")
9517 (version "0.18.0")
9518 (source (origin
9519 (method url-fetch)
9520 (uri (pypi-uri "hy" version))
9521 (sha256
9522 (base32
9523 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9524 (build-system python-build-system)
9525 (arguments
9526 '(#:phases
9527 (modify-phases %standard-phases
9528 (add-before 'install 'set-HOME
9529 (lambda _
9530 (setenv "HOME" "/tmp") #t))
9531 (replace 'check
9532 (lambda _
9533 ;; Tests require write access to HOME.
9534 (setenv "HOME" "/tmp")
9535 (invoke "nosetests"))))))
9536 (native-inputs
9537 `(("python-coverage" ,python-coverage)
9538 ("python-nose" ,python-nose)))
9539 (propagated-inputs
9540 `(("python-astor" ,python-astor)
9541 ("python-colorama" ,python-colorama)
9542 ("python-rply" ,python-rply)
9543 ("python-funcparserlib"
9544 ,python-funcparserlib)))
9545 (home-page "http://hylang.org/")
9546 (synopsis "Lisp frontend to Python")
9547 (description
9548 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9549 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9550 Python at your fingertips, in Lisp form.")
9551 (license license:expat)))
9552
9553 (define-public python2-functools32
9554 (package
9555 (name "python2-functools32")
9556 (version "3.2.3-2")
9557 (source
9558 (origin
9559 (method url-fetch)
9560 (uri (pypi-uri "functools32" version))
9561 (sha256
9562 (base32
9563 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9564 (build-system python-build-system)
9565 (arguments
9566 `(#:python ,python-2
9567 #:tests? #f)) ; no test target
9568 (home-page "https://github.com/MiCHiLU/python-functools32")
9569 (synopsis
9570 "Backport of the functools module from Python 3.2.3")
9571 (description
9572 "This package is a backport of the @code{functools} module from Python
9573 3.2.3 for use with older versions of Python and PyPy.")
9574 (license license:expat)))
9575
9576 (define-public python2-subprocess32
9577 (package
9578 (name "python2-subprocess32")
9579 (version "3.2.7")
9580 (source (origin
9581 (method url-fetch)
9582 (uri (pypi-uri "subprocess32" version))
9583 (sha256
9584 (base32
9585 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9586 (patches
9587 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9588 (build-system python-build-system)
9589 (arguments
9590 `(#:python ,python-2
9591 ;; The test suite fails with Python > 2.7.13:
9592 ;; import test.support
9593 ;; ImportError: No module named support
9594 #:tests? #f
9595 #:phases
9596 (modify-phases %standard-phases
9597 (add-after 'unpack 'patch-/bin/sh
9598 (lambda _
9599 (substitute* '("subprocess32.py"
9600 "test_subprocess32.py")
9601 (("/bin/sh") (which "sh")))
9602 #t)))))
9603 (home-page "https://github.com/google/python-subprocess32")
9604 (synopsis "Backport of the subprocess module from Python 3.2")
9605 (description
9606 "This is a backport of the @code{subprocess} standard library module
9607 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9608 new features. On POSIX systems it is guaranteed to be reliable when used
9609 in threaded applications. It includes timeout support from Python 3.3 but
9610 otherwise matches 3.2’s API.")
9611 (license license:psfl)))
9612
9613 (define-public python2-futures
9614 (package
9615 (name "python2-futures")
9616 (version "3.2.0")
9617 (source
9618 (origin
9619 (method url-fetch)
9620 (uri (pypi-uri "futures" version))
9621 (sha256
9622 (base32
9623 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9624 (build-system python-build-system)
9625 (arguments
9626 `(#:python ,python-2
9627 #:phases
9628 (modify-phases %standard-phases
9629 (replace 'check
9630 (lambda _
9631 (invoke "python" "test_futures.py")
9632 #t)))))
9633 (home-page "https://github.com/agronholm/pythonfutures")
9634 (synopsis
9635 "Backport of the concurrent.futures package from Python 3.2")
9636 (description
9637 "The concurrent.futures module provides a high-level interface for
9638 asynchronously executing callables. This package backports the
9639 concurrent.futures package from Python 3.2")
9640 (license license:bsd-3)))
9641
9642 (define-public python-promise
9643 (package
9644 (name "python-promise")
9645 (version "0.4.2")
9646 (source
9647 (origin
9648 (method url-fetch)
9649 (uri (pypi-uri "promise" version))
9650 (sha256
9651 (base32
9652 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9653 (build-system python-build-system)
9654 ;; Tests wants python-futures, which is a python2 only program, and
9655 ;; can't be found by python-promise at test time.
9656 (arguments `(#:tests? #f))
9657 (home-page "https://github.com/syrusakbary/promise")
9658 (synopsis "Promises/A+ implementation for Python")
9659 (description
9660 "Promises/A+ implementation for Python")
9661 (properties `((python2-variant . ,(delay python2-promise))))
9662 (license license:expat)))
9663
9664 (define-public python2-promise
9665 (let ((promise (package-with-python2
9666 (strip-python2-variant python-promise))))
9667 (package (inherit promise)
9668 (arguments (substitute-keyword-arguments (package-arguments promise)
9669 ((#:tests? _) #t)))
9670 (native-inputs
9671 `(("python2-futures" ,python2-futures)
9672 ("python2-pytest" ,python2-pytest)
9673 ,@(package-native-inputs promise))))))
9674
9675 (define-public python-progressbar33
9676 (package
9677 (name "python-progressbar33")
9678 (version "2.4")
9679 (source
9680 (origin
9681 (method url-fetch)
9682 (uri (pypi-uri "progressbar33" version))
9683 (sha256
9684 (base32
9685 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9686 (build-system python-build-system)
9687 (home-page "http://github.com/germangh/python-progressbar")
9688 (synopsis "Text progress bar library for Python")
9689 (description
9690 "This package provides a text progress bar library for Python. This
9691 version only differs from the original @code{progressbar} package in that it
9692 uses relative package imports instead of absolute imports, which is necessary
9693 for the module to work under Python 3.3.")
9694 ;; Either or both of these licenses may be selected.
9695 (license (list license:lgpl2.1+ license:bsd-3))))
9696
9697 (define-public python-colorama
9698 (package
9699 (name "python-colorama")
9700 (version "0.4.3")
9701 (source
9702 (origin
9703 (method url-fetch)
9704 (uri (pypi-uri "colorama" version))
9705 (sha256
9706 (base32
9707 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9708 (build-system python-build-system)
9709 (synopsis "Colored terminal text rendering for Python")
9710 (description "Colorama is a Python library for rendering colored terminal
9711 text.")
9712 (home-page "https://pypi.org/project/colorama/")
9713 (license license:bsd-3)))
9714
9715 (define-public python2-colorama
9716 (package-with-python2 python-colorama))
9717
9718 (define-public python-rsa
9719 (package
9720 (name "python-rsa")
9721 (version "3.4.2")
9722 (source
9723 (origin
9724 (method url-fetch)
9725 (uri (pypi-uri "rsa" version))
9726 (sha256
9727 (base32
9728 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9729 (build-system python-build-system)
9730 (propagated-inputs
9731 `(("python-pyasn1" ,python-pyasn1)))
9732 (synopsis "Pure-Python RSA implementation")
9733 (description "Python-RSA is a pure-Python RSA implementation. It supports
9734 encryption and decryption, signing and verifying signatures, and key
9735 generation according to PKCS#1 version 1.5. It can be used as a Python
9736 library as well as on the command line.")
9737 (home-page "https://stuvel.eu/rsa")
9738 (license license:asl2.0)))
9739
9740 (define-public python2-rsa
9741 (package-with-python2 python-rsa))
9742
9743 (define-public python-pluggy
9744 (package
9745 (name "python-pluggy")
9746 (version "0.13.1")
9747 (source
9748 (origin
9749 (method url-fetch)
9750 (uri (pypi-uri "pluggy" version))
9751 (sha256
9752 (base32
9753 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
9754 (build-system python-build-system)
9755 (native-inputs
9756 `(("python-setuptools-scm" ,python-setuptools-scm)))
9757 (synopsis "Plugin and hook calling mechanism for Python")
9758 (description "Pluggy is an extraction of the plugin manager as used by
9759 Pytest but stripped of Pytest specific details.")
9760 (home-page "https://pypi.org/project/pluggy/")
9761 (properties `((python2-variant . ,(delay python2-pluggy))))
9762 (license license:expat)))
9763
9764 (define-public python2-pluggy
9765 (let ((base (package-with-python2 (strip-python2-variant
9766 python-pluggy))))
9767 (package/inherit
9768 base
9769 (propagated-inputs
9770 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
9771
9772 ;; This package requires python2-importlib-metadata, but that package
9773 ;; ends up needing python2-pluggy via python2-pytest, so we need this
9774 ;; variant to solve the circular dependency.
9775 (define-public python2-pluggy-bootstrap
9776 (hidden-package
9777 (package/inherit
9778 python2-pluggy
9779 (name "python2-pluggy-bootstrap")
9780 (arguments
9781 `(#:tests? #f
9782 ,@(package-arguments python2-pluggy)))
9783 (propagated-inputs
9784 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
9785
9786 (define-public python-tox
9787 (package
9788 (name "python-tox")
9789 (version "2.8.1")
9790 (source
9791 (origin
9792 (method url-fetch)
9793 (uri (pypi-uri "tox" version))
9794 (sha256
9795 (base32
9796 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
9797 (build-system python-build-system)
9798 (arguments
9799 ;; FIXME: Tests require pytest-timeout, which itself requires
9800 ;; pytest>=2.8.0 for installation.
9801 '(#:tests? #f))
9802 (propagated-inputs
9803 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9804 ("python-py" ,python-py)
9805 ("python-virtualenv" ,python-virtualenv)))
9806 (native-inputs
9807 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9808 ("python-pytest" ,python-pytest) ; >= 2.3.5
9809 ("python-setuptools-scm" ,python-setuptools-scm)))
9810 (home-page "https://tox.readthedocs.io")
9811 (synopsis "Virtualenv-based automation of test activities")
9812 (description "Tox is a generic virtualenv management and test command line
9813 tool. It can be used to check that a package installs correctly with
9814 different Python versions and interpreters, or run tests in each type of
9815 supported environment, or act as a frontend to continuous integration
9816 servers.")
9817 (license license:expat)))
9818
9819 (define-public python2-tox
9820 (package-with-python2 python-tox))
9821
9822 (define-public python-jmespath
9823 (package
9824 (name "python-jmespath")
9825 (version "0.9.4")
9826 (source
9827 (origin
9828 (method url-fetch)
9829 (uri (pypi-uri "jmespath" version))
9830 (sha256
9831 (base32
9832 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
9833 (build-system python-build-system)
9834 (native-inputs
9835 `(("python-nose" ,python-nose)))
9836 (synopsis "JSON Matching Expressions")
9837 (description "JMESPath (pronounced “james path”) is a Python library that
9838 allows one to declaratively specify how to extract elements from a JSON
9839 document.")
9840 (home-page "https://github.com/jmespath/jmespath.py")
9841 (license license:expat)))
9842
9843 (define-public python2-jmespath
9844 (package-with-python2 python-jmespath))
9845
9846 (define-public python-botocore
9847 (package
9848 (name "python-botocore")
9849 (version "1.15.26")
9850 (source
9851 (origin
9852 (method url-fetch)
9853 (uri (pypi-uri "botocore" version))
9854 (sha256
9855 (base32
9856 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
9857 (build-system python-build-system)
9858 (arguments
9859 ;; FIXME: Many tests are failing.
9860 '(#:tests? #f))
9861 (propagated-inputs
9862 `(("python-dateutil" ,python-dateutil)
9863 ("python-docutils" ,python-docutils)
9864 ("python-jmespath" ,python-jmespath)))
9865 (native-inputs
9866 `(("python-mock" ,python-mock)
9867 ("python-nose" ,python-nose)
9868 ("behave" ,behave)
9869 ("python-tox" ,python-tox)
9870 ("python-urllib3" ,python-urllib3)
9871 ("python-wheel" ,python-wheel)))
9872 (home-page "https://github.com/boto/botocore")
9873 (synopsis "Low-level interface to AWS")
9874 (description "Botocore is a Python library that provides a low-level
9875 interface to the Amazon Web Services (AWS) API.")
9876 (license license:asl2.0)))
9877
9878 (define-public python2-botocore
9879 (package-with-python2 python-botocore))
9880
9881 (define-public python-xdo
9882 (package
9883 (name "python-xdo")
9884 (version "0.3")
9885 (source (origin
9886 (method url-fetch)
9887 (uri (string-append
9888 "http://http.debian.net/debian/pool/main/p/python-xdo/"
9889 "python-xdo_" version ".orig.tar.gz"))
9890 (sha256
9891 (base32
9892 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
9893 (build-system python-build-system)
9894 (arguments
9895 '(#:phases
9896 (modify-phases %standard-phases
9897 (add-before 'install 'patch-libxdo-path
9898 ;; Hardcode the path of dynamically loaded libxdo library.
9899 (lambda* (#:key inputs #:allow-other-keys)
9900 (let ((libxdo (string-append
9901 (assoc-ref inputs "xdotool")
9902 "/lib/libxdo.so")))
9903 (substitute* "xdo/_xdo.py"
9904 (("find_library\\(\"xdo\"\\)")
9905 (simple-format #f "\"~a\"" libxdo)))
9906 #t))))
9907 #:tests? #f)) ; no tests provided
9908 (propagated-inputs
9909 `(("python-six" ,python-six)))
9910 (inputs
9911 `(("xdotool" ,xdotool)
9912 ("libX11" ,libx11)))
9913 (home-page "https://tracker.debian.org/pkg/python-xdo")
9914 (synopsis "Python library for simulating X11 keyboard/mouse input")
9915 (description "Provides bindings to libxdo for manipulating X11 via simulated
9916 input. (Note that this is mostly a legacy library; you may wish to look at
9917 python-xdo for newer bindings.)")
9918 (license license:bsd-3)))
9919
9920 (define-public python2-xdo
9921 (package-with-python2 python-xdo))
9922
9923 (define-public python-mako
9924 (package
9925 (name "python-mako")
9926 (version "1.1.1")
9927 (source
9928 (origin
9929 (method url-fetch)
9930 (uri (pypi-uri "Mako" version))
9931 (sha256
9932 (base32
9933 "193mds7lv91pphnvn6c1n55rhjkgq94asdzgrsb2fiqx7rrsd119"))))
9934 (build-system python-build-system)
9935 (arguments
9936 `(#:phases (modify-phases %standard-phases
9937 (replace 'check
9938 (lambda* (#:key tests? #:allow-other-keys)
9939 (if tests?
9940 (invoke "nosetests" "-v")
9941 (format #t "test suite not run~%"))
9942 #t)))))
9943 (propagated-inputs
9944 `(("python-markupsafe" ,python-markupsafe)))
9945 (native-inputs
9946 `(("python-mock" ,python-mock)
9947 ("python-nose" ,python-nose)))
9948 (home-page "https://www.makotemplates.org/")
9949 (synopsis "Templating language for Python")
9950 (description "Mako is a templating language for Python that compiles
9951 templates into Python modules.")
9952 (license license:expat)))
9953
9954 (define-public python2-mako
9955 (package-with-python2 python-mako))
9956
9957 (define-public python-waitress
9958 (package
9959 (name "python-waitress")
9960 (version "1.1.0")
9961 (source
9962 (origin
9963 (method url-fetch)
9964 (uri (pypi-uri "waitress" version))
9965 (patches (search-patches "python-waitress-fix-tests.patch"))
9966 (sha256
9967 (base32
9968 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
9969 (build-system python-build-system)
9970 (home-page "https://github.com/Pylons/waitress")
9971 (synopsis "Waitress WSGI server")
9972 (description "Waitress is meant to be a production-quality pure-Python WSGI
9973 server with very acceptable performance.")
9974 (license license:zpl2.1)))
9975
9976 (define-public python2-waitress
9977 (package-with-python2 python-waitress))
9978
9979 (define-public python-whichcraft
9980 (package
9981 (name "python-whichcraft")
9982 (version "0.6.1")
9983 (source
9984 (origin
9985 (method url-fetch)
9986 (uri (pypi-uri "whichcraft" version))
9987 (sha256
9988 (base32
9989 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
9990 (build-system python-build-system)
9991 (native-inputs
9992 `(("python-pytest" ,python-pytest)))
9993 (home-page "https://github.com/pydanny/whichcraft")
9994 (synopsis "Cross-platform cross-python shutil.which functionality")
9995 (description
9996 "This package provides a shim of the shutil.which function that's
9997 designed to work across multiple versions of Python.")
9998 (license license:bsd-3)))
9999
10000 (define-public python-cookiecutter
10001 (package
10002 (name "python-cookiecutter")
10003 (version "1.6.0")
10004 (source
10005 (origin
10006 (method url-fetch)
10007 (uri (pypi-uri "cookiecutter" version))
10008 (sha256
10009 (base32
10010 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10011 (build-system python-build-system)
10012 (native-inputs
10013 `(("python-freezegun" ,python-freezegun)
10014 ("python-pytest" ,python-pytest)
10015 ("python-pytest-catchlog" ,python-pytest-catchlog)
10016 ("python-pytest-cov" ,python-pytest-cov)
10017 ("python-pytest-mock" ,python-pytest-mock)))
10018 (propagated-inputs
10019 `(("python-binaryornot" ,python-binaryornot)
10020 ("python-click" ,python-click)
10021 ("python-future" ,python-future)
10022 ("python-jinja2" ,python-jinja2)
10023 ("python-jinja2-time" ,python-jinja2-time)
10024 ("python-poyo" ,python-poyo)
10025 ("python-requests" ,python-requests)
10026 ("python-whichcraft" ,python-whichcraft)))
10027 (home-page "https://github.com/audreyr/cookiecutter")
10028 (synopsis
10029 "Command-line utility that creates projects from project templates")
10030 (description
10031 "This package provides a command-line utility that creates projects from
10032 project templates, e.g. creating a Python package project from a Python package
10033 project template.")
10034 (license license:bsd-3)))
10035
10036 (define-public python-pyquery
10037 (package
10038 (name "python-pyquery")
10039 (version "1.2.17")
10040 (source
10041 (origin
10042 (method url-fetch)
10043 (uri (pypi-uri "pyquery" version))
10044 (sha256
10045 (base32
10046 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10047 (build-system python-build-system)
10048 (native-inputs
10049 `(("python-webob" ,python-webob)
10050 ("python-webtest" ,python-webtest)))
10051 (propagated-inputs
10052 `(("python-lxml" ,python-lxml)
10053 ("python-cssselect" ,python-cssselect)))
10054 (home-page "https://github.com/gawel/pyquery")
10055 (synopsis "Make jQuery-like queries on xml documents")
10056 (description "pyquery allows you to make jQuery queries on xml documents.
10057 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10058 fast xml and html manipulation.")
10059 (license license:bsd-3)))
10060
10061 (define-public python-anyjson
10062 (package
10063 (name "python-anyjson")
10064 (version "0.3.3")
10065 (source
10066 (origin
10067 (method url-fetch)
10068 (uri (pypi-uri "anyjson" version))
10069 (sha256
10070 (base32
10071 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10072 (build-system python-build-system)
10073 (arguments
10074 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10075 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10076 ;; whatever) so this transformation needs to be done before the tests
10077 ;; can be run. Maybe we could add a build step to transform beforehand
10078 ;; but it could be annoying/difficult.
10079 ;; We can enable tests for the Python 2 version, though, and do below.
10080 #:tests? #f))
10081 (home-page "https://bitbucket.org/runeh/anyjson/")
10082 (synopsis
10083 "Wraps best available JSON implementation in a common interface")
10084 (description
10085 "Anyjson loads whichever is the fastest JSON module installed
10086 and provides a uniform API regardless of which JSON implementation is used.")
10087 (license license:bsd-3)
10088 (properties `((python2-variant . ,(delay python2-anyjson))))))
10089
10090 (define-public python2-anyjson
10091 (let ((anyjson (package-with-python2
10092 (strip-python2-variant python-anyjson))))
10093 (package
10094 (inherit anyjson)
10095 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10096 #:tests? #t
10097 ,@(package-arguments anyjson)))
10098 (native-inputs `(("python2-nose" ,python2-nose))))))
10099
10100 (define-public python-amqp
10101 (package
10102 (name "python-amqp")
10103 (version "2.3.2")
10104 (source
10105 (origin
10106 (method url-fetch)
10107 (uri (pypi-uri "amqp" version))
10108 (sha256
10109 (base32
10110 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10111 (build-system python-build-system)
10112 (native-inputs
10113 `(("python-case" ,python-case)
10114 ("python-pytest-sugar" ,python-pytest-sugar)
10115 ("python-mock" ,python-mock)))
10116 (propagated-inputs
10117 `(("python-vine" ,python-vine)))
10118 (home-page "https://github.com/celery/py-amqp")
10119 (synopsis
10120 "Low-level AMQP client for Python (fork of amqplib)")
10121 (description
10122 "This is a fork of amqplib which was originally written by Barry Pederson.
10123 It is maintained by the Celery project, and used by kombu as a pure python
10124 alternative when librabbitmq is not available.")
10125 (license license:lgpl2.1+)
10126 (properties `((python2-variant . ,(delay python2-amqp))))))
10127
10128 (define-public python2-amqp
10129 (let ((amqp (package-with-python2
10130 (strip-python2-variant python-amqp))))
10131 (package
10132 (inherit amqp)
10133 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10134 ;; unmaintained. Weirdly, does not do this on the python 3
10135 ;; version?
10136 #:tests? #f
10137 ,@(package-arguments amqp))))))
10138
10139 (define-public python-txamqp
10140 (package
10141 (name "python-txamqp")
10142 (version "0.8.2")
10143 (source
10144 (origin
10145 (method url-fetch)
10146 (uri (pypi-uri "txAMQP" version))
10147 (sha256
10148 (base32
10149 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10150 (build-system python-build-system)
10151 (propagated-inputs
10152 `(("python-six" ,python-six)
10153 ("python-twisted" ,python-twisted)))
10154 (home-page "https://github.com/txamqp/txamqp")
10155 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10156 (description
10157 "This package provides a Python library for communicating with AMQP peers
10158 and brokers using the asynchronous networking framework Twisted. It contains
10159 all the necessary code to connect, send and receive messages to/from an
10160 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10161 also includes support for using Thrift RPC over AMQP in Twisted
10162 applications.")
10163 (license license:asl2.0)))
10164
10165 (define-public python2-txamqp
10166 (package-with-python2 python-txamqp))
10167
10168 (define-public python-kombu
10169 (package
10170 (name "python-kombu")
10171 (version "4.2.2")
10172 (source
10173 (origin
10174 (method url-fetch)
10175 (uri (pypi-uri "kombu" version))
10176 (sha256
10177 (base32
10178 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10179 (build-system python-build-system)
10180 (native-inputs
10181 `(("python-mock" ,python-mock)
10182 ("python-case" ,python-case)
10183 ("python-pyro4" ,python-pyro4)
10184 ("python-pytest-sugar" ,python-pytest-sugar)
10185 ("python-pytz" ,python-pytz)))
10186 (propagated-inputs
10187 `(("python-anyjson" ,python-anyjson)
10188 ("python-amqp" ,python-amqp)
10189 ("python-redis" ,python-redis)))
10190 (home-page "https://kombu.readthedocs.io")
10191 (synopsis "Message passing library for Python")
10192 (description "The aim of Kombu is to make messaging in Python as easy as
10193 possible by providing an idiomatic high-level interface for the AMQ protocol,
10194 and also provide proven and tested solutions to common messaging problems.
10195 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10196 message orientation, queuing, routing, reliability and security, for which the
10197 RabbitMQ messaging server is the most popular implementation.")
10198 (license license:bsd-3)
10199 (properties `((python2-variant . ,(delay python2-kombu))))))
10200
10201 (define-public python2-kombu
10202 (let ((kombu (package-with-python2
10203 (strip-python2-variant python-kombu))))
10204 (package
10205 (inherit kombu)
10206 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10207 ;; It works fine on the python3 variant.
10208 #:tests? #f
10209 ,@(package-arguments kombu)))
10210 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10211 ,@(package-native-inputs kombu))))))
10212
10213 (define-public python-billiard
10214 (package
10215 (name "python-billiard")
10216 (version "3.5.0.5")
10217 (source
10218 (origin
10219 (method url-fetch)
10220 (uri (pypi-uri "billiard" version))
10221 (sha256
10222 (base32
10223 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10224 (build-system python-build-system)
10225 (native-inputs
10226 `(("python-case" ,python-case)
10227 ("python-pytest" ,python-pytest)))
10228 (home-page "https://github.com/celery/billiard")
10229 (synopsis
10230 "Python multiprocessing fork with improvements and bugfixes")
10231 (description
10232 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10233 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10234 pyprocessing package. This standalone variant is intended to be compatible with
10235 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10236 (license license:bsd-3)
10237 (properties `((python2-variant . ,(delay python2-billiard))))))
10238
10239 (define-public python2-billiard
10240 (let ((billiard (package-with-python2
10241 (strip-python2-variant python-billiard))))
10242 (package
10243 (inherit billiard)
10244 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10245 ("python2-mock" ,python2-mock)
10246 ,@(package-native-inputs billiard))))))
10247
10248 (define-public python-celery
10249 (package
10250 (name "python-celery")
10251 (version "4.2.1")
10252 (source
10253 (origin
10254 (method url-fetch)
10255 (uri (pypi-uri "celery" version))
10256 (sha256
10257 (base32
10258 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10259 (build-system python-build-system)
10260 (arguments
10261 '(;; TODO The tests fail with Python 3.7
10262 ;; https://github.com/celery/celery/issues/4849
10263 #:tests? #f
10264 #:phases
10265 (modify-phases %standard-phases
10266 (add-after 'unpack 'patch-requirements
10267 (lambda _
10268 (substitute* "requirements/test.txt"
10269 (("pytest>=3\\.0,<3\\.3")
10270 "pytest>=3.0"))
10271 #t)))))
10272 (native-inputs
10273 `(("python-case" ,python-case)
10274 ("python-pytest" ,python-pytest)))
10275 (propagated-inputs
10276 `(("python-pytz" ,python-pytz)
10277 ("python-billiard" ,python-billiard)
10278 ("python-kombu" ,python-kombu)))
10279 (home-page "https://celeryproject.org")
10280 (synopsis "Distributed Task Queue")
10281 (description "Celery is an asynchronous task queue/job queue based on
10282 distributed message passing. It is focused on real-time operation, but
10283 supports scheduling as well. The execution units, called tasks, are executed
10284 concurrently on a single or more worker servers using multiprocessing,
10285 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10286 synchronously (wait until ready).")
10287 (license license:bsd-3)
10288 (properties `((python2-variant . ,(delay python2-celery))))))
10289
10290 (define-public python2-celery
10291 (let ((celery (package-with-python2
10292 (strip-python2-variant python-celery))))
10293 (package
10294 (inherit celery)
10295 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10296 ("python2-mock" ,python2-mock)
10297 ,@(package-native-inputs celery))))))
10298
10299 (define-public python-translitcodec
10300 (package
10301 (name "python-translitcodec")
10302 (version "0.4.0")
10303 (source
10304 (origin
10305 (method url-fetch)
10306 (uri (pypi-uri "translitcodec" version))
10307 (sha256
10308 (base32
10309 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10310 (build-system python-build-system)
10311 (arguments
10312 `(#:tests? #f)) ; no tests provided
10313 (home-page
10314 "https://github.com/claudep/translitcodec")
10315 (synopsis
10316 "Unicode to 8-bit charset transliteration codec")
10317 (description
10318 "This package contains codecs for transliterating ISO 10646 texts into
10319 best-effort representations using smaller coded character sets (ASCII,
10320 ISO 8859, etc.).")
10321 (license license:expat)))
10322
10323 (define-public python2-translitcodec
10324 (package-with-python2 python-translitcodec))
10325
10326 (define-public python-editor
10327 (package
10328 (name "python-editor")
10329 (version "1.0.4")
10330 (source
10331 (origin
10332 (method url-fetch)
10333 (uri (pypi-uri "python-editor" version))
10334 (sha256
10335 (base32
10336 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10337 (build-system python-build-system)
10338 (arguments
10339 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10340 (home-page "https://github.com/fmoo/python-editor")
10341 (synopsis "Programmatically open an editor, capture the result")
10342 (description
10343 "python-editor is a library that provides the editor module for
10344 programmatically interfacing with your system's $EDITOR.")
10345 (license license:asl2.0)))
10346
10347 (define-public python2-editor
10348 (package-with-python2 python-editor))
10349
10350 (define-public python-vobject
10351 (package
10352 (name "python-vobject")
10353 (version "0.9.6.1")
10354 (source (origin
10355 (method url-fetch)
10356 (uri (pypi-uri "vobject" version))
10357 (sha256
10358 (base32
10359 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10360 (build-system python-build-system)
10361 (arguments
10362 '(;; The test suite relies on some non-portable Windows interfaces.
10363 #:tests? #f))
10364 (propagated-inputs
10365 `(("python-dateutil" ,python-dateutil)
10366 ("python-pyicu" ,python-pyicu)))
10367 (synopsis "Parse and generate vCard and vCalendar files")
10368 (description "Vobject is intended to be a full featured Python package for
10369 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10370 are supported and well tested. vCard 3.0 files are supported, and all data
10371 should be imported, but only a few components are understood in a sophisticated
10372 way.")
10373 (home-page "https://eventable.github.io/vobject/")
10374 (license license:asl2.0)))
10375
10376 (define-public python2-vobject
10377 (package-with-python2 python-vobject))
10378
10379 (define-public python-munkres
10380 (package
10381 (name "python-munkres")
10382 (version "1.0.8")
10383 (source (origin
10384 (method url-fetch)
10385 (uri (pypi-uri "munkres" version))
10386 (sha256
10387 (base32
10388 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10389 (build-system python-build-system)
10390 (arguments
10391 '(#:tests? #f)) ; no test suite
10392 (home-page "https://software.clapper.org/munkres/")
10393 (synopsis "Implementation of the Munkres algorithm")
10394 (description "The Munkres module provides an implementation of the Munkres
10395 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10396 useful for solving the Assignment Problem.")
10397 (license license:bsd-3)))
10398
10399 (define-public python2-munkres
10400 (package-with-python2 python-munkres))
10401
10402 (define-public python-whoosh
10403 (package
10404 (name "python-whoosh")
10405 (version "2.7.4")
10406 (source
10407 (origin
10408 (method url-fetch)
10409 (uri (pypi-uri "Whoosh" version))
10410 (sha256
10411 (base32
10412 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10413 (build-system python-build-system)
10414 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10415 (native-inputs
10416 `(("python-pytest" ,python-pytest)))
10417 (home-page "https://bitbucket.org/mchaput/whoosh")
10418 (synopsis "Full text indexing, search, and spell checking library")
10419 (description
10420 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10421 checking library.")
10422 (license license:bsd-2)))
10423
10424 (define-public python2-whoosh
10425 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10426 (package (inherit whoosh)
10427 (propagated-inputs
10428 `(("python2-backport-ssl-match-hostname"
10429 ,python2-backport-ssl-match-hostname)
10430 ,@(package-propagated-inputs whoosh))))))
10431
10432 (define-public python-pathlib
10433 (package
10434 (name "python-pathlib")
10435 (version "1.0.1")
10436 (source (origin
10437 (method url-fetch)
10438 (uri (pypi-uri "pathlib" version))
10439 (sha256
10440 (base32
10441 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10442 (build-system python-build-system)
10443 ;; The tests depend on the internal "test" module, which does not provide
10444 ;; a stable interface.
10445 (arguments `(#:tests? #f))
10446 (home-page "https://pathlib.readthedocs.org/")
10447 (synopsis "Object-oriented file system paths")
10448 (description "Pathlib offers a set of classes to handle file system paths.
10449 It offers the following advantages over using string objects:
10450
10451 @enumerate
10452 @item No more cumbersome use of os and os.path functions. Everything can
10453 be done easily through operators, attribute accesses, and method calls.
10454 @item Embodies the semantics of different path types. For example,
10455 comparing Windows paths ignores casing.
10456 @item Well-defined semantics, eliminating any inconsistencies or
10457 ambiguities (forward vs. backward slashes, etc.).
10458 @end enumerate
10459
10460 Note: In Python 3.4, pathlib is now part of the standard library. For other
10461 Python versions please consider python-pathlib2 instead, which tracks the
10462 standard library module. This module (python-pathlib) isn't maintained
10463 anymore.")
10464 (license license:expat)))
10465
10466 (define-public python2-pathlib
10467 (package-with-python2 python-pathlib))
10468
10469 (define-public python2-pathlib2
10470 (package
10471 (name "python2-pathlib2")
10472 (version "2.3.5")
10473 (source (origin
10474 (method url-fetch)
10475 (uri (pypi-uri "pathlib2" version))
10476 (sha256
10477 (base32
10478 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10479 (build-system python-build-system)
10480 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10481 ;; version is 3.4 which already includes this package as part of the
10482 ;; standard library.
10483 (arguments
10484 `(#:python ,python-2))
10485 (propagated-inputs
10486 `(("python2-scandir" ,python2-scandir)
10487 ("python2-six" ,python2-six)))
10488 (home-page "https://pypi.org/project/pathlib2/")
10489 (synopsis "Object-oriented file system paths - backport of standard
10490 pathlib module")
10491 (description "The goal of pathlib2 is to provide a backport of standard
10492 pathlib module which tracks the standard library module, so all the newest
10493 features of the standard pathlib can be used also on older Python versions.
10494
10495 Pathlib offers a set of classes to handle file system paths. It offers the
10496 following advantages over using string objects:
10497
10498 @enumerate
10499 @item No more cumbersome use of os and os.path functions. Everything can
10500 be done easily through operators, attribute accesses, and method calls.
10501 @item Embodies the semantics of different path types. For example,
10502 comparing Windows paths ignores casing.
10503 @item Well-defined semantics, eliminating any inconsistencies or
10504 ambiguities (forward vs. backward slashes, etc.).
10505 @end enumerate")
10506 (license license:expat)))
10507
10508 (define-public python2-pathlib2-bootstrap
10509 (hidden-package
10510 (package
10511 (inherit python2-pathlib2)
10512 (name "python2-pathlib2-bootstrap")
10513 (propagated-inputs
10514 `(("python2-scandir" ,python2-scandir)
10515 ("python2-six" ,python2-six-bootstrap))))))
10516
10517 (define-public python-jellyfish
10518 (package
10519 (name "python-jellyfish")
10520 (version "0.5.6")
10521 (source (origin
10522 (method url-fetch)
10523 (uri (pypi-uri "jellyfish" version))
10524 (sha256
10525 (base32
10526 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10527 (build-system python-build-system)
10528 (native-inputs
10529 `(("python-pytest" ,python-pytest)))
10530 (home-page "https://github.com/jamesturk/jellyfish")
10531 (synopsis "Approximate and phonetic matching of strings")
10532 (description "Jellyfish uses a variety of string comparison and phonetic
10533 encoding algorithms to do fuzzy string matching.")
10534 (license license:bsd-2)
10535 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10536
10537 (define-public python2-jellyfish
10538 (let ((jellyfish (package-with-python2
10539 (strip-python2-variant python-jellyfish))))
10540 (package (inherit jellyfish)
10541 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10542 ,@(package-native-inputs jellyfish))))))
10543
10544 (define-public python2-unicodecsv
10545 (package
10546 (name "python2-unicodecsv")
10547 (version "0.14.1")
10548 (source (origin
10549 (method git-fetch)
10550 ;; The test suite is not included in the PyPi release.
10551 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10552 (uri (git-reference
10553 (url "https://github.com/jdunck/python-unicodecsv")
10554 (commit version)))
10555 (file-name (git-file-name name version))
10556 (sha256
10557 (base32
10558 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10559 (build-system python-build-system)
10560 (arguments
10561 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10562 #:python ,python-2))
10563 (native-inputs
10564 `(("python2-unittest2" ,python2-unittest2)))
10565 (home-page "https://github.com/jdunck/python-unicodecsv")
10566 (synopsis "Unicode CSV module for Python 2")
10567 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10568 module, adding support for Unicode strings.")
10569 (license license:bsd-2)))
10570
10571 (define-public python-rarfile
10572 (package
10573 (name "python-rarfile")
10574 (version "2.8")
10575 (source (origin
10576 (method url-fetch)
10577 (uri (pypi-uri "rarfile" version))
10578 (sha256
10579 (base32
10580 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10581 (build-system python-build-system)
10582 (arguments
10583 '(#:phases
10584 (modify-phases %standard-phases
10585 (replace 'check
10586 ;; Many tests fail, but the installation proceeds.
10587 (lambda _ (invoke "make" "-C" "test" "test"))))))
10588 (native-inputs
10589 `(("which" ,which))) ; required for tests
10590 (propagated-inputs
10591 `(("libarchive" ,libarchive)))
10592 (home-page "https://github.com/markokr/rarfile")
10593 (synopsis "RAR archive reader for Python")
10594 (description "This is Python module for RAR archive reading. The interface
10595 is made as zipfile like as possible.")
10596 (license license:isc)))
10597
10598 (define-public python2-rarfile
10599 (package-with-python2 python-rarfile))
10600
10601 (define-public python-magic
10602 (package
10603 (name "python-magic")
10604 (version "0.4.15")
10605 (source
10606 (origin
10607 (method url-fetch)
10608 (uri (pypi-uri "python-magic" version))
10609 (sha256
10610 (base32
10611 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10612 (file-name (string-append name "-" version "-checkout"))))
10613 (build-system python-build-system)
10614 (arguments
10615 ;; The tests are unreliable, so don't run them. The tests fail
10616 ;; under Python3 because they were written for Python2 and
10617 ;; contain import statements that do not work in Python3. One of
10618 ;; the tests fails under Python2 because its assertions are
10619 ;; overly stringent; it relies on comparing output strings which
10620 ;; are brittle and can change depending on the version of
10621 ;; libmagic being used and the system on which the test is
10622 ;; running. In my case, under GuixSD 0.10.0, only one test
10623 ;; failed, and it seems to have failed only because the version
10624 ;; of libmagic that is packaged in Guix outputs a slightly
10625 ;; different (but not wrong) string than the one that the test
10626 ;; expected.
10627 '(#:tests? #f
10628 #:phases (modify-phases %standard-phases
10629 ;; Replace a specific method call with a hard-coded
10630 ;; path to the necessary libmagic.so file in the
10631 ;; store. If we don't do this, then the method call
10632 ;; will fail to find the libmagic.so file, which in
10633 ;; turn will cause any application using
10634 ;; python-magic to fail.
10635 (add-before 'build 'hard-code-path-to-libmagic
10636 (lambda* (#:key inputs #:allow-other-keys)
10637 (let ((file (assoc-ref inputs "file")))
10638 (substitute* "magic.py"
10639 (("ctypes.util.find_library\\('magic'\\)")
10640 (string-append "'" file "/lib/libmagic.so'")))
10641 #t)))
10642 (add-before 'install 'disable-egg-compression
10643 (lambda _
10644 (let ((port (open-file "setup.cfg" "a")))
10645 (display "\n[easy_install]\nzip_ok = 0\n"
10646 port)
10647 (close-port port)
10648 #t))))))
10649 (inputs
10650 ;; python-magic needs to be able to find libmagic.so.
10651 `(("file" ,file)))
10652 (home-page
10653 "https://github.com/ahupp/python-magic")
10654 (synopsis
10655 "File type identification using libmagic")
10656 (description
10657 "This module uses ctypes to access the libmagic file type
10658 identification library. It makes use of the local magic database and
10659 supports both textual and MIME-type output. Note that this module and
10660 the python-file module both provide a \"magic.py\" file; these two
10661 modules, which are different and were developed separately, both serve
10662 the same purpose: to provide Python bindings for libmagic.")
10663 (license license:expat)))
10664
10665 (define-public python2-magic
10666 (package-with-python2 python-magic))
10667
10668 (define-public python2-s3cmd
10669 (package
10670 (name "python2-s3cmd")
10671 (version "1.6.1")
10672 (source
10673 (origin
10674 (method url-fetch)
10675 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10676 "s3cmd-" version ".tar.gz"))
10677 (sha256
10678 (base32
10679 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10680 (build-system python-build-system)
10681 (arguments
10682 ;; s3cmd is written for python2 only and contains no tests.
10683 `(#:python ,python-2
10684 #:tests? #f))
10685 (propagated-inputs
10686 `(("python2-dateutil" ,python2-dateutil)
10687 ;; The python-file package also provides a magic.py module.
10688 ;; This is an unfortunate state of affairs; however, s3cmd
10689 ;; fails to install if it cannot find specifically the
10690 ;; python-magic package. Thus we include it, instead of using
10691 ;; python-file. Ironically, s3cmd sometimes works better
10692 ;; without libmagic bindings at all:
10693 ;; https://github.com/s3tools/s3cmd/issues/198
10694 ("python2-magic" ,python2-magic)))
10695 (home-page "https://s3tools.org/s3cmd")
10696 (synopsis "Command line tool for S3-compatible storage services")
10697 (description
10698 "S3cmd is a command line tool for uploading, retrieving and managing data
10699 in storage services that are compatible with the Amazon Simple Storage
10700 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10701 GnuPG encryption, and more. It also supports management of Amazon's
10702 CloudFront content delivery network.")
10703 (license license:gpl2+)))
10704
10705 (define-public python-pkgconfig
10706 (package
10707 (name "python-pkgconfig")
10708 (version "1.3.1")
10709 (source
10710 (origin
10711 (method url-fetch)
10712 (uri (pypi-uri "pkgconfig" version))
10713 (sha256
10714 (base32
10715 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10716 (build-system python-build-system)
10717 (native-inputs
10718 `(("python-nose" ,python-nose)))
10719 (inputs
10720 `(("pkg-config" ,pkg-config)))
10721 (arguments
10722 `(#:phases
10723 (modify-phases %standard-phases
10724 (add-before 'build 'patch
10725 ;; Hard-code the path to pkg-config.
10726 (lambda _
10727 (substitute* "pkgconfig/pkgconfig.py"
10728 (("cmd = 'pkg-config")
10729 (string-append "cmd = '" (which "pkg-config"))))
10730 #t))
10731 (replace 'check
10732 (lambda _
10733 (invoke "nosetests" "test.py"))))))
10734 (home-page "https://github.com/matze/pkgconfig")
10735 (synopsis "Python interface for pkg-config")
10736 (description "This module provides a Python interface to pkg-config. It
10737 can be used to find all pkg-config packages, check if a package exists,
10738 check if a package meets certain version requirements, query CFLAGS and
10739 LDFLAGS and parse the output to build extensions with setup.py.")
10740 (license license:expat)))
10741
10742 (define-public python2-pkgconfig
10743 (package-with-python2 python-pkgconfig))
10744
10745 (define-public python-bz2file
10746 (package
10747 (name "python-bz2file")
10748 (version "0.98")
10749 (source
10750 (origin
10751 (method url-fetch)
10752 (uri (pypi-uri "bz2file" version))
10753 (sha256
10754 (base32
10755 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10756 (build-system python-build-system)
10757 (arguments
10758 `(#:tests? #f)) ; Tests use deprecated python modules.
10759 (home-page "https://github.com/nvawda/bz2file")
10760 (synopsis "Read and write bzip2-compressed files")
10761 (description
10762 "Bz2file is a Python library for reading and writing bzip2-compressed
10763 files. It contains a drop-in replacement for the I/O interface in the
10764 standard library's @code{bz2} module, including features from the latest
10765 development version of CPython that are not available in older releases.")
10766 (license license:asl2.0)))
10767
10768 (define-public python2-bz2file
10769 (package-with-python2 python-bz2file))
10770
10771 (define-public python-future
10772 (package
10773 (name "python-future")
10774 (version "0.17.1")
10775 (source
10776 (origin
10777 (method url-fetch)
10778 (uri (pypi-uri "future" version))
10779 (sha256
10780 (base32
10781 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
10782 (build-system python-build-system)
10783 ;; Many tests connect to the network or are otherwise flawed.
10784 ;; https://github.com/PythonCharmers/python-future/issues/210
10785 (arguments
10786 `(#:tests? #f))
10787 (home-page "https://python-future.org")
10788 (synopsis "Single-source support for Python 3 and 2")
10789 (description
10790 "@code{python-future} is the missing compatibility layer between Python 2 and
10791 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10792 to support both Python 2 and Python 3 with minimal overhead.")
10793 (license license:expat)))
10794
10795 (define-public python2-future
10796 (package-with-python2 python-future))
10797
10798 (define-public python-cysignals
10799 (package
10800 (name "python-cysignals")
10801 (version "1.9.0")
10802 (source
10803 (origin
10804 (method url-fetch)
10805 (uri (pypi-uri "cysignals" version))
10806 (sha256
10807 (base32
10808 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
10809 (build-system python-build-system)
10810 (native-inputs
10811 `(("python-cython" ,python-cython)
10812 ("python-sphinx" ,python-sphinx)))
10813 (inputs
10814 `(("pari-gp" ,pari-gp)))
10815 (arguments
10816 `(#:modules ((guix build python-build-system)
10817 ((guix build gnu-build-system) #:prefix gnu:)
10818 (guix build utils))
10819 ;; FIXME: Tests are executed after installation and currently fail
10820 ;; when not installing into standard locations; the author is working
10821 ;; on a fix.
10822 #:tests? #f
10823 #:phases
10824 (modify-phases %standard-phases
10825 (add-before
10826 'build 'configure
10827 (assoc-ref gnu:%standard-phases 'configure)))))
10828 (home-page
10829 "https://github.com/sagemath/cysignals")
10830 (synopsis
10831 "Handling of interrupts and signals for Cython")
10832 (description
10833 "The cysignals package provides mechanisms to handle interrupts (and
10834 other signals and errors) in Cython code, using two related approaches,
10835 for mixed Cython/Python code or external C libraries and pure Cython code,
10836 respectively.")
10837 (license license:lgpl3+)))
10838
10839 (define-public python2-cysignals
10840 (package-with-python2 python-cysignals))
10841
10842 (define-public python2-shedskin
10843 (package
10844 (name "python2-shedskin")
10845 (version "0.9.4")
10846 (source
10847 (origin
10848 (method url-fetch)
10849 (uri (string-append "https://github.com/shedskin/shedskin/"
10850 "releases/download/v" version
10851 "/shedskin-" version ".tgz"))
10852 (sha256
10853 (base32
10854 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
10855 (build-system python-build-system)
10856 (arguments
10857 `(#:python ,python-2
10858 #:phases (modify-phases %standard-phases
10859 (add-after 'unpack 'fix-resulting-include-libs
10860 (lambda* (#:key inputs #:allow-other-keys)
10861 (let ((libgc (assoc-ref inputs "libgc"))
10862 (pcre (assoc-ref inputs "pcre")))
10863 (substitute* "shedskin/makefile.py"
10864 (("variable == 'CCFLAGS':[ ]*")
10865 (string-append "variable == 'CCFLAGS':\n"
10866 " line += ' -I " pcre "/include"
10867 " -I " libgc "/include'"))
10868 (("variable == 'LFLAGS':[ ]*")
10869 (string-append "variable == 'LFLAGS':\n"
10870 " line += ' -L" pcre "/lib"
10871 " -L " libgc "/lib'")))
10872 #t))))))
10873 (inputs `(("pcre" ,pcre)
10874 ("libgc" ,libgc)))
10875 (home-page "https://shedskin.github.io/")
10876 (synopsis "Experimental Python-2 to C++ Compiler")
10877 (description (string-append "This is an experimental compiler for a subset of
10878 Python. It generates C++ code and a Makefile."))
10879 (license (list license:gpl3 license:bsd-3 license:expat))))
10880
10881 (define-public python2-rope
10882 (package
10883 (name "python2-rope")
10884 (version "0.11.0")
10885 (source
10886 (origin
10887 (method url-fetch)
10888 (uri (pypi-uri "rope" version))
10889 (sha256
10890 (base32
10891 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
10892 (arguments
10893 ;; Rope has only partial python3 support, see `python-rope'
10894 `(#:python ,python-2))
10895 (build-system python-build-system)
10896 (native-inputs
10897 `(("python2-unittest2" ,python2-unittest2)))
10898 (home-page "https://github.com/python-rope/rope")
10899 (synopsis "Refactoring library for Python")
10900 (description "Rope is a refactoring library for Python. It facilitates
10901 the renaming, moving and extracting of attributes, functions, modules, fields
10902 and parameters in Python 2 source code. These refactorings can also be applied
10903 to occurrences in strings and comments.")
10904 (license license:gpl2)))
10905
10906 (define-public python-rope
10907 (package
10908 (inherit python2-rope)
10909 (name "python-rope")
10910 (arguments `(#:python ,python-wrapper
10911 ;; XXX: Only partial python3 support, results in some failing
10912 ;; tests: <https://github.com/python-rope/rope/issues/247>.
10913 #:tests? #f))
10914 (properties `((python2-variant . ,(delay python2-rope))))))
10915
10916 (define-public python-py3status
10917 (package
10918 (name "python-py3status")
10919 (version "3.21")
10920 (source
10921 (origin
10922 (method url-fetch)
10923 (uri (pypi-uri "py3status" version))
10924 (sha256
10925 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
10926 (build-system python-build-system)
10927 (inputs
10928 `(("file" ,file)))
10929 (arguments
10930 '(#:phases
10931 (modify-phases %standard-phases
10932 ;; 'file' is used for detection of configuration file encoding
10933 ;; let's make link the dependency to particular input
10934 (add-before 'build 'patch-file-path
10935 (lambda* (#:key inputs #:allow-other-keys)
10936 (let ((file-path (assoc-ref inputs "file")))
10937 (substitute* "py3status/parse_config.py"
10938 (("\\[\"file\", \"-b\"")
10939 (string-append "['" file-path "/bin/file', '-b'")))
10940 #t))))
10941 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
10942 (home-page "https://github.com/ultrabug/py3status")
10943 (synopsis "Extensible i3status wrapper written in Python")
10944 (description "py3status is an i3status wrapper which extends i3status
10945 functionality in a modular way, allowing you to extend your panel with your
10946 own code, responding to click events and updating clock every second.")
10947 (license license:bsd-3)))
10948
10949 (define-public python-tblib
10950 (package
10951 (name "python-tblib")
10952 (version "1.6.0")
10953 (source (origin
10954 (method url-fetch)
10955 (uri (pypi-uri "tblib" version))
10956 (sha256
10957 (base32
10958 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
10959 (build-system python-build-system)
10960 (arguments
10961 `(#:phases
10962 (modify-phases %standard-phases
10963 (replace 'check
10964 (lambda _
10965 ;; Upstream runs tests after installation and the package itself
10966 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
10967 ;; found.
10968 (setenv "PYTHONPATH"
10969 (string-append (getcwd) "/build/lib:"
10970 (getenv "PYTHONPATH")))
10971 (invoke "py.test" "-vv" "tests" "README.rst"))))))
10972 (native-inputs
10973 `(("python-pytest" ,python-pytest)
10974 ("python-six" ,python-six)))
10975 (home-page "https://github.com/ionelmc/python-tblib")
10976 (synopsis "Traceback serialization library")
10977 (description
10978 "Traceback serialization allows you to:
10979
10980 @enumerate
10981 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
10982 different processes. This allows better error handling when running code over
10983 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
10984
10985 @item Parse traceback strings and raise with the parsed tracebacks.
10986 @end enumerate\n")
10987 (license license:bsd-3)))
10988
10989 (define-public python2-tblib
10990 (package-with-python2 python-tblib))
10991
10992 (define-public python-greenlet
10993 (package
10994 (name "python-greenlet")
10995 (version "0.4.15")
10996 (source (origin
10997 (method url-fetch)
10998 (uri (pypi-uri "greenlet" version))
10999 (sha256
11000 (base32
11001 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
11002 (build-system python-build-system)
11003 (home-page "https://greenlet.readthedocs.io/")
11004 (synopsis "Lightweight in-process concurrent programming")
11005 (description
11006 "Greenlet package is a spin-off of Stackless, a version of CPython
11007 that supports micro-threads called \"tasklets\". Tasklets run
11008 pseudo-concurrently (typically in a single or a few OS-level threads) and
11009 are synchronized with data exchanges on \"channels\".")
11010 (license (list license:psfl license:expat))))
11011
11012 (define-public python2-greenlet
11013 (package-with-python2 python-greenlet))
11014
11015 (define-public python-objgraph
11016 (package
11017 (name "python-objgraph")
11018 (version "3.4.1")
11019 (source
11020 (origin
11021 (method url-fetch)
11022 (uri (pypi-uri "objgraph" version))
11023 (sha256
11024 (base32
11025 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11026 (build-system python-build-system)
11027 (propagated-inputs
11028 `(("python-graphviz" ,python-graphviz)))
11029 (native-inputs
11030 `(("python-mock" ,python-mock)
11031 ("graphviz" ,graphviz)))
11032 (home-page "https://mg.pov.lt/objgraph/")
11033 (synopsis "Draw Python object reference graphs with graphviz")
11034 (description
11035 "This package provides tools to draw Python object reference graphs with
11036 graphviz.")
11037 (license license:expat)))
11038
11039 (define-public python2-objgraph
11040 (package-with-python2 python-objgraph))
11041
11042 (define-public python-gevent
11043 (package
11044 (name "python-gevent")
11045 (version "1.5.0")
11046 (source (origin
11047 (method url-fetch)
11048 (uri (pypi-uri "gevent" version))
11049 (sha256
11050 (base32
11051 "0aac3d4vhv5n4rsb6cqzq0d1xx9immqz4fmpddw35yxkwdc450dj"))
11052 (modules '((guix build utils)))
11053 (snippet
11054 '(begin
11055 ;; unbunding libev and c-ares
11056 (delete-file-recursively "deps")
11057 #t))))
11058 (build-system python-build-system)
11059 (arguments
11060 `(#:modules ((ice-9 ftw)
11061 (ice-9 match)
11062 (srfi srfi-26)
11063 (guix build utils)
11064 (guix build python-build-system))
11065 #:phases (modify-phases %standard-phases
11066 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11067 (lambda _
11068 (substitute* "src/gevent/subprocess.py"
11069 (("/bin/sh") (which "sh")))
11070 (for-each (lambda (file)
11071 (substitute* file
11072 (("/bin/sh") (which "sh"))
11073 (("/bin/true") (which "true"))))
11074 (find-files "src/greentest" "\\.py$"))
11075 #t))
11076 (add-before 'build 'do-not-use-bundled-sources
11077 (lambda _
11078 (setenv "GEVENTSETUP_EMBED" "0")
11079
11080 ;; Prevent building bundled libev.
11081 (substitute* "setup.py"
11082 (("run_make=_BUILDING")
11083 "run_make=False"))
11084 #t))
11085 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11086 (lambda* (#:key inputs #:allow-other-keys)
11087 (let ((greenlet (string-append
11088 (assoc-ref inputs "python-greenlet")
11089 "/include")))
11090 (match (scandir greenlet
11091 (lambda (item)
11092 (string-prefix? "python" item)))
11093 ((python)
11094 (setenv "C_INCLUDE_PATH"
11095 (string-append greenlet "/" python ":"
11096 (or (getenv "C_INCLUDE_PATH")
11097 ""))))))
11098 #t))
11099 (add-before 'check 'pretend-to-be-CI
11100 (lambda _
11101 ;; A few tests are skipped due to network constraints or
11102 ;; get longer timeouts when running in a CI environment.
11103 ;; Piggy-back on that, as we need the same adjustments.
11104 (setenv "TRAVIS" "1")
11105 (setenv "APPVEYOR" "1")
11106 #t))
11107 (add-before 'check 'adjust-tests
11108 (lambda _
11109 (let ((disabled-tests
11110 '(;; These tests rely on networking which is not
11111 ;; available in the build container.
11112 "test_urllib2net.py"
11113 "test__server.py"
11114 "test__server_pywsgi.py"
11115 "test_socket.py"
11116 "test__socket.py"
11117 "test__socket_ssl.py"
11118 "test__socket_dns.py"
11119 "test__socket_dns6.py"
11120 "test___example_servers.py"
11121 "test__getaddrinfo_import.py"
11122 "test__examples.py"
11123 "test_httplib.py"
11124 "test_https.py"
11125 "test_urllib2_localnet.py"
11126 "test_ssl.py"
11127 "test__ssl.py"
11128 ;; XXX: These tests borrow functionality from the
11129 ;; Python builtin 'test' module, but it is not
11130 ;; installed with the Guix Python distribution.
11131 "test_smtpd.py"
11132 "test_wsgiref.py"
11133 "test_urllib2.py"
11134 "test_thread.py"
11135 "test_threading.py"
11136 "test__threading_2.py"
11137 ;; These tests rely on KeyboardInterrupts which do not
11138 ;; work inside the build container for some reason
11139 ;; (lack of controlling terminal?).
11140 "test_subprocess.py"
11141 "test__issues461_471.py"
11142 ;; TODO: Patch out the tests that use getprotobyname, etc
11143 ;; instead of disabling all the tests from these files.
11144 "test__resolver_dnspython.py"
11145 "test__doctests.py"
11146 "test__all__.py"
11147 "test___config.py"
11148 "test__execmodules.py")))
11149 (call-with-output-file "skipped_tests.txt"
11150 (lambda (port)
11151 (format port "~a~%"
11152 (string-join disabled-tests "\n"))))
11153 #t)))
11154 (replace 'check
11155 (lambda _
11156 ;; Make sure the build directory is on PYTHONPATH.
11157 (setenv "PYTHONPATH"
11158 (string-append
11159 (getenv "PYTHONPATH") ":"
11160 (getcwd) "/build/"
11161 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11162
11163 ;; Use the build daemons configured number of workers.
11164 (setenv "NWORKERS" (number->string (parallel-job-count)))
11165
11166 (invoke "python" "-m" "gevent.tests" "--config"
11167 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11168 (propagated-inputs
11169 `(("python-greenlet" ,python-greenlet)
11170 ("python-objgraph" ,python-objgraph)))
11171 (native-inputs
11172 `(("python-six" ,python-six)
11173
11174 ;; For tests.
11175 ("python-dnspython" ,python-dnspython)
11176 ("python-psutil" ,python-psutil)
11177 ("python-zope.event" ,python-zope-event)
11178 ("python-zope.interface" ,python-zope-interface)))
11179 (inputs
11180 `(("c-ares" ,c-ares)
11181 ("libev" ,libev)))
11182 (home-page "http://www.gevent.org/")
11183 (synopsis "Coroutine-based network library")
11184 (description
11185 "gevent is a coroutine-based Python networking library that uses greenlet
11186 to provide a high-level synchronous API on top of the libev event loop.")
11187 (license license:expat)
11188 (properties `((python2-variant . ,(delay python2-gevent))))))
11189
11190 (define-public python2-gevent
11191 (let ((base (package-with-python2
11192 (strip-python2-variant python-gevent))))
11193 (package
11194 (inherit base)
11195 (native-inputs `(,@(package-native-inputs base)
11196 ("python-mock" ,python2-mock))))))
11197
11198 (define-public python-fastimport
11199 (package
11200 (name "python-fastimport")
11201 (version "0.9.6")
11202 (source
11203 (origin
11204 (method url-fetch)
11205 (uri (pypi-uri "fastimport" version))
11206 (sha256
11207 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11208 (build-system python-build-system)
11209 (home-page "https://github.com/jelmer/python-fastimport")
11210 (synopsis "VCS fastimport parser and generator in Python")
11211 (description "This package provides a parser for and generator of the Git
11212 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11213 format.")
11214 (license license:gpl2+)))
11215
11216 (define-public python2-fastimport
11217 (package-with-python2 python-fastimport))
11218
11219 (define-public python-twisted
11220 (package
11221 (name "python-twisted")
11222 (version "19.7.0")
11223 (source (origin
11224 (method url-fetch)
11225 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11226 (sha256
11227 (base32
11228 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11229 (build-system python-build-system)
11230 (arguments
11231 '(#:tests? #f)) ; FIXME: some tests fail
11232 (propagated-inputs
11233 `(("python-zope-interface" ,python-zope-interface)
11234 ("python-pyhamcrest" ,python-pyhamcrest)
11235 ("python-incremental" ,python-incremental)
11236 ("python-hyperlink" ,python-hyperlink)
11237 ("python-constantly" ,python-constantly)
11238 ("python-automat" ,python-automat)))
11239 (home-page "https://twistedmatrix.com/")
11240 (synopsis "Asynchronous networking framework written in Python")
11241 (description
11242 "Twisted is an extensible framework for Python programming, with special
11243 focus on event-based network programming and multiprotocol integration.")
11244 (license license:expat)))
11245
11246 (define-public python2-twisted
11247 (package-with-python2 python-twisted))
11248
11249 (define-public python-pika
11250 (package
11251 (name "python-pika")
11252 (version "0.12.0")
11253 (source
11254 (origin
11255 (method url-fetch)
11256 (uri (pypi-uri "pika" version))
11257 (sha256
11258 (base32
11259 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11260 (build-system python-build-system)
11261 (native-inputs
11262 `(("python-pyev" ,python-pyev)
11263 ("python-tornado" ,python-tornado)
11264 ("python-twisted" ,python-twisted)))
11265 (home-page "https://pika.readthedocs.org")
11266 (synopsis "Pure Python AMQP Client Library")
11267 (description
11268 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11269 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11270 network support library.")
11271 (license license:bsd-3)))
11272
11273 (define-public python2-pika
11274 (package-with-python2 python-pika))
11275
11276 (define-public python-ply
11277 (package
11278 (name "python-ply")
11279 (version "3.10")
11280 (source
11281 (origin
11282 (method url-fetch)
11283 (uri (pypi-uri "ply" version))
11284 (sha256
11285 (base32
11286 "1jxsr1d2f732r6ljhvm827113dckwl6qwakfvpbdhcbhvpvlmscn"))))
11287 (build-system python-build-system)
11288 (home-page "http://www.dabeaz.com/ply/")
11289 (synopsis "Python Lex & Yacc")
11290 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11291 It uses LR parsing and does extensive error checking.")
11292 (license license:bsd-3)))
11293
11294 (define-public python2-ply
11295 (package-with-python2 python-ply))
11296
11297 (define-public python-tabulate
11298 (package
11299 (name "python-tabulate")
11300 (version "0.7.7")
11301 (source (origin
11302 (method url-fetch)
11303 (uri (pypi-uri "tabulate" version))
11304 (sha256
11305 (base32
11306 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11307 (build-system python-build-system)
11308 (arguments
11309 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11310 ;; and the latest release is not tagged in the upstream repository.
11311 '(#:tests? #f))
11312 (home-page "https://bitbucket.org/astanin/python-tabulate")
11313 (synopsis "Pretty-print tabular data")
11314 (description
11315 "Tabulate is a library and command-line utility to pretty-print tabular
11316 data in Python.")
11317 (license license:expat)))
11318
11319 (define-public python2-tabulate
11320 (package-with-python2 python-tabulate))
11321
11322 (define-public python-kazoo
11323 (package
11324 (name "python-kazoo")
11325 (version "2.4.0")
11326 (source
11327 (origin
11328 (method url-fetch)
11329 (uri (pypi-uri "kazoo" version))
11330 (sha256
11331 (base32
11332 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11333 (build-system python-build-system)
11334 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11335 (propagated-inputs
11336 `(("python-six" ,python-six)))
11337 (home-page "https://kazoo.readthedocs.org")
11338 (synopsis "High-level Zookeeper client library")
11339 (description
11340 "Kazoo is a Python client library for the Apache Zookeeper distributed
11341 application service. It is designed to be easy to use and to avoid common
11342 programming errors.")
11343 (license license:asl2.0)))
11344
11345 (define-public python2-kazoo
11346 (package-with-python2 python-kazoo))
11347
11348 (define-public python-pykafka
11349 (package
11350 (name "python-pykafka")
11351 (version "2.4.0")
11352 (source (origin
11353 (method url-fetch)
11354 (uri (pypi-uri "pykafka" version))
11355 (sha256
11356 (base32
11357 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11358 (build-system python-build-system)
11359 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11360 (propagated-inputs
11361 `(("python-gevent" ,python-gevent)
11362 ("python-kazoo" ,python-kazoo)
11363 ("python-tabulate" ,python-tabulate)))
11364 (inputs
11365 `(("librdkafka" ,librdkafka)))
11366 (home-page "https://pykafka.readthedocs.io/")
11367 (synopsis "Apache Kafka client for Python")
11368 (description
11369 "PyKafka is a client for the Apache Kafka distributed messaging system.
11370 It includes Python implementations of Kafka producers and consumers, which
11371 are optionally backed by a C extension built on librdkafka.")
11372 (license license:asl2.0)))
11373
11374 (define-public python2-pykafka
11375 (package-with-python2 python-pykafka))
11376
11377 (define-public python-wcwidth
11378 (package
11379 (name "python-wcwidth")
11380 (version "0.1.8")
11381 (source (origin
11382 (method url-fetch)
11383 (uri (pypi-uri "wcwidth" version))
11384 (sha256
11385 (base32
11386 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11387 (build-system python-build-system)
11388 (home-page "https://github.com/jquast/wcwidth")
11389 (synopsis "Measure number of terminal column cells of wide-character codes")
11390 (description "Wcwidth measures the number of terminal column cells of
11391 wide-character codes. It is useful for those implementing a terminal emulator,
11392 or programs that carefully produce output to be interpreted by one. It is a
11393 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11394 specified in POSIX.1-2001 and POSIX.1-2008.")
11395 (license license:expat)))
11396
11397 (define-public python2-wcwidth
11398 (package-with-python2 python-wcwidth))
11399
11400 (define-public python2-jsonrpclib
11401 (package
11402 (name "python2-jsonrpclib")
11403 (version "0.1.7")
11404 (source (origin
11405 (method url-fetch)
11406 (uri (pypi-uri "jsonrpclib" version))
11407 (sha256
11408 (base32
11409 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11410 (build-system python-build-system)
11411 (arguments
11412 `(#:tests? #f
11413 #:python ,python-2))
11414 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11415 (synopsis "Implementation of JSON-RPC specification for Python")
11416 (description
11417 "This library is an implementation of the JSON-RPC specification.
11418 It supports both the original 1.0 specification, as well as the
11419 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11420 etc.")
11421 (license license:asl2.0)))
11422
11423 (define-public python-chai
11424 (package
11425 (name "python-chai")
11426 (version "1.1.2")
11427 (source (origin
11428 (method url-fetch)
11429 (uri (pypi-uri "chai" version))
11430 (sha256
11431 (base32
11432 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11433 (build-system python-build-system)
11434 (home-page "https://github.com/agoragames/chai")
11435 (synopsis "Mocking framework for Python")
11436 (description
11437 "Chai provides an api for mocking, stubbing and spying your python
11438 objects, patterned after the Mocha library for Ruby.")
11439 (license license:bsd-3)))
11440
11441 (define-public python2-chai
11442 (package-with-python2 python-chai))
11443
11444 (define-public python-inflection
11445 (package
11446 (name "python-inflection")
11447 (version "0.3.1")
11448 (source
11449 (origin (method url-fetch)
11450 (uri (pypi-uri "inflection" version))
11451 (sha256
11452 (base32
11453 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11454 (build-system python-build-system)
11455 (native-inputs
11456 `(("python-pytest" ,python-pytest)))
11457 (home-page "https://github.com/jpvanhal/inflection")
11458 (synopsis "Python string transformation library")
11459 (description
11460 "Inflection is a string transformation library. It singularizes
11461 and pluralizes English words, and transforms strings from CamelCase to
11462 underscored string.")
11463 (license license:expat)))
11464
11465 (define-public python2-inflection
11466 (package-with-python2 python-inflection))
11467
11468 (define-public python-pylev
11469 (package
11470 (name "python-pylev")
11471 (version "1.3.0")
11472 (source (origin
11473 (method url-fetch)
11474 (uri (pypi-uri "pylev" version))
11475 (sha256
11476 (base32
11477 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11478 (build-system python-build-system)
11479 (home-page "https://github.com/toastdriven/pylev")
11480 (synopsis "Levenshtein distance implementation in Python")
11481 (description "Pure Python Levenshtein implementation, based off the
11482 Wikipedia code samples at
11483 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11484 (license license:bsd-3)))
11485
11486 (define-public python2-pylev
11487 (package-with-python2 python-pylev))
11488
11489 (define-public python-cleo
11490 (package
11491 (name "python-cleo")
11492 (version "0.7.6")
11493 (source (origin
11494 (method url-fetch)
11495 (uri (pypi-uri "cleo" version))
11496 (sha256
11497 (base32
11498 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11499 (build-system python-build-system)
11500 (native-inputs
11501 `( ;; For testing
11502 ("python-mock" ,python-mock)
11503 ("python-pytest-mock" ,python-pytest-mock)
11504 ("python-pytest" ,python-pytest)))
11505 (propagated-inputs
11506 `(("python-backpack" ,python-backpack)
11507 ("python-clikit" ,python-clikit)
11508 ("python-pastel" ,python-pastel)
11509 ("python-pylev" ,python-pylev)))
11510 (home-page "https://github.com/sdispater/cleo")
11511 (synopsis "Command-line arguments library for Python")
11512 (description
11513 "Cleo allows you to create command-line commands with signature in
11514 docstring and colored output.")
11515 (license license:expat)))
11516
11517 (define-public python2-cleo
11518 (package-with-python2 python-cleo))
11519
11520 (define-public python-tomlkit
11521 (package
11522 (name "python-tomlkit")
11523 (version "0.5.11")
11524 (source
11525 (origin
11526 (method url-fetch)
11527 (uri (pypi-uri "tomlkit" version))
11528 (sha256
11529 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11530 (build-system python-build-system)
11531 (native-inputs
11532 `(("python-pytest" ,python-pytest)))
11533 (home-page "https://github.com/sdispater/tomlkit")
11534 (synopsis "Style-preserving TOML library")
11535 (description
11536 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11537 preserves all comments, indentations, whitespace and internal element ordering,
11538 and makes them accessible and editable via an intuitive API. It can also
11539 create new TOML documents from scratch using the provided helpers. Part of the
11540 implementation has been adapted, improved, and fixed from Molten.")
11541 (license license:expat)))
11542
11543 (define-public python-shellingham
11544 (package
11545 (name "python-shellingham")
11546 (version "1.3.1")
11547 (source
11548 (origin
11549 (method url-fetch)
11550 (uri (pypi-uri "shellingham" version))
11551 (sha256
11552 (base32
11553 "1q7kws7w4x2hji3g7y0ni9ddk4sd676ylrb3db54gbpys6xj6nwq"))))
11554 (build-system python-build-system)
11555 (home-page
11556 "https://github.com/sarugaku/shellingham")
11557 (synopsis "Tool to detect surrounding shell")
11558 (description
11559 "Shellingham detects what shell the current Python executable is
11560 running in.")
11561 (license license:isc)))
11562
11563 (define-public python-memcached
11564 (package
11565 (name "python-memcached")
11566 (version "1.59")
11567 (source
11568 (origin
11569 (method url-fetch)
11570 (uri (pypi-uri "python-memcached" version))
11571 (sha256
11572 (base32
11573 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))))
11574 (build-system python-build-system)
11575 (propagated-inputs `(("python-six" ,python-six)))
11576 (home-page
11577 "https://github.com/linsomniac/python-memcached")
11578 (synopsis "Pure python memcached client")
11579 (description
11580 "This software is a pure Python interface to the memcached memory cache
11581 daemon. It is the client side software which allows storing values in one or
11582 more, possibly remote, memcached servers.")
11583 (license license:psfl)))
11584
11585 (define-public python-clikit
11586 (package
11587 (name "python-clikit")
11588 (version "0.4.2")
11589 (source
11590 (origin
11591 (method url-fetch)
11592 (uri (pypi-uri "clikit" version))
11593 (sha256
11594 (base32
11595 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11596 (build-system python-build-system)
11597 (propagated-inputs
11598 `(("python-pastel" ,python-pastel)
11599 ("python-pylev" ,python-pylev)))
11600 (home-page "https://github.com/sdispater/clikit")
11601 (synopsis "Group of utilities to build command line interfaces")
11602 (description
11603 "CliKit is a group of utilities to build testable command line
11604 interfaces.")
11605 (properties `((python2-variant . ,(delay python2-clikit))))
11606 (license license:expat)))
11607
11608 (define-public python2-clikit
11609 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11610 (package/inherit
11611 base
11612 (propagated-inputs
11613 `(("python-enum34" ,python2-enum34)
11614 ("python-typing" ,python2-typing)
11615 ,@(package-propagated-inputs base))))))
11616
11617 (define-public python-msgpack-python
11618 (package
11619 (name "python-msgpack-python")
11620 (version "0.5.6")
11621 (source
11622 (origin
11623 (method url-fetch)
11624 (uri (pypi-uri "msgpack-python" version))
11625 (sha256
11626 (base32
11627 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11628 (build-system python-build-system)
11629 (home-page "http://msgpack.org/")
11630 (synopsis "Package to deserialize messages in MessagePack binary format")
11631 (description
11632 "MessagePack is an efficient binary serialization format. It lets you
11633 exchange data among multiple languages like JSON. But it's faster and
11634 smaller. Small integers are encoded into a single byte, and typical short
11635 strings require only one extra byte in addition to the strings themselves.")
11636 (license license:asl2.0)))
11637
11638 (define-public python-cachy
11639 (package
11640 (name "python-cachy")
11641 (version "0.3.0")
11642 (source
11643 (origin
11644 (method url-fetch)
11645 (uri (pypi-uri "cachy" version))
11646 (sha256
11647 (base32
11648 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11649 (build-system python-build-system)
11650 (arguments
11651 '(#:phases
11652 (modify-phases %standard-phases
11653 (replace 'check
11654 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11655 "pytest"))))))
11656 (native-inputs
11657 `(("memcached" ,memcached)
11658 ("python-fakeredis" ,python-fakeredis)
11659 ("python-flexmock" ,python-flexmock)
11660 ("python-pifpaf" ,python-pifpaf)
11661 ("python-pytest" ,python-pytest)))
11662 (propagated-inputs
11663 `(("python-memcached" ,python-memcached)
11664 ("python-msgpack-python" ,python-msgpack-python)
11665 ("python-redis" ,python-redis)))
11666 (home-page "https://github.com/sdispater/cachy")
11667 (synopsis "Simple yet effective caching library")
11668 (description
11669 "Cachy provides a simple yet effective caching library. A simple but
11670 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11671 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11672 (license license:expat)))
11673
11674 (define-public poetry
11675 (package
11676 (name "poetry")
11677 (version "1.0.5")
11678 ;; Poetry can only be built from source with Poetry.
11679 (source
11680 (origin
11681 (method url-fetch)
11682 (uri (pypi-uri "poetry" version))
11683 (sha256
11684 (base32
11685 "02h387k0xssvv78yy82pcpknpq4w5ym2in1zl8cg9r5wljl5w6cf"))))
11686 (build-system python-build-system)
11687 (arguments
11688 `(#:tests? #f ;; Pypi does not have tests.
11689 #:phases
11690 (modify-phases %standard-phases
11691 (add-before 'build 'patch-setup-py
11692 (lambda _
11693 (substitute* "setup.py"
11694 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11695 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11696 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.16.0")
11697 (("importlib-metadata>=1.1.3,<1.2.0") "importlib-metadata>=1.1.3,<1.5.0"))
11698 #t)))))
11699 (propagated-inputs
11700 `(("python-cachecontrol" ,python-cachecontrol)
11701 ("python-cachy" ,python-cachy)
11702 ("python-cleo" ,python-cleo)
11703 ("python-clikit" ,python-clikit)
11704 ("python-html5lib" ,python-html5lib)
11705 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
11706 ("python-jsonschema" ,python-jsonschema)
11707 ("python-keyring" ,python-keyring)
11708 ("python-pexpect" ,python-pexpect)
11709 ("python-pkginfo" ,python-pkginfo)
11710 ("python-pyparsing" ,python-pyparsing)
11711 ("python-pyrsistent" ,python-pyrsistent)
11712 ("python-requests" ,python-requests)
11713 ("python-requests-toolbelt" ,python-requests-toolbelt)
11714 ("python-shellingham" ,python-shellingham)
11715 ("python-tomlkit" ,python-tomlkit)
11716 ("python-virtualenv" ,python-virtualenv)))
11717 (home-page "https://python-poetry.org")
11718 (synopsis "Python dependency management and packaging made easy")
11719 (description "Poetry is a tool for dependency management and packaging
11720 in Python. It allows you to declare the libraries your project depends on and
11721 it will manage (install/update) them for you.")
11722 (license license:expat)))
11723
11724 (define-public python-lazy-object-proxy
11725 (package
11726 (name "python-lazy-object-proxy")
11727 (version "1.4.3")
11728 (source (origin
11729 (method url-fetch)
11730 (uri (pypi-uri "lazy-object-proxy" version))
11731 (sha256
11732 (base32
11733 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11734 (native-inputs
11735 `(("python-setuptools-scm" ,python-setuptools-scm)))
11736 (build-system python-build-system)
11737 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11738 (synopsis "Lazy object proxy for python")
11739 (description
11740 "Lazy object proxy is an object that wraps a callable but defers the call
11741 until the object is actually required, and caches the result of said call.")
11742 (license license:bsd-2)))
11743
11744 (define-public python2-lazy-object-proxy
11745 (package-with-python2 python-lazy-object-proxy))
11746
11747 (define-public python-dnspython
11748 (package
11749 (name "python-dnspython")
11750 (version "1.16.0")
11751 (source (origin
11752 (method url-fetch)
11753 (uri (string-append "http://www.dnspython.org/kits/"
11754 version "/dnspython-" version ".tar.gz"))
11755 (sha256
11756 (base32
11757 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11758 (build-system python-build-system)
11759 (arguments '(#:tests? #f)) ; XXX: requires internet access
11760 (home-page "http://www.dnspython.org")
11761 (synopsis "DNS toolkit for Python")
11762 (description
11763 "dnspython is a DNS toolkit for Python. It supports almost all record
11764 types. It can be used for queries, zone transfers, and dynamic updates.
11765 It supports TSIG authenticated messages and EDNS0.")
11766 (license license:expat)))
11767
11768 (define-public python2-dnspython
11769 (package-with-python2 python-dnspython))
11770
11771 (define-public python-email-validator
11772 (package
11773 (name "python-email-validator")
11774 (version "1.0.2")
11775 (source
11776 (origin (method url-fetch)
11777 (uri (pypi-uri "email_validator" version))
11778 (sha256
11779 (base32
11780 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11781 (build-system python-build-system)
11782 (arguments
11783 '(#:phases
11784 (modify-phases %standard-phases
11785 (add-before 'build 'use-dnspython
11786 (lambda _
11787 (substitute* "setup.py"
11788 (("dnspython3") "dnspython"))
11789 #t)))))
11790 (propagated-inputs
11791 `(("python-dnspython" ,python-dnspython)
11792 ("python-idna" ,python-idna)))
11793 (home-page "https://github.com/JoshData/python-email-validator")
11794 (synopsis "Email address validation library for Python")
11795 (description
11796 "This library validates email address syntax and deliverability.")
11797 (license license:cc0)))
11798
11799 (define-public python2-email-validator
11800 (package-with-python2 python-email-validator))
11801
11802 (define-public python-ukpostcodeparser
11803 (package
11804 (name "python-ukpostcodeparser")
11805 (version "1.0.3")
11806 (source (origin
11807 (method url-fetch)
11808 (uri (pypi-uri "UkPostcodeParser" version))
11809 (sha256
11810 (base32
11811 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
11812 (build-system python-build-system)
11813 (home-page "https://github.com/hamstah/ukpostcodeparser")
11814 (synopsis "UK Postcode parser for Python")
11815 (description
11816 "This library provides the @code{parse_uk_postcode} function for
11817 parsing UK postcodes.")
11818 (license license:expat)))
11819
11820 (define-public python2-ukpostcodeparser
11821 (package-with-python2 python-ukpostcodeparser))
11822
11823 (define-public python-faker
11824 (package
11825 (name "python-faker")
11826 (version "4.0.2")
11827 (source (origin
11828 (method url-fetch)
11829 (uri (pypi-uri "Faker" version))
11830 (sha256
11831 (base32
11832 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
11833 (build-system python-build-system)
11834 (arguments
11835 '(#:phases
11836 (modify-phases %standard-phases
11837 (replace 'check
11838 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
11839 (native-inputs
11840 `(;; For testing
11841 ("python-freezegun" ,python-freezegun)
11842 ("python-pytest" ,python-pytest)
11843 ("python-random2" ,python-random2)
11844 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
11845 ("python-validators" ,python-validators)))
11846 (propagated-inputs
11847 `(("python-dateutil" ,python-dateutil)
11848 ("python-text-unidecode" ,python-text-unidecode)))
11849 (home-page "https://github.com/joke2k/faker")
11850 (synopsis "Python package that generates fake data")
11851 (description
11852 "Faker is a Python package that generates fake data such as names,
11853 addresses, and phone numbers.")
11854 (license license:expat)
11855 (properties `((python2-variant . ,(delay python2-faker))))))
11856
11857 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
11858 (define-public python2-faker
11859 (let ((base (package-with-python2 (strip-python2-variant
11860 python-faker))))
11861 (package
11862 (inherit base)
11863 (version "3.0.1")
11864 (source (origin
11865 (method url-fetch)
11866 (uri (pypi-uri "Faker" version))
11867 (sha256
11868 (base32
11869 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
11870 (native-inputs
11871 `(("python-mock" ,python2-mock)
11872 ,@(package-native-inputs base)))
11873 (propagated-inputs
11874 `(("python2-ipaddress" ,python2-ipaddress)
11875 ("python2-six" ,python2-six)
11876 ,@(package-propagated-inputs base))))))
11877
11878 (define-public python-pyaml
11879 (package
11880 (name "python-pyaml")
11881 (version "18.11.0")
11882 (source (origin
11883 (method url-fetch)
11884 (uri (pypi-uri "pyaml" version))
11885 (sha256
11886 (base32
11887 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
11888 (build-system python-build-system)
11889 (native-inputs
11890 `(("python-unidecode" ,python-unidecode)))
11891 (propagated-inputs
11892 `(("python-pyyaml" ,python-pyyaml)))
11893 (home-page "https://github.com/mk-fg/pretty-yaml")
11894 (synopsis "YAML pretty-print library for Python")
11895 (description
11896 "pyaml is a PyYAML based python module to produce pretty and readable
11897 YAML-serialized data.")
11898 (license license:wtfpl2)))
11899
11900 (define-public python2-pyaml
11901 (package-with-python2 python-pyaml))
11902
11903 (define-public python-backpack
11904 (package
11905 (name "python-backpack")
11906 (version "0.1")
11907 (source
11908 (origin
11909 (method url-fetch)
11910 (uri (pypi-uri "backpack" version))
11911 (sha256
11912 (base32
11913 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
11914 (build-system python-build-system)
11915 (native-inputs
11916 `(("python-pytest" ,python-pytest)
11917 ("python-nose" ,python-nose)))
11918 (propagated-inputs
11919 `(("python-simplejson" ,python-simplejson)))
11920 (home-page "https://github.com/sdispater/backpack")
11921 (synopsis "Utilities for working with Python collections")
11922 (description "Backpack provides some useful utilities for working with
11923 collections of data.")
11924 (license license:expat)))
11925
11926 (define-public python2-backpack
11927 (package-with-python2 python-backpack))
11928
11929 (define-public python-prompt-toolkit
11930 (package
11931 (name "python-prompt-toolkit")
11932 (version "2.0.7")
11933 (source
11934 (origin
11935 (method url-fetch)
11936 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11937 (sha256
11938 (base32
11939 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
11940 (build-system python-build-system)
11941 (arguments
11942 `(#:phases
11943 (modify-phases %standard-phases
11944 (delete 'check)
11945 (add-after 'install 'post-install-check
11946 (lambda* (#:key inputs outputs #:allow-other-keys)
11947 ;; HOME is needed for the test
11948 ;; "test_pathcompleter_can_expanduser".
11949 (setenv "HOME" "/tmp")
11950 (add-installed-pythonpath inputs outputs)
11951 (invoke "py.test"))))))
11952 (propagated-inputs
11953 `(("python-wcwidth" ,python-wcwidth)
11954 ("python-six" ,python-six)
11955 ("python-pygments" ,python-pygments)))
11956 (native-inputs
11957 `(("python-pytest" ,python-pytest)))
11958 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
11959 (synopsis "Library for building command line interfaces in Python")
11960 (description
11961 "Prompt-Toolkit is a library for building interactive command line
11962 interfaces in Python. It's like GNU Readline but it also features syntax
11963 highlighting while typing, out-of-the-box multi-line input editing, advanced
11964 code completion, incremental search, support for Chinese double-width
11965 characters, mouse support, and auto suggestions.")
11966 (license license:bsd-3)))
11967
11968 (define-public python2-prompt-toolkit
11969 (package-with-python2 python-prompt-toolkit))
11970
11971 (define-public python-prompt-toolkit-1
11972 (package (inherit python-prompt-toolkit)
11973 (version "1.0.15")
11974 (source
11975 (origin
11976 (method url-fetch)
11977 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11978 (sha256
11979 (base32
11980 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
11981
11982 (define-public python2-prompt-toolkit-1
11983 (package-with-python2 python-prompt-toolkit-1))
11984
11985 (define-public python-jedi
11986 (package
11987 (name "python-jedi")
11988 (version "0.17.0")
11989 (source
11990 (origin
11991 (method url-fetch)
11992 (uri (pypi-uri "jedi" version))
11993 (patches (search-patches "python-jedi-sort-project-test.patch"))
11994 (sha256
11995 (base32
11996 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
11997 (build-system python-build-system)
11998 (arguments
11999 `(#:phases
12000 (modify-phases %standard-phases
12001 (replace 'check
12002 (lambda _
12003 (setenv "HOME" "/tmp")
12004 (invoke "python" "-m" "pytest" "-vv"))))))
12005 (native-inputs
12006 `(("python-pytest" ,python-pytest)
12007 ("python-docopt" ,python-docopt)))
12008 (propagated-inputs
12009 `(("python-parso" ,python-parso)))
12010 (home-page "https://github.com/davidhalter/jedi")
12011 (synopsis "Autocompletion and static analysis library for Python")
12012 (description
12013 "Jedi is a static analysis tool for Python that can be used in Integrated
12014 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12015 on a deeper level than many other static analysis frameworks for Python.
12016
12017 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12018 well.")
12019 (license license:expat)))
12020
12021 (define-public python2-jedi
12022 (package-with-python2 python-jedi))
12023
12024 ;; python-language-server requires 0.15 specifically. Remove once unused.
12025 (define-public python-jedi-0.15
12026 (package
12027 (inherit python-jedi)
12028 (version "0.15.2")
12029 (source (origin
12030 (method url-fetch)
12031 (uri (pypi-uri "jedi" version))
12032 (sha256
12033 (base32
12034 "01zqasl690x1i6dq4mvh13pz0cw8i276xsivsrnn00x90iqm42g9"))))
12035 (propagated-inputs
12036 `(("python-parso" ,python-parso-0.5)))))
12037
12038 (define-public ptpython
12039 (package
12040 (name "ptpython")
12041 (version "0.34")
12042 (source (origin
12043 (method url-fetch)
12044 (uri (pypi-uri "ptpython" version))
12045 (sha256
12046 (base32
12047 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12048 (build-system python-build-system)
12049 (arguments
12050 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12051 (propagated-inputs
12052 `(("python-docopt" ,python-docopt)
12053 ("python-jedi" ,python-jedi)
12054 ("python-prompt-toolkit" ,python-prompt-toolkit)
12055 ("python-pygments" ,python-pygments)))
12056 (home-page "https://github.com/jonathanslenders/ptpython")
12057 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12058 (description
12059 "ptpython is a Python read-eval-print loop with IDE-like features.
12060 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12061 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12062 etc.")
12063 (license license:bsd-3)
12064 (properties `((python2-variant . ,(delay ptpython-2))))))
12065
12066 (define-public ptpython-2
12067 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12068 (package
12069 (inherit base)
12070 (name "ptpython2"))))
12071
12072 (define-public python-stem
12073 (package
12074 (name "python-stem")
12075 (version "1.8.0")
12076 (source
12077 (origin
12078 (method url-fetch)
12079 (uri (pypi-uri "stem" version))
12080 (sha256
12081 (base32
12082 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12083 (build-system python-build-system)
12084 (arguments
12085 `(#:phases
12086 (modify-phases %standard-phases
12087 (replace 'check
12088 (lambda _
12089 (invoke "./run_tests.py" "--unit")
12090 #t)))))
12091 (native-inputs
12092 `(("python-mock" ,python-mock)
12093 ("python-pycodestyle" ,python-pycodestyle)
12094 ("python-pyflakes" ,python-pyflakes)))
12095 (home-page "https://stem.torproject.org/")
12096 (synopsis
12097 "Python controller library that allows applications to interact with Tor")
12098 (description
12099 "Stem is a Python controller library for Tor. With it you can use Tor's
12100 control protocol to script against the Tor process and read descriptor data
12101 relays publish about themselves.")
12102 (license license:lgpl3)))
12103
12104 (define-public python2-stem
12105 (package-with-python2 python-stem))
12106
12107 (define-public python-pyserial
12108 (package
12109 (name "python-pyserial")
12110 (version "3.4")
12111 (source
12112 (origin
12113 (method url-fetch)
12114 (uri (pypi-uri "pyserial" version))
12115 (sha256
12116 (base32
12117 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12118 (build-system python-build-system)
12119 (arguments
12120 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12121 ;; #:phases
12122 ;; (modify-phases %standard-phases
12123 ;; (replace 'check
12124 ;; (lambda _
12125 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12126 (home-page
12127 "https://github.com/pyserial/pyserial")
12128 (synopsis "Python Serial Port Bindings")
12129 (description "@code{pyserial} provide serial port bindings for Python. It
12130 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12131 and/or Xon/Xoff. The port is accessed in RAW mode.")
12132 (license license:bsd-3)))
12133
12134 (define-public python2-pyserial
12135 (package-with-python2 python-pyserial))
12136
12137 (define-public python-kivy
12138 (package
12139 (name "python-kivy")
12140 (version "1.10.1")
12141 (source
12142 (origin
12143 (method url-fetch)
12144 (uri (pypi-uri "Kivy" version))
12145 (file-name (string-append name "-" version ".tar.gz"))
12146 (sha256
12147 (base32
12148 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12149 (build-system python-build-system)
12150 (arguments
12151 `(#:tests? #f ; Tests require many optional packages
12152 #:phases
12153 (modify-phases %standard-phases
12154 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12155 (lambda* (#:key inputs #:allow-other-keys)
12156 (setenv "KIVY_SDL2_PATH"
12157 (string-append (assoc-ref inputs "sdl-union")
12158 "/include/SDL2"))
12159 #t)))))
12160 (native-inputs
12161 `(("pkg-config" ,pkg-config)
12162 ("python-cython" ,python-cython)))
12163 (inputs
12164 `(("gstreamer" ,gstreamer)
12165 ("mesa" ,mesa)
12166 ("sdl-union"
12167 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12168 (home-page "https://kivy.org")
12169 (synopsis
12170 "Multitouch application framework")
12171 (description
12172 "A software library for rapid development of
12173 hardware-accelerated multitouch applications.")
12174 (license license:expat)))
12175
12176 (define-public python2-kivy
12177 (package-with-python2 python-kivy))
12178
12179 (define-public python-binaryornot
12180 (package
12181 (name "python-binaryornot")
12182 (version "0.4.4")
12183 (source (origin
12184 (method url-fetch)
12185 (uri (pypi-uri "binaryornot" version))
12186 (sha256
12187 (base32
12188 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12189 (build-system python-build-system)
12190 (arguments
12191 `(#:phases
12192 (modify-phases %standard-phases
12193 (add-after 'unpack 'patch-tests
12194 (lambda _
12195 ;; TypeError: binary() got an unexpected keyword argument
12196 ;; 'average_size'.
12197 (substitute* "tests/test_check.py"
12198 (("average_size=512") ""))
12199 #t)))))
12200 (propagated-inputs
12201 `(("python-chardet" ,python-chardet)
12202 ("python-hypothesis" ,python-hypothesis)))
12203 (home-page "https://github.com/audreyr/binaryornot")
12204 (synopsis "Package to check if a file is binary or text")
12205 (description "Ultra-lightweight pure Python package to check if a file is
12206 binary or text.")
12207 (license license:bsd-3)
12208 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12209
12210 (define-public python2-binaryornot
12211 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12212 (package (inherit base)
12213 (propagated-inputs
12214 `(("python2-enum34" ,python2-enum34)
12215 ,@(package-propagated-inputs base))))))
12216
12217 (define-public python-binwalk
12218 (package
12219 (name "python-binwalk")
12220 (version "2.2.0")
12221 (source
12222 (origin
12223 (method git-fetch)
12224 (uri (git-reference
12225 (url "https://github.com/ReFirmLabs/binwalk")
12226 (commit (string-append "v" version))))
12227 (file-name (git-file-name name version))
12228 (sha256
12229 (base32
12230 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12231 (build-system python-build-system)
12232 (arguments
12233 `(#:phases
12234 (modify-phases %standard-phases
12235 (add-before 'check 'set-pythonpath
12236 (lambda _
12237 (setenv "PYTHONPATH"
12238 (string-append
12239 (getcwd) "/src/"
12240 ":" (getenv "PYTHONPATH")))
12241 (setenv "HOME" "")
12242 #t)))))
12243 (native-inputs
12244 `(("python-coverage" ,python-coverage)
12245 ("python-nose" ,python-nose)))
12246 (home-page "https://github.com/ReFirmLabs/binwalk")
12247 (synopsis "Firmware analysis tool")
12248 (description "Binwalk is a tool for analyzing, reverse engineering, and
12249 extracting firmware images")
12250 (license license:expat)))
12251
12252 (define-public python-nltk
12253 (package
12254 (name "python-nltk")
12255 (version "3.2.1")
12256 (source (origin
12257 (method url-fetch)
12258 (uri (pypi-uri "nltk" version))
12259 (sha256
12260 (base32
12261 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12262 (build-system python-build-system)
12263 (arguments
12264 '(;; The tests require some extra resources to be downloaded.
12265 ;; TODO Try packaging these resources.
12266 #:tests? #f))
12267 (home-page "http://nltk.org/")
12268 (synopsis "Natural Language Toolkit")
12269 (description "It provides interfaces to over 50 corpora and lexical
12270 resources such as WordNet, along with a suite of text processing libraries
12271 for classification, tokenization, stemming, tagging, parsing, and semantic
12272 reasoning, wrappers for natural language processing libraries.")
12273 (license license:asl2.0)))
12274
12275 (define-public python2-nltk
12276 (package-with-python2 python-nltk))
12277
12278 (define-public python-pymongo
12279 (package
12280 (name "python-pymongo")
12281 (version "3.7.2")
12282 (source (origin
12283 (method url-fetch)
12284 (uri (pypi-uri "pymongo" version))
12285 (sha256
12286 (base32
12287 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12288 (build-system python-build-system)
12289 (propagated-inputs
12290 `(("python-certifi" ,python-certifi)))
12291 (home-page "https://github.com/mongodb/mongo-python-driver")
12292 (synopsis "Python driver for MongoDB")
12293 (description "Python driver for MongoDB.")
12294 (license license:asl2.0)))
12295
12296 (define-public python2-pymongo
12297 (package-with-python2 python-pymongo))
12298
12299 (define-public python-consul
12300 (package
12301 (name "python-consul")
12302 (version "0.6.1")
12303 (source
12304 (origin
12305 (method url-fetch)
12306 (uri (pypi-uri "python-consul" version))
12307 (sha256
12308 (base32
12309 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12310 (build-system python-build-system)
12311 (arguments
12312 '(#:tests? #f)) ; The tests are not distributed
12313 (propagated-inputs
12314 `(("python-requests" ,python-requests)
12315 ("python-six" ,python-six)))
12316 (home-page "https://github.com/cablehead/python-consul")
12317 (synopsis "Python client for Consul")
12318 (description
12319 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12320 discovery, monitoring and configuration.")
12321 (license license:expat)))
12322
12323 (define-public python2-consul
12324 (package-with-python2 python-consul))
12325
12326 (define-public python-schematics
12327 (package
12328 (name "python-schematics")
12329 (version "1.1.1")
12330 (source
12331 (origin
12332 (method git-fetch)
12333 (uri (git-reference
12334 (url "https://github.com/schematics/schematics.git")
12335 (commit (string-append "v" version))))
12336 (file-name (git-file-name name version))
12337 (sha256
12338 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12339 (build-system python-build-system)
12340 (propagated-inputs
12341 `(("python-six" ,python-six)))
12342 (arguments
12343 ;; The tests require a bunch of not very nice packages with fixed
12344 ;; version requirements (e.g. python-coveralls).
12345 `(#:tests? #f))
12346 (home-page "https://github.com/schematics/schematics")
12347 (synopsis "Python Data Structures for Humans")
12348 (description "Python Data Structures for Humans.")
12349 (license license:bsd-3)))
12350
12351 (define-public python2-schematics
12352 (package-with-python2 python-schematics))
12353
12354 (define-public python-odfpy
12355 (package
12356 (name "python-odfpy")
12357 (version "1.3.3")
12358 (source (origin
12359 (method url-fetch)
12360 (uri (pypi-uri "odfpy" version))
12361 (sha256
12362 (base32
12363 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12364 (arguments
12365 `(#:modules ((srfi srfi-1)
12366 (guix build python-build-system)
12367 (guix build utils))
12368 #:phases
12369 (modify-phases %standard-phases
12370 (replace 'check
12371 ;; The test runner invokes python2 and python3 for test*.py.
12372 ;; To avoid having both in inputs, we replicate it here.
12373 (lambda _
12374 (for-each (lambda (test-file) (invoke "python" test-file))
12375 (find-files "tests" "^test.*\\.py$"))
12376 #t)))))
12377 (build-system python-build-system)
12378 (home-page "https://github.com/eea/odfpy")
12379 (synopsis "Python API and tools to manipulate OpenDocument files")
12380 (description "Collection of libraries and utility programs written in
12381 Python to manipulate OpenDocument 1.2 files.")
12382 (license
12383 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12384 ;; number of files with other licenses.
12385 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12386
12387 (define-public python2-odfpy
12388 (package-with-python2 python-odfpy))
12389
12390 (define-public python-natsort
12391 (package
12392 (name "python-natsort")
12393 (version "7.0.1")
12394 (source (origin
12395 (method url-fetch)
12396 (uri (pypi-uri "natsort" version))
12397 (sha256
12398 (base32
12399 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12400 (build-system python-build-system)
12401 (arguments
12402 `(#:modules ((guix build utils)
12403 (guix build python-build-system)
12404 (srfi srfi-1)
12405 (srfi srfi-26)
12406 (ice-9 ftw))
12407 #:phases
12408 (modify-phases %standard-phases
12409 (add-before 'check 'set-cachedir
12410 ;; Tests require write access to $HOME by default
12411 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12412 (replace 'check
12413 (lambda _
12414 (let ((cwd (getcwd)))
12415 (setenv "PYTHONPATH"
12416 (string-append
12417 cwd "/build/"
12418 (find (cut string-prefix? "lib" <>)
12419 (scandir (string-append cwd "/build")))
12420 ":"
12421 (getenv "PYTHONPATH")))
12422 (invoke "pytest" "-v")))))))
12423 (native-inputs
12424 `(("python-hypothesis" ,python-hypothesis)
12425 ("python-pytest-cov" ,python-pytest-cov)
12426 ("python-pytest-mock" ,python-pytest-mock)
12427 ("python-pytest" ,python-pytest)))
12428 (propagated-inputs ; TODO: Add python-fastnumbers.
12429 `(("python-pyicu" ,python-pyicu)))
12430 (home-page "https://github.com/SethMMorton/natsort")
12431 (synopsis "Natural sorting for python and shell")
12432 (description
12433 "Natsort lets you apply natural sorting on lists instead of
12434 lexicographical. If you use the built-in @code{sorted} method in python
12435 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12436 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12437 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12438 identifies numbers and sorts them separately from strings. It can also sort
12439 version numbers, real numbers, mixed types and more, and comes with a shell
12440 command @command{natsort} that exposes this functionality in the command line.")
12441 (license license:expat)
12442 (properties `((python2-variant . ,(delay python2-natsort))))))
12443
12444 ;; Natsort 6.x are the last versions with support for Python 2.
12445 (define-public python2-natsort
12446 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12447 (package (inherit base)
12448 (version "6.2.1")
12449 (source (origin
12450 (method url-fetch)
12451 (uri (pypi-uri "natsort" version))
12452 (sha256
12453 (base32
12454 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12455 (native-inputs
12456 `(("python2-pathlib" ,python2-pathlib)
12457 ,@(package-native-inputs base))))))
12458
12459 (define-public glances
12460 (package
12461 (name "glances")
12462 (version "3.1.4")
12463 (source
12464 (origin
12465 (method url-fetch)
12466 (uri (pypi-uri "Glances" version))
12467 (sha256
12468 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12469 (modules '((guix build utils)))
12470 (snippet
12471 '(begin
12472 ;; Glances phones PyPI for weekly update checks by default.
12473 ;; Disable these. The user can re-enable them if desired.
12474 (substitute* "glances/outdated.py"
12475 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12476 (string-append indentation
12477 "self.args.disable_check_update = True\n"
12478 line)))
12479 #t))))
12480 (build-system python-build-system)
12481 (propagated-inputs
12482 `(("python-future" ,python-future)
12483 ("python-psutil" ,python-psutil)))
12484 (home-page "https://github.com/nicolargo/glances")
12485 (synopsis "Cross-platform curses-based monitoring tool")
12486 (description
12487 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12488 Glances uses the PsUtil library to get information from your system. It
12489 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12490 (license license:lgpl3+)))
12491
12492 (define-public python-glances
12493 (deprecated-package "python-glances" glances))
12494
12495 (define-public python-graphql-core
12496 (package
12497 (name "python-graphql-core")
12498 (version "0.5.3")
12499 (source
12500 (origin
12501 (method url-fetch)
12502 (uri (pypi-uri "graphql-core" version))
12503 (sha256
12504 (base32
12505 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12506 (build-system python-build-system)
12507 (arguments
12508 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12509 #:phases
12510 (modify-phases %standard-phases
12511 (add-after 'unpack 'patch-hardcoded-version
12512 (lambda _ (substitute*
12513 "setup.py"
12514 (("'gevent==1.1rc1'") "'gevent'"))
12515 #t)))))
12516 (native-inputs
12517 `(("python-gevent" ,python-gevent)
12518 ("python-mock" ,python-mock)
12519 ("python-pytest-mock" ,python-pytest-mock)))
12520 (propagated-inputs
12521 `(("python-promise" ,python-promise)
12522 ("python-six" ,python-six)))
12523 (home-page "https://github.com/graphql-python/graphql-core")
12524 (synopsis "GraphQL implementation for Python")
12525 (description
12526 "GraphQL implementation for Python. GraphQL is a data query language and
12527 runtime designed and used to request and deliver data to mobile and web apps.
12528 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12529 to Python.")
12530 (license license:expat)))
12531
12532 (define-public python2-graphql-core
12533 (package-with-python2 python-graphql-core))
12534
12535 (define-public python-graphql-relay
12536 (package
12537 (name "python-graphql-relay")
12538 (version "0.4.5")
12539 (source
12540 (origin
12541 (method url-fetch)
12542 (uri (pypi-uri "graphql-relay" version))
12543 (sha256
12544 (base32
12545 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12546 (build-system python-build-system)
12547 (arguments
12548 '(#:tests? #f)) ; The tests are not distributed
12549 (propagated-inputs
12550 `(("python-graphql-core" ,python-graphql-core)
12551 ("python-promise" ,python-promise)
12552 ("python-six" ,python-six)))
12553 (home-page "https://github.com/graphql-python/graphql-relay-py")
12554 (synopsis "Relay implementation for Python")
12555 (description
12556 "This is a library to allow the easy creation of Relay-compliant servers
12557 using the GraphQL Python reference implementation of a GraphQL server. It
12558 should be noted that the code is a exact port of the original
12559 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12560 from Facebook.")
12561 (license license:expat)))
12562
12563 (define-public python2-graphql-relay
12564 (package-with-python2 python-graphql-relay))
12565
12566 (define-public python-graphene
12567 (package
12568 (name "python-graphene")
12569 (version "0.10.2")
12570 (source
12571 (origin
12572 (method url-fetch)
12573 (uri (pypi-uri "graphene" version))
12574 (sha256
12575 (base32
12576 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12577 (build-system python-build-system)
12578 (propagated-inputs
12579 `(("python-graphql-core" ,python-graphql-core)
12580 ("python-graphql-relay" ,python-graphql-relay)
12581 ("python-iso8601" ,python-iso8601)
12582 ("python-promise" ,python-promise)
12583 ("python-six" ,python-six)))
12584 (arguments
12585 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12586 (home-page "https://graphene-python.org/")
12587 (synopsis "GraphQL Framework for Python")
12588 (description
12589 "Graphene is a Python library for building GraphQL schemas/types.
12590 A GraphQL schema describes your data model, and provides a GraphQL server
12591 with an associated set of resolve methods that know how to fetch data.")
12592 (properties `((python2-variant . ,(delay python2-graphene))))
12593 (license license:expat)))
12594
12595 (define-public python2-graphene
12596 (let ((base (package-with-python2
12597 (strip-python2-variant python-graphene))))
12598 (package (inherit base)
12599 (native-inputs
12600 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12601 ,@(package-native-inputs base))))))
12602
12603 (define-public python-nautilus
12604 (package
12605 (name "python-nautilus")
12606 (version "0.4.9")
12607 (source
12608 (origin
12609 (method url-fetch)
12610 (uri (pypi-uri "nautilus" version))
12611 (sha256
12612 (base32
12613 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12614 (build-system python-build-system)
12615 (arguments `(#:tests? #f)) ; fails to import test modules
12616 (propagated-inputs
12617 `(("python-bcrypt" ,python-bcrypt)
12618 ("python-click" ,python-click)
12619 ("python-consul" ,python-consul)
12620 ("python-graphene" ,python-graphene)
12621 ("python-jinja2" ,python-jinja2)
12622 ("python-peewee" ,python-peewee)
12623 ("python-pika" ,python-pika)
12624 ("python-tornado" ,python-tornado)
12625 ("python-wtforms" ,python-wtforms)))
12626 (native-inputs
12627 `(("python-nose2" ,python-nose2)))
12628 (home-page "https://github.com/AlecAivazis/nautilus")
12629 (synopsis "Library for creating microservice applications")
12630 (description
12631 "Nautilus is a framework for flux based microservices that looks to
12632 provide extendible implementations of common aspects of a cloud so that you can
12633 focus on building massively scalable web applications.")
12634 (license license:expat)))
12635
12636 (define-public python-random2
12637 (package
12638 (name "python-random2")
12639 (version "1.0.1")
12640 (source (origin
12641 (method url-fetch)
12642 (uri (pypi-uri "random2" version ".zip"))
12643 (sha256
12644 (base32
12645 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12646 (build-system python-build-system)
12647 (native-inputs `(("unzip" ,unzip)))
12648 (home-page "http://pypi.python.org/pypi/random2")
12649 (synopsis "Python 3 version of the Python 2 @code{random} module")
12650 (description
12651 "This package provides a Python 3 ported version of Python 2.7’s
12652 @code{random} module. It has also been back-ported to work in Python 2.6.
12653
12654 In Python 3, the implementation of @code{randrange()} was changed, so that
12655 even with the same seed you get different sequences in Python 2 and 3.
12656
12657 This package closes that gap, allowing stable random number generation
12658 between the different Python versions.")
12659 (license license:psfl)))
12660
12661 (define-public python2-random2
12662 (package-with-python2 python-random2))
12663
12664 (define-public python-snowballstemmer
12665 (package
12666 (name "python-snowballstemmer")
12667 (version "2.0.0")
12668 (source (origin
12669 (method url-fetch)
12670 (uri (pypi-uri "snowballstemmer" version))
12671 (sha256
12672 (base32
12673 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12674 (build-system python-build-system)
12675 (arguments
12676 `(;; No tests exist
12677 #:tests? #f))
12678 (home-page "https://github.com/shibukawa/snowball_py")
12679 (synopsis "Snowball stemming library collection for Python")
12680 (description "This package provides 16 word stemmer algorithms generated
12681 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12682 English stemmer.")
12683 (license license:bsd-3)))
12684
12685 (define-public python2-snowballstemmer
12686 (package-with-python2 python-snowballstemmer))
12687
12688 (define-public python-setproctitle
12689 (package
12690 (name "python-setproctitle")
12691 (version "1.1.10")
12692 (source
12693 (origin
12694 (method url-fetch)
12695 (uri (pypi-uri "setproctitle" version))
12696 (sha256
12697 (base32
12698 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12699 (build-system python-build-system)
12700 (arguments
12701 '(#:phases
12702 (modify-phases %standard-phases
12703 (add-before 'check 'patch-Makefile
12704 ;; Stricly this is only required for the python2 variant.
12705 ;; But adding a phase in an inherited package seems to be
12706 ;; cumbersum. So we patch even for python3.
12707 (lambda _
12708 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12709 (when nose
12710 (substitute* "Makefile"
12711 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12712 (string-append nose "/bin/nosetests "))))
12713 #t)))
12714 (replace 'check
12715 (lambda _
12716 (setenv "PYTHON" (or (which "python3") (which "python")))
12717 (setenv "PYCONFIG" (or (which "python3-config")
12718 (which "python-config")))
12719 (setenv "CC" "gcc")
12720 ;; No need to extend PYTHONPATH to find the built package, since
12721 ;; the Makefile will build anyway
12722 (invoke "make" "check"))))))
12723 (native-inputs
12724 `(("procps" ,procps))) ; required for tests
12725 (home-page
12726 "https://github.com/dvarrazzo/py-setproctitle")
12727 (synopsis
12728 "Setproctitle implementation for Python to customize the process title")
12729 (description "The library allows a process to change its title (as displayed
12730 by system tools such as ps and top).
12731
12732 Changing the title is mostly useful in multi-process systems, for
12733 example when a master process is forked: changing the children's title
12734 allows identifying the task each process is busy with. The technique
12735 is used by PostgreSQL and the OpenSSH Server for example.")
12736 (license license:bsd-3)
12737 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12738
12739 (define-public python2-setproctitle
12740 (let ((base (package-with-python2
12741 (strip-python2-variant python-setproctitle))))
12742 (package
12743 (inherit base)
12744 (native-inputs `(("python2-nose" ,python2-nose)
12745 ,@(package-native-inputs base))))))
12746
12747 (define-public python-validictory
12748 (package
12749 (name "python-validictory")
12750 (version "1.0.1")
12751 (source
12752 (origin
12753 (method url-fetch)
12754 (uri (pypi-uri "validictory" version))
12755 (sha256
12756 (base32
12757 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12758 (build-system python-build-system)
12759 (arguments
12760 '(#:phases
12761 (modify-phases %standard-phases
12762 (add-after 'unpack 'bootstrap
12763 ;; Move the tests out of the package directory to avoid
12764 ;; packaging them.
12765 (lambda* _
12766 (rename-file "validictory/tests" "tests")
12767 (delete-file "tests/__init__.py")))
12768 (replace 'check
12769 (lambda _
12770 ;; Extend PYTHONPATH so the built package will be found.
12771 (setenv "PYTHONPATH"
12772 (string-append (getcwd) "/build/lib:"
12773 (getenv "PYTHONPATH")))
12774 (invoke "py.test" "-vv" ))))))
12775 (native-inputs
12776 `(("python-pytest" ,python-pytest)))
12777 (home-page
12778 "https://github.com/jamesturk/validictory")
12779 (synopsis "General purpose Python data validator")
12780 (description "It allows validation of arbitrary Python data structures.
12781
12782 The schema format is based on the JSON Schema
12783 proposal (http://json-schema.org), so combined with json the library is also
12784 useful as a validator for JSON data.")
12785 (license license:expat)))
12786
12787 (define-public python2-validictory
12788 (package-with-python2 python-validictory))
12789
12790 (define-public python-pyelftools
12791 (package
12792 (name "python-pyelftools")
12793 (version "0.25")
12794 (source
12795 (origin
12796 (method url-fetch)
12797 (uri (pypi-uri "pyelftools" version))
12798 (sha256
12799 (base32
12800 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
12801 (build-system python-build-system)
12802 (arguments
12803 `(#:phases
12804 (modify-phases %standard-phases
12805 (add-before 'check 'set-pythonpath
12806 (lambda _
12807 (setenv "PYTHONPATH"
12808 (string-append
12809 (getcwd) "/test/"
12810 ":" (getenv "PYTHONPATH")))
12811 #t)))))
12812 (home-page
12813 "https://github.com/eliben/pyelftools")
12814 (synopsis
12815 "Analyze binary and library file information")
12816 (description "This Python library provides interfaces for parsing and
12817 analyzing two binary and library file formats; the Executable and Linking
12818 Format (ELF), and debugging information in the Debugging With Attributed
12819 Record Format (DWARF).")
12820 (license license:public-domain)))
12821
12822 (define-public python-pyev
12823 (package
12824 (name "python-pyev")
12825 (version "0.9.0")
12826 (source
12827 (origin
12828 (method url-fetch)
12829 (uri (pypi-uri "pyev" version))
12830 (sha256
12831 (base32
12832 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
12833 (build-system python-build-system)
12834 (arguments
12835 `(#:tests? #f ; no test suite
12836 #:phases
12837 (modify-phases %standard-phases
12838 (add-after 'unpack 'patch
12839 (lambda* (#:key inputs #:allow-other-keys)
12840 (let ((libev (string-append (assoc-ref inputs "libev")
12841 "/lib/libev.so.4")))
12842 (substitute* "setup.py"
12843 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
12844 (string-append "libev_dll_name = \"" libev "\"")))))))))
12845 (inputs
12846 `(("libev" ,libev)))
12847 (home-page "http://pythonhosted.org/pyev/")
12848 (synopsis "Python libev interface")
12849 (description "Pyev provides a Python interface to libev.")
12850 (license license:gpl3)))
12851
12852 (define-public python2-pyev
12853 (package-with-python2 python-pyev))
12854
12855 (define-public python-imagesize
12856 (package
12857 (name "python-imagesize")
12858 (version "1.2.0")
12859 (source
12860 (origin
12861 (method url-fetch)
12862 (uri (pypi-uri "imagesize" version))
12863 (sha256
12864 (base32
12865 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
12866 (build-system python-build-system)
12867 (home-page "https://github.com/shibukawa/imagesize_py")
12868 (synopsis "Gets image size of files in various formats in Python")
12869 (description
12870 "This package allows determination of image size from
12871 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
12872 (license license:expat)))
12873
12874 (define-public python2-imagesize
12875 (package-with-python2 python-imagesize))
12876
12877 (define-public python-termstyle
12878 (package
12879 (name "python-termstyle")
12880 (version "0.1.11")
12881 (source
12882 (origin
12883 (method url-fetch)
12884 (uri (pypi-uri "termstyle" version))
12885 (sha256
12886 (base32
12887 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
12888 (build-system python-build-system)
12889 (arguments
12890 '(#:phases
12891 (modify-phases %standard-phases
12892 (replace 'check
12893 (lambda _
12894 (invoke "python" "test3.py"))))))
12895 (home-page "https://github.com/gfxmonk/termstyle")
12896 (synopsis "Console text coloring for Python")
12897 (description "This package provides console text coloring for Python.")
12898 (license license:bsd-3)))
12899
12900 (define-public python-argcomplete
12901 (package
12902 (name "python-argcomplete")
12903 (version "1.10.3")
12904 (source
12905 (origin
12906 (method url-fetch)
12907 (uri (pypi-uri "argcomplete" version))
12908 (sha256
12909 (base32
12910 "02jkc44drb0yjz6x28lvg6rj607n8r2irdpdvyylm8xnycn54zx3"))))
12911 (build-system python-build-system)
12912 (arguments
12913 `(#:phases
12914 (modify-phases %standard-phases
12915 (add-after 'unpack 'embed-tool-references
12916 (lambda _
12917 (substitute* "argcomplete/bash_completion.d/python-argcomplete.sh"
12918 ((" grep")
12919 (string-append " " (which "grep")))
12920 ((" egrep")
12921 (string-append " " (which "egrep")))
12922 (("elif which")
12923 (string-append "elif " (which "which")))
12924 (("\\$\\(which")
12925 (string-append "$(" (which "which"))))
12926 #t)))))
12927 (inputs
12928 `(("grep" ,grep)
12929 ("which" ,which)))
12930 (native-inputs
12931 `(("python-coverage" ,python-coverage)
12932 ("python-flake8" ,python-flake8)
12933 ("python-pexpect" ,python-pexpect)
12934 ("python-wheel" ,python-wheel)
12935 ("tcsh" ,tcsh)
12936 ("fish" ,fish)
12937 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
12938 (home-page "https://github.com/kislyuk/argcomplete")
12939 (synopsis "Shell tab completion for Python argparse")
12940 (description "argcomplete provides extensible command line tab completion
12941 of arguments and options for Python scripts using @code{argparse}. It's
12942 particularly useful for programs with many options or sub-parsers that can
12943 dynamically suggest completions; for example, when browsing resources over the
12944 network.")
12945 (license license:asl2.0)))
12946
12947 (define-public python2-argcomplete
12948 (package-with-python2 python-argcomplete))
12949
12950 (define-public python-xopen
12951 (package
12952 (name "python-xopen")
12953 (version "0.5.0")
12954 (source
12955 (origin
12956 (method url-fetch)
12957 (uri (pypi-uri "xopen" version))
12958 (sha256
12959 (base32
12960 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
12961 (build-system python-build-system)
12962 (propagated-inputs
12963 `(("python-setuptools-scm" ,python-setuptools-scm)))
12964 (home-page "https://github.com/marcelm/xopen/")
12965 (synopsis "Open compressed files transparently")
12966 (description "This module provides an @code{xopen} function that works like
12967 Python's built-in @code{open} function, but can also deal with compressed files.
12968 Supported compression formats are gzip, bzip2 and, xz, and are automatically
12969 recognized by their file extensions. The focus is on being as efficient as
12970 possible on all supported Python versions.")
12971 (license license:expat)))
12972
12973 (define-public python2-xopen
12974 (let ((base (package-with-python2
12975 (strip-python2-variant python-xopen))))
12976 (package
12977 (inherit base)
12978 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
12979 ,@(package-propagated-inputs base))))))
12980
12981 (define-public python-cheetah
12982 (package
12983 (name "python-cheetah")
12984 (version "3.1.0")
12985 (source
12986 (origin
12987 (method url-fetch)
12988 (uri (pypi-uri "Cheetah3" version))
12989 (sha256
12990 (base32
12991 "1ihag9cxll6b86fc8v5lkhmr3brdbi4yiz16zpgw79yylmv8fgr9"))))
12992 (build-system python-build-system)
12993 (arguments
12994 `(#:modules ((guix build utils)
12995 (guix build python-build-system)
12996 (ice-9 ftw)
12997 (srfi srfi-1)
12998 (srfi srfi-26))
12999 #:phases (modify-phases %standard-phases
13000 (add-after 'unpack 'use-absolute-python
13001 (lambda _
13002 (substitute* "Cheetah/CheetahWrapper.py"
13003 (("#!/usr/bin/env python")
13004 (string-append "#!" (which "python"))))
13005 #t))
13006 (replace 'check
13007 (lambda _
13008 (let ((cwd (getcwd)))
13009 (setenv "PYTHONPATH"
13010 (string-append
13011 cwd "/build/"
13012 (find (cut string-prefix? "lib" <>)
13013 (scandir (string-append cwd "/build")))
13014 ":" (getenv "PYTHONPATH")))
13015 (setenv "PATH"
13016 (string-append (getenv "PATH")
13017 ":" cwd "/bin"))
13018 (setenv "TMPDIR" "/tmp")
13019
13020 (substitute* "Cheetah/Tests/Test.py"
13021 (("unittest.TextTestRunner\\(\\)")
13022 "unittest.TextTestRunner(verbosity=2)"))
13023
13024 (invoke "python" "Cheetah/Tests/Test.py")))))))
13025 (propagated-inputs
13026 `(("python-markdown" ,python-markdown))) ;optional
13027 (home-page "https://cheetahtemplate.org/")
13028 (synopsis "Template engine")
13029 (description "Cheetah is a text-based template engine and Python code
13030 generator.
13031
13032 Cheetah can be used as a standalone templating utility or referenced as
13033 a library from other Python applications. It has many potential uses,
13034 but web developers looking for a viable alternative to ASP, JSP, PHP and
13035 PSP are expected to be its principle user group.
13036
13037 Features:
13038 @enumerate
13039 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13040 text-based format.
13041 @item Cleanly separates content, graphic design, and program code.
13042 @item Blends the power and flexibility of Python with a simple template language
13043 that non-programmers can understand.
13044 @item Gives template writers full access to any Python data structure, module,
13045 function, object, or method in their templates.
13046 @item Makes code reuse easy by providing an object-orientated interface to
13047 templates that is accessible from Python code or other Cheetah templates.
13048 One template can subclass another and selectively reimplement sections of it.
13049 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13050 improve the performance of a dynamic website.
13051 @item Compiles templates into optimized, yet readable, Python code.
13052 @end enumerate")
13053 (license (license:x11-style "file://LICENSE"))))
13054
13055 (define-public python2-cheetah
13056 (package-with-python2 python-cheetah))
13057
13058 (define-public python-dulwich
13059 (package
13060 (name "python-dulwich")
13061 (version "0.18.6")
13062 (source
13063 (origin
13064 (method url-fetch)
13065 (uri (list (string-append "https://www.dulwich.io/releases/"
13066 "dulwich-" version ".tar.gz")
13067 (pypi-uri "dulwich" version)))
13068 (sha256
13069 (base32
13070 "1aa1xfrxkc3j9s4xi0llhf5gndyi9ryprcxsqfa5fcb8ph34981q"))))
13071 (build-system python-build-system)
13072 (arguments
13073 `(#:phases
13074 (modify-phases %standard-phases
13075 (add-before 'check 'fix-tests
13076 (lambda* (#:key inputs #:allow-other-keys)
13077 ;; The tests use Popen with a custom environment which doesn't
13078 ;; include PATH.
13079 (substitute* "dulwich/tests/compat/utils.py"
13080 (("'git'") (string-append "'"
13081 (which "git")
13082 "'")))
13083 (substitute* '("dulwich/tests/test_repository.py"
13084 "dulwich/tests/test_hooks.py")
13085 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13086 (setenv "TEST_RUNNER" "unittest")
13087 (setenv "PYTHONHASHSEED" "random")
13088 #t)))))
13089 (propagated-inputs
13090 `(("python-fastimport" ,python-fastimport)))
13091 (native-inputs
13092 `(("python-mock" ,python-mock)
13093 ("python-geventhttpclient" ,python-geventhttpclient)
13094 ("git" ,git)))
13095 (home-page "https://www.dulwich.io/")
13096 (synopsis "Git implementation in Python")
13097 (description "Dulwich is an implementation of the Git file formats and
13098 protocols written in pure Python.")
13099 ;; Can be used with either license.
13100 (license (list license:asl2.0 license:gpl2+))))
13101
13102 (define-public python2-dulwich
13103 (package-with-python2 python-dulwich))
13104
13105 (define-public python-pbkdf2
13106 (package
13107 (name "python-pbkdf2")
13108 (version "1.3")
13109 (source
13110 (origin
13111 (method url-fetch)
13112 (uri (pypi-uri "pbkdf2" version))
13113 (sha256
13114 (base32
13115 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13116 (build-system python-build-system)
13117 (arguments
13118 '(#:phases
13119 (modify-phases %standard-phases
13120 (replace 'check
13121 (lambda _
13122 (setenv "PYTHONPATH"
13123 (string-append (getcwd) "/build/lib:"
13124 (getenv "PYTHONPATH")))
13125 (invoke "python" "test/test_pbkdf2.py"))))))
13126 (propagated-inputs
13127 `(("python-pycrypto" ,python-pycrypto))) ; optional
13128 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13129 (synopsis "Password-based key derivation")
13130 (description "This module implements the password-based key derivation
13131 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13132
13133 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13134 is part of the RSA Public Key Cryptography Standards series. The provided
13135 implementation takes a password or a passphrase and a salt value (and
13136 optionally a iteration count, a digest module, and a MAC module) and provides
13137 a file-like object from which an arbitrarly-sized key can be read.")
13138 (license license:expat)))
13139
13140 (define-public python2-pbkdf2
13141 (package-with-python2 python-pbkdf2))
13142
13143 (define-public python-qrcode
13144 (package
13145 (name "python-qrcode")
13146 (version "6.1")
13147 (source
13148 (origin
13149 (method url-fetch)
13150 (uri (pypi-uri "qrcode" version))
13151 (sha256
13152 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13153 (build-system python-build-system)
13154 (arguments
13155 ;; FIXME: Tests require packaging 'pymaging'.
13156 '(#:tests? #f))
13157 (propagated-inputs
13158 `(("python-lxml" ,python-lxml) ; for SVG output
13159 ("python-pillow" ,python-pillow) ; for PNG output
13160 ("python-six" ,python-six)))
13161 (home-page "https://github.com/lincolnloop/python-qrcode")
13162 (synopsis "QR Code image generator")
13163 (description "This package provides a pure Python QR Code generator
13164 module. It uses the Python Imaging Library (PIL) to allow for the generation
13165 of QR Codes.
13166
13167 In addition this package provides a command line tool to generate QR codes and
13168 either write these QR codes to a file or do the output as ascii art at the
13169 console.")
13170 (license license:bsd-3)))
13171
13172 (define-public python2-qrcode
13173 (package-with-python2 python-qrcode))
13174
13175 (define-public python-rst2ansi
13176 (package
13177 (name "python-rst2ansi")
13178 (version "0.1.5")
13179 (source
13180 (origin
13181 (method url-fetch)
13182 (uri (pypi-uri "rst2ansi" version))
13183 (sha256
13184 (base32
13185 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13186 (build-system python-build-system)
13187 (propagated-inputs
13188 `(("python-docutils" ,python-docutils)))
13189 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13190 (synopsis "Convert RST to ANSI-decorated console output")
13191 (description
13192 "Python module dedicated to rendering RST (reStructuredText) documents
13193 to ansi-escaped strings suitable for display in a terminal.")
13194 (license license:expat)))
13195
13196 (define-public python-ansi2html
13197 (package
13198 (name "python-ansi2html")
13199 (version "1.2.0")
13200 (source
13201 (origin
13202 (method url-fetch)
13203 (uri (pypi-uri "ansi2html" version))
13204 (sha256
13205 (base32
13206 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13207 (build-system python-build-system)
13208 (native-inputs
13209 `(("python-mock" ,python-mock)
13210 ("python-nose" ,python-nose)))
13211 (propagated-inputs
13212 `(("python-six" ,python-six)))
13213 (home-page "https://github.com/ralphbean/ansi2html")
13214 (synopsis "Convert ANSI-decorated console output to HTML")
13215 (description
13216 "@command{ansi2html} is a Python library and command line utility for
13217 convering text with ANSI color codes to HTML or LaTeX.")
13218 (license license:gpl3+)))
13219
13220 (define-public python2-ansi2html
13221 (package-with-python2 python-ansi2html))
13222
13223 (define-public python-ddt
13224 (package
13225 (name "python-ddt")
13226 (version "1.1.3")
13227 (source
13228 (origin
13229 (method url-fetch)
13230 (uri (pypi-uri "ddt" version))
13231 (sha256
13232 (base32
13233 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13234 (build-system python-build-system)
13235 (native-inputs
13236 `(("python-mock" ,python-mock)
13237 ("python-nose" ,python-nose)))
13238 (propagated-inputs
13239 `(("python-six" ,python-six)
13240 ("python-pyyaml" ,python-pyyaml)))
13241 (home-page "https://github.com/txels/ddt")
13242 (synopsis "Data-Driven Tests")
13243 (description
13244 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13245 running it with different test data, and make it appear as multiple test
13246 cases.")
13247 (license license:expat)))
13248
13249 (define-public python2-ddt
13250 (package-with-python2 python-ddt))
13251
13252 (define-public python-pycountry
13253 (package
13254 (name "python-pycountry")
13255 (version "18.5.26")
13256 (source
13257 (origin
13258 (method url-fetch)
13259 (uri (pypi-uri "pycountry" version))
13260 (sha256
13261 (base32
13262 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13263 (build-system python-build-system)
13264 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13265 (synopsis "ISO databases for languages, countries, currencies, etc.")
13266 (description
13267 "@code{pycountry} provides the ISO databases for the standards:
13268 @enumerate
13269 @item 639-3 (Languages)
13270 @item 3166 (Countries)
13271 @item 3166-3 (Deleted Countries)
13272 @item 3166-2 (Subdivisions of countries)
13273 @item 4217 (Currencies)
13274 @item 15924 (Scripts)
13275 @end enumerate
13276 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13277 through a Python API.")
13278 (license license:lgpl2.1+)))
13279
13280 (define-public python2-pycountry
13281 (package-with-python2 python-pycountry))
13282
13283 (define-public python-pycosat
13284 (package
13285 (name "python-pycosat")
13286 (version "0.6.1")
13287 (source
13288 (origin
13289 (method url-fetch)
13290 (uri (pypi-uri "pycosat" version))
13291 (sha256
13292 (base32
13293 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13294 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13295 (build-system python-build-system)
13296 (home-page "https://github.com/ContinuumIO/pycosat")
13297 (synopsis "Bindings to picosat (a SAT solver)")
13298 (description
13299 "This package provides efficient Python bindings to @code{picosat} on
13300 the C level. When importing pycosat, the @code{picosat} solver becomes part
13301 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13302 Problem} (SAT) solver.")
13303 (license license:expat)))
13304
13305 (define-public python2-pycosat
13306 (package-with-python2 python-pycosat))
13307
13308 (define-public python2-ruamel.ordereddict
13309 (package
13310 (name "python2-ruamel.ordereddict")
13311 (version "0.4.9")
13312 (source
13313 (origin
13314 (method url-fetch)
13315 (uri (pypi-uri "ruamel.ordereddict" version))
13316 (sha256
13317 (base32
13318 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13319 (build-system python-build-system)
13320 (arguments
13321 `(#:python ,python-2
13322 #:phases
13323 (modify-phases %standard-phases
13324 (delete 'check)
13325 (add-after 'install 'check
13326 (lambda* (#:key inputs outputs #:allow-other-keys)
13327 (add-installed-pythonpath inputs outputs)
13328 (invoke "python" "test/testordereddict.py"))))))
13329 (home-page "https://bitbucket.org/ruamel/ordereddict")
13330 (synopsis "Version of dict that keeps keys in insertion order")
13331 (description
13332 "This is an implementation of an ordered dictionary with @dfn{Key
13333 Insertion Order} (KIO: updates of values do not affect the position of the
13334 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13335 removed and put at the back). The standard library module @code{OrderedDict},
13336 implemented later, implements a subset of @code{ordereddict} functionality.
13337 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13338 Order} (KSO, no sorting function can be specified, but a transform can be
13339 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13340 (license license:expat)))
13341
13342 (define-public python-pypeg2
13343 (package
13344 (name "python-pypeg2")
13345 (version "2.15.2")
13346 (source
13347 (origin
13348 (method url-fetch)
13349 (uri (pypi-uri "pyPEG2" version))
13350 (sha256
13351 (base32
13352 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13353 (build-system python-build-system)
13354 (propagated-inputs `(("python-lxml" ,python-lxml)))
13355 (arguments
13356 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13357 '(#:tests? #f))
13358 (home-page "https://fdik.org/pyPEG/")
13359 (synopsis "Parsering Expression Grammars in Python")
13360 (description "PyPEG is an intrinsic parser interpreter framework for
13361 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13362 parse many formal languages.")
13363 (license license:gpl2)))
13364
13365 (define-public python-incremental
13366 (package
13367 (name "python-incremental")
13368 (version "17.5.0")
13369 (source
13370 (origin
13371 (method url-fetch)
13372 (uri (pypi-uri "incremental" version))
13373 (sha256
13374 (base32
13375 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13376 (build-system python-build-system)
13377 (home-page "https://github.com/hawkowl/incremental")
13378 (synopsis "Library for versioning Python projects")
13379 (description "Incremental is a small library that versions your Python
13380 projects.")
13381 (license license:expat)))
13382
13383 (define-public python2-incremental
13384 (package-with-python2 python-incremental))
13385
13386 (define-public python-invoke
13387 (package
13388 (name "python-invoke")
13389 (home-page "https://www.pyinvoke.org/")
13390 (version "1.3.0")
13391 (source (origin
13392 (method url-fetch)
13393 (uri (pypi-uri "invoke" version))
13394 (sha256
13395 (base32
13396 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13397 (build-system python-build-system)
13398 (arguments
13399 ;; XXX: Requires many dependencies that are not yet in Guix.
13400 `(#:tests? #f))
13401 (synopsis "Pythonic task execution")
13402 (description
13403 "Invoke is a Python task execution tool and library, drawing inspiration
13404 from various sources to arrive at a powerful and clean feature set. It is
13405 evolved from the Fabric project, but focuses on local and abstract concerns
13406 instead of servers and network commands.")
13407 (license license:bsd-3)))
13408
13409 (define-public python2-invoke
13410 (package-with-python2 python-invoke))
13411
13412 (define-public python-automat
13413 (package
13414 (name "python-automat")
13415 (version "0.7.0")
13416 (source (origin
13417 (method url-fetch)
13418 (uri (pypi-uri "Automat" version))
13419 (sha256
13420 (base32
13421 "03ivg70n3b1cbcd2zvjhk8y4kmqxcvhmili39lmgx09dza1qpmyb"))))
13422 (build-system python-build-system)
13423 ;; We disable the tests because they require python-twisted, while
13424 ;; python-twisted depends on python-automat. Twisted is optional, but the
13425 ;; tests fail if it is not available. Also see
13426 ;; <https://github.com/glyph/automat/issues/71>.
13427 (arguments '(#:tests? #f))
13428 (native-inputs
13429 `(("python-m2r" ,python-m2r)
13430 ("python-setuptools-scm" ,python-setuptools-scm)
13431 ("python-graphviz" ,python-graphviz)))
13432 (propagated-inputs
13433 `(("python-six" ,python-six)
13434 ("python-attrs" ,python-attrs)))
13435 (home-page "https://github.com/glyph/Automat")
13436 (synopsis "Self-service finite-state machines")
13437 (description "Automat is a library for concise, idiomatic Python
13438 expression of finite-state automata (particularly deterministic finite-state
13439 transducers).")
13440 (license license:expat)))
13441
13442 (define-public python2-automat
13443 (package-with-python2 python-automat))
13444
13445 (define-public python-m2r
13446 (package
13447 (name "python-m2r")
13448 (version "0.2.1")
13449 (source (origin
13450 (method url-fetch)
13451 (uri (pypi-uri "m2r" version))
13452 (sha256
13453 (base32
13454 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13455 (build-system python-build-system)
13456 (propagated-inputs
13457 `(("python-docutils" ,python-docutils)
13458 ("python-mistune" ,python-mistune)))
13459 (native-inputs
13460 `(("python-pygments" ,python-pygments)
13461 ("python-mock" ,python-mock)))
13462 (home-page "https://github.com/miyakogi/m2r")
13463 (synopsis "Markdown to reStructuredText converter")
13464 (description "M2R converts a markdown file including reST markups to valid
13465 reST format.")
13466 (license license:expat)))
13467
13468 (define-public python2-m2r
13469 (package-with-python2 python-m2r))
13470
13471 (define-public python-constantly
13472 (package
13473 (name "python-constantly")
13474 (version "15.1.0")
13475 (source (origin
13476 (method url-fetch)
13477 (uri (pypi-uri "constantly" version))
13478 (sha256
13479 (base32
13480 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13481 (build-system python-build-system)
13482 (home-page "https://github.com/twisted/constantly")
13483 (synopsis "Symbolic constants in Python")
13484 (description "Constantly is a Python library that provides symbolic
13485 constant support. It includes collections and constants with text, numeric,
13486 and bit flag values.")
13487 (license license:expat)))
13488
13489 (define-public python2-constantly
13490 (package-with-python2 python-constantly))
13491
13492 (define-public python-attrs
13493 (package
13494 (name "python-attrs")
13495 (version "19.3.0")
13496 (source (origin
13497 (method url-fetch)
13498 (uri (pypi-uri "attrs" version))
13499 (sha256
13500 (base32
13501 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13502 (build-system python-build-system)
13503 (arguments
13504 `(#:modules ((guix build utils)
13505 (guix build python-build-system)
13506 (ice-9 ftw)
13507 (srfi srfi-1)
13508 (srfi srfi-26))
13509 #:phases (modify-phases %standard-phases
13510 (replace 'check
13511 (lambda _
13512 (let ((cwd (getcwd)))
13513 (setenv "PYTHONPATH"
13514 (string-append
13515 cwd "/build/"
13516 (find (cut string-prefix? "lib" <>)
13517 (scandir (string-append cwd "/build")))
13518 ":"
13519 (getenv "PYTHONPATH")))
13520 (invoke "python" "-m" "pytest")))))))
13521 (native-inputs
13522 `(("python-coverage" ,python-coverage)
13523 ("python-hypothesis" ,python-hypothesis)
13524 ("python-pympler" ,python-pympler)
13525 ("python-pytest" ,python-pytest)
13526 ("python-six" ,python-six)
13527 ("python-sphinx" ,python-sphinx)
13528 ("python-zope-interface" ,python-zope-interface)))
13529 (home-page "https://github.com/python-attrs/attrs/")
13530 (synopsis "Attributes without boilerplate")
13531 (description "@code{attrs} is a Python package with class decorators that
13532 ease the chores of implementing the most common attribute-related object
13533 protocols.")
13534 (license license:expat)))
13535
13536 (define-public python2-attrs
13537 (package-with-python2 python-attrs))
13538
13539 (define-public python-attrs-bootstrap
13540 (package
13541 (inherit python-attrs)
13542 (name "python-attrs-bootstrap")
13543 (native-inputs `())
13544 (arguments `(#:tests? #f))))
13545
13546 (define-public python2-attrs-bootstrap
13547 (package-with-python2 python-attrs-bootstrap))
13548
13549 (define-public python2-cliapp
13550 (package
13551 (name "python2-cliapp")
13552 (version "1.20180812.1")
13553 (source
13554 (origin
13555 (method url-fetch)
13556 (uri (string-append
13557 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13558 version ".tar.gz"))
13559 (sha256
13560 (base32
13561 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13562 (build-system python-build-system)
13563 (arguments
13564 `(#:python ,python-2
13565 #:phases
13566 (modify-phases %standard-phases
13567 ;; check phase needs to be run before the build phase. If not,
13568 ;; coverage-test-runner looks for tests for the built source files,
13569 ;; and fails.
13570 (delete 'check)
13571 (add-before 'build 'check
13572 (lambda _
13573 ;; Disable python3 tests
13574 (substitute* "check"
13575 (("python3") "# python3"))
13576 (invoke "./check"))))))
13577 (native-inputs
13578 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13579 ("python2-pep8" ,python2-pep8)))
13580 (propagated-inputs
13581 `(("python2-pyaml" ,python2-pyaml)))
13582 (home-page "https://liw.fi/cliapp/")
13583 (synopsis "Python framework for command line programs")
13584 (description "@code{python2-cliapp} is a python framework for
13585 command line programs. It contains the typical stuff such programs
13586 need to do, such as parsing the command line for options, and
13587 iterating over input files.")
13588 (license license:gpl2+)))
13589
13590 (define-public python2-ttystatus
13591 (package
13592 (name "python2-ttystatus")
13593 (version "0.36")
13594 (source
13595 (origin
13596 (method url-fetch)
13597 (uri (string-append
13598 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13599 version ".tar.gz"))
13600 (sha256
13601 (base32
13602 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13603 (build-system python-build-system)
13604 (native-inputs
13605 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13606 ("python2-pep8" ,python2-pep8)))
13607 (arguments
13608 `(#:python ,python-2
13609 #:phases
13610 (modify-phases %standard-phases
13611 ;; check phase needs to be run before the build phase. If not,
13612 ;; coverage-test-runner looks for tests for the built source files,
13613 ;; and fails.
13614 (delete 'check)
13615 (add-before 'build 'check
13616 (lambda _ (invoke "make" "check"))))))
13617 (home-page "https://liw.fi/ttystatus/")
13618 (synopsis "Python library for showing progress reporting and
13619 status updates on terminals")
13620 (description "@code{python2-ttystatus} is a python library for
13621 showing progress reporting and status updates on terminals, for
13622 command line programs. Output is automatically adapted to the width
13623 of the terminal: truncated if it does not fit, and resized if the
13624 terminal size changes.")
13625 (license license:gpl3+)))
13626
13627 (define-public python2-tracing
13628 (package
13629 (name "python2-tracing")
13630 (version "0.10")
13631 (source
13632 (origin
13633 (method url-fetch)
13634 (uri (string-append
13635 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13636 version ".tar.gz"))
13637 (sha256
13638 (base32
13639 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13640 (build-system python-build-system)
13641 (arguments
13642 `(#:python ,python-2))
13643 (home-page "https://liw.fi/tracing/")
13644 (synopsis "Python debug logging helper")
13645 (description "@code{python2-tracing} is a python library for
13646 logging debug messages. It provides a way to turn debugging messages
13647 on and off, based on the filename they occur in. It is much faster
13648 than using @code{logging.Filter} to accomplish the same thing, which
13649 matters when code is run in production mode. The actual logging still
13650 happens using the @code{logging} library.")
13651 (license license:gpl3+)))
13652
13653 (define-public python2-larch
13654 (package
13655 (name "python2-larch")
13656 (version "1.20151025")
13657 (source
13658 (origin
13659 (method url-fetch)
13660 (uri (string-append
13661 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13662 version ".tar.gz"))
13663 (patches (search-patches
13664 "python2-larch-coverage-4.0a6-compatibility.patch"))
13665 (sha256
13666 (base32
13667 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13668 (build-system python-build-system)
13669 (arguments
13670 `(#:python ,python-2
13671 #:phases
13672 (modify-phases %standard-phases
13673 ;; check phase needs to be run before the build phase. If not,
13674 ;; coverage-test-runner looks for tests for the built source files,
13675 ;; and fails.
13676 (delete 'check)
13677 (add-before 'build 'check
13678 (lambda _ (invoke "make" "check"))))))
13679 (native-inputs
13680 `(("cmdtest" ,cmdtest)
13681 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13682 (propagated-inputs
13683 `(("python2-tracing" ,python2-tracing)))
13684 (home-page "https://liw.fi/larch/")
13685 (synopsis "Python copy-on-write B-tree library")
13686 (description "@code{python2-larch} is an implementation of
13687 particular kind of B-tree, based on research by Ohad Rodeh. See
13688 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13689 on the data structure.
13690
13691 The distinctive feature of this B-tree is that a node is never
13692 (conceptually) modified. Instead, all updates are done by
13693 copy-on-write. This makes it easy to clone a tree, and modify only the
13694 clone, while other processes access the original tree.")
13695 (license license:gpl3+)))
13696
13697 (define-public python-astroid
13698 (package
13699 (name "python-astroid")
13700 (version "2.3.3")
13701 (source
13702 (origin
13703 (method url-fetch)
13704 (uri (pypi-uri "astroid" version))
13705 (sha256
13706 (base32 "0fnibsl2cb5mvzbfm7sycj85smx48f8w8m7ks1sqlmpr9ps0gski"))))
13707 (build-system python-build-system)
13708 (propagated-inputs
13709 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13710 ("python-six" ,python-six)
13711 ("python-typed-ast" ,python-typed-ast)
13712 ("python-wrapt" ,python-wrapt)))
13713 (native-inputs
13714 `(("python-dateutil" ,python-dateutil)
13715 ("python-nose" ,python-nose)
13716 ("python-pytest" ,python-pytest)
13717 ("python-pytest-runner" ,python-pytest-runner)))
13718 (arguments
13719 `(#:phases
13720 (modify-phases %standard-phases
13721 (add-after 'unpack 'remove-spurious-test
13722 (lambda _
13723 ;; This can be removed after upgrading from python-3.7
13724 ;; https://github.com/PyCQA/astroid/issues/593
13725 ;; https://bugs.python.org/issue34056
13726 (delete-file "astroid/tests/unittest_modutils.py")
13727 #t))
13728 (replace 'check
13729 (lambda _
13730 (invoke "pytest" "astroid"))))))
13731 (home-page "https://github.com/PyCQA/astroid")
13732 (synopsis "Common base representation of python source code for pylint and
13733 other projects")
13734 (description "@code{python-astroid} provides a common base representation
13735 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13736
13737 It provides a compatible representation which comes from the _ast module. It
13738 rebuilds the tree generated by the builtin _ast module by recursively walking
13739 down the AST and building an extended ast. The new node classes have
13740 additional methods and attributes for different usages. They include some
13741 support for static inference and local name scopes. Furthermore, astroid
13742 builds partial trees by inspecting living objects.")
13743 (license license:lgpl2.1+)
13744 (properties `((python2-variant . ,(delay python2-astroid))))))
13745
13746 (define-public python2-astroid
13747 (let ((base (package-with-python2
13748 (strip-python2-variant python-astroid))))
13749 (package (inherit base)
13750 ;; Version 2.x removes python2 support.
13751 (version "1.6.5")
13752 (source
13753 (origin
13754 (method url-fetch)
13755 (uri (pypi-uri "astroid" version))
13756 (sha256
13757 (base32
13758 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13759 (arguments
13760 (substitute-keyword-arguments (package-arguments base)
13761 ((#:phases phases)
13762 `(modify-phases ,phases
13763 (add-after 'unpack 'remove-spurious-test
13764 (lambda _
13765 ;; https://github.com/PyCQA/astroid/issues/276
13766 (delete-file "astroid/tests/unittest_brain.py")
13767 #t))
13768 (replace 'check
13769 (lambda _
13770 (invoke"python" "-m" "unittest" "discover"
13771 "-p" "unittest*.py")))))))
13772 (native-inputs `())
13773 (propagated-inputs
13774 `(("python2-backports-functools-lru-cache"
13775 ,python2-backports-functools-lru-cache)
13776 ("python2-enum34" ,python2-enum34)
13777 ("python2-singledispatch" ,python2-singledispatch)
13778 ,@(alist-delete "python-typed-ast"
13779 (package-propagated-inputs base)))))))
13780
13781 (define-public python-isort
13782 (package
13783 (name "python-isort")
13784 (version "4.3.4")
13785 (source
13786 (origin
13787 (method git-fetch)
13788 (uri (git-reference
13789 ;; Tests pass only from the Github sources
13790 (url "https://github.com/timothycrosley/isort")
13791 (commit version)))
13792 (file-name (git-file-name name version))
13793 (sha256
13794 (base32
13795 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
13796 (build-system python-build-system)
13797 (native-inputs
13798 `(("python-mock" ,python-mock)
13799 ("python-pytest" ,python-pytest)))
13800 (home-page "https://github.com/timothycrosley/isort")
13801 (synopsis "Python utility/library to sort python imports")
13802 (description "@code{python-isort} is a python utility/library to sort
13803 imports alphabetically, and automatically separated into sections. It
13804 provides a command line utility, a python library and plugins for various
13805 editors.")
13806 (license license:expat)
13807 (properties `((python2-variant . ,(delay python2-isort))))))
13808
13809 (define-public python2-isort
13810 (let ((base (package-with-python2
13811 (strip-python2-variant python-isort))))
13812 (package (inherit base)
13813 (native-inputs
13814 `(("python2-futures" ,python2-futures)
13815 ,@(package-native-inputs base))))))
13816
13817 (define-public python2-backports-functools-lru-cache
13818 (package
13819 (name "python2-backports-functools-lru-cache")
13820 (version "1.5")
13821 (source
13822 (origin
13823 (method url-fetch)
13824 ;; only the pypi tarballs contain the necessary metadata
13825 (uri (pypi-uri "backports.functools_lru_cache" version))
13826 (sha256
13827 (base32
13828 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
13829 (build-system python-build-system)
13830 (native-inputs
13831 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
13832 (arguments
13833 `(#:python ,python-2))
13834 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
13835 (synopsis "Backport of functools.lru_cache from Python 3.3")
13836 (description "@code{python2-backports-functools-lru-cache} is a backport
13837 of @code{functools.lru_cache} from python 3.3.")
13838 (license license:expat)))
13839
13840 (define-public python-configparser
13841 (package
13842 (name "python-configparser")
13843 (version "4.0.2")
13844 (source
13845 (origin
13846 (method url-fetch)
13847 (uri (pypi-uri "configparser" version))
13848 (sha256
13849 (base32
13850 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
13851 (native-inputs
13852 `(("python-setuptools_scm" ,python-setuptools-scm)))
13853 (build-system python-build-system)
13854 (home-page "https://github.com/jaraco/configparser/")
13855 (synopsis "Backport of configparser from python 3.5")
13856 (description "@code{python-configparser} is a backport of
13857 @code{configparser} from Python 3.5 so that it can be used directly
13858 in other versions.")
13859 (license license:expat)))
13860
13861 (define-public python2-configparser
13862 (package-with-python2 python-configparser))
13863
13864 (define-public python-mando
13865 (package
13866 (name "python-mando")
13867 (version "0.6.4")
13868 (source (origin
13869 (method url-fetch)
13870 (uri (pypi-uri "mando" version))
13871 (sha256
13872 (base32
13873 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
13874 (build-system python-build-system)
13875 (propagated-inputs
13876 `(("python-rst2ansi" ,python-rst2ansi)
13877 ("python-six" ,python-six)))
13878 (native-inputs
13879 `(("python-pytest" ,python-pytest)))
13880 (home-page "https://mando.readthedocs.org/")
13881 (synopsis
13882 "Wrapper around argparse, allowing creation of complete CLI applications")
13883 (description
13884 "This package is a wrapper around argparse, allowing you to write complete CLI
13885 applications in seconds while maintaining all the flexibility.")
13886 (license license:expat)))
13887
13888 (define-public python2-mando
13889 (package-with-python2 python-mando))
13890
13891 (define-public python2-argparse
13892 (package
13893 (name "python2-argparse")
13894 (version "1.4.0")
13895 (source
13896 (origin
13897 (method url-fetch)
13898 (uri (pypi-uri "argparse" version))
13899 (sha256
13900 (base32
13901 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
13902 (build-system python-build-system)
13903 (arguments
13904 `(#:python ,python-2))
13905 (home-page "https://github.com/ThomasWaldmann/argparse/")
13906 (synopsis "Python command-line parsing library")
13907 (description
13908 "This package is mostly for people who want to have @code{argparse} on
13909 older Pythons because it was not part of the standard library back then.")
13910 (license license:psfl)))
13911
13912 (define-public python-fudge
13913 (package
13914 (name "python-fudge")
13915 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
13916 ;; package, which is currently the only use of this package.
13917 (version "0.9.6")
13918 (source
13919 (origin
13920 (method url-fetch)
13921 (uri (pypi-uri "fudge" version))
13922 (sha256
13923 (base32
13924 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
13925 (build-system python-build-system)
13926 (arguments
13927 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
13928 (home-page "https://github.com/fudge-py/fudge")
13929 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
13930 (description
13931 "Fudge is a Python module for using fake objects (mocks and stubs) to
13932 test real ones.
13933
13934 In readable Python code, you declare the methods available on your fake object
13935 and how they should be called. Then you inject that into your application and
13936 start testing. This declarative approach means you don’t have to record and
13937 playback actions and you don’t have to inspect your fakes after running code.
13938 If the fake object was used incorrectly then you’ll see an informative
13939 exception message with a traceback that points to the culprit.")
13940 (license license:expat)))
13941
13942 (define-public python2-fudge
13943 (package-with-python2 python-fudge))
13944
13945 (define-public python-mwclient
13946 (package
13947 (name "python-mwclient")
13948 (version "0.10.0")
13949 (source
13950 (origin
13951 (method git-fetch)
13952 ;; The PyPI version wouldn't contain tests.
13953 (uri (git-reference
13954 (url "https://github.com/mwclient/mwclient")
13955 (commit (string-append "v" version))))
13956 (file-name (git-file-name name version))
13957 (sha256
13958 (base32
13959 "1c3q6lwmb05yqywc4ya98ca7hsl15niili8rccl4n1yqp77c103v"))))
13960 (build-system python-build-system)
13961 (propagated-inputs
13962 `(("python-requests-oauthlib" ,python-requests-oauthlib)
13963 ("python-six" ,python-six)))
13964 (native-inputs
13965 `(("python-mock" ,python-mock)
13966 ("python-pytest" ,python-pytest)
13967 ("python-pytest-cov" ,python-pytest-cov)
13968 ("python-pytest-runner" ,python-pytest-runner)
13969 ("python-responses" ,python-responses)))
13970 (home-page "https://github.com/btongminh/mwclient")
13971 (synopsis "MediaWiki API client")
13972 (description "This package provides a MediaWiki API client.")
13973 (license license:expat)))
13974
13975 (define-public python2-mwclient
13976 (package-with-python2 python-mwclient))
13977
13978 (define-public python-utils
13979 (package
13980 (name "python-utils")
13981 (version "2.1.0")
13982 (source (origin
13983 (method url-fetch)
13984 (uri (pypi-uri "python-utils" version))
13985 (sha256
13986 (base32
13987 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
13988 (build-system python-build-system)
13989 (native-inputs
13990 `(("pytest-runner" ,python-pytest-runner)
13991 ("pytest" ,python-pytest)
13992 ("six" ,python-six)))
13993 (home-page "https://github.com/WoLpH/python-utils")
13994 (synopsis "Convenient utilities not included with the standard Python install")
13995 (description
13996 "Python Utils is a collection of small Python functions and classes which
13997 make common patterns shorter and easier.")
13998 (license license:bsd-2)))
13999
14000 (define-public python2-utils
14001 (package-with-python2 python-utils))
14002
14003 (define-public python-diff-match-patch
14004 (package
14005 (name "python-diff-match-patch")
14006 (version "20121119")
14007 (source
14008 (origin
14009 (method url-fetch)
14010 (uri (pypi-uri "diff-match-patch" version))
14011 (sha256
14012 (base32
14013 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14014 (build-system python-build-system)
14015 (home-page "https://code.google.com/p/google-diff-match-patch")
14016 (synopsis "Synchronize plain text")
14017 (description "Diff Match and Patch libraries offer robust algorithms to
14018 perform the operations required for synchronizing plain text.")
14019 (license license:asl2.0)))
14020
14021 (define-public python2-diff-match-patch
14022 (package-with-python2 python-diff-match-patch))
14023
14024 (define-public python-dirsync
14025 (package
14026 (name "python-dirsync")
14027 (version "2.2.3")
14028 (source
14029 (origin
14030 (method url-fetch)
14031 (uri (pypi-uri "dirsync" version))
14032 (sha256
14033 (base32
14034 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14035 (build-system python-build-system)
14036 (propagated-inputs
14037 `(("six" ,python-six)))
14038 (home-page "https://bitbucket.org/tkhyn/dirsync")
14039 (synopsis "Advanced directory tree synchronisation tool")
14040 (description "Advanced directory tree synchronisation tool.")
14041 (license license:expat)))
14042
14043 (define-public python2-dirsync
14044 (package-with-python2 python-dirsync))
14045
14046 (define-public python-levenshtein
14047 (package
14048 (name "python-levenshtein")
14049 (version "0.12.0")
14050 (source
14051 (origin
14052 (method url-fetch)
14053 (uri (pypi-uri "python-Levenshtein" version))
14054 (sha256
14055 (base32
14056 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14057 (build-system python-build-system)
14058 (home-page "https://github.com/ztane/python-Levenshtein")
14059 (synopsis "Fast computation of Levenshtein distance and string similarity")
14060 (description
14061 "The Levenshtein Python C extension module contains functions for fast computation of
14062 @enumerate
14063 @item Levenshtein (edit) distance, and edit operations
14064 @item string similarity
14065 @item approximate median strings, and generally string averaging
14066 @item string sequence and set similarity
14067 @end enumerate
14068 It supports both normal and Unicode strings.")
14069 (license license:gpl2+)))
14070
14071 (define-public python2-levenshtein
14072 (package-with-python2 python-levenshtein))
14073
14074 (define-public python-scandir
14075 (package
14076 (name "python-scandir")
14077 (version "1.10.0")
14078 (source
14079 (origin
14080 (method url-fetch)
14081 (uri (pypi-uri "scandir" version))
14082 (sha256
14083 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14084 (build-system python-build-system)
14085 (arguments
14086 `(#:phases (modify-phases %standard-phases
14087 (replace 'check
14088 (lambda _
14089 (invoke "python" "test/run_tests.py"))))))
14090 (home-page "https://github.com/benhoyt/scandir")
14091 (synopsis "Directory iteration function")
14092 (description
14093 "Directory iteration function like os.listdir(), except that instead of
14094 returning a list of bare filenames, it yields DirEntry objects that include
14095 file type and stat information along with the name. Using scandir() increases
14096 the speed of os.walk() by 2-20 times (depending on the platform and file
14097 system) by avoiding unnecessary calls to os.stat() in most cases.
14098
14099 This package is part of the Python standard library since version 3.5.")
14100 (license license:bsd-3)))
14101
14102 (define-public python2-scandir
14103 (package-with-python2 python-scandir))
14104
14105 (define-public python2-stemming
14106 (package
14107 (name "python2-stemming")
14108 (version "1.0.1")
14109 (source
14110 (origin
14111 (method url-fetch)
14112 (uri (pypi-uri "stemming" version))
14113 (sha256
14114 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14115 (build-system python-build-system)
14116 (arguments
14117 `(#:python ,python-2))
14118 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14119 (synopsis "Python implementations of various stemming algorithms")
14120 (description
14121 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14122 stemming algorithms for English. These implementations are straightforward and
14123 efficient, unlike some Python versions of the same algorithms available on the
14124 Web. This package is an extraction of the stemming code included in the Whoosh
14125 search engine.")
14126 (license license:public-domain)))
14127
14128 (define-public python-factory-boy
14129 (package
14130 (name "python-factory-boy")
14131 (version "2.8.1")
14132 (source
14133 (origin
14134 (method url-fetch)
14135 (uri (pypi-uri "factory_boy" version))
14136 (sha256
14137 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14138 (build-system python-build-system)
14139 (arguments
14140 ;; Tests are not included in the tarball.
14141 `(#:tests? #f))
14142 (propagated-inputs
14143 `(("faker" ,python-faker)))
14144 (home-page "https://github.com/benhoyt/scandir")
14145 (synopsis "Versatile test fixtures replacement")
14146 (description
14147 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14148
14149 As a fixtures replacement tool, it aims to replace static, hard to maintain
14150 fixtures with easy-to-use factories for complex object.
14151
14152 Instead of building an exhaustive test setup with every possible combination
14153 of corner cases, factory_boy allows you to use objects customized for the
14154 current test, while only declaring the test-specific fields")
14155 (license license:expat)))
14156
14157 (define-public python2-factory-boy
14158 (package-with-python2 python-factory-boy))
14159
14160 (define-public python-translate-toolkit
14161 (package
14162 (name "python-translate-toolkit")
14163 (version "2.1.0")
14164 (source
14165 (origin
14166 (method url-fetch)
14167 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14168 (sha256
14169 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14170 (build-system python-build-system)
14171 (native-inputs
14172 `(("python-pytest" ,python-pytest)
14173 ("python-sphinx" ,python-sphinx)))
14174 (propagated-inputs
14175 `(("python-babel" ,python-babel)
14176 ("python-beautifulsoup4" ,python-beautifulsoup4)
14177 ("python-chardet" ,python-chardet)
14178 ("python-diff-match-patch" ,python-diff-match-patch)
14179 ("python-levenshtein" ,python-levenshtein)
14180 ("python-lxml" ,python-lxml)
14181 ("python-six" ,python-six)
14182 ("python-vobject" ,python-vobject)
14183 ("python-pyyaml" ,python-pyyaml)))
14184 (arguments
14185 ;; TODO: tests are not run, because they end with
14186 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14187 ;; 'parse_funcs'
14188 ;; during test setup.
14189 `(#:tests? #f))
14190 (home-page "https://toolkit.translatehouse.org")
14191 (synopsis "Tools and API for translation and localization engineering")
14192 (description
14193 "Tools and API for translation and localization engineering. It contains
14194 several utilities, as well as an API for building localization tools.")
14195 (license license:gpl2+)))
14196
14197 (define-public python2-translate-toolkit
14198 (package-with-python2 python-translate-toolkit))
14199
14200 (define-public python-packaging
14201 (package
14202 (name "python-packaging")
14203 (version "20.0")
14204 (source
14205 (origin
14206 (method url-fetch)
14207 (uri (pypi-uri "packaging" version))
14208 ;; XXX: The URL in the patch file is wrong, it should be
14209 ;; <https://github.com/pypa/packaging/pull/256>.
14210 (patches (search-patches "python-packaging-test-arch.patch"))
14211 (sha256
14212 (base32
14213 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14214 (build-system python-build-system)
14215 (arguments
14216 `(#:phases (modify-phases %standard-phases
14217 (replace 'check
14218 (lambda* (#:key tests? #:allow-other-keys)
14219 (if tests?
14220 (invoke "py.test" "-vv")
14221 (format #t "test suite not run~%"))
14222 #t)))))
14223 (native-inputs
14224 `(("python-pretend" ,python-pretend)
14225 ("python-pytest" ,python-pytest)))
14226 (propagated-inputs
14227 `(("python-pyparsing" ,python-pyparsing)
14228 ("python-six" ,python-six)))
14229 (home-page "https://github.com/pypa/packaging")
14230 (synopsis "Core utilities for Python packages")
14231 (description "Packaging is a Python module for dealing with Python packages.
14232 It offers an interface for working with package versions, names, and dependency
14233 information.")
14234 ;; From 'LICENSE': This software is made available under the terms of
14235 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14236 ;; Contributions to this software is made under the terms of *both* these
14237 ;; licenses.
14238 (license (list license:asl2.0 license:bsd-2))))
14239
14240 (define-public python2-packaging
14241 (package-with-python2 python-packaging))
14242
14243 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14244 (define-public python-packaging-bootstrap
14245 (hidden-package
14246 (package/inherit
14247 python-packaging
14248 (name "python-packaging-bootstrap")
14249 (native-inputs '())
14250 (propagated-inputs
14251 `(("python-pyparsing" ,python-pyparsing)))
14252 (arguments '(#:tests? #f)))))
14253
14254 (define-public python2-packaging-bootstrap
14255 (hidden-package
14256 (package/inherit
14257 python2-packaging
14258 (name "python2-packaging-bootstrap")
14259 (native-inputs '())
14260 (propagated-inputs
14261 `(("python-pyparsing" ,python2-pyparsing)))
14262 (arguments
14263 `(#:tests? #f
14264 ,@(package-arguments python2-packaging))))))
14265
14266 (define-public python-relatorio
14267 (package
14268 (name "python-relatorio")
14269 (version "0.8.0")
14270 (source
14271 (origin
14272 (method url-fetch)
14273 (uri (pypi-uri "relatorio" version))
14274 (sha256
14275 (base32
14276 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14277 (build-system python-build-system)
14278 (propagated-inputs
14279 `(("python-lxml" ,python-lxml)
14280 ("python-genshi" ,python-genshi)))
14281 (native-inputs
14282 `(("python-magic" ,python-magic)))
14283 (home-page "https://relatorio.tryton.org/")
14284 (synopsis "Templating library able to output ODT and PDF files")
14285 (description "Relatorio is a templating library which provides a way to
14286 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14287 for more filetypes can be easily added by creating plugins for them.")
14288 (license license:gpl3+)))
14289
14290 (define-public python2-relatorio
14291 (package-with-python2 python-relatorio))
14292
14293 (define-public python-radon
14294 (package
14295 (name "python-radon")
14296 (version "4.1.0")
14297 (source
14298 (origin
14299 (method url-fetch)
14300 (uri (pypi-uri "radon" version))
14301 (sha256
14302 (base32
14303 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14304 (build-system python-build-system)
14305 (arguments
14306 `(#:phases (modify-phases %standard-phases
14307 (replace 'check
14308 (lambda _
14309 (invoke "python" "radon/tests/run.py"))))))
14310 (propagated-inputs
14311 `(("python-colorama" ,python-colorama)
14312 ("python-flake8-polyfill" ,python-flake8-polyfill)
14313 ("python-mando" ,python-mando)))
14314 (native-inputs
14315 `(("python-pytest" ,python-pytest)
14316 ("python-pytest-mock" ,python-pytest-mock)))
14317 (home-page "https://radon.readthedocs.org/")
14318 (synopsis "Code Metrics in Python")
14319 (description "Radon is a Python tool which computes various code metrics.
14320 Supported metrics are:
14321 @itemize @bullet
14322 @item raw metrics: SLOC, comment lines, blank lines, &c.
14323 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14324 @item Halstead metrics (all of them)
14325 @item the Maintainability Index (a Visual Studio metric)
14326 @end itemize")
14327 (properties `((python2-variant . ,(delay python2-radon))))
14328 (license license:expat)))
14329
14330 (define-public python2-radon
14331 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14332 (package
14333 (inherit base)
14334 (propagated-inputs
14335 `(("python-configparser" ,python2-configparser)
14336 ("python-future" ,python2-future)
14337 ,@(package-propagated-inputs base))))))
14338
14339 (define-public python-sure
14340 (package
14341 (name "python-sure")
14342 (version "1.4.11")
14343 (source
14344 (origin
14345 (method url-fetch)
14346 (uri (pypi-uri "sure" version))
14347 (sha256
14348 (base32
14349 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14350 (build-system python-build-system)
14351 (propagated-inputs
14352 `(("python-mock" ,python-mock)
14353 ("python-six" ,python-six)))
14354 (native-inputs
14355 `(("python-nose" ,python-nose)))
14356 (home-page "https://github.com/gabrielfalcao/sure")
14357 (synopsis "Automated testing library in python for python")
14358 (description
14359 "Sure is a python library that leverages a DSL for writing assertions.
14360 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14361 (license license:gpl3+)))
14362
14363 (define-public python2-sure
14364 (package-with-python2 python-sure))
14365
14366 (define-public python2-couleur
14367 ;; This package does not seem to support python3 at all, hence,
14368 ;; only the python2 variant definition is provided.
14369 (package
14370 (name "python2-couleur")
14371 (version "0.6.2")
14372 (source
14373 (origin
14374 (method url-fetch)
14375 (uri (pypi-uri "couleur" version))
14376 (sha256
14377 (base32
14378 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14379 (build-system python-build-system)
14380 (arguments
14381 `(#:python ,python-2))
14382 (home-page "https://github.com/gabrielfalcao/couleur")
14383 (synopsis
14384 "ANSI terminal tool for python, colored shell and other handy fancy features")
14385 (description
14386 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14387 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14388 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14389 ;; https://github.com/gabrielfalcao/couleur/issues/11
14390 (license license:lgpl3+)))
14391
14392 (define-public python-misaka
14393 (package
14394 (name "python-misaka")
14395 (version "2.1.1")
14396 (source
14397 (origin
14398 (method url-fetch)
14399 (uri (pypi-uri "misaka" version))
14400 (sha256
14401 (base32
14402 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14403 (build-system python-build-system)
14404 (arguments
14405 `(;; Line 37 of setup.py calls self.run_command('develop')
14406 ;; in the 'check' phase. This command seems to be trying
14407 ;; to write to
14408 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14409 ;; for which it does not have the permission to write.
14410 #:tests? #f))
14411 (propagated-inputs
14412 `(("python-cffi" ,python-cffi)))
14413 (home-page "https://github.com/FSX/misaka")
14414 (synopsis "Python binding for Hoedown")
14415 (description
14416 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14417 library written in C. It features a fast HTML renderer and functionality to make custom
14418 renderers (e.g. man pages or LaTeX).")
14419 (license license:expat)))
14420
14421 (define-public python2-misaka
14422 (package-with-python2 python-misaka))
14423
14424 (define-public python2-steadymark
14425 ;; This is forced into being a python2 only variant
14426 ;; due to its dependence on couleur that has no support
14427 ;; for python3
14428 (package
14429 (name "python2-steadymark")
14430 (version "0.7.3")
14431 (source
14432 (origin
14433 (method url-fetch)
14434 (uri (pypi-uri "steadymark" version))
14435 (sha256
14436 (base32
14437 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14438 (build-system python-build-system)
14439 (native-inputs
14440 `(("python-couleur" ,python2-couleur)
14441 ("python-sure" ,python2-sure)
14442 ("python-misaka" ,python2-misaka)))
14443 (arguments
14444 `(#:python ,python-2
14445 #:phases
14446 (modify-phases %standard-phases
14447 (add-before 'build 'patch-setup-py
14448 (lambda _
14449 ;; Update requirements from dependency==version
14450 ;; to dependency>=version
14451 (substitute* "setup.py"
14452 (("==") ">="))
14453 #t)))))
14454 (home-page "https://github.com/gabrielfalcao/steadymark")
14455 (synopsis "Markdown-based test runner for python")
14456 (description
14457 "@code{Steadymark} allows documentation to be written in github-flavoured
14458 markdown. The documentation may contain snippets of code surrounded by python
14459 code blocks and @code{Steadymark} will find these snippets and run them, making
14460 sure that there are no old malfunctional examples in the documentation examples.")
14461 (license license:expat)))
14462
14463 (define-public python-jsonpointer
14464 (package
14465 (name "python-jsonpointer")
14466 (version "1.10")
14467 (source
14468 (origin
14469 (method url-fetch)
14470 (uri (pypi-uri "jsonpointer" version))
14471 (sha256
14472 (base32
14473 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14474 (build-system python-build-system)
14475 (home-page "https://github.com/stefankoegl/python-json-pointer")
14476 (synopsis "Identify specific nodes in a JSON document")
14477 (description "@code{jsonpointer} allows you to access specific nodes
14478 by path in a JSON document (see RFC 6901).")
14479 (license license:bsd-3)))
14480
14481 (define-public python2-jsonpointer
14482 (package-with-python2 python-jsonpointer))
14483
14484 (define-public python-jsonpatch
14485 (package
14486 (name "python-jsonpatch")
14487 (version "1.16")
14488 (source
14489 (origin
14490 (method git-fetch)
14491 ;; pypi version lacks tests.js
14492 (uri (git-reference
14493 (url "https://github.com/stefankoegl/python-json-patch")
14494 (commit (string-append "v" version))))
14495 (file-name (git-file-name name version))
14496 (sha256
14497 (base32
14498 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14499 (build-system python-build-system)
14500 (native-inputs
14501 `(("python-jsonpointer" ,python-jsonpointer)))
14502 (home-page "https://github.com/stefankoegl/python-json-patch")
14503 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14504 (description "@code{jsonpatch} is a library and program that allows
14505 applying JSON Patches according to RFC 6902.")
14506 (license license:bsd-3)))
14507
14508 (define-public python2-jsonpatch
14509 (package-with-python2 python-jsonpatch))
14510
14511 (define-public python-jsonpatch-0.4
14512 (package (inherit python-jsonpatch)
14513 (name "python-jsonpatch")
14514 (version "0.4")
14515 (source
14516 (origin
14517 (method git-fetch)
14518 (uri (git-reference
14519 (url "https://github.com/stefankoegl/python-json-patch")
14520 (commit (string-append "v" version))))
14521 (file-name (git-file-name name version))
14522 (sha256
14523 (base32
14524 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14525
14526 (define-public python2-jsonpatch-0.4
14527 (package-with-python2 python-jsonpatch-0.4))
14528
14529 (define-public python-rfc3986
14530 (package
14531 (name "python-rfc3986")
14532 (version "1.1.0")
14533 (source (origin
14534 (method url-fetch)
14535 (uri (pypi-uri "rfc3986" version))
14536 (sha256
14537 (base32
14538 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14539 (build-system python-build-system)
14540 (arguments
14541 `(#:modules ((guix build utils)
14542 (guix build python-build-system)
14543 (ice-9 ftw)
14544 (srfi srfi-1)
14545 (srfi srfi-26))
14546 #:phases
14547 (modify-phases %standard-phases
14548 (replace 'check
14549 (lambda _
14550 (let ((cwd (getcwd)))
14551 (setenv "PYTHONPATH"
14552 (string-append cwd "/build/"
14553 (find (cut string-prefix? "lib" <>)
14554 (scandir (string-append cwd "/build")))
14555 ":"
14556 (getenv "PYTHONPATH")))
14557 (invoke "pytest" "-v")))))))
14558 (native-inputs
14559 `(("python-pytest" ,python-pytest)))
14560 (home-page "https://rfc3986.readthedocs.io/")
14561 (synopsis "Parse and validate URI references")
14562 (description
14563 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14564 validation and authority parsing. This module also supports RFC@tie{}6874
14565 which adds support for zone identifiers to IPv6 addresses.")
14566 (license license:asl2.0)))
14567
14568 (define-public python2-rfc3986
14569 (package-with-python2 python-rfc3986))
14570
14571 (define-public python-rfc3987
14572 (package
14573 (name "python-rfc3987")
14574 (version "1.3.7")
14575 (source
14576 (origin
14577 (method url-fetch)
14578 (uri (pypi-uri "rfc3987" version))
14579 (sha256
14580 (base32
14581 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14582 (build-system python-build-system)
14583 (home-page "https://pypi.org/project/rfc3987/")
14584 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14585 (description "@code{rfc3987} provides routines for parsing and
14586 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14587 (license license:gpl3+)))
14588
14589 (define-public python2-rfc3987
14590 (package-with-python2 python-rfc3987))
14591
14592 (define-public python-validators
14593 (package
14594 (name "python-validators")
14595 (version "0.14.2")
14596 (source (origin
14597 (method url-fetch)
14598 (uri (pypi-uri "validators" version))
14599 (sha256
14600 (base32
14601 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14602 (build-system python-build-system)
14603 (arguments
14604 '(#:phases (modify-phases %standard-phases
14605 (replace 'check
14606 (lambda _
14607 (invoke "pytest" "-vv"))))))
14608 (propagated-inputs
14609 `(("python-decorator" ,python-decorator)
14610 ("python-six" ,python-six)))
14611 (native-inputs
14612 `(("python-flake8" ,python-flake8)
14613 ("python-isort" ,python-isort)
14614 ("python-pytest" ,python-pytest)))
14615 (home-page "https://github.com/kvesteri/validators")
14616 (synopsis "Data validation library")
14617 (description
14618 "This package contains validators for different things such as email
14619 addresses, IP addresses, URLs, hashes and more. It has been designed to
14620 be easy to use and not require defining a schema or form just to validate
14621 some input.")
14622 (license license:expat)))
14623
14624 (define-public python2-validators
14625 (package-with-python2 python-validators))
14626
14627 (define-public python-validate-email
14628 (package
14629 (name "python-validate-email")
14630 (version "1.3")
14631 (source
14632 (origin
14633 (method url-fetch)
14634 (uri (pypi-uri "validate_email" version))
14635 (sha256
14636 (base32
14637 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14638 (build-system python-build-system)
14639 (home-page "https://github.com/syrusakbary/validate_email")
14640 (synopsis "Verifies if an email address is valid and really exists")
14641 (description "@code{validate_email} can be used to verify if an email
14642 address is valid and really exists.")
14643 (license license:lgpl3+)))
14644
14645 (define-public python2-validate-email
14646 (package-with-python2 python-validate-email))
14647
14648 (define-public python-flex
14649 (package
14650 (name "python-flex")
14651 (version "6.10.0")
14652 (source
14653 (origin
14654 (method url-fetch)
14655 (uri (pypi-uri "flex" version))
14656 (sha256
14657 (base32
14658 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14659 (build-system python-build-system)
14660 (propagated-inputs
14661 `(("python-click" ,python-click)
14662 ("python-iso8601" ,python-iso8601)
14663 ("python-jsonpointer" ,python-jsonpointer)
14664 ("python-pyyaml" ,python-pyyaml)
14665 ("python-requests" ,python-requests)
14666 ("python-rfc3987" ,python-rfc3987)
14667 ("python-six" ,python-six)
14668 ("python-validate-email" ,python-validate-email)))
14669 (home-page "https://github.com/pipermerriam/flex")
14670 (synopsis "Validates Swagger schemata")
14671 (description "@code{flex} can be used to validate Swagger schemata.")
14672 (license license:bsd-3)))
14673
14674 (define-public python2-flex
14675 (package-with-python2 python-flex))
14676
14677 (define-public python-marshmallow
14678 (package
14679 (name "python-marshmallow")
14680 (version "3.0.0b14")
14681 (source
14682 (origin
14683 (method url-fetch)
14684 (uri (pypi-uri "marshmallow" version))
14685 (sha256
14686 (base32
14687 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14688 (build-system python-build-system)
14689 (propagated-inputs
14690 `(("python-dateutil" ,python-dateutil)
14691 ("python-simplejson" ,python-simplejson)))
14692 (native-inputs
14693 `(("python-pytest" ,python-pytest)
14694 ("python-pytz" ,python-pytz)))
14695 (home-page "https://github.com/marshmallow-code/marshmallow")
14696 (synopsis "Convert complex datatypes to and from native
14697 Python datatypes.")
14698 (description "@code{marshmallow} provides a library for converting
14699 complex datatypes to and from native Python datatypes.")
14700 (license license:expat)))
14701
14702 (define-public python2-marshmallow
14703 (package-with-python2 python-marshmallow))
14704
14705 (define-public python-apispec
14706 (package
14707 (name "python-apispec")
14708 (version "0.25.3")
14709 (source
14710 (origin
14711 (method url-fetch)
14712 (uri (pypi-uri "apispec" version))
14713 (sha256
14714 (base32
14715 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14716 (build-system python-build-system)
14717 (propagated-inputs
14718 `(("python-pyyaml" ,python-pyyaml)))
14719 (native-inputs
14720 `(("python-pytest" ,python-pytest)
14721 ("python-flask" ,python-flask)
14722 ("python-marshmallow" ,python-marshmallow)
14723 ("python-tornado" ,python-tornado)
14724 ("python-bottle" ,python-bottle)
14725 ("python-mock" ,python-mock)))
14726 (home-page "https://github.com/marshmallow-code/apispec")
14727 (synopsis "Swagger 2.0 API specification generator")
14728 (description "@code{python-apispec} is a pluggable API specification
14729 generator. Currently supports the OpenAPI specification (f.k.a.
14730 Swagger 2.0).")
14731 (license license:expat)))
14732
14733 (define-public python2-apispec
14734 (package-with-python2 python-apispec))
14735
14736 (define-public python-flasgger
14737 (package
14738 (name "python-flasgger")
14739 (version "0.6.3")
14740 (source
14741 (origin
14742 (method git-fetch)
14743 (uri (git-reference
14744 (url "https://github.com/rochacbruno/flasgger.git")
14745 (commit version)))
14746 (file-name (git-file-name name version))
14747 (sha256
14748 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14749 (build-system python-build-system)
14750 (arguments
14751 `(#:phases
14752 (modify-phases %standard-phases
14753 (replace 'check
14754 (lambda* (#:key inputs outputs #:allow-other-keys)
14755 (substitute* "Makefile"
14756 (("flake8 flasgger --ignore=F403")
14757 "flake8 flasgger --ignore=E731,F403"))
14758 (setenv "PYTHONPATH" (string-append (getcwd)
14759 ":"
14760 (getenv "PYTHONPATH")))
14761 (invoke "py.test"))))))
14762 (propagated-inputs
14763 `(("python-flask" ,python-flask)
14764 ("python-pyyaml" ,python-pyyaml)
14765 ("python-jsonschema" ,python-jsonschema)
14766 ("python-mistune" ,python-mistune)
14767 ("python-six" ,python-six)))
14768 (native-inputs
14769 `(("python-decorator" ,python-decorator)
14770 ("python-flake8" ,python-flake8)
14771 ("python-flask-restful" ,python-flask-restful)
14772 ("python-flex" ,python-flex)
14773 ("python-pytest" ,python-pytest)
14774 ("python-pytest-cov" ,python-pytest-cov)
14775 ("python-marshmallow" ,python-marshmallow)
14776 ("python-apispec" ,python-apispec)))
14777 (home-page "https://github.com/rochacbruno/flasgger/")
14778 (synopsis "Extract Swagger specs from your Flask project")
14779 (description "@code{python-flasgger} allows extracting Swagger specs
14780 from your Flask project. It is a fork of Flask-Swagger.")
14781 (license license:expat)))
14782
14783 (define-public python2-flasgger
14784 (package-with-python2 python-flasgger))
14785
14786 (define-public python-swagger-spec-validator
14787 (package
14788 (name "python-swagger-spec-validator")
14789 (version "2.4.3")
14790 (source
14791 (origin
14792 (method url-fetch)
14793 (uri (pypi-uri "swagger-spec-validator" version))
14794 (sha256
14795 (base32
14796 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
14797 (build-system python-build-system)
14798 (propagated-inputs
14799 `(("python-jsonschema" ,python-jsonschema)
14800 ("python-pyyaml" ,python-pyyaml)
14801 ("python-six" ,python-six)))
14802 (home-page
14803 "https://github.com/Yelp/swagger_spec_validator")
14804 (synopsis "Validation of Swagger specifications")
14805 (description "@code{swagger_spec_validator} provides a library for
14806 validating Swagger API specifications.")
14807 (license license:asl2.0)))
14808
14809 (define-public python2-swagger-spec-validator
14810 (package-with-python2 python-swagger-spec-validator))
14811
14812 (define-public python-apache-libcloud
14813 (package
14814 (name "python-apache-libcloud")
14815 (version "2.4.0")
14816 (source
14817 (origin
14818 (method url-fetch)
14819 (uri (pypi-uri "apache-libcloud" version))
14820 (sha256
14821 (base32
14822 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
14823 (build-system python-build-system)
14824 (arguments
14825 `(#:phases
14826 (modify-phases %standard-phases
14827 (add-after 'unpack 'patch-ssh
14828 (lambda* (#:key inputs #:allow-other-keys)
14829 (substitute* "libcloud/compute/ssh.py"
14830 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
14831 "/bin/ssh" "'")))
14832 #t))
14833 (add-after 'unpack 'patch-tests
14834 (lambda _
14835 (substitute* "./libcloud/test/test_file_fixtures.py"
14836 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
14837 (("def _ascii") "def _raw_data(self, method, url, body, headers):
14838 return (httplib.OK,
14839 \"1234abcd\",
14840 {\"test\": \"value\"},
14841 httplib.responses[httplib.OK])
14842 def _ascii"))
14843 (substitute* "libcloud/test/compute/test_ssh_client.py"
14844 (("class ShellOutSSHClientTests")
14845 "@unittest.skip(\"Guix container doesn't have ssh service\")
14846 class ShellOutSSHClientTests")
14847 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
14848 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
14849 (("'.xF0', '.x90', '.x8D', '.x88'")
14850 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
14851 #t))
14852 (add-before 'check 'copy-secret
14853 (lambda _
14854 (copy-file "libcloud/test/secrets.py-dist"
14855 "libcloud/test/secrets.py")
14856 #t)))))
14857 (inputs
14858 `(("openssh" ,openssh)))
14859 (propagated-inputs
14860 `(("python-paramiko" ,python-paramiko)
14861 ("python-requests" ,python-requests)))
14862 (native-inputs
14863 `(("python-lockfile" ,python-lockfile)
14864 ("python-mock" ,python-mock)
14865 ("python-pytest" ,python-pytest)
14866 ("python-pytest-runner" ,python-pytest-runner)
14867 ("python-requests-mock" ,python-requests-mock)))
14868 (home-page "https://libcloud.apache.org/")
14869 (synopsis "Unified Cloud API")
14870 (description "@code{libcloud} is a Python library for interacting with
14871 many of the popular cloud service providers using a unified API.")
14872 (license license:asl2.0)))
14873
14874 (define-public python2-apache-libcloud
14875 (package-with-python2 python-apache-libcloud))
14876
14877 (define-public python-smmap
14878 (package
14879 (name "python-smmap")
14880 (version "3.0.1")
14881 (source
14882 (origin
14883 (method url-fetch)
14884 (uri (pypi-uri "smmap" version))
14885 (sha256
14886 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
14887 (build-system python-build-system)
14888 (native-inputs
14889 `(("python-nosexcover" ,python-nosexcover)))
14890 (home-page "https://github.com/Byron/smmap")
14891 (synopsis "Python sliding window memory map manager")
14892 (description "@code{smmap} is a pure Python implementation of a sliding
14893 window memory map manager.")
14894 (license license:bsd-3)))
14895
14896 (define-public python-smmap2
14897 (deprecated-package "python-smmap2" python-smmap))
14898
14899 (define-public python2-smmap
14900 (package-with-python2 python-smmap))
14901
14902 (define-public python2-smmap2
14903 (deprecated-package "python2-smmap2" python2-smmap))
14904
14905 (define-public python-regex
14906 (package
14907 (name "python-regex")
14908 (version "2019.04.14")
14909 (source (origin
14910 (method url-fetch)
14911 (uri (pypi-uri "regex" version))
14912 (sha256
14913 (base32
14914 "1a6hhfs6l6snr1z654ay6wzbmwdkmv282fzfkd5hk2d1n73y8v6m"))))
14915 ;; TODO: Fix and enable regex_test.py tests that complain about the
14916 ;; test.support module not existing.
14917 (build-system python-build-system)
14918 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
14919 (synopsis "Alternative regular expression module")
14920 (description "This regular expression implementation is backwards-
14921 compatible with the standard @code{re} module, but offers additional
14922 functionality like full case-folding for case-insensitive matches in Unicode.")
14923 (license license:psfl)))
14924
14925 (define-public python2-regex
14926 (package-with-python2 python-regex))
14927
14928 (define-public python2-pyopengl
14929 (package
14930 (name "python2-pyopengl")
14931 (version "3.1.0")
14932 (source
14933 (origin
14934 (method url-fetch)
14935 (uri (pypi-uri "PyOpenGL" version))
14936 (sha256
14937 (base32
14938 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
14939 (arguments
14940 `(#:python ,python-2))
14941 (build-system python-build-system)
14942 (home-page "http://pyopengl.sourceforge.net")
14943 (synopsis "Standard OpenGL bindings for Python")
14944 (description
14945 "PyOpenGL is the most common cross platform Python binding to OpenGL and
14946 related APIs. The binding is created using the standard @code{ctypes}
14947 library.")
14948 (license license:bsd-3)))
14949
14950 (define-public python2-pyopengl-accelerate
14951 (package
14952 (inherit python2-pyopengl)
14953 (name "python2-pyopengl-accelerate")
14954 (version "3.1.0")
14955 (source
14956 (origin
14957 (method url-fetch)
14958 (uri (pypi-uri "PyOpenGL-accelerate" version))
14959 (sha256
14960 (base32
14961 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
14962 (synopsis "Acceleration code for PyOpenGL")
14963 (description
14964 "This is the Cython-coded accelerator module for PyOpenGL.")))
14965
14966 (define-public python-rencode
14967 (package
14968 (name "python-rencode")
14969 (version "1.0.5")
14970 (source
14971 (origin
14972 (method url-fetch)
14973 (uri (pypi-uri "rencode" version))
14974 (sha256
14975 (base32
14976 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
14977 (build-system python-build-system)
14978 (arguments
14979 `(#:phases
14980 (modify-phases %standard-phases
14981 (add-before 'check 'delete-bogus-test
14982 ;; This test requires /home/aresch/Downloads, which is not provided by
14983 ;; the build environment.
14984 (lambda _
14985 (delete-file "rencode/t.py")
14986 #t)))))
14987 (native-inputs `(("pkg-config" ,pkg-config)
14988 ("python-cython" ,python-cython)))
14989 (home-page "https://github.com/aresch/rencode")
14990 (synopsis "Serialization of heterogeneous data structures")
14991 (description
14992 "The @code{rencode} module is a data structure serialization library,
14993 similar to @code{bencode} from the BitTorrent project. For complex,
14994 heterogeneous data structures with many small elements, r-encoding stake up
14995 significantly less space than b-encodings. This version of rencode is a
14996 complete rewrite in Cython to attempt to increase the performance over the
14997 pure Python module.")
14998 (license license:bsd-3)))
14999
15000 (define-public python2-rencode
15001 (package-with-python2 python-rencode))
15002
15003 (define-public python-xenon
15004 (package
15005 (name "python-xenon")
15006 (version "0.7.0")
15007 (source
15008 (origin
15009 (method url-fetch)
15010 (uri (pypi-uri "xenon" version))
15011 (sha256
15012 (base32
15013 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15014 (build-system python-build-system)
15015 (native-inputs
15016 `(("python-pyyaml" ,python-pyyaml)
15017 ("python-radon" ,python-radon)
15018 ("python-requests" ,python-requests)
15019 ("python-flake8" ,python-flake8)
15020 ("python-tox" ,python-tox)))
15021 (arguments
15022 `(#:tests? #f ;test suite not shipped with the PyPI archive
15023 #:phases
15024 (modify-phases %standard-phases
15025 (add-before 'build 'patch-test-requirements
15026 (lambda _
15027 ;; Remove httpretty dependency for tests.
15028 (substitute* "setup.py"
15029 (("httpretty") ""))
15030 #t)))))
15031 (home-page "https://xenon.readthedocs.org/")
15032 (synopsis "Monitor code metrics for Python on your CI server")
15033 (description
15034 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15035 Ideally, @code{xenon} is run every time code is committed. Through command
15036 line options, various thresholds can be set for the complexity of code. It
15037 will fail (i.e. it will exit with a non-zero exit code) when any of these
15038 requirements is not met.")
15039 (license license:expat)))
15040
15041 (define-public python2-xenon
15042 (package-with-python2 python-xenon))
15043
15044 (define-public python-pysocks
15045 (package
15046 (name "python-pysocks")
15047 (version "1.7.0")
15048 (source
15049 (origin
15050 (method url-fetch)
15051 (uri (pypi-uri "PySocks" version))
15052 (sha256
15053 (base32
15054 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15055 (build-system python-build-system)
15056 (arguments `(#:tests? #f))
15057 (home-page "https://github.com/Anorov/PySocks")
15058 (synopsis "SOCKS client module")
15059 (description "@code{pysocks} is an updated and semi-actively maintained
15060 version of @code{SocksiPy} with bug fixes and extra features.")
15061 (license license:bsd-3)))
15062
15063 (define-public python2-pysocks
15064 (package-with-python2 python-pysocks))
15065
15066 (define-public python-pydiff
15067 (package
15068 (name "python-pydiff")
15069 (version "0.2")
15070 (source
15071 (origin
15072 (method url-fetch)
15073 (uri (pypi-uri "pydiff" version))
15074 (sha256
15075 (base32
15076 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15077 (build-system python-build-system)
15078 (home-page "https://github.com/myint/pydiff")
15079 (synopsis "Library to diff two Python files at the bytecode level")
15080 (description
15081 "@code{pydiff} makes it easy to look for actual code changes while
15082 ignoring formatting changes.")
15083 (license license:expat)))
15084
15085 (define-public python2-pydiff
15086 (package-with-python2 python-pydiff))
15087
15088 (define-public python-tqdm
15089 (package
15090 (name "python-tqdm")
15091 (version "4.43.0")
15092 (source
15093 (origin
15094 (method url-fetch)
15095 (uri (pypi-uri "tqdm" version))
15096 (sha256
15097 (base32
15098 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15099 (build-system python-build-system)
15100 (arguments
15101 '(#:phases (modify-phases %standard-phases
15102 (replace 'check
15103 (lambda* (#:key inputs outputs #:allow-other-keys)
15104 (add-installed-pythonpath inputs outputs)
15105 ;; This invokation is taken from tox.ini.
15106 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15107 "-d" "-v" "tqdm/"))))))
15108 (native-inputs
15109 `(("python-nose" ,python-nose)))
15110 (home-page "https://github.com/tqdm/tqdm")
15111 (synopsis "Fast, extensible progress meter")
15112 (description
15113 "Make loops show a progress bar on the console by just wrapping any
15114 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15115 design and layout.")
15116 (license (list license:mpl2.0 license:expat))))
15117
15118 (define-public python2-tqdm
15119 (package-with-python2 python-tqdm))
15120
15121 (define-public python-pkginfo
15122 (package
15123 (name "python-pkginfo")
15124 (version "1.4.2")
15125 (source
15126 (origin
15127 (method url-fetch)
15128 (uri (pypi-uri "pkginfo" version))
15129 (sha256
15130 (base32
15131 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15132 (build-system python-build-system)
15133 (arguments
15134 ;; The tests are broken upstream.
15135 '(#:tests? #f))
15136 (home-page
15137 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15138 (synopsis
15139 "Query metadatdata from sdists, bdists, and installed packages")
15140 (description
15141 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15142 source distriubtion (an sdist) or a binary distribution (e.g., created by
15143 running bdist_egg). It can also query the EGG-INFO directory of an installed
15144 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15145 created by running @code{python setup.py develop}).")
15146 (license license:expat)))
15147
15148 (define-public python2-pkginfo
15149 (package-with-python2 python-pkginfo))
15150
15151 (define-public python-twine
15152 (package
15153 (name "python-twine")
15154 (version "1.9.1")
15155 (source
15156 (origin
15157 (method url-fetch)
15158 (uri (pypi-uri "twine" version))
15159 (sha256
15160 (base32
15161 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15162 (build-system python-build-system)
15163 (propagated-inputs
15164 `(("python-tqdm" ,python-tqdm)
15165 ("python-pkginfo" ,python-pkginfo)
15166 ("python-requests" ,python-requests)
15167 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15168 (home-page "https://github.com/pypa/twine")
15169 (synopsis "Collection of utilities for interacting with PyPI")
15170 (description
15171 "@code{twine} currently supports registering projects and uploading
15172 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15173 their files and supports any packaging format (including wheels).")
15174 (license license:asl2.0)))
15175
15176 (define-public python2-twine
15177 (package-with-python2 python-twine))
15178
15179 (define-public python-linecache2
15180 (package
15181 (name "python-linecache2")
15182 (version "1.0.0")
15183 (source
15184 (origin
15185 (method url-fetch)
15186 (uri (pypi-uri "linecache2" version))
15187 (sha256
15188 (base32
15189 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15190 (build-system python-build-system)
15191 (arguments
15192 `(;; The tests depend on unittest2, and our version is a bit too old.
15193 #:tests? #f))
15194 (native-inputs
15195 `(("python-pbr" ,python-pbr-minimal)))
15196 (home-page
15197 "https://github.com/testing-cabal/linecache2")
15198 (synopsis "Backports of the linecache module")
15199 (description
15200 "The linecache module allows one to get any line from any file, while
15201 attempting to optimize internally, using a cache, the common case where many
15202 lines are read from a single file.")
15203 (license license:psfl)))
15204
15205 (define-public python2-linecache2
15206 (package-with-python2 python-linecache2))
15207
15208 (define-public python-traceback2
15209 (package
15210 (name "python-traceback2")
15211 (version "1.4.0")
15212 (source
15213 (origin
15214 (method url-fetch)
15215 (uri (pypi-uri "traceback2" version))
15216 (sha256
15217 (base32
15218 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15219 (build-system python-build-system)
15220 (arguments
15221 `(;; python-traceback2 and python-unittest2 depend on one another.
15222 #:tests? #f))
15223 (native-inputs
15224 `(("python-pbr" ,python-pbr-minimal)))
15225 (propagated-inputs
15226 `(("python-linecache2" ,python-linecache2)))
15227 (home-page
15228 "https://github.com/testing-cabal/traceback2")
15229 (synopsis "Backports of the traceback module")
15230 (description
15231 "This module provides a standard interface to extract, format and print
15232 stack traces of Python programs. It exactly mimics the behavior of the Python
15233 interpreter when it prints a stack trace.")
15234 (license license:psfl)))
15235
15236 (define-public python2-traceback2
15237 (package-with-python2 python-traceback2))
15238
15239 (define-public python-ratelimiter
15240 (package
15241 (name "python-ratelimiter")
15242 (version "1.2.0")
15243 (source
15244 (origin
15245 (method url-fetch)
15246 (uri (pypi-uri "ratelimiter" version))
15247 (sha256
15248 (base32
15249 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15250 (build-system python-build-system)
15251 (arguments
15252 '(#:tests? #f)) ; There are no tests in the pypi archive.
15253 (home-page "https://github.com/RazerM/ratelimiter")
15254 (synopsis "Simple rate limiting object")
15255 (description
15256 "The @code{ratelimiter} module ensures that an operation will not be
15257 executed more than a given number of times during a given period.")
15258 (license license:asl2.0)))
15259
15260 (define-public python2-ratelimiter
15261 (package-with-python2 python-ratelimiter))
15262
15263 (define-public python-dukpy
15264 (package
15265 (name "python-dukpy")
15266 (version "0.3")
15267 (source
15268 (origin
15269 (method git-fetch)
15270 (uri (git-reference
15271 (url "https://github.com/kovidgoyal/dukpy.git")
15272 (commit (string-append "v" version))))
15273 (file-name (git-file-name name version))
15274 (sha256
15275 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15276 (build-system python-build-system)
15277 (home-page "https://github.com/kovidgoyal/dukpy")
15278 (synopsis "Run JavaScript in python")
15279 (description
15280 "dukpy is a JavaScript runtime environment for Python using the duktape
15281 embeddable JavaScript engine.")
15282 ;; Dukpy is licensed under MIT like the embedded duktape library,
15283 ;; with 'errors.c' as GPL3.
15284 (license (list license:expat license:gpl3))))
15285
15286 (define-public python2-dukpy
15287 (package-with-python2 python-dukpy))
15288
15289 (define-public python-jsonrpclib-pelix
15290 (package
15291 (name "python-jsonrpclib-pelix")
15292 (version "0.3.2")
15293 (source
15294 (origin
15295 (method url-fetch)
15296 (uri (pypi-uri "jsonrpclib-pelix" version))
15297 (sha256
15298 (base32
15299 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15300 (build-system python-build-system)
15301 (arguments
15302 `(#:tests? #f)) ; no tests in PyPI tarball
15303 (home-page "https://github.com/tcalmant/jsonrpclib/")
15304 (synopsis "JSON-RPC 2.0 client library for Python")
15305 (description
15306 "This library implements the JSON-RPC v2.0
15307 specification (backwards-compatible) as a client library for Python. This
15308 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15309 services.")
15310 (license license:asl2.0)))
15311
15312 (define-public python2-jsonrpclib-pelix
15313 (package-with-python2 python-jsonrpclib-pelix))
15314
15315 (define-public python-setuptools-scm-git-archive
15316 (package
15317 (name "python-setuptools-scm-git-archive")
15318 (version "1.0")
15319 (source
15320 (origin
15321 (method url-fetch)
15322 (uri (pypi-uri "setuptools_scm_git_archive" version))
15323 (sha256
15324 (base32
15325 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15326 (build-system python-build-system)
15327 (native-inputs
15328 `(("python-pytest" ,python-pytest)))
15329 (propagated-inputs
15330 `(("python-setuptools-scm" ,python-setuptools-scm)))
15331 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15332 (synopsis "Setuptools_scm plugin for git archives")
15333 (description
15334 "The setuptools_scm_git_archive package is a plugin to
15335 setuptools_scm, which supports obtaining versions from git archives that
15336 belong to tagged versions.")
15337 (license license:expat)))
15338
15339 (define-public python2-setuptools-scm-git-archive
15340 (package-with-python2 python-setuptools-scm-git-archive))
15341
15342 (define-public python-setuptools-git
15343 (package
15344 (name "python-setuptools-git")
15345 (version "1.2")
15346 (source
15347 (origin
15348 (method url-fetch)
15349 (uri (pypi-uri "setuptools-git" version))
15350 (sha256
15351 (base32
15352 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15353 (build-system python-build-system)
15354 (arguments
15355 `(#:phases
15356 (modify-phases %standard-phases
15357 ;; This is needed for tests.
15358 (add-after 'unpack 'configure-git
15359 (lambda _
15360 (setenv "HOME" "/tmp")
15361 (invoke "git" "config" "--global" "user.email" "guix")
15362 (invoke "git" "config" "--global" "user.name" "guix")
15363 #t)))))
15364 (native-inputs
15365 `(("git" ,git-minimal)))
15366 (home-page "https://github.com/msabramo/setuptools-git")
15367 (synopsis "Setuptools revision control system plugin for Git")
15368 (description
15369 "This package provides a plugin for Setuptools for revision control with
15370 Git.")
15371 (license license:bsd-3)))
15372
15373 (define-public python-pyclipper
15374 (package
15375 (name "python-pyclipper")
15376 (version "1.1.0.post3")
15377 (source
15378 (origin
15379 (method url-fetch)
15380 (uri (pypi-uri "pyclipper" version ".zip"))
15381 (sha256
15382 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15383 (modules '((guix build utils)))
15384 (snippet
15385 '(begin
15386 ;; This file is generated by Cython.
15387 (delete-file "pyclipper/pyclipper.cpp") #t))))
15388 (build-system python-build-system)
15389 (arguments
15390 `(#:phases
15391 (modify-phases %standard-phases
15392 (add-before 'build 'cythonize-sources
15393 (lambda _
15394 (with-directory-excursion "pyclipper"
15395 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15396 (propagated-inputs
15397 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15398 (native-inputs
15399 `(("python-cython" ,python-cython)
15400 ("python-pytest" ,python-pytest)
15401 ("python-pytest-runner" ,python-pytest-runner)
15402 ("python-unittest2" ,python-unittest2)
15403 ("unzip" ,unzip)))
15404 (home-page "https://github.com/greginvm/pyclipper")
15405 (synopsis "Wrapper for Angus Johnson's Clipper library")
15406 (description
15407 "Pyclipper is a Cython wrapper for the C++ translation of the
15408 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15409 (license license:expat)))
15410
15411 (define-public python2-pyclipper
15412 (package-with-python2 python-pyclipper))
15413
15414 (define-public python2-booleanoperations
15415 (package
15416 (name "python2-booleanoperations")
15417 (version "0.7.1")
15418 (source
15419 (origin
15420 (method url-fetch)
15421 (uri (pypi-uri "booleanOperations" version ".zip"))
15422 (sha256
15423 (base32
15424 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15425 (build-system python-build-system)
15426 (arguments
15427 `(#:python ,python-2))
15428 (native-inputs
15429 `(("unzip" ,unzip)
15430 ("python2-pytest" ,python2-pytest)
15431 ("python2-pytest-runner" ,python2-pytest-runner)))
15432 (propagated-inputs
15433 `(("python-fonttools" ,python2-fonttools)
15434 ("python-pyclipper" ,python2-pyclipper)
15435 ("python-ufolib" ,python2-ufolib)))
15436 (home-page "https://github.com/typemytype/booleanOperations")
15437 (synopsis "Boolean operations on paths")
15438 (description
15439 "BooleanOperations provides a Python library that enables
15440 boolean operations on paths.")
15441 (license license:expat)))
15442
15443 (define-public python-tempdir
15444 (package
15445 (name "python-tempdir")
15446 (version "0.7.1")
15447 (source
15448 (origin
15449 (method url-fetch)
15450 (uri (pypi-uri "tempdir" version))
15451 (sha256
15452 (base32
15453 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15454 (build-system python-build-system)
15455 (home-page "https://pypi.org/project/tempdir/")
15456 (arguments
15457 ;; the package has no tests
15458 '(#:tests? #f))
15459 (synopsis "Python library for managing temporary directories")
15460 (description
15461 "This library manages temporary directories that are automatically
15462 deleted with all their contents when they are no longer needed. It is
15463 particularly convenient for use in tests.")
15464 (license license:expat)))
15465
15466 (define-public python2-tempdir
15467 (package-with-python2 python-tempdir))
15468
15469 (define-public python-activepapers
15470 (package
15471 (name "python-activepapers")
15472 (version "0.2.2")
15473 (source
15474 (origin
15475 (method url-fetch)
15476 (uri (pypi-uri "ActivePapers.Py" version))
15477 (sha256
15478 (base32
15479 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15480 (build-system python-build-system)
15481 (arguments
15482 `(#:modules ((ice-9 ftw)
15483 (srfi srfi-1)
15484 (guix build utils)
15485 (guix build python-build-system))
15486
15487 #:phases
15488 (modify-phases %standard-phases
15489 (add-after 'unpack 'delete-python2-code
15490 (lambda _
15491 (for-each delete-file
15492 '("lib/activepapers/builtins2.py"
15493 "lib/activepapers/standardlib2.py"
15494 "lib/activepapers/utility2.py"))))
15495 (replace 'check
15496 (lambda _
15497 ;; Deactivate the test cases that download files
15498 (setenv "NO_NETWORK_ACCESS" "1")
15499 ;; For some strange reason, some tests fail if nosetests runs all
15500 ;; test modules in a single execution. They pass if each test
15501 ;; module is run individually.
15502 (for-each (lambda (filename)
15503 (invoke "nosetests"
15504 (string-append "tests/" filename)))
15505 (scandir "tests"
15506 (lambda (filename)
15507 (string-suffix? ".py" filename)))))))))
15508 (native-inputs
15509 `(("python-tempdir" ,python-tempdir)
15510 ("python-nose" ,python-nose)))
15511 (propagated-inputs
15512 `(("python-h5py" ,python-h5py)))
15513 (home-page "https://www.activepapers.org/")
15514 (synopsis "Executable papers for scientific computing")
15515 (description
15516 "ActivePapers is a tool for working with executable papers, which
15517 combine data, code, and documentation in single-file packages,
15518 suitable for publication as supplementary material or on repositories
15519 such as figshare or Zenodo.")
15520 (properties `((python2-variant . ,(delay python2-activepapers))))
15521 (license license:bsd-3)))
15522
15523 (define-public python2-activepapers
15524 (let ((base (package-with-python2
15525 (strip-python2-variant python-activepapers))))
15526 (package
15527 (inherit base)
15528 (arguments
15529 (substitute-keyword-arguments (package-arguments base)
15530 ((#:phases phases)
15531 `(modify-phases ,phases
15532 (delete 'delete-python2-code)
15533 (add-after 'unpack 'delete-python3-code
15534 (lambda _
15535 (for-each delete-file
15536 '("lib/activepapers/builtins3.py"
15537 "lib/activepapers/standardlib3.py"
15538 "lib/activepapers/utility3.py")))))))))))
15539
15540 (define-public python-semver
15541 (package
15542 (name "python-semver")
15543 (version "2.9.0")
15544 (source
15545 (origin
15546 (method url-fetch)
15547 (uri (pypi-uri "semver" version))
15548 (sha256
15549 (base32
15550 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15551 (build-system python-build-system)
15552 (native-inputs
15553 `(("python-appdirs" ,python-appdirs)
15554 ("python-distlib" ,python-distlib)
15555 ("python-importlib-metadata" ,python-importlib-metadata)
15556 ("python-filelock" ,python-filelock)
15557 ("python-six" ,python-six)
15558 ("python-tox" ,python-tox)
15559 ("python-virtualenv" ,python-virtualenv)))
15560 (home-page "https://github.com/k-bx/python-semver")
15561 (synopsis "Python helper for Semantic Versioning")
15562 (description "This package provides a Python library for
15563 @url{Semantic Versioning, http://semver.org/}.")
15564 (license license:bsd-3)))
15565
15566 (define-public python2-semver
15567 (package-with-python2 python-semver))
15568
15569 (define-public python-pyro4
15570 (package
15571 (name "python-pyro4")
15572 (version "4.77")
15573 (source
15574 (origin
15575 (method url-fetch)
15576 (uri (pypi-uri "Pyro4" version))
15577 (sha256
15578 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15579 (build-system python-build-system)
15580 (arguments
15581 '(#:tests? #f)) ;FIXME: Some tests require network access.
15582 (native-inputs
15583 `(("python-cloudpickle" ,python-cloudpickle)
15584 ("python-dill" ,python-dill)
15585 ("python-msgpack" ,python-msgpack)))
15586 (propagated-inputs
15587 `(("python-serpent" ,python-serpent)))
15588 (home-page "https://pyro4.readthedocs.io")
15589 (synopsis "Distributed object middleware for Python")
15590 (description
15591 "Pyro enables you to build applications in which objects can talk to each
15592 other over the network. You can just use normal Python method calls to call
15593 objects on other machines, also known as remote procedure calls (RPC).")
15594 (license license:expat)))
15595
15596 (define-public python2-pyro
15597 (package
15598 (name "python2-pyro")
15599 (version "3.16")
15600 (source
15601 (origin
15602 (method url-fetch)
15603 (uri (pypi-uri "Pyro" version))
15604 (file-name (string-append "Pyro-" version ".tar.gz"))
15605 (sha256
15606 (base32
15607 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15608 (build-system python-build-system)
15609 (arguments
15610 ;; Pyro is not compatible with Python 3
15611 `(#:python ,python-2
15612 ;; Pyro has no test cases for automatic execution
15613 #:tests? #f))
15614 (home-page "https://pythonhosted.org/Pyro/")
15615 (synopsis "Distributed object manager for Python")
15616 (description "Pyro is a Distributed Object Technology system
15617 written in Python that is designed to be easy to use. It resembles
15618 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15619 which is a system and language independent Distributed Object Technology
15620 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15621 longer maintained. New projects should use Pyro4 instead, which
15622 is the new Pyro version that is actively developed.")
15623 (license license:expat)))
15624
15625 (define-public python2-scientific
15626 (package
15627 (name "python2-scientific")
15628 (version "2.9.4")
15629 (source
15630 (origin
15631 (method git-fetch)
15632 (uri (git-reference
15633 (url "https://github.com/khinsen/ScientificPython")
15634 (commit (string-append "rel" version))))
15635 (file-name (git-file-name name version))
15636 (sha256
15637 (base32
15638 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15639 (build-system python-build-system)
15640 (inputs
15641 `(("netcdf" ,netcdf)))
15642 (propagated-inputs
15643 `(("python-numpy" ,python2-numpy-1.8)
15644 ("python-pyro" ,python2-pyro)))
15645 (arguments
15646 ;; ScientificPython is not compatible with Python 3
15647 `(#:python ,python-2
15648 #:tests? #f ; No test suite
15649 #:phases
15650 (modify-phases %standard-phases
15651 (replace 'build
15652 (lambda* (#:key inputs #:allow-other-keys)
15653 (invoke "python" "setup.py" "build"
15654 (string-append "--netcdf_prefix="
15655 (assoc-ref inputs "netcdf"))))))))
15656 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15657 (synopsis "Python modules for scientific computing")
15658 (description "ScientificPython is a collection of Python modules that are
15659 useful for scientific computing. Most modules are rather general (Geometry,
15660 physical units, automatic derivatives, ...) whereas others are more
15661 domain-specific (e.g. netCDF and PDB support). The library is currently
15662 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15663 (license license:cecill-c)))
15664
15665 (define-public python2-mmtk
15666 (package
15667 (name "python2-mmtk")
15668 (version "2.7.12")
15669 (source
15670 (origin
15671 (method git-fetch)
15672 (uri (git-reference
15673 (url "https://github.com/khinsen/MMTK")
15674 (commit (string-append "rel" version))))
15675 (file-name (git-file-name name version))
15676 (sha256
15677 (base32
15678 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15679 (build-system python-build-system)
15680 (native-inputs
15681 `(("netcdf" ,netcdf)))
15682 (propagated-inputs
15683 `(("python-scientific" ,python2-scientific)
15684 ("python-tkinter" ,python-2 "tk")))
15685 (arguments
15686 `(#:python ,python-2
15687 #:tests? #f
15688 #:phases
15689 (modify-phases %standard-phases
15690 (add-before 'build 'includes-from-scientific
15691 (lambda* (#:key inputs #:allow-other-keys)
15692 (mkdir-p "Include/Scientific")
15693 (copy-recursively
15694 (string-append
15695 (assoc-ref inputs "python-scientific")
15696 "/include/python2.7/Scientific")
15697 "Include/Scientific"))))))
15698 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15699 (synopsis "Python library for molecular simulation")
15700 (description "MMTK is a library for molecular simulations with an emphasis
15701 on biomolecules. It provides widely used methods such as Molecular Dynamics
15702 and normal mode analysis, but also basic routines for implementing new methods
15703 for simulation and analysis. The library is currently not actively maintained
15704 and works only with Python 2 and NumPy < 1.9.")
15705 (license license:cecill-c)))
15706
15707 (define-public python-phonenumbers
15708 (package
15709 (name "python-phonenumbers")
15710 (version "8.9.1")
15711 (source
15712 (origin
15713 (method url-fetch)
15714 (uri (pypi-uri "phonenumbers" version))
15715 (sha256
15716 (base32
15717 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15718 (build-system python-build-system)
15719 (home-page
15720 "https://github.com/daviddrysdale/python-phonenumbers")
15721 (synopsis
15722 "Python library for dealing with international phone numbers")
15723 (description
15724 "This package provides a Python port of Google's libphonenumber library.")
15725 (license license:asl2.0)))
15726
15727 (define-public python2-phonenumbers
15728 (package-with-python2 python-phonenumbers))
15729
15730 (define-public python-send2trash
15731 (package
15732 (name "python-send2trash")
15733 (version "1.5.0")
15734 (source
15735 (origin (method git-fetch)
15736 ;; Source tarball on PyPI doesn't include tests.
15737 (uri (git-reference
15738 (url "https://github.com/hsoft/send2trash.git")
15739 (commit version)))
15740 (file-name (git-file-name name version))
15741 (sha256
15742 (base32
15743 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15744 (build-system python-build-system)
15745 (arguments
15746 '(#:phases
15747 (modify-phases %standard-phases
15748 (add-before 'check 'pre-check
15749 (lambda _
15750 (mkdir-p "/tmp/foo")
15751 (setenv "HOME" "/tmp/foo")
15752 #t)))))
15753 (home-page "https://github.com/hsoft/send2trash")
15754 (synopsis "Send files to the user's @file{~/Trash} directory")
15755 (description "This package provides a Python library to send files to the
15756 user's @file{~/Trash} directory.")
15757 (properties `((python2-variant . ,(delay python2-send2trash))))
15758 (license license:bsd-3)))
15759
15760 (define-public python2-send2trash
15761 (package
15762 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15763 (arguments
15764 (substitute-keyword-arguments (package-arguments python-send2trash)
15765 ((#:phases phases)
15766 `(modify-phases ,phases
15767 (add-before 'check 'setenv
15768 (lambda _
15769 (setenv "PYTHONPATH"
15770 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15771 #t))))))))
15772
15773 (define-public python-yapf
15774 (package
15775 (name "python-yapf")
15776 (version "0.29.0")
15777 (source
15778 (origin
15779 (method url-fetch)
15780 (uri (pypi-uri "yapf" version))
15781 (sha256
15782 (base32
15783 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
15784 (build-system python-build-system)
15785 (home-page "https://github.com/google/yapf")
15786 (synopsis "Formatter for Python code")
15787 (description "YAPF is a formatter for Python code. It's based off of
15788 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
15789 takes the code and reformats it to the best formatting that conforms to the
15790 style guide, even if the original code didn't violate the style guide.")
15791 (license license:asl2.0)))
15792
15793 (define-public python2-yapf
15794 (package-with-python2 python-yapf))
15795
15796 (define-public python-gyp
15797 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
15798 (revision "0"))
15799 (package
15800 (name "python-gyp")
15801 ;; Google does not release versions,
15802 ;; based on second most recent commit date.
15803 (version (git-version "0.0.0" revision commit))
15804 (source
15805 (origin
15806 ;; Google does not release tarballs,
15807 ;; git checkout is needed.
15808 (method git-fetch)
15809 (uri (git-reference
15810 (url "https://chromium.googlesource.com/external/gyp")
15811 (commit commit)))
15812 (file-name (git-file-name name version))
15813 (sha256
15814 (base32
15815 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
15816 (build-system python-build-system)
15817 (home-page "https://gyp.gsrc.io/")
15818 (synopsis "GYP is a Meta-Build system")
15819 (description
15820 "GYP builds build systems for large, cross platform applications.
15821 It can be used to generate XCode projects, Visual Studio projects, Ninja build
15822 files, and Makefiles.")
15823 (license license:bsd-3))))
15824
15825 (define-public python2-gyp
15826 (package-with-python2 python-gyp))
15827
15828 (define-public python-whatever
15829 (package
15830 (name "python-whatever")
15831 (version "0.6")
15832 (source
15833 (origin
15834 (method git-fetch)
15835 (uri (git-reference
15836 (url "https://github.com/Suor/whatever")
15837 (commit version)))
15838 (file-name (git-file-name name version))
15839 (sha256
15840 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
15841 (build-system python-build-system)
15842 (arguments
15843 `(#:phases
15844 (modify-phases %standard-phases
15845 (replace 'check
15846 (lambda _
15847 (invoke "py.test"))))))
15848 (native-inputs
15849 `(("python-pytest" ,python-pytest)))
15850 (home-page "http://github.com/Suor/whatever")
15851 (synopsis "Make anonymous functions by partial application of operators")
15852 (description "@code{whatever} provides an easy way to make anonymous
15853 functions by partial application of operators.")
15854 (license license:bsd-3)))
15855
15856 (define-public python2-whatever
15857 (package-with-python2 python-whatever))
15858
15859 (define-public python-funcy
15860 (package
15861 (name "python-funcy")
15862 (version "1.11")
15863 (source
15864 (origin
15865 (method git-fetch)
15866 (uri (git-reference
15867 (url "https://github.com/Suor/funcy.git")
15868 (commit version)))
15869 (sha256
15870 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
15871 (file-name (git-file-name name version))))
15872 (build-system python-build-system)
15873 (arguments
15874 `(#:phases
15875 (modify-phases %standard-phases
15876 (replace 'check
15877 (lambda _
15878 (invoke "py.test"))))))
15879 (native-inputs
15880 `(("python-pytest" ,python-pytest)
15881 ("python-whatever" ,python-whatever)))
15882 (home-page "http://github.com/Suor/funcy")
15883 (synopsis "Functional tools")
15884 (description "@code{funcy} is a library that provides functional tools.
15885 Examples are:
15886 @enumerate
15887 @item merge - Merges collections of the same type
15888 @item walk - Type-preserving map
15889 @item select - Selects a part of a collection
15890 @item take - Takes the first n items of a collection
15891 @item first - Takes the first item of a collection
15892 @item remove - Predicated-removes items of a collection
15893 @item concat - Concatenates two collections
15894 @item flatten - Flattens a collection with subcollections
15895 @item distinct - Returns only distinct items
15896 @item split - Predicated-splits a collection
15897 @item split_at - Splits a collection at a given item
15898 @item group_by - Groups items by group
15899 @item pairwise - Pairs off adjacent items
15900 @item partial - Partially-applies a function
15901 @item curry - Curries a function
15902 @item compose - Composes functions
15903 @item complement - Complements a predicate
15904 @item all_fn - \"all\" with predicate
15905 @end enumerate")
15906 (license license:bsd-3)))
15907
15908 (define-public python2-funcy
15909 (package-with-python2 python-funcy))
15910
15911 (define-public python-isoweek
15912 (package
15913 (name "python-isoweek")
15914 (version "1.3.3")
15915 (source
15916 (origin
15917 (method url-fetch)
15918 (uri (pypi-uri "isoweek" version))
15919 (sha256
15920 (base32
15921 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
15922 (build-system python-build-system)
15923 (home-page "https://github.com/gisle/isoweek")
15924 (synopsis "Objects representing a week")
15925 (description "The @code{isoweek} module provide the class Week that
15926 implements the week definition of ISO 8601. This standard also defines
15927 a notation for identifying weeks; yyyyWww (where the W is a literal).
15928 Week instances stringify to this form.")
15929 (license license:bsd-3)))
15930
15931 (define-public python2-isoweek
15932 (package-with-python2 python-isoweek))
15933
15934 (define-public python-tokenize-rt
15935 (package
15936 (name "python-tokenize-rt")
15937 (version "2.0.1")
15938 (source
15939 (origin
15940 (method url-fetch)
15941 (uri (pypi-uri "tokenize-rt" version))
15942 (sha256
15943 (base32
15944 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
15945 (build-system python-build-system)
15946 (home-page "https://github.com/asottile/tokenize-rt")
15947 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
15948 (description
15949 "This Python library is a wrapper around @code{tokenize} from the Python
15950 standard library. It provides two additional tokens @code{ESCAPED_NL} and
15951 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
15952 and @code{tokens_to_src} to roundtrip.")
15953 (license license:expat)))
15954
15955 (define-public python-future-fstrings
15956 (package
15957 (name "python-future-fstrings")
15958 (version "0.4.1")
15959 (source
15960 (origin
15961 (method url-fetch)
15962 (uri (pypi-uri "future_fstrings" version))
15963 (sha256
15964 (base32
15965 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
15966 (build-system python-build-system)
15967 (propagated-inputs
15968 `(("python-tokenize-rt" ,python-tokenize-rt)))
15969 (home-page "https://github.com/asottile/future-fstrings")
15970 (synopsis "Backport of fstrings to Python < 3.6")
15971 (description
15972 "This package provides a UTF-8 compatible encoding
15973 @code{future_fstrings}, which performs source manipulation. It decodes the
15974 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
15975 @code{f} strings.")
15976 (license license:expat)))
15977
15978 (define-public python-typed-ast
15979 (package
15980 (name "python-typed-ast")
15981 (version "1.4.0")
15982 (source
15983 (origin
15984 (method git-fetch)
15985 (uri (git-reference
15986 (url "https://github.com/python/typed_ast.git")
15987 (commit version)))
15988 (sha256
15989 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
15990 (file-name (git-file-name name version))))
15991 (build-system python-build-system)
15992 (arguments
15993 `(#:modules ((guix build utils)
15994 (guix build python-build-system)
15995 (ice-9 ftw)
15996 (srfi srfi-1)
15997 (srfi srfi-26))
15998 #:phases
15999 (modify-phases %standard-phases
16000 (replace 'check
16001 (lambda _
16002 (let ((cwd (getcwd)))
16003 (setenv "PYTHONPATH"
16004 (string-append cwd "/build/"
16005 (find (cut string-prefix? "lib" <>)
16006 (scandir (string-append cwd "/build")))
16007 ":"
16008 (getenv "PYTHONPATH"))))
16009 (invoke "pytest")
16010 #t)))))
16011 (native-inputs `(("python-pytest" ,python-pytest)))
16012 (home-page "https://github.com/python/typed_ast")
16013 (synopsis "Fork of Python @code{ast} modules with type comment support")
16014 (description "This package provides a parser similar to the standard
16015 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16016 include PEP 484 type comments and are independent of the version of Python
16017 under which they are run. The @code{typed_ast} parsers produce the standard
16018 Python AST (plus type comments), and are both fast and correct, as they are
16019 based on the CPython 2.7 and 3.7 parsers.")
16020 ;; See the file "LICENSE" for the details.
16021 (license (list license:psfl
16022 license:asl2.0
16023 license:expat)))) ;ast27/Parser/spark.py
16024
16025 (define-public python-typing
16026 (package
16027 (name "python-typing")
16028 (version "3.7.4.1")
16029 (source
16030 (origin
16031 (method url-fetch)
16032 (uri (pypi-uri "typing" version))
16033 (sha256
16034 (base32
16035 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16036 (build-system python-build-system)
16037 (home-page "https://docs.python.org/3/library/typing.html")
16038 (synopsis "Type hints for Python")
16039 (description "This is a backport of the standard library @code{typing}
16040 module to Python versions older than 3.5. Typing defines a standard notation
16041 for Python function and variable type annotations. The notation can be used
16042 for documenting code in a concise, standard format, and it has been designed
16043 to also be used by static and runtime type checkers, static analyzers, IDEs
16044 and other tools.")
16045 (license license:psfl)))
16046
16047 (define-public python2-typing
16048 (package-with-python2 python-typing))
16049
16050 (define-public python-typing-extensions
16051 (package
16052 (name "python-typing-extensions")
16053 (version "3.7.4.1")
16054 (source
16055 (origin
16056 (method url-fetch)
16057 (uri (pypi-uri "typing_extensions" version))
16058 (sha256
16059 (base32
16060 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16061 (build-system python-build-system)
16062 (home-page
16063 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16064 (synopsis "Experimental type hints for Python")
16065 (description
16066 "The typing_extensions module contains additional @code{typing} hints not
16067 yet present in the of the @code{typing} standard library.
16068 Included are implementations of:
16069 @enumerate
16070 @item ClassVar
16071 @item ContextManager
16072 @item Counter
16073 @item DefaultDict
16074 @item Deque
16075 @item NewType
16076 @item NoReturn
16077 @item overload
16078 @item Protocol
16079 @item runtime
16080 @item Text
16081 @item Type
16082 @item TYPE_CHECKING
16083 @item AsyncGenerator
16084 @end enumerate\n")
16085 (license license:psfl)))
16086
16087 (define-public bpython
16088 (package
16089 (name "bpython")
16090 (version "0.18")
16091 (source
16092 (origin
16093 (method url-fetch)
16094 (uri (pypi-uri "bpython" version))
16095 (sha256
16096 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16097 (build-system python-build-system)
16098 (arguments
16099 `(#:phases
16100 (modify-phases %standard-phases
16101 (add-after 'unpack 'remove-failing-test
16102 (lambda _
16103 ;; Remove failing test. FIXME: make it pass
16104 (delete-file "bpython/test/test_args.py")
16105 #t))
16106 (add-after 'wrap 'add-aliases
16107 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16108 (lambda* (#:key outputs #:allow-other-keys)
16109 (let ((out (assoc-ref outputs "out")))
16110 (for-each
16111 (lambda (old new)
16112 (symlink old (string-append out "/bin/" new)))
16113 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16114 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16115 #t)))))
16116 (propagated-inputs
16117 `(("python-pygments" ,python-pygments)
16118 ("python-requests" ,python-requests)
16119 ("python-babel" ,python-babel) ; optional, for internationalization
16120 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16121 ("python-greenlet" ,python-greenlet)
16122 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16123 ("python-six" ,python-six)))
16124 (native-inputs
16125 `(("python-sphinx" ,python-sphinx)
16126 ("python-mock" ,python-mock)))
16127 (home-page "https://bpython-interpreter.org/")
16128 (synopsis "Fancy interface to the Python interpreter")
16129 (description "Bpython is a fancy interface to the Python
16130 interpreter. bpython's main features are
16131
16132 @enumerate
16133 @item in-line syntax highlighting,
16134 @item readline-like autocomplete with suggestions displayed as you type,
16135 @item expected parameter list for any Python function,
16136 @item \"rewind\" function to pop the last line of code from memory and
16137 re-evaluate,
16138 @item send the code you've entered off to a pastebin,
16139 @item save the code you've entered to a file, and
16140 @item auto-indentation.
16141 @end enumerate")
16142 (license license:expat)))
16143
16144 (define-public bpython2
16145 (let ((base (package-with-python2
16146 (strip-python2-variant bpython))))
16147 (package (inherit base)
16148 (name "bpython2")
16149 (arguments
16150 `(#:python ,python-2
16151 #:phases
16152 (modify-phases %standard-phases
16153 (add-after 'unpack 'remove-failing-test
16154 (lambda _
16155 ;; Remove failing test. FIXME: make it pass
16156 (delete-file "bpython/test/test_args.py")
16157 ;; Disable failing test-cases (renaming inhibits they are
16158 ;; discovered)
16159 (substitute* "bpython/test/test_curtsies_repl.py"
16160 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16161 (string-append a "xxx_off_" b))
16162 (("^(\\s*def )(test_complex\\W)" _ a b)
16163 (string-append a "xxx_off_" b)))
16164 #t))
16165 (add-before 'build 'rename-scripts
16166 ;; rename the scripts to bypthon2, bpdb2, etc.
16167 (lambda _
16168 (substitute* "setup.py"
16169 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16170 (string-append name "2" rest "\n"))
16171 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16172 (string-append name "2" (or sub "") rest "\n")))
16173 #t))))))))
16174
16175 (define-public python-pyinotify
16176 (package
16177 (name "python-pyinotify")
16178 (version "0.9.6")
16179 (source (origin
16180 (method url-fetch)
16181 (uri (pypi-uri "pyinotify" version))
16182 (sha256
16183 (base32
16184 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16185 (build-system python-build-system)
16186 (arguments `(#:tests? #f)) ;no tests
16187 (home-page "https://github.com/seb-m/pyinotify")
16188 (synopsis "Python library for monitoring inotify events")
16189 (description
16190 "@code{pyinotify} provides a Python interface for monitoring
16191 file system events on Linux.")
16192 (license license:expat)))
16193
16194 (define-public python2-pyinotify
16195 (package-with-python2 python-pyinotify))
16196
16197 ;; Ada parser uses this version.
16198 (define-public python2-quex-0.67.3
16199 (package
16200 (name "python2-quex")
16201 (version "0.67.3")
16202 (source
16203 (origin
16204 (method url-fetch)
16205 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16206 (version-major+minor version)
16207 "/quex-" version ".zip"))
16208 (sha256
16209 (base32
16210 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16211 (build-system python-build-system)
16212 (native-inputs
16213 `(("unzip" ,unzip)))
16214 (arguments
16215 `(#:python ,python-2
16216 #:tests? #f
16217 #:phases
16218 (modify-phases %standard-phases
16219 (delete 'configure)
16220 (delete 'build)
16221 (replace 'install
16222 (lambda* (#:key outputs #:allow-other-keys)
16223 (let* ((out (assoc-ref outputs "out"))
16224 (share/quex (string-append out "/share/quex"))
16225 (bin (string-append out "/bin")))
16226 (copy-recursively "." share/quex)
16227 (mkdir-p bin)
16228 (symlink (string-append share/quex "/quex-exe.py")
16229 (string-append bin "/quex"))
16230 #t))))))
16231 (native-search-paths
16232 (list (search-path-specification
16233 (variable "QUEX_PATH")
16234 (files '("share/quex")))))
16235 (home-page "http://quex.sourceforge.net/")
16236 (synopsis "Lexical analyzer generator in Python")
16237 (description "@code{quex} is a lexical analyzer generator in Python.")
16238 (license license:lgpl2.1+))) ; Non-military
16239
16240 (define-public python2-quex
16241 (package (inherit python2-quex-0.67.3)
16242 (name "python2-quex")
16243 (version "0.68.1")
16244 (source
16245 (origin
16246 (method url-fetch)
16247 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16248 (sha256
16249 (base32
16250 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16251 (file-name (string-append name "-" version ".tar.gz"))))))
16252
16253 (define-public python-more-itertools
16254 (package
16255 (name "python-more-itertools")
16256 (version "8.2.0")
16257 (source
16258 (origin
16259 (method url-fetch)
16260 (uri (pypi-uri "more-itertools" version))
16261 (sha256
16262 (base32
16263 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16264 (build-system python-build-system)
16265 (home-page "https://github.com/erikrose/more-itertools")
16266 (synopsis "More routines for operating on iterables, beyond itertools")
16267 (description "Python's built-in @code{itertools} module implements a
16268 number of iterator building blocks inspired by constructs from APL, Haskell,
16269 and SML. @code{more-itertools} includes additional building blocks for
16270 working with iterables.")
16271 (properties `((python2-variant . ,(delay python2-more-itertools))))
16272 (license license:expat)))
16273
16274 ;; The 5.x series are the last versions supporting Python 2.7.
16275 (define-public python2-more-itertools
16276 (package
16277 (inherit python-more-itertools)
16278 (name "python2-more-itertools")
16279 (version "5.0.0")
16280 (source (origin
16281 (method url-fetch)
16282 (uri (pypi-uri "more-itertools" version))
16283 (sha256
16284 (base32
16285 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16286 (arguments
16287 `(#:python ,python-2))
16288 (propagated-inputs
16289 `(("python2-six" ,python2-six-bootstrap)))))
16290
16291 (define-public python-latexcodec
16292 (package
16293 (name "python-latexcodec")
16294 (version "1.0.7")
16295 (source
16296 (origin
16297 (method url-fetch)
16298 (uri (pypi-uri "latexcodec" version))
16299 (sha256
16300 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16301 (build-system python-build-system)
16302 (inputs
16303 `(("python-six" ,python-six)))
16304 (home-page "https://readthedocs.org/projects/latexcodec/")
16305 (synopsis "Work with LaTeX code in Python")
16306 (description "Lexer and codec to work with LaTeX code in Python.")
16307 (license license:expat)))
16308
16309 (define-public python-pybtex
16310 (package
16311 (name "python-pybtex")
16312 (version "0.22.2")
16313 (source
16314 (origin
16315 (method url-fetch)
16316 (uri (pypi-uri "pybtex" version))
16317 (sha256
16318 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16319 (build-system python-build-system)
16320 (native-inputs
16321 `(("python-nose" ,python-nose)))
16322 (inputs
16323 `(("python-latexcodec" ,python-latexcodec)
16324 ("python-pyyaml" ,python-pyyaml)
16325 ("python-six" ,python-six)))
16326 (arguments
16327 `(#:test-target "nosetests"))
16328 (home-page "https://pybtex.org/")
16329 (synopsis "BibTeX-compatible bibliography processor")
16330 (description "Pybtex is a BibTeX-compatible bibliography processor written
16331 in Python. You can simply type pybtex instead of bibtex.")
16332 (license license:expat)))
16333
16334 (define-public python-onetimepass
16335 (package
16336 (name "python-onetimepass")
16337 (version "1.0.1")
16338 (source
16339 (origin
16340 (method url-fetch)
16341 (uri (pypi-uri "onetimepass" version))
16342 (sha256
16343 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16344 (build-system python-build-system)
16345 (propagated-inputs `(("python-six" ,python-six)))
16346 (home-page "https://github.com/tadeck/onetimepass/")
16347 (synopsis "One-time password library")
16348 (description "Python one-time password library for HMAC-based (HOTP) and
16349 time-based (TOTP) passwords.")
16350 (license license:expat)))
16351
16352 (define-public python-parso
16353 (package
16354 (name "python-parso")
16355 (version "0.7.0")
16356 (source
16357 (origin
16358 (method url-fetch)
16359 (uri (pypi-uri "parso" version))
16360 (sha256
16361 (base32
16362 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16363 (native-inputs
16364 `(("python-pytest" ,python-pytest)))
16365 (build-system python-build-system)
16366 (arguments
16367 `(#:phases (modify-phases %standard-phases
16368 (replace 'check
16369 (lambda _ (invoke "pytest" "-vv"))))))
16370 (home-page "https://github.com/davidhalter/parso")
16371 (synopsis "Python Parser")
16372 (description "Parso is a Python parser that supports error recovery and
16373 round-trip parsing for different Python versions (in multiple Python versions).
16374 Parso is also able to list multiple syntax errors in your Python file.")
16375 (license license:expat)))
16376
16377 (define-public python2-parso
16378 (package-with-python2 python-parso))
16379
16380 ;; This version is required for Jedi@0.15, which in turn is needed for
16381 ;; python-language-server.
16382 (define-public python-parso-0.5
16383 (package
16384 (inherit python-parso)
16385 (version "0.5.2")
16386 (source (origin
16387 (method url-fetch)
16388 (uri (pypi-uri "parso" version))
16389 (sha256
16390 (base32
16391 "1qgvrkpma7vylrk047mxxvqd66nwqk978n3ig2w8iz9m3bgjbksm"))))))
16392
16393 (define-public python-async-generator
16394 (package
16395 (name "python-async-generator")
16396 (version "1.10")
16397 (source
16398 (origin
16399 (method url-fetch)
16400 (uri (pypi-uri "async_generator" version))
16401 (sha256
16402 (base32
16403 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16404 (build-system python-build-system)
16405 (native-inputs
16406 `(("python-pytest" ,python-pytest)))
16407 (home-page "https://github.com/python-trio/async_generator")
16408 (synopsis "Async generators and context managers for Python 3.5+")
16409 (description "@code{async_generator} back-ports Python 3.6's native async
16410 generators and Python 3.7's context managers into Python 3.5.")
16411 ;; Dual licensed.
16412 (license (list license:expat license:asl2.0))))
16413
16414 (define-public python-async-timeout
16415 (package
16416 (name "python-async-timeout")
16417 (version "3.0.1")
16418 (source
16419 (origin
16420 (method url-fetch)
16421 (uri (pypi-uri "async-timeout" version))
16422 (sha256
16423 (base32
16424 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16425 (build-system python-build-system)
16426 (home-page "https://github.com/aio-libs/async_timeout/")
16427 (synopsis "Timeout context manager for asyncio programs")
16428 (description "@code{async-timeout} provides a timeout timeout context
16429 manager compatible with @code{asyncio}.")
16430 (license license:asl2.0)))
16431
16432 (define-public python-glob2
16433 (package
16434 (name "python-glob2")
16435 (version "0.7")
16436 (source
16437 (origin
16438 (method git-fetch)
16439 (uri (git-reference
16440 (url "https://github.com/miracle2k/python-glob2.git")
16441 (commit (string-append "v" version))))
16442 (file-name (git-file-name name version))
16443 (sha256
16444 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16445 (build-system python-build-system)
16446 (home-page "https://github.com/miracle2k/python-glob2/")
16447 (synopsis "Extended Version of the python buildin glob module")
16448 (description "This is an extended version of the Python
16449 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16450 adds:
16451
16452 @itemize
16453 @item The ability to capture the text matched by glob patterns, and return
16454 those matches alongside the file names.
16455 @item A recursive @code{**} globbing syntax, akin for example to the
16456 @code{globstar} option of Bash.
16457 @item The ability to replace the file system functions used, in order to glob
16458 on virtual file systems.
16459 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16460 @end itemize
16461
16462 Glob2 currently based on the glob code from Python 3.3.1.")
16463 (license license:bsd-2)))
16464
16465 (define-public python2-glob2
16466 (package-with-python2 python-glob2))
16467
16468 (define-public python-gipc
16469 (package
16470 (name "python-gipc")
16471 (version "0.6.0")
16472 (source
16473 (origin
16474 (method url-fetch)
16475 (uri (pypi-uri "gipc" version ".zip"))
16476 (sha256
16477 (base32
16478 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16479 (build-system python-build-system)
16480 (native-inputs
16481 `(("unzip" ,unzip)))
16482 (propagated-inputs
16483 `(("python-gevent" ,python-gevent)))
16484 (home-page "https://gehrcke.de/gipc/")
16485 (synopsis "Child process management in the context of gevent")
16486 (description "Usage of Python's multiprocessing package in a
16487 gevent-powered application may raise problems. With @code{gipc},
16488 process-based child processes can safely be created anywhere within a
16489 gevent-powered application.")
16490 (license license:expat)))
16491
16492 (define-public python2-gipc
16493 (package-with-python2 python-gipc))
16494
16495 (define-public python-fusepy
16496 (package
16497 (name "python-fusepy")
16498 (version "2.0.4")
16499 (source
16500 (origin
16501 (method url-fetch)
16502 (uri (pypi-uri "fusepy" version))
16503 (sha256
16504 (base32
16505 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16506 (build-system python-build-system)
16507 (arguments
16508 `(#:phases
16509 (modify-phases %standard-phases
16510 (add-before 'build 'set-library-file-name
16511 (lambda* (#:key inputs #:allow-other-keys)
16512 (let ((fuse (assoc-ref inputs "fuse")))
16513 (substitute* "fuse.py"
16514 (("find_library\\('fuse'\\)")
16515 (string-append "'" fuse "/lib/libfuse.so'")))
16516 #t))))))
16517 (propagated-inputs
16518 `(("fuse" ,fuse)))
16519 (home-page "https://github.com/fusepy/fusepy")
16520 (synopsis "Simple ctypes bindings for FUSE")
16521 (description "Python module that provides a simple interface to FUSE and
16522 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16523 (license license:isc)))
16524
16525 (define-public python2-fusepy
16526 (package-with-python2 python-fusepy))
16527
16528 (define-public python-fusepyng
16529 (package
16530 (name "python-fusepyng")
16531 (version "1.0.7")
16532 (source
16533 (origin
16534 (method url-fetch)
16535 (uri (pypi-uri "fusepyng" version))
16536 (sha256
16537 (base32
16538 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16539 (build-system python-build-system)
16540 (arguments
16541 '(#:phases
16542 (modify-phases %standard-phases
16543 (add-after 'unpack 'set-libfuse-path
16544 (lambda* (#:key inputs #:allow-other-keys)
16545 (let ((fuse (assoc-ref inputs "fuse")))
16546 (substitute* "fusepyng.py"
16547 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16548 (string-append "\"" fuse "/lib/libfuse.so\""))))
16549 #t)))))
16550 (inputs
16551 `(("fuse" ,fuse)))
16552 (propagated-inputs
16553 `(("python-paramiko" ,python-paramiko)))
16554 (home-page "https://github.com/rianhunter/fusepyng")
16555 (synopsis "Simple ctypes bindings for FUSE")
16556 (description "@code{fusepyng} is a Python module that provides a simple
16557 interface to FUSE on various operating systems. It's just one file and is
16558 implemented using @code{ctypes}.")
16559 (license license:isc)))
16560
16561 (define-public python2-gdrivefs
16562 (package
16563 (name "python2-gdrivefs")
16564 (version "0.14.9")
16565 (source
16566 (origin
16567 (method url-fetch)
16568 (uri (pypi-uri "gdrivefs" version))
16569 (sha256
16570 (base32
16571 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16572 (build-system python-build-system)
16573 (arguments
16574 `(#:python ,python-2
16575 #:phases
16576 (modify-phases %standard-phases
16577 (add-before 'build 'patch-setup-py
16578 (lambda _
16579 ;; Update requirements from dependency==version
16580 ;; to dependency>=version
16581 (substitute* "gdrivefs/resources/requirements.txt"
16582 (("==") ">="))
16583 #t)))))
16584 (native-inputs
16585 `(("python2-gipc" ,python2-gipc)
16586 ("python2-gevent" ,python2-gevent)
16587 ("python2-greenlet" ,python2-greenlet)
16588 ("python2-httplib2" ,python2-httplib2)
16589 ("python2-uritemplate" ,python2-uritemplate)
16590 ("python2-oauth2client" ,python2-oauth2client)
16591 ("python2-six" ,python2-six)))
16592 (propagated-inputs
16593 `(("python2-dateutil" ,python2-dateutil)
16594 ("python2-fusepy" ,python2-fusepy)
16595 ("python2-google-api-client" ,python2-google-api-client)))
16596 (home-page "https://github.com/dsoprea/GDriveFS")
16597 (synopsis "Mount Google Drive as a local file system")
16598 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16599 under Python 2.7.")
16600 (license license:gpl2)))
16601
16602 (define-public python-userspacefs
16603 (package
16604 (name "python-userspacefs")
16605 (version "1.0.13")
16606 (source
16607 (origin
16608 (method url-fetch)
16609 (uri (pypi-uri "userspacefs" version))
16610 (sha256
16611 (base32
16612 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16613 (build-system python-build-system)
16614 (propagated-inputs
16615 `(("python-fusepyng" ,python-fusepyng)))
16616 (home-page "https://github.com/rianhunter/userspacefs")
16617 (synopsis "User-space file systems for Python")
16618 (description
16619 "@code{userspacefs} is a library that allows you to easily write
16620 user-space file systems in Python.")
16621 (license license:gpl3+)))
16622
16623 (define-public pybind11
16624 (package
16625 (name "pybind11")
16626 (version "2.4.3")
16627 (source (origin
16628 (method git-fetch)
16629 (uri (git-reference
16630 (url "https://github.com/pybind/pybind11.git")
16631 (commit (string-append "v" version))))
16632 (sha256
16633 (base32
16634 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16635 (file-name (git-file-name name version))))
16636 (build-system cmake-build-system)
16637 (native-inputs
16638 `(("python" ,python-wrapper)
16639
16640 ;; The following dependencies are used for tests.
16641 ("python-pytest" ,python-pytest)
16642 ("catch" ,catch-framework2-1)
16643 ("eigen" ,eigen)))
16644 (arguments
16645 `(#:configure-flags
16646 (list (string-append "-DCATCH_INCLUDE_DIR="
16647 (assoc-ref %build-inputs "catch")
16648 "/include/catch"))
16649
16650 #:phases (modify-phases %standard-phases
16651 (add-after 'install 'install-python
16652 (lambda* (#:key outputs #:allow-other-keys)
16653 (let ((out (assoc-ref outputs "out")))
16654 (with-directory-excursion "../source"
16655 (setenv "PYBIND11_USE_CMAKE" "yes")
16656 (invoke "python" "setup.py" "install"
16657 "--single-version-externally-managed"
16658 "--root=/"
16659 (string-append "--prefix=" out)))))))
16660
16661 #:test-target "check"))
16662 (home-page "https://github.com/pybind/pybind11/")
16663 (synopsis "Seamless operability between C++11 and Python")
16664 (description
16665 "@code{pybind11} is a lightweight header-only library that exposes C++
16666 types in Python and vice versa, mainly to create Python bindings of existing
16667 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16668 library: to minimize boilerplate code in traditional extension modules by
16669 inferring type information using compile-time introspection.")
16670 (license license:bsd-3)))
16671
16672 (define-public python-fasteners
16673 (package
16674 (name "python-fasteners")
16675 (version "0.14.1")
16676 (source
16677 (origin
16678 (method url-fetch)
16679 (uri (pypi-uri "fasteners" version))
16680 (sha256
16681 (base32
16682 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16683 (build-system python-build-system)
16684 (propagated-inputs
16685 `(("python-monotonic" ,python-monotonic)
16686 ("python-six" ,python-six)
16687 ("python-testtools" ,python-testtools)))
16688 (home-page "https://github.com/harlowja/fasteners")
16689 (synopsis "Python package that provides useful locks")
16690 (description
16691 "This package provides a Python program that provides following locks:
16692
16693 @itemize
16694 @item Locking decorator
16695 @item Reader-writer locks
16696 @item Inter-process locks
16697 @item Generic helpers
16698 @end itemize\n")
16699 (properties `((python2-variant . ,(delay python2-fasteners))))
16700 (license license:asl2.0)))
16701
16702 (define-public python2-fasteners
16703 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16704 (package
16705 (inherit base)
16706 (propagated-inputs
16707 `(("python2-futures" ,python2-futures)
16708 ,@(package-propagated-inputs base))))))
16709
16710 (define-public python-requests-file
16711 (package
16712 (name "python-requests-file")
16713 (version "1.4.3")
16714 (source
16715 (origin
16716 (method url-fetch)
16717 (uri (pypi-uri "requests-file" version))
16718 (sha256
16719 (base32
16720 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16721 (build-system python-build-system)
16722 (propagated-inputs
16723 `(("python-requests" ,python-requests)
16724 ("python-six" ,python-six)))
16725 (home-page
16726 "https://github.com/dashea/requests-file")
16727 (synopsis "File transport adapter for Requests")
16728 (description
16729 "Requests-File is a transport adapter for use with the Requests Python
16730 library to allow local file system access via @code{file://} URLs.")
16731 (license license:asl2.0)))
16732
16733 (define-public python2-requests-file
16734 (package-with-python2 python-requests-file))
16735
16736 (define-public python-tldextract
16737 (package
16738 (name "python-tldextract")
16739 (version "2.2.0")
16740 (source
16741 (origin
16742 (method url-fetch)
16743 (uri (pypi-uri "tldextract" version))
16744 (sha256
16745 (base32
16746 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16747 (build-system python-build-system)
16748 (native-inputs
16749 `(("python-pytest" ,python-pytest)
16750 ("python-responses" ,python-responses)))
16751 (propagated-inputs
16752 `(("python-idna" ,python-idna)
16753 ("python-requests" ,python-requests)
16754 ("python-requests-file" ,python-requests-file)))
16755 (home-page
16756 "https://github.com/john-kurkowski/tldextract")
16757 (synopsis
16758 "Separate the TLD from the registered domain and subdomains of a URL")
16759 (description
16760 "TLDExtract accurately separates the TLD from the registered domain and
16761 subdomains of a URL, using the Public Suffix List. By default, this includes
16762 the public ICANN TLDs and their exceptions. It can optionally support the
16763 Public Suffix List's private domains as well.")
16764 (license license:bsd-3)))
16765
16766 (define-public python2-tldextract
16767 (package-with-python2 python-tldextract))
16768
16769 (define-public python-pynamecheap
16770 (package
16771 (name "python-pynamecheap")
16772 (version "0.0.3")
16773 (source
16774 (origin
16775 (method url-fetch)
16776 (uri (pypi-uri "PyNamecheap" version))
16777 (sha256
16778 (base32
16779 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16780 (build-system python-build-system)
16781 (propagated-inputs
16782 `(("python-requests" ,python-requests)))
16783 (home-page
16784 "https://github.com/Bemmu/PyNamecheap")
16785 (synopsis
16786 "Namecheap API client in Python")
16787 (description
16788 "PyNamecheap is a Namecheap API client in Python.")
16789 (license license:expat)))
16790
16791 (define-public python2-pynamecheap
16792 (package-with-python2 python-pynamecheap))
16793
16794 (define-public python-dns-lexicon
16795 (package
16796 (name "python-dns-lexicon")
16797 (version "2.4.0")
16798 (source
16799 (origin
16800 (method url-fetch)
16801 (uri (pypi-uri "dns-lexicon" version))
16802 (sha256
16803 (base32
16804 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
16805 (build-system python-build-system)
16806 (arguments
16807 `(#:tests? #f)) ;requires internet access
16808 (propagated-inputs
16809 `(("python-future" ,python-future)
16810 ("python-pynamecheap" ,python-pynamecheap)
16811 ("python-requests" ,python-requests)
16812 ("python-tldextract" ,python-tldextract)
16813 ("python-urllib3" ,python-urllib3)))
16814 (home-page "https://github.com/AnalogJ/lexicon")
16815 (synopsis
16816 "Manipulate DNS records on various DNS providers")
16817 (description
16818 "Lexicon provides a way to manipulate DNS records on multiple DNS
16819 providers in a standardized way. It has a CLI but it can also be used as a
16820 Python library. It was designed to be used in automation, specifically with
16821 Let's Encrypt.")
16822 (license license:expat)))
16823
16824 (define-public python2-dns-lexicon
16825 (package-with-python2 python-dns-lexicon))
16826
16827 (define-public python-commandlines
16828 (package
16829 (name "python-commandlines")
16830 (version "0.4.1")
16831 (source
16832 (origin
16833 (method url-fetch)
16834 (uri (pypi-uri "commandlines" version))
16835 (sha256
16836 (base32
16837 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
16838 (build-system python-build-system)
16839 (home-page "https://github.com/chrissimpkins/commandlines")
16840 (synopsis "Command line argument to object parsing library")
16841 (description
16842 "@code{Commandlines} is a Python library for command line application
16843 development that supports command line argument parsing, command string
16844 validation testing and application logic.")
16845 (license license:expat)))
16846
16847 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
16848 ;; python-numba. They have a very unflexible relationship.
16849 (define-public python-numba
16850 (package
16851 (name "python-numba")
16852 (version "0.46.0")
16853 (source
16854 (origin
16855 (method url-fetch)
16856 (uri (pypi-uri "numba" version))
16857 (sha256
16858 (base32
16859 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
16860 (build-system python-build-system)
16861 (arguments
16862 `(#:modules ((guix build utils)
16863 (guix build python-build-system)
16864 (ice-9 ftw)
16865 (srfi srfi-1)
16866 (srfi srfi-26))
16867 #:phases
16868 (modify-phases %standard-phases
16869 (add-after 'unpack 'disable-proprietary-features
16870 (lambda _
16871 (setenv "NUMBA_DISABLE_HSA" "1")
16872 (setenv "NUMBA_DISABLE_CUDA" "1")
16873 #t))
16874 (add-after 'unpack 'remove-failing-tests
16875 (lambda _
16876 ;; FIXME: These tests fail for unknown reasons:
16877 ;; test_non_writable_pycache, test_non_creatable_pycache, and
16878 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
16879 (substitute* "numba/tests/test_dispatcher.py"
16880 (("def test(_non_writable_pycache)" _ m)
16881 (string-append "def guix_skip" m))
16882 (("def test(_non_creatable_pycache)" _ m)
16883 (string-append "def guix_skip" m))
16884 (("def test(_frozen)" _ m)
16885 (string-append "def guix_skip" m)))
16886
16887 ;; These tests fail because we don't run the tests from the build
16888 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
16889 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
16890 (substitute* "numba/tests/test_pycc.py"
16891 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
16892 (string-append "def guix_skip" m)))
16893
16894 ;; These tests fail because our version of Python does not have
16895 ;; a recognizable front-end for the Numba distribution to use
16896 ;; to check against.
16897 (substitute* "numba/tests/test_entrypoints.py"
16898 (("def test(_init_entrypoint)" _ m)
16899 (string-append "def guix_skip" m)))
16900 (substitute* "numba/tests/test_jitclasses.py"
16901 (("def test(_jitclass_longlabel_not_truncated)" _ m)
16902 (string-append "def guix_skip" m)))
16903 #t))
16904 (replace 'check
16905 (lambda _
16906 (let ((cwd (getcwd)))
16907 (setenv "PYTHONPATH"
16908 (string-append cwd "/build/"
16909 (find (cut string-prefix? "lib" <>)
16910 (scandir (string-append cwd "/build")))
16911 ":"
16912 (getenv "PYTHONPATH")))
16913 ;; Something is wrong with the PYTHONPATH when running the
16914 ;; tests from the build directory, as it complains about not being
16915 ;; able to import certain modules.
16916 (with-directory-excursion "/tmp"
16917 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
16918 #t)))))
16919 (propagated-inputs
16920 `(("python-llvmlite" ,python-llvmlite)
16921 ("python-numpy" ,python-numpy)
16922 ("python-singledispatch" ,python-singledispatch)))
16923 ;; Needed for tests.
16924 (inputs
16925 `(("python-jinja2" ,python-jinja2)
16926 ("python-pygments" ,python-pygments)))
16927 (home-page "https://numba.pydata.org")
16928 (synopsis "Compile Python code using LLVM")
16929 (description "Numba gives you the power to speed up your applications with
16930 high performance functions written directly in Python. With a few
16931 annotations, array-oriented and math-heavy Python code can be just-in-time
16932 compiled to native machine instructions, similar in performance to C, C++ and
16933 Fortran, without having to switch languages or Python interpreters.
16934
16935 Numba works by generating optimized machine code using the LLVM compiler
16936 infrastructure at import time, runtime, or statically (using the included pycc
16937 tool).")
16938 (license license:bsd-3)))
16939
16940 (define-public python-numcodecs
16941 (package
16942 (name "python-numcodecs")
16943 (version "0.6.4")
16944 (source
16945 (origin
16946 (method url-fetch)
16947 (uri (pypi-uri "numcodecs" version))
16948 (sha256
16949 (base32
16950 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
16951 (build-system python-build-system)
16952 (propagated-inputs
16953 `(("python-numpy" ,python-numpy)
16954 ("python-msgpack" ,python-msgpack)))
16955 (native-inputs
16956 `(("python-pytest" ,python-pytest)
16957 ("python-setuptools-scm" ,python-setuptools-scm)))
16958 (home-page "https://github.com/zarr-developers/numcodecs")
16959 (synopsis "Buffer compression and transformation codecs")
16960 (description
16961 "This Python package provides buffer compression and transformation
16962 codecs for use in data storage and communication applications.")
16963 (license license:expat)))
16964
16965 (define-public python-asciitree
16966 (package
16967 (name "python-asciitree")
16968 (version "0.3.3")
16969 (source
16970 (origin
16971 (method url-fetch)
16972 (uri (pypi-uri "asciitree" version))
16973 (sha256
16974 (base32
16975 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
16976 (build-system python-build-system)
16977 (home-page "https://github.com/mbr/asciitree")
16978 (synopsis "Draws ASCII trees")
16979 (description "This package draws tree structures using characters.")
16980 (license license:expat)))
16981
16982 (define-public python-zarr
16983 (package
16984 (name "python-zarr")
16985 (version "2.4.0")
16986 (source
16987 (origin
16988 (method url-fetch)
16989 (uri (pypi-uri "zarr" version))
16990 (sha256
16991 (base32
16992 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
16993 (build-system python-build-system)
16994 (arguments
16995 `(#:phases
16996 (modify-phases %standard-phases
16997 (add-after 'unpack 'disable-service-tests
16998 (lambda _
16999 (setenv "ZARR_TEST_ABS" "0")
17000 (setenv "ZARR_TEST_MONGO" "0")
17001 (setenv "ZARR_TEST_REDIS" "0")
17002 #t))
17003 (replace 'check
17004 (lambda _
17005 (invoke "pytest" "-vv" "-k" "not lmdb")
17006 #t)))))
17007 (propagated-inputs
17008 `(("python-asciitree" ,python-asciitree)
17009 ("python-fasteners" ,python-fasteners)
17010 ("python-numcodecs" ,python-numcodecs)
17011 ("python-numpy" ,python-numpy)))
17012 (native-inputs
17013 `(("python-pytest" ,python-pytest)
17014 ("python-setuptools-scm" ,python-setuptools-scm)))
17015 (home-page "https://github.com/zarr-developers/zarr-python")
17016 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17017 (description
17018 "This package provides an implementation of chunked, compressed,
17019 N-dimensional arrays for Python.")
17020 (license license:expat)))
17021
17022 (define-public python-anndata
17023 (package
17024 (name "python-anndata")
17025 (version "0.7.1")
17026 (source
17027 (origin
17028 (method url-fetch)
17029 (uri (pypi-uri "anndata" version))
17030 (sha256
17031 (base32
17032 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17033 (build-system python-build-system)
17034 (arguments
17035 `(#:phases
17036 (modify-phases %standard-phases
17037 (add-after 'unpack 'delete-inconvenient-tests
17038 (lambda _
17039 ;; This test depends on python-scikit-learn.
17040 (delete-file "anndata/tests/test_inplace_subset.py")
17041 #t))
17042 (delete 'check)
17043 (add-after 'install 'check
17044 (lambda* (#:key inputs outputs #:allow-other-keys)
17045 (add-installed-pythonpath inputs outputs)
17046 (invoke "pytest" "-vv"))))))
17047 (propagated-inputs
17048 `(("python-h5py" ,python-h5py)
17049 ("python-importlib-metadata" ,python-importlib-metadata)
17050 ("python-natsort" ,python-natsort)
17051 ("python-numcodecs" ,python-numcodecs)
17052 ("python-packaging" ,python-packaging)
17053 ("python-pandas" ,python-pandas)
17054 ("python-scipy" ,python-scipy)
17055 ("python-zarr" ,python-zarr)))
17056 (native-inputs
17057 `(("python-joblib" ,python-joblib)
17058 ("python-pytest" ,python-pytest)
17059 ("python-setuptools-scm" ,python-setuptools-scm)))
17060 (home-page "https://github.com/theislab/anndata")
17061 (synopsis "Annotated data for data analysis pipelines")
17062 (description "Anndata is a package for simple (functional) high-level APIs
17063 for data analysis pipelines. In this context, it provides an efficient,
17064 scalable way of keeping track of data together with learned annotations and
17065 reduces the code overhead typically encountered when using a mostly
17066 object-oriented library such as @code{scikit-learn}.")
17067 (license license:bsd-3)))
17068
17069 (define-public python-dill
17070 (package
17071 (name "python-dill")
17072 (version "0.3.1.1")
17073 (source
17074 (origin
17075 (method url-fetch)
17076 (uri (pypi-uri "dill" version))
17077 (sha256
17078 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17079 (build-system python-build-system)
17080 (arguments
17081 `(#:phases
17082 (modify-phases %standard-phases
17083 (replace 'check
17084 (lambda _
17085 (with-directory-excursion "/tmp"
17086 (invoke "nosetests" "-v"))
17087 #t)))))
17088 (native-inputs
17089 `(("python-nose" ,python-nose)))
17090 (home-page "https://pypi.org/project/dill/")
17091 (synopsis "Serialize all of Python")
17092 (description "Dill extends Python's @code{pickle} module for serializing
17093 and de-serializing Python objects to the majority of the built-in Python
17094 types. Dill provides the user the same interface as the @code{pickle} module,
17095 and also includes some additional features. In addition to pickling Python
17096 objects, @code{dill} provides the ability to save the state of an interpreter
17097 session in a single command. Hence, it would be feasible to save a
17098 interpreter session, close the interpreter, ship the pickled file to another
17099 computer, open a new interpreter, unpickle the session and thus continue from
17100 the saved state of the original interpreter session.")
17101 (license license:bsd-3)))
17102
17103 (define-public python-multiprocess
17104 (package
17105 (name "python-multiprocess")
17106 (version "0.70.9")
17107 (source
17108 (origin
17109 (method url-fetch)
17110 (uri (pypi-uri "multiprocess" version))
17111 (sha256
17112 (base32
17113 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17114 (build-system python-build-system)
17115 (arguments
17116 `(#:phases
17117 (modify-phases %standard-phases
17118 (add-after 'unpack 'disable-broken-tests
17119 (lambda _
17120 ;; This test is broken as there is no keyboard interrupt.
17121 (substitute* "py3.7/multiprocess/tests/__init__.py"
17122 (("^(.*)def test_wait_result"
17123 line indent)
17124 (string-append indent
17125 "@unittest.skip(\"Disabled by Guix\")\n"
17126 line)))
17127 #t))
17128 ;; Tests must be run after installation.
17129 (delete 'check)
17130 (add-after 'install 'check
17131 (lambda* (#:key inputs outputs #:allow-other-keys)
17132 (add-installed-pythonpath inputs outputs)
17133 (invoke "python" "-m" "multiprocess.tests")
17134 #t)))))
17135 (propagated-inputs
17136 `(("python-dill" ,python-dill)))
17137 (home-page "https://pypi.org/project/multiprocess/")
17138 (synopsis "Multiprocessing and multithreading in Python")
17139 (description
17140 "This package is a fork of the multiprocessing Python package, a package
17141 which supports the spawning of processes using the API of the standard
17142 library's @code{threading} module.")
17143 (license license:bsd-3)))
17144
17145 (define-public python-toolz
17146 (package
17147 (name "python-toolz")
17148 (version "0.9.0")
17149 (source
17150 (origin
17151 (method url-fetch)
17152 (uri (pypi-uri "toolz" version))
17153 (sha256
17154 (base32
17155 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17156 (build-system python-build-system)
17157 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17158 ;; unregistered loader type"
17159 (arguments '(#:tests? #f))
17160 (home-page "https://github.com/pytoolz/toolz/")
17161 (synopsis "List processing tools and functional utilities")
17162 (description
17163 "This package provides a set of utility functions for iterators,
17164 functions, and dictionaries.")
17165 (license license:bsd-3)))
17166
17167 (define-public python2-toolz
17168 (package-with-python2 python-toolz))
17169
17170 (define-public python-cytoolz
17171 (package
17172 (name "python-cytoolz")
17173 (version "0.9.0.1")
17174 (source
17175 (origin
17176 (method url-fetch)
17177 (uri (pypi-uri "cytoolz" version))
17178 (sha256
17179 (base32
17180 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17181 (build-system python-build-system)
17182 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17183 ;; 'exceptions'"
17184 (arguments '(#:tests? #f))
17185 (propagated-inputs
17186 `(("python-toolz" ,python-toolz)))
17187 (native-inputs
17188 `(("python-cython" ,python-cython)))
17189 (home-page "https://github.com/pytoolz/cytoolz")
17190 (synopsis "High performance functional utilities")
17191 (description
17192 "The cytoolz package implements the same API as provided by toolz. The
17193 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17194 that is accessible to other projects developed in Cython.")
17195 (license license:bsd-3)))
17196
17197 (define-public python-sortedcontainers
17198 (package
17199 (name "python-sortedcontainers")
17200 (version "2.1.0")
17201 (source
17202 (origin
17203 (method url-fetch)
17204 (uri (pypi-uri "sortedcontainers" version))
17205 (sha256
17206 (base32
17207 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17208 (build-system python-build-system)
17209 (arguments
17210 ;; FIXME: Tests require many extra dependencies, and would introduce
17211 ;; a circular dependency on hypothesis, which uses this package.
17212 '(#:tests? #f))
17213 (propagated-inputs
17214 `(("python-appdirs" ,python-appdirs)
17215 ("python-distlib" ,python-distlib)
17216 ("python-filelock" ,python-filelock)
17217 ("python-six" ,python-six-bootstrap)))
17218 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17219 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17220 (description
17221 "This package provides a sorted collections library, written in
17222 pure-Python.")
17223 (license license:asl2.0)))
17224
17225 (define-public python2-sortedcontainers
17226 (package-with-python2 python-sortedcontainers))
17227
17228 (define-public python-cloudpickle
17229 (package
17230 (name "python-cloudpickle")
17231 (version "1.3.0")
17232 (source
17233 (origin
17234 (method url-fetch)
17235 (uri (pypi-uri "cloudpickle" version))
17236 (sha256
17237 (base32
17238 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17239 (build-system python-build-system)
17240 (arguments
17241 '(#:phases (modify-phases %standard-phases
17242 (add-before 'check 'do-not-override-PYTHONPATH
17243 (lambda _
17244 ;; Append to PYTHONPATH instead of overriding it so
17245 ;; that dependencies from Guix can be found.
17246 (substitute* "tests/testutils.py"
17247 (("env\\['PYTHONPATH'\\] = pythonpath")
17248 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17249 #t))
17250 (replace 'check
17251 (lambda* (#:key tests? #:allow-other-keys)
17252 (if tests?
17253 (invoke "pytest" "-s" "-vv")
17254 (format #t "test suite not run~%"))
17255 #t)))))
17256 (native-inputs
17257 `(;; For tests.
17258 ("python-psutil" ,python-psutil)
17259 ("python-pytest" ,python-pytest)
17260 ("python-tornado" ,python-tornado)))
17261 (home-page "https://github.com/cloudpipe/cloudpickle")
17262 (synopsis "Extended pickling support for Python objects")
17263 (description
17264 "Cloudpickle makes it possible to serialize Python constructs not
17265 supported by the default pickle module from the Python standard library. It
17266 is especially useful for cluster computing where Python expressions are
17267 shipped over the network to execute on remote hosts, possibly close to the
17268 data.")
17269 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17270 (license license:bsd-3)))
17271
17272 (define-public python2-cloudpickle
17273 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17274 (package
17275 (inherit base)
17276 (native-inputs
17277 `(("python-mock" ,python2-mock)
17278 ,@(package-native-inputs base)))
17279 (propagated-inputs
17280 `(("python-futures" ,python2-futures)
17281 ,@(package-propagated-inputs base))))))
17282
17283 (define-public python-locket
17284 (package
17285 (name "python-locket")
17286 (version "0.2.0")
17287 (source
17288 (origin
17289 (method url-fetch)
17290 (uri (pypi-uri "locket" version))
17291 (sha256
17292 (base32
17293 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17294 (build-system python-build-system)
17295 (home-page "https://github.com/mwilliamson/locket.py")
17296 (synopsis "File-based locks for Python")
17297 (description
17298 "Locket implements a lock that can be used by multiple processes provided
17299 they use the same path.")
17300 (license license:bsd-2)))
17301
17302 (define-public python2-locket
17303 (package-with-python2 python-locket))
17304
17305 (define-public python-blosc
17306 (package
17307 (name "python-blosc")
17308 (version "1.5.1")
17309 (source
17310 (origin
17311 (method url-fetch)
17312 (uri (pypi-uri "blosc" version))
17313 (sha256
17314 (base32
17315 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17316 (build-system python-build-system)
17317 ;; FIXME: all tests pass, but then this error is printed:
17318 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17319 (arguments '(#:tests? #f))
17320 (propagated-inputs
17321 `(("python-numpy" ,python-numpy)))
17322 (home-page "https://github.com/blosc/python-blosc")
17323 (synopsis "Python wrapper for the Blosc data compressor library")
17324 (description "Blosc is a high performance compressor optimized for binary
17325 data. It has been designed to transmit data to the processor cache faster
17326 than the traditional, non-compressed, direct memory fetch approach via a
17327 @code{memcpy()} system call.
17328
17329 Blosc works well for compressing numerical arrays that contains data with
17330 relatively low entropy, like sparse data, time series, grids with
17331 regular-spaced values, etc.
17332
17333 This Python package wraps the Blosc library.")
17334 (license license:bsd-3)))
17335
17336 (define-public python2-blosc
17337 (package-with-python2 python-blosc))
17338
17339 (define-public python-partd
17340 (package
17341 (name "python-partd")
17342 (version "0.3.9")
17343 (source
17344 (origin
17345 (method url-fetch)
17346 (uri (pypi-uri "partd" version))
17347 (sha256
17348 (base32
17349 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17350 (build-system python-build-system)
17351 (propagated-inputs
17352 `(("python-blosc" ,python-blosc)
17353 ("python-locket" ,python-locket)
17354 ("python-numpy" ,python-numpy)
17355 ("python-pandas" ,python-pandas)
17356 ("python-pyzmq" ,python-pyzmq)
17357 ("python-toolz" ,python-toolz)))
17358 (home-page "https://github.com/dask/partd/")
17359 (synopsis "Appendable key-value storage")
17360 (description "Partd stores key-value pairs. Values are raw bytes. We
17361 append on old values. Partd excels at shuffling operations.")
17362 (license license:bsd-3)))
17363
17364 (define-public python2-partd
17365 (package-with-python2 python-partd))
17366
17367 (define-public python-fsspec
17368 (package
17369 (name "python-fsspec")
17370 (version "0.6.1")
17371 (source
17372 (origin
17373 (method url-fetch)
17374 (uri (pypi-uri "fsspec" version))
17375 (sha256
17376 (base32
17377 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17378 (build-system python-build-system)
17379 (arguments '(#:tests? #f)) ; there are none
17380 (home-page "https://github.com/intake/filesystem_spec")
17381 (synopsis "File-system specification")
17382 (description "The purpose of this package is to produce a template or
17383 specification for a file-system interface, that specific implementations
17384 should follow, so that applications making use of them can rely on a common
17385 behavior and not have to worry about the specific internal implementation
17386 decisions with any given backend.")
17387 (license license:bsd-3)))
17388
17389 (define-public python-dask
17390 (package
17391 (name "python-dask")
17392 (version "2.14.0")
17393 (source
17394 (origin
17395 (method url-fetch)
17396 (uri (pypi-uri "dask" version))
17397 (sha256
17398 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17399 (build-system python-build-system)
17400 (arguments
17401 `(#:phases
17402 (modify-phases %standard-phases
17403 (add-after 'unpack 'disable-broken-tests
17404 (lambda _
17405 ;; This test is marked as xfail when pytest-xdist is used.
17406 (substitute* "dask/tests/test_threaded.py"
17407 (("def test_interrupt\\(\\)" m)
17408 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17409 m)))
17410 ;; This one fails with a type error:
17411 ;; TypeError: Already tz-aware, use tz_convert to convert.
17412 (substitute* "dask/dataframe/tests/test_shuffle.py"
17413 (("def test_set_index_timestamp\\(\\)" m)
17414 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17415 m)))
17416 #t))
17417 (replace 'check
17418 (lambda _ (invoke "pytest" "-vv"))))))
17419 (propagated-inputs
17420 `(("python-cloudpickle" ,python-cloudpickle)
17421 ("python-fsspec" ,python-fsspec)
17422 ("python-numpy" ,python-numpy)
17423 ("python-packaging" ,python-packaging)
17424 ("python-pandas" ,python-pandas)
17425 ("python-partd" ,python-partd)
17426 ("python-toolz" ,python-toolz)
17427 ("python-pyyaml" ,python-pyyaml)))
17428 (native-inputs
17429 `(("python-pytest" ,python-pytest)
17430 ("python-pytest-runner" ,python-pytest-runner)))
17431 (home-page "https://github.com/dask/dask/")
17432 (synopsis "Parallel computing with task scheduling")
17433 (description
17434 "Dask is a flexible parallel computing library for analytics. It
17435 consists of two components: dynamic task scheduling optimized for computation,
17436 and large data collections like parallel arrays, dataframes, and lists that
17437 extend common interfaces like NumPy, Pandas, or Python iterators to
17438 larger-than-memory or distributed environments. These parallel collections
17439 run on top of the dynamic task schedulers. ")
17440 (license license:bsd-3)))
17441
17442 (define-public python-ilinkedlist
17443 (package
17444 (name "python-ilinkedlist")
17445 (version "0.4.0")
17446 (source
17447 (origin
17448 (method url-fetch)
17449 (uri (pypi-uri "ilinkedlist" version))
17450 (sha256
17451 (base32
17452 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17453 (build-system python-build-system)
17454 (native-inputs `(("python-pytest" ,python-pytest)))
17455 (inputs `(("python" ,python)))
17456 (home-page "https://github.com/luther9/ilinkedlist-py")
17457 (synopsis "Immutable linked list library")
17458 (description
17459 "This is a implementation of immutable linked lists for Python. It
17460 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17461 Since a linked list is treated as immutable, it is hashable, and its length
17462 can be retrieved in constant time. Some of the terminology is inspired by
17463 LISP. It is possible to create an improper list by creating a @code{Pair}
17464 with a non-list @code{cdr}.")
17465 (license license:gpl3+)))
17466
17467 (define-public python-readlike
17468 (package
17469 (name "python-readlike")
17470 (version "0.1.3")
17471 (source
17472 (origin
17473 (method url-fetch)
17474 (uri (pypi-uri "readlike" version))
17475 (sha256
17476 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17477 (build-system python-build-system)
17478 (home-page "https://github.com/jangler/readlike")
17479 (synopsis "GNU Readline-like line editing module")
17480 (description
17481 "This Python module provides line editing functions similar to the default
17482 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17483 @code{readline} package, this one allows access to those capabilties in settings
17484 outside of a standard command-line interface. It is especially well-suited to
17485 interfacing with Urwid, due to a shared syntax for describing key inputs.
17486
17487 Currently, all stateless Readline commands are implemented. Yanking and history
17488 are not supported.")
17489 (license license:expat)))
17490
17491 (define-public python2-readlike
17492 (package-with-python2 python-readlike))
17493
17494 (define-public python-reparser
17495 (package
17496 (name "python-reparser")
17497 (version "1.4.3")
17498 (source
17499 (origin
17500 (method url-fetch)
17501 (uri (pypi-uri "ReParser" version))
17502 (sha256
17503 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17504 (build-system python-build-system)
17505 (home-page "https://github.com/xmikos/reparser")
17506 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17507 (description
17508 "This Python library provides a simple lexer/parser for inline markup based
17509 on regular expressions.")
17510 (license license:expat)))
17511
17512 (define-public python2-reparser
17513 (let ((reparser (package-with-python2
17514 (strip-python2-variant python-reparser))))
17515 (package (inherit reparser)
17516 (propagated-inputs
17517 `(("python2-enum34" ,python2-enum34)
17518 ,@(package-propagated-inputs reparser))))))
17519
17520 (define-public python-precis-i18n
17521 (package
17522 (name "python-precis-i18n")
17523 (version "1.0.0")
17524 (source
17525 (origin
17526 (method url-fetch)
17527 (uri (pypi-uri "precis_i18n" version))
17528 (sha256
17529 (base32
17530 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17531 (build-system python-build-system)
17532 (home-page "https://github.com/byllyfish/precis_i18n")
17533 (synopsis "Implementation of the PRECIS framework")
17534 (description
17535 "This module implements the PRECIS Framework as described in RFC 8264,
17536 RFC 8265 and RFC 8266.")
17537 (license license:expat)))
17538
17539 (define-public python-absl-py
17540 (package
17541 (name "python-absl-py")
17542 (version "0.6.1")
17543 (source
17544 (origin
17545 (method url-fetch)
17546 (uri (pypi-uri "absl-py" version))
17547 (sha256
17548 (base32
17549 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17550 (build-system python-build-system)
17551 (propagated-inputs
17552 `(("python-six" ,python-six)))
17553 (home-page "https://github.com/abseil/abseil-py")
17554 (synopsis "Abseil Python common libraries")
17555 (description
17556 "This package provides the Abseil Python Common Libraries, a collection
17557 of Python libraries for building Python applications.")
17558 (license license:asl2.0)))
17559
17560 (define-public python-astor
17561 (package
17562 (name "python-astor")
17563 (version "0.7.1")
17564 (source
17565 (origin
17566 (method url-fetch)
17567 (uri (pypi-uri "astor" version))
17568 (sha256
17569 (base32
17570 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17571 (build-system python-build-system)
17572 ;; FIXME: There are two errors and two test failures.
17573 (arguments `(#:tests? #f))
17574 (home-page "https://github.com/berkerpeksag/astor")
17575 (synopsis "Read and write Python ASTs")
17576 (description "Astor is designed to allow easy manipulation of Python
17577 source via the Abstract Syntax Tree.")
17578 (license license:bsd-3)))
17579
17580 (define-public python2-astor
17581 (package-with-python2 python-astor))
17582
17583 (define-public python-astunparse
17584 (package
17585 (name "python-astunparse")
17586 (version "1.6.2")
17587 (source
17588 (origin
17589 (method url-fetch)
17590 (uri (pypi-uri "astunparse" version))
17591 (sha256
17592 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17593 (build-system python-build-system)
17594 (arguments '(#:tests? #f)) ; there are none
17595 (propagated-inputs
17596 `(("python-six" ,python-six)
17597 ("python-wheel" ,python-wheel)))
17598 (home-page "https://github.com/simonpercivall/astunparse")
17599 (synopsis "AST unparser for Python")
17600 (description "This package provides an AST unparser for Python. It is a
17601 factored out version of @code{unparse} found in the Python source
17602 distribution.")
17603 (license license:bsd-3)))
17604
17605 (define-public python-gast
17606 (package
17607 (name "python-gast")
17608 (version "0.3.3")
17609 (source
17610 (origin
17611 (method url-fetch)
17612 (uri (pypi-uri "gast" version))
17613 (sha256
17614 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17615 (build-system python-build-system)
17616 (propagated-inputs
17617 `(("python-astunparse" ,python-astunparse)))
17618 (home-page "https://pypi.org/project/gast/")
17619 (synopsis "Generic Python AST that abstracts the underlying Python version")
17620 (description
17621 "GAST provides a compatibility layer between the AST of various Python
17622 versions, as produced by @code{ast.parse} from the standard @code{ast}
17623 module.")
17624 (license license:bsd-3)))
17625
17626 (define-public python-wikidata
17627 (package
17628 (name "python-wikidata")
17629 (version "0.6.1")
17630 (source
17631 (origin
17632 (method url-fetch)
17633 (uri (pypi-uri "Wikidata" version))
17634 (sha256
17635 (base32
17636 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17637 (build-system python-build-system)
17638 (propagated-inputs
17639 `(("python-babel" ,python-babel)))
17640 (home-page "https://github.com/dahlia/wikidata")
17641 (synopsis "Wikidata client library")
17642 (description
17643 "This package provides a Python interface to
17644 @url{https://www.wikidata.org/, Wikidata}.")
17645 (properties '((upstream-name . "Wikidata")))
17646 (license license:gpl3+)))
17647
17648 (define-public python-doctest-ignore-unicode
17649 (package
17650 (name "python-doctest-ignore-unicode")
17651 (version "0.1.2")
17652 (source
17653 (origin
17654 (method url-fetch)
17655 (uri (pypi-uri "doctest-ignore-unicode" version))
17656 (sha256
17657 (base32
17658 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17659 (build-system python-build-system)
17660 (native-inputs
17661 `(("python-nose" ,python-nose)))
17662 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17663 (synopsis "Ignore Unicode literal prefixes in doctests")
17664 (description
17665 "This package adds support for a flag to ignore Unicode literal prefixes
17666 in doctests.")
17667 (license license:asl2.0)))
17668
17669 (define-public python-attr
17670 (package
17671 (name "python-attr")
17672 (version "0.3.1")
17673 (source
17674 (origin
17675 (method url-fetch)
17676 (uri (pypi-uri "attr" version))
17677 (sha256
17678 (base32
17679 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17680 (build-system python-build-system)
17681 (home-page "https://github.com/denis-ryzhkov/attr")
17682 (synopsis "Decorator for attributes of target function or class")
17683 (description "Simple decorator to set attributes of target function or
17684 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17685 (license license:expat)))
17686
17687 (define-public python-construct
17688 (package
17689 (name "python-construct")
17690 (version "2.10.56")
17691 (source
17692 (origin
17693 (method url-fetch)
17694 (uri (pypi-uri "construct" version))
17695 (sha256
17696 (base32
17697 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17698 (build-system python-build-system)
17699 (arguments
17700 `(#:tests? #f)) ; No tests exist.
17701 (propagated-inputs
17702 `(("python-extras" ,python-extras)
17703 ("python-arrow" ,python-arrow)
17704 ("python-numpy" ,python-numpy)
17705 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17706 (home-page "https://construct.readthedocs.io")
17707 (synopsis "Declarative and symmetrical parser and builder for binary data")
17708 (description
17709 "This package provides both simple, atomic constructs (such as
17710 integers of various sizes), as well as composite ones which allow you
17711 form hierarchical and sequential structures of increasing complexity.
17712 It features bit and byte granularity, easy debugging and testing, an
17713 easy-to-extend subclass system, and lots of primitive constructs to
17714 make your work easier.")
17715 (license license:expat)))
17716
17717 (define-public python-humanize
17718 (package
17719 (name "python-humanize")
17720 (version "0.5.1")
17721 (source
17722 (origin
17723 (method url-fetch)
17724 (uri (pypi-uri "humanize" version))
17725 (sha256
17726 (base32
17727 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17728 (arguments
17729 '(#:tests? #f)) ; tests not in pypi archive
17730 (build-system python-build-system)
17731 (home-page "https://github.com/jmoiron/humanize")
17732 (synopsis "Print numerical information in a human-readable form")
17733 (description "This package provides a Python module that displays numbers
17734 and dates in \"human readable\" forms. For example, it would display
17735 \"12345591313\" as \"12.3 billion\".")
17736 (license license:expat)))
17737
17738 (define-public python-txaio
17739 (package
17740 (name "python-txaio")
17741 (version "18.8.1")
17742 (source
17743 (origin
17744 (method url-fetch)
17745 (uri (pypi-uri "txaio" version))
17746 (sha256
17747 (base32
17748 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17749 (build-system python-build-system)
17750 (propagated-inputs
17751 `(("python-twisted" ,python-twisted)
17752 ("python-six" ,python-six)))
17753 (home-page "https://github.com/crossbario/txaio")
17754 (synopsis "Compatibility layer between Python asyncio and Twisted")
17755 (description "Txaio provides a compatibility layer between the Python
17756 @code{asyncio} module and @code{Twisted}.")
17757 (license license:expat)))
17758
17759 (define-public python-toolshed
17760 (package
17761 (name "python-toolshed")
17762 (version "0.4.6")
17763 (source
17764 (origin
17765 (method url-fetch)
17766 (uri (pypi-uri "toolshed" version))
17767 (sha256
17768 (base32
17769 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
17770 (build-system python-build-system)
17771 (native-inputs
17772 `(("python-nose" ,python-nose)))
17773 (home-page "https://github.com/brentp/toolshed/")
17774 (synopsis "Collection of modules and functions for working with data")
17775 (description "This is a collection of well-tested, simple modules and
17776 functions that aim to reduce boilerplate when working with data.")
17777 (license license:bsd-2)))
17778
17779 (define-public python-annoy
17780 (package
17781 (name "python-annoy")
17782 (version "1.15.1")
17783 (source
17784 (origin
17785 (method url-fetch)
17786 (uri (pypi-uri "annoy" version))
17787 (sha256
17788 (base32
17789 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
17790 (build-system python-build-system)
17791 (native-inputs
17792 `(("python-nose" ,python-nose)))
17793 (home-page "https://github.com/spotify/annoy/")
17794 (synopsis "Approximate nearest neighbors library")
17795 (description
17796 "Annoy is a C++ library with Python bindings to search for points in
17797 space that are close to a given query point. It also creates large read-only
17798 file-based data structures that are @code{mmap}ped into memory so that many
17799 processes may share the same data.")
17800 (license license:asl2.0)))
17801
17802 (define-public python-pylzma
17803 (package
17804 (name "python-pylzma")
17805 (version "0.5.0")
17806 (source
17807 (origin
17808 (method url-fetch)
17809 (uri (pypi-uri "pylzma" version))
17810 (sha256
17811 (base32
17812 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
17813 (build-system python-build-system)
17814 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
17815 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
17816 (description "This package provides Python bindings for the LZMA library
17817 by Igor Pavlov.")
17818 (license license:lgpl2.1+)))
17819
17820 (define-public python2-pylzma
17821 (package-with-python2 python-pylzma))
17822
17823 (define-public python2-zeroconf
17824 (package
17825 (name "python2-zeroconf")
17826
17827 ;; This is the last version that supports Python 2.x.
17828 (version "0.19.1")
17829 (source
17830 (origin
17831 (method url-fetch)
17832 (uri (pypi-uri "zeroconf" version))
17833 (sha256
17834 (base32
17835 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
17836 (build-system python-build-system)
17837 (arguments
17838 `(#:python ,python-2
17839 #:phases
17840 (modify-phases %standard-phases
17841 (add-after 'unpack 'patch-requires
17842 (lambda* (#:key inputs #:allow-other-keys)
17843 (substitute* "setup.py"
17844 (("enum-compat")
17845 "enum34"))
17846 #t)))))
17847 (native-inputs
17848 `(("python2-six" ,python2-six)
17849 ("python2-enum32" ,python2-enum34)
17850 ("python2-netifaces" ,python2-netifaces)
17851 ("python2-typing" ,python2-typing)))
17852 (home-page "https://github.com/jstasiak/python-zeroconf")
17853 (synopsis "Pure Python mDNS service discovery")
17854 (description
17855 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
17856 compatible).")
17857 (license license:lgpl2.1+)))
17858
17859 (define-public python-bsddb3
17860 (package
17861 (name "python-bsddb3")
17862 (version "6.2.6")
17863 (source
17864 (origin
17865 (method url-fetch)
17866 (uri (pypi-uri "bsddb3" version))
17867 (sha256
17868 (base32
17869 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
17870 (build-system python-build-system)
17871 (inputs
17872 `(("bdb" ,bdb)))
17873 (arguments
17874 '(#:phases
17875 (modify-phases %standard-phases
17876 (add-after 'unpack 'configure-locations
17877 (lambda* (#:key inputs #:allow-other-keys)
17878 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
17879 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
17880 #t))
17881 (replace 'check
17882 (lambda _
17883 (invoke "python3" "test3.py" "-v"))))))
17884 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
17885 (synopsis "Python bindings for Oracle Berkeley DB")
17886 (description
17887 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
17888 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
17889 Transaction objects, and each of these is exposed as a Python type in the
17890 bsddb3.db module. The database objects can use various access methods: btree,
17891 hash, recno, and queue. Complete support of Berkeley DB distributed
17892 transactions. Complete support for Berkeley DB Replication Manager.
17893 Complete support for Berkeley DB Base Replication. Support for RPC.")
17894 (license license:bsd-3)))
17895
17896 (define-public python-dbfread
17897 (package
17898 (name "python-dbfread")
17899 (version "2.0.7")
17900 (source (origin
17901 (method url-fetch)
17902 (uri (pypi-uri "dbfread" version))
17903 (sha256
17904 (base32
17905 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
17906 (build-system python-build-system)
17907 (native-inputs
17908 `(("python-pytest" ,python-pytest)))
17909 (home-page "https://dbfread.readthedocs.io")
17910 (synopsis "Read DBF Files with Python")
17911 (description
17912 "This library reads DBF files and returns the data as native Python data
17913 types for further processing. It is primarily intended for batch jobs and
17914 one-off scripts.")
17915 (license license:expat)))
17916
17917 (define-public python-cached-property
17918 (package
17919 (name "python-cached-property")
17920 (version "1.5.1")
17921 (source
17922 (origin
17923 (method url-fetch)
17924 (uri (pypi-uri "cached-property" version))
17925 (sha256
17926 (base32
17927 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
17928 (build-system python-build-system)
17929 (arguments
17930 `(#:phases
17931 (modify-phases %standard-phases
17932 ;; https://github.com/pydanny/cached-property/issues/131
17933 ;; recent versions of freezegun break one test
17934 (add-after 'unpack 'disable-broken-test
17935 (lambda _
17936 (substitute* "tests/test_cached_property.py"
17937 (("def test_threads_ttl_expiry\\(self\\)" m)
17938 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
17939 " " m)))
17940 #t)))))
17941 (native-inputs
17942 `(("python-freezegun" ,python-freezegun)))
17943 (home-page
17944 "https://github.com/pydanny/cached-property")
17945 (synopsis
17946 "Decorator for caching properties in classes")
17947 (description
17948 "This package provides a decorator which makes caching
17949 time-or-computationally-expensive properties quick and easy and works in Python
17950 2 or 3.")
17951 (license license:bsd-3)))
17952
17953 (define-public python-folium
17954 (package
17955 (name "python-folium")
17956 (version "0.10.1")
17957 (source
17958 (origin
17959 (method url-fetch)
17960 (uri (pypi-uri "folium" version))
17961 (sha256
17962 (base32
17963 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
17964 (build-system python-build-system)
17965 (propagated-inputs
17966 `(("python-branca" ,python-branca)
17967 ("python-jinja2" ,python-jinja2)
17968 ("python-numpy" ,python-numpy)
17969 ("python-requests" ,python-requests)))
17970 (native-inputs
17971 `(("python-pytest" ,python-pytest)))
17972 (home-page "https://github.com/python-visualization/folium")
17973 (synopsis "Make beautiful maps with Leaflet.js & Python")
17974 (description "@code{folium} makes it easy to visualize data that’s been
17975 manipulated in Python on an interactive leaflet map. It enables both the
17976 binding of data to a map for @code{choropleth} visualizations as well as
17977 passing rich vector/raster/HTML visualizations as markers on the map.
17978
17979 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
17980 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
17981 supports Image, Video, GeoJSON and TopoJSON overlays.")
17982 (license license:expat)))
17983
17984 (define-public jube
17985 (package
17986 ;; This is a command-line tool, so no "python-" prefix.
17987 (name "jube")
17988 (version "2.2.2")
17989 (source (origin
17990 (method url-fetch)
17991 (uri (string-append
17992 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
17993 version))
17994 (sha256
17995 (base32
17996 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
17997 (file-name (string-append "jube-" version ".tar.gz"))))
17998 (build-system python-build-system)
17999 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18000 (synopsis "Benchmarking environment")
18001 (description
18002 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18003 benchmarked application, benchmark data is stored in a format that allows JUBE
18004 to deduct the desired information. This data can be parsed by automatic pre-
18005 and post-processing scripts that draw information and store it more densely
18006 for manual interpretation.")
18007 (license license:gpl3+)))
18008
18009 (define-public python-pyroutelib3
18010 (package
18011 (name "python-pyroutelib3")
18012 (version "1.3.post1")
18013 (source
18014 (origin
18015 (method url-fetch)
18016 (uri (pypi-uri "pyroutelib3" version))
18017 (sha256
18018 (base32
18019 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18020 (build-system python-build-system)
18021 (propagated-inputs
18022 `(("python-dateutil" ,python-dateutil)))
18023 (home-page "https://github.com/MKuranowski/pyroutelib3")
18024 (synopsis "Library for simple routing on OSM data")
18025 (description "Library for simple routing on OSM data")
18026 (license license:gpl3+)))
18027
18028 (define-public python-bibtexparser
18029 (package
18030 (name "python-bibtexparser")
18031 (version "1.1.0")
18032 (source
18033 (origin
18034 (method url-fetch)
18035 (uri (pypi-uri "bibtexparser" version))
18036 (sha256
18037 (base32
18038 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18039 (build-system python-build-system)
18040 (propagated-inputs
18041 `(("python-pyparsing" ,python-pyparsing)))
18042 (native-inputs
18043 `(("python-future" ,python-future)))
18044 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18045 (synopsis "Python library to parse BibTeX files")
18046 (description "BibtexParser is a Python library to parse BibTeX files.")
18047 (license (list license:bsd-3 license:lgpl3))))
18048
18049 (define-public python-distro
18050 (package
18051 (name "python-distro")
18052 (version "1.4.0")
18053 (source
18054 (origin
18055 (method url-fetch)
18056 (uri (pypi-uri "distro" version))
18057 (sha256
18058 (base32
18059 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18060 (build-system python-build-system)
18061 (native-inputs
18062 `(("python-pytest" ,python-pytest)))
18063 (home-page "https://github.com/nir0s/distro")
18064 (synopsis
18065 "OS platform information API")
18066 (description
18067 "@code{distro} provides information about the OS distribution it runs on,
18068 such as a reliable machine-readable ID, or version information.
18069
18070 It is the recommended replacement for Python's original
18071 `platform.linux_distribution` function (which will be removed in Python 3.8).
18072 @code{distro} also provides a command-line interface to output the platform
18073 information in various formats.")
18074 (license license:asl2.0)))
18075
18076 (define-public python-cairosvg
18077 (package
18078 (name "python-cairosvg")
18079 (version "2.4.2")
18080 (source
18081 (origin
18082 (method url-fetch)
18083 (uri (pypi-uri "CairoSVG" version))
18084 (sha256
18085 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18086 (build-system python-build-system)
18087 (arguments
18088 `(#:phases
18089 (modify-phases %standard-phases
18090 (replace 'check
18091 (lambda _ (invoke "pytest"))))))
18092 (propagated-inputs
18093 `(("python-cairocffi" ,python-cairocffi)
18094 ("python-cssselect2" ,python-cssselect2)
18095 ("python-defusedxml" ,python-defusedxml)
18096 ("python-pillow" ,python-pillow)
18097 ("python-tinycss2" ,python-tinycss2)))
18098 (native-inputs
18099 `(("python-pytest-flake8" ,python-pytest-flake8)
18100 ("python-pytest-isort" ,python-pytest-isort)
18101 ("python-pytest-runner" ,python-pytest-runner)))
18102 (home-page "https://cairosvg.org/")
18103 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18104 (description "CairoSVG is a SVG converter based on Cairo. It can export
18105 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18106 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18107 parsed, the result is drawn to a Cairo surface that can be exported to
18108 qvarious formats: PDF, PostScript, PNG and even SVG.")
18109 (license license:lgpl3+)))
18110
18111 (define-public python-pyphen
18112 (package
18113 (name "python-pyphen")
18114 (version "0.9.5")
18115 (source
18116 (origin
18117 (method url-fetch)
18118 (uri (pypi-uri "Pyphen" version))
18119 (sha256
18120 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18121 (build-system python-build-system)
18122 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18123 ;; embedded set provided by upstream - like Debian does.
18124 (home-page "https://github.com/Kozea/Pyphen")
18125 (synopsis "Pure Python module to hyphenate text")
18126 (description "Pyphen is a pure Python module to hyphenate text using
18127 existing Hunspell hyphenation dictionaries.")
18128 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18129
18130 (define-public python-intelhex
18131 (package
18132 (name "python-intelhex")
18133 (version "2.2.1")
18134 (source
18135 (origin
18136 (method url-fetch)
18137 (uri (pypi-uri "intelhex" version))
18138 (sha256
18139 (base32
18140 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18141 (build-system python-build-system)
18142 (arguments '(#:tests? #f)) ;issue with version
18143 (home-page "https://pypi.org/project/IntelHex/")
18144 (synopsis "Python library for Intel HEX files manipulations")
18145 (description "The Intel HEX file format is widely used in microprocessors
18146 and microcontrollers area (embedded systems etc.) as the de facto standard for
18147 representation of code to be programmed into microelectronic devices. This
18148 package provides an intelhex Python library to read, write, create from
18149 scratch and manipulate data from Intel HEX file format. It also includes
18150 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18151 converters and more, those based on the library itself.")
18152 (license license:bsd-3)))
18153
18154 (define-public python-pykwalify
18155 (package
18156 (name "python-pykwalify")
18157 (version "1.7.0")
18158 (source
18159 (origin
18160 (method url-fetch)
18161 (uri (pypi-uri "pykwalify" version))
18162 (sha256
18163 (base32
18164 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18165 (build-system python-build-system)
18166 (arguments '(#:tests? #f)) ;missing dependencies
18167 (propagated-inputs
18168 `(("python-dateutil" ,python-dateutil)
18169 ("python-docopt" ,python-docopt)
18170 ("python-pyyaml" ,python-pyyaml)))
18171 (home-page "https://github.com/grokzen/pykwalify")
18172 (synopsis
18173 "Python lib/cli for JSON/YAML schema validation")
18174 (description
18175 "This package provides a parser, schema validator, and data binding tool
18176 for YAML and JSON.")
18177 (license license:expat)))
18178
18179 (define-public python-dbusmock
18180 (package
18181 (name "python-dbusmock")
18182 (version "0.18.3")
18183 (source
18184 (origin
18185 (method url-fetch)
18186 (uri (pypi-uri "python-dbusmock" version))
18187 (sha256
18188 (base32
18189 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18190 (build-system python-build-system)
18191 (arguments
18192 '(#:phases
18193 (modify-phases %standard-phases
18194 (add-after 'unpack 'patch-shell-path
18195 (lambda _
18196 (substitute* "tests/test_code.py"
18197 (("/bin/bash") (which "bash")))
18198 #t)))))
18199 (native-inputs
18200 `(;; For tests.
18201 ("dbus" ,dbus) ; for dbus-daemon
18202 ("python-nose" ,python-nose)
18203 ("which" ,which)))
18204 (propagated-inputs
18205 `(("python-dbus" ,python-dbus)
18206 ("python-pygobject" ,python-pygobject)))
18207 (home-page "https://github.com/martinpitt/python-dbusmock")
18208 (synopsis "Python library for mock D-Bus objects")
18209 (description "python-dbusmock allows for the easy creation of mock objects on
18210 D-Bus. This is useful for writing tests for software which talks to D-Bus
18211 services such as upower, systemd, logind, gnome-session or others, and it is
18212 hard (or impossible without root privileges) to set the state of the real
18213 services to what you expect in your tests.")
18214 (license license:lgpl3+)))
18215
18216 (define-public python-ujson
18217 (package
18218 (name "python-ujson")
18219 (version "1.35")
18220 (source
18221 (origin
18222 (method url-fetch)
18223 (uri (pypi-uri "ujson" version))
18224 (sha256
18225 (base32
18226 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18227 (build-system python-build-system)
18228 (home-page "http://www.esn.me")
18229 (synopsis
18230 "Ultra fast JSON encoder and decoder for Python")
18231 (description
18232 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18233 bindings for Python 2.5+ and 3.")
18234 (license license:bsd-3)))
18235
18236 (define-public python2-ujson
18237 (package-with-python2 python-ujson))
18238
18239 (define-public python-iocapture
18240 ;; The latest release is more than a year older than this commit.
18241 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18242 (revision "1"))
18243 (package
18244 (name "python-iocapture")
18245 (version "0.1.2")
18246 (source
18247 (origin
18248 (method git-fetch)
18249 (uri (git-reference
18250 (url "https://github.com/oinume/iocapture.git")
18251 (commit commit)))
18252 (file-name (git-file-name name version))
18253 (sha256
18254 (base32
18255 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18256 (build-system python-build-system)
18257 (arguments
18258 `(#:phases
18259 (modify-phases %standard-phases
18260 (delete 'check)
18261 (add-after 'install 'check
18262 (lambda* (#:key inputs outputs #:allow-other-keys)
18263 (add-installed-pythonpath inputs outputs)
18264 (invoke "py.test" "-v" "tests")
18265 #t)))))
18266 (propagated-inputs
18267 `(("python-flexmock" ,python-flexmock)
18268 ("python-pytest" ,python-pytest)
18269 ("python-pytest-cov" ,python-pytest-cov)
18270 ("python-six" ,python-six)))
18271 (home-page "https://github.com/oinume/iocapture")
18272 (synopsis "Python capturing tool for stdout and stderr")
18273 (description
18274 "This package helps you to capture the standard out (stdout) and the
18275 standard error channel (stderr) in your program.")
18276 (license license:expat))))
18277
18278 (define-public python-argh
18279 ;; There are 21 commits since the latest release containing important
18280 ;; improvements.
18281 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18282 (revision "1"))
18283 (package
18284 (name "python-argh")
18285 (version (git-version "0.26.2" revision commit))
18286 (source
18287 (origin
18288 (method git-fetch)
18289 (uri (git-reference
18290 (url "https://github.com/neithere/argh.git")
18291 (commit commit)))
18292 (file-name (git-file-name name version))
18293 (sha256
18294 (base32
18295 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18296 (build-system python-build-system)
18297 (propagated-inputs
18298 `(("python-iocapture" ,python-iocapture)
18299 ("python-mock" ,python-mock)
18300 ("python-pytest" ,python-pytest)
18301 ("python-pytest-cov" ,python-pytest-cov)
18302 ("python-pytest-xdist" ,python-pytest-xdist)
18303 ("python-tox" ,python-tox)))
18304 (home-page "https://github.com/neithere/argh/")
18305 (synopsis "Argparse wrapper with natural syntax")
18306 (description
18307 "python-argh is a small library that provides several layers of
18308 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18309 always possible to declare a command with the highest possible (and least
18310 flexible) layer and then tune the behaviour with any of the lower layers
18311 including the native API of @code{python-argparse}.")
18312 (license license:lgpl3+))))
18313
18314 (define-public python-ppft
18315 (package
18316 (name "python-ppft")
18317 (version "1.6.6.1")
18318 (source
18319 (origin
18320 (method url-fetch)
18321 (uri (pypi-uri "ppft" version))
18322 (sha256
18323 (base32
18324 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18325 (build-system python-build-system)
18326 (arguments '(#:tests? #f)) ; there are none
18327 (propagated-inputs
18328 `(("python-six" ,python-six)))
18329 (home-page "https://pypi.org/project/ppft/")
18330 (synopsis "Fork of Parallel Python")
18331 (description
18332 "This package is a fork of Parallel Python. The Parallel Python
18333 module (@code{pp}) provides an easy and efficient way to create
18334 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18335 computers and clusters. It features cross-platform portability and dynamic
18336 load balancing.")
18337 (license license:bsd-3)))
18338
18339 (define-public python-pox
18340 (package
18341 (name "python-pox")
18342 (version "0.2.7")
18343 (source
18344 (origin
18345 (method url-fetch)
18346 (uri (pypi-uri "pox" version))
18347 (sha256
18348 (base32
18349 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18350 (build-system python-build-system)
18351 (arguments
18352 `(#:phases
18353 (modify-phases %standard-phases
18354 (replace 'check
18355 (lambda _
18356 (mkdir-p "/tmp/guix")
18357 (setenv "SHELL" "bash")
18358 (setenv "USERNAME" "guix")
18359 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18360 (invoke "py.test" "-vv")
18361 #t)))))
18362 (native-inputs
18363 `(("python-pytest" ,python-pytest)
18364 ("which" ,which)))
18365 (home-page "https://pypi.org/project/pox/")
18366 (synopsis "Python utilities for filesystem exploration and automated builds")
18367 (description
18368 "Pox provides a collection of utilities for navigating and manipulating
18369 filesystems. This module is designed to facilitate some of the low level
18370 operating system interactions that are useful when exploring a filesystem on a
18371 remote host. Pox provides Python equivalents of several shell commands such
18372 as @command{which} and @command{find}. These commands allow automated
18373 discovery of what has been installed on an operating system, and where the
18374 essential tools are located.")
18375 (license license:bsd-3)))
18376
18377 (define-public python-pathos
18378 (package
18379 (name "python-pathos")
18380 (version "0.2.5")
18381 (source
18382 (origin
18383 (method url-fetch)
18384 (uri (pypi-uri "pathos" version))
18385 (sha256
18386 (base32
18387 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18388 (build-system python-build-system)
18389 (arguments
18390 '(#:phases
18391 (modify-phases %standard-phases
18392 (replace 'check
18393 (lambda _
18394 (setenv "PYTHONPATH"
18395 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18396 (invoke "python" "./tests/__main__.py"))))))
18397 (propagated-inputs
18398 `(("python-dill" ,python-dill)
18399 ("python-multiprocess" ,python-multiprocess)
18400 ("python-pox" ,python-pox)
18401 ("python-ppft" ,python-ppft)))
18402 (native-inputs
18403 `(("python-pytest" ,python-pytest)))
18404 (home-page "https://pypi.org/project/pathos/")
18405 (synopsis
18406 "Parallel graph management and execution in heterogeneous computing")
18407 (description
18408 "Python-pathos is a framework for heterogenous computing. It provides a
18409 consistent high-level interface for configuring and launching parallel
18410 computations across heterogenous resources. Python-pathos provides configurable
18411 launchers for parallel and distributed computing, where each launcher contains
18412 the syntactic logic to configure and launch jobs in an execution environment.")
18413 (license license:bsd-3)))
18414
18415 (define-public python-flit
18416 (package
18417 (name "python-flit")
18418 (version "2.1.0")
18419 (source
18420 (origin
18421 (method url-fetch)
18422 (uri (pypi-uri "flit" version))
18423 (sha256
18424 (base32
18425 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18426 (build-system python-build-system)
18427 (arguments
18428 `(#:tests? #f)) ; XXX: Check requires network access.
18429 (home-page "https://flit.readthedocs.io/")
18430 (synopsis
18431 "Simple packaging tool for simple packages")
18432 (description
18433 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18434 packages a single importable module or package at a time, using the import
18435 name as the name on PyPI. All subpackages and data files within a package
18436 are included automatically.")
18437 (license license:bsd-3)))
18438
18439 (define-public python-pathtools
18440 (package
18441 (name "python-pathtools")
18442 (version "0.1.2")
18443 (source
18444 (origin
18445 (method url-fetch)
18446 (uri (pypi-uri "pathtools" version))
18447 (sha256
18448 (base32
18449 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18450 (build-system python-build-system)
18451 (home-page
18452 "https://github.com/gorakhargosh/pathtools")
18453 (synopsis "Path utilities for Python")
18454 (description "Pattern matching and various utilities for file systems
18455 paths.")
18456 (license license:expat)))
18457
18458 (define-public python-fastentrypoints
18459 (package
18460 (name "python-fastentrypoints")
18461 (version "0.12")
18462 (source
18463 (origin
18464 (method url-fetch)
18465 (uri (pypi-uri "fastentrypoints" version))
18466 (sha256
18467 (base32
18468 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18469 (build-system python-build-system)
18470 (home-page
18471 "https://github.com/ninjaaron/fast-entry_points")
18472 (synopsis
18473 "Makes entry_points specified in setup.py load more quickly")
18474 (description
18475 "Using entry_points in your setup.py makes scripts that start really
18476 slowly because it imports pkg_resources. This package allows such setup
18477 scripts to load entry points more quickly.")
18478 (license license:bsd-3)))
18479
18480 (define-public python-funcparserlib
18481 (package
18482 (name "python-funcparserlib")
18483 (version "0.3.6")
18484 (source
18485 (origin
18486 (method url-fetch)
18487 (uri (pypi-uri "funcparserlib" version))
18488 (sha256
18489 (base32
18490 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18491 (native-inputs
18492 `(("python-tox" ,python-tox)))
18493 (arguments
18494 `(#:phases
18495 (modify-phases %standard-phases
18496 (replace 'check
18497 (lambda _
18498 (invoke "tox"))))))
18499 (build-system python-build-system)
18500 (home-page
18501 "https://github.com/vlasovskikh/funcparserlib")
18502 (synopsis
18503 "Recursive descent parsing library based on functional combinators")
18504 (description
18505 "This package is a recursive descent parsing library for Python based on
18506 functional combinators. Parser combinators are just higher-order functions
18507 that take parsers as their arguments and return them as result values.")
18508 (license license:expat)))
18509
18510 (define-public python-speg
18511 (package
18512 (name "python-speg")
18513 (version "0.3")
18514 (source
18515 (origin
18516 (method url-fetch)
18517 (uri (pypi-uri "speg" version ".zip"))
18518 (sha256
18519 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18520 (arguments
18521 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18522 (native-inputs
18523 `(("unzip" ,unzip)))
18524 (build-system python-build-system)
18525 (home-page "https://github.com/avakar/speg")
18526 (synopsis "PEG-based parser interpreter with memoization")
18527 (description "This package is a PEG-based parser and interpreter with
18528 memoization.")
18529 (license license:expat)))
18530
18531 (define-public python-cson
18532 (package
18533 (name "python-cson")
18534 (version "0.8")
18535 (source
18536 (origin
18537 (method url-fetch)
18538 (uri (pypi-uri "cson" version))
18539 (sha256
18540 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18541 (build-system python-build-system)
18542 (propagated-inputs
18543 `(("python-speg" ,python-speg)))
18544 (home-page "https://github.com/avakar/pycson")
18545 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18546 (description "This package is a parser for Coffeescript Object
18547 Notation (CSON).")
18548 (license license:expat)))
18549
18550 (define-public python-asynctest
18551 (package
18552 (name "python-asynctest")
18553 (version "0.13.0")
18554 (source
18555 (origin
18556 (method url-fetch)
18557 (uri (pypi-uri "asynctest" version))
18558 (sha256
18559 (base32
18560 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18561 (build-system python-build-system)
18562 (arguments
18563 '(#:phases
18564 (modify-phases %standard-phases
18565 (replace 'check
18566 (lambda _
18567 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18568 (add-after 'unpack 'disable-tests
18569 (lambda* _
18570 (substitute* "test/test_selector.py"
18571 ;; XXX: This test fails for unknown reason inside the build
18572 ;; environment.
18573 (("def test_events_watched_outside_test_are_ignored")
18574 "@unittest.skip('disabled by guix')
18575 def test_events_watched_outside_test_are_ignored")))))))
18576 (home-page "https://github.com/Martiusweb/asynctest")
18577 (synopsis "Extension of unittest for testing asyncio libraries")
18578 (description
18579 "The package asynctest is built on top of the standard unittest module
18580 and cuts down boilerplate code when testing libraries for asyncio.")
18581 (license license:asl2.0)))
18582
18583 (define-public python-aionotify
18584 (package
18585 (name "python-aionotify")
18586 (version "0.2.0")
18587 (source
18588 (origin
18589 ;; Source tarball on PyPi lacks tests
18590 (method git-fetch)
18591 (uri (git-reference
18592 (url "https://github.com/rbarrois/aionotify")
18593 (commit (string-append "v" version))))
18594 (file-name (git-file-name name version))
18595 (sha256
18596 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18597 (build-system python-build-system)
18598 (native-inputs `(("python-asynctest" ,python-asynctest)))
18599 (home-page "https://github.com/rbarrois/aionotify")
18600 (synopsis "Asyncio-powered inotify library")
18601 (description
18602 "@code{aionotify} is a simple, asyncio-based inotify library.")
18603 (license license:bsd-3)))
18604
18605 (define-public python-forbiddenfruit
18606 (package
18607 (name "python-forbiddenfruit")
18608 (version "0.1.3")
18609 (source
18610 (origin
18611 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18612 (method git-fetch)
18613 (uri (git-reference
18614 (url "https://github.com/clarete/forbiddenfruit")
18615 (commit version)))
18616 (file-name (git-file-name name version))
18617 (sha256
18618 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18619 (build-system python-build-system)
18620 (arguments
18621 '(#:phases
18622 (modify-phases %standard-phases
18623 (replace 'check
18624 (lambda _
18625 (invoke "make" "SKIP_DEPS=1"))))))
18626 (native-inputs
18627 `(("python-nose" ,python-nose)
18628 ("python-coverage" ,python-coverage)))
18629 (home-page "https://github.com/clarete/forbiddenfruit")
18630 (synopsis "Patch python built-in objects")
18631 (description "This project allows Python code to extend built-in types.")
18632 (license (list license:gpl3+ license:expat))))
18633
18634 (define-public python-shouldbe
18635 (package
18636 (name "python-shouldbe")
18637 (version "0.1.2")
18638 (source
18639 (origin
18640 (method url-fetch)
18641 (uri (pypi-uri "shouldbe" version))
18642 (sha256
18643 (base32
18644 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))))
18645 (build-system python-build-system)
18646 (propagated-inputs
18647 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18648 (native-inputs
18649 `(("python-nose" ,python-nose)))
18650 (home-page "https://github.com/directxman12/should_be")
18651 (synopsis "Python Assertion Helpers inspired by Shouldly")
18652 (description
18653 "Python Assertion Helpers inspired by Shouldly.")
18654 (license license:isc)))
18655
18656 (define-public python-k5test
18657 (package
18658 (name "python-k5test")
18659 (version "0.9.2")
18660 (source
18661 (origin
18662 (method url-fetch)
18663 (uri (pypi-uri "k5test" version))
18664 (sha256
18665 (base32
18666 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18667 (build-system python-build-system)
18668 (propagated-inputs
18669 `(("python-six" ,python-six)
18670 ;; `which`, `kadmin.local` binaries called inside library
18671 ("which" ,which)
18672 ("mit-krb5" ,mit-krb5)))
18673 (native-inputs `(("mit-krb5" ,mit-krb5)))
18674 (arguments
18675 '(#:phases
18676 (modify-phases %standard-phases
18677 (add-after 'unpack 'patch-paths
18678 (lambda* _
18679 (substitute* "k5test/realm.py"
18680 (("'kadmin_local'") "'kadmin.local'")))))))
18681 (home-page "https://github.com/pythongssapi/k5test")
18682 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18683 (description
18684 "@code{k5test} is a library for setting up self-contained Kerberos 5
18685 environments, and running Python unit tests inside those environments. It is
18686 based on the file of the same name found alongside the MIT Kerberos 5 unit
18687 tests.")
18688 (license license:isc)))
18689
18690 (define-public python-gssapi
18691 (package
18692 (name "python-gssapi")
18693 (version "1.6.5")
18694 (source
18695 (origin
18696 (method url-fetch)
18697 (uri (pypi-uri "gssapi" version))
18698 (sha256
18699 (base32
18700 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
18701 (build-system python-build-system)
18702 (propagated-inputs
18703 `(("python-decorator" ,python-decorator)
18704 ("python-six" ,python-six)))
18705 (inputs
18706 `(("mit-krb5" ,mit-krb5)))
18707 ;; for tests
18708 (native-inputs
18709 `(("python-shouldbe" ,python-shouldbe)
18710 ("python-parameterized" ,python-parameterized)
18711 ("python-k5test" ,python-k5test)
18712 ("python-nose" ,python-nose)))
18713 (home-page "https://github.com/pythongssapi/python-gssapi")
18714 (synopsis "Python GSSAPI Wrapper")
18715 (description
18716 "Python-GSSAPI provides both low-level and high level wrappers around the
18717 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
18718 also be useable with other GSSAPI mechanisms.")
18719 (license license:isc)))
18720
18721 (define-public python-check-manifest
18722 (package
18723 (name "python-check-manifest")
18724 (version "0.37")
18725 (source
18726 (origin
18727 (method url-fetch)
18728 (uri (pypi-uri "check-manifest" version))
18729 (sha256
18730 (base32
18731 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
18732 (build-system python-build-system)
18733 (native-inputs
18734 `(("python-mock" ,python-mock)
18735 ("git" ,git)))
18736 (home-page "https://github.com/mgedmin/check-manifest")
18737 (synopsis "Check MANIFEST.in in a Python source package for completeness")
18738 (description "Python package can include a MANIFEST.in file to help with
18739 sending package files to the Python Package Index. This package checks that
18740 file to ensure it completely and accurately describes your project.")
18741 (license license:expat)))
18742
18743 (define-public python-android-stringslib
18744 (package
18745 (name "python-android-stringslib")
18746 (version "0.1.2")
18747 (source
18748 (origin
18749 (method git-fetch)
18750 (uri (git-reference
18751 (url "https://framagit.org/tyreunom/python-android-strings-lib")
18752 (commit (string-append "v" version))))
18753 (file-name (git-file-name name version))
18754 (sha256
18755 (base32
18756 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
18757 (build-system python-build-system)
18758 (arguments
18759 `(#:tests? #f))
18760 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
18761 (synopsis "Android strings.xml support")
18762 (description "Android Strings Lib provides support for android's strings.xml
18763 files. These files are used to translate strings in android apps.")
18764 (license license:expat)))
18765
18766 (define-public python-watchdog
18767 (package
18768 (name "python-watchdog")
18769 (version "0.9.0")
18770 (source
18771 (origin
18772 (method url-fetch)
18773 (uri (pypi-uri "watchdog" version))
18774 (sha256
18775 (base32
18776 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
18777 (build-system python-build-system)
18778 (arguments
18779 `(#:phases
18780 (modify-phases %standard-phases
18781 (add-before 'check 'remove-failing
18782 (lambda _
18783 (delete-file "tests/test_inotify_buffer.py")
18784 (delete-file "tests/test_snapshot_diff.py")
18785 #t)))))
18786 (propagated-inputs
18787 `(("python-argh" ,python-argh)
18788 ("python-pathtools" ,python-pathtools)
18789 ("python-pyyaml" ,python-pyyaml)))
18790 (native-inputs
18791 `(("python-pytest-cov" ,python-pytest-cov)
18792 ("python-pytest-timeout" ,python-pytest-timeout)))
18793 (home-page "https://github.com/gorakhargosh/watchdog")
18794 (synopsis "Filesystem events monitoring")
18795 (description "This package provides a way to monitor filesystem events
18796 such as a file modification and trigger an action. This is similar to inotify,
18797 but portable.")
18798 (license license:asl2.0)))
18799
18800 (define-public python-wget
18801 (package
18802 (name "python-wget")
18803 (version "3.2")
18804 (source
18805 (origin
18806 (method url-fetch)
18807 (uri (pypi-uri "wget" version ".zip"))
18808 (sha256
18809 (base32
18810 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
18811 (build-system python-build-system)
18812 (native-inputs `(("unzip" ,unzip)))
18813 (home-page "https://bitbucket.org/techtonik/python-wget/")
18814 (synopsis "Pure Python download utility")
18815 (description "The python-wget library provides an API to download files
18816 with features similar to the @command{wget} utility.")
18817 (license license:unlicense)))
18818
18819 (define-public offlate
18820 (package
18821 (name "offlate")
18822 (version "0.5")
18823 (source
18824 (origin
18825 (method git-fetch)
18826 (uri (git-reference
18827 (url "https://framagit.org/tyreunom/offlate")
18828 (commit version)))
18829 (file-name (git-file-name name version))
18830 (sha256
18831 (base32
18832 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
18833 (build-system python-build-system)
18834 (arguments
18835 ;; No tests
18836 `(#:tests? #f))
18837 (propagated-inputs
18838 `(("python-android-stringslib" ,python-android-stringslib)
18839 ("python-dateutil" ,python-dateutil)
18840 ("python-gitlab" ,python-gitlab)
18841 ("python-lxml" ,python-lxml)
18842 ("python-polib" ,python-polib)
18843 ("python-pyenchant" ,python-pyenchant)
18844 ("python-pygit2" ,python-pygit2)
18845 ("python-pygithub" ,python-pygithub)
18846 ("python-pyqt" ,python-pyqt)
18847 ("python-requests" ,python-requests)
18848 ("python-ruamel.yaml" ,python-ruamel.yaml)
18849 ("python-translation-finder" ,python-translation-finder)
18850 ("python-watchdog" ,python-watchdog)))
18851 (native-inputs
18852 `(("qttools" ,qttools)))
18853 (home-page "https://framagit.org/tyreunom/offlate")
18854 (synopsis "Offline translation interface for online translation tools")
18855 (description "Offlate offers a unified interface for different translation
18856 file formats, as well as many different online translation platforms. You can
18857 use it to get work from online platforms, specialized such as the Translation
18858 Project, or not such a gitlab instance when your upstream doesn't use any
18859 dedicated platform. The tool proposes a unified interface for any format and
18860 an upload option to send your work back to the platform.")
18861 (license license:gpl3+)))
18862
18863 (define-public python-titlecase
18864 (package
18865 (name "python-titlecase")
18866 (version "0.12.0")
18867 (source
18868 (origin
18869 (method url-fetch)
18870 (uri (pypi-uri "titlecase" version))
18871 (sha256
18872 (base32
18873 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
18874 (build-system python-build-system)
18875 (native-inputs
18876 `(("python-nose" ,python-nose)))
18877 (home-page "https://github.com/ppannuto/python-titlecase")
18878 (synopsis "Capitalize strings similar to book titles")
18879 (description
18880 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
18881 It capitalizes (predominantly English) strings in a way that is similar to
18882 book titles, using the New York Times Manual of Style to leave certain words
18883 lowercase.")
18884 (license license:expat)))
18885
18886 (define-public python-pypng
18887 (package
18888 (name "python-pypng")
18889 (version "0.0.20")
18890 (source
18891 (origin
18892 (method url-fetch)
18893 (uri (pypi-uri "pypng" version))
18894 (sha256
18895 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
18896 (build-system python-build-system)
18897 (home-page "https://github.com/drj11/pypng")
18898 (synopsis "Pure Python PNG image encoder/decoder")
18899 (description
18900 "The PyPNG module implements support for PNG images. It reads and writes
18901 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
18902 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
18903 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
18904 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
18905 A number of optional chunks can be specified (when writing) and
18906 understood (when reading): tRNS, bKGD, gAMA.
18907
18908 PyPNG is not a high level toolkit for image processing (like PIL) and does not
18909 aim at being a replacement or competitor. Its strength lies in fine-grained
18910 extensive support of PNG features. It can also read and write Netpbm PAM
18911 files, with a focus on its use as an intermediate format for implementing
18912 custom PNG processing.")
18913 (license license:expat)))
18914
18915 (define-public python-fuzzywuzzy
18916 (package
18917 (name "python-fuzzywuzzy")
18918 (version "0.18.0")
18919 (source
18920 (origin
18921 (method url-fetch)
18922 (uri (pypi-uri "fuzzywuzzy" version))
18923 (sha256
18924 (base32
18925 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
18926 (build-system python-build-system)
18927 (native-inputs
18928 `(("python-hypothesis" ,python-hypothesis)
18929 ("python-pycodestyle" ,python-pycodestyle)
18930 ("python-pytest" ,python-pytest)))
18931 (propagated-inputs
18932 `(("python-levenshtein" ,python-levenshtein)))
18933 (home-page "https://github.com/seatgeek/fuzzywuzzy")
18934 (synopsis "Fuzzy string matching in Python")
18935 (description "Approximate string matching using
18936 @emph{Levenshtein Distance} to calculate the differences between
18937 sequences.")
18938 (license license:gpl2)))
18939
18940 (define-public python2-fuzzywuzzy
18941 (package-with-python2 python-fuzzywuzzy))
18942
18943 (define-public python-block-tracing
18944 (package
18945 (name "python-block-tracing")
18946 (version "1.0.1")
18947 (source
18948 (origin
18949 (method url-fetch)
18950 (uri (pypi-uri "block_tracing" version))
18951 (sha256
18952 (base32
18953 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
18954 (build-system python-build-system)
18955 (arguments '(#:tests? #f)) ; no tests
18956 (home-page "https://github.com/rianhunter/block_tracing")
18957 (synopsis "Protect process memory")
18958 (description
18959 "@code{block_tracing} is a tiny Python library that can be used to
18960 prevent debuggers and other applications from inspecting the memory within
18961 your process.")
18962 (license license:expat)))
18963
18964 (define-public python-gcovr
18965 (package
18966 (name "python-gcovr")
18967 (version "4.2")
18968 (source
18969 (origin
18970 (method url-fetch)
18971 (uri (pypi-uri "gcovr" version))
18972 (sha256
18973 (base32
18974 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
18975 (build-system python-build-system)
18976 (propagated-inputs
18977 `(("python-lxml" ,python-lxml)
18978 ("python-jinja2" ,python-jinja2)))
18979 (home-page "https://gcovr.com/")
18980 (synopsis "Utility for generating code coverage results")
18981 (description
18982 "Gcovr provides a utility for managing the use of the GNU gcov
18983 utility and generating summarized code coverage results. It is inspired
18984 by the Python coverage.py package, which provides a similar utility for
18985 Python.")
18986 (license license:bsd-3)))
18987
18988 (define-public python-owslib
18989 (package
18990 (name "python-owslib")
18991 (version "0.19.2")
18992 (source
18993 (origin
18994 (method url-fetch)
18995 (uri (pypi-uri "OWSLib" version))
18996 (sha256
18997 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
18998 (build-system python-build-system)
18999 (arguments
19000 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19001 (synopsis "Interface for Open Geospatial Consortium web service")
19002 (description
19003 "OWSLib is a Python package for client programming with Open Geospatial
19004 Consortium (OGC) web service (hence OWS) interface standards, and their related
19005 content models.")
19006 (home-page "https://geopython.github.io/OWSLib/")
19007 (license license:bsd-3)))
19008
19009 (define-public python-docusign-esign
19010 (package
19011 (name "python-docusign-esign")
19012 (version "3.1.0")
19013 (source (origin
19014 (method url-fetch)
19015 (uri (pypi-uri "docusign_esign" version))
19016 (sha256
19017 (base32
19018 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19019 (build-system python-build-system)
19020 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19021 (arguments `(#:tests? #f))
19022 (propagated-inputs
19023 `(("python-certifi", python-certifi)
19024 ("python-six", python-six)
19025 ("python-dateutil", python-dateutil)
19026 ("python-urllib3", python-urllib3)
19027 ("python-pyjwt", python-pyjwt)
19028 ("python-cryptography", python-cryptography)
19029 ("python-nose", python-nose)))
19030 (synopsis "DocuSign Python Client")
19031 (description "The Official DocuSign Python Client Library used to interact
19032 with the eSign REST API. Send, sign, and approve documents using this client.")
19033 (home-page "https://www.docusign.com/devcenter")
19034 (license license:expat)))
19035
19036 (define-public python-xattr
19037 (package
19038 (name "python-xattr")
19039 (version "0.9.7")
19040 (source
19041 (origin
19042 (method url-fetch)
19043 (uri (pypi-uri "xattr" version))
19044 (sha256
19045 (base32
19046 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19047 (build-system python-build-system)
19048 (propagated-inputs
19049 `(("python-cffi" ,python-cffi)))
19050 (home-page "https://github.com/xattr/xattr")
19051 (synopsis
19052 "Python wrapper for extended filesystem attributes")
19053 (description "This package provides a Python wrapper for using extended
19054 filesystem attributes. Extended attributes extend the basic attributes of files
19055 and directories in the file system. They are stored as name:data pairs
19056 associated with file system objects (files, directories, symlinks, etc).")
19057 (license license:expat)))
19058
19059 (define-public python-json-logger
19060 (package
19061 (name "python-json-logger")
19062 (version "0.1.11")
19063 (source
19064 (origin
19065 (method url-fetch)
19066 (uri (pypi-uri "python-json-logger" version))
19067 (sha256
19068 (base32
19069 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19070 (build-system python-build-system)
19071 (home-page
19072 "https://github.com/madzak/python-json-logger")
19073 (synopsis "JSON log formatter in Python")
19074 (description "This library allows standard Python logging to output log data
19075 as JSON objects. With JSON we can make our logs more readable by machines and
19076 we can stop writing custom parsers for syslog-type records.")
19077 (license license:bsd-3)))
19078
19079 (define-public python-daiquiri
19080 (package
19081 (name "python-daiquiri")
19082 (version "2.1.1")
19083 (source
19084 (origin
19085 (method url-fetch)
19086 (uri (pypi-uri "daiquiri" version))
19087 (sha256
19088 (base32
19089 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19090 (build-system python-build-system)
19091 (propagated-inputs
19092 `(("python-json-logger" ,python-json-logger)))
19093 (native-inputs
19094 `(("python-mock" ,python-mock)
19095 ("python-pytest" ,python-pytest)
19096 ("python-setuptools-scm" ,python-setuptools-scm)
19097 ("python-six" ,python-six)))
19098 (home-page "https://github.com/jd/daiquiri")
19099 (synopsis
19100 "Library to configure Python logging easily")
19101 (description "The daiquiri library provides an easy way to configure
19102 logging in Python. It also provides some custom formatters and handlers.")
19103 (license license:asl2.0)))
19104
19105 (define-public python-pifpaf
19106 (package
19107 (name "python-pifpaf")
19108 (version "2.4.0")
19109 (source
19110 (origin
19111 (method url-fetch)
19112 (uri (pypi-uri "pifpaf" version))
19113 (sha256
19114 (base32
19115 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19116 (build-system python-build-system)
19117 (arguments
19118 `(#:tests? #f))
19119 (propagated-inputs
19120 `(("python-click" ,python-click)
19121 ("python-daiquiri" ,python-daiquiri)
19122 ("python-fixtures" ,python-fixtures)
19123 ("python-jinja2" ,python-jinja2)
19124 ("python-pbr" ,python-pbr)
19125 ("python-psutil" ,python-psutil)
19126 ("python-six" ,python-six)
19127 ("python-xattr" ,python-xattr)))
19128 (native-inputs
19129 `(("python-mock" ,python-mock)
19130 ("python-os-testr" ,python-os-testr)
19131 ("python-requests" ,python-requests)
19132 ("python-testrepository" ,python-testrepository)
19133 ("python-testtools" ,python-testtools)))
19134 (home-page "https://github.com/jd/pifpaf")
19135 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19136 (description "Pifpaf is a suite of fixtures and a command-line tool that
19137 starts and stops daemons for a quick throw-away usage. This is typically
19138 useful when needing these daemons to run integration testing. It originally
19139 evolved from its precursor @code{overtest}.")
19140 (license license:asl2.0)))
19141
19142 (define-public python-pytest-check-links
19143 (package
19144 (name "python-pytest-check-links")
19145 (version "0.3.0")
19146 (source
19147 (origin
19148 (method url-fetch)
19149 ;; URI uses underscores
19150 (uri (pypi-uri "pytest_check_links" version))
19151 (sha256
19152 (base32
19153 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19154 (build-system python-build-system)
19155 (propagated-inputs
19156 `(("python-docutils" ,python-docutils)
19157 ("python-html5lib" ,python-html5lib)
19158 ("python-nbconvert" ,python-nbconvert)
19159 ("python-nbformat" ,python-nbformat)
19160 ("python-pytest" ,python-pytest)
19161 ("python-six" ,python-six)))
19162 (native-inputs
19163 `(("python-pbr-minimal" ,python-pbr-minimal)))
19164 (home-page "https://github.com/minrk/pytest-check-links")
19165 (synopsis "Check links in files")
19166 (description "This package provides a pytest plugin that checks URLs for
19167 HTML-containing files.")
19168 (license license:bsd-3)))
19169
19170 (define-public python-json5
19171 (package
19172 (name "python-json5")
19173 (version "0.8.5")
19174 (source
19175 (origin
19176 ;; sample.json5 is missing from PyPi source tarball
19177 (method git-fetch)
19178 (uri (git-reference
19179 (url "https://github.com/dpranke/pyjson5.git")
19180 (commit (string-append "v" version))))
19181 (file-name (git-file-name name version))
19182 (sha256
19183 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19184 (build-system python-build-system)
19185 (home-page "https://github.com/dpranke/pyjson5")
19186 (synopsis
19187 "Python implementation of the JSON5 data format")
19188 (description
19189 "JSON5 extends the JSON data interchange format to make it slightly more
19190 usable as a configuration language. This Python package implements parsing and
19191 dumping of JSON5 data structures.")
19192 (license license:asl2.0)))
19193
19194 (define-public python-frozendict
19195 (package
19196 (name "python-frozendict")
19197 (version "1.2")
19198 (source
19199 (origin
19200 (method url-fetch)
19201 (uri (pypi-uri "frozendict" version))
19202 (sha256
19203 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19204 (build-system python-build-system)
19205 (home-page "https://github.com/slezica/python-frozendict")
19206 (synopsis "Simple immutable mapping for Python")
19207 (description
19208 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19209 implements the complete mapping interface. It can be used as a drop-in
19210 replacement for dictionaries where immutability is desired.")
19211 (license license:expat)))
19212
19213 (define-public python-unpaddedbase64
19214 (package
19215 (name "python-unpaddedbase64")
19216 (version "1.1.0")
19217 (source
19218 (origin
19219 (method git-fetch)
19220 (uri (git-reference
19221 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19222 (commit (string-append "v" version))))
19223 (file-name (git-file-name name version))
19224 (sha256
19225 (base32
19226 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19227 (build-system python-build-system)
19228 (home-page "https://pypi.org/project/unpaddedbase64/")
19229 (synopsis "Encode and decode Base64 without “=” padding")
19230 (description
19231 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19232 using “=” characters. However this conveys no benefit so many protocols
19233 choose to use Base64 without the “=” padding.")
19234 (license license:asl2.0)))
19235
19236 (define-public python-canonicaljson
19237 (package
19238 (name "python-canonicaljson")
19239 (version "1.1.4")
19240 (source
19241 (origin
19242 (method url-fetch)
19243 (uri (pypi-uri "canonicaljson" version))
19244 (sha256
19245 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19246 (build-system python-build-system)
19247 (propagated-inputs
19248 `(("python-six" ,python-six)
19249 ("python-frozendict" ,python-frozendict)
19250 ("python-simplejson" ,python-simplejson)))
19251 (home-page "https://github.com/matrix-org/python-canonicaljson")
19252 (synopsis "Canonical JSON")
19253 (description
19254 "Deterministically encode JSON.
19255
19256 @itemize
19257 @item Encodes objects and arrays as RFC 7159 JSON.
19258 @item Sorts object keys so that you get the same result each time.
19259 @item Has no insignificant whitespace to make the output as small as possible.
19260 @item Escapes only the characters that must be escaped, U+0000 to
19261 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19262 @item Uses the shortest escape sequence for each escaped character.
19263 @item Encodes the JSON as UTF-8.
19264 @item Can encode frozendict immutable dictionaries.
19265 @end itemize")
19266 (license license:asl2.0)))
19267
19268 (define-public python-signedjson
19269 (package
19270 (name "python-signedjson")
19271 (version "1.1.1")
19272 (source
19273 (origin
19274 (method url-fetch)
19275 (uri (pypi-uri "signedjson" version))
19276 (sha256
19277 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19278 (build-system python-build-system)
19279 (propagated-inputs
19280 `(("python-canonicaljson" ,python-canonicaljson)
19281 ("python-importlib-metadata" ,python-importlib-metadata)
19282 ("python-pynacl" ,python-pynacl)
19283 ("python-typing-extensions" ,python-typing-extensions)
19284 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19285 (native-inputs
19286 `(("python-setuptools-scm" ,python-setuptools-scm)))
19287 (home-page "https://github.com/matrix-org/python-signedjson")
19288 (synopsis "Sign JSON objects with ED25519 signatures")
19289 (description
19290 "Sign JSON objects with ED25519 signatures.
19291
19292 @itemize
19293 @item More than one entity can sign the same object.
19294 @item Each entity can sign the object with more than one key making it easier to
19295 rotate keys
19296 @item ED25519 can be replaced with a different algorithm.
19297 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19298 key.
19299 @end itemize")
19300 (license license:asl2.0)))
19301
19302 (define-public python-daemonize
19303 (package
19304 (name "python-daemonize")
19305 (version "2.5.0")
19306 (source
19307 (origin
19308 (method url-fetch)
19309 (uri (pypi-uri "daemonize" version))
19310 (sha256
19311 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19312 (build-system python-build-system)
19313 (home-page "https://github.com/thesharp/daemonize")
19314 (synopsis "Library for writing system daemons in Python")
19315 (description "Daemonize is a library for writing system daemons in Python.")
19316 (license license:expat)))
19317
19318 (define-public python-pymacaroons
19319 (package
19320 (name "python-pymacaroons")
19321 (version "0.13.0")
19322 (source
19323 (origin
19324 (method url-fetch)
19325 (uri (pypi-uri "pymacaroons" version))
19326 (sha256
19327 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19328 (build-system python-build-system)
19329 (propagated-inputs
19330 `(("python-six" ,python-six)
19331 ("python-pynacl" ,python-pynacl)))
19332 (home-page "https://github.com/ecordell/pymacaroons")
19333 (synopsis "Python Macaroon Library")
19334 (description
19335 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19336 tokens, macaroons embed caveats that define specific authorization
19337 requirements for the target service, the service that issued the root macaroon
19338 and which is capable of verifying the integrity of macaroons it receives.
19339
19340 Macaroons allow for delegation and attenuation of authorization. They are
19341 simple and fast to verify, and decouple authorization policy from the
19342 enforcement of that policy.")
19343 (license license:expat)))
19344
19345 (define-public python-ldap3
19346 (package
19347 (name "python-ldap3")
19348 (version "2.7")
19349 (home-page "https://github.com/cannatag/ldap3")
19350 (source
19351 (origin
19352 (method git-fetch)
19353 (uri (git-reference (url home-page)
19354 (commit (string-append "v" version))))
19355 (file-name (git-file-name name version))
19356 (sha256
19357 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19358 (build-system python-build-system)
19359 (arguments
19360 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19361 #:phases (modify-phases %standard-phases
19362 (replace 'check
19363 (lambda* (#:key tests? #:allow-other-keys)
19364 (when tests?
19365 (invoke "nosetests" "-s" "test"))
19366 #t)))))
19367 (native-inputs
19368 `(("python-nose" ,python-nose)))
19369 (propagated-inputs
19370 `(("python-gssapi" ,python-gssapi)
19371 ("python-pyasn1" ,python-pyasn1)))
19372 (synopsis "Python LDAP client")
19373 (description
19374 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19375 library.")
19376 (license license:lgpl3+)))
19377
19378 (define-public python-boltons
19379 (package
19380 (name "python-boltons")
19381 (version "20.0.0")
19382 (source
19383 (origin
19384 (method url-fetch)
19385 (uri (pypi-uri "boltons" version))
19386 (sha256
19387 (base32
19388 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19389 (build-system python-build-system)
19390 (home-page "https://github.com/mahmoud/boltons")
19391 (synopsis "Extensions to the Python standard library")
19392 (description
19393 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19394 as — and yet conspicuously missing from — the standard library, including:
19395
19396 @itemize
19397 @item Atomic file saving, bolted on with fileutils
19398 @item A highly-optimized OrderedMultiDict, in dictutils
19399 @item Two types of PriorityQueue, in queueutils
19400 @item Chunked and windowed iteration, in iterutils
19401 @item Recursive data structure iteration and merging, with iterutils.remap
19402 @item Exponential backoff functionality, including jitter, through
19403 iterutils.backoff
19404 @item A full-featured TracebackInfo type, for representing stack traces, in
19405 tbutils
19406 @end itemize")
19407 (license license:bsd-3)))
19408
19409 (define-public python-eliot
19410 (package
19411 (name "python-eliot")
19412 (version "1.12.0")
19413 (source
19414 (origin
19415 (method url-fetch)
19416 (uri (pypi-uri "eliot" version))
19417 (sha256
19418 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19419 (build-system python-build-system)
19420 (arguments
19421 `(#:phases
19422 (modify-phases %standard-phases
19423 (add-after 'unpack 'remove-journald-support
19424 (lambda _
19425 (for-each delete-file
19426 '("eliot/tests/test_journald.py"
19427 "eliot/journald.py"))
19428 #t))
19429 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19430 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19431 ;; be installed and these tests should pass.
19432 (lambda _
19433 (delete-file "eliot/tests/test_prettyprint.py")
19434 #t)))))
19435 (propagated-inputs
19436 `(("python-boltons" ,python-boltons)
19437 ("python-pyrsistent" ,python-pyrsistent)
19438 ("python-six" ,python-six)
19439 ("python-zope-interface" ,python-zope-interface)))
19440 (native-inputs
19441 `(("python-black" ,python-black)
19442 ("python-coverage" ,python-coverage)
19443 ("python-dask" ,python-dask)
19444 ("python-flake8" ,python-flake8)
19445 ("python-hypothesis" ,python-hypothesis)
19446 ("python-pytest" ,python-pytest)
19447 ("python-setuptools" ,python-setuptools)
19448 ("python-sphinx" ,python-sphinx)
19449 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19450 ("python-testtools" ,python-testtools)
19451 ("python-twine" ,python-twine)
19452 ("python-twisted" ,python-twisted)))
19453 (home-page "https://github.com/itamarst/eliot/")
19454 (synopsis "Eliot: the logging system that tells you why it happened")
19455 (description
19456 "@dfn{eliot} is a Python logging system that outputs causal chains of
19457 actions: actions can spawn other actions, and eventually they either succeed
19458 or fail. The resulting logs tell you the story of what your software did: what
19459 happened, and what caused it.")
19460 (license license:asl2.0)))
19461
19462 (define-public python-pem
19463 (package
19464 (name "python-pem")
19465 (version "20.1.0")
19466 (source
19467 (origin
19468 (method url-fetch)
19469 (uri (pypi-uri "pem" version))
19470 (sha256
19471 (base32
19472 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19473 (build-system python-build-system)
19474 (native-inputs
19475 `(("python-certifi" ,python-certifi)
19476 ("python-coverage" ,python-coverage)
19477 ("python-pretend" ,python-pretend)
19478 ("python-pyopenssl" ,python-pyopenssl)
19479 ("python-pytest" ,python-pytest)
19480 ("python-sphinx" ,python-sphinx)
19481 ("python-twisted" ,python-twisted)))
19482 (home-page "https://pem.readthedocs.io/")
19483 (synopsis "Easy PEM file parsing in Python")
19484 (description
19485 "This package provides a Python module for parsing and splitting PEM files.")
19486 (license license:expat)))
19487
19488 (define-public python-txsni
19489 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19490 ;; Python and OpenSSL.
19491 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19492 (revision "0"))
19493 (package
19494 (name "python-txsni")
19495 (version (git-version "0.1.9" revision commit))
19496 (home-page "https://github.com/glyph/txsni")
19497 (source
19498 (origin
19499 (method git-fetch)
19500 (uri (git-reference (url home-page) (commit commit)))
19501 (file-name (git-file-name name version))
19502 (sha256
19503 (base32
19504 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19505 (build-system python-build-system)
19506 (propagated-inputs
19507 `(("python-pyopenssl" ,python-pyopenssl)
19508 ("python-service-identity" ,python-service-identity)
19509 ("python-twisted" ,python-twisted)))
19510 (synopsis "Run TLS servers with Twisted")
19511 (description
19512 "This package provides an easy-to-use SNI endpoint for use
19513 with the Twisted web framework.")
19514 (license license:expat))))
19515
19516 (define-public python-txacme
19517 (package
19518 (name "python-txacme")
19519 (version "0.9.2")
19520 (source
19521 (origin
19522 (method url-fetch)
19523 (uri (pypi-uri "txacme" version))
19524 (sha256
19525 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19526 (build-system python-build-system)
19527 (propagated-inputs
19528 `(("python-acme" ,python-acme)
19529 ("python-attrs" ,python-attrs)
19530 ("python-eliot" ,python-eliot)
19531 ("python-josepy" ,python-josepy)
19532 ("python-pem" ,python-pem)
19533 ("python-treq" ,python-treq)
19534 ("python-twisted" ,python-twisted)
19535 ("python-txsni" ,python-txsni)))
19536 (native-inputs
19537 `(("python-fixtures" ,python-fixtures)
19538 ("python-hypothesis" ,python-hypothesis)
19539 ("python-mock" ,python-mock)
19540 ("python-service-identity"
19541 ,python-service-identity)
19542 ("python-testrepository" ,python-testrepository)
19543 ("python-testscenarios" ,python-testscenarios)
19544 ("python-testtools" ,python-testtools)))
19545 (home-page "https://github.com/twisted/txacme")
19546 (synopsis "Twisted implexmentation of the ACME protocol")
19547 (description
19548 "ACME is Automatic Certificate Management Environment, a protocol that
19549 allows clients and certificate authorities to automate verification and
19550 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19551 Certificate Authority.
19552
19553 txacme is an implementation of the protocol for Twisted, the event-driven
19554 networking engine for Python.")
19555 (license license:expat)))
19556
19557 (define-public python-pysaml2
19558 (package
19559 (name "python-pysaml2")
19560 (version "5.0.0")
19561 (source
19562 (origin
19563 (method url-fetch)
19564 (uri (pypi-uri "pysaml2" version))
19565 (sha256
19566 (base32
19567 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19568 (build-system python-build-system)
19569 (propagated-inputs
19570 `(("python-cryptography" ,python-cryptography)
19571 ("python-dateutil" ,python-dateutil)
19572 ("python-defusedxml" ,python-defusedxml)
19573 ("python-pyopenssl" ,python-pyopenssl)
19574 ("python-pytz" ,python-pytz)
19575 ("python-requests" ,python-requests)
19576 ("python-six" ,python-six)))
19577 (home-page "https://idpy.org")
19578 (synopsis "Python implementation of SAML Version 2 Standard")
19579 (description
19580 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19581 It contains all necessary pieces for building a SAML2 service provider or
19582 an identity provider. The distribution contains examples of both.
19583
19584 This package was originally written to work in a WSGI environment, but
19585 there are extensions that allow you to use it with other frameworks.")
19586 (license license:asl2.0)))
19587
19588 (define-public python-click-plugins
19589 (package
19590 (name "python-click-plugins")
19591 (version "1.1.1")
19592 (source
19593 (origin
19594 (method url-fetch)
19595 (uri (pypi-uri "click-plugins" version))
19596 (sha256
19597 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19598 (build-system python-build-system)
19599 (native-inputs
19600 `(("python-pytest" ,python-pytest)))
19601 (propagated-inputs
19602 `(("python-click" ,python-click)))
19603 (synopsis "Extension for Click to register external CLI commands")
19604 (description "This package provides n extension module for Click to
19605 register external CLI commands via setuptools entry-points.")
19606 (home-page "https://github.com/click-contrib/click-plugins")
19607 (license license:bsd-3)))
19608
19609 (define-public python-diceware
19610 (package
19611 (name "python-diceware")
19612 (version "0.9.6")
19613 (source
19614 (origin
19615 (method url-fetch)
19616 (uri (pypi-uri "diceware" version))
19617 (sha256
19618 (base32
19619 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19620 (build-system python-build-system)
19621 (native-inputs
19622 `(("python-coverage" ,python-coverage)
19623 ("python-pytest" ,python-pytest)
19624 ("python-pytest-runner" ,python-pytest-runner)))
19625 (home-page "https://github.com/ulif/diceware/")
19626 (synopsis "Generates memorable passphrases")
19627 (description "This package generates passphrases by concatenating words
19628 randomly picked from wordlists. It supports several sources of
19629 randomness (including real life dice) and different wordlists (including
19630 cryptographically signed ones).")
19631 (license license:gpl3+)))