gnu: Add python-pydantic.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016, 2020 Christopher Allan Webber <cwebber@dustycloud.org>
12 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
13 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
14 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
15 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
16 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
17 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017 Kyle Meyer <kyle@kyleam.com>
19 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
20 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
21 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
22 ;;; Copyright © 2016, 2018, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
23 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
24 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
25 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
26 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
27 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
28 ;;; Copyright © 2016 David Craven <david@craven.ch>
29 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
32 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
33 ;;; Copyright © 2016, 2017, 2018, 2020 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
35 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
36 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
37 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
38 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
39 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
40 ;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
41 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
42 ;;; Copyright © 2017, 2020 Roel Janssen <roel@gnu.org>
43 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
44 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
45 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
46 ;;; Copyright © 2017, 2019 Brendan Tildesley <mail@brendan.scot>
47 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
48 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
49 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
50 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
51 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
52 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
53 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
54 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
55 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
56 ;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
58 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
59 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
60 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
61 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
62 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
63 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
64 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
81 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
82 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
83 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
84 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
85 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
86 ;;;
87 ;;; This file is part of GNU Guix.
88 ;;;
89 ;;; GNU Guix is free software; you can redistribute it and/or modify it
90 ;;; under the terms of the GNU General Public License as published by
91 ;;; the Free Software Foundation; either version 3 of the License, or (at
92 ;;; your option) any later version.
93 ;;;
94 ;;; GNU Guix is distributed in the hope that it will be useful, but
95 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
96 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
97 ;;; GNU General Public License for more details.
98 ;;;
99 ;;; You should have received a copy of the GNU General Public License
100 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
101
102 (define-module (gnu packages python-xyz)
103 #:use-module ((guix licenses) #:prefix license:)
104 #:use-module (gnu packages)
105 #:use-module (gnu packages algebra)
106 #:use-module (gnu packages adns)
107 #:use-module (gnu packages attr)
108 #:use-module (gnu packages backup)
109 #:use-module (gnu packages bash)
110 #:use-module (gnu packages check)
111 #:use-module (gnu packages cmake)
112 #:use-module (gnu packages compression)
113 #:use-module (gnu packages crypto)
114 #:use-module (gnu packages databases)
115 #:use-module (gnu packages dbm)
116 #:use-module (gnu packages enchant)
117 #:use-module (gnu packages file)
118 #:use-module (gnu packages fontutils)
119 #:use-module (gnu packages gcc)
120 #:use-module (gnu packages geo)
121 #:use-module (gnu packages ghostscript)
122 #:use-module (gnu packages gl)
123 #:use-module (gnu packages glib)
124 #:use-module (gnu packages gnome)
125 #:use-module (gnu packages graphviz)
126 #:use-module (gnu packages graphics)
127 #:use-module (gnu packages gsasl)
128 #:use-module (gnu packages gstreamer)
129 #:use-module (gnu packages gtk)
130 #:use-module (gnu packages icu4c)
131 #:use-module (gnu packages image)
132 #:use-module (gnu packages imagemagick)
133 #:use-module (gnu packages kerberos)
134 #:use-module (gnu packages libevent)
135 #:use-module (gnu packages libffi)
136 #:use-module (gnu packages linux)
137 #:use-module (gnu packages llvm)
138 #:use-module (gnu packages man)
139 #:use-module (gnu packages maths)
140 #:use-module (gnu packages monitoring)
141 #:use-module (gnu packages multiprecision)
142 #:use-module (gnu packages networking)
143 #:use-module (gnu packages ncurses)
144 #:use-module (gnu packages openstack)
145 #:use-module (gnu packages pcre)
146 #:use-module (gnu packages perl)
147 #:use-module (gnu packages photo)
148 #:use-module (gnu packages pkg-config)
149 #:use-module (gnu packages python)
150 #:use-module (gnu packages python-check)
151 #:use-module (gnu packages python-compression)
152 #:use-module (gnu packages python-crypto)
153 #:use-module (gnu packages python-science)
154 #:use-module (gnu packages python-web)
155 #:use-module (gnu packages qt)
156 #:use-module (gnu packages readline)
157 #:use-module (gnu packages sdl)
158 #:use-module (gnu packages search)
159 #:use-module (gnu packages shells)
160 #:use-module (gnu packages sphinx)
161 #:use-module (gnu packages ssh)
162 #:use-module (gnu packages terminals)
163 #:use-module (gnu packages tex)
164 #:use-module (gnu packages texinfo)
165 #:use-module (gnu packages textutils)
166 #:use-module (gnu packages time)
167 #:use-module (gnu packages tls)
168 #:use-module (gnu packages version-control)
169 #:use-module (gnu packages video)
170 #:use-module (gnu packages web)
171 #:use-module (gnu packages base)
172 #:use-module (gnu packages xml)
173 #:use-module (gnu packages xorg)
174 #:use-module (gnu packages xdisorg)
175 #:use-module (gnu packages tcl)
176 #:use-module (gnu packages bdw-gc)
177 #:use-module (gnu packages serialization)
178 #:use-module (guix packages)
179 #:use-module (guix download)
180 #:use-module (guix git-download)
181 #:use-module (guix hg-download)
182 #:use-module (guix utils)
183 #:use-module (guix build-system gnu)
184 #:use-module (guix build-system cmake)
185 #:use-module (guix build-system python)
186 #:use-module (guix build-system trivial)
187 #:use-module (srfi srfi-1)
188 #:use-module (srfi srfi-26))
189
190 (define-public python-tenacity
191 (package
192 (name "python-tenacity")
193 (version "6.1.0")
194 (source (origin
195 (method url-fetch)
196 (uri (pypi-uri "tenacity" version))
197 (sha256
198 (base32
199 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
200 (build-system python-build-system)
201 (native-inputs
202 `(("python-setuptools-scm" ,python-setuptools-scm)
203 ("python-sphinx" ,python-sphinx)
204 ("python-tornado" ,python-tornado)
205 ("python-pytest" ,python-pytest)))
206 (propagated-inputs
207 `(("python-six" ,python-six)))
208 (arguments
209 `(#:phases (modify-phases %standard-phases
210 (replace 'check
211 (lambda _
212 (invoke "pytest")
213 #t)))))
214 (home-page "https://github.com/jd/tenacity")
215 (synopsis "Retrying library for python")
216 (description "Tenacity is a general-purpose python library to simplify the
217 task of adding retry behavior to just about anything.")
218 (license license:asl2.0)))
219
220 (define-public python-colorlog
221 (package
222 (name "python-colorlog")
223 (version "4.1.0")
224 (source (origin
225 (method url-fetch)
226 (uri (pypi-uri "colorlog" version))
227 (sha256
228 (base32
229 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
230 (build-system python-build-system)
231 (native-inputs
232 `(("python-pytest" ,python-pytest)))
233 (arguments
234 `(#:phases (modify-phases %standard-phases
235 (replace 'check
236 (lambda _
237 ;; Extend PYTHONPATH so the built package will be found.
238 (setenv "PYTHONPATH"
239 (string-append (getcwd) "/build/lib:"
240 (getenv "PYTHONPATH")))
241 (invoke "pytest" "-p" "no:logging")
242 #t)))))
243 (home-page "https://github.com/borntyping/python-colorlog")
244 (synopsis "Log formatting with colors for python")
245 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
246 with Python's logging module that outputs records using terminal colors.")
247 (license license:expat)))
248
249 (define-public python-pyprind
250 (package
251 (name "python-pyprind")
252 (version "2.11.2")
253 (source (origin
254 (method url-fetch)
255 (uri (pypi-uri "PyPrind" version))
256 (sha256
257 (base32
258 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
259 (build-system python-build-system)
260 (propagated-inputs
261 `(("python-psutil" ,python-psutil)))
262 (home-page "https://github.com/rasbt/pyprind")
263 (synopsis "Python Progress Bar and Percent Indicator Utility")
264 (description "The PyPrind (Python Progress Indicator) module provides a
265 progress bar and a percentage indicator object that let you track the progress
266 of a loop structure or other iterative computation.")
267 (license license:bsd-3)))
268
269 (define-public python-gphoto2
270 (package
271 (name "python-gphoto2")
272 (version "2.2.1")
273 (source (origin
274 (method url-fetch)
275 (uri (pypi-uri "gphoto2" version))
276 (sha256
277 (base32
278 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
279 (build-system python-build-system)
280 (native-inputs
281 `(("pkg-config" ,pkg-config)))
282 (inputs
283 `(("libgphoto2" ,libgphoto2)))
284 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
285 (synopsis "Python interface to libgphoto2")
286 (description "@code{python-gphoto2} is a comprehensive Python interface
287 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
288 automatically generate the interface code.")
289 (license license:gpl3+)))
290
291 (define-public python-colour
292 (package
293 (name "python-colour")
294 (version "0.1.5")
295 (source (origin
296 (method url-fetch)
297 (uri (pypi-uri "colour" version))
298 (sha256
299 (base32
300 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
301 (build-system python-build-system)
302 (native-inputs
303 `(("python-d2to1" ,python-d2to1)))
304 (home-page "https://github.com/vaab/colour")
305 (synopsis "Convert and manipulate various color representations")
306 (description "Pythonic way to manipulate color representations (HSL, RVB,
307 web, X11, ...).")
308 (license license:expat)))
309
310 (define-public python-d2to1
311 (package
312 (name "python-d2to1")
313 (version "0.2.12.post1")
314 (source (origin
315 (method url-fetch)
316 (uri (pypi-uri "d2to1" version))
317 (sha256
318 (base32
319 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
320 (build-system python-build-system)
321 (native-inputs
322 `(("python-nose" ,python-nose)))
323 (home-page "https://github.com/embray/d2to1")
324 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
325 in python")
326 (description "The python package d2to1 (the d is for distutils) allows
327 using distutils2-like setup.cfg files for a package's metadata with a
328 distribute/setuptools setup.py script.")
329 (license license:bsd-2)))
330
331 (define-public python-rawkit
332 (package
333 (name "python-rawkit")
334 (version "0.6.0")
335 (source (origin
336 (method url-fetch)
337 (uri (pypi-uri "rawkit" version))
338 (sha256
339 (base32
340 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
341 (build-system python-build-system)
342 (native-inputs
343 `(("python-pytest" ,python-pytest)
344 ("python-mock" ,python-mock)))
345 (inputs
346 `(("libraw" ,libraw)))
347 (home-page "https://rawkit.readthedocs.io")
348 (synopsis "Ctypes-based LibRaw binding for Python")
349 (description "The rawkit package provides two modules: rawkit and libraw.
350 The rawkit module provides a high-level Pythonic interface for developing raw
351 photos, while the libraw module provides a CTypes based interface for
352 interacting with the low-level LibRaw C APIs.")
353 (license license:expat)))
354
355 (define-public python-easygui
356 (package
357 (name "python-easygui")
358 (version "0.98.1")
359 (source (origin
360 (method url-fetch)
361 (uri (pypi-uri "easygui" version))
362 (sha256
363 (base32
364 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
365 (build-system python-build-system)
366 (propagated-inputs
367 `(("python-tkinter" ,python "tk")))
368 (home-page "https://github.com/robertlugg/easygui")
369 (synopsis "GUI programming module for Python")
370 (description "EasyGUI is a module for very simple, very easy GUI
371 programming in Python. EasyGUI is different from other GUI generators in that
372 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
373 simple function calls.")
374 (license license:bsd-3)))
375
376 (define-public python-pymediainfo
377 (package
378 (name "python-pymediainfo")
379 (version "4.1")
380 (source
381 (origin
382 (method url-fetch)
383 (uri (pypi-uri "pymediainfo" version))
384 (sha256
385 (base32
386 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
387 (build-system python-build-system)
388 (native-inputs
389 `(("python-setuptools-scm" ,python-setuptools-scm)
390 ("python-pytest" ,python-pytest)))
391 (inputs
392 `(("libmediainfo" ,libmediainfo)))
393 (arguments
394 `(#:phases
395 (modify-phases %standard-phases
396 (add-after 'unpack 'patch-libmediainfo
397 (lambda _
398 (substitute* "pymediainfo/__init__.py"
399 (("libmediainfo.so.0")
400 (string-append (assoc-ref %build-inputs "libmediainfo")
401 "/lib/libmediainfo.so.0")))
402 #t))
403 (replace 'check
404 (lambda _
405 ;; Extend PYTHONPATH so the built package will be found.
406 (setenv "PYTHONPATH"
407 (string-append (getcwd) "/build/lib:"
408 (getenv "PYTHONPATH")))
409 ;; Skip the only failing test "test_parse_url"
410 (invoke "pytest" "-vv" "-k" "not test_parse_url")
411 #t)))))
412 (home-page
413 "https://github.com/sbraz/pymediainfo")
414 (synopsis
415 "Python wrapper for the mediainfo library")
416 (description
417 "Python wrapper for the mediainfo library to access the technical and tag
418 data for video and audio files.")
419 (license license:expat)))
420
421 (define-public python-psutil
422 (package
423 (name "python-psutil")
424 (version "5.7.2")
425 (source
426 (origin
427 (method url-fetch)
428 (uri (pypi-uri "psutil" version))
429 (sha256
430 (base32 "1svv985vmqsls35kmvp3vhh26nsgz229324s9k29awf6qgqhm6ch"))))
431 (build-system python-build-system)
432 (arguments
433 ;; FIXME: some tests do not return and time out. Some tests fail because
434 ;; some processes survive kill().
435 '(#:tests? #f))
436 (home-page "https://www.github.com/giampaolo/psutil")
437 (synopsis "Library for retrieving information on running processes")
438 (description
439 "psutil (Python system and process utilities) is a library for retrieving
440 information on running processes and system utilization (CPU, memory, disks,
441 network) in Python. It is useful mainly for system monitoring, profiling and
442 limiting process resources and management of running processes. It implements
443 many functionalities offered by command line tools such as: ps, top, lsof,
444 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
445 pidof, tty, taskset, pmap.")
446 (properties `((python2-variant . ,(delay python2-psutil))))
447 (license license:bsd-3)))
448
449 (define-public python2-psutil
450 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
451 (package
452 (inherit base)
453 (propagated-inputs
454 `(("python2-enum34" ,python2-enum34) ;optional
455 ,@(package-propagated-inputs base))))))
456
457 (define-public python-shapely
458 (package
459 (name "python-shapely")
460 (version "1.6.4.post2")
461 (source
462 (origin
463 (method url-fetch)
464 (uri (pypi-uri "Shapely" version))
465 (sha256
466 (base32
467 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
468 (build-system python-build-system)
469 (native-inputs
470 `(("python-cython" ,python-cython)
471 ("python-matplotlib" ,python-matplotlib)
472 ("python-pytest" ,python-pytest)
473 ("python-pytest-cov" ,python-pytest-cov)))
474 (inputs
475 `(("geos" ,geos)))
476 (propagated-inputs
477 `(("python-numpy" ,python-numpy)))
478 (arguments
479 `(#:phases
480 (modify-phases %standard-phases
481 (add-after 'unpack 'patch-geos-path
482 (lambda* (#:key inputs #:allow-other-keys)
483 (let ((geos (assoc-ref inputs "geos"))
484 (glibc (assoc-ref inputs ,(if (%current-target-system)
485 "cross-libc" "libc"))))
486 (substitute* "shapely/geos.py"
487 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
488 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
489 geos "/lib/libgeos_c.so'])"))
490 (("free = load_dll\\('c'\\)\\.free")
491 (string-append "free = load_dll('c', fallbacks=['"
492 glibc "/lib/libc.so.6']).free"))))
493 #t)))))
494 (home-page "https://github.com/Toblerity/Shapely")
495 (synopsis "Library for the manipulation and analysis of geometric objects")
496 (description "Shapely is a Python package for manipulation and analysis of
497 planar geometric objects. It is based on the @code{GEOS} library.")
498 (license license:bsd-3)))
499
500 (define-public python-shortuuid
501 (package
502 (name "python-shortuuid")
503 (version "0.5.0")
504 (source
505 (origin
506 (method url-fetch)
507 (uri (pypi-uri "shortuuid" version))
508 (sha256
509 (base32
510 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
511 (build-system python-build-system)
512 (native-inputs
513 `(("python-pep8" ,python-pep8)))
514 (home-page "https://github.com/skorokithakis/shortuuid")
515 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
516 (description
517 "@code{shortuuid} is a Python library for generating concise, unambiguous
518 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
519 module and then similar looking characters are removed.")
520 (license license:bsd-3)))
521
522 (define-public python-logwrap
523 (package
524 (name "python-logwrap")
525 (version "3.2.1")
526 (source
527 (origin
528 (method url-fetch)
529 (uri (pypi-uri "logwrap" version ".zip"))
530 (sha256
531 (base32
532 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
533 (build-system python-build-system)
534 (propagated-inputs
535 `(("python-six" ,python-six)
536 ("python-typing" ,python-typing)))
537 (native-inputs
538 `(("unzip" ,unzip)
539 ("python-cython" ,python-cython)
540 ("python-pytest" ,python-pytest)
541 ("python-pytest-cov" ,python-pytest-cov)
542 ("python-pytest-runner" ,python-pytest-runner)))
543 (home-page "https://github.com/penguinolog/logwrap")
544 (synopsis "Decorator for logging function arguments")
545 (description "This package provides a decorator to log function arguments
546 and function call return values in a human-readable way.")
547 (license license:asl2.0)))
548
549 (define-public python2-shapely
550 (package-with-python2 python-shapely))
551
552 (define-public python-clyent
553 (package
554 (name "python-clyent")
555 (version "1.2.1")
556 (source
557 (origin
558 (method url-fetch)
559 (uri (pypi-uri "clyent" version))
560 (sha256
561 (base32
562 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
563 (build-system python-build-system)
564 (native-inputs
565 `(("python-mock" ,python-mock)))
566 (home-page "https://github.com/Anaconda-Platform/clyent")
567 (synopsis "Command line client library")
568 (description "Clyent is a Python command line utility library. It is used
569 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
570 (license license:bsd-3)))
571
572 (define-public python2-clyent
573 (package-with-python2 python-clyent))
574
575 (define-public python-babel
576 (package
577 (name "python-babel")
578 (version "2.8.0")
579 (source
580 (origin
581 (method url-fetch)
582 (uri (pypi-uri "Babel" version))
583 (sha256
584 (base32
585 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
586 (build-system python-build-system)
587 (native-inputs
588 `(("python-freezegun" ,python-freezegun)
589 ("python-pytest" ,python-pytest)))
590 (propagated-inputs
591 `(("python-pytz" ,python-pytz)))
592 (arguments
593 `(#:phases (modify-phases %standard-phases
594 (replace 'check
595 (lambda _
596 (invoke "pytest" "-vv" "-k"
597 (string-append
598 ;; XXX: These tests fail when using Pytest 4.x and
599 ;; Babel 2.6.0. Try removing this for later versions.
600 "not test_no_inherit_metazone_marker_never_in_output"
601 " and not test_smoke_dates"
602 " and not test_smoke_numbers")))))))
603 (home-page "http://babel.pocoo.org/")
604 (synopsis
605 "Tools for internationalizing Python applications")
606 (description
607 "Babel is composed of two major parts:
608 - tools to build and work with gettext message catalogs
609 - a Python interface to the CLDR (Common Locale Data Repository), providing
610 access to various locale display names, localized number and date formatting,
611 etc. ")
612 (license license:bsd-3)))
613
614 (define-public python2-babel
615 (package-with-python2 python-babel))
616
617 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
618 (define-public python2-babel-2.6
619 (package
620 (inherit python2-babel)
621 (version "2.6.0")
622 (source (origin
623 (method url-fetch)
624 (uri (pypi-uri "Babel" version))
625 (sha256
626 (base32
627 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
628
629 (define-public python2-backport-ssl-match-hostname
630 (package
631 (name "python2-backport-ssl-match-hostname")
632 (version "3.5.0.1")
633 (source
634 (origin
635 (method url-fetch)
636 (uri (pypi-uri "backports.ssl_match_hostname" version))
637 (sha256
638 (base32
639 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
640 (build-system python-build-system)
641 (arguments
642 `(#:python ,python-2
643 #:tests? #f)) ; no test target
644 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
645 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
646 (description
647 "This backport brings the ssl.match_hostname() function to users of
648 earlier versions of Python. The function checks the hostname in the
649 certificate returned by the server to which a connection has been established,
650 and verifies that it matches the intended target hostname.")
651 (license license:psfl)))
652
653 (define-public python-bitarray
654 (package
655 (name "python-bitarray")
656 (version "1.4.0")
657 (source (origin
658 (method url-fetch)
659 (uri (pypi-uri "bitarray" version))
660 (sha256
661 (base32
662 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
663 (build-system python-build-system)
664 (home-page "https://github.com/ilanschnell/bitarray")
665 (synopsis "Efficient arrays of booleans")
666 (description "This package provides an object type which efficiently
667 represents an array of booleans. Bitarrays are sequence types and behave very
668 much like usual lists. Eight bits are represented by one byte in a contiguous
669 block of memory. The user can select between two representations:
670 little-endian and big-endian. All of the functionality is implemented in C.
671 Methods for accessing the machine representation are provided. This can be
672 useful when bit level access to binary files is required, such as portable
673 bitmap image files. Also, when dealing with compressed data which uses
674 variable bit length encoding, you may find this module useful.")
675 (license license:psfl)))
676
677 (define-public python-boolean.py
678 (package
679 (name "python-boolean.py")
680 (version "3.6")
681 (source
682 (origin
683 ;; There's no source tarball on PyPI.
684 (method git-fetch)
685 (uri (git-reference
686 (url "https://github.com/bastikr/boolean.py")
687 (commit (string-append "v" version))))
688 (file-name (git-file-name name version))
689 (sha256
690 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
691 (build-system python-build-system)
692 (home-page "https://github.com/bastikr/boolean.py")
693 (synopsis "Boolean algebra in one Python module")
694 (description
695 "This is a small Python library that implements boolean algebra.
696 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
697 @code{Symbol} class that can take on one of these two values. Calculations
698 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
699 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
700 Expressions are constructed from parsed strings or directly in Python.")
701 (license license:bsd-2)))
702
703 (define-public python-hdf4
704 (package
705 (name "python-hdf4")
706 (version "0.9")
707 (source
708 (origin
709 (method url-fetch)
710 (uri (pypi-uri name version))
711 (sha256
712 (base32
713 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
714 (build-system python-build-system)
715 (native-inputs `(("nose" ,python-nose)))
716 (propagated-inputs `(("numpy" ,python-numpy)))
717 (inputs
718 `(("hdf4" ,hdf4)
719 ("libjpeg" ,libjpeg-turbo)
720 ("zlib" ,zlib)))
721 (arguments
722 `(#:phases
723 (modify-phases %standard-phases
724 (replace 'check
725 (lambda _
726 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
727 ;; on to import numpy. Somehow this works on their CI system.
728 ;; Let's just manage PYTHONPATH here instead.
729 (substitute* "runexamples.sh"
730 (("export PYTHONPATH=.*") ""))
731 (setenv "PYTHONPATH"
732 (string-append (getcwd) ":"
733 (getenv "PYTHONPATH")))
734 (invoke "./runexamples.sh")
735 (invoke "nosetests" "-v"))))))
736 (home-page "https://github.com/fhs/python-hdf4")
737 (synopsis "Python interface to the NCSA HDF4 library")
738 (description
739 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
740 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
741 NetCDF files can also be read and modified. Python-HDF4 is a fork of
742 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
743 (license license:expat)))
744
745 (define-public python2-hdf4
746 (package-with-python2 python-hdf4))
747
748 (define-public python-h5py
749 (package
750 (name "python-h5py")
751 (version "2.10.0")
752 (source
753 (origin
754 (method url-fetch)
755 (uri (pypi-uri "h5py" version))
756 (sha256
757 (base32
758 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
759 (build-system python-build-system)
760 (arguments
761 `(#:tests? #f ; no test target
762 #:phases
763 (modify-phases %standard-phases
764 (add-after 'unpack 'fix-hdf5-paths
765 (lambda* (#:key inputs #:allow-other-keys)
766 (let ((prefix (assoc-ref inputs "hdf5")))
767 (substitute* "setup_build.py"
768 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
769 (string-append "['" prefix "/lib" "']"))
770 (("'/opt/local/include', '/usr/local/include'")
771 (string-append "'" prefix "/include" "'")))
772 (substitute* "setup_configure.py"
773 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
774 (string-append "['" prefix "/lib" "']")))
775 #t))))))
776 (propagated-inputs
777 `(("python-six" ,python-six)
778 ("python-numpy" ,python-numpy)))
779 (inputs
780 `(("hdf5" ,hdf5-1.10)))
781 (native-inputs
782 `(("python-cython" ,python-cython)
783 ("python-pkgconfig" ,python-pkgconfig)
784 ("pkg-config" ,pkg-config)))
785 (home-page "https://www.h5py.org/")
786 (synopsis "Read and write HDF5 files from Python")
787 (description
788 "The h5py package provides both a high- and low-level interface to the
789 HDF5 library from Python. The low-level interface is intended to be a
790 complete wrapping of the HDF5 API, while the high-level component supports
791 access to HDF5 files, datasets and groups using established Python and NumPy
792 concepts.")
793 (license license:bsd-3)))
794
795 (define-public python2-h5py
796 (package-with-python2 python-h5py))
797
798 (define-public python-sh
799 (package
800 (name "python-sh")
801 (version "1.12.14")
802 (source
803 (origin
804 (method url-fetch)
805 (uri (pypi-uri "sh" version))
806 (sha256
807 (base32
808 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
809 (build-system python-build-system)
810 (arguments
811 '(#:phases
812 (modify-phases %standard-phases
813 (replace 'check
814 (lambda _
815 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
816 (setenv "HOME" "/tmp")
817 (invoke "python" "sh.py" "test"))))))
818 (native-inputs
819 `(("python-coverage" ,python-coverage)))
820 (home-page "https://github.com/amoffat/sh")
821 (synopsis "Python subprocess replacement")
822 (description "This package provides a replacement for Python's
823 @code{subprocess} feature.")
824 (license license:expat)))
825
826 (define-public python2-sh
827 (package-with-python2 python-sh))
828
829 (define-public python-cftime
830 (package
831 (name "python-cftime")
832 (version "1.0.4.2")
833 (source
834 (origin
835 (method url-fetch)
836 (uri (pypi-uri "cftime" version))
837 (sha256
838 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
839 (build-system python-build-system)
840 (propagated-inputs
841 `(("python-numpy" ,python-numpy)))
842 (native-inputs
843 `(("python-coveralls" ,python-coveralls)
844 ("python-cython" ,python-cython)
845 ("python-pytest-cov" ,python-pytest-cov)))
846 (home-page "https://github.com/Unidata/cftime")
847 (synopsis "Library for time handling")
848 (description
849 "This package provides time-handling functionality that used to be part
850 of the netcdf4 package before.")
851 ;; This package claims to include code under the GPLv3 but is released
852 ;; under ISC.
853 (license (list license:isc license:gpl3+))))
854
855 (define-public python-netcdf4
856 (package
857 (name "python-netcdf4")
858 (version "1.5.3")
859 (source
860 (origin
861 (method url-fetch)
862 (uri (pypi-uri "netCDF4" version))
863 (sha256
864 (base32
865 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
866 (build-system python-build-system)
867 (arguments
868 '(#:phases
869 (modify-phases %standard-phases
870 (add-after 'unpack 'configure-locations
871 (lambda* (#:key inputs #:allow-other-keys)
872 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
873 #t)))))
874 (native-inputs
875 `(("python-cython" ,python-cython)))
876 (propagated-inputs
877 `(("python-numpy" ,python-numpy)
878 ("python-cftime" ,python-cftime)))
879 (inputs
880 `(("netcdf" ,netcdf)
881 ("hdf4" ,hdf4)
882 ("hdf5" ,hdf5)))
883 (home-page "https://github.com/Unidata/netcdf4-python")
884 (synopsis "Python/numpy interface to the netCDF library")
885 (description "Netcdf4-python is a Python interface to the netCDF C
886 library. netCDF version 4 has many features not found in earlier
887 versions of the library and is implemented on top of HDF5. This module
888 can read and write files in both the new netCDF 4 and the old netCDF 3
889 format, and can create files that are readable by HDF5 clients. The
890 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
891 to users of that module.")
892 ;; The software is mainly ISC, but includes some files covered
893 ;; by the Expat license.
894 (license (list license:isc license:expat))))
895
896 (define-public python2-netcdf4
897 (package-with-python2 python-netcdf4))
898
899 (define-public python-license-expression
900 (package
901 (name "python-license-expression")
902 (version "0.999")
903 (source
904 (origin
905 (method url-fetch)
906 (uri (pypi-uri "license-expression" version))
907 (sha256
908 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
909 (build-system python-build-system)
910 (propagated-inputs
911 `(("python-boolean.py" ,python-boolean.py)))
912 (home-page "https://github.com/nexB/license-expression")
913 (synopsis "Apply boolean logic to license expressions")
914 (description
915 "This Python module defines a tiny language to evaluate and compare
916 license expressions using boolean logic. Logical combinations of licenses can
917 be tested for equality, containment, and equivalence. They can be normalised
918 and simplified. It supports SPDX license expressions as well as other naming
919 conventions and aliases in the same expression.")
920 (license license:gpl2+)))
921
922 (define-public python-lockfile
923 (package
924 (name "python-lockfile")
925 (version "0.12.2")
926 (source
927 (origin
928 (method url-fetch)
929 (uri (pypi-uri "lockfile" version))
930 (sha256
931 (base32
932 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
933 (build-system python-build-system)
934 (arguments '(#:test-target "check"))
935 (native-inputs
936 `(("python-pbr" ,python-pbr)))
937 (home-page "https://launchpad.net/pylockfile")
938 (synopsis "Platform-independent file locking module")
939 (description
940 "The lockfile package exports a LockFile class which provides a simple
941 API for locking files.")
942 (license license:expat)))
943
944 (define-public python2-lockfile
945 (package-with-python2 python-lockfile))
946
947 (define-public python-filelock
948 (package
949 (name "python-filelock")
950 (version "3.0.12")
951 (source
952 (origin
953 (method url-fetch)
954 (uri (pypi-uri "filelock" version))
955 (sha256
956 (base32
957 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
958 (build-system python-build-system)
959 (home-page
960 "https://github.com/benediktschmitt/py-filelock")
961 (synopsis "Platform independent file lock")
962 (description "@code{filelock} contains a single module implementing
963 a platform independent file lock in Python, which provides a simple way of
964 inter-process communication.")
965 (license license:unlicense)))
966
967 (define-public python-semantic-version
968 (package
969 (name "python-semantic-version")
970 (version "2.6.0")
971 (source
972 (origin
973 (method url-fetch)
974 (uri (pypi-uri "semantic_version" version))
975 (sha256
976 (base32
977 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
978 (build-system python-build-system)
979 (arguments
980 `(#:tests? #f)) ; PyPI tarball lacks tests
981 (home-page "https://github.com/rbarrois/python-semanticversion")
982 (synopsis "Semantic versioning module for Python")
983 (description
984 "The @code{semantic_version} class is a small library for handling
985 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
986
987 It can compare versions, generate a new version that represents a bump in one of
988 the version levels, and check whether any given string is a proper semantic
989 version identifier.")
990 (license license:bsd-3)))
991
992 (define-public python2-semantic-version
993 (package-with-python2 python-semantic-version))
994
995 (define-public python-serpent
996 (package
997 (name "python-serpent")
998 (version "1.28")
999 (source
1000 (origin
1001 (method url-fetch)
1002 (uri (pypi-uri "serpent" version))
1003 (sha256
1004 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1005 (build-system python-build-system)
1006 (native-inputs
1007 `(("python-attrs" ,python-attrs)
1008 ("python-pytz" ,python-pytz)))
1009 (home-page "https://github.com/irmen/Serpent")
1010 (synopsis "Serializer for literal Python expressions")
1011 (description
1012 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1013 serialization. It serializes an object tree into bytes (an utf-8 encoded
1014 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1015 to rebuild the original object tree.
1016
1017 Because only safe literals are encoded, it is safe to send serpent data to
1018 other machines, such as over the network.")
1019 (properties `((python2-variant . ,(delay python2-serpent))))
1020 (license license:expat)))
1021
1022 (define-public python2-serpent
1023 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1024 (package
1025 (inherit base)
1026 (propagated-inputs
1027 `(("python-enum34" ,python2-enum34)
1028 ,@(package-propagated-inputs base))))))
1029
1030 (define-public python-setuptools
1031 (package
1032 (name "python-setuptools")
1033 (version "41.0.1")
1034 (source
1035 (origin
1036 (method url-fetch)
1037 (uri (pypi-uri "setuptools" version ".zip"))
1038 (sha256
1039 (base32
1040 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1041 (modules '((guix build utils)))
1042 (snippet
1043 '(begin
1044 ;; Remove included binaries which are used to build self-extracting
1045 ;; installers for Windows.
1046 ;; TODO: Find some way to build them ourself so we can include them.
1047 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1048 #t))))
1049 (build-system python-build-system)
1050 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1051 ;; One could bootstrap with an internal untested setuptools.
1052 (arguments
1053 `(#:tests? #f))
1054 (home-page "https://pypi.org/project/setuptools/")
1055 (synopsis
1056 "Library designed to facilitate packaging Python projects")
1057 (description
1058 "Setuptools is a fully-featured, stable library designed to facilitate
1059 packaging Python projects, where packaging includes:
1060 Python package and module definitions,
1061 distribution package metadata,
1062 test hooks,
1063 project installation,
1064 platform-specific details,
1065 Python 3 support.")
1066 ;; TODO: setuptools now bundles the following libraries:
1067 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1068 (license (list license:psfl ; setuptools itself
1069 license:expat ; six, appdirs, pyparsing
1070 license:asl2.0 ; packaging is dual ASL2/BSD-2
1071 license:bsd-2))))
1072
1073 (define-public python2-setuptools
1074 (package-with-python2 python-setuptools))
1075
1076 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1077 (define-public python-setuptools-for-tensorflow
1078 (hidden-package
1079 (package
1080 (inherit python-setuptools)
1081 (version "39.1.0")
1082 (source (origin
1083 (inherit (package-source python-setuptools))
1084 (uri (pypi-uri "setuptools" version ".zip"))
1085 (sha256
1086 (base32
1087 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1088
1089 (define-public python-uniseg
1090 (package
1091 (name "python-uniseg")
1092 (version "0.7.1")
1093 (source
1094 (origin
1095 (method url-fetch)
1096 (uri (pypi-uri "uniseg" version ".zip"))
1097 (sha256
1098 (base32
1099 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1100 (build-system python-build-system)
1101 (arguments
1102 '(#:tests? #f)) ; The test suite requires network access.
1103 (native-inputs
1104 `(("unzip" ,unzip)))
1105 (home-page
1106 "https://bitbucket.org/emptypage/uniseg-python")
1107 (synopsis
1108 "Python library to determine Unicode text segmentations")
1109 (description
1110 "Uniseg is a Python package used to determine Unicode text segmentations.
1111 Supported segmentations include:
1112 @enumerate
1113 @item @dfn{Code point} (any value in the Unicode codespace)
1114 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1115 multiple Unicode code points, e.g. \"G\" + acute-accent)
1116 @item Word break
1117 @item Sentence break
1118 @item Line break
1119 @end enumerate")
1120 (license license:expat)))
1121
1122 (define-public python2-uniseg
1123 (package-with-python2 python-uniseg))
1124
1125 (define-public python-humanfriendly
1126 (package
1127 (name "python-humanfriendly")
1128 (version "8.2")
1129 (source
1130 (origin
1131 (method url-fetch)
1132 (uri (pypi-uri "humanfriendly" version))
1133 (sha256
1134 (base32
1135 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
1136 (build-system python-build-system)
1137 (arguments
1138 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1139 #:tests? #f))
1140 (home-page "https://humanfriendly.readthedocs.io")
1141 (synopsis "Human-friendly input and output in Python")
1142 (description
1143 "The functions and classes in @code{humanfriendly} can be used to make
1144 text interfaces more user-friendly. It includes tools to parse and format
1145 numbers, file sizes, and timespans, timers for long-running operations, menus
1146 to allow the user to choose from a list of options, and terminal interaction
1147 helpers.")
1148 (properties `((python2-variant . ,(delay python2-humanfriendly))))
1149 (license license:expat)))
1150
1151 (define-public python2-humanfriendly
1152 (let ((base (package-with-python2
1153 (strip-python2-variant python-humanfriendly))))
1154 (package (inherit base)
1155 (propagated-inputs
1156 `(("python2-monotonic" ,python2-monotonic)
1157 ,@(package-propagated-inputs base))))))
1158
1159 (define-public python-textparser
1160 (package
1161 (name "python-textparser")
1162 (version "0.23.0")
1163 (source
1164 (origin
1165 (method url-fetch)
1166 (uri (pypi-uri "textparser" version))
1167 (sha256
1168 (base32
1169 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1170 (build-system python-build-system)
1171 (home-page "https://github.com/eerimoq/textparser")
1172 (synopsis "Fast text parser for Python")
1173 (description "This library provides a text parser written in the Python
1174 language. It aims to be fast.")
1175 (license license:expat)))
1176
1177 (define-public python-aenum
1178 (package
1179 (name "python-aenum")
1180 (version "2.2.3")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "aenum" version))
1185 (sha256
1186 (base32
1187 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1188 (build-system python-build-system)
1189 (arguments
1190 `(#:phases (modify-phases %standard-phases
1191 (replace 'check
1192 (lambda _
1193 (format #t "current working dir ~s~%" (getcwd))
1194 (setenv "PYTHONPATH"
1195 (string-append ".:" (getenv "PYTHONPATH")))
1196 ;; We must run the test suite module directly, as it
1197 ;; fails to define the 'tempdir' variable in scope for
1198 ;; the tests otherwise
1199 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1200 ;; issues/32/running-tests-with-python-setuppy-test).
1201 (invoke "python3" "aenum/test.py")
1202 ;; This one fails with "NameError: name
1203 ;; 'test_pickle_dump_load' is not defined" (see:
1204 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1205 ;; /error-running-the-test_v3py-test-suite).
1206 ;; (invoke "python3" "aenum/test_v3.py")
1207 #t)))))
1208 (home-page "https://bitbucket.org/stoneleaf/aenum")
1209 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1210 (description "The aenum library includes an @code{Enum} base class, a
1211 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1212 class.")
1213 (license license:bsd-3)))
1214
1215 (define-public python-can
1216 (package
1217 (name "python-can")
1218 (version "3.3.3")
1219 (source
1220 (origin
1221 (method url-fetch)
1222 (uri (pypi-uri "python-can" version))
1223 (sha256
1224 (base32
1225 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1226 (build-system python-build-system)
1227 (arguments
1228 `(#:phases (modify-phases %standard-phases
1229 (add-after 'unpack 'relax-version-requirements
1230 (lambda _
1231 (substitute* "setup.py"
1232 (("mock~=2\\.0") "mock")
1233 (("coverage<5") "coverage")
1234 (("pytest~=4\\.3") "pytest")
1235 (("hypothesis~=4\\.56") "hypothesis"))
1236 #t))
1237 (add-after 'unpack 'fix-broken-tests
1238 ;; The tests try to run two scripts it expects should be
1239 ;; in PATH, but they aren't at this time (see:
1240 ;; https://github.com/hardbyte/python-can/issues/805).
1241 (lambda _
1242 (substitute* "test/test_scripts.py"
1243 (("\"can_logger\\.py --help\"") "")
1244 (("\"can_player\\.py --help\"") ""))
1245 #t)))))
1246 (propagated-inputs
1247 `(("python-aenum" ,python-aenum)
1248 ("python-wrapt" ,python-wrapt)))
1249 (native-inputs
1250 `(("python-codecov" ,python-codecov)
1251 ("python-coverage" ,python-coverage)
1252 ("python-future" ,python-future)
1253 ("python-hypothesis" ,python-hypothesis)
1254 ("python-mock" ,python-mock)
1255 ("python-pyserial" ,python-pyserial)
1256 ("python-pytest" ,python-pytest)
1257 ("python-pytest-cov" ,python-pytest-cov)
1258 ("python-pytest-runner" ,python-pytest-runner)
1259 ("python-pytest-timeout" ,python-pytest-timeout)))
1260 (home-page "https://github.com/hardbyte/python-can")
1261 (synopsis "Controller Area Network (CAN) interface module for Python")
1262 (description "This package defines the @code{can} module, which provides
1263 controller area network (CAN) support for Python developers; providing common
1264 abstractions to different hardware devices, and a suite of utilities for
1265 sending and receiving messages on a CAN bus.")
1266 (license license:lgpl3+)))
1267
1268 (define-public python-diskcache
1269 (package
1270 (name "python-diskcache")
1271 (version "4.1.0")
1272 (source
1273 (origin
1274 (method url-fetch)
1275 (uri (pypi-uri "diskcache" version))
1276 (sha256
1277 (base32
1278 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1279 (build-system python-build-system)
1280 (arguments
1281 `(#:tests? #f)) ;test suite not included in the release
1282 (home-page "http://www.grantjenks.com/docs/diskcache/")
1283 (synopsis "Disk and file backed cache library")
1284 (description "DiskCache is a disk and file backed persistent cache.")
1285 (license license:asl2.0)))
1286
1287 (define-public python-bitstruct
1288 (package
1289 (name "python-bitstruct")
1290 (version "8.9.0")
1291 (source
1292 (origin
1293 (method url-fetch)
1294 (uri (pypi-uri "bitstruct" version))
1295 (sha256
1296 (base32
1297 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1298 (build-system python-build-system)
1299 (home-page "https://github.com/eerimoq/bitstruct")
1300 (synopsis "Python values to and C bit field structs converter")
1301 (description "This module performs conversions between Python values and C
1302 bit field structs represented as Python byte strings. It is intended to have
1303 a similar interface as the @code{struct} module from Python, but working on
1304 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1305 (license license:expat)))
1306
1307 (define-public python-cantools
1308 (package
1309 (name "python-cantools")
1310 (version "33.1.1")
1311 (source
1312 (origin
1313 ;; We take the sources from the Git repository as the documentation is
1314 ;; not included with the PyPI archive.
1315 (method git-fetch)
1316 (uri (git-reference
1317 (url "https://github.com/eerimoq/cantools")
1318 (commit version)))
1319 (file-name (git-file-name name version))
1320 (sha256
1321 (base32
1322 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1323 (build-system python-build-system)
1324 (arguments
1325 `(#:phases
1326 (modify-phases %standard-phases
1327 (add-after 'build 'build-doc
1328 (lambda _
1329 ;; See: https://github.com/eerimoq/cantools/issues/190.
1330 (substitute* "README.rst"
1331 (("https://github.com/eerimoq/cantools/raw/master\
1332 /docs/monitor.png")
1333 "monitor.png"))
1334 (with-directory-excursion "docs"
1335 (invoke "make" "man" "info"))))
1336 (add-after 'install 'install-doc
1337 (lambda* (#:key outputs #:allow-other-keys)
1338 (let* ((out (assoc-ref outputs "out"))
1339 (info (string-append out "/share/info"))
1340 (man1 (string-append out "/share/man/man1")))
1341 (format #t "CWD: ~s~%" (getcwd))
1342 (install-file "docs/_build/texinfo/cantools.info" info)
1343 (install-file "docs/_build/man/cantools.1" man1)
1344 #t))))))
1345 (native-inputs
1346 `(("sphinx" ,python-sphinx)
1347 ("texinfo" ,texinfo)))
1348 (propagated-inputs
1349 `(("python-bitstruct" ,python-bitstruct)
1350 ("python-can" ,python-can)
1351 ("python-diskcache" ,python-diskcache)
1352 ("python-textparser" ,python-textparser)))
1353 (home-page "https://github.com/eerimoq/cantools")
1354 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1355 (description "This package includes Controller Area Network (CAN) related
1356 tools that can be used to:
1357 @itemize
1358 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1359 @item encode and decode CAN messages
1360 @item multiplex simple and extended signals
1361 @item diagnose DID encoding and decoding
1362 @item dump the CAN decoder output
1363 @item test CAN nodes
1364 @item generate C source code
1365 @item monitor the CAN bus
1366 @end itemize")
1367 (license license:expat)))
1368
1369 (define-public python-capturer
1370 (package
1371 (name "python-capturer")
1372 (version "2.4")
1373 (source
1374 (origin
1375 (method url-fetch)
1376 (uri (pypi-uri "capturer" version))
1377 (sha256
1378 (base32
1379 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1380 (build-system python-build-system)
1381 (arguments
1382 `(#:tests? #f))
1383 (propagated-inputs
1384 `(("python-humanfriendly" ,python-humanfriendly)))
1385 (home-page "https://capturer.readthedocs.io")
1386 (synopsis "Capture stdout and stderr streams of the current process")
1387 (description
1388 "The capturer package makes it easy to capture the stdout and stderr
1389 streams of the current process and subprocesses. Output can be relayed
1390 to the terminal in real time but is also available to the Python program
1391 for additional processing.")
1392 (license license:expat)))
1393
1394 (define-public python2-capturer
1395 (package-with-python2 python-capturer))
1396
1397 (define-public python-case
1398 (package
1399 (name "python-case")
1400 (version "1.5.3")
1401 (source
1402 (origin
1403 (method url-fetch)
1404 (uri (pypi-uri "case" version))
1405 (sha256
1406 (base32
1407 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1408 (build-system python-build-system)
1409 (propagated-inputs
1410 `(("python-mock" ,python-mock)
1411 ("python-nose" ,python-nose)
1412 ("python-six" ,python-six)
1413 ("python-unittest2" ,python-unittest2)))
1414 (native-inputs
1415 `(("python-coverage" ,python-coverage)))
1416 (home-page "https://github.com/celery/case")
1417 (synopsis "Unittest utilities and convenience methods")
1418 (description
1419 "The @code{case} package provides utilities on top of unittest, including
1420 some helpful Python 2 compatibility convenience methods.")
1421 (license license:bsd-3)))
1422
1423 (define-public python-verboselogs
1424 (package
1425 (name "python-verboselogs")
1426 (version "1.7")
1427 (source
1428 (origin
1429 (method url-fetch)
1430 (uri (pypi-uri "verboselogs" version))
1431 (sha256
1432 (base32
1433 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1434 (build-system python-build-system)
1435 (arguments
1436 `(#:phases
1437 (modify-phases %standard-phases
1438 (replace 'check
1439 (lambda _
1440 ;; Do not run pylint plugin test, as astroid is an old
1441 ;; unsupported version.
1442 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1443 "verboselogs/tests.py"))))))
1444 (native-inputs
1445 `(("python-mock" ,python-mock)
1446 ("python-pytest" ,python-pytest)))
1447 (home-page "https://verboselogs.readthedocs.io")
1448 (synopsis "Verbose logging level for Python's logging module")
1449 (description
1450 "The @code{verboselogs} package extends Python's @code{logging} module to
1451 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1452 (license license:expat)))
1453
1454 (define-public python2-verboselogs
1455 (package-with-python2 python-verboselogs))
1456
1457 (define-public python-coloredlogs
1458 (package
1459 (name "python-coloredlogs")
1460 (version "10.0")
1461 (source
1462 (origin
1463 (method url-fetch)
1464 (uri (pypi-uri "coloredlogs" version))
1465 (sha256
1466 (base32
1467 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1468 (build-system python-build-system)
1469 (arguments
1470 `(;Tests require some updated modules
1471 #:tests? #f))
1472 (propagated-inputs
1473 `(("python-capturer" ,python-capturer)))
1474 (home-page "https://coloredlogs.readthedocs.io")
1475 (synopsis "Colored stream handler for Python's logging module")
1476 (description
1477 "The @code{coloredlogs} package enables colored terminal output for
1478 Python's logging module. The @code{ColoredFormatter} class inherits from
1479 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1480 messages in color.")
1481 (license license:expat)))
1482
1483 (define-public python2-coloredlogs
1484 (package-with-python2 python-coloredlogs))
1485
1486 (define-public python-editorconfig
1487 (package
1488 (name "python-editorconfig")
1489 (version "0.12.2")
1490 (source
1491 (origin
1492 (method url-fetch)
1493 (uri (pypi-uri "EditorConfig" version))
1494 (sha256
1495 (base32
1496 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1497 (build-system python-build-system)
1498 (home-page "https://editorconfig.org/")
1499 (synopsis "EditorConfig bindings for python")
1500 (description "The EditorConfig project consists of a file format for
1501 defining coding styles and a collection of text editor plugins that enable
1502 editors to read the file format and adhere to defined styles. EditorConfig
1503 files are easily readable and they work nicely with version control systems.")
1504 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1505 (license (list license:bsd-2 license:psfl))))
1506
1507 (define-public python-et-xmlfile
1508 (package
1509 (name "python-et-xmlfile")
1510 (version "1.0.1")
1511 (source
1512 (origin
1513 (method url-fetch)
1514 (uri (pypi-uri "et_xmlfile" version))
1515 (sha256
1516 (base32
1517 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1518 (build-system python-build-system)
1519 (arguments
1520 `(#:phases (modify-phases %standard-phases
1521 (replace 'check
1522 (lambda _
1523 (invoke "pytest"))))))
1524 (native-inputs
1525 `(("python-pytest" ,python-pytest)
1526 ("python-lxml" ,python-lxml))) ;used for the tests
1527 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1528 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1529 (description "This Python library is based upon the @code{xmlfile} module
1530 from @code{lxml}. It aims to provide a low memory, compatible implementation
1531 of @code{xmlfile}.")
1532 (license license:expat)))
1533
1534 (define-public python2-et-xmlfile
1535 (package-with-python2 python-et-xmlfile))
1536
1537 (define-public python-openpyxl
1538 (package
1539 (name "python-openpyxl")
1540 (version "2.6.2")
1541 (source
1542 (origin
1543 ;; We use the upstream repository, as the tests are not included in the
1544 ;; PyPI releases.
1545 (method hg-fetch)
1546 (uri (hg-reference
1547 (url "https://bitbucket.org/openpyxl/openpyxl")
1548 (changeset version)))
1549 (file-name (string-append name "-" version "-checkout"))
1550 (sha256
1551 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1552 (build-system python-build-system)
1553 (arguments
1554 `(#:phases (modify-phases %standard-phases
1555 (replace 'check
1556 (lambda _
1557 (invoke "pytest"))))))
1558 (native-inputs
1559 ;; For the test suite.
1560 `(("python-lxml" ,python-lxml)
1561 ("python-pillow" ,python-pillow)
1562 ("python-pytest" ,python-pytest)))
1563 (propagated-inputs
1564 `(("python-et-xmlfile" ,python-et-xmlfile)
1565 ("python-jdcal" ,python-jdcal)))
1566 (home-page "https://openpyxl.readthedocs.io")
1567 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1568 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1569 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1570 standard.")
1571 (license license:expat)))
1572
1573 (define-public python-eventlet
1574 (package
1575 (name "python-eventlet")
1576 (version "0.25.1")
1577 (source
1578 (origin
1579 (method url-fetch)
1580 (uri (pypi-uri "eventlet" version))
1581 (sha256
1582 (base32
1583 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1584 (build-system python-build-system)
1585 (propagated-inputs
1586 `(("python-greenlet" ,python-greenlet)))
1587 (arguments
1588 ;; TODO: Requires unpackaged 'enum-compat'.
1589 '(#:tests? #f))
1590 (home-page "https://eventlet.net")
1591 (synopsis "Concurrent networking library for Python")
1592 (description
1593 "Eventlet is a concurrent networking library for Python that
1594 allows you to change how you run your code, not how you write it.
1595 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1596 Coroutines ensure that the developer uses a blocking style of programming
1597 that is similar to threading, but provide the benefits of non-blocking I/O.
1598 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1599 from the Python interpreter, or as a small part of a larger application.")
1600 (license license:expat)))
1601
1602 (define-public python2-eventlet
1603 (let ((base (package-with-python2
1604 (strip-python2-variant python-eventlet))))
1605 (package (inherit base)
1606 (propagated-inputs
1607 `(("python2-enum34" ,python2-enum34)
1608 ,@(package-propagated-inputs base))))))
1609
1610 (define-public python-six
1611 (package
1612 (name "python-six")
1613 (version "1.14.0")
1614 (source
1615 (origin
1616 (method url-fetch)
1617 (uri (pypi-uri "six" version))
1618 (sha256
1619 (base32
1620 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1621 (build-system python-build-system)
1622 (arguments
1623 `(#:phases
1624 (modify-phases %standard-phases
1625 (replace 'check
1626 (lambda _
1627 (invoke "py.test" "-v"))))))
1628 (native-inputs
1629 `(("python-pytest" ,python-pytest-bootstrap)))
1630 (home-page "https://pypi.org/project/six/")
1631 (synopsis "Python 2 and 3 compatibility utilities")
1632 (description
1633 "Six is a Python 2 and 3 compatibility library. It provides utility
1634 functions for smoothing over the differences between the Python versions with
1635 the goal of writing Python code that is compatible on both Python versions.
1636 Six supports every Python version since 2.5. It is contained in only one
1637 Python file, so it can be easily copied into your project.")
1638 (license license:x11)))
1639
1640 (define-public python2-six
1641 (package-with-python2 python-six))
1642
1643 (define-public python-six-bootstrap
1644 (package
1645 (inherit python-six)
1646 (name "python-six-bootstrap")
1647 (native-inputs `())
1648 (arguments `(#:tests? #f))))
1649
1650 (define-public python2-six-bootstrap
1651 (package-with-python2 python-six-bootstrap))
1652
1653 (define-public python-schedule
1654 (package
1655 (name "python-schedule")
1656 (version "0.4.3")
1657 (source
1658 (origin
1659 (method url-fetch)
1660 (uri (pypi-uri "schedule" version))
1661 (sha256
1662 (base32
1663 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1664 (build-system python-build-system)
1665 (native-inputs
1666 `(("python-pytest" ,python-pytest)
1667 ("python-mock" ,python-mock)))
1668 (home-page "https://github.com/dbader/schedule")
1669 (synopsis "Schedule periodic function calls in Python")
1670 (description
1671 "Schedule is an in-process scheduler for periodic jobs that uses the
1672 builder pattern for configuration. Schedule lets you run Python functions (or
1673 any other callable) periodically at pre-determined intervals using a simple,
1674 human-friendly syntax.")
1675 (license license:expat)))
1676
1677 (define-public python2-schedule
1678 (package-with-python2 python-schedule))
1679
1680 (define-public python-mechanize
1681 (package
1682 (name "python-mechanize")
1683 (version "0.4.5")
1684 (source
1685 (origin
1686 (method url-fetch)
1687 (uri (pypi-uri "mechanize" version))
1688 (sha256
1689 (base32
1690 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1691 (build-system python-build-system)
1692 (propagated-inputs
1693 `(("python-html5lib" ,python-html5lib)))
1694 (home-page "https://github.com/python-mechanize/mechanize")
1695 (synopsis
1696 "Stateful programmatic web browsing in Python")
1697 (description
1698 "Mechanize implements stateful programmatic web browsing in Python,
1699 after Andy Lester’s Perl module WWW::Mechanize.")
1700 (license license:bsd-3)))
1701
1702 (define-public python2-mechanize
1703 (package-with-python2 python-mechanize))
1704
1705 (define-public python-simplejson
1706 (package
1707 (name "python-simplejson")
1708 (version "3.17.0")
1709 (source
1710 (origin
1711 (method url-fetch)
1712 (uri (pypi-uri "simplejson" version))
1713 (sha256
1714 (base32
1715 "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
1716 (build-system python-build-system)
1717 (home-page "http://simplejson.readthedocs.org/en/latest/")
1718 (synopsis
1719 "Json library for Python")
1720 (description
1721 "JSON (JavaScript Object Notation) is a subset of JavaScript
1722 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1723 format.
1724
1725 Simplejson exposes an API familiar to users of the standard library marshal
1726 and pickle modules. It is the externally maintained version of the json
1727 library contained in Python 2.6, but maintains compatibility with Python 2.5
1728 and (currently) has significant performance advantages, even without using
1729 the optional C extension for speedups. Simplejson is also supported on
1730 Python 3.3+.")
1731 (license license:x11)))
1732
1733 (define-public python2-simplejson
1734 (package-with-python2 python-simplejson))
1735
1736
1737 (define-public python-pyicu
1738 (package
1739 (name "python-pyicu")
1740 (version "2.4.3")
1741 (source
1742 (origin
1743 (method url-fetch)
1744 (uri (pypi-uri "PyICU" version))
1745 (sha256
1746 (base32
1747 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1748 (build-system python-build-system)
1749 (inputs
1750 `(("icu4c" ,icu4c)))
1751 (native-inputs
1752 `(("python-pytest" ,python-pytest)
1753 ("python-six" ,python-six)))
1754 (home-page "https://github.com/ovalhub/pyicu")
1755 (synopsis "Python extension wrapping the ICU C++ API")
1756 (description
1757 "PyICU is a python extension wrapping the ICU C++ API.")
1758 (license license:x11)))
1759
1760 (define-public python2-pyicu
1761 (package-with-python2 python-pyicu))
1762
1763 (define-public python-dogtail
1764 (package
1765 (name "python-dogtail")
1766 (version "0.9.11")
1767 (source (origin
1768 (method url-fetch)
1769 (uri
1770 (string-append
1771 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1772 "dogtail-" version ".tar.gz"))
1773 (sha256
1774 (base32
1775 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1776 (build-system python-build-system)
1777 (arguments
1778 `(#:tests? #f ; TODO Launching dbus for the tests
1779 ; fails
1780 #:phases
1781 (modify-phases %standard-phases
1782 (replace 'check
1783 (lambda* (#:key tests? #:allow-other-keys)
1784 (when tests?
1785 (system "Xvfb :1 &")
1786 (setenv "DISPLAY" ":1")
1787 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1788 #t)))))
1789 (propagated-inputs
1790 `(("python-pygobject" ,python-pygobject)
1791 ("python-pycairo" ,python-pycairo)
1792 ("python-pyatspi" ,python-pyatspi)))
1793 (native-inputs
1794 `(("python-nose" ,python-nose)
1795 ("gtk+" ,gtk+)
1796 ("xvfb" ,xorg-server)
1797 ("dbus" ,dbus)
1798 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1799 ("gobject-introspection" ,gobject-introspection)))
1800 (home-page "https://gitlab.com/dogtail/dogtail/")
1801 (synopsis "GUI test tool and automation framework written in Python")
1802 (description
1803 "Dogtail is a GUI test tool and automation framework written in Python.
1804 It uses Accessibility (a11y) technologies to communicate with desktop
1805 applications. dogtail scripts are written in Python and executed like any
1806 other Python program.")
1807 (license license:gpl2+)))
1808
1809 (define-public python2-dogtail
1810 (package-with-python2 python-dogtail))
1811
1812 (define-public python-empy
1813 (package
1814 (name "python-empy")
1815 (version "3.3.3")
1816 (source (origin
1817 (method url-fetch)
1818 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1819 version ".tar.gz"))
1820 (sha256
1821 (base32
1822 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1823 (build-system python-build-system)
1824 (arguments
1825 `(#:tests? #f)) ; python2 only
1826 (home-page "http://www.alcyone.com/software/empy/")
1827 (synopsis "Templating system for Python")
1828 (description
1829 "EmPy is a system for embedding Python expressions and statements in
1830 template text; it takes an EmPy source file, processes it, and produces
1831 output. This is accomplished via expansions, which are special signals to the
1832 EmPy system and are set off by a special prefix (by default the at sign, @@).
1833 EmPy can expand arbitrary Python expressions and statements in this way, as
1834 well as a variety of special forms. Textual data not explicitly delimited in
1835 this way is sent unaffected to the output, allowing Python to be used in
1836 effect as a markup language. Also supported are callbacks via hooks,
1837 recording and playback via diversions, and dynamic, chainable filters. The
1838 system is highly configurable via command line options and embedded
1839 commands.")
1840 (license license:lgpl2.1+)))
1841
1842 (define-public python2-empy
1843 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1844 (package
1845 (inherit base)
1846 (arguments `(,@(package-arguments base)
1847 #:tests? #t)))))
1848
1849 (define-public python2-element-tree
1850 (package
1851 (name "python2-element-tree")
1852 (version "1.2.6")
1853 (source (origin
1854 (method url-fetch)
1855 (uri (string-append
1856 "http://effbot.org/media/downloads/elementtree-"
1857 version "-20050316.tar.gz"))
1858 (sha256
1859 (base32
1860 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1861 (build-system python-build-system)
1862 (arguments
1863 `(#:python ,python-2 ; seems to be part of Python 3
1864 #:tests? #f)) ; no 'test' sub-command
1865 (synopsis "Toolkit for XML processing in Python")
1866 (description
1867 "ElementTree is a Python library supporting lightweight XML processing.")
1868 (home-page "https://effbot.org/zone/element-index.htm")
1869 (license (license:x11-style
1870 "http://docs.python.org/2/license.html"
1871 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1872
1873 (define-public python2-pybugz
1874 (package
1875 (name "python2-pybugz")
1876 (version "0.6.11")
1877 (source (origin
1878 (method url-fetch)
1879 (uri (string-append
1880 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1881 version ".tar.gz"))
1882 (sha256
1883 (base32
1884 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1885 (patches (search-patches "pybugz-stty.patch"
1886 "pybugz-encode-error.patch"))))
1887 (build-system python-build-system)
1888 (arguments
1889 `(#:python ,python-2 ; SyntaxError with Python 3
1890 #:tests? #f)) ; no 'test' sub-command
1891 (propagated-inputs
1892 `(("element-tree" ,python2-element-tree)))
1893 (synopsis "Python and command-line interface to Bugzilla")
1894 (description
1895 "PyBugz is a Python library and command-line tool to query the Bugzilla
1896 bug tracking system. It is meant as an aid to speed up interaction with the
1897 bug tracker.")
1898 (home-page "http://www.liquidx.net/pybugz/")
1899 (license license:gpl2)))
1900
1901 (define-public python2-enum
1902 (package
1903 (name "python2-enum")
1904 (version "0.4.6")
1905 (source (origin
1906 (method url-fetch)
1907 (uri (pypi-uri "enum" version))
1908 (sha256
1909 (base32
1910 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1911 (build-system python-build-system)
1912 (arguments
1913 `(#:python ,python-2))
1914 (home-page "https://pypi.org/project/enum/")
1915 (synopsis "Robust enumerated type support in Python")
1916 (description
1917 "This provides a module for robust enumerations in Python. It has
1918 been superseded by the Python standard library and is provided only for
1919 compatibility.")
1920 ;; Choice of either license.
1921 (license (list license:gpl3+ license:psfl))))
1922
1923 (define-public python-enum34
1924 (package
1925 (name "python-enum34")
1926 (version "1.1.6")
1927 (source
1928 (origin
1929 (method url-fetch)
1930 (uri (pypi-uri "enum34" version))
1931 (sha256
1932 (base32
1933 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1934 (build-system python-build-system)
1935 (home-page "https://pypi.org/project/enum34/")
1936 (synopsis "Backported Python 3.4 Enum")
1937 (description
1938 "Enum34 is the new Python stdlib enum module available in Python 3.4
1939 backported for previous versions of Python from 2.4 to 3.3.")
1940 (license license:bsd-3)))
1941
1942 (define-public python2-enum34
1943 (package-with-python2 python-enum34))
1944
1945 (define-public python-parse-type
1946 (package
1947 (name "python-parse-type")
1948 (version "0.4.2")
1949 (source
1950 (origin
1951 (method url-fetch)
1952 (uri (pypi-uri "parse_type" version))
1953 (sha256
1954 (base32
1955 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1956 (build-system python-build-system)
1957 (propagated-inputs
1958 `(("python-six" ,python-six)
1959 ("python-parse" ,python-parse)))
1960 (native-inputs
1961 `(("python-pytest" ,python-pytest)
1962 ("python-pytest-runner" ,python-pytest-runner)))
1963 (home-page "https://github.com/jenisys/parse_type")
1964 (synopsis "Extended parse module")
1965 (description
1966 "Parse_type extends the python parse module.")
1967 (properties
1968 `((python2-variant . ,(delay python2-parse-type))))
1969 (license license:bsd-3)))
1970
1971 (define-public python2-parse-type
1972 (let ((base (package-with-python2
1973 (strip-python2-variant python-parse-type))))
1974 (package (inherit base)
1975 (propagated-inputs
1976 `(("python2-enum34" ,python2-enum34)
1977 ,@(package-propagated-inputs base))))))
1978
1979 (define-public python-parse
1980 (package
1981 (name "python-parse")
1982 (version "1.8.4")
1983 (source
1984 (origin
1985 (method url-fetch)
1986 (uri (pypi-uri "parse" version))
1987 (sha256
1988 (base32
1989 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1990 (build-system python-build-system)
1991 (arguments
1992 `(#:phases
1993 (modify-phases %standard-phases
1994 (replace 'check
1995 (lambda _ (invoke "python" "test_parse.py"))))))
1996 (home-page "https://github.com/r1chardj0n3s/parse")
1997 (synopsis "Parse strings")
1998 (description
1999 "Parse strings using a specification based on the Python @code{format()}
2000 syntax.")
2001 (license license:x11)))
2002
2003 (define-public python-polib
2004 (package
2005 (name "python-polib")
2006 (version "1.0.8")
2007 (source (origin
2008 (method url-fetch)
2009 (uri (pypi-uri "polib" version))
2010 (sha256
2011 (base32
2012 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2013 (build-system python-build-system)
2014 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2015 (synopsis "Manipulate, create and modify gettext files")
2016 (description "Polib can manipulate any gettext format (po, pot and mo)
2017 files. It can be used to create po files from scratch or to modify
2018 existing ones.")
2019 (license license:expat)))
2020
2021 (define-public python2-polib
2022 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2023 (package
2024 (inherit base)
2025 (arguments `(,@(package-arguments base)
2026 ;; Tests don't work with python2.
2027 #:tests? #f)))))
2028
2029 (define-public python-poyo
2030 (package
2031 (name "python-poyo")
2032 (version "0.5.0")
2033 (source
2034 (origin
2035 (method url-fetch)
2036 (uri (pypi-uri "poyo" version))
2037 (sha256
2038 (base32
2039 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2040 (build-system python-build-system)
2041 (home-page "https://github.com/hackebrot/poyo")
2042 (synopsis "Lightweight YAML Parser for Python")
2043 (description
2044 "This package provides a lightweight YAML Parser for Python. It supports
2045 only a chosen subset of the YAML format that is required to parse cookiecutter
2046 user configuration files. It does not have support for serializing into YAML
2047 and is not compatible with JSON.")
2048 (license license:expat)))
2049
2050 (define-public scons
2051 (package
2052 (name "scons")
2053 (version "3.0.4")
2054 (source (origin
2055 (method git-fetch)
2056 (uri (git-reference
2057 (url "https://github.com/SCons/scons")
2058 (commit version)))
2059 (file-name (git-file-name name version))
2060 (sha256
2061 (base32
2062 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2063 (build-system python-build-system)
2064 (arguments
2065 `(#:use-setuptools? #f ; still relies on distutils
2066 #:tests? #f ; no 'python setup.py test' command
2067 #:phases
2068 (modify-phases %standard-phases
2069 (add-before 'build 'bootstrap
2070 (lambda _
2071 (substitute* "src/engine/SCons/compat/__init__.py"
2072 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2073 "sys.modules[new] = __import__(old)"))
2074 (substitute* "src/engine/SCons/Platform/__init__.py"
2075 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2076 "mod = __import__(full_name)"))
2077 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2078 (chdir "build/scons")
2079 #t)))))
2080 (home-page "https://scons.org/")
2081 (synopsis "Software construction tool written in Python")
2082 (description
2083 "SCons is a software construction tool. Think of SCons as an improved,
2084 cross-platform substitute for the classic Make utility with integrated
2085 functionality similar to autoconf/automake and compiler caches such as ccache.
2086 In short, SCons is an easier, more reliable and faster way to build
2087 software.")
2088 (license license:x11)))
2089
2090 (define-public scons-python2
2091 (package
2092 (inherit (package-with-python2 scons))
2093 (name "scons-python2")))
2094
2095 (define-public python-extras
2096 (package
2097 (name "python-extras")
2098 (version "1.0.0")
2099 (source
2100 (origin
2101 (method url-fetch)
2102 (uri (pypi-uri "extras" version))
2103 (sha256
2104 (base32
2105 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2106 (build-system python-build-system)
2107 (arguments
2108 ;; FIXME: Circular dependency on testtools.
2109 '(#:tests? #f))
2110 (home-page "https://github.com/testing-cabal/extras")
2111 (synopsis "Useful extensions to the Python standard library")
2112 (description
2113 "Extras is a set of extensions to the Python standard library.")
2114 (license license:expat)))
2115
2116 (define-public python2-extras
2117 (package-with-python2 python-extras))
2118
2119 (define-public python-mimeparse
2120 (package
2121 (name "python-mimeparse")
2122 (version "1.6.0")
2123 (source
2124 (origin
2125 (method url-fetch)
2126 (uri (pypi-uri "python-mimeparse" version))
2127 (sha256
2128 (base32
2129 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2130 (build-system python-build-system)
2131 (arguments
2132 '(#:phases
2133 (modify-phases %standard-phases
2134 (replace 'check
2135 (lambda _
2136 (invoke "./mimeparse_test.py"))))))
2137 (home-page
2138 "https://github.com/dbtsai/python-mimeparse")
2139 (synopsis "Python library for parsing MIME types")
2140 (description
2141 "Mimeparse provides basic functions for parsing MIME type names and
2142 matching them against a list of media-ranges.")
2143 (license license:expat)))
2144
2145 (define-public python2-mimeparse
2146 (package-with-python2 python-mimeparse))
2147
2148 (define-public python-miniboa
2149 (package
2150 (name "python-miniboa")
2151 (version "1.0.7")
2152 (source
2153 (origin
2154 (method url-fetch)
2155 (uri (pypi-uri "miniboa" version))
2156 (sha256
2157 (base32
2158 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2159 (build-system python-build-system)
2160 (home-page "https://github.com/shmup/miniboa")
2161 (synopsis "Simple, single-threaded Telnet server")
2162 (description
2163 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2164 server.")
2165 (license license:asl2.0)))
2166
2167 (define-public python2-miniboa
2168 (package-with-python2 python-miniboa))
2169
2170 (define-public python-pafy
2171 (package
2172 (name "python-pafy")
2173 (version "0.5.3.1")
2174 (source
2175 (origin
2176 (method url-fetch)
2177 (uri (pypi-uri "pafy" version))
2178 (sha256
2179 (base32
2180 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2181 (build-system python-build-system)
2182 (arguments
2183 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2184 (propagated-inputs
2185 ;; Youtube-dl is a python package which is imported in the file
2186 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2187 `(("youtube-dl" ,youtube-dl)))
2188 (home-page "https://np1.github.io/pafy/")
2189 (synopsis "Retrieve YouTube content and metadata")
2190 (description
2191 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2192 (license license:lgpl3+)))
2193
2194 (define-public python2-funcsigs
2195 (package
2196 (name "python2-funcsigs")
2197 (version "1.0.2")
2198 (source (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "funcsigs" version))
2201 (sha256
2202 (base32
2203 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2204 (build-system python-build-system)
2205 (arguments
2206 `(#:python ,python-2))
2207 (native-inputs
2208 `(("python2-unittest2" ,python2-unittest2)))
2209 (home-page "http://funcsigs.readthedocs.org")
2210 (synopsis "Python function signatures from PEP362")
2211 (description
2212 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2213 (license license:asl2.0)))
2214
2215 (define-public python2-funcsigs-bootstrap
2216 (package
2217 (inherit python2-funcsigs)
2218 (name "python2-funcsigs-bootstrap")
2219 (native-inputs `())
2220 (arguments
2221 `(#:tests? #f
2222 ,@(package-arguments python2-funcsigs)))))
2223
2224 (define-public python-py
2225 (package
2226 (name "python-py")
2227 (version "1.8.1")
2228 (source
2229 (origin
2230 (method url-fetch)
2231 (uri (pypi-uri "py" version))
2232 (sha256
2233 (base32
2234 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2235 (build-system python-build-system)
2236 (arguments
2237 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2238 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2239 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2240 ;; Is this module globally installed?"
2241 '(#:tests? #f))
2242 (native-inputs
2243 `(("python-setuptools-scm" ,python-setuptools-scm)))
2244 (home-page "https://github.com/pytest-dev/py")
2245 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2246 (description
2247 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2248 code introspection, and logging.")
2249 (license license:expat)))
2250
2251 (define-public python2-py
2252 (package-with-python2 python-py))
2253
2254 ;; Recent versions of python-fixtures and python-testrepository need
2255 ;; python-pbr for packaging, which itself needs these two packages for
2256 ;; testing.
2257 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2258 ;; same source, just without any test dependencies and with tests disabled.
2259 ;; python-pbr-minmal is then used to package python-fixtures and
2260 ;; python-testrepository.
2261 ;; Strictly speaking we currently could remove the test-requirements from the
2262 ;; normal python-pbr package (and save this package) since test are disabled
2263 ;; there anyway. But this may change in future.
2264 (define-public python-pbr-minimal
2265 (package
2266 (name "python-pbr-minimal")
2267 (version "3.0.1")
2268 (source
2269 (origin
2270 (method url-fetch)
2271 (uri (pypi-uri "pbr" version))
2272 (sha256
2273 (base32
2274 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2275 (build-system python-build-system)
2276 (arguments
2277 `(#:tests? #f))
2278 (home-page "https://docs.openstack.org/pbr/latest/")
2279 (synopsis "Minimal build of python-pbr used for bootstrapping")
2280 (description
2281 "Used only for bootstrapping python2-pbr, you should not need this.")
2282 (license license:asl2.0)))
2283
2284 (define-public python2-pbr-minimal
2285 (package-with-python2 python-pbr-minimal))
2286
2287 (define-public python-pbr
2288 (package
2289 (inherit python-pbr-minimal)
2290 (name "python-pbr")
2291 (arguments
2292 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2293 (propagated-inputs
2294 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2295 (native-inputs
2296 `(("python-fixtures" ,python-fixtures-bootstrap)
2297 ;; discover, coverage, hacking, subunit
2298 ("python-mock" ,python-mock)
2299 ("python-six" ,python-six)
2300 ("python-sphinx" ,python-sphinx)
2301 ("python-testrepository" ,python-testrepository-bootstrap)
2302 ("python-testresources" ,python-testresources-bootstrap)
2303 ("python-testscenarios" ,python-testscenarios-bootstrap)
2304 ("python-testtools" ,python-testtools-bootstrap)
2305 ("python-virtualenv" ,python-virtualenv)))
2306 (synopsis "Enhance the default behavior of Python’s setuptools")
2307 (description
2308 "Python Build Reasonableness (PBR) is a library that injects some useful
2309 and sensible default behaviors into your setuptools run. It will set
2310 versions, process requirements files and generate AUTHORS and ChangeLog file
2311 from git information.
2312 ")))
2313
2314 (define-public python2-pbr
2315 (package-with-python2 python-pbr))
2316
2317 (define-public python-pyrsistent
2318 (package
2319 (name "python-pyrsistent")
2320 (version "0.16.0")
2321 (home-page "https://github.com/tobgu/pyrsistent")
2322 (source (origin
2323 (method url-fetch)
2324 (uri (pypi-uri "pyrsistent" version))
2325 (sha256
2326 (base32
2327 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2328 (build-system python-build-system)
2329 (arguments
2330 '(#:phases (modify-phases %standard-phases
2331 ;; The package works fine with newer Pytest and Hypothesis, but
2332 ;; has pinned older versions to stay compatible with Python 2.
2333 (add-before 'check 'loosen-pytest-requirement
2334 (lambda _
2335 (substitute* "setup.py"
2336 (("pytest<5") "pytest")
2337 (("hypothesis<5") "hypothesis"))
2338 #t)))))
2339 (native-inputs
2340 `(("python-hypothesis" ,python-hypothesis)
2341 ("python-pytest" ,python-pytest)
2342 ("python-pytest-runner" ,python-pytest-runner)))
2343 (propagated-inputs
2344 `(("python-six" ,python-six)))
2345 (synopsis "Persistent data structures for Python")
2346 (description
2347 "Pyrsistent is a number of persistent collections (by some referred to as
2348 functional data structures). Persistent in the sense that they are immutable.
2349
2350 All methods on a data structure that would normally mutate it instead return a
2351 new copy of the structure containing the requested updates. The original
2352 structure is left untouched.")
2353 (license license:expat)))
2354
2355 (define-public python2-pyrsistent
2356 (package-with-python2 python-pyrsistent))
2357
2358 (define-public python-exif-read
2359 (package
2360 (name "python-exif-read")
2361 (version "2.1.2")
2362 (source (origin
2363 (method url-fetch)
2364 (uri (pypi-uri "ExifRead" version))
2365 (sha256
2366 (base32
2367 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2368 (build-system python-build-system)
2369 (arguments `(#:tests? #f)) ; no tests
2370 (home-page "https://github.com/ianare/exif-py")
2371 (synopsis "Python library to extract EXIF data from image files")
2372 (description
2373 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2374 files.")
2375 (license license:bsd-3)))
2376
2377 (define-public python2-exif-read
2378 (package-with-python2 python-exif-read))
2379
2380 (define-public python-pyld
2381 (package
2382 (name "python-pyld")
2383 (version "1.0.5")
2384 (source (origin
2385 (method url-fetch)
2386 (uri (pypi-uri "PyLD" version))
2387 (sha256
2388 (base32
2389 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2390 (build-system python-build-system)
2391 (home-page "https://github.com/digitalbazaar/pyld")
2392 (synopsis "Python implementation of the JSON-LD specification")
2393 (description
2394 "PyLD is an implementation of the JSON-LD specification.")
2395 (license license:bsd-3)))
2396
2397 (define-public python2-pyld
2398 (package-with-python2 python-pyld))
2399
2400 (define-public python-cli-helpers
2401 (package
2402 (name "python-cli-helpers")
2403 (version "2.0.1")
2404 (source
2405 (origin
2406 ;; There's no source tarball on PyPI.
2407 (method git-fetch)
2408 (uri (git-reference
2409 (url "https://github.com/dbcli/cli_helpers")
2410 (commit (string-append "v" version))))
2411 (file-name (git-file-name name version))
2412 (sha256
2413 (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
2414 (build-system python-build-system)
2415 (native-inputs
2416 `(("python-pytest" ,python-pytest)))
2417 (propagated-inputs
2418 `(("python-wcwidth" ,python-wcwidth)
2419 ("python-configobj" ,python-configobj)
2420 ("python-tabulate" ,python-tabulate)
2421 ("python-terminaltables" ,python-terminaltables)))
2422 (home-page "https://github.com/dbcli/cli_helpers")
2423 (synopsis "Helpers for building command-line apps")
2424 (description
2425 "CLI Helpers is a Python package that makes it easy to perform common
2426 tasks when building command-line apps. It's a helper library for command-line
2427 interfaces.")
2428 (license license:bsd-3)))
2429
2430 (define-public python-click
2431 (package
2432 (name "python-click")
2433 (version "7.1.2")
2434 (source
2435 (origin
2436 (method url-fetch)
2437 (uri (pypi-uri "click" version))
2438 (sha256
2439 (base32
2440 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
2441 (build-system python-build-system)
2442 (arguments
2443 `(#:phases
2444 (modify-phases %standard-phases
2445 (add-after 'unpack 'fix-paths
2446 (lambda* (#:key inputs #:allow-other-keys)
2447 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2448 "cross-libc" "libc"))))
2449 (substitute* "src/click/_unicodefun.py"
2450 (("'locale'")
2451 (string-append "'" glibc "/bin/locale'"))))
2452 #t))
2453 (replace 'check
2454 (lambda _
2455 (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
2456 (invoke "python" "-m" "pytest"))))))
2457 (native-inputs
2458 `(("python-pytest" ,python-pytest)))
2459 (home-page "https://palletsprojects.com/p/click/")
2460 (synopsis "Command line library for Python")
2461 (description
2462 "Click is a Python package for creating command line interfaces in a
2463 composable way with as little code as necessary. Its name stands for
2464 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2465 with sensible defaults out of the box.")
2466 (license license:bsd-3)))
2467
2468 (define-public python2-click
2469 (package-with-python2 python-click))
2470
2471 (define-public python-click-5
2472 (package (inherit python-click)
2473 (name "python-click")
2474 (version "5.1")
2475 (source
2476 (origin
2477 (method url-fetch)
2478 (uri (pypi-uri "click" version))
2479 (sha256
2480 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2481 (arguments `())))
2482
2483 (define-public python-wheel
2484 (package
2485 (name "python-wheel")
2486 (version "0.33.6")
2487 (source
2488 (origin
2489 (method url-fetch)
2490 (uri (pypi-uri "wheel" version))
2491 (sha256
2492 (base32
2493 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2494 (build-system python-build-system)
2495 (arguments
2496 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2497 ;; fails to find the newly-built bdist_wheel library, even though it is
2498 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2499 '(#:tests? #f))
2500 (home-page "https://bitbucket.org/pypa/wheel/")
2501 (synopsis "Format for built Python packages")
2502 (description
2503 "A wheel is a ZIP-format archive with a specially formatted filename and
2504 the @code{.whl} extension. It is designed to contain all the files for a PEP
2505 376 compatible install in a way that is very close to the on-disk format. Many
2506 packages will be properly installed with only the @code{Unpack} step and the
2507 unpacked archive preserves enough information to @code{Spread} (copy data and
2508 scripts to their final locations) at any later time. Wheel files can be
2509 installed with a newer @code{pip} or with wheel's own command line utility.")
2510 (license license:expat)))
2511
2512 (define-public python2-wheel
2513 (package-with-python2 python-wheel))
2514
2515 (define-public python-vcversioner
2516 (package
2517 (name "python-vcversioner")
2518 (version "2.16.0.0")
2519 (source
2520 (origin
2521 (method url-fetch)
2522 (uri (pypi-uri "vcversioner" version))
2523 (sha256
2524 (base32
2525 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2526 (build-system python-build-system)
2527 (synopsis "Python library for version number discovery")
2528 (description "Vcversioner is a Python library that inspects tagging
2529 information in a variety of version control systems in order to discover
2530 version numbers.")
2531 (home-page "https://github.com/habnabit/vcversioner")
2532 (license license:isc)))
2533
2534 (define-public python2-vcversioner
2535 (package-with-python2 python-vcversioner))
2536
2537 (define-public python-jdcal
2538 (package
2539 (name "python-jdcal")
2540 (version "1.4")
2541 (source
2542 (origin
2543 (method url-fetch)
2544 (uri (pypi-uri "jdcal" version))
2545 (sha256
2546 (base32
2547 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2548 (build-system python-build-system)
2549 (arguments
2550 `(#:phases (modify-phases %standard-phases
2551 (replace 'check
2552 (lambda _
2553 (invoke "pytest"))))))
2554 (native-inputs
2555 `(("python-pytest" ,python-pytest)))
2556 (home-page "https://github.com/phn/jdcal")
2557 (synopsis "Functions to convert between Julian dates Gregorian dates")
2558 (description "This Python library provides functions for converting
2559 between Julian dates and Gregorian dates.")
2560 (license license:bsd-2)))
2561
2562 (define-public python2-jdcal
2563 (package-with-python2 python-jdcal))
2564
2565 (define-public python-jsondiff
2566 (package
2567 (name "python-jsondiff")
2568 (version "1.2.0")
2569 (source
2570 (origin
2571 (method url-fetch)
2572 (uri (pypi-uri "jsondiff" version))
2573 (sha256
2574 (base32
2575 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2576 (build-system python-build-system)
2577 (native-inputs
2578 `(("python-nose" ,python-nose)
2579 ("python-nose-random" ,python-nose-random)))
2580 (home-page
2581 "https://github.com/fzumstein/jsondiff")
2582 (synopsis "Compare JSON and JSON-like structures in Python")
2583 (description "@code{jsondiff} is a Python library which lets you
2584 compare, diff, and patch JSON and JSON-like structures in Python.")
2585 (license license:expat)))
2586
2587 (define-public python-jsonschema
2588 (package
2589 (name "python-jsonschema")
2590 (version "3.2.0")
2591 (source (origin
2592 (method url-fetch)
2593 (uri (pypi-uri "jsonschema" version))
2594 (sha256
2595 (base32
2596 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2597 (build-system python-build-system)
2598 (arguments
2599 '(#:phases
2600 (modify-phases %standard-phases
2601 (replace 'check
2602 (lambda* (#:key inputs outputs #:allow-other-keys)
2603 (add-installed-pythonpath inputs outputs)
2604 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2605 (invoke "trial" "jsonschema"))))))
2606 (native-inputs
2607 `(("python-setuptools_scm" ,python-setuptools-scm)
2608 ("python-twisted" ,python-twisted)))
2609 (propagated-inputs
2610 `(("python-attrs" ,python-attrs)
2611 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2612 ("python-pyrsistent" ,python-pyrsistent)
2613 ("python-six" ,python-six)))
2614 (home-page "https://github.com/Julian/jsonschema")
2615 (synopsis "Implementation of JSON Schema for Python")
2616 (description
2617 "Jsonschema is an implementation of JSON Schema for Python.")
2618 (license license:expat)
2619 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2620
2621 (define-public python2-jsonschema
2622 (let ((jsonschema (package-with-python2
2623 (strip-python2-variant python-jsonschema))))
2624 (package (inherit jsonschema)
2625 (propagated-inputs
2626 `(("python2-functools32" ,python2-functools32)
2627 ,@(package-propagated-inputs jsonschema))))))
2628
2629 (define-public python-schema
2630 (package
2631 (name "python-schema")
2632 (version "0.6.6")
2633 (source
2634 (origin
2635 (method url-fetch)
2636 (uri (pypi-uri "schema" version))
2637 (sha256
2638 (base32
2639 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2640 (build-system python-build-system)
2641 (native-inputs
2642 `(("python-pytest" ,python-pytest)))
2643 (home-page "https://github.com/keleshev/schema")
2644 (synopsis "Simple data validation library")
2645 (description
2646 "@code{python-schema} is a library for validating Python data
2647 structures, such as those obtained from config-files, forms, external
2648 services or command-line parsing, converted from JSON/YAML (or
2649 something else) to Python data-types.")
2650 (license license:psfl)))
2651
2652 (define-public python2-schema
2653 (package-with-python2 python-schema))
2654
2655 (define-public python-schema-0.5
2656 (package (inherit python-schema)
2657 (version "0.5.0")
2658 (source
2659 (origin
2660 (method url-fetch)
2661 (uri (pypi-uri "schema" version))
2662 (sha256
2663 (base32
2664 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2665
2666 (define-public python2-schema-0.5
2667 (package-with-python2 python-schema-0.5))
2668
2669 (define-public python-kitchen
2670 (package
2671 (name "python-kitchen")
2672 (version "1.2.5")
2673 (source
2674 (origin
2675 (method url-fetch)
2676 (uri (pypi-uri "kitchen" version))
2677 (sha256
2678 (base32
2679 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2680 (build-system python-build-system)
2681 (propagated-inputs
2682 `(("python-chardet" ,python-chardet)))
2683 (home-page "https://github.com/fedora-infra/kitchen")
2684 (synopsis "Python API for snippets")
2685 (description "@code{kitchen} module provides a python API for all sorts of
2686 little useful snippets of code that everybody ends up writing for their projects
2687 but never seem big enough to build an independent release. Use kitchen and stop
2688 cutting and pasting that code over and over.")
2689 (license (list license:lgpl2.1+
2690 ;; subprocess.py, test_subprocess.py,
2691 ;; kitchen/pycompat25/defaultdict.py:
2692 license:psfl))))
2693
2694 (define-public python2-kitchen
2695 (package-with-python2 python-kitchen))
2696
2697 (define-public python-unidecode
2698 (package
2699 (name "python-unidecode")
2700 (version "1.1.1")
2701 (source (origin
2702 (method url-fetch)
2703 (uri (pypi-uri "Unidecode" version))
2704 (sha256
2705 (base32
2706 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2707 (build-system python-build-system)
2708 (home-page "https://pypi.org/project/Unidecode/")
2709 (synopsis "ASCII transliterations of Unicode text")
2710 (description
2711 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2712 useful when integrating with legacy code that doesn't support Unicode, or for
2713 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2714 machine identifiers from human-readable Unicode strings that should still be
2715 somewhat intelligible.")
2716 (license license:gpl2+)))
2717
2718 (define-public python2-unidecode
2719 (package-with-python2 python-unidecode))
2720
2721 (define-public python-text-unidecode
2722 (package
2723 (name "python-text-unidecode")
2724 (version "1.3")
2725 (source (origin
2726 (method url-fetch)
2727 (uri (pypi-uri "text-unidecode" version))
2728 (sha256
2729 (base32
2730 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2731 (build-system python-build-system)
2732 (arguments
2733 '(#:phases (modify-phases %standard-phases
2734 (replace 'check
2735 (lambda _
2736 (setenv "PYTHONPATH"
2737 (string-append "./build/lib:"
2738 (getenv "PYTHONPATH")))
2739 (invoke "pytest" "-vv"))))))
2740 (native-inputs
2741 `(("python-pytest" ,python-pytest)))
2742 (home-page "https://github.com/kmike/text-unidecode/")
2743 (synopsis "Decode Unicode data")
2744 (description
2745 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2746 Perl library. It can create ASCII representations of Unicode data. In general
2747 users should prefer the @code{python-unidecode} package which offers better
2748 memory usage and transliteration quality.")
2749 ;; The user can choose either license.
2750 (license (list license:clarified-artistic license:gpl2+))))
2751
2752 (define-public python2-text-unidecode
2753 (package-with-python2 python-text-unidecode))
2754
2755 (define-public python-pyjwt
2756 (package
2757 (name "python-pyjwt")
2758 (version "1.7.1")
2759 (source
2760 (origin
2761 (method url-fetch)
2762 (uri (pypi-uri "PyJWT" version))
2763 (sha256
2764 (base32
2765 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2766 (modules '((guix build utils)))
2767 (snippet
2768 '(begin
2769 (for-each delete-file-recursively
2770 (find-files "." "\\.pyc$"))
2771 #t))))
2772 (build-system python-build-system)
2773 (arguments
2774 '(#:phases (modify-phases %standard-phases
2775 (replace 'check
2776 (lambda _
2777 ;; Mimic upstream commit 3a20892442b34c7 to get
2778 ;; rid of dependency on pytest-runner < 5.0.
2779 ;; Remove substitution for PyJWT > 1.7.1.
2780 (substitute* "setup.py"
2781 ((".*pytest-runner.*")
2782 ""))
2783 (invoke "pytest" "-vv"))))))
2784 (native-inputs
2785 `(("python-pytest" ,python-pytest)
2786 ("python-pytest-cov" ,python-pytest-cov)))
2787 (home-page "https://github.com/progrium/pyjwt")
2788 (synopsis "JSON Web Token implementation in Python")
2789 (description
2790 "PyJWT is a JSON Web Token implementation written in Python.")
2791 (license license:expat)))
2792
2793 (define-public python2-pyjwt
2794 (package-with-python2 python-pyjwt))
2795
2796 (define-public python-pykka
2797 (package
2798 (name "python-pykka")
2799 (version "1.2.1")
2800 (source
2801 (origin
2802 (method url-fetch)
2803 (uri (pypi-uri "Pykka" version))
2804 (sha256
2805 (base32
2806 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2807 (build-system python-build-system)
2808 (native-inputs
2809 `(("python-mock" ,python-mock)
2810 ("python-nose" ,python-nose)
2811 ("python-gevent" ,python-gevent)
2812 ("python-eventlet" ,python-eventlet)))
2813 (home-page "https://www.pykka.org/")
2814 (synopsis "Pykka is a Python implementation of the actor model")
2815 (description
2816 "Pykka is a Python implementation of the actor model.
2817 The actor model introduces some simple rules to control the sharing
2818 of state and cooperation between execution units, which makes it
2819 easier to build concurrent applications.")
2820 (license license:asl2.0)))
2821
2822 (define-public python2-pykka
2823 (package-with-python2 python-pykka))
2824
2825 (define-public python-pymsgbox
2826 (package
2827 (name "python-pymsgbox")
2828 (version "1.0.6")
2829 (source
2830 (origin
2831 (method git-fetch)
2832 (uri (git-reference
2833 ;; LICENSE.txt is not present on pypi
2834 (url "https://github.com/asweigart/PyMsgBox")
2835 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2836 (file-name (git-file-name name version))
2837 (sha256
2838 (base32
2839 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2840 (arguments
2841 ;; Circular dependency to run tests:
2842 ;; Tests need pyautogui, which depends on pymsgbox.
2843 '(#:tests? #f))
2844 (build-system python-build-system)
2845 (home-page "https://github.com/asweigart/PyMsgBox")
2846 (synopsis "Python module for JavaScript-like message boxes")
2847 (description
2848 "PyMsgBox is a simple, cross-platform, pure Python module for
2849 JavaScript-like message boxes. Types of dialog boxes include:
2850 @enumerate
2851 @item alert
2852 @item confirm
2853 @item prompt
2854 @item password
2855 @end enumerate
2856 ")
2857 (license license:bsd-3)))
2858
2859 (define-public python-pympler
2860 (package
2861 (name "python-pympler")
2862 (home-page "https://pythonhosted.org/Pympler/")
2863 (version "0.8")
2864 (source (origin
2865 (method url-fetch)
2866 (uri (pypi-uri "Pympler" version))
2867 (sha256
2868 (base32
2869 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2870 (build-system python-build-system)
2871 (arguments
2872 `(#:phases (modify-phases %standard-phases
2873 (delete 'check)
2874 (add-after 'install 'check
2875 (lambda* (#:key inputs outputs #:allow-other-keys)
2876 (add-installed-pythonpath inputs outputs)
2877 (invoke "python" "setup.py" "test"))))))
2878 (synopsis "Measure, monitor and analyze memory behavior")
2879 (description
2880 "Pympler is a development tool to measure, monitor and analyze
2881 the memory behavior of Python objects in a running Python application.
2882
2883 By pympling a Python application, detailed insight in the size and the
2884 lifetime of Python objects can be obtained. Undesirable or unexpected
2885 runtime behavior like memory bloat and other @samp{pymples} can easily
2886 be identified.
2887
2888 A web profiling frontend exposes process statistics, garbage
2889 visualisation and class tracker statistics.")
2890 (license license:asl2.0)))
2891
2892 (define-public python2-pympler
2893 (package-with-python2 python-pympler))
2894
2895 (define-public python-itsdangerous
2896 (package
2897 (name "python-itsdangerous")
2898 (version "1.1.0")
2899 (source
2900 (origin
2901 (method url-fetch)
2902 (uri (pypi-uri "itsdangerous" version))
2903 (sha256
2904 (base32
2905 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2906 (build-system python-build-system)
2907 (home-page "https://palletsprojects.com/p/itsdangerous/")
2908 (synopsis "Python library for passing data to/from untrusted environments")
2909 (description
2910 "Itsdangerous provides various helpers to pass trusted data to untrusted
2911 environments and back.")
2912 (license license:bsd-3)))
2913
2914 (define-public python2-itsdangerous
2915 (package-with-python2 python-itsdangerous))
2916
2917 (define-public python-pyyaml
2918 (package
2919 (name "python-pyyaml")
2920 (version "5.3.1")
2921 (source
2922 (origin
2923 (method url-fetch)
2924 (uri (pypi-uri "PyYAML" version))
2925 (sha256
2926 (base32
2927 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2928 (build-system python-build-system)
2929 (inputs
2930 `(("libyaml" ,libyaml)))
2931 (home-page "https://pyyaml.org")
2932 (synopsis "YAML parser and emitter for Python")
2933 (description
2934 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2935 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2936 API, and sensible error messages. PyYAML supports standard YAML tags and
2937 provides Python-specific tags that represent an arbitrary Python object.")
2938 (license license:expat)))
2939
2940 (define-public python2-pyyaml
2941 (package-with-python2 python-pyyaml))
2942
2943 (define-public python-vine
2944 (package
2945 (name "python-vine")
2946 (version "1.1.4")
2947 (source
2948 (origin
2949 (method url-fetch)
2950 (uri (pypi-uri "vine" version))
2951 (sha256
2952 (base32
2953 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2954 (build-system python-build-system)
2955 (native-inputs
2956 `(("python-pytest" ,python-pytest)
2957 ("python-case" ,python-case)))
2958 (home-page "https://github.com/celery/vine")
2959 (synopsis "Promises for Python")
2960 (description
2961 "@code{vine} provides a special implementation of promises in that it can
2962 be used both for \"promise of a value\" and lazy evaluation. The biggest
2963 upside for this is that everything in a promise can also be a promise,
2964 e.g. filters, callbacks and errbacks can all be promises.")
2965 (license license:bsd-3)))
2966
2967 (define-public python-virtualenv
2968 (package
2969 (name "python-virtualenv")
2970 (version "20.0.10")
2971 (source
2972 (origin
2973 (method url-fetch)
2974 (uri (pypi-uri "virtualenv" version))
2975 (sha256
2976 (base32
2977 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2978 (build-system python-build-system)
2979 (native-inputs
2980 `(("python-mock" ,python-mock)
2981 ("python-pytest" ,python-pytest)
2982 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2983 ;; be an input at all". However, removing the input makes the build error:
2984 ;; File "setup.py", line 4, in <module>
2985 ;; raise RuntimeError("setuptools >= 41 required to build")
2986 ("python-setuptools" ,python-setuptools)
2987 ("python-setuptools-scm" ,python-setuptools-scm)))
2988 (propagated-inputs
2989 `(("python-appdirs" ,python-appdirs)
2990 ("python-distlib" ,python-distlib)
2991 ("python-filelock" ,python-filelock)
2992 ("python-six" ,python-six)
2993 ("python-importlib-metadata" ,python-importlib-metadata)))
2994 (home-page "https://virtualenv.pypa.io/")
2995 (synopsis "Virtual Python environment builder")
2996 (description
2997 "Virtualenv is a tool to create isolated Python environments.")
2998 (properties `((python2-variant . ,(delay python2-virtualenv))))
2999 (license license:expat)))
3000
3001 (define-public python2-virtualenv
3002 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
3003 (package
3004 (inherit base)
3005 (arguments
3006 `(#:python ,python-2
3007 #:phases
3008 (modify-phases %standard-phases
3009 (add-after 'set-paths 'adjust-PYTHONPATH
3010 (lambda* (#:key inputs #:allow-other-keys)
3011 (let* ((python (assoc-ref inputs "python"))
3012 (python-sitedir (string-append python "/lib/python2.7"
3013 "/site-packages")))
3014 ;; XXX: 'python2' always comes first on PYTHONPATH
3015 ;; and shadows the 'setuptools' input. Move python2
3016 ;; last: this should be fixed in python-build-system
3017 ;; in a future rebuild cycle.
3018 (setenv "PYTHONPATH"
3019 (string-append (string-join (delete python-sitedir
3020 (string-split
3021 (getenv "PYTHONPATH")
3022 #\:))
3023 ":")
3024 ":" python-sitedir))
3025 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
3026 (getenv "PYTHONPATH"))
3027 #t))))))
3028 (propagated-inputs
3029 `(("python-contextlib2" ,python2-contextlib2)
3030 ,@(package-propagated-inputs base))))))
3031
3032 (define-public python-markupsafe
3033 (package
3034 (name "python-markupsafe")
3035 (version "1.1.1")
3036 (source
3037 (origin
3038 (method url-fetch)
3039 (uri (pypi-uri "MarkupSafe" version))
3040 (sha256
3041 (base32
3042 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3043 (build-system python-build-system)
3044 (arguments
3045 `(#:modules ((ice-9 ftw)
3046 (srfi srfi-1)
3047 (srfi srfi-26)
3048 (guix build utils)
3049 (guix build python-build-system))
3050 #:phases (modify-phases %standard-phases
3051 (replace 'check
3052 (lambda _
3053 (let ((cwd (getcwd))
3054 (libdir (find (cut string-prefix? "lib." <>)
3055 (scandir "build"))))
3056 (setenv "PYTHONPATH"
3057 (string-append cwd "/build/" libdir ":"
3058 (getenv "PYTHONPATH")))
3059 (invoke "pytest" "-vv")))))))
3060 (native-inputs
3061 `(("python-pytest" ,python-pytest)))
3062 (home-page "https://github.com/mitsuhiko/markupsafe")
3063 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3064 (description
3065 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3066 for Python.")
3067 (license license:bsd-3)))
3068
3069 (define-public python2-markupsafe
3070 (package-with-python2 python-markupsafe))
3071
3072 (define-public python-jinja2
3073 (package
3074 (name "python-jinja2")
3075 (version "2.11.2")
3076 (source
3077 (origin
3078 (method url-fetch)
3079 (uri (pypi-uri "Jinja2" version))
3080 (sha256
3081 (base32
3082 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3083 (build-system python-build-system)
3084 (arguments
3085 '(#:phases (modify-phases %standard-phases
3086 (replace 'check
3087 (lambda* (#:key tests? #:allow-other-keys)
3088 (if tests?
3089 (begin
3090 (setenv "PYTHONPATH"
3091 (string-append "./build/lib:"
3092 (getenv "PYTHONPATH")))
3093 (invoke "pytest" "-vv"))
3094 (format #t "test suite not run~%"))
3095 #t)))))
3096 (native-inputs
3097 `(("python-pytest" ,python-pytest)))
3098 (propagated-inputs
3099 `(("python-markupsafe" ,python-markupsafe)))
3100 (home-page "http://jinja.pocoo.org/")
3101 (synopsis "Python template engine")
3102 (description
3103 "Jinja2 is a small but fast and easy to use stand-alone template engine
3104 written in pure Python.")
3105 (license license:bsd-3)))
3106
3107 (define-public python2-jinja2
3108 (package-with-python2 python-jinja2))
3109
3110 (define-public python-jinja2-time
3111 (package
3112 (name "python-jinja2-time")
3113 (version "0.2.0")
3114 (source
3115 (origin
3116 (method url-fetch)
3117 (uri (pypi-uri "jinja2-time" version))
3118 (sha256
3119 (base32
3120 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3121 (build-system python-build-system)
3122 (propagated-inputs
3123 `(("python-arrow" ,python-arrow)
3124 ("python-jinja2" ,python-jinja2)))
3125 (home-page
3126 "https://github.com/hackebrot/jinja2-time")
3127 (synopsis "Jinja2 Extension for Dates and Times")
3128 (description
3129 "This package provides an extension for the template engine Jinja2. It
3130 adds a 'now' tag providing a convenient access to the arrow.now() API from
3131 templates. A format string can be provided to control the output.")
3132 (license license:expat)))
3133
3134 (define-public python-pystache
3135 (package
3136 (name "python-pystache")
3137 (version "0.5.4")
3138 (source (origin
3139 (method url-fetch)
3140 (uri (pypi-uri "pystache" version))
3141 (sha256
3142 (base32
3143 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3144 (build-system python-build-system)
3145 (arguments
3146 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3147 (home-page "http://defunkt.io/pystache/")
3148 (synopsis "Python logic-less template engine")
3149 (description
3150 "Pystache is a Python implementation of the framework agnostic,
3151 logic-free templating system Mustache.")
3152 (license license:expat)
3153 (properties `((python2-variant . ,(delay python2-pystache))))))
3154
3155 (define-public python2-pystache
3156 (package (inherit (package-with-python2
3157 (strip-python2-variant python-pystache)))
3158 (arguments
3159 `(#:python ,python-2
3160 #:phases
3161 (modify-phases %standard-phases
3162 (replace 'check
3163 (lambda _
3164 (invoke "python" "test_pystache.py"))))))))
3165
3166 (define-public python-joblib
3167 (package
3168 (name "python-joblib")
3169 (version "0.14.1")
3170 (source (origin
3171 (method url-fetch)
3172 (uri (pypi-uri "joblib" version))
3173 (sha256
3174 (base32
3175 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3176 (build-system python-build-system)
3177 (arguments
3178 `(#:phases
3179 (modify-phases %standard-phases
3180 (replace 'check
3181 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3182 (native-inputs
3183 `(("python-pytest" ,python-pytest)))
3184 (home-page "https://joblib.readthedocs.io/")
3185 (synopsis "Using Python functions as pipeline jobs")
3186 (description
3187 "Joblib is a set of tools to provide lightweight pipelining in Python.
3188 In particular, joblib offers: transparent disk-caching of the output values
3189 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3190 logging and tracing of the execution.")
3191 (license license:bsd-3)))
3192
3193 (define-public python2-joblib
3194 (package-with-python2 python-joblib))
3195
3196 (define-public python-daemon
3197 (package
3198 (name "python-daemon")
3199 (version "2.2.3")
3200 (source
3201 (origin
3202 (method url-fetch)
3203 (uri (pypi-uri "python-daemon" version))
3204 (sha256
3205 (base32
3206 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3207 (build-system python-build-system)
3208 (arguments
3209 `(#:phases
3210 (modify-phases %standard-phases
3211 (add-before 'check 'disable-tests
3212 (lambda _
3213 ;; FIXME: Determine why test fails
3214 (substitute* "test/test_daemon.py"
3215 (("test_detaches_process_context")
3216 "skip_test_detaches_process_context"))
3217 #t)))))
3218 (propagated-inputs
3219 `(("python-lockfile" ,python-lockfile)))
3220 (native-inputs
3221 `(("python-unittest2" ,python-unittest2)
3222 ("python-testtools" ,python-testtools)
3223 ("python-testscenarios" ,python-testscenarios)
3224 ("python-mock" ,python-mock)
3225 ("python-docutils" ,python-docutils)))
3226 (home-page "https://pagure.io/python-daemon/")
3227 (synopsis "Python library for making a Unix daemon process")
3228 (description "Python-daemon is a library that assists a Python program to
3229 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3230
3231 This library provides a @code{DaemonContext} class that manages the following
3232 important tasks for becoming a daemon process:
3233 @enumerate
3234 @item Detach the process into its own process group.
3235 @item Set process environment appropriate for running inside a chroot.
3236 @item Renounce suid and sgid privileges.
3237 @item Close all open file descriptors.
3238 @item Change the working directory, uid, gid, and umask.
3239 @item Set appropriate signal handlers.
3240 @item Open new file descriptors for stdin, stdout, and stderr.
3241 @item Manage a specified PID lock file.
3242 @item Register cleanup functions for at-exit processing.
3243 @end enumerate")
3244 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3245 (license (list license:asl2.0 license:gpl3+))))
3246
3247 (define-public python-anytree
3248 (package
3249 (name "python-anytree")
3250 (version "2.8.0")
3251 (source (origin
3252 (method url-fetch)
3253 (uri (pypi-uri "anytree" version))
3254 (sha256
3255 (base32
3256 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3257 (build-system python-build-system)
3258 (propagated-inputs
3259 `(("python-six" ,python-six)))
3260 (native-inputs
3261 `(;; For tests.
3262 ("graphviz" ,graphviz) ;for 'dot'
3263 ("python-nose" ,python-nose)))
3264 (home-page "https://github.com/c0fec0de/anytree")
3265 (synopsis "Lightweight tree data library")
3266 (description
3267 "@code{anytree} is a simple, lightweight, and extensible tree data
3268 structure for Python.")
3269 (license license:asl2.0)))
3270
3271 (define-public python-docutils
3272 (package
3273 (name "python-docutils")
3274 (version "0.16")
3275 (source
3276 (origin
3277 (method url-fetch)
3278 (uri (pypi-uri "docutils" version))
3279 (sha256
3280 (base32
3281 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3282 (build-system python-build-system)
3283 (arguments
3284 '(#:phases (modify-phases %standard-phases
3285 (replace 'check
3286 (lambda* (#:key tests? #:allow-other-keys)
3287 (if tests?
3288 (invoke "python" "test/alltests.py")
3289 (format #t "test suite not run~%"))
3290 #t)))))
3291 (home-page "http://docutils.sourceforge.net/")
3292 (synopsis "Python Documentation Utilities")
3293 (description
3294 "Docutils is a modular system for processing documentation into useful
3295 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3296 reStructuredText.")
3297 ;; Most of the source code is public domain, but some source files are
3298 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3299 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3300
3301 (define-public python2-docutils
3302 (package-with-python2 python-docutils))
3303
3304 ;; python2-sphinx fails its test suite with newer versions.
3305 (define-public python2-docutils-0.14
3306 (package
3307 (inherit python2-docutils)
3308 (version "0.14")
3309 (source (origin
3310 (method url-fetch)
3311 (uri (pypi-uri "docutils" version))
3312 (sha256
3313 (base32
3314 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3315
3316 (define-public python-restructuredtext-lint
3317 (package
3318 (name "python-restructuredtext-lint")
3319 (version "1.3.0")
3320 (source
3321 (origin
3322 (method url-fetch)
3323 (uri (pypi-uri "restructuredtext-lint" version))
3324 (sha256
3325 (base32
3326 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3327 (build-system python-build-system)
3328 (arguments
3329 `(#:phases
3330 (modify-phases %standard-phases
3331 (delete 'check)
3332 (add-after 'install 'check
3333 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3334 (when tests?
3335 (add-installed-pythonpath inputs outputs)
3336 (invoke "nosetests" "-v"))
3337 #t)))))
3338 (propagated-inputs
3339 `(("python-docutils" ,python-docutils)))
3340 (native-inputs
3341 `(("python-nose" ,python-nose)))
3342 (home-page "https://github.com/twolfson/restructuredtext-lint")
3343 (synopsis "reStructuredText linter")
3344 (description "This package provides a linter for the reStructuredText
3345 format.")
3346 (license license:unlicense)))
3347
3348 (define-public python-doc8
3349 (package
3350 (name "python-doc8")
3351 (version "0.8.0")
3352 (source
3353 (origin
3354 (method url-fetch)
3355 (uri (pypi-uri "doc8" version))
3356 (sha256
3357 (base32
3358 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3359 (build-system python-build-system)
3360 (arguments
3361 `(#:phases
3362 (modify-phases %standard-phases
3363 (delete 'check)
3364 (add-after 'install 'check
3365 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3366 (when tests?
3367 (add-installed-pythonpath inputs outputs)
3368 (invoke "pytest" "-v"))
3369 #t)))))
3370 (propagated-inputs
3371 `(("python-chardet" ,python-chardet)
3372 ("python-docutils" ,python-docutils)
3373 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3374 ("python-six" ,python-six)
3375 ("python-stevedore" ,python-stevedore)))
3376 (native-inputs
3377 `(("python-testtools" ,python-testtools)
3378 ("python-pytest" ,python-pytest)))
3379 (home-page "https://launchpad.net/doc8")
3380 (synopsis
3381 "Style checker for Sphinx (or other) RST documentation")
3382 (description
3383 "Doc8 is an opinionated style checker for reStructured Text and plain
3384 text styles of documentation.")
3385 (license license:asl2.0)))
3386
3387 (define-public python-pygments
3388 (package
3389 (name "python-pygments")
3390 (version "2.5.2")
3391 (source
3392 (origin
3393 (method url-fetch)
3394 (uri (pypi-uri "Pygments" version))
3395 (sha256
3396 (base32
3397 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3398 (build-system python-build-system)
3399 (arguments
3400 ;; FIXME: Tests require sphinx, which depends on this.
3401 '(#:tests? #f))
3402 (home-page "https://pygments.org/")
3403 (synopsis "Syntax highlighting")
3404 (description
3405 "Pygments is a syntax highlighting package written in Python.")
3406 (license license:bsd-2)))
3407
3408 (define-public python2-pygments
3409 (package-with-python2 python-pygments))
3410
3411 (define-public python-bumpversion
3412 (package
3413 (name "python-bumpversion")
3414 (version "0.5.3")
3415 (source
3416 (origin
3417 (method url-fetch)
3418 (uri (pypi-uri "bumpversion" version))
3419 (sha256
3420 (base32
3421 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3422 (build-system python-build-system)
3423 (home-page "https://github.com/peritus/bumpversion")
3424 (synopsis "Tool to bump software version")
3425 (description "This tool provides a command-line interface (CLI) to bump a
3426 software version simply.")
3427 (license license:expat)))
3428
3429 (define-public python-deprecated
3430 (package
3431 (name "python-deprecated")
3432 (version "1.2.5")
3433 (source
3434 (origin
3435 (method git-fetch)
3436 (uri (git-reference
3437 (url "https://github.com/tantale/deprecated")
3438 (commit (string-append "v" version))))
3439 (file-name (git-file-name name version))
3440 (sha256
3441 (base32
3442 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3443 (build-system python-build-system)
3444 (arguments
3445 `(#:phases (modify-phases %standard-phases
3446 (replace 'check
3447 (lambda _
3448 (invoke "pytest"))))))
3449 (propagated-inputs
3450 `(("python-wrapt" ,python-wrapt)))
3451 (native-inputs
3452 `(("python-bumpversion" ,python-bumpversion)
3453 ("python-pytest" ,python-pytest)
3454 ("python-pytest-cov" ,python-pytest-cov)
3455 ("python-sphinx" ,python-sphinx)
3456 ("python-tox" ,python-tox)))
3457 (home-page "https://github.com/tantale/deprecated")
3458 (synopsis "Python decorator to deprecate classes, functions or methods")
3459 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3460 to deprecate classes, functions or methods.")
3461 (license license:expat)))
3462
3463 (define-public python-pygithub
3464 (package
3465 (name "python-pygithub")
3466 (version "1.43.8")
3467 (source
3468 ;; We fetch from the Git repo because there are no tests in the PyPI
3469 ;; archive.
3470 (origin
3471 (method git-fetch)
3472 (uri (git-reference
3473 (url "https://github.com/PyGithub/PyGithub")
3474 (commit (string-append "v" version))))
3475 (file-name (git-file-name name version))
3476 (sha256
3477 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3478 (build-system python-build-system)
3479 (arguments
3480 `(#:phases (modify-phases %standard-phases
3481 ;; Some tests rely on the network.
3482 (add-after 'unpack 'disable-failing-tests
3483 (lambda _
3484 (substitute* "tests/Issue142.py"
3485 (("testDecodeJson") "disabled_testDecodeJson"))
3486 #t))
3487 (add-before 'check 'prepare-for-tests
3488 (lambda _
3489 (for-each (lambda (f)
3490 (chmod f #o666))
3491 (find-files "./tests"))
3492 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3493 (setenv "PYTHONPATH"
3494 (string-append "./tests:" (getenv "PYTHONPATH")))
3495 #t)))))
3496 (propagated-inputs
3497 `(("python-deprecated" ,python-deprecated)
3498 ("python-pyjwt" ,python-pyjwt)
3499 ("python-requests" ,python-requests)))
3500 (native-inputs `(("python-httpretty" ,python-httpretty)))
3501 (home-page "https://pygithub.readthedocs.io/en/latest/")
3502 (synopsis "Python library for the GitHub API")
3503 (description "This library allows managing GitHub resources such as
3504 repositories, user profiles, and organizations in your Python applications,
3505 using version 3 of the GitHub application programming interface (API).")
3506 (license license:lgpl3+)))
3507
3508 (define-public python-rellu
3509 (package
3510 (name "python-rellu")
3511 (version "0.7")
3512 (source
3513 (origin
3514 (method url-fetch)
3515 (uri (pypi-uri "rellu" version))
3516 (sha256
3517 (base32
3518 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3519 (build-system python-build-system)
3520 (propagated-inputs
3521 `(("python-invoke" ,python-invoke)
3522 ("python-pygithub" ,python-pygithub)))
3523 (home-page "https://github.com/robotframework/rellu")
3524 (synopsis "Utilities to create PyPI releases")
3525 (description "This collection of utilities contains tooling and templates
3526 to assist in creating releases on GitHub and publishing them on PyPI. It is
3527 designed to be used by Robot Framework and tools and libraries in its
3528 ecosystem, but can naturally be used also by other projects.")
3529 (license license:asl2.0)))
3530
3531 (define-public python-robotframework
3532 (package
3533 (name "python-robotframework")
3534 (version "3.1.2")
3535 ;; There are no tests in the PyPI archive.
3536 (source
3537 (origin
3538 (method git-fetch)
3539 (uri (git-reference
3540 (url "https://github.com/robotframework/robotframework")
3541 (commit (string-append "v" version))))
3542 (file-name (git-file-name name version))
3543 (sha256
3544 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3545 (patches (search-patches
3546 "python-robotframework-honor-source-date-epoch.patch"))))
3547 (build-system python-build-system)
3548 (arguments
3549 `(#:phases (modify-phases %standard-phases
3550 (add-before 'build 'build-and-install-doc
3551 (lambda* (#:key outputs #:allow-other-keys)
3552 (let* ((doc-output (assoc-ref outputs "doc"))
3553 (doc (string-append doc-output "/share/"
3554 ,name "-" ,version "/")))
3555 (invoke "invoke" "library-docs" "all")
3556 (mkdir-p doc)
3557 (copy-recursively "doc/libraries"
3558 (string-append doc "/libraries"))
3559 #t)))
3560 (replace 'check
3561 (lambda _
3562 (invoke "python" "utest/run.py"))))))
3563 (native-inputs
3564 `(("python-invoke" ,python-invoke)
3565 ("python-rellu" ,python-rellu)
3566 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3567 (outputs '("out" "doc"))
3568 (home-page "https://robotframework.org")
3569 (synopsis "Generic automation framework")
3570 (description "Robot Framework is a generic automation framework for
3571 acceptance testing, acceptance test driven development (ATDD), and robotic
3572 process automation (RPA).")
3573 (license license:asl2.0)))
3574
3575 (define-public python-robotframework-lint
3576 ;; There is no properly tagged release; the commit below seems to correspond
3577 ;; to the 0.9 stable release available from PyPI. The tests are not
3578 ;; included in the PyPI archive, so we fetch the sources from the upstream
3579 ;; Git repo.
3580 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3581 (revision "1"))
3582 (package
3583 (name "python-robotframework-lint")
3584 (version (git-version "0.9.0" revision commit))
3585 (source
3586 (origin
3587 (method git-fetch)
3588 (uri (git-reference
3589 (url "https://github.com/boakley/robotframework-lint")
3590 (commit commit)))
3591 (file-name (git-file-name name version))
3592 (sha256
3593 (base32
3594 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3595 (build-system python-build-system)
3596 (arguments
3597 `(#:phases
3598 (modify-phases %standard-phases
3599 (replace 'check
3600 (lambda _
3601 (invoke "python" "-m" "robot" "-A"
3602 "tests/conf/default.args" "tests"))))))
3603 (propagated-inputs
3604 `(("python-robotframework" ,python-robotframework)))
3605 (home-page "https://github.com/boakley/robotframework-lint/")
3606 (synopsis "Static analysis tool (linter) for Robot Framework")
3607 (description "This package provides the @code{rflint} command-line
3608 utility, a static analysis tool (linter) for Robot Framework source files.")
3609 (license license:asl2.0))))
3610
3611 (define-public python-robotframework-sshlibrary
3612 (package
3613 (name "python-robotframework-sshlibrary")
3614 (version "3.3.0")
3615 ;; There are no tests in the PyPI archive.
3616 (source
3617 (origin
3618 (method git-fetch)
3619 (uri (git-reference
3620 (url "https://github.com/robotframework/SSHLibrary")
3621 (commit (string-append "v" version))))
3622 (file-name (git-file-name name version))
3623 (sha256
3624 (base32
3625 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3626 (build-system python-build-system)
3627 (arguments
3628 `(#:phases
3629 (modify-phases %standard-phases
3630 (add-before 'build 'build-and-install-doc
3631 (lambda* (#:key outputs #:allow-other-keys)
3632 (let* ((doc-output (assoc-ref outputs "doc"))
3633 (doc (string-append doc-output "/share/"
3634 ,name "-" ,version "/")))
3635 (invoke "chmod" "-R" "+w" "docs")
3636 (invoke "invoke" "kw-docs" "project-docs")
3637 (mkdir-p doc)
3638 (for-each delete-file (find-files "docs" "\\.rst"))
3639 (copy-recursively "docs" doc)
3640 #t)))
3641 (replace 'check
3642 (lambda _
3643 ;; Some tests require an SSH server; we remove them.
3644 (delete-file "utest/test_client_api.py")
3645 (delete-file "utest/test_scp.py")
3646 (invoke "python" "utest/run.py"))))))
3647 (propagated-inputs
3648 `(("python-robotframework" ,python-robotframework)
3649 ("python-paramiko" ,python-paramiko)
3650 ("python-scp" ,python-scp)))
3651 (native-inputs
3652 `(("openssh" ,openssh)
3653 ("which" ,which)
3654 ;; To generate the documentation
3655 ("python-docutils" ,python-docutils)
3656 ("python-invoke" ,python-invoke)
3657 ("python-pygments" ,python-pygments)
3658 ("python-rellu" ,python-rellu)))
3659 (outputs '("out" "doc"))
3660 (home-page "https://github.com/robotframework/SSHLibrary")
3661 (synopsis "Robot Framework library for SSH and SFTP")
3662 (description "SSHLibrary is a Robot Framework library providing support
3663 for SSH and SFTP. It has the following main usages:
3664 @itemize @bullet
3665 @item Executing commands on the remote machine, either blocking or non-blocking.
3666 @item Writing and reading in an interactive shell.
3667 @item Transferring files and directories over SFTP.
3668 @item Ensuring that files and directories exist on the remote machine.
3669 @end itemize")
3670 (license license:asl2.0)))
3671
3672 (define-public python-rstr
3673 (package
3674 (name "python-rstr")
3675 (version "2.2.6")
3676 (source
3677 (origin
3678 (method url-fetch)
3679 (uri (pypi-uri "rstr" version))
3680 (sha256
3681 (base32
3682 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3683 (build-system python-build-system)
3684 (home-page
3685 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3686 (synopsis "Generate random strings in Python")
3687 (description "This package provides a python module for generating
3688 random strings of various types. It could be useful for fuzz testing,
3689 generating dummy data, or other applications. It has no dependencies
3690 outside the standard library.")
3691 (license license:bsd-3)))
3692
3693 (define-public python-scp
3694 (package
3695 (name "python-scp")
3696 (version "0.13.2")
3697 (source
3698 (origin
3699 (method url-fetch)
3700 (uri (pypi-uri "scp" version))
3701 (sha256
3702 (base32
3703 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3704 (build-system python-build-system)
3705 (arguments
3706 '(#:tests? #f)) ;tests require an SSH server
3707 (propagated-inputs
3708 `(("python-paramiko" ,python-paramiko)))
3709 (home-page "https://github.com/jbardin/scp.py")
3710 (synopsis "SCP protocol module for Python and Paramiko")
3711 (description "The scp module extends the Paramiko library to send and
3712 receive files via the SCP1 protocol, as implemented by the OpenSSH
3713 @command{scp} program.")
3714 (license license:gpl2+)))
3715
3716 (define-public python-rst.linker
3717 (package
3718 (name "python-rst.linker")
3719 (version "1.11")
3720 (source
3721 (origin
3722 (method url-fetch)
3723 (uri (pypi-uri "rst.linker" version))
3724 (sha256
3725 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3726 (build-system python-build-system)
3727 (propagated-inputs
3728 `(("python-dateutil" ,python-dateutil)
3729 ("python-six" ,python-six)))
3730 (native-inputs
3731 `(("python-setuptools-scm" ,python-setuptools-scm)))
3732 ;; Test would require path.py, which would introduce a cyclic dependence.
3733 (arguments `(#:tests? #f))
3734 ;; Note: As of version 1.7 the documentation is not worth building.
3735 (home-page "https://github.com/jaraco/rst.linker")
3736 (synopsis "Sphinx plugin to add links and timestamps")
3737 (description "rst.linker automatically replaces text by a
3738 reStructuredText external reference or timestamps. It's primary purpose is to
3739 augment the changelog, but it can be used for other documents, too.")
3740 (license license:expat)))
3741
3742 (define-public python2-rst.linker
3743 (package-with-python2 python-rst.linker))
3744
3745 (define-public python-feedgenerator
3746 (package
3747 (name "python-feedgenerator")
3748 (version "1.9")
3749 (source
3750 (origin
3751 (method url-fetch)
3752 (uri (pypi-uri "feedgenerator" version))
3753 (sha256
3754 (base32
3755 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3756 (modules '((guix build utils)))
3757 (snippet
3758 '(begin
3759 ;; Remove pre-compiled .pyc files from source.
3760 (for-each delete-file-recursively
3761 (find-files "." "__pycache__" #:directories? #t))
3762 (for-each delete-file (find-files "." "\\.pyc$"))
3763 #t))))
3764 (build-system python-build-system)
3765 (propagated-inputs
3766 `(("python-pytz" ,python-pytz)
3767 ("python-six" ,python-six)))
3768 (home-page "https://github.com/getpelican/feedgenerator")
3769 (synopsis
3770 "Standalone version of Django's Atom/RSS feed generator")
3771 (description
3772 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3773 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3774 (license license:bsd-3)))
3775
3776 (define-public python2-feedgenerator
3777 (package-with-python2 python-feedgenerator))
3778
3779 (define-public python-toml
3780 (package
3781 (name "python-toml")
3782 (version "0.10.1")
3783 (source
3784 (origin
3785 (method url-fetch)
3786 (uri (pypi-uri "toml" version))
3787 (sha256
3788 (base32
3789 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3790 (build-system python-build-system)
3791 (arguments
3792 `(#:tests? #f)) ;no tests suite in release
3793 (home-page "https://github.com/uiri/toml")
3794 (synopsis "Library for TOML")
3795 (description
3796 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3797 Language (TOML) configuration files.")
3798 (license license:expat)))
3799
3800 (define-public python-jsonrpc-server
3801 (package
3802 (name "python-jsonrpc-server")
3803 (version "0.3.4")
3804 (source
3805 (origin
3806 (method url-fetch)
3807 (uri (pypi-uri "python-jsonrpc-server" version))
3808 (sha256
3809 (base32
3810 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3811 (build-system python-build-system)
3812 (propagated-inputs
3813 `(("python-mock" ,python-mock)
3814 ("python-pytest" ,python-pytest)
3815 ("python-ujson" ,python-ujson-1)))
3816 (home-page
3817 "https://github.com/palantir/python-jsonrpc-server")
3818 (synopsis "JSON RPC 2.0 server library")
3819 (description
3820 "This package provides a JSON RPC 2.0 server library for Python.")
3821 (license license:expat)))
3822
3823 (define-public python-pydantic
3824 (package
3825 (name "python-pydantic")
3826 (version "1.6.1")
3827 (source
3828 (origin
3829 (method git-fetch)
3830 (uri (git-reference
3831 (url "https://github.com/samuelcolvin/pydantic")
3832 (commit (string-append "v" version))))
3833 (file-name (git-file-name name version))
3834 (sha256
3835 (base32 "1380s9k77g6q15by9fkxndczjk89q6xpz09jdrqip535xws2z3j8"))))
3836 (build-system python-build-system)
3837 (arguments
3838 '(#:phases
3839 (modify-phases %standard-phases
3840 ;; Reported upstream:
3841 ;; <https://github.com/samuelcolvin/pydantic/issues/1580>.
3842 ;; Disable the faulty test as the fix is unclear.
3843 (add-before 'check 'disable-test
3844 (lambda _
3845 (substitute* "tests/test_validators.py"
3846 (("test_assert_raises_validation_error")
3847 "_test_assert_raises_validation_error"))
3848 #t))
3849 (replace 'check
3850 (lambda _ (invoke "pytest" "-vv" "tests"))))))
3851 (native-inputs
3852 `(("python-pytest" ,python-pytest)))
3853 (home-page "https://github.com/samuelcolvin/pydantic")
3854 (synopsis "Python data validation and settings management")
3855 (description
3856 "Pydantic enforces type hints at runtime, and provides user friendly
3857 errors when data is invalid.")
3858 (license license:expat)))
3859
3860 (define-public python-pydocstyle
3861 (package
3862 (name "python-pydocstyle")
3863 (version "3.0.0")
3864 (source
3865 (origin
3866 (method url-fetch)
3867 (uri (pypi-uri "pydocstyle" version))
3868 (sha256
3869 (base32
3870 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3871 (build-system python-build-system)
3872 (propagated-inputs
3873 `(("python-six" ,python-six)
3874 ("python-snowballstemmer" ,python-snowballstemmer)))
3875 (home-page
3876 "https://github.com/PyCQA/pydocstyle/")
3877 (synopsis "Python docstring style checker")
3878 (description
3879 "This package provides a style checker for the Python Language
3880 Server (PLS).")
3881 (license license:expat)))
3882
3883 (define-public python-language-server
3884 (package
3885 (name "python-language-server")
3886 (version "0.34.1")
3887 (source
3888 (origin
3889 (method url-fetch)
3890 (uri (pypi-uri "python-language-server" version))
3891 (sha256
3892 (base32
3893 "0gfjjlj7yg2nf8wkbrshwaljkwlqja4n7s1x949f495anmkg8vxr"))))
3894 (build-system python-build-system)
3895 (propagated-inputs
3896 `(("python-pluggy" ,python-pluggy)
3897 ("python-jsonrpc-server" ,python-jsonrpc-server)
3898 ("python-jedi" ,python-jedi)
3899 ("python-yapf" ,python-yapf)
3900 ("python-pyflakes" ,python-pyflakes)
3901 ("python-pydocstyle" ,python-pydocstyle)
3902 ("python-pycodestyle" ,python-pycodestyle)
3903 ("python-mccabe" ,python-mccabe)
3904 ("python-rope" ,python-rope)
3905 ("python-autopep8" ,python-autopep8)
3906 ("python-flake8" ,python-flake8)
3907 ("python-pylint" ,python-pylint)))
3908 (home-page "https://github.com/palantir/python-language-server")
3909 (synopsis "Python implementation of the Language Server Protocol")
3910 (description
3911 "The Python Language Server (pyls) is an implementation of the Python 3
3912 language specification for the Language Server Protocol (LSP). This tool is
3913 used in text editing environments to provide a complete and integrated
3914 feature-set for programming Python effectively.")
3915 (license license:expat)))
3916
3917 (define-public python-pathspec
3918 (package
3919 (name "python-pathspec")
3920 (version "0.7.0")
3921 (source
3922 (origin
3923 (method url-fetch)
3924 (uri (pypi-uri "pathspec" version))
3925 (sha256
3926 (base32
3927 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3928 (build-system python-build-system)
3929 (home-page "https://github.com/cpburnz/python-path-specification")
3930 (synopsis "Utility library for gitignore style pattern matching of file paths")
3931 (description
3932 "This package provides a utility library for gitignore style pattern
3933 matching of file paths.")
3934 (license license:mpl2.0)))
3935
3936 (define-public python-black
3937 (package
3938 (name "python-black")
3939 (version "19.10b0")
3940 (source
3941 (origin
3942 (method url-fetch)
3943 (uri (pypi-uri "black" version))
3944 (sha256
3945 (base32
3946 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3947 (build-system python-build-system)
3948 (arguments
3949 `(#:phases
3950 (modify-phases %standard-phases
3951 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3952 (lambda _
3953 (let ((python3 (which "python3")))
3954 (substitute* '("tests/data/fmtonoff.py"
3955 "tests/data/string_prefixes.py"
3956 "tests/data/function.py"
3957 "tests/data/python37.py")
3958 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3959 (string-append "#!" python3 (if (string? minor-version)
3960 minor-version
3961 "")))))
3962 #t))
3963 (add-after 'unpack 'disable-broken-tests
3964 (lambda _
3965 ;; These tests are supposed to be skipped when the blackd
3966 ;; dependencies are missing, but this doesn't quite work.
3967 (substitute* "tests/test_black.py"
3968 (("( *)class BlackDTestCase.*" match indent)
3969 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3970 indent "class BlackDTestCase(unittest.TestCase):\n"))
3971 (("web.Application") "False")
3972 (("@unittest_run_loop") ""))
3973
3974 ;; Patching the above file breaks the self test
3975 (substitute* "tests/test_black.py"
3976 (("( *)def test_self" match indent)
3977 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3978 #t)))))
3979 (propagated-inputs
3980 `(("python-click" ,python-click)
3981 ("python-attrs" ,python-attrs)
3982 ("python-appdirs" ,python-appdirs)
3983 ("python-pathspec" ,python-pathspec)
3984 ("python-regex" ,python-regex)
3985 ("python-toml" ,python-toml)
3986 ("python-typed-ast" ,python-typed-ast)))
3987 (native-inputs
3988 `(("python-setuptools-scm" ,python-setuptools-scm)))
3989 (home-page "https://github.com/ambv/black")
3990 (synopsis "The uncompromising code formatter")
3991 (description "Black is the uncompromising Python code formatter.")
3992 (license license:expat)))
3993
3994 (define-public python-blinker
3995 (package
3996 (name "python-blinker")
3997 (version "1.4")
3998 (source
3999 (origin
4000 (method url-fetch)
4001 (uri (pypi-uri "blinker" version))
4002 (sha256
4003 (base32
4004 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
4005 (build-system python-build-system)
4006 (home-page "https://pythonhosted.org/blinker/")
4007 (synopsis "Fast, simple object-to-object and broadcast signaling")
4008 (description
4009 "Blinker provides a fast dispatching system that allows any number of
4010 interested parties to subscribe to events, or \"signals\".")
4011 (license license:expat)))
4012
4013 (define-public python2-blinker
4014 (package-with-python2 python-blinker))
4015
4016 (define-public pelican
4017 (package
4018 (name "pelican")
4019 (version "4.2.0")
4020 (source
4021 (origin
4022 (method url-fetch)
4023 (uri (pypi-uri "pelican" version))
4024 (sha256
4025 (base32
4026 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
4027 (build-system python-build-system)
4028 (propagated-inputs
4029 `(("python-blinker" ,python-blinker)
4030 ("python-dateutil" ,python-dateutil)
4031 ("python-docutils" ,python-docutils)
4032 ("python-feedgenerator" ,python-feedgenerator)
4033 ("python-jinja2" ,python-jinja2)
4034 ("python-markdown" ,python-markdown)
4035 ("python-pygments" ,python-pygments)
4036 ("python-pytz" ,python-pytz)
4037 ("python-six" ,python-six)
4038 ("python-unidecode" ,python-unidecode)))
4039 (home-page "https://getpelican.com/")
4040 (arguments
4041 `(;; XXX Requires a lot more packages to do unit tests :P
4042 #:tests? #f))
4043 (synopsis "Python-based static site publishing system")
4044 (description
4045 "Pelican is a tool to generate a static blog from reStructuredText,
4046 Markdown input files, and more. Pelican uses Jinja2 for templating
4047 and is very extensible.")
4048 (license license:agpl3+)))
4049
4050 (define-public mallard-ducktype
4051 (package
4052 (name "mallard-ducktype")
4053 (version "1.0.2")
4054 (source
4055 (origin
4056 (method git-fetch)
4057 ;; git-reference because tests are not included in pypi source tarball
4058 ;; https://issues.guix.gnu.org/issue/36755#2
4059 (uri (git-reference
4060 (url "https://github.com/projectmallard/mallard-ducktype")
4061 (commit version)))
4062 (file-name (git-file-name name version))
4063 (sha256
4064 (base32
4065 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
4066 (build-system python-build-system)
4067 (arguments
4068 '(#:phases
4069 (modify-phases %standard-phases
4070 (replace 'check
4071 (lambda _
4072 (with-directory-excursion "tests"
4073 (invoke "sh" "runtests")))))))
4074 (home-page "http://projectmallard.org")
4075 (synopsis "Convert Ducktype to Mallard documentation markup")
4076 (description
4077 "Ducktype is a lightweight syntax that can represent all the semantics
4078 of the Mallard XML documentation system. Ducktype files can be converted to
4079 Mallard using the @command{ducktype} tool. The yelp-tools package
4080 provides additional functionality on the produced Mallard documents.")
4081 (license license:expat)))
4082
4083 (define-public python-cython
4084 (package
4085 (name "python-cython")
4086 (version "0.29.17")
4087 (source
4088 (origin
4089 (method url-fetch)
4090 (uri (pypi-uri "Cython" version))
4091 (sha256
4092 (base32
4093 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4094 (build-system python-build-system)
4095 ;; we need the full python package and not just the python-wrapper
4096 ;; because we need libpython3.3m.so
4097 (inputs
4098 `(("python" ,python)))
4099 (arguments
4100 `(#:phases
4101 (modify-phases %standard-phases
4102 (add-before 'check 'set-HOME
4103 ;; some tests require access to "$HOME/.cython"
4104 (lambda _ (setenv "HOME" "/tmp") #t))
4105 (replace 'check
4106 (lambda _
4107 ;; Disable compiler optimizations to greatly reduce the running
4108 ;; time of the test suite.
4109 (setenv "CFLAGS" "-O0")
4110
4111 (invoke "python" "runtests.py" "-vv"
4112 "-j" (number->string (parallel-job-count))
4113 ;; XXX: On 32-bit architectures, running the parallel tests
4114 ;; fails on many-core systems, see
4115 ;; <https://github.com/cython/cython/issues/2807>.
4116 ,@(if (not (target-64bit?))
4117 '("-x" "run.parallel")
4118 '())))))))
4119 (home-page "https://cython.org/")
4120 (synopsis "C extensions for Python")
4121 (description "Cython is an optimising static compiler for both the Python
4122 programming language and the extended Cython programming language. It makes
4123 writing C extensions for Python as easy as Python itself.")
4124 (license license:asl2.0)
4125 (properties `((python2-variant . ,(delay python2-cython))))))
4126
4127 (define-public python2-cython
4128 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4129 (package
4130 (inherit base)
4131 (name "python2-cython")
4132 (inputs
4133 `(("python-2" ,python-2))) ;this is not automatically changed
4134 (arguments
4135 (substitute-keyword-arguments (package-arguments base)
4136 ((#:phases phases)
4137 `(modify-phases ,phases
4138 (add-before 'check 'adjust-test_embed
4139 (lambda _
4140 (substitute* "runtests.py"
4141 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4142 ;; so it can give the right -L flag to GCC when embedding static
4143 ;; builds of Python. It is unaware that the Python "config"
4144 ;; directory (where the static library lives) was renamed in
4145 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4146 ;; which works fine, because that is where the shared library is.
4147 ;;
4148 ;; It also appears to be unaware that the Makefile in Demos/embed
4149 ;; already unconditionally pass the static library location to GCC,
4150 ;; after checking sysconfig.get_config_var('LIBPL).
4151 ;;
4152 ;; The effect is that the linker is unable to resolve libexpat
4153 ;; symbols when building for Python 2, because neither the Python 2
4154 ;; shared library nor Expat is available. To fix it, we can either
4155 ;; add Expat as an input and make it visible to the linker, or just
4156 ;; prevent it from overriding the Python shared library location.
4157 ;; The end result is identical, so we take the easy route.
4158 ((" or libname not in os\\.listdir\\(libdir\\)")
4159 ""))
4160 #t)))))))))
4161
4162 ;; The RPython toolchain currently does not support Python 3.
4163 (define-public python2-rpython
4164 (package
4165 (name "python2-rpython")
4166 (version "0.2.1")
4167 (source
4168 (origin
4169 (method url-fetch)
4170 (uri (pypi-uri "rpython" version))
4171 (sha256
4172 (base32
4173 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4174 (build-system python-build-system)
4175 (arguments `(#:python ,python-2))
4176 (native-inputs
4177 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4178 (home-page "https://rpython.readthedocs.org")
4179 (synopsis "Framework for implementing interpreters and virtual machines")
4180 (description "RPython is a translation and support framework for
4181 producing implementations of dynamic languages, emphasizing a clean separation
4182 between language specification and implementation aspects.")
4183 (license license:expat)))
4184
4185 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4186 ;; python-scipy still build, as these three packages are often used together.
4187 (define-public python-numpy
4188 (package
4189 (name "python-numpy")
4190 (version "1.17.3")
4191 (source
4192 (origin
4193 (method url-fetch)
4194 (uri (string-append
4195 "https://github.com/numpy/numpy/releases/download/v"
4196 version "/numpy-" version ".tar.gz"))
4197 (sha256
4198 (base32
4199 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4200 (build-system python-build-system)
4201 (inputs
4202 `(("openblas" ,openblas)
4203 ("lapack" ,lapack)))
4204 (native-inputs
4205 `(("python-cython" ,python-cython)
4206 ("python-pytest" ,python-pytest)
4207 ("gfortran" ,gfortran)))
4208 (arguments
4209 `(#:phases
4210 (modify-phases %standard-phases
4211 (add-before 'build 'configure-blas-lapack
4212 (lambda* (#:key inputs #:allow-other-keys)
4213 (call-with-output-file "site.cfg"
4214 (lambda (port)
4215 (format port
4216 "[openblas]
4217 libraries = openblas
4218 library_dirs = ~a/lib
4219 include_dirs = ~a/include
4220
4221 # backslash-n to make emacs happy
4222 \n[lapack]
4223 lapack_libs = lapack
4224 library_dirs = ~a/lib
4225 include_dirs = ~a/include
4226 "
4227 (assoc-ref inputs "openblas")
4228 (assoc-ref inputs "openblas")
4229 (assoc-ref inputs "lapack")
4230 (assoc-ref inputs "lapack"))))
4231 #t))
4232 (add-before 'build 'fix-executable-paths
4233 (lambda* (#:key inputs #:allow-other-keys)
4234 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4235 ;; instead of /bin/sh.
4236 (substitute* "numpy/distutils/exec_command.py"
4237 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4238 (string-append match-start (assoc-ref inputs "bash") match-end)))
4239 ;; Use "gcc" executable, not "cc".
4240 (substitute* "numpy/distutils/system_info.py"
4241 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4242 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4243 #t))
4244 ;; Tests can only be run after the library has been installed and not
4245 ;; within the source directory.
4246 (delete 'check)
4247 (add-after 'install 'check
4248 (lambda* (#:key outputs inputs #:allow-other-keys)
4249 ;; Make installed package available for running the tests
4250 (add-installed-pythonpath inputs outputs)
4251 ;; Make sure "f2py" etc is found.
4252 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4253 ":" (getenv "PATH")))
4254 (with-directory-excursion "/tmp"
4255 (invoke "python" "-c"
4256 "import numpy; numpy.test(verbose=2)")))))))
4257 (home-page "https://numpy.org")
4258 (synopsis "Fundamental package for scientific computing with Python")
4259 (description "NumPy is the fundamental package for scientific computing
4260 with Python. It contains among other things: a powerful N-dimensional array
4261 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4262 and Fortran code, useful linear algebra, Fourier transform, and random number
4263 capabilities.")
4264 (properties `((python2-variant . ,(delay python2-numpy))))
4265 (license license:bsd-3)))
4266
4267 ;; Numpy 1.16.x are the last versions that support Python 2.
4268 (define-public python2-numpy
4269 (let ((numpy (package-with-python2
4270 (strip-python2-variant python-numpy))))
4271 (package/inherit
4272 numpy
4273 (version "1.16.5")
4274 (source (origin
4275 (method url-fetch)
4276 (uri (string-append
4277 "https://github.com/numpy/numpy/releases/download/v"
4278 version "/numpy-" version ".tar.gz"))
4279 (sha256
4280 (base32
4281 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4282
4283 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4284 ;; interest only for legacy code going back to NumPy's predecessor
4285 ;; Numeric.
4286 (define-public python2-numpy-1.8
4287 (package (inherit python2-numpy)
4288 (version "1.8.2")
4289 (source
4290 (origin
4291 (method git-fetch)
4292 (uri (git-reference
4293 (url "https://github.com/numpy/numpy")
4294 (commit (string-append "v" version))))
4295 (file-name (git-file-name "numpy" version))
4296 (sha256
4297 (base32
4298 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4299 (arguments
4300 (substitute-keyword-arguments (package-arguments python2-numpy)
4301 ((#:phases phases)
4302 `(modify-phases ,phases
4303 (replace 'configure-blas-lapack
4304 (lambda* (#:key inputs #:allow-other-keys)
4305 (call-with-output-file "site.cfg"
4306 (lambda (port)
4307 (format port
4308 "[openblas]
4309 libraries = openblas,lapack
4310 library_dirs = ~a/lib:~a/lib
4311 include_dirs = ~a/include:~a/include
4312 "
4313 (assoc-ref inputs "openblas")
4314 (assoc-ref inputs "lapack")
4315 (assoc-ref inputs "openblas")
4316 (assoc-ref inputs "lapack"))))
4317 #t))))))
4318 (native-inputs
4319 `(("python2-nose" ,python2-nose)))
4320 (description "NumPy is the fundamental package for scientific computing
4321 with Python. It contains among other things: a powerful N-dimensional array
4322 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4323 and Fortran code, useful linear algebra, Fourier transform, and random number
4324 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4325 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4326 Numeric.")
4327 (license license:bsd-3)))
4328
4329 (define-public python-munch
4330 (package
4331 (name "python-munch")
4332 (version "2.0.4")
4333 (source
4334 (origin
4335 (method url-fetch)
4336 (uri (pypi-uri "munch" version))
4337 (sha256
4338 (base32
4339 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4340 (build-system python-build-system)
4341 (home-page "https://github.com/Infinidat/munch")
4342 (synopsis "Dot-accessible dictionary")
4343 (description "Munch is a dot-accessible dictionary similar to JavaScript
4344 objects.")
4345 (license license:expat)))
4346
4347 (define-public python2-munch
4348 (package-with-python2 python-munch))
4349
4350 (define-public python-colormath
4351 (package
4352 (name "python-colormath")
4353 (version "3.0.0")
4354 (source
4355 (origin
4356 (method url-fetch)
4357 (uri (pypi-uri "colormath" version))
4358 (sha256
4359 (base32
4360 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4361 (build-system python-build-system)
4362 (propagated-inputs
4363 `(("python-networkx" ,python-networkx)
4364 ("python-numpy" ,python-numpy)))
4365 (home-page "https://github.com/gtaylor/python-colormath")
4366 (synopsis "Color math and conversion library")
4367 (description
4368 "This is a Python library for color math and conversions.")
4369 (license license:bsd-3)))
4370
4371 (define-public python2-colormath
4372 (package-with-python2 python-colormath))
4373
4374 (define-public python-spectra
4375 (package
4376 (name "python-spectra")
4377 (version "0.0.11")
4378 (source
4379 (origin
4380 (method url-fetch)
4381 (uri (pypi-uri "spectra" version))
4382 (sha256
4383 (base32
4384 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4385 (build-system python-build-system)
4386 (arguments
4387 `(#:phases
4388 (modify-phases %standard-phases
4389 (replace 'check
4390 (lambda _ (invoke "nosetests" "-v"))))))
4391 (propagated-inputs
4392 `(("python-colormath" ,python-colormath)))
4393 (native-inputs
4394 `(("python-nose" ,python-nose)))
4395 (home-page "https://github.com/jsvine/spectra")
4396 (synopsis "Color scales and color conversion")
4397 (description
4398 "This package provides a Python library intended to make color math,
4399 color scales, and color space conversion easy. It has support for:
4400
4401 @enumerate
4402 @item Color scales
4403 @item Color ranges
4404 @item Color blending
4405 @item Brightening/darkening colors
4406 @item Saturating/desaturating colors
4407 @item Conversion to/from multiple color spaces.
4408 @end enumerate\n")
4409 (license license:expat)))
4410
4411 (define-public python2-spectra
4412 (package-with-python2 python-spectra))
4413
4414 (define-public python-numpy-documentation
4415 (package
4416 (name "python-numpy-documentation")
4417 (version (package-version python-numpy))
4418 (source (package-source python-numpy))
4419 (build-system python-build-system)
4420 (native-inputs
4421 `(("python-matplotlib" ,python-matplotlib)
4422 ("python-numpy" ,python-numpy)
4423 ("pkg-config" ,pkg-config)
4424 ("python-sphinx" ,python-sphinx)
4425 ("python-numpydoc" ,python-numpydoc)
4426 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4427 texlive-fonts-ec
4428 texlive-generic-ifxetex
4429 texlive-generic-pdftex
4430 texlive-amsfonts
4431 texlive-latex-capt-of
4432 texlive-latex-cmap
4433 texlive-latex-environ
4434 texlive-latex-eqparbox
4435 texlive-latex-etoolbox
4436 texlive-latex-expdlist
4437 texlive-latex-fancyhdr
4438 texlive-latex-fancyvrb
4439 texlive-latex-fncychap
4440 texlive-latex-float
4441 texlive-latex-framed
4442 texlive-latex-geometry
4443 texlive-latex-graphics
4444 texlive-latex-hyperref
4445 texlive-latex-mdwtools
4446 texlive-latex-multirow
4447 texlive-latex-needspace
4448 texlive-latex-oberdiek
4449 texlive-latex-parskip
4450 texlive-latex-preview
4451 texlive-latex-tabulary
4452 texlive-latex-threeparttable
4453 texlive-latex-titlesec
4454 texlive-latex-trimspaces
4455 texlive-latex-ucs
4456 texlive-latex-upquote
4457 texlive-latex-url
4458 texlive-latex-varwidth
4459 texlive-latex-wrapfig)))
4460 ("texinfo" ,texinfo)
4461 ("perl" ,perl)
4462 ("scipy-sphinx-theme"
4463 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4464 (method git-fetch)
4465 (uri (git-reference
4466 (url "https://github.com/scipy/scipy-sphinx-theme")
4467 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4468 (sha256
4469 (base32
4470 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4471 ,@(package-native-inputs python-numpy)))
4472 (arguments
4473 `(#:tests? #f ; we're only generating the documentation
4474 #:phases
4475 (modify-phases %standard-phases
4476 (delete 'build)
4477 (replace 'install
4478 (lambda* (#:key inputs outputs #:allow-other-keys)
4479 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4480 (doc (string-append
4481 data "/doc/" ,name "-"
4482 ,(package-version python-numpy)))
4483 (info-reader (string-append data "/info"))
4484 (html (string-append doc "/html"))
4485 (scipy-sphinx-theme "scipy-sphinx-theme")
4486 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4487 (pyver ,(string-append "PYVER=")))
4488
4489 ;; FIXME: this is needed to for texlive-union to generate
4490 ;; fonts, which are not found.
4491 (setenv "HOME" "/tmp")
4492
4493 (with-directory-excursion "doc"
4494 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4495 (mkdir-p html)
4496 (invoke "make" "html" pyver)
4497 (invoke "make" "latex" "PAPER=a4" pyver)
4498 (invoke "make" "-C" "build/latex"
4499 "all-pdf" "PAPER=a4" pyver)
4500 ;; FIXME: Generation of the info file fails.
4501 ;; (invoke "make" "info" pyver)
4502 ;; (mkdir-p info)
4503 ;; (copy-file "build/texinfo/numpy.info"
4504 ;; (string-append info "/numpy.info"))
4505 (for-each (lambda (file)
4506 (copy-file (string-append "build/latex" file)
4507 (string-append doc file)))
4508 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4509 (with-directory-excursion "build/html"
4510 (for-each (lambda (file)
4511 (let* ((dir (dirname file))
4512 (tgt-dir (string-append html "/" dir)))
4513 (unless (equal? "." dir)
4514 (mkdir-p tgt-dir))
4515 (install-file file html)))
4516 (find-files "." ".*")))))
4517 #t)))))
4518 (home-page (package-home-page python-numpy))
4519 (synopsis "Documentation for the python-numpy package")
4520 (description (package-description python-numpy))
4521 (license (package-license python-numpy))))
4522
4523 (define-public python2-numpy-documentation
4524 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4525 (package
4526 (inherit numpy-documentation)
4527 (native-inputs `(("python2-functools32" ,python2-functools32)
4528 ,@(package-native-inputs numpy-documentation))))))
4529
4530 (define-public python-pygit2
4531 (package
4532 (name "python-pygit2")
4533 (version "1.1.0")
4534 (source
4535 (origin
4536 (method url-fetch)
4537 (uri (pypi-uri "pygit2" version))
4538 (sha256
4539 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4540 (build-system python-build-system)
4541 (arguments
4542 '(#:tests? #f)) ; tests don't run correctly in our environment
4543 (propagated-inputs
4544 `(("python-cached-property" ,python-cached-property)
4545 ("python-cffi" ,python-cffi)
4546 ("libgit2" ,libgit2)))
4547 (native-inputs
4548 `(("python-pytest" ,python-pytest)))
4549 (home-page "https://github.com/libgit2/pygit2")
4550 (synopsis "Python bindings for libgit2")
4551 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4552 library, libgit2 implements Git plumbing.")
4553 ;; GPL2.0 only, with linking exception.
4554 (license license:gpl2)))
4555
4556 (define-public python-patiencediff
4557 (package
4558 (name "python-patiencediff")
4559 (version "0.2.0")
4560 (source
4561 (origin
4562 (method url-fetch)
4563 (uri (pypi-uri "patiencediff" version))
4564 (sha256
4565 (base32
4566 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
4567 (build-system python-build-system)
4568 (home-page "https://www.breezy-vcs.org/")
4569 (synopsis "Python implementation of the patiencediff algorithm")
4570 (description
4571 "This package contains a Python implementation of the @code{patiencediff}
4572 algorithm. Patiencediff provides a good balance of performance, nice output for
4573 humans, and implementation simplicity.")
4574 (license license:gpl2)))
4575
4576 (define-public python-pyparsing
4577 (package
4578 (name "python-pyparsing")
4579 (version "2.4.6")
4580 (source
4581 (origin
4582 (method url-fetch)
4583 (uri (pypi-uri "pyparsing" version))
4584 (sha256
4585 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4586 (build-system python-build-system)
4587 (outputs '("out" "doc"))
4588 (arguments
4589 `(#:tests? #f ; no test target
4590 #:phases
4591 (modify-phases %standard-phases
4592 (add-after 'install 'install-doc
4593 (lambda* (#:key outputs #:allow-other-keys)
4594 (let* ((doc (string-append (assoc-ref outputs "doc")
4595 "/share/doc/" ,name "-" ,version))
4596 (html-doc (string-append doc "/html"))
4597 (examples (string-append doc "/examples")))
4598 (mkdir-p html-doc)
4599 (mkdir-p examples)
4600 (for-each
4601 (lambda (dir tgt)
4602 (map (lambda (file)
4603 (install-file file tgt))
4604 (find-files dir ".*")))
4605 (list "docs" "htmldoc" "examples")
4606 (list doc html-doc examples))
4607 #t))))))
4608 (home-page "https://github.com/pyparsing/pyparsing")
4609 (synopsis "Python parsing class library")
4610 (description
4611 "The pyparsing module is an alternative approach to creating and
4612 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4613 of regular expressions. The pyparsing module provides a library of classes
4614 that client code uses to construct the grammar directly in Python code.")
4615 (license license:expat)))
4616
4617 (define-public python2-pyparsing
4618 (package-with-python2 python-pyparsing))
4619
4620 (define-public python-numpydoc
4621 (package
4622 (name "python-numpydoc")
4623 (version "0.8.0")
4624 (source
4625 (origin
4626 (method url-fetch)
4627 (uri (pypi-uri "numpydoc" version))
4628 (sha256
4629 (base32
4630 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4631 (build-system python-build-system)
4632 (propagated-inputs
4633 `(("python-sphinx" ,python-sphinx)))
4634 (native-inputs
4635 `(("python-nose" ,python-nose)))
4636 (home-page "https://pypi.org/project/numpydoc/")
4637 (synopsis
4638 "Numpy's Sphinx extensions")
4639 (description
4640 "Sphinx extension to support docstrings in Numpy format.")
4641 (license license:bsd-2)))
4642
4643 (define-public python2-numpydoc
4644 (package-with-python2 python-numpydoc))
4645
4646 (define-public python-numexpr
4647 (package
4648 (name "python-numexpr")
4649 (version "2.6.5")
4650 (source
4651 (origin
4652 (method url-fetch)
4653 (uri (pypi-uri "numexpr" version))
4654 (sha256
4655 (base32
4656 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4657 (build-system python-build-system)
4658 (arguments `(#:tests? #f)) ; no tests included
4659 (propagated-inputs
4660 `(("python-numpy" ,python-numpy)))
4661 (home-page "https://github.com/pydata/numexpr")
4662 (synopsis "Fast numerical expression evaluator for NumPy")
4663 (description
4664 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4665 expressions that operate on arrays are accelerated and use less memory than
4666 doing the same calculation in Python. In addition, its multi-threaded
4667 capabilities can make use of all your cores, which may accelerate
4668 computations, most specially if they are not memory-bounded (e.g. those using
4669 transcendental functions).")
4670 (license license:expat)))
4671
4672 (define-public python2-numexpr
4673 (package-with-python2 python-numexpr))
4674
4675 (define-public python-cycler
4676 (package
4677 (name "python-cycler")
4678 (version "0.10.0")
4679 (source (origin
4680 (method url-fetch)
4681 (uri (pypi-uri "cycler" version))
4682 (sha256
4683 (base32
4684 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4685 (build-system python-build-system)
4686 (arguments
4687 ;; XXX: The current version requires 'coveralls' which we don't have.
4688 ;; Enable this for the next release which uses 'python-pytest'.
4689 '(#:tests? #f))
4690 (propagated-inputs
4691 `(("python-six" ,python-six)))
4692 (home-page "http://matplotlib.org/cycler/")
4693 (synopsis "Composable keyword argument iterator")
4694 (description
4695 "When using @code{matplotlib} and plotting more than one line, it is
4696 common to want to be able to want to be able to cycle over one or more artist
4697 styles; but the plotting logic can quickly become involved.
4698 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4699 @code{Cycler} class was developed.")
4700 (license license:bsd-3)))
4701
4702 (define-public python2-cycler
4703 (package-with-python2 python-cycler))
4704
4705 (define-public python-colorspacious
4706 (package
4707 (name "python-colorspacious")
4708 (version "1.1.2")
4709 (source
4710 (origin
4711 (method git-fetch)
4712 (uri (git-reference
4713 (url "https://github.com/njsmith/colorspacious")
4714 (commit (string-append "v" version))))
4715 (file-name (git-file-name name version))
4716 (sha256
4717 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4718 (build-system python-build-system)
4719 (propagated-inputs
4720 `(("python-numpy" ,python-numpy)))
4721 (native-inputs
4722 `(("python-nose" ,python-nose)))
4723 (arguments
4724 `(#:phases
4725 (modify-phases %standard-phases
4726 (replace 'check
4727 (lambda _
4728 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4729 (home-page "https://github.com/njsmith/colorspacious")
4730 (synopsis "Python library for colorspace conversions")
4731 (description "@code{colorspacious} is a Python library that lets you
4732 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4733 (license license:expat)))
4734
4735 (define-public python2-colorspacious
4736 (package-with-python2 python-colorspacious))
4737
4738 (define-public python-matplotlib
4739 (package
4740 (name "python-matplotlib")
4741 (version "3.1.2")
4742 (source
4743 (origin
4744 (method url-fetch)
4745 (uri (pypi-uri "matplotlib" version))
4746 (sha256
4747 (base32
4748 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4749 (build-system python-build-system)
4750 (propagated-inputs ; the following packages are all needed at run time
4751 `(("python-cycler" ,python-cycler)
4752 ("python-kiwisolver" ,python-kiwisolver)
4753 ("python-pyparsing" ,python-pyparsing)
4754 ("python-pygobject" ,python-pygobject)
4755 ("gobject-introspection" ,gobject-introspection)
4756 ("python-tkinter" ,python "tk")
4757 ("python-dateutil" ,python-dateutil)
4758 ("python-numpy" ,python-numpy)
4759 ("python-pillow" ,python-pillow)
4760 ("python-pytz" ,python-pytz)
4761 ("python-six" ,python-six)
4762 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4763 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4764 ;; object. For this reason we need to import both libraries.
4765 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4766 ("python-pycairo" ,python-pycairo)
4767 ("python-cairocffi" ,python-cairocffi)))
4768 (inputs
4769 `(("libpng" ,libpng)
4770 ("imagemagick" ,imagemagick)
4771 ("freetype" ,freetype)
4772 ("cairo" ,cairo)
4773 ("glib" ,glib)
4774 ;; FIXME: Add backends when available.
4775 ;("python-wxpython" ,python-wxpython)
4776 ("tcl" ,tcl)
4777 ("tk" ,tk)))
4778 (native-inputs
4779 `(("pkg-config" ,pkg-config)
4780 ("python-pytest" ,python-pytest)
4781 ("python-mock" ,python-mock)
4782 ("unzip" ,unzip)
4783 ("jquery-ui"
4784 ,(origin
4785 (method url-fetch)
4786 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4787 (sha256
4788 (base32
4789 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4790 (arguments
4791 `(#:phases
4792 (modify-phases %standard-phases
4793 ;; XXX We disable all image comparison tests because we're using a
4794 ;; newer version of FreeType than matplotlib expects. This leads to
4795 ;; minor differences throughout the tests.
4796 (add-after 'unpack 'fix-and-disable-failing-tests
4797 (lambda _
4798 (substitute* (append (find-files "lib/matplotlib/tests/"
4799 "test_.*\\.py$")
4800 (find-files "lib/mpl_toolkits/tests"
4801 "test_.*\\.py$"))
4802 (("^from matplotlib" match)
4803 (string-append "import pytest\n" match))
4804 (("( *)@image_comparison" match indent)
4805 (string-append indent
4806 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4807 match)))
4808 (substitute* "lib/matplotlib/tests/test_animation.py"
4809 (("/bin/sh") (which "sh")))
4810 (for-each delete-file
4811 ;; test_normal_axes, test_get_tightbbox_polar
4812 '("lib/matplotlib/tests/test_axes.py"
4813 ;; We don't use the webagg backend and this test forces it.
4814 "lib/matplotlib/tests/test_backend_webagg.py"
4815 ;; test_outward_ticks
4816 "lib/matplotlib/tests/test_tightlayout.py"
4817 ;; test_hidden_axes fails with minor extent
4818 ;; differences, possibly due to the use of a
4819 ;; different version of FreeType.
4820 "lib/matplotlib/tests/test_constrainedlayout.py"
4821 ;; Fontconfig returns no fonts.
4822 "lib/matplotlib/tests/test_font_manager.py"))
4823 #t))
4824 (add-before 'install 'install-jquery-ui
4825 (lambda* (#:key outputs inputs #:allow-other-keys)
4826 (let ((dir (string-append (assoc-ref outputs "out")
4827 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4828 (mkdir-p dir)
4829 (invoke "unzip"
4830 (assoc-ref inputs "jquery-ui")
4831 "-d" dir))
4832 #t))
4833 (replace 'check
4834 (lambda* (#:key outputs inputs #:allow-other-keys)
4835 (add-installed-pythonpath inputs outputs)
4836 (invoke "python" "tests.py" "-v"
4837 "-m" "not network and not webagg")))
4838 (add-before 'build 'configure-environment
4839 (lambda* (#:key outputs inputs #:allow-other-keys)
4840 (let ((cairo (assoc-ref inputs "cairo")))
4841 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4842 ;; has not effect.
4843 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4844 (setenv "HOME" (getcwd))
4845 (call-with-output-file "setup.cfg"
4846 (lambda (port)
4847 (format port "[directories]~%
4848 basedirlist = ~a,~a~%
4849 [packages]~%
4850 tests = True~%"
4851 (assoc-ref inputs "tcl")
4852 (assoc-ref inputs "tk")))))
4853 #t)))))
4854 (home-page "https://matplotlib.org/")
4855 (synopsis "2D plotting library for Python")
4856 (description
4857 "Matplotlib is a Python 2D plotting library which produces publication
4858 quality figures in a variety of hardcopy formats and interactive environments
4859 across platforms. Matplotlib can be used in Python scripts, the python and
4860 ipython shell, web application servers, and six graphical user interface
4861 toolkits.")
4862 (license license:psfl)
4863 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4864
4865 (define-public python2-matplotlib
4866 (let ((matplotlib (package-with-python2
4867 (strip-python2-variant python-matplotlib))))
4868 (package (inherit matplotlib)
4869 (version "2.2.4")
4870 (source
4871 (origin
4872 (method url-fetch)
4873 (uri (pypi-uri "matplotlib" version))
4874 (sha256
4875 (base32
4876 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4877 (arguments
4878 (substitute-keyword-arguments (package-arguments matplotlib)
4879 ((#:phases phases)
4880 `(modify-phases ,phases
4881 (replace 'install-jquery-ui
4882 (lambda* (#:key outputs inputs #:allow-other-keys)
4883 (let ((dir (string-append (assoc-ref outputs "out")
4884 "/lib/python2.7/site-packages/"
4885 "matplotlib/backends/web_backend/")))
4886 (mkdir-p dir)
4887 (invoke "unzip"
4888 (assoc-ref inputs "jquery-ui")
4889 "-d" dir))
4890 #t))
4891 (delete 'fix-and-disable-failing-tests)
4892 (delete 'check))))) ; These tests weren't run the the past.
4893 ;; Make sure to use special packages for Python 2 instead
4894 ;; of those automatically rewritten by package-with-python2.
4895 (propagated-inputs
4896 `(("python2-pycairo" ,python2-pycairo)
4897 ("python2-backports-functools-lru-cache"
4898 ,python2-backports-functools-lru-cache)
4899 ("python2-functools32" ,python2-functools32)
4900 ("python2-pygobject-2" ,python2-pygobject-2)
4901 ("python2-subprocess32" ,python2-subprocess32)
4902 ("python2-tkinter" ,python-2 "tk")
4903 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4904 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4905
4906 (define-public python-matplotlib-documentation
4907 (package
4908 (name "python-matplotlib-documentation")
4909 (version (package-version python-matplotlib))
4910 (source (package-source python-matplotlib))
4911 (build-system python-build-system)
4912 (native-inputs
4913 `(("python-matplotlib" ,python-matplotlib)
4914 ("python-colorspacious" ,python-colorspacious)
4915 ("python-sphinx" ,python-sphinx)
4916 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4917 ("python-sphinx-gallery" ,python-sphinx-gallery)
4918 ("python-numpydoc" ,python-numpydoc)
4919 ("python-ipython" ,python-ipython)
4920 ("python-ipykernel" ,python-ipykernel)
4921 ("python-mock" ,python-mock)
4922 ("graphviz" ,graphviz)
4923 ("texlive" ,(texlive-union (list texlive-amsfonts
4924 texlive-latex-amsmath
4925 texlive-latex-enumitem
4926 texlive-latex-expdlist
4927 texlive-latex-geometry
4928 texlive-latex-preview
4929 texlive-latex-type1cm
4930 texlive-latex-ucs
4931
4932 texlive-generic-pdftex
4933
4934 texlive-fonts-ec
4935 texlive-fonts-adobe-times
4936 texlive-fonts-txfonts)))
4937 ("texinfo" ,texinfo)
4938 ,@(package-native-inputs python-matplotlib)))
4939 (arguments
4940 `(#:tests? #f ; we're only generating documentation
4941 #:phases
4942 (modify-phases %standard-phases
4943 ;; The tests in python-matplotlib are run after the install phase, so
4944 ;; we need to delete the extra phase here.
4945 (delete 'check)
4946 (replace 'build
4947 (lambda _
4948 (chdir "doc")
4949 (setenv "PYTHONPATH"
4950 (string-append (getenv "PYTHONPATH")
4951 ":" (getcwd) "/../examples/units"))
4952 (substitute* "conf.py"
4953 ;; Don't use git.
4954 (("^SHA = check_output.*")
4955 (string-append "SHA = \"" ,version "\"\n"))
4956 ;; Don't fetch intersphinx files from the Internet
4957 (("^explicit_order_folders" m)
4958 (string-append "intersphinx_mapping = {}\n" m))
4959 (("'sphinx.ext.intersphinx',") "")
4960 ;; Disable URL embedding which requires internet access.
4961 (("'https://docs.scipy.org/doc/numpy'") "None")
4962 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4963 (invoke "make"
4964 "SPHINXBUILD=sphinx-build"
4965 "SPHINXOPTS=" ; don't abort on warnings
4966 "html" "texinfo")))
4967 (replace 'install
4968 (lambda* (#:key inputs outputs #:allow-other-keys)
4969 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4970 (doc (string-append data "/doc/python-matplotlib-" ,version))
4971 (info (string-append data "/info"))
4972 (html (string-append doc "/html")))
4973 (mkdir-p html)
4974 (mkdir-p info)
4975 (copy-recursively "build/html" html)
4976 (symlink (string-append html "/_images")
4977 (string-append info "/matplotlib-figures"))
4978 (with-directory-excursion "build/texinfo"
4979 (substitute* "matplotlib.texi"
4980 (("@image\\{([^,]*)" all file)
4981 (string-append "@image{matplotlib-figures/" file)))
4982 (symlink (string-append html "/_images")
4983 "./matplotlib-figures")
4984 (invoke "makeinfo" "--no-split"
4985 "-o" "matplotlib.info" "matplotlib.texi"))
4986 (install-file "build/texinfo/matplotlib.info" info))
4987 #t)))))
4988 (home-page (package-home-page python-matplotlib))
4989 (synopsis "Documentation for the python-matplotlib package")
4990 (description (package-description python-matplotlib))
4991 (license (package-license python-matplotlib))))
4992
4993 (define-public python2-matplotlib-documentation
4994 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4995 (package
4996 (inherit parent)
4997 (native-inputs
4998 (alist-delete "python-sphinx-copybutton"
4999 (package-native-inputs parent))))))
5000
5001 (define-public python-matplotlib-venn
5002 (package
5003 (name "python-matplotlib-venn")
5004 (version "0.11.5")
5005 (source
5006 (origin
5007 (method url-fetch)
5008 (uri (pypi-uri "matplotlib-venn" version ".zip"))
5009 (sha256
5010 (base32
5011 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
5012 (build-system python-build-system)
5013 (arguments '(#:tests? #f)) ; tests are not included
5014 (propagated-inputs
5015 `(("python-matplotlib" ,python-matplotlib)
5016 ("python-numpy" ,python-numpy)
5017 ("python-scipy" ,python-scipy)))
5018 (native-inputs
5019 `(("unzip" ,unzip)))
5020 (home-page "https://github.com/konstantint/matplotlib-venn")
5021 (synopsis "Plot area-proportional Venn diagrams")
5022 (description
5023 "This package provides tools for plotting area-proportional two- and
5024 three-way Venn diagrams in @code{matplotlib}.")
5025 (license license:expat)))
5026
5027 (define-public python-pysnptools
5028 (package
5029 (name "python-pysnptools")
5030 (version "0.4.11")
5031 (source
5032 (origin
5033 (method url-fetch)
5034 (uri (pypi-uri "pysnptools" version))
5035 (sha256
5036 (base32
5037 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
5038 (build-system python-build-system)
5039 (arguments
5040 `(#:tests? #f ; no test data are included
5041 #:phases
5042 (modify-phases %standard-phases
5043 (replace 'check
5044 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5045 (if tests?
5046 (begin
5047 (add-installed-pythonpath inputs outputs)
5048 (invoke "python3" "pysnptools/test.py"))
5049 #t))))))
5050 (propagated-inputs
5051 `(("python-dill" ,python-dill)
5052 ("python-h5py" ,python-h5py)
5053 ("python-numpy" ,python-numpy)
5054 ("python-pandas" ,python-pandas)
5055 ("python-psutil" ,python-psutil)
5056 ("python-scipy" ,python-scipy)))
5057 (native-inputs
5058 `(("python-cython" ,python-cython)))
5059 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
5060 (synopsis "Library for reading and manipulating genetic data")
5061 (description
5062 "PySnpTools is a library for reading and manipulating genetic data. It
5063 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
5064 those files. It can also efficiently manipulate ranges of integers using set
5065 operators such as union, intersection, and difference.")
5066 (license license:asl2.0)))
5067
5068 (define-public python2-pysnptools
5069 (package-with-python2 python-pysnptools))
5070
5071 (define-public python-wurlitzer
5072 (package
5073 (name "python-wurlitzer")
5074 (version "2.0.1")
5075 (source
5076 (origin
5077 (method url-fetch)
5078 (uri (pypi-uri "wurlitzer" version))
5079 (sha256
5080 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
5081 (build-system python-build-system)
5082 (arguments
5083 '(#:phases
5084 (modify-phases %standard-phases
5085 (replace 'check
5086 (lambda _
5087 (invoke "pytest" "-vv" "test.py"))))))
5088 (native-inputs
5089 `(("python-mock" ,python-mock)
5090 ("python-pytest" ,python-pytest)))
5091 (home-page "https://github.com/minrk/wurlitzer")
5092 (synopsis "Capture C-level output in context managers")
5093 (description
5094 "This library helps to redirect @code{sys.stdout} to a stream or a file
5095 while executing some piece of code, including C code running within a Python
5096 process.")
5097 (license license:expat)))
5098
5099 (define-public python-socksipy-branch
5100 (package
5101 (name "python-socksipy-branch")
5102 (version "1.01")
5103 (source
5104 (origin
5105 (method url-fetch)
5106 (uri (pypi-uri "SocksiPy-branch" version))
5107 (sha256
5108 (base32
5109 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
5110 (build-system python-build-system)
5111 (arguments
5112 `(#:tests? #f)) ; There are no tests
5113 (home-page "https://code.google.com/archive/p/socksipy-branch/")
5114 (synopsis "Python SOCKS module")
5115 (description
5116 "SocksiPy - A Python SOCKS client module. It provides a
5117 socket-like interface that supports connections to any TCP
5118 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
5119 The original version was developed by Dan Haim, this is a
5120 branch created by Mario Vilas to address some open issues,
5121 as the original project seems to have been abandoned circa 2007.")
5122 (license license:bsd-3)))
5123
5124 (define-public python2-socksipy-branch
5125 (package-with-python2 python-socksipy-branch))
5126
5127 (define-public python-socksipychain
5128 (package
5129 (name "python-socksipychain")
5130 (version "2.1.2")
5131 (source
5132 (origin
5133 (method git-fetch)
5134 (uri (git-reference
5135 (url "https://github.com/pagekite/PySocksipyChain")
5136 (commit (string-append "v" version))))
5137 (file-name (git-file-name name version))
5138 (sha256
5139 (base32
5140 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5141 (build-system python-build-system)
5142 (arguments
5143 `(#:tests? #f)) ; Tests try to access the network.
5144 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5145 (synopsis "Python SOCKS module with chained proxies support")
5146 (description
5147 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5148 adds support for arbitrary chaining of proxy servers and various modes of
5149 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5150 a simple netcat replacement with chaining support.")
5151 (license license:bsd-3)))
5152
5153 (define-public python-pycodestyle
5154 (package
5155 (name "python-pycodestyle")
5156 (version "2.6.0")
5157 (source
5158 (origin
5159 (method url-fetch)
5160 (uri (pypi-uri "pycodestyle" version))
5161 (sha256
5162 (base32
5163 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))
5164 (build-system python-build-system)
5165 (arguments
5166 `(#:phases
5167 (modify-phases %standard-phases
5168 (replace 'check
5169 (lambda _
5170 (invoke "pytest" "-vv"))))))
5171 (native-inputs
5172 `(("python-pytest" ,python-pytest)))
5173 (home-page "https://pycodestyle.readthedocs.io/")
5174 (synopsis "Python style guide checker")
5175 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5176 Python code against some of the style conventions in
5177 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5178 (license license:expat)))
5179
5180 (define-public python2-pycodestyle
5181 (package-with-python2 python-pycodestyle))
5182
5183 (define-public python-multidict
5184 (package
5185 (name "python-multidict")
5186 (version "4.7.5")
5187 (source
5188 (origin
5189 (method url-fetch)
5190 (uri (pypi-uri "multidict" version))
5191 (sha256
5192 (base32
5193 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5194 (build-system python-build-system)
5195 (arguments
5196 '(#:modules ((ice-9 ftw)
5197 (srfi srfi-1)
5198 (srfi srfi-26)
5199 (guix build utils)
5200 (guix build python-build-system))
5201 #:phases (modify-phases %standard-phases
5202 (replace 'check
5203 (lambda* (#:key tests? #:allow-other-keys)
5204 (if tests?
5205 (begin
5206 (let ((libdir (find (cut string-prefix? "lib." <>)
5207 (scandir "build"))))
5208 (setenv "PYTHONPATH"
5209 (string-append "./build/" libdir ":"
5210 (getenv "PYTHONPATH")))
5211 (invoke "pytest" "-vv")))
5212 (format #t "test suite not run~%"))
5213 #t)))))
5214 (native-inputs
5215 `(("python-pytest" ,python-pytest)
5216 ("python-pytest-cov" ,python-pytest-cov)))
5217 (home-page "https://github.com/aio-libs/multidict/")
5218 (synopsis "Multidict implementation")
5219 (description "Multidict is dict-like collection of key-value pairs
5220 where key might be occurred more than once in the container.")
5221 (license license:asl2.0)))
5222
5223 (define-public python-orderedmultidict
5224 (package
5225 (name "python-orderedmultidict")
5226 (version "1.0")
5227 (source
5228 (origin
5229 (method url-fetch)
5230 (uri (pypi-uri "orderedmultidict" version))
5231 (sha256
5232 (base32
5233 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5234 (build-system python-build-system)
5235 (arguments
5236 `(#:phases
5237 (modify-phases %standard-phases
5238 (add-after 'unpack 'fix-tests
5239 (lambda _
5240 ;; The package uses nosetest for running the tests.
5241 ;; Adding this initfile allows to run the test suite
5242 ;; without requiring nosetest.
5243 (with-output-to-file "tests/__init__.py" newline)
5244 #t)))))
5245 (propagated-inputs
5246 `(("python-six" ,python-six)))
5247 (native-inputs
5248 `(("python-pycodestyle" ,python-pycodestyle)))
5249 (home-page "https://github.com/gruns/orderedmultidict")
5250 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5251 (description "This package contains a library for ordered multivalue
5252 dictionaries. A multivalue dictionary is a dictionary that can store
5253 multiple values for the same key. An ordered multivalue dictionary is a
5254 multivalue dictionary that retains the order of insertions and deletions.")
5255 (license license:unlicense)))
5256
5257 (define-public python2-orderedmultidict
5258 (package-with-python2 python-orderedmultidict))
5259
5260 (define-public python-autopep8
5261 (package
5262 (name "python-autopep8")
5263 (version "1.5.3")
5264 (source
5265 (origin
5266 (method url-fetch)
5267 (uri (pypi-uri "autopep8" version))
5268 (sha256
5269 (base32
5270 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5271 (build-system python-build-system)
5272 (propagated-inputs
5273 `(("python-pycodestyle" ,python-pycodestyle)
5274 ("python-toml" ,python-toml)))
5275 (home-page "https://github.com/hhatto/autopep8")
5276 (synopsis "Format Python code according to the PEP 8 style guide")
5277 (description
5278 "@code{autopep8} automatically formats Python code to conform to
5279 the PEP 8 style guide. It uses the pycodestyle utility to determine
5280 what parts of the code needs to be formatted. @code{autopep8} is
5281 capable of fixing most of the formatting issues that can be reported
5282 by pycodestyle.")
5283 (license (license:non-copyleft
5284 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5285
5286 (define-public python2-autopep8
5287 (package-with-python2 python-autopep8))
5288
5289 (define-public python-distlib
5290 (package
5291 (name "python-distlib")
5292 (version "0.3.0")
5293 (source
5294 (origin
5295 (method url-fetch)
5296 (uri (pypi-uri "distlib" version ".zip"))
5297 (sha256
5298 (base32
5299 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5300 (build-system python-build-system)
5301 (arguments
5302 `(#:phases
5303 (modify-phases %standard-phases
5304 (add-before 'build 'no-/bin/sh
5305 (lambda _
5306 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5307 (("/bin/sh") (which "sh")))
5308 #t))
5309 (add-before 'check 'prepare-test-env
5310 (lambda _
5311 (setenv "HOME" "/tmp")
5312 ;; NOTE: Any value works, the variable just has to be present.
5313 (setenv "SKIP_ONLINE" "1")
5314 #t)))))
5315 (native-inputs `(("unzip" ,unzip)))
5316 (home-page "https://bitbucket.org/pypa/distlib")
5317 (synopsis "Distribution utilities")
5318 (description "Distlib is a library which implements low-level functions that
5319 relate to packaging and distribution of Python software. It is intended to be
5320 used as the basis for third-party packaging tools.")
5321 (license license:psfl)))
5322
5323 (define-public python-distutils-extra
5324 (package
5325 (name "python-distutils-extra")
5326 (version "2.38")
5327 (source
5328 (origin
5329 (method url-fetch)
5330 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5331 version "/+download/python-distutils-extra-"
5332 version ".tar.gz"))
5333 (sha256
5334 (base32
5335 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5336 (build-system python-build-system)
5337 (home-page "https://launchpad.net/python-distutils-extra/")
5338 (synopsis "Enhancements to Python's distutils")
5339 (description
5340 "The python-distutils-extra module enables you to easily integrate
5341 gettext support, themed icons, and scrollkeeper-based documentation into
5342 Python's distutils.")
5343 (license license:gpl2)))
5344
5345 (define-public python2-distutils-extra
5346 (package-with-python2 python-distutils-extra))
5347
5348 (define-public python2-elib.intl
5349 (package
5350 (name "python2-elib.intl")
5351 (version "0.0.3")
5352 (source
5353 (origin
5354 ;; This project doesn't tag releases or publish tarballs, so we take
5355 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5356 (method git-fetch)
5357 (uri (git-reference
5358 (url "https://github.com/dieterv/elib.intl")
5359 (commit "d09997cfef")))
5360 (file-name (string-append name "-" version "-checkout"))
5361 (sha256
5362 (base32
5363 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5364 (build-system python-build-system)
5365 (arguments
5366 ;; incompatible with Python 3 (exception syntax)
5367 `(#:python ,python-2
5368 #:tests? #f))
5369 (home-page "https://github.com/dieterv/elib.intl")
5370 (synopsis "Enhanced internationalization for Python")
5371 (description
5372 "The elib.intl module provides enhanced internationalization (I18N)
5373 services for your Python modules and applications.")
5374 (license license:lgpl3+)))
5375
5376 (define-public python-olefile
5377 (package
5378 (name "python-olefile")
5379 (version "0.46")
5380 (source
5381 (origin
5382 (method url-fetch)
5383 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5384 "download/v" version "/olefile-" version ".tar.gz"))
5385 (file-name (string-append name "-" version ".tar.gz"))
5386 (sha256
5387 (base32
5388 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5389 (build-system python-build-system)
5390 (home-page "https://www.decalage.info/python/olefileio")
5391 (synopsis "Read and write Microsoft OLE2 files.")
5392 (description
5393 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5394 Storage or Compound Document, Microsoft Office). It is an improved version of
5395 the OleFileIO module from PIL, the Python Image Library.")
5396 (license license:bsd-3)))
5397
5398 (define-public python2-olefile
5399 (package-with-python2 python-olefile))
5400
5401 (define-public python-pillow
5402 (package
5403 (name "python-pillow")
5404 (version "6.2.1")
5405 (source
5406 (origin
5407 (method url-fetch)
5408 (uri (pypi-uri "Pillow" version))
5409 (sha256
5410 (base32
5411 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5412 (build-system python-build-system)
5413 (native-inputs
5414 `(("python-pytest" ,python-pytest)))
5415 (inputs
5416 `(("freetype" ,freetype)
5417 ("lcms" ,lcms)
5418 ("libjpeg" ,libjpeg-turbo)
5419 ("libtiff" ,libtiff)
5420 ("libwebp" ,libwebp)
5421 ("openjpeg" ,openjpeg)
5422 ("zlib" ,zlib)))
5423 (propagated-inputs
5424 `(("python-olefile" ,python-olefile)))
5425 (arguments
5426 `(#:phases
5427 (modify-phases %standard-phases
5428 (add-after 'unpack 'patch-ldconfig
5429 (lambda _
5430 (substitute* "setup.py"
5431 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5432 (replace 'check
5433 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5434 (if tests?
5435 (begin
5436 (setenv "HOME" (getcwd))
5437 ;; Make installed package available for running the tests.
5438 (add-installed-pythonpath inputs outputs)
5439 (invoke "python" "selftest.py" "--installed")
5440 (invoke "python" "-m" "pytest" "-vv"))
5441 #t))))))
5442 (home-page "https://python-pillow.org")
5443 (synopsis "Fork of the Python Imaging Library")
5444 (description
5445 "The Python Imaging Library adds image processing capabilities to your
5446 Python interpreter. This library provides extensive file format support, an
5447 efficient internal representation, and fairly powerful image processing
5448 capabilities. The core image library is designed for fast access to data
5449 stored in a few basic pixel formats. It should provide a solid foundation for
5450 a general image processing tool.")
5451 (license (license:x11-style
5452 "http://www.pythonware.com/products/pil/license.htm"
5453 "The PIL Software License"))))
5454
5455 (define-public python2-pillow
5456 (package-with-python2 python-pillow))
5457
5458 (define-public python-pillow-2.9
5459 (package
5460 (inherit python-pillow)
5461 (version "2.9.0")
5462 (source
5463 (origin
5464 (method url-fetch)
5465 (uri (pypi-uri "Pillow" version))
5466 (sha256
5467 (base32
5468 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
5469 (arguments
5470 (substitute-keyword-arguments (package-arguments python-pillow)
5471 ((#:tests? _ #f) #f)))
5472 (properties '((hidden? #t)))))
5473
5474 (define-public python-roifile
5475 (package
5476 (name "python-roifile")
5477 (version "2020.5.28")
5478 (source
5479 (origin
5480 (method url-fetch)
5481 (uri (pypi-uri "roifile" version))
5482 (sha256
5483 (base32
5484 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
5485 (build-system python-build-system)
5486 (arguments `(#:tests? #f)) ; there are none
5487 (propagated-inputs
5488 `(("python-numpy" ,python-numpy)))
5489 (home-page "https://www.lfd.uci.edu/~gohlke/")
5490 (synopsis "Read and write ImageJ ROI format")
5491 (description "Roifile is a Python library to read, write, create, and plot
5492 ImageJ ROIs, an undocumented and ImageJ application specific format to store
5493 regions of interest, geometric shapes, paths, text, etc for image overlays.")
5494 (license license:bsd-3)))
5495
5496 (define-public python-tifffile
5497 (package
5498 (name "python-tifffile")
5499 (version "2020.6.3")
5500 (source
5501 (origin
5502 (method url-fetch)
5503 (uri (pypi-uri "tifffile" version))
5504 (sha256
5505 (base32
5506 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
5507 (build-system python-build-system)
5508 ;; Tests require lfdfiles, which depends on tifffile
5509 (arguments `(#:tests? #f))
5510 (propagated-inputs
5511 `(("python-numpy" ,python-numpy)
5512 ;;("python-lfdfiles" ,python-lfdfiles)
5513 ("python-roifile" ,python-roifile)))
5514 (home-page "https://www.lfd.uci.edu/~gohlke/")
5515 (synopsis "Read and write TIFF(r) files")
5516 (description "This package lets you read image and metadata from many
5517 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
5518 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
5519 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
5520 (license license:bsd-3)))
5521
5522 (define-public python-lfdfiles
5523 (package
5524 (name "python-lfdfiles")
5525 (version "2020.1.1")
5526 (source
5527 (origin
5528 (method url-fetch)
5529 (uri (pypi-uri "lfdfiles" version))
5530 (sha256
5531 (base32
5532 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
5533 (build-system python-build-system)
5534 (propagated-inputs
5535 `(("python-click" ,python-click)
5536 ("python-numpy" ,python-numpy)
5537 ("python-tifffile" ,python-tifffile)))
5538 (home-page "https://www.lfd.uci.edu/~gohlke/")
5539 (synopsis "Work with LFD data files")
5540 (description
5541 "Lfdfiles is a Python library and console script for reading, writing,
5542 converting, and viewing many of the proprietary file formats used to store
5543 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
5544 (license license:bsd-3)))
5545
5546 (define-public python-imageio
5547 (package
5548 (name "python-imageio")
5549 (version "2.8.0")
5550 (source
5551 (origin
5552 (method url-fetch)
5553 (uri (pypi-uri "imageio" version))
5554 (sha256
5555 (base32
5556 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
5557 (build-system python-build-system)
5558 (arguments
5559 `(#:tests? #f ; many tests require online data
5560 #:phases
5561 (modify-phases %standard-phases
5562 (replace 'check
5563 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5564 (if tests?
5565 (begin
5566 ;; Make installed package available for running the tests.
5567 (add-installed-pythonpath inputs outputs)
5568 (invoke "pytest" "-vv"))
5569 #t))))))
5570 (propagated-inputs
5571 `(("python-numpy" ,python-numpy)
5572 ("python-pillow" ,python-pillow)
5573 ("python-psutil" ,python-psutil)))
5574 (native-inputs
5575 `(("python-pytest" ,python-pytest)))
5576 (home-page "https://imageio.github.io/")
5577 (synopsis "Library for reading and writing a wide range of image data")
5578 (description
5579 "Imageio is a Python library that provides an easy interface to read and
5580 write a wide range of image data, including animated images, video, volumetric
5581 data, and scientific formats.")
5582 (license license:bsd-2)))
5583
5584 (define-public python-pycparser
5585 (package
5586 (name "python-pycparser")
5587 (version "2.20")
5588 (source
5589 (origin
5590 (method url-fetch)
5591 (uri (pypi-uri "pycparser" version))
5592 (sha256
5593 (base32
5594 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5595 (outputs '("out" "doc"))
5596 (build-system python-build-system)
5597 (native-inputs
5598 `(("pkg-config" ,pkg-config)))
5599 (arguments
5600 `(#:phases
5601 (modify-phases %standard-phases
5602 (replace 'check
5603 (lambda _
5604 (with-directory-excursion "tests"
5605 (invoke "python" "all_tests.py"))
5606 #t))
5607 (add-after 'install 'install-doc
5608 (lambda* (#:key outputs #:allow-other-keys)
5609 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5610 (doc (string-append data "/doc/" ,name "-" ,version))
5611 (examples (string-append doc "/examples")))
5612 (mkdir-p examples)
5613 (for-each (lambda (file)
5614 (copy-file (string-append "." file)
5615 (string-append doc file)))
5616 '("/README.rst" "/CHANGES" "/LICENSE"))
5617 (copy-recursively "examples" examples)
5618 #t))))))
5619 (home-page "https://github.com/eliben/pycparser")
5620 (synopsis "C parser in Python")
5621 (description
5622 "Pycparser is a complete parser of the C language, written in pure Python
5623 using the PLY parsing library. It parses C code into an AST and can serve as
5624 a front-end for C compilers or analysis tools.")
5625 (license license:bsd-3)))
5626
5627 (define-public python2-pycparser
5628 (package-with-python2 python-pycparser))
5629
5630 (define-public python-pywavelets
5631 (package
5632 (name "python-pywavelets")
5633 (version "1.1.1")
5634 (home-page "https://github.com/PyWavelets/pywt")
5635 (source (origin
5636 (method url-fetch)
5637 (uri (pypi-uri "PyWavelets" version))
5638 (sha256
5639 (base32
5640 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
5641 (build-system python-build-system)
5642 (arguments
5643 '(#:modules ((ice-9 ftw)
5644 (srfi srfi-1)
5645 (srfi srfi-26)
5646 (guix build utils)
5647 (guix build python-build-system))
5648 #:phases
5649 (modify-phases %standard-phases
5650 (replace 'check
5651 (lambda _
5652 (let ((cwd (getcwd))
5653 (libdir (find (cut string-prefix? "lib." <>)
5654 (scandir "build"))))
5655 (with-directory-excursion (string-append cwd "/build/" libdir)
5656 (invoke "pytest" "-vv"))))))))
5657 (native-inputs
5658 `(("python-matplotlib" ,python-matplotlib) ;for tests
5659 ("python-pytest" ,python-pytest)))
5660 (propagated-inputs
5661 `(("python-numpy" ,python-numpy)))
5662 (synopsis "Wavelet transforms in Python")
5663 (description
5664 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5665 mathematical basis functions that are localized in both time and frequency.
5666 Wavelet transforms are time-frequency transforms employing wavelets. They are
5667 similar to Fourier transforms, the difference being that Fourier transforms are
5668 localized only in frequency instead of in time and frequency.")
5669 (license license:expat)))
5670
5671 (define-public python-pywinrm
5672 (package
5673 (name "python-pywinrm")
5674 (version "0.4.1")
5675 (source
5676 (origin
5677 (method url-fetch)
5678 (uri (pypi-uri "pywinrm" version))
5679 (sha256
5680 (base32
5681 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5682 (build-system python-build-system)
5683 (propagated-inputs
5684 `(("python-six" ,python-six)
5685 ("python-requests_ntlm" ,python-requests_ntlm)
5686 ("python-xmltodict" ,python-xmltodict)
5687 ("python-kerberos" ,python-kerberos)))
5688 (native-inputs
5689 `(("python-mock" ,python-mock)
5690 ("python-pytest" ,python-pytest)))
5691 (home-page "https://github.com/diyan/pywinrm/")
5692 (synopsis
5693 "Python library for Windows Remote Management (WinRM)")
5694 (description
5695 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5696 service. It allows you to invoke commands on target Windows machines from
5697 any machine that can run Python.")
5698 (license license:expat)))
5699
5700 (define-public python-xcffib
5701 (package
5702 (name "python-xcffib")
5703 (version "0.6.0")
5704 (source
5705 (origin
5706 (method url-fetch)
5707 (uri (pypi-uri "xcffib" version))
5708 (sha256
5709 (base32
5710 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5711 (build-system python-build-system)
5712 (inputs
5713 `(("libxcb" ,libxcb)))
5714 (propagated-inputs
5715 `(("python-cffi" ,python-cffi) ; used at run time
5716 ("python-six" ,python-six)))
5717 (arguments
5718 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5719 #:tests? #f
5720 #:phases
5721 (modify-phases %standard-phases
5722 (add-after 'unpack 'fix-libxcb-path
5723 (lambda* (#:key inputs #:allow-other-keys)
5724 (let ((libxcb (assoc-ref inputs "libxcb")))
5725 (substitute* '("xcffib/__init__.py")
5726 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5727 #t)))
5728 (add-after 'install 'install-doc
5729 (lambda* (#:key outputs #:allow-other-keys)
5730 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5731 "/doc/" ,name "-" ,version)))
5732 (mkdir-p doc)
5733 (copy-file "README.md"
5734 (string-append doc "/README.md"))
5735 #t))))))
5736 (home-page "https://github.com/tych0/xcffib")
5737 (synopsis "XCB Python bindings")
5738 (description
5739 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5740 support for Python 3 and PyPy. It is based on cffi.")
5741 (license license:expat)))
5742
5743 (define-public python2-xcffib
5744 (package-with-python2 python-xcffib))
5745
5746 (define-public python-cairocffi
5747 (package
5748 (name "python-cairocffi")
5749 (version "0.9.0")
5750 (source
5751 (origin
5752 (method url-fetch)
5753 (uri (pypi-uri "cairocffi" version))
5754 (sha256
5755 (base32
5756 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5757 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5758 (build-system python-build-system)
5759 (outputs '("out" "doc"))
5760 (inputs
5761 `(("glib" ,glib)
5762 ("gtk+" ,gtk+)
5763 ("gdk-pixbuf" ,gdk-pixbuf)
5764 ("cairo" ,cairo)
5765 ("pango" ,pango)))
5766 (native-inputs
5767 `(("pkg-config" ,pkg-config)
5768 ("python-pytest" ,python-pytest)
5769 ("python-pytest-cov" ,python-pytest-cov)
5770 ("python-pytest-runner" ,python-pytest-runner)
5771 ("python-sphinx" ,python-sphinx)
5772 ("python-docutils" ,python-docutils)))
5773 (propagated-inputs
5774 `(("python-xcffib" ,python-xcffib))) ; used at run time
5775 (arguments
5776 `(#:phases
5777 (modify-phases %standard-phases
5778 (add-after 'unpack 'patch-paths
5779 (lambda* (#:key inputs outputs #:allow-other-keys)
5780 (substitute* (find-files "." "\\.py$")
5781 (("dlopen\\(ffi, 'cairo'")
5782 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5783 "/lib/libcairo.so.2'"))
5784 (("dlopen\\(ffi, 'gdk-3'")
5785 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5786 "/lib/libgtk-3.so.0'"))
5787 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5788 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5789 "/lib/libgdk_pixbuf-2.0.so.0'"))
5790 (("dlopen\\(ffi, 'glib-2.0'")
5791 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5792 "/lib/libglib-2.0.so.0'"))
5793 (("dlopen\\(ffi, 'gobject-2.0'")
5794 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5795 "/lib/libgobject-2.0.so.0'"))
5796 (("dlopen\\(ffi, 'pangocairo-1.0'")
5797 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5798 "/lib/libpangocairo-1.0.so.0'"))
5799 (("dlopen\\(ffi, 'pango-1.0'")
5800 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5801 "/lib/libpango-1.0.so.0'")))
5802 #t))
5803 (add-after 'install 'install-doc
5804 (lambda* (#:key inputs outputs #:allow-other-keys)
5805 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5806 (doc (string-append data "/doc/" ,name "-" ,version))
5807 (html (string-append doc "/html")))
5808 (setenv "LD_LIBRARY_PATH"
5809 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5810 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5811 (setenv "LANG" "en_US.UTF-8")
5812 (mkdir-p html)
5813 (for-each (lambda (file)
5814 (copy-file (string-append "." file)
5815 (string-append doc file)))
5816 '("/README.rst" "/CHANGES" "/LICENSE"))
5817 (system* "python" "setup.py" "build_sphinx")
5818 (copy-recursively "docs/_build/html" html)
5819 #t))))))
5820 (home-page "https://github.com/Kozea/cairocffi")
5821 (synopsis "Python bindings and object-oriented API for Cairo")
5822 (description
5823 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5824 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5825 graphics library with support for multiple backends including image buffers,
5826 PNG, PostScript, PDF, and SVG file output.")
5827 (license license:bsd-3)))
5828
5829 (define-public python2-cairocffi
5830 (package-with-python2 python-cairocffi))
5831
5832 (define-public python-decorator
5833 (package
5834 (name "python-decorator")
5835 (version "4.3.0")
5836 (source
5837 (origin
5838 (method url-fetch)
5839 (uri (pypi-uri "decorator" version))
5840 (sha256
5841 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5842 (build-system python-build-system)
5843 (home-page "https://pypi.org/project/decorator/")
5844 (synopsis "Python module to simplify usage of decorators")
5845 (description
5846 "The aim of the decorator module is to simplify the usage of decorators
5847 for the average programmer, and to popularize decorators usage giving examples
5848 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5849 etc. The core of this module is a decorator factory.")
5850 (license license:expat)))
5851
5852 (define-public python2-decorator
5853 (package-with-python2 python-decorator))
5854
5855 (define-public python-drmaa
5856 (package
5857 (name "python-drmaa")
5858 (version "0.7.7")
5859 (source
5860 (origin
5861 (method url-fetch)
5862 (uri (pypi-uri "drmaa" version))
5863 (sha256
5864 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5865 (build-system python-build-system)
5866 ;; The test suite requires libdrmaa which is provided by the cluster
5867 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5868 ;; should be set to the path of the libdrmaa library.
5869 (arguments '(#:tests? #f))
5870 (native-inputs
5871 `(("python-nose" ,python-nose)))
5872 (home-page "https://pypi.org/project/drmaa/")
5873 (synopsis "Python bindings for the DRMAA library")
5874 (description
5875 "A Python package for Distributed Resource Management (DRM) job
5876 submission and control. This package is an implementation of the DRMAA 1.0
5877 Python language binding specification.")
5878 (license license:bsd-3)))
5879
5880 (define-public python2-drmaa
5881 (package-with-python2 python-drmaa))
5882
5883 (define-public python-grako
5884 (package
5885 (name "python-grako")
5886 (version "3.99.9")
5887 (source
5888 (origin
5889 (method url-fetch)
5890 (uri
5891 (pypi-uri "grako" version ".zip"))
5892 (sha256
5893 (base32
5894 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5895 (build-system python-build-system)
5896 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5897 (native-inputs
5898 `(("unzip" ,unzip)
5899 ("python-pytest" ,python-pytest)
5900 ("python-pytest-runner" ,python-pytest-runner)))
5901 (home-page "https://bitbucket.org/neogeny/grako")
5902 (synopsis "EBNF parser generator")
5903 (description
5904 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5905 memoizing PEG/Packrat parser in Python.")
5906 (license license:bsd-3)))
5907
5908 (define-public python2-grako
5909 (package-with-python2 python-grako))
5910
5911 (define-public python-gridmap
5912 (package
5913 (name "python-gridmap")
5914 (version "0.14.0")
5915 (source
5916 (origin
5917 (method git-fetch)
5918 (uri (git-reference
5919 (url "https://github.com/pygridtools/gridmap")
5920 (commit (string-append "v" version))))
5921 (file-name (git-file-name name version))
5922 (sha256
5923 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
5924 (build-system python-build-system)
5925 (arguments
5926 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5927 (propagated-inputs
5928 `(("python-psutil" ,python-psutil)
5929 ("python-drmaa" ,python-drmaa)
5930 ("python-pyzmq" ,python-pyzmq)))
5931 (home-page "https://github.com/pygridtools/gridmap")
5932 (synopsis "Create jobs on a cluster directly from Python")
5933 (description
5934 "Gridmap is a Python package to allow you to easily create jobs on the
5935 cluster directly from Python. You can directly map Python functions onto the
5936 cluster without needing to write any wrapper code yourself.")
5937 (license license:gpl3+)))
5938
5939 (define-public python2-gridmap
5940 (package-with-python2 python-gridmap))
5941
5942 (define-public python-honcho
5943 (package
5944 (name "python-honcho")
5945 (version "1.0.1")
5946 (source
5947 (origin
5948 (method git-fetch)
5949 (uri (git-reference
5950 (url "https://github.com/nickstenning/honcho")
5951 (commit (string-append "v" version))))
5952 (file-name (git-file-name name version))
5953 (sha256
5954 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5955 (build-system python-build-system)
5956 (native-inputs
5957 `(("python-pytest" ,python-pytest)
5958 ("python-mock" ,python-mock)
5959 ("python-tox" ,python-tox)
5960 ("which" ,which))) ;for tests
5961 (propagated-inputs
5962 `(("python-jinja2" ,python-jinja2)))
5963 (arguments
5964 `(#:phases
5965 (modify-phases %standard-phases
5966 (delete 'check)
5967 (add-after 'install 'check
5968 (lambda* (#:key outputs inputs #:allow-other-keys)
5969 ;; fix honcho path in testsuite
5970 (substitute* "tests/conftest.py"
5971 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5972 "/bin/honcho" "'")))
5973 ;; It's easier to run tests after install.
5974 ;; Make installed package available for running the tests
5975 (add-installed-pythonpath inputs outputs)
5976 (invoke "py.test" "-v"))))))
5977 (home-page "https://github.com/nickstenning/honcho")
5978 (synopsis "Manage Procfile-based applications")
5979 (description
5980 "A Procfile is a file which describes how to run an application
5981 consisting of several processes. honcho starts all listed processes.
5982 The output of all running processes is collected by honcho and
5983 displayed.")
5984 (license license:expat)))
5985
5986 (define-public python2-honcho
5987 (package-with-python2 python-honcho))
5988
5989 (define-public python-pexpect
5990 (package
5991 (name "python-pexpect")
5992 (version "4.8.0")
5993 (source
5994 (origin
5995 (method url-fetch)
5996 (uri (pypi-uri "pexpect" version))
5997 (sha256
5998 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5999 (build-system python-build-system)
6000 (arguments
6001 `(#:phases
6002 (modify-phases %standard-phases
6003 (add-before 'check 'prepare-tests
6004 (lambda _
6005 (substitute* (find-files "tests")
6006 (("/bin/ls") (which "ls"))
6007 (("/bin/echo") (which "echo"))
6008 (("/bin/which") (which "which"))
6009 ;; Many tests try to use the /bin directory which
6010 ;; is not present in the build environment.
6011 ;; Use one that's non-empty and unlikely to change.
6012 (("/bin'") "/dev'")
6013 ;; Disable failing test. See upstream bug report
6014 ;; https://github.com/pexpect/pexpect/issues/568
6015 (("def test_bash") "def _test_bash"))
6016 ;; XXX: Socket connection test gets "Connection reset by peer".
6017 ;; Why does it not work? Delete for now.
6018 (delete-file "tests/test_socket.py")
6019 #t))
6020 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
6021 (native-inputs
6022 `(("python-nose" ,python-nose)
6023 ("python-pytest" ,python-pytest)
6024 ("man-db" ,man-db)
6025 ("which" ,which)
6026 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
6027 (propagated-inputs
6028 `(("python-ptyprocess" ,python-ptyprocess)))
6029 (home-page "http://pexpect.readthedocs.org/")
6030 (synopsis "Controlling interactive console applications")
6031 (description
6032 "Pexpect is a pure Python module for spawning child applications;
6033 controlling them; and responding to expected patterns in their output.
6034 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
6035 child application and control it as if a human were typing commands.")
6036 (license license:isc)))
6037
6038 (define-public python2-pexpect
6039 (package-with-python2 python-pexpect))
6040
6041 (define-public python-setuptools-scm
6042 (package
6043 (name "python-setuptools-scm")
6044 (version "3.4.3")
6045 (source (origin
6046 (method url-fetch)
6047 (uri (pypi-uri "setuptools_scm" version))
6048 (sha256
6049 (base32
6050 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
6051 (build-system python-build-system)
6052 (home-page "https://github.com/pypa/setuptools_scm/")
6053 (synopsis "Manage Python package versions in SCM metadata")
6054 (description
6055 "Setuptools_scm handles managing your Python package versions in
6056 @dfn{software configuration management} (SCM) metadata instead of declaring
6057 them as the version argument or in a SCM managed file.")
6058 (license license:expat)))
6059
6060 (define-public python2-setuptools-scm
6061 (package-with-python2 python-setuptools-scm))
6062
6063 (define-public python-sexpdata
6064 (package
6065 (name "python-sexpdata")
6066 (version "0.0.3")
6067 (source
6068 (origin
6069 (method url-fetch)
6070 (uri (pypi-uri "sexpdata" version))
6071 (sha256
6072 (base32
6073 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
6074 (build-system python-build-system)
6075 (home-page "https://github.com/jd-boyd/sexpdata")
6076 (synopsis "S-expression parser for Python")
6077 (description
6078 "Sexpdata is an S-expression parser/serializer. It has load and dump
6079 functions like pickle, json or PyYAML module.")
6080 (license license:bsd-3)))
6081
6082 (define-public python-pathlib2
6083 (package
6084 (name "python-pathlib2")
6085 (version "2.3.3")
6086 (source
6087 (origin
6088 (method url-fetch)
6089 (uri (pypi-uri "pathlib2" version))
6090 (sha256
6091 (base32
6092 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
6093 (build-system python-build-system)
6094 (propagated-inputs
6095 `(("python-scandir" ,python-scandir)
6096 ("python-six" ,python-six)))
6097 (home-page "https://pypi.org/project/pathlib2/")
6098 (synopsis "Object-oriented file system paths")
6099 (description "The goal of pathlib2 is to provide a backport of the
6100 standard @code{pathlib} module which tracks the standard library module, so
6101 all the newest features of the standard @code{pathlib} can be used also on
6102 older Python versions.")
6103 (license license:expat)))
6104
6105 (define-public python-importlib-resources
6106 (package
6107 (name "python-importlib-resources")
6108 (version "3.0.0")
6109 (source
6110 (origin
6111 (method url-fetch)
6112 (uri (pypi-uri "importlib_resources" version))
6113 (sha256
6114 (base32
6115 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
6116 (build-system python-build-system)
6117 (native-inputs
6118 `(("python-setuptools-scm" ,python-setuptools-scm)
6119 ("python-toml" ,python-toml)))
6120 (home-page "http://importlib-resources.readthedocs.io/")
6121 (synopsis "Read resources from Python packages")
6122 (description
6123 "@code{importlib_resources} is a backport of Python 3's standard library
6124 @code{importlib.resources} module for Python 2.7, and Python 3.")
6125 (properties `((python2-variant . ,(delay python2-importlib-resources))))
6126 (license license:asl2.0)))
6127
6128 (define-public python2-importlib-resources
6129 (package
6130 (name "python2-importlib-resources")
6131 (version "1.0.2")
6132 (source (origin
6133 (method url-fetch)
6134 (uri (pypi-uri "importlib_resources" version))
6135 (sha256
6136 (base32
6137 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
6138 (build-system python-build-system)
6139 (arguments
6140 `(#:python ,python-2
6141 #:phases (modify-phases %standard-phases
6142 ;; The build system tests for python-wheel, but it is
6143 ;; not required for Guix nor the test suite. Just drop
6144 ;; it to make bootstrapping pytest easier.
6145 (add-after 'unpack 'drop-wheel-dependency
6146 (lambda _
6147 (substitute* "setup.cfg"
6148 (("^[[:blank:]]+wheel")
6149 ""))
6150 #t)))))
6151 (propagated-inputs
6152 `(("python-pathlib2" ,python2-pathlib2)
6153 ("python-typing" ,python2-typing)))
6154 (home-page "https://gitlab.com/python-devs/importlib_resources")
6155 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6156 (description
6157 "This package provides an implementation of @code{importlib.resources}
6158 for older versions of Python.")
6159 (license license:asl2.0)))
6160
6161 ;; For importlib-metadata-bootstrap below.
6162 (define-public python2-importlib-resources-bootstrap
6163 (hidden-package
6164 (package/inherit
6165 python2-importlib-resources
6166 (name "python2-importlib-resources-bootstrap")
6167 (propagated-inputs
6168 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6169 ("python-typing" ,python2-typing))))))
6170
6171 (define-public python-importlib-metadata
6172 (package
6173 (name "python-importlib-metadata")
6174 (version "1.5.0")
6175 (source
6176 (origin
6177 (method url-fetch)
6178 (uri (pypi-uri "importlib_metadata" version))
6179 (sha256
6180 (base32
6181 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6182 (build-system python-build-system)
6183 (propagated-inputs
6184 `(("python-zipp" ,python-zipp)))
6185 (native-inputs
6186 `(("python-setuptools-scm" ,python-setuptools-scm)
6187 ("python-pyfakefs" ,python-pyfakefs)
6188 ("python-packaging" ,python-packaging)))
6189 (home-page "https://importlib-metadata.readthedocs.io/")
6190 (synopsis "Read metadata from Python packages")
6191 (description
6192 "@code{importlib_metadata} is a library which provides an API for
6193 accessing an installed Python package's metadata, such as its entry points or
6194 its top-level name. This functionality intends to replace most uses of
6195 @code{pkg_resources} entry point API and metadata API. Along with
6196 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6197 need to use the older and less efficient @code{pkg_resources} package.")
6198 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6199 (license license:asl2.0)))
6200
6201 (define-public python2-importlib-metadata
6202 (let ((base (package-with-python2 (strip-python2-variant
6203 python-importlib-metadata))))
6204 (package/inherit
6205 base
6206 (name "python2-importlib-metadata")
6207 (native-inputs
6208 `(("python-setuptools-scm" ,python2-setuptools-scm)
6209 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6210 ("python-packaging" ,python2-packaging-bootstrap)))
6211 (propagated-inputs
6212 `(("python-configparser" ,python2-configparser)
6213 ("python-contextlib2" ,python2-contextlib2)
6214 ("python-importlib-resources" ,python2-importlib-resources)
6215 ("python-pathlib2" ,python2-pathlib2)
6216 ,@(package-propagated-inputs base))))))
6217
6218 ;; This package is used by python2-pytest, and thus must not depend on it.
6219 (define-public python2-importlib-metadata-bootstrap
6220 (hidden-package
6221 (package/inherit
6222 python2-importlib-metadata
6223 (name "python2-importlib-metadata-bootstrap")
6224 (arguments
6225 `(#:tests? #f
6226 ,@(package-arguments python2-importlib-metadata)))
6227 (propagated-inputs
6228 `(("python-zipp" ,python2-zipp-bootstrap)
6229 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6230 ("python-configparser" ,python2-configparser)
6231 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6232 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6233
6234 (define-public python-importmagic
6235 (package
6236 (name "python-importmagic")
6237 (version "0.1.7")
6238 (source
6239 (origin
6240 (method url-fetch)
6241 (uri (pypi-uri "importmagic" version))
6242 (sha256
6243 (base32
6244 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6245 (build-system python-build-system)
6246 (home-page "https://github.com/alecthomas/importmagic")
6247 (synopsis "Library for adding, removing and managing Python imports")
6248 (description
6249 "Importmagic is a Python library for automatically managing imports by
6250 finding unresolved symbols in Python code and their corresponding imports.")
6251 (license license:bsd-3)))
6252
6253 (define-public python-jaraco-packaging
6254 (package
6255 (name "python-jaraco-packaging")
6256 (version "6.1")
6257 (source
6258 (origin
6259 (method url-fetch)
6260 (uri (pypi-uri "jaraco.packaging" version))
6261 (sha256
6262 (base32
6263 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6264 (build-system python-build-system)
6265 (propagated-inputs
6266 `(("python-pytest" ,python-pytest)
6267 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6268 ("python-pytest-flake8" ,python-pytest-flake8)
6269 ("python-rst.linker" ,python-rst.linker)
6270 ("python-setuptools" ,python-setuptools)
6271 ("python-setuptools-scm" ,python-setuptools-scm)
6272 ("python-six" ,python-six)
6273 ("python-sphinx" ,python-sphinx)))
6274 (home-page "https://github.com/jaraco/jaraco.packaging")
6275 (synopsis "Tools to supplement packaging Python releases")
6276 (description
6277 "This package provides various tools to supplement packaging Python
6278 releases.")
6279 (license license:expat)))
6280
6281 (define-public python-pathpy
6282 (package
6283 (name "python-pathpy")
6284 (version "11.5.1")
6285 (source
6286 (origin
6287 (method url-fetch)
6288 (uri (pypi-uri "path.py" version))
6289 (sha256
6290 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6291 (outputs '("out" "doc"))
6292 (build-system python-build-system)
6293 (propagated-inputs
6294 `(("python-appdirs" ,python-appdirs)
6295 ("python-importlib-metadata" ,python-importlib-metadata)))
6296 (native-inputs
6297 `(("python-setuptools-scm" ,python-setuptools-scm)
6298 ("python-sphinx" ,python-sphinx)
6299 ("python-rst.linker" ,python-rst.linker)
6300 ("python-pytest" ,python-pytest)
6301 ("python-pytest-runner" ,python-pytest-runner)
6302 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6303 (arguments
6304 `(#:phases
6305 (modify-phases %standard-phases
6306 (add-after 'build 'build-doc
6307 (lambda _
6308 (setenv "LANG" "en_US.UTF-8")
6309 (invoke "python" "setup.py" "build_sphinx")))
6310 (add-after 'install 'install-doc
6311 (lambda* (#:key outputs #:allow-other-keys)
6312 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6313 (doc (string-append data "/doc/" ,name "-" ,version))
6314 (html (string-append doc "/html")))
6315 (mkdir-p html)
6316 (for-each (lambda (file)
6317 (copy-file file (string-append doc "/" file)))
6318 '("README.rst" "CHANGES.rst"))
6319 (copy-recursively "build/sphinx/html" html)
6320 #t)))
6321 (replace 'check
6322 (lambda _
6323 ;; The import time test aborts if an import takes longer than
6324 ;; 100ms. It may very well take a little longer than that.
6325 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6326 (home-page "https://github.com/jaraco/path.py")
6327 (synopsis "Python module wrapper for built-in os.path")
6328 (description
6329 "@code{path.py} implements path objects as first-class entities, allowing
6330 common operations on files to be invoked on those path objects directly.")
6331 (license license:expat)))
6332
6333 (define-public python2-pathpy
6334 (package-with-python2 python-pathpy))
6335
6336 (define-public python-simplegeneric
6337 (package
6338 (name "python-simplegeneric")
6339 (version "0.8.1")
6340 (source
6341 (origin
6342 (method url-fetch)
6343 (uri (pypi-uri "simplegeneric" version ".zip"))
6344 (sha256
6345 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6346 (build-system python-build-system)
6347 (native-inputs
6348 `(("unzip" ,unzip)))
6349 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6350 (synopsis "Python module for simple generic functions")
6351 (description
6352 "The simplegeneric module lets you define simple single-dispatch generic
6353 functions, akin to Python’s built-in generic functions like @code{len()},
6354 @code{iter()} and so on. However, instead of using specially-named methods,
6355 these generic functions use simple lookup tables, akin to those used by
6356 e.g. @code{pickle.dump()} and other generic functions found in the Python
6357 standard library.")
6358 (license license:zpl2.1)))
6359
6360 (define-public python2-simplegeneric
6361 (package-with-python2 python-simplegeneric))
6362
6363 (define-public python-ipython-genutils
6364 ;; TODO: This package is retired, check if can be removed, see description.
6365 (package
6366 (name "python-ipython-genutils")
6367 (version "0.1.0")
6368 (source
6369 (origin
6370 (method url-fetch)
6371 (uri (pypi-uri "ipython_genutils" version))
6372 (sha256
6373 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6374 (build-system python-build-system)
6375 (arguments `(#:tests? #f)) ; no tests
6376 (home-page "https://ipython.org")
6377 (synopsis "Vestigial utilities from IPython")
6378 (description
6379 "This package provides retired utilities from IPython. No packages
6380 outside IPython/Jupyter should depend on it.
6381
6382 This package shouldn't exist. It contains some common utilities shared by
6383 Jupyter and IPython projects during The Big Split. As soon as possible, those
6384 packages will remove their dependency on this, and this package will go
6385 away.")
6386 (license license:bsd-3)))
6387
6388 (define-public python2-ipython-genutils
6389 (package-with-python2 python-ipython-genutils))
6390
6391 (define-public python-ipyparallel
6392 (package
6393 (name "python-ipyparallel")
6394 (version "6.2.4")
6395 (source
6396 (origin
6397 (method url-fetch)
6398 (uri (pypi-uri "ipyparallel" version))
6399 (sha256
6400 (base32
6401 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6402 (build-system python-build-system)
6403 (arguments
6404 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6405 #:phases
6406 (modify-phases %standard-phases
6407 (add-before 'check 'prepare-for-tests
6408 (lambda _
6409 (setenv "HOME" (getcwd))
6410 #t)))))
6411 (propagated-inputs
6412 `(("python-dateutil" ,python-dateutil)
6413 ("python-decorator" ,python-decorator)
6414 ("python-ipykernel" ,python-ipykernel)
6415 ("python-ipython" ,python-ipython)
6416 ("python-ipython-genutils" ,python-ipython-genutils)
6417 ("python-jupyter-client" ,python-jupyter-client)
6418 ("python-pyzmq" ,python-pyzmq)
6419 ("python-tornado" ,python-tornado)
6420 ("python-traitlets" ,python-traitlets)))
6421 (native-inputs
6422 `(("python-ipython" ,python-ipython)
6423 ("python-mock" ,python-mock)
6424 ("python-nose" ,python-nose)
6425 ("python-pytest" ,python-pytest)
6426 ("python-pytest-cov" ,python-pytest-cov)
6427 ("python-testpath" ,python-testpath)))
6428 (home-page "https://ipython.org/")
6429 (synopsis "Interactive Parallel Computing with IPython")
6430 (description
6431 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6432 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6433 CLI scripts:
6434 @enumerate
6435 @item ipcluster - start/stop a cluster
6436 @item ipcontroller - start a scheduler
6437 @item ipengine - start an engine
6438 @end enumerate")
6439 (license license:bsd-3)))
6440
6441 (define-public python2-ipyparallel
6442 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6443 (package
6444 (inherit ipyparallel)
6445 (propagated-inputs
6446 `(("python2-futures" ,python2-futures)
6447 ,@(package-propagated-inputs ipyparallel))))))
6448
6449 (define-public python-ipython-cluster-helper
6450 (package
6451 (name "python-ipython-cluster-helper")
6452 (version "0.6.4")
6453 (source
6454 (origin
6455 (method url-fetch)
6456 (uri (pypi-uri "ipython-cluster-helper" version))
6457 (sha256
6458 (base32
6459 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6460 (modules '((guix build utils)))
6461 (snippet
6462 '(begin (substitute* "requirements.txt"
6463 (("ipython.*") "ipython\n"))
6464 #t))))
6465 (build-system python-build-system)
6466 (arguments
6467 `(#:tests? #f ; Test suite can't find IPython.
6468 #:phases
6469 (modify-phases %standard-phases
6470 (replace 'check
6471 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6472 (if tests?
6473 (begin
6474 (setenv "HOME" (getcwd))
6475 (add-installed-pythonpath inputs outputs)
6476 (invoke "python" "example/example.py" "--local"))
6477 #t))))))
6478 (propagated-inputs
6479 `(("python-ipyparallel" ,python-ipyparallel)
6480 ("python-ipython" ,python-ipython)
6481 ("python-netifaces" ,python-netifaces)
6482 ("python-pyzmq" ,python-pyzmq)
6483 ("python-setuptools" ,python-setuptools)
6484 ("python-six" ,python-six)))
6485 (home-page "https://github.com/roryk/ipython-cluster-helper")
6486 (synopsis
6487 "Simplify IPython cluster start up and use for multiple schedulers")
6488 (description
6489 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6490 profile, launches a cluster and returns a view. On program exit it shuts the
6491 cluster down and deletes the throwaway profile.")
6492 (license license:expat)))
6493
6494 (define-public python2-ipython-cluster-helper
6495 (package-with-python2 python-ipython-cluster-helper))
6496
6497 (define-public python-traitlets
6498 (package
6499 (name "python-traitlets")
6500 (version "4.3.3")
6501 (source
6502 (origin
6503 (method url-fetch)
6504 (uri (pypi-uri "traitlets" version))
6505 (sha256
6506 (base32
6507 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6508 (build-system python-build-system)
6509 (arguments
6510 `(#:phases
6511 (modify-phases %standard-phases
6512 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6513 (propagated-inputs
6514 `(("python-ipython-genutils" ,python-ipython-genutils)
6515 ("python-decorator" ,python-decorator)))
6516 (native-inputs
6517 `(("python-pytest" ,python-pytest)))
6518 (properties `((python2-variant . ,(delay python2-traitlets))))
6519 (home-page "https://ipython.org")
6520 (synopsis "Configuration system for Python applications")
6521 (description
6522 "Traitlets is a framework that lets Python classes have attributes with
6523 type checking, dynamically calculated default values, and ‘on change’
6524 callbacks. The package also includes a mechanism to use traitlets for
6525 configuration, loading values from files or from command line arguments. This
6526 is a distinct layer on top of traitlets, so you can use traitlets in your code
6527 without using the configuration machinery.")
6528 (license license:bsd-3)))
6529
6530 (define-public python2-traitlets
6531 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6532 (package
6533 (inherit traitlets)
6534 (propagated-inputs
6535 `(("python2-enum34" ,python2-enum34)
6536 ,@(package-propagated-inputs traitlets))))))
6537
6538 (define-public python-jupyter-core
6539 (package
6540 (name "python-jupyter-core")
6541 (version "4.4.0")
6542 (source
6543 (origin
6544 (method url-fetch)
6545 (uri (string-append (pypi-uri "jupyter_core" version)))
6546 (sha256
6547 (base32
6548 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6549 (build-system python-build-system)
6550 ;; FIXME: not sure how to run the tests
6551 (arguments `(#:tests? #f))
6552 (propagated-inputs
6553 `(("python-traitlets" ,python-traitlets)))
6554 (home-page "http://jupyter.org/")
6555 (synopsis "Jupyter base package")
6556 (description
6557 "Jupyter core is the base package on which Jupyter projects rely.")
6558 (license license:bsd-3)))
6559
6560 (define-public python2-jupyter-core
6561 (package-with-python2 python-jupyter-core))
6562
6563 (define-public python-jupyter-client
6564 (package
6565 (name "python-jupyter-client")
6566 (version "5.2.4")
6567 (source
6568 (origin
6569 (method url-fetch)
6570 (uri (pypi-uri "jupyter_client" version))
6571 (sha256
6572 (base32
6573 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6574 (build-system python-build-system)
6575 ;; Tests fail because of missing native python kernel which I assume is
6576 ;; provided by the ipython package, which we cannot use because it would
6577 ;; cause a dependency cycle.
6578 (arguments
6579 `(#:tests? #f
6580
6581 #:phases (modify-phases %standard-phases
6582 (add-after 'unpack 'set-tool-file-names
6583 (lambda* (#:key inputs #:allow-other-keys)
6584 (let ((iproute (assoc-ref inputs "iproute")))
6585 (substitute* "jupyter_client/localinterfaces.py"
6586 (("'ip'")
6587 (string-append "'" iproute "/sbin/ip'")))
6588 #t))))))
6589 (inputs
6590 `(("iproute" ,iproute)))
6591 (propagated-inputs
6592 `(("python-pyzmq" ,python-pyzmq)
6593 ("python-traitlets" ,python-traitlets)
6594 ("python-jupyter-core" ,python-jupyter-core)))
6595 (home-page "http://jupyter.org/")
6596 (synopsis "Jupyter protocol implementation and client libraries")
6597 (description
6598 "The @code{jupyter_client} package contains the reference implementation
6599 of the Jupyter protocol. It also provides client and kernel management APIs
6600 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6601 installing @code{kernelspec}s for use with Jupyter frontends.")
6602 (license license:bsd-3)))
6603
6604 (define-public python2-jupyter-client
6605 (package-with-python2 python-jupyter-client))
6606
6607 (define-public python-ipykernel
6608 (package
6609 (name "python-ipykernel")
6610 (version "5.1.3")
6611 (source
6612 (origin
6613 (method url-fetch)
6614 (uri (pypi-uri "ipykernel" version))
6615 (sha256
6616 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6617 (build-system python-build-system)
6618 (arguments
6619 `(#:phases
6620 (modify-phases %standard-phases
6621 (replace 'check
6622 (lambda _
6623 (setenv "HOME" "/tmp")
6624 (invoke "pytest" "-v")
6625 #t))
6626 (add-after 'install 'set-python-file-name
6627 (lambda* (#:key outputs #:allow-other-keys)
6628 ;; Record the absolute file name of the 'python' executable in
6629 ;; 'kernel.json'.
6630 (let ((out (assoc-ref outputs "out")))
6631 (substitute* (string-append out "/share/jupyter"
6632 "/kernels/python3/kernel.json")
6633 (("\"python\"")
6634 (string-append "\"" (which "python") "\"")))
6635 #t))))))
6636 (propagated-inputs
6637 `(("python-ipython" ,python-ipython)
6638 ;; imported at runtime during connect
6639 ("python-jupyter-client" ,python-jupyter-client)))
6640 (native-inputs
6641 `(("python-flaky" ,python-flaky)
6642 ("python-nose" ,python-nose)
6643 ("python-pytest" ,python-pytest)))
6644 (home-page "https://ipython.org")
6645 (synopsis "IPython Kernel for Jupyter")
6646 (description
6647 "This package provides the IPython kernel for Jupyter.")
6648 (properties `((python2-variant . ,(delay python2-ipykernel))))
6649 (license license:bsd-3)))
6650
6651 ;; Version 5.x and above no longer support Python 2.
6652 (define-public python2-ipykernel
6653 (package
6654 (name "python2-ipykernel")
6655 (version "4.10.1")
6656 (source
6657 (origin
6658 (method url-fetch)
6659 (uri (pypi-uri "ipykernel" version))
6660 (sha256
6661 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6662 (build-system python-build-system)
6663 (arguments
6664 `(#:python ,python-2))
6665 (propagated-inputs
6666 `(("python2-ipython" ,python2-ipython)
6667 ;; imported at runtime during connect
6668 ("python2-jupyter-client" ,python2-jupyter-client)
6669 ("python2-tornado" ,python2-tornado)
6670 ("python2-traitlets" ,python2-traitlets)))
6671 (native-inputs
6672 `(("python2-mock" ,python2-mock)
6673 ("python2-nose" ,python2-nose)
6674 ("python2-pytest" ,python2-pytest)
6675 ("python2-pytest-cov" ,python2-pytest-cov)))
6676 (home-page "https://ipython.org")
6677 (synopsis "IPython Kernel for Jupyter")
6678 (description
6679 "This package provides the IPython kernel for Jupyter.")
6680 (license license:bsd-3)))
6681
6682 (define-public python-pari-jupyter
6683 (package
6684 (name "python-pari-jupyter")
6685 (version "1.3.2")
6686 (source
6687 (origin
6688 (method url-fetch)
6689 (uri (pypi-uri "pari_jupyter" version))
6690 (sha256
6691 (base32
6692 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6693 (build-system python-build-system)
6694 (propagated-inputs
6695 `(("python-ipykernel" ,python-ipykernel)))
6696 (inputs
6697 `(("pari-gp" ,pari-gp)
6698 ("readline" ,readline)))
6699 (arguments
6700 `(#:tests? #f)) ; no test suite
6701 (home-page
6702 "https://github.com/jdemeyer/pari_jupyter")
6703 (synopsis "A Jupyter kernel for PARI/GP")
6704 (description "The package provides a PARI/GP kernel for Jupyter.")
6705 (license license:gpl3+)))
6706
6707 (define-public python-backcall
6708 (package
6709 (name "python-backcall")
6710 (version "0.1.0")
6711 (source
6712 (origin
6713 (method url-fetch)
6714 (uri (pypi-uri "backcall" version))
6715 (sha256
6716 (base32
6717 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6718 (build-system python-build-system)
6719 (home-page "https://github.com/takluyver/backcall/")
6720 (synopsis "Specifications for callback functions passed in to an API")
6721 (description
6722 "If your code lets other people supply callback functions, it's important
6723 to specify the function signature you expect, and check that functions support
6724 that. Adding extra parameters later would break other peoples code unless
6725 you're careful. The @code{backcall} package provides a way of specifying the
6726 callback signature using a prototype function.")
6727 (license license:bsd-3)))
6728
6729 (define-public python-ipython
6730 (package
6731 (name "python-ipython")
6732 (version "7.9.0")
6733 (source
6734 (origin
6735 (method url-fetch)
6736 (uri (pypi-uri "ipython" version ".tar.gz"))
6737 (sha256
6738 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6739 (build-system python-build-system)
6740 (propagated-inputs
6741 `(("python-backcall" ,python-backcall)
6742 ("python-pyzmq" ,python-pyzmq)
6743 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
6744 ("python-terminado" ,python-terminado)
6745 ("python-matplotlib" ,python-matplotlib)
6746 ("python-numpy" ,python-numpy)
6747 ("python-numpydoc" ,python-numpydoc)
6748 ("python-jedi" ,python-jedi)
6749 ("python-jinja2" ,python-jinja2)
6750 ("python-mistune" ,python-mistune)
6751 ("python-pexpect" ,python-pexpect)
6752 ("python-pickleshare" ,python-pickleshare)
6753 ("python-simplegeneric" ,python-simplegeneric)
6754 ("python-jsonschema" ,python-jsonschema)
6755 ("python-traitlets" ,python-traitlets)
6756 ("python-nbformat" ,python-nbformat)
6757 ("python-pygments" ,python-pygments)))
6758 (inputs
6759 `(("readline" ,readline)
6760 ("which" ,which)))
6761 (native-inputs
6762 `(("graphviz" ,graphviz)
6763 ("pkg-config" ,pkg-config)
6764 ("python-requests" ,python-requests) ;; for tests
6765 ("python-testpath" ,python-testpath)
6766 ("python-nose" ,python-nose)))
6767 (arguments
6768 `(#:phases
6769 (modify-phases %standard-phases
6770 (add-after 'unpack 'make-docs-reproducible
6771 (lambda _
6772 (substitute* "IPython/sphinxext/ipython_directive.py"
6773 ((".*import datetime") "")
6774 ((".*datetime.datetime.now\\(\\)") "")
6775 (("%timeit") "# %timeit"))
6776 #t))
6777 ;; Tests can only be run after the library has been installed and not
6778 ;; within the source directory.
6779 (delete 'check)
6780 (add-after 'install 'check
6781 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6782 (if tests?
6783 (begin
6784 ;; Make installed package available for running the tests
6785 (add-installed-pythonpath inputs outputs)
6786 (setenv "HOME" "/tmp/") ;; required by a test
6787 ;; We only test the core because one of the other tests
6788 ;; tries to import ipykernel.
6789 (invoke "python" "IPython/testing/iptest.py"
6790 "-v" "IPython/core/tests"))
6791 #t)))
6792 (add-before 'check 'fix-tests
6793 (lambda* (#:key inputs #:allow-other-keys)
6794 (substitute* "./IPython/utils/_process_posix.py"
6795 (("/usr/bin/env', 'which") (which "which")))
6796 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6797 (("#!/usr/bin/env python")
6798 (string-append "#!" (which "python"))))
6799 ;; This test introduces a circular dependency on ipykernel
6800 ;; (which depends on ipython).
6801 (delete-file "IPython/core/tests/test_display.py")
6802 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6803 (delete-file "IPython/core/tests/test_interactiveshell.py")
6804 #t)))))
6805 (home-page "https://ipython.org")
6806 (synopsis "IPython is a tool for interactive computing in Python")
6807 (description
6808 "IPython provides a rich architecture for interactive computing with:
6809 Powerful interactive shells, a browser-based notebook, support for interactive
6810 data visualization, embeddable interpreters and tools for parallel
6811 computing.")
6812 (properties `((python2-variant . ,(delay python2-ipython))))
6813 (license license:bsd-3)))
6814
6815 ;; This is the latest release of the LTS version of ipython with support for
6816 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6817 ;; dropped support for Python 2.7.
6818 (define-public python2-ipython
6819 (package
6820 (name "python2-ipython")
6821 (version "5.8.0")
6822 (source
6823 (origin
6824 (method url-fetch)
6825 (uri (pypi-uri "ipython" version ".tar.gz"))
6826 (sha256
6827 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6828 (build-system python-build-system)
6829 (propagated-inputs
6830 `(("python2-backports-shutil-get-terminal-size"
6831 ,python2-backports-shutil-get-terminal-size)
6832 ("python2-pathlib2" ,python2-pathlib2)
6833 ("python2-pyzmq" ,python2-pyzmq)
6834 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6835 ("python2-terminado" ,python2-terminado)
6836 ("python2-matplotlib" ,python2-matplotlib)
6837 ("python2-numpy" ,python2-numpy)
6838 ("python2-numpydoc" ,python2-numpydoc)
6839 ("python2-jinja2" ,python2-jinja2)
6840 ("python2-mistune" ,python2-mistune)
6841 ("python2-pexpect" ,python2-pexpect)
6842 ("python2-pickleshare" ,python2-pickleshare)
6843 ("python2-simplegeneric" ,python2-simplegeneric)
6844 ("python2-jsonschema" ,python2-jsonschema)
6845 ("python2-traitlets" ,python2-traitlets)
6846 ("python2-nbformat" ,python2-nbformat)
6847 ("python2-pygments" ,python2-pygments)))
6848 (inputs
6849 `(("readline" ,readline)
6850 ("which" ,which)))
6851 (native-inputs
6852 `(("graphviz" ,graphviz)
6853 ("pkg-config" ,pkg-config)
6854 ("python2-requests" ,python2-requests) ;; for tests
6855 ("python2-testpath" ,python2-testpath)
6856 ("python2-mock" ,python2-mock)
6857 ("python2-nose" ,python2-nose)))
6858 (arguments
6859 `(#:python ,python-2
6860 #:phases
6861 (modify-phases %standard-phases
6862 (add-before 'check 'delete-broken-tests
6863 (lambda* (#:key inputs #:allow-other-keys)
6864 ;; These tests throw errors for unknown reasons.
6865 (delete-file "IPython/core/tests/test_displayhook.py")
6866 (delete-file "IPython/core/tests/test_magic_terminal.py")
6867 (delete-file "IPython/core/tests/test_profile.py")
6868 #t)))))
6869 (home-page "https://ipython.org")
6870 (synopsis "IPython is a tool for interactive computing in Python")
6871 (description
6872 "IPython provides a rich architecture for interactive computing with:
6873 Powerful interactive shells, a browser-based notebook, support for interactive
6874 data visualization, embeddable interpreters and tools for parallel
6875 computing.")
6876 (license license:bsd-3)))
6877
6878 (define-public python-ipython-documentation
6879 (package
6880 (inherit python-ipython)
6881 (name "python-ipython-documentation")
6882 (version (package-version python-ipython))
6883 (arguments
6884 `(#:phases
6885 (modify-phases %standard-phases
6886 (delete 'build)
6887 (delete 'check)
6888 (replace 'install
6889 (lambda* (#:key outputs #:allow-other-keys)
6890 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6891 (doc (string-append data "/doc/" ,name "-" ,version))
6892 (html (string-append doc "/html"))
6893 (man1 (string-append data "/man/man1"))
6894 (info (string-append data "/info"))
6895 (examples (string-append doc "/examples"))
6896 (python-arg (string-append "PYTHON=" (which "python"))))
6897 (setenv "LANG" "en_US.utf8")
6898 (with-directory-excursion "docs"
6899 ;; FIXME: pdf fails to build
6900 ;;(system* "make" "pdf" "PAPER=a4")
6901 (system* "make" python-arg "html")
6902 ;; FIXME: the generated texi file contains ^@^@, which trips
6903 ;; up the parser.
6904 ;; (system* "make" python-arg "info")
6905 )
6906 (copy-recursively "docs/man" man1)
6907 (copy-recursively "examples" examples)
6908 (copy-recursively "docs/build/html" html)
6909 ;; (copy-file "docs/build/latex/ipython.pdf"
6910 ;; (string-append doc "/ipython.pdf"))
6911 (mkdir-p info)
6912 ;; (copy-file "docs/build/texinfo/ipython.info"
6913 ;; (string-append info "/ipython.info"))
6914 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6915 #t)))))
6916 (inputs
6917 `(("python-ipython" ,python-ipython)
6918 ("python-ipykernel" ,python-ipykernel)))
6919 (native-inputs
6920 `(("python-sphinx" ,python-sphinx)
6921 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6922 ;; FIXME: It's possible that a smaller union would work just as well.
6923 ("texlive" ,(texlive-union (list texlive-amsfonts
6924 texlive-fonts-ec
6925 texlive-generic-ifxetex
6926 texlive-generic-pdftex
6927 texlive-latex-capt-of
6928 texlive-latex-cmap
6929 texlive-latex-environ
6930 texlive-latex-eqparbox
6931 texlive-latex-etoolbox
6932 texlive-latex-expdlist
6933 texlive-latex-fancyhdr
6934 texlive-latex-fancyvrb
6935 texlive-latex-fncychap
6936 texlive-latex-float
6937 texlive-latex-framed
6938 texlive-latex-geometry
6939 texlive-latex-graphics
6940 texlive-latex-hyperref
6941 texlive-latex-mdwtools
6942 texlive-latex-multirow
6943 texlive-latex-needspace
6944 texlive-latex-oberdiek
6945 texlive-latex-parskip
6946 texlive-latex-preview
6947 texlive-latex-tabulary
6948 texlive-latex-threeparttable
6949 texlive-latex-titlesec
6950 texlive-latex-trimspaces
6951 texlive-latex-ucs
6952 texlive-latex-upquote
6953 texlive-latex-url
6954 texlive-latex-varwidth
6955 texlive-latex-wrapfig)))
6956 ("texinfo" ,texinfo)))))
6957
6958 (define-public python-urwid
6959 (package
6960 (name "python-urwid")
6961 (version "2.1.0")
6962 (source
6963 (origin
6964 (method url-fetch)
6965 (uri (pypi-uri "urwid" version))
6966 (sha256
6967 (base32
6968 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6969 (build-system python-build-system)
6970 (home-page "http://urwid.org")
6971 (synopsis "Console user interface library for Python")
6972 (description
6973 "Urwid is a curses-based UI/widget library for Python. It includes many
6974 features useful for text console applications.")
6975 (license license:lgpl2.1+)))
6976
6977 (define-public python2-urwid
6978 (package-with-python2 python-urwid))
6979
6980 (define-public python-urwidtrees
6981 (package
6982 (name "python-urwidtrees")
6983 (version "1.0.2")
6984 (source
6985 (origin
6986 (method git-fetch)
6987 ;; package author intends on distributing via github rather than pypi:
6988 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6989 (uri (git-reference
6990 (url "https://github.com/pazz/urwidtrees")
6991 (commit version)))
6992 (file-name (git-file-name name version))
6993 (sha256
6994 (base32
6995 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6996 (build-system python-build-system)
6997 (arguments
6998 '(#:use-setuptools? #f
6999 #:tests? #f)) ; no tests
7000 (propagated-inputs `(("python-urwid" ,python-urwid)))
7001 (home-page "https://github.com/pazz/urwidtrees")
7002 (synopsis "Tree widgets for urwid")
7003 (description "Urwidtrees is a Widget Container API for the @code{urwid}
7004 toolkit. Use it to build trees of widgets.")
7005 (license license:gpl3+)))
7006
7007 (define-public python2-urwidtrees
7008 (package-with-python2 python-urwidtrees))
7009
7010 (define-public python-ua-parser
7011 (package
7012 (name "python-ua-parser")
7013 (version "0.8.0")
7014 (source
7015 (origin
7016 (method url-fetch)
7017 (uri (pypi-uri "ua-parser" version))
7018 (sha256
7019 (base32
7020 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
7021 (build-system python-build-system)
7022 (arguments
7023 `(#:tests? #f)) ;no test suite in release
7024 (native-inputs
7025 `(("python-pyyaml" ,python-pyyaml)))
7026 (home-page "https://github.com/ua-parser/uap-python")
7027 (synopsis "User agent parser")
7028 (description
7029 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
7030 (license license:asl2.0)))
7031
7032 (define-public python2-ua-parser
7033 (package-with-python2 python-ua-parser))
7034
7035 (define-public python-user-agents
7036 (package
7037 (name "python-user-agents")
7038 (version "1.1.0")
7039 (source
7040 (origin
7041 (method url-fetch)
7042 (uri (pypi-uri "user-agents" version))
7043 (sha256
7044 (base32
7045 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
7046 (build-system python-build-system)
7047 (arguments
7048 `(#:tests? #f)) ;missing devices.json test file in release
7049 (propagated-inputs
7050 `(("python-ua-parser" ,python-ua-parser)))
7051 (home-page "https://github.com/selwin/python-user-agents")
7052 (synopsis "User Agent strings parsing library")
7053 (description
7054 "A library to identify devices (phones, tablets) and their capabilities by
7055 parsing (browser/HTTP) user agent strings.")
7056 (license license:expat)))
7057
7058 (define-public python2-user-agents
7059 (package-with-python2 python-user-agents))
7060
7061 (define-public python-dbus
7062 (package
7063 (name "python-dbus")
7064 (version "1.2.16")
7065 (source
7066 (origin
7067 (method url-fetch)
7068 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
7069 "dbus-python-" version ".tar.gz"))
7070 (sha256
7071 (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
7072 (build-system gnu-build-system)
7073 (native-inputs
7074 `(("pkg-config" ,pkg-config)))
7075 (inputs
7076 `(("python" ,python-wrapper)
7077 ("dbus-glib" ,dbus-glib)))
7078 (synopsis "Python bindings for D-bus")
7079 (description "python-dbus provides bindings for libdbus, the reference
7080 implementation of D-Bus.")
7081 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
7082 (license license:expat)))
7083
7084 (define-public python2-dbus
7085 (package (inherit python-dbus)
7086 (name "python2-dbus")
7087 (inputs `(("python" ,python-2)
7088 ,@(alist-delete "python"
7089 (package-inputs python-dbus)
7090 equal?)))))
7091
7092 (define-public python-notify2
7093 (package
7094 (name "python-notify2")
7095 (version "0.3.1")
7096 (source
7097 (origin
7098 (method url-fetch)
7099 (uri (pypi-uri "notify2" version))
7100 (sha256
7101 (base32
7102 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
7103 (build-system python-build-system)
7104 (arguments `(#:tests? #f)) ; tests depend on system state
7105 (native-inputs
7106 `(("python-dbus" ,python-dbus)))
7107 (home-page "https://bitbucket.org/takluyver/pynotify2")
7108 (synopsis "Python interface to D-Bus notifications")
7109 (description
7110 "Pynotify2 provides a Python interface for sending D-Bus notifications.
7111 It is a reimplementation of pynotify in pure Python, and an alternative to
7112 the GObject Introspection bindings to libnotify for non-GTK applications.")
7113 (license (list license:bsd-2
7114 license:lgpl2.1+))))
7115
7116 (define-public python2-notify2
7117 (package-with-python2 python-notify2))
7118
7119 ;; beautifulsoup4 has a totally different namespace than 3.x,
7120 ;; and pypi seems to put it under its own name, so I guess we should too
7121 (define-public python-beautifulsoup4
7122 (package
7123 (name "python-beautifulsoup4")
7124 (version "4.9.1")
7125 (source
7126 (origin
7127 (method url-fetch)
7128 (uri (pypi-uri "beautifulsoup4" version))
7129 (sha256
7130 (base32
7131 "1mvzlw3pzbhsvl3z8784s5h7iiflm2hggiy1fxyrrxwnbc8lvk3k"))))
7132 (build-system python-build-system)
7133 (arguments
7134 `(#:phases
7135 (modify-phases %standard-phases
7136 ;; The Python 2 source is the definitive source of beautifulsoup4. We
7137 ;; must use this conversion script when building with Python 3. The
7138 ;; conversion script also runs the tests.
7139 ;; For more information, see the file 'convert-py3k' in the source
7140 ;; distribution.
7141 (replace 'check
7142 (lambda _ (invoke "./convert-py3k"))))))
7143 (propagated-inputs
7144 `(("python-soupsieve" ,python-soupsieve)))
7145 (home-page
7146 "https://www.crummy.com/software/BeautifulSoup/bs4/")
7147 (synopsis
7148 "Python screen-scraping library")
7149 (description
7150 "Beautiful Soup is a Python library designed for rapidly setting up
7151 screen-scraping projects. It offers Pythonic idioms for navigating,
7152 searching, and modifying a parse tree, providing a toolkit for
7153 dissecting a document and extracting what you need. It automatically
7154 converts incoming documents to Unicode and outgoing documents to UTF-8.")
7155 (license license:expat)
7156 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7157
7158 (define-public python2-beautifulsoup4
7159 (package
7160 (inherit (package-with-python2
7161 (strip-python2-variant python-beautifulsoup4)))
7162 (arguments `(#:python ,python-2))))
7163
7164 (define-public python-soupsieve
7165 (package
7166 (name "python-soupsieve")
7167 (version "2.0.1")
7168 (source
7169 (origin
7170 (method url-fetch)
7171 (uri (pypi-uri "soupsieve" version))
7172 (sha256
7173 (base32
7174 "0ch2rhvsbwfpvzm4kzy81rclbzr533yv83hzg1gx55byfa0w37d5"))))
7175 (build-system python-build-system)
7176 (arguments `(#:tests? #f))
7177 ;;XXX: 2 tests fail currently despite claming they were to be
7178 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7179 ;;don't want to create a circular dependency.
7180 (home-page "https://github.com/facelessuser/soupsieve")
7181 (synopsis "CSS selector library")
7182 (description
7183 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7184 Soup 4. It aims to provide selecting, matching, and filtering using modern
7185 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7186 specifications up through the latest CSS level 4 drafts and beyond (though
7187 some are not yet implemented).")
7188 (properties `((python2-variant . ,(delay python2-soupsieve))))
7189 (license license:expat)))
7190
7191 ;; This is the last version that supports python-2
7192 (define-public python2-soupsieve
7193 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7194 (package
7195 (inherit base)
7196 (version "1.9.6")
7197 (source
7198 (origin
7199 (method url-fetch)
7200 (uri (pypi-uri "soupsieve" version))
7201 (sha256
7202 (base32
7203 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7204 (propagated-inputs
7205 `(("python2-backports-functools-lru-cache"
7206 ,python2-backports-functools-lru-cache)
7207 ,@(package-propagated-inputs base))))))
7208
7209 (define-public python-netifaces
7210 (package
7211 (name "python-netifaces")
7212 (version "0.10.9")
7213 (source
7214 (origin
7215 (method url-fetch)
7216 (uri (pypi-uri "netifaces" version))
7217 (sha256
7218 (base32
7219 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7220 (build-system python-build-system)
7221 (home-page "https://github.com/al45tair/netifaces")
7222 (synopsis
7223 "Python module for portable network interface information")
7224 (description
7225 "Netifaces is a Python module providing information on network
7226 interfaces in an easy and portable manner.")
7227 (license license:expat)))
7228
7229 (define-public python2-netifaces
7230 (package-with-python2 python-netifaces))
7231
7232 (define-public python-networkx
7233 (package
7234 (name "python-networkx")
7235 (version "2.4")
7236 (source
7237 (origin
7238 (method url-fetch)
7239 (uri (pypi-uri "networkx" version))
7240 (sha256
7241 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
7242 (build-system python-build-system)
7243 (arguments
7244 '(#:phases (modify-phases %standard-phases
7245 (replace 'check
7246 (lambda* (#:key tests? #:allow-other-keys)
7247 (if tests?
7248 (invoke "pytest" "-vv" "--pyargs" "networkx")
7249 (format #t "test suite not run~%"))
7250 #t)))))
7251 ;; python-decorator is needed at runtime.
7252 (propagated-inputs
7253 `(("python-decorator" ,python-decorator)))
7254 (native-inputs
7255 `(("python-pytest" ,python-pytest)))
7256 (home-page "https://networkx.github.io/")
7257 (synopsis "Python module for creating and manipulating graphs and networks")
7258 (description
7259 "NetworkX is a Python package for the creation, manipulation, and study
7260 of the structure, dynamics, and functions of complex networks.")
7261 (properties `((python2-variant . ,(delay python2-networkx))))
7262 (license license:bsd-3)))
7263
7264 ;; NetworkX 2.2 is the last version with support for Python 2.
7265 (define-public python2-networkx
7266 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7267 (package
7268 (inherit base)
7269 (version "2.2")
7270 (source (origin
7271 (method url-fetch)
7272 (uri (pypi-uri "networkx" version ".zip"))
7273 (sha256
7274 (base32
7275 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7276 (arguments
7277 `(#:python ,python-2))
7278 (native-inputs
7279 `(("python-nose" ,python2-nose)
7280 ("unzip" ,unzip))))))
7281
7282 (define-public python-datrie
7283 (package
7284 (name "python-datrie")
7285 (version "0.8.2")
7286 (source
7287 (origin
7288 (method url-fetch)
7289 (uri (pypi-uri "datrie" version))
7290 (sha256
7291 (base32
7292 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
7293 (build-system python-build-system)
7294 (native-inputs
7295 `(("python-cython" ,python-cython)
7296 ("python-hypothesis" ,python-hypothesis)
7297 ("python-pytest" ,python-pytest)
7298 ("python-pytest-runner" ,python-pytest-runner)))
7299 (home-page "https://github.com/kmike/datrie")
7300 (synopsis "Fast, efficiently stored trie for Python")
7301 (description
7302 "This package provides a fast, efficiently stored trie implementation for
7303 Python.")
7304 (license license:lgpl2.1+)))
7305
7306 (define-public snakemake
7307 (package
7308 (name "snakemake")
7309 (version "5.7.1")
7310 (source
7311 (origin
7312 (method url-fetch)
7313 (uri (pypi-uri "snakemake" version))
7314 (sha256
7315 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7316 (build-system python-build-system)
7317 (arguments
7318 ;; TODO: Package missing test dependencies.
7319 '(#:tests? #f
7320 #:phases
7321 (modify-phases %standard-phases
7322 ;; For cluster execution Snakemake will call Python. Since there is
7323 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7324 ;; this by calling the snakemake wrapper instead.
7325 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7326 (lambda* (#:key outputs #:allow-other-keys)
7327 (substitute* "snakemake/executors.py"
7328 (("\\{sys.executable\\} -m snakemake")
7329 (string-append (assoc-ref outputs "out")
7330 "/bin/snakemake")))
7331 #t)))))
7332 (propagated-inputs
7333 `(("python-appdirs" ,python-appdirs)
7334 ("python-configargparse" ,python-configargparse)
7335 ("python-datrie" ,python-datrie)
7336 ("python-docutils" ,python-docutils)
7337 ("python-gitpython" ,python-gitpython)
7338 ("python-jinja2" ,python-jinja2)
7339 ("python-jsonschema" ,python-jsonschema)
7340 ("python-networkx" ,python-networkx)
7341 ("python-psutil" ,python-psutil)
7342 ("python-pyyaml" ,python-pyyaml)
7343 ("python-ratelimiter" ,python-ratelimiter)
7344 ("python-requests" ,python-requests)
7345 ("python-wrapt" ,python-wrapt)))
7346 (home-page "https://snakemake.readthedocs.io")
7347 (synopsis "Python-based execution environment for make-like workflows")
7348 (description
7349 "Snakemake aims to reduce the complexity of creating workflows by
7350 providing a clean and modern domain specific specification language (DSL) in
7351 Python style, together with a fast and comfortable execution environment.")
7352 (license license:expat)))
7353
7354 (define-public python-pyqrcode
7355 (package
7356 (name "python-pyqrcode")
7357 (version "1.2.1")
7358 (source
7359 (origin
7360 (method url-fetch)
7361 (uri (pypi-uri "PyQRCode" version))
7362 (sha256
7363 (base32
7364 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7365 (build-system python-build-system)
7366 (home-page
7367 "https://github.com/mnooner256/pyqrcode")
7368 (synopsis "QR code generator")
7369 (description
7370 "Pyqrcode is a QR code generator written purely in Python with
7371 SVG, EPS, PNG and terminal output.")
7372 (license license:bsd-3)))
7373
7374 (define-public python-seaborn
7375 (package
7376 (name "python-seaborn")
7377 (version "0.10.0")
7378 (source
7379 (origin
7380 (method url-fetch)
7381 (uri (pypi-uri "seaborn" version))
7382 (sha256
7383 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7384 (build-system python-build-system)
7385 (arguments
7386 `(#:phases
7387 (modify-phases %standard-phases
7388 (add-before 'check 'start-xserver
7389 (lambda* (#:key inputs #:allow-other-keys)
7390 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7391 ;; There must be a running X server and make check doesn't
7392 ;; start one. Therefore we must do it.
7393 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7394 (setenv "DISPLAY" ":1")
7395 #t)))
7396 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7397 (propagated-inputs
7398 `(("python-pandas" ,python-pandas)
7399 ("python-matplotlib" ,python-matplotlib)
7400 ("python-numpy" ,python-numpy)
7401 ("python-scipy" ,python-scipy)))
7402 (native-inputs
7403 `(("python-pytest" ,python-pytest)
7404 ("xorg-server" ,xorg-server-for-tests)))
7405 (home-page "https://seaborn.pydata.org/")
7406 (synopsis "Statistical data visualization")
7407 (description
7408 "Seaborn is a library for making attractive and informative statistical
7409 graphics in Python. It is built on top of matplotlib and tightly integrated
7410 with the PyData stack, including support for numpy and pandas data structures
7411 and statistical routines from scipy and statsmodels.")
7412 (properties `((python2-variant . ,(delay python2-seaborn))))
7413 (license license:bsd-3)))
7414
7415 ;; 0.9.1 is the last release with support for Python 2.
7416 (define-public python2-seaborn
7417 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7418 (package
7419 (inherit base)
7420 (version "0.9.1")
7421 (source (origin
7422 (method url-fetch)
7423 (uri (pypi-uri "seaborn" version))
7424 (sha256
7425 (base32
7426 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7427
7428 (define-public python-mpmath
7429 (package
7430 (name "python-mpmath")
7431 (version "0.19")
7432 (source (origin
7433 (method url-fetch)
7434 (uri (string-append "http://mpmath.org/files/mpmath-"
7435 version ".tar.gz"))
7436 (sha256
7437 (base32
7438 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7439 (build-system python-build-system)
7440 (arguments
7441 '(#:phases
7442 (modify-phases %standard-phases
7443 (replace 'check
7444 (lambda _
7445 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7446 (home-page "http://mpmath.org")
7447 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7448 (description
7449 "@code{mpmath} can be used as an arbitrary-precision substitute for
7450 Python's float/complex types and math/cmath modules, but also does much
7451 more advanced mathematics.")
7452 (license license:bsd-3)))
7453
7454 (define-public python2-mpmath
7455 (package-with-python2 python-mpmath))
7456
7457 (define-public python-bigfloat
7458 (package
7459 (name "python-bigfloat")
7460 (version "0.3.0")
7461 (source
7462 (origin
7463 (method url-fetch)
7464 (uri (pypi-uri "bigfloat" version))
7465 (sha256
7466 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7467 (build-system python-build-system)
7468 (inputs
7469 `(("mpfr" ,mpfr)))
7470 (home-page "https://github.com/mdickinson/bigfloat")
7471 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7472 (description
7473 "This package provides a Python interface to the MPFR library for
7474 multiprecision arithmetic.")
7475 (license license:lgpl3+)))
7476
7477 (define-public python2-bigfloat
7478 (package-with-python2 python-bigfloat))
7479
7480 (define-public python-sympy
7481 (package
7482 (name "python-sympy")
7483 (version "1.1.1")
7484 (source
7485 (origin
7486 (method url-fetch)
7487 (uri (string-append
7488 "https://github.com/sympy/sympy/releases/download/sympy-"
7489 version "/sympy-" version ".tar.gz"))
7490 (sha256
7491 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7492 (build-system python-build-system)
7493 (arguments
7494 `(#:phases
7495 (modify-phases %standard-phases
7496 ;; Run the core tests after installation. By default it would run
7497 ;; *all* tests, which take a very long time to complete and are known
7498 ;; to be flaky.
7499 (delete 'check)
7500 (add-after 'install 'check
7501 (lambda* (#:key outputs #:allow-other-keys)
7502 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7503 #t)))))
7504 (propagated-inputs
7505 `(("python-mpmath" ,python-mpmath)))
7506 (home-page "https://www.sympy.org/")
7507 (synopsis "Python library for symbolic mathematics")
7508 (description
7509 "SymPy is a Python library for symbolic mathematics. It aims to become a
7510 full-featured computer algebra system (CAS) while keeping the code as simple
7511 as possible in order to be comprehensible and easily extensible.")
7512 (license license:bsd-3)))
7513
7514 (define-public python2-sympy
7515 (package
7516 (inherit (package-with-python2 python-sympy))
7517 (arguments
7518 `(#:phases
7519 (modify-phases %standard-phases
7520 ;; Run the core tests after installation. By default it would run
7521 ;; *all* tests, which take a very long time to complete and are known
7522 ;; to be flaky.
7523 (delete 'check)
7524 (add-after 'install 'check
7525 (lambda* (#:key outputs #:allow-other-keys)
7526 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7527 #t)))))))
7528
7529 (define-public python-q
7530 (package
7531 (name "python-q")
7532 (version "2.6")
7533 (source
7534 (origin
7535 (method url-fetch)
7536 (uri (pypi-uri "q" version))
7537 (sha256
7538 (base32
7539 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7540 (build-system python-build-system)
7541 (home-page "https://github.com/zestyping/q")
7542 (synopsis "Quick-and-dirty debugging output for tired programmers")
7543 (description
7544 "q is a Python module for \"print\" style of debugging Python code. It
7545 provides convenient short API for print out of values, tracebacks, and
7546 falling into the Python interpreter.")
7547 (license license:asl2.0)))
7548
7549 (define-public python2-q
7550 (package-with-python2 python-q))
7551
7552 (define-public python-xlib
7553 (package
7554 (name "python-xlib")
7555 (version "0.27")
7556 (source
7557 (origin
7558 (method git-fetch)
7559 (uri (git-reference
7560 (url "https://github.com/python-xlib/python-xlib")
7561 (commit version)))
7562 (file-name (git-file-name name version))
7563 (sha256
7564 (base32 "09kimic8rhprx3q8nzalc4aggg42ahqm4v5qcj8dm68yvxfdk986"))))
7565 (build-system python-build-system)
7566 (arguments
7567 `(#:phases
7568 (modify-phases %standard-phases
7569 (add-before 'check 'start-xserver
7570 (lambda* (#:key inputs #:allow-other-keys)
7571 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7572 ;; There must be a running X server and make check doesn't
7573 ;; start one. Therefore we must do it.
7574 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7575 (setenv "DISPLAY" ":1")
7576 #t))))))
7577 (native-inputs
7578 `(("python-mock" ,python-mock)
7579 ("python-setuptools-scm" ,python-setuptools-scm)
7580 ("python-six" ,python-six)
7581 ("xorg-server" ,xorg-server)))
7582 (home-page "https://github.com/python-xlib/python-xlib")
7583 (synopsis "Python X11 client library")
7584 (description
7585 "The Python X Library is intended to be a fully functional
7586 X client library for Python programs. It is useful to implement
7587 low-level X clients. It is written entirely in Python.")
7588 (license license:gpl2+)))
7589
7590 (define-public python2-xlib
7591 (package-with-python2 python-xlib))
7592
7593 (define-public python-singledispatch
7594 (package
7595 (name "python-singledispatch")
7596 (version "3.4.0.3")
7597 (source
7598 (origin
7599 (method url-fetch)
7600 (uri (pypi-uri "singledispatch" version))
7601 (sha256
7602 (base32
7603 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7604 (build-system python-build-system)
7605 (native-inputs
7606 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7607 (home-page
7608 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7609 (synopsis "Backport of singledispatch feature from Python 3.4")
7610 (description
7611 "This library brings functools.singledispatch from Python 3.4 to Python
7612 2.6-3.3.")
7613 (license license:expat)))
7614
7615 (define-public python2-singledispatch
7616 (package-with-python2 python-singledispatch))
7617
7618 ;; the python- version can be removed with python-3.5
7619 (define-public python-backports-abc
7620 (package
7621 (name "python-backports-abc")
7622 (version "0.5")
7623 (source
7624 (origin
7625 (method url-fetch)
7626 (uri (pypi-uri "backports_abc" version))
7627 (sha256
7628 (base32
7629 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7630 (build-system python-build-system)
7631 (home-page "https://github.com/cython/backports_abc")
7632 (synopsis "Backport of additions to the 'collections.abc' module")
7633 (description
7634 "Python-backports-abc provides a backport of additions to the
7635 @code{collections.abc} module in Python-3.5.")
7636 (license license:psfl)))
7637
7638 (define-public python2-backports-abc
7639 (package-with-python2 python-backports-abc))
7640
7641 (define-public python-backports-csv
7642 (package
7643 (name "python-backports-csv")
7644 (version "1.0.7")
7645 (source
7646 (origin
7647 (method url-fetch)
7648 (uri (pypi-uri "backports.csv" version))
7649 (sha256
7650 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7651 (build-system python-build-system)
7652 (home-page "https://github.com/ryanhiebert/backports.csv")
7653 (synopsis "Backport of Python 3's csv module for Python 2")
7654 (description
7655 "Provides a backport of Python 3's @code{csv} module for parsing
7656 comma separated values. The API of the @code{csv} module in Python 2
7657 is drastically different from the @code{csv} module in Python 3.
7658 This is due, for the most part, to the difference between str in
7659 Python 2 and Python 3.")
7660 (license license:psfl)))
7661
7662 (define-public python2-backports-csv
7663 (package-with-python2 python-backports-csv))
7664
7665 (define-public python2-backports-shutil-get-terminal-size
7666 (package
7667 (name "python2-backports-shutil-get-terminal-size")
7668 (version "1.0.0")
7669 (source
7670 (origin
7671 (method url-fetch)
7672 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7673 (sha256
7674 (base32
7675 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7676 (build-system python-build-system)
7677 (arguments
7678 `(#:python ,python-2
7679 #:phases
7680 (modify-phases %standard-phases
7681 (replace 'check
7682 (lambda _
7683 (setenv "PYTHONPATH" (string-append "./build/lib:"
7684 (getenv "PYTHONPATH")))
7685 (invoke "py.test" "-v"))))))
7686 (native-inputs
7687 `(("python2-pytest" ,python2-pytest)))
7688 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7689 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7690 (description
7691 "This package provides a backport of the @code{get_terminal_size
7692 function} from Python 3.3's @code{shutil}.
7693 Unlike the original version it is written in pure Python rather than C,
7694 so it might be a tiny bit slower.")
7695 (license license:expat)))
7696
7697 (define-public python-waf
7698 (package
7699 (name "python-waf")
7700 (version "2.0.19")
7701 (source (origin
7702 (method url-fetch)
7703 (uri (string-append "https://waf.io/"
7704 "waf-" version ".tar.bz2"))
7705 (sha256
7706 (base32
7707 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7708 (build-system python-build-system)
7709 (arguments
7710 '(#:phases
7711 (modify-phases %standard-phases
7712 (replace 'build
7713 (lambda _
7714 ;; XXX: Find a way to add all extra tools.
7715 (let ((tools '("gccdeps"
7716 "clang_compilation_database")))
7717 (invoke "python" "waf-light" "configure" "build"
7718 (string-append "--tools="
7719 (string-join tools ","))))))
7720 (replace 'check
7721 (lambda _
7722 (invoke "python" "waf" "--version")))
7723 (replace 'install
7724 (lambda* (#:key outputs #:allow-other-keys)
7725 (let ((out (assoc-ref outputs "out")))
7726 (install-file "waf" (string-append out "/bin")))
7727 #t))
7728 ;; waf breaks when it is wrapped.
7729 (delete 'wrap))))
7730 (home-page "https://waf.io/")
7731 (synopsis "Python-based build system")
7732 (description
7733 "Waf is a Python-based framework for configuring, compiling and installing
7734 applications.")
7735 (license license:bsd-3)))
7736
7737 (define-public python2-waf
7738 (package-with-python2 python-waf))
7739
7740 (define-public python-pyzmq
7741 (package
7742 (name "python-pyzmq")
7743 (version "17.1.2")
7744 (source
7745 (origin
7746 (method url-fetch)
7747 (uri (pypi-uri "pyzmq" version))
7748 (sha256
7749 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7750 (build-system python-build-system)
7751 (arguments
7752 `(#:configure-flags
7753 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7754 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7755 ;; --inplace' for 'python setup.py test' to work.
7756 #:tests? #f))
7757 (inputs
7758 `(("zeromq" ,zeromq)))
7759 (native-inputs
7760 `(("pkg-config" ,pkg-config)
7761 ("python-nose" ,python-nose)))
7762 (home-page "https://github.com/zeromq/pyzmq")
7763 (synopsis "Python bindings for 0MQ")
7764 (description
7765 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7766 (license license:bsd-4)))
7767
7768 (define-public python2-pyzmq
7769 (package-with-python2 python-pyzmq))
7770
7771 (define-public python-pep8
7772 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7773 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7774 ;; some dependents' test suites, and nothing more.
7775 (package
7776 (name "python-pep8")
7777 (version "1.7.0")
7778 (source
7779 (origin
7780 (method url-fetch)
7781 (uri (pypi-uri "pep8" version))
7782 (sha256
7783 (base32
7784 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7785 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7786 (build-system python-build-system)
7787 (home-page "https://pep8.readthedocs.org/")
7788 (synopsis "Python style guide checker")
7789 (description
7790 "This tools checks Python code against some of the style conventions in
7791 PEP 8.")
7792 (license license:expat)))
7793
7794 (define-public python2-pep8
7795 (package-with-python2 python-pep8))
7796
7797 (define-public python-pep517
7798 (package
7799 (name "python-pep517")
7800 (version "0.8.2")
7801 (source
7802 (origin
7803 (method url-fetch)
7804 (uri (pypi-uri "pep517" version))
7805 (sha256
7806 (base32
7807 "17m2bcabx3sr5wjalgzppfx5xahqrwm12zq58h68mm482b7rjqcf"))))
7808 (build-system python-build-system)
7809 (arguments
7810 '(#:phases
7811 (modify-phases %standard-phases
7812 (replace 'check
7813 (lambda* (#:key tests? #:allow-other-keys)
7814 (delete-file "pytest.ini")
7815 ;; This test tries to connect to the internet
7816 (delete-file "tests/test_meta.py")
7817 (if tests?
7818 (invoke "pytest")
7819 #t))))))
7820 (native-inputs
7821 `(("python-mock" ,python-mock)
7822 ("python-pytest" ,python-pytest)
7823 ("python-testpath" ,python-testpath)))
7824 (propagated-inputs
7825 `(("python-toml" ,python-toml)
7826 ("python-wheel" ,python-wheel)))
7827 (home-page "https://github.com/pypa/pep517")
7828 (synopsis "Wrappers to build Python packages using PEP 517 hooks")
7829 (description
7830 "Wrappers to build Python packages using PEP 517 hooks.")
7831 (properties `((python2-variant . ,(delay python2-pep517))))
7832 (license license:expat)))
7833
7834 ;; Skip the tests so we don't create a cyclical dependency with pytest.
7835 (define-public python2-pep517
7836 (let ((base (package-with-python2
7837 (strip-python2-variant python-pep517))))
7838 (package
7839 (inherit base)
7840 (name "python2-pep517")
7841 (arguments
7842 `(#:tests? #f
7843 ,@(package-arguments base)))
7844 (native-inputs `()))))
7845
7846 (define-public python-pyflakes
7847 (package
7848 (name "python-pyflakes")
7849 (version "2.2.0")
7850 (source
7851 (origin
7852 (method url-fetch)
7853 (uri (pypi-uri "pyflakes" version))
7854 (sha256
7855 (base32
7856 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))
7857 (build-system python-build-system)
7858 (home-page
7859 "https://github.com/pyflakes/pyflakes")
7860 (synopsis "Passive checker of Python programs")
7861 (description
7862 "Pyflakes statically checks Python source code for common errors.")
7863 (license license:expat)))
7864
7865 (define-public python2-pyflakes
7866 (package-with-python2 python-pyflakes))
7867
7868 ;; Flake8 2.6 requires an older version of pyflakes.
7869 ;; This should be removed ASAP.
7870 (define-public python-pyflakes-1.2
7871 (package (inherit python-pyflakes)
7872 (version "1.2.3")
7873 (source
7874 (origin
7875 (method url-fetch)
7876 (uri (pypi-uri "pyflakes" version))
7877 (sha256
7878 (base32
7879 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7880 (arguments
7881 '(#:phases
7882 (modify-phases %standard-phases
7883 ;; This one test fails.
7884 (replace 'check
7885 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7886 (native-inputs
7887 `(("python-pytest" ,python-pytest)))))
7888
7889 (define-public python-mccabe
7890 (package
7891 (name "python-mccabe")
7892 (version "0.6.1")
7893 (source
7894 (origin
7895 (method url-fetch)
7896 (uri (pypi-uri "mccabe" version))
7897 (sha256
7898 (base32
7899 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7900 (build-system python-build-system)
7901 (native-inputs
7902 `(("python-pytest" ,python-pytest-bootstrap)
7903 ("python-pytest-runner" ,python-pytest-runner)))
7904 (home-page "https://github.com/flintwork/mccabe")
7905 (synopsis "McCabe checker, plugin for flake8")
7906 (description
7907 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7908 complexity of Python source code.")
7909 (license license:expat)))
7910
7911 (define-public python2-mccabe
7912 (package-with-python2 python-mccabe))
7913
7914 (define-public python-mccabe-0.2.1
7915 (package (inherit python-mccabe)
7916 (version "0.2.1")
7917 (source
7918 (origin
7919 (method url-fetch)
7920 (uri (pypi-uri "mccabe" version))
7921 (sha256
7922 (base32
7923 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7924
7925 (define-public python2-mccabe-0.2.1
7926 (package-with-python2 python-mccabe-0.2.1))
7927
7928 ;; Flake8 2.4.1 requires an older version of pep8.
7929 ;; This should be removed ASAP.
7930 (define-public python-pep8-1.5.7
7931 (package (inherit python-pep8)
7932 (version "1.5.7")
7933 (source
7934 (origin
7935 (method url-fetch)
7936 (uri (pypi-uri "pep8" version))
7937 (sha256
7938 (base32
7939 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7940 (arguments
7941 ;; XXX Tests not compatible with Python 3.5.
7942 '(#:tests? #f))))
7943
7944 (define-public python2-pep8-1.5.7
7945 (package-with-python2 python-pep8-1.5.7))
7946
7947 (define-public python-flake8
7948 (package
7949 (name "python-flake8")
7950 (version "3.8.3")
7951 (source (origin
7952 (method url-fetch)
7953 (uri (pypi-uri "flake8" version))
7954 (sha256
7955 (base32
7956 "02527892hh0qjivxaiphzalj7q32qkna1cqaikjs7c03mk5ryjzh"))))
7957 (build-system python-build-system)
7958 (arguments
7959 `(#:phases
7960 (modify-phases %standard-phases
7961 (delete 'check)
7962 (add-after 'install 'check
7963 (lambda* (#:key inputs outputs #:allow-other-keys)
7964 (add-installed-pythonpath inputs outputs)
7965 (invoke "pytest" "-v")
7966 #t)))))
7967 (propagated-inputs
7968 `(("python-pycodestyle" ,python-pycodestyle)
7969 ("python-entrypoints" ,python-entrypoints)
7970 ("python-pyflakes" ,python-pyflakes)
7971 ("python-mccabe" ,python-mccabe)))
7972 (native-inputs
7973 `(("python-mock" ,python-mock)
7974 ("python-pytest" ,python-pytest-bootstrap)))
7975 (home-page "https://gitlab.com/pycqa/flake8")
7976 (synopsis
7977 "The modular source code checker: pep8, pyflakes and co")
7978 (description
7979 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7980 (properties `((python2-variant . ,(delay python2-flake8))))
7981 (license license:expat)))
7982
7983 (define-public python2-flake8
7984 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7985 (package (inherit base)
7986 (propagated-inputs
7987 `(("python2-configparser" ,python2-configparser)
7988 ("python2-enum34" ,python2-enum34)
7989 ("python2-functools32" ,python2-functools32)
7990 ("python2-typing" ,python2-typing)
7991 ,@(package-propagated-inputs base))))))
7992
7993 ;; python-hacking requires flake8 <2.7.0.
7994 (define-public python-flake8-2.6
7995 (package
7996 (inherit python-flake8)
7997 (version "2.6.2")
7998 (source (origin
7999 (method url-fetch)
8000 (uri (pypi-uri "flake8" version))
8001 (sha256
8002 (base32
8003 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
8004 (arguments
8005 `(#:phases
8006 (modify-phases %standard-phases
8007 (add-after 'unpack 'use-later-pycodestyles
8008 (lambda __
8009 (substitute* '("flake8.egg-info/requires.txt"
8010 "setup.py")
8011 (("pycodestyle >= 2.0, < 2.1")
8012 "pycodestyle >= 2.0"))
8013 #t))
8014 (delete 'check)
8015 (add-after 'install 'check
8016 (lambda* (#:key inputs outputs #:allow-other-keys)
8017 (add-installed-pythonpath inputs outputs)
8018 (invoke "pytest" "-v")
8019 #t)))))
8020 (propagated-inputs
8021 `(("python-pep8" ,python-pep8)
8022 ("python-pycodestyle" ,python-pycodestyle)
8023 ("python-entrypoints" ,python-entrypoints)
8024 ("python-pyflakes" ,python-pyflakes-1.2)
8025 ("python-mccabe" ,python-mccabe)))))
8026
8027 (define-public python-flake8-bugbear
8028 (package
8029 (name "python-flake8-bugbear")
8030 (version "20.1.4")
8031 (source
8032 (origin
8033 (method url-fetch)
8034 (uri (pypi-uri "flake8-bugbear" version))
8035 (sha256
8036 (base32
8037 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
8038 (build-system python-build-system)
8039 (arguments
8040 '(#:phases
8041 (modify-phases %standard-phases
8042 (add-before 'check 'disable-test
8043 (lambda _
8044 ;; This test fails on slow computers.
8045 (substitute* "tests/test_bugbear.py"
8046 (("def test_does_not_crash_on_any_valid_code")
8047 "def _test_does_not_crash_on_any_valid_code")))))))
8048 (native-inputs
8049 `(("python-hypothesis" ,python-hypothesis)
8050 ("python-hypothesmith" ,python-hypothesmith)))
8051 (propagated-inputs
8052 `(("python-attrs" ,python-attrs)
8053 ("python-flake8" ,python-flake8)))
8054 (home-page "https://github.com/PyCQA/flake8-bugbear")
8055 (synopsis
8056 "Flake8 plugin for finding likely bugs and design problems in your program")
8057 (description
8058 "This package contains a plugin for Flake8 finding likely bugs and
8059 design problems in your program. It contains warnings that don't belong
8060 in pyflakes and pycodestyle.")
8061 (license license:expat)))
8062
8063 (define-public python-flake8-polyfill
8064 (package
8065 (name "python-flake8-polyfill")
8066 (version "1.0.2")
8067 (source
8068 (origin
8069 (method url-fetch)
8070 (uri (pypi-uri "flake8-polyfill" version))
8071 (sha256
8072 (base32
8073 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
8074 (build-system python-build-system)
8075 (arguments
8076 '(#:phases
8077 (modify-phases %standard-phases
8078 (replace 'check
8079 (lambda _
8080 ;; Be compatible with Pytest 4:
8081 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
8082 (substitute* "setup.cfg"
8083 (("\\[pytest\\]")
8084 "[tool:pytest]"))
8085
8086 (setenv "PYTHONPATH"
8087 (string-append (getcwd) "/build/lib:"
8088 (getenv "PYTHONPATH")))
8089 (invoke "py.test" "-v"))))))
8090 (native-inputs
8091 `(("python-flake8" ,python-flake8)
8092 ("python-mock" ,python-mock)
8093 ("python-pep8" ,python-pep8)
8094 ("python-pycodestyle" ,python-pycodestyle)
8095 ("python-pytest" ,python-pytest)))
8096 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
8097 (synopsis "Polyfill package for Flake8 plugins")
8098 (description
8099 "This package that provides some compatibility helpers for Flake8
8100 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
8101 (license license:expat)))
8102
8103 (define-public python2-flake8-polyfill
8104 (package-with-python2 python-flake8-polyfill))
8105
8106 (define-public python-flake8-pyi
8107 (package
8108 (name "python-flake8-pyi")
8109 (version "20.5.0")
8110 (source
8111 (origin
8112 (method url-fetch)
8113 (uri (pypi-uri "flake8-pyi" version))
8114 (sha256
8115 (base32
8116 "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
8117 (build-system python-build-system)
8118 (propagated-inputs
8119 `(("python-attrs" ,python-attrs)
8120 ("python-flake8" ,python-flake8)
8121 ("python-pyflakes" ,python-pyflakes)))
8122 (home-page "https://github.com/ambv/flake8-pyi")
8123 (synopsis
8124 "Flake8 plugin that provides specializations for type hinting stub files")
8125 (description
8126 "This package contains a plugin that provides specializations for
8127 type hinting stub files, especially interesting for linting typeshed. It
8128 adds the @file{.pyi} extension to the default value of the @code{--filename}
8129 command-line argument to Flake8. This means stubs are linted by default with
8130 this plugin enabled, without needing to explicitly list every file. It
8131 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
8132 expressions after the entire file has been read. This enables support for
8133 first-class forward references that stub files use.")
8134 (license license:expat)))
8135
8136 (define-public python-mistune
8137 (package
8138 (name "python-mistune")
8139 (version "0.8.4")
8140 (source
8141 (origin
8142 (method url-fetch)
8143 (uri (pypi-uri "mistune" version))
8144 (sha256
8145 (base32
8146 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
8147 (build-system python-build-system)
8148 (native-inputs
8149 `(("python-nose" ,python-nose)
8150 ("python-cython" ,python-cython)))
8151 (home-page "https://github.com/lepture/mistune")
8152 (synopsis "Markdown parser in pure Python")
8153 (description "This package provides a fast markdown parser in pure
8154 Python.")
8155 (license license:bsd-3)))
8156
8157 (define-public python2-mistune
8158 (package-with-python2 python-mistune))
8159
8160 (define-public python-markdown
8161 (package
8162 (name "python-markdown")
8163 (version "3.2.1")
8164 (source
8165 (origin
8166 (method url-fetch)
8167 (uri (pypi-uri "Markdown" version))
8168 (sha256
8169 (base32
8170 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
8171 (build-system python-build-system)
8172 (native-inputs
8173 `(("python-nose" ,python-nose)
8174 ("python-pyyaml" ,python-pyyaml)))
8175 (home-page "https://python-markdown.github.io/")
8176 (synopsis "Python implementation of Markdown")
8177 (description
8178 "This package provides a Python implementation of John Gruber's
8179 Markdown. The library features international input, various Markdown
8180 extensions, and several HTML output formats. A command line wrapper
8181 markdown_py is also provided to convert Markdown files to HTML.")
8182 (properties `((python2-variant . ,(delay python2-markdown))))
8183 (license license:bsd-3)))
8184
8185 ;; Markdown 3.2 dropped support for Python 2.
8186 (define-public python2-markdown
8187 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
8188 (package/inherit
8189 base
8190 (version "3.1.1")
8191 (source (origin
8192 (method url-fetch)
8193 (uri (pypi-uri "Markdown" version))
8194 (sha256
8195 (base32
8196 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
8197
8198 (define-public python-ptyprocess
8199 (package
8200 (name "python-ptyprocess")
8201 (version "0.5.2")
8202 (source
8203 (origin
8204 (method url-fetch)
8205 (uri (pypi-uri "ptyprocess" version))
8206 (sha256
8207 (base32
8208 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
8209 (build-system python-build-system)
8210 (native-inputs
8211 `(("python-nose" ,python-nose)))
8212 (arguments
8213 `(#:phases
8214 (modify-phases %standard-phases
8215 (replace 'check
8216 (lambda _ (invoke "nosetests"))))))
8217 (home-page "https://github.com/pexpect/ptyprocess")
8218 (synopsis "Run a subprocess in a pseudo terminal")
8219 (description
8220 "This package provides a Python library used to launch a subprocess in a
8221 pseudo terminal (pty), and interact with both the process and its pty.")
8222 (license license:isc)))
8223
8224 (define-public python2-ptyprocess
8225 (package-with-python2 python-ptyprocess))
8226
8227 (define-public python-cram
8228 (package
8229 (name "python-cram")
8230 (version "0.7")
8231 (home-page "https://bitheap.org/cram/")
8232 (source (origin
8233 (method url-fetch)
8234 (uri (list (string-append home-page "cram-"
8235 version ".tar.gz")
8236 (pypi-uri "cram" version)))
8237 (sha256
8238 (base32
8239 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
8240 (arguments
8241 '(#:phases
8242 (modify-phases %standard-phases
8243 (add-after 'unpack 'patch-source
8244 (lambda _
8245 (substitute* (find-files "cram" ".*\\.py$")
8246 ;; Replace default shell path.
8247 (("/bin/sh") (which "sh")))
8248 (substitute* (find-files "tests" ".*\\.t$")
8249 (("md5") "md5sum")
8250 (("/bin/bash") (which "bash"))
8251 (("/bin/sh") (which "sh")))
8252 (substitute* "cram/_test.py"
8253 ;; This hack works around a bug triggered by substituting
8254 ;; the /bin/sh paths. "tests/usage.t" compares the output of
8255 ;; "cram -h", which breaks the output at 80 characters. This
8256 ;; causes the line showing the default shell to break into two
8257 ;; lines, but the test expects a single line...
8258 (("env\\['COLUMNS'\\] = '80'")
8259 "env['COLUMNS'] = '160'"))
8260
8261 (substitute* "Makefile"
8262 ;; Recent versions of python-coverage have caused the test
8263 ;; coverage to decrease (as of version 0.7). Allow that.
8264 (("--fail-under=100")
8265 "--fail-under=90"))
8266
8267 #t))
8268 (replace 'check
8269 ;; The test phase uses the built library and executable.
8270 (lambda* (#:key inputs outputs #:allow-other-keys)
8271 (add-installed-pythonpath inputs outputs)
8272 (setenv "PATH" (string-append (getenv "PATH") ":"
8273 (assoc-ref outputs "out") "/bin"))
8274 (invoke "make" "test"))))))
8275 (build-system python-build-system)
8276 (native-inputs
8277 `(("python-coverage" ,python-coverage)
8278 ("which" ,which)))
8279 (synopsis "Simple testing framework for command line applications")
8280 (description
8281 "Cram is a functional testing framework for command line applications.
8282 Cram tests look like snippets of interactive shell sessions. Cram runs each
8283 command and compares the command output in the test with the command’s actual
8284 output.")
8285 (license license:gpl2+)))
8286
8287 (define-public python2-cram
8288 (package-with-python2 python-cram))
8289
8290 (define-public python-crashtest
8291 (package
8292 (name "python-crashtest")
8293 (version "0.3.0")
8294 (source
8295 (origin
8296 (method url-fetch)
8297 (uri (pypi-uri "crashtest" version))
8298 (sha256
8299 (base32
8300 "056zzbznl3xfnbblfci8lvcam3h7k7va68vi6asrm4q0ck4nrh79"))))
8301 (build-system python-build-system)
8302 (home-page "https://github.com/sdispater/crashtest")
8303 (synopsis "Manage Python errors with ease")
8304 (description
8305 "Python library that makes exceptions handling and inspection easier.")
8306 (license license:expat)))
8307
8308 (define-public python-straight-plugin
8309 (package
8310 (name "python-straight-plugin")
8311 (version "1.4.1")
8312 (source
8313 (origin
8314 (method url-fetch)
8315 (uri (pypi-uri "straight.plugin" version))
8316 (sha256
8317 (base32
8318 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
8319 (build-system python-build-system)
8320 (home-page "https://github.com/ironfroggy/straight.plugin")
8321 (synopsis "Simple namespaced plugin facility")
8322 (description "Straight Plugin provides a type of plugin you can create from
8323 almost any existing Python modules, and an easy way for outside developers to
8324 add functionality and customization to your projects with their own plugins.")
8325 (license license:expat)))
8326
8327 (define-public python2-straight-plugin
8328 (package-with-python2 python-straight-plugin))
8329
8330 (define-public python-fonttools
8331 (package
8332 (name "python-fonttools")
8333 (version "4.6.0")
8334 (source (origin
8335 (method url-fetch)
8336 (uri (pypi-uri "fonttools" version ".zip"))
8337 (sha256
8338 (base32
8339 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
8340 (build-system python-build-system)
8341 (native-inputs
8342 `(("unzip" ,unzip)
8343 ("python-pytest" ,python-pytest)
8344 ("python-pytest-runner" ,python-pytest-runner)))
8345 (home-page "https://github.com/fonttools/fonttools")
8346 (synopsis "Tools to manipulate font files")
8347 (description
8348 "FontTools/TTX is a library to manipulate font files from Python. It
8349 supports reading and writing of TrueType/OpenType fonts, reading and writing
8350 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
8351 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
8352 from an XML-based format.")
8353 (license license:expat)))
8354
8355 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
8356 (define-public python2-fonttools
8357 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
8358 (package/inherit
8359 base
8360 (version "3.44.0")
8361 (source (origin
8362 (method url-fetch)
8363 (uri (pypi-uri "fonttools" version ".zip"))
8364 (sha256
8365 (base32
8366 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
8367
8368 (define-public python-ly
8369 (package
8370 (name "python-ly")
8371 (version "0.9.5")
8372 (source
8373 (origin
8374 (method url-fetch)
8375 (uri (pypi-uri name version))
8376 (sha256
8377 (base32
8378 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
8379 (build-system python-build-system)
8380 (arguments
8381 ;; FIXME: Some tests need network access.
8382 '(#:tests? #f))
8383 (synopsis "Tool and library for manipulating LilyPond files")
8384 (description "This package provides a Python library to parse, manipulate
8385 or create documents in LilyPond format. A command line program ly is also
8386 provided that can be used to do various manipulations with LilyPond files.")
8387 (home-page "https://pypi.org/project/python-ly/")
8388 (license license:gpl2+)))
8389
8390 (define-public python-appdirs
8391 (package
8392 (name "python-appdirs")
8393 (version "1.4.3")
8394 (source
8395 (origin
8396 (method url-fetch)
8397 (uri (pypi-uri "appdirs" version))
8398 (sha256
8399 (base32
8400 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
8401 (build-system python-build-system)
8402 (home-page "https://github.com/ActiveState/appdirs")
8403 (synopsis
8404 "Determine platform-specific dirs, e.g. a \"user data dir\"")
8405 (description
8406 "This module provides a portable way of finding out where user data
8407 should be stored on various operating systems.")
8408 (license license:expat)))
8409
8410 (define-public python2-appdirs
8411 (package-with-python2 python-appdirs))
8412
8413 (define-public python-llfuse
8414 (package
8415 (name "python-llfuse")
8416 (version "1.3.6")
8417 (source (origin
8418 (method url-fetch)
8419 (uri (pypi-uri "llfuse" version ".tar.bz2"))
8420 (sha256
8421 (base32
8422 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
8423 (build-system python-build-system)
8424 (inputs
8425 `(("fuse" ,fuse)
8426 ("attr" ,attr)))
8427 (native-inputs
8428 `(("pkg-config" ,pkg-config)))
8429 (synopsis "Python bindings for FUSE")
8430 (description
8431 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
8432 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
8433 (license license:lgpl2.0+)
8434 (properties `((python2-variant . ,(delay python2-llfuse))))))
8435
8436 (define-public python2-llfuse
8437 (package (inherit (package-with-python2
8438 (strip-python2-variant python-llfuse)))
8439 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
8440
8441 ;; For attic-0.16
8442 (define-public python-llfuse-0.41
8443 (package (inherit python-llfuse)
8444 (version "0.41.1")
8445 (source (origin
8446 (method url-fetch)
8447 (uri (string-append
8448 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8449 "llfuse-" version ".tar.bz2"))
8450 (sha256
8451 (base32
8452 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8453 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8454 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8455 (license (list license:expat license:lgpl2.0+))))
8456
8457 (define-public python-msgpack
8458 (package
8459 (name "python-msgpack")
8460 (version "1.0.0")
8461 (source (origin
8462 (method url-fetch)
8463 (uri (pypi-uri "msgpack" version))
8464 (sha256
8465 (base32
8466 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8467 (build-system python-build-system)
8468 (arguments
8469 `(#:modules ((guix build utils)
8470 (guix build python-build-system)
8471 (ice-9 ftw)
8472 (srfi srfi-1)
8473 (srfi srfi-26))
8474 #:phases
8475 (modify-phases %standard-phases
8476 (replace 'check
8477 (lambda _
8478 (let ((cwd (getcwd)))
8479 (setenv "PYTHONPATH"
8480 (string-append cwd "/build/"
8481 (find (cut string-prefix? "lib" <>)
8482 (scandir (string-append cwd "/build")))
8483 ":"
8484 (getenv "PYTHONPATH")))
8485 (invoke "pytest" "-v" "test")))))))
8486 (native-inputs
8487 `(("python-pytest" ,python-pytest)))
8488 (synopsis "MessagePack (de)serializer")
8489 (description "MessagePack is a fast, compact binary serialization format,
8490 suitable for similar data to JSON. This package provides CPython bindings for
8491 reading and writing MessagePack data.")
8492 (home-page "https://pypi.org/project/msgpack/")
8493 (license license:asl2.0)))
8494
8495 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8496 ;; release 0.5. Some packages like borg still call it by the old name for now.
8497 ;; <https://bugs.gnu.org/30662>
8498 (define-public python-msgpack-transitional
8499 (package
8500 (inherit python-msgpack)
8501 (name "python-msgpack-transitional")
8502 (version "0.5.6")
8503 (source (origin
8504 (method url-fetch)
8505 (uri (pypi-uri "msgpack" version))
8506 (sha256
8507 (base32
8508 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8509 (arguments
8510 (substitute-keyword-arguments (package-arguments python-msgpack)
8511 ((#:phases phases)
8512 `(modify-phases ,phases
8513 (add-after 'unpack 'configure-transitional
8514 (lambda _
8515 ;; Keep using the old name.
8516 (substitute* "setup.py"
8517 (("TRANSITIONAL = False")
8518 "TRANSITIONAL = 1"))
8519 #t))))))))
8520
8521 (define-public python2-msgpack
8522 (package-with-python2 python-msgpack))
8523
8524 (define-public python-netaddr
8525 (package
8526 (name "python-netaddr")
8527 (version "0.7.19")
8528 (source
8529 (origin
8530 (method url-fetch)
8531 (uri (pypi-uri "netaddr" version))
8532 (sha256
8533 (base32
8534 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8535 (build-system python-build-system)
8536 (arguments `(#:tests? #f)) ;; No tests.
8537 (home-page "https://github.com/drkjam/netaddr/")
8538 (synopsis "Pythonic manipulation of network addresses")
8539 (description
8540 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8541 and MAC network addresses.")
8542 (license license:bsd-3)))
8543
8544 (define-public python2-netaddr
8545 (package-with-python2 python-netaddr))
8546
8547 (define-public python2-pyroute2
8548 (package
8549 (name "python2-pyroute2")
8550 (version "0.5.6")
8551 (source
8552 (origin
8553 (method url-fetch)
8554 (uri (pypi-uri "pyroute2" version))
8555 (sha256
8556 (base32
8557 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8558 (build-system python-build-system)
8559 (arguments
8560 `(#:python ,python-2)) ;Python 3.x is not supported
8561 (home-page "https://github.com/svinota/pyroute2")
8562 (synopsis "Python netlink library")
8563 (description
8564 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8565 Supported netlink families and protocols include:
8566 @itemize
8567 @item rtnl, network settings - addresses, routes, traffic controls
8568 @item nfnetlink - netfilter API: ipset, nftables, ...
8569 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8570 @item devlink - manage and monitor devlink-enabled hardware
8571 @item generic - generic netlink families
8572 @itemize
8573 @item nl80211 - wireless functions API (basic support)
8574 @item taskstats - extended process statistics
8575 @item acpi_events - ACPI events monitoring
8576 @item thermal_events - thermal events monitoring
8577 @item VFS_DQUOT - disk quota events monitoring
8578 @end itemize
8579 @end itemize")
8580 (license license:gpl2+)))
8581
8582 (define-public python-wrapt
8583 (package
8584 (name "python-wrapt")
8585 (version "1.11.2")
8586 (source
8587 (origin
8588 (method url-fetch)
8589 (uri (pypi-uri "wrapt" version))
8590 (sha256
8591 (base32
8592 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8593 (build-system python-build-system)
8594 (arguments
8595 ;; Tests are not included in the tarball, they are only available in the
8596 ;; git repository.
8597 `(#:tests? #f))
8598 (home-page "https://github.com/GrahamDumpleton/wrapt")
8599 (synopsis "Module for decorators, wrappers and monkey patching")
8600 (description
8601 "The aim of the wrapt module is to provide a transparent object proxy for
8602 Python, which can be used as the basis for the construction of function
8603 wrappers and decorator functions.")
8604 (license license:bsd-2)))
8605
8606 (define-public python2-wrapt
8607 (package-with-python2 python-wrapt))
8608
8609 (define-public python-xlrd
8610 (package
8611 (name "python-xlrd")
8612 (version "1.2.0")
8613 (source (origin
8614 (method url-fetch)
8615 (uri (pypi-uri "xlrd" version))
8616 (sha256
8617 (base32
8618 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8619 (build-system python-build-system)
8620 (arguments
8621 `(#:phases
8622 (modify-phases %standard-phases
8623 ;; Some tests depend on writing a temporary file to the user's home
8624 ;; directory.
8625 (add-after 'unpack 'fix-tests
8626 (lambda _
8627 (delete-file "tests/test_open_workbook.py")
8628 #t)))))
8629 (home-page "http://www.python-excel.org/")
8630 (synopsis "Library for extracting data from Excel files")
8631 (description "This package provides a library to extract data from
8632 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8633 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8634 Unicode-aware. It is not intended as an end-user tool.")
8635 (license license:bsd-3)))
8636
8637 (define-public python2-xlrd
8638 (package-with-python2 python-xlrd))
8639
8640 (define-public python-immutables
8641 (package
8642 (name "python-immutables")
8643 (version "0.14")
8644 (source
8645 (origin
8646 (method url-fetch)
8647 (uri (pypi-uri "immutables" version))
8648 (sha256
8649 (base32 "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0"))))
8650 (build-system python-build-system)
8651 (home-page "https://github.com/MagicStack/immutables")
8652 (synopsis "High-performance immutable mapping type for Python")
8653 (description
8654 "An immutable mapping type for Python. The underlying datastructure is a
8655 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
8656 functional languages.")
8657 (license license:asl2.0)))
8658
8659 (define-public python-prettytable
8660 (package
8661 (name "python-prettytable")
8662 (version "0.7.2")
8663 (source
8664 (origin
8665 (method url-fetch)
8666 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8667 (sha256
8668 (base32
8669 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8670 (build-system python-build-system)
8671 (home-page "https://code.google.com/archive/p/prettytable/")
8672 (synopsis "Display tabular data in an ASCII table format")
8673 (description
8674 "A library designed to represent tabular data in visually appealing ASCII
8675 tables. PrettyTable allows for selection of which columns are to be printed,
8676 independent alignment of columns (left or right justified or centred) and
8677 printing of sub-tables by specifying a row range.")
8678 (license license:bsd-3)))
8679
8680 (define-public python2-prettytable
8681 (package-with-python2 python-prettytable))
8682
8683 (define-public python-curio
8684 (package
8685 (name "python-curio")
8686 (version "1.2")
8687 (source
8688 (origin
8689 (method url-fetch)
8690 (uri (pypi-uri "curio" version))
8691 (sha256
8692 (base32 "16wkww6kh511b9bzsfhpvrv0766cc6ssgbzz4lgpjnrzzgx21wwh"))))
8693 (build-system python-build-system)
8694 (arguments
8695 `(#:phases
8696 (modify-phases %standard-phases
8697 (replace 'check
8698 (lambda* (#:key inputs outputs #:allow-other-keys)
8699 (add-installed-pythonpath inputs outputs)
8700 (invoke "pytest" "-vv" "-k"
8701 ;; Tries to open an outgoing connection.
8702 "not test_ssl_outgoing"))))))
8703 (native-inputs
8704 `(("python-pytest" ,python-pytest)))
8705 (home-page "https://github.com/dabeaz/curio")
8706 (synopsis "Coroutine-based library for concurrent Python")
8707 (description
8708 "Curio is a coroutine-based library for concurrent Python systems
8709 programming. It provides standard programming abstractions such as as
8710 tasks, sockets, files, locks, and queues.")
8711 (license license:bsd-3)))
8712
8713 (define-public python-tables
8714 (package
8715 (name "python-tables")
8716 (version "3.6.1")
8717 (source
8718 (origin
8719 (method url-fetch)
8720 (uri (pypi-uri "tables" version))
8721 (sha256
8722 (base32
8723 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8724 (modules '((guix build utils)))
8725 (snippet
8726 '(begin
8727 ;; Remove pre-compiled .pyc files from source.
8728 (for-each delete-file-recursively
8729 (find-files "." "__pycache__" #:directories? #t))
8730 (for-each delete-file (find-files "." "\\.pyc$"))
8731 #t))))
8732 (build-system python-build-system)
8733 (arguments
8734 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8735 ;; or "check", so we must override the build and check phases.
8736 #:phases
8737 (modify-phases %standard-phases
8738 (add-after 'unpack 'use-gcc
8739 (lambda _
8740 (substitute* "setup.py"
8741 (("^( +)compiler = new_compiler\\(\\)" line indent)
8742 (string-append line
8743 "\n"
8744 indent
8745 "compiler.set_executables(compiler='gcc',"
8746 "compiler_so='gcc',"
8747 "linker_exe='gcc',"
8748 "linker_so='gcc -shared')")))
8749 #t))
8750 (add-after 'unpack 'disable-tuning
8751 (lambda _
8752 (substitute* "setup.py"
8753 (("cpu_flags = .*")
8754 "cpu_flags = ['sse2']\n"))
8755 #t))
8756 (replace 'build
8757 (lambda* (#:key inputs #:allow-other-keys)
8758 (invoke "python" "setup.py" "build"
8759 (string-append "--hdf5="
8760 (assoc-ref inputs "hdf5")))))
8761 (replace 'check
8762 (lambda* (#:key inputs #:allow-other-keys)
8763 (invoke "python" "setup.py" "check"
8764 (string-append "--hdf5="
8765 (assoc-ref inputs "hdf5"))))))))
8766 (propagated-inputs
8767 `(("python-numexpr" ,python-numexpr)
8768 ("python-numpy" ,python-numpy)))
8769 (native-inputs
8770 `(("python-cython" ,python-cython)
8771 ("pkg-config" ,pkg-config)))
8772 (inputs
8773 `(("hdf5" ,hdf5-1.10)
8774 ("bzip2" ,bzip2)
8775 ("zlib" ,zlib)))
8776 (home-page "https://www.pytables.org/")
8777 (synopsis "Hierarchical datasets for Python")
8778 (description "PyTables is a package for managing hierarchical datasets and
8779 designed to efficiently cope with extremely large amounts of data.")
8780 (license license:bsd-3)))
8781
8782 (define-public python2-tables
8783 (package-with-python2 python-tables))
8784
8785 (define-public python-sniffio
8786 (package
8787 (name "python-sniffio")
8788 (version "1.1.0")
8789 (source
8790 (origin
8791 (method url-fetch)
8792 (uri (pypi-uri "sniffio" version))
8793 (sha256
8794 (base32 "08bsp2pp2dxzn9yzcafwzw8jlm0jf50as0ix8vfhxzk91w810f4f"))))
8795 (build-system python-build-system)
8796 (arguments
8797 `(#:phases
8798 (modify-phases %standard-phases
8799 (replace 'check
8800 (lambda _
8801 (invoke "pytest" "-vv"))))))
8802 (native-inputs
8803 `(("python-curio" ,python-curio)
8804 ("python-pytest" ,python-pytest)
8805 ("python-pytest-cov" ,python-pytest-cov)))
8806 (home-page "https://github.com/python-trio/sniffio")
8807 (synopsis "Detect which async library a program is running under")
8808 (description "This package detects which async library a program is
8809 running under. It supports multiple async I/O packages, like Trio, and
8810 asyncio.")
8811 ;; Either license applies.
8812 (license (list license:expat license:asl2.0))))
8813
8814 (define-public python-pytest-black
8815 (package
8816 (name "python-pytest-black")
8817 (version "0.3.8")
8818 (source
8819 (origin
8820 (method url-fetch)
8821 (uri (pypi-uri "pytest-black" version))
8822 (sha256
8823 (base32
8824 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8825 (build-system python-build-system)
8826 (propagated-inputs
8827 `(("python-pytest" ,python-pytest)
8828 ("python-black" ,python-black)
8829 ("python-toml" ,python-toml)))
8830 (native-inputs
8831 `(("python-setuptools-scm" ,python-setuptools-scm)))
8832 (home-page "https://github.com/shopkeep/pytest-black")
8833 (synopsis "Pytest plugin to enable format checking with black")
8834 (description
8835 "This package provides a pytest plugin to enable format checking with the
8836 Python code formatter \"black\".")
8837 (license license:expat)))
8838
8839 (define-public python-get-version
8840 (package
8841 (name "python-get-version")
8842 (version "2.1")
8843 (source
8844 (origin
8845 (method url-fetch)
8846 (uri (pypi-uri "get_version" version))
8847 (sha256
8848 (base32
8849 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8850 (build-system python-build-system)
8851 (propagated-inputs
8852 `(("python-pygments" ,python-pygments)
8853 ("python-pytest" ,python-pytest)
8854 ("python-pytest-black" ,python-pytest-black)
8855 ("python-pytest-cov" ,python-pytest-cov)
8856 ("python-setuptools" ,python-setuptools)
8857 ("python-testpath" ,python-testpath)))
8858 (home-page "https://github.com/flying-sheep/get_version")
8859 (synopsis "Version helper in the spirit of versioneer")
8860 (description
8861 "This package provides a version helper that lets you automatically use
8862 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8863 also supports getting the version from Python source distributions or, once
8864 your package is installed, via @code{pkg_resources} (part of
8865 @code{setuptools}).")
8866 (license license:gpl3+)))
8867
8868 (define-public python-legacy-api-wrap
8869 (package
8870 (name "python-legacy-api-wrap")
8871 (version "1.2")
8872 (source
8873 (origin
8874 (method url-fetch)
8875 (uri (pypi-uri "legacy-api-wrap" version))
8876 (sha256
8877 (base32
8878 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8879 (build-system python-build-system)
8880 (propagated-inputs
8881 `(("python-get-version" ,python-get-version)
8882 ("python-pytest" ,python-pytest)
8883 ("python-pytest-black" ,python-pytest-black)
8884 ("python-pytest-cov" ,python-pytest-cov)
8885 ("python-setuptools" ,python-setuptools)))
8886 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8887 (synopsis "Legacy API wrapper")
8888 (description "This module defines a decorator to wrap legacy APIs. The
8889 primary use case is APIs defined before keyword-only parameters existed.")
8890 (license license:gpl3+)))
8891
8892 (define-public python-pyasn1
8893 (package
8894 (name "python-pyasn1")
8895 (version "0.4.8")
8896 (source
8897 (origin
8898 (method url-fetch)
8899 (uri (pypi-uri "pyasn1" version))
8900 (sha256
8901 (base32
8902 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8903 (build-system python-build-system)
8904 (home-page "http://pyasn1.sourceforge.net/")
8905 (synopsis "ASN.1 types and codecs")
8906 (description
8907 "This is an implementation of ASN.1 types and codecs in Python. It is
8908 suitable for a wide range of protocols based on the ASN.1 specification.")
8909 (license license:bsd-2)))
8910
8911 (define-public python2-pyasn1
8912 (package-with-python2 python-pyasn1))
8913
8914 (define-public python-pyasn1-modules
8915 (package
8916 (name "python-pyasn1-modules")
8917 (version "0.2.2")
8918 (source
8919 (origin
8920 (method url-fetch)
8921 (uri (pypi-uri "pyasn1-modules" version))
8922 (sha256
8923 (base32
8924 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8925 (build-system python-build-system)
8926 (propagated-inputs
8927 `(("python-pyasn1" ,python-pyasn1)))
8928 (home-page "https://sourceforge.net/projects/pyasn1/")
8929 (synopsis "ASN.1 codec implementations")
8930 (description
8931 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8932 implementations of ASN.1-based codecs and protocols.")
8933 (license license:bsd-3)))
8934
8935 (define-public python2-pyasn1-modules
8936 (package-with-python2 python-pyasn1-modules))
8937
8938 (define-public python-ipaddress
8939 (package
8940 (name "python-ipaddress")
8941 (version "1.0.22")
8942 (source (origin
8943 (method url-fetch)
8944 (uri (pypi-uri "ipaddress" version))
8945 (sha256
8946 (base32
8947 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8948 (build-system python-build-system)
8949 (home-page "https://github.com/phihag/ipaddress")
8950 (synopsis "IP address manipulation library")
8951 (description
8952 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8953 in Python. This library is used to create, poke at, and manipulate IPv4 and
8954 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8955 module to older versions of Python.")
8956 (license license:psfl)))
8957
8958 (define-public python2-ipaddress
8959 (package-with-python2 python-ipaddress))
8960
8961 (define-public python2-ipaddr
8962 (package
8963 (name "python2-ipaddr")
8964 (version "2.1.11")
8965 (source
8966 (origin
8967 (method url-fetch)
8968 (uri (pypi-uri "ipaddr" version))
8969 (sha256
8970 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8971 (build-system python-build-system)
8972 (arguments
8973 `(#:python ,python-2 ;version 2 only
8974 #:phases
8975 (modify-phases %standard-phases
8976 (replace 'check
8977 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8978 (home-page "https://github.com/google/ipaddr-py")
8979 (synopsis "IP address manipulation library")
8980 (description
8981 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8982 IPv6 addresses and networks.
8983
8984 For new implementations you may prefer to use the standard module
8985 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8986 versions of Python.")
8987 (license license:asl2.0)))
8988
8989 (define-public python-idna
8990 (package
8991 (name "python-idna")
8992 (version "2.9")
8993 (source
8994 (origin
8995 (method url-fetch)
8996 (uri (pypi-uri "idna" version))
8997 (sha256
8998 (base32
8999 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
9000 (build-system python-build-system)
9001 (home-page "https://github.com/kjd/idna")
9002 (synopsis "Internationalized domain names in applications")
9003 (description
9004 "This is a library to support the Internationalised Domain Names in
9005 Applications (IDNA) protocol as specified in RFC 5891. This version of the
9006 protocol is often referred to as “IDNA2008” and can produce different results
9007 from the earlier standard from 2003. The library is also intended to act as a
9008 suitable drop-in replacement for the “encodings.idna” module that comes with
9009 the Python standard library but currently only supports the older 2003
9010 specification.")
9011 (license license:bsd-4)))
9012
9013 (define-public python-idna-2.7
9014 (package (inherit python-idna)
9015 (version "2.7")
9016 (source (origin
9017 (method url-fetch)
9018 (uri (pypi-uri "idna" version))
9019 (sha256
9020 (base32
9021 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
9022
9023
9024 (define-public python2-idna
9025 (package-with-python2 python-idna))
9026
9027 (define-public python-libsass
9028 (package
9029 (name "python-libsass")
9030 (version "0.20.0")
9031 (source
9032 (origin
9033 ;; PyPI tarball is missing some test files.
9034 (method git-fetch)
9035 (uri (git-reference
9036 (url "https://github.com/sass/libsass-python")
9037 (commit version)))
9038 (file-name (git-file-name name version))
9039 (sha256
9040 (base32 "0h9rj4k9izkfdvli8ip72bbvh6a7bvrv5pxz6zay2bq235gpfgfc"))))
9041 (build-system python-build-system)
9042 (arguments
9043 `(#:phases
9044 (modify-phases %standard-phases
9045 ;; Use Guix package of libsass instead of compiling from a checkout.
9046 (add-before 'build 'set-libsass
9047 (lambda _
9048 (setenv "SYSTEM_SASS" (assoc-ref %build-inputs "libsass"))
9049 #t))
9050 (replace 'check
9051 (lambda* (#:key inputs outputs #:allow-other-keys)
9052 (add-installed-pythonpath inputs outputs)
9053 (invoke "pytest" "sasstests.py" "-k"
9054 ;; See https://github.com/sass/libsass/issues/3092.
9055 ;; This test may work in a future release of libsass.
9056 "not test_stack_trace_formatting"))))))
9057 (native-inputs
9058 `(("python-pytest" ,python-pytest)
9059 ("python-werkzeug" ,python-werkzeug)))
9060 (inputs
9061 `(("libsass" ,libsass)))
9062 (propagated-inputs
9063 `(("python-six" ,python-six)))
9064 (home-page "https://sass.github.io/libsass-python/")
9065 (synopsis "Straightforward binding of libsass for Python")
9066 (description
9067 "This package provides a simple Python extension module @code{sass} which
9068 is binding LibSass.")
9069 (license license:expat)))
9070
9071 (define-public python-idna-ssl
9072 (package
9073 (name "python-idna-ssl")
9074 (version "1.0.1")
9075 (source
9076 (origin
9077 (method url-fetch)
9078 (uri (pypi-uri "idna-ssl" version))
9079 (sha256
9080 (base32
9081 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
9082 (build-system python-build-system)
9083 (arguments
9084 `(#:tests? #f)) ;circular dependency with python-aiohttp
9085 (home-page "https://github.com/aio-libs/idna-ssl")
9086 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
9087 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
9088 domains support.")
9089 (license license:expat)))
9090
9091 (define-public python-pretend
9092 (package
9093 (name "python-pretend")
9094 (version "1.0.9")
9095 (source
9096 (origin
9097 (method url-fetch)
9098 (uri (pypi-uri "pretend" version))
9099 (sha256
9100 (base32
9101 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
9102 (build-system python-build-system)
9103 (home-page "https://github.com/alex/pretend")
9104 (synopsis "Library for stubbing in Python")
9105 (description
9106 "Pretend is a library to make stubbing with Python easier. Stubbing is a
9107 technique for writing tests. You may hear the term mixed up with mocks,
9108 fakes, or doubles. Basically, a stub is an object that returns pre-canned
9109 responses, rather than doing any computation.")
9110 (license license:bsd-3)))
9111
9112 (define-public python2-pretend
9113 (package-with-python2 python-pretend))
9114
9115 (define-public python-pip
9116 (package
9117 (name "python-pip")
9118 (version "20.0.2")
9119 (source
9120 (origin
9121 (method url-fetch)
9122 (uri (pypi-uri "pip" version))
9123 (sha256
9124 (base32
9125 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
9126 (build-system python-build-system)
9127 (arguments
9128 '(#:tests? #f)) ; there are no tests in the pypi archive.
9129 (home-page "https://pip.pypa.io/")
9130 (synopsis "Package manager for Python software")
9131 (description
9132 "Pip is a package manager for Python software, that finds packages on the
9133 Python Package Index (PyPI).")
9134 (license license:expat)))
9135
9136 (define-public python2-pip
9137 (package-with-python2 python-pip))
9138
9139 (define-public python-tlsh
9140 (package
9141 (name "python-tlsh")
9142 (version "3.4.5")
9143 (home-page "https://github.com/trendmicro/tlsh")
9144 (source
9145 (origin
9146 (method git-fetch)
9147 (uri (git-reference
9148 (url "https://github.com/trendmicro/tlsh")
9149 (commit (string-append "v" version))))
9150 (file-name (git-file-name name version))
9151 (sha256
9152 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
9153 (build-system cmake-build-system)
9154 (arguments
9155 '(#:out-of-source? #f
9156 #:phases (modify-phases %standard-phases
9157 (replace
9158 'install
9159 (lambda* (#:key outputs #:allow-other-keys)
9160 ;; Build and install the Python bindings. The underlying
9161 ;; C++ library is apparently not meant to be installed.
9162 (let ((out (assoc-ref outputs "out")))
9163 (with-directory-excursion "py_ext"
9164 (and (system* "python" "setup.py" "build")
9165 (system* "python" "setup.py" "install"
9166 (string-append "--prefix=" out))))))))))
9167 (inputs `(("python" ,python-wrapper))) ;for the bindings
9168 (synopsis "Fuzzy matching library for Python")
9169 (description
9170 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
9171 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
9172 value which can be used for similarity comparisons. Similar objects have
9173 similar hash values, which allows for the detection of similar objects by
9174 comparing their hash values. The byte stream should have a sufficient amount
9175 of complexity; for example, a byte stream of identical bytes will not generate
9176 a hash value.")
9177 (license license:asl2.0)))
9178
9179 (define-public python2-tlsh
9180 (package
9181 (inherit python-tlsh)
9182 (name "python2-tlsh")
9183 (inputs `(("python" ,python-2)))))
9184
9185 (define-public python-termcolor
9186 (package
9187 (name "python-termcolor")
9188 (version "1.1.0")
9189 (source
9190 (origin
9191 (method url-fetch)
9192 (uri (pypi-uri "termcolor" version))
9193 (sha256
9194 (base32
9195 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
9196 (build-system python-build-system)
9197 (arguments
9198 ;; There are no tests.
9199 `(#:tests? #f))
9200 (home-page "https://pypi.org/project/termcolor/")
9201 (synopsis "ANSII Color formatting for terminal output")
9202 (description
9203 "This package provides ANSII Color formatting for output in terminals.")
9204 (license license:expat)))
9205
9206 (define-public python2-termcolor
9207 (package-with-python2 python-termcolor))
9208
9209 (define-public python-terminaltables
9210 (package
9211 (name "python-terminaltables")
9212 (version "3.1.0")
9213 (source
9214 (origin
9215 (method url-fetch)
9216 (uri (pypi-uri "terminaltables" version))
9217 (sha256
9218 (base32
9219 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
9220 (build-system python-build-system)
9221 (home-page "https://github.com/Robpol86/terminaltables")
9222 (synopsis
9223 "Generate simple tables in terminals from a nested list of strings")
9224 (description
9225 "This package makes it easy to draw tables in terminal/console
9226 applications from a list of lists of strings. It supports multi-line rows.")
9227 (license license:expat)))
9228
9229 (define-public python-libarchive-c
9230 (package
9231 (name "python-libarchive-c")
9232 (version "2.9")
9233 (source (origin
9234 (method url-fetch)
9235 (uri (pypi-uri "libarchive-c" version))
9236 (sha256
9237 (base32
9238 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
9239 (build-system python-build-system)
9240 (arguments
9241 '(#:phases (modify-phases %standard-phases
9242 (add-before
9243 'build 'reference-libarchive
9244 (lambda* (#:key inputs #:allow-other-keys)
9245 ;; Retain the absolute file name of libarchive.so.
9246 (let ((libarchive (assoc-ref inputs "libarchive")))
9247 (substitute* "libarchive/ffi.py"
9248 (("find_library\\('archive'\\)")
9249 (string-append "'" libarchive
9250 "/lib/libarchive.so'"))))))
9251 (replace 'check
9252 (lambda _ (invoke "pytest" "-vv"))))))
9253 (native-inputs
9254 `(("python-mock" ,python-mock)
9255 ("python-pytest" ,python-pytest)))
9256 (inputs
9257 `(("libarchive" ,libarchive)))
9258 (home-page "https://github.com/Changaco/python-libarchive-c")
9259 (synopsis "Python interface to libarchive")
9260 (description
9261 "This package provides Python bindings to libarchive, a C library to
9262 access possibly compressed archives in many different formats. It uses
9263 Python's @code{ctypes} foreign function interface (FFI).")
9264 (license license:lgpl2.0+)))
9265
9266 (define-public python2-libarchive-c
9267 (package-with-python2 python-libarchive-c))
9268
9269 (define-public python-file
9270 (package
9271 (inherit file)
9272 (name "python-file")
9273 (build-system python-build-system)
9274 (arguments
9275 '(#:tests? #f ;no tests
9276 #:configure-flags '("--single-version-externally-managed" "--root=/")
9277 #:phases (modify-phases %standard-phases
9278 (add-before 'build 'change-directory
9279 (lambda _
9280 (chdir "python")
9281 #t))
9282 (add-before 'build 'set-library-file-name
9283 (lambda* (#:key inputs #:allow-other-keys)
9284 (let ((file (assoc-ref inputs "file")))
9285 (substitute* "magic.py"
9286 (("find_library\\('magic'\\)")
9287 (string-append "'" file "/lib/libmagic.so'")))
9288 #t))))))
9289 (inputs `(("file" ,file)))
9290 (native-inputs (if (%current-target-system)
9291 `(("self" ,this-package))
9292 '()))
9293 (synopsis "Python bindings to the libmagic file type guesser. Note that
9294 this module and the python-magic module both provide a \"magic.py\" file;
9295 these two modules, which are different and were developed separately, both
9296 serve the same purpose: provide Python bindings for libmagic.")))
9297
9298 (define-public python2-file
9299 (package-with-python2 python-file))
9300
9301 (define-public python-debian
9302 (package
9303 (name "python-debian")
9304 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
9305 (version "0.1.36")
9306 (source
9307 (origin
9308 ;; Use git-fetch, as pypi doesn't include test suite.
9309 (method git-fetch)
9310 (uri (git-reference
9311 (url home-page)
9312 (commit version)))
9313 (file-name (git-file-name name version))
9314 (sha256
9315 (base32
9316 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
9317 (build-system python-build-system)
9318 (arguments
9319 `(#:phases (modify-phases %standard-phases
9320 (add-after 'unpack 'remove-debian-specific-tests
9321 ;; python-apt, apt and dpkg are not yet available in guix,
9322 ;; and these tests heavily depend on them.
9323 (lambda _
9324 (delete-file "lib/debian/tests/test_deb822.py")
9325 (delete-file "lib/debian/tests/test_debfile.py")
9326 #t)))))
9327 (propagated-inputs
9328 `(("python-six" ,python-six)
9329 ("python-chardet" ,python-chardet)))
9330 (synopsis "Debian package related modules")
9331 (description
9332 ;; XXX: Use @enumerate instead of @itemize to work around
9333 ;; <http://bugs.gnu.org/21772>.
9334 "This package provides Python modules that abstract many formats of
9335 Debian-related files, such as:
9336
9337 @enumerate
9338 @item Debtags information;
9339 @item @file{debian/changelog} files;
9340 @item packages files, pdiffs;
9341 @item control files of single or multiple RFC822-style paragraphs---e.g.
9342 @file{debian/control}, @file{.changes}, @file{.dsc};
9343 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
9344 contained files and meta-information.
9345 @end enumerate\n")
9346
9347 ;; Modules are either GPLv2+ or GPLv3+.
9348 (license license:gpl3+)))
9349
9350 (define-public python-nbformat
9351 (package
9352 (name "python-nbformat")
9353 (version "4.4.0")
9354 (source
9355 (origin
9356 (method url-fetch)
9357 (uri (pypi-uri "nbformat" version))
9358 (sha256
9359 (base32
9360 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
9361 (build-system python-build-system)
9362 (arguments `(#:tests? #f)) ; no test target
9363 (propagated-inputs
9364 `(("python-ipython-genutils" ,python-ipython-genutils)
9365 ("python-jsonschema" ,python-jsonschema)
9366 ("python-jupyter-core" ,python-jupyter-core)
9367 ("python-traitlets" ,python-traitlets)))
9368 (home-page "http://jupyter.org")
9369 (synopsis "Jupyter Notebook format")
9370 (description "This package provides the reference implementation of the
9371 Jupyter Notebook format and Python APIs for working with notebooks.")
9372 (license license:bsd-3)))
9373
9374 (define-public python2-nbformat
9375 (package-with-python2 python-nbformat))
9376
9377 (define-public python-bleach
9378 (package
9379 (name "python-bleach")
9380 (version "3.1.5")
9381 (source
9382 (origin
9383 (method url-fetch)
9384 (uri (pypi-uri "bleach" version))
9385 (sha256
9386 (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
9387 (build-system python-build-system)
9388 (propagated-inputs
9389 `(("python-webencodings" ,python-webencodings)
9390 ("python-six" ,python-six)))
9391 (native-inputs
9392 `(("python-datrie" ,python-datrie)
9393 ("python-genshi" ,python-genshi)
9394 ("python-lxml" ,python-lxml)
9395 ("python-pytest" ,python-pytest)))
9396 (home-page "https://github.com/mozilla/bleach")
9397 (synopsis "Whitelist-based HTML-sanitizing tool")
9398 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
9399 (license license:asl2.0)))
9400
9401 (define-public python2-bleach
9402 (package-with-python2 python-bleach))
9403
9404 (define-public python-entrypoints
9405 (package
9406 (name "python-entrypoints")
9407 (version "0.3")
9408 (source
9409 (origin
9410 (method url-fetch)
9411 (uri (pypi-uri "entrypoints" version))
9412 (sha256
9413 (base32
9414 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
9415 (build-system python-build-system)
9416 ;; The package does not come with a setup.py file, so we have to generate
9417 ;; one ourselves.
9418 (arguments
9419 `(#:tests? #f
9420 #:phases
9421 (modify-phases %standard-phases
9422 (add-after 'unpack 'create-setup.py
9423 (lambda _
9424 (call-with-output-file "setup.py"
9425 (lambda (port)
9426 (format port "\
9427 from setuptools import setup
9428 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
9429 " ,version))))))))
9430 (home-page "https://github.com/takluyver/entrypoints")
9431 (synopsis "Discover and load entry points from installed Python packages")
9432 (description "Entry points are a way for Python packages to advertise
9433 objects with some common interface. The most common examples are
9434 @code{console_scripts} entry points, which define shell commands by
9435 identifying a Python function to run. The @code{entrypoints} module contains
9436 functions to find and load entry points.")
9437 (license license:expat)))
9438
9439 (define-public python2-entrypoints
9440 (package-with-python2 python-entrypoints))
9441
9442 (define-public python-epc
9443 (package
9444 (name "python-epc")
9445 (version "0.0.5")
9446 (source
9447 (origin
9448 (method url-fetch)
9449 (uri (pypi-uri "epc" version))
9450 (sha256
9451 (base32
9452 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
9453 (build-system python-build-system)
9454 (propagated-inputs
9455 `(("python-sexpdata" ,python-sexpdata)))
9456 (native-inputs
9457 `(("python-nose" ,python-nose)))
9458 (home-page "https://github.com/tkf/python-epc")
9459 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
9460 (description
9461 "Python-EPC can call elisp functions from Python and Python functions
9462 from elisp.")
9463 (license license:gpl3)))
9464
9465 (define-public python-nbconvert
9466 (package
9467 (name "python-nbconvert")
9468 (version "5.0.0b1")
9469 (source
9470 (origin
9471 (method url-fetch)
9472 (uri (pypi-uri "nbconvert" version))
9473 (sha256
9474 (base32
9475 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
9476 (build-system python-build-system)
9477 (arguments
9478 `(;; The "bdist_egg" target is disabled by default, causing the installation
9479 ;; to fail.
9480 #:configure-flags (list "bdist_egg")
9481 ;; FIXME: 5 failures, 40 errors.
9482 #:tests? #f))
9483 ;; #:phases
9484 ;; (modify-phases %standard-phases
9485 ;; (replace 'check
9486 ;; (lambda _
9487 ;; (zero? (system* "py.test" "-v")))))
9488 (native-inputs
9489 `(("python-pytest" ,python-pytest)))
9490 (propagated-inputs
9491 `(("python-bleach" ,python-bleach)
9492 ("python-entrypoints" ,python-entrypoints)
9493 ("python-jinja2" ,python-jinja2)
9494 ("python-jupyter-core" ,python-jupyter-core)
9495 ("python-mistune" ,python-mistune)
9496 ("python-nbformat" ,python-nbformat)
9497 ("python-pygments" ,python-pygments)
9498 ("python-traitlets" ,python-traitlets)))
9499 (home-page "http://jupyter.org")
9500 (synopsis "Converting Jupyter Notebooks")
9501 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
9502 notebooks to various other formats via Jinja templates. It allows you to
9503 convert an @code{.ipynb} notebook file into various static formats including:
9504
9505 @enumerate
9506 @item HTML
9507 @item LaTeX
9508 @item PDF
9509 @item Reveal JS
9510 @item Markdown (md)
9511 @item ReStructured Text (rst)
9512 @item executable script
9513 @end enumerate\n")
9514 (license license:bsd-3)))
9515
9516 (define-public python2-nbconvert
9517 (package-with-python2 python-nbconvert))
9518
9519 (define-public python-notebook
9520 (package
9521 (name "python-notebook")
9522 (version "5.7.4")
9523 (source (origin
9524 (method url-fetch)
9525 (uri (pypi-uri "notebook" version))
9526 (sha256
9527 (base32
9528 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
9529 (build-system python-build-system)
9530 (arguments
9531 `(#:phases
9532 (modify-phases %standard-phases
9533 (replace 'check
9534 (lambda _
9535 ;; These tests require a browser
9536 (delete-file-recursively "notebook/tests/selenium")
9537 ;; Some tests need HOME
9538 (setenv "HOME" "/tmp")
9539 ;; This file contains "warningfilters", which are not supported
9540 ;; by this version of nose.
9541 (delete-file "setup.cfg")
9542 (with-directory-excursion "/tmp"
9543 (invoke "nosetests" "-v"))
9544 #t)))))
9545 (propagated-inputs
9546 `(("python-jupyter-core" ,python-jupyter-core)
9547 ("python-nbformat" ,python-nbformat)
9548 ("python-nbconvert" ,python-nbconvert)
9549 ("python-prometheus-client" ,python-prometheus-client)
9550 ("python-send2trash" ,python-send2trash)
9551 ("python-terminado" ,python-terminado)))
9552 (native-inputs
9553 `(("python-nose" ,python-nose)
9554 ("python-sphinx" ,python-sphinx)
9555 ("python-requests" ,python-requests)))
9556 (home-page "http://jupyter.org/")
9557 (synopsis "Web-based notebook environment for interactive computing")
9558 (description
9559 "The Jupyter HTML notebook is a web-based notebook environment for
9560 interactive computing.")
9561 (properties `((python2-variant . ,(delay python2-notebook))))
9562 (license license:bsd-3)))
9563
9564 (define-public python2-notebook
9565 (let ((base (package-with-python2
9566 (strip-python2-variant python-notebook))))
9567 (package (inherit base)
9568 (native-inputs
9569 `(("python2-mock" ,python2-mock)
9570 ,@(package-native-inputs base)))
9571 (arguments
9572 (substitute-keyword-arguments (package-arguments base)
9573 ((#:phases phases)
9574 `(modify-phases ,phases
9575 (add-before 'check 'disable-test-case
9576 ;; The test requires network access to localhost. Curiously it
9577 ;; fails with Python 2 only. Simply make the test-case return
9578 ;; immediately.
9579 (lambda _
9580 (substitute*
9581 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
9582 (("formats = self.nbconvert_api") "return #")))))))))))
9583
9584 (define-public python-widgetsnbextension
9585 (package
9586 (name "python-widgetsnbextension")
9587 (version "3.5.1")
9588 (source
9589 (origin
9590 (method url-fetch)
9591 (uri (pypi-uri "widgetsnbextension" version))
9592 (sha256
9593 (base32
9594 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9595 (build-system python-build-system)
9596 (propagated-inputs
9597 `(("python-ipykernel" ,python-ipykernel)
9598 ("python-notebook" ,python-notebook)))
9599 (native-inputs
9600 `(("python-certifi" ,python-certifi)
9601 ("python-nose" ,python-nose)))
9602 (home-page "https://ipython.org")
9603 (synopsis "IPython HTML widgets for Jupyter")
9604 (description "This package provides interactive HTML widgets for Jupyter
9605 notebooks.")
9606 (license license:bsd-3)))
9607
9608 (define-public python2-widgetsnbextension
9609 (package-with-python2 python-widgetsnbextension))
9610
9611 (define-public python-ipywidgets
9612 (package
9613 (name "python-ipywidgets")
9614 (version "7.5.1")
9615 (source
9616 (origin
9617 (method url-fetch)
9618 (uri (pypi-uri "ipywidgets" version))
9619 (sha256
9620 (base32
9621 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9622 (build-system python-build-system)
9623 (propagated-inputs
9624 `(("python-ipython" ,python-ipython)
9625 ("python-traitlets" ,python-traitlets)
9626 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9627 (native-inputs
9628 `(("python-nose" ,python-nose)
9629 ("python-pytest" ,python-pytest)))
9630 (home-page "https://ipython.org")
9631 (synopsis "IPython HTML widgets for Jupyter")
9632 (description "Ipywidgets are interactive HTML widgets for Jupyter
9633 notebooks and the IPython kernel. Notebooks come alive when interactive
9634 widgets are used. Users gain control of their data and can visualize changes
9635 in the data.")
9636 (license license:bsd-3)))
9637
9638 (define-public python2-ipywidgets
9639 (package-with-python2 python-ipywidgets))
9640
9641 (define-public python-jupyter-console
9642 (package
9643 (name "python-jupyter-console")
9644 (version "6.1.0")
9645 (source
9646 (origin
9647 (method url-fetch)
9648 (uri (pypi-uri "jupyter_console" version))
9649 (sha256
9650 (base32
9651 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9652 (build-system python-build-system)
9653 (propagated-inputs
9654 `(("python-ipykernel" ,python-ipykernel)
9655 ("python-jupyter-client" ,python-jupyter-client)
9656 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9657 ("python-pygments" ,python-pygments)))
9658 (native-inputs
9659 `(("python-nose" ,python-nose)))
9660 (home-page "https://jupyter.org")
9661 (synopsis "Jupyter terminal console")
9662 (description "This package provides a terminal-based console frontend for
9663 Jupyter kernels. It also allows for console-based interaction with non-Python
9664 Jupyter kernels such as IJulia and IRKernel.")
9665 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9666 (license license:bsd-3)))
9667
9668 (define-public python2-jupyter-console
9669 (package
9670 (name "python2-jupyter-console")
9671 (version "5.2.0")
9672 (source
9673 (origin
9674 (method url-fetch)
9675 (uri (pypi-uri "jupyter_console" version))
9676 (sha256
9677 (base32
9678 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9679 (build-system python-build-system)
9680 (arguments
9681 `(#:python ,python-2
9682 #:tests? #f)) ; Tests only run in a TTY.
9683 (propagated-inputs
9684 `(("python2-ipykernel" ,python2-ipykernel)
9685 ("python2-jupyter-client" ,python2-jupyter-client)
9686 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9687 ("python2-pygments" ,python2-pygments)))
9688 (native-inputs
9689 `(("python2-nose" ,python2-nose)))
9690 (home-page "https://jupyter.org")
9691 (synopsis "Jupyter terminal console")
9692 (description "This package provides a terminal-based console frontend for
9693 Jupyter kernels. It also allows for console-based interaction with non-Python
9694 Jupyter kernels such as IJulia and IRKernel.")
9695 (license license:bsd-3)))
9696
9697 ;; The python-ipython and python-jupyter-console require each other. To get
9698 ;; the functionality in both packages working, strip down the
9699 ;; python-jupyter-console package when using it as an input to python-ipython.
9700 (define python-jupyter-console-minimal
9701 (package
9702 (inherit python-jupyter-console)
9703 (name "python-jupyter-console-minimal")
9704 (arguments
9705 (substitute-keyword-arguments
9706 (package-arguments python-jupyter-console)
9707 ((#:phases phases)
9708 `(modify-phases ,phases
9709 (add-after 'install 'delete-bin
9710 (lambda* (#:key outputs #:allow-other-keys)
9711 ;; Delete the bin files, to avoid conflicts in profiles
9712 ;; where python-ipython and python-jupyter-console are
9713 ;; both present.
9714 (delete-file-recursively
9715 (string-append
9716 (assoc-ref outputs "out") "/bin"))))))))
9717 ;; Remove the python-ipython propagated input, to avoid the cycle
9718 (propagated-inputs
9719 (alist-delete
9720 "python-ipython"
9721 (package-propagated-inputs python-jupyter-console)))))
9722
9723 (define-public python-qtconsole
9724 (package
9725 (name "python-qtconsole")
9726 (version "4.4.3")
9727 (source
9728 (origin
9729 (method url-fetch)
9730 (uri (pypi-uri "qtconsole" version))
9731 (sha256
9732 (base32
9733 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9734 (build-system python-build-system)
9735 (arguments
9736 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9737 ;; but we only have the LTS version 5.x. This means that there might be
9738 ;; runtime errors, but since this is a dependency of the Jupyter package,
9739 ;; and Jupyter can be used without the qtconsole we can overlook this for
9740 ;; now.
9741 `(#:tests? #f
9742 #:phases
9743 (modify-phases %standard-phases
9744 (add-before 'check 'pre-check
9745 (lambda _
9746 (setenv "QT_QPA_PLATFORM" "offscreen")
9747 #t)))))
9748 (propagated-inputs
9749 `(("python-ipykernel" ,python-ipykernel)
9750 ("python-ipython" ,python-ipython)))
9751 (native-inputs
9752 `(("python-pytest" ,python-pytest)))
9753 (home-page "http://jupyter.org")
9754 (synopsis "Jupyter Qt console")
9755 (description "This package provides a Qt-based console for Jupyter with
9756 support for rich media output.")
9757 (license license:bsd-3)))
9758
9759 (define-public python-jsbeautifier
9760 (package
9761 (name "python-jsbeautifier")
9762 (version "1.10.2")
9763 (home-page "https://github.com/beautify-web/js-beautify")
9764 (source (origin
9765 (method git-fetch)
9766 (uri (git-reference
9767 (url home-page)
9768 (commit (string-append "v" version))))
9769 (file-name (git-file-name name version))
9770 (sha256
9771 (base32
9772 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9773 (build-system python-build-system)
9774 (arguments
9775 `(#:phases (modify-phases %standard-phases
9776 (add-after 'unpack 'chdir
9777 (lambda _
9778 ;; The upstream Git repository contains all the code,
9779 ;; but this package only builds the python code.
9780 (chdir "python")
9781 #t))
9782 (add-after 'unpack 'patch-python-six-requirements
9783 (lambda _
9784 (substitute* "python/setup.py"
9785 (("six>=1.12.0")
9786 "six>=1.11.0"))
9787 #t)))))
9788 (propagated-inputs
9789 `(("python-editorconfig" ,python-editorconfig)
9790 ("python-six" ,python-six)))
9791 (native-inputs
9792 `(("python-pytest" ,python-pytest)))
9793 (synopsis "JavaScript unobfuscator and beautifier")
9794 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9795 popular online obfuscators.")
9796 (license license:expat)))
9797
9798 (define-public jupyter
9799 (package
9800 (name "jupyter")
9801 (version "1.0.0")
9802 (source
9803 (origin
9804 (method url-fetch)
9805 (uri (pypi-uri "jupyter" version))
9806 (sha256
9807 (base32
9808 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9809 (build-system python-build-system)
9810 (arguments '(#:tests? #f)) ; there are none.
9811 (propagated-inputs
9812 `(("python-ipykernel" ,python-ipykernel)
9813 ("python-ipywidgets" ,python-ipywidgets)
9814 ("python-jupyter-console" ,python-jupyter-console)
9815 ("python-nbconvert" ,python-nbconvert)
9816 ("python-notebook" ,python-notebook)
9817 ("python-qtconsole" ,python-qtconsole)))
9818 (native-search-paths
9819 (list (search-path-specification
9820 (variable "JUPYTER_PATH")
9821 (files '("share/jupyter")))))
9822 (home-page "https://jupyter.org")
9823 (synopsis "Web application for interactive documents")
9824 (description
9825 "The Jupyter Notebook is a web application that allows you to create and
9826 share documents that contain live code, equations, visualizations and
9827 explanatory text. Uses include: data cleaning and transformation, numerical
9828 simulation, statistical modeling, machine learning and much more.")
9829 (license license:bsd-3)))
9830
9831 (define-public python-chardet
9832 (package
9833 (name "python-chardet")
9834 (version "3.0.4")
9835 (source
9836 (origin
9837 (method url-fetch)
9838 (uri (pypi-uri "chardet" version))
9839 (sha256
9840 (base32
9841 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9842 (native-inputs
9843 `(("python-hypothesis" ,python-hypothesis)
9844 ("python-pytest" ,python-pytest)
9845 ("python-pytest-runner" ,python-pytest-runner)))
9846 (build-system python-build-system)
9847 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9848 (arguments `(#:tests? #f))
9849 (home-page "https://github.com/chardet/chardet")
9850 (synopsis "Universal encoding detector for Python 2 and 3")
9851 (description
9852 "This package provides @code{chardet}, a Python module that can
9853 automatically detect a wide range of file encodings.")
9854 (license license:lgpl2.1+)))
9855
9856 (define-public python2-chardet
9857 (package-with-python2 python-chardet))
9858
9859 (define-public python-docopt
9860 (package
9861 (name "python-docopt")
9862 (version "0.6.2")
9863 (source
9864 (origin
9865 (method git-fetch)
9866 ;; The release on PyPI does not include tests.
9867 (uri (git-reference
9868 (url "https://github.com/docopt/docopt")
9869 (commit version)))
9870 (file-name (git-file-name name version))
9871 (sha256
9872 (base32
9873 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9874 (build-system python-build-system)
9875 (native-inputs
9876 `(("python-pytest" ,python-pytest)))
9877 (arguments
9878 `(#:phases
9879 (modify-phases %standard-phases
9880 (replace 'check
9881 (lambda _ (invoke "py.test"))))))
9882 (home-page "http://docopt.org")
9883 (synopsis "Command-line interface description language for Python")
9884 (description "This library allows the user to define a command-line
9885 interface from a program's help message rather than specifying it
9886 programmatically with command-line parsers like @code{getopt} and
9887 @code{argparse}.")
9888 (license license:expat)))
9889
9890 (define-public python2-docopt
9891 (package-with-python2 python-docopt))
9892
9893 (define-public python-pythondialog
9894 (package
9895 (name "python-pythondialog")
9896 (version "3.4.0")
9897 (source
9898 (origin
9899 (method url-fetch)
9900 (uri (pypi-uri "pythondialog" version))
9901 (sha256
9902 (base32
9903 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9904 (build-system python-build-system)
9905 (arguments
9906 `(#:phases
9907 (modify-phases %standard-phases
9908 (add-after 'unpack 'patch-path
9909 (lambda* (#:key inputs #:allow-other-keys)
9910 (let* ((dialog (assoc-ref inputs "dialog")))
9911 ;; Since this library really wants to grovel the search path, we
9912 ;; must hardcode dialog's store path into it.
9913 (substitute* "dialog.py"
9914 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9915 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9916 #t))))
9917 #:tests? #f)) ; no test suite
9918 (propagated-inputs
9919 `(("dialog" ,dialog)))
9920 (home-page "http://pythondialog.sourceforge.net/")
9921 (synopsis "Python interface to the UNIX dialog utility")
9922 (description "A Python wrapper for the dialog utility. Its purpose is to
9923 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9924 This allows one to make simple text-mode user interfaces on Unix-like systems")
9925 (license license:lgpl2.1)
9926 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9927
9928 (define-public python2-pythondialog
9929 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9930 (package
9931 (inherit base)
9932 (version (package-version python-pythondialog))
9933 (source (origin
9934 (method url-fetch)
9935 (uri (pypi-uri "python2-pythondialog" version))
9936 (sha256
9937 (base32
9938 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9939
9940 (define-public python-configobj
9941 (package
9942 (name "python-configobj")
9943 (version "5.0.6")
9944 (source (origin
9945 (method url-fetch)
9946 (uri (pypi-uri "configobj" version))
9947 (sha256
9948 (base32
9949 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9950 ;; Patch setup.py so it looks for python-setuptools, which is
9951 ;; required to parse the keyword 'install_requires' in setup.py.
9952 (patches (search-patches "python-configobj-setuptools.patch"))))
9953 (build-system python-build-system)
9954 (propagated-inputs
9955 `(("python-six" ,python-six)))
9956 (synopsis "Config file reading, writing and validation")
9957 (description "ConfigObj is a simple but powerful config file reader and
9958 writer: an ini file round tripper. Its main feature is that it is very easy to
9959 use, with a straightforward programmer’s interface and a simple syntax for
9960 config files.")
9961 (home-page "https://github.com/DiffSK/configobj")
9962 (license license:bsd-3)))
9963
9964 (define-public python2-configobj
9965 (package-with-python2 python-configobj))
9966
9967 (define-public python-configargparse
9968 (package
9969 (name "python-configargparse")
9970 (version "0.14.0")
9971 (source (origin
9972 (method url-fetch)
9973 (uri (pypi-uri "ConfigArgParse" version))
9974 (sha256
9975 (base32
9976 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9977 (build-system python-build-system)
9978 (native-inputs
9979 `(("python-pyyaml" ,python-pyyaml)))
9980 (arguments
9981 `(#:phases
9982 (modify-phases %standard-phases
9983 (replace 'check
9984 (lambda _
9985 ;; Bypass setuptools-shim because one test relies on "setup.py"
9986 ;; being the first argument passed to the python call.
9987 ;;
9988 ;; NOTE: Many tests do not run because they rely on Python's
9989 ;; built-in test.test_argparse, but we remove the unit tests from
9990 ;; our Python installation.
9991 (invoke "python" "setup.py" "test"))))))
9992 (synopsis "Replacement for argparse")
9993 (description "A drop-in replacement for argparse that allows options to also
9994 be set via config files and/or environment variables.")
9995 (home-page "https://github.com/bw2/ConfigArgParse")
9996 (license license:expat)))
9997
9998 (define-public python2-configargparse
9999 (package-with-python2 python-configargparse))
10000
10001 (define-public python-argparse-manpage
10002 (package
10003 (name "python-argparse-manpage")
10004 (version "1.1")
10005 (source
10006 (origin
10007 (method url-fetch)
10008 (uri (pypi-uri "argparse-manpage" version))
10009 (sha256
10010 (base32
10011 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
10012 (build-system python-build-system)
10013 (home-page "https://github.com/praiskup/argparse-manpage")
10014 (synopsis "Build manual page from Python's ArgumentParser object")
10015 (description
10016 "This package provides tools to build manual pages from Python's
10017 @code{ArgumentParser} object.")
10018 (license license:asl2.0)))
10019
10020 (define-public python-contextlib2
10021 (package
10022 (name "python-contextlib2")
10023 (version "0.6.0.post1")
10024 (source
10025 (origin
10026 (method url-fetch)
10027 (uri (pypi-uri "contextlib2" version))
10028 (sha256
10029 (base32
10030 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
10031 (build-system python-build-system)
10032 (home-page "https://contextlib2.readthedocs.org/")
10033 (synopsis "Tools for decorators and context managers")
10034 (description "This module is primarily a backport of the Python
10035 3.2 contextlib to earlier Python versions. Like contextlib, it
10036 provides utilities for common tasks involving decorators and context
10037 managers. It also contains additional features that are not part of
10038 the standard library.")
10039 (properties `((python2-variant . ,(delay python2-contextlib2))))
10040 (license license:psfl)))
10041
10042 (define-public python2-contextlib2
10043 (let ((base (package-with-python2
10044 (strip-python2-variant python-contextlib2))))
10045 (package
10046 (inherit base)
10047 (arguments
10048 (substitute-keyword-arguments (package-arguments base)
10049 ((#:phases phases)
10050 `(modify-phases ,phases
10051 (replace 'check
10052 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
10053 (native-inputs
10054 `(("python2-unittest2" ,python2-unittest2))))))
10055
10056 ;; This package is used by python2-pytest via python2-importlib-metadata,
10057 ;; and thus can not depend on python-unittest2 (which depends on pytest).
10058 (define-public python2-contextlib2-bootstrap
10059 (hidden-package
10060 (package/inherit
10061 python2-contextlib2
10062 (name "python2-contextlib2-bootstrap")
10063 (arguments
10064 `(#:tests? #f
10065 ,@(package-arguments python2-contextlib2)))
10066 (native-inputs '()))))
10067
10068 (define-public python-texttable
10069 (package
10070 (name "python-texttable")
10071 (version "1.6.2")
10072 (source
10073 (origin
10074 (method url-fetch)
10075 (uri (pypi-uri "texttable" version))
10076 (sha256
10077 (base32
10078 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
10079 (build-system python-build-system)
10080 (arguments
10081 `(#:phases
10082 (modify-phases %standard-phases
10083 (replace 'check
10084 (lambda _ (invoke "pytest" "tests.py"))))))
10085 (native-inputs
10086 `(("python-pytest" ,python-pytest)))
10087 (home-page "https://github.com/foutaise/texttable/")
10088 (synopsis "Python module for creating simple ASCII tables")
10089 (description "Texttable is a Python module for creating simple ASCII
10090 tables.")
10091 (license license:expat)))
10092
10093 (define-public python2-texttable
10094 (package-with-python2 python-texttable))
10095
10096 (define-public python-atomicwrites
10097 (package
10098 (name "python-atomicwrites")
10099 (version "1.3.0")
10100 (source (origin
10101 (method url-fetch)
10102 (uri (pypi-uri "atomicwrites" version))
10103 (sha256
10104 (base32
10105 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
10106 (build-system python-build-system)
10107 (synopsis "Atomic file writes in Python")
10108 (description "Library for atomic file writes using platform dependent tools
10109 for atomic file system operations.")
10110 (home-page "https://github.com/untitaker/python-atomicwrites")
10111 (license license:expat)))
10112
10113 (define-public python2-atomicwrites
10114 (package-with-python2 python-atomicwrites))
10115
10116 (define-public python-click-threading
10117 (package
10118 (name "python-click-threading")
10119 (version "0.4.4")
10120 (source (origin
10121 (method url-fetch)
10122 (uri (pypi-uri "click-threading" version))
10123 (sha256
10124 (base32
10125 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
10126 (build-system python-build-system)
10127 (propagated-inputs
10128 `(("python-click" ,python-click)))
10129 (synopsis "Utilities for multithreading in Click")
10130 (description "This package provides utilities for multithreading in Click
10131 applications.")
10132 (home-page "https://github.com/click-contrib/click-threading")
10133 (license license:expat)))
10134
10135 (define-public python-click-log
10136 (package
10137 (name "python-click-log")
10138 (version "0.3.2")
10139 (source (origin
10140 (method url-fetch)
10141 (uri (pypi-uri "click-log" version))
10142 (sha256
10143 (base32
10144 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
10145 (build-system python-build-system)
10146 (propagated-inputs
10147 `(("python-click" ,python-click)))
10148 (synopsis "Logging for click applications")
10149 (description "This package provides a Python library for logging Click
10150 applications.")
10151 (home-page "https://github.com/click-contrib/click-log")
10152 (license license:expat)))
10153
10154 (define-public python-apipkg
10155 (package
10156 (name "python-apipkg")
10157 (version "1.5")
10158 (source (origin
10159 (method url-fetch)
10160 (uri (pypi-uri "apipkg" version))
10161 (sha256
10162 (base32
10163 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
10164 (build-system python-build-system)
10165 (native-inputs
10166 `(("python-pytest" ,python-pytest)
10167 ("python-setuptools-scm" ,python-setuptools-scm)))
10168 (synopsis "Namespace control and lazy-import mechanism")
10169 (description "With apipkg you can control the exported namespace of a Python
10170 package and greatly reduce the number of imports for your users. It is a small
10171 pure Python module that works on virtually all Python versions.")
10172 (home-page "https://github.com/pytest-dev/apipkg")
10173 (license license:expat)))
10174
10175 (define-public python-execnet
10176 (package
10177 (name "python-execnet")
10178 (version "1.4.1")
10179 (source (origin
10180 (method url-fetch)
10181 (uri (pypi-uri "execnet" version))
10182 (sha256
10183 (base32
10184 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
10185 (build-system python-build-system)
10186 (arguments
10187 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
10188 ;; The two test failures are caused by the lack of an `ssh` executable.
10189 ;; The test suite can be run with pytest after the 'install' phase.
10190 #:tests? #f))
10191 (native-inputs
10192 `(("python-pytest" ,python-pytest)
10193 ("python-setuptools-scm" ,python-setuptools-scm)))
10194 (propagated-inputs
10195 `(("python-apipkg" ,python-apipkg)))
10196 (synopsis "Rapid multi-Python deployment")
10197 (description "Execnet provides a share-nothing model with
10198 channel-send/receive communication for distributing execution across many
10199 Python interpreters across version, platform and network barriers. It has a
10200 minimal and fast API targeting the following uses:
10201 @enumerate
10202 @item distribute tasks to (many) local or remote CPUs
10203 @item write and deploy hybrid multi-process applications
10204 @item write scripts to administer multiple environments
10205 @end enumerate")
10206 (home-page "https://codespeak.net/execnet/")
10207 (license license:expat)))
10208
10209 (define-public python2-execnet
10210 (package-with-python2 python-execnet))
10211
10212 (define-public python-icalendar
10213 (package
10214 (name "python-icalendar")
10215 (version "4.0.5")
10216 (source (origin
10217 (method url-fetch)
10218 (uri (pypi-uri "icalendar" version))
10219 (sha256
10220 (base32
10221 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
10222 (build-system python-build-system)
10223 (propagated-inputs
10224 `(("python-dateutil" ,python-dateutil)
10225 ("python-pytz" ,python-pytz)))
10226 (synopsis "Python library for parsing iCalendar files")
10227 (description "The icalendar package is a parser/generator of iCalendar
10228 files for use with Python.")
10229 (home-page "https://github.com/collective/icalendar")
10230 (license license:bsd-2)))
10231
10232 (define-public python-args
10233 (package
10234 (name "python-args")
10235 (version "0.1.0")
10236 (source (origin
10237 (method url-fetch)
10238 (uri (pypi-uri "args" version))
10239 (sha256
10240 (base32
10241 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
10242 (build-system python-build-system)
10243 (home-page "https://github.com/kennethreitz/args")
10244 (synopsis "Command-line argument parser")
10245 (description
10246 "This library provides a Python module to parse command-line arguments.")
10247 (license license:bsd-3)))
10248
10249 (define-public python2-args
10250 (package-with-python2 python-args))
10251
10252 (define-public python-clint
10253 (package
10254 (name "python-clint")
10255 (version "0.5.1")
10256 (source (origin
10257 (method url-fetch)
10258 (uri (pypi-uri "clint" version))
10259 (sha256
10260 (base32
10261 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
10262 (build-system python-build-system)
10263 (arguments
10264 '(#:phases
10265 (modify-phases %standard-phases
10266 (replace 'check
10267 (lambda _ (invoke "py.test" "-v"))))))
10268 (native-inputs
10269 `(("python-pytest" ,python-pytest)))
10270 (propagated-inputs
10271 `(("python-args" ,python-args)))
10272 (home-page "https://github.com/kennethreitz/clint")
10273 (synopsis "Command-line interface tools")
10274 (description
10275 "Clint is a Python module filled with a set of tools for developing
10276 command-line applications, including tools for colored and indented
10277 output, progress bar display, and pipes.")
10278 (license license:isc)))
10279
10280 (define-public python2-clint
10281 (package-with-python2 python-clint))
10282
10283 (define-public python-rply
10284 (package
10285 (name "python-rply")
10286 (version "0.7.5")
10287 (source (origin
10288 (method url-fetch)
10289 (uri (pypi-uri "rply" version))
10290 (sha256
10291 (base32
10292 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
10293 (build-system python-build-system)
10294 (propagated-inputs
10295 `(("python-appdirs" ,python-appdirs)))
10296 (home-page "https://github.com/alex/rply")
10297 (synopsis "Parser generator for Python")
10298 (description
10299 "This package provides a pure Python based parser generator, that also
10300 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
10301 with a new public API, and RPython support.")
10302 (license license:bsd-3)))
10303
10304 (define-public python2-rply
10305 (package-with-python2 python-rply))
10306
10307 (define-public python-hy
10308 (package
10309 (name "python-hy")
10310 (version "0.18.0")
10311 (source (origin
10312 (method url-fetch)
10313 (uri (pypi-uri "hy" version))
10314 (sha256
10315 (base32
10316 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
10317 (build-system python-build-system)
10318 (arguments
10319 '(#:phases
10320 (modify-phases %standard-phases
10321 (add-before 'install 'set-HOME
10322 (lambda _
10323 (setenv "HOME" "/tmp") #t))
10324 (replace 'check
10325 (lambda _
10326 ;; Tests require write access to HOME.
10327 (setenv "HOME" "/tmp")
10328 (invoke "nosetests"))))))
10329 (native-inputs
10330 `(("python-coverage" ,python-coverage)
10331 ("python-nose" ,python-nose)))
10332 (propagated-inputs
10333 `(("python-astor" ,python-astor)
10334 ("python-colorama" ,python-colorama)
10335 ("python-rply" ,python-rply)
10336 ("python-funcparserlib"
10337 ,python-funcparserlib)))
10338 (home-page "http://hylang.org/")
10339 (synopsis "Lisp frontend to Python")
10340 (description
10341 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
10342 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
10343 Python at your fingertips, in Lisp form.")
10344 (license license:expat)))
10345
10346 (define-public python2-functools32
10347 (package
10348 (name "python2-functools32")
10349 (version "3.2.3-2")
10350 (source
10351 (origin
10352 (method url-fetch)
10353 (uri (pypi-uri "functools32" version))
10354 (sha256
10355 (base32
10356 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
10357 (build-system python-build-system)
10358 (arguments
10359 `(#:python ,python-2
10360 #:tests? #f)) ; no test target
10361 (home-page "https://github.com/MiCHiLU/python-functools32")
10362 (synopsis
10363 "Backport of the functools module from Python 3.2.3")
10364 (description
10365 "This package is a backport of the @code{functools} module from Python
10366 3.2.3 for use with older versions of Python and PyPy.")
10367 (license license:expat)))
10368
10369 (define-public python2-subprocess32
10370 (package
10371 (name "python2-subprocess32")
10372 (version "3.2.7")
10373 (source (origin
10374 (method url-fetch)
10375 (uri (pypi-uri "subprocess32" version))
10376 (sha256
10377 (base32
10378 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
10379 (patches
10380 (search-patches "python2-subprocess32-disable-input-test.patch"))))
10381 (build-system python-build-system)
10382 (arguments
10383 `(#:python ,python-2
10384 ;; The test suite fails with Python > 2.7.13:
10385 ;; import test.support
10386 ;; ImportError: No module named support
10387 #:tests? #f
10388 #:phases
10389 (modify-phases %standard-phases
10390 (add-after 'unpack 'patch-/bin/sh
10391 (lambda _
10392 (substitute* '("subprocess32.py"
10393 "test_subprocess32.py")
10394 (("/bin/sh") (which "sh")))
10395 #t)))))
10396 (home-page "https://github.com/google/python-subprocess32")
10397 (synopsis "Backport of the subprocess module from Python 3.2")
10398 (description
10399 "This is a backport of the @code{subprocess} standard library module
10400 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
10401 new features. On POSIX systems it is guaranteed to be reliable when used
10402 in threaded applications. It includes timeout support from Python 3.3 but
10403 otherwise matches 3.2’s API.")
10404 (license license:psfl)))
10405
10406 (define-public python2-futures
10407 (package
10408 (name "python2-futures")
10409 (version "3.2.0")
10410 (source
10411 (origin
10412 (method url-fetch)
10413 (uri (pypi-uri "futures" version))
10414 (sha256
10415 (base32
10416 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
10417 (build-system python-build-system)
10418 (arguments
10419 `(#:python ,python-2
10420 #:phases
10421 (modify-phases %standard-phases
10422 (replace 'check
10423 (lambda _
10424 (invoke "python" "test_futures.py")
10425 #t)))))
10426 (home-page "https://github.com/agronholm/pythonfutures")
10427 (synopsis
10428 "Backport of the concurrent.futures package from Python 3.2")
10429 (description
10430 "The concurrent.futures module provides a high-level interface for
10431 asynchronously executing callables. This package backports the
10432 concurrent.futures package from Python 3.2")
10433 (license license:bsd-3)))
10434
10435 (define-public python-promise
10436 (package
10437 (name "python-promise")
10438 (version "0.4.2")
10439 (source
10440 (origin
10441 (method url-fetch)
10442 (uri (pypi-uri "promise" version))
10443 (sha256
10444 (base32
10445 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
10446 (build-system python-build-system)
10447 ;; Tests wants python-futures, which is a python2 only program, and
10448 ;; can't be found by python-promise at test time.
10449 (arguments `(#:tests? #f))
10450 (home-page "https://github.com/syrusakbary/promise")
10451 (synopsis "Promises/A+ implementation for Python")
10452 (description
10453 "Promises/A+ implementation for Python")
10454 (properties `((python2-variant . ,(delay python2-promise))))
10455 (license license:expat)))
10456
10457 (define-public python2-promise
10458 (let ((promise (package-with-python2
10459 (strip-python2-variant python-promise))))
10460 (package (inherit promise)
10461 (arguments (substitute-keyword-arguments (package-arguments promise)
10462 ((#:tests? _) #t)))
10463 (native-inputs
10464 `(("python2-futures" ,python2-futures)
10465 ("python2-pytest" ,python2-pytest)
10466 ,@(package-native-inputs promise))))))
10467
10468 (define-public python-progressbar2
10469 (package
10470 (name "python-progressbar2")
10471 (version "3.51.3")
10472 (source
10473 (origin
10474 (method url-fetch)
10475 (uri (pypi-uri "progressbar2" version))
10476 (sha256
10477 (base32
10478 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
10479 (build-system python-build-system)
10480 (propagated-inputs
10481 `(("python-six" ,python-six)
10482 ("python-utils" ,python-utils)))
10483 (native-inputs
10484 `(("python-flake8" ,python-flake8)
10485 ("python-freezegun" ,python-freezegun)
10486 ("python-pycodestyle" ,python-pycodestyle)
10487 ("python-pytest" ,python-pytest)
10488 ("python-pytest-cache" ,python-pytest-cache)
10489 ("python-pytest-cov" ,python-pytest-cov)
10490 ("python-pytest-flakes" ,python-pytest-flakes)
10491 ("python-pytest-pep8" ,python-pytest-pep8)
10492 ("python-sphinx" ,python-sphinx)))
10493 (home-page "https://github.com/WoLpH/python-progressbar")
10494 (synopsis "Text progress bar library for Python")
10495 (description
10496 "This package provides a Python progressbar library to provide
10497 visual (yet text based) progress to long running operations.")
10498 (license license:bsd-3)))
10499
10500 (define-public python-progressbar33
10501 (package
10502 (name "python-progressbar33")
10503 (version "2.4")
10504 (source
10505 (origin
10506 (method url-fetch)
10507 (uri (pypi-uri "progressbar33" version))
10508 (sha256
10509 (base32
10510 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
10511 (build-system python-build-system)
10512 (home-page "https://github.com/germangh/python-progressbar")
10513 (synopsis "Text progress bar library for Python")
10514 (description
10515 "This package provides a text progress bar library for Python. This
10516 version only differs from the original @code{progressbar} package in that it
10517 uses relative package imports instead of absolute imports, which is necessary
10518 for the module to work under Python 3.3.")
10519 ;; Either or both of these licenses may be selected.
10520 (license (list license:lgpl2.1+ license:bsd-3))))
10521
10522 (define-public python-colorama
10523 (package
10524 (name "python-colorama")
10525 (version "0.4.3")
10526 (source
10527 (origin
10528 (method url-fetch)
10529 (uri (pypi-uri "colorama" version))
10530 (sha256
10531 (base32
10532 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
10533 (build-system python-build-system)
10534 (synopsis "Colored terminal text rendering for Python")
10535 (description "Colorama is a Python library for rendering colored terminal
10536 text.")
10537 (home-page "https://pypi.org/project/colorama/")
10538 (license license:bsd-3)))
10539
10540 (define-public python2-colorama
10541 (package-with-python2 python-colorama))
10542
10543 (define-public python-rsa
10544 (package
10545 (name "python-rsa")
10546 (version "3.4.2")
10547 (source
10548 (origin
10549 (method url-fetch)
10550 (uri (pypi-uri "rsa" version))
10551 (sha256
10552 (base32
10553 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
10554 (build-system python-build-system)
10555 (propagated-inputs
10556 `(("python-pyasn1" ,python-pyasn1)))
10557 (synopsis "Pure-Python RSA implementation")
10558 (description "Python-RSA is a pure-Python RSA implementation. It supports
10559 encryption and decryption, signing and verifying signatures, and key
10560 generation according to PKCS#1 version 1.5. It can be used as a Python
10561 library as well as on the command line.")
10562 (home-page "https://stuvel.eu/rsa")
10563 (license license:asl2.0)))
10564
10565 (define-public python2-rsa
10566 (package-with-python2 python-rsa))
10567
10568 (define-public python-pluggy
10569 (package
10570 (name "python-pluggy")
10571 (version "0.13.1")
10572 (source
10573 (origin
10574 (method url-fetch)
10575 (uri (pypi-uri "pluggy" version))
10576 (sha256
10577 (base32
10578 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
10579 (build-system python-build-system)
10580 (native-inputs
10581 `(("python-setuptools-scm" ,python-setuptools-scm)))
10582 (synopsis "Plugin and hook calling mechanism for Python")
10583 (description "Pluggy is an extraction of the plugin manager as used by
10584 Pytest but stripped of Pytest specific details.")
10585 (home-page "https://pypi.org/project/pluggy/")
10586 (properties `((python2-variant . ,(delay python2-pluggy))))
10587 (license license:expat)))
10588
10589 (define-public python2-pluggy
10590 (let ((base (package-with-python2 (strip-python2-variant
10591 python-pluggy))))
10592 (package/inherit
10593 base
10594 (propagated-inputs
10595 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
10596
10597 ;; This package requires python2-importlib-metadata, but that package
10598 ;; ends up needing python2-pluggy via python2-pytest, so we need this
10599 ;; variant to solve the circular dependency.
10600 (define-public python2-pluggy-bootstrap
10601 (hidden-package
10602 (package/inherit
10603 python2-pluggy
10604 (name "python2-pluggy-bootstrap")
10605 (arguments
10606 `(#:tests? #f
10607 ,@(package-arguments python2-pluggy)))
10608 (propagated-inputs
10609 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
10610
10611 (define-public python-tox
10612 (package
10613 (name "python-tox")
10614 (version "2.8.1")
10615 (source
10616 (origin
10617 (method url-fetch)
10618 (uri (pypi-uri "tox" version))
10619 (sha256
10620 (base32
10621 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10622 (build-system python-build-system)
10623 (arguments
10624 ;; FIXME: Tests require pytest-timeout, which itself requires
10625 ;; pytest>=2.8.0 for installation.
10626 '(#:tests? #f))
10627 (propagated-inputs
10628 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10629 ("python-py" ,python-py)
10630 ("python-virtualenv" ,python-virtualenv)))
10631 (native-inputs
10632 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10633 ("python-pytest" ,python-pytest) ; >= 2.3.5
10634 ("python-setuptools-scm" ,python-setuptools-scm)))
10635 (home-page "https://tox.readthedocs.io")
10636 (synopsis "Virtualenv-based automation of test activities")
10637 (description "Tox is a generic virtualenv management and test command line
10638 tool. It can be used to check that a package installs correctly with
10639 different Python versions and interpreters, or run tests in each type of
10640 supported environment, or act as a frontend to continuous integration
10641 servers.")
10642 (license license:expat)))
10643
10644 (define-public python2-tox
10645 (package-with-python2 python-tox))
10646
10647 (define-public python-jmespath
10648 (package
10649 (name "python-jmespath")
10650 (version "0.9.4")
10651 (source
10652 (origin
10653 (method url-fetch)
10654 (uri (pypi-uri "jmespath" version))
10655 (sha256
10656 (base32
10657 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10658 (build-system python-build-system)
10659 (native-inputs
10660 `(("python-nose" ,python-nose)))
10661 (synopsis "JSON Matching Expressions")
10662 (description "JMESPath (pronounced “james path”) is a Python library that
10663 allows one to declaratively specify how to extract elements from a JSON
10664 document.")
10665 (home-page "https://github.com/jmespath/jmespath.py")
10666 (license license:expat)))
10667
10668 (define-public python2-jmespath
10669 (package-with-python2 python-jmespath))
10670
10671 (define-public python-symengine
10672 (package
10673 (name "python-symengine")
10674 (version "0.6.1")
10675 (source
10676 (origin
10677 (method url-fetch)
10678 (uri (pypi-uri "symengine" version))
10679 (sha256
10680 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
10681 (build-system python-build-system)
10682 (native-inputs
10683 `(("cmake" ,cmake)
10684 ("python-cython" ,python-cython)))
10685 (inputs
10686 `(("symengine" ,symengine)))
10687 (home-page "https://github.com/symengine/symengine.py")
10688 (synopsis "Python library providing wrappers to SymEngine")
10689 (description
10690 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
10691 manipulation library.")
10692 (license license:expat)))
10693
10694 (define-public python-botocore
10695 (package
10696 (name "python-botocore")
10697 (version "1.15.26")
10698 (source
10699 (origin
10700 (method url-fetch)
10701 (uri (pypi-uri "botocore" version))
10702 (sha256
10703 (base32
10704 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10705 (build-system python-build-system)
10706 (arguments
10707 ;; FIXME: Many tests are failing.
10708 '(#:tests? #f))
10709 (propagated-inputs
10710 `(("python-dateutil" ,python-dateutil)
10711 ("python-docutils" ,python-docutils)
10712 ("python-jmespath" ,python-jmespath)))
10713 (native-inputs
10714 `(("python-mock" ,python-mock)
10715 ("python-nose" ,python-nose)
10716 ("behave" ,behave)
10717 ("python-tox" ,python-tox)
10718 ("python-urllib3" ,python-urllib3)
10719 ("python-wheel" ,python-wheel)))
10720 (home-page "https://github.com/boto/botocore")
10721 (synopsis "Low-level interface to AWS")
10722 (description "Botocore is a Python library that provides a low-level
10723 interface to the Amazon Web Services (AWS) API.")
10724 (license license:asl2.0)))
10725
10726 (define-public python2-botocore
10727 (package-with-python2 python-botocore))
10728
10729 (define-public python-pyfiglet
10730 (package
10731 (name "python-pyfiglet")
10732 (version "0.8.post1")
10733 (source
10734 (origin
10735 (method url-fetch)
10736 (uri (pypi-uri "pyfiglet" version))
10737 (sha256
10738 (base32
10739 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
10740 (build-system python-build-system)
10741 (home-page "https://github.com/pwaller/pyfiglet")
10742 (synopsis "Draw ASCII art big letters in Python")
10743 (description "This module lets you draw large letter from ordinary characters
10744 in pure Python.")
10745 (license license:expat)))
10746
10747 (define-public python-xdo
10748 (package
10749 (name "python-xdo")
10750 (version "0.3")
10751 (source (origin
10752 (method url-fetch)
10753 (uri (string-append
10754 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10755 "python-xdo_" version ".orig.tar.gz"))
10756 (sha256
10757 (base32
10758 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10759 (build-system python-build-system)
10760 (arguments
10761 '(#:phases
10762 (modify-phases %standard-phases
10763 (add-before 'install 'patch-libxdo-path
10764 ;; Hardcode the path of dynamically loaded libxdo library.
10765 (lambda* (#:key inputs #:allow-other-keys)
10766 (let ((libxdo (string-append
10767 (assoc-ref inputs "xdotool")
10768 "/lib/libxdo.so")))
10769 (substitute* "xdo/_xdo.py"
10770 (("find_library\\(\"xdo\"\\)")
10771 (simple-format #f "\"~a\"" libxdo)))
10772 #t))))
10773 #:tests? #f)) ; no tests provided
10774 (propagated-inputs
10775 `(("python-six" ,python-six)))
10776 (inputs
10777 `(("xdotool" ,xdotool)
10778 ("libX11" ,libx11)))
10779 (home-page "https://tracker.debian.org/pkg/python-xdo")
10780 (synopsis "Python library for simulating X11 keyboard/mouse input")
10781 (description "Provides bindings to libxdo for manipulating X11 via simulated
10782 input. (Note that this is mostly a legacy library; you may wish to look at
10783 python-xdo for newer bindings.)")
10784 (license license:bsd-3)))
10785
10786 (define-public python2-xdo
10787 (package-with-python2 python-xdo))
10788
10789 (define-public python-mako
10790 (package
10791 (name "python-mako")
10792 (version "1.1.2")
10793 (source
10794 (origin
10795 (method url-fetch)
10796 (uri (pypi-uri "Mako" version))
10797 (sha256
10798 (base32
10799 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10800 (build-system python-build-system)
10801 (arguments
10802 `(#:phases (modify-phases %standard-phases
10803 (replace 'check
10804 (lambda* (#:key tests? #:allow-other-keys)
10805 (if tests?
10806 (invoke "nosetests" "-v")
10807 (format #t "test suite not run~%"))
10808 #t)))))
10809 (propagated-inputs
10810 `(("python-markupsafe" ,python-markupsafe)))
10811 (native-inputs
10812 `(("python-mock" ,python-mock)
10813 ("python-nose" ,python-nose)))
10814 (home-page "https://www.makotemplates.org/")
10815 (synopsis "Templating language for Python")
10816 (description "Mako is a templating language for Python that compiles
10817 templates into Python modules.")
10818 (license license:expat)))
10819
10820 (define-public python2-mako
10821 (package-with-python2 python-mako))
10822
10823 (define-public python-waitress
10824 (package
10825 (name "python-waitress")
10826 (version "1.1.0")
10827 (source
10828 (origin
10829 (method url-fetch)
10830 (uri (pypi-uri "waitress" version))
10831 (patches (search-patches "python-waitress-fix-tests.patch"))
10832 (sha256
10833 (base32
10834 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10835 (build-system python-build-system)
10836 (home-page "https://github.com/Pylons/waitress")
10837 (synopsis "Waitress WSGI server")
10838 (description "Waitress is meant to be a production-quality pure-Python WSGI
10839 server with very acceptable performance.")
10840 (license license:zpl2.1)))
10841
10842 (define-public python2-waitress
10843 (package-with-python2 python-waitress))
10844
10845 (define-public python-whichcraft
10846 (package
10847 (name "python-whichcraft")
10848 (version "0.6.1")
10849 (source
10850 (origin
10851 (method url-fetch)
10852 (uri (pypi-uri "whichcraft" version))
10853 (sha256
10854 (base32
10855 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10856 (build-system python-build-system)
10857 (native-inputs
10858 `(("python-pytest" ,python-pytest)))
10859 (home-page "https://github.com/pydanny/whichcraft")
10860 (synopsis "Cross-platform cross-python shutil.which functionality")
10861 (description
10862 "This package provides a shim of the shutil.which function that's
10863 designed to work across multiple versions of Python.")
10864 (license license:bsd-3)))
10865
10866 (define-public python-cookiecutter
10867 (package
10868 (name "python-cookiecutter")
10869 (version "1.7.2")
10870 (source
10871 (origin
10872 (method url-fetch)
10873 (uri (pypi-uri "cookiecutter" version))
10874 (sha256
10875 (base32
10876 "1b2xa5dypk1vf8aq599fd8zw4y0pwvq3hgl7ia8aiv8gg3ab5dpg"))))
10877 (build-system python-build-system)
10878 (native-inputs
10879 `(("python-freezegun" ,python-freezegun)
10880 ("python-pytest" ,python-pytest)
10881 ("python-pytest-catchlog" ,python-pytest-catchlog)
10882 ("python-pytest-cov" ,python-pytest-cov)
10883 ("python-pytest-mock" ,python-pytest-mock)))
10884 (propagated-inputs
10885 `(("python-binaryornot" ,python-binaryornot)
10886 ("python-click" ,python-click)
10887 ("python-future" ,python-future)
10888 ("python-jinja2" ,python-jinja2)
10889 ("python-jinja2-time" ,python-jinja2-time)
10890 ("python-poyo" ,python-poyo)
10891 ("python-requests" ,python-requests)
10892 ("python-slugify" ,python-slugify)
10893 ("python-text-unidecode" ,python-text-unidecode)
10894 ("python-whichcraft" ,python-whichcraft)))
10895 (home-page "https://github.com/cookiecutter/cookiecutter")
10896 (synopsis
10897 "Command-line utility that creates projects from project templates")
10898 (description
10899 "This package provides a command-line utility that creates projects from
10900 project templates, e.g. creating a Python package project from a Python package
10901 project template.")
10902 (license license:bsd-3)))
10903
10904 (define-public python-pyquery
10905 (package
10906 (name "python-pyquery")
10907 (version "1.2.17")
10908 (source
10909 (origin
10910 (method url-fetch)
10911 (uri (pypi-uri "pyquery" version))
10912 (sha256
10913 (base32
10914 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10915 (build-system python-build-system)
10916 (native-inputs
10917 `(("python-webob" ,python-webob)
10918 ("python-webtest" ,python-webtest)))
10919 (propagated-inputs
10920 `(("python-lxml" ,python-lxml)
10921 ("python-cssselect" ,python-cssselect)))
10922 (home-page "https://github.com/gawel/pyquery")
10923 (synopsis "Make jQuery-like queries on xml documents")
10924 (description "pyquery allows you to make jQuery queries on xml documents.
10925 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10926 fast xml and html manipulation.")
10927 (license license:bsd-3)))
10928
10929 (define-public python-anyjson
10930 (package
10931 (name "python-anyjson")
10932 (version "0.3.3")
10933 (source
10934 (origin
10935 (method url-fetch)
10936 (uri (pypi-uri "anyjson" version))
10937 (sha256
10938 (base32
10939 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10940 (build-system python-build-system)
10941 (arguments
10942 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10943 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10944 ;; whatever) so this transformation needs to be done before the tests
10945 ;; can be run. Maybe we could add a build step to transform beforehand
10946 ;; but it could be annoying/difficult.
10947 ;; We can enable tests for the Python 2 version, though, and do below.
10948 #:tests? #f))
10949 (home-page "https://bitbucket.org/runeh/anyjson/")
10950 (synopsis
10951 "Wraps best available JSON implementation in a common interface")
10952 (description
10953 "Anyjson loads whichever is the fastest JSON module installed
10954 and provides a uniform API regardless of which JSON implementation is used.")
10955 (license license:bsd-3)
10956 (properties `((python2-variant . ,(delay python2-anyjson))))))
10957
10958 (define-public python2-anyjson
10959 (let ((anyjson (package-with-python2
10960 (strip-python2-variant python-anyjson))))
10961 (package
10962 (inherit anyjson)
10963 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10964 #:tests? #t
10965 ,@(package-arguments anyjson)))
10966 (native-inputs `(("python2-nose" ,python2-nose))))))
10967
10968 (define-public python-amqp
10969 (package
10970 (name "python-amqp")
10971 (version "2.3.2")
10972 (source
10973 (origin
10974 (method url-fetch)
10975 (uri (pypi-uri "amqp" version))
10976 (sha256
10977 (base32
10978 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10979 (build-system python-build-system)
10980 (native-inputs
10981 `(("python-case" ,python-case)
10982 ("python-pytest-sugar" ,python-pytest-sugar)
10983 ("python-mock" ,python-mock)))
10984 (propagated-inputs
10985 `(("python-vine" ,python-vine)))
10986 (home-page "https://github.com/celery/py-amqp")
10987 (synopsis
10988 "Low-level AMQP client for Python (fork of amqplib)")
10989 (description
10990 "This is a fork of amqplib which was originally written by Barry Pederson.
10991 It is maintained by the Celery project, and used by kombu as a pure python
10992 alternative when librabbitmq is not available.")
10993 (license license:lgpl2.1+)
10994 (properties `((python2-variant . ,(delay python2-amqp))))))
10995
10996 (define-public python2-amqp
10997 (let ((amqp (package-with-python2
10998 (strip-python2-variant python-amqp))))
10999 (package
11000 (inherit amqp)
11001 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
11002 ;; unmaintained. Weirdly, does not do this on the python 3
11003 ;; version?
11004 #:tests? #f
11005 ,@(package-arguments amqp))))))
11006
11007 (define-public python-txamqp
11008 (package
11009 (name "python-txamqp")
11010 (version "0.8.2")
11011 (source
11012 (origin
11013 (method url-fetch)
11014 (uri (pypi-uri "txAMQP" version))
11015 (sha256
11016 (base32
11017 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
11018 (build-system python-build-system)
11019 (propagated-inputs
11020 `(("python-six" ,python-six)
11021 ("python-twisted" ,python-twisted)))
11022 (home-page "https://github.com/txamqp/txamqp")
11023 (synopsis "Communicate with AMQP peers and brokers using Twisted")
11024 (description
11025 "This package provides a Python library for communicating with AMQP peers
11026 and brokers using the asynchronous networking framework Twisted. It contains
11027 all the necessary code to connect, send and receive messages to/from an
11028 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
11029 also includes support for using Thrift RPC over AMQP in Twisted
11030 applications.")
11031 (license license:asl2.0)))
11032
11033 (define-public python2-txamqp
11034 (package-with-python2 python-txamqp))
11035
11036 (define-public python-kombu
11037 (package
11038 (name "python-kombu")
11039 (version "4.2.2")
11040 (source
11041 (origin
11042 (method url-fetch)
11043 (uri (pypi-uri "kombu" version))
11044 (sha256
11045 (base32
11046 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
11047 (build-system python-build-system)
11048 (native-inputs
11049 `(("python-mock" ,python-mock)
11050 ("python-case" ,python-case)
11051 ("python-pyro4" ,python-pyro4)
11052 ("python-pytest-sugar" ,python-pytest-sugar)
11053 ("python-pytz" ,python-pytz)))
11054 (propagated-inputs
11055 `(("python-anyjson" ,python-anyjson)
11056 ("python-amqp" ,python-amqp)
11057 ("python-redis" ,python-redis)))
11058 (home-page "https://kombu.readthedocs.io")
11059 (synopsis "Message passing library for Python")
11060 (description "The aim of Kombu is to make messaging in Python as easy as
11061 possible by providing an idiomatic high-level interface for the AMQ protocol,
11062 and also provide proven and tested solutions to common messaging problems.
11063 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
11064 message orientation, queuing, routing, reliability and security, for which the
11065 RabbitMQ messaging server is the most popular implementation.")
11066 (license license:bsd-3)
11067 (properties `((python2-variant . ,(delay python2-kombu))))))
11068
11069 (define-public python2-kombu
11070 (let ((kombu (package-with-python2
11071 (strip-python2-variant python-kombu))))
11072 (package
11073 (inherit kombu)
11074 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
11075 ;; It works fine on the python3 variant.
11076 #:tests? #f
11077 ,@(package-arguments kombu)))
11078 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11079 ,@(package-native-inputs kombu))))))
11080
11081 (define-public python-billiard
11082 (package
11083 (name "python-billiard")
11084 (version "3.5.0.5")
11085 (source
11086 (origin
11087 (method url-fetch)
11088 (uri (pypi-uri "billiard" version))
11089 (sha256
11090 (base32
11091 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
11092 (build-system python-build-system)
11093 (native-inputs
11094 `(("python-case" ,python-case)
11095 ("python-pytest" ,python-pytest)))
11096 (home-page "https://github.com/celery/billiard")
11097 (synopsis
11098 "Python multiprocessing fork with improvements and bugfixes")
11099 (description
11100 "Billiard is a fork of the Python 2.7 multiprocessing package. The
11101 multiprocessing package itself is a renamed and updated version of R Oudkerk's
11102 pyprocessing package. This standalone variant is intended to be compatible with
11103 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
11104 (license license:bsd-3)
11105 (properties `((python2-variant . ,(delay python2-billiard))))))
11106
11107 (define-public python2-billiard
11108 (let ((billiard (package-with-python2
11109 (strip-python2-variant python-billiard))))
11110 (package
11111 (inherit billiard)
11112 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11113 ("python2-mock" ,python2-mock)
11114 ,@(package-native-inputs billiard))))))
11115
11116 (define-public python-celery
11117 (package
11118 (name "python-celery")
11119 (version "4.2.1")
11120 (source
11121 (origin
11122 (method url-fetch)
11123 (uri (pypi-uri "celery" version))
11124 (sha256
11125 (base32
11126 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
11127 (build-system python-build-system)
11128 (arguments
11129 '(;; TODO The tests fail with Python 3.7
11130 ;; https://github.com/celery/celery/issues/4849
11131 #:tests? #f
11132 #:phases
11133 (modify-phases %standard-phases
11134 (add-after 'unpack 'patch-requirements
11135 (lambda _
11136 (substitute* "requirements/test.txt"
11137 (("pytest>=3\\.0,<3\\.3")
11138 "pytest>=3.0"))
11139 #t)))))
11140 (native-inputs
11141 `(("python-case" ,python-case)
11142 ("python-pytest" ,python-pytest)))
11143 (propagated-inputs
11144 `(("python-pytz" ,python-pytz)
11145 ("python-billiard" ,python-billiard)
11146 ("python-kombu" ,python-kombu)))
11147 (home-page "https://celeryproject.org")
11148 (synopsis "Distributed Task Queue")
11149 (description "Celery is an asynchronous task queue/job queue based on
11150 distributed message passing. It is focused on real-time operation, but
11151 supports scheduling as well. The execution units, called tasks, are executed
11152 concurrently on a single or more worker servers using multiprocessing,
11153 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
11154 synchronously (wait until ready).")
11155 (license license:bsd-3)
11156 (properties `((python2-variant . ,(delay python2-celery))))))
11157
11158 (define-public python2-celery
11159 (let ((celery (package-with-python2
11160 (strip-python2-variant python-celery))))
11161 (package
11162 (inherit celery)
11163 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11164 ("python2-mock" ,python2-mock)
11165 ,@(package-native-inputs celery))))))
11166
11167 (define-public python-translitcodec
11168 (package
11169 (name "python-translitcodec")
11170 (version "0.4.0")
11171 (source
11172 (origin
11173 (method url-fetch)
11174 (uri (pypi-uri "translitcodec" version))
11175 (sha256
11176 (base32
11177 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
11178 (build-system python-build-system)
11179 (arguments
11180 `(#:tests? #f)) ; no tests provided
11181 (home-page
11182 "https://github.com/claudep/translitcodec")
11183 (synopsis
11184 "Unicode to 8-bit charset transliteration codec")
11185 (description
11186 "This package contains codecs for transliterating ISO 10646 texts into
11187 best-effort representations using smaller coded character sets (ASCII,
11188 ISO 8859, etc.).")
11189 (license license:expat)))
11190
11191 (define-public python2-translitcodec
11192 (package-with-python2 python-translitcodec))
11193
11194 (define-public python-editor
11195 (package
11196 (name "python-editor")
11197 (version "1.0.4")
11198 (source
11199 (origin
11200 (method url-fetch)
11201 (uri (pypi-uri "python-editor" version))
11202 (sha256
11203 (base32
11204 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
11205 (build-system python-build-system)
11206 (arguments
11207 '(#:tests? #f)) ;XXX: needs a TTY and an editor
11208 (home-page "https://github.com/fmoo/python-editor")
11209 (synopsis "Programmatically open an editor, capture the result")
11210 (description
11211 "python-editor is a library that provides the editor module for
11212 programmatically interfacing with your system's $EDITOR.")
11213 (license license:asl2.0)))
11214
11215 (define-public python2-editor
11216 (package-with-python2 python-editor))
11217
11218 (define-public python-vobject
11219 (package
11220 (name "python-vobject")
11221 (version "0.9.6.1")
11222 (source (origin
11223 (method url-fetch)
11224 (uri (pypi-uri "vobject" version))
11225 (sha256
11226 (base32
11227 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
11228 (build-system python-build-system)
11229 (arguments
11230 '(;; The test suite relies on some non-portable Windows interfaces.
11231 #:tests? #f))
11232 (propagated-inputs
11233 `(("python-dateutil" ,python-dateutil)
11234 ("python-pyicu" ,python-pyicu)))
11235 (synopsis "Parse and generate vCard and vCalendar files")
11236 (description "Vobject is intended to be a full featured Python package for
11237 parsing and generating vCard and vCalendar files. Currently, iCalendar files
11238 are supported and well tested. vCard 3.0 files are supported, and all data
11239 should be imported, but only a few components are understood in a sophisticated
11240 way.")
11241 (home-page "https://eventable.github.io/vobject/")
11242 (license license:asl2.0)))
11243
11244 (define-public python2-vobject
11245 (package-with-python2 python-vobject))
11246
11247 (define-public python-munkres
11248 (package
11249 (name "python-munkres")
11250 (version "1.0.8")
11251 (source (origin
11252 (method url-fetch)
11253 (uri (pypi-uri "munkres" version))
11254 (sha256
11255 (base32
11256 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
11257 (build-system python-build-system)
11258 (arguments
11259 '(#:tests? #f)) ; no test suite
11260 (home-page "https://software.clapper.org/munkres/")
11261 (synopsis "Implementation of the Munkres algorithm")
11262 (description "The Munkres module provides an implementation of the Munkres
11263 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
11264 useful for solving the Assignment Problem.")
11265 (license license:bsd-3)))
11266
11267 (define-public python2-munkres
11268 (package-with-python2 python-munkres))
11269
11270 (define-public python-whoosh
11271 (package
11272 (name "python-whoosh")
11273 (version "2.7.4")
11274 (source
11275 (origin
11276 (method url-fetch)
11277 (uri (pypi-uri "Whoosh" version))
11278 (sha256
11279 (base32
11280 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
11281 (build-system python-build-system)
11282 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
11283 (native-inputs
11284 `(("python-pytest" ,python-pytest)))
11285 (home-page "https://bitbucket.org/mchaput/whoosh")
11286 (synopsis "Full text indexing, search, and spell checking library")
11287 (description
11288 "Whoosh is a fast, pure-Python full text indexing, search, and spell
11289 checking library.")
11290 (license license:bsd-2)))
11291
11292 (define-public python2-whoosh
11293 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
11294 (package (inherit whoosh)
11295 (propagated-inputs
11296 `(("python2-backport-ssl-match-hostname"
11297 ,python2-backport-ssl-match-hostname)
11298 ,@(package-propagated-inputs whoosh))))))
11299
11300 (define-public python-pathlib
11301 (package
11302 (name "python-pathlib")
11303 (version "1.0.1")
11304 (source (origin
11305 (method url-fetch)
11306 (uri (pypi-uri "pathlib" version))
11307 (sha256
11308 (base32
11309 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
11310 (build-system python-build-system)
11311 ;; The tests depend on the internal "test" module, which does not provide
11312 ;; a stable interface.
11313 (arguments `(#:tests? #f))
11314 (home-page "https://pathlib.readthedocs.org/")
11315 (synopsis "Object-oriented file system paths")
11316 (description "Pathlib offers a set of classes to handle file system paths.
11317 It offers the following advantages over using string objects:
11318
11319 @enumerate
11320 @item No more cumbersome use of os and os.path functions. Everything can
11321 be done easily through operators, attribute accesses, and method calls.
11322 @item Embodies the semantics of different path types. For example,
11323 comparing Windows paths ignores casing.
11324 @item Well-defined semantics, eliminating any inconsistencies or
11325 ambiguities (forward vs. backward slashes, etc.).
11326 @end enumerate
11327
11328 Note: In Python 3.4, pathlib is now part of the standard library. For other
11329 Python versions please consider python-pathlib2 instead, which tracks the
11330 standard library module. This module (python-pathlib) isn't maintained
11331 anymore.")
11332 (license license:expat)))
11333
11334 (define-public python2-pathlib
11335 (package-with-python2 python-pathlib))
11336
11337 (define-public python2-pathlib2
11338 (package
11339 (name "python2-pathlib2")
11340 (version "2.3.5")
11341 (source (origin
11342 (method url-fetch)
11343 (uri (pypi-uri "pathlib2" version))
11344 (sha256
11345 (base32
11346 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
11347 (build-system python-build-system)
11348 ;; We only need the the Python 2 variant, since for Python 3 our minimum
11349 ;; version is 3.4 which already includes this package as part of the
11350 ;; standard library.
11351 (arguments
11352 `(#:python ,python-2))
11353 (propagated-inputs
11354 `(("python2-scandir" ,python2-scandir)
11355 ("python2-six" ,python2-six)))
11356 (home-page "https://pypi.org/project/pathlib2/")
11357 (synopsis "Object-oriented file system paths - backport of standard
11358 pathlib module")
11359 (description "The goal of pathlib2 is to provide a backport of standard
11360 pathlib module which tracks the standard library module, so all the newest
11361 features of the standard pathlib can be used also on older Python versions.
11362
11363 Pathlib offers a set of classes to handle file system paths. It offers the
11364 following advantages over using string objects:
11365
11366 @enumerate
11367 @item No more cumbersome use of os and os.path functions. Everything can
11368 be done easily through operators, attribute accesses, and method calls.
11369 @item Embodies the semantics of different path types. For example,
11370 comparing Windows paths ignores casing.
11371 @item Well-defined semantics, eliminating any inconsistencies or
11372 ambiguities (forward vs. backward slashes, etc.).
11373 @end enumerate")
11374 (license license:expat)))
11375
11376 (define-public python2-pathlib2-bootstrap
11377 (hidden-package
11378 (package
11379 (inherit python2-pathlib2)
11380 (name "python2-pathlib2-bootstrap")
11381 (propagated-inputs
11382 `(("python2-scandir" ,python2-scandir)
11383 ("python2-six" ,python2-six-bootstrap))))))
11384
11385 (define-public python-jellyfish
11386 (package
11387 (name "python-jellyfish")
11388 (version "0.5.6")
11389 (source (origin
11390 (method url-fetch)
11391 (uri (pypi-uri "jellyfish" version))
11392 (sha256
11393 (base32
11394 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
11395 (build-system python-build-system)
11396 (native-inputs
11397 `(("python-pytest" ,python-pytest)))
11398 (home-page "https://github.com/jamesturk/jellyfish")
11399 (synopsis "Approximate and phonetic matching of strings")
11400 (description "Jellyfish uses a variety of string comparison and phonetic
11401 encoding algorithms to do fuzzy string matching.")
11402 (license license:bsd-2)
11403 (properties `((python2-variant . ,(delay python2-jellyfish))))))
11404
11405 (define-public python2-jellyfish
11406 (let ((jellyfish (package-with-python2
11407 (strip-python2-variant python-jellyfish))))
11408 (package (inherit jellyfish)
11409 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
11410 ,@(package-native-inputs jellyfish))))))
11411
11412 (define-public python2-unicodecsv
11413 (package
11414 (name "python2-unicodecsv")
11415 (version "0.14.1")
11416 (source (origin
11417 (method git-fetch)
11418 ;; The test suite is not included in the PyPi release.
11419 ;; https://github.com/jdunck/python-unicodecsv/issues/19
11420 (uri (git-reference
11421 (url "https://github.com/jdunck/python-unicodecsv")
11422 (commit version)))
11423 (file-name (git-file-name name version))
11424 (sha256
11425 (base32
11426 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
11427 (build-system python-build-system)
11428 (arguments
11429 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
11430 #:python ,python-2))
11431 (native-inputs
11432 `(("python2-unittest2" ,python2-unittest2)))
11433 (home-page "https://github.com/jdunck/python-unicodecsv")
11434 (synopsis "Unicode CSV module for Python 2")
11435 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
11436 module, adding support for Unicode strings.")
11437 (license license:bsd-2)))
11438
11439 (define-public python-rarfile
11440 (package
11441 (name "python-rarfile")
11442 (version "2.8")
11443 (source (origin
11444 (method url-fetch)
11445 (uri (pypi-uri "rarfile" version))
11446 (sha256
11447 (base32
11448 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
11449 (build-system python-build-system)
11450 (arguments
11451 '(#:phases
11452 (modify-phases %standard-phases
11453 (replace 'check
11454 ;; Many tests fail, but the installation proceeds.
11455 (lambda _ (invoke "make" "-C" "test" "test"))))))
11456 (native-inputs
11457 `(("which" ,which))) ; required for tests
11458 (propagated-inputs
11459 `(("libarchive" ,libarchive)))
11460 (home-page "https://github.com/markokr/rarfile")
11461 (synopsis "RAR archive reader for Python")
11462 (description "This is Python module for RAR archive reading. The interface
11463 is made as zipfile like as possible.")
11464 (license license:isc)))
11465
11466 (define-public python2-rarfile
11467 (package-with-python2 python-rarfile))
11468
11469 (define-public python-magic
11470 (package
11471 (name "python-magic")
11472 (version "0.4.15")
11473 (source
11474 (origin
11475 (method url-fetch)
11476 (uri (pypi-uri "python-magic" version))
11477 (sha256
11478 (base32
11479 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
11480 (file-name (string-append name "-" version "-checkout"))))
11481 (build-system python-build-system)
11482 (arguments
11483 ;; The tests are unreliable, so don't run them. The tests fail
11484 ;; under Python3 because they were written for Python2 and
11485 ;; contain import statements that do not work in Python3. One of
11486 ;; the tests fails under Python2 because its assertions are
11487 ;; overly stringent; it relies on comparing output strings which
11488 ;; are brittle and can change depending on the version of
11489 ;; libmagic being used and the system on which the test is
11490 ;; running. In my case, under GuixSD 0.10.0, only one test
11491 ;; failed, and it seems to have failed only because the version
11492 ;; of libmagic that is packaged in Guix outputs a slightly
11493 ;; different (but not wrong) string than the one that the test
11494 ;; expected.
11495 '(#:tests? #f
11496 #:phases (modify-phases %standard-phases
11497 ;; Replace a specific method call with a hard-coded
11498 ;; path to the necessary libmagic.so file in the
11499 ;; store. If we don't do this, then the method call
11500 ;; will fail to find the libmagic.so file, which in
11501 ;; turn will cause any application using
11502 ;; python-magic to fail.
11503 (add-before 'build 'hard-code-path-to-libmagic
11504 (lambda* (#:key inputs #:allow-other-keys)
11505 (let ((file (assoc-ref inputs "file")))
11506 (substitute* "magic.py"
11507 (("ctypes.util.find_library\\('magic'\\)")
11508 (string-append "'" file "/lib/libmagic.so'")))
11509 #t)))
11510 (add-before 'install 'disable-egg-compression
11511 (lambda _
11512 (let ((port (open-file "setup.cfg" "a")))
11513 (display "\n[easy_install]\nzip_ok = 0\n"
11514 port)
11515 (close-port port)
11516 #t))))))
11517 (inputs
11518 ;; python-magic needs to be able to find libmagic.so.
11519 `(("file" ,file)))
11520 (home-page
11521 "https://github.com/ahupp/python-magic")
11522 (synopsis
11523 "File type identification using libmagic")
11524 (description
11525 "This module uses ctypes to access the libmagic file type
11526 identification library. It makes use of the local magic database and
11527 supports both textual and MIME-type output. Note that this module and
11528 the python-file module both provide a \"magic.py\" file; these two
11529 modules, which are different and were developed separately, both serve
11530 the same purpose: to provide Python bindings for libmagic.")
11531 (license license:expat)))
11532
11533 (define-public python2-magic
11534 (package-with-python2 python-magic))
11535
11536 (define-public python2-s3cmd
11537 (package
11538 (name "python2-s3cmd")
11539 (version "1.6.1")
11540 (source
11541 (origin
11542 (method url-fetch)
11543 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
11544 "s3cmd-" version ".tar.gz"))
11545 (sha256
11546 (base32
11547 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
11548 (build-system python-build-system)
11549 (arguments
11550 ;; s3cmd is written for python2 only and contains no tests.
11551 `(#:python ,python-2
11552 #:tests? #f))
11553 (propagated-inputs
11554 `(("python2-dateutil" ,python2-dateutil)
11555 ;; The python-file package also provides a magic.py module.
11556 ;; This is an unfortunate state of affairs; however, s3cmd
11557 ;; fails to install if it cannot find specifically the
11558 ;; python-magic package. Thus we include it, instead of using
11559 ;; python-file. Ironically, s3cmd sometimes works better
11560 ;; without libmagic bindings at all:
11561 ;; https://github.com/s3tools/s3cmd/issues/198
11562 ("python2-magic" ,python2-magic)))
11563 (home-page "https://s3tools.org/s3cmd")
11564 (synopsis "Command line tool for S3-compatible storage services")
11565 (description
11566 "S3cmd is a command line tool for uploading, retrieving and managing data
11567 in storage services that are compatible with the Amazon Simple Storage
11568 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
11569 GnuPG encryption, and more. It also supports management of Amazon's
11570 CloudFront content delivery network.")
11571 (license license:gpl2+)))
11572
11573 (define-public python-pkgconfig
11574 (package
11575 (name "python-pkgconfig")
11576 (version "1.3.1")
11577 (source
11578 (origin
11579 (method url-fetch)
11580 (uri (pypi-uri "pkgconfig" version))
11581 (sha256
11582 (base32
11583 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
11584 (build-system python-build-system)
11585 (native-inputs
11586 `(("python-nose" ,python-nose)))
11587 (inputs
11588 `(("pkg-config" ,pkg-config)))
11589 (arguments
11590 `(#:phases
11591 (modify-phases %standard-phases
11592 (add-before 'build 'patch
11593 ;; Hard-code the path to pkg-config.
11594 (lambda _
11595 (substitute* "pkgconfig/pkgconfig.py"
11596 (("cmd = 'pkg-config")
11597 (string-append "cmd = '" (which "pkg-config"))))
11598 #t))
11599 (replace 'check
11600 (lambda _
11601 (invoke "nosetests" "test.py"))))))
11602 (home-page "https://github.com/matze/pkgconfig")
11603 (synopsis "Python interface for pkg-config")
11604 (description "This module provides a Python interface to pkg-config. It
11605 can be used to find all pkg-config packages, check if a package exists,
11606 check if a package meets certain version requirements, query CFLAGS and
11607 LDFLAGS and parse the output to build extensions with setup.py.")
11608 (license license:expat)))
11609
11610 (define-public python2-pkgconfig
11611 (package-with-python2 python-pkgconfig))
11612
11613 (define-public python-bz2file
11614 (package
11615 (name "python-bz2file")
11616 (version "0.98")
11617 (source
11618 (origin
11619 (method url-fetch)
11620 (uri (pypi-uri "bz2file" version))
11621 (sha256
11622 (base32
11623 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
11624 (build-system python-build-system)
11625 (arguments
11626 `(#:tests? #f)) ; Tests use deprecated python modules.
11627 (home-page "https://github.com/nvawda/bz2file")
11628 (synopsis "Read and write bzip2-compressed files")
11629 (description
11630 "Bz2file is a Python library for reading and writing bzip2-compressed
11631 files. It contains a drop-in replacement for the I/O interface in the
11632 standard library's @code{bz2} module, including features from the latest
11633 development version of CPython that are not available in older releases.")
11634 (license license:asl2.0)))
11635
11636 (define-public python2-bz2file
11637 (package-with-python2 python-bz2file))
11638
11639 (define-public python-future
11640 (package
11641 (name "python-future")
11642 (version "0.17.1")
11643 (source
11644 (origin
11645 (method url-fetch)
11646 (uri (pypi-uri "future" version))
11647 (sha256
11648 (base32
11649 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
11650 (build-system python-build-system)
11651 ;; Many tests connect to the network or are otherwise flawed.
11652 ;; https://github.com/PythonCharmers/python-future/issues/210
11653 (arguments
11654 `(#:tests? #f))
11655 (home-page "https://python-future.org")
11656 (synopsis "Single-source support for Python 3 and 2")
11657 (description
11658 "@code{python-future} is the missing compatibility layer between Python 2 and
11659 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11660 to support both Python 2 and Python 3 with minimal overhead.")
11661 (license license:expat)))
11662
11663 (define-public python2-future
11664 (package-with-python2 python-future))
11665
11666 (define-public python-cysignals
11667 (package
11668 (name "python-cysignals")
11669 (version "1.9.0")
11670 (source
11671 (origin
11672 (method url-fetch)
11673 (uri (pypi-uri "cysignals" version))
11674 (sha256
11675 (base32
11676 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11677 (build-system python-build-system)
11678 (native-inputs
11679 `(("python-cython" ,python-cython)
11680 ("python-sphinx" ,python-sphinx)))
11681 (inputs
11682 `(("pari-gp" ,pari-gp)))
11683 (arguments
11684 `(#:modules ((guix build python-build-system)
11685 ((guix build gnu-build-system) #:prefix gnu:)
11686 (guix build utils))
11687 ;; FIXME: Tests are executed after installation and currently fail
11688 ;; when not installing into standard locations; the author is working
11689 ;; on a fix.
11690 #:tests? #f
11691 #:phases
11692 (modify-phases %standard-phases
11693 (add-before
11694 'build 'configure
11695 (assoc-ref gnu:%standard-phases 'configure)))))
11696 (home-page
11697 "https://github.com/sagemath/cysignals")
11698 (synopsis
11699 "Handling of interrupts and signals for Cython")
11700 (description
11701 "The cysignals package provides mechanisms to handle interrupts (and
11702 other signals and errors) in Cython code, using two related approaches,
11703 for mixed Cython/Python code or external C libraries and pure Cython code,
11704 respectively.")
11705 (license license:lgpl3+)))
11706
11707 (define-public python2-cysignals
11708 (package-with-python2 python-cysignals))
11709
11710 (define-public python2-shedskin
11711 (package
11712 (name "python2-shedskin")
11713 (version "0.9.4")
11714 (source
11715 (origin
11716 (method url-fetch)
11717 (uri (string-append "https://github.com/shedskin/shedskin/"
11718 "releases/download/v" version
11719 "/shedskin-" version ".tgz"))
11720 (sha256
11721 (base32
11722 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11723 (build-system python-build-system)
11724 (arguments
11725 `(#:python ,python-2
11726 #:phases (modify-phases %standard-phases
11727 (add-after 'unpack 'fix-resulting-include-libs
11728 (lambda* (#:key inputs #:allow-other-keys)
11729 (let ((libgc (assoc-ref inputs "libgc"))
11730 (pcre (assoc-ref inputs "pcre")))
11731 (substitute* "shedskin/makefile.py"
11732 (("variable == 'CCFLAGS':[ ]*")
11733 (string-append "variable == 'CCFLAGS':\n"
11734 " line += ' -I " pcre "/include"
11735 " -I " libgc "/include'"))
11736 (("variable == 'LFLAGS':[ ]*")
11737 (string-append "variable == 'LFLAGS':\n"
11738 " line += ' -L" pcre "/lib"
11739 " -L " libgc "/lib'")))
11740 #t))))))
11741 (inputs `(("pcre" ,pcre)
11742 ("libgc" ,libgc)))
11743 (home-page "https://shedskin.github.io/")
11744 (synopsis "Experimental Python-2 to C++ Compiler")
11745 (description (string-append "This is an experimental compiler for a subset of
11746 Python. It generates C++ code and a Makefile."))
11747 (license (list license:gpl3 license:bsd-3 license:expat))))
11748
11749 (define-public python2-rope
11750 (package
11751 (name "python2-rope")
11752 (version "0.11.0")
11753 (source
11754 (origin
11755 (method url-fetch)
11756 (uri (pypi-uri "rope" version))
11757 (sha256
11758 (base32
11759 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11760 (arguments
11761 ;; Rope has only partial python3 support, see `python-rope'
11762 `(#:python ,python-2))
11763 (build-system python-build-system)
11764 (native-inputs
11765 `(("python2-unittest2" ,python2-unittest2)))
11766 (home-page "https://github.com/python-rope/rope")
11767 (synopsis "Refactoring library for Python")
11768 (description "Rope is a refactoring library for Python. It facilitates
11769 the renaming, moving and extracting of attributes, functions, modules, fields
11770 and parameters in Python 2 source code. These refactorings can also be applied
11771 to occurrences in strings and comments.")
11772 (license license:gpl2)))
11773
11774 (define-public python-rope
11775 (package
11776 (inherit python2-rope)
11777 (name "python-rope")
11778 (arguments `(#:python ,python-wrapper
11779 ;; XXX: Only partial python3 support, results in some failing
11780 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11781 #:tests? #f))
11782 (properties `((python2-variant . ,(delay python2-rope))))))
11783
11784 (define-public python-py3status
11785 (package
11786 (name "python-py3status")
11787 (version "3.21")
11788 (source
11789 (origin
11790 (method url-fetch)
11791 (uri (pypi-uri "py3status" version))
11792 (sha256
11793 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11794 (build-system python-build-system)
11795 (inputs
11796 `(("file" ,file)))
11797 (arguments
11798 '(#:phases
11799 (modify-phases %standard-phases
11800 ;; 'file' is used for detection of configuration file encoding
11801 ;; let's make link the dependency to particular input
11802 (add-before 'build 'patch-file-path
11803 (lambda* (#:key inputs #:allow-other-keys)
11804 (let ((file-path (assoc-ref inputs "file")))
11805 (substitute* "py3status/parse_config.py"
11806 (("\\[\"file\", \"-b\"")
11807 (string-append "['" file-path "/bin/file', '-b'")))
11808 #t))))
11809 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11810 (home-page "https://github.com/ultrabug/py3status")
11811 (synopsis "Extensible i3status wrapper written in Python")
11812 (description "py3status is an i3status wrapper which extends i3status
11813 functionality in a modular way, allowing you to extend your panel with your
11814 own code, responding to click events and updating clock every second.")
11815 (license license:bsd-3)))
11816
11817 (define-public python2-selectors2
11818 (package
11819 (name "python2-selectors2")
11820 (version "2.0.1")
11821 (source (origin
11822 (method url-fetch)
11823 (uri (pypi-uri "selectors2" version))
11824 (sha256
11825 (base32
11826 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
11827 (build-system python-build-system)
11828 (arguments
11829 `(#:python ,python-2))
11830 (native-inputs
11831 `(("python2-mock" ,python2-mock)
11832 ("python2-psutil" ,python2-psutil)))
11833 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
11834 (synopsis "Backport of the selectors module from Python 3.5+")
11835 (description
11836 "This package provides a drop-in replacement for the @code{selectors}
11837 module in Python 3.5 and later.")
11838 (license license:expat)))
11839
11840 (define-public python-tblib
11841 (package
11842 (name "python-tblib")
11843 (version "1.6.0")
11844 (source (origin
11845 (method url-fetch)
11846 (uri (pypi-uri "tblib" version))
11847 (sha256
11848 (base32
11849 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11850 (build-system python-build-system)
11851 (arguments
11852 `(#:phases
11853 (modify-phases %standard-phases
11854 (replace 'check
11855 (lambda _
11856 ;; Upstream runs tests after installation and the package itself
11857 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11858 ;; found.
11859 (setenv "PYTHONPATH"
11860 (string-append (getcwd) "/build/lib:"
11861 (getenv "PYTHONPATH")))
11862 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11863 (native-inputs
11864 `(("python-pytest" ,python-pytest)
11865 ("python-six" ,python-six)))
11866 (home-page "https://github.com/ionelmc/python-tblib")
11867 (synopsis "Traceback serialization library")
11868 (description
11869 "Traceback serialization allows you to:
11870
11871 @enumerate
11872 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11873 different processes. This allows better error handling when running code over
11874 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11875
11876 @item Parse traceback strings and raise with the parsed tracebacks.
11877 @end enumerate\n")
11878 (license license:bsd-3)))
11879
11880 (define-public python2-tblib
11881 (package-with-python2 python-tblib))
11882
11883 (define-public python-greenlet
11884 (package
11885 (name "python-greenlet")
11886 (version "0.4.16")
11887 (source (origin
11888 (method url-fetch)
11889 (uri (pypi-uri "greenlet" version))
11890 (sha256
11891 (base32
11892 "0v2571d0av1hz3yx63gvmnrinyn57nnvibg4zkl9frv74b3yl1kf"))))
11893 (build-system python-build-system)
11894 (home-page "https://greenlet.readthedocs.io/")
11895 (synopsis "Lightweight in-process concurrent programming")
11896 (description
11897 "Greenlet package is a spin-off of Stackless, a version of CPython
11898 that supports micro-threads called \"tasklets\". Tasklets run
11899 pseudo-concurrently (typically in a single or a few OS-level threads) and
11900 are synchronized with data exchanges on \"channels\".")
11901 (license (list license:psfl license:expat))))
11902
11903 (define-public python2-greenlet
11904 (package-with-python2 python-greenlet))
11905
11906 (define-public python-objgraph
11907 (package
11908 (name "python-objgraph")
11909 (version "3.4.1")
11910 (source
11911 (origin
11912 (method url-fetch)
11913 (uri (pypi-uri "objgraph" version))
11914 (sha256
11915 (base32
11916 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11917 (build-system python-build-system)
11918 (propagated-inputs
11919 `(("python-graphviz" ,python-graphviz)))
11920 (native-inputs
11921 `(("python-mock" ,python-mock)
11922 ("graphviz" ,graphviz)))
11923 (home-page "https://mg.pov.lt/objgraph/")
11924 (synopsis "Draw Python object reference graphs with graphviz")
11925 (description
11926 "This package provides tools to draw Python object reference graphs with
11927 graphviz.")
11928 (license license:expat)))
11929
11930 (define-public python2-objgraph
11931 (package-with-python2 python-objgraph))
11932
11933 (define-public python-gevent
11934 (package
11935 (name "python-gevent")
11936 (version "20.6.2")
11937 (source (origin
11938 (method url-fetch)
11939 (uri (pypi-uri "gevent" version))
11940 (sha256
11941 (base32
11942 "1ldmppgghfphdaazjw6wq2i17xcmsjb2jsizfa4cjlg812zjlg52"))
11943 (modules '((guix build utils)))
11944 (snippet
11945 '(begin
11946 ;; unbunding libev and c-ares
11947 (delete-file-recursively "deps")
11948 #t))))
11949 (build-system python-build-system)
11950 (arguments
11951 `(#:modules ((ice-9 ftw)
11952 (ice-9 match)
11953 (srfi srfi-26)
11954 (guix build utils)
11955 (guix build python-build-system))
11956 #:phases (modify-phases %standard-phases
11957 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11958 (lambda _
11959 (substitute* "src/gevent/subprocess.py"
11960 (("/bin/sh") (which "sh")))
11961 (for-each (lambda (file)
11962 (substitute* file
11963 (("/bin/sh") (which "sh"))
11964 (("/bin/true") (which "true"))))
11965 (find-files "src/greentest" "\\.py$"))
11966 #t))
11967 (add-before 'build 'do-not-use-bundled-sources
11968 (lambda _
11969 (setenv "GEVENTSETUP_EMBED" "0")
11970
11971 ;; Prevent building bundled libev.
11972 (substitute* "setup.py"
11973 (("run_make=_BUILDING")
11974 "run_make=False"))
11975 #t))
11976 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11977 (lambda* (#:key inputs #:allow-other-keys)
11978 (let ((greenlet (string-append
11979 (assoc-ref inputs "python-greenlet")
11980 "/include")))
11981 (match (scandir greenlet
11982 (lambda (item)
11983 (string-prefix? "python" item)))
11984 ((python)
11985 (setenv "C_INCLUDE_PATH"
11986 (string-append greenlet "/" python ":"
11987 (or (getenv "C_INCLUDE_PATH")
11988 ""))))))
11989 #t))
11990 (add-before 'check 'pretend-to-be-CI
11991 (lambda _
11992 ;; A few tests are skipped due to network constraints or
11993 ;; get longer timeouts when running in a CI environment.
11994 ;; Piggy-back on that, as we need the same adjustments.
11995 (setenv "TRAVIS" "1")
11996 (setenv "APPVEYOR" "1")
11997 #t))
11998 (add-before 'check 'adjust-tests
11999 (lambda _
12000 (let ((disabled-tests
12001 '(;; These tests rely on networking which is not
12002 ;; available in the build container.
12003 "test_urllib2net.py"
12004 "test__server.py"
12005 "test__server_pywsgi.py"
12006 "test_socket.py"
12007 "test__socket.py"
12008 "test__socket_ssl.py"
12009 "test__socket_dns.py"
12010 "test__socket_dns6.py"
12011 "test___example_servers.py"
12012 "test__getaddrinfo_import.py"
12013 "test__examples.py"
12014 "test_httplib.py"
12015 "test_https.py"
12016 "test_urllib2_localnet.py"
12017 "test_ssl.py"
12018 "test__ssl.py"
12019 ;; XXX: These tests borrow functionality from the
12020 ;; Python builtin 'test' module, but it is not
12021 ;; installed with the Guix Python distribution.
12022 "test_smtpd.py"
12023 "test_wsgiref.py"
12024 "test_urllib2.py"
12025 "test_thread.py"
12026 "test_threading.py"
12027 "test__threading_2.py"
12028 ;; These tests rely on KeyboardInterrupts which do not
12029 ;; work inside the build container for some reason
12030 ;; (lack of controlling terminal?).
12031 "test_subprocess.py"
12032 "test__issues461_471.py"
12033 ;; TODO: Patch out the tests that use getprotobyname, etc
12034 ;; instead of disabling all the tests from these files.
12035 "test__resolver_dnspython.py"
12036 "test__doctests.py"
12037 "test__all__.py"
12038 "test___config.py"
12039 "test__execmodules.py")))
12040 (call-with-output-file "skipped_tests.txt"
12041 (lambda (port)
12042 (format port "~a~%"
12043 (string-join disabled-tests "\n"))))
12044 #t)))
12045 (replace 'check
12046 (lambda _
12047 ;; Make sure the build directory is on PYTHONPATH.
12048 (setenv "PYTHONPATH"
12049 (string-append
12050 (getenv "PYTHONPATH") ":"
12051 (getcwd) "/build/"
12052 (car (scandir "build" (cut string-prefix? "lib." <>)))))
12053
12054 ;; Use the build daemons configured number of workers.
12055 (setenv "NWORKERS" (number->string (parallel-job-count)))
12056
12057 (invoke "python" "-m" "gevent.tests" "--config"
12058 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
12059 (propagated-inputs
12060 `(("python-greenlet" ,python-greenlet)
12061 ("python-objgraph" ,python-objgraph)
12062 ("python-zope.event" ,python-zope-event)
12063 ("python-zope.interface" ,python-zope-interface)))
12064 (native-inputs
12065 `(("python-six" ,python-six)
12066
12067 ;; For tests.
12068 ("python-dnspython" ,python-dnspython)
12069 ("python-psutil" ,python-psutil)))
12070 (inputs
12071 `(("c-ares" ,c-ares)
12072 ("libev" ,libev)))
12073 (home-page "http://www.gevent.org/")
12074 (synopsis "Coroutine-based network library")
12075 (description
12076 "gevent is a coroutine-based Python networking library that uses greenlet
12077 to provide a high-level synchronous API on top of the libev event loop.")
12078 (license license:expat)
12079 (properties `((python2-variant . ,(delay python2-gevent))))))
12080
12081 (define-public python2-gevent
12082 (let ((base (package-with-python2
12083 (strip-python2-variant python-gevent))))
12084 (package
12085 (inherit base)
12086 (native-inputs `(,@(package-native-inputs base)
12087 ("python-mock" ,python2-mock)
12088 ("python2-selectors2" ,python2-selectors2))))))
12089
12090 (define-public python-fastimport
12091 (package
12092 (name "python-fastimport")
12093 (version "0.9.8")
12094 (source
12095 (origin
12096 (method url-fetch)
12097 (uri (pypi-uri "fastimport" version))
12098 (sha256
12099 (base32 "1fb3b7y3sw55f6wykxx478ybkirz0l52lgdqmbhmc0h0jzmyiwmj"))))
12100 (build-system python-build-system)
12101 (home-page "https://github.com/jelmer/python-fastimport")
12102 (synopsis "VCS fastimport parser and generator in Python")
12103 (description "This package provides a parser for and generator of the Git
12104 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
12105 format.")
12106 (license license:gpl2+)))
12107
12108 (define-public python2-fastimport
12109 (package-with-python2 python-fastimport))
12110
12111 (define-public python-twisted
12112 (package
12113 (name "python-twisted")
12114 (version "19.7.0")
12115 (source (origin
12116 (method url-fetch)
12117 (uri (pypi-uri "Twisted" version ".tar.bz2"))
12118 (sha256
12119 (base32
12120 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
12121 (build-system python-build-system)
12122 (arguments
12123 '(#:tests? #f)) ; FIXME: some tests fail
12124 (propagated-inputs
12125 `(("python-zope-interface" ,python-zope-interface)
12126 ("python-pyhamcrest" ,python-pyhamcrest)
12127 ("python-incremental" ,python-incremental)
12128 ("python-hyperlink" ,python-hyperlink)
12129 ("python-constantly" ,python-constantly)
12130 ("python-automat" ,python-automat)))
12131 (home-page "https://twistedmatrix.com/")
12132 (synopsis "Asynchronous networking framework written in Python")
12133 (description
12134 "Twisted is an extensible framework for Python programming, with special
12135 focus on event-based network programming and multiprotocol integration.")
12136 (license license:expat)))
12137
12138 (define-public python2-twisted
12139 (package-with-python2 python-twisted))
12140
12141 (define-public python-pika
12142 (package
12143 (name "python-pika")
12144 (version "0.12.0")
12145 (source
12146 (origin
12147 (method url-fetch)
12148 (uri (pypi-uri "pika" version))
12149 (sha256
12150 (base32
12151 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
12152 (build-system python-build-system)
12153 (native-inputs
12154 `(("python-pyev" ,python-pyev)
12155 ("python-tornado" ,python-tornado)
12156 ("python-twisted" ,python-twisted)))
12157 (home-page "https://pika.readthedocs.org")
12158 (synopsis "Pure Python AMQP Client Library")
12159 (description
12160 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
12161 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
12162 network support library.")
12163 (license license:bsd-3)))
12164
12165 (define-public python2-pika
12166 (package-with-python2 python-pika))
12167
12168 (define-public python-ply
12169 (package
12170 (name "python-ply")
12171 (version "3.11")
12172 (source
12173 (origin
12174 (method url-fetch)
12175 (uri (pypi-uri "ply" version))
12176 (sha256
12177 (base32
12178 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
12179 (build-system python-build-system)
12180 (home-page "http://www.dabeaz.com/ply/")
12181 (synopsis "Python Lex & Yacc")
12182 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
12183 It uses LR parsing and does extensive error checking.")
12184 (license license:bsd-3)))
12185
12186 (define-public python-tabulate
12187 (package
12188 (name "python-tabulate")
12189 (version "0.8.7")
12190 (source (origin
12191 (method url-fetch)
12192 (uri (pypi-uri "tabulate" version))
12193 (sha256
12194 (base32
12195 "01shi7bmj09f0bcm5s0c9skys063lzp76p0n4a2xmg041ni269yv"))))
12196 (build-system python-build-system)
12197 (arguments
12198 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
12199 ;; and the latest release is not tagged in the upstream repository.
12200 '(#:tests? #f))
12201 (home-page "https://bitbucket.org/astanin/python-tabulate")
12202 (synopsis "Pretty-print tabular data")
12203 (description
12204 "Tabulate is a library and command-line utility to pretty-print tabular
12205 data in Python.")
12206 (license license:expat)))
12207
12208 (define-public python2-tabulate
12209 (package-with-python2 python-tabulate))
12210
12211 (define-public python-kazoo
12212 (package
12213 (name "python-kazoo")
12214 (version "2.4.0")
12215 (source
12216 (origin
12217 (method url-fetch)
12218 (uri (pypi-uri "kazoo" version))
12219 (sha256
12220 (base32
12221 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
12222 (build-system python-build-system)
12223 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
12224 (propagated-inputs
12225 `(("python-six" ,python-six)))
12226 (home-page "https://kazoo.readthedocs.org")
12227 (synopsis "High-level Zookeeper client library")
12228 (description
12229 "Kazoo is a Python client library for the Apache Zookeeper distributed
12230 application service. It is designed to be easy to use and to avoid common
12231 programming errors.")
12232 (license license:asl2.0)))
12233
12234 (define-public python2-kazoo
12235 (package-with-python2 python-kazoo))
12236
12237 (define-public python-pykafka
12238 (package
12239 (name "python-pykafka")
12240 (version "2.4.0")
12241 (source (origin
12242 (method url-fetch)
12243 (uri (pypi-uri "pykafka" version))
12244 (sha256
12245 (base32
12246 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
12247 (build-system python-build-system)
12248 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
12249 (propagated-inputs
12250 `(("python-gevent" ,python-gevent)
12251 ("python-kazoo" ,python-kazoo)
12252 ("python-tabulate" ,python-tabulate)))
12253 (inputs
12254 `(("librdkafka" ,librdkafka)))
12255 (home-page "https://pykafka.readthedocs.io/")
12256 (synopsis "Apache Kafka client for Python")
12257 (description
12258 "PyKafka is a client for the Apache Kafka distributed messaging system.
12259 It includes Python implementations of Kafka producers and consumers, which
12260 are optionally backed by a C extension built on librdkafka.")
12261 (license license:asl2.0)))
12262
12263 (define-public python2-pykafka
12264 (package-with-python2 python-pykafka))
12265
12266 (define-public python-wcwidth
12267 (package
12268 (name "python-wcwidth")
12269 (version "0.1.8")
12270 (source (origin
12271 (method url-fetch)
12272 (uri (pypi-uri "wcwidth" version))
12273 (sha256
12274 (base32
12275 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
12276 (build-system python-build-system)
12277 (home-page "https://github.com/jquast/wcwidth")
12278 (synopsis "Measure number of terminal column cells of wide-character codes")
12279 (description "Wcwidth measures the number of terminal column cells of
12280 wide-character codes. It is useful for those implementing a terminal emulator,
12281 or programs that carefully produce output to be interpreted by one. It is a
12282 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
12283 specified in POSIX.1-2001 and POSIX.1-2008.")
12284 (license license:expat)))
12285
12286 (define-public python2-wcwidth
12287 (package-with-python2 python-wcwidth))
12288
12289 (define-public python2-jsonrpclib
12290 (package
12291 (name "python2-jsonrpclib")
12292 (version "0.1.7")
12293 (source (origin
12294 (method url-fetch)
12295 (uri (pypi-uri "jsonrpclib" version))
12296 (sha256
12297 (base32
12298 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
12299 (build-system python-build-system)
12300 (arguments
12301 `(#:tests? #f
12302 #:python ,python-2))
12303 (home-page "https://github.com/joshmarshall/jsonrpclib/")
12304 (synopsis "Implementation of JSON-RPC specification for Python")
12305 (description
12306 "This library is an implementation of the JSON-RPC specification.
12307 It supports both the original 1.0 specification, as well as the
12308 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
12309 etc.")
12310 (license license:asl2.0)))
12311
12312 (define-public python-chai
12313 (package
12314 (name "python-chai")
12315 (version "1.1.2")
12316 (source (origin
12317 (method url-fetch)
12318 (uri (pypi-uri "chai" version))
12319 (sha256
12320 (base32
12321 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
12322 (build-system python-build-system)
12323 (home-page "https://github.com/agoragames/chai")
12324 (synopsis "Mocking framework for Python")
12325 (description
12326 "Chai provides an api for mocking, stubbing and spying your python
12327 objects, patterned after the Mocha library for Ruby.")
12328 (license license:bsd-3)))
12329
12330 (define-public python2-chai
12331 (package-with-python2 python-chai))
12332
12333 (define-public python-inflection
12334 (package
12335 (name "python-inflection")
12336 (version "0.3.1")
12337 (source
12338 (origin (method url-fetch)
12339 (uri (pypi-uri "inflection" version))
12340 (sha256
12341 (base32
12342 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
12343 (build-system python-build-system)
12344 (native-inputs
12345 `(("python-pytest" ,python-pytest)))
12346 (home-page "https://github.com/jpvanhal/inflection")
12347 (synopsis "Python string transformation library")
12348 (description
12349 "Inflection is a string transformation library. It singularizes
12350 and pluralizes English words, and transforms strings from CamelCase to
12351 underscored string.")
12352 (license license:expat)))
12353
12354 (define-public python2-inflection
12355 (package-with-python2 python-inflection))
12356
12357 (define-public python-pylev
12358 (package
12359 (name "python-pylev")
12360 (version "1.3.0")
12361 (source (origin
12362 (method url-fetch)
12363 (uri (pypi-uri "pylev" version))
12364 (sha256
12365 (base32
12366 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
12367 (build-system python-build-system)
12368 (home-page "https://github.com/toastdriven/pylev")
12369 (synopsis "Levenshtein distance implementation in Python")
12370 (description "Pure Python Levenshtein implementation, based off the
12371 Wikipedia code samples at
12372 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
12373 (license license:bsd-3)))
12374
12375 (define-public python2-pylev
12376 (package-with-python2 python-pylev))
12377
12378 (define-public python-cleo
12379 (package
12380 (name "python-cleo")
12381 (version "0.8.1")
12382 (source (origin
12383 (method url-fetch)
12384 (uri (pypi-uri "cleo" version))
12385 (sha256
12386 (base32
12387 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
12388 (build-system python-build-system)
12389 (native-inputs
12390 `( ;; For testing
12391 ("python-mock" ,python-mock)
12392 ("python-pytest-mock" ,python-pytest-mock)
12393 ("python-pytest" ,python-pytest)))
12394 (propagated-inputs
12395 `(("python-backpack" ,python-backpack)
12396 ("python-clikit" ,python-clikit)
12397 ("python-pastel" ,python-pastel)
12398 ("python-pylev" ,python-pylev)))
12399 (home-page "https://github.com/sdispater/cleo")
12400 (synopsis "Command-line arguments library for Python")
12401 (description
12402 "Cleo allows you to create command-line commands with signature in
12403 docstring and colored output.")
12404 (license license:expat)))
12405
12406 (define-public python2-cleo
12407 (package-with-python2 python-cleo))
12408
12409 (define-public python-tomlkit
12410 (package
12411 (name "python-tomlkit")
12412 (version "0.6.0")
12413 (source
12414 (origin
12415 (method url-fetch)
12416 (uri (pypi-uri "tomlkit" version))
12417 (sha256
12418 (base32 "16jf0060csn8p500jnxa7m5h1sl3pzispvd11961dzrhh287dybl"))))
12419 (build-system python-build-system)
12420 (native-inputs
12421 `(("python-pytest" ,python-pytest)))
12422 (home-page "https://github.com/sdispater/tomlkit")
12423 (synopsis "Style-preserving TOML library")
12424 (description
12425 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
12426 preserves all comments, indentations, whitespace and internal element ordering,
12427 and makes them accessible and editable via an intuitive API. It can also
12428 create new TOML documents from scratch using the provided helpers. Part of the
12429 implementation has been adapted, improved, and fixed from Molten.")
12430 (license license:expat)))
12431
12432 (define-public python-shellingham
12433 (package
12434 (name "python-shellingham")
12435 (version "1.3.2")
12436 (source
12437 (origin
12438 (method url-fetch)
12439 (uri (pypi-uri "shellingham" version))
12440 (sha256
12441 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
12442 (build-system python-build-system)
12443 (arguments
12444 `(#:phases
12445 (modify-phases %standard-phases
12446 (add-after 'unpack 'restore-setup.py
12447 ;; setup.py will return in the next release.
12448 ;; <https://github.com/sarugaku/shellingham/issues/33>
12449 (lambda _
12450 (with-output-to-file "setup.py"
12451 (lambda _
12452 (display "from setuptools import setup\nsetup()\n")))
12453 #t)))))
12454 (home-page "https://github.com/sarugaku/shellingham")
12455 (synopsis "Tool to detect surrounding shell")
12456 (description
12457 "Shellingham detects what shell the current Python executable is
12458 running in.")
12459 (license license:isc)))
12460
12461 (define-public python-memcached
12462 (package
12463 (name "python-memcached")
12464 (version "1.59")
12465 (source
12466 (origin
12467 (method url-fetch)
12468 (uri (pypi-uri "python-memcached" version))
12469 (sha256
12470 (base32
12471 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
12472 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
12473 (build-system python-build-system)
12474 (propagated-inputs `(("python-six" ,python-six)))
12475 (home-page
12476 "https://github.com/linsomniac/python-memcached")
12477 (synopsis "Pure python memcached client")
12478 (description
12479 "This software is a pure Python interface to the memcached memory cache
12480 daemon. It is the client side software which allows storing values in one or
12481 more, possibly remote, memcached servers.")
12482 (license license:psfl)))
12483
12484 (define-public python-clikit
12485 (package
12486 (name "python-clikit")
12487 (version "0.6.2")
12488 (source
12489 (origin
12490 (method url-fetch)
12491 (uri (pypi-uri "clikit" version))
12492 (sha256
12493 (base32
12494 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
12495 (build-system python-build-system)
12496 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
12497 (propagated-inputs
12498 `(("python-crashtest" ,python-crashtest)
12499 ("python-pastel" ,python-pastel)
12500 ("python-pylev" ,python-pylev)))
12501 (home-page "https://github.com/sdispater/clikit")
12502 (synopsis "Group of utilities to build command line interfaces")
12503 (description
12504 "CliKit is a group of utilities to build testable command line
12505 interfaces.")
12506 (properties `((python2-variant . ,(delay python2-clikit))))
12507 (license license:expat)))
12508
12509 (define-public python2-clikit
12510 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
12511 (package/inherit
12512 base
12513 (propagated-inputs
12514 `(("python-enum34" ,python2-enum34)
12515 ("python-typing" ,python2-typing)
12516 ,@(package-propagated-inputs base))))))
12517
12518 (define-public python-msgpack-python
12519 (package
12520 (name "python-msgpack-python")
12521 (version "0.5.6")
12522 (source
12523 (origin
12524 (method url-fetch)
12525 (uri (pypi-uri "msgpack-python" version))
12526 (sha256
12527 (base32
12528 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
12529 (build-system python-build-system)
12530 (home-page "http://msgpack.org/")
12531 (synopsis "Package to deserialize messages in MessagePack binary format")
12532 (description
12533 "MessagePack is an efficient binary serialization format. It lets you
12534 exchange data among multiple languages like JSON. But it's faster and
12535 smaller. Small integers are encoded into a single byte, and typical short
12536 strings require only one extra byte in addition to the strings themselves.")
12537 (license license:asl2.0)))
12538
12539 (define-public python-cachy
12540 (package
12541 (name "python-cachy")
12542 (version "0.3.0")
12543 (source
12544 (origin
12545 (method url-fetch)
12546 (uri (pypi-uri "cachy" version))
12547 (sha256
12548 (base32
12549 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
12550 (build-system python-build-system)
12551 (arguments
12552 '(#:phases
12553 (modify-phases %standard-phases
12554 (replace 'check
12555 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
12556 "pytest"))))))
12557 (native-inputs
12558 `(("memcached" ,memcached)
12559 ("python-fakeredis" ,python-fakeredis)
12560 ("python-flexmock" ,python-flexmock)
12561 ("python-pifpaf" ,python-pifpaf)
12562 ("python-pytest" ,python-pytest)))
12563 (propagated-inputs
12564 `(("python-memcached" ,python-memcached)
12565 ("python-msgpack-python" ,python-msgpack-python)
12566 ("python-redis" ,python-redis)))
12567 (home-page "https://github.com/sdispater/cachy")
12568 (synopsis "Simple yet effective caching library")
12569 (description
12570 "Cachy provides a simple yet effective caching library. A simple but
12571 powerful API: thread-safety; decorator syntax; support for memcached, redis,
12572 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
12573 (license license:expat)))
12574
12575 (define-public poetry
12576 (package
12577 (name "poetry")
12578 (version "1.0.10")
12579 ;; Poetry can only be built from source with Poetry.
12580 (source
12581 (origin
12582 (method url-fetch)
12583 (uri (pypi-uri "poetry" version))
12584 (sha256
12585 (base32
12586 "1wm66xlsls4f0q4skmq96yb7aahjsqwgwvbrw4iax6rd4xfqj6sb"))))
12587 (build-system python-build-system)
12588 (arguments
12589 `(#:tests? #f ;; Pypi does not have tests.
12590 #:phases
12591 (modify-phases %standard-phases
12592 (add-before 'build 'patch-setup-py
12593 (lambda _
12594 (substitute* "setup.py"
12595 ;; poetry won't update version as 21.0.0 relies on python > 3.6
12596 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
12597 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0")
12598 ;; Reported upstream:
12599 ;; <https://github.com/python-poetry/poetry/issues/2752>.
12600 (("tomlkit>=0.5.11,<0.6.0") "tomlkit>=0.5.11,<0.7.0")
12601 (("cleo>=0.7.6,<0.8.0") "cleo>=0.7.6,<0.9.0")
12602 (("clikit>=0.4.2,<0.5.0") "clikit>=0.4.2,<0.7.0"))
12603 #t)))))
12604 (propagated-inputs
12605 `(("python-cachecontrol" ,python-cachecontrol)
12606 ("python-cachy" ,python-cachy)
12607 ("python-cleo" ,python-cleo)
12608 ("python-clikit" ,python-clikit)
12609 ("python-html5lib" ,python-html5lib)
12610 ("python-jsonschema" ,python-jsonschema)
12611 ("python-keyring" ,python-keyring)
12612 ("python-msgpack-transitional" ,python-msgpack-transitional)
12613 ("python-pexpect" ,python-pexpect)
12614 ("python-pkginfo" ,python-pkginfo)
12615 ("python-pyparsing" ,python-pyparsing)
12616 ("python-pyrsistent" ,python-pyrsistent)
12617 ("python-requests" ,python-requests)
12618 ("python-requests-toolbelt" ,python-requests-toolbelt)
12619 ("python-shellingham" ,python-shellingham)
12620 ("python-tomlkit" ,python-tomlkit)
12621 ("python-virtualenv" ,python-virtualenv)))
12622 (home-page "https://python-poetry.org")
12623 (synopsis "Python dependency management and packaging made easy")
12624 (description "Poetry is a tool for dependency management and packaging
12625 in Python. It allows you to declare the libraries your project depends on and
12626 it will manage (install/update) them for you.")
12627 (license license:expat)))
12628
12629 (define-public python-lark-parser
12630 (package
12631 (name "python-lark-parser")
12632 (version "0.9.0")
12633 (source (origin
12634 (method url-fetch)
12635 (uri (pypi-uri "lark-parser" version))
12636 (sha256
12637 (base32
12638 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
12639 (build-system python-build-system)
12640 (home-page "https://github.com/lark-parser/lark")
12641 (synopsis "Multi-language parser for Python")
12642 (description
12643 "Lark is a parser built with a focus on ergonomics, performance and
12644 resilience. Lark can parse all context-free languages. That means it is
12645 capable of parsing almost any programming language out there, and to
12646 some degree most natural languages too.")
12647 (license license:expat)))
12648
12649 (define-public python-libcst
12650 (package
12651 (name "python-libcst")
12652 (version "0.3.8")
12653 (source (origin
12654 (method url-fetch)
12655 (uri (pypi-uri "libcst" version))
12656 (sha256
12657 (base32
12658 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
12659 (build-system python-build-system)
12660 (arguments
12661 `(#:phases
12662 (modify-phases %standard-phases
12663 (add-after 'unpack 'remove-failing-tests
12664 (lambda _
12665 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
12666 (delete-file "libcst/tests/test_fuzz.py")
12667 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
12668 (delete-file "libcst/tests/test_pyre_integration.py")
12669 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
12670 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
12671 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
12672 #t))
12673 (add-before 'check 'generate-test-data
12674 (lambda _
12675 (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
12676 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
12677 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
12678 (replace 'check
12679 (lambda _
12680 (invoke "python" "-m" "unittest")
12681 #t)))))
12682 (native-inputs
12683 `(("python-black" ,python-black)
12684 ("python-isort" ,python-isort)))
12685 (propagated-inputs
12686 `(("python-typing-extensions" ,python-typing-extensions)
12687 ("python-typing-inspect" ,python-typing-inspect)
12688 ("python-pyyaml" ,python-pyyaml)))
12689 (home-page "https://github.com/Instagram/LibCST")
12690 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
12691 (description
12692 "LibCST parses Python source code as a CST tree that keeps all
12693 formatting details (comments, whitespaces, parentheses, etc). It's useful
12694 for building automated refactoring (codemod) applications and linters.
12695 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
12696 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
12697 naming node types and fields, LibCST creates a lossless CST that looks and
12698 feels like an AST.")
12699 (license (list license:expat
12700 ;; Some files unde libcst/_parser/ are under Python Software
12701 ;; Foundation license (see LICENSE file for details)
12702 license:psfl
12703 ;; libcst/_add_slots.py
12704 license:asl2.0))))
12705
12706 (define-public python-typing-inspect
12707 (package
12708 (name "python-typing-inspect")
12709 (version "0.6.0")
12710 (source (origin
12711 (method url-fetch)
12712 (uri (pypi-uri "typing_inspect" version))
12713 (sha256
12714 (base32
12715 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
12716 (build-system python-build-system)
12717 (propagated-inputs
12718 `(("python-mypy-extensions" ,python-mypy-extensions)
12719 ("python-typing-extensions" ,python-typing-extensions)))
12720 (home-page "https://github.com/ilevkivskyi/typing_inspect")
12721 (synopsis "API for inspection of types in the Python @code{typing} module")
12722 (description
12723 "The @code{typing_inspect} module defines experimental API for runtime
12724 inspection of types defined in the Python standard typing module.")
12725 (license license:expat)))
12726
12727 (define-public python-lazy-object-proxy
12728 (package
12729 (name "python-lazy-object-proxy")
12730 (version "1.5.1")
12731 (source (origin
12732 (method url-fetch)
12733 (uri (pypi-uri "lazy-object-proxy" version))
12734 (sha256
12735 (base32
12736 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
12737 (native-inputs
12738 `(("python-setuptools-scm" ,python-setuptools-scm)))
12739 (build-system python-build-system)
12740 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
12741 (synopsis "Lazy object proxy for python")
12742 (description
12743 "Lazy object proxy is an object that wraps a callable but defers the call
12744 until the object is actually required, and caches the result of said call.")
12745 (license license:bsd-2)))
12746
12747 (define-public python2-lazy-object-proxy
12748 (package-with-python2 python-lazy-object-proxy))
12749
12750 (define-public python-dnspython
12751 (package
12752 (name "python-dnspython")
12753 (version "1.16.0")
12754 (source (origin
12755 (method url-fetch)
12756 (uri (string-append "http://www.dnspython.org/kits/"
12757 version "/dnspython-" version ".tar.gz"))
12758 (sha256
12759 (base32
12760 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
12761 (build-system python-build-system)
12762 (arguments '(#:tests? #f)) ; XXX: requires internet access
12763 (home-page "http://www.dnspython.org")
12764 (synopsis "DNS toolkit for Python")
12765 (description
12766 "dnspython is a DNS toolkit for Python. It supports almost all record
12767 types. It can be used for queries, zone transfers, and dynamic updates.
12768 It supports TSIG authenticated messages and EDNS0.")
12769 (license license:expat)))
12770
12771 (define-public python2-dnspython
12772 (package-with-python2 python-dnspython))
12773
12774 (define-public python-py3dns
12775 (package
12776 (name "python-py3dns")
12777 (version "3.2.1")
12778 (source
12779 (origin
12780 (method url-fetch)
12781 (uri (pypi-uri "py3dns" version))
12782 (sha256
12783 (base32
12784 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
12785 (build-system python-build-system)
12786 ;; This package wants to read /etc/resolv.conf. We can't patch it without
12787 ;; removing functionality so we copy from Nix and "just don't build it".
12788 (arguments
12789 `(#:phases
12790 (modify-phases %standard-phases
12791 (add-after 'unpack 'patch-source
12792 (lambda _
12793 (substitute* "setup.py"
12794 (("import DNS") "")
12795 (("DNS.__version__") (string-append "\"" ,version "\"")))
12796 #t)))
12797 #:tests? #f)) ; Also skip the tests.
12798 (home-page "https://launchpad.net/py3dns")
12799 (synopsis "Python 3 DNS library")
12800 (description "This Python 3 module provides a DNS API for looking up DNS
12801 entries from within Python 3 modules and applications. This module is a
12802 simple, lightweight implementation.")
12803 (license license:psfl)))
12804
12805 (define-public python-email-validator
12806 (package
12807 (name "python-email-validator")
12808 (version "1.0.2")
12809 (source
12810 (origin (method url-fetch)
12811 (uri (pypi-uri "email_validator" version))
12812 (sha256
12813 (base32
12814 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
12815 (build-system python-build-system)
12816 (arguments
12817 '(#:phases
12818 (modify-phases %standard-phases
12819 (add-before 'build 'use-dnspython
12820 (lambda _
12821 (substitute* "setup.py"
12822 (("dnspython3") "dnspython"))
12823 #t)))))
12824 (propagated-inputs
12825 `(("python-dnspython" ,python-dnspython)
12826 ("python-idna" ,python-idna)))
12827 (home-page "https://github.com/JoshData/python-email-validator")
12828 (synopsis "Email address validation library for Python")
12829 (description
12830 "This library validates email address syntax and deliverability.")
12831 (license license:cc0)))
12832
12833 (define-public python2-email-validator
12834 (package-with-python2 python-email-validator))
12835
12836 (define-public python-ukpostcodeparser
12837 (package
12838 (name "python-ukpostcodeparser")
12839 (version "1.0.3")
12840 (source (origin
12841 (method url-fetch)
12842 (uri (pypi-uri "UkPostcodeParser" version))
12843 (sha256
12844 (base32
12845 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12846 (build-system python-build-system)
12847 (home-page "https://github.com/hamstah/ukpostcodeparser")
12848 (synopsis "UK Postcode parser for Python")
12849 (description
12850 "This library provides the @code{parse_uk_postcode} function for
12851 parsing UK postcodes.")
12852 (license license:expat)))
12853
12854 (define-public python2-ukpostcodeparser
12855 (package-with-python2 python-ukpostcodeparser))
12856
12857 (define-public python-faker
12858 (package
12859 (name "python-faker")
12860 (version "4.0.2")
12861 (source (origin
12862 (method url-fetch)
12863 (uri (pypi-uri "Faker" version))
12864 (sha256
12865 (base32
12866 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12867 (build-system python-build-system)
12868 (arguments
12869 '(#:phases
12870 (modify-phases %standard-phases
12871 (replace 'check
12872 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12873 (native-inputs
12874 `(;; For testing
12875 ("python-freezegun" ,python-freezegun)
12876 ("python-pytest" ,python-pytest)
12877 ("python-random2" ,python-random2)
12878 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12879 ("python-validators" ,python-validators)))
12880 (propagated-inputs
12881 `(("python-dateutil" ,python-dateutil)
12882 ("python-text-unidecode" ,python-text-unidecode)))
12883 (home-page "https://github.com/joke2k/faker")
12884 (synopsis "Python package that generates fake data")
12885 (description
12886 "Faker is a Python package that generates fake data such as names,
12887 addresses, and phone numbers.")
12888 (license license:expat)
12889 (properties `((python2-variant . ,(delay python2-faker))))))
12890
12891 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12892 (define-public python2-faker
12893 (let ((base (package-with-python2 (strip-python2-variant
12894 python-faker))))
12895 (package
12896 (inherit base)
12897 (version "3.0.1")
12898 (source (origin
12899 (method url-fetch)
12900 (uri (pypi-uri "Faker" version))
12901 (sha256
12902 (base32
12903 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12904 (native-inputs
12905 `(("python-mock" ,python2-mock)
12906 ,@(package-native-inputs base)))
12907 (propagated-inputs
12908 `(("python2-ipaddress" ,python2-ipaddress)
12909 ("python2-six" ,python2-six)
12910 ,@(package-propagated-inputs base))))))
12911
12912 (define-public python-pyaml
12913 (package
12914 (name "python-pyaml")
12915 (version "18.11.0")
12916 (source (origin
12917 (method url-fetch)
12918 (uri (pypi-uri "pyaml" version))
12919 (sha256
12920 (base32
12921 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12922 (build-system python-build-system)
12923 (native-inputs
12924 `(("python-unidecode" ,python-unidecode)))
12925 (propagated-inputs
12926 `(("python-pyyaml" ,python-pyyaml)))
12927 (home-page "https://github.com/mk-fg/pretty-yaml")
12928 (synopsis "YAML pretty-print library for Python")
12929 (description
12930 "pyaml is a PyYAML based python module to produce pretty and readable
12931 YAML-serialized data.")
12932 (license license:wtfpl2)))
12933
12934 (define-public python2-pyaml
12935 (package-with-python2 python-pyaml))
12936
12937 (define-public python-backpack
12938 (package
12939 (name "python-backpack")
12940 (version "0.1")
12941 (source
12942 (origin
12943 (method url-fetch)
12944 (uri (pypi-uri "backpack" version))
12945 (sha256
12946 (base32
12947 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12948 (build-system python-build-system)
12949 (native-inputs
12950 `(("python-pytest" ,python-pytest)
12951 ("python-nose" ,python-nose)))
12952 (propagated-inputs
12953 `(("python-simplejson" ,python-simplejson)))
12954 (home-page "https://github.com/sdispater/backpack")
12955 (synopsis "Utilities for working with Python collections")
12956 (description "Backpack provides some useful utilities for working with
12957 collections of data.")
12958 (license license:expat)))
12959
12960 (define-public python2-backpack
12961 (package-with-python2 python-backpack))
12962
12963 (define-public python-prompt-toolkit
12964 (package
12965 (name "python-prompt-toolkit")
12966 (version "3.0.5")
12967 (source
12968 (origin
12969 (method url-fetch)
12970 (uri (pypi-uri "prompt_toolkit" version))
12971 (sha256
12972 (base32
12973 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12974 (build-system python-build-system)
12975 (arguments
12976 `(#:phases
12977 (modify-phases %standard-phases
12978 (delete 'check)
12979 (add-after 'install 'post-install-check
12980 (lambda* (#:key inputs outputs #:allow-other-keys)
12981 ;; HOME is needed for the test
12982 ;; "test_pathcompleter_can_expanduser".
12983 (setenv "HOME" "/tmp")
12984 (add-installed-pythonpath inputs outputs)
12985 (invoke "py.test"))))))
12986 (propagated-inputs
12987 `(("python-wcwidth" ,python-wcwidth)))
12988 (native-inputs
12989 `(("python-pytest" ,python-pytest)))
12990 (home-page
12991 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12992 (synopsis "Library for building command line interfaces in Python")
12993 (description
12994 "Prompt-Toolkit is a library for building interactive command line
12995 interfaces in Python. It's like GNU Readline but it also features syntax
12996 highlighting while typing, out-of-the-box multi-line input editing, advanced
12997 code completion, incremental search, support for Chinese double-width
12998 characters, mouse support, and auto suggestions.")
12999 (license license:bsd-3)))
13000
13001 (define-public python-prompt-toolkit-2
13002 (package (inherit python-prompt-toolkit)
13003 (name "python-prompt-toolkit")
13004 (version "2.0.7")
13005 (source
13006 (origin
13007 (method url-fetch)
13008 (uri (pypi-uri "prompt_toolkit" version))
13009 (sha256
13010 (base32
13011 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
13012 (propagated-inputs
13013 `(("python-wcwidth" ,python-wcwidth)
13014 ("python-six" ,python-six)
13015 ("python-pygments" ,python-pygments)))))
13016
13017 (define-public python2-prompt-toolkit
13018 (package-with-python2 python-prompt-toolkit-2))
13019
13020 (define-public python-prompt-toolkit-1
13021 (package (inherit python-prompt-toolkit-2)
13022 (version "1.0.15")
13023 (source
13024 (origin
13025 (method url-fetch)
13026 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
13027 (sha256
13028 (base32
13029 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
13030
13031 (define-public python2-prompt-toolkit-1
13032 (package-with-python2 python-prompt-toolkit-1))
13033
13034 (define-public python-jedi
13035 (package
13036 (name "python-jedi")
13037 (version "0.17.2")
13038 (source
13039 (origin
13040 (method url-fetch)
13041 (uri (pypi-uri "jedi" version))
13042 (sha256
13043 (base32 "080xyf97ifabdz7jp8clg00b8zv5g33fva1fb2xf80q6fndpvvc6"))))
13044 (build-system python-build-system)
13045 (arguments
13046 `(#:phases
13047 (modify-phases %standard-phases
13048 (replace 'check
13049 (lambda _
13050 (setenv "HOME" "/tmp")
13051 (invoke "python" "-m" "pytest" "-vv"))))))
13052 (native-inputs
13053 `(("python-pytest" ,python-pytest)
13054 ("python-docopt" ,python-docopt)))
13055 (propagated-inputs
13056 `(("python-parso" ,python-parso)))
13057 (home-page "https://github.com/davidhalter/jedi")
13058 (synopsis "Autocompletion and static analysis library for Python")
13059 (description
13060 "Jedi is a static analysis tool for Python that can be used in Integrated
13061 Development Environments (@dfn{IDE}s) and text editors. It understands Python
13062 on a deeper level than many other static analysis frameworks for Python.
13063
13064 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
13065 well.")
13066 (license license:expat)))
13067
13068 (define-public python2-jedi
13069 (package-with-python2 python-jedi))
13070
13071 (define-public ptpython
13072 (package
13073 (name "ptpython")
13074 (version "0.34")
13075 (source (origin
13076 (method url-fetch)
13077 (uri (pypi-uri "ptpython" version))
13078 (sha256
13079 (base32
13080 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
13081 (build-system python-build-system)
13082 (arguments
13083 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
13084 (propagated-inputs
13085 `(("python-docopt" ,python-docopt)
13086 ("python-jedi" ,python-jedi)
13087 ("python-prompt-toolkit" ,python-prompt-toolkit)
13088 ("python-pygments" ,python-pygments)))
13089 (home-page "https://github.com/jonathanslenders/ptpython")
13090 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
13091 (description
13092 "ptpython is a Python read-eval-print loop with IDE-like features.
13093 It supports syntax highlighting, multiline editing, autocompletion, mouse,
13094 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
13095 etc.")
13096 (license license:bsd-3)
13097 (properties `((python2-variant . ,(delay ptpython-2))))))
13098
13099 (define-public ptpython-2
13100 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
13101 (package
13102 (inherit base)
13103 (name "ptpython2"))))
13104
13105 (define-public python-stem
13106 (package
13107 (name "python-stem")
13108 (version "1.8.0")
13109 (source
13110 (origin
13111 (method url-fetch)
13112 (uri (pypi-uri "stem" version))
13113 (sha256
13114 (base32
13115 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
13116 (build-system python-build-system)
13117 (arguments
13118 `(#:phases
13119 (modify-phases %standard-phases
13120 (replace 'check
13121 (lambda _
13122 (invoke "./run_tests.py" "--unit")
13123 #t)))))
13124 (native-inputs
13125 `(("python-mock" ,python-mock)
13126 ("python-pycodestyle" ,python-pycodestyle)
13127 ("python-pyflakes" ,python-pyflakes)))
13128 (home-page "https://stem.torproject.org/")
13129 (synopsis
13130 "Python controller library that allows applications to interact with Tor")
13131 (description
13132 "Stem is a Python controller library for Tor. With it you can use Tor's
13133 control protocol to script against the Tor process and read descriptor data
13134 relays publish about themselves.")
13135 (license license:lgpl3)))
13136
13137 (define-public python2-stem
13138 (package-with-python2 python-stem))
13139
13140 (define-public python-pyserial
13141 (package
13142 (name "python-pyserial")
13143 (version "3.4")
13144 (source
13145 (origin
13146 (method url-fetch)
13147 (uri (pypi-uri "pyserial" version))
13148 (sha256
13149 (base32
13150 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
13151 (build-system python-build-system)
13152 (arguments
13153 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
13154 ;; #:phases
13155 ;; (modify-phases %standard-phases
13156 ;; (replace 'check
13157 ;; (lambda _
13158 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
13159 (home-page
13160 "https://github.com/pyserial/pyserial")
13161 (synopsis "Python Serial Port Bindings")
13162 (description "@code{pyserial} provide serial port bindings for Python. It
13163 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
13164 and/or Xon/Xoff. The port is accessed in RAW mode.")
13165 (license license:bsd-3)))
13166
13167 (define-public python2-pyserial
13168 (package-with-python2 python-pyserial))
13169
13170 (define-public python-kivy
13171 (package
13172 (name "python-kivy")
13173 (version "1.10.1")
13174 (source
13175 (origin
13176 (method url-fetch)
13177 (uri (pypi-uri "Kivy" version))
13178 (file-name (string-append name "-" version ".tar.gz"))
13179 (sha256
13180 (base32
13181 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
13182 (build-system python-build-system)
13183 (arguments
13184 `(#:tests? #f ; Tests require many optional packages
13185 #:phases
13186 (modify-phases %standard-phases
13187 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
13188 (lambda* (#:key inputs #:allow-other-keys)
13189 (setenv "KIVY_SDL2_PATH"
13190 (string-append (assoc-ref inputs "sdl-union")
13191 "/include/SDL2"))
13192 #t)))))
13193 (native-inputs
13194 `(("pkg-config" ,pkg-config)
13195 ("python-cython" ,python-cython)))
13196 (inputs
13197 `(("gstreamer" ,gstreamer)
13198 ("mesa" ,mesa)
13199 ("sdl-union"
13200 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
13201 (home-page "https://kivy.org")
13202 (synopsis
13203 "Multitouch application framework")
13204 (description
13205 "A software library for rapid development of
13206 hardware-accelerated multitouch applications.")
13207 (license license:expat)))
13208
13209 (define-public python2-kivy
13210 (package-with-python2 python-kivy))
13211
13212 (define-public python-binaryornot
13213 (package
13214 (name "python-binaryornot")
13215 (version "0.4.4")
13216 (source (origin
13217 (method url-fetch)
13218 (uri (pypi-uri "binaryornot" version))
13219 (sha256
13220 (base32
13221 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
13222 (build-system python-build-system)
13223 (arguments
13224 `(#:phases
13225 (modify-phases %standard-phases
13226 (add-after 'unpack 'patch-tests
13227 (lambda _
13228 ;; TypeError: binary() got an unexpected keyword argument
13229 ;; 'average_size'.
13230 (substitute* "tests/test_check.py"
13231 (("average_size=512") ""))
13232 #t)))))
13233 (propagated-inputs
13234 `(("python-chardet" ,python-chardet)
13235 ("python-hypothesis" ,python-hypothesis)))
13236 (home-page "https://github.com/audreyr/binaryornot")
13237 (synopsis "Package to check if a file is binary or text")
13238 (description "Ultra-lightweight pure Python package to check if a file is
13239 binary or text.")
13240 (license license:bsd-3)
13241 (properties `((python2-variant . ,(delay python2-binaryornot))))))
13242
13243 (define-public python2-binaryornot
13244 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
13245 (package (inherit base)
13246 (propagated-inputs
13247 `(("python2-enum34" ,python2-enum34)
13248 ,@(package-propagated-inputs base))))))
13249
13250 (define-public python-binwalk
13251 (package
13252 (name "python-binwalk")
13253 (version "2.2.0")
13254 (source
13255 (origin
13256 (method git-fetch)
13257 (uri (git-reference
13258 (url "https://github.com/ReFirmLabs/binwalk")
13259 (commit (string-append "v" version))))
13260 (file-name (git-file-name name version))
13261 (sha256
13262 (base32
13263 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
13264 (build-system python-build-system)
13265 (arguments
13266 `(#:phases
13267 (modify-phases %standard-phases
13268 (add-before 'check 'set-pythonpath
13269 (lambda _
13270 (setenv "PYTHONPATH"
13271 (string-append
13272 (getcwd) "/src/"
13273 ":" (getenv "PYTHONPATH")))
13274 (setenv "HOME" "")
13275 #t)))))
13276 (native-inputs
13277 `(("python-coverage" ,python-coverage)
13278 ("python-nose" ,python-nose)))
13279 (home-page "https://github.com/ReFirmLabs/binwalk")
13280 (synopsis "Firmware analysis tool")
13281 (description "Binwalk is a tool for analyzing, reverse engineering, and
13282 extracting firmware images")
13283 (license license:expat)))
13284
13285 (define-public python-nltk
13286 (package
13287 (name "python-nltk")
13288 (version "3.2.1")
13289 (source (origin
13290 (method url-fetch)
13291 (uri (pypi-uri "nltk" version))
13292 (sha256
13293 (base32
13294 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
13295 (build-system python-build-system)
13296 (arguments
13297 '(;; The tests require some extra resources to be downloaded.
13298 ;; TODO Try packaging these resources.
13299 #:tests? #f))
13300 (home-page "http://nltk.org/")
13301 (synopsis "Natural Language Toolkit")
13302 (description "It provides interfaces to over 50 corpora and lexical
13303 resources such as WordNet, along with a suite of text processing libraries
13304 for classification, tokenization, stemming, tagging, parsing, and semantic
13305 reasoning, wrappers for natural language processing libraries.")
13306 (license license:asl2.0)))
13307
13308 (define-public python2-nltk
13309 (package-with-python2 python-nltk))
13310
13311 (define-public python-pymongo
13312 (package
13313 (name "python-pymongo")
13314 (version "3.7.2")
13315 (source (origin
13316 (method url-fetch)
13317 (uri (pypi-uri "pymongo" version))
13318 (sha256
13319 (base32
13320 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
13321 (build-system python-build-system)
13322 (propagated-inputs
13323 `(("python-certifi" ,python-certifi)))
13324 (home-page "https://github.com/mongodb/mongo-python-driver")
13325 (synopsis "Python driver for MongoDB")
13326 (description "Python driver for MongoDB.")
13327 (license license:asl2.0)))
13328
13329 (define-public python2-pymongo
13330 (package-with-python2 python-pymongo))
13331
13332 (define-public python-consul
13333 (package
13334 (name "python-consul")
13335 (version "0.6.1")
13336 (source
13337 (origin
13338 (method url-fetch)
13339 (uri (pypi-uri "python-consul" version))
13340 (sha256
13341 (base32
13342 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
13343 (build-system python-build-system)
13344 (arguments
13345 '(#:tests? #f)) ; The tests are not distributed
13346 (propagated-inputs
13347 `(("python-requests" ,python-requests)
13348 ("python-six" ,python-six)))
13349 (home-page "https://github.com/cablehead/python-consul")
13350 (synopsis "Python client for Consul")
13351 (description
13352 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
13353 discovery, monitoring and configuration.")
13354 (license license:expat)))
13355
13356 (define-public python2-consul
13357 (package-with-python2 python-consul))
13358
13359 (define-public python-schematics
13360 (package
13361 (name "python-schematics")
13362 (version "1.1.1")
13363 (source
13364 (origin
13365 (method git-fetch)
13366 (uri (git-reference
13367 (url "https://github.com/schematics/schematics")
13368 (commit (string-append "v" version))))
13369 (file-name (git-file-name name version))
13370 (sha256
13371 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
13372 (build-system python-build-system)
13373 (propagated-inputs
13374 `(("python-six" ,python-six)))
13375 (arguments
13376 ;; The tests require a bunch of not very nice packages with fixed
13377 ;; version requirements (e.g. python-coveralls).
13378 `(#:tests? #f))
13379 (home-page "https://github.com/schematics/schematics")
13380 (synopsis "Python Data Structures for Humans")
13381 (description "Python Data Structures for Humans.")
13382 (license license:bsd-3)))
13383
13384 (define-public python2-schematics
13385 (package-with-python2 python-schematics))
13386
13387 (define-public python-odfpy
13388 (package
13389 (name "python-odfpy")
13390 (version "1.4.1")
13391 (source (origin
13392 (method url-fetch)
13393 (uri (pypi-uri "odfpy" version))
13394 (sha256
13395 (base32
13396 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
13397 (arguments
13398 `(#:phases
13399 (modify-phases %standard-phases
13400 (replace 'check
13401 (lambda _
13402 (setenv "PYTHONPATH" (string-append "./build/lib:"
13403 (getenv "PYTHONPATH")))
13404 (invoke "pytest" "-vv"))))))
13405 (build-system python-build-system)
13406 (native-inputs
13407 `(("python-pytest" ,python-pytest)))
13408 (propagated-inputs
13409 `(("python-defusedxml" ,python-defusedxml)))
13410 (home-page "https://github.com/eea/odfpy")
13411 (synopsis "Python API and tools to manipulate OpenDocument files")
13412 (description "Collection of libraries and utility programs written in
13413 Python to manipulate OpenDocument 1.2 files.")
13414 (license
13415 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
13416 ;; number of files with other licenses.
13417 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
13418
13419 (define-public python2-odfpy
13420 (package-with-python2 python-odfpy))
13421
13422 (define-public python-natsort
13423 (package
13424 (name "python-natsort")
13425 (version "7.0.1")
13426 (source (origin
13427 (method url-fetch)
13428 (uri (pypi-uri "natsort" version))
13429 (sha256
13430 (base32
13431 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
13432 (build-system python-build-system)
13433 (arguments
13434 `(#:modules ((guix build utils)
13435 (guix build python-build-system)
13436 (srfi srfi-1)
13437 (srfi srfi-26)
13438 (ice-9 ftw))
13439 #:phases
13440 (modify-phases %standard-phases
13441 (add-before 'check 'set-cachedir
13442 ;; Tests require write access to $HOME by default
13443 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
13444 (replace 'check
13445 (lambda _
13446 (let ((cwd (getcwd)))
13447 (setenv "PYTHONPATH"
13448 (string-append
13449 cwd "/build/"
13450 (find (cut string-prefix? "lib" <>)
13451 (scandir (string-append cwd "/build")))
13452 ":"
13453 (getenv "PYTHONPATH")))
13454 (invoke "pytest" "-v")))))))
13455 (native-inputs
13456 `(("python-hypothesis" ,python-hypothesis)
13457 ("python-pytest-cov" ,python-pytest-cov)
13458 ("python-pytest-mock" ,python-pytest-mock)
13459 ("python-pytest" ,python-pytest)))
13460 (propagated-inputs ; TODO: Add python-fastnumbers.
13461 `(("python-pyicu" ,python-pyicu)))
13462 (home-page "https://github.com/SethMMorton/natsort")
13463 (synopsis "Natural sorting for python and shell")
13464 (description
13465 "Natsort lets you apply natural sorting on lists instead of
13466 lexicographical. If you use the built-in @code{sorted} method in python
13467 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
13468 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
13469 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
13470 identifies numbers and sorts them separately from strings. It can also sort
13471 version numbers, real numbers, mixed types and more, and comes with a shell
13472 command @command{natsort} that exposes this functionality in the command line.")
13473 (license license:expat)
13474 (properties `((python2-variant . ,(delay python2-natsort))))))
13475
13476 ;; Natsort 6.x are the last versions with support for Python 2.
13477 (define-public python2-natsort
13478 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
13479 (package (inherit base)
13480 (version "6.2.1")
13481 (source (origin
13482 (method url-fetch)
13483 (uri (pypi-uri "natsort" version))
13484 (sha256
13485 (base32
13486 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
13487 (native-inputs
13488 `(("python2-pathlib" ,python2-pathlib)
13489 ,@(package-native-inputs base))))))
13490
13491 (define-public glances
13492 (package
13493 (name "glances")
13494 (version "3.1.4")
13495 (source
13496 (origin
13497 (method url-fetch)
13498 (uri (pypi-uri "Glances" version))
13499 (sha256
13500 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
13501 (modules '((guix build utils)))
13502 (snippet
13503 '(begin
13504 ;; Glances phones PyPI for weekly update checks by default.
13505 ;; Disable these. The user can re-enable them if desired.
13506 (substitute* "glances/outdated.py"
13507 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
13508 (string-append indentation
13509 "self.args.disable_check_update = True\n"
13510 line)))
13511 #t))))
13512 (build-system python-build-system)
13513 (propagated-inputs
13514 `(("python-future" ,python-future)
13515 ("python-psutil" ,python-psutil)))
13516 (home-page "https://github.com/nicolargo/glances")
13517 (synopsis "Cross-platform curses-based monitoring tool")
13518 (description
13519 "Glances is a curses-based monitoring tool for a wide variety of platforms.
13520 Glances uses the PsUtil library to get information from your system. It
13521 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
13522 (license license:lgpl3+)))
13523
13524 (define-public python-glances
13525 (deprecated-package "python-glances" glances))
13526
13527 (define-public python-graphql-core
13528 (package
13529 (name "python-graphql-core")
13530 (version "0.5.3")
13531 (source
13532 (origin
13533 (method url-fetch)
13534 (uri (pypi-uri "graphql-core" version))
13535 (sha256
13536 (base32
13537 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
13538 (build-system python-build-system)
13539 (arguments
13540 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
13541 #:phases
13542 (modify-phases %standard-phases
13543 (add-after 'unpack 'patch-hardcoded-version
13544 (lambda _ (substitute*
13545 "setup.py"
13546 (("'gevent==1.1rc1'") "'gevent'"))
13547 #t)))))
13548 (native-inputs
13549 `(("python-gevent" ,python-gevent)
13550 ("python-mock" ,python-mock)
13551 ("python-pytest-mock" ,python-pytest-mock)))
13552 (propagated-inputs
13553 `(("python-promise" ,python-promise)
13554 ("python-six" ,python-six)))
13555 (home-page "https://github.com/graphql-python/graphql-core")
13556 (synopsis "GraphQL implementation for Python")
13557 (description
13558 "GraphQL implementation for Python. GraphQL is a data query language and
13559 runtime designed and used to request and deliver data to mobile and web apps.
13560 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
13561 to Python.")
13562 (license license:expat)))
13563
13564 (define-public python2-graphql-core
13565 (package-with-python2 python-graphql-core))
13566
13567 (define-public python-graphql-relay
13568 (package
13569 (name "python-graphql-relay")
13570 (version "0.4.5")
13571 (source
13572 (origin
13573 (method url-fetch)
13574 (uri (pypi-uri "graphql-relay" version))
13575 (sha256
13576 (base32
13577 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
13578 (build-system python-build-system)
13579 (arguments
13580 '(#:tests? #f)) ; The tests are not distributed
13581 (propagated-inputs
13582 `(("python-graphql-core" ,python-graphql-core)
13583 ("python-promise" ,python-promise)
13584 ("python-six" ,python-six)))
13585 (home-page "https://github.com/graphql-python/graphql-relay-py")
13586 (synopsis "Relay implementation for Python")
13587 (description
13588 "This is a library to allow the easy creation of Relay-compliant servers
13589 using the GraphQL Python reference implementation of a GraphQL server. It
13590 should be noted that the code is a exact port of the original
13591 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
13592 from Facebook.")
13593 (license license:expat)))
13594
13595 (define-public python2-graphql-relay
13596 (package-with-python2 python-graphql-relay))
13597
13598 (define-public python-graphene
13599 (package
13600 (name "python-graphene")
13601 (version "0.10.2")
13602 (source
13603 (origin
13604 (method url-fetch)
13605 (uri (pypi-uri "graphene" version))
13606 (sha256
13607 (base32
13608 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
13609 (build-system python-build-system)
13610 (propagated-inputs
13611 `(("python-graphql-core" ,python-graphql-core)
13612 ("python-graphql-relay" ,python-graphql-relay)
13613 ("python-iso8601" ,python-iso8601)
13614 ("python-promise" ,python-promise)
13615 ("python-six" ,python-six)))
13616 (arguments
13617 `(#:tests? #f)) ; no tests/ in the PyPI tarball
13618 (home-page "https://graphene-python.org/")
13619 (synopsis "GraphQL Framework for Python")
13620 (description
13621 "Graphene is a Python library for building GraphQL schemas/types.
13622 A GraphQL schema describes your data model, and provides a GraphQL server
13623 with an associated set of resolve methods that know how to fetch data.")
13624 (properties `((python2-variant . ,(delay python2-graphene))))
13625 (license license:expat)))
13626
13627 (define-public python2-graphene
13628 (let ((base (package-with-python2
13629 (strip-python2-variant python-graphene))))
13630 (package (inherit base)
13631 (native-inputs
13632 `(("python2-sqlalchemy" ,python2-sqlalchemy)
13633 ,@(package-native-inputs base))))))
13634
13635 (define-public python-nautilus
13636 (package
13637 (name "python-nautilus")
13638 (version "0.4.9")
13639 (source
13640 (origin
13641 (method url-fetch)
13642 (uri (pypi-uri "nautilus" version))
13643 (sha256
13644 (base32
13645 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
13646 (build-system python-build-system)
13647 (arguments `(#:tests? #f)) ; fails to import test modules
13648 (propagated-inputs
13649 `(("python-bcrypt" ,python-bcrypt)
13650 ("python-click" ,python-click)
13651 ("python-consul" ,python-consul)
13652 ("python-graphene" ,python-graphene)
13653 ("python-jinja2" ,python-jinja2)
13654 ("python-peewee" ,python-peewee)
13655 ("python-pika" ,python-pika)
13656 ("python-tornado" ,python-tornado)
13657 ("python-wtforms" ,python-wtforms)))
13658 (native-inputs
13659 `(("python-nose2" ,python-nose2)))
13660 (home-page "https://github.com/AlecAivazis/nautilus")
13661 (synopsis "Library for creating microservice applications")
13662 (description
13663 "Nautilus is a framework for flux based microservices that looks to
13664 provide extendible implementations of common aspects of a cloud so that you can
13665 focus on building massively scalable web applications.")
13666 (license license:expat)))
13667
13668 (define-public python-random2
13669 (package
13670 (name "python-random2")
13671 (version "1.0.1")
13672 (source (origin
13673 (method url-fetch)
13674 (uri (pypi-uri "random2" version ".zip"))
13675 (sha256
13676 (base32
13677 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
13678 (build-system python-build-system)
13679 (native-inputs `(("unzip" ,unzip)))
13680 (home-page "http://pypi.python.org/pypi/random2")
13681 (synopsis "Python 3 version of the Python 2 @code{random} module")
13682 (description
13683 "This package provides a Python 3 ported version of Python 2.7’s
13684 @code{random} module. It has also been back-ported to work in Python 2.6.
13685
13686 In Python 3, the implementation of @code{randrange()} was changed, so that
13687 even with the same seed you get different sequences in Python 2 and 3.
13688
13689 This package closes that gap, allowing stable random number generation
13690 between the different Python versions.")
13691 (license license:psfl)))
13692
13693 (define-public python2-random2
13694 (package-with-python2 python-random2))
13695
13696 (define-public python-snowballstemmer
13697 (package
13698 (name "python-snowballstemmer")
13699 (version "2.0.0")
13700 (source (origin
13701 (method url-fetch)
13702 (uri (pypi-uri "snowballstemmer" version))
13703 (sha256
13704 (base32
13705 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
13706 (build-system python-build-system)
13707 (arguments
13708 `(;; No tests exist
13709 #:tests? #f))
13710 (home-page "https://github.com/shibukawa/snowball_py")
13711 (synopsis "Snowball stemming library collection for Python")
13712 (description "This package provides 16 word stemmer algorithms generated
13713 from Snowball algorithms. It includes the 15 original ones plus the Poerter
13714 English stemmer.")
13715 (license license:bsd-3)))
13716
13717 (define-public python2-snowballstemmer
13718 (package-with-python2 python-snowballstemmer))
13719
13720 (define-public python-setproctitle
13721 (package
13722 (name "python-setproctitle")
13723 (version "1.1.10")
13724 (source
13725 (origin
13726 (method url-fetch)
13727 (uri (pypi-uri "setproctitle" version))
13728 (sha256
13729 (base32
13730 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
13731 (build-system python-build-system)
13732 (arguments
13733 '(#:phases
13734 (modify-phases %standard-phases
13735 (add-before 'check 'patch-Makefile
13736 ;; Stricly this is only required for the python2 variant.
13737 ;; But adding a phase in an inherited package seems to be
13738 ;; cumbersum. So we patch even for python3.
13739 (lambda _
13740 (let ((nose (assoc-ref %build-inputs "python2-nose")))
13741 (when nose
13742 (substitute* "Makefile"
13743 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
13744 (string-append nose "/bin/nosetests "))))
13745 #t)))
13746 (replace 'check
13747 (lambda _
13748 (setenv "PYTHON" (or (which "python3") (which "python")))
13749 (setenv "PYCONFIG" (if (which "python3-config")
13750 "python3-config --embed"
13751 "python-config"))
13752 (setenv "CC" "gcc")
13753 ;; No need to extend PYTHONPATH to find the built package, since
13754 ;; the Makefile will build anyway
13755 (invoke "make" "check"))))))
13756 (native-inputs
13757 `(("procps" ,procps))) ; required for tests
13758 (home-page "https://github.com/dvarrazzo/py-setproctitle")
13759 (synopsis
13760 "Setproctitle implementation for Python to customize the process title")
13761 (description "The library allows a process to change its title (as displayed
13762 by system tools such as ps and top).
13763
13764 Changing the title is mostly useful in multi-process systems, for
13765 example when a master process is forked: changing the children's title
13766 allows identifying the task each process is busy with. The technique
13767 is used by PostgreSQL and the OpenSSH Server for example.")
13768 (license license:bsd-3)
13769 (properties `((python2-variant . ,(delay python2-setproctitle))))))
13770
13771 (define-public python2-setproctitle
13772 (let ((base (package-with-python2
13773 (strip-python2-variant python-setproctitle))))
13774 (package
13775 (inherit base)
13776 (native-inputs `(("python2-nose" ,python2-nose)
13777 ,@(package-native-inputs base))))))
13778
13779 (define-public python-validictory
13780 (package
13781 (name "python-validictory")
13782 (version "1.0.1")
13783 (source
13784 (origin
13785 (method url-fetch)
13786 (uri (pypi-uri "validictory" version))
13787 (sha256
13788 (base32
13789 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
13790 (build-system python-build-system)
13791 (arguments
13792 '(#:phases
13793 (modify-phases %standard-phases
13794 (add-after 'unpack 'bootstrap
13795 ;; Move the tests out of the package directory to avoid
13796 ;; packaging them.
13797 (lambda* _
13798 (rename-file "validictory/tests" "tests")
13799 (delete-file "tests/__init__.py")))
13800 (replace 'check
13801 (lambda _
13802 ;; Extend PYTHONPATH so the built package will be found.
13803 (setenv "PYTHONPATH"
13804 (string-append (getcwd) "/build/lib:"
13805 (getenv "PYTHONPATH")))
13806 (invoke "py.test" "-vv" ))))))
13807 (native-inputs
13808 `(("python-pytest" ,python-pytest)))
13809 (home-page
13810 "https://github.com/jamesturk/validictory")
13811 (synopsis "General purpose Python data validator")
13812 (description "It allows validation of arbitrary Python data structures.
13813
13814 The schema format is based on the JSON Schema
13815 proposal (http://json-schema.org), so combined with json the library is also
13816 useful as a validator for JSON data.")
13817 (license license:expat)))
13818
13819 (define-public python2-validictory
13820 (package-with-python2 python-validictory))
13821
13822 (define-public python-pyelftools
13823 (package
13824 (name "python-pyelftools")
13825 (version "0.25")
13826 (source
13827 (origin
13828 (method url-fetch)
13829 (uri (pypi-uri "pyelftools" version))
13830 (sha256
13831 (base32
13832 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13833 (build-system python-build-system)
13834 (arguments
13835 `(#:phases
13836 (modify-phases %standard-phases
13837 (add-before 'check 'set-pythonpath
13838 (lambda _
13839 (setenv "PYTHONPATH"
13840 (string-append
13841 (getcwd) "/test/"
13842 ":" (getenv "PYTHONPATH")))
13843 #t)))))
13844 (home-page
13845 "https://github.com/eliben/pyelftools")
13846 (synopsis
13847 "Analyze binary and library file information")
13848 (description "This Python library provides interfaces for parsing and
13849 analyzing two binary and library file formats; the Executable and Linking
13850 Format (ELF), and debugging information in the Debugging With Attributed
13851 Record Format (DWARF).")
13852 (license license:public-domain)))
13853
13854 (define-public python-pyev
13855 (package
13856 (name "python-pyev")
13857 (version "0.9.0")
13858 (source
13859 (origin
13860 (method url-fetch)
13861 (uri (pypi-uri "pyev" version))
13862 (sha256
13863 (base32
13864 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13865 (build-system python-build-system)
13866 (arguments
13867 `(#:tests? #f ; no test suite
13868 #:phases
13869 (modify-phases %standard-phases
13870 (add-after 'unpack 'patch
13871 (lambda* (#:key inputs #:allow-other-keys)
13872 (let ((libev (string-append (assoc-ref inputs "libev")
13873 "/lib/libev.so.4")))
13874 (substitute* "setup.py"
13875 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13876 (string-append "libev_dll_name = \"" libev "\"")))))))))
13877 (inputs
13878 `(("libev" ,libev)))
13879 (home-page "http://pythonhosted.org/pyev/")
13880 (synopsis "Python libev interface")
13881 (description "Pyev provides a Python interface to libev.")
13882 (license license:gpl3)))
13883
13884 (define-public python2-pyev
13885 (package-with-python2 python-pyev))
13886
13887 (define-public python-imagesize
13888 (package
13889 (name "python-imagesize")
13890 (version "1.2.0")
13891 (source
13892 (origin
13893 (method url-fetch)
13894 (uri (pypi-uri "imagesize" version))
13895 (sha256
13896 (base32
13897 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13898 (build-system python-build-system)
13899 (home-page "https://github.com/shibukawa/imagesize_py")
13900 (synopsis "Gets image size of files in various formats in Python")
13901 (description
13902 "This package allows determination of image size from
13903 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13904 (license license:expat)))
13905
13906 (define-public python2-imagesize
13907 (package-with-python2 python-imagesize))
13908
13909 (define-public python-termstyle
13910 (package
13911 (name "python-termstyle")
13912 (version "0.1.11")
13913 (source
13914 (origin
13915 (method url-fetch)
13916 (uri (pypi-uri "termstyle" version))
13917 (sha256
13918 (base32
13919 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13920 (build-system python-build-system)
13921 (arguments
13922 '(#:phases
13923 (modify-phases %standard-phases
13924 (replace 'check
13925 (lambda _
13926 (invoke "python" "test3.py"))))))
13927 (home-page "https://github.com/gfxmonk/termstyle")
13928 (synopsis "Console text coloring for Python")
13929 (description "This package provides console text coloring for Python.")
13930 (license license:bsd-3)))
13931
13932 (define-public python-argcomplete
13933 (package
13934 (name "python-argcomplete")
13935 (version "1.11.1")
13936 (source
13937 (origin
13938 (method url-fetch)
13939 (uri (pypi-uri "argcomplete" version))
13940 (sha256
13941 (base32
13942 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13943 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13944 (build-system python-build-system)
13945 (native-inputs
13946 `(("python-coverage" ,python-coverage)
13947 ("python-flake8" ,python-flake8)
13948 ("python-pexpect" ,python-pexpect)
13949 ("python-wheel" ,python-wheel)
13950 ("tcsh" ,tcsh)
13951 ("fish" ,fish)
13952 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13953 (home-page "https://github.com/kislyuk/argcomplete")
13954 (synopsis "Shell tab completion for Python argparse")
13955 (description "argcomplete provides extensible command line tab completion
13956 of arguments and options for Python scripts using @code{argparse}. It's
13957 particularly useful for programs with many options or sub-parsers that can
13958 dynamically suggest completions; for example, when browsing resources over the
13959 network.")
13960 (license license:asl2.0)))
13961
13962 (define-public python2-argcomplete
13963 (package-with-python2 python-argcomplete))
13964
13965 (define-public python-csscompressor
13966 (package
13967 (name "python-csscompressor")
13968 (version "0.9.5")
13969 (source
13970 (origin
13971 (method url-fetch)
13972 (uri (pypi-uri "csscompressor" version))
13973 (sha256
13974 (base32
13975 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
13976 (build-system python-build-system)
13977 (arguments
13978 '(#:phases
13979 (modify-phases %standard-phases
13980 (replace 'check
13981 (lambda _
13982 (invoke "py.test"))))))
13983 (native-inputs
13984 `(("python-pytest" ,python-pytest)))
13985 (home-page "https://github.com/sprymix/csscompressor")
13986 (synopsis "Python port of YUI CSS Compressor")
13987 (description
13988 "This package provides a python port of YUI CSS Compressor.")
13989 (license license:bsd-3)))
13990
13991 (define-public python-rcssmin
13992 (package
13993 (name "python-rcssmin")
13994 (version "1.0.6")
13995 (source
13996 (origin
13997 (method url-fetch)
13998 (uri (pypi-uri "rcssmin" version))
13999 (sha256
14000 (base32
14001 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
14002 (build-system python-build-system)
14003 (arguments
14004 '(#:phases
14005 (modify-phases %standard-phases
14006 (replace 'check
14007 (lambda _
14008 (invoke "python" "run_tests.py" "tests"))))))
14009 (home-page "http://opensource.perlig.de/rcssmin/")
14010 (synopsis "CSS Minifier")
14011 (description "The minifier is based on the semantics of the YUI compressor,
14012 which itself is based on the rule list by Isaac Schlueter.")
14013 (license license:asl2.0)))
14014
14015 (define-public python-rjsmin
14016 (package
14017 (name "python-rjsmin")
14018 (version "1.1.0")
14019 (source
14020 (origin
14021 (method url-fetch)
14022 (uri (pypi-uri "rjsmin" version))
14023 (sha256
14024 (base32
14025 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
14026 (modules '((guix build utils)))
14027 (snippet
14028 '(begin
14029 (for-each delete-file (find-files "bench" "\\.js$"))
14030 #t))))
14031 (build-system python-build-system)
14032 (arguments
14033 '(#:tests? #f ; Not all test files included.
14034 #:phases
14035 (modify-phases %standard-phases
14036 (replace 'check
14037 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14038 (add-installed-pythonpath inputs outputs)
14039 (if tests?
14040 (invoke "py.test" "-vv" "tests")
14041 #t))))))
14042 (native-inputs
14043 `(("python-pytest" ,python-pytest)))
14044 (home-page "http://opensource.perlig.de/rjsmin/")
14045 (synopsis "Javascript Minifier")
14046 (description "@code{rJSmin} is a javascript minifier written in Python. The
14047 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
14048 is a re-implementation aiming for speed, so it can be used at runtime (rather
14049 than during a preprocessing step).")
14050 (license license:asl2.0)))
14051
14052 (define-public python-xopen
14053 (package
14054 (name "python-xopen")
14055 (version "0.5.0")
14056 (source
14057 (origin
14058 (method url-fetch)
14059 (uri (pypi-uri "xopen" version))
14060 (sha256
14061 (base32
14062 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
14063 (build-system python-build-system)
14064 (propagated-inputs
14065 `(("python-setuptools-scm" ,python-setuptools-scm)))
14066 (home-page "https://github.com/marcelm/xopen/")
14067 (synopsis "Open compressed files transparently")
14068 (description "This module provides an @code{xopen} function that works like
14069 Python's built-in @code{open} function, but can also deal with compressed files.
14070 Supported compression formats are gzip, bzip2 and, xz, and are automatically
14071 recognized by their file extensions. The focus is on being as efficient as
14072 possible on all supported Python versions.")
14073 (license license:expat)))
14074
14075 (define-public python2-xopen
14076 (let ((base (package-with-python2
14077 (strip-python2-variant python-xopen))))
14078 (package
14079 (inherit base)
14080 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
14081 ,@(package-propagated-inputs base))))))
14082
14083 (define-public python-cheetah
14084 (package
14085 (name "python-cheetah")
14086 (version "3.2.4")
14087 (source
14088 (origin
14089 (method url-fetch)
14090 (uri (pypi-uri "Cheetah3" version))
14091 (sha256
14092 (base32
14093 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
14094 (build-system python-build-system)
14095 (arguments
14096 `(#:modules ((guix build utils)
14097 (guix build python-build-system)
14098 (ice-9 ftw)
14099 (srfi srfi-1)
14100 (srfi srfi-26))
14101 #:phases (modify-phases %standard-phases
14102 (add-after 'unpack 'use-absolute-python
14103 (lambda _
14104 (substitute* "Cheetah/CheetahWrapper.py"
14105 (("#!/usr/bin/env python")
14106 (string-append "#!" (which "python"))))
14107 #t))
14108 (add-after 'unpack 'fix-tests
14109 (lambda _
14110 (substitute* "Cheetah/Tests/ImportHooks.py"
14111 (("os.path.dirname\\(__file__\\)")
14112 (string-append "'" (getcwd) "/Cheetah/Tests'")))
14113 #t))
14114 (replace 'check
14115 (lambda _
14116 (let ((cwd (getcwd)))
14117 (setenv "PYTHONPATH"
14118 (string-append
14119 cwd "/build/"
14120 (find (cut string-prefix? "lib" <>)
14121 (scandir (string-append cwd "/build")))
14122 ":" (getenv "PYTHONPATH")))
14123 (setenv "PATH"
14124 (string-append (getenv "PATH")
14125 ":" cwd "/bin"))
14126 (setenv "TMPDIR" "/tmp")
14127
14128 (substitute* "Cheetah/Tests/Test.py"
14129 (("unittest.TextTestRunner\\(\\)")
14130 "unittest.TextTestRunner(verbosity=2)"))
14131
14132 (invoke "python" "Cheetah/Tests/Test.py")))))))
14133 (propagated-inputs
14134 `(("python-markdown" ,python-markdown))) ;optional
14135 (home-page "https://cheetahtemplate.org/")
14136 (synopsis "Template engine")
14137 (description "Cheetah is a text-based template engine and Python code
14138 generator.
14139
14140 Cheetah can be used as a standalone templating utility or referenced as
14141 a library from other Python applications. It has many potential uses,
14142 but web developers looking for a viable alternative to ASP, JSP, PHP and
14143 PSP are expected to be its principle user group.
14144
14145 Features:
14146 @enumerate
14147 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
14148 text-based format.
14149 @item Cleanly separates content, graphic design, and program code.
14150 @item Blends the power and flexibility of Python with a simple template language
14151 that non-programmers can understand.
14152 @item Gives template writers full access to any Python data structure, module,
14153 function, object, or method in their templates.
14154 @item Makes code reuse easy by providing an object-orientated interface to
14155 templates that is accessible from Python code or other Cheetah templates.
14156 One template can subclass another and selectively reimplement sections of it.
14157 @item Provides a simple, yet powerful, caching mechanism that can dramatically
14158 improve the performance of a dynamic website.
14159 @item Compiles templates into optimized, yet readable, Python code.
14160 @end enumerate")
14161 (license (license:x11-style "file://LICENSE"))))
14162
14163 (define-public python2-cheetah
14164 (package-with-python2 python-cheetah))
14165
14166 (define-public python-dulwich
14167 (package
14168 (name "python-dulwich")
14169 (version "0.19.16")
14170 (source
14171 (origin
14172 (method url-fetch)
14173 (uri (list (string-append "https://www.dulwich.io/releases/"
14174 "dulwich-" version ".tar.gz")
14175 (pypi-uri "dulwich" version)))
14176 (sha256
14177 (base32
14178 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
14179 (build-system python-build-system)
14180 (arguments
14181 `(#:phases
14182 (modify-phases %standard-phases
14183 (add-before 'check 'fix-tests
14184 (lambda* (#:key inputs #:allow-other-keys)
14185 ;; The tests use Popen with a custom environment which doesn't
14186 ;; include PATH.
14187 (substitute* "dulwich/tests/compat/utils.py"
14188 (("'git'") (string-append "'"
14189 (which "git")
14190 "'")))
14191 (substitute* '("dulwich/tests/test_repository.py"
14192 "dulwich/tests/test_hooks.py")
14193 (("#!/bin/sh") (string-append "#!" (which "sh"))))
14194 (setenv "TEST_RUNNER" "unittest")
14195 (setenv "PYTHONHASHSEED" "random")
14196 #t)))))
14197 (propagated-inputs
14198 `(("python-fastimport" ,python-fastimport)
14199 ("python-urllib3" ,python-urllib3)))
14200 (native-inputs
14201 `(("python-mock" ,python-mock)
14202 ("python-geventhttpclient" ,python-geventhttpclient)
14203 ("git" ,git)))
14204 (home-page "https://www.dulwich.io/")
14205 (synopsis "Git implementation in Python")
14206 (description "Dulwich is an implementation of the Git file formats and
14207 protocols written in pure Python.")
14208 ;; Can be used with either license.
14209 (license (list license:asl2.0 license:gpl2+))))
14210
14211 (define-public python2-dulwich
14212 (package-with-python2 python-dulwich))
14213
14214 (define-public python-pbkdf2
14215 (package
14216 (name "python-pbkdf2")
14217 (version "1.3")
14218 (source
14219 (origin
14220 (method url-fetch)
14221 (uri (pypi-uri "pbkdf2" version))
14222 (sha256
14223 (base32
14224 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
14225 (build-system python-build-system)
14226 (arguments
14227 '(#:phases
14228 (modify-phases %standard-phases
14229 (replace 'check
14230 (lambda _
14231 (setenv "PYTHONPATH"
14232 (string-append (getcwd) "/build/lib:"
14233 (getenv "PYTHONPATH")))
14234 (invoke "python" "test/test_pbkdf2.py"))))))
14235 (propagated-inputs
14236 `(("python-pycrypto" ,python-pycrypto))) ; optional
14237 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
14238 (synopsis "Password-based key derivation")
14239 (description "This module implements the password-based key derivation
14240 function, PBKDF2, specified in RSA PKCS#5 v2.0.
14241
14242 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
14243 is part of the RSA Public Key Cryptography Standards series. The provided
14244 implementation takes a password or a passphrase and a salt value (and
14245 optionally a iteration count, a digest module, and a MAC module) and provides
14246 a file-like object from which an arbitrarly-sized key can be read.")
14247 (license license:expat)))
14248
14249 (define-public python2-pbkdf2
14250 (package-with-python2 python-pbkdf2))
14251
14252 (define-public python-qrcode
14253 (package
14254 (name "python-qrcode")
14255 (version "6.1")
14256 (source
14257 (origin
14258 (method url-fetch)
14259 (uri (pypi-uri "qrcode" version))
14260 (sha256
14261 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
14262 (build-system python-build-system)
14263 (arguments
14264 ;; FIXME: Tests require packaging 'pymaging'.
14265 '(#:tests? #f))
14266 (propagated-inputs
14267 `(("python-lxml" ,python-lxml) ; for SVG output
14268 ("python-pillow" ,python-pillow) ; for PNG output
14269 ("python-six" ,python-six)))
14270 (home-page "https://github.com/lincolnloop/python-qrcode")
14271 (synopsis "QR Code image generator")
14272 (description "This package provides a pure Python QR Code generator
14273 module. It uses the Python Imaging Library (PIL) to allow for the generation
14274 of QR Codes.
14275
14276 In addition this package provides a command line tool to generate QR codes and
14277 either write these QR codes to a file or do the output as ascii art at the
14278 console.")
14279 (license license:bsd-3)))
14280
14281 (define-public python2-qrcode
14282 (package-with-python2 python-qrcode))
14283
14284 (define-public python-rst2ansi
14285 (package
14286 (name "python-rst2ansi")
14287 (version "0.1.5")
14288 (source
14289 (origin
14290 (method url-fetch)
14291 (uri (pypi-uri "rst2ansi" version))
14292 (sha256
14293 (base32
14294 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
14295 (build-system python-build-system)
14296 (propagated-inputs
14297 `(("python-docutils" ,python-docutils)))
14298 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
14299 (synopsis "Convert RST to ANSI-decorated console output")
14300 (description
14301 "Python module dedicated to rendering RST (reStructuredText) documents
14302 to ansi-escaped strings suitable for display in a terminal.")
14303 (license license:expat)))
14304
14305 (define-public python-ansi2html
14306 (package
14307 (name "python-ansi2html")
14308 (version "1.2.0")
14309 (source
14310 (origin
14311 (method url-fetch)
14312 (uri (pypi-uri "ansi2html" version))
14313 (sha256
14314 (base32
14315 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
14316 (build-system python-build-system)
14317 (native-inputs
14318 `(("python-mock" ,python-mock)
14319 ("python-nose" ,python-nose)))
14320 (propagated-inputs
14321 `(("python-six" ,python-six)))
14322 (home-page "https://github.com/ralphbean/ansi2html")
14323 (synopsis "Convert ANSI-decorated console output to HTML")
14324 (description
14325 "@command{ansi2html} is a Python library and command line utility for
14326 convering text with ANSI color codes to HTML or LaTeX.")
14327 (license license:gpl3+)))
14328
14329 (define-public python2-ansi2html
14330 (package-with-python2 python-ansi2html))
14331
14332 (define-public python-ddt
14333 (package
14334 (name "python-ddt")
14335 (version "1.1.3")
14336 (source
14337 (origin
14338 (method url-fetch)
14339 (uri (pypi-uri "ddt" version))
14340 (sha256
14341 (base32
14342 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
14343 (build-system python-build-system)
14344 (native-inputs
14345 `(("python-mock" ,python-mock)
14346 ("python-nose" ,python-nose)))
14347 (propagated-inputs
14348 `(("python-six" ,python-six)
14349 ("python-pyyaml" ,python-pyyaml)))
14350 (home-page "https://github.com/txels/ddt")
14351 (synopsis "Data-Driven Tests")
14352 (description
14353 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
14354 running it with different test data, and make it appear as multiple test
14355 cases.")
14356 (license license:expat)))
14357
14358 (define-public python2-ddt
14359 (package-with-python2 python-ddt))
14360
14361 (define-public python-pycountry
14362 (package
14363 (name "python-pycountry")
14364 (version "18.5.26")
14365 (source
14366 (origin
14367 (method url-fetch)
14368 (uri (pypi-uri "pycountry" version))
14369 (sha256
14370 (base32
14371 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
14372 (build-system python-build-system)
14373 (home-page "https://bitbucket.org/flyingcircus/pycountry")
14374 (synopsis "ISO databases for languages, countries, currencies, etc.")
14375 (description
14376 "@code{pycountry} provides the ISO databases for the standards:
14377 @enumerate
14378 @item 639-3 (Languages)
14379 @item 3166 (Countries)
14380 @item 3166-3 (Deleted Countries)
14381 @item 3166-2 (Subdivisions of countries)
14382 @item 4217 (Currencies)
14383 @item 15924 (Scripts)
14384 @end enumerate
14385 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
14386 through a Python API.")
14387 (license license:lgpl2.1+)))
14388
14389 (define-public python2-pycountry
14390 (package-with-python2 python-pycountry))
14391
14392 (define-public python-pycosat
14393 (package
14394 (name "python-pycosat")
14395 (version "0.6.1")
14396 (source
14397 (origin
14398 (method url-fetch)
14399 (uri (pypi-uri "pycosat" version))
14400 (sha256
14401 (base32
14402 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
14403 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
14404 (build-system python-build-system)
14405 (home-page "https://github.com/ContinuumIO/pycosat")
14406 (synopsis "Bindings to picosat (a SAT solver)")
14407 (description
14408 "This package provides efficient Python bindings to @code{picosat} on
14409 the C level. When importing pycosat, the @code{picosat} solver becomes part
14410 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
14411 Problem} (SAT) solver.")
14412 (license license:expat)))
14413
14414 (define-public python2-pycosat
14415 (package-with-python2 python-pycosat))
14416
14417 (define-public python2-ruamel.ordereddict
14418 (package
14419 (name "python2-ruamel.ordereddict")
14420 (version "0.4.9")
14421 (source
14422 (origin
14423 (method url-fetch)
14424 (uri (pypi-uri "ruamel.ordereddict" version))
14425 (sha256
14426 (base32
14427 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
14428 (build-system python-build-system)
14429 (arguments
14430 `(#:python ,python-2
14431 #:phases
14432 (modify-phases %standard-phases
14433 (delete 'check)
14434 (add-after 'install 'check
14435 (lambda* (#:key inputs outputs #:allow-other-keys)
14436 (add-installed-pythonpath inputs outputs)
14437 (invoke "python" "test/testordereddict.py"))))))
14438 (home-page "https://bitbucket.org/ruamel/ordereddict")
14439 (synopsis "Version of dict that keeps keys in insertion order")
14440 (description
14441 "This is an implementation of an ordered dictionary with @dfn{Key
14442 Insertion Order} (KIO: updates of values do not affect the position of the
14443 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
14444 removed and put at the back). The standard library module @code{OrderedDict},
14445 implemented later, implements a subset of @code{ordereddict} functionality.
14446 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
14447 Order} (KSO, no sorting function can be specified, but a transform can be
14448 specified to apply on the key before comparison (e.g. @code{string.lower})).")
14449 (license license:expat)))
14450
14451 (define-public python-pypeg2
14452 (package
14453 (name "python-pypeg2")
14454 (version "2.15.2")
14455 (source
14456 (origin
14457 (method url-fetch)
14458 (uri (pypi-uri "pyPEG2" version))
14459 (sha256
14460 (base32
14461 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
14462 (build-system python-build-system)
14463 (propagated-inputs `(("python-lxml" ,python-lxml)))
14464 (arguments
14465 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
14466 '(#:tests? #f))
14467 (home-page "https://fdik.org/pyPEG/")
14468 (synopsis "Parsering Expression Grammars in Python")
14469 (description "PyPEG is an intrinsic parser interpreter framework for
14470 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
14471 parse many formal languages.")
14472 (license license:gpl2)))
14473
14474 (define-public python-incremental
14475 (package
14476 (name "python-incremental")
14477 (version "17.5.0")
14478 (source
14479 (origin
14480 (method url-fetch)
14481 (uri (pypi-uri "incremental" version))
14482 (sha256
14483 (base32
14484 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
14485 (build-system python-build-system)
14486 (home-page "https://github.com/hawkowl/incremental")
14487 (synopsis "Library for versioning Python projects")
14488 (description "Incremental is a small library that versions your Python
14489 projects.")
14490 (license license:expat)))
14491
14492 (define-public python2-incremental
14493 (package-with-python2 python-incremental))
14494
14495 (define-public python-invoke
14496 (package
14497 (name "python-invoke")
14498 (home-page "https://www.pyinvoke.org/")
14499 (version "1.3.0")
14500 (source (origin
14501 (method url-fetch)
14502 (uri (pypi-uri "invoke" version))
14503 (sha256
14504 (base32
14505 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
14506 (build-system python-build-system)
14507 (arguments
14508 ;; XXX: Requires many dependencies that are not yet in Guix.
14509 `(#:tests? #f))
14510 (synopsis "Pythonic task execution")
14511 (description
14512 "Invoke is a Python task execution tool and library, drawing inspiration
14513 from various sources to arrive at a powerful and clean feature set. It is
14514 evolved from the Fabric project, but focuses on local and abstract concerns
14515 instead of servers and network commands.")
14516 (license license:bsd-3)))
14517
14518 (define-public python2-invoke
14519 (package-with-python2 python-invoke))
14520
14521 (define-public python-automat
14522 (package
14523 (name "python-automat")
14524 (version "20.2.0")
14525 (source (origin
14526 (method url-fetch)
14527 (uri (pypi-uri "Automat" version))
14528 (sha256
14529 (base32
14530 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
14531 (build-system python-build-system)
14532 ;; We disable the tests because they require python-twisted, while
14533 ;; python-twisted depends on python-automat. Twisted is optional, but the
14534 ;; tests fail if it is not available. Also see
14535 ;; <https://github.com/glyph/automat/issues/71>.
14536 (arguments '(#:tests? #f))
14537 (native-inputs
14538 `(("python-m2r" ,python-m2r)
14539 ("python-setuptools-scm" ,python-setuptools-scm)
14540 ("python-graphviz" ,python-graphviz)))
14541 (propagated-inputs
14542 `(("python-six" ,python-six)
14543 ("python-attrs" ,python-attrs)))
14544 (home-page "https://github.com/glyph/Automat")
14545 (synopsis "Self-service finite-state machines")
14546 (description "Automat is a library for concise, idiomatic Python
14547 expression of finite-state automata (particularly deterministic finite-state
14548 transducers).")
14549 (license license:expat)))
14550
14551 (define-public python2-automat
14552 (package-with-python2 python-automat))
14553
14554 (define-public python-m2r
14555 (package
14556 (name "python-m2r")
14557 (version "0.2.1")
14558 (source (origin
14559 (method url-fetch)
14560 (uri (pypi-uri "m2r" version))
14561 (sha256
14562 (base32
14563 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
14564 (build-system python-build-system)
14565 (propagated-inputs
14566 `(("python-docutils" ,python-docutils)
14567 ("python-mistune" ,python-mistune)))
14568 (native-inputs
14569 `(("python-pygments" ,python-pygments)
14570 ("python-mock" ,python-mock)))
14571 (home-page "https://github.com/miyakogi/m2r")
14572 (synopsis "Markdown to reStructuredText converter")
14573 (description "M2R converts a markdown file including reST markups to valid
14574 reST format.")
14575 (license license:expat)))
14576
14577 (define-public python2-m2r
14578 (package-with-python2 python-m2r))
14579
14580 (define-public python-constantly
14581 (package
14582 (name "python-constantly")
14583 (version "15.1.0")
14584 (source (origin
14585 (method url-fetch)
14586 (uri (pypi-uri "constantly" version))
14587 (sha256
14588 (base32
14589 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
14590 (build-system python-build-system)
14591 (home-page "https://github.com/twisted/constantly")
14592 (synopsis "Symbolic constants in Python")
14593 (description "Constantly is a Python library that provides symbolic
14594 constant support. It includes collections and constants with text, numeric,
14595 and bit flag values.")
14596 (license license:expat)))
14597
14598 (define-public python2-constantly
14599 (package-with-python2 python-constantly))
14600
14601 (define-public python-attrs
14602 (package
14603 (name "python-attrs")
14604 (version "19.3.0")
14605 (source (origin
14606 (method url-fetch)
14607 (uri (pypi-uri "attrs" version))
14608 (sha256
14609 (base32
14610 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
14611 (build-system python-build-system)
14612 (arguments
14613 `(#:modules ((guix build utils)
14614 (guix build python-build-system)
14615 (ice-9 ftw)
14616 (srfi srfi-1)
14617 (srfi srfi-26))
14618 #:phases (modify-phases %standard-phases
14619 (replace 'check
14620 (lambda _
14621 (let ((cwd (getcwd)))
14622 (setenv "PYTHONPATH"
14623 (string-append
14624 cwd "/build/"
14625 (find (cut string-prefix? "lib" <>)
14626 (scandir (string-append cwd "/build")))
14627 ":"
14628 (getenv "PYTHONPATH")))
14629 (invoke "python" "-m" "pytest")))))))
14630 (native-inputs
14631 `(("python-coverage" ,python-coverage)
14632 ("python-hypothesis" ,python-hypothesis)
14633 ("python-pympler" ,python-pympler)
14634 ("python-pytest" ,python-pytest)
14635 ("python-six" ,python-six)
14636 ("python-sphinx" ,python-sphinx)
14637 ("python-zope-interface" ,python-zope-interface)))
14638 (home-page "https://github.com/python-attrs/attrs/")
14639 (synopsis "Attributes without boilerplate")
14640 (description "@code{attrs} is a Python package with class decorators that
14641 ease the chores of implementing the most common attribute-related object
14642 protocols.")
14643 (license license:expat)))
14644
14645 (define-public python2-attrs
14646 (package-with-python2 python-attrs))
14647
14648 (define-public python-attrs-bootstrap
14649 (package
14650 (inherit python-attrs)
14651 (name "python-attrs-bootstrap")
14652 (native-inputs `())
14653 (arguments `(#:tests? #f))))
14654
14655 (define-public python2-attrs-bootstrap
14656 (package-with-python2 python-attrs-bootstrap))
14657
14658 (define-public python2-cliapp
14659 (package
14660 (name "python2-cliapp")
14661 (version "1.20180812.1")
14662 (source
14663 (origin
14664 (method url-fetch)
14665 (uri (string-append
14666 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
14667 version ".tar.gz"))
14668 (sha256
14669 (base32
14670 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
14671 (build-system python-build-system)
14672 (arguments
14673 `(#:python ,python-2
14674 #:phases
14675 (modify-phases %standard-phases
14676 ;; check phase needs to be run before the build phase. If not,
14677 ;; coverage-test-runner looks for tests for the built source files,
14678 ;; and fails.
14679 (delete 'check)
14680 (add-before 'build 'check
14681 (lambda _
14682 ;; Disable python3 tests
14683 (substitute* "check"
14684 (("python3") "# python3"))
14685 (invoke "./check"))))))
14686 (native-inputs
14687 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14688 ("python2-pep8" ,python2-pep8)))
14689 (propagated-inputs
14690 `(("python2-pyaml" ,python2-pyaml)))
14691 (home-page "https://liw.fi/cliapp/")
14692 (synopsis "Python framework for command line programs")
14693 (description "@code{python2-cliapp} is a python framework for
14694 command line programs. It contains the typical stuff such programs
14695 need to do, such as parsing the command line for options, and
14696 iterating over input files.")
14697 (license license:gpl2+)))
14698
14699 (define-public python2-ttystatus
14700 (package
14701 (name "python2-ttystatus")
14702 (version "0.38")
14703 (source
14704 (origin
14705 (method git-fetch)
14706 (uri (git-reference
14707 (url "http://git.liw.fi/ttystatus")
14708 ;; There are no tags after ttystatus-0.36.
14709 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
14710 (sha256
14711 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
14712 (file-name (git-file-name name version))))
14713 (build-system python-build-system)
14714 (native-inputs
14715 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14716 ("python2-pep8" ,python2-pep8)))
14717 (arguments
14718 `(#:python ,python-2
14719 #:phases
14720 (modify-phases %standard-phases
14721 ;; check phase needs to be run before the build phase. If not,
14722 ;; coverage-test-runner looks for tests for the built source files,
14723 ;; and fails.
14724 (delete 'check)
14725 (add-before 'build 'check
14726 (lambda _ (invoke "make" "check"))))))
14727 (home-page "https://liw.fi/ttystatus/")
14728 (synopsis "Python library for showing progress reporting and
14729 status updates on terminals")
14730 (description "@code{python2-ttystatus} is a python library for
14731 showing progress reporting and status updates on terminals, for
14732 command line programs. Output is automatically adapted to the width
14733 of the terminal: truncated if it does not fit, and resized if the
14734 terminal size changes.")
14735 (license license:gpl3+)))
14736
14737 (define-public python2-tracing
14738 (package
14739 (name "python2-tracing")
14740 (version "0.10")
14741 (source
14742 (origin
14743 (method url-fetch)
14744 (uri (string-append
14745 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
14746 version ".tar.gz"))
14747 (sha256
14748 (base32
14749 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
14750 (build-system python-build-system)
14751 (arguments
14752 `(#:python ,python-2))
14753 (home-page "https://liw.fi/tracing/")
14754 (synopsis "Python debug logging helper")
14755 (description "@code{python2-tracing} is a python library for
14756 logging debug messages. It provides a way to turn debugging messages
14757 on and off, based on the filename they occur in. It is much faster
14758 than using @code{logging.Filter} to accomplish the same thing, which
14759 matters when code is run in production mode. The actual logging still
14760 happens using the @code{logging} library.")
14761 (license license:gpl3+)))
14762
14763 (define-public python2-larch
14764 (package
14765 (name "python2-larch")
14766 (version "1.20151025")
14767 (source
14768 (origin
14769 (method url-fetch)
14770 (uri (string-append
14771 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
14772 version ".tar.gz"))
14773 (patches (search-patches
14774 "python2-larch-coverage-4.0a6-compatibility.patch"))
14775 (sha256
14776 (base32
14777 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
14778 (build-system python-build-system)
14779 (arguments
14780 `(#:python ,python-2
14781 #:phases
14782 (modify-phases %standard-phases
14783 ;; check phase needs to be run before the build phase. If not,
14784 ;; coverage-test-runner looks for tests for the built source files,
14785 ;; and fails.
14786 (delete 'check)
14787 (add-before 'build 'check
14788 (lambda _ (invoke "make" "check"))))))
14789 (native-inputs
14790 `(("cmdtest" ,cmdtest)
14791 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
14792 (propagated-inputs
14793 `(("python2-tracing" ,python2-tracing)))
14794 (home-page "https://liw.fi/larch/")
14795 (synopsis "Python copy-on-write B-tree library")
14796 (description "@code{python2-larch} is an implementation of
14797 particular kind of B-tree, based on research by Ohad Rodeh. See
14798 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
14799 on the data structure.
14800
14801 The distinctive feature of this B-tree is that a node is never
14802 (conceptually) modified. Instead, all updates are done by
14803 copy-on-write. This makes it easy to clone a tree, and modify only the
14804 clone, while other processes access the original tree.")
14805 (license license:gpl3+)))
14806
14807 (define-public python-astroid
14808 (package
14809 (name "python-astroid")
14810 (version "2.4.2")
14811 (source
14812 (origin
14813 (method url-fetch)
14814 (uri (pypi-uri "astroid" version))
14815 (sha256
14816 (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
14817 (modules '((guix build utils)))
14818 (snippet
14819 '(begin
14820 ;; Check to see if the version pinning has been removed.
14821 (substitute* "astroid/__pkginfo__.py"
14822 (("==1\\.4\\.\\*") ">=1.4.0"))
14823 #t))))
14824 (build-system python-build-system)
14825 (propagated-inputs
14826 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
14827 ("python-six" ,python-six)
14828 ("python-wrapt" ,python-wrapt)))
14829 (native-inputs
14830 `(("python-dateutil" ,python-dateutil)
14831 ("python-pytest" ,python-pytest)
14832 ("python-pytest-runner" ,python-pytest-runner)))
14833 (home-page "https://github.com/PyCQA/astroid")
14834 (synopsis "Common base representation of python source code for pylint and
14835 other projects")
14836 (description "@code{python-astroid} provides a common base representation
14837 of python source code for projects such as pychecker, pyreverse, pylint, etc.
14838
14839 It provides a compatible representation which comes from the _ast module. It
14840 rebuilds the tree generated by the builtin _ast module by recursively walking
14841 down the AST and building an extended ast. The new node classes have
14842 additional methods and attributes for different usages. They include some
14843 support for static inference and local name scopes. Furthermore, astroid
14844 builds partial trees by inspecting living objects.")
14845 (license license:lgpl2.1+)
14846 (properties `((python2-variant . ,(delay python2-astroid))))))
14847
14848 (define-public python2-astroid
14849 (let ((base (package-with-python2
14850 (strip-python2-variant python-astroid))))
14851 (package (inherit base)
14852 ;; Version 2.x removes python2 support.
14853 (version "1.6.5")
14854 (source
14855 (origin
14856 (method url-fetch)
14857 (uri (pypi-uri "astroid" version))
14858 (sha256
14859 (base32
14860 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
14861 (arguments
14862 (substitute-keyword-arguments (package-arguments base)
14863 ((#:phases phases)
14864 `(modify-phases ,phases
14865 (add-after 'unpack 'remove-spurious-test
14866 (lambda _
14867 ;; https://github.com/PyCQA/astroid/issues/276
14868 (delete-file "astroid/tests/unittest_brain.py")
14869 #t))
14870 (replace 'check
14871 (lambda _
14872 (invoke"python" "-m" "unittest" "discover"
14873 "-p" "unittest*.py")))))))
14874 (native-inputs `())
14875 (propagated-inputs
14876 `(("python2-backports-functools-lru-cache"
14877 ,python2-backports-functools-lru-cache)
14878 ("python2-enum34" ,python2-enum34)
14879 ("python2-singledispatch" ,python2-singledispatch)
14880 ,@(alist-delete "python-typed-ast"
14881 (package-propagated-inputs base)))))))
14882
14883 (define-public python-isbnlib
14884 (package
14885 (name "python-isbnlib")
14886 (version "3.10.3")
14887 (source
14888 (origin
14889 (method url-fetch)
14890 (uri (pypi-uri "isbnlib" version))
14891 (sha256
14892 (base32
14893 "07qhykv0x60d5rsx5pj6s4q15ri4znczscll3xmpf6gyclac1592"))))
14894 (build-system python-build-system)
14895 (arguments '(#:tests? #f)) ; No test
14896 (home-page "https://github.com/xlcnd/isbnlib")
14897 (synopsis "Python library to work with ISBN strings")
14898 (description "@code{python-isbnlib} is a (pure) python library that provides
14899 several useful methods and functions to validate, clean, transform, hyphenate and
14900 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
14901 version, is suitable to be include as a dependency in other projects.")
14902 (license license:lgpl3+)))
14903
14904 (define-public python-isort
14905 (package
14906 (name "python-isort")
14907 (version "4.3.4")
14908 (source
14909 (origin
14910 (method git-fetch)
14911 (uri (git-reference
14912 ;; Tests pass only from the Github sources
14913 (url "https://github.com/timothycrosley/isort")
14914 (commit version)))
14915 (file-name (git-file-name name version))
14916 (sha256
14917 (base32
14918 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
14919 (build-system python-build-system)
14920 (native-inputs
14921 `(("python-mock" ,python-mock)
14922 ("python-pytest" ,python-pytest)))
14923 (home-page "https://github.com/timothycrosley/isort")
14924 (synopsis "Python utility/library to sort python imports")
14925 (description "@code{python-isort} is a python utility/library to sort
14926 imports alphabetically, and automatically separated into sections. It
14927 provides a command line utility, a python library and plugins for various
14928 editors.")
14929 (license license:expat)
14930 (properties `((python2-variant . ,(delay python2-isort))))))
14931
14932 (define-public python2-isort
14933 (let ((base (package-with-python2
14934 (strip-python2-variant python-isort))))
14935 (package (inherit base)
14936 (native-inputs
14937 `(("python2-futures" ,python2-futures)
14938 ,@(package-native-inputs base))))))
14939
14940 (define-public python2-backports-functools-lru-cache
14941 (package
14942 (name "python2-backports-functools-lru-cache")
14943 (version "1.6.1")
14944 (source
14945 (origin
14946 (method url-fetch)
14947 ;; only the pypi tarballs contain the necessary metadata
14948 (uri (pypi-uri "backports.functools_lru_cache" version))
14949 (sha256
14950 (base32
14951 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
14952 (build-system python-build-system)
14953 (native-inputs
14954 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14955 (arguments
14956 `(#:python ,python-2))
14957 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14958 (synopsis "Backport of functools.lru_cache from Python 3.3")
14959 (description "@code{python2-backports-functools-lru-cache} is a backport
14960 of @code{functools.lru_cache} from python 3.3.")
14961 (license license:expat)))
14962
14963 (define-public python-configparser
14964 (package
14965 (name "python-configparser")
14966 (version "4.0.2")
14967 (source
14968 (origin
14969 (method url-fetch)
14970 (uri (pypi-uri "configparser" version))
14971 (sha256
14972 (base32
14973 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14974 (native-inputs
14975 `(("python-setuptools_scm" ,python-setuptools-scm)))
14976 (build-system python-build-system)
14977 (home-page "https://github.com/jaraco/configparser/")
14978 (synopsis "Backport of configparser from python 3.5")
14979 (description "@code{python-configparser} is a backport of
14980 @code{configparser} from Python 3.5 so that it can be used directly
14981 in other versions.")
14982 (license license:expat)))
14983
14984 (define-public python2-configparser
14985 (package-with-python2 python-configparser))
14986
14987 (define-public python-mamba
14988 (package
14989 (name "python-mamba")
14990 (version "0.11.1")
14991 (source (origin
14992 (method url-fetch)
14993 (uri (pypi-uri "mamba" version))
14994 (sha256
14995 (base32
14996 "1jxy3bva94ac02a0wjsms79rp5104zmalxh8rhqqg6mw95cp6xpr"))))
14997 (build-system python-build-system)
14998 (arguments `(#:tests? #f)) ; No test
14999 (propagated-inputs
15000 `(("python-clint" ,python-clint)
15001 ("python-coverage" ,python-coverage)))
15002 (home-page "https://nestorsalceda.com/mamba/")
15003 (synopsis "Test runner for Python")
15004 (description
15005 "Mamba is a Behaviour-Driven Development tool for Python developers.
15006 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
15007 (license license:expat)))
15008
15009 (define-public python-mando
15010 (package
15011 (name "python-mando")
15012 (version "0.6.4")
15013 (source (origin
15014 (method url-fetch)
15015 (uri (pypi-uri "mando" version))
15016 (sha256
15017 (base32
15018 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
15019 (build-system python-build-system)
15020 (propagated-inputs
15021 `(("python-rst2ansi" ,python-rst2ansi)
15022 ("python-six" ,python-six)))
15023 (native-inputs
15024 `(("python-pytest" ,python-pytest)))
15025 (home-page "https://mando.readthedocs.org/")
15026 (synopsis
15027 "Wrapper around argparse, allowing creation of complete CLI applications")
15028 (description
15029 "This package is a wrapper around argparse, allowing you to write complete CLI
15030 applications in seconds while maintaining all the flexibility.")
15031 (license license:expat)))
15032
15033 (define-public python2-mando
15034 (package-with-python2 python-mando))
15035
15036 (define-public python2-argparse
15037 (package
15038 (name "python2-argparse")
15039 (version "1.4.0")
15040 (source
15041 (origin
15042 (method url-fetch)
15043 (uri (pypi-uri "argparse" version))
15044 (sha256
15045 (base32
15046 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
15047 (build-system python-build-system)
15048 (arguments
15049 `(#:python ,python-2))
15050 (home-page "https://github.com/ThomasWaldmann/argparse/")
15051 (synopsis "Python command-line parsing library")
15052 (description
15053 "This package is mostly for people who want to have @code{argparse} on
15054 older Pythons because it was not part of the standard library back then.")
15055 (license license:psfl)))
15056
15057 (define-public python-fudge
15058 (package
15059 (name "python-fudge")
15060 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
15061 ;; package, which is currently the only use of this package.
15062 (version "0.9.6")
15063 (source
15064 (origin
15065 (method url-fetch)
15066 (uri (pypi-uri "fudge" version))
15067 (sha256
15068 (base32
15069 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
15070 (build-system python-build-system)
15071 (arguments
15072 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
15073 (home-page "https://github.com/fudge-py/fudge")
15074 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
15075 (description
15076 "Fudge is a Python module for using fake objects (mocks and stubs) to
15077 test real ones.
15078
15079 In readable Python code, you declare the methods available on your fake object
15080 and how they should be called. Then you inject that into your application and
15081 start testing. This declarative approach means you don’t have to record and
15082 playback actions and you don’t have to inspect your fakes after running code.
15083 If the fake object was used incorrectly then you’ll see an informative
15084 exception message with a traceback that points to the culprit.")
15085 (license license:expat)))
15086
15087 (define-public python2-fudge
15088 (package-with-python2 python-fudge))
15089
15090 (define-public python-mwclient
15091 (package
15092 (name "python-mwclient")
15093 (version "0.10.1")
15094 (source
15095 (origin
15096 (method git-fetch)
15097 ;; The PyPI version wouldn't contain tests.
15098 (uri (git-reference
15099 (url "https://github.com/mwclient/mwclient")
15100 (commit (string-append "v" version))))
15101 (file-name (git-file-name name version))
15102 (sha256
15103 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
15104 (build-system python-build-system)
15105 (propagated-inputs
15106 `(("python-requests-oauthlib" ,python-requests-oauthlib)
15107 ("python-six" ,python-six)))
15108 (native-inputs
15109 `(("python-mock" ,python-mock)
15110 ("python-pytest" ,python-pytest)
15111 ("python-pytest-cov" ,python-pytest-cov)
15112 ("python-pytest-runner" ,python-pytest-runner)
15113 ("python-responses" ,python-responses)))
15114 (home-page "https://github.com/btongminh/mwclient")
15115 (synopsis "MediaWiki API client")
15116 (description "This package provides a MediaWiki API client.")
15117 (license license:expat)))
15118
15119 (define-public python2-mwclient
15120 (package-with-python2 python-mwclient))
15121
15122 (define-public python-utils
15123 (package
15124 (name "python-utils")
15125 (version "2.4.0")
15126 (source (origin
15127 (method url-fetch)
15128 (uri (pypi-uri "python-utils" version))
15129 (sha256
15130 (base32
15131 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
15132 (build-system python-build-system)
15133 (arguments
15134 `(#:phases
15135 (modify-phases %standard-phases
15136 (replace 'check
15137 (lambda* (#:key inputs outputs #:allow-other-keys)
15138 (add-installed-pythonpath inputs outputs)
15139 (delete-file "pytest.ini")
15140 (invoke "pytest" "-vv"))))))
15141 (native-inputs
15142 `(("pytest-runner" ,python-pytest-runner)
15143 ("pytest" ,python-pytest)
15144 ("six" ,python-six)))
15145 (home-page "https://github.com/WoLpH/python-utils")
15146 (synopsis "Convenient utilities not included with the standard Python install")
15147 (description
15148 "Python Utils is a collection of small Python functions and classes which
15149 make common patterns shorter and easier.")
15150 (license license:bsd-2)))
15151
15152 (define-public python2-utils
15153 (package-with-python2 python-utils))
15154
15155 (define-public python-diff-match-patch
15156 (package
15157 (name "python-diff-match-patch")
15158 (version "20121119")
15159 (source
15160 (origin
15161 (method url-fetch)
15162 (uri (pypi-uri "diff-match-patch" version))
15163 (sha256
15164 (base32
15165 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
15166 (build-system python-build-system)
15167 (home-page "https://code.google.com/p/google-diff-match-patch")
15168 (synopsis "Synchronize plain text")
15169 (description "Diff Match and Patch libraries offer robust algorithms to
15170 perform the operations required for synchronizing plain text.")
15171 (license license:asl2.0)))
15172
15173 (define-public python2-diff-match-patch
15174 (package-with-python2 python-diff-match-patch))
15175
15176 (define-public python-dirsync
15177 (package
15178 (name "python-dirsync")
15179 (version "2.2.3")
15180 (source
15181 (origin
15182 (method url-fetch)
15183 (uri (pypi-uri "dirsync" version))
15184 (sha256
15185 (base32
15186 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
15187 (build-system python-build-system)
15188 (propagated-inputs
15189 `(("six" ,python-six)))
15190 (home-page "https://bitbucket.org/tkhyn/dirsync")
15191 (synopsis "Advanced directory tree synchronisation tool")
15192 (description "Advanced directory tree synchronisation tool.")
15193 (license license:expat)))
15194
15195 (define-public python2-dirsync
15196 (package-with-python2 python-dirsync))
15197
15198 (define-public python-levenshtein
15199 (package
15200 (name "python-levenshtein")
15201 (version "0.12.0")
15202 (source
15203 (origin
15204 (method url-fetch)
15205 (uri (pypi-uri "python-Levenshtein" version))
15206 (sha256
15207 (base32
15208 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
15209 (build-system python-build-system)
15210 (home-page "https://github.com/ztane/python-Levenshtein")
15211 (synopsis "Fast computation of Levenshtein distance and string similarity")
15212 (description
15213 "The Levenshtein Python C extension module contains functions for fast computation of
15214 @enumerate
15215 @item Levenshtein (edit) distance, and edit operations
15216 @item string similarity
15217 @item approximate median strings, and generally string averaging
15218 @item string sequence and set similarity
15219 @end enumerate
15220 It supports both normal and Unicode strings.")
15221 (license license:gpl2+)))
15222
15223 (define-public python2-levenshtein
15224 (package-with-python2 python-levenshtein))
15225
15226 (define-public python-scandir
15227 (package
15228 (name "python-scandir")
15229 (version "1.10.0")
15230 (source
15231 (origin
15232 (method url-fetch)
15233 (uri (pypi-uri "scandir" version))
15234 (sha256
15235 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
15236 (build-system python-build-system)
15237 (arguments
15238 `(#:phases (modify-phases %standard-phases
15239 (replace 'check
15240 (lambda _
15241 (invoke "python" "test/run_tests.py"))))))
15242 (home-page "https://github.com/benhoyt/scandir")
15243 (synopsis "Directory iteration function")
15244 (description
15245 "Directory iteration function like os.listdir(), except that instead of
15246 returning a list of bare filenames, it yields DirEntry objects that include
15247 file type and stat information along with the name. Using scandir() increases
15248 the speed of os.walk() by 2-20 times (depending on the platform and file
15249 system) by avoiding unnecessary calls to os.stat() in most cases.
15250
15251 This package is part of the Python standard library since version 3.5.")
15252 (license license:bsd-3)))
15253
15254 (define-public python2-scandir
15255 (package-with-python2 python-scandir))
15256
15257 (define-public python2-stemming
15258 (package
15259 (name "python2-stemming")
15260 (version "1.0.1")
15261 (source
15262 (origin
15263 (method url-fetch)
15264 (uri (pypi-uri "stemming" version))
15265 (sha256
15266 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
15267 (build-system python-build-system)
15268 (arguments
15269 `(#:python ,python-2))
15270 (home-page "https://bitbucket.org/mchaput/stemming/overview")
15271 (synopsis "Python implementations of various stemming algorithms")
15272 (description
15273 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
15274 stemming algorithms for English. These implementations are straightforward and
15275 efficient, unlike some Python versions of the same algorithms available on the
15276 Web. This package is an extraction of the stemming code included in the Whoosh
15277 search engine.")
15278 (license license:public-domain)))
15279
15280 (define-public python-factory-boy
15281 (package
15282 (name "python-factory-boy")
15283 (version "2.8.1")
15284 (source
15285 (origin
15286 (method url-fetch)
15287 (uri (pypi-uri "factory_boy" version))
15288 (sha256
15289 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
15290 (build-system python-build-system)
15291 (arguments
15292 ;; Tests are not included in the tarball.
15293 `(#:tests? #f))
15294 (propagated-inputs
15295 `(("faker" ,python-faker)))
15296 (home-page "https://github.com/benhoyt/scandir")
15297 (synopsis "Versatile test fixtures replacement")
15298 (description
15299 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
15300
15301 As a fixtures replacement tool, it aims to replace static, hard to maintain
15302 fixtures with easy-to-use factories for complex object.
15303
15304 Instead of building an exhaustive test setup with every possible combination
15305 of corner cases, factory_boy allows you to use objects customized for the
15306 current test, while only declaring the test-specific fields")
15307 (license license:expat)))
15308
15309 (define-public python2-factory-boy
15310 (package-with-python2 python-factory-boy))
15311
15312 (define-public python-translate-toolkit
15313 (package
15314 (name "python-translate-toolkit")
15315 (version "2.1.0")
15316 (source
15317 (origin
15318 (method url-fetch)
15319 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
15320 (sha256
15321 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
15322 (build-system python-build-system)
15323 (native-inputs
15324 `(("python-pytest" ,python-pytest)
15325 ("python-sphinx" ,python-sphinx)))
15326 (propagated-inputs
15327 `(("python-babel" ,python-babel)
15328 ("python-beautifulsoup4" ,python-beautifulsoup4)
15329 ("python-chardet" ,python-chardet)
15330 ("python-diff-match-patch" ,python-diff-match-patch)
15331 ("python-levenshtein" ,python-levenshtein)
15332 ("python-lxml" ,python-lxml)
15333 ("python-six" ,python-six)
15334 ("python-vobject" ,python-vobject)
15335 ("python-pyyaml" ,python-pyyaml)))
15336 (arguments
15337 ;; TODO: tests are not run, because they end with
15338 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
15339 ;; 'parse_funcs'
15340 ;; during test setup.
15341 `(#:tests? #f))
15342 (home-page "https://toolkit.translatehouse.org")
15343 (synopsis "Tools and API for translation and localization engineering")
15344 (description
15345 "Tools and API for translation and localization engineering. It contains
15346 several utilities, as well as an API for building localization tools.")
15347 (license license:gpl2+)))
15348
15349 (define-public python2-translate-toolkit
15350 (package-with-python2 python-translate-toolkit))
15351
15352 (define-public python-packaging
15353 (package
15354 (name "python-packaging")
15355 (version "20.0")
15356 (source
15357 (origin
15358 (method url-fetch)
15359 (uri (pypi-uri "packaging" version))
15360 ;; XXX: The URL in the patch file is wrong, it should be
15361 ;; <https://github.com/pypa/packaging/pull/256>.
15362 (patches (search-patches "python-packaging-test-arch.patch"))
15363 (sha256
15364 (base32
15365 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
15366 (build-system python-build-system)
15367 (arguments
15368 `(#:phases (modify-phases %standard-phases
15369 (replace 'check
15370 (lambda* (#:key tests? #:allow-other-keys)
15371 (if tests?
15372 (invoke "py.test" "-vv")
15373 (format #t "test suite not run~%"))
15374 #t)))))
15375 (native-inputs
15376 `(("python-pretend" ,python-pretend)
15377 ("python-pytest" ,python-pytest)))
15378 (propagated-inputs
15379 `(("python-pyparsing" ,python-pyparsing)
15380 ("python-six" ,python-six)))
15381 (home-page "https://github.com/pypa/packaging")
15382 (synopsis "Core utilities for Python packages")
15383 (description "Packaging is a Python module for dealing with Python packages.
15384 It offers an interface for working with package versions, names, and dependency
15385 information.")
15386 ;; From 'LICENSE': This software is made available under the terms of
15387 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
15388 ;; Contributions to this software is made under the terms of *both* these
15389 ;; licenses.
15390 (license (list license:asl2.0 license:bsd-2))))
15391
15392 (define-public python2-packaging
15393 (package-with-python2 python-packaging))
15394
15395 ;; Variants with minimal dependencies, for bootstrapping Pytest.
15396 (define-public python-packaging-bootstrap
15397 (hidden-package
15398 (package/inherit
15399 python-packaging
15400 (name "python-packaging-bootstrap")
15401 (native-inputs '())
15402 (propagated-inputs
15403 `(("python-pyparsing" ,python-pyparsing)))
15404 (arguments '(#:tests? #f)))))
15405
15406 (define-public python2-packaging-bootstrap
15407 (hidden-package
15408 (package/inherit
15409 python2-packaging
15410 (name "python2-packaging-bootstrap")
15411 (native-inputs '())
15412 (propagated-inputs
15413 `(("python-pyparsing" ,python2-pyparsing)))
15414 (arguments
15415 `(#:tests? #f
15416 ,@(package-arguments python2-packaging))))))
15417
15418 (define-public python-relatorio
15419 (package
15420 (name "python-relatorio")
15421 (version "0.8.0")
15422 (source
15423 (origin
15424 (method url-fetch)
15425 (uri (pypi-uri "relatorio" version))
15426 (sha256
15427 (base32
15428 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
15429 (build-system python-build-system)
15430 (propagated-inputs
15431 `(("python-lxml" ,python-lxml)
15432 ("python-genshi" ,python-genshi)))
15433 (native-inputs
15434 `(("python-magic" ,python-magic)))
15435 (home-page "https://relatorio.tryton.org/")
15436 (synopsis "Templating library able to output ODT and PDF files")
15437 (description "Relatorio is a templating library which provides a way to
15438 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
15439 for more filetypes can be easily added by creating plugins for them.")
15440 (license license:gpl3+)))
15441
15442 (define-public python2-relatorio
15443 (package-with-python2 python-relatorio))
15444
15445 (define-public python-radon
15446 (package
15447 (name "python-radon")
15448 (version "4.1.0")
15449 (source
15450 (origin
15451 (method url-fetch)
15452 (uri (pypi-uri "radon" version))
15453 (sha256
15454 (base32
15455 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
15456 (build-system python-build-system)
15457 (arguments
15458 `(#:phases (modify-phases %standard-phases
15459 (replace 'check
15460 (lambda _
15461 (invoke "python" "radon/tests/run.py"))))))
15462 (propagated-inputs
15463 `(("python-colorama" ,python-colorama)
15464 ("python-flake8-polyfill" ,python-flake8-polyfill)
15465 ("python-mando" ,python-mando)))
15466 (native-inputs
15467 `(("python-pytest" ,python-pytest)
15468 ("python-pytest-mock" ,python-pytest-mock)))
15469 (home-page "https://radon.readthedocs.org/")
15470 (synopsis "Code Metrics in Python")
15471 (description "Radon is a Python tool which computes various code metrics.
15472 Supported metrics are:
15473 @itemize @bullet
15474 @item raw metrics: SLOC, comment lines, blank lines, &c.
15475 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
15476 @item Halstead metrics (all of them)
15477 @item the Maintainability Index (a Visual Studio metric)
15478 @end itemize")
15479 (properties `((python2-variant . ,(delay python2-radon))))
15480 (license license:expat)))
15481
15482 (define-public python2-radon
15483 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
15484 (package
15485 (inherit base)
15486 (propagated-inputs
15487 `(("python-configparser" ,python2-configparser)
15488 ("python-future" ,python2-future)
15489 ,@(package-propagated-inputs base))))))
15490
15491 (define-public python-sure
15492 (package
15493 (name "python-sure")
15494 (version "1.4.11")
15495 (source
15496 (origin
15497 (method url-fetch)
15498 (uri (pypi-uri "sure" version))
15499 (sha256
15500 (base32
15501 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
15502 (build-system python-build-system)
15503 (propagated-inputs
15504 `(("python-mock" ,python-mock)
15505 ("python-six" ,python-six)))
15506 (native-inputs
15507 `(("python-nose" ,python-nose)))
15508 (home-page "https://github.com/gabrielfalcao/sure")
15509 (synopsis "Automated testing library in python for python")
15510 (description
15511 "Sure is a python library that leverages a DSL for writing assertions.
15512 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
15513 (license license:gpl3+)))
15514
15515 (define-public python2-sure
15516 (package-with-python2 python-sure))
15517
15518 (define-public python2-couleur
15519 ;; This package does not seem to support python3 at all, hence,
15520 ;; only the python2 variant definition is provided.
15521 (package
15522 (name "python2-couleur")
15523 (version "0.6.2")
15524 (source
15525 (origin
15526 (method url-fetch)
15527 (uri (pypi-uri "couleur" version))
15528 (sha256
15529 (base32
15530 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
15531 (build-system python-build-system)
15532 (arguments
15533 `(#:python ,python-2))
15534 (home-page "https://github.com/gabrielfalcao/couleur")
15535 (synopsis
15536 "ANSI terminal tool for python, colored shell and other handy fancy features")
15537 (description
15538 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
15539 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
15540 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
15541 ;; https://github.com/gabrielfalcao/couleur/issues/11
15542 (license license:lgpl3+)))
15543
15544 (define-public python-misaka
15545 (package
15546 (name "python-misaka")
15547 (version "2.1.1")
15548 (source
15549 (origin
15550 (method url-fetch)
15551 (uri (pypi-uri "misaka" version))
15552 (sha256
15553 (base32
15554 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
15555 (build-system python-build-system)
15556 (arguments
15557 `(;; Line 37 of setup.py calls self.run_command('develop')
15558 ;; in the 'check' phase. This command seems to be trying
15559 ;; to write to
15560 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
15561 ;; for which it does not have the permission to write.
15562 #:tests? #f))
15563 (propagated-inputs
15564 `(("python-cffi" ,python-cffi)))
15565 (home-page "https://github.com/FSX/misaka")
15566 (synopsis "Python binding for Hoedown")
15567 (description
15568 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
15569 library written in C. It features a fast HTML renderer and functionality to make custom
15570 renderers (e.g. man pages or LaTeX).")
15571 (license license:expat)))
15572
15573 (define-public python2-misaka
15574 (package-with-python2 python-misaka))
15575
15576 (define-public python2-steadymark
15577 ;; This is forced into being a python2 only variant
15578 ;; due to its dependence on couleur that has no support
15579 ;; for python3
15580 (package
15581 (name "python2-steadymark")
15582 (version "0.7.3")
15583 (source
15584 (origin
15585 (method url-fetch)
15586 (uri (pypi-uri "steadymark" version))
15587 (sha256
15588 (base32
15589 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
15590 (build-system python-build-system)
15591 (native-inputs
15592 `(("python-couleur" ,python2-couleur)
15593 ("python-sure" ,python2-sure)
15594 ("python-misaka" ,python2-misaka)))
15595 (arguments
15596 `(#:python ,python-2
15597 #:phases
15598 (modify-phases %standard-phases
15599 (add-before 'build 'patch-setup-py
15600 (lambda _
15601 ;; Update requirements from dependency==version
15602 ;; to dependency>=version
15603 (substitute* "setup.py"
15604 (("==") ">="))
15605 #t)))))
15606 (home-page "https://github.com/gabrielfalcao/steadymark")
15607 (synopsis "Markdown-based test runner for python")
15608 (description
15609 "@code{Steadymark} allows documentation to be written in github-flavoured
15610 markdown. The documentation may contain snippets of code surrounded by python
15611 code blocks and @code{Steadymark} will find these snippets and run them, making
15612 sure that there are no old malfunctional examples in the documentation examples.")
15613 (license license:expat)))
15614
15615 (define-public python-jsonpointer
15616 (package
15617 (name "python-jsonpointer")
15618 (version "1.10")
15619 (source
15620 (origin
15621 (method url-fetch)
15622 (uri (pypi-uri "jsonpointer" version))
15623 (sha256
15624 (base32
15625 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15626 (build-system python-build-system)
15627 (home-page "https://github.com/stefankoegl/python-json-pointer")
15628 (synopsis "Identify specific nodes in a JSON document")
15629 (description "@code{jsonpointer} allows you to access specific nodes
15630 by path in a JSON document (see RFC 6901).")
15631 (license license:bsd-3)))
15632
15633 (define-public python2-jsonpointer
15634 (package-with-python2 python-jsonpointer))
15635
15636 (define-public python-jsonpatch
15637 (package
15638 (name "python-jsonpatch")
15639 (version "1.16")
15640 (source
15641 (origin
15642 (method git-fetch)
15643 ;; pypi version lacks tests.js
15644 (uri (git-reference
15645 (url "https://github.com/stefankoegl/python-json-patch")
15646 (commit (string-append "v" version))))
15647 (file-name (git-file-name name version))
15648 (sha256
15649 (base32
15650 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
15651 (build-system python-build-system)
15652 (native-inputs
15653 `(("python-jsonpointer" ,python-jsonpointer)))
15654 (home-page "https://github.com/stefankoegl/python-json-patch")
15655 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
15656 (description "@code{jsonpatch} is a library and program that allows
15657 applying JSON Patches according to RFC 6902.")
15658 (license license:bsd-3)))
15659
15660 (define-public python2-jsonpatch
15661 (package-with-python2 python-jsonpatch))
15662
15663 (define-public python-jsonpatch-0.4
15664 (package (inherit python-jsonpatch)
15665 (name "python-jsonpatch")
15666 (version "0.4")
15667 (source
15668 (origin
15669 (method git-fetch)
15670 (uri (git-reference
15671 (url "https://github.com/stefankoegl/python-json-patch")
15672 (commit (string-append "v" version))))
15673 (file-name (git-file-name name version))
15674 (sha256
15675 (base32
15676 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
15677
15678 (define-public python2-jsonpatch-0.4
15679 (package-with-python2 python-jsonpatch-0.4))
15680
15681 (define-public python-rfc3986
15682 (package
15683 (name "python-rfc3986")
15684 (version "1.4.0")
15685 (source (origin
15686 (method url-fetch)
15687 (uri (pypi-uri "rfc3986" version))
15688 (sha256
15689 (base32
15690 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
15691 (build-system python-build-system)
15692 (arguments
15693 `(#:modules ((guix build utils)
15694 (guix build python-build-system)
15695 (ice-9 ftw)
15696 (srfi srfi-1)
15697 (srfi srfi-26))
15698 #:phases
15699 (modify-phases %standard-phases
15700 (replace 'check
15701 (lambda _
15702 (let ((cwd (getcwd)))
15703 (setenv "PYTHONPATH"
15704 (string-append cwd "/build/"
15705 (find (cut string-prefix? "lib" <>)
15706 (scandir (string-append cwd "/build")))
15707 ":"
15708 (getenv "PYTHONPATH")))
15709 (invoke "pytest" "-v")))))))
15710 (native-inputs
15711 `(("python-pytest" ,python-pytest)))
15712 (home-page "https://rfc3986.readthedocs.io/")
15713 (synopsis "Parse and validate URI references")
15714 (description
15715 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
15716 validation and authority parsing. This module also supports RFC@tie{}6874
15717 which adds support for zone identifiers to IPv6 addresses.")
15718 (license license:asl2.0)))
15719
15720 (define-public python2-rfc3986
15721 (package-with-python2 python-rfc3986))
15722
15723 (define-public python-rfc3987
15724 (package
15725 (name "python-rfc3987")
15726 (version "1.3.7")
15727 (source
15728 (origin
15729 (method url-fetch)
15730 (uri (pypi-uri "rfc3987" version))
15731 (sha256
15732 (base32
15733 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15734 (build-system python-build-system)
15735 (home-page "https://pypi.org/project/rfc3987/")
15736 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15737 (description "@code{rfc3987} provides routines for parsing and
15738 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15739 (license license:gpl3+)))
15740
15741 (define-public python2-rfc3987
15742 (package-with-python2 python-rfc3987))
15743
15744 (define-public python-validators
15745 (package
15746 (name "python-validators")
15747 (version "0.14.2")
15748 (source (origin
15749 (method url-fetch)
15750 (uri (pypi-uri "validators" version))
15751 (sha256
15752 (base32
15753 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
15754 (build-system python-build-system)
15755 (arguments
15756 '(#:phases (modify-phases %standard-phases
15757 (replace 'check
15758 (lambda _
15759 (invoke "pytest" "-vv"))))))
15760 (propagated-inputs
15761 `(("python-decorator" ,python-decorator)
15762 ("python-six" ,python-six)))
15763 (native-inputs
15764 `(("python-flake8" ,python-flake8)
15765 ("python-isort" ,python-isort)
15766 ("python-pytest" ,python-pytest)))
15767 (home-page "https://github.com/kvesteri/validators")
15768 (synopsis "Data validation library")
15769 (description
15770 "This package contains validators for different things such as email
15771 addresses, IP addresses, URLs, hashes and more. It has been designed to
15772 be easy to use and not require defining a schema or form just to validate
15773 some input.")
15774 (license license:expat)))
15775
15776 (define-public python2-validators
15777 (package-with-python2 python-validators))
15778
15779 (define-public python-validate-email
15780 (package
15781 (name "python-validate-email")
15782 (version "1.3")
15783 (source
15784 (origin
15785 (method url-fetch)
15786 (uri (pypi-uri "validate_email" version))
15787 (sha256
15788 (base32
15789 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15790 (build-system python-build-system)
15791 (home-page "https://github.com/syrusakbary/validate_email")
15792 (synopsis "Verifies if an email address is valid and really exists")
15793 (description "@code{validate_email} can be used to verify if an email
15794 address is valid and really exists.")
15795 (license license:lgpl3+)))
15796
15797 (define-public python2-validate-email
15798 (package-with-python2 python-validate-email))
15799
15800 (define-public python-flex
15801 (package
15802 (name "python-flex")
15803 (version "6.10.0")
15804 (source
15805 (origin
15806 (method url-fetch)
15807 (uri (pypi-uri "flex" version))
15808 (sha256
15809 (base32
15810 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15811 (build-system python-build-system)
15812 (propagated-inputs
15813 `(("python-click" ,python-click)
15814 ("python-iso8601" ,python-iso8601)
15815 ("python-jsonpointer" ,python-jsonpointer)
15816 ("python-pyyaml" ,python-pyyaml)
15817 ("python-requests" ,python-requests)
15818 ("python-rfc3987" ,python-rfc3987)
15819 ("python-six" ,python-six)
15820 ("python-validate-email" ,python-validate-email)))
15821 (home-page "https://github.com/pipermerriam/flex")
15822 (synopsis "Validates Swagger schemata")
15823 (description "@code{flex} can be used to validate Swagger schemata.")
15824 (license license:bsd-3)))
15825
15826 (define-public python2-flex
15827 (package-with-python2 python-flex))
15828
15829 (define-public python-marshmallow
15830 (package
15831 (name "python-marshmallow")
15832 (version "3.0.0b14")
15833 (source
15834 (origin
15835 (method url-fetch)
15836 (uri (pypi-uri "marshmallow" version))
15837 (sha256
15838 (base32
15839 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
15840 (build-system python-build-system)
15841 (propagated-inputs
15842 `(("python-dateutil" ,python-dateutil)
15843 ("python-simplejson" ,python-simplejson)))
15844 (native-inputs
15845 `(("python-pytest" ,python-pytest)
15846 ("python-pytz" ,python-pytz)))
15847 (home-page "https://github.com/marshmallow-code/marshmallow")
15848 (synopsis "Convert complex datatypes to and from native
15849 Python datatypes.")
15850 (description "@code{marshmallow} provides a library for converting
15851 complex datatypes to and from native Python datatypes.")
15852 (license license:expat)))
15853
15854 (define-public python2-marshmallow
15855 (package-with-python2 python-marshmallow))
15856
15857 (define-public python-apispec
15858 (package
15859 (name "python-apispec")
15860 (version "0.25.3")
15861 (source
15862 (origin
15863 (method url-fetch)
15864 (uri (pypi-uri "apispec" version))
15865 (sha256
15866 (base32
15867 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
15868 (build-system python-build-system)
15869 (propagated-inputs
15870 `(("python-pyyaml" ,python-pyyaml)))
15871 (native-inputs
15872 `(("python-pytest" ,python-pytest)
15873 ("python-flask" ,python-flask)
15874 ("python-marshmallow" ,python-marshmallow)
15875 ("python-tornado" ,python-tornado)
15876 ("python-bottle" ,python-bottle)
15877 ("python-mock" ,python-mock)))
15878 (home-page "https://github.com/marshmallow-code/apispec")
15879 (synopsis "Swagger 2.0 API specification generator")
15880 (description "@code{python-apispec} is a pluggable API specification
15881 generator. Currently supports the OpenAPI specification (f.k.a.
15882 Swagger 2.0).")
15883 (license license:expat)))
15884
15885 (define-public python2-apispec
15886 (package-with-python2 python-apispec))
15887
15888 (define-public python-flasgger
15889 (package
15890 (name "python-flasgger")
15891 (version "0.6.3")
15892 (source
15893 (origin
15894 (method git-fetch)
15895 (uri (git-reference
15896 (url "https://github.com/rochacbruno/flasgger")
15897 (commit version)))
15898 (file-name (git-file-name name version))
15899 (sha256
15900 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
15901 (build-system python-build-system)
15902 (arguments
15903 `(#:phases
15904 (modify-phases %standard-phases
15905 (replace 'check
15906 (lambda* (#:key inputs outputs #:allow-other-keys)
15907 (substitute* "Makefile"
15908 (("flake8 flasgger --ignore=F403")
15909 "flake8 flasgger --ignore=E731,F403"))
15910 (setenv "PYTHONPATH" (string-append (getcwd)
15911 ":"
15912 (getenv "PYTHONPATH")))
15913 (invoke "py.test"))))))
15914 (propagated-inputs
15915 `(("python-flask" ,python-flask)
15916 ("python-pyyaml" ,python-pyyaml)
15917 ("python-jsonschema" ,python-jsonschema)
15918 ("python-mistune" ,python-mistune)
15919 ("python-six" ,python-six)))
15920 (native-inputs
15921 `(("python-decorator" ,python-decorator)
15922 ("python-flake8" ,python-flake8)
15923 ("python-flask-restful" ,python-flask-restful)
15924 ("python-flex" ,python-flex)
15925 ("python-pytest" ,python-pytest)
15926 ("python-pytest-cov" ,python-pytest-cov)
15927 ("python-marshmallow" ,python-marshmallow)
15928 ("python-apispec" ,python-apispec)))
15929 (home-page "https://github.com/rochacbruno/flasgger/")
15930 (synopsis "Extract Swagger specs from your Flask project")
15931 (description "@code{python-flasgger} allows extracting Swagger specs
15932 from your Flask project. It is a fork of Flask-Swagger.")
15933 (license license:expat)))
15934
15935 (define-public python2-flasgger
15936 (package-with-python2 python-flasgger))
15937
15938 (define-public python-swagger-spec-validator
15939 (package
15940 (name "python-swagger-spec-validator")
15941 (version "2.4.3")
15942 (source
15943 (origin
15944 (method url-fetch)
15945 (uri (pypi-uri "swagger-spec-validator" version))
15946 (sha256
15947 (base32
15948 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
15949 (build-system python-build-system)
15950 (propagated-inputs
15951 `(("python-jsonschema" ,python-jsonschema)
15952 ("python-pyyaml" ,python-pyyaml)
15953 ("python-six" ,python-six)))
15954 (home-page
15955 "https://github.com/Yelp/swagger_spec_validator")
15956 (synopsis "Validation of Swagger specifications")
15957 (description "@code{swagger_spec_validator} provides a library for
15958 validating Swagger API specifications.")
15959 (license license:asl2.0)))
15960
15961 (define-public python2-swagger-spec-validator
15962 (package-with-python2 python-swagger-spec-validator))
15963
15964 (define-public python-apache-libcloud
15965 (package
15966 (name "python-apache-libcloud")
15967 (version "2.4.0")
15968 (source
15969 (origin
15970 (method url-fetch)
15971 (uri (pypi-uri "apache-libcloud" version))
15972 (sha256
15973 (base32
15974 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15975 (build-system python-build-system)
15976 (arguments
15977 `(#:phases
15978 (modify-phases %standard-phases
15979 (add-after 'unpack 'patch-ssh
15980 (lambda* (#:key inputs #:allow-other-keys)
15981 (substitute* "libcloud/compute/ssh.py"
15982 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15983 "/bin/ssh" "'")))
15984 #t))
15985 (add-after 'unpack 'patch-tests
15986 (lambda _
15987 (substitute* "./libcloud/test/test_file_fixtures.py"
15988 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15989 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15990 return (httplib.OK,
15991 \"1234abcd\",
15992 {\"test\": \"value\"},
15993 httplib.responses[httplib.OK])
15994 def _ascii"))
15995 (substitute* "libcloud/test/compute/test_ssh_client.py"
15996 (("class ShellOutSSHClientTests")
15997 "@unittest.skip(\"Guix container doesn't have ssh service\")
15998 class ShellOutSSHClientTests")
15999 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
16000 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
16001 (("'.xF0', '.x90', '.x8D', '.x88'")
16002 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
16003 #t))
16004 (add-before 'check 'copy-secret
16005 (lambda _
16006 (copy-file "libcloud/test/secrets.py-dist"
16007 "libcloud/test/secrets.py")
16008 #t)))))
16009 (inputs
16010 `(("openssh" ,openssh)))
16011 (propagated-inputs
16012 `(("python-paramiko" ,python-paramiko)
16013 ("python-requests" ,python-requests)))
16014 (native-inputs
16015 `(("python-lockfile" ,python-lockfile)
16016 ("python-mock" ,python-mock)
16017 ("python-pytest" ,python-pytest)
16018 ("python-pytest-runner" ,python-pytest-runner)
16019 ("python-requests-mock" ,python-requests-mock)))
16020 (home-page "https://libcloud.apache.org/")
16021 (synopsis "Unified Cloud API")
16022 (description "@code{libcloud} is a Python library for interacting with
16023 many of the popular cloud service providers using a unified API.")
16024 (license license:asl2.0)))
16025
16026 (define-public python2-apache-libcloud
16027 (package-with-python2 python-apache-libcloud))
16028
16029 (define-public python-smmap
16030 (package
16031 (name "python-smmap")
16032 (version "3.0.1")
16033 (source
16034 (origin
16035 (method url-fetch)
16036 (uri (pypi-uri "smmap" version))
16037 (sha256
16038 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
16039 (build-system python-build-system)
16040 (native-inputs
16041 `(("python-nosexcover" ,python-nosexcover)))
16042 (home-page "https://github.com/Byron/smmap")
16043 (synopsis "Python sliding window memory map manager")
16044 (description "@code{smmap} is a pure Python implementation of a sliding
16045 window memory map manager.")
16046 (license license:bsd-3)))
16047
16048 (define-public python-smmap2
16049 (deprecated-package "python-smmap2" python-smmap))
16050
16051 (define-public python2-smmap
16052 (package-with-python2 python-smmap))
16053
16054 (define-public python2-smmap2
16055 (deprecated-package "python2-smmap2" python2-smmap))
16056
16057 (define-public python-regex
16058 (package
16059 (name "python-regex")
16060 (version "2020.6.8")
16061 (source (origin
16062 (method url-fetch)
16063 (uri (pypi-uri "regex" version))
16064 (sha256
16065 (base32
16066 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
16067 (build-system python-build-system)
16068 (arguments
16069 '(#:phases
16070 (modify-phases %standard-phases
16071 (replace 'check
16072 (lambda* (#:key inputs outputs #:allow-other-keys)
16073 (add-installed-pythonpath inputs outputs)
16074 (invoke "python" "-c"
16075 "from regex.test_regex import test_main; test_main()"))))))
16076 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
16077 (synopsis "Alternative regular expression module")
16078 (description "This regular expression implementation is backwards-
16079 compatible with the standard @code{re} module, but offers additional
16080 functionality like full case-folding for case-insensitive matches in Unicode.")
16081 (license license:psfl)))
16082
16083 (define-public python2-regex
16084 (package-with-python2 python-regex))
16085
16086 (define-public python-pyopengl
16087 (package
16088 (name "python-pyopengl")
16089 (version "3.1.5")
16090 (source
16091 (origin
16092 (method url-fetch)
16093 (uri (pypi-uri "PyOpenGL" version))
16094 (sha256
16095 (base32
16096 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
16097 (build-system python-build-system)
16098 (inputs
16099 `(("mesa" ,mesa)
16100 ("freeglut" ,freeglut)
16101 ("glu" ,glu)))
16102 (arguments
16103 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
16104 ;attribute 'OSMesa'
16105 #:phases
16106 (modify-phases %standard-phases
16107 (add-before 'build 'fix-paths
16108 (lambda* (#:key inputs outputs #:allow-other-keys)
16109 (substitute* '("OpenGL/platform/ctypesloader.py")
16110 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
16111 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
16112 (("'GL'")
16113 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
16114 (("'GLU'")
16115 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
16116 (("'glut',")
16117 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
16118 (("'GLESv1_CM'")
16119 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
16120 (("'GLESv2'")
16121 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
16122 ;; Not providing libgle. It seems to be very old.
16123 #t)))))
16124 (home-page "http://pyopengl.sourceforge.net")
16125 (synopsis "Standard OpenGL bindings for Python")
16126 (description
16127 "PyOpenGL is the most common cross platform Python binding to OpenGL and
16128 related APIs. The binding is created using the standard @code{ctypes}
16129 library.")
16130 (license license:bsd-3)))
16131
16132 (define-public python-pyopengl-accelerate
16133 (package
16134 (inherit python-pyopengl)
16135 (name "python-pyopengl-accelerate")
16136 (version "3.1.5")
16137 (source
16138 (origin
16139 (method url-fetch)
16140 (uri (pypi-uri "PyOpenGL-accelerate" version))
16141 (sha256
16142 (base32
16143 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
16144 (inputs
16145 `(("mesa" ,mesa)
16146 ("python-numpy" ,python-numpy))) ; for cython module
16147 ; numpy_formathandler, thus not propagated
16148 (arguments
16149 `(#:tests? #f
16150 #:phases
16151 (modify-phases %standard-phases
16152 (delete 'fix-paths))))
16153 (synopsis "Acceleration code for PyOpenGL")
16154 (description
16155 "This is the Cython-coded accelerator module for PyOpenGL.")))
16156
16157 (define-public python-rencode
16158 (package
16159 (name "python-rencode")
16160 (version "1.0.5")
16161 (source
16162 (origin
16163 (method url-fetch)
16164 (uri (pypi-uri "rencode" version))
16165 (sha256
16166 (base32
16167 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
16168 (build-system python-build-system)
16169 (arguments
16170 `(#:phases
16171 (modify-phases %standard-phases
16172 (add-before 'check 'delete-bogus-test
16173 ;; This test requires /home/aresch/Downloads, which is not provided by
16174 ;; the build environment.
16175 (lambda _
16176 (delete-file "rencode/t.py")
16177 #t)))))
16178 (native-inputs `(("pkg-config" ,pkg-config)
16179 ("python-cython" ,python-cython)))
16180 (home-page "https://github.com/aresch/rencode")
16181 (synopsis "Serialization of heterogeneous data structures")
16182 (description
16183 "The @code{rencode} module is a data structure serialization library,
16184 similar to @code{bencode} from the BitTorrent project. For complex,
16185 heterogeneous data structures with many small elements, r-encoding stake up
16186 significantly less space than b-encodings. This version of rencode is a
16187 complete rewrite in Cython to attempt to increase the performance over the
16188 pure Python module.")
16189 (license license:bsd-3)))
16190
16191 (define-public python2-rencode
16192 (package-with-python2 python-rencode))
16193
16194 (define-public python-xenon
16195 (package
16196 (name "python-xenon")
16197 (version "0.7.0")
16198 (source
16199 (origin
16200 (method url-fetch)
16201 (uri (pypi-uri "xenon" version))
16202 (sha256
16203 (base32
16204 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
16205 (build-system python-build-system)
16206 (native-inputs
16207 `(("python-pyyaml" ,python-pyyaml)
16208 ("python-radon" ,python-radon)
16209 ("python-requests" ,python-requests)
16210 ("python-flake8" ,python-flake8)
16211 ("python-tox" ,python-tox)))
16212 (arguments
16213 `(#:tests? #f ;test suite not shipped with the PyPI archive
16214 #:phases
16215 (modify-phases %standard-phases
16216 (add-before 'build 'patch-test-requirements
16217 (lambda _
16218 ;; Remove httpretty dependency for tests.
16219 (substitute* "setup.py"
16220 (("httpretty") ""))
16221 #t)))))
16222 (home-page "https://xenon.readthedocs.org/")
16223 (synopsis "Monitor code metrics for Python on your CI server")
16224 (description
16225 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
16226 Ideally, @code{xenon} is run every time code is committed. Through command
16227 line options, various thresholds can be set for the complexity of code. It
16228 will fail (i.e. it will exit with a non-zero exit code) when any of these
16229 requirements is not met.")
16230 (license license:expat)))
16231
16232 (define-public python2-xenon
16233 (package-with-python2 python-xenon))
16234
16235 (define-public python-pysocks
16236 (package
16237 (name "python-pysocks")
16238 (version "1.7.0")
16239 (source
16240 (origin
16241 (method url-fetch)
16242 (uri (pypi-uri "PySocks" version))
16243 (sha256
16244 (base32
16245 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
16246 (build-system python-build-system)
16247 (arguments `(#:tests? #f))
16248 (home-page "https://github.com/Anorov/PySocks")
16249 (synopsis "SOCKS client module")
16250 (description "@code{pysocks} is an updated and semi-actively maintained
16251 version of @code{SocksiPy} with bug fixes and extra features.")
16252 (license license:bsd-3)))
16253
16254 (define-public python2-pysocks
16255 (package-with-python2 python-pysocks))
16256
16257 (define-public python-pydiff
16258 (package
16259 (name "python-pydiff")
16260 (version "0.2")
16261 (source
16262 (origin
16263 (method url-fetch)
16264 (uri (pypi-uri "pydiff" version))
16265 (sha256
16266 (base32
16267 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
16268 (build-system python-build-system)
16269 (home-page "https://github.com/myint/pydiff")
16270 (synopsis "Library to diff two Python files at the bytecode level")
16271 (description
16272 "@code{pydiff} makes it easy to look for actual code changes while
16273 ignoring formatting changes.")
16274 (license license:expat)))
16275
16276 (define-public python2-pydiff
16277 (package-with-python2 python-pydiff))
16278
16279 (define-public python-tqdm
16280 (package
16281 (name "python-tqdm")
16282 (version "4.43.0")
16283 (source
16284 (origin
16285 (method url-fetch)
16286 (uri (pypi-uri "tqdm" version))
16287 (sha256
16288 (base32
16289 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
16290 (build-system python-build-system)
16291 (arguments
16292 '(#:phases (modify-phases %standard-phases
16293 (replace 'check
16294 (lambda* (#:key inputs outputs #:allow-other-keys)
16295 (add-installed-pythonpath inputs outputs)
16296 ;; This invokation is taken from tox.ini.
16297 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
16298 "-d" "-v" "tqdm/"))))))
16299 (native-inputs
16300 `(("python-nose" ,python-nose)))
16301 (home-page "https://github.com/tqdm/tqdm")
16302 (synopsis "Fast, extensible progress meter")
16303 (description
16304 "Make loops show a progress bar on the console by just wrapping any
16305 iterable with @code{|tqdm(iterable)|}. Offers many options to define
16306 design and layout.")
16307 (license (list license:mpl2.0 license:expat))))
16308
16309 (define-public python2-tqdm
16310 (package-with-python2 python-tqdm))
16311
16312 (define-public python-pkginfo
16313 (package
16314 (name "python-pkginfo")
16315 (version "1.4.2")
16316 (source
16317 (origin
16318 (method url-fetch)
16319 (uri (pypi-uri "pkginfo" version))
16320 (sha256
16321 (base32
16322 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
16323 (build-system python-build-system)
16324 (arguments
16325 ;; The tests are broken upstream.
16326 '(#:tests? #f))
16327 (home-page
16328 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
16329 (synopsis
16330 "Query metadatdata from sdists, bdists, and installed packages")
16331 (description
16332 "API to query the distutils metadata written in @file{PKG-INFO} inside a
16333 source distriubtion (an sdist) or a binary distribution (e.g., created by
16334 running bdist_egg). It can also query the EGG-INFO directory of an installed
16335 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
16336 created by running @code{python setup.py develop}).")
16337 (license license:expat)))
16338
16339 (define-public python2-pkginfo
16340 (package-with-python2 python-pkginfo))
16341
16342 (define-public python-twine
16343 (package
16344 (name "python-twine")
16345 (version "1.15.0")
16346 (source
16347 (origin
16348 (method url-fetch)
16349 (uri (pypi-uri "twine" version))
16350 (sha256
16351 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
16352 (build-system python-build-system)
16353 (propagated-inputs
16354 `(("python-tqdm" ,python-tqdm)
16355 ("python-packaging" ,python-packaging)
16356 ("python-pkginfo" ,python-pkginfo)
16357 ("python-readme-renderer" ,python-readme-renderer)
16358 ("python-requests" ,python-requests)
16359 ("python-requests-toolbelt" ,python-requests-toolbelt)))
16360 (home-page "https://github.com/pypa/twine")
16361 (synopsis "Collection of utilities for interacting with PyPI")
16362 (description
16363 "@code{twine} currently supports registering projects and uploading
16364 distributions. It authenticates the user over HTTPS, allows them to pre-sign
16365 their files and supports any packaging format (including wheels).")
16366 (license license:asl2.0)))
16367
16368 (define-public python2-twine
16369 (package-with-python2 python-twine))
16370
16371 (define-public python-linecache2
16372 (package
16373 (name "python-linecache2")
16374 (version "1.0.0")
16375 (source
16376 (origin
16377 (method url-fetch)
16378 (uri (pypi-uri "linecache2" version))
16379 (sha256
16380 (base32
16381 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
16382 (build-system python-build-system)
16383 (arguments
16384 `(;; The tests depend on unittest2, and our version is a bit too old.
16385 #:tests? #f))
16386 (native-inputs
16387 `(("python-pbr" ,python-pbr-minimal)))
16388 (home-page
16389 "https://github.com/testing-cabal/linecache2")
16390 (synopsis "Backports of the linecache module")
16391 (description
16392 "The linecache module allows one to get any line from any file, while
16393 attempting to optimize internally, using a cache, the common case where many
16394 lines are read from a single file.")
16395 (license license:psfl)))
16396
16397 (define-public python2-linecache2
16398 (package-with-python2 python-linecache2))
16399
16400 (define-public python-traceback2
16401 (package
16402 (name "python-traceback2")
16403 (version "1.4.0")
16404 (source
16405 (origin
16406 (method url-fetch)
16407 (uri (pypi-uri "traceback2" version))
16408 (sha256
16409 (base32
16410 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
16411 (build-system python-build-system)
16412 (arguments
16413 `(;; python-traceback2 and python-unittest2 depend on one another.
16414 #:tests? #f))
16415 (native-inputs
16416 `(("python-pbr" ,python-pbr-minimal)))
16417 (propagated-inputs
16418 `(("python-linecache2" ,python-linecache2)))
16419 (home-page
16420 "https://github.com/testing-cabal/traceback2")
16421 (synopsis "Backports of the traceback module")
16422 (description
16423 "This module provides a standard interface to extract, format and print
16424 stack traces of Python programs. It exactly mimics the behavior of the Python
16425 interpreter when it prints a stack trace.")
16426 (license license:psfl)))
16427
16428 (define-public python2-traceback2
16429 (package-with-python2 python-traceback2))
16430
16431 (define-public python-ratelimiter
16432 (package
16433 (name "python-ratelimiter")
16434 (version "1.2.0")
16435 (source
16436 (origin
16437 (method url-fetch)
16438 (uri (pypi-uri "ratelimiter" version))
16439 (sha256
16440 (base32
16441 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
16442 (build-system python-build-system)
16443 (arguments
16444 '(#:tests? #f)) ; There are no tests in the pypi archive.
16445 (home-page "https://github.com/RazerM/ratelimiter")
16446 (synopsis "Simple rate limiting object")
16447 (description
16448 "The @code{ratelimiter} module ensures that an operation will not be
16449 executed more than a given number of times during a given period.")
16450 (license license:asl2.0)))
16451
16452 (define-public python2-ratelimiter
16453 (package-with-python2 python-ratelimiter))
16454
16455 (define-public python-dukpy
16456 (package
16457 (name "python-dukpy")
16458 (version "0.3")
16459 (source
16460 (origin
16461 (method git-fetch)
16462 (uri (git-reference
16463 (url "https://github.com/kovidgoyal/dukpy")
16464 (commit (string-append "v" version))))
16465 (file-name (git-file-name name version))
16466 (sha256
16467 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
16468 (build-system python-build-system)
16469 (home-page "https://github.com/kovidgoyal/dukpy")
16470 (synopsis "Run JavaScript in python")
16471 (description
16472 "dukpy is a JavaScript runtime environment for Python using the duktape
16473 embeddable JavaScript engine.")
16474 ;; Dukpy is licensed under MIT like the embedded duktape library,
16475 ;; with 'errors.c' as GPL3.
16476 (license (list license:expat license:gpl3))))
16477
16478 (define-public python2-dukpy
16479 (package-with-python2 python-dukpy))
16480
16481 (define-public python-jsonrpclib-pelix
16482 (package
16483 (name "python-jsonrpclib-pelix")
16484 (version "0.3.2")
16485 (source
16486 (origin
16487 (method url-fetch)
16488 (uri (pypi-uri "jsonrpclib-pelix" version))
16489 (sha256
16490 (base32
16491 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
16492 (build-system python-build-system)
16493 (arguments
16494 `(#:tests? #f)) ; no tests in PyPI tarball
16495 (home-page "https://github.com/tcalmant/jsonrpclib/")
16496 (synopsis "JSON-RPC 2.0 client library for Python")
16497 (description
16498 "This library implements the JSON-RPC v2.0
16499 specification (backwards-compatible) as a client library for Python. This
16500 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
16501 services.")
16502 (license license:asl2.0)))
16503
16504 (define-public python2-jsonrpclib-pelix
16505 (package-with-python2 python-jsonrpclib-pelix))
16506
16507 (define-public python-setuptools-scm-git-archive
16508 (package
16509 (name "python-setuptools-scm-git-archive")
16510 (version "1.0")
16511 (source
16512 (origin
16513 (method url-fetch)
16514 (uri (pypi-uri "setuptools_scm_git_archive" version))
16515 (sha256
16516 (base32
16517 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
16518 (build-system python-build-system)
16519 (native-inputs
16520 `(("python-pytest" ,python-pytest)))
16521 (propagated-inputs
16522 `(("python-setuptools-scm" ,python-setuptools-scm)))
16523 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
16524 (synopsis "Setuptools_scm plugin for git archives")
16525 (description
16526 "The setuptools_scm_git_archive package is a plugin to
16527 setuptools_scm, which supports obtaining versions from git archives that
16528 belong to tagged versions.")
16529 (license license:expat)))
16530
16531 (define-public python2-setuptools-scm-git-archive
16532 (package-with-python2 python-setuptools-scm-git-archive))
16533
16534 (define-public python-setuptools-git
16535 (package
16536 (name "python-setuptools-git")
16537 (version "1.2")
16538 (source
16539 (origin
16540 (method url-fetch)
16541 (uri (pypi-uri "setuptools-git" version))
16542 (sha256
16543 (base32
16544 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
16545 (build-system python-build-system)
16546 (arguments
16547 `(#:phases
16548 (modify-phases %standard-phases
16549 ;; This is needed for tests.
16550 (add-after 'unpack 'configure-git
16551 (lambda _
16552 (setenv "HOME" "/tmp")
16553 (invoke "git" "config" "--global" "user.email" "guix")
16554 (invoke "git" "config" "--global" "user.name" "guix")
16555 #t)))))
16556 (native-inputs
16557 `(("git" ,git-minimal)))
16558 (home-page "https://github.com/msabramo/setuptools-git")
16559 (synopsis "Setuptools revision control system plugin for Git")
16560 (description
16561 "This package provides a plugin for Setuptools for revision control with
16562 Git.")
16563 (license license:bsd-3)))
16564
16565 (define-public python-pyclipper
16566 (package
16567 (name "python-pyclipper")
16568 (version "1.1.0.post3")
16569 (source
16570 (origin
16571 (method url-fetch)
16572 (uri (pypi-uri "pyclipper" version ".zip"))
16573 (sha256
16574 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
16575 (modules '((guix build utils)))
16576 (snippet
16577 '(begin
16578 ;; This file is generated by Cython.
16579 (delete-file "pyclipper/pyclipper.cpp") #t))))
16580 (build-system python-build-system)
16581 (arguments
16582 `(#:phases
16583 (modify-phases %standard-phases
16584 (add-before 'build 'cythonize-sources
16585 (lambda _
16586 (with-directory-excursion "pyclipper"
16587 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
16588 (propagated-inputs
16589 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
16590 (native-inputs
16591 `(("python-cython" ,python-cython)
16592 ("python-pytest" ,python-pytest)
16593 ("python-pytest-runner" ,python-pytest-runner)
16594 ("python-unittest2" ,python-unittest2)
16595 ("unzip" ,unzip)))
16596 (home-page "https://github.com/greginvm/pyclipper")
16597 (synopsis "Wrapper for Angus Johnson's Clipper library")
16598 (description
16599 "Pyclipper is a Cython wrapper for the C++ translation of the
16600 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
16601 (license license:expat)))
16602
16603 (define-public python2-pyclipper
16604 (package-with-python2 python-pyclipper))
16605
16606 (define-public python2-booleanoperations
16607 (package
16608 (name "python2-booleanoperations")
16609 (version "0.7.1")
16610 (source
16611 (origin
16612 (method url-fetch)
16613 (uri (pypi-uri "booleanOperations" version ".zip"))
16614 (sha256
16615 (base32
16616 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
16617 (build-system python-build-system)
16618 (arguments
16619 `(#:python ,python-2))
16620 (native-inputs
16621 `(("unzip" ,unzip)
16622 ("python2-pytest" ,python2-pytest)
16623 ("python2-pytest-runner" ,python2-pytest-runner)))
16624 (propagated-inputs
16625 `(("python-fonttools" ,python2-fonttools)
16626 ("python-pyclipper" ,python2-pyclipper)
16627 ("python-ufolib" ,python2-ufolib)))
16628 (home-page "https://github.com/typemytype/booleanOperations")
16629 (synopsis "Boolean operations on paths")
16630 (description
16631 "BooleanOperations provides a Python library that enables
16632 boolean operations on paths.")
16633 (license license:expat)))
16634
16635 (define-public python-tempdir
16636 (package
16637 (name "python-tempdir")
16638 (version "0.7.1")
16639 (source
16640 (origin
16641 (method url-fetch)
16642 (uri (pypi-uri "tempdir" version))
16643 (sha256
16644 (base32
16645 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
16646 (build-system python-build-system)
16647 (home-page "https://pypi.org/project/tempdir/")
16648 (arguments
16649 ;; the package has no tests
16650 '(#:tests? #f))
16651 (synopsis "Python library for managing temporary directories")
16652 (description
16653 "This library manages temporary directories that are automatically
16654 deleted with all their contents when they are no longer needed. It is
16655 particularly convenient for use in tests.")
16656 (license license:expat)))
16657
16658 (define-public python2-tempdir
16659 (package-with-python2 python-tempdir))
16660
16661 (define-public python-activepapers
16662 (package
16663 (name "python-activepapers")
16664 (version "0.2.2")
16665 (source
16666 (origin
16667 (method url-fetch)
16668 (uri (pypi-uri "ActivePapers.Py" version))
16669 (sha256
16670 (base32
16671 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
16672 (build-system python-build-system)
16673 (arguments
16674 `(#:modules ((ice-9 ftw)
16675 (srfi srfi-1)
16676 (guix build utils)
16677 (guix build python-build-system))
16678
16679 #:phases
16680 (modify-phases %standard-phases
16681 (add-after 'unpack 'delete-python2-code
16682 (lambda _
16683 (for-each delete-file
16684 '("lib/activepapers/builtins2.py"
16685 "lib/activepapers/standardlib2.py"
16686 "lib/activepapers/utility2.py"))))
16687 (replace 'check
16688 (lambda _
16689 ;; Deactivate the test cases that download files
16690 (setenv "NO_NETWORK_ACCESS" "1")
16691 ;; For some strange reason, some tests fail if nosetests runs all
16692 ;; test modules in a single execution. They pass if each test
16693 ;; module is run individually.
16694 (for-each (lambda (filename)
16695 (invoke "nosetests"
16696 (string-append "tests/" filename)))
16697 (scandir "tests"
16698 (lambda (filename)
16699 (string-suffix? ".py" filename)))))))))
16700 (native-inputs
16701 `(("python-tempdir" ,python-tempdir)
16702 ("python-nose" ,python-nose)))
16703 (propagated-inputs
16704 `(("python-h5py" ,python-h5py)))
16705 (home-page "https://www.activepapers.org/")
16706 (synopsis "Executable papers for scientific computing")
16707 (description
16708 "ActivePapers is a tool for working with executable papers, which
16709 combine data, code, and documentation in single-file packages,
16710 suitable for publication as supplementary material or on repositories
16711 such as figshare or Zenodo.")
16712 (properties `((python2-variant . ,(delay python2-activepapers))))
16713 (license license:bsd-3)))
16714
16715 (define-public python2-activepapers
16716 (let ((base (package-with-python2
16717 (strip-python2-variant python-activepapers))))
16718 (package
16719 (inherit base)
16720 (arguments
16721 (substitute-keyword-arguments (package-arguments base)
16722 ((#:phases phases)
16723 `(modify-phases ,phases
16724 (delete 'delete-python2-code)
16725 (add-after 'unpack 'delete-python3-code
16726 (lambda _
16727 (for-each delete-file
16728 '("lib/activepapers/builtins3.py"
16729 "lib/activepapers/standardlib3.py"
16730 "lib/activepapers/utility3.py")))))))))))
16731
16732 (define-public python-semver
16733 (package
16734 (name "python-semver")
16735 (version "2.9.0")
16736 (source
16737 (origin
16738 (method url-fetch)
16739 (uri (pypi-uri "semver" version))
16740 (sha256
16741 (base32
16742 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
16743 (build-system python-build-system)
16744 (native-inputs
16745 `(("python-appdirs" ,python-appdirs)
16746 ("python-distlib" ,python-distlib)
16747 ("python-importlib-metadata" ,python-importlib-metadata)
16748 ("python-filelock" ,python-filelock)
16749 ("python-six" ,python-six)
16750 ("python-tox" ,python-tox)
16751 ("python-virtualenv" ,python-virtualenv)))
16752 (home-page "https://github.com/k-bx/python-semver")
16753 (synopsis "Python helper for Semantic Versioning")
16754 (description "This package provides a Python library for
16755 @url{Semantic Versioning, http://semver.org/}.")
16756 (license license:bsd-3)))
16757
16758 (define-public python2-semver
16759 (package-with-python2 python-semver))
16760
16761 (define-public python-pyro4
16762 (package
16763 (name "python-pyro4")
16764 (version "4.77")
16765 (source
16766 (origin
16767 (method url-fetch)
16768 (uri (pypi-uri "Pyro4" version))
16769 (sha256
16770 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
16771 (build-system python-build-system)
16772 (arguments
16773 '(#:tests? #f)) ;FIXME: Some tests require network access.
16774 (native-inputs
16775 `(("python-cloudpickle" ,python-cloudpickle)
16776 ("python-dill" ,python-dill)
16777 ("python-msgpack" ,python-msgpack)))
16778 (propagated-inputs
16779 `(("python-serpent" ,python-serpent)))
16780 (home-page "https://pyro4.readthedocs.io")
16781 (synopsis "Distributed object middleware for Python")
16782 (description
16783 "Pyro enables you to build applications in which objects can talk to each
16784 other over the network. You can just use normal Python method calls to call
16785 objects on other machines, also known as remote procedure calls (RPC).")
16786 (license license:expat)))
16787
16788 (define-public python2-pyro
16789 (package
16790 (name "python2-pyro")
16791 (version "3.16")
16792 (source
16793 (origin
16794 (method url-fetch)
16795 (uri (pypi-uri "Pyro" version))
16796 (file-name (string-append "Pyro-" version ".tar.gz"))
16797 (sha256
16798 (base32
16799 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
16800 (build-system python-build-system)
16801 (arguments
16802 ;; Pyro is not compatible with Python 3
16803 `(#:python ,python-2
16804 ;; Pyro has no test cases for automatic execution
16805 #:tests? #f))
16806 (home-page "https://pythonhosted.org/Pyro/")
16807 (synopsis "Distributed object manager for Python")
16808 (description "Pyro is a Distributed Object Technology system
16809 written in Python that is designed to be easy to use. It resembles
16810 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
16811 which is a system and language independent Distributed Object Technology
16812 and has much more to offer than Pyro or RMI. Pyro 3.x is no
16813 longer maintained. New projects should use Pyro4 instead, which
16814 is the new Pyro version that is actively developed.")
16815 (license license:expat)))
16816
16817 (define-public python2-scientific
16818 (package
16819 (name "python2-scientific")
16820 (version "2.9.4")
16821 (source
16822 (origin
16823 (method git-fetch)
16824 (uri (git-reference
16825 (url "https://github.com/khinsen/ScientificPython")
16826 (commit (string-append "rel" version))))
16827 (file-name (git-file-name name version))
16828 (sha256
16829 (base32
16830 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
16831 (build-system python-build-system)
16832 (inputs
16833 `(("netcdf" ,netcdf)))
16834 (propagated-inputs
16835 `(("python-numpy" ,python2-numpy-1.8)
16836 ("python-pyro" ,python2-pyro)))
16837 (arguments
16838 ;; ScientificPython is not compatible with Python 3
16839 `(#:python ,python-2
16840 #:tests? #f ; No test suite
16841 #:phases
16842 (modify-phases %standard-phases
16843 (replace 'build
16844 (lambda* (#:key inputs #:allow-other-keys)
16845 (invoke "python" "setup.py" "build"
16846 (string-append "--netcdf_prefix="
16847 (assoc-ref inputs "netcdf"))))))))
16848 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
16849 (synopsis "Python modules for scientific computing")
16850 (description "ScientificPython is a collection of Python modules that are
16851 useful for scientific computing. Most modules are rather general (Geometry,
16852 physical units, automatic derivatives, ...) whereas others are more
16853 domain-specific (e.g. netCDF and PDB support). The library is currently
16854 not actively maintained and works only with Python 2 and NumPy < 1.9.")
16855 (license license:cecill-c)))
16856
16857 (define-public python2-mmtk
16858 (package
16859 (name "python2-mmtk")
16860 (version "2.7.12")
16861 (source
16862 (origin
16863 (method git-fetch)
16864 (uri (git-reference
16865 (url "https://github.com/khinsen/MMTK")
16866 (commit (string-append "rel" version))))
16867 (file-name (git-file-name name version))
16868 (sha256
16869 (base32
16870 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
16871 (build-system python-build-system)
16872 (native-inputs
16873 `(("netcdf" ,netcdf)))
16874 (propagated-inputs
16875 `(("python-scientific" ,python2-scientific)
16876 ("python-tkinter" ,python-2 "tk")))
16877 (arguments
16878 `(#:python ,python-2
16879 #:tests? #f
16880 #:phases
16881 (modify-phases %standard-phases
16882 (add-before 'build 'includes-from-scientific
16883 (lambda* (#:key inputs #:allow-other-keys)
16884 (mkdir-p "Include/Scientific")
16885 (copy-recursively
16886 (string-append
16887 (assoc-ref inputs "python-scientific")
16888 "/include/python2.7/Scientific")
16889 "Include/Scientific"))))))
16890 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
16891 (synopsis "Python library for molecular simulation")
16892 (description "MMTK is a library for molecular simulations with an emphasis
16893 on biomolecules. It provides widely used methods such as Molecular Dynamics
16894 and normal mode analysis, but also basic routines for implementing new methods
16895 for simulation and analysis. The library is currently not actively maintained
16896 and works only with Python 2 and NumPy < 1.9.")
16897 (license license:cecill-c)))
16898
16899 (define-public python-phonenumbers
16900 (package
16901 (name "python-phonenumbers")
16902 (version "8.9.1")
16903 (source
16904 (origin
16905 (method url-fetch)
16906 (uri (pypi-uri "phonenumbers" version))
16907 (sha256
16908 (base32
16909 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
16910 (build-system python-build-system)
16911 (home-page
16912 "https://github.com/daviddrysdale/python-phonenumbers")
16913 (synopsis
16914 "Python library for dealing with international phone numbers")
16915 (description
16916 "This package provides a Python port of Google's libphonenumber library.")
16917 (license license:asl2.0)))
16918
16919 (define-public python2-phonenumbers
16920 (package-with-python2 python-phonenumbers))
16921
16922 (define-public python-send2trash
16923 (package
16924 (name "python-send2trash")
16925 (version "1.5.0")
16926 (source
16927 (origin (method git-fetch)
16928 ;; Source tarball on PyPI doesn't include tests.
16929 (uri (git-reference
16930 (url "https://github.com/hsoft/send2trash")
16931 (commit version)))
16932 (file-name (git-file-name name version))
16933 (sha256
16934 (base32
16935 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
16936 (build-system python-build-system)
16937 (arguments
16938 '(#:phases
16939 (modify-phases %standard-phases
16940 (add-before 'check 'pre-check
16941 (lambda _
16942 (mkdir-p "/tmp/foo")
16943 (setenv "HOME" "/tmp/foo")
16944 #t)))))
16945 (home-page "https://github.com/hsoft/send2trash")
16946 (synopsis "Send files to the user's @file{~/Trash} directory")
16947 (description "This package provides a Python library to send files to the
16948 user's @file{~/Trash} directory.")
16949 (properties `((python2-variant . ,(delay python2-send2trash))))
16950 (license license:bsd-3)))
16951
16952 (define-public python2-send2trash
16953 (package
16954 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
16955 (arguments
16956 (substitute-keyword-arguments (package-arguments python-send2trash)
16957 ((#:phases phases)
16958 `(modify-phases ,phases
16959 (add-before 'check 'setenv
16960 (lambda _
16961 (setenv "PYTHONPATH"
16962 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
16963 #t))))))))
16964
16965 (define-public python-yapf
16966 (package
16967 (name "python-yapf")
16968 (version "0.29.0")
16969 (source
16970 (origin
16971 (method url-fetch)
16972 (uri (pypi-uri "yapf" version))
16973 (sha256
16974 (base32
16975 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
16976 (build-system python-build-system)
16977 (home-page "https://github.com/google/yapf")
16978 (synopsis "Formatter for Python code")
16979 (description "YAPF is a formatter for Python code. It's based off of
16980 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
16981 takes the code and reformats it to the best formatting that conforms to the
16982 style guide, even if the original code didn't violate the style guide.")
16983 (license license:asl2.0)))
16984
16985 (define-public python2-yapf
16986 (package-with-python2 python-yapf))
16987
16988 (define-public python-gyp
16989 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16990 (revision "0"))
16991 (package
16992 (name "python-gyp")
16993 ;; Google does not release versions,
16994 ;; based on second most recent commit date.
16995 (version (git-version "0.0.0" revision commit))
16996 (source
16997 (origin
16998 ;; Google does not release tarballs,
16999 ;; git checkout is needed.
17000 (method git-fetch)
17001 (uri (git-reference
17002 (url "https://chromium.googlesource.com/external/gyp")
17003 (commit commit)))
17004 (file-name (git-file-name name version))
17005 (sha256
17006 (base32
17007 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
17008 (build-system python-build-system)
17009 (home-page "https://gyp.gsrc.io/")
17010 (synopsis "GYP is a Meta-Build system")
17011 (description
17012 "GYP builds build systems for large, cross platform applications.
17013 It can be used to generate XCode projects, Visual Studio projects, Ninja build
17014 files, and Makefiles.")
17015 (license license:bsd-3))))
17016
17017 (define-public python2-gyp
17018 (package-with-python2 python-gyp))
17019
17020 (define-public python-whatever
17021 (package
17022 (name "python-whatever")
17023 (version "0.6")
17024 (source
17025 (origin
17026 (method git-fetch)
17027 (uri (git-reference
17028 (url "https://github.com/Suor/whatever")
17029 (commit version)))
17030 (file-name (git-file-name name version))
17031 (sha256
17032 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
17033 (build-system python-build-system)
17034 (arguments
17035 `(#:phases
17036 (modify-phases %standard-phases
17037 (replace 'check
17038 (lambda _
17039 (invoke "py.test"))))))
17040 (native-inputs
17041 `(("python-pytest" ,python-pytest)))
17042 (home-page "https://github.com/Suor/whatever")
17043 (synopsis "Make anonymous functions by partial application of operators")
17044 (description "@code{whatever} provides an easy way to make anonymous
17045 functions by partial application of operators.")
17046 (license license:bsd-3)))
17047
17048 (define-public python2-whatever
17049 (package-with-python2 python-whatever))
17050
17051 (define-public python-funcy
17052 (package
17053 (name "python-funcy")
17054 (version "1.11")
17055 (source
17056 (origin
17057 (method git-fetch)
17058 (uri (git-reference
17059 (url "https://github.com/Suor/funcy")
17060 (commit version)))
17061 (sha256
17062 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
17063 (file-name (git-file-name name version))))
17064 (build-system python-build-system)
17065 (arguments
17066 `(#:phases
17067 (modify-phases %standard-phases
17068 (replace 'check
17069 (lambda _
17070 (invoke "py.test"))))))
17071 (native-inputs
17072 `(("python-pytest" ,python-pytest)
17073 ("python-whatever" ,python-whatever)))
17074 (home-page "https://github.com/Suor/funcy")
17075 (synopsis "Functional tools")
17076 (description "@code{funcy} is a library that provides functional tools.
17077 Examples are:
17078 @enumerate
17079 @item merge - Merges collections of the same type
17080 @item walk - Type-preserving map
17081 @item select - Selects a part of a collection
17082 @item take - Takes the first n items of a collection
17083 @item first - Takes the first item of a collection
17084 @item remove - Predicated-removes items of a collection
17085 @item concat - Concatenates two collections
17086 @item flatten - Flattens a collection with subcollections
17087 @item distinct - Returns only distinct items
17088 @item split - Predicated-splits a collection
17089 @item split_at - Splits a collection at a given item
17090 @item group_by - Groups items by group
17091 @item pairwise - Pairs off adjacent items
17092 @item partial - Partially-applies a function
17093 @item curry - Curries a function
17094 @item compose - Composes functions
17095 @item complement - Complements a predicate
17096 @item all_fn - \"all\" with predicate
17097 @end enumerate")
17098 (license license:bsd-3)))
17099
17100 (define-public python2-funcy
17101 (package-with-python2 python-funcy))
17102
17103 (define-public python-isoweek
17104 (package
17105 (name "python-isoweek")
17106 (version "1.3.3")
17107 (source
17108 (origin
17109 (method url-fetch)
17110 (uri (pypi-uri "isoweek" version))
17111 (sha256
17112 (base32
17113 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
17114 (build-system python-build-system)
17115 (home-page "https://github.com/gisle/isoweek")
17116 (synopsis "Objects representing a week")
17117 (description "The @code{isoweek} module provide the class Week that
17118 implements the week definition of ISO 8601. This standard also defines
17119 a notation for identifying weeks; yyyyWww (where the W is a literal).
17120 Week instances stringify to this form.")
17121 (license license:bsd-3)))
17122
17123 (define-public python2-isoweek
17124 (package-with-python2 python-isoweek))
17125
17126 (define-public python-tokenize-rt
17127 (package
17128 (name "python-tokenize-rt")
17129 (version "2.0.1")
17130 (source
17131 (origin
17132 (method url-fetch)
17133 (uri (pypi-uri "tokenize-rt" version))
17134 (sha256
17135 (base32
17136 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
17137 (build-system python-build-system)
17138 (home-page "https://github.com/asottile/tokenize-rt")
17139 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
17140 (description
17141 "This Python library is a wrapper around @code{tokenize} from the Python
17142 standard library. It provides two additional tokens @code{ESCAPED_NL} and
17143 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
17144 and @code{tokens_to_src} to roundtrip.")
17145 (license license:expat)))
17146
17147 (define-public python-future-fstrings
17148 (package
17149 (name "python-future-fstrings")
17150 (version "0.4.1")
17151 (source
17152 (origin
17153 (method url-fetch)
17154 (uri (pypi-uri "future_fstrings" version))
17155 (sha256
17156 (base32
17157 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
17158 (build-system python-build-system)
17159 (propagated-inputs
17160 `(("python-tokenize-rt" ,python-tokenize-rt)))
17161 (home-page "https://github.com/asottile/future-fstrings")
17162 (synopsis "Backport of fstrings to Python < 3.6")
17163 (description
17164 "This package provides a UTF-8 compatible encoding
17165 @code{future_fstrings}, which performs source manipulation. It decodes the
17166 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
17167 @code{f} strings.")
17168 (license license:expat)))
17169
17170 (define-public python-typed-ast
17171 (package
17172 (name "python-typed-ast")
17173 (version "1.4.0")
17174 (source
17175 (origin
17176 (method git-fetch)
17177 (uri (git-reference
17178 (url "https://github.com/python/typed_ast")
17179 (commit version)))
17180 (sha256
17181 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
17182 (file-name (git-file-name name version))))
17183 (build-system python-build-system)
17184 (arguments
17185 `(#:modules ((guix build utils)
17186 (guix build python-build-system)
17187 (ice-9 ftw)
17188 (srfi srfi-1)
17189 (srfi srfi-26))
17190 #:phases
17191 (modify-phases %standard-phases
17192 (replace 'check
17193 (lambda _
17194 (let ((cwd (getcwd)))
17195 (setenv "PYTHONPATH"
17196 (string-append cwd "/build/"
17197 (find (cut string-prefix? "lib" <>)
17198 (scandir (string-append cwd "/build")))
17199 ":"
17200 (getenv "PYTHONPATH"))))
17201 (invoke "pytest")
17202 #t)))))
17203 (native-inputs `(("python-pytest" ,python-pytest)))
17204 (home-page "https://github.com/python/typed_ast")
17205 (synopsis "Fork of Python @code{ast} modules with type comment support")
17206 (description "This package provides a parser similar to the standard
17207 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
17208 include PEP 484 type comments and are independent of the version of Python
17209 under which they are run. The @code{typed_ast} parsers produce the standard
17210 Python AST (plus type comments), and are both fast and correct, as they are
17211 based on the CPython 2.7 and 3.7 parsers.")
17212 ;; See the file "LICENSE" for the details.
17213 (license (list license:psfl
17214 license:asl2.0
17215 license:expat)))) ;ast27/Parser/spark.py
17216
17217 (define-public python-typing
17218 (package
17219 (name "python-typing")
17220 (version "3.7.4.1")
17221 (source
17222 (origin
17223 (method url-fetch)
17224 (uri (pypi-uri "typing" version))
17225 (sha256
17226 (base32
17227 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
17228 (build-system python-build-system)
17229 (home-page "https://docs.python.org/3/library/typing.html")
17230 (synopsis "Type hints for Python")
17231 (description "This is a backport of the standard library @code{typing}
17232 module to Python versions older than 3.5. Typing defines a standard notation
17233 for Python function and variable type annotations. The notation can be used
17234 for documenting code in a concise, standard format, and it has been designed
17235 to also be used by static and runtime type checkers, static analyzers, IDEs
17236 and other tools.")
17237 (license license:psfl)))
17238
17239 (define-public python2-typing
17240 (package-with-python2 python-typing))
17241
17242 (define-public python-typing-extensions
17243 (package
17244 (name "python-typing-extensions")
17245 (version "3.7.4.2")
17246 (source
17247 (origin
17248 (method url-fetch)
17249 (uri (pypi-uri "typing_extensions" version))
17250 (sha256
17251 (base32
17252 "1bk9b60s3rm1c8cwhv0bl3gh0x43153xxa6jpyllk9mc7jd5ivkr"))))
17253 (build-system python-build-system)
17254 (home-page
17255 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
17256 (synopsis "Experimental type hints for Python")
17257 (description
17258 "The typing_extensions module contains additional @code{typing} hints not
17259 yet present in the of the @code{typing} standard library.
17260 Included are implementations of:
17261 @enumerate
17262 @item ClassVar
17263 @item ContextManager
17264 @item Counter
17265 @item DefaultDict
17266 @item Deque
17267 @item NewType
17268 @item NoReturn
17269 @item overload
17270 @item Protocol
17271 @item runtime
17272 @item Text
17273 @item Type
17274 @item TYPE_CHECKING
17275 @item AsyncGenerator
17276 @end enumerate\n")
17277 (license license:psfl)))
17278
17279 (define-public bpython
17280 (package
17281 (name "bpython")
17282 (version "0.18")
17283 (source
17284 (origin
17285 (method url-fetch)
17286 (uri (pypi-uri "bpython" version))
17287 (sha256
17288 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
17289 (build-system python-build-system)
17290 (arguments
17291 `(#:phases
17292 (modify-phases %standard-phases
17293 (add-after 'unpack 'remove-failing-test
17294 (lambda _
17295 ;; Remove failing test. FIXME: make it pass
17296 (delete-file "bpython/test/test_args.py")
17297 #t))
17298 (add-after 'wrap 'add-aliases
17299 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
17300 (lambda* (#:key outputs #:allow-other-keys)
17301 (let ((out (assoc-ref outputs "out")))
17302 (for-each
17303 (lambda (old new)
17304 (symlink old (string-append out "/bin/" new)))
17305 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
17306 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
17307 #t)))))
17308 (propagated-inputs
17309 `(("python-pygments" ,python-pygments)
17310 ("python-requests" ,python-requests)
17311 ("python-babel" ,python-babel) ; optional, for internationalization
17312 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
17313 ("python-greenlet" ,python-greenlet)
17314 ("python-urwid" ,python-urwid) ; for bpython-urwid only
17315 ("python-six" ,python-six)))
17316 (native-inputs
17317 `(("python-sphinx" ,python-sphinx)
17318 ("python-mock" ,python-mock)))
17319 (home-page "https://bpython-interpreter.org/")
17320 (synopsis "Fancy interface to the Python interpreter")
17321 (description "Bpython is a fancy interface to the Python
17322 interpreter. bpython's main features are
17323
17324 @enumerate
17325 @item in-line syntax highlighting,
17326 @item readline-like autocomplete with suggestions displayed as you type,
17327 @item expected parameter list for any Python function,
17328 @item \"rewind\" function to pop the last line of code from memory and
17329 re-evaluate,
17330 @item send the code you've entered off to a pastebin,
17331 @item save the code you've entered to a file, and
17332 @item auto-indentation.
17333 @end enumerate")
17334 (license license:expat)))
17335
17336 (define-public bpython2
17337 (let ((base (package-with-python2
17338 (strip-python2-variant bpython))))
17339 (package (inherit base)
17340 (name "bpython2")
17341 (arguments
17342 `(#:python ,python-2
17343 #:phases
17344 (modify-phases %standard-phases
17345 (add-after 'unpack 'remove-failing-test
17346 (lambda _
17347 ;; Remove failing test. FIXME: make it pass
17348 (delete-file "bpython/test/test_args.py")
17349 ;; Disable failing test-cases (renaming inhibits they are
17350 ;; discovered)
17351 (substitute* "bpython/test/test_curtsies_repl.py"
17352 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
17353 (string-append a "xxx_off_" b))
17354 (("^(\\s*def )(test_complex\\W)" _ a b)
17355 (string-append a "xxx_off_" b)))
17356 #t))
17357 (add-before 'build 'rename-scripts
17358 ;; rename the scripts to bypthon2, bpdb2, etc.
17359 (lambda _
17360 (substitute* "setup.py"
17361 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
17362 (string-append name "2" rest "\n"))
17363 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
17364 (string-append name "2" (or sub "") rest "\n")))
17365 #t))))))))
17366
17367 (define-public python-pyinotify
17368 (package
17369 (name "python-pyinotify")
17370 (version "0.9.6")
17371 (source (origin
17372 (method url-fetch)
17373 (uri (pypi-uri "pyinotify" version))
17374 (sha256
17375 (base32
17376 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
17377 (build-system python-build-system)
17378 (arguments `(#:tests? #f)) ;no tests
17379 (home-page "https://github.com/seb-m/pyinotify")
17380 (synopsis "Python library for monitoring inotify events")
17381 (description
17382 "@code{pyinotify} provides a Python interface for monitoring
17383 file system events on Linux.")
17384 (license license:expat)))
17385
17386 (define-public python2-pyinotify
17387 (package-with-python2 python-pyinotify))
17388
17389 ;; Ada parser uses this version.
17390 (define-public python2-quex-0.67.3
17391 (package
17392 (name "python2-quex")
17393 (version "0.67.3")
17394 (source
17395 (origin
17396 (method url-fetch)
17397 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
17398 (version-major+minor version)
17399 "/quex-" version ".zip"))
17400 (sha256
17401 (base32
17402 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
17403 (build-system python-build-system)
17404 (native-inputs
17405 `(("unzip" ,unzip)))
17406 (arguments
17407 `(#:python ,python-2
17408 #:tests? #f
17409 #:phases
17410 (modify-phases %standard-phases
17411 (delete 'configure)
17412 (delete 'build)
17413 (replace 'install
17414 (lambda* (#:key outputs #:allow-other-keys)
17415 (let* ((out (assoc-ref outputs "out"))
17416 (share/quex (string-append out "/share/quex"))
17417 (bin (string-append out "/bin")))
17418 (copy-recursively "." share/quex)
17419 (mkdir-p bin)
17420 (symlink (string-append share/quex "/quex-exe.py")
17421 (string-append bin "/quex"))
17422 #t))))))
17423 (native-search-paths
17424 (list (search-path-specification
17425 (variable "QUEX_PATH")
17426 (files '("share/quex")))))
17427 (home-page "http://quex.sourceforge.net/")
17428 (synopsis "Lexical analyzer generator in Python")
17429 (description "@code{quex} is a lexical analyzer generator in Python.")
17430 (license license:lgpl2.1+))) ; Non-military
17431
17432 (define-public python2-quex
17433 (package (inherit python2-quex-0.67.3)
17434 (name "python2-quex")
17435 (version "0.68.1")
17436 (source
17437 (origin
17438 (method url-fetch)
17439 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
17440 (sha256
17441 (base32
17442 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
17443 (file-name (string-append name "-" version ".tar.gz"))))))
17444
17445 (define-public python-more-itertools
17446 (package
17447 (name "python-more-itertools")
17448 (version "8.2.0")
17449 (source
17450 (origin
17451 (method url-fetch)
17452 (uri (pypi-uri "more-itertools" version))
17453 (sha256
17454 (base32
17455 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
17456 (build-system python-build-system)
17457 (home-page "https://github.com/erikrose/more-itertools")
17458 (synopsis "More routines for operating on iterables, beyond itertools")
17459 (description "Python's built-in @code{itertools} module implements a
17460 number of iterator building blocks inspired by constructs from APL, Haskell,
17461 and SML. @code{more-itertools} includes additional building blocks for
17462 working with iterables.")
17463 (properties `((python2-variant . ,(delay python2-more-itertools))))
17464 (license license:expat)))
17465
17466 ;; The 5.x series are the last versions supporting Python 2.7.
17467 (define-public python2-more-itertools
17468 (package
17469 (inherit python-more-itertools)
17470 (name "python2-more-itertools")
17471 (version "5.0.0")
17472 (source (origin
17473 (method url-fetch)
17474 (uri (pypi-uri "more-itertools" version))
17475 (sha256
17476 (base32
17477 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
17478 (arguments
17479 `(#:python ,python-2))
17480 (propagated-inputs
17481 `(("python2-six" ,python2-six-bootstrap)))))
17482
17483 (define-public python-latexcodec
17484 (package
17485 (name "python-latexcodec")
17486 (version "1.0.7")
17487 (source
17488 (origin
17489 (method url-fetch)
17490 (uri (pypi-uri "latexcodec" version))
17491 (sha256
17492 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
17493 (build-system python-build-system)
17494 (inputs
17495 `(("python-six" ,python-six)))
17496 (home-page "https://readthedocs.org/projects/latexcodec/")
17497 (synopsis "Work with LaTeX code in Python")
17498 (description "Lexer and codec to work with LaTeX code in Python.")
17499 (license license:expat)))
17500
17501 (define-public python-pybtex
17502 (package
17503 (name "python-pybtex")
17504 (version "0.22.2")
17505 (source
17506 (origin
17507 (method url-fetch)
17508 (uri (pypi-uri "pybtex" version))
17509 (sha256
17510 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
17511 (build-system python-build-system)
17512 (native-inputs
17513 `(("python-nose" ,python-nose)))
17514 (inputs
17515 `(("python-latexcodec" ,python-latexcodec)
17516 ("python-pyyaml" ,python-pyyaml)
17517 ("python-six" ,python-six)))
17518 (arguments
17519 `(#:test-target "nosetests"))
17520 (home-page "https://pybtex.org/")
17521 (synopsis "BibTeX-compatible bibliography processor")
17522 (description "Pybtex is a BibTeX-compatible bibliography processor written
17523 in Python. You can simply type pybtex instead of bibtex.")
17524 (license license:expat)))
17525
17526 (define-public python-onetimepass
17527 (package
17528 (name "python-onetimepass")
17529 (version "1.0.1")
17530 (source
17531 (origin
17532 (method url-fetch)
17533 (uri (pypi-uri "onetimepass" version))
17534 (sha256
17535 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
17536 (build-system python-build-system)
17537 (propagated-inputs `(("python-six" ,python-six)))
17538 (home-page "https://github.com/tadeck/onetimepass/")
17539 (synopsis "One-time password library")
17540 (description "Python one-time password library for HMAC-based (HOTP) and
17541 time-based (TOTP) passwords.")
17542 (license license:expat)))
17543
17544 (define-public python-parso
17545 (package
17546 (name "python-parso")
17547 (version "0.7.1")
17548 (source
17549 (origin
17550 (method url-fetch)
17551 (uri (pypi-uri "parso" version))
17552 (sha256
17553 (base32 "1f9fc99mjx0h2ad4mgsid728nnmw58hvnq3411g8ljlr9dr49fna"))))
17554 (native-inputs
17555 `(("python-pytest" ,python-pytest)))
17556 (build-system python-build-system)
17557 (arguments
17558 `(#:phases (modify-phases %standard-phases
17559 (replace 'check
17560 (lambda _ (invoke "pytest" "-vv"))))))
17561 (home-page "https://github.com/davidhalter/parso")
17562 (synopsis "Python Parser")
17563 (description "Parso is a Python parser that supports error recovery and
17564 round-trip parsing for different Python versions (in multiple Python versions).
17565 Parso is also able to list multiple syntax errors in your Python file.")
17566 (license license:expat)))
17567
17568 (define-public python2-parso
17569 (package-with-python2 python-parso))
17570
17571 (define-public python-async-generator
17572 (package
17573 (name "python-async-generator")
17574 (version "1.10")
17575 (source
17576 (origin
17577 (method url-fetch)
17578 (uri (pypi-uri "async_generator" version))
17579 (sha256
17580 (base32
17581 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
17582 (build-system python-build-system)
17583 (native-inputs
17584 `(("python-pytest" ,python-pytest)))
17585 (home-page "https://github.com/python-trio/async_generator")
17586 (synopsis "Async generators and context managers for Python 3.5+")
17587 (description "@code{async_generator} back-ports Python 3.6's native async
17588 generators and Python 3.7's context managers into Python 3.5.")
17589 ;; Dual licensed.
17590 (license (list license:expat license:asl2.0))))
17591
17592 (define-public python-async-timeout
17593 (package
17594 (name "python-async-timeout")
17595 (version "3.0.1")
17596 (source
17597 (origin
17598 (method url-fetch)
17599 (uri (pypi-uri "async-timeout" version))
17600 (sha256
17601 (base32
17602 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
17603 (build-system python-build-system)
17604 (home-page "https://github.com/aio-libs/async_timeout/")
17605 (synopsis "Timeout context manager for asyncio programs")
17606 (description "@code{async-timeout} provides a timeout timeout context
17607 manager compatible with @code{asyncio}.")
17608 (license license:asl2.0)))
17609
17610 (define-public python-glob2
17611 (package
17612 (name "python-glob2")
17613 (version "0.7")
17614 (source
17615 (origin
17616 (method git-fetch)
17617 (uri (git-reference
17618 (url "https://github.com/miracle2k/python-glob2")
17619 (commit (string-append "v" version))))
17620 (file-name (git-file-name name version))
17621 (sha256
17622 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
17623 (build-system python-build-system)
17624 (home-page "https://github.com/miracle2k/python-glob2/")
17625 (synopsis "Extended Version of the python buildin glob module")
17626 (description "This is an extended version of the Python
17627 @url{http://docs.python.org/library/glob.html, built-in glob module} which
17628 adds:
17629
17630 @itemize
17631 @item The ability to capture the text matched by glob patterns, and return
17632 those matches alongside the file names.
17633 @item A recursive @code{**} globbing syntax, akin for example to the
17634 @code{globstar} option of Bash.
17635 @item The ability to replace the file system functions used, in order to glob
17636 on virtual file systems.
17637 @item Compatible with Python 2 and Python 3 (tested with 3.3).
17638 @end itemize
17639
17640 Glob2 currently based on the glob code from Python 3.3.1.")
17641 (license license:bsd-2)))
17642
17643 (define-public python2-glob2
17644 (package-with-python2 python-glob2))
17645
17646 (define-public python-gipc
17647 (package
17648 (name "python-gipc")
17649 (version "0.6.0")
17650 (source
17651 (origin
17652 (method url-fetch)
17653 (uri (pypi-uri "gipc" version ".zip"))
17654 (sha256
17655 (base32
17656 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
17657 (build-system python-build-system)
17658 (native-inputs
17659 `(("unzip" ,unzip)))
17660 (propagated-inputs
17661 `(("python-gevent" ,python-gevent)))
17662 (home-page "https://gehrcke.de/gipc/")
17663 (synopsis "Child process management in the context of gevent")
17664 (description "Usage of Python's multiprocessing package in a
17665 gevent-powered application may raise problems. With @code{gipc},
17666 process-based child processes can safely be created anywhere within a
17667 gevent-powered application.")
17668 (license license:expat)))
17669
17670 (define-public python2-gipc
17671 (package-with-python2 python-gipc))
17672
17673 (define-public python-fusepy
17674 (package
17675 (name "python-fusepy")
17676 (version "2.0.4")
17677 (source
17678 (origin
17679 (method url-fetch)
17680 (uri (pypi-uri "fusepy" version))
17681 (sha256
17682 (base32
17683 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
17684 (build-system python-build-system)
17685 (arguments
17686 `(#:phases
17687 (modify-phases %standard-phases
17688 (add-before 'build 'set-library-file-name
17689 (lambda* (#:key inputs #:allow-other-keys)
17690 (let ((fuse (assoc-ref inputs "fuse")))
17691 (substitute* "fuse.py"
17692 (("find_library\\('fuse'\\)")
17693 (string-append "'" fuse "/lib/libfuse.so'")))
17694 #t))))))
17695 (propagated-inputs
17696 `(("fuse" ,fuse)))
17697 (home-page "https://github.com/fusepy/fusepy")
17698 (synopsis "Simple ctypes bindings for FUSE")
17699 (description "Python module that provides a simple interface to FUSE and
17700 MacFUSE. The binding is created using the standard @code{ctypes} library.")
17701 (license license:isc)))
17702
17703 (define-public python2-fusepy
17704 (package-with-python2 python-fusepy))
17705
17706 (define-public python-fusepyng
17707 (package
17708 (name "python-fusepyng")
17709 (version "1.0.7")
17710 (source
17711 (origin
17712 (method url-fetch)
17713 (uri (pypi-uri "fusepyng" version))
17714 (sha256
17715 (base32
17716 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
17717 (build-system python-build-system)
17718 (arguments
17719 '(#:phases
17720 (modify-phases %standard-phases
17721 (add-after 'unpack 'set-libfuse-path
17722 (lambda* (#:key inputs #:allow-other-keys)
17723 (let ((fuse (assoc-ref inputs "fuse")))
17724 (substitute* "fusepyng.py"
17725 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
17726 (string-append "\"" fuse "/lib/libfuse.so\""))))
17727 #t)))))
17728 (inputs
17729 `(("fuse" ,fuse)))
17730 (propagated-inputs
17731 `(("python-paramiko" ,python-paramiko)))
17732 (home-page "https://github.com/rianhunter/fusepyng")
17733 (synopsis "Simple ctypes bindings for FUSE")
17734 (description "@code{fusepyng} is a Python module that provides a simple
17735 interface to FUSE on various operating systems. It's just one file and is
17736 implemented using @code{ctypes}.")
17737 (license license:isc)))
17738
17739 (define-public python2-gdrivefs
17740 (package
17741 (name "python2-gdrivefs")
17742 (version "0.14.9")
17743 (source
17744 (origin
17745 (method url-fetch)
17746 (uri (pypi-uri "gdrivefs" version))
17747 (sha256
17748 (base32
17749 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
17750 (build-system python-build-system)
17751 (arguments
17752 `(#:python ,python-2
17753 #:phases
17754 (modify-phases %standard-phases
17755 (add-before 'build 'patch-setup-py
17756 (lambda _
17757 ;; Update requirements from dependency==version
17758 ;; to dependency>=version
17759 (substitute* "gdrivefs/resources/requirements.txt"
17760 (("==") ">="))
17761 #t)))))
17762 (native-inputs
17763 `(("python2-gipc" ,python2-gipc)
17764 ("python2-gevent" ,python2-gevent)
17765 ("python2-greenlet" ,python2-greenlet)
17766 ("python2-httplib2" ,python2-httplib2)
17767 ("python2-uritemplate" ,python2-uritemplate)
17768 ("python2-oauth2client" ,python2-oauth2client)
17769 ("python2-six" ,python2-six)))
17770 (propagated-inputs
17771 `(("python2-dateutil" ,python2-dateutil)
17772 ("python2-fusepy" ,python2-fusepy)
17773 ("python2-google-api-client" ,python2-google-api-client)))
17774 (home-page "https://github.com/dsoprea/GDriveFS")
17775 (synopsis "Mount Google Drive as a local file system")
17776 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
17777 under Python 2.7.")
17778 (license license:gpl2)))
17779
17780 (define-public python-userspacefs
17781 (package
17782 (name "python-userspacefs")
17783 (version "1.0.13")
17784 (source
17785 (origin
17786 (method url-fetch)
17787 (uri (pypi-uri "userspacefs" version))
17788 (sha256
17789 (base32
17790 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
17791 (build-system python-build-system)
17792 (propagated-inputs
17793 `(("python-fusepyng" ,python-fusepyng)))
17794 (home-page "https://github.com/rianhunter/userspacefs")
17795 (synopsis "User-space file systems for Python")
17796 (description
17797 "@code{userspacefs} is a library that allows you to easily write
17798 user-space file systems in Python.")
17799 (license license:gpl3+)))
17800
17801 (define-public pybind11
17802 (package
17803 (name "pybind11")
17804 (version "2.4.3")
17805 (source (origin
17806 (method git-fetch)
17807 (uri (git-reference
17808 (url "https://github.com/pybind/pybind11")
17809 (commit (string-append "v" version))))
17810 (sha256
17811 (base32
17812 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
17813 (file-name (git-file-name name version))))
17814 (build-system cmake-build-system)
17815 (native-inputs
17816 `(("python" ,python-wrapper)
17817
17818 ;; The following dependencies are used for tests.
17819 ("python-pytest" ,python-pytest)
17820 ("catch" ,catch-framework2-1)
17821 ("eigen" ,eigen)))
17822 (arguments
17823 `(#:configure-flags
17824 (list (string-append "-DCATCH_INCLUDE_DIR="
17825 (assoc-ref %build-inputs "catch")
17826 "/include/catch"))
17827
17828 #:phases (modify-phases %standard-phases
17829 (add-after 'install 'install-python
17830 (lambda* (#:key outputs #:allow-other-keys)
17831 (let ((out (assoc-ref outputs "out")))
17832 (with-directory-excursion "../source"
17833 (setenv "PYBIND11_USE_CMAKE" "yes")
17834 (invoke "python" "setup.py" "install"
17835 "--single-version-externally-managed"
17836 "--root=/"
17837 (string-append "--prefix=" out)))))))
17838
17839 #:test-target "check"))
17840 (home-page "https://github.com/pybind/pybind11/")
17841 (synopsis "Seamless operability between C++11 and Python")
17842 (description
17843 "@code{pybind11} is a lightweight header-only library that exposes C++
17844 types in Python and vice versa, mainly to create Python bindings of existing
17845 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
17846 library: to minimize boilerplate code in traditional extension modules by
17847 inferring type information using compile-time introspection.")
17848 (license license:bsd-3)))
17849
17850 (define-public python-fasteners
17851 (package
17852 (name "python-fasteners")
17853 (version "0.15")
17854 (source
17855 (origin
17856 (method url-fetch)
17857 (uri (pypi-uri "fasteners" version))
17858 (sha256
17859 (base32
17860 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
17861 (build-system python-build-system)
17862 (propagated-inputs
17863 `(("python-monotonic" ,python-monotonic)
17864 ("python-six" ,python-six)))
17865 (native-inputs
17866 `(("python-testtools" ,python-testtools)))
17867 (home-page "https://github.com/harlowja/fasteners")
17868 (synopsis "Python package that provides useful locks")
17869 (description
17870 "This package provides a Python program that provides following locks:
17871
17872 @itemize
17873 @item Locking decorator
17874 @item Reader-writer locks
17875 @item Inter-process locks
17876 @item Generic helpers
17877 @end itemize\n")
17878 (properties `((python2-variant . ,(delay python2-fasteners))))
17879 (license license:asl2.0)))
17880
17881 (define-public python2-fasteners
17882 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
17883 (package
17884 (inherit base)
17885 (propagated-inputs
17886 `(("python2-futures" ,python2-futures)
17887 ,@(package-propagated-inputs base))))))
17888
17889 (define-public python-requests-file
17890 (package
17891 (name "python-requests-file")
17892 (version "1.4.3")
17893 (source
17894 (origin
17895 (method url-fetch)
17896 (uri (pypi-uri "requests-file" version))
17897 (sha256
17898 (base32
17899 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
17900 (build-system python-build-system)
17901 (propagated-inputs
17902 `(("python-requests" ,python-requests)
17903 ("python-six" ,python-six)))
17904 (home-page
17905 "https://github.com/dashea/requests-file")
17906 (synopsis "File transport adapter for Requests")
17907 (description
17908 "Requests-File is a transport adapter for use with the Requests Python
17909 library to allow local file system access via @code{file://} URLs.")
17910 (license license:asl2.0)))
17911
17912 (define-public python2-requests-file
17913 (package-with-python2 python-requests-file))
17914
17915 (define-public python-identify
17916 (package
17917 (name "python-identify")
17918 (version "1.4.25")
17919 (source
17920 (origin
17921 ;; There are no tests in the PyPI tarball.
17922 (method git-fetch)
17923 (uri (git-reference
17924 (url "https://github.com/chriskuehl/identify")
17925 (commit (string-append "v" version))))
17926 (file-name (git-file-name name version))
17927 (sha256
17928 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
17929 (build-system python-build-system)
17930 (arguments
17931 `(#:phases
17932 (modify-phases %standard-phases
17933 (replace 'check
17934 (lambda _
17935 (invoke "pytest" "-vv"))))))
17936 (native-inputs
17937 `(("python-coverage" ,python-coverage)
17938 ("python-pytest" ,python-pytest)))
17939 (propagated-inputs
17940 `(("python-editdistance" ,python-editdistance)))
17941 (home-page "https://github.com/chriskuehl/identify")
17942 (synopsis "File identification library for Python")
17943 (description
17944 "@code{identify} is a file identification library for Python. Given
17945 a file (or some information about a file), return a set of standardized tags
17946 identifying what the file is.")
17947 (license license:expat)))
17948
17949 (define-public python-tldextract
17950 (package
17951 (name "python-tldextract")
17952 (version "2.2.0")
17953 (source
17954 (origin
17955 (method url-fetch)
17956 (uri (pypi-uri "tldextract" version))
17957 (sha256
17958 (base32
17959 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
17960 (build-system python-build-system)
17961 (native-inputs
17962 `(("python-pytest" ,python-pytest)
17963 ("python-responses" ,python-responses)))
17964 (propagated-inputs
17965 `(("python-idna" ,python-idna)
17966 ("python-requests" ,python-requests)
17967 ("python-requests-file" ,python-requests-file)))
17968 (home-page
17969 "https://github.com/john-kurkowski/tldextract")
17970 (synopsis
17971 "Separate the TLD from the registered domain and subdomains of a URL")
17972 (description
17973 "TLDExtract accurately separates the TLD from the registered domain and
17974 subdomains of a URL, using the Public Suffix List. By default, this includes
17975 the public ICANN TLDs and their exceptions. It can optionally support the
17976 Public Suffix List's private domains as well.")
17977 (license license:bsd-3)))
17978
17979 (define-public python2-tldextract
17980 (package-with-python2 python-tldextract))
17981
17982 (define-public python-nodeenv
17983 (package
17984 (name "python-nodeenv")
17985 (version "1.4.0")
17986 (source
17987 (origin
17988 ;; There's no tarball in PyPI.
17989 (method git-fetch)
17990 (uri (git-reference
17991 (url "https://github.com/ekalinin/nodeenv")
17992 (commit version)))
17993 (file-name (git-file-name name version))
17994 (sha256
17995 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
17996 (build-system python-build-system)
17997 (arguments
17998 `(#:phases
17999 (modify-phases %standard-phases
18000 (replace 'check
18001 (lambda _
18002 ;; This test fails. It tries to open a network socket.
18003 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
18004 (native-inputs
18005 `(("python-coverage" ,python-coverage)
18006 ("python-mock" ,python-mock)
18007 ("python-pytest" ,python-pytest)))
18008 (home-page "https://ekalinin.github.io/nodeenv/")
18009 (synopsis "Create isolated node.js environments")
18010 (description
18011 "Nodeenv (node.js virtual environment) is a tool to create isolated
18012 node.js environments. It creates an environment that has its own installation
18013 directories, that doesn't share libraries with other node.js virtual
18014 environments.")
18015 (license license:bsd-3)))
18016
18017 (define-public python-pynamecheap
18018 (package
18019 (name "python-pynamecheap")
18020 (version "0.0.3")
18021 (source
18022 (origin
18023 (method url-fetch)
18024 (uri (pypi-uri "PyNamecheap" version))
18025 (sha256
18026 (base32
18027 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
18028 (build-system python-build-system)
18029 (propagated-inputs
18030 `(("python-requests" ,python-requests)))
18031 (home-page
18032 "https://github.com/Bemmu/PyNamecheap")
18033 (synopsis
18034 "Namecheap API client in Python")
18035 (description
18036 "PyNamecheap is a Namecheap API client in Python.")
18037 (license license:expat)))
18038
18039 (define-public python2-pynamecheap
18040 (package-with-python2 python-pynamecheap))
18041
18042 (define-public python-dns-lexicon
18043 (package
18044 (name "python-dns-lexicon")
18045 (version "2.4.0")
18046 (source
18047 (origin
18048 (method url-fetch)
18049 (uri (pypi-uri "dns-lexicon" version))
18050 (sha256
18051 (base32
18052 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
18053 (build-system python-build-system)
18054 (arguments
18055 `(#:tests? #f)) ;requires internet access
18056 (propagated-inputs
18057 `(("python-future" ,python-future)
18058 ("python-pynamecheap" ,python-pynamecheap)
18059 ("python-requests" ,python-requests)
18060 ("python-tldextract" ,python-tldextract)
18061 ("python-urllib3" ,python-urllib3)))
18062 (home-page "https://github.com/AnalogJ/lexicon")
18063 (synopsis
18064 "Manipulate DNS records on various DNS providers")
18065 (description
18066 "Lexicon provides a way to manipulate DNS records on multiple DNS
18067 providers in a standardized way. It has a CLI but it can also be used as a
18068 Python library. It was designed to be used in automation, specifically with
18069 Let's Encrypt.")
18070 (license license:expat)))
18071
18072 (define-public python2-dns-lexicon
18073 (package-with-python2 python-dns-lexicon))
18074
18075 (define-public python-cfgv
18076 (package
18077 (name "python-cfgv")
18078 (version "3.1.0")
18079 (source
18080 (origin
18081 ;; There are no tests in the PyPI tarball.
18082 (method git-fetch)
18083 (uri (git-reference
18084 (url "https://github.com/asottile/cfgv")
18085 (commit (string-append "v" version))))
18086 (file-name (git-file-name name version))
18087 (sha256
18088 (base32 "1vvkkqw92sak4b28bpscpppq483amy52ch2yqy1i2m23q7xjkabx"))))
18089 (build-system python-build-system)
18090 (arguments
18091 `(#:phases
18092 (modify-phases %standard-phases
18093 (replace 'check
18094 (lambda _
18095 (invoke "pytest" "-vv"))))))
18096 (native-inputs
18097 `(("python-covdefaults" ,python-covdefaults)
18098 ("python-coverage" ,python-coverage)
18099 ("python-pytest" ,python-pytest)))
18100 (home-page "https://github.com/asottile/cfgv")
18101 (synopsis "Configuration validation library")
18102 (description
18103 "This library helps to validate configuration files and produce human
18104 readable error messages.")
18105 (license license:expat)))
18106
18107 (define-public python-commandlines
18108 (package
18109 (name "python-commandlines")
18110 (version "0.4.1")
18111 (source
18112 (origin
18113 (method url-fetch)
18114 (uri (pypi-uri "commandlines" version))
18115 (sha256
18116 (base32
18117 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
18118 (build-system python-build-system)
18119 (home-page "https://github.com/chrissimpkins/commandlines")
18120 (synopsis "Command line argument to object parsing library")
18121 (description
18122 "@code{Commandlines} is a Python library for command line application
18123 development that supports command line argument parsing, command string
18124 validation testing and application logic.")
18125 (license license:expat)))
18126
18127 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
18128 ;; python-numba. They have a very unflexible relationship.
18129 (define-public python-numba
18130 (package
18131 (name "python-numba")
18132 (version "0.46.0")
18133 (source
18134 (origin
18135 (method url-fetch)
18136 (uri (pypi-uri "numba" version))
18137 (sha256
18138 (base32
18139 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
18140 (build-system python-build-system)
18141 (arguments
18142 `(#:modules ((guix build utils)
18143 (guix build python-build-system)
18144 (ice-9 ftw)
18145 (srfi srfi-1)
18146 (srfi srfi-26))
18147 #:phases
18148 (modify-phases %standard-phases
18149 (add-after 'unpack 'disable-proprietary-features
18150 (lambda _
18151 (setenv "NUMBA_DISABLE_HSA" "1")
18152 (setenv "NUMBA_DISABLE_CUDA" "1")
18153 #t))
18154 (add-after 'unpack 'remove-failing-tests
18155 (lambda _
18156 ;; FIXME: These tests fail for unknown reasons:
18157 ;; test_non_writable_pycache, test_non_creatable_pycache, and
18158 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
18159 (substitute* "numba/tests/test_dispatcher.py"
18160 (("def test(_non_writable_pycache)" _ m)
18161 (string-append "def guix_skip" m))
18162 (("def test(_non_creatable_pycache)" _ m)
18163 (string-append "def guix_skip" m))
18164 (("def test(_frozen)" _ m)
18165 (string-append "def guix_skip" m)))
18166
18167 ;; These tests fail because we don't run the tests from the build
18168 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
18169 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
18170 (substitute* "numba/tests/test_pycc.py"
18171 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
18172 (string-append "def guix_skip" m)))
18173
18174 ;; These tests fail because our version of Python does not have
18175 ;; a recognizable front-end for the Numba distribution to use
18176 ;; to check against.
18177 (substitute* "numba/tests/test_entrypoints.py"
18178 (("def test(_init_entrypoint)" _ m)
18179 (string-append "def guix_skip" m)))
18180 (substitute* "numba/tests/test_jitclasses.py"
18181 (("def test(_jitclass_longlabel_not_truncated)" _ m)
18182 (string-append "def guix_skip" m)))
18183 #t))
18184 (replace 'check
18185 (lambda _
18186 (let ((cwd (getcwd)))
18187 (setenv "PYTHONPATH"
18188 (string-append cwd "/build/"
18189 (find (cut string-prefix? "lib" <>)
18190 (scandir (string-append cwd "/build")))
18191 ":"
18192 (getenv "PYTHONPATH")))
18193 ;; Something is wrong with the PYTHONPATH when running the
18194 ;; tests from the build directory, as it complains about not being
18195 ;; able to import certain modules.
18196 (with-directory-excursion "/tmp"
18197 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
18198 #t)))))
18199 (propagated-inputs
18200 `(("python-llvmlite" ,python-llvmlite)
18201 ("python-numpy" ,python-numpy)
18202 ("python-singledispatch" ,python-singledispatch)))
18203 ;; Needed for tests.
18204 (inputs
18205 `(("python-jinja2" ,python-jinja2)
18206 ("python-pygments" ,python-pygments)))
18207 (home-page "https://numba.pydata.org")
18208 (synopsis "Compile Python code using LLVM")
18209 (description "Numba gives you the power to speed up your applications with
18210 high performance functions written directly in Python. With a few
18211 annotations, array-oriented and math-heavy Python code can be just-in-time
18212 compiled to native machine instructions, similar in performance to C, C++ and
18213 Fortran, without having to switch languages or Python interpreters.
18214
18215 Numba works by generating optimized machine code using the LLVM compiler
18216 infrastructure at import time, runtime, or statically (using the included pycc
18217 tool).")
18218 (license license:bsd-3)))
18219
18220 (define-public python-numcodecs
18221 (package
18222 (name "python-numcodecs")
18223 (version "0.6.4")
18224 (source
18225 (origin
18226 (method url-fetch)
18227 (uri (pypi-uri "numcodecs" version))
18228 (sha256
18229 (base32
18230 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
18231 (build-system python-build-system)
18232 (propagated-inputs
18233 `(("python-numpy" ,python-numpy)
18234 ("python-msgpack" ,python-msgpack)))
18235 (native-inputs
18236 `(("python-pytest" ,python-pytest)
18237 ("python-setuptools-scm" ,python-setuptools-scm)))
18238 (home-page "https://github.com/zarr-developers/numcodecs")
18239 (synopsis "Buffer compression and transformation codecs")
18240 (description
18241 "This Python package provides buffer compression and transformation
18242 codecs for use in data storage and communication applications.")
18243 (license license:expat)))
18244
18245 (define-public python-asciitree
18246 (package
18247 (name "python-asciitree")
18248 (version "0.3.3")
18249 (source
18250 (origin
18251 (method url-fetch)
18252 (uri (pypi-uri "asciitree" version))
18253 (sha256
18254 (base32
18255 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
18256 (build-system python-build-system)
18257 (home-page "https://github.com/mbr/asciitree")
18258 (synopsis "Draws ASCII trees")
18259 (description "This package draws tree structures using characters.")
18260 (license license:expat)))
18261
18262 (define-public python-zarr
18263 (package
18264 (name "python-zarr")
18265 (version "2.4.0")
18266 (source
18267 (origin
18268 (method url-fetch)
18269 (uri (pypi-uri "zarr" version))
18270 (sha256
18271 (base32
18272 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
18273 (build-system python-build-system)
18274 (arguments
18275 `(#:phases
18276 (modify-phases %standard-phases
18277 (add-after 'unpack 'disable-service-tests
18278 (lambda _
18279 (setenv "ZARR_TEST_ABS" "0")
18280 (setenv "ZARR_TEST_MONGO" "0")
18281 (setenv "ZARR_TEST_REDIS" "0")
18282 #t))
18283 (replace 'check
18284 (lambda _
18285 (invoke "pytest" "-vv" "-k" "not lmdb")
18286 #t)))))
18287 (propagated-inputs
18288 `(("python-asciitree" ,python-asciitree)
18289 ("python-fasteners" ,python-fasteners)
18290 ("python-numcodecs" ,python-numcodecs)
18291 ("python-numpy" ,python-numpy)))
18292 (native-inputs
18293 `(("python-pytest" ,python-pytest)
18294 ("python-setuptools-scm" ,python-setuptools-scm)))
18295 (home-page "https://github.com/zarr-developers/zarr-python")
18296 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
18297 (description
18298 "This package provides an implementation of chunked, compressed,
18299 N-dimensional arrays for Python.")
18300 (license license:expat)))
18301
18302 (define-public python-anndata
18303 (package
18304 (name "python-anndata")
18305 (version "0.7.1")
18306 (source
18307 (origin
18308 (method url-fetch)
18309 (uri (pypi-uri "anndata" version))
18310 (sha256
18311 (base32
18312 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
18313 (build-system python-build-system)
18314 (arguments
18315 `(#:phases
18316 (modify-phases %standard-phases
18317 (add-after 'unpack 'delete-inconvenient-tests
18318 (lambda _
18319 ;; This test depends on python-scikit-learn.
18320 (delete-file "anndata/tests/test_inplace_subset.py")
18321 #t))
18322 (delete 'check)
18323 (add-after 'install 'check
18324 (lambda* (#:key inputs outputs #:allow-other-keys)
18325 (add-installed-pythonpath inputs outputs)
18326 (invoke "pytest" "-vv"))))))
18327 (propagated-inputs
18328 `(("python-h5py" ,python-h5py)
18329 ("python-importlib-metadata" ,python-importlib-metadata)
18330 ("python-natsort" ,python-natsort)
18331 ("python-numcodecs" ,python-numcodecs)
18332 ("python-packaging" ,python-packaging)
18333 ("python-pandas" ,python-pandas)
18334 ("python-scipy" ,python-scipy)
18335 ("python-zarr" ,python-zarr)))
18336 (native-inputs
18337 `(("python-joblib" ,python-joblib)
18338 ("python-pytest" ,python-pytest)
18339 ("python-setuptools-scm" ,python-setuptools-scm)))
18340 (home-page "https://github.com/theislab/anndata")
18341 (synopsis "Annotated data for data analysis pipelines")
18342 (description "Anndata is a package for simple (functional) high-level APIs
18343 for data analysis pipelines. In this context, it provides an efficient,
18344 scalable way of keeping track of data together with learned annotations and
18345 reduces the code overhead typically encountered when using a mostly
18346 object-oriented library such as @code{scikit-learn}.")
18347 (license license:bsd-3)))
18348
18349 (define-public python-dill
18350 (package
18351 (name "python-dill")
18352 (version "0.3.1.1")
18353 (source
18354 (origin
18355 (method url-fetch)
18356 (uri (pypi-uri "dill" version))
18357 (sha256
18358 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
18359 (build-system python-build-system)
18360 (arguments
18361 `(#:phases
18362 (modify-phases %standard-phases
18363 (replace 'check
18364 (lambda _
18365 (with-directory-excursion "/tmp"
18366 (invoke "nosetests" "-v"))
18367 #t)))))
18368 (native-inputs
18369 `(("python-nose" ,python-nose)))
18370 (home-page "https://pypi.org/project/dill/")
18371 (synopsis "Serialize all of Python")
18372 (description "Dill extends Python's @code{pickle} module for serializing
18373 and de-serializing Python objects to the majority of the built-in Python
18374 types. Dill provides the user the same interface as the @code{pickle} module,
18375 and also includes some additional features. In addition to pickling Python
18376 objects, @code{dill} provides the ability to save the state of an interpreter
18377 session in a single command. Hence, it would be feasible to save a
18378 interpreter session, close the interpreter, ship the pickled file to another
18379 computer, open a new interpreter, unpickle the session and thus continue from
18380 the saved state of the original interpreter session.")
18381 (license license:bsd-3)))
18382
18383 (define-public python-multiprocess
18384 (package
18385 (name "python-multiprocess")
18386 (version "0.70.9")
18387 (source
18388 (origin
18389 (method url-fetch)
18390 (uri (pypi-uri "multiprocess" version))
18391 (sha256
18392 (base32
18393 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
18394 (build-system python-build-system)
18395 (arguments
18396 `(#:phases
18397 (modify-phases %standard-phases
18398 (add-after 'unpack 'disable-broken-tests
18399 (lambda _
18400 ;; This test is broken as there is no keyboard interrupt.
18401 (substitute* "py3.7/multiprocess/tests/__init__.py"
18402 (("^(.*)def test_wait_result"
18403 line indent)
18404 (string-append indent
18405 "@unittest.skip(\"Disabled by Guix\")\n"
18406 line)))
18407 #t))
18408 ;; Tests must be run after installation.
18409 (delete 'check)
18410 (add-after 'install 'check
18411 (lambda* (#:key inputs outputs #:allow-other-keys)
18412 (add-installed-pythonpath inputs outputs)
18413 (invoke "python" "-m" "multiprocess.tests")
18414 #t)))))
18415 (propagated-inputs
18416 `(("python-dill" ,python-dill)))
18417 (home-page "https://pypi.org/project/multiprocess/")
18418 (synopsis "Multiprocessing and multithreading in Python")
18419 (description
18420 "This package is a fork of the multiprocessing Python package, a package
18421 which supports the spawning of processes using the API of the standard
18422 library's @code{threading} module.")
18423 (license license:bsd-3)))
18424
18425 (define-public python-toolz
18426 (package
18427 (name "python-toolz")
18428 (version "0.9.0")
18429 (source
18430 (origin
18431 (method url-fetch)
18432 (uri (pypi-uri "toolz" version))
18433 (sha256
18434 (base32
18435 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
18436 (build-system python-build-system)
18437 ;; FIXME: tests cannot be computed: "Can't perform this operation for
18438 ;; unregistered loader type"
18439 (arguments '(#:tests? #f))
18440 (home-page "https://github.com/pytoolz/toolz/")
18441 (synopsis "List processing tools and functional utilities")
18442 (description
18443 "This package provides a set of utility functions for iterators,
18444 functions, and dictionaries.")
18445 (license license:bsd-3)))
18446
18447 (define-public python2-toolz
18448 (package-with-python2 python-toolz))
18449
18450 (define-public python-cytoolz
18451 (package
18452 (name "python-cytoolz")
18453 (version "0.9.0.1")
18454 (source
18455 (origin
18456 (method url-fetch)
18457 (uri (pypi-uri "cytoolz" version))
18458 (sha256
18459 (base32
18460 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
18461 (build-system python-build-system)
18462 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
18463 ;; 'exceptions'"
18464 (arguments '(#:tests? #f))
18465 (propagated-inputs
18466 `(("python-toolz" ,python-toolz)))
18467 (native-inputs
18468 `(("python-cython" ,python-cython)))
18469 (home-page "https://github.com/pytoolz/cytoolz")
18470 (synopsis "High performance functional utilities")
18471 (description
18472 "The cytoolz package implements the same API as provided by toolz. The
18473 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
18474 that is accessible to other projects developed in Cython.")
18475 (license license:bsd-3)))
18476
18477 (define-public python-sortedcontainers
18478 (package
18479 (name "python-sortedcontainers")
18480 (version "2.1.0")
18481 (source
18482 (origin
18483 (method url-fetch)
18484 (uri (pypi-uri "sortedcontainers" version))
18485 (sha256
18486 (base32
18487 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
18488 (build-system python-build-system)
18489 (arguments
18490 ;; FIXME: Tests require many extra dependencies, and would introduce
18491 ;; a circular dependency on hypothesis, which uses this package.
18492 '(#:tests? #f))
18493 (propagated-inputs
18494 `(("python-appdirs" ,python-appdirs)
18495 ("python-distlib" ,python-distlib)
18496 ("python-filelock" ,python-filelock)
18497 ("python-six" ,python-six-bootstrap)))
18498 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
18499 (synopsis "Sorted List, Sorted Dict, Sorted Set")
18500 (description
18501 "This package provides a sorted collections library, written in
18502 pure-Python.")
18503 (license license:asl2.0)))
18504
18505 (define-public python2-sortedcontainers
18506 (package-with-python2 python-sortedcontainers))
18507
18508 (define-public python-cloudpickle
18509 (package
18510 (name "python-cloudpickle")
18511 (version "1.3.0")
18512 (source
18513 (origin
18514 (method url-fetch)
18515 (uri (pypi-uri "cloudpickle" version))
18516 (sha256
18517 (base32
18518 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
18519 (build-system python-build-system)
18520 (arguments
18521 '(#:phases (modify-phases %standard-phases
18522 (add-before 'check 'do-not-override-PYTHONPATH
18523 (lambda _
18524 ;; Append to PYTHONPATH instead of overriding it so
18525 ;; that dependencies from Guix can be found.
18526 (substitute* "tests/testutils.py"
18527 (("env\\['PYTHONPATH'\\] = pythonpath")
18528 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
18529 #t))
18530 (replace 'check
18531 (lambda* (#:key tests? #:allow-other-keys)
18532 (if tests?
18533 (invoke "pytest" "-s" "-vv")
18534 (format #t "test suite not run~%"))
18535 #t)))))
18536 (native-inputs
18537 `(;; For tests.
18538 ("python-psutil" ,python-psutil)
18539 ("python-pytest" ,python-pytest)
18540 ("python-tornado" ,python-tornado)))
18541 (home-page "https://github.com/cloudpipe/cloudpickle")
18542 (synopsis "Extended pickling support for Python objects")
18543 (description
18544 "Cloudpickle makes it possible to serialize Python constructs not
18545 supported by the default pickle module from the Python standard library. It
18546 is especially useful for cluster computing where Python expressions are
18547 shipped over the network to execute on remote hosts, possibly close to the
18548 data.")
18549 (properties `((python2-variant . ,(delay python2-cloudpickle))))
18550 (license license:bsd-3)))
18551
18552 (define-public python2-cloudpickle
18553 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
18554 (package
18555 (inherit base)
18556 (native-inputs
18557 `(("python-mock" ,python2-mock)
18558 ,@(package-native-inputs base)))
18559 (propagated-inputs
18560 `(("python-futures" ,python2-futures)
18561 ,@(package-propagated-inputs base))))))
18562
18563 (define-public python-locket
18564 (package
18565 (name "python-locket")
18566 (version "0.2.0")
18567 (source
18568 (origin
18569 (method url-fetch)
18570 (uri (pypi-uri "locket" version))
18571 (sha256
18572 (base32
18573 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
18574 (build-system python-build-system)
18575 (home-page "https://github.com/mwilliamson/locket.py")
18576 (synopsis "File-based locks for Python")
18577 (description
18578 "Locket implements a lock that can be used by multiple processes provided
18579 they use the same path.")
18580 (license license:bsd-2)))
18581
18582 (define-public python2-locket
18583 (package-with-python2 python-locket))
18584
18585 (define-public python-blosc
18586 (package
18587 (name "python-blosc")
18588 (version "1.5.1")
18589 (source
18590 (origin
18591 (method url-fetch)
18592 (uri (pypi-uri "blosc" version))
18593 (sha256
18594 (base32
18595 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
18596 (build-system python-build-system)
18597 ;; FIXME: all tests pass, but then this error is printed:
18598 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
18599 (arguments '(#:tests? #f))
18600 (propagated-inputs
18601 `(("python-numpy" ,python-numpy)))
18602 (home-page "https://github.com/blosc/python-blosc")
18603 (synopsis "Python wrapper for the Blosc data compressor library")
18604 (description "Blosc is a high performance compressor optimized for binary
18605 data. It has been designed to transmit data to the processor cache faster
18606 than the traditional, non-compressed, direct memory fetch approach via a
18607 @code{memcpy()} system call.
18608
18609 Blosc works well for compressing numerical arrays that contains data with
18610 relatively low entropy, like sparse data, time series, grids with
18611 regular-spaced values, etc.
18612
18613 This Python package wraps the Blosc library.")
18614 (license license:bsd-3)))
18615
18616 (define-public python2-blosc
18617 (package-with-python2 python-blosc))
18618
18619 (define-public python-partd
18620 (package
18621 (name "python-partd")
18622 (version "0.3.9")
18623 (source
18624 (origin
18625 (method url-fetch)
18626 (uri (pypi-uri "partd" version))
18627 (sha256
18628 (base32
18629 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
18630 (build-system python-build-system)
18631 (propagated-inputs
18632 `(("python-blosc" ,python-blosc)
18633 ("python-locket" ,python-locket)
18634 ("python-numpy" ,python-numpy)
18635 ("python-pandas" ,python-pandas)
18636 ("python-pyzmq" ,python-pyzmq)
18637 ("python-toolz" ,python-toolz)))
18638 (home-page "https://github.com/dask/partd/")
18639 (synopsis "Appendable key-value storage")
18640 (description "Partd stores key-value pairs. Values are raw bytes. We
18641 append on old values. Partd excels at shuffling operations.")
18642 (license license:bsd-3)))
18643
18644 (define-public python2-partd
18645 (package-with-python2 python-partd))
18646
18647 (define-public python-fsspec
18648 (package
18649 (name "python-fsspec")
18650 (version "0.6.1")
18651 (source
18652 (origin
18653 (method url-fetch)
18654 (uri (pypi-uri "fsspec" version))
18655 (sha256
18656 (base32
18657 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
18658 (build-system python-build-system)
18659 (arguments '(#:tests? #f)) ; there are none
18660 (home-page "https://github.com/intake/filesystem_spec")
18661 (synopsis "File-system specification")
18662 (description "The purpose of this package is to produce a template or
18663 specification for a file-system interface, that specific implementations
18664 should follow, so that applications making use of them can rely on a common
18665 behavior and not have to worry about the specific internal implementation
18666 decisions with any given backend.")
18667 (license license:bsd-3)))
18668
18669 (define-public python-dask
18670 (package
18671 (name "python-dask")
18672 (version "2.14.0")
18673 (source
18674 (origin
18675 (method url-fetch)
18676 (uri (pypi-uri "dask" version))
18677 (sha256
18678 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
18679 (build-system python-build-system)
18680 (arguments
18681 `(#:phases
18682 (modify-phases %standard-phases
18683 (add-after 'unpack 'disable-broken-tests
18684 (lambda _
18685 ;; This test is marked as xfail when pytest-xdist is used.
18686 (substitute* "dask/tests/test_threaded.py"
18687 (("def test_interrupt\\(\\)" m)
18688 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
18689 m)))
18690 ;; This one fails with a type error:
18691 ;; TypeError: Already tz-aware, use tz_convert to convert.
18692 (substitute* "dask/dataframe/tests/test_shuffle.py"
18693 (("def test_set_index_timestamp\\(\\)" m)
18694 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
18695 m)))
18696 #t))
18697 (replace 'check
18698 (lambda _ (invoke "pytest" "-vv"))))))
18699 (propagated-inputs
18700 `(("python-cloudpickle" ,python-cloudpickle)
18701 ("python-fsspec" ,python-fsspec)
18702 ("python-numpy" ,python-numpy)
18703 ("python-packaging" ,python-packaging)
18704 ("python-pandas" ,python-pandas)
18705 ("python-partd" ,python-partd)
18706 ("python-toolz" ,python-toolz)
18707 ("python-pyyaml" ,python-pyyaml)))
18708 (native-inputs
18709 `(("python-pytest" ,python-pytest)
18710 ("python-pytest-runner" ,python-pytest-runner)))
18711 (home-page "https://github.com/dask/dask/")
18712 (synopsis "Parallel computing with task scheduling")
18713 (description
18714 "Dask is a flexible parallel computing library for analytics. It
18715 consists of two components: dynamic task scheduling optimized for computation,
18716 and large data collections like parallel arrays, dataframes, and lists that
18717 extend common interfaces like NumPy, Pandas, or Python iterators to
18718 larger-than-memory or distributed environments. These parallel collections
18719 run on top of the dynamic task schedulers. ")
18720 (license license:bsd-3)))
18721
18722 (define-public python-ilinkedlist
18723 (package
18724 (name "python-ilinkedlist")
18725 (version "0.4.0")
18726 (source
18727 (origin
18728 (method url-fetch)
18729 (uri (pypi-uri "ilinkedlist" version))
18730 (sha256
18731 (base32
18732 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
18733 (build-system python-build-system)
18734 (native-inputs `(("python-pytest" ,python-pytest)))
18735 (inputs `(("python" ,python)))
18736 (home-page "https://github.com/luther9/ilinkedlist-py")
18737 (synopsis "Immutable linked list library")
18738 (description
18739 "This is a implementation of immutable linked lists for Python. It
18740 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
18741 Since a linked list is treated as immutable, it is hashable, and its length
18742 can be retrieved in constant time. Some of the terminology is inspired by
18743 LISP. It is possible to create an improper list by creating a @code{Pair}
18744 with a non-list @code{cdr}.")
18745 (license license:gpl3+)))
18746
18747 (define-public python-readlike
18748 (package
18749 (name "python-readlike")
18750 (version "0.1.3")
18751 (source
18752 (origin
18753 (method url-fetch)
18754 (uri (pypi-uri "readlike" version))
18755 (sha256
18756 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
18757 (build-system python-build-system)
18758 (home-page "https://github.com/jangler/readlike")
18759 (synopsis "GNU Readline-like line editing module")
18760 (description
18761 "This Python module provides line editing functions similar to the default
18762 Emacs-style ones of GNU Readline. Unlike the Python standard library's
18763 @code{readline} package, this one allows access to those capabilties in settings
18764 outside of a standard command-line interface. It is especially well-suited to
18765 interfacing with Urwid, due to a shared syntax for describing key inputs.
18766
18767 Currently, all stateless Readline commands are implemented. Yanking and history
18768 are not supported.")
18769 (license license:expat)))
18770
18771 (define-public python2-readlike
18772 (package-with-python2 python-readlike))
18773
18774 (define-public python-reparser
18775 (package
18776 (name "python-reparser")
18777 (version "1.4.3")
18778 (source
18779 (origin
18780 (method url-fetch)
18781 (uri (pypi-uri "ReParser" version))
18782 (sha256
18783 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
18784 (build-system python-build-system)
18785 (home-page "https://github.com/xmikos/reparser")
18786 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
18787 (description
18788 "This Python library provides a simple lexer/parser for inline markup based
18789 on regular expressions.")
18790 (license license:expat)))
18791
18792 (define-public python2-reparser
18793 (let ((reparser (package-with-python2
18794 (strip-python2-variant python-reparser))))
18795 (package (inherit reparser)
18796 (propagated-inputs
18797 `(("python2-enum34" ,python2-enum34)
18798 ,@(package-propagated-inputs reparser))))))
18799
18800 (define-public python-retrying
18801 (package
18802 (name "python-retrying")
18803 (version "1.3.3")
18804 (source
18805 (origin
18806 (method git-fetch)
18807 (uri (git-reference
18808 (url "https://github.com/rholder/retrying")
18809 (commit (string-append "v" version))))
18810 (file-name (git-file-name name version))
18811 (sha256
18812 (base32
18813 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
18814 (build-system python-build-system)
18815 (propagated-inputs
18816 `(("python-six" ,python-six)))
18817 (home-page "https://github.com/rholder/retrying")
18818 (synopsis "Library for adding retry behavior")
18819 (description "Retrying is a general-purpose retrying library to simplify
18820 the task of adding retry behavior to just about anything.
18821
18822 Features:
18823
18824 @itemize
18825 @item Generic Decorator API.
18826 @item Specify stop condition (i.e. limit by number of attempts).
18827 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
18828 @item Customize retrying on Exceptions.
18829 @item Customize retrying on expected returned result.
18830 @end itemize")
18831 (license license:asl2.0)))
18832
18833 (define-public python-precis-i18n
18834 (package
18835 (name "python-precis-i18n")
18836 (version "1.0.0")
18837 (source
18838 (origin
18839 (method url-fetch)
18840 (uri (pypi-uri "precis_i18n" version))
18841 (sha256
18842 (base32
18843 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
18844 (build-system python-build-system)
18845 (home-page "https://github.com/byllyfish/precis_i18n")
18846 (synopsis "Implementation of the PRECIS framework")
18847 (description
18848 "This module implements the PRECIS Framework as described in RFC 8264,
18849 RFC 8265 and RFC 8266.")
18850 (license license:expat)))
18851
18852 (define-public python-absl-py
18853 (package
18854 (name "python-absl-py")
18855 (version "0.6.1")
18856 (source
18857 (origin
18858 (method url-fetch)
18859 (uri (pypi-uri "absl-py" version))
18860 (sha256
18861 (base32
18862 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
18863 (build-system python-build-system)
18864 (propagated-inputs
18865 `(("python-six" ,python-six)))
18866 (home-page "https://github.com/abseil/abseil-py")
18867 (synopsis "Abseil Python common libraries")
18868 (description
18869 "This package provides the Abseil Python Common Libraries, a collection
18870 of Python libraries for building Python applications.")
18871 (license license:asl2.0)))
18872
18873 (define-public python-astor
18874 (package
18875 (name "python-astor")
18876 (version "0.7.1")
18877 (source
18878 (origin
18879 (method url-fetch)
18880 (uri (pypi-uri "astor" version))
18881 (sha256
18882 (base32
18883 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
18884 (build-system python-build-system)
18885 ;; FIXME: There are two errors and two test failures.
18886 (arguments `(#:tests? #f))
18887 (home-page "https://github.com/berkerpeksag/astor")
18888 (synopsis "Read and write Python ASTs")
18889 (description "Astor is designed to allow easy manipulation of Python
18890 source via the Abstract Syntax Tree.")
18891 (license license:bsd-3)))
18892
18893 (define-public python2-astor
18894 (package-with-python2 python-astor))
18895
18896 (define-public python-astunparse
18897 (package
18898 (name "python-astunparse")
18899 (version "1.6.2")
18900 (source
18901 (origin
18902 (method url-fetch)
18903 (uri (pypi-uri "astunparse" version))
18904 (sha256
18905 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
18906 (build-system python-build-system)
18907 (arguments '(#:tests? #f)) ; there are none
18908 (propagated-inputs
18909 `(("python-six" ,python-six)
18910 ("python-wheel" ,python-wheel)))
18911 (home-page "https://github.com/simonpercivall/astunparse")
18912 (synopsis "AST unparser for Python")
18913 (description "This package provides an AST unparser for Python. It is a
18914 factored out version of @code{unparse} found in the Python source
18915 distribution.")
18916 (license license:bsd-3)))
18917
18918 (define-public python-gast
18919 (package
18920 (name "python-gast")
18921 (version "0.3.3")
18922 (source
18923 (origin
18924 (method url-fetch)
18925 (uri (pypi-uri "gast" version))
18926 (sha256
18927 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
18928 (build-system python-build-system)
18929 (propagated-inputs
18930 `(("python-astunparse" ,python-astunparse)))
18931 (home-page "https://pypi.org/project/gast/")
18932 (synopsis "Generic Python AST that abstracts the underlying Python version")
18933 (description
18934 "GAST provides a compatibility layer between the AST of various Python
18935 versions, as produced by @code{ast.parse} from the standard @code{ast}
18936 module.")
18937 (license license:bsd-3)))
18938
18939 (define-public python-wikidata
18940 (package
18941 (name "python-wikidata")
18942 (version "0.6.1")
18943 (source
18944 (origin
18945 (method url-fetch)
18946 (uri (pypi-uri "Wikidata" version))
18947 (sha256
18948 (base32
18949 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
18950 (build-system python-build-system)
18951 (propagated-inputs
18952 `(("python-babel" ,python-babel)))
18953 (home-page "https://github.com/dahlia/wikidata")
18954 (synopsis "Wikidata client library")
18955 (description
18956 "This package provides a Python interface to
18957 @url{https://www.wikidata.org/, Wikidata}.")
18958 (properties '((upstream-name . "Wikidata")))
18959 (license license:gpl3+)))
18960
18961 (define-public python-doctest-ignore-unicode
18962 (package
18963 (name "python-doctest-ignore-unicode")
18964 (version "0.1.2")
18965 (source
18966 (origin
18967 (method url-fetch)
18968 (uri (pypi-uri "doctest-ignore-unicode" version))
18969 (sha256
18970 (base32
18971 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
18972 (build-system python-build-system)
18973 (native-inputs
18974 `(("python-nose" ,python-nose)))
18975 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
18976 (synopsis "Ignore Unicode literal prefixes in doctests")
18977 (description
18978 "This package adds support for a flag to ignore Unicode literal prefixes
18979 in doctests.")
18980 (license license:asl2.0)))
18981
18982 (define-public python-attr
18983 (package
18984 (name "python-attr")
18985 (version "0.3.1")
18986 (source
18987 (origin
18988 (method url-fetch)
18989 (uri (pypi-uri "attr" version))
18990 (sha256
18991 (base32
18992 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
18993 (build-system python-build-system)
18994 (home-page "https://github.com/denis-ryzhkov/attr")
18995 (synopsis "Decorator for attributes of target function or class")
18996 (description "Simple decorator to set attributes of target function or
18997 class in a @acronym{DRY, Don't Repeat Yourself} way.")
18998 (license license:expat)))
18999
19000 (define-public python-construct
19001 (package
19002 (name "python-construct")
19003 (version "2.10.56")
19004 (source
19005 (origin
19006 (method url-fetch)
19007 (uri (pypi-uri "construct" version))
19008 (sha256
19009 (base32
19010 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
19011 (build-system python-build-system)
19012 (arguments
19013 `(#:tests? #f)) ; No tests exist.
19014 (propagated-inputs
19015 `(("python-extras" ,python-extras)
19016 ("python-arrow" ,python-arrow)
19017 ("python-numpy" ,python-numpy)
19018 ("python-ruamel.yaml" ,python-ruamel.yaml)))
19019 (home-page "https://construct.readthedocs.io")
19020 (synopsis "Declarative and symmetrical parser and builder for binary data")
19021 (description
19022 "This package provides both simple, atomic constructs (such as
19023 integers of various sizes), as well as composite ones which allow you
19024 form hierarchical and sequential structures of increasing complexity.
19025 It features bit and byte granularity, easy debugging and testing, an
19026 easy-to-extend subclass system, and lots of primitive constructs to
19027 make your work easier.")
19028 (license license:expat)))
19029
19030 (define-public python-outcome
19031 (package
19032 (name "python-outcome")
19033 (version "1.0.1")
19034 (source
19035 (origin
19036 (method url-fetch)
19037 (uri (pypi-uri "outcome" version))
19038 (sha256
19039 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
19040 (build-system python-build-system)
19041 (arguments
19042 `(#:phases
19043 (modify-phases %standard-phases
19044 (replace 'check
19045 (lambda* (#:key inputs outputs #:allow-other-keys)
19046 (add-installed-pythonpath inputs outputs)
19047 (invoke "pytest" "-vv"))))))
19048 (native-inputs
19049 `(("python-pytest" ,python-pytest)
19050 ("python-pytest-cov" ,python-pytest-cov)
19051 ("python-pytest-asyncio" ,python-pytest-asyncio)))
19052 (propagated-inputs
19053 `(("python-async-generator" ,python-async-generator)
19054 ("python-attrs" ,python-attrs)))
19055 (home-page "https://github.com/python-trio/outcome")
19056 (synopsis "Capture the outcome of Python function calls")
19057 (description
19058 "Capture the outcome of Python function calls. Extracted from the Trio
19059 project.")
19060 ;; Either license applies.
19061 (license (list license:expat license:asl2.0))))
19062
19063 (define-public python-trio
19064 (package
19065 (name "python-trio")
19066 (version "0.16.0")
19067 (source
19068 (origin
19069 (method url-fetch)
19070 (uri (pypi-uri "trio" version))
19071 (sha256
19072 (base32 "0g6gkwz6i05rm9ym4l4imxakzld7qcgxhb21kprilchcav87s1nz"))))
19073 (build-system python-build-system)
19074 (arguments
19075 `(#:phases
19076 (modify-phases %standard-phases
19077 (add-before 'check 'change-home
19078 (lambda _
19079 ;; Tests require a writable home.
19080 (setenv "HOME" "/tmp")
19081 #t))
19082 (replace 'check
19083 (lambda _
19084 (invoke "pytest" "-vv" "-k"
19085 (string-append
19086 ;; This test times out.
19087 "not test_ki_protection_works"
19088 ;; Assertion errors.
19089 " and not test_guest_mode_ki"
19090 " and not test_run_in_trio_thread_ki"
19091 ;; These try to raise KeyboardInterrupt which does not work
19092 ;; in the build environment.
19093 " and not test_ki_self"
19094 " and not test_ki_wakes_us_up"
19095 ;; Failure in name resolution.
19096 " and not test_getnameinfo"
19097 " and not test_SocketType_resolve"
19098 ;; OSError: protocol not found.
19099 " and not test_getprotobyname")))))))
19100 (native-inputs
19101 `(("python-astor" ,python-astor)
19102 ("python-ipython" ,python-ipython)
19103 ("python-jedi" ,python-jedi)
19104 ("python-pylint" ,python-pylint)
19105 ("python-pyopenssl" ,python-pyopenssl)
19106 ("python-pytest" ,python-pytest)
19107 ("python-pytest-cov" ,python-pytest-cov)
19108 ("python-trustme" ,python-trustme)))
19109 (propagated-inputs
19110 `(("python-attrs" ,python-attrs)
19111 ("python-idna" ,python-idna)
19112 ("python-outcome" ,python-outcome)
19113 ("python-sniffio" ,python-sniffio)
19114 ("python-sortedcontainers"
19115 ,python-sortedcontainers)))
19116 (home-page "https://github.com/python-trio/trio")
19117 (synopsis "Friendly Python library for async concurrency and I/O")
19118 (description
19119 "Trio strives to be a production-quality, async/await-native I/O library
19120 for Python. Like all async libraries, its main purpose is to help you write
19121 programs that do multiple things at the same time with parallelized I/O.")
19122 ;; Either license applies.
19123 (license (list license:expat license:asl2.0))))
19124
19125 (define-public python-humanize
19126 (package
19127 (name "python-humanize")
19128 (version "0.5.1")
19129 (source
19130 (origin
19131 (method url-fetch)
19132 (uri (pypi-uri "humanize" version))
19133 (sha256
19134 (base32
19135 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
19136 (arguments
19137 '(#:tests? #f)) ; tests not in pypi archive
19138 (build-system python-build-system)
19139 (home-page "https://github.com/jmoiron/humanize")
19140 (synopsis "Print numerical information in a human-readable form")
19141 (description "This package provides a Python module that displays numbers
19142 and dates in \"human readable\" forms. For example, it would display
19143 \"12345591313\" as \"12.3 billion\".")
19144 (license license:expat)))
19145
19146 (define-public python-txaio
19147 (package
19148 (name "python-txaio")
19149 (version "18.8.1")
19150 (source
19151 (origin
19152 (method url-fetch)
19153 (uri (pypi-uri "txaio" version))
19154 (sha256
19155 (base32
19156 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
19157 (build-system python-build-system)
19158 (propagated-inputs
19159 `(("python-twisted" ,python-twisted)
19160 ("python-six" ,python-six)))
19161 (home-page "https://github.com/crossbario/txaio")
19162 (synopsis "Compatibility layer between Python asyncio and Twisted")
19163 (description "Txaio provides a compatibility layer between the Python
19164 @code{asyncio} module and @code{Twisted}.")
19165 (license license:expat)))
19166
19167 (define-public python-toolshed
19168 (package
19169 (name "python-toolshed")
19170 (version "0.4.6")
19171 (source
19172 (origin
19173 (method url-fetch)
19174 (uri (pypi-uri "toolshed" version))
19175 (sha256
19176 (base32
19177 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
19178 (build-system python-build-system)
19179 (native-inputs
19180 `(("python-nose" ,python-nose)))
19181 (home-page "https://github.com/brentp/toolshed/")
19182 (synopsis "Collection of modules and functions for working with data")
19183 (description "This is a collection of well-tested, simple modules and
19184 functions that aim to reduce boilerplate when working with data.")
19185 (license license:bsd-2)))
19186
19187 (define-public python-annoy
19188 (package
19189 (name "python-annoy")
19190 (version "1.15.1")
19191 (source
19192 (origin
19193 (method url-fetch)
19194 (uri (pypi-uri "annoy" version))
19195 (sha256
19196 (base32
19197 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
19198 (build-system python-build-system)
19199 (native-inputs
19200 `(("python-nose" ,python-nose)))
19201 (home-page "https://github.com/spotify/annoy/")
19202 (synopsis "Approximate nearest neighbors library")
19203 (description
19204 "Annoy is a C++ library with Python bindings to search for points in
19205 space that are close to a given query point. It also creates large read-only
19206 file-based data structures that are @code{mmap}ped into memory so that many
19207 processes may share the same data.")
19208 (license license:asl2.0)))
19209
19210 (define-public python-pylzma
19211 (package
19212 (name "python-pylzma")
19213 (version "0.5.0")
19214 (source
19215 (origin
19216 (method url-fetch)
19217 (uri (pypi-uri "pylzma" version))
19218 (sha256
19219 (base32
19220 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
19221 (build-system python-build-system)
19222 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
19223 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
19224 (description "This package provides Python bindings for the LZMA library
19225 by Igor Pavlov.")
19226 (license license:lgpl2.1+)))
19227
19228 (define-public python2-pylzma
19229 (package-with-python2 python-pylzma))
19230
19231 (define-public python2-zeroconf
19232 (package
19233 (name "python2-zeroconf")
19234
19235 ;; This is the last version that supports Python 2.x.
19236 (version "0.19.1")
19237 (source
19238 (origin
19239 (method url-fetch)
19240 (uri (pypi-uri "zeroconf" version))
19241 (sha256
19242 (base32
19243 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
19244 (build-system python-build-system)
19245 (arguments
19246 `(#:python ,python-2
19247 #:phases
19248 (modify-phases %standard-phases
19249 (add-after 'unpack 'patch-requires
19250 (lambda* (#:key inputs #:allow-other-keys)
19251 (substitute* "setup.py"
19252 (("enum-compat")
19253 "enum34"))
19254 #t)))))
19255 (native-inputs
19256 `(("python2-six" ,python2-six)
19257 ("python2-enum32" ,python2-enum34)
19258 ("python2-netifaces" ,python2-netifaces)
19259 ("python2-typing" ,python2-typing)))
19260 (home-page "https://github.com/jstasiak/python-zeroconf")
19261 (synopsis "Pure Python mDNS service discovery")
19262 (description
19263 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
19264 compatible).")
19265 (license license:lgpl2.1+)))
19266
19267 (define-public python-bsddb3
19268 (package
19269 (name "python-bsddb3")
19270 (version "6.2.6")
19271 (source
19272 (origin
19273 (method url-fetch)
19274 (uri (pypi-uri "bsddb3" version))
19275 (sha256
19276 (base32
19277 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
19278 (build-system python-build-system)
19279 (inputs
19280 `(("bdb" ,bdb)))
19281 (arguments
19282 '(#:phases
19283 (modify-phases %standard-phases
19284 (add-after 'unpack 'configure-locations
19285 (lambda* (#:key inputs #:allow-other-keys)
19286 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
19287 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
19288 #t))
19289 (replace 'check
19290 (lambda _
19291 (invoke "python3" "test3.py" "-v"))))))
19292 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
19293 (synopsis "Python bindings for Oracle Berkeley DB")
19294 (description
19295 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
19296 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
19297 Transaction objects, and each of these is exposed as a Python type in the
19298 bsddb3.db module. The database objects can use various access methods: btree,
19299 hash, recno, and queue. Complete support of Berkeley DB distributed
19300 transactions. Complete support for Berkeley DB Replication Manager.
19301 Complete support for Berkeley DB Base Replication. Support for RPC.")
19302 (license license:bsd-3)))
19303
19304 (define-public python-dbfread
19305 (package
19306 (name "python-dbfread")
19307 (version "2.0.7")
19308 (source (origin
19309 (method url-fetch)
19310 (uri (pypi-uri "dbfread" version))
19311 (sha256
19312 (base32
19313 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
19314 (build-system python-build-system)
19315 (native-inputs
19316 `(("python-pytest" ,python-pytest)))
19317 (home-page "https://dbfread.readthedocs.io")
19318 (synopsis "Read DBF Files with Python")
19319 (description
19320 "This library reads DBF files and returns the data as native Python data
19321 types for further processing. It is primarily intended for batch jobs and
19322 one-off scripts.")
19323 (license license:expat)))
19324
19325 (define-public python-cached-property
19326 (package
19327 (name "python-cached-property")
19328 (version "1.5.1")
19329 (source
19330 (origin
19331 (method url-fetch)
19332 (uri (pypi-uri "cached-property" version))
19333 (sha256
19334 (base32
19335 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
19336 (build-system python-build-system)
19337 (arguments
19338 `(#:phases
19339 (modify-phases %standard-phases
19340 ;; https://github.com/pydanny/cached-property/issues/131
19341 ;; recent versions of freezegun break one test
19342 (add-after 'unpack 'disable-broken-test
19343 (lambda _
19344 (substitute* "tests/test_cached_property.py"
19345 (("def test_threads_ttl_expiry\\(self\\)" m)
19346 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
19347 " " m)))
19348 #t)))))
19349 (native-inputs
19350 `(("python-freezegun" ,python-freezegun)))
19351 (home-page
19352 "https://github.com/pydanny/cached-property")
19353 (synopsis
19354 "Decorator for caching properties in classes")
19355 (description
19356 "This package provides a decorator which makes caching
19357 time-or-computationally-expensive properties quick and easy and works in Python
19358 2 or 3.")
19359 (license license:bsd-3)))
19360
19361 (define-public python-folium
19362 (package
19363 (name "python-folium")
19364 (version "0.11.0")
19365 (source
19366 (origin
19367 (method url-fetch)
19368 (uri (pypi-uri "folium" version))
19369 (sha256
19370 (base32 "19sclsq3xcjfa7bavzjpyn6rl9b15jbc76n5aag4cwhqqamqj1sl"))))
19371 (build-system python-build-system)
19372 (propagated-inputs
19373 `(("python-branca" ,python-branca)
19374 ("python-jinja2" ,python-jinja2)
19375 ("python-numpy" ,python-numpy)
19376 ("python-requests" ,python-requests)))
19377 (native-inputs
19378 `(("python-pytest" ,python-pytest)))
19379 (home-page "https://github.com/python-visualization/folium")
19380 (synopsis "Make beautiful maps with Leaflet.js & Python")
19381 (description "@code{folium} makes it easy to visualize data that’s been
19382 manipulated in Python on an interactive leaflet map. It enables both the
19383 binding of data to a map for @code{choropleth} visualizations as well as
19384 passing rich vector/raster/HTML visualizations as markers on the map.
19385
19386 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
19387 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
19388 supports Image, Video, GeoJSON and TopoJSON overlays.")
19389 (license license:expat)))
19390
19391 (define-public jube
19392 (package
19393 ;; This is a command-line tool, so no "python-" prefix.
19394 (name "jube")
19395 (version "2.2.2")
19396 (source (origin
19397 (method url-fetch)
19398 (uri (string-append
19399 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
19400 version))
19401 (sha256
19402 (base32
19403 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
19404 (file-name (string-append "jube-" version ".tar.gz"))))
19405 (build-system python-build-system)
19406 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
19407 (synopsis "Benchmarking environment")
19408 (description
19409 "JUBE helps perform and analyze benchmarks in a systematic way. For each
19410 benchmarked application, benchmark data is stored in a format that allows JUBE
19411 to deduct the desired information. This data can be parsed by automatic pre-
19412 and post-processing scripts that draw information and store it more densely
19413 for manual interpretation.")
19414 (license license:gpl3+)))
19415
19416 (define-public python-pyroutelib3
19417 (package
19418 (name "python-pyroutelib3")
19419 (version "1.3.post1")
19420 (source
19421 (origin
19422 (method url-fetch)
19423 (uri (pypi-uri "pyroutelib3" version))
19424 (sha256
19425 (base32
19426 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
19427 (build-system python-build-system)
19428 (propagated-inputs
19429 `(("python-dateutil" ,python-dateutil)))
19430 (home-page "https://github.com/MKuranowski/pyroutelib3")
19431 (synopsis "Library for simple routing on OSM data")
19432 (description "Library for simple routing on OSM data")
19433 (license license:gpl3+)))
19434
19435 (define-public python-bibtexparser
19436 (package
19437 (name "python-bibtexparser")
19438 (version "1.1.0")
19439 (source
19440 (origin
19441 (method url-fetch)
19442 (uri (pypi-uri "bibtexparser" version))
19443 (sha256
19444 (base32
19445 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
19446 (build-system python-build-system)
19447 (propagated-inputs
19448 `(("python-pyparsing" ,python-pyparsing)))
19449 (native-inputs
19450 `(("python-future" ,python-future)))
19451 (home-page "https://github.com/sciunto-org/python-bibtexparser")
19452 (synopsis "Python library to parse BibTeX files")
19453 (description "BibtexParser is a Python library to parse BibTeX files.")
19454 (license (list license:bsd-3 license:lgpl3))))
19455
19456 (define-public python-distro
19457 (package
19458 (name "python-distro")
19459 (version "1.4.0")
19460 (source
19461 (origin
19462 (method url-fetch)
19463 (uri (pypi-uri "distro" version))
19464 (sha256
19465 (base32
19466 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
19467 (build-system python-build-system)
19468 (native-inputs
19469 `(("python-pytest" ,python-pytest)))
19470 (home-page "https://github.com/nir0s/distro")
19471 (synopsis
19472 "OS platform information API")
19473 (description
19474 "@code{distro} provides information about the OS distribution it runs on,
19475 such as a reliable machine-readable ID, or version information.
19476
19477 It is the recommended replacement for Python's original
19478 `platform.linux_distribution` function (which will be removed in Python 3.8).
19479 @code{distro} also provides a command-line interface to output the platform
19480 information in various formats.")
19481 (license license:asl2.0)))
19482
19483 (define-public python-cairosvg
19484 (package
19485 (name "python-cairosvg")
19486 (version "2.4.2")
19487 (source
19488 (origin
19489 (method url-fetch)
19490 (uri (pypi-uri "CairoSVG" version))
19491 (sha256
19492 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
19493 (build-system python-build-system)
19494 (arguments
19495 `(#:phases
19496 (modify-phases %standard-phases
19497 (replace 'check
19498 (lambda _ (invoke "pytest"))))))
19499 (propagated-inputs
19500 `(("python-cairocffi" ,python-cairocffi)
19501 ("python-cssselect2" ,python-cssselect2)
19502 ("python-defusedxml" ,python-defusedxml)
19503 ("python-pillow" ,python-pillow)
19504 ("python-tinycss2" ,python-tinycss2)))
19505 (native-inputs
19506 `(("python-pytest-flake8" ,python-pytest-flake8)
19507 ("python-pytest-isort" ,python-pytest-isort)
19508 ("python-pytest-runner" ,python-pytest-runner)))
19509 (home-page "https://cairosvg.org/")
19510 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
19511 (description "CairoSVG is a SVG converter based on Cairo. It can export
19512 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
19513 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
19514 parsed, the result is drawn to a Cairo surface that can be exported to
19515 qvarious formats: PDF, PostScript, PNG and even SVG.")
19516 (license license:lgpl3+)))
19517
19518 (define-public python-pyphen
19519 (package
19520 (name "python-pyphen")
19521 (version "0.9.5")
19522 (source
19523 (origin
19524 (method url-fetch)
19525 (uri (pypi-uri "Pyphen" version))
19526 (sha256
19527 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
19528 (build-system python-build-system)
19529 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
19530 ;; embedded set provided by upstream - like Debian does.
19531 (home-page "https://github.com/Kozea/Pyphen")
19532 (synopsis "Pure Python module to hyphenate text")
19533 (description "Pyphen is a pure Python module to hyphenate text using
19534 existing Hunspell hyphenation dictionaries.")
19535 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
19536
19537 (define-public python-intelhex
19538 (package
19539 (name "python-intelhex")
19540 (version "2.2.1")
19541 (source
19542 (origin
19543 (method url-fetch)
19544 (uri (pypi-uri "intelhex" version))
19545 (sha256
19546 (base32
19547 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
19548 (build-system python-build-system)
19549 (arguments '(#:tests? #f)) ;issue with version
19550 (home-page "https://pypi.org/project/IntelHex/")
19551 (synopsis "Python library for Intel HEX files manipulations")
19552 (description "The Intel HEX file format is widely used in microprocessors
19553 and microcontrollers area (embedded systems etc.) as the de facto standard for
19554 representation of code to be programmed into microelectronic devices. This
19555 package provides an intelhex Python library to read, write, create from
19556 scratch and manipulate data from Intel HEX file format. It also includes
19557 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
19558 converters and more, those based on the library itself.")
19559 (license license:bsd-3)))
19560
19561 (define-public python-pykwalify
19562 (package
19563 (name "python-pykwalify")
19564 (version "1.7.0")
19565 (source
19566 (origin
19567 (method url-fetch)
19568 (uri (pypi-uri "pykwalify" version))
19569 (sha256
19570 (base32
19571 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
19572 (build-system python-build-system)
19573 (arguments '(#:tests? #f)) ;missing dependencies
19574 (propagated-inputs
19575 `(("python-dateutil" ,python-dateutil)
19576 ("python-docopt" ,python-docopt)
19577 ("python-pyyaml" ,python-pyyaml)))
19578 (home-page "https://github.com/grokzen/pykwalify")
19579 (synopsis
19580 "Python lib/cli for JSON/YAML schema validation")
19581 (description
19582 "This package provides a parser, schema validator, and data binding tool
19583 for YAML and JSON.")
19584 (license license:expat)))
19585
19586 (define-public python-dbusmock
19587 (package
19588 (name "python-dbusmock")
19589 (version "0.18.3")
19590 (source
19591 (origin
19592 (method url-fetch)
19593 (uri (pypi-uri "python-dbusmock" version))
19594 (sha256
19595 (base32
19596 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
19597 (build-system python-build-system)
19598 (arguments
19599 '(#:phases
19600 (modify-phases %standard-phases
19601 (add-after 'unpack 'patch-shell-path
19602 (lambda _
19603 (substitute* "tests/test_code.py"
19604 (("/bin/bash") (which "bash")))
19605 #t)))))
19606 (native-inputs
19607 `(;; For tests.
19608 ("dbus" ,dbus) ; for dbus-daemon
19609 ("python-nose" ,python-nose)
19610 ("which" ,which)))
19611 (propagated-inputs
19612 `(("python-dbus" ,python-dbus)
19613 ("python-pygobject" ,python-pygobject)))
19614 (home-page "https://github.com/martinpitt/python-dbusmock")
19615 (synopsis "Python library for mock D-Bus objects")
19616 (description "python-dbusmock allows for the easy creation of mock objects on
19617 D-Bus. This is useful for writing tests for software which talks to D-Bus
19618 services such as upower, systemd, logind, gnome-session or others, and it is
19619 hard (or impossible without root privileges) to set the state of the real
19620 services to what you expect in your tests.")
19621 (license license:lgpl3+)))
19622
19623 (define-public python-ujson
19624 (package
19625 (name "python-ujson")
19626 (version "2.0.3")
19627 (source
19628 (origin
19629 (method url-fetch)
19630 (uri (pypi-uri "ujson" version))
19631 (sha256
19632 (base32
19633 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
19634 (modules '((guix build utils)))
19635 (snippet
19636 '(begin (delete-file-recursively "deps") #t))))
19637 (build-system python-build-system)
19638 (arguments
19639 `(#:phases
19640 (modify-phases %standard-phases
19641 (add-after 'unpack 'link-to-system-double-conversion
19642 (lambda* (#:key inputs #:allow-other-keys)
19643 (let ((d-c (assoc-ref inputs "double-conversion")))
19644 (substitute* "setup.py"
19645 (("./deps/double-conversion/double-conversion\"")
19646 (string-append d-c "/include/double-conversion\""))
19647 (("-lstdc++" stdc)
19648 (string-append "-L" d-c "/lib\","
19649 " \"-ldouble-conversion\","
19650 " \"" stdc)))
19651 #t)))
19652 (replace 'check
19653 (lambda* (#:key inputs outputs #:allow-other-keys)
19654 (add-installed-pythonpath inputs outputs)
19655 (invoke "pytest"))))))
19656 (native-inputs
19657 `(("double-conversion" ,double-conversion)
19658 ("python-setuptools-scm" ,python-setuptools-scm)
19659 ("python-pytest" ,python-pytest)))
19660 (home-page "https://github.com/ultrajson/ultrajson")
19661 (synopsis "Ultra fast JSON encoder and decoder for Python")
19662 (description
19663 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
19664 bindings for Python 3.")
19665 (license license:bsd-3)))
19666
19667 (define-public python-ujson-1
19668 (package
19669 (inherit python-ujson)
19670 (version "1.35")
19671 (source
19672 (origin
19673 (method url-fetch)
19674 (uri (pypi-uri "ujson" version))
19675 (sha256
19676 (base32
19677 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
19678 (arguments
19679 '(#:phases %standard-phases))
19680 (native-inputs '())
19681 (home-page "http://www.esn.me")
19682 (description
19683 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
19684 bindings for Python 2.5+ and 3.")))
19685
19686 (define-public python2-ujson-1
19687 (package-with-python2 python-ujson-1))
19688
19689 (define-public python-iocapture
19690 ;; The latest release is more than a year older than this commit.
19691 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
19692 (revision "1"))
19693 (package
19694 (name "python-iocapture")
19695 (version "0.1.2")
19696 (source
19697 (origin
19698 (method git-fetch)
19699 (uri (git-reference
19700 (url "https://github.com/oinume/iocapture")
19701 (commit commit)))
19702 (file-name (git-file-name name version))
19703 (sha256
19704 (base32
19705 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
19706 (build-system python-build-system)
19707 (arguments
19708 `(#:phases
19709 (modify-phases %standard-phases
19710 (delete 'check)
19711 (add-after 'install 'check
19712 (lambda* (#:key inputs outputs #:allow-other-keys)
19713 (add-installed-pythonpath inputs outputs)
19714 (invoke "py.test" "-v" "tests")
19715 #t)))))
19716 (propagated-inputs
19717 `(("python-flexmock" ,python-flexmock)
19718 ("python-pytest" ,python-pytest)
19719 ("python-pytest-cov" ,python-pytest-cov)
19720 ("python-six" ,python-six)))
19721 (home-page "https://github.com/oinume/iocapture")
19722 (synopsis "Python capturing tool for stdout and stderr")
19723 (description
19724 "This package helps you to capture the standard out (stdout) and the
19725 standard error channel (stderr) in your program.")
19726 (license license:expat))))
19727
19728 (define-public python-argh
19729 ;; There are 21 commits since the latest release containing important
19730 ;; improvements.
19731 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
19732 (revision "1"))
19733 (package
19734 (name "python-argh")
19735 (version (git-version "0.26.2" revision commit))
19736 (source
19737 (origin
19738 (method git-fetch)
19739 (uri (git-reference
19740 (url "https://github.com/neithere/argh")
19741 (commit commit)))
19742 (file-name (git-file-name name version))
19743 (sha256
19744 (base32
19745 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
19746 (build-system python-build-system)
19747 (propagated-inputs
19748 `(("python-iocapture" ,python-iocapture)
19749 ("python-mock" ,python-mock)
19750 ("python-pytest" ,python-pytest)
19751 ("python-pytest-cov" ,python-pytest-cov)
19752 ("python-pytest-xdist" ,python-pytest-xdist)
19753 ("python-tox" ,python-tox)))
19754 (home-page "https://github.com/neithere/argh/")
19755 (synopsis "Argparse wrapper with natural syntax")
19756 (description
19757 "python-argh is a small library that provides several layers of
19758 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
19759 always possible to declare a command with the highest possible (and least
19760 flexible) layer and then tune the behaviour with any of the lower layers
19761 including the native API of @code{python-argparse}.")
19762 (license license:lgpl3+))))
19763
19764 (define-public python-ppft
19765 (package
19766 (name "python-ppft")
19767 (version "1.6.6.1")
19768 (source
19769 (origin
19770 (method url-fetch)
19771 (uri (pypi-uri "ppft" version))
19772 (sha256
19773 (base32
19774 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
19775 (build-system python-build-system)
19776 (arguments '(#:tests? #f)) ; there are none
19777 (propagated-inputs
19778 `(("python-six" ,python-six)))
19779 (home-page "https://pypi.org/project/ppft/")
19780 (synopsis "Fork of Parallel Python")
19781 (description
19782 "This package is a fork of Parallel Python. The Parallel Python
19783 module (@code{pp}) provides an easy and efficient way to create
19784 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
19785 computers and clusters. It features cross-platform portability and dynamic
19786 load balancing.")
19787 (license license:bsd-3)))
19788
19789 (define-public python-pox
19790 (package
19791 (name "python-pox")
19792 (version "0.2.7")
19793 (source
19794 (origin
19795 (method url-fetch)
19796 (uri (pypi-uri "pox" version))
19797 (sha256
19798 (base32
19799 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
19800 (build-system python-build-system)
19801 (arguments
19802 `(#:phases
19803 (modify-phases %standard-phases
19804 (replace 'check
19805 (lambda _
19806 (mkdir-p "/tmp/guix")
19807 (setenv "SHELL" "bash")
19808 (setenv "USERNAME" "guix")
19809 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
19810 (invoke "py.test" "-vv")
19811 #t)))))
19812 (native-inputs
19813 `(("python-pytest" ,python-pytest)
19814 ("which" ,which)))
19815 (home-page "https://pypi.org/project/pox/")
19816 (synopsis "Python utilities for filesystem exploration and automated builds")
19817 (description
19818 "Pox provides a collection of utilities for navigating and manipulating
19819 filesystems. This module is designed to facilitate some of the low level
19820 operating system interactions that are useful when exploring a filesystem on a
19821 remote host. Pox provides Python equivalents of several shell commands such
19822 as @command{which} and @command{find}. These commands allow automated
19823 discovery of what has been installed on an operating system, and where the
19824 essential tools are located.")
19825 (license license:bsd-3)))
19826
19827 (define-public python-pathos
19828 (package
19829 (name "python-pathos")
19830 (version "0.2.5")
19831 (source
19832 (origin
19833 (method url-fetch)
19834 (uri (pypi-uri "pathos" version))
19835 (sha256
19836 (base32
19837 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
19838 (build-system python-build-system)
19839 (arguments
19840 '(#:phases
19841 (modify-phases %standard-phases
19842 (replace 'check
19843 (lambda _
19844 (setenv "PYTHONPATH"
19845 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
19846 (invoke "python" "./tests/__main__.py"))))))
19847 (propagated-inputs
19848 `(("python-dill" ,python-dill)
19849 ("python-multiprocess" ,python-multiprocess)
19850 ("python-pox" ,python-pox)
19851 ("python-ppft" ,python-ppft)))
19852 (native-inputs
19853 `(("python-pytest" ,python-pytest)))
19854 (home-page "https://pypi.org/project/pathos/")
19855 (synopsis
19856 "Parallel graph management and execution in heterogeneous computing")
19857 (description
19858 "Python-pathos is a framework for heterogeneous computing. It provides a
19859 consistent high-level interface for configuring and launching parallel
19860 computations across heterogeneous resources. Python-pathos provides configurable
19861 launchers for parallel and distributed computing, where each launcher contains
19862 the syntactic logic to configure and launch jobs in an execution environment.")
19863 (license license:bsd-3)))
19864
19865 (define-public python-flit
19866 (package
19867 (name "python-flit")
19868 (version "2.1.0")
19869 (source
19870 (origin
19871 (method url-fetch)
19872 (uri (pypi-uri "flit" version))
19873 (sha256
19874 (base32
19875 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
19876 (build-system python-build-system)
19877 (arguments
19878 `(#:tests? #f)) ; XXX: Check requires network access.
19879 (home-page "https://flit.readthedocs.io/")
19880 (synopsis
19881 "Simple packaging tool for simple packages")
19882 (description
19883 "Flit is a simple way to put Python packages and modules on PyPI. Flit
19884 packages a single importable module or package at a time, using the import
19885 name as the name on PyPI. All subpackages and data files within a package
19886 are included automatically.")
19887 (license license:bsd-3)))
19888
19889 (define-public python-pathtools
19890 (package
19891 (name "python-pathtools")
19892 (version "0.1.2")
19893 (source
19894 (origin
19895 (method url-fetch)
19896 (uri (pypi-uri "pathtools" version))
19897 (sha256
19898 (base32
19899 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
19900 (build-system python-build-system)
19901 (home-page
19902 "https://github.com/gorakhargosh/pathtools")
19903 (synopsis "Path utilities for Python")
19904 (description "Pattern matching and various utilities for file systems
19905 paths.")
19906 (license license:expat)))
19907
19908 (define-public python-fastentrypoints
19909 (package
19910 (name "python-fastentrypoints")
19911 (version "0.12")
19912 (source
19913 (origin
19914 (method url-fetch)
19915 (uri (pypi-uri "fastentrypoints" version))
19916 (sha256
19917 (base32
19918 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
19919 (build-system python-build-system)
19920 (home-page
19921 "https://github.com/ninjaaron/fast-entry_points")
19922 (synopsis
19923 "Makes entry_points specified in setup.py load more quickly")
19924 (description
19925 "Using entry_points in your setup.py makes scripts that start really
19926 slowly because it imports pkg_resources. This package allows such setup
19927 scripts to load entry points more quickly.")
19928 (license license:bsd-3)))
19929
19930 (define-public python-funcparserlib
19931 (package
19932 (name "python-funcparserlib")
19933 (version "0.3.6")
19934 (source
19935 (origin
19936 (method url-fetch)
19937 (uri (pypi-uri "funcparserlib" version))
19938 (sha256
19939 (base32
19940 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
19941 (native-inputs
19942 `(("python-tox" ,python-tox)))
19943 (arguments
19944 `(#:phases
19945 (modify-phases %standard-phases
19946 (replace 'check
19947 (lambda _
19948 (invoke "tox"))))))
19949 (build-system python-build-system)
19950 (home-page
19951 "https://github.com/vlasovskikh/funcparserlib")
19952 (synopsis
19953 "Recursive descent parsing library based on functional combinators")
19954 (description
19955 "This package is a recursive descent parsing library for Python based on
19956 functional combinators. Parser combinators are just higher-order functions
19957 that take parsers as their arguments and return them as result values.")
19958 (license license:expat)))
19959
19960 (define-public python-speg
19961 (package
19962 (name "python-speg")
19963 (version "0.3")
19964 (source
19965 (origin
19966 (method url-fetch)
19967 (uri (pypi-uri "speg" version ".zip"))
19968 (sha256
19969 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
19970 (arguments
19971 `(#:tests? #f)) ;FIXME: tests fail, not sure why
19972 (native-inputs
19973 `(("unzip" ,unzip)))
19974 (build-system python-build-system)
19975 (home-page "https://github.com/avakar/speg")
19976 (synopsis "PEG-based parser interpreter with memoization")
19977 (description "This package is a PEG-based parser and interpreter with
19978 memoization.")
19979 (license license:expat)))
19980
19981 (define-public python-cson
19982 (package
19983 (name "python-cson")
19984 (version "0.8")
19985 (source
19986 (origin
19987 (method url-fetch)
19988 (uri (pypi-uri "cson" version))
19989 (sha256
19990 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
19991 (build-system python-build-system)
19992 (propagated-inputs
19993 `(("python-speg" ,python-speg)))
19994 (home-page "https://github.com/avakar/pycson")
19995 (synopsis "Parser for Coffeescript Object Notation (CSON)")
19996 (description "This package is a parser for Coffeescript Object
19997 Notation (CSON).")
19998 (license license:expat)))
19999
20000 (define-public python-asynctest
20001 (package
20002 (name "python-asynctest")
20003 (version "0.13.0")
20004 (source
20005 (origin
20006 (method url-fetch)
20007 (uri (pypi-uri "asynctest" version))
20008 (sha256
20009 (base32
20010 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
20011 (build-system python-build-system)
20012 (arguments
20013 '(#:phases
20014 (modify-phases %standard-phases
20015 (replace 'check
20016 (lambda _
20017 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
20018 (add-after 'unpack 'disable-tests
20019 (lambda* _
20020 (substitute* "test/test_selector.py"
20021 ;; XXX: This test fails for unknown reason inside the build
20022 ;; environment.
20023 (("def test_events_watched_outside_test_are_ignored")
20024 "@unittest.skip('disabled by guix')
20025 def test_events_watched_outside_test_are_ignored")))))))
20026 (home-page "https://github.com/Martiusweb/asynctest")
20027 (synopsis "Extension of unittest for testing asyncio libraries")
20028 (description
20029 "The package asynctest is built on top of the standard unittest module
20030 and cuts down boilerplate code when testing libraries for asyncio.")
20031 (license license:asl2.0)))
20032
20033 (define-public python-aionotify
20034 (package
20035 (name "python-aionotify")
20036 (version "0.2.0")
20037 (source
20038 (origin
20039 ;; Source tarball on PyPi lacks tests
20040 (method git-fetch)
20041 (uri (git-reference
20042 (url "https://github.com/rbarrois/aionotify")
20043 (commit (string-append "v" version))))
20044 (file-name (git-file-name name version))
20045 (sha256
20046 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
20047 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
20048 (build-system python-build-system)
20049 (home-page "https://github.com/rbarrois/aionotify")
20050 (synopsis "Asyncio-powered inotify library")
20051 (description
20052 "@code{aionotify} is a simple, asyncio-based inotify library.")
20053 (license license:bsd-3)))
20054
20055 (define-public python-forbiddenfruit
20056 (package
20057 (name "python-forbiddenfruit")
20058 (version "0.1.3")
20059 (source
20060 (origin
20061 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
20062 (method git-fetch)
20063 (uri (git-reference
20064 (url "https://github.com/clarete/forbiddenfruit")
20065 (commit version)))
20066 (file-name (git-file-name name version))
20067 (sha256
20068 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
20069 (build-system python-build-system)
20070 (arguments
20071 '(#:phases
20072 (modify-phases %standard-phases
20073 (replace 'check
20074 (lambda _
20075 (invoke "make" "SKIP_DEPS=1"))))))
20076 (native-inputs
20077 `(("python-nose" ,python-nose)
20078 ("python-coverage" ,python-coverage)))
20079 (home-page "https://github.com/clarete/forbiddenfruit")
20080 (synopsis "Patch python built-in objects")
20081 (description "This project allows Python code to extend built-in types.")
20082 (license (list license:gpl3+ license:expat))))
20083
20084 (define-public python-shouldbe
20085 (package
20086 (name "python-shouldbe")
20087 (version "0.1.2")
20088 (source
20089 (origin
20090 (method url-fetch)
20091 (uri (pypi-uri "shouldbe" version))
20092 (sha256
20093 (base32
20094 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
20095 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
20096 (build-system python-build-system)
20097 (propagated-inputs
20098 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
20099 (native-inputs
20100 `(("python-nose" ,python-nose)))
20101 (home-page "https://github.com/directxman12/should_be")
20102 (synopsis "Python Assertion Helpers inspired by Shouldly")
20103 (description
20104 "Python Assertion Helpers inspired by Shouldly.")
20105 (license license:isc)))
20106
20107 (define-public python-k5test
20108 (package
20109 (name "python-k5test")
20110 (version "0.9.2")
20111 (source
20112 (origin
20113 (method url-fetch)
20114 (uri (pypi-uri "k5test" version))
20115 (sha256
20116 (base32
20117 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
20118 (build-system python-build-system)
20119 (propagated-inputs
20120 `(("python-six" ,python-six)
20121 ;; `which`, `kadmin.local` binaries called inside library
20122 ("which" ,which)
20123 ("mit-krb5" ,mit-krb5)))
20124 (native-inputs `(("mit-krb5" ,mit-krb5)))
20125 (arguments
20126 '(#:phases
20127 (modify-phases %standard-phases
20128 (add-after 'unpack 'patch-paths
20129 (lambda* _
20130 (substitute* "k5test/realm.py"
20131 (("'kadmin_local'") "'kadmin.local'")))))))
20132 (home-page "https://github.com/pythongssapi/k5test")
20133 (synopsis "Library for setting up self-contained Kerberos 5 environments")
20134 (description
20135 "@code{k5test} is a library for setting up self-contained Kerberos 5
20136 environments, and running Python unit tests inside those environments. It is
20137 based on the file of the same name found alongside the MIT Kerberos 5 unit
20138 tests.")
20139 (license license:isc)))
20140
20141 (define-public python-gssapi
20142 (package
20143 (name "python-gssapi")
20144 (version "1.6.5")
20145 (source
20146 (origin
20147 (method url-fetch)
20148 (uri (pypi-uri "gssapi" version))
20149 (sha256
20150 (base32
20151 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
20152 (build-system python-build-system)
20153 (propagated-inputs
20154 `(("python-decorator" ,python-decorator)
20155 ("python-six" ,python-six)))
20156 (inputs
20157 `(("mit-krb5" ,mit-krb5)))
20158 ;; for tests
20159 (native-inputs
20160 `(("python-shouldbe" ,python-shouldbe)
20161 ("python-parameterized" ,python-parameterized)
20162 ("python-k5test" ,python-k5test)
20163 ("python-nose" ,python-nose)))
20164 (home-page "https://github.com/pythongssapi/python-gssapi")
20165 (synopsis "Python GSSAPI Wrapper")
20166 (description
20167 "Python-GSSAPI provides both low-level and high level wrappers around the
20168 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
20169 also be useable with other GSSAPI mechanisms.")
20170 (license license:isc)))
20171
20172 (define-public python-check-manifest
20173 (package
20174 (name "python-check-manifest")
20175 (version "0.37")
20176 (source
20177 (origin
20178 (method url-fetch)
20179 (uri (pypi-uri "check-manifest" version))
20180 (sha256
20181 (base32
20182 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
20183 (build-system python-build-system)
20184 (native-inputs
20185 `(("python-mock" ,python-mock)
20186 ("git" ,git)))
20187 (home-page "https://github.com/mgedmin/check-manifest")
20188 (synopsis "Check MANIFEST.in in a Python source package for completeness")
20189 (description "Python package can include a MANIFEST.in file to help with
20190 sending package files to the Python Package Index. This package checks that
20191 file to ensure it completely and accurately describes your project.")
20192 (license license:expat)))
20193
20194 (define-public python-android-stringslib
20195 (package
20196 (name "python-android-stringslib")
20197 (version "0.1.2")
20198 (source
20199 (origin
20200 (method git-fetch)
20201 (uri (git-reference
20202 (url "https://framagit.org/tyreunom/python-android-strings-lib")
20203 (commit (string-append "v" version))))
20204 (file-name (git-file-name name version))
20205 (sha256
20206 (base32
20207 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
20208 (build-system python-build-system)
20209 (arguments
20210 `(#:tests? #f))
20211 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
20212 (synopsis "Android strings.xml support")
20213 (description "Android Strings Lib provides support for android's strings.xml
20214 files. These files are used to translate strings in android apps.")
20215 (license license:expat)))
20216
20217 (define-public python-watchdog
20218 (package
20219 (name "python-watchdog")
20220 (version "0.9.0")
20221 (source
20222 (origin
20223 (method url-fetch)
20224 (uri (pypi-uri "watchdog" version))
20225 (sha256
20226 (base32
20227 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
20228 (build-system python-build-system)
20229 (arguments
20230 `(#:phases
20231 (modify-phases %standard-phases
20232 (add-before 'check 'remove-failing
20233 (lambda _
20234 (delete-file "tests/test_inotify_buffer.py")
20235 (delete-file "tests/test_snapshot_diff.py")
20236 #t)))))
20237 (propagated-inputs
20238 `(("python-argh" ,python-argh)
20239 ("python-pathtools" ,python-pathtools)
20240 ("python-pyyaml" ,python-pyyaml)))
20241 (native-inputs
20242 `(("python-pytest-cov" ,python-pytest-cov)
20243 ("python-pytest-timeout" ,python-pytest-timeout)))
20244 (home-page "https://github.com/gorakhargosh/watchdog")
20245 (synopsis "Filesystem events monitoring")
20246 (description "This package provides a way to monitor filesystem events
20247 such as a file modification and trigger an action. This is similar to inotify,
20248 but portable.")
20249 (license license:asl2.0)))
20250
20251 (define-public python-wget
20252 (package
20253 (name "python-wget")
20254 (version "3.2")
20255 (source
20256 (origin
20257 (method url-fetch)
20258 (uri (pypi-uri "wget" version ".zip"))
20259 (sha256
20260 (base32
20261 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
20262 (build-system python-build-system)
20263 (native-inputs `(("unzip" ,unzip)))
20264 (home-page "https://bitbucket.org/techtonik/python-wget/")
20265 (synopsis "Pure Python download utility")
20266 (description "The python-wget library provides an API to download files
20267 with features similar to the @command{wget} utility.")
20268 (license license:unlicense)))
20269
20270 (define-public offlate
20271 (package
20272 (name "offlate")
20273 (version "0.5")
20274 (source
20275 (origin
20276 (method git-fetch)
20277 (uri (git-reference
20278 (url "https://framagit.org/tyreunom/offlate")
20279 (commit version)))
20280 (file-name (git-file-name name version))
20281 (sha256
20282 (base32
20283 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
20284 (build-system python-build-system)
20285 (arguments
20286 ;; No tests
20287 `(#:tests? #f))
20288 (propagated-inputs
20289 `(("python-android-stringslib" ,python-android-stringslib)
20290 ("python-dateutil" ,python-dateutil)
20291 ("python-gitlab" ,python-gitlab)
20292 ("python-lxml" ,python-lxml)
20293 ("python-polib" ,python-polib)
20294 ("python-pyenchant" ,python-pyenchant)
20295 ("python-pygit2" ,python-pygit2)
20296 ("python-pygithub" ,python-pygithub)
20297 ("python-pyqt" ,python-pyqt)
20298 ("python-requests" ,python-requests)
20299 ("python-ruamel.yaml" ,python-ruamel.yaml)
20300 ("python-translation-finder" ,python-translation-finder)
20301 ("python-watchdog" ,python-watchdog)))
20302 (native-inputs
20303 `(("qttools" ,qttools)))
20304 (home-page "https://framagit.org/tyreunom/offlate")
20305 (synopsis "Offline translation interface for online translation tools")
20306 (description "Offlate offers a unified interface for different translation
20307 file formats, as well as many different online translation platforms. You can
20308 use it to get work from online platforms, specialized such as the Translation
20309 Project, or not such a gitlab instance when your upstream doesn't use any
20310 dedicated platform. The tool proposes a unified interface for any format and
20311 an upload option to send your work back to the platform.")
20312 (license license:gpl3+)))
20313
20314 (define-public python-titlecase
20315 (package
20316 (name "python-titlecase")
20317 (version "0.12.0")
20318 (source
20319 (origin
20320 (method url-fetch)
20321 (uri (pypi-uri "titlecase" version))
20322 (sha256
20323 (base32
20324 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
20325 (build-system python-build-system)
20326 (native-inputs
20327 `(("python-nose" ,python-nose)))
20328 (home-page "https://github.com/ppannuto/python-titlecase")
20329 (synopsis "Capitalize strings similar to book titles")
20330 (description
20331 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
20332 It capitalizes (predominantly English) strings in a way that is similar to
20333 book titles, using the New York Times Manual of Style to leave certain words
20334 lowercase.")
20335 (license license:expat)))
20336
20337 (define-public python-pypng
20338 (package
20339 (name "python-pypng")
20340 (version "0.0.20")
20341 (source
20342 (origin
20343 (method url-fetch)
20344 (uri (pypi-uri "pypng" version))
20345 (sha256
20346 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
20347 (build-system python-build-system)
20348 (home-page "https://github.com/drj11/pypng")
20349 (synopsis "Pure Python PNG image encoder/decoder")
20350 (description
20351 "The PyPNG module implements support for PNG images. It reads and writes
20352 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
20353 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
20354 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
20355 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
20356 A number of optional chunks can be specified (when writing) and
20357 understood (when reading): tRNS, bKGD, gAMA.
20358
20359 PyPNG is not a high level toolkit for image processing (like PIL) and does not
20360 aim at being a replacement or competitor. Its strength lies in fine-grained
20361 extensive support of PNG features. It can also read and write Netpbm PAM
20362 files, with a focus on its use as an intermediate format for implementing
20363 custom PNG processing.")
20364 (license license:expat)))
20365
20366 (define-public python-fuzzywuzzy
20367 (package
20368 (name "python-fuzzywuzzy")
20369 (version "0.18.0")
20370 (source
20371 (origin
20372 (method url-fetch)
20373 (uri (pypi-uri "fuzzywuzzy" version))
20374 (sha256
20375 (base32
20376 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
20377 (build-system python-build-system)
20378 (native-inputs
20379 `(("python-hypothesis" ,python-hypothesis)
20380 ("python-pycodestyle" ,python-pycodestyle)
20381 ("python-pytest" ,python-pytest)))
20382 (propagated-inputs
20383 `(("python-levenshtein" ,python-levenshtein)))
20384 (home-page "https://github.com/seatgeek/fuzzywuzzy")
20385 (synopsis "Fuzzy string matching in Python")
20386 (description "Approximate string matching using
20387 @emph{Levenshtein Distance} to calculate the differences between
20388 sequences.")
20389 (license license:gpl2)))
20390
20391 (define-public python2-fuzzywuzzy
20392 (package-with-python2 python-fuzzywuzzy))
20393
20394 (define-public python-block-tracing
20395 (package
20396 (name "python-block-tracing")
20397 (version "1.0.1")
20398 (source
20399 (origin
20400 (method url-fetch)
20401 (uri (pypi-uri "block_tracing" version))
20402 (sha256
20403 (base32
20404 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
20405 (build-system python-build-system)
20406 (arguments '(#:tests? #f)) ; no tests
20407 (home-page "https://github.com/rianhunter/block_tracing")
20408 (synopsis "Protect process memory")
20409 (description
20410 "@code{block_tracing} is a tiny Python library that can be used to
20411 prevent debuggers and other applications from inspecting the memory within
20412 your process.")
20413 (license license:expat)))
20414
20415 (define-public python-gcovr
20416 (package
20417 (name "python-gcovr")
20418 (version "4.2")
20419 (source
20420 (origin
20421 (method url-fetch)
20422 (uri (pypi-uri "gcovr" version))
20423 (sha256
20424 (base32
20425 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
20426 (build-system python-build-system)
20427 (propagated-inputs
20428 `(("python-lxml" ,python-lxml)
20429 ("python-jinja2" ,python-jinja2)))
20430 (home-page "https://gcovr.com/")
20431 (synopsis "Utility for generating code coverage results")
20432 (description
20433 "Gcovr provides a utility for managing the use of the GNU gcov
20434 utility and generating summarized code coverage results. It is inspired
20435 by the Python coverage.py package, which provides a similar utility for
20436 Python.")
20437 (license license:bsd-3)))
20438
20439 (define-public python-owslib
20440 (package
20441 (name "python-owslib")
20442 (version "0.19.2")
20443 (source
20444 (origin
20445 (method url-fetch)
20446 (uri (pypi-uri "OWSLib" version))
20447 (sha256
20448 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
20449 (build-system python-build-system)
20450 (arguments
20451 '(#:tests? #f)) ; TODO: package dependencies required for tests.
20452 (synopsis "Interface for Open Geospatial Consortium web service")
20453 (description
20454 "OWSLib is a Python package for client programming with Open Geospatial
20455 Consortium (OGC) web service (hence OWS) interface standards, and their related
20456 content models.")
20457 (home-page "https://geopython.github.io/OWSLib/")
20458 (license license:bsd-3)))
20459
20460 (define-public python-docusign-esign
20461 (package
20462 (name "python-docusign-esign")
20463 (version "3.1.0")
20464 (source (origin
20465 (method url-fetch)
20466 (uri (pypi-uri "docusign_esign" version))
20467 (sha256
20468 (base32
20469 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
20470 (build-system python-build-system)
20471 ;; Testing requires undocumented setup changes, and so testing is disabled here.
20472 (arguments `(#:tests? #f))
20473 (propagated-inputs
20474 `(("python-certifi", python-certifi)
20475 ("python-six", python-six)
20476 ("python-dateutil", python-dateutil)
20477 ("python-urllib3", python-urllib3)
20478 ("python-pyjwt", python-pyjwt)
20479 ("python-cryptography", python-cryptography)
20480 ("python-nose", python-nose)))
20481 (synopsis "DocuSign Python Client")
20482 (description "The Official DocuSign Python Client Library used to interact
20483 with the eSign REST API. Send, sign, and approve documents using this client.")
20484 (home-page "https://www.docusign.com/devcenter")
20485 (license license:expat)))
20486
20487 (define-public python-xattr
20488 (package
20489 (name "python-xattr")
20490 (version "0.9.7")
20491 (source
20492 (origin
20493 (method url-fetch)
20494 (uri (pypi-uri "xattr" version))
20495 (sha256
20496 (base32
20497 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
20498 (build-system python-build-system)
20499 (propagated-inputs
20500 `(("python-cffi" ,python-cffi)))
20501 (home-page "https://github.com/xattr/xattr")
20502 (synopsis
20503 "Python wrapper for extended filesystem attributes")
20504 (description "This package provides a Python wrapper for using extended
20505 filesystem attributes. Extended attributes extend the basic attributes of files
20506 and directories in the file system. They are stored as name:data pairs
20507 associated with file system objects (files, directories, symlinks, etc).")
20508 (license license:expat)))
20509
20510 (define-public python-json-logger
20511 (package
20512 (name "python-json-logger")
20513 (version "0.1.11")
20514 (source
20515 (origin
20516 (method url-fetch)
20517 (uri (pypi-uri "python-json-logger" version))
20518 (sha256
20519 (base32
20520 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
20521 (build-system python-build-system)
20522 (home-page
20523 "https://github.com/madzak/python-json-logger")
20524 (synopsis "JSON log formatter in Python")
20525 (description "This library allows standard Python logging to output log data
20526 as JSON objects. With JSON we can make our logs more readable by machines and
20527 we can stop writing custom parsers for syslog-type records.")
20528 (license license:bsd-3)))
20529
20530 (define-public python-daiquiri
20531 (package
20532 (name "python-daiquiri")
20533 (version "2.1.1")
20534 (source
20535 (origin
20536 (method url-fetch)
20537 (uri (pypi-uri "daiquiri" version))
20538 (sha256
20539 (base32
20540 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
20541 (build-system python-build-system)
20542 (propagated-inputs
20543 `(("python-json-logger" ,python-json-logger)))
20544 (native-inputs
20545 `(("python-mock" ,python-mock)
20546 ("python-pytest" ,python-pytest)
20547 ("python-setuptools-scm" ,python-setuptools-scm)
20548 ("python-six" ,python-six)))
20549 (home-page "https://github.com/jd/daiquiri")
20550 (synopsis
20551 "Library to configure Python logging easily")
20552 (description "The daiquiri library provides an easy way to configure
20553 logging in Python. It also provides some custom formatters and handlers.")
20554 (license license:asl2.0)))
20555
20556 (define-public python-pifpaf
20557 (package
20558 (name "python-pifpaf")
20559 (version "2.5.0")
20560 (source
20561 (origin
20562 (method url-fetch)
20563 (uri (pypi-uri "pifpaf" version))
20564 (sha256
20565 (base32
20566 "1gy9p4nqf70fh38wn4icyfm7i9wrvx22wnjpg71g89wxbz27igaa"))))
20567 (build-system python-build-system)
20568 (arguments
20569 '(#:phases
20570 (modify-phases %standard-phases
20571 (replace 'check
20572 (lambda _
20573 (invoke "python" "setup.py" "testr" "--slowest"
20574 "--testr-args=until-failure"))))))
20575 (propagated-inputs
20576 `(("python-click" ,python-click)
20577 ("python-daiquiri" ,python-daiquiri)
20578 ("python-fixtures" ,python-fixtures)
20579 ("python-jinja2" ,python-jinja2)
20580 ("python-pbr" ,python-pbr)
20581 ("python-psutil" ,python-psutil)
20582 ("python-six" ,python-six)
20583 ("python-xattr" ,python-xattr)))
20584 (native-inputs
20585 `(("python-mock" ,python-mock)
20586 ("python-os-testr" ,python-os-testr)
20587 ("python-requests" ,python-requests)
20588 ("python-testrepository" ,python-testrepository)
20589 ("python-testtools" ,python-testtools)))
20590 (home-page "https://github.com/jd/pifpaf")
20591 (synopsis "Tools and fixtures to manage daemons for testing in Python")
20592 (description "Pifpaf is a suite of fixtures and a command-line tool that
20593 starts and stops daemons for a quick throw-away usage. This is typically
20594 useful when needing these daemons to run integration testing. It originally
20595 evolved from its precursor @code{overtest}.")
20596 (license license:asl2.0)))
20597
20598 (define-public python-pytest-check-links
20599 (package
20600 (name "python-pytest-check-links")
20601 (version "0.3.0")
20602 (source
20603 (origin
20604 (method url-fetch)
20605 ;; URI uses underscores
20606 (uri (pypi-uri "pytest_check_links" version))
20607 (sha256
20608 (base32
20609 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
20610 (build-system python-build-system)
20611 (propagated-inputs
20612 `(("python-docutils" ,python-docutils)
20613 ("python-html5lib" ,python-html5lib)
20614 ("python-nbconvert" ,python-nbconvert)
20615 ("python-nbformat" ,python-nbformat)
20616 ("python-pytest" ,python-pytest)
20617 ("python-six" ,python-six)))
20618 (native-inputs
20619 `(("python-pbr-minimal" ,python-pbr-minimal)))
20620 (home-page "https://github.com/minrk/pytest-check-links")
20621 (synopsis "Check links in files")
20622 (description "This package provides a pytest plugin that checks URLs for
20623 HTML-containing files.")
20624 (license license:bsd-3)))
20625
20626 (define-public python-json5
20627 (package
20628 (name "python-json5")
20629 (version "0.8.5")
20630 (source
20631 (origin
20632 ;; sample.json5 is missing from PyPi source tarball
20633 (method git-fetch)
20634 (uri (git-reference
20635 (url "https://github.com/dpranke/pyjson5")
20636 (commit (string-append "v" version))))
20637 (file-name (git-file-name name version))
20638 (sha256
20639 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
20640 (build-system python-build-system)
20641 (home-page "https://github.com/dpranke/pyjson5")
20642 (synopsis
20643 "Python implementation of the JSON5 data format")
20644 (description
20645 "JSON5 extends the JSON data interchange format to make it slightly more
20646 usable as a configuration language. This Python package implements parsing and
20647 dumping of JSON5 data structures.")
20648 (license license:asl2.0)))
20649
20650 (define-public python-frozendict
20651 (package
20652 (name "python-frozendict")
20653 (version "1.2")
20654 (source
20655 (origin
20656 (method url-fetch)
20657 (uri (pypi-uri "frozendict" version))
20658 (sha256
20659 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
20660 (build-system python-build-system)
20661 (home-page "https://github.com/slezica/python-frozendict")
20662 (synopsis "Simple immutable mapping for Python")
20663 (description
20664 "@dfn{frozendict} is an immutable wrapper around dictionaries that
20665 implements the complete mapping interface. It can be used as a drop-in
20666 replacement for dictionaries where immutability is desired.")
20667 (license license:expat)))
20668
20669 (define-public python-unpaddedbase64
20670 (package
20671 (name "python-unpaddedbase64")
20672 (version "1.1.0")
20673 (source
20674 (origin
20675 (method git-fetch)
20676 (uri (git-reference
20677 (url "https://github.com/matrix-org/python-unpaddedbase64")
20678 (commit (string-append "v" version))))
20679 (file-name (git-file-name name version))
20680 (sha256
20681 (base32
20682 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
20683 (build-system python-build-system)
20684 (home-page "https://pypi.org/project/unpaddedbase64/")
20685 (synopsis "Encode and decode Base64 without “=” padding")
20686 (description
20687 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
20688 using “=” characters. However this conveys no benefit so many protocols
20689 choose to use Base64 without the “=” padding.")
20690 (license license:asl2.0)))
20691
20692 (define-public python-py-cpuinfo
20693 (package
20694 (name "python-py-cpuinfo")
20695 (version "5.0.0")
20696 (source
20697 (origin
20698 (method url-fetch)
20699 (uri (pypi-uri "py-cpuinfo" version))
20700 (sha256
20701 (base32
20702 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
20703 (build-system python-build-system)
20704 (home-page "https://github.com/workhorsy/py-cpuinfo")
20705 (synopsis "Get CPU info with Python")
20706 (description
20707 "This Python module returns the CPU info by using the best sources of
20708 information for your operating system.")
20709 (license license:expat)))
20710
20711 (define-public python-canonicaljson
20712 (package
20713 (name "python-canonicaljson")
20714 (version "1.1.4")
20715 (source
20716 (origin
20717 (method url-fetch)
20718 (uri (pypi-uri "canonicaljson" version))
20719 (sha256
20720 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
20721 (build-system python-build-system)
20722 (propagated-inputs
20723 `(("python-six" ,python-six)
20724 ("python-frozendict" ,python-frozendict)
20725 ("python-simplejson" ,python-simplejson)))
20726 (home-page "https://github.com/matrix-org/python-canonicaljson")
20727 (synopsis "Canonical JSON")
20728 (description
20729 "Deterministically encode JSON.
20730
20731 @itemize
20732 @item Encodes objects and arrays as RFC 7159 JSON.
20733 @item Sorts object keys so that you get the same result each time.
20734 @item Has no insignificant whitespace to make the output as small as possible.
20735 @item Escapes only the characters that must be escaped, U+0000 to
20736 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
20737 @item Uses the shortest escape sequence for each escaped character.
20738 @item Encodes the JSON as UTF-8.
20739 @item Can encode frozendict immutable dictionaries.
20740 @end itemize")
20741 (license license:asl2.0)))
20742
20743 (define-public python-signedjson
20744 (package
20745 (name "python-signedjson")
20746 (version "1.1.1")
20747 (source
20748 (origin
20749 (method url-fetch)
20750 (uri (pypi-uri "signedjson" version))
20751 (sha256
20752 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
20753 (build-system python-build-system)
20754 (propagated-inputs
20755 `(("python-canonicaljson" ,python-canonicaljson)
20756 ("python-importlib-metadata" ,python-importlib-metadata)
20757 ("python-pynacl" ,python-pynacl)
20758 ("python-typing-extensions" ,python-typing-extensions)
20759 ("python-unpaddedbase64" ,python-unpaddedbase64)))
20760 (native-inputs
20761 `(("python-setuptools-scm" ,python-setuptools-scm)))
20762 (home-page "https://github.com/matrix-org/python-signedjson")
20763 (synopsis "Sign JSON objects with ED25519 signatures")
20764 (description
20765 "Sign JSON objects with ED25519 signatures.
20766
20767 @itemize
20768 @item More than one entity can sign the same object.
20769 @item Each entity can sign the object with more than one key making it easier to
20770 rotate keys
20771 @item ED25519 can be replaced with a different algorithm.
20772 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
20773 key.
20774 @end itemize")
20775 (license license:asl2.0)))
20776
20777 (define-public python-daemonize
20778 (package
20779 (name "python-daemonize")
20780 (version "2.5.0")
20781 (source
20782 (origin
20783 (method url-fetch)
20784 (uri (pypi-uri "daemonize" version))
20785 (sha256
20786 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
20787 (build-system python-build-system)
20788 (home-page "https://github.com/thesharp/daemonize")
20789 (synopsis "Library for writing system daemons in Python")
20790 (description "Daemonize is a library for writing system daemons in Python.")
20791 (license license:expat)))
20792
20793 (define-public python-pymacaroons
20794 (package
20795 (name "python-pymacaroons")
20796 (version "0.13.0")
20797 (source
20798 (origin
20799 (method url-fetch)
20800 (uri (pypi-uri "pymacaroons" version))
20801 (sha256
20802 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
20803 (build-system python-build-system)
20804 (propagated-inputs
20805 `(("python-six" ,python-six)
20806 ("python-pynacl" ,python-pynacl)))
20807 (home-page "https://github.com/ecordell/pymacaroons")
20808 (synopsis "Python Macaroon Library")
20809 (description
20810 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
20811 tokens, macaroons embed caveats that define specific authorization
20812 requirements for the target service, the service that issued the root macaroon
20813 and which is capable of verifying the integrity of macaroons it receives.
20814
20815 Macaroons allow for delegation and attenuation of authorization. They are
20816 simple and fast to verify, and decouple authorization policy from the
20817 enforcement of that policy.")
20818 (license license:expat)))
20819
20820 (define-public python-ldap3
20821 (package
20822 (name "python-ldap3")
20823 (version "2.7")
20824 (home-page "https://github.com/cannatag/ldap3")
20825 (source
20826 (origin
20827 (method git-fetch)
20828 (uri (git-reference (url home-page)
20829 (commit (string-append "v" version))))
20830 (file-name (git-file-name name version))
20831 (sha256
20832 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
20833 (build-system python-build-system)
20834 (arguments
20835 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
20836 #:phases (modify-phases %standard-phases
20837 (replace 'check
20838 (lambda* (#:key tests? #:allow-other-keys)
20839 (when tests?
20840 (invoke "nosetests" "-s" "test"))
20841 #t)))))
20842 (native-inputs
20843 `(("python-nose" ,python-nose)))
20844 (propagated-inputs
20845 `(("python-gssapi" ,python-gssapi)
20846 ("python-pyasn1" ,python-pyasn1)))
20847 (synopsis "Python LDAP client")
20848 (description
20849 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
20850 library.")
20851 (license license:lgpl3+)))
20852
20853 (define-public python-boltons
20854 (package
20855 (name "python-boltons")
20856 (version "20.0.0")
20857 (source
20858 (origin
20859 (method url-fetch)
20860 (uri (pypi-uri "boltons" version))
20861 (sha256
20862 (base32
20863 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
20864 (build-system python-build-system)
20865 (home-page "https://github.com/mahmoud/boltons")
20866 (synopsis "Extensions to the Python standard library")
20867 (description
20868 "Boltons is a set of over 230 pure-Python utilities in the same spirit
20869 as — and yet conspicuously missing from — the standard library, including:
20870
20871 @itemize
20872 @item Atomic file saving, bolted on with fileutils
20873 @item A highly-optimized OrderedMultiDict, in dictutils
20874 @item Two types of PriorityQueue, in queueutils
20875 @item Chunked and windowed iteration, in iterutils
20876 @item Recursive data structure iteration and merging, with iterutils.remap
20877 @item Exponential backoff functionality, including jitter, through
20878 iterutils.backoff
20879 @item A full-featured TracebackInfo type, for representing stack traces, in
20880 tbutils
20881 @end itemize")
20882 (license license:bsd-3)))
20883
20884 (define-public python-eliot
20885 (package
20886 (name "python-eliot")
20887 (version "1.12.0")
20888 (source
20889 (origin
20890 (method url-fetch)
20891 (uri (pypi-uri "eliot" version))
20892 (sha256
20893 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
20894 (build-system python-build-system)
20895 (arguments
20896 `(#:phases
20897 (modify-phases %standard-phases
20898 (add-after 'unpack 'remove-journald-support
20899 (lambda _
20900 (for-each delete-file
20901 '("eliot/tests/test_journald.py"
20902 "eliot/journald.py"))
20903 #t))
20904 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
20905 ;; remove command-line tool's tests. TODO eliot-prettyprint should
20906 ;; be installed and these tests should pass.
20907 (lambda _
20908 (delete-file "eliot/tests/test_prettyprint.py")
20909 #t)))))
20910 (propagated-inputs
20911 `(("python-boltons" ,python-boltons)
20912 ("python-pyrsistent" ,python-pyrsistent)
20913 ("python-six" ,python-six)
20914 ("python-zope-interface" ,python-zope-interface)))
20915 (native-inputs
20916 `(("python-black" ,python-black)
20917 ("python-coverage" ,python-coverage)
20918 ("python-dask" ,python-dask)
20919 ("python-flake8" ,python-flake8)
20920 ("python-hypothesis" ,python-hypothesis)
20921 ("python-pytest" ,python-pytest)
20922 ("python-setuptools" ,python-setuptools)
20923 ("python-sphinx" ,python-sphinx)
20924 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
20925 ("python-testtools" ,python-testtools)
20926 ("python-twine" ,python-twine)
20927 ("python-twisted" ,python-twisted)))
20928 (home-page "https://github.com/itamarst/eliot/")
20929 (synopsis "Eliot: the logging system that tells you why it happened")
20930 (description
20931 "@dfn{eliot} is a Python logging system that outputs causal chains of
20932 actions: actions can spawn other actions, and eventually they either succeed
20933 or fail. The resulting logs tell you the story of what your software did: what
20934 happened, and what caused it.")
20935 (license license:asl2.0)))
20936
20937 (define-public python-pem
20938 (package
20939 (name "python-pem")
20940 (version "20.1.0")
20941 (source
20942 (origin
20943 (method url-fetch)
20944 (uri (pypi-uri "pem" version))
20945 (sha256
20946 (base32
20947 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
20948 (build-system python-build-system)
20949 (native-inputs
20950 `(("python-certifi" ,python-certifi)
20951 ("python-coverage" ,python-coverage)
20952 ("python-pretend" ,python-pretend)
20953 ("python-pyopenssl" ,python-pyopenssl)
20954 ("python-pytest" ,python-pytest)
20955 ("python-sphinx" ,python-sphinx)
20956 ("python-twisted" ,python-twisted)))
20957 (home-page "https://pem.readthedocs.io/")
20958 (synopsis "Easy PEM file parsing in Python")
20959 (description
20960 "This package provides a Python module for parsing and splitting PEM files.")
20961 (license license:expat)))
20962
20963 (define-public python-txsni
20964 ;; We need a few commits on top of 0.1.9 for compatibility with newer
20965 ;; Python and OpenSSL.
20966 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
20967 (revision "0"))
20968 (package
20969 (name "python-txsni")
20970 (version (git-version "0.1.9" revision commit))
20971 (home-page "https://github.com/glyph/txsni")
20972 (source
20973 (origin
20974 (method git-fetch)
20975 (uri (git-reference (url home-page) (commit commit)))
20976 (file-name (git-file-name name version))
20977 (sha256
20978 (base32
20979 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
20980 (build-system python-build-system)
20981 (propagated-inputs
20982 `(("python-pyopenssl" ,python-pyopenssl)
20983 ("python-service-identity" ,python-service-identity)
20984 ("python-twisted" ,python-twisted)))
20985 (synopsis "Run TLS servers with Twisted")
20986 (description
20987 "This package provides an easy-to-use SNI endpoint for use
20988 with the Twisted web framework.")
20989 (license license:expat))))
20990
20991 (define-public python-txacme
20992 (package
20993 (name "python-txacme")
20994 (version "0.9.2")
20995 (source
20996 (origin
20997 (method url-fetch)
20998 (uri (pypi-uri "txacme" version))
20999 (sha256
21000 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
21001 (build-system python-build-system)
21002 (propagated-inputs
21003 `(("python-acme" ,python-acme)
21004 ("python-attrs" ,python-attrs)
21005 ("python-eliot" ,python-eliot)
21006 ("python-josepy" ,python-josepy)
21007 ("python-pem" ,python-pem)
21008 ("python-treq" ,python-treq)
21009 ("python-twisted" ,python-twisted)
21010 ("python-txsni" ,python-txsni)))
21011 (native-inputs
21012 `(("python-fixtures" ,python-fixtures)
21013 ("python-hypothesis" ,python-hypothesis)
21014 ("python-mock" ,python-mock)
21015 ("python-service-identity"
21016 ,python-service-identity)
21017 ("python-testrepository" ,python-testrepository)
21018 ("python-testscenarios" ,python-testscenarios)
21019 ("python-testtools" ,python-testtools)))
21020 (home-page "https://github.com/twisted/txacme")
21021 (synopsis "Twisted implexmentation of the ACME protocol")
21022 (description
21023 "ACME is Automatic Certificate Management Environment, a protocol that
21024 allows clients and certificate authorities to automate verification and
21025 certificate issuance. The ACME protocol is used by the free Let's Encrypt
21026 Certificate Authority.
21027
21028 txacme is an implementation of the protocol for Twisted, the event-driven
21029 networking engine for Python.")
21030 (license license:expat)))
21031
21032 (define-public python-pysaml2
21033 (package
21034 (name "python-pysaml2")
21035 (version "5.0.0")
21036 (source
21037 (origin
21038 (method url-fetch)
21039 (uri (pypi-uri "pysaml2" version))
21040 (sha256
21041 (base32
21042 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
21043 (build-system python-build-system)
21044 (propagated-inputs
21045 `(("python-cryptography" ,python-cryptography)
21046 ("python-dateutil" ,python-dateutil)
21047 ("python-defusedxml" ,python-defusedxml)
21048 ("python-pyopenssl" ,python-pyopenssl)
21049 ("python-pytz" ,python-pytz)
21050 ("python-requests" ,python-requests)
21051 ("python-six" ,python-six)))
21052 (home-page "https://idpy.org")
21053 (synopsis "Python implementation of SAML Version 2 Standard")
21054 (description
21055 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
21056 It contains all necessary pieces for building a SAML2 service provider or
21057 an identity provider. The distribution contains examples of both.
21058
21059 This package was originally written to work in a WSGI environment, but
21060 there are extensions that allow you to use it with other frameworks.")
21061 (license license:asl2.0)))
21062
21063 (define-public python-click-plugins
21064 (package
21065 (name "python-click-plugins")
21066 (version "1.1.1")
21067 (source
21068 (origin
21069 (method url-fetch)
21070 (uri (pypi-uri "click-plugins" version))
21071 (sha256
21072 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
21073 (build-system python-build-system)
21074 (native-inputs
21075 `(("python-pytest" ,python-pytest)))
21076 (propagated-inputs
21077 `(("python-click" ,python-click)))
21078 (synopsis "Extension for Click to register external CLI commands")
21079 (description "This package provides n extension module for Click to
21080 register external CLI commands via setuptools entry-points.")
21081 (home-page "https://github.com/click-contrib/click-plugins")
21082 (license license:bsd-3)))
21083
21084 (define-public python-diceware
21085 (package
21086 (name "python-diceware")
21087 (version "0.9.6")
21088 (source
21089 (origin
21090 (method url-fetch)
21091 (uri (pypi-uri "diceware" version))
21092 (sha256
21093 (base32
21094 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
21095 (build-system python-build-system)
21096 (native-inputs
21097 `(("python-coverage" ,python-coverage)
21098 ("python-pytest" ,python-pytest)
21099 ("python-pytest-runner" ,python-pytest-runner)))
21100 (home-page "https://github.com/ulif/diceware/")
21101 (synopsis "Generates memorable passphrases")
21102 (description "This package generates passphrases by concatenating words
21103 randomly picked from wordlists. It supports several sources of
21104 randomness (including real life dice) and different wordlists (including
21105 cryptographically signed ones).")
21106 (license license:gpl3+)))
21107
21108 (define-public pyzo
21109 (package
21110 (name "pyzo")
21111 (version "4.10.2")
21112 (source
21113 (origin
21114 (method url-fetch)
21115 (uri (pypi-uri "pyzo" version))
21116 (sha256
21117 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
21118 (build-system python-build-system)
21119 (arguments
21120 `(#:phases
21121 (modify-phases %standard-phases
21122 (add-before 'check 'fix-home-directory
21123 (lambda _
21124 ;; Tests fail with "Permission denied: '/homeless-shelter'".
21125 (setenv "HOME" "/tmp")
21126 #t)))
21127 ;; Tests fail with "Uncaught Python exception: invalid literal for
21128 ;; int() with base 10: 'test'".
21129 #:tests? #f))
21130 (propagated-inputs
21131 `(("python-pyqt" ,python-pyqt)))
21132 (home-page "https://pyzo.org")
21133 (synopsis
21134 "Python IDE for scientific computing")
21135 (description
21136 "Pyzo is a Python IDE focused on interactivity and introspection,
21137 which makes it very suitable for scientific computing. Its practical
21138 design is aimed at simplicity and efficiency.
21139
21140 It consists of two main components, the editor and the shell, and uses
21141 a set of pluggable tools to help the programmer in various ways. Some
21142 example tools are source structure, project manager, interactive help,
21143 workspace...")
21144 (license license:bsd-2)))
21145
21146 (define-public python-osc
21147 (package
21148 (name "python-osc")
21149 (version "1.7.4")
21150 (source
21151 (origin
21152 (method url-fetch)
21153 (uri (pypi-uri "python-osc" version))
21154 (sha256
21155 (base32
21156 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
21157 (build-system python-build-system)
21158 (home-page "https://github.com/attwad/python-osc")
21159 (synopsis "Open Sound Control server and client implementations")
21160 (description
21161 "@code{python-osc} is a pure Python library with no external
21162 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
21163 Open Sound Control 1.0} specification.")
21164 (license license:unlicense)))
21165
21166 (define-public python-voluptuous
21167 (package
21168 (name "python-voluptuous")
21169 (version "0.11.7")
21170 (source
21171 (origin
21172 (method url-fetch)
21173 (uri (pypi-uri "voluptuous" version))
21174 (sha256
21175 (base32
21176 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
21177 (build-system python-build-system)
21178 (native-inputs
21179 `(("python-nose" ,python-nose)))
21180 (home-page "https://github.com/alecthomas/voluptuous")
21181 (synopsis "Python data validation library")
21182 (description
21183 "Voluptuous is a Python data validation library. It is primarily
21184 intended for validating data coming into Python as JSON, YAML, etc.")
21185 (license license:bsd-3)))
21186
21187 (define-public python-cmd2
21188 (package
21189 (name "python-cmd2")
21190 (version "1.0.2")
21191 (source
21192 (origin
21193 (method url-fetch)
21194 (uri (pypi-uri "cmd2" version))
21195 (sha256
21196 (base32
21197 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
21198 (build-system python-build-system)
21199 (propagated-inputs
21200 `(("python-attrs" ,python-attrs)
21201 ("python-colorama" ,python-colorama)
21202 ("python-pyperclip" ,python-pyperclip)
21203 ("python-wcwidth" ,python-wcwidth)))
21204 (native-inputs
21205 `(("python-codecov" ,python-codecov)
21206 ("python-coverage" ,python-coverage)
21207 ("python-doc8" ,python-doc8)
21208 ("python-flake8" ,python-flake8)
21209 ("python-invoke" ,python-invoke)
21210 ("python-mock" ,python-mock)
21211 ("python-pytest" ,python-pytest)
21212 ("python-pytest-cov" ,python-pytest-cov)
21213 ("python-pytest-mock" ,python-pytest-mock)
21214 ("python-setuptools-scm" ,python-setuptools-scm)
21215 ("python-sphinx" ,python-sphinx)
21216 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
21217 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
21218 ("python-tox" ,python-tox)
21219 ("python-twine" ,python-twine)
21220 ("which" ,which)))
21221 (home-page "https://github.com/python-cmd2/cmd2")
21222 (synopsis "Tool for building interactive command line applications")
21223 (description
21224 "Cmd2 is a tool for building interactive command line applications in
21225 Python. Its goal is to make it quick and easy for developers to build
21226 feature-rich and user-friendly interactive command line applications. It
21227 provides a simple API which is an extension of Python's built-in @code{cmd}
21228 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
21229 make your life easier and eliminates much of the boilerplate code which would
21230 be necessary when using @code{cmd}.")
21231 (license license:expat)))
21232
21233 (define-public python-pytidylib
21234 (package
21235 (name "python-pytidylib")
21236 (version "0.3.2")
21237 (source (origin
21238 (method url-fetch)
21239 (uri (pypi-uri "pytidylib" version))
21240 (sha256
21241 (base32
21242 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
21243 (build-system python-build-system)
21244 (arguments
21245 '(#:phases
21246 (modify-phases %standard-phases
21247 (add-before 'build 'qualify-libtidy
21248 (lambda* (#:key inputs #:allow-other-keys)
21249 (let ((libtidy (string-append (assoc-ref inputs "tidy")
21250 "/lib/libtidy.so")))
21251 (substitute* "tidylib/tidy.py"
21252 (("ctypes\\.util\\.find_library\\('tidy'\\)")
21253 (format #f "'~a'" libtidy)))
21254 #t))))))
21255 (inputs `(("tidy" ,tidy)))
21256 (home-page "https://github.com/countergram/pytidylib")
21257 (synopsis "Python wrapper for HTML Tidy library")
21258 (description
21259 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
21260 allows you, from Python code, to “fix” invalid (X)HTML markup.")
21261 (license license:expat)))
21262
21263 (define-public python2-pytidylib
21264 (package-with-python2 python-pytidylib))
21265
21266 (define-public python-mujson
21267 (package
21268 (name "python-mujson")
21269 (version "1.4")
21270 (source
21271 (origin
21272 (method url-fetch)
21273 (uri (pypi-uri "mujson" version))
21274 (sha256
21275 (base32
21276 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
21277 (build-system python-build-system)
21278 (home-page "https://github.com/mattgiles/mujson")
21279 (synopsis "Use the fastest JSON functions available at import time")
21280 (description "This packages selects the fastest JSON functions available
21281 at import time.")
21282 (license license:expat)))
21283
21284 (define-public python-bashlex
21285 (package
21286 (name "python-bashlex")
21287 (version "0.14")
21288 (source
21289 (origin
21290 (method url-fetch)
21291 (uri (pypi-uri "bashlex" version))
21292 (sha256
21293 (base32
21294 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
21295 (build-system python-build-system)
21296 (arguments
21297 `(#:phases
21298 (modify-phases %standard-phases
21299 (add-before 'build 'pregenerate-yacc-tables
21300 (lambda _
21301 ;; parser.py caches tables, which attempts to write to site lib
21302 ;; see https://github.com/idank/bashlex/issues/51
21303 (invoke "python" "-c" "import bashlex"))))))
21304 (home-page
21305 "https://github.com/idank/bashlex")
21306 (synopsis "Python parser for bash")
21307 (description "@code{bashlex} is a Python port of the parser used
21308 internally by GNU bash.
21309
21310 For the most part it's transliterated from C, the major differences are:
21311
21312 @itemize
21313 @item it does not execute anything
21314 @item it is reentrant
21315 @item it generates a complete AST
21316 @end itemize
21317 ")
21318 (license license:gpl3+)))
21319
21320 (define-public python-jinxed
21321 (package
21322 (name "python-jinxed")
21323 (version "1.0.0")
21324 (source
21325 (origin
21326 (method url-fetch)
21327 (uri (pypi-uri "jinxed" version))
21328 (sha256
21329 (base32
21330 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
21331 (build-system python-build-system)
21332 (arguments
21333 '(#:phases
21334 (modify-phases %standard-phases
21335 (add-before 'check 'set-environment-variables
21336 (lambda* (#:key inputs #:allow-other-keys)
21337 (let ((ncurses (assoc-ref inputs "ncurses")))
21338 (setenv "TERM" "LINUX")
21339 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
21340 #t))))
21341 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
21342 (native-inputs
21343 `(("ncurses" ,ncurses)))
21344 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
21345 (synopsis "Jinxed Terminal Library")
21346 (description
21347 "Jinxed is an implementation of a subset of the Python curses library.")
21348 (license license:mpl2.0)))
21349
21350 (define-public python-blessed
21351 (package
21352 (name "python-blessed")
21353 (version "1.17.8")
21354 (source
21355 (origin
21356 (method url-fetch)
21357 (uri (pypi-uri "blessed" version))
21358 (sha256
21359 (base32
21360 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
21361 (modules '((guix build utils)))
21362 (snippet
21363 '(begin
21364 ;; Don't get hung up on Windows test failures.
21365 (delete-file "blessed/win_terminal.py") #t))))
21366 (build-system python-build-system)
21367 (propagated-inputs
21368 `(("python-jinxed" ,python-jinxed)
21369 ("python-six" ,python-six)
21370 ("python-wcwidth" ,python-wcwidth)))
21371 (native-inputs
21372 `(("python-mock" ,python-mock)
21373 ("python-pytest" ,python-pytest)))
21374 (home-page "https://github.com/jquast/blessed")
21375 (synopsis "Wrapper around terminal capabilities")
21376 (description
21377 "Blessed is a thin, practical wrapper around terminal styling, screen
21378 positioning, and keyboard input.")
21379 (license license:expat)))
21380
21381 (define-public python-readme-renderer
21382 (package
21383 (name "python-readme-renderer")
21384 (version "26.0")
21385 (source
21386 (origin
21387 (method url-fetch)
21388 (uri (pypi-uri "readme_renderer" version))
21389 (sha256
21390 (base32
21391 "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
21392 (build-system python-build-system)
21393 (propagated-inputs
21394 `(("python-bleach" ,python-bleach)
21395 ("python-docutils" ,python-docutils)
21396 ("python-pygments" ,python-pygments)
21397 ("python-six" ,python-six)))
21398 (native-inputs
21399 `(("python-mock" ,python-mock)
21400 ("python-pytest" ,python-pytest)))
21401 (home-page "https://github.com/pypa/readme_renderer")
21402 (synopsis "Render README files in Warehouse")
21403 (description
21404 "Readme Renderer is a library that will safely render arbitrary README
21405 files into HTML. It is designed to be used in Warehouse to render the
21406 @code{long_description} for packages. It can handle Markdown, reStructuredText,
21407 and plain text.")
21408 (license license:asl2.0)))
21409
21410 (define-public python-lazr-delegates
21411 (package
21412 (name "python-lazr-delegates")
21413 (version "2.0.4")
21414 (source
21415 (origin
21416 (method url-fetch)
21417 (uri (pypi-uri "lazr.delegates" version))
21418 (sha256
21419 (base32
21420 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
21421 (build-system python-build-system)
21422 (arguments
21423 '(#:phases
21424 (modify-phases %standard-phases
21425 (replace 'check
21426 (lambda _
21427 (invoke "python" "setup.py" "nosetests"))))))
21428 (native-inputs
21429 `(("python-nose" ,python-nose)))
21430 (propagated-inputs
21431 `(("python-zope-interface" ,python-zope-interface)))
21432 (home-page "https://launchpad.net/lazr.delegates")
21433 (synopsis "Easily write objects that delegate behavior")
21434 (description
21435 "The @code{lazr.delegates} package makes it easy to write objects that
21436 delegate behavior to another object. The new object adds some property or
21437 behavior on to the other object, while still providing the underlying interface,
21438 and delegating behavior.")
21439 (license license:lgpl3)))
21440
21441 (define-public python-lazr-config
21442 (package
21443 (name "python-lazr-config")
21444 (version "2.2.2")
21445 (source
21446 (origin
21447 (method url-fetch)
21448 (uri (pypi-uri "lazr.config" version))
21449 (sha256
21450 (base32
21451 "11xpddgyhyj7sf27wbmrq5lnqk21wnprx3ajycgwlxjamh6sgffd"))))
21452 (build-system python-build-system)
21453 (arguments
21454 '(#:phases
21455 (modify-phases %standard-phases
21456 (replace 'check
21457 (lambda _
21458 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
21459 (native-inputs
21460 `(("python-nose" ,python-nose)))
21461 (propagated-inputs
21462 `(("python-lazr-delegates" ,python-lazr-delegates)
21463 ("python-zope-interface" ,python-zope-interface)))
21464 (home-page "https://launchpad.net/lazr.config")
21465 (synopsis "Create configuration schemas and process and validate configurations")
21466 (description
21467 "The LAZR config system is typically used to manage process configuration.
21468 Process configuration is for saying how things change when we run systems on
21469 different machines, or under different circumstances. This system uses ini-like
21470 file format of section, keys, and values. The config file supports inheritance
21471 to minimize duplication of information across files. The format supports schema
21472 validation.")
21473 (license license:lgpl3)))
21474
21475 (define-public python-flufl-bounce
21476 (package
21477 (name "python-flufl-bounce")
21478 (version "3.0.1")
21479 (source
21480 (origin
21481 (method url-fetch)
21482 (uri (pypi-uri "flufl.bounce" version))
21483 (sha256
21484 (base32
21485 "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
21486 (build-system python-build-system)
21487 (propagated-inputs
21488 `(("python-atpublic" ,python-atpublic)
21489 ("python-zope-interface" ,python-zope-interface)))
21490 (native-inputs
21491 `(("python-nose2" ,python-nose2)))
21492 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
21493 (synopsis "Email bounce detectors")
21494 (description "The @code{flufl.bounce} library provides a set of heuristics
21495 and an API for detecting the original bouncing email addresses from a bounce
21496 message. Many formats found in the wild are supported, as are VERP and
21497 RFC 3464.")
21498 (license (list license:asl2.0
21499 license:lgpl3)))) ; only for setup_headers.py
21500
21501 (define-public python-flufl-i18n
21502 (package
21503 (name "python-flufl-i18n")
21504 (version "3.0")
21505 (source
21506 (origin
21507 (method url-fetch)
21508 (uri (pypi-uri "flufl.i18n" version))
21509 (sha256
21510 (base32
21511 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
21512 (build-system python-build-system)
21513 (propagated-inputs
21514 `(("python-atpublic" ,python-atpublic)))
21515 (home-page "https://flufli18n.readthedocs.io")
21516 (synopsis "API for Python internationalization")
21517 (description
21518 "This package provides a high level, convenient API for managing
21519 internationalization translation contexts in Python application. There is a
21520 simple API for single-context applications, such as command line scripts which
21521 only need to translate into one language during the entire course of thei
21522 execution. There is a more flexible, but still convenient API for multi-context
21523 applications, such as servers, which may need to switch language contexts for
21524 different tasks.")
21525 (license license:asl2.0)))
21526
21527 (define-public python-flufl-lock
21528 (package
21529 (name "python-flufl-lock")
21530 (version "4.0")
21531 (source
21532 (origin
21533 (method url-fetch)
21534 (uri (pypi-uri "flufl.lock" version))
21535 (sha256
21536 (base32
21537 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
21538 (build-system python-build-system)
21539 (propagated-inputs
21540 `(("python-atpublic" ,python-atpublic)
21541 ("python-psutil" ,python-psutil)))
21542 (home-page "https://flufllock.readthedocs.io")
21543 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
21544 (description
21545 "The @dfn{flufl.lock} package provides NFS-safe file locking with
21546 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
21547 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
21548 and have a maximum lifetime built-in.")
21549 (license (list license:asl2.0
21550 license:lgpl3)))) ; only for setup_helpers.py
21551
21552 (define-public python-flufl-testing
21553 (package
21554 (name "python-flufl-testing")
21555 (version "0.8")
21556 (source
21557 (origin
21558 (method url-fetch)
21559 (uri (pypi-uri "flufl.testing" version))
21560 (sha256
21561 (base32
21562 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
21563 (build-system python-build-system)
21564 (native-inputs
21565 `(("python-nose2" ,python-nose2)))
21566 (home-page "https://gitlab.com/warsaw/flufl.testing")
21567 (synopsis "Collection of test tool plugins")
21568 (description
21569 "This package contains a small collection of test tool plugins for
21570 @code{nose2} and @code{flake8}.")
21571 (license license:asl2.0)))