gnu: python-libsass: Update to 0.20.1.
[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 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
87 ;;;
88 ;;; This file is part of GNU Guix.
89 ;;;
90 ;;; GNU Guix is free software; you can redistribute it and/or modify it
91 ;;; under the terms of the GNU General Public License as published by
92 ;;; the Free Software Foundation; either version 3 of the License, or (at
93 ;;; your option) any later version.
94 ;;;
95 ;;; GNU Guix is distributed in the hope that it will be useful, but
96 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
97 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
98 ;;; GNU General Public License for more details.
99 ;;;
100 ;;; You should have received a copy of the GNU General Public License
101 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
102
103 (define-module (gnu packages python-xyz)
104 #:use-module ((guix licenses) #:prefix license:)
105 #:use-module (gnu packages)
106 #:use-module (gnu packages algebra)
107 #:use-module (gnu packages adns)
108 #:use-module (gnu packages attr)
109 #:use-module (gnu packages backup)
110 #:use-module (gnu packages bash)
111 #:use-module (gnu packages check)
112 #:use-module (gnu packages cmake)
113 #:use-module (gnu packages compression)
114 #:use-module (gnu packages crypto)
115 #:use-module (gnu packages databases)
116 #:use-module (gnu packages dbm)
117 #:use-module (gnu packages enchant)
118 #:use-module (gnu packages file)
119 #:use-module (gnu packages fontutils)
120 #:use-module (gnu packages gcc)
121 #:use-module (gnu packages geo)
122 #:use-module (gnu packages ghostscript)
123 #:use-module (gnu packages gl)
124 #:use-module (gnu packages glib)
125 #:use-module (gnu packages gnome)
126 #:use-module (gnu packages gnupg)
127 #:use-module (gnu packages graphviz)
128 #:use-module (gnu packages graphics)
129 #:use-module (gnu packages gsasl)
130 #:use-module (gnu packages gstreamer)
131 #:use-module (gnu packages gtk)
132 #:use-module (gnu packages haskell-xyz)
133 #:use-module (gnu packages icu4c)
134 #:use-module (gnu packages image)
135 #:use-module (gnu packages imagemagick)
136 #:use-module (gnu packages kerberos)
137 #:use-module (gnu packages libevent)
138 #:use-module (gnu packages libffi)
139 #:use-module (gnu packages libidn)
140 #:use-module (gnu packages linux)
141 #:use-module (gnu packages llvm)
142 #:use-module (gnu packages man)
143 #:use-module (gnu packages maths)
144 #:use-module (gnu packages monitoring)
145 #:use-module (gnu packages multiprecision)
146 #:use-module (gnu packages networking)
147 #:use-module (gnu packages ncurses)
148 #:use-module (gnu packages openstack)
149 #:use-module (gnu packages pcre)
150 #:use-module (gnu packages perl)
151 #:use-module (gnu packages photo)
152 #:use-module (gnu packages pkg-config)
153 #:use-module (gnu packages python)
154 #:use-module (gnu packages python-check)
155 #:use-module (gnu packages python-compression)
156 #:use-module (gnu packages python-crypto)
157 #:use-module (gnu packages python-science)
158 #:use-module (gnu packages python-web)
159 #:use-module (gnu packages qt)
160 #:use-module (gnu packages readline)
161 #:use-module (gnu packages sdl)
162 #:use-module (gnu packages search)
163 #:use-module (gnu packages shells)
164 #:use-module (gnu packages sphinx)
165 #:use-module (gnu packages ssh)
166 #:use-module (gnu packages terminals)
167 #:use-module (gnu packages tex)
168 #:use-module (gnu packages texinfo)
169 #:use-module (gnu packages textutils)
170 #:use-module (gnu packages time)
171 #:use-module (gnu packages tls)
172 #:use-module (gnu packages version-control)
173 #:use-module (gnu packages video)
174 #:use-module (gnu packages web)
175 #:use-module (gnu packages base)
176 #:use-module (gnu packages xml)
177 #:use-module (gnu packages xorg)
178 #:use-module (gnu packages xdisorg)
179 #:use-module (gnu packages tcl)
180 #:use-module (gnu packages bdw-gc)
181 #:use-module (gnu packages serialization)
182 #:use-module (guix packages)
183 #:use-module (guix download)
184 #:use-module (guix git-download)
185 #:use-module (guix hg-download)
186 #:use-module (guix utils)
187 #:use-module (guix build-system gnu)
188 #:use-module (guix build-system cmake)
189 #:use-module (guix build-system python)
190 #:use-module (guix build-system trivial)
191 #:use-module (srfi srfi-1)
192 #:use-module (srfi srfi-26))
193
194 (define-public python-slixmpp
195 (package
196 (name "python-slixmpp")
197 (version "1.5.2")
198 (source
199 (origin
200 (method git-fetch)
201 (uri
202 (git-reference
203 (url "https://lab.louiz.org/poezio/slixmpp.git")
204 (commit
205 (string-append "slix-" version))))
206 (file-name
207 (git-file-name name version))
208 (sha256
209 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
210 (build-system python-build-system)
211 (arguments
212 `(#:phases
213 (modify-phases %standard-phases
214 (add-after 'unpack 'patch
215 (lambda _
216 (substitute* "setup.py"
217 (("'CC', 'cc'")
218 "'CC', 'gcc'"))
219 #t)))))
220 (native-inputs
221 `(("cython" ,python-cython)
222 ("gnupg" ,gnupg)
223 ("pkg-config" ,pkg-config)))
224 (propagated-inputs
225 `(("python-aiodns" ,python-aiodns)
226 ("python-aiohttp" ,python-aiohttp)
227 ("python-pyasn1" ,python-pyasn1)
228 ("python-pyasn1-modules" ,python-pyasn1-modules)))
229 (inputs
230 `(("libidn" ,libidn)
231 ("python" ,python))) ; We are building a Python extension.
232 (synopsis "XMPP library without threads")
233 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
234 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
235 socket handling, the timers, the events dispatching) in order to remove all
236 threads.")
237 (home-page "https://lab.louiz.org/poezio/slixmpp")
238 (license license:expat)))
239
240 (define-public python-tenacity
241 (package
242 (name "python-tenacity")
243 (version "6.1.0")
244 (source (origin
245 (method url-fetch)
246 (uri (pypi-uri "tenacity" version))
247 (sha256
248 (base32
249 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
250 (build-system python-build-system)
251 (native-inputs
252 `(("python-setuptools-scm" ,python-setuptools-scm)
253 ("python-sphinx" ,python-sphinx)
254 ("python-tornado" ,python-tornado)
255 ("python-pytest" ,python-pytest)))
256 (propagated-inputs
257 `(("python-six" ,python-six)))
258 (arguments
259 `(#:phases (modify-phases %standard-phases
260 (replace 'check
261 (lambda _
262 (invoke "pytest")
263 #t)))))
264 (home-page "https://github.com/jd/tenacity")
265 (synopsis "Retrying library for python")
266 (description "Tenacity is a general-purpose python library to simplify the
267 task of adding retry behavior to just about anything.")
268 (license license:asl2.0)))
269
270 (define-public python-colorlog
271 (package
272 (name "python-colorlog")
273 (version "4.1.0")
274 (source (origin
275 (method url-fetch)
276 (uri (pypi-uri "colorlog" version))
277 (sha256
278 (base32
279 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
280 (build-system python-build-system)
281 (native-inputs
282 `(("python-pytest" ,python-pytest)))
283 (arguments
284 `(#:phases (modify-phases %standard-phases
285 (replace 'check
286 (lambda _
287 ;; Extend PYTHONPATH so the built package will be found.
288 (setenv "PYTHONPATH"
289 (string-append (getcwd) "/build/lib:"
290 (getenv "PYTHONPATH")))
291 (invoke "pytest" "-p" "no:logging")
292 #t)))))
293 (home-page "https://github.com/borntyping/python-colorlog")
294 (synopsis "Log formatting with colors for python")
295 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
296 with Python's logging module that outputs records using terminal colors.")
297 (license license:expat)))
298
299 (define-public python-pyprind
300 (package
301 (name "python-pyprind")
302 (version "2.11.2")
303 (source (origin
304 (method url-fetch)
305 (uri (pypi-uri "PyPrind" version))
306 (sha256
307 (base32
308 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
309 (build-system python-build-system)
310 (propagated-inputs
311 `(("python-psutil" ,python-psutil)))
312 (home-page "https://github.com/rasbt/pyprind")
313 (synopsis "Python Progress Bar and Percent Indicator Utility")
314 (description "The PyPrind (Python Progress Indicator) module provides a
315 progress bar and a percentage indicator object that let you track the progress
316 of a loop structure or other iterative computation.")
317 (license license:bsd-3)))
318
319 (define-public python-gphoto2
320 (package
321 (name "python-gphoto2")
322 (version "2.2.1")
323 (source (origin
324 (method url-fetch)
325 (uri (pypi-uri "gphoto2" version))
326 (sha256
327 (base32
328 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
329 (build-system python-build-system)
330 (native-inputs
331 `(("pkg-config" ,pkg-config)))
332 (inputs
333 `(("libgphoto2" ,libgphoto2)))
334 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
335 (synopsis "Python interface to libgphoto2")
336 (description "@code{python-gphoto2} is a comprehensive Python interface
337 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
338 automatically generate the interface code.")
339 (license license:gpl3+)))
340
341 (define-public python-colour
342 (package
343 (name "python-colour")
344 (version "0.1.5")
345 (source (origin
346 (method url-fetch)
347 (uri (pypi-uri "colour" version))
348 (sha256
349 (base32
350 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
351 (build-system python-build-system)
352 (native-inputs
353 `(("python-d2to1" ,python-d2to1)))
354 (home-page "https://github.com/vaab/colour")
355 (synopsis "Convert and manipulate various color representations")
356 (description "Pythonic way to manipulate color representations (HSL, RVB,
357 web, X11, ...).")
358 (license license:expat)))
359
360 (define-public python-d2to1
361 (package
362 (name "python-d2to1")
363 (version "0.2.12.post1")
364 (source (origin
365 (method url-fetch)
366 (uri (pypi-uri "d2to1" version))
367 (sha256
368 (base32
369 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
370 (build-system python-build-system)
371 (native-inputs
372 `(("python-nose" ,python-nose)))
373 (home-page "https://github.com/embray/d2to1")
374 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
375 in python")
376 (description "The python package d2to1 (the d is for distutils) allows
377 using distutils2-like setup.cfg files for a package's metadata with a
378 distribute/setuptools setup.py script.")
379 (license license:bsd-2)))
380
381 (define-public python-rawkit
382 (package
383 (name "python-rawkit")
384 (version "0.6.0")
385 (source (origin
386 (method url-fetch)
387 (uri (pypi-uri "rawkit" version))
388 (sha256
389 (base32
390 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
391 (build-system python-build-system)
392 (native-inputs
393 `(("python-pytest" ,python-pytest)
394 ("python-mock" ,python-mock)))
395 (inputs
396 `(("libraw" ,libraw)))
397 (home-page "https://rawkit.readthedocs.io")
398 (synopsis "Ctypes-based LibRaw binding for Python")
399 (description "The rawkit package provides two modules: rawkit and libraw.
400 The rawkit module provides a high-level Pythonic interface for developing raw
401 photos, while the libraw module provides a CTypes based interface for
402 interacting with the low-level LibRaw C APIs.")
403 (license license:expat)))
404
405 (define-public python-easygui
406 (package
407 (name "python-easygui")
408 (version "0.98.1")
409 (source (origin
410 (method url-fetch)
411 (uri (pypi-uri "easygui" version))
412 (sha256
413 (base32
414 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
415 (build-system python-build-system)
416 (propagated-inputs
417 `(("python-tkinter" ,python "tk")))
418 (home-page "https://github.com/robertlugg/easygui")
419 (synopsis "GUI programming module for Python")
420 (description "EasyGUI is a module for very simple, very easy GUI
421 programming in Python. EasyGUI is different from other GUI generators in that
422 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
423 simple function calls.")
424 (license license:bsd-3)))
425
426 (define-public python-pymediainfo
427 (package
428 (name "python-pymediainfo")
429 (version "4.1")
430 (source
431 (origin
432 (method url-fetch)
433 (uri (pypi-uri "pymediainfo" version))
434 (sha256
435 (base32
436 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
437 (build-system python-build-system)
438 (native-inputs
439 `(("python-setuptools-scm" ,python-setuptools-scm)
440 ("python-pytest" ,python-pytest)))
441 (inputs
442 `(("libmediainfo" ,libmediainfo)))
443 (arguments
444 `(#:phases
445 (modify-phases %standard-phases
446 (add-after 'unpack 'patch-libmediainfo
447 (lambda _
448 (substitute* "pymediainfo/__init__.py"
449 (("libmediainfo.so.0")
450 (string-append (assoc-ref %build-inputs "libmediainfo")
451 "/lib/libmediainfo.so.0")))
452 #t))
453 (replace 'check
454 (lambda _
455 ;; Extend PYTHONPATH so the built package will be found.
456 (setenv "PYTHONPATH"
457 (string-append (getcwd) "/build/lib:"
458 (getenv "PYTHONPATH")))
459 ;; Skip the only failing test "test_parse_url"
460 (invoke "pytest" "-vv" "-k" "not test_parse_url")
461 #t)))))
462 (home-page
463 "https://github.com/sbraz/pymediainfo")
464 (synopsis
465 "Python wrapper for the mediainfo library")
466 (description
467 "Python wrapper for the mediainfo library to access the technical and tag
468 data for video and audio files.")
469 (license license:expat)))
470
471 (define-public python-psutil
472 (package
473 (name "python-psutil")
474 (version "5.7.2")
475 (source
476 (origin
477 (method url-fetch)
478 (uri (pypi-uri "psutil" version))
479 (sha256
480 (base32 "1svv985vmqsls35kmvp3vhh26nsgz229324s9k29awf6qgqhm6ch"))))
481 (build-system python-build-system)
482 (arguments
483 ;; FIXME: some tests do not return and time out. Some tests fail because
484 ;; some processes survive kill().
485 '(#:tests? #f))
486 (home-page "https://www.github.com/giampaolo/psutil")
487 (synopsis "Library for retrieving information on running processes")
488 (description
489 "psutil (Python system and process utilities) is a library for retrieving
490 information on running processes and system utilization (CPU, memory, disks,
491 network) in Python. It is useful mainly for system monitoring, profiling and
492 limiting process resources and management of running processes. It implements
493 many functionalities offered by command line tools such as: ps, top, lsof,
494 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
495 pidof, tty, taskset, pmap.")
496 (properties `((python2-variant . ,(delay python2-psutil))))
497 (license license:bsd-3)))
498
499 (define-public python2-psutil
500 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
501 (package
502 (inherit base)
503 (propagated-inputs
504 `(("python2-enum34" ,python2-enum34) ;optional
505 ,@(package-propagated-inputs base))))))
506
507 (define-public python-shapely
508 (package
509 (name "python-shapely")
510 (version "1.6.4.post2")
511 (source
512 (origin
513 (method url-fetch)
514 (uri (pypi-uri "Shapely" version))
515 (sha256
516 (base32
517 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
518 (build-system python-build-system)
519 (native-inputs
520 `(("python-cython" ,python-cython)
521 ("python-matplotlib" ,python-matplotlib)
522 ("python-pytest" ,python-pytest)
523 ("python-pytest-cov" ,python-pytest-cov)))
524 (inputs
525 `(("geos" ,geos)))
526 (propagated-inputs
527 `(("python-numpy" ,python-numpy)))
528 (arguments
529 `(#:phases
530 (modify-phases %standard-phases
531 (add-after 'unpack 'patch-geos-path
532 (lambda* (#:key inputs #:allow-other-keys)
533 (let ((geos (assoc-ref inputs "geos"))
534 (glibc (assoc-ref inputs ,(if (%current-target-system)
535 "cross-libc" "libc"))))
536 (substitute* "shapely/geos.py"
537 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
538 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
539 geos "/lib/libgeos_c.so'])"))
540 (("free = load_dll\\('c'\\)\\.free")
541 (string-append "free = load_dll('c', fallbacks=['"
542 glibc "/lib/libc.so.6']).free"))))
543 #t)))))
544 (home-page "https://github.com/Toblerity/Shapely")
545 (synopsis "Library for the manipulation and analysis of geometric objects")
546 (description "Shapely is a Python package for manipulation and analysis of
547 planar geometric objects. It is based on the @code{GEOS} library.")
548 (license license:bsd-3)))
549
550 (define-public python-shortuuid
551 (package
552 (name "python-shortuuid")
553 (version "0.5.0")
554 (source
555 (origin
556 (method url-fetch)
557 (uri (pypi-uri "shortuuid" version))
558 (sha256
559 (base32
560 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
561 (build-system python-build-system)
562 (native-inputs
563 `(("python-pep8" ,python-pep8)))
564 (home-page "https://github.com/skorokithakis/shortuuid")
565 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
566 (description
567 "@code{shortuuid} is a Python library for generating concise, unambiguous
568 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
569 module and then similar looking characters are removed.")
570 (license license:bsd-3)))
571
572 (define-public python-logwrap
573 (package
574 (name "python-logwrap")
575 (version "3.2.1")
576 (source
577 (origin
578 (method url-fetch)
579 (uri (pypi-uri "logwrap" version ".zip"))
580 (sha256
581 (base32
582 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
583 (build-system python-build-system)
584 (propagated-inputs
585 `(("python-six" ,python-six)
586 ("python-typing" ,python-typing)))
587 (native-inputs
588 `(("unzip" ,unzip)
589 ("python-cython" ,python-cython)
590 ("python-pytest" ,python-pytest)
591 ("python-pytest-cov" ,python-pytest-cov)
592 ("python-pytest-runner" ,python-pytest-runner)))
593 (home-page "https://github.com/penguinolog/logwrap")
594 (synopsis "Decorator for logging function arguments")
595 (description "This package provides a decorator to log function arguments
596 and function call return values in a human-readable way.")
597 (license license:asl2.0)))
598
599 (define-public python2-shapely
600 (package-with-python2 python-shapely))
601
602 (define-public python-clyent
603 (package
604 (name "python-clyent")
605 (version "1.2.1")
606 (source
607 (origin
608 (method url-fetch)
609 (uri (pypi-uri "clyent" version))
610 (sha256
611 (base32
612 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
613 (build-system python-build-system)
614 (native-inputs
615 `(("python-mock" ,python-mock)))
616 (home-page "https://github.com/Anaconda-Platform/clyent")
617 (synopsis "Command line client library")
618 (description "Clyent is a Python command line utility library. It is used
619 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
620 (license license:bsd-3)))
621
622 (define-public python2-clyent
623 (package-with-python2 python-clyent))
624
625 (define-public python-babel
626 (package
627 (name "python-babel")
628 (version "2.8.0")
629 (source
630 (origin
631 (method url-fetch)
632 (uri (pypi-uri "Babel" version))
633 (sha256
634 (base32
635 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
636 (build-system python-build-system)
637 (native-inputs
638 `(("python-freezegun" ,python-freezegun)
639 ("python-pytest" ,python-pytest)))
640 (propagated-inputs
641 `(("python-pytz" ,python-pytz)))
642 (arguments
643 `(#:phases (modify-phases %standard-phases
644 (replace 'check
645 (lambda _
646 (invoke "pytest" "-vv" "-k"
647 (string-append
648 ;; XXX: These tests fail when using Pytest 4.x and
649 ;; Babel 2.6.0. Try removing this for later versions.
650 "not test_no_inherit_metazone_marker_never_in_output"
651 " and not test_smoke_dates"
652 " and not test_smoke_numbers")))))))
653 (home-page "http://babel.pocoo.org/")
654 (synopsis
655 "Tools for internationalizing Python applications")
656 (description
657 "Babel is composed of two major parts:
658 - tools to build and work with gettext message catalogs
659 - a Python interface to the CLDR (Common Locale Data Repository), providing
660 access to various locale display names, localized number and date formatting,
661 etc. ")
662 (license license:bsd-3)))
663
664 (define-public python2-babel
665 (package-with-python2 python-babel))
666
667 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
668 (define-public python2-babel-2.6
669 (package
670 (inherit python2-babel)
671 (version "2.6.0")
672 (source (origin
673 (method url-fetch)
674 (uri (pypi-uri "Babel" version))
675 (sha256
676 (base32
677 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
678
679 (define-public python2-backport-ssl-match-hostname
680 (package
681 (name "python2-backport-ssl-match-hostname")
682 (version "3.5.0.1")
683 (source
684 (origin
685 (method url-fetch)
686 (uri (pypi-uri "backports.ssl_match_hostname" version))
687 (sha256
688 (base32
689 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
690 (build-system python-build-system)
691 (arguments
692 `(#:python ,python-2
693 #:tests? #f)) ; no test target
694 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
695 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
696 (description
697 "This backport brings the ssl.match_hostname() function to users of
698 earlier versions of Python. The function checks the hostname in the
699 certificate returned by the server to which a connection has been established,
700 and verifies that it matches the intended target hostname.")
701 (license license:psfl)))
702
703 (define-public python-bitarray
704 (package
705 (name "python-bitarray")
706 (version "1.4.0")
707 (source (origin
708 (method url-fetch)
709 (uri (pypi-uri "bitarray" version))
710 (sha256
711 (base32
712 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
713 (build-system python-build-system)
714 (home-page "https://github.com/ilanschnell/bitarray")
715 (synopsis "Efficient arrays of booleans")
716 (description "This package provides an object type which efficiently
717 represents an array of booleans. Bitarrays are sequence types and behave very
718 much like usual lists. Eight bits are represented by one byte in a contiguous
719 block of memory. The user can select between two representations:
720 little-endian and big-endian. All of the functionality is implemented in C.
721 Methods for accessing the machine representation are provided. This can be
722 useful when bit level access to binary files is required, such as portable
723 bitmap image files. Also, when dealing with compressed data which uses
724 variable bit length encoding, you may find this module useful.")
725 (license license:psfl)))
726
727 (define-public python-boolean.py
728 (package
729 (name "python-boolean.py")
730 (version "3.6")
731 (source
732 (origin
733 ;; There's no source tarball on PyPI.
734 (method git-fetch)
735 (uri (git-reference
736 (url "https://github.com/bastikr/boolean.py")
737 (commit (string-append "v" version))))
738 (file-name (git-file-name name version))
739 (sha256
740 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
741 (build-system python-build-system)
742 (home-page "https://github.com/bastikr/boolean.py")
743 (synopsis "Boolean algebra in one Python module")
744 (description
745 "This is a small Python library that implements boolean algebra.
746 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
747 @code{Symbol} class that can take on one of these two values. Calculations
748 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
749 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
750 Expressions are constructed from parsed strings or directly in Python.")
751 (license license:bsd-2)))
752
753 (define-public python-hdf4
754 (package
755 (name "python-hdf4")
756 (version "0.9")
757 (source
758 (origin
759 (method url-fetch)
760 (uri (pypi-uri name version))
761 (sha256
762 (base32
763 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
764 (build-system python-build-system)
765 (native-inputs `(("nose" ,python-nose)))
766 (propagated-inputs `(("numpy" ,python-numpy)))
767 (inputs
768 `(("hdf4" ,hdf4)
769 ("libjpeg" ,libjpeg-turbo)
770 ("zlib" ,zlib)))
771 (arguments
772 `(#:phases
773 (modify-phases %standard-phases
774 (replace 'check
775 (lambda _
776 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
777 ;; on to import numpy. Somehow this works on their CI system.
778 ;; Let's just manage PYTHONPATH here instead.
779 (substitute* "runexamples.sh"
780 (("export PYTHONPATH=.*") ""))
781 (setenv "PYTHONPATH"
782 (string-append (getcwd) ":"
783 (getenv "PYTHONPATH")))
784 (invoke "./runexamples.sh")
785 (invoke "nosetests" "-v"))))))
786 (home-page "https://github.com/fhs/python-hdf4")
787 (synopsis "Python interface to the NCSA HDF4 library")
788 (description
789 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
790 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
791 NetCDF files can also be read and modified. Python-HDF4 is a fork of
792 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
793 (license license:expat)))
794
795 (define-public python2-hdf4
796 (package-with-python2 python-hdf4))
797
798 (define-public python-h5py
799 (package
800 (name "python-h5py")
801 (version "2.10.0")
802 (source
803 (origin
804 (method url-fetch)
805 (uri (pypi-uri "h5py" version))
806 (sha256
807 (base32
808 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
809 (build-system python-build-system)
810 (arguments
811 `(#:tests? #f ; no test target
812 #:phases
813 (modify-phases %standard-phases
814 (add-after 'unpack 'fix-hdf5-paths
815 (lambda* (#:key inputs #:allow-other-keys)
816 (let ((prefix (assoc-ref inputs "hdf5")))
817 (substitute* "setup_build.py"
818 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
819 (string-append "['" prefix "/lib" "']"))
820 (("'/opt/local/include', '/usr/local/include'")
821 (string-append "'" prefix "/include" "'")))
822 (substitute* "setup_configure.py"
823 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
824 (string-append "['" prefix "/lib" "']")))
825 #t))))))
826 (propagated-inputs
827 `(("python-six" ,python-six)
828 ("python-numpy" ,python-numpy)))
829 (inputs
830 `(("hdf5" ,hdf5-1.10)))
831 (native-inputs
832 `(("python-cython" ,python-cython)
833 ("python-pkgconfig" ,python-pkgconfig)
834 ("pkg-config" ,pkg-config)))
835 (home-page "https://www.h5py.org/")
836 (synopsis "Read and write HDF5 files from Python")
837 (description
838 "The h5py package provides both a high- and low-level interface to the
839 HDF5 library from Python. The low-level interface is intended to be a
840 complete wrapping of the HDF5 API, while the high-level component supports
841 access to HDF5 files, datasets and groups using established Python and NumPy
842 concepts.")
843 (license license:bsd-3)))
844
845 (define-public python2-h5py
846 (package-with-python2 python-h5py))
847
848 (define-public python-sh
849 (package
850 (name "python-sh")
851 (version "1.12.14")
852 (source
853 (origin
854 (method url-fetch)
855 (uri (pypi-uri "sh" version))
856 (sha256
857 (base32
858 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
859 (build-system python-build-system)
860 (arguments
861 '(#:phases
862 (modify-phases %standard-phases
863 (replace 'check
864 (lambda _
865 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
866 (setenv "HOME" "/tmp")
867 (invoke "python" "sh.py" "test"))))))
868 (native-inputs
869 `(("python-coverage" ,python-coverage)))
870 (home-page "https://github.com/amoffat/sh")
871 (synopsis "Python subprocess replacement")
872 (description "This package provides a replacement for Python's
873 @code{subprocess} feature.")
874 (license license:expat)))
875
876 (define-public python2-sh
877 (package-with-python2 python-sh))
878
879 (define-public python-cftime
880 (package
881 (name "python-cftime")
882 (version "1.0.4.2")
883 (source
884 (origin
885 (method url-fetch)
886 (uri (pypi-uri "cftime" version))
887 (sha256
888 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
889 (build-system python-build-system)
890 (propagated-inputs
891 `(("python-numpy" ,python-numpy)))
892 (native-inputs
893 `(("python-coveralls" ,python-coveralls)
894 ("python-cython" ,python-cython)
895 ("python-pytest-cov" ,python-pytest-cov)))
896 (home-page "https://github.com/Unidata/cftime")
897 (synopsis "Library for time handling")
898 (description
899 "This package provides time-handling functionality that used to be part
900 of the netcdf4 package before.")
901 ;; This package claims to include code under the GPLv3 but is released
902 ;; under ISC.
903 (license (list license:isc license:gpl3+))))
904
905 (define-public python-netcdf4
906 (package
907 (name "python-netcdf4")
908 (version "1.5.3")
909 (source
910 (origin
911 (method url-fetch)
912 (uri (pypi-uri "netCDF4" version))
913 (sha256
914 (base32
915 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
916 (build-system python-build-system)
917 (arguments
918 '(#:phases
919 (modify-phases %standard-phases
920 (add-after 'unpack 'configure-locations
921 (lambda* (#:key inputs #:allow-other-keys)
922 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
923 #t)))))
924 (native-inputs
925 `(("python-cython" ,python-cython)))
926 (propagated-inputs
927 `(("python-numpy" ,python-numpy)
928 ("python-cftime" ,python-cftime)))
929 (inputs
930 `(("netcdf" ,netcdf)
931 ("hdf4" ,hdf4)
932 ("hdf5" ,hdf5)))
933 (home-page "https://github.com/Unidata/netcdf4-python")
934 (synopsis "Python/numpy interface to the netCDF library")
935 (description "Netcdf4-python is a Python interface to the netCDF C
936 library. netCDF version 4 has many features not found in earlier
937 versions of the library and is implemented on top of HDF5. This module
938 can read and write files in both the new netCDF 4 and the old netCDF 3
939 format, and can create files that are readable by HDF5 clients. The
940 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
941 to users of that module.")
942 ;; The software is mainly ISC, but includes some files covered
943 ;; by the Expat license.
944 (license (list license:isc license:expat))))
945
946 (define-public python2-netcdf4
947 (package-with-python2 python-netcdf4))
948
949 (define-public python-license-expression
950 (package
951 (name "python-license-expression")
952 (version "0.999")
953 (source
954 (origin
955 (method url-fetch)
956 (uri (pypi-uri "license-expression" version))
957 (sha256
958 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
959 (build-system python-build-system)
960 (propagated-inputs
961 `(("python-boolean.py" ,python-boolean.py)))
962 (home-page "https://github.com/nexB/license-expression")
963 (synopsis "Apply boolean logic to license expressions")
964 (description
965 "This Python module defines a tiny language to evaluate and compare
966 license expressions using boolean logic. Logical combinations of licenses can
967 be tested for equality, containment, and equivalence. They can be normalised
968 and simplified. It supports SPDX license expressions as well as other naming
969 conventions and aliases in the same expression.")
970 (license license:gpl2+)))
971
972 (define-public python-lockfile
973 (package
974 (name "python-lockfile")
975 (version "0.12.2")
976 (source
977 (origin
978 (method url-fetch)
979 (uri (pypi-uri "lockfile" version))
980 (sha256
981 (base32
982 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
983 (build-system python-build-system)
984 (arguments '(#:test-target "check"))
985 (native-inputs
986 `(("python-pbr" ,python-pbr)))
987 (home-page "https://launchpad.net/pylockfile")
988 (synopsis "Platform-independent file locking module")
989 (description
990 "The lockfile package exports a LockFile class which provides a simple
991 API for locking files.")
992 (license license:expat)))
993
994 (define-public python2-lockfile
995 (package-with-python2 python-lockfile))
996
997 (define-public python-filelock
998 (package
999 (name "python-filelock")
1000 (version "3.0.12")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "filelock" version))
1005 (sha256
1006 (base32
1007 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
1008 (build-system python-build-system)
1009 (home-page
1010 "https://github.com/benediktschmitt/py-filelock")
1011 (synopsis "Platform independent file lock")
1012 (description "@code{filelock} contains a single module implementing
1013 a platform independent file lock in Python, which provides a simple way of
1014 inter-process communication.")
1015 (license license:unlicense)))
1016
1017 (define-public python-semantic-version
1018 (package
1019 (name "python-semantic-version")
1020 (version "2.6.0")
1021 (source
1022 (origin
1023 (method url-fetch)
1024 (uri (pypi-uri "semantic_version" version))
1025 (sha256
1026 (base32
1027 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
1028 (build-system python-build-system)
1029 (arguments
1030 `(#:tests? #f)) ; PyPI tarball lacks tests
1031 (home-page "https://github.com/rbarrois/python-semanticversion")
1032 (synopsis "Semantic versioning module for Python")
1033 (description
1034 "The @code{semantic_version} class is a small library for handling
1035 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
1036
1037 It can compare versions, generate a new version that represents a bump in one of
1038 the version levels, and check whether any given string is a proper semantic
1039 version identifier.")
1040 (license license:bsd-3)))
1041
1042 (define-public python2-semantic-version
1043 (package-with-python2 python-semantic-version))
1044
1045 (define-public python-serpent
1046 (package
1047 (name "python-serpent")
1048 (version "1.28")
1049 (source
1050 (origin
1051 (method url-fetch)
1052 (uri (pypi-uri "serpent" version))
1053 (sha256
1054 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1055 (build-system python-build-system)
1056 (native-inputs
1057 `(("python-attrs" ,python-attrs)
1058 ("python-pytz" ,python-pytz)))
1059 (home-page "https://github.com/irmen/Serpent")
1060 (synopsis "Serializer for literal Python expressions")
1061 (description
1062 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1063 serialization. It serializes an object tree into bytes (an utf-8 encoded
1064 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1065 to rebuild the original object tree.
1066
1067 Because only safe literals are encoded, it is safe to send serpent data to
1068 other machines, such as over the network.")
1069 (properties `((python2-variant . ,(delay python2-serpent))))
1070 (license license:expat)))
1071
1072 (define-public python2-serpent
1073 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1074 (package
1075 (inherit base)
1076 (propagated-inputs
1077 `(("python-enum34" ,python2-enum34)
1078 ,@(package-propagated-inputs base))))))
1079
1080 (define-public python-setuptools
1081 (package
1082 (name "python-setuptools")
1083 (version "41.0.1")
1084 (source
1085 (origin
1086 (method url-fetch)
1087 (uri (pypi-uri "setuptools" version ".zip"))
1088 (sha256
1089 (base32
1090 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1091 (modules '((guix build utils)))
1092 (snippet
1093 '(begin
1094 ;; Remove included binaries which are used to build self-extracting
1095 ;; installers for Windows.
1096 ;; TODO: Find some way to build them ourself so we can include them.
1097 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1098 #t))))
1099 (build-system python-build-system)
1100 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1101 ;; One could bootstrap with an internal untested setuptools.
1102 (arguments
1103 `(#:tests? #f))
1104 (home-page "https://pypi.org/project/setuptools/")
1105 (synopsis
1106 "Library designed to facilitate packaging Python projects")
1107 (description
1108 "Setuptools is a fully-featured, stable library designed to facilitate
1109 packaging Python projects, where packaging includes:
1110 Python package and module definitions,
1111 distribution package metadata,
1112 test hooks,
1113 project installation,
1114 platform-specific details,
1115 Python 3 support.")
1116 ;; TODO: setuptools now bundles the following libraries:
1117 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1118 (license (list license:psfl ; setuptools itself
1119 license:expat ; six, appdirs, pyparsing
1120 license:asl2.0 ; packaging is dual ASL2/BSD-2
1121 license:bsd-2))))
1122
1123 (define-public python2-setuptools
1124 (package-with-python2 python-setuptools))
1125
1126 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1127 (define-public python-setuptools-for-tensorflow
1128 (hidden-package
1129 (package
1130 (inherit python-setuptools)
1131 (version "39.1.0")
1132 (source (origin
1133 (inherit (package-source python-setuptools))
1134 (uri (pypi-uri "setuptools" version ".zip"))
1135 (sha256
1136 (base32
1137 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1138
1139 (define-public python-uniseg
1140 (package
1141 (name "python-uniseg")
1142 (version "0.7.1")
1143 (source
1144 (origin
1145 (method url-fetch)
1146 (uri (pypi-uri "uniseg" version ".zip"))
1147 (sha256
1148 (base32
1149 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1150 (build-system python-build-system)
1151 (arguments
1152 '(#:tests? #f)) ; The test suite requires network access.
1153 (native-inputs
1154 `(("unzip" ,unzip)))
1155 (home-page
1156 "https://bitbucket.org/emptypage/uniseg-python")
1157 (synopsis
1158 "Python library to determine Unicode text segmentations")
1159 (description
1160 "Uniseg is a Python package used to determine Unicode text segmentations.
1161 Supported segmentations include:
1162 @enumerate
1163 @item @dfn{Code point} (any value in the Unicode codespace)
1164 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1165 multiple Unicode code points, e.g. \"G\" + acute-accent)
1166 @item Word break
1167 @item Sentence break
1168 @item Line break
1169 @end enumerate")
1170 (license license:expat)))
1171
1172 (define-public python2-uniseg
1173 (package-with-python2 python-uniseg))
1174
1175 (define-public python-humanfriendly
1176 (package
1177 (name "python-humanfriendly")
1178 (version "8.2")
1179 (source
1180 (origin
1181 (method url-fetch)
1182 (uri (pypi-uri "humanfriendly" version))
1183 (sha256
1184 (base32
1185 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
1186 (build-system python-build-system)
1187 (arguments
1188 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1189 #:tests? #f))
1190 (home-page "https://humanfriendly.readthedocs.io")
1191 (synopsis "Human-friendly input and output in Python")
1192 (description
1193 "The functions and classes in @code{humanfriendly} can be used to make
1194 text interfaces more user-friendly. It includes tools to parse and format
1195 numbers, file sizes, and timespans, timers for long-running operations, menus
1196 to allow the user to choose from a list of options, and terminal interaction
1197 helpers.")
1198 (properties `((python2-variant . ,(delay python2-humanfriendly))))
1199 (license license:expat)))
1200
1201 (define-public python2-humanfriendly
1202 (let ((base (package-with-python2
1203 (strip-python2-variant python-humanfriendly))))
1204 (package (inherit base)
1205 (propagated-inputs
1206 `(("python2-monotonic" ,python2-monotonic)
1207 ,@(package-propagated-inputs base))))))
1208
1209 (define-public python-textparser
1210 (package
1211 (name "python-textparser")
1212 (version "0.23.0")
1213 (source
1214 (origin
1215 (method url-fetch)
1216 (uri (pypi-uri "textparser" version))
1217 (sha256
1218 (base32
1219 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1220 (build-system python-build-system)
1221 (home-page "https://github.com/eerimoq/textparser")
1222 (synopsis "Fast text parser for Python")
1223 (description "This library provides a text parser written in the Python
1224 language. It aims to be fast.")
1225 (license license:expat)))
1226
1227 (define-public python-aenum
1228 (package
1229 (name "python-aenum")
1230 (version "2.2.4")
1231 (source
1232 (origin
1233 (method url-fetch)
1234 (uri (pypi-uri "aenum" version))
1235 (sha256
1236 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
1237 (build-system python-build-system)
1238 (arguments
1239 `(#:phases (modify-phases %standard-phases
1240 (replace 'check
1241 (lambda _
1242 (format #t "current working dir ~s~%" (getcwd))
1243 (setenv "PYTHONPATH"
1244 (string-append ".:" (getenv "PYTHONPATH")))
1245 ;; We must run the test suite module directly, as it
1246 ;; fails to define the 'tempdir' variable in scope for
1247 ;; the tests otherwise
1248 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1249 ;; issues/32/running-tests-with-python-setuppy-test).
1250 (invoke "python3" "aenum/test.py")
1251 ;; This one fails with "NameError: name
1252 ;; 'test_pickle_dump_load' is not defined" (see:
1253 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1254 ;; /error-running-the-test_v3py-test-suite).
1255 ;; (invoke "python3" "aenum/test_v3.py")
1256 #t)))))
1257 (home-page "https://bitbucket.org/stoneleaf/aenum")
1258 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1259 (description "The aenum library includes an @code{Enum} base class, a
1260 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1261 class.")
1262 (license license:bsd-3)))
1263
1264 (define-public python-can
1265 (package
1266 (name "python-can")
1267 (version "3.3.3")
1268 (source
1269 (origin
1270 (method url-fetch)
1271 (uri (pypi-uri "python-can" version))
1272 (sha256
1273 (base32
1274 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1275 (build-system python-build-system)
1276 (arguments
1277 `(#:phases (modify-phases %standard-phases
1278 (add-after 'unpack 'relax-version-requirements
1279 (lambda _
1280 (substitute* "setup.py"
1281 (("mock~=2\\.0") "mock")
1282 (("coverage<5") "coverage")
1283 (("pytest~=4\\.3") "pytest")
1284 (("hypothesis~=4\\.56") "hypothesis"))
1285 #t))
1286 (add-after 'unpack 'fix-broken-tests
1287 ;; The tests try to run two scripts it expects should be
1288 ;; in PATH, but they aren't at this time (see:
1289 ;; https://github.com/hardbyte/python-can/issues/805).
1290 (lambda _
1291 (substitute* "test/test_scripts.py"
1292 (("\"can_logger\\.py --help\"") "")
1293 (("\"can_player\\.py --help\"") ""))
1294 #t)))))
1295 (propagated-inputs
1296 `(("python-aenum" ,python-aenum)
1297 ("python-wrapt" ,python-wrapt)))
1298 (native-inputs
1299 `(("python-codecov" ,python-codecov)
1300 ("python-coverage" ,python-coverage)
1301 ("python-future" ,python-future)
1302 ("python-hypothesis" ,python-hypothesis)
1303 ("python-mock" ,python-mock)
1304 ("python-pyserial" ,python-pyserial)
1305 ("python-pytest" ,python-pytest)
1306 ("python-pytest-cov" ,python-pytest-cov)
1307 ("python-pytest-runner" ,python-pytest-runner)
1308 ("python-pytest-timeout" ,python-pytest-timeout)))
1309 (home-page "https://github.com/hardbyte/python-can")
1310 (synopsis "Controller Area Network (CAN) interface module for Python")
1311 (description "This package defines the @code{can} module, which provides
1312 controller area network (CAN) support for Python developers; providing common
1313 abstractions to different hardware devices, and a suite of utilities for
1314 sending and receiving messages on a CAN bus.")
1315 (license license:lgpl3+)))
1316
1317 (define-public python-diskcache
1318 (package
1319 (name "python-diskcache")
1320 (version "4.1.0")
1321 (source
1322 (origin
1323 (method url-fetch)
1324 (uri (pypi-uri "diskcache" version))
1325 (sha256
1326 (base32
1327 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1328 (build-system python-build-system)
1329 (arguments
1330 `(#:tests? #f)) ;test suite not included in the release
1331 (home-page "http://www.grantjenks.com/docs/diskcache/")
1332 (synopsis "Disk and file backed cache library")
1333 (description "DiskCache is a disk and file backed persistent cache.")
1334 (license license:asl2.0)))
1335
1336 (define-public python-bitstruct
1337 (package
1338 (name "python-bitstruct")
1339 (version "8.9.0")
1340 (source
1341 (origin
1342 (method url-fetch)
1343 (uri (pypi-uri "bitstruct" version))
1344 (sha256
1345 (base32
1346 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1347 (build-system python-build-system)
1348 (home-page "https://github.com/eerimoq/bitstruct")
1349 (synopsis "Python values to and C bit field structs converter")
1350 (description "This module performs conversions between Python values and C
1351 bit field structs represented as Python byte strings. It is intended to have
1352 a similar interface as the @code{struct} module from Python, but working on
1353 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1354 (license license:expat)))
1355
1356 (define-public python-cantools
1357 (package
1358 (name "python-cantools")
1359 (version "33.1.1")
1360 (source
1361 (origin
1362 ;; We take the sources from the Git repository as the documentation is
1363 ;; not included with the PyPI archive.
1364 (method git-fetch)
1365 (uri (git-reference
1366 (url "https://github.com/eerimoq/cantools")
1367 (commit version)))
1368 (file-name (git-file-name name version))
1369 (sha256
1370 (base32
1371 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1372 (build-system python-build-system)
1373 (arguments
1374 `(#:phases
1375 (modify-phases %standard-phases
1376 (add-after 'build 'build-doc
1377 (lambda _
1378 ;; See: https://github.com/eerimoq/cantools/issues/190.
1379 (substitute* "README.rst"
1380 (("https://github.com/eerimoq/cantools/raw/master\
1381 /docs/monitor.png")
1382 "monitor.png"))
1383 (with-directory-excursion "docs"
1384 (invoke "make" "man" "info"))))
1385 (add-after 'install 'install-doc
1386 (lambda* (#:key outputs #:allow-other-keys)
1387 (let* ((out (assoc-ref outputs "out"))
1388 (info (string-append out "/share/info"))
1389 (man1 (string-append out "/share/man/man1")))
1390 (format #t "CWD: ~s~%" (getcwd))
1391 (install-file "docs/_build/texinfo/cantools.info" info)
1392 (install-file "docs/_build/man/cantools.1" man1)
1393 #t))))))
1394 (native-inputs
1395 `(("sphinx" ,python-sphinx)
1396 ("texinfo" ,texinfo)))
1397 (propagated-inputs
1398 `(("python-bitstruct" ,python-bitstruct)
1399 ("python-can" ,python-can)
1400 ("python-diskcache" ,python-diskcache)
1401 ("python-textparser" ,python-textparser)))
1402 (home-page "https://github.com/eerimoq/cantools")
1403 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1404 (description "This package includes Controller Area Network (CAN) related
1405 tools that can be used to:
1406 @itemize
1407 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1408 @item encode and decode CAN messages
1409 @item multiplex simple and extended signals
1410 @item diagnose DID encoding and decoding
1411 @item dump the CAN decoder output
1412 @item test CAN nodes
1413 @item generate C source code
1414 @item monitor the CAN bus
1415 @end itemize")
1416 (license license:expat)))
1417
1418 (define-public python-capturer
1419 (package
1420 (name "python-capturer")
1421 (version "2.4")
1422 (source
1423 (origin
1424 (method url-fetch)
1425 (uri (pypi-uri "capturer" version))
1426 (sha256
1427 (base32
1428 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1429 (build-system python-build-system)
1430 (arguments
1431 `(#:tests? #f))
1432 (propagated-inputs
1433 `(("python-humanfriendly" ,python-humanfriendly)))
1434 (home-page "https://capturer.readthedocs.io")
1435 (synopsis "Capture stdout and stderr streams of the current process")
1436 (description
1437 "The capturer package makes it easy to capture the stdout and stderr
1438 streams of the current process and subprocesses. Output can be relayed
1439 to the terminal in real time but is also available to the Python program
1440 for additional processing.")
1441 (license license:expat)))
1442
1443 (define-public python2-capturer
1444 (package-with-python2 python-capturer))
1445
1446 (define-public python-case
1447 (package
1448 (name "python-case")
1449 (version "1.5.3")
1450 (source
1451 (origin
1452 (method url-fetch)
1453 (uri (pypi-uri "case" version))
1454 (sha256
1455 (base32
1456 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1457 (build-system python-build-system)
1458 (propagated-inputs
1459 `(("python-mock" ,python-mock)
1460 ("python-nose" ,python-nose)
1461 ("python-six" ,python-six)
1462 ("python-unittest2" ,python-unittest2)))
1463 (native-inputs
1464 `(("python-coverage" ,python-coverage)))
1465 (home-page "https://github.com/celery/case")
1466 (synopsis "Unittest utilities and convenience methods")
1467 (description
1468 "The @code{case} package provides utilities on top of unittest, including
1469 some helpful Python 2 compatibility convenience methods.")
1470 (license license:bsd-3)))
1471
1472 (define-public python-verboselogs
1473 (package
1474 (name "python-verboselogs")
1475 (version "1.7")
1476 (source
1477 (origin
1478 (method url-fetch)
1479 (uri (pypi-uri "verboselogs" version))
1480 (sha256
1481 (base32
1482 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1483 (build-system python-build-system)
1484 (arguments
1485 `(#:phases
1486 (modify-phases %standard-phases
1487 (replace 'check
1488 (lambda _
1489 ;; Do not run pylint plugin test, as astroid is an old
1490 ;; unsupported version.
1491 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1492 "verboselogs/tests.py"))))))
1493 (native-inputs
1494 `(("python-mock" ,python-mock)
1495 ("python-pytest" ,python-pytest)))
1496 (home-page "https://verboselogs.readthedocs.io")
1497 (synopsis "Verbose logging level for Python's logging module")
1498 (description
1499 "The @code{verboselogs} package extends Python's @code{logging} module to
1500 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1501 (license license:expat)))
1502
1503 (define-public python2-verboselogs
1504 (package-with-python2 python-verboselogs))
1505
1506 (define-public python-coloredlogs
1507 (package
1508 (name "python-coloredlogs")
1509 (version "10.0")
1510 (source
1511 (origin
1512 (method url-fetch)
1513 (uri (pypi-uri "coloredlogs" version))
1514 (sha256
1515 (base32
1516 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1517 (build-system python-build-system)
1518 (arguments
1519 `(;Tests require some updated modules
1520 #:tests? #f))
1521 (propagated-inputs
1522 `(("python-capturer" ,python-capturer)))
1523 (home-page "https://coloredlogs.readthedocs.io")
1524 (synopsis "Colored stream handler for Python's logging module")
1525 (description
1526 "The @code{coloredlogs} package enables colored terminal output for
1527 Python's logging module. The @code{ColoredFormatter} class inherits from
1528 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1529 messages in color.")
1530 (license license:expat)))
1531
1532 (define-public python2-coloredlogs
1533 (package-with-python2 python-coloredlogs))
1534
1535 (define-public python-editorconfig
1536 (package
1537 (name "python-editorconfig")
1538 (version "0.12.2")
1539 (source
1540 (origin
1541 (method url-fetch)
1542 (uri (pypi-uri "EditorConfig" version))
1543 (sha256
1544 (base32
1545 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1546 (build-system python-build-system)
1547 (home-page "https://editorconfig.org/")
1548 (synopsis "EditorConfig bindings for python")
1549 (description "The EditorConfig project consists of a file format for
1550 defining coding styles and a collection of text editor plugins that enable
1551 editors to read the file format and adhere to defined styles. EditorConfig
1552 files are easily readable and they work nicely with version control systems.")
1553 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1554 (license (list license:bsd-2 license:psfl))))
1555
1556 (define-public dosage
1557 (package
1558 (name "dosage")
1559 (version "2.17")
1560 (source
1561 (origin
1562 (method url-fetch)
1563 (uri (pypi-uri "dosage" version))
1564 (sha256
1565 (base32
1566 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
1567 (build-system python-build-system)
1568 (propagated-inputs
1569 `(("python2-backports-functools-lru-cache"
1570 ,python2-backports-functools-lru-cache)
1571 ("python2-backports-shutil-get-terminal-size"
1572 ,python2-backports-shutil-get-terminal-size)
1573 ("python-cached-property" ,python-cached-property)
1574 ("python-colorama" ,python-colorama)
1575 ("python-imagesize" ,python-imagesize)
1576 ("python-importlib-metadata" ,python-importlib-metadata)
1577 ("python-lxml" ,python-lxml)
1578 ("python-requests" ,python-requests)
1579 ("python-six" ,python-six)))
1580 (native-inputs
1581 `(("python-pytest-cov" ,python-pytest-cov)
1582 ("python-pytest-xdist" ,python-pytest-xdist)
1583 ("python-responses" ,python-responses)
1584 ("python-setuptools-scm" ,python-setuptools-scm)))
1585 (home-page "https://github.com/webcomics/dosage")
1586 (synopsis "Comic strip downloader and archiver")
1587 (description "Dosage is designed to keep a local copy of specific webcomics and other
1588 picture-based content such as Picture of the Day sites. With the @command{dosage}
1589 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
1590 downloaded, or download a strip for a particular date or index, if possible.")
1591 (license license:expat)))
1592
1593 (define-public python-et-xmlfile
1594 (package
1595 (name "python-et-xmlfile")
1596 (version "1.0.1")
1597 (source
1598 (origin
1599 (method url-fetch)
1600 (uri (pypi-uri "et_xmlfile" version))
1601 (sha256
1602 (base32
1603 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1604 (build-system python-build-system)
1605 (arguments
1606 `(#:phases (modify-phases %standard-phases
1607 (replace 'check
1608 (lambda _
1609 (invoke "pytest"))))))
1610 (native-inputs
1611 `(("python-pytest" ,python-pytest)
1612 ("python-lxml" ,python-lxml))) ;used for the tests
1613 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1614 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1615 (description "This Python library is based upon the @code{xmlfile} module
1616 from @code{lxml}. It aims to provide a low memory, compatible implementation
1617 of @code{xmlfile}.")
1618 (license license:expat)))
1619
1620 (define-public python2-et-xmlfile
1621 (package-with-python2 python-et-xmlfile))
1622
1623 (define-public python-openpyxl
1624 (package
1625 (name "python-openpyxl")
1626 (version "2.6.2")
1627 (source
1628 (origin
1629 ;; We use the upstream repository, as the tests are not included in the
1630 ;; PyPI releases.
1631 (method hg-fetch)
1632 (uri (hg-reference
1633 (url "https://bitbucket.org/openpyxl/openpyxl")
1634 (changeset version)))
1635 (file-name (string-append name "-" version "-checkout"))
1636 (sha256
1637 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1638 (build-system python-build-system)
1639 (arguments
1640 `(#:phases (modify-phases %standard-phases
1641 (replace 'check
1642 (lambda _
1643 (invoke "pytest"))))))
1644 (native-inputs
1645 ;; For the test suite.
1646 `(("python-lxml" ,python-lxml)
1647 ("python-pillow" ,python-pillow)
1648 ("python-pytest" ,python-pytest)))
1649 (propagated-inputs
1650 `(("python-et-xmlfile" ,python-et-xmlfile)
1651 ("python-jdcal" ,python-jdcal)))
1652 (home-page "https://openpyxl.readthedocs.io")
1653 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1654 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1655 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1656 standard.")
1657 (license license:expat)))
1658
1659 (define-public python-eventlet
1660 (package
1661 (name "python-eventlet")
1662 (version "0.25.1")
1663 (source
1664 (origin
1665 (method url-fetch)
1666 (uri (pypi-uri "eventlet" version))
1667 (sha256
1668 (base32
1669 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1670 (build-system python-build-system)
1671 (propagated-inputs
1672 `(("python-greenlet" ,python-greenlet)))
1673 (arguments
1674 ;; TODO: Requires unpackaged 'enum-compat'.
1675 '(#:tests? #f))
1676 (home-page "https://eventlet.net")
1677 (synopsis "Concurrent networking library for Python")
1678 (description
1679 "Eventlet is a concurrent networking library for Python that
1680 allows you to change how you run your code, not how you write it.
1681 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1682 Coroutines ensure that the developer uses a blocking style of programming
1683 that is similar to threading, but provide the benefits of non-blocking I/O.
1684 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1685 from the Python interpreter, or as a small part of a larger application.")
1686 (license license:expat)))
1687
1688 (define-public python2-eventlet
1689 (let ((base (package-with-python2
1690 (strip-python2-variant python-eventlet))))
1691 (package (inherit base)
1692 (propagated-inputs
1693 `(("python2-enum34" ,python2-enum34)
1694 ,@(package-propagated-inputs base))))))
1695
1696 (define-public python-six
1697 (package
1698 (name "python-six")
1699 (version "1.14.0")
1700 (source
1701 (origin
1702 (method url-fetch)
1703 (uri (pypi-uri "six" version))
1704 (sha256
1705 (base32
1706 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1707 (build-system python-build-system)
1708 (arguments
1709 `(#:phases
1710 (modify-phases %standard-phases
1711 (replace 'check
1712 (lambda _
1713 (invoke "py.test" "-v"))))))
1714 (native-inputs
1715 `(("python-pytest" ,python-pytest-bootstrap)))
1716 (home-page "https://pypi.org/project/six/")
1717 (synopsis "Python 2 and 3 compatibility utilities")
1718 (description
1719 "Six is a Python 2 and 3 compatibility library. It provides utility
1720 functions for smoothing over the differences between the Python versions with
1721 the goal of writing Python code that is compatible on both Python versions.
1722 Six supports every Python version since 2.5. It is contained in only one
1723 Python file, so it can be easily copied into your project.")
1724 (license license:x11)))
1725
1726 (define-public python2-six
1727 (package-with-python2 python-six))
1728
1729 (define-public python-six-bootstrap
1730 (package
1731 (inherit python-six)
1732 (name "python-six-bootstrap")
1733 (native-inputs `())
1734 (arguments `(#:tests? #f))))
1735
1736 (define-public python2-six-bootstrap
1737 (package-with-python2 python-six-bootstrap))
1738
1739 (define-public python-schedule
1740 (package
1741 (name "python-schedule")
1742 (version "0.4.3")
1743 (source
1744 (origin
1745 (method url-fetch)
1746 (uri (pypi-uri "schedule" version))
1747 (sha256
1748 (base32
1749 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1750 (build-system python-build-system)
1751 (native-inputs
1752 `(("python-pytest" ,python-pytest)
1753 ("python-mock" ,python-mock)))
1754 (home-page "https://github.com/dbader/schedule")
1755 (synopsis "Schedule periodic function calls in Python")
1756 (description
1757 "Schedule is an in-process scheduler for periodic jobs that uses the
1758 builder pattern for configuration. Schedule lets you run Python functions (or
1759 any other callable) periodically at pre-determined intervals using a simple,
1760 human-friendly syntax.")
1761 (license license:expat)))
1762
1763 (define-public python2-schedule
1764 (package-with-python2 python-schedule))
1765
1766 (define-public python-mechanize
1767 (package
1768 (name "python-mechanize")
1769 (version "0.4.5")
1770 (source
1771 (origin
1772 (method url-fetch)
1773 (uri (pypi-uri "mechanize" version))
1774 (sha256
1775 (base32
1776 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1777 (build-system python-build-system)
1778 (propagated-inputs
1779 `(("python-html5lib" ,python-html5lib)))
1780 (home-page "https://github.com/python-mechanize/mechanize")
1781 (synopsis
1782 "Stateful programmatic web browsing in Python")
1783 (description
1784 "Mechanize implements stateful programmatic web browsing in Python,
1785 after Andy Lester’s Perl module WWW::Mechanize.")
1786 (license license:bsd-3)))
1787
1788 (define-public python2-mechanize
1789 (package-with-python2 python-mechanize))
1790
1791 (define-public python-simplejson
1792 (package
1793 (name "python-simplejson")
1794 (version "3.17.0")
1795 (source
1796 (origin
1797 (method url-fetch)
1798 (uri (pypi-uri "simplejson" version))
1799 (sha256
1800 (base32
1801 "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
1802 (build-system python-build-system)
1803 (home-page "http://simplejson.readthedocs.org/en/latest/")
1804 (synopsis
1805 "Json library for Python")
1806 (description
1807 "JSON (JavaScript Object Notation) is a subset of JavaScript
1808 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1809 format.
1810
1811 Simplejson exposes an API familiar to users of the standard library marshal
1812 and pickle modules. It is the externally maintained version of the json
1813 library contained in Python 2.6, but maintains compatibility with Python 2.5
1814 and (currently) has significant performance advantages, even without using
1815 the optional C extension for speedups. Simplejson is also supported on
1816 Python 3.3+.")
1817 (license license:x11)))
1818
1819 (define-public python2-simplejson
1820 (package-with-python2 python-simplejson))
1821
1822
1823 (define-public python-pyicu
1824 (package
1825 (name "python-pyicu")
1826 (version "2.4.3")
1827 (source
1828 (origin
1829 (method url-fetch)
1830 (uri (pypi-uri "PyICU" version))
1831 (sha256
1832 (base32
1833 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1834 (build-system python-build-system)
1835 (inputs
1836 `(("icu4c" ,icu4c)))
1837 (native-inputs
1838 `(("python-pytest" ,python-pytest)
1839 ("python-six" ,python-six)))
1840 (home-page "https://github.com/ovalhub/pyicu")
1841 (synopsis "Python extension wrapping the ICU C++ API")
1842 (description
1843 "PyICU is a python extension wrapping the ICU C++ API.")
1844 (license license:x11)))
1845
1846 (define-public python2-pyicu
1847 (package-with-python2 python-pyicu))
1848
1849 (define-public python-dogtail
1850 (package
1851 (name "python-dogtail")
1852 (version "0.9.11")
1853 (source (origin
1854 (method url-fetch)
1855 (uri
1856 (string-append
1857 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1858 "dogtail-" version ".tar.gz"))
1859 (sha256
1860 (base32
1861 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1862 (build-system python-build-system)
1863 (arguments
1864 `(#:tests? #f ; TODO Launching dbus for the tests
1865 ; fails
1866 #:phases
1867 (modify-phases %standard-phases
1868 (replace 'check
1869 (lambda* (#:key tests? #:allow-other-keys)
1870 (when tests?
1871 (system "Xvfb :1 &")
1872 (setenv "DISPLAY" ":1")
1873 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1874 #t)))))
1875 (propagated-inputs
1876 `(("python-pygobject" ,python-pygobject)
1877 ("python-pycairo" ,python-pycairo)
1878 ("python-pyatspi" ,python-pyatspi)))
1879 (native-inputs
1880 `(("python-nose" ,python-nose)
1881 ("gtk+" ,gtk+)
1882 ("xvfb" ,xorg-server)
1883 ("dbus" ,dbus)
1884 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1885 ("gobject-introspection" ,gobject-introspection)))
1886 (home-page "https://gitlab.com/dogtail/dogtail/")
1887 (synopsis "GUI test tool and automation framework written in Python")
1888 (description
1889 "Dogtail is a GUI test tool and automation framework written in Python.
1890 It uses Accessibility (a11y) technologies to communicate with desktop
1891 applications. dogtail scripts are written in Python and executed like any
1892 other Python program.")
1893 (license license:gpl2+)))
1894
1895 (define-public python2-dogtail
1896 (package-with-python2 python-dogtail))
1897
1898 (define-public python-empy
1899 (package
1900 (name "python-empy")
1901 (version "3.3.3")
1902 (source (origin
1903 (method url-fetch)
1904 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1905 version ".tar.gz"))
1906 (sha256
1907 (base32
1908 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1909 (build-system python-build-system)
1910 (arguments
1911 `(#:tests? #f)) ; python2 only
1912 (home-page "http://www.alcyone.com/software/empy/")
1913 (synopsis "Templating system for Python")
1914 (description
1915 "EmPy is a system for embedding Python expressions and statements in
1916 template text; it takes an EmPy source file, processes it, and produces
1917 output. This is accomplished via expansions, which are special signals to the
1918 EmPy system and are set off by a special prefix (by default the at sign, @@).
1919 EmPy can expand arbitrary Python expressions and statements in this way, as
1920 well as a variety of special forms. Textual data not explicitly delimited in
1921 this way is sent unaffected to the output, allowing Python to be used in
1922 effect as a markup language. Also supported are callbacks via hooks,
1923 recording and playback via diversions, and dynamic, chainable filters. The
1924 system is highly configurable via command line options and embedded
1925 commands.")
1926 (license license:lgpl2.1+)))
1927
1928 (define-public python2-empy
1929 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1930 (package
1931 (inherit base)
1932 (arguments `(,@(package-arguments base)
1933 #:tests? #t)))))
1934
1935 (define-public python2-element-tree
1936 (package
1937 (name "python2-element-tree")
1938 (version "1.2.6")
1939 (source (origin
1940 (method url-fetch)
1941 (uri (string-append
1942 "http://effbot.org/media/downloads/elementtree-"
1943 version "-20050316.tar.gz"))
1944 (sha256
1945 (base32
1946 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1947 (build-system python-build-system)
1948 (arguments
1949 `(#:python ,python-2 ; seems to be part of Python 3
1950 #:tests? #f)) ; no 'test' sub-command
1951 (synopsis "Toolkit for XML processing in Python")
1952 (description
1953 "ElementTree is a Python library supporting lightweight XML processing.")
1954 (home-page "https://effbot.org/zone/element-index.htm")
1955 (license (license:x11-style
1956 "http://docs.python.org/2/license.html"
1957 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1958
1959 (define-public python2-pybugz
1960 (package
1961 (name "python2-pybugz")
1962 (version "0.6.11")
1963 (source (origin
1964 (method url-fetch)
1965 (uri (string-append
1966 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1967 version ".tar.gz"))
1968 (sha256
1969 (base32
1970 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1971 (patches (search-patches "pybugz-stty.patch"
1972 "pybugz-encode-error.patch"))))
1973 (build-system python-build-system)
1974 (arguments
1975 `(#:python ,python-2 ; SyntaxError with Python 3
1976 #:tests? #f)) ; no 'test' sub-command
1977 (propagated-inputs
1978 `(("element-tree" ,python2-element-tree)))
1979 (synopsis "Python and command-line interface to Bugzilla")
1980 (description
1981 "PyBugz is a Python library and command-line tool to query the Bugzilla
1982 bug tracking system. It is meant as an aid to speed up interaction with the
1983 bug tracker.")
1984 (home-page "http://www.liquidx.net/pybugz/")
1985 (license license:gpl2)))
1986
1987 (define-public python2-enum
1988 (package
1989 (name "python2-enum")
1990 (version "0.4.6")
1991 (source (origin
1992 (method url-fetch)
1993 (uri (pypi-uri "enum" version))
1994 (sha256
1995 (base32
1996 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1997 (build-system python-build-system)
1998 (arguments
1999 `(#:python ,python-2))
2000 (home-page "https://pypi.org/project/enum/")
2001 (synopsis "Robust enumerated type support in Python")
2002 (description
2003 "This provides a module for robust enumerations in Python. It has
2004 been superseded by the Python standard library and is provided only for
2005 compatibility.")
2006 ;; Choice of either license.
2007 (license (list license:gpl3+ license:psfl))))
2008
2009 (define-public python-enum34
2010 (package
2011 (name "python-enum34")
2012 (version "1.1.6")
2013 (source
2014 (origin
2015 (method url-fetch)
2016 (uri (pypi-uri "enum34" version))
2017 (sha256
2018 (base32
2019 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
2020 (build-system python-build-system)
2021 (home-page "https://pypi.org/project/enum34/")
2022 (synopsis "Backported Python 3.4 Enum")
2023 (description
2024 "Enum34 is the new Python stdlib enum module available in Python 3.4
2025 backported for previous versions of Python from 2.4 to 3.3.")
2026 (license license:bsd-3)))
2027
2028 (define-public python2-enum34
2029 (package-with-python2 python-enum34))
2030
2031 (define-public python-parse-type
2032 (package
2033 (name "python-parse-type")
2034 (version "0.4.2")
2035 (source
2036 (origin
2037 (method url-fetch)
2038 (uri (pypi-uri "parse_type" version))
2039 (sha256
2040 (base32
2041 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
2042 (build-system python-build-system)
2043 (propagated-inputs
2044 `(("python-six" ,python-six)
2045 ("python-parse" ,python-parse)))
2046 (native-inputs
2047 `(("python-pytest" ,python-pytest)
2048 ("python-pytest-runner" ,python-pytest-runner)))
2049 (home-page "https://github.com/jenisys/parse_type")
2050 (synopsis "Extended parse module")
2051 (description
2052 "Parse_type extends the python parse module.")
2053 (properties
2054 `((python2-variant . ,(delay python2-parse-type))))
2055 (license license:bsd-3)))
2056
2057 (define-public python2-parse-type
2058 (let ((base (package-with-python2
2059 (strip-python2-variant python-parse-type))))
2060 (package (inherit base)
2061 (propagated-inputs
2062 `(("python2-enum34" ,python2-enum34)
2063 ,@(package-propagated-inputs base))))))
2064
2065 (define-public python-parse
2066 (package
2067 (name "python-parse")
2068 (version "1.8.4")
2069 (source
2070 (origin
2071 (method url-fetch)
2072 (uri (pypi-uri "parse" version))
2073 (sha256
2074 (base32
2075 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
2076 (build-system python-build-system)
2077 (arguments
2078 `(#:phases
2079 (modify-phases %standard-phases
2080 (replace 'check
2081 (lambda _ (invoke "python" "test_parse.py"))))))
2082 (home-page "https://github.com/r1chardj0n3s/parse")
2083 (synopsis "Parse strings")
2084 (description
2085 "Parse strings using a specification based on the Python @code{format()}
2086 syntax.")
2087 (license license:x11)))
2088
2089 (define-public python-polib
2090 (package
2091 (name "python-polib")
2092 (version "1.0.8")
2093 (source (origin
2094 (method url-fetch)
2095 (uri (pypi-uri "polib" version))
2096 (sha256
2097 (base32
2098 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2099 (build-system python-build-system)
2100 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2101 (synopsis "Manipulate, create and modify gettext files")
2102 (description "Polib can manipulate any gettext format (po, pot and mo)
2103 files. It can be used to create po files from scratch or to modify
2104 existing ones.")
2105 (license license:expat)))
2106
2107 (define-public python2-polib
2108 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2109 (package
2110 (inherit base)
2111 (arguments `(,@(package-arguments base)
2112 ;; Tests don't work with python2.
2113 #:tests? #f)))))
2114
2115 (define-public python-poyo
2116 (package
2117 (name "python-poyo")
2118 (version "0.5.0")
2119 (source
2120 (origin
2121 (method url-fetch)
2122 (uri (pypi-uri "poyo" version))
2123 (sha256
2124 (base32
2125 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2126 (build-system python-build-system)
2127 (home-page "https://github.com/hackebrot/poyo")
2128 (synopsis "Lightweight YAML Parser for Python")
2129 (description
2130 "This package provides a lightweight YAML Parser for Python. It supports
2131 only a chosen subset of the YAML format that is required to parse cookiecutter
2132 user configuration files. It does not have support for serializing into YAML
2133 and is not compatible with JSON.")
2134 (license license:expat)))
2135
2136 (define-public scons
2137 (package
2138 (name "scons")
2139 (version "3.0.4")
2140 (source (origin
2141 (method git-fetch)
2142 (uri (git-reference
2143 (url "https://github.com/SCons/scons")
2144 (commit version)))
2145 (file-name (git-file-name name version))
2146 (sha256
2147 (base32
2148 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2149 (build-system python-build-system)
2150 (arguments
2151 `(#:use-setuptools? #f ; still relies on distutils
2152 #:tests? #f ; no 'python setup.py test' command
2153 #:phases
2154 (modify-phases %standard-phases
2155 (add-before 'build 'bootstrap
2156 (lambda _
2157 (substitute* "src/engine/SCons/compat/__init__.py"
2158 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2159 "sys.modules[new] = __import__(old)"))
2160 (substitute* "src/engine/SCons/Platform/__init__.py"
2161 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2162 "mod = __import__(full_name)"))
2163 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2164 (chdir "build/scons")
2165 #t)))))
2166 (home-page "https://scons.org/")
2167 (synopsis "Software construction tool written in Python")
2168 (description
2169 "SCons is a software construction tool. Think of SCons as an improved,
2170 cross-platform substitute for the classic Make utility with integrated
2171 functionality similar to autoconf/automake and compiler caches such as ccache.
2172 In short, SCons is an easier, more reliable and faster way to build
2173 software.")
2174 (license license:x11)))
2175
2176 (define-public scons-python2
2177 (package
2178 (inherit (package-with-python2 scons))
2179 (name "scons-python2")))
2180
2181 (define-public python-extras
2182 (package
2183 (name "python-extras")
2184 (version "1.0.0")
2185 (source
2186 (origin
2187 (method url-fetch)
2188 (uri (pypi-uri "extras" version))
2189 (sha256
2190 (base32
2191 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2192 (build-system python-build-system)
2193 (arguments
2194 ;; FIXME: Circular dependency on testtools.
2195 '(#:tests? #f))
2196 (home-page "https://github.com/testing-cabal/extras")
2197 (synopsis "Useful extensions to the Python standard library")
2198 (description
2199 "Extras is a set of extensions to the Python standard library.")
2200 (license license:expat)))
2201
2202 (define-public python2-extras
2203 (package-with-python2 python-extras))
2204
2205 (define-public python-mimeparse
2206 (package
2207 (name "python-mimeparse")
2208 (version "1.6.0")
2209 (source
2210 (origin
2211 (method url-fetch)
2212 (uri (pypi-uri "python-mimeparse" version))
2213 (sha256
2214 (base32
2215 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2216 (build-system python-build-system)
2217 (arguments
2218 '(#:phases
2219 (modify-phases %standard-phases
2220 (replace 'check
2221 (lambda _
2222 (invoke "./mimeparse_test.py"))))))
2223 (home-page
2224 "https://github.com/dbtsai/python-mimeparse")
2225 (synopsis "Python library for parsing MIME types")
2226 (description
2227 "Mimeparse provides basic functions for parsing MIME type names and
2228 matching them against a list of media-ranges.")
2229 (license license:expat)))
2230
2231 (define-public python2-mimeparse
2232 (package-with-python2 python-mimeparse))
2233
2234 (define-public python-miniboa
2235 (package
2236 (name "python-miniboa")
2237 (version "1.0.7")
2238 (source
2239 (origin
2240 (method url-fetch)
2241 (uri (pypi-uri "miniboa" version))
2242 (sha256
2243 (base32
2244 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2245 (build-system python-build-system)
2246 (home-page "https://github.com/shmup/miniboa")
2247 (synopsis "Simple, single-threaded Telnet server")
2248 (description
2249 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2250 server.")
2251 (license license:asl2.0)))
2252
2253 (define-public python2-miniboa
2254 (package-with-python2 python-miniboa))
2255
2256 (define-public python-pafy
2257 (package
2258 (name "python-pafy")
2259 (version "0.5.3.1")
2260 (source
2261 (origin
2262 (method url-fetch)
2263 (uri (pypi-uri "pafy" version))
2264 (sha256
2265 (base32
2266 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2267 (build-system python-build-system)
2268 (arguments
2269 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2270 (propagated-inputs
2271 ;; Youtube-dl is a python package which is imported in the file
2272 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2273 `(("youtube-dl" ,youtube-dl)))
2274 (home-page "https://np1.github.io/pafy/")
2275 (synopsis "Retrieve YouTube content and metadata")
2276 (description
2277 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2278 (license license:lgpl3+)))
2279
2280 (define-public python2-funcsigs
2281 (package
2282 (name "python2-funcsigs")
2283 (version "1.0.2")
2284 (source (origin
2285 (method url-fetch)
2286 (uri (pypi-uri "funcsigs" version))
2287 (sha256
2288 (base32
2289 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2290 (build-system python-build-system)
2291 (arguments
2292 `(#:python ,python-2))
2293 (native-inputs
2294 `(("python2-unittest2" ,python2-unittest2)))
2295 (home-page "http://funcsigs.readthedocs.org")
2296 (synopsis "Python function signatures from PEP362")
2297 (description
2298 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2299 (license license:asl2.0)))
2300
2301 (define-public python2-funcsigs-bootstrap
2302 (package
2303 (inherit python2-funcsigs)
2304 (name "python2-funcsigs-bootstrap")
2305 (native-inputs `())
2306 (arguments
2307 `(#:tests? #f
2308 ,@(package-arguments python2-funcsigs)))))
2309
2310 (define-public python-py
2311 (package
2312 (name "python-py")
2313 (version "1.8.1")
2314 (source
2315 (origin
2316 (method url-fetch)
2317 (uri (pypi-uri "py" version))
2318 (sha256
2319 (base32
2320 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2321 (build-system python-build-system)
2322 (arguments
2323 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2324 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2325 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2326 ;; Is this module globally installed?"
2327 '(#:tests? #f))
2328 (native-inputs
2329 `(("python-setuptools-scm" ,python-setuptools-scm)))
2330 (home-page "https://github.com/pytest-dev/py")
2331 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2332 (description
2333 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2334 code introspection, and logging.")
2335 (license license:expat)))
2336
2337 (define-public python2-py
2338 (package-with-python2 python-py))
2339
2340 ;; Recent versions of python-fixtures and python-testrepository need
2341 ;; python-pbr for packaging, which itself needs these two packages for
2342 ;; testing.
2343 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2344 ;; same source, just without any test dependencies and with tests disabled.
2345 ;; python-pbr-minmal is then used to package python-fixtures and
2346 ;; python-testrepository.
2347 ;; Strictly speaking we currently could remove the test-requirements from the
2348 ;; normal python-pbr package (and save this package) since test are disabled
2349 ;; there anyway. But this may change in future.
2350 (define-public python-pbr-minimal
2351 (package
2352 (name "python-pbr-minimal")
2353 (version "3.0.1")
2354 (source
2355 (origin
2356 (method url-fetch)
2357 (uri (pypi-uri "pbr" version))
2358 (sha256
2359 (base32
2360 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2361 (build-system python-build-system)
2362 (arguments
2363 `(#:tests? #f))
2364 (home-page "https://docs.openstack.org/pbr/latest/")
2365 (synopsis "Minimal build of python-pbr used for bootstrapping")
2366 (description
2367 "Used only for bootstrapping python2-pbr, you should not need this.")
2368 (license license:asl2.0)))
2369
2370 (define-public python2-pbr-minimal
2371 (package-with-python2 python-pbr-minimal))
2372
2373 (define-public python-pbr
2374 (package
2375 (inherit python-pbr-minimal)
2376 (name "python-pbr")
2377 (arguments
2378 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2379 (propagated-inputs
2380 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2381 (native-inputs
2382 `(("python-fixtures" ,python-fixtures-bootstrap)
2383 ;; discover, coverage, hacking, subunit
2384 ("python-mock" ,python-mock)
2385 ("python-six" ,python-six)
2386 ("python-sphinx" ,python-sphinx)
2387 ("python-testrepository" ,python-testrepository-bootstrap)
2388 ("python-testresources" ,python-testresources-bootstrap)
2389 ("python-testscenarios" ,python-testscenarios-bootstrap)
2390 ("python-testtools" ,python-testtools-bootstrap)
2391 ("python-virtualenv" ,python-virtualenv)))
2392 (synopsis "Enhance the default behavior of Python’s setuptools")
2393 (description
2394 "Python Build Reasonableness (PBR) is a library that injects some useful
2395 and sensible default behaviors into your setuptools run. It will set
2396 versions, process requirements files and generate AUTHORS and ChangeLog file
2397 from git information.
2398 ")))
2399
2400 (define-public python2-pbr
2401 (package-with-python2 python-pbr))
2402
2403 (define-public python-pyrsistent
2404 (package
2405 (name "python-pyrsistent")
2406 (version "0.16.0")
2407 (home-page "https://github.com/tobgu/pyrsistent")
2408 (source (origin
2409 (method url-fetch)
2410 (uri (pypi-uri "pyrsistent" version))
2411 (sha256
2412 (base32
2413 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2414 (build-system python-build-system)
2415 (arguments
2416 '(#:phases (modify-phases %standard-phases
2417 ;; The package works fine with newer Pytest and Hypothesis, but
2418 ;; has pinned older versions to stay compatible with Python 2.
2419 (add-before 'check 'loosen-pytest-requirement
2420 (lambda _
2421 (substitute* "setup.py"
2422 (("pytest<5") "pytest")
2423 (("hypothesis<5") "hypothesis"))
2424 #t)))))
2425 (native-inputs
2426 `(("python-hypothesis" ,python-hypothesis)
2427 ("python-pytest" ,python-pytest)
2428 ("python-pytest-runner" ,python-pytest-runner)))
2429 (propagated-inputs
2430 `(("python-six" ,python-six)))
2431 (synopsis "Persistent data structures for Python")
2432 (description
2433 "Pyrsistent is a number of persistent collections (by some referred to as
2434 functional data structures). Persistent in the sense that they are immutable.
2435
2436 All methods on a data structure that would normally mutate it instead return a
2437 new copy of the structure containing the requested updates. The original
2438 structure is left untouched.")
2439 (license license:expat)))
2440
2441 (define-public python2-pyrsistent
2442 (package-with-python2 python-pyrsistent))
2443
2444 (define-public python-exif-read
2445 (package
2446 (name "python-exif-read")
2447 (version "2.1.2")
2448 (source (origin
2449 (method url-fetch)
2450 (uri (pypi-uri "ExifRead" version))
2451 (sha256
2452 (base32
2453 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2454 (build-system python-build-system)
2455 (arguments `(#:tests? #f)) ; no tests
2456 (home-page "https://github.com/ianare/exif-py")
2457 (synopsis "Python library to extract EXIF data from image files")
2458 (description
2459 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2460 files.")
2461 (license license:bsd-3)))
2462
2463 (define-public python2-exif-read
2464 (package-with-python2 python-exif-read))
2465
2466 (define-public python-pyld
2467 (package
2468 (name "python-pyld")
2469 (version "1.0.5")
2470 (source (origin
2471 (method url-fetch)
2472 (uri (pypi-uri "PyLD" version))
2473 (sha256
2474 (base32
2475 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2476 (build-system python-build-system)
2477 (home-page "https://github.com/digitalbazaar/pyld")
2478 (synopsis "Python implementation of the JSON-LD specification")
2479 (description
2480 "PyLD is an implementation of the JSON-LD specification.")
2481 (license license:bsd-3)))
2482
2483 (define-public python2-pyld
2484 (package-with-python2 python-pyld))
2485
2486 (define-public python-cli-helpers
2487 (package
2488 (name "python-cli-helpers")
2489 (version "2.0.1")
2490 (source
2491 (origin
2492 ;; There's no source tarball on PyPI.
2493 (method git-fetch)
2494 (uri (git-reference
2495 (url "https://github.com/dbcli/cli_helpers")
2496 (commit (string-append "v" version))))
2497 (file-name (git-file-name name version))
2498 (sha256
2499 (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
2500 (build-system python-build-system)
2501 (native-inputs
2502 `(("python-pytest" ,python-pytest)))
2503 (propagated-inputs
2504 `(("python-wcwidth" ,python-wcwidth)
2505 ("python-configobj" ,python-configobj)
2506 ("python-tabulate" ,python-tabulate)
2507 ("python-terminaltables" ,python-terminaltables)))
2508 (home-page "https://github.com/dbcli/cli_helpers")
2509 (synopsis "Helpers for building command-line apps")
2510 (description
2511 "CLI Helpers is a Python package that makes it easy to perform common
2512 tasks when building command-line apps. It's a helper library for command-line
2513 interfaces.")
2514 (license license:bsd-3)))
2515
2516 (define-public python-click
2517 (package
2518 (name "python-click")
2519 (version "7.1.2")
2520 (source
2521 (origin
2522 (method url-fetch)
2523 (uri (pypi-uri "click" version))
2524 (sha256
2525 (base32
2526 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
2527 (build-system python-build-system)
2528 (arguments
2529 `(#:phases
2530 (modify-phases %standard-phases
2531 (add-after 'unpack 'fix-paths
2532 (lambda* (#:key inputs #:allow-other-keys)
2533 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2534 "cross-libc" "libc"))))
2535 (substitute* "src/click/_unicodefun.py"
2536 (("'locale'")
2537 (string-append "'" glibc "/bin/locale'"))))
2538 #t))
2539 (replace 'check
2540 (lambda _
2541 (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
2542 (invoke "python" "-m" "pytest"))))))
2543 (native-inputs
2544 `(("python-pytest" ,python-pytest)))
2545 (home-page "https://palletsprojects.com/p/click/")
2546 (synopsis "Command line library for Python")
2547 (description
2548 "Click is a Python package for creating command line interfaces in a
2549 composable way with as little code as necessary. Its name stands for
2550 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2551 with sensible defaults out of the box.")
2552 (license license:bsd-3)))
2553
2554 (define-public python2-click
2555 (package-with-python2 python-click))
2556
2557 (define-public python-click-5
2558 (package (inherit python-click)
2559 (name "python-click")
2560 (version "5.1")
2561 (source
2562 (origin
2563 (method url-fetch)
2564 (uri (pypi-uri "click" version))
2565 (sha256
2566 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2567 (arguments `())))
2568
2569 (define-public python-wheel
2570 (package
2571 (name "python-wheel")
2572 (version "0.33.6")
2573 (source
2574 (origin
2575 (method url-fetch)
2576 (uri (pypi-uri "wheel" version))
2577 (sha256
2578 (base32
2579 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2580 (build-system python-build-system)
2581 (arguments
2582 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2583 ;; fails to find the newly-built bdist_wheel library, even though it is
2584 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2585 '(#:tests? #f))
2586 (home-page "https://bitbucket.org/pypa/wheel/")
2587 (synopsis "Format for built Python packages")
2588 (description
2589 "A wheel is a ZIP-format archive with a specially formatted filename and
2590 the @code{.whl} extension. It is designed to contain all the files for a PEP
2591 376 compatible install in a way that is very close to the on-disk format. Many
2592 packages will be properly installed with only the @code{Unpack} step and the
2593 unpacked archive preserves enough information to @code{Spread} (copy data and
2594 scripts to their final locations) at any later time. Wheel files can be
2595 installed with a newer @code{pip} or with wheel's own command line utility.")
2596 (license license:expat)))
2597
2598 (define-public python2-wheel
2599 (package-with-python2 python-wheel))
2600
2601 (define-public python-vcversioner
2602 (package
2603 (name "python-vcversioner")
2604 (version "2.16.0.0")
2605 (source
2606 (origin
2607 (method url-fetch)
2608 (uri (pypi-uri "vcversioner" version))
2609 (sha256
2610 (base32
2611 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2612 (build-system python-build-system)
2613 (synopsis "Python library for version number discovery")
2614 (description "Vcversioner is a Python library that inspects tagging
2615 information in a variety of version control systems in order to discover
2616 version numbers.")
2617 (home-page "https://github.com/habnabit/vcversioner")
2618 (license license:isc)))
2619
2620 (define-public python2-vcversioner
2621 (package-with-python2 python-vcversioner))
2622
2623 (define-public python-jdcal
2624 (package
2625 (name "python-jdcal")
2626 (version "1.4")
2627 (source
2628 (origin
2629 (method url-fetch)
2630 (uri (pypi-uri "jdcal" version))
2631 (sha256
2632 (base32
2633 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2634 (build-system python-build-system)
2635 (arguments
2636 `(#:phases (modify-phases %standard-phases
2637 (replace 'check
2638 (lambda _
2639 (invoke "pytest"))))))
2640 (native-inputs
2641 `(("python-pytest" ,python-pytest)))
2642 (home-page "https://github.com/phn/jdcal")
2643 (synopsis "Functions to convert between Julian dates Gregorian dates")
2644 (description "This Python library provides functions for converting
2645 between Julian dates and Gregorian dates.")
2646 (license license:bsd-2)))
2647
2648 (define-public python2-jdcal
2649 (package-with-python2 python-jdcal))
2650
2651 (define-public python-jsondiff
2652 (package
2653 (name "python-jsondiff")
2654 (version "1.2.0")
2655 (source
2656 (origin
2657 (method url-fetch)
2658 (uri (pypi-uri "jsondiff" version))
2659 (sha256
2660 (base32
2661 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2662 (build-system python-build-system)
2663 (native-inputs
2664 `(("python-nose" ,python-nose)
2665 ("python-nose-random" ,python-nose-random)))
2666 (home-page
2667 "https://github.com/fzumstein/jsondiff")
2668 (synopsis "Compare JSON and JSON-like structures in Python")
2669 (description "@code{jsondiff} is a Python library which lets you
2670 compare, diff, and patch JSON and JSON-like structures in Python.")
2671 (license license:expat)))
2672
2673 (define-public python-jsonschema
2674 (package
2675 (name "python-jsonschema")
2676 (version "3.2.0")
2677 (source (origin
2678 (method url-fetch)
2679 (uri (pypi-uri "jsonschema" version))
2680 (sha256
2681 (base32
2682 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2683 (build-system python-build-system)
2684 (arguments
2685 '(#:phases
2686 (modify-phases %standard-phases
2687 (replace 'check
2688 (lambda* (#:key inputs outputs #:allow-other-keys)
2689 (add-installed-pythonpath inputs outputs)
2690 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2691 (invoke "trial" "jsonschema"))))))
2692 (native-inputs
2693 `(("python-setuptools_scm" ,python-setuptools-scm)
2694 ("python-twisted" ,python-twisted)))
2695 (propagated-inputs
2696 `(("python-attrs" ,python-attrs)
2697 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2698 ("python-pyrsistent" ,python-pyrsistent)
2699 ("python-six" ,python-six)))
2700 (home-page "https://github.com/Julian/jsonschema")
2701 (synopsis "Implementation of JSON Schema for Python")
2702 (description
2703 "Jsonschema is an implementation of JSON Schema for Python.")
2704 (license license:expat)
2705 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2706
2707 (define-public python2-jsonschema
2708 (let ((jsonschema (package-with-python2
2709 (strip-python2-variant python-jsonschema))))
2710 (package (inherit jsonschema)
2711 (propagated-inputs
2712 `(("python2-functools32" ,python2-functools32)
2713 ,@(package-propagated-inputs jsonschema))))))
2714
2715 (define-public python-schema
2716 (package
2717 (name "python-schema")
2718 (version "0.6.6")
2719 (source
2720 (origin
2721 (method url-fetch)
2722 (uri (pypi-uri "schema" version))
2723 (sha256
2724 (base32
2725 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2726 (build-system python-build-system)
2727 (native-inputs
2728 `(("python-pytest" ,python-pytest)))
2729 (home-page "https://github.com/keleshev/schema")
2730 (synopsis "Simple data validation library")
2731 (description
2732 "@code{python-schema} is a library for validating Python data
2733 structures, such as those obtained from config-files, forms, external
2734 services or command-line parsing, converted from JSON/YAML (or
2735 something else) to Python data-types.")
2736 (license license:psfl)))
2737
2738 (define-public python2-schema
2739 (package-with-python2 python-schema))
2740
2741 (define-public python-schema-0.5
2742 (package (inherit python-schema)
2743 (version "0.5.0")
2744 (source
2745 (origin
2746 (method url-fetch)
2747 (uri (pypi-uri "schema" version))
2748 (sha256
2749 (base32
2750 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2751
2752 (define-public python2-schema-0.5
2753 (package-with-python2 python-schema-0.5))
2754
2755 (define-public python-kitchen
2756 (package
2757 (name "python-kitchen")
2758 (version "1.2.5")
2759 (source
2760 (origin
2761 (method url-fetch)
2762 (uri (pypi-uri "kitchen" version))
2763 (sha256
2764 (base32
2765 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2766 (build-system python-build-system)
2767 (propagated-inputs
2768 `(("python-chardet" ,python-chardet)))
2769 (home-page "https://github.com/fedora-infra/kitchen")
2770 (synopsis "Python API for snippets")
2771 (description "@code{kitchen} module provides a python API for all sorts of
2772 little useful snippets of code that everybody ends up writing for their projects
2773 but never seem big enough to build an independent release. Use kitchen and stop
2774 cutting and pasting that code over and over.")
2775 (license (list license:lgpl2.1+
2776 ;; subprocess.py, test_subprocess.py,
2777 ;; kitchen/pycompat25/defaultdict.py:
2778 license:psfl))))
2779
2780 (define-public python2-kitchen
2781 (package-with-python2 python-kitchen))
2782
2783 (define-public python-unidecode
2784 (package
2785 (name "python-unidecode")
2786 (version "1.1.1")
2787 (source (origin
2788 (method url-fetch)
2789 (uri (pypi-uri "Unidecode" version))
2790 (sha256
2791 (base32
2792 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2793 (build-system python-build-system)
2794 (home-page "https://pypi.org/project/Unidecode/")
2795 (synopsis "ASCII transliterations of Unicode text")
2796 (description
2797 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2798 useful when integrating with legacy code that doesn't support Unicode, or for
2799 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2800 machine identifiers from human-readable Unicode strings that should still be
2801 somewhat intelligible.")
2802 (license license:gpl2+)))
2803
2804 (define-public python2-unidecode
2805 (package-with-python2 python-unidecode))
2806
2807 (define-public python-text-unidecode
2808 (package
2809 (name "python-text-unidecode")
2810 (version "1.3")
2811 (source (origin
2812 (method url-fetch)
2813 (uri (pypi-uri "text-unidecode" version))
2814 (sha256
2815 (base32
2816 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2817 (build-system python-build-system)
2818 (arguments
2819 '(#:phases (modify-phases %standard-phases
2820 (replace 'check
2821 (lambda _
2822 (setenv "PYTHONPATH"
2823 (string-append "./build/lib:"
2824 (getenv "PYTHONPATH")))
2825 (invoke "pytest" "-vv"))))))
2826 (native-inputs
2827 `(("python-pytest" ,python-pytest)))
2828 (home-page "https://github.com/kmike/text-unidecode/")
2829 (synopsis "Decode Unicode data")
2830 (description
2831 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2832 Perl library. It can create ASCII representations of Unicode data. In general
2833 users should prefer the @code{python-unidecode} package which offers better
2834 memory usage and transliteration quality.")
2835 ;; The user can choose either license.
2836 (license (list license:clarified-artistic license:gpl2+))))
2837
2838 (define-public python2-text-unidecode
2839 (package-with-python2 python-text-unidecode))
2840
2841 (define-public python-pyjwt
2842 (package
2843 (name "python-pyjwt")
2844 (version "1.7.1")
2845 (source
2846 (origin
2847 (method url-fetch)
2848 (uri (pypi-uri "PyJWT" version))
2849 (sha256
2850 (base32
2851 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2852 (modules '((guix build utils)))
2853 (snippet
2854 '(begin
2855 (for-each delete-file-recursively
2856 (find-files "." "\\.pyc$"))
2857 #t))))
2858 (build-system python-build-system)
2859 (arguments
2860 '(#:phases (modify-phases %standard-phases
2861 (replace 'check
2862 (lambda _
2863 ;; Mimic upstream commit 3a20892442b34c7 to get
2864 ;; rid of dependency on pytest-runner < 5.0.
2865 ;; Remove substitution for PyJWT > 1.7.1.
2866 (substitute* "setup.py"
2867 ((".*pytest-runner.*")
2868 ""))
2869 (invoke "pytest" "-vv"))))))
2870 (native-inputs
2871 `(("python-pytest" ,python-pytest)
2872 ("python-pytest-cov" ,python-pytest-cov)))
2873 (home-page "https://github.com/progrium/pyjwt")
2874 (synopsis "JSON Web Token implementation in Python")
2875 (description
2876 "PyJWT is a JSON Web Token implementation written in Python.")
2877 (license license:expat)))
2878
2879 (define-public python2-pyjwt
2880 (package-with-python2 python-pyjwt))
2881
2882 (define-public python-pykka
2883 (package
2884 (name "python-pykka")
2885 (version "1.2.1")
2886 (source
2887 (origin
2888 (method url-fetch)
2889 (uri (pypi-uri "Pykka" version))
2890 (sha256
2891 (base32
2892 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2893 (build-system python-build-system)
2894 (native-inputs
2895 `(("python-mock" ,python-mock)
2896 ("python-nose" ,python-nose)
2897 ("python-gevent" ,python-gevent)
2898 ("python-eventlet" ,python-eventlet)))
2899 (home-page "https://www.pykka.org/")
2900 (synopsis "Pykka is a Python implementation of the actor model")
2901 (description
2902 "Pykka is a Python implementation of the actor model.
2903 The actor model introduces some simple rules to control the sharing
2904 of state and cooperation between execution units, which makes it
2905 easier to build concurrent applications.")
2906 (license license:asl2.0)))
2907
2908 (define-public python2-pykka
2909 (package-with-python2 python-pykka))
2910
2911 (define-public python-pymsgbox
2912 (package
2913 (name "python-pymsgbox")
2914 (version "1.0.6")
2915 (source
2916 (origin
2917 (method git-fetch)
2918 (uri (git-reference
2919 ;; LICENSE.txt is not present on pypi
2920 (url "https://github.com/asweigart/PyMsgBox")
2921 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2922 (file-name (git-file-name name version))
2923 (sha256
2924 (base32
2925 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2926 (arguments
2927 ;; Circular dependency to run tests:
2928 ;; Tests need pyautogui, which depends on pymsgbox.
2929 '(#:tests? #f))
2930 (build-system python-build-system)
2931 (home-page "https://github.com/asweigart/PyMsgBox")
2932 (synopsis "Python module for JavaScript-like message boxes")
2933 (description
2934 "PyMsgBox is a simple, cross-platform, pure Python module for
2935 JavaScript-like message boxes. Types of dialog boxes include:
2936 @enumerate
2937 @item alert
2938 @item confirm
2939 @item prompt
2940 @item password
2941 @end enumerate
2942 ")
2943 (license license:bsd-3)))
2944
2945 (define-public python-pympler
2946 (package
2947 (name "python-pympler")
2948 (home-page "https://pythonhosted.org/Pympler/")
2949 (version "0.8")
2950 (source (origin
2951 (method url-fetch)
2952 (uri (pypi-uri "Pympler" version))
2953 (sha256
2954 (base32
2955 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2956 (build-system python-build-system)
2957 (arguments
2958 `(#:phases (modify-phases %standard-phases
2959 (delete 'check)
2960 (add-after 'install 'check
2961 (lambda* (#:key inputs outputs #:allow-other-keys)
2962 (add-installed-pythonpath inputs outputs)
2963 (invoke "python" "setup.py" "test"))))))
2964 (synopsis "Measure, monitor and analyze memory behavior")
2965 (description
2966 "Pympler is a development tool to measure, monitor and analyze
2967 the memory behavior of Python objects in a running Python application.
2968
2969 By pympling a Python application, detailed insight in the size and the
2970 lifetime of Python objects can be obtained. Undesirable or unexpected
2971 runtime behavior like memory bloat and other @samp{pymples} can easily
2972 be identified.
2973
2974 A web profiling frontend exposes process statistics, garbage
2975 visualisation and class tracker statistics.")
2976 (license license:asl2.0)))
2977
2978 (define-public python2-pympler
2979 (package-with-python2 python-pympler))
2980
2981 (define-public python-itsdangerous
2982 (package
2983 (name "python-itsdangerous")
2984 (version "1.1.0")
2985 (source
2986 (origin
2987 (method url-fetch)
2988 (uri (pypi-uri "itsdangerous" version))
2989 (sha256
2990 (base32
2991 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2992 (build-system python-build-system)
2993 (home-page "https://palletsprojects.com/p/itsdangerous/")
2994 (synopsis "Python library for passing data to/from untrusted environments")
2995 (description
2996 "Itsdangerous provides various helpers to pass trusted data to untrusted
2997 environments and back.")
2998 (license license:bsd-3)))
2999
3000 (define-public python2-itsdangerous
3001 (package-with-python2 python-itsdangerous))
3002
3003 (define-public python-pyyaml
3004 (package
3005 (name "python-pyyaml")
3006 (version "5.3.1")
3007 (source
3008 (origin
3009 (method url-fetch)
3010 (uri (pypi-uri "PyYAML" version))
3011 (sha256
3012 (base32
3013 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
3014 (build-system python-build-system)
3015 (inputs
3016 `(("libyaml" ,libyaml)))
3017 (home-page "https://pyyaml.org")
3018 (synopsis "YAML parser and emitter for Python")
3019 (description
3020 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
3021 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
3022 API, and sensible error messages. PyYAML supports standard YAML tags and
3023 provides Python-specific tags that represent an arbitrary Python object.")
3024 (license license:expat)))
3025
3026 (define-public python2-pyyaml
3027 (package-with-python2 python-pyyaml))
3028
3029 (define-public python-vine
3030 (package
3031 (name "python-vine")
3032 (version "1.1.4")
3033 (source
3034 (origin
3035 (method url-fetch)
3036 (uri (pypi-uri "vine" version))
3037 (sha256
3038 (base32
3039 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
3040 (build-system python-build-system)
3041 (native-inputs
3042 `(("python-pytest" ,python-pytest)
3043 ("python-case" ,python-case)))
3044 (home-page "https://github.com/celery/vine")
3045 (synopsis "Promises for Python")
3046 (description
3047 "@code{vine} provides a special implementation of promises in that it can
3048 be used both for \"promise of a value\" and lazy evaluation. The biggest
3049 upside for this is that everything in a promise can also be a promise,
3050 e.g. filters, callbacks and errbacks can all be promises.")
3051 (license license:bsd-3)))
3052
3053 (define-public python-virtualenv
3054 (package
3055 (name "python-virtualenv")
3056 (version "20.0.10")
3057 (source
3058 (origin
3059 (method url-fetch)
3060 (uri (pypi-uri "virtualenv" version))
3061 (sha256
3062 (base32
3063 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
3064 (build-system python-build-system)
3065 (native-inputs
3066 `(("python-mock" ,python-mock)
3067 ("python-pytest" ,python-pytest)
3068 ;; NOTE: guix lint remarks that "python-setuptools should probably not
3069 ;; be an input at all". However, removing the input makes the build error:
3070 ;; File "setup.py", line 4, in <module>
3071 ;; raise RuntimeError("setuptools >= 41 required to build")
3072 ("python-setuptools" ,python-setuptools)
3073 ("python-setuptools-scm" ,python-setuptools-scm)))
3074 (propagated-inputs
3075 `(("python-appdirs" ,python-appdirs)
3076 ("python-distlib" ,python-distlib)
3077 ("python-filelock" ,python-filelock)
3078 ("python-six" ,python-six)
3079 ("python-importlib-metadata" ,python-importlib-metadata)))
3080 (home-page "https://virtualenv.pypa.io/")
3081 (synopsis "Virtual Python environment builder")
3082 (description
3083 "Virtualenv is a tool to create isolated Python environments.")
3084 (properties `((python2-variant . ,(delay python2-virtualenv))))
3085 (license license:expat)))
3086
3087 (define-public python2-virtualenv
3088 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
3089 (package
3090 (inherit base)
3091 (arguments
3092 `(#:python ,python-2
3093 #:phases
3094 (modify-phases %standard-phases
3095 (add-after 'set-paths 'adjust-PYTHONPATH
3096 (lambda* (#:key inputs #:allow-other-keys)
3097 (let* ((python (assoc-ref inputs "python"))
3098 (python-sitedir (string-append python "/lib/python2.7"
3099 "/site-packages")))
3100 ;; XXX: 'python2' always comes first on PYTHONPATH
3101 ;; and shadows the 'setuptools' input. Move python2
3102 ;; last: this should be fixed in python-build-system
3103 ;; in a future rebuild cycle.
3104 (setenv "PYTHONPATH"
3105 (string-append (string-join (delete python-sitedir
3106 (string-split
3107 (getenv "PYTHONPATH")
3108 #\:))
3109 ":")
3110 ":" python-sitedir))
3111 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
3112 (getenv "PYTHONPATH"))
3113 #t))))))
3114 (propagated-inputs
3115 `(("python-contextlib2" ,python2-contextlib2)
3116 ,@(package-propagated-inputs base))))))
3117
3118 (define-public python-markupsafe
3119 (package
3120 (name "python-markupsafe")
3121 (version "1.1.1")
3122 (source
3123 (origin
3124 (method url-fetch)
3125 (uri (pypi-uri "MarkupSafe" version))
3126 (sha256
3127 (base32
3128 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3129 (build-system python-build-system)
3130 (arguments
3131 `(#:modules ((ice-9 ftw)
3132 (srfi srfi-1)
3133 (srfi srfi-26)
3134 (guix build utils)
3135 (guix build python-build-system))
3136 #:phases (modify-phases %standard-phases
3137 (replace 'check
3138 (lambda _
3139 (let ((cwd (getcwd))
3140 (libdir (find (cut string-prefix? "lib." <>)
3141 (scandir "build"))))
3142 (setenv "PYTHONPATH"
3143 (string-append cwd "/build/" libdir ":"
3144 (getenv "PYTHONPATH")))
3145 (invoke "pytest" "-vv")))))))
3146 (native-inputs
3147 `(("python-pytest" ,python-pytest)))
3148 (home-page "https://github.com/mitsuhiko/markupsafe")
3149 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3150 (description
3151 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3152 for Python.")
3153 (license license:bsd-3)))
3154
3155 (define-public python2-markupsafe
3156 (package-with-python2 python-markupsafe))
3157
3158 (define-public python-jinja2
3159 (package
3160 (name "python-jinja2")
3161 (version "2.11.2")
3162 (source
3163 (origin
3164 (method url-fetch)
3165 (uri (pypi-uri "Jinja2" version))
3166 (sha256
3167 (base32
3168 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3169 (build-system python-build-system)
3170 (arguments
3171 '(#:phases (modify-phases %standard-phases
3172 (replace 'check
3173 (lambda* (#:key tests? #:allow-other-keys)
3174 (if tests?
3175 (begin
3176 (setenv "PYTHONPATH"
3177 (string-append "./build/lib:"
3178 (getenv "PYTHONPATH")))
3179 (invoke "pytest" "-vv"))
3180 (format #t "test suite not run~%"))
3181 #t)))))
3182 (native-inputs
3183 `(("python-pytest" ,python-pytest)))
3184 (propagated-inputs
3185 `(("python-markupsafe" ,python-markupsafe)))
3186 (home-page "http://jinja.pocoo.org/")
3187 (synopsis "Python template engine")
3188 (description
3189 "Jinja2 is a small but fast and easy to use stand-alone template engine
3190 written in pure Python.")
3191 (license license:bsd-3)))
3192
3193 (define-public python2-jinja2
3194 (package-with-python2 python-jinja2))
3195
3196 (define-public python-jinja2-time
3197 (package
3198 (name "python-jinja2-time")
3199 (version "0.2.0")
3200 (source
3201 (origin
3202 (method url-fetch)
3203 (uri (pypi-uri "jinja2-time" version))
3204 (sha256
3205 (base32
3206 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3207 (build-system python-build-system)
3208 (propagated-inputs
3209 `(("python-arrow" ,python-arrow)
3210 ("python-jinja2" ,python-jinja2)))
3211 (home-page
3212 "https://github.com/hackebrot/jinja2-time")
3213 (synopsis "Jinja2 Extension for Dates and Times")
3214 (description
3215 "This package provides an extension for the template engine Jinja2. It
3216 adds a 'now' tag providing a convenient access to the arrow.now() API from
3217 templates. A format string can be provided to control the output.")
3218 (license license:expat)))
3219
3220 (define-public python-pystache
3221 (package
3222 (name "python-pystache")
3223 (version "0.5.4")
3224 (source (origin
3225 (method url-fetch)
3226 (uri (pypi-uri "pystache" version))
3227 (sha256
3228 (base32
3229 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3230 (build-system python-build-system)
3231 (arguments
3232 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3233 (home-page "http://defunkt.io/pystache/")
3234 (synopsis "Python logic-less template engine")
3235 (description
3236 "Pystache is a Python implementation of the framework agnostic,
3237 logic-free templating system Mustache.")
3238 (license license:expat)
3239 (properties `((python2-variant . ,(delay python2-pystache))))))
3240
3241 (define-public python2-pystache
3242 (package (inherit (package-with-python2
3243 (strip-python2-variant python-pystache)))
3244 (arguments
3245 `(#:python ,python-2
3246 #:phases
3247 (modify-phases %standard-phases
3248 (replace 'check
3249 (lambda _
3250 (invoke "python" "test_pystache.py"))))))))
3251
3252 (define-public python-joblib
3253 (package
3254 (name "python-joblib")
3255 (version "0.14.1")
3256 (source (origin
3257 (method url-fetch)
3258 (uri (pypi-uri "joblib" version))
3259 (sha256
3260 (base32
3261 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3262 (build-system python-build-system)
3263 (arguments
3264 `(#:phases
3265 (modify-phases %standard-phases
3266 (replace 'check
3267 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3268 (native-inputs
3269 `(("python-pytest" ,python-pytest)))
3270 (home-page "https://joblib.readthedocs.io/")
3271 (synopsis "Using Python functions as pipeline jobs")
3272 (description
3273 "Joblib is a set of tools to provide lightweight pipelining in Python.
3274 In particular, joblib offers: transparent disk-caching of the output values
3275 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3276 logging and tracing of the execution.")
3277 (license license:bsd-3)))
3278
3279 (define-public python2-joblib
3280 (package-with-python2 python-joblib))
3281
3282 (define-public python-daemon
3283 (package
3284 (name "python-daemon")
3285 (version "2.2.3")
3286 (source
3287 (origin
3288 (method url-fetch)
3289 (uri (pypi-uri "python-daemon" version))
3290 (sha256
3291 (base32
3292 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3293 (build-system python-build-system)
3294 (arguments
3295 `(#:phases
3296 (modify-phases %standard-phases
3297 (add-before 'check 'disable-tests
3298 (lambda _
3299 ;; FIXME: Determine why test fails
3300 (substitute* "test/test_daemon.py"
3301 (("test_detaches_process_context")
3302 "skip_test_detaches_process_context"))
3303 #t)))))
3304 (propagated-inputs
3305 `(("python-lockfile" ,python-lockfile)))
3306 (native-inputs
3307 `(("python-unittest2" ,python-unittest2)
3308 ("python-testtools" ,python-testtools)
3309 ("python-testscenarios" ,python-testscenarios)
3310 ("python-mock" ,python-mock)
3311 ("python-docutils" ,python-docutils)))
3312 (home-page "https://pagure.io/python-daemon/")
3313 (synopsis "Python library for making a Unix daemon process")
3314 (description "Python-daemon is a library that assists a Python program to
3315 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3316
3317 This library provides a @code{DaemonContext} class that manages the following
3318 important tasks for becoming a daemon process:
3319 @enumerate
3320 @item Detach the process into its own process group.
3321 @item Set process environment appropriate for running inside a chroot.
3322 @item Renounce suid and sgid privileges.
3323 @item Close all open file descriptors.
3324 @item Change the working directory, uid, gid, and umask.
3325 @item Set appropriate signal handlers.
3326 @item Open new file descriptors for stdin, stdout, and stderr.
3327 @item Manage a specified PID lock file.
3328 @item Register cleanup functions for at-exit processing.
3329 @end enumerate")
3330 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3331 (license (list license:asl2.0 license:gpl3+))))
3332
3333 (define-public python-anytree
3334 (package
3335 (name "python-anytree")
3336 (version "2.8.0")
3337 (source (origin
3338 (method url-fetch)
3339 (uri (pypi-uri "anytree" version))
3340 (sha256
3341 (base32
3342 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3343 (build-system python-build-system)
3344 (propagated-inputs
3345 `(("python-six" ,python-six)))
3346 (native-inputs
3347 `(;; For tests.
3348 ("graphviz" ,graphviz) ;for 'dot'
3349 ("python-nose" ,python-nose)))
3350 (home-page "https://github.com/c0fec0de/anytree")
3351 (synopsis "Lightweight tree data library")
3352 (description
3353 "@code{anytree} is a simple, lightweight, and extensible tree data
3354 structure for Python.")
3355 (license license:asl2.0)))
3356
3357 (define-public python-docutils
3358 (package
3359 (name "python-docutils")
3360 (version "0.16")
3361 (source
3362 (origin
3363 (method url-fetch)
3364 (uri (pypi-uri "docutils" version))
3365 (sha256
3366 (base32
3367 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3368 (build-system python-build-system)
3369 (arguments
3370 '(#:phases (modify-phases %standard-phases
3371 (replace 'check
3372 (lambda* (#:key tests? #:allow-other-keys)
3373 (if tests?
3374 (invoke "python" "test/alltests.py")
3375 (format #t "test suite not run~%"))
3376 #t)))))
3377 (home-page "http://docutils.sourceforge.net/")
3378 (synopsis "Python Documentation Utilities")
3379 (description
3380 "Docutils is a modular system for processing documentation into useful
3381 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3382 reStructuredText.")
3383 ;; Most of the source code is public domain, but some source files are
3384 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3385 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3386
3387 (define-public python2-docutils
3388 (package-with-python2 python-docutils))
3389
3390 ;; python2-sphinx fails its test suite with newer versions.
3391 (define-public python2-docutils-0.14
3392 (package
3393 (inherit python2-docutils)
3394 (version "0.14")
3395 (source (origin
3396 (method url-fetch)
3397 (uri (pypi-uri "docutils" version))
3398 (sha256
3399 (base32
3400 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3401
3402 (define-public python-restructuredtext-lint
3403 (package
3404 (name "python-restructuredtext-lint")
3405 (version "1.3.0")
3406 (source
3407 (origin
3408 (method url-fetch)
3409 (uri (pypi-uri "restructuredtext-lint" version))
3410 (sha256
3411 (base32
3412 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3413 (build-system python-build-system)
3414 (arguments
3415 `(#:phases
3416 (modify-phases %standard-phases
3417 (delete 'check)
3418 (add-after 'install 'check
3419 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3420 (when tests?
3421 (add-installed-pythonpath inputs outputs)
3422 (invoke "nosetests" "-v"))
3423 #t)))))
3424 (propagated-inputs
3425 `(("python-docutils" ,python-docutils)))
3426 (native-inputs
3427 `(("python-nose" ,python-nose)))
3428 (home-page "https://github.com/twolfson/restructuredtext-lint")
3429 (synopsis "reStructuredText linter")
3430 (description "This package provides a linter for the reStructuredText
3431 format.")
3432 (license license:unlicense)))
3433
3434 (define-public python-doc8
3435 (package
3436 (name "python-doc8")
3437 (version "0.8.0")
3438 (source
3439 (origin
3440 (method url-fetch)
3441 (uri (pypi-uri "doc8" version))
3442 (sha256
3443 (base32
3444 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3445 (build-system python-build-system)
3446 (arguments
3447 `(#:phases
3448 (modify-phases %standard-phases
3449 (delete 'check)
3450 (add-after 'install 'check
3451 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3452 (when tests?
3453 (add-installed-pythonpath inputs outputs)
3454 (invoke "pytest" "-v"))
3455 #t)))))
3456 (propagated-inputs
3457 `(("python-chardet" ,python-chardet)
3458 ("python-docutils" ,python-docutils)
3459 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3460 ("python-six" ,python-six)
3461 ("python-stevedore" ,python-stevedore)))
3462 (native-inputs
3463 `(("python-testtools" ,python-testtools)
3464 ("python-pytest" ,python-pytest)))
3465 (home-page "https://launchpad.net/doc8")
3466 (synopsis
3467 "Style checker for Sphinx (or other) RST documentation")
3468 (description
3469 "Doc8 is an opinionated style checker for reStructured Text and plain
3470 text styles of documentation.")
3471 (license license:asl2.0)))
3472
3473 (define-public python-pygments
3474 (package
3475 (name "python-pygments")
3476 (version "2.5.2")
3477 (source
3478 (origin
3479 (method url-fetch)
3480 (uri (pypi-uri "Pygments" version))
3481 (sha256
3482 (base32
3483 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3484 (build-system python-build-system)
3485 (arguments
3486 ;; FIXME: Tests require sphinx, which depends on this.
3487 '(#:tests? #f))
3488 (home-page "https://pygments.org/")
3489 (synopsis "Syntax highlighting")
3490 (description
3491 "Pygments is a syntax highlighting package written in Python.")
3492 (license license:bsd-2)))
3493
3494 (define-public python2-pygments
3495 (package-with-python2 python-pygments))
3496
3497 (define-public python-bumpversion
3498 (package
3499 (name "python-bumpversion")
3500 (version "0.5.3")
3501 (source
3502 (origin
3503 (method url-fetch)
3504 (uri (pypi-uri "bumpversion" version))
3505 (sha256
3506 (base32
3507 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3508 (build-system python-build-system)
3509 (home-page "https://github.com/peritus/bumpversion")
3510 (synopsis "Tool to bump software version")
3511 (description "This tool provides a command-line interface (CLI) to bump a
3512 software version simply.")
3513 (license license:expat)))
3514
3515 (define-public python-deprecated
3516 (package
3517 (name "python-deprecated")
3518 (version "1.2.5")
3519 (source
3520 (origin
3521 (method git-fetch)
3522 (uri (git-reference
3523 (url "https://github.com/tantale/deprecated")
3524 (commit (string-append "v" version))))
3525 (file-name (git-file-name name version))
3526 (sha256
3527 (base32
3528 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3529 (build-system python-build-system)
3530 (arguments
3531 `(#:phases (modify-phases %standard-phases
3532 (replace 'check
3533 (lambda _
3534 (invoke "pytest"))))))
3535 (propagated-inputs
3536 `(("python-wrapt" ,python-wrapt)))
3537 (native-inputs
3538 `(("python-bumpversion" ,python-bumpversion)
3539 ("python-pytest" ,python-pytest)
3540 ("python-pytest-cov" ,python-pytest-cov)
3541 ("python-sphinx" ,python-sphinx)
3542 ("python-tox" ,python-tox)))
3543 (home-page "https://github.com/tantale/deprecated")
3544 (synopsis "Python decorator to deprecate classes, functions or methods")
3545 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3546 to deprecate classes, functions or methods.")
3547 (license license:expat)))
3548
3549 (define-public python-pygithub
3550 (package
3551 (name "python-pygithub")
3552 (version "1.43.8")
3553 (source
3554 ;; We fetch from the Git repo because there are no tests in the PyPI
3555 ;; archive.
3556 (origin
3557 (method git-fetch)
3558 (uri (git-reference
3559 (url "https://github.com/PyGithub/PyGithub")
3560 (commit (string-append "v" version))))
3561 (file-name (git-file-name name version))
3562 (sha256
3563 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3564 (build-system python-build-system)
3565 (arguments
3566 `(#:phases (modify-phases %standard-phases
3567 ;; Some tests rely on the network.
3568 (add-after 'unpack 'disable-failing-tests
3569 (lambda _
3570 (substitute* "tests/Issue142.py"
3571 (("testDecodeJson") "disabled_testDecodeJson"))
3572 #t))
3573 (add-before 'check 'prepare-for-tests
3574 (lambda _
3575 (for-each (lambda (f)
3576 (chmod f #o666))
3577 (find-files "./tests"))
3578 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3579 (setenv "PYTHONPATH"
3580 (string-append "./tests:" (getenv "PYTHONPATH")))
3581 #t)))))
3582 (propagated-inputs
3583 `(("python-deprecated" ,python-deprecated)
3584 ("python-pyjwt" ,python-pyjwt)
3585 ("python-requests" ,python-requests)))
3586 (native-inputs `(("python-httpretty" ,python-httpretty)))
3587 (home-page "https://pygithub.readthedocs.io/en/latest/")
3588 (synopsis "Python library for the GitHub API")
3589 (description "This library allows managing GitHub resources such as
3590 repositories, user profiles, and organizations in your Python applications,
3591 using version 3 of the GitHub application programming interface (API).")
3592 (license license:lgpl3+)))
3593
3594 (define-public python-rellu
3595 (package
3596 (name "python-rellu")
3597 (version "0.7")
3598 (source
3599 (origin
3600 (method url-fetch)
3601 (uri (pypi-uri "rellu" version))
3602 (sha256
3603 (base32
3604 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3605 (build-system python-build-system)
3606 (propagated-inputs
3607 `(("python-invoke" ,python-invoke)
3608 ("python-pygithub" ,python-pygithub)))
3609 (home-page "https://github.com/robotframework/rellu")
3610 (synopsis "Utilities to create PyPI releases")
3611 (description "This collection of utilities contains tooling and templates
3612 to assist in creating releases on GitHub and publishing them on PyPI. It is
3613 designed to be used by Robot Framework and tools and libraries in its
3614 ecosystem, but can naturally be used also by other projects.")
3615 (license license:asl2.0)))
3616
3617 (define-public python-robotframework
3618 (package
3619 (name "python-robotframework")
3620 (version "3.1.2")
3621 ;; There are no tests in the PyPI archive.
3622 (source
3623 (origin
3624 (method git-fetch)
3625 (uri (git-reference
3626 (url "https://github.com/robotframework/robotframework")
3627 (commit (string-append "v" version))))
3628 (file-name (git-file-name name version))
3629 (sha256
3630 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3631 (patches (search-patches
3632 "python-robotframework-honor-source-date-epoch.patch"))))
3633 (build-system python-build-system)
3634 (arguments
3635 `(#:phases (modify-phases %standard-phases
3636 (add-before 'build 'build-and-install-doc
3637 (lambda* (#:key outputs #:allow-other-keys)
3638 (let* ((doc-output (assoc-ref outputs "doc"))
3639 (doc (string-append doc-output "/share/"
3640 ,name "-" ,version "/")))
3641 (invoke "invoke" "library-docs" "all")
3642 (mkdir-p doc)
3643 (copy-recursively "doc/libraries"
3644 (string-append doc "/libraries"))
3645 #t)))
3646 (replace 'check
3647 (lambda _
3648 (invoke "python" "utest/run.py"))))))
3649 (native-inputs
3650 `(("python-invoke" ,python-invoke)
3651 ("python-rellu" ,python-rellu)
3652 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3653 (outputs '("out" "doc"))
3654 (home-page "https://robotframework.org")
3655 (synopsis "Generic automation framework")
3656 (description "Robot Framework is a generic automation framework for
3657 acceptance testing, acceptance test driven development (ATDD), and robotic
3658 process automation (RPA).")
3659 (license license:asl2.0)))
3660
3661 (define-public python-robotframework-lint
3662 ;; There is no properly tagged release; the commit below seems to correspond
3663 ;; to the 0.9 stable release available from PyPI. The tests are not
3664 ;; included in the PyPI archive, so we fetch the sources from the upstream
3665 ;; Git repo.
3666 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3667 (revision "1"))
3668 (package
3669 (name "python-robotframework-lint")
3670 (version (git-version "0.9.0" revision commit))
3671 (source
3672 (origin
3673 (method git-fetch)
3674 (uri (git-reference
3675 (url "https://github.com/boakley/robotframework-lint")
3676 (commit commit)))
3677 (file-name (git-file-name name version))
3678 (sha256
3679 (base32
3680 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3681 (build-system python-build-system)
3682 (arguments
3683 `(#:phases
3684 (modify-phases %standard-phases
3685 (replace 'check
3686 (lambda _
3687 (invoke "python" "-m" "robot" "-A"
3688 "tests/conf/default.args" "tests"))))))
3689 (propagated-inputs
3690 `(("python-robotframework" ,python-robotframework)))
3691 (home-page "https://github.com/boakley/robotframework-lint/")
3692 (synopsis "Static analysis tool (linter) for Robot Framework")
3693 (description "This package provides the @code{rflint} command-line
3694 utility, a static analysis tool (linter) for Robot Framework source files.")
3695 (license license:asl2.0))))
3696
3697 (define-public python-robotframework-sshlibrary
3698 (package
3699 (name "python-robotframework-sshlibrary")
3700 (version "3.3.0")
3701 ;; There are no tests in the PyPI archive.
3702 (source
3703 (origin
3704 (method git-fetch)
3705 (uri (git-reference
3706 (url "https://github.com/robotframework/SSHLibrary")
3707 (commit (string-append "v" version))))
3708 (file-name (git-file-name name version))
3709 (sha256
3710 (base32
3711 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3712 (build-system python-build-system)
3713 (arguments
3714 `(#:phases
3715 (modify-phases %standard-phases
3716 (add-before 'build 'build-and-install-doc
3717 (lambda* (#:key outputs #:allow-other-keys)
3718 (let* ((doc-output (assoc-ref outputs "doc"))
3719 (doc (string-append doc-output "/share/"
3720 ,name "-" ,version "/")))
3721 (invoke "chmod" "-R" "+w" "docs")
3722 (invoke "invoke" "kw-docs" "project-docs")
3723 (mkdir-p doc)
3724 (for-each delete-file (find-files "docs" "\\.rst"))
3725 (copy-recursively "docs" doc)
3726 #t)))
3727 (replace 'check
3728 (lambda _
3729 ;; Some tests require an SSH server; we remove them.
3730 (delete-file "utest/test_client_api.py")
3731 (delete-file "utest/test_scp.py")
3732 (invoke "python" "utest/run.py"))))))
3733 (propagated-inputs
3734 `(("python-robotframework" ,python-robotframework)
3735 ("python-paramiko" ,python-paramiko)
3736 ("python-scp" ,python-scp)))
3737 (native-inputs
3738 `(("openssh" ,openssh)
3739 ("which" ,which)
3740 ;; To generate the documentation
3741 ("python-docutils" ,python-docutils)
3742 ("python-invoke" ,python-invoke)
3743 ("python-pygments" ,python-pygments)
3744 ("python-rellu" ,python-rellu)))
3745 (outputs '("out" "doc"))
3746 (home-page "https://github.com/robotframework/SSHLibrary")
3747 (synopsis "Robot Framework library for SSH and SFTP")
3748 (description "SSHLibrary is a Robot Framework library providing support
3749 for SSH and SFTP. It has the following main usages:
3750 @itemize @bullet
3751 @item Executing commands on the remote machine, either blocking or non-blocking.
3752 @item Writing and reading in an interactive shell.
3753 @item Transferring files and directories over SFTP.
3754 @item Ensuring that files and directories exist on the remote machine.
3755 @end itemize")
3756 (license license:asl2.0)))
3757
3758 (define-public python-rstr
3759 (package
3760 (name "python-rstr")
3761 (version "2.2.6")
3762 (source
3763 (origin
3764 (method url-fetch)
3765 (uri (pypi-uri "rstr" version))
3766 (sha256
3767 (base32
3768 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3769 (build-system python-build-system)
3770 (home-page
3771 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3772 (synopsis "Generate random strings in Python")
3773 (description "This package provides a python module for generating
3774 random strings of various types. It could be useful for fuzz testing,
3775 generating dummy data, or other applications. It has no dependencies
3776 outside the standard library.")
3777 (license license:bsd-3)))
3778
3779 (define-public python-scp
3780 (package
3781 (name "python-scp")
3782 (version "0.13.2")
3783 (source
3784 (origin
3785 (method url-fetch)
3786 (uri (pypi-uri "scp" version))
3787 (sha256
3788 (base32
3789 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3790 (build-system python-build-system)
3791 (arguments
3792 '(#:tests? #f)) ;tests require an SSH server
3793 (propagated-inputs
3794 `(("python-paramiko" ,python-paramiko)))
3795 (home-page "https://github.com/jbardin/scp.py")
3796 (synopsis "SCP protocol module for Python and Paramiko")
3797 (description "The scp module extends the Paramiko library to send and
3798 receive files via the SCP1 protocol, as implemented by the OpenSSH
3799 @command{scp} program.")
3800 (license license:gpl2+)))
3801
3802 (define-public python-rst.linker
3803 (package
3804 (name "python-rst.linker")
3805 (version "1.11")
3806 (source
3807 (origin
3808 (method url-fetch)
3809 (uri (pypi-uri "rst.linker" version))
3810 (sha256
3811 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3812 (build-system python-build-system)
3813 (propagated-inputs
3814 `(("python-dateutil" ,python-dateutil)
3815 ("python-six" ,python-six)))
3816 (native-inputs
3817 `(("python-setuptools-scm" ,python-setuptools-scm)))
3818 ;; Test would require path.py, which would introduce a cyclic dependence.
3819 (arguments `(#:tests? #f))
3820 ;; Note: As of version 1.7 the documentation is not worth building.
3821 (home-page "https://github.com/jaraco/rst.linker")
3822 (synopsis "Sphinx plugin to add links and timestamps")
3823 (description "rst.linker automatically replaces text by a
3824 reStructuredText external reference or timestamps. It's primary purpose is to
3825 augment the changelog, but it can be used for other documents, too.")
3826 (license license:expat)))
3827
3828 (define-public python2-rst.linker
3829 (package-with-python2 python-rst.linker))
3830
3831 (define-public python-feedgenerator
3832 (package
3833 (name "python-feedgenerator")
3834 (version "1.9")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "feedgenerator" version))
3839 (sha256
3840 (base32
3841 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3842 (modules '((guix build utils)))
3843 (snippet
3844 '(begin
3845 ;; Remove pre-compiled .pyc files from source.
3846 (for-each delete-file-recursively
3847 (find-files "." "__pycache__" #:directories? #t))
3848 (for-each delete-file (find-files "." "\\.pyc$"))
3849 #t))))
3850 (build-system python-build-system)
3851 (propagated-inputs
3852 `(("python-pytz" ,python-pytz)
3853 ("python-six" ,python-six)))
3854 (home-page "https://github.com/getpelican/feedgenerator")
3855 (synopsis
3856 "Standalone version of Django's Atom/RSS feed generator")
3857 (description
3858 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3859 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3860 (license license:bsd-3)))
3861
3862 (define-public python2-feedgenerator
3863 (package-with-python2 python-feedgenerator))
3864
3865 (define-public python-toml
3866 (package
3867 (name "python-toml")
3868 (version "0.10.1")
3869 (source
3870 (origin
3871 (method url-fetch)
3872 (uri (pypi-uri "toml" version))
3873 (sha256
3874 (base32
3875 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3876 (build-system python-build-system)
3877 (arguments
3878 `(#:tests? #f)) ;no tests suite in release
3879 (home-page "https://github.com/uiri/toml")
3880 (synopsis "Library for TOML")
3881 (description
3882 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3883 Language (TOML) configuration files.")
3884 (license license:expat)))
3885
3886 (define-public python-jsonrpc-server
3887 (package
3888 (name "python-jsonrpc-server")
3889 (version "0.3.4")
3890 (source
3891 (origin
3892 (method url-fetch)
3893 (uri (pypi-uri "python-jsonrpc-server" version))
3894 (sha256
3895 (base32
3896 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3897 (build-system python-build-system)
3898 (propagated-inputs
3899 `(("python-mock" ,python-mock)
3900 ("python-pytest" ,python-pytest)
3901 ("python-ujson" ,python-ujson-1)))
3902 (home-page
3903 "https://github.com/palantir/python-jsonrpc-server")
3904 (synopsis "JSON RPC 2.0 server library")
3905 (description
3906 "This package provides a JSON RPC 2.0 server library for Python.")
3907 (license license:expat)))
3908
3909 (define-public python-pydantic
3910 (package
3911 (name "python-pydantic")
3912 (version "1.6.1")
3913 (source
3914 (origin
3915 (method git-fetch)
3916 (uri (git-reference
3917 (url "https://github.com/samuelcolvin/pydantic")
3918 (commit (string-append "v" version))))
3919 (file-name (git-file-name name version))
3920 (sha256
3921 (base32 "1380s9k77g6q15by9fkxndczjk89q6xpz09jdrqip535xws2z3j8"))))
3922 (build-system python-build-system)
3923 (arguments
3924 '(#:phases
3925 (modify-phases %standard-phases
3926 ;; Reported upstream:
3927 ;; <https://github.com/samuelcolvin/pydantic/issues/1580>.
3928 ;; Disable the faulty test as the fix is unclear.
3929 (add-before 'check 'disable-test
3930 (lambda _
3931 (substitute* "tests/test_validators.py"
3932 (("test_assert_raises_validation_error")
3933 "_test_assert_raises_validation_error"))
3934 #t))
3935 (replace 'check
3936 (lambda _ (invoke "pytest" "-vv" "tests"))))))
3937 (native-inputs
3938 `(("python-pytest" ,python-pytest)))
3939 (home-page "https://github.com/samuelcolvin/pydantic")
3940 (synopsis "Python data validation and settings management")
3941 (description
3942 "Pydantic enforces type hints at runtime, and provides user friendly
3943 errors when data is invalid.")
3944 (license license:expat)))
3945
3946 (define-public python-pydocstyle
3947 (package
3948 (name "python-pydocstyle")
3949 (version "3.0.0")
3950 (source
3951 (origin
3952 (method url-fetch)
3953 (uri (pypi-uri "pydocstyle" version))
3954 (sha256
3955 (base32
3956 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3957 (build-system python-build-system)
3958 (propagated-inputs
3959 `(("python-six" ,python-six)
3960 ("python-snowballstemmer" ,python-snowballstemmer)))
3961 (home-page
3962 "https://github.com/PyCQA/pydocstyle/")
3963 (synopsis "Python docstring style checker")
3964 (description
3965 "This package provides a style checker for the Python Language
3966 Server (PLS).")
3967 (license license:expat)))
3968
3969 (define-public python-language-server
3970 (package
3971 (name "python-language-server")
3972 (version "0.34.1")
3973 (source
3974 (origin
3975 (method url-fetch)
3976 (uri (pypi-uri "python-language-server" version))
3977 (sha256
3978 (base32
3979 "0gfjjlj7yg2nf8wkbrshwaljkwlqja4n7s1x949f495anmkg8vxr"))))
3980 (build-system python-build-system)
3981 (propagated-inputs
3982 `(("python-pluggy" ,python-pluggy)
3983 ("python-jsonrpc-server" ,python-jsonrpc-server)
3984 ("python-jedi" ,python-jedi)
3985 ("python-yapf" ,python-yapf)
3986 ("python-pyflakes" ,python-pyflakes)
3987 ("python-pydocstyle" ,python-pydocstyle)
3988 ("python-pycodestyle" ,python-pycodestyle)
3989 ("python-mccabe" ,python-mccabe)
3990 ("python-rope" ,python-rope)
3991 ("python-autopep8" ,python-autopep8)
3992 ("python-flake8" ,python-flake8)
3993 ("python-pylint" ,python-pylint)))
3994 (home-page "https://github.com/palantir/python-language-server")
3995 (synopsis "Python implementation of the Language Server Protocol")
3996 (description
3997 "The Python Language Server (pyls) is an implementation of the Python 3
3998 language specification for the Language Server Protocol (LSP). This tool is
3999 used in text editing environments to provide a complete and integrated
4000 feature-set for programming Python effectively.")
4001 (license license:expat)))
4002
4003 (define-public python-pathspec
4004 (package
4005 (name "python-pathspec")
4006 (version "0.7.0")
4007 (source
4008 (origin
4009 (method url-fetch)
4010 (uri (pypi-uri "pathspec" version))
4011 (sha256
4012 (base32
4013 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
4014 (build-system python-build-system)
4015 (home-page "https://github.com/cpburnz/python-path-specification")
4016 (synopsis "Utility library for gitignore style pattern matching of file paths")
4017 (description
4018 "This package provides a utility library for gitignore style pattern
4019 matching of file paths.")
4020 (license license:mpl2.0)))
4021
4022 (define-public python-black
4023 (package
4024 (name "python-black")
4025 (version "19.10b0")
4026 (source
4027 (origin
4028 (method url-fetch)
4029 (uri (pypi-uri "black" version))
4030 (sha256
4031 (base32
4032 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
4033 (build-system python-build-system)
4034 (arguments
4035 `(#:phases
4036 (modify-phases %standard-phases
4037 (add-after 'patch-source-shebangs 'patch-extra-shebangs
4038 (lambda _
4039 (let ((python3 (which "python3")))
4040 (substitute* '("tests/data/fmtonoff.py"
4041 "tests/data/string_prefixes.py"
4042 "tests/data/function.py"
4043 "tests/data/python37.py")
4044 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
4045 (string-append "#!" python3 (if (string? minor-version)
4046 minor-version
4047 "")))))
4048 #t))
4049 (add-after 'unpack 'disable-broken-tests
4050 (lambda _
4051 ;; These tests are supposed to be skipped when the blackd
4052 ;; dependencies are missing, but this doesn't quite work.
4053 (substitute* "tests/test_black.py"
4054 (("( *)class BlackDTestCase.*" match indent)
4055 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
4056 indent "class BlackDTestCase(unittest.TestCase):\n"))
4057 (("web.Application") "False")
4058 (("@unittest_run_loop") ""))
4059
4060 ;; Patching the above file breaks the self test
4061 (substitute* "tests/test_black.py"
4062 (("( *)def test_self" match indent)
4063 (string-append indent "@unittest.skip(\"guix\")\n" match)))
4064 #t)))))
4065 (propagated-inputs
4066 `(("python-click" ,python-click)
4067 ("python-attrs" ,python-attrs)
4068 ("python-appdirs" ,python-appdirs)
4069 ("python-pathspec" ,python-pathspec)
4070 ("python-regex" ,python-regex)
4071 ("python-toml" ,python-toml)
4072 ("python-typed-ast" ,python-typed-ast)))
4073 (native-inputs
4074 `(("python-setuptools-scm" ,python-setuptools-scm)))
4075 (home-page "https://github.com/ambv/black")
4076 (synopsis "The uncompromising code formatter")
4077 (description "Black is the uncompromising Python code formatter.")
4078 (license license:expat)))
4079
4080 (define-public python-blinker
4081 (package
4082 (name "python-blinker")
4083 (version "1.4")
4084 (source
4085 (origin
4086 (method url-fetch)
4087 (uri (pypi-uri "blinker" version))
4088 (sha256
4089 (base32
4090 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
4091 (build-system python-build-system)
4092 (home-page "https://pythonhosted.org/blinker/")
4093 (synopsis "Fast, simple object-to-object and broadcast signaling")
4094 (description
4095 "Blinker provides a fast dispatching system that allows any number of
4096 interested parties to subscribe to events, or \"signals\".")
4097 (license license:expat)))
4098
4099 (define-public python2-blinker
4100 (package-with-python2 python-blinker))
4101
4102 (define-public pelican
4103 (package
4104 (name "pelican")
4105 (version "4.2.0")
4106 (source
4107 (origin
4108 (method url-fetch)
4109 (uri (pypi-uri "pelican" version))
4110 (sha256
4111 (base32
4112 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
4113 (build-system python-build-system)
4114 (propagated-inputs
4115 `(("python-blinker" ,python-blinker)
4116 ("python-dateutil" ,python-dateutil)
4117 ("python-docutils" ,python-docutils)
4118 ("python-feedgenerator" ,python-feedgenerator)
4119 ("python-jinja2" ,python-jinja2)
4120 ("python-markdown" ,python-markdown)
4121 ("python-pygments" ,python-pygments)
4122 ("python-pytz" ,python-pytz)
4123 ("python-six" ,python-six)
4124 ("python-unidecode" ,python-unidecode)))
4125 (home-page "https://getpelican.com/")
4126 (arguments
4127 `(;; XXX Requires a lot more packages to do unit tests :P
4128 #:tests? #f))
4129 (synopsis "Python-based static site publishing system")
4130 (description
4131 "Pelican is a tool to generate a static blog from reStructuredText,
4132 Markdown input files, and more. Pelican uses Jinja2 for templating
4133 and is very extensible.")
4134 (license license:agpl3+)))
4135
4136 (define-public mallard-ducktype
4137 (package
4138 (name "mallard-ducktype")
4139 (version "1.0.2")
4140 (source
4141 (origin
4142 (method git-fetch)
4143 ;; git-reference because tests are not included in pypi source tarball
4144 ;; https://issues.guix.gnu.org/issue/36755#2
4145 (uri (git-reference
4146 (url "https://github.com/projectmallard/mallard-ducktype")
4147 (commit version)))
4148 (file-name (git-file-name name version))
4149 (sha256
4150 (base32
4151 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
4152 (build-system python-build-system)
4153 (arguments
4154 '(#:phases
4155 (modify-phases %standard-phases
4156 (replace 'check
4157 (lambda _
4158 (with-directory-excursion "tests"
4159 (invoke "sh" "runtests")))))))
4160 (home-page "http://projectmallard.org")
4161 (synopsis "Convert Ducktype to Mallard documentation markup")
4162 (description
4163 "Ducktype is a lightweight syntax that can represent all the semantics
4164 of the Mallard XML documentation system. Ducktype files can be converted to
4165 Mallard using the @command{ducktype} tool. The yelp-tools package
4166 provides additional functionality on the produced Mallard documents.")
4167 (license license:expat)))
4168
4169 (define-public python-cython
4170 (package
4171 (name "python-cython")
4172 (version "0.29.17")
4173 (source
4174 (origin
4175 (method url-fetch)
4176 (uri (pypi-uri "Cython" version))
4177 (sha256
4178 (base32
4179 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4180 (build-system python-build-system)
4181 ;; we need the full python package and not just the python-wrapper
4182 ;; because we need libpython3.3m.so
4183 (inputs
4184 `(("python" ,python)))
4185 (arguments
4186 `(#:phases
4187 (modify-phases %standard-phases
4188 (add-before 'check 'set-HOME
4189 ;; some tests require access to "$HOME/.cython"
4190 (lambda _ (setenv "HOME" "/tmp") #t))
4191 (replace 'check
4192 (lambda _
4193 ;; Disable compiler optimizations to greatly reduce the running
4194 ;; time of the test suite.
4195 (setenv "CFLAGS" "-O0")
4196
4197 (invoke "python" "runtests.py" "-vv"
4198 "-j" (number->string (parallel-job-count))
4199 ;; XXX: On 32-bit architectures, running the parallel tests
4200 ;; fails on many-core systems, see
4201 ;; <https://github.com/cython/cython/issues/2807>.
4202 ,@(if (not (target-64bit?))
4203 '("-x" "run.parallel")
4204 '())))))))
4205 (home-page "https://cython.org/")
4206 (synopsis "C extensions for Python")
4207 (description "Cython is an optimising static compiler for both the Python
4208 programming language and the extended Cython programming language. It makes
4209 writing C extensions for Python as easy as Python itself.")
4210 (license license:asl2.0)
4211 (properties `((python2-variant . ,(delay python2-cython))))))
4212
4213 (define-public python2-cython
4214 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4215 (package
4216 (inherit base)
4217 (name "python2-cython")
4218 (inputs
4219 `(("python-2" ,python-2))) ;this is not automatically changed
4220 (arguments
4221 (substitute-keyword-arguments (package-arguments base)
4222 ((#:phases phases)
4223 `(modify-phases ,phases
4224 (add-before 'check 'adjust-test_embed
4225 (lambda _
4226 (substitute* "runtests.py"
4227 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4228 ;; so it can give the right -L flag to GCC when embedding static
4229 ;; builds of Python. It is unaware that the Python "config"
4230 ;; directory (where the static library lives) was renamed in
4231 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4232 ;; which works fine, because that is where the shared library is.
4233 ;;
4234 ;; It also appears to be unaware that the Makefile in Demos/embed
4235 ;; already unconditionally pass the static library location to GCC,
4236 ;; after checking sysconfig.get_config_var('LIBPL).
4237 ;;
4238 ;; The effect is that the linker is unable to resolve libexpat
4239 ;; symbols when building for Python 2, because neither the Python 2
4240 ;; shared library nor Expat is available. To fix it, we can either
4241 ;; add Expat as an input and make it visible to the linker, or just
4242 ;; prevent it from overriding the Python shared library location.
4243 ;; The end result is identical, so we take the easy route.
4244 ((" or libname not in os\\.listdir\\(libdir\\)")
4245 ""))
4246 #t)))))))))
4247
4248 ;; The RPython toolchain currently does not support Python 3.
4249 (define-public python2-rpython
4250 (package
4251 (name "python2-rpython")
4252 (version "0.2.1")
4253 (source
4254 (origin
4255 (method url-fetch)
4256 (uri (pypi-uri "rpython" version))
4257 (sha256
4258 (base32
4259 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4260 (build-system python-build-system)
4261 (arguments `(#:python ,python-2))
4262 (native-inputs
4263 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4264 (home-page "https://rpython.readthedocs.org")
4265 (synopsis "Framework for implementing interpreters and virtual machines")
4266 (description "RPython is a translation and support framework for
4267 producing implementations of dynamic languages, emphasizing a clean separation
4268 between language specification and implementation aspects.")
4269 (license license:expat)))
4270
4271 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4272 ;; python-scipy still build, as these three packages are often used together.
4273 (define-public python-numpy
4274 (package
4275 (name "python-numpy")
4276 (version "1.17.3")
4277 (source
4278 (origin
4279 (method url-fetch)
4280 (uri (string-append
4281 "https://github.com/numpy/numpy/releases/download/v"
4282 version "/numpy-" version ".tar.gz"))
4283 (sha256
4284 (base32
4285 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4286 (build-system python-build-system)
4287 (inputs
4288 `(("openblas" ,openblas)
4289 ("lapack" ,lapack)))
4290 (native-inputs
4291 `(("python-cython" ,python-cython)
4292 ("python-pytest" ,python-pytest)
4293 ("gfortran" ,gfortran)))
4294 (arguments
4295 `(#:phases
4296 (modify-phases %standard-phases
4297 (add-before 'build 'configure-blas-lapack
4298 (lambda* (#:key inputs #:allow-other-keys)
4299 (call-with-output-file "site.cfg"
4300 (lambda (port)
4301 (format port
4302 "[openblas]
4303 libraries = openblas
4304 library_dirs = ~a/lib
4305 include_dirs = ~a/include
4306
4307 # backslash-n to make emacs happy
4308 \n[lapack]
4309 lapack_libs = lapack
4310 library_dirs = ~a/lib
4311 include_dirs = ~a/include
4312 "
4313 (assoc-ref inputs "openblas")
4314 (assoc-ref inputs "openblas")
4315 (assoc-ref inputs "lapack")
4316 (assoc-ref inputs "lapack"))))
4317 #t))
4318 (add-before 'build 'fix-executable-paths
4319 (lambda* (#:key inputs #:allow-other-keys)
4320 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4321 ;; instead of /bin/sh.
4322 (substitute* "numpy/distutils/exec_command.py"
4323 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4324 (string-append match-start (assoc-ref inputs "bash") match-end)))
4325 ;; Use "gcc" executable, not "cc".
4326 (substitute* "numpy/distutils/system_info.py"
4327 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4328 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4329 #t))
4330 ;; Tests can only be run after the library has been installed and not
4331 ;; within the source directory.
4332 (delete 'check)
4333 (add-after 'install 'check
4334 (lambda* (#:key outputs inputs #:allow-other-keys)
4335 ;; Make installed package available for running the tests
4336 (add-installed-pythonpath inputs outputs)
4337 ;; Make sure "f2py" etc is found.
4338 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4339 ":" (getenv "PATH")))
4340 (with-directory-excursion "/tmp"
4341 (invoke "python" "-c"
4342 "import numpy; numpy.test(verbose=2)")))))))
4343 (home-page "https://numpy.org")
4344 (synopsis "Fundamental package for scientific computing with Python")
4345 (description "NumPy is the fundamental package for scientific computing
4346 with Python. It contains among other things: a powerful N-dimensional array
4347 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4348 and Fortran code, useful linear algebra, Fourier transform, and random number
4349 capabilities.")
4350 (properties `((python2-variant . ,(delay python2-numpy))))
4351 (license license:bsd-3)))
4352
4353 ;; Numpy 1.16.x are the last versions that support Python 2.
4354 (define-public python2-numpy
4355 (let ((numpy (package-with-python2
4356 (strip-python2-variant python-numpy))))
4357 (package/inherit
4358 numpy
4359 (version "1.16.5")
4360 (source (origin
4361 (method url-fetch)
4362 (uri (string-append
4363 "https://github.com/numpy/numpy/releases/download/v"
4364 version "/numpy-" version ".tar.gz"))
4365 (sha256
4366 (base32
4367 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4368
4369 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4370 ;; interest only for legacy code going back to NumPy's predecessor
4371 ;; Numeric.
4372 (define-public python2-numpy-1.8
4373 (package (inherit python2-numpy)
4374 (version "1.8.2")
4375 (source
4376 (origin
4377 (method git-fetch)
4378 (uri (git-reference
4379 (url "https://github.com/numpy/numpy")
4380 (commit (string-append "v" version))))
4381 (file-name (git-file-name "numpy" version))
4382 (sha256
4383 (base32
4384 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4385 (arguments
4386 (substitute-keyword-arguments (package-arguments python2-numpy)
4387 ((#:phases phases)
4388 `(modify-phases ,phases
4389 (replace 'configure-blas-lapack
4390 (lambda* (#:key inputs #:allow-other-keys)
4391 (call-with-output-file "site.cfg"
4392 (lambda (port)
4393 (format port
4394 "[openblas]
4395 libraries = openblas,lapack
4396 library_dirs = ~a/lib:~a/lib
4397 include_dirs = ~a/include:~a/include
4398 "
4399 (assoc-ref inputs "openblas")
4400 (assoc-ref inputs "lapack")
4401 (assoc-ref inputs "openblas")
4402 (assoc-ref inputs "lapack"))))
4403 #t))))))
4404 (native-inputs
4405 `(("python2-nose" ,python2-nose)))
4406 (description "NumPy is the fundamental package for scientific computing
4407 with Python. It contains among other things: a powerful N-dimensional array
4408 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4409 and Fortran code, useful linear algebra, Fourier transform, and random number
4410 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4411 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4412 Numeric.")
4413 (license license:bsd-3)))
4414
4415 (define-public python-munch
4416 (package
4417 (name "python-munch")
4418 (version "2.0.4")
4419 (source
4420 (origin
4421 (method url-fetch)
4422 (uri (pypi-uri "munch" version))
4423 (sha256
4424 (base32
4425 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4426 (build-system python-build-system)
4427 (home-page "https://github.com/Infinidat/munch")
4428 (synopsis "Dot-accessible dictionary")
4429 (description "Munch is a dot-accessible dictionary similar to JavaScript
4430 objects.")
4431 (license license:expat)))
4432
4433 (define-public python2-munch
4434 (package-with-python2 python-munch))
4435
4436 (define-public python-colormath
4437 (package
4438 (name "python-colormath")
4439 (version "3.0.0")
4440 (source
4441 (origin
4442 (method url-fetch)
4443 (uri (pypi-uri "colormath" version))
4444 (sha256
4445 (base32
4446 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4447 (build-system python-build-system)
4448 (propagated-inputs
4449 `(("python-networkx" ,python-networkx)
4450 ("python-numpy" ,python-numpy)))
4451 (home-page "https://github.com/gtaylor/python-colormath")
4452 (synopsis "Color math and conversion library")
4453 (description
4454 "This is a Python library for color math and conversions.")
4455 (license license:bsd-3)))
4456
4457 (define-public python2-colormath
4458 (package-with-python2 python-colormath))
4459
4460 (define-public python-spectra
4461 (package
4462 (name "python-spectra")
4463 (version "0.0.11")
4464 (source
4465 (origin
4466 (method url-fetch)
4467 (uri (pypi-uri "spectra" version))
4468 (sha256
4469 (base32
4470 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4471 (build-system python-build-system)
4472 (arguments
4473 `(#:phases
4474 (modify-phases %standard-phases
4475 (replace 'check
4476 (lambda _ (invoke "nosetests" "-v"))))))
4477 (propagated-inputs
4478 `(("python-colormath" ,python-colormath)))
4479 (native-inputs
4480 `(("python-nose" ,python-nose)))
4481 (home-page "https://github.com/jsvine/spectra")
4482 (synopsis "Color scales and color conversion")
4483 (description
4484 "This package provides a Python library intended to make color math,
4485 color scales, and color space conversion easy. It has support for:
4486
4487 @enumerate
4488 @item Color scales
4489 @item Color ranges
4490 @item Color blending
4491 @item Brightening/darkening colors
4492 @item Saturating/desaturating colors
4493 @item Conversion to/from multiple color spaces.
4494 @end enumerate\n")
4495 (license license:expat)))
4496
4497 (define-public python2-spectra
4498 (package-with-python2 python-spectra))
4499
4500 (define-public python-numpy-documentation
4501 (package
4502 (name "python-numpy-documentation")
4503 (version (package-version python-numpy))
4504 (source (package-source python-numpy))
4505 (build-system python-build-system)
4506 (native-inputs
4507 `(("python-matplotlib" ,python-matplotlib)
4508 ("python-numpy" ,python-numpy)
4509 ("pkg-config" ,pkg-config)
4510 ("python-sphinx" ,python-sphinx)
4511 ("python-numpydoc" ,python-numpydoc)
4512 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4513 texlive-fonts-ec
4514 texlive-generic-ifxetex
4515 texlive-generic-pdftex
4516 texlive-amsfonts
4517 texlive-latex-capt-of
4518 texlive-latex-cmap
4519 texlive-latex-environ
4520 texlive-latex-eqparbox
4521 texlive-latex-etoolbox
4522 texlive-latex-expdlist
4523 texlive-latex-fancyhdr
4524 texlive-latex-fancyvrb
4525 texlive-latex-fncychap
4526 texlive-latex-float
4527 texlive-latex-framed
4528 texlive-latex-geometry
4529 texlive-latex-graphics
4530 texlive-latex-hyperref
4531 texlive-latex-mdwtools
4532 texlive-latex-multirow
4533 texlive-latex-needspace
4534 texlive-latex-oberdiek
4535 texlive-latex-parskip
4536 texlive-latex-preview
4537 texlive-latex-tabulary
4538 texlive-latex-threeparttable
4539 texlive-latex-titlesec
4540 texlive-latex-trimspaces
4541 texlive-latex-ucs
4542 texlive-latex-upquote
4543 texlive-latex-url
4544 texlive-latex-varwidth
4545 texlive-latex-wrapfig)))
4546 ("texinfo" ,texinfo)
4547 ("perl" ,perl)
4548 ("scipy-sphinx-theme"
4549 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4550 (method git-fetch)
4551 (uri (git-reference
4552 (url "https://github.com/scipy/scipy-sphinx-theme")
4553 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4554 (sha256
4555 (base32
4556 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4557 ,@(package-native-inputs python-numpy)))
4558 (arguments
4559 `(#:tests? #f ; we're only generating the documentation
4560 #:phases
4561 (modify-phases %standard-phases
4562 (delete 'build)
4563 (replace 'install
4564 (lambda* (#:key inputs outputs #:allow-other-keys)
4565 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4566 (doc (string-append
4567 data "/doc/" ,name "-"
4568 ,(package-version python-numpy)))
4569 (info-reader (string-append data "/info"))
4570 (html (string-append doc "/html"))
4571 (scipy-sphinx-theme "scipy-sphinx-theme")
4572 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4573 (pyver ,(string-append "PYVER=")))
4574
4575 ;; FIXME: this is needed to for texlive-union to generate
4576 ;; fonts, which are not found.
4577 (setenv "HOME" "/tmp")
4578
4579 (with-directory-excursion "doc"
4580 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4581 (mkdir-p html)
4582 (invoke "make" "html" pyver)
4583 (invoke "make" "latex" "PAPER=a4" pyver)
4584 (invoke "make" "-C" "build/latex"
4585 "all-pdf" "PAPER=a4" pyver)
4586 ;; FIXME: Generation of the info file fails.
4587 ;; (invoke "make" "info" pyver)
4588 ;; (mkdir-p info)
4589 ;; (copy-file "build/texinfo/numpy.info"
4590 ;; (string-append info "/numpy.info"))
4591 (for-each (lambda (file)
4592 (copy-file (string-append "build/latex" file)
4593 (string-append doc file)))
4594 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4595 (with-directory-excursion "build/html"
4596 (for-each (lambda (file)
4597 (let* ((dir (dirname file))
4598 (tgt-dir (string-append html "/" dir)))
4599 (unless (equal? "." dir)
4600 (mkdir-p tgt-dir))
4601 (install-file file html)))
4602 (find-files "." ".*")))))
4603 #t)))))
4604 (home-page (package-home-page python-numpy))
4605 (synopsis "Documentation for the python-numpy package")
4606 (description (package-description python-numpy))
4607 (license (package-license python-numpy))))
4608
4609 (define-public python2-numpy-documentation
4610 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4611 (package
4612 (inherit numpy-documentation)
4613 (native-inputs `(("python2-functools32" ,python2-functools32)
4614 ,@(package-native-inputs numpy-documentation))))))
4615
4616 (define-public python-pygit2
4617 (package
4618 (name "python-pygit2")
4619 (version "1.1.0")
4620 (source
4621 (origin
4622 (method url-fetch)
4623 (uri (pypi-uri "pygit2" version))
4624 (sha256
4625 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4626 (build-system python-build-system)
4627 (arguments
4628 '(#:tests? #f)) ; tests don't run correctly in our environment
4629 (propagated-inputs
4630 `(("python-cached-property" ,python-cached-property)
4631 ("python-cffi" ,python-cffi)
4632 ("libgit2" ,libgit2)))
4633 (native-inputs
4634 `(("python-pytest" ,python-pytest)))
4635 (home-page "https://github.com/libgit2/pygit2")
4636 (synopsis "Python bindings for libgit2")
4637 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4638 library, libgit2 implements Git plumbing.")
4639 ;; GPL2.0 only, with linking exception.
4640 (license license:gpl2)))
4641
4642 (define-public python-patiencediff
4643 (package
4644 (name "python-patiencediff")
4645 (version "0.2.0")
4646 (source
4647 (origin
4648 (method url-fetch)
4649 (uri (pypi-uri "patiencediff" version))
4650 (sha256
4651 (base32
4652 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
4653 (build-system python-build-system)
4654 (home-page "https://www.breezy-vcs.org/")
4655 (synopsis "Python implementation of the patiencediff algorithm")
4656 (description
4657 "This package contains a Python implementation of the @code{patiencediff}
4658 algorithm. Patiencediff provides a good balance of performance, nice output for
4659 humans, and implementation simplicity.")
4660 (license license:gpl2)))
4661
4662 (define-public python-pyparsing
4663 (package
4664 (name "python-pyparsing")
4665 (version "2.4.6")
4666 (source
4667 (origin
4668 (method url-fetch)
4669 (uri (pypi-uri "pyparsing" version))
4670 (sha256
4671 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4672 (build-system python-build-system)
4673 (outputs '("out" "doc"))
4674 (arguments
4675 `(#:tests? #f ; no test target
4676 #:phases
4677 (modify-phases %standard-phases
4678 (add-after 'install 'install-doc
4679 (lambda* (#:key outputs #:allow-other-keys)
4680 (let* ((doc (string-append (assoc-ref outputs "doc")
4681 "/share/doc/" ,name "-" ,version))
4682 (html-doc (string-append doc "/html"))
4683 (examples (string-append doc "/examples")))
4684 (mkdir-p html-doc)
4685 (mkdir-p examples)
4686 (for-each
4687 (lambda (dir tgt)
4688 (map (lambda (file)
4689 (install-file file tgt))
4690 (find-files dir ".*")))
4691 (list "docs" "htmldoc" "examples")
4692 (list doc html-doc examples))
4693 #t))))))
4694 (home-page "https://github.com/pyparsing/pyparsing")
4695 (synopsis "Python parsing class library")
4696 (description
4697 "The pyparsing module is an alternative approach to creating and
4698 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4699 of regular expressions. The pyparsing module provides a library of classes
4700 that client code uses to construct the grammar directly in Python code.")
4701 (license license:expat)))
4702
4703 (define-public python2-pyparsing
4704 (package-with-python2 python-pyparsing))
4705
4706 (define-public python-pyparsing-2.4.7
4707 (package
4708 (inherit python-pyparsing)
4709 (version "2.4.7")
4710 (source
4711 (origin
4712 (method url-fetch)
4713 (uri (pypi-uri "pyparsing" version))
4714 (sha256
4715 (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
4716
4717 (define-public python-numpydoc
4718 (package
4719 (name "python-numpydoc")
4720 (version "0.8.0")
4721 (source
4722 (origin
4723 (method url-fetch)
4724 (uri (pypi-uri "numpydoc" version))
4725 (sha256
4726 (base32
4727 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4728 (build-system python-build-system)
4729 (propagated-inputs
4730 `(("python-sphinx" ,python-sphinx)))
4731 (native-inputs
4732 `(("python-nose" ,python-nose)))
4733 (home-page "https://pypi.org/project/numpydoc/")
4734 (synopsis
4735 "Numpy's Sphinx extensions")
4736 (description
4737 "Sphinx extension to support docstrings in Numpy format.")
4738 (license license:bsd-2)))
4739
4740 (define-public python2-numpydoc
4741 (package-with-python2 python-numpydoc))
4742
4743 (define-public python-numexpr
4744 (package
4745 (name "python-numexpr")
4746 (version "2.6.5")
4747 (source
4748 (origin
4749 (method url-fetch)
4750 (uri (pypi-uri "numexpr" version))
4751 (sha256
4752 (base32
4753 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4754 (build-system python-build-system)
4755 (arguments `(#:tests? #f)) ; no tests included
4756 (propagated-inputs
4757 `(("python-numpy" ,python-numpy)))
4758 (home-page "https://github.com/pydata/numexpr")
4759 (synopsis "Fast numerical expression evaluator for NumPy")
4760 (description
4761 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4762 expressions that operate on arrays are accelerated and use less memory than
4763 doing the same calculation in Python. In addition, its multi-threaded
4764 capabilities can make use of all your cores, which may accelerate
4765 computations, most specially if they are not memory-bounded (e.g. those using
4766 transcendental functions).")
4767 (license license:expat)))
4768
4769 (define-public python2-numexpr
4770 (package-with-python2 python-numexpr))
4771
4772 (define-public python-cycler
4773 (package
4774 (name "python-cycler")
4775 (version "0.10.0")
4776 (source (origin
4777 (method url-fetch)
4778 (uri (pypi-uri "cycler" version))
4779 (sha256
4780 (base32
4781 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4782 (build-system python-build-system)
4783 (arguments
4784 ;; XXX: The current version requires 'coveralls' which we don't have.
4785 ;; Enable this for the next release which uses 'python-pytest'.
4786 '(#:tests? #f))
4787 (propagated-inputs
4788 `(("python-six" ,python-six)))
4789 (home-page "http://matplotlib.org/cycler/")
4790 (synopsis "Composable keyword argument iterator")
4791 (description
4792 "When using @code{matplotlib} and plotting more than one line, it is
4793 common to want to be able to want to be able to cycle over one or more artist
4794 styles; but the plotting logic can quickly become involved.
4795 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4796 @code{Cycler} class was developed.")
4797 (license license:bsd-3)))
4798
4799 (define-public python2-cycler
4800 (package-with-python2 python-cycler))
4801
4802 (define-public python-colorspacious
4803 (package
4804 (name "python-colorspacious")
4805 (version "1.1.2")
4806 (source
4807 (origin
4808 (method git-fetch)
4809 (uri (git-reference
4810 (url "https://github.com/njsmith/colorspacious")
4811 (commit (string-append "v" version))))
4812 (file-name (git-file-name name version))
4813 (sha256
4814 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4815 (build-system python-build-system)
4816 (propagated-inputs
4817 `(("python-numpy" ,python-numpy)))
4818 (native-inputs
4819 `(("python-nose" ,python-nose)))
4820 (arguments
4821 `(#:phases
4822 (modify-phases %standard-phases
4823 (replace 'check
4824 (lambda _
4825 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4826 (home-page "https://github.com/njsmith/colorspacious")
4827 (synopsis "Python library for colorspace conversions")
4828 (description "@code{colorspacious} is a Python library that lets you
4829 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4830 (license license:expat)))
4831
4832 (define-public python2-colorspacious
4833 (package-with-python2 python-colorspacious))
4834
4835 (define-public python-matplotlib
4836 (package
4837 (name "python-matplotlib")
4838 (version "3.1.2")
4839 (source
4840 (origin
4841 (method url-fetch)
4842 (uri (pypi-uri "matplotlib" version))
4843 (sha256
4844 (base32
4845 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4846 (build-system python-build-system)
4847 (propagated-inputs ; the following packages are all needed at run time
4848 `(("python-cycler" ,python-cycler)
4849 ("python-kiwisolver" ,python-kiwisolver)
4850 ("python-pyparsing" ,python-pyparsing)
4851 ("python-pygobject" ,python-pygobject)
4852 ("gobject-introspection" ,gobject-introspection)
4853 ("python-tkinter" ,python "tk")
4854 ("python-dateutil" ,python-dateutil)
4855 ("python-numpy" ,python-numpy)
4856 ("python-pillow" ,python-pillow)
4857 ("python-pytz" ,python-pytz)
4858 ("python-six" ,python-six)
4859 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4860 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4861 ;; object. For this reason we need to import both libraries.
4862 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4863 ("python-pycairo" ,python-pycairo)
4864 ("python-cairocffi" ,python-cairocffi)))
4865 (inputs
4866 `(("libpng" ,libpng)
4867 ("imagemagick" ,imagemagick)
4868 ("freetype" ,freetype)
4869 ("cairo" ,cairo)
4870 ("glib" ,glib)
4871 ;; FIXME: Add backends when available.
4872 ;("python-wxpython" ,python-wxpython)
4873 ("tcl" ,tcl)
4874 ("tk" ,tk)))
4875 (native-inputs
4876 `(("pkg-config" ,pkg-config)
4877 ("python-pytest" ,python-pytest)
4878 ("python-mock" ,python-mock)
4879 ("unzip" ,unzip)
4880 ("jquery-ui"
4881 ,(origin
4882 (method url-fetch)
4883 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4884 (sha256
4885 (base32
4886 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4887 (arguments
4888 `(#:phases
4889 (modify-phases %standard-phases
4890 ;; XXX We disable all image comparison tests because we're using a
4891 ;; newer version of FreeType than matplotlib expects. This leads to
4892 ;; minor differences throughout the tests.
4893 (add-after 'unpack 'fix-and-disable-failing-tests
4894 (lambda _
4895 (substitute* (append (find-files "lib/matplotlib/tests/"
4896 "test_.*\\.py$")
4897 (find-files "lib/mpl_toolkits/tests"
4898 "test_.*\\.py$"))
4899 (("^from matplotlib" match)
4900 (string-append "import pytest\n" match))
4901 (("( *)@image_comparison" match indent)
4902 (string-append indent
4903 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4904 match)))
4905 (substitute* "lib/matplotlib/tests/test_animation.py"
4906 (("/bin/sh") (which "sh")))
4907 (for-each delete-file
4908 ;; test_normal_axes, test_get_tightbbox_polar
4909 '("lib/matplotlib/tests/test_axes.py"
4910 ;; We don't use the webagg backend and this test forces it.
4911 "lib/matplotlib/tests/test_backend_webagg.py"
4912 ;; test_outward_ticks
4913 "lib/matplotlib/tests/test_tightlayout.py"
4914 ;; test_hidden_axes fails with minor extent
4915 ;; differences, possibly due to the use of a
4916 ;; different version of FreeType.
4917 "lib/matplotlib/tests/test_constrainedlayout.py"
4918 ;; Fontconfig returns no fonts.
4919 "lib/matplotlib/tests/test_font_manager.py"))
4920 #t))
4921 (add-before 'install 'install-jquery-ui
4922 (lambda* (#:key outputs inputs #:allow-other-keys)
4923 (let ((dir (string-append (assoc-ref outputs "out")
4924 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4925 (mkdir-p dir)
4926 (invoke "unzip"
4927 (assoc-ref inputs "jquery-ui")
4928 "-d" dir))
4929 #t))
4930 (replace 'check
4931 (lambda* (#:key outputs inputs #:allow-other-keys)
4932 (add-installed-pythonpath inputs outputs)
4933 (invoke "python" "tests.py" "-v"
4934 "-m" "not network and not webagg")))
4935 (add-before 'build 'configure-environment
4936 (lambda* (#:key outputs inputs #:allow-other-keys)
4937 (let ((cairo (assoc-ref inputs "cairo")))
4938 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4939 ;; has not effect.
4940 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4941 (setenv "HOME" (getcwd))
4942 (call-with-output-file "setup.cfg"
4943 (lambda (port)
4944 (format port "[directories]~%
4945 basedirlist = ~a,~a~%
4946 [packages]~%
4947 tests = True~%"
4948 (assoc-ref inputs "tcl")
4949 (assoc-ref inputs "tk")))))
4950 #t)))))
4951 (home-page "https://matplotlib.org/")
4952 (synopsis "2D plotting library for Python")
4953 (description
4954 "Matplotlib is a Python 2D plotting library which produces publication
4955 quality figures in a variety of hardcopy formats and interactive environments
4956 across platforms. Matplotlib can be used in Python scripts, the python and
4957 ipython shell, web application servers, and six graphical user interface
4958 toolkits.")
4959 (license license:psfl)
4960 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4961
4962 (define-public python2-matplotlib
4963 (let ((matplotlib (package-with-python2
4964 (strip-python2-variant python-matplotlib))))
4965 (package (inherit matplotlib)
4966 (version "2.2.4")
4967 (source
4968 (origin
4969 (method url-fetch)
4970 (uri (pypi-uri "matplotlib" version))
4971 (sha256
4972 (base32
4973 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4974 (arguments
4975 (substitute-keyword-arguments (package-arguments matplotlib)
4976 ((#:phases phases)
4977 `(modify-phases ,phases
4978 (replace 'install-jquery-ui
4979 (lambda* (#:key outputs inputs #:allow-other-keys)
4980 (let ((dir (string-append (assoc-ref outputs "out")
4981 "/lib/python2.7/site-packages/"
4982 "matplotlib/backends/web_backend/")))
4983 (mkdir-p dir)
4984 (invoke "unzip"
4985 (assoc-ref inputs "jquery-ui")
4986 "-d" dir))
4987 #t))
4988 (delete 'fix-and-disable-failing-tests)
4989 (delete 'check))))) ; These tests weren't run the the past.
4990 ;; Make sure to use special packages for Python 2 instead
4991 ;; of those automatically rewritten by package-with-python2.
4992 (propagated-inputs
4993 `(("python2-pycairo" ,python2-pycairo)
4994 ("python2-backports-functools-lru-cache"
4995 ,python2-backports-functools-lru-cache)
4996 ("python2-functools32" ,python2-functools32)
4997 ("python2-pygobject-2" ,python2-pygobject-2)
4998 ("python2-subprocess32" ,python2-subprocess32)
4999 ("python2-tkinter" ,python-2 "tk")
5000 ,@(fold alist-delete (package-propagated-inputs matplotlib)
5001 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
5002
5003 (define-public python-matplotlib-documentation
5004 (package
5005 (name "python-matplotlib-documentation")
5006 (version (package-version python-matplotlib))
5007 (source (package-source python-matplotlib))
5008 (build-system python-build-system)
5009 (native-inputs
5010 `(("python-matplotlib" ,python-matplotlib)
5011 ("python-colorspacious" ,python-colorspacious)
5012 ("python-sphinx" ,python-sphinx)
5013 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
5014 ("python-sphinx-gallery" ,python-sphinx-gallery)
5015 ("python-numpydoc" ,python-numpydoc)
5016 ("python-ipython" ,python-ipython)
5017 ("python-ipykernel" ,python-ipykernel)
5018 ("python-mock" ,python-mock)
5019 ("graphviz" ,graphviz)
5020 ("texlive" ,(texlive-union (list texlive-amsfonts
5021 texlive-latex-amsmath
5022 texlive-latex-enumitem
5023 texlive-latex-expdlist
5024 texlive-latex-geometry
5025 texlive-latex-preview
5026 texlive-latex-type1cm
5027 texlive-latex-ucs
5028
5029 texlive-generic-pdftex
5030
5031 texlive-fonts-ec
5032 texlive-fonts-adobe-times
5033 texlive-fonts-txfonts)))
5034 ("texinfo" ,texinfo)
5035 ,@(package-native-inputs python-matplotlib)))
5036 (arguments
5037 `(#:tests? #f ; we're only generating documentation
5038 #:phases
5039 (modify-phases %standard-phases
5040 ;; The tests in python-matplotlib are run after the install phase, so
5041 ;; we need to delete the extra phase here.
5042 (delete 'check)
5043 (replace 'build
5044 (lambda _
5045 (chdir "doc")
5046 (setenv "PYTHONPATH"
5047 (string-append (getenv "PYTHONPATH")
5048 ":" (getcwd) "/../examples/units"))
5049 (substitute* "conf.py"
5050 ;; Don't use git.
5051 (("^SHA = check_output.*")
5052 (string-append "SHA = \"" ,version "\"\n"))
5053 ;; Don't fetch intersphinx files from the Internet
5054 (("^explicit_order_folders" m)
5055 (string-append "intersphinx_mapping = {}\n" m))
5056 (("'sphinx.ext.intersphinx',") "")
5057 ;; Disable URL embedding which requires internet access.
5058 (("'https://docs.scipy.org/doc/numpy'") "None")
5059 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
5060 (invoke "make"
5061 "SPHINXBUILD=sphinx-build"
5062 "SPHINXOPTS=" ; don't abort on warnings
5063 "html" "texinfo")))
5064 (replace 'install
5065 (lambda* (#:key inputs outputs #:allow-other-keys)
5066 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
5067 (doc (string-append data "/doc/python-matplotlib-" ,version))
5068 (info (string-append data "/info"))
5069 (html (string-append doc "/html")))
5070 (mkdir-p html)
5071 (mkdir-p info)
5072 (copy-recursively "build/html" html)
5073 (symlink (string-append html "/_images")
5074 (string-append info "/matplotlib-figures"))
5075 (with-directory-excursion "build/texinfo"
5076 (substitute* "matplotlib.texi"
5077 (("@image\\{([^,]*)" all file)
5078 (string-append "@image{matplotlib-figures/" file)))
5079 (symlink (string-append html "/_images")
5080 "./matplotlib-figures")
5081 (invoke "makeinfo" "--no-split"
5082 "-o" "matplotlib.info" "matplotlib.texi"))
5083 (install-file "build/texinfo/matplotlib.info" info))
5084 #t)))))
5085 (home-page (package-home-page python-matplotlib))
5086 (synopsis "Documentation for the python-matplotlib package")
5087 (description (package-description python-matplotlib))
5088 (license (package-license python-matplotlib))))
5089
5090 (define-public python2-matplotlib-documentation
5091 (let ((parent (package-with-python2 python-matplotlib-documentation)))
5092 (package
5093 (inherit parent)
5094 (native-inputs
5095 (alist-delete "python-sphinx-copybutton"
5096 (package-native-inputs parent))))))
5097
5098 (define-public python-matplotlib-venn
5099 (package
5100 (name "python-matplotlib-venn")
5101 (version "0.11.5")
5102 (source
5103 (origin
5104 (method url-fetch)
5105 (uri (pypi-uri "matplotlib-venn" version ".zip"))
5106 (sha256
5107 (base32
5108 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
5109 (build-system python-build-system)
5110 (arguments '(#:tests? #f)) ; tests are not included
5111 (propagated-inputs
5112 `(("python-matplotlib" ,python-matplotlib)
5113 ("python-numpy" ,python-numpy)
5114 ("python-scipy" ,python-scipy)))
5115 (native-inputs
5116 `(("unzip" ,unzip)))
5117 (home-page "https://github.com/konstantint/matplotlib-venn")
5118 (synopsis "Plot area-proportional Venn diagrams")
5119 (description
5120 "This package provides tools for plotting area-proportional two- and
5121 three-way Venn diagrams in @code{matplotlib}.")
5122 (license license:expat)))
5123
5124 (define-public python-pysnptools
5125 (package
5126 (name "python-pysnptools")
5127 (version "0.4.11")
5128 (source
5129 (origin
5130 (method url-fetch)
5131 (uri (pypi-uri "pysnptools" version))
5132 (sha256
5133 (base32
5134 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
5135 (build-system python-build-system)
5136 (arguments
5137 `(#:tests? #f ; no test data are included
5138 #:phases
5139 (modify-phases %standard-phases
5140 (replace 'check
5141 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5142 (if tests?
5143 (begin
5144 (add-installed-pythonpath inputs outputs)
5145 (invoke "python3" "pysnptools/test.py"))
5146 #t))))))
5147 (propagated-inputs
5148 `(("python-dill" ,python-dill)
5149 ("python-h5py" ,python-h5py)
5150 ("python-numpy" ,python-numpy)
5151 ("python-pandas" ,python-pandas)
5152 ("python-psutil" ,python-psutil)
5153 ("python-scipy" ,python-scipy)))
5154 (native-inputs
5155 `(("python-cython" ,python-cython)))
5156 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
5157 (synopsis "Library for reading and manipulating genetic data")
5158 (description
5159 "PySnpTools is a library for reading and manipulating genetic data. It
5160 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
5161 those files. It can also efficiently manipulate ranges of integers using set
5162 operators such as union, intersection, and difference.")
5163 (license license:asl2.0)))
5164
5165 (define-public python2-pysnptools
5166 (package-with-python2 python-pysnptools))
5167
5168 (define-public python-wurlitzer
5169 (package
5170 (name "python-wurlitzer")
5171 (version "2.0.1")
5172 (source
5173 (origin
5174 (method url-fetch)
5175 (uri (pypi-uri "wurlitzer" version))
5176 (sha256
5177 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
5178 (build-system python-build-system)
5179 (arguments
5180 '(#:phases
5181 (modify-phases %standard-phases
5182 (replace 'check
5183 (lambda _
5184 (invoke "pytest" "-vv" "test.py"))))))
5185 (native-inputs
5186 `(("python-mock" ,python-mock)
5187 ("python-pytest" ,python-pytest)))
5188 (home-page "https://github.com/minrk/wurlitzer")
5189 (synopsis "Capture C-level output in context managers")
5190 (description
5191 "This library helps to redirect @code{sys.stdout} to a stream or a file
5192 while executing some piece of code, including C code running within a Python
5193 process.")
5194 (license license:expat)))
5195
5196 (define-public python-socksipy-branch
5197 (package
5198 (name "python-socksipy-branch")
5199 (version "1.01")
5200 (source
5201 (origin
5202 (method url-fetch)
5203 (uri (pypi-uri "SocksiPy-branch" version))
5204 (sha256
5205 (base32
5206 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
5207 (build-system python-build-system)
5208 (arguments
5209 `(#:tests? #f)) ; There are no tests
5210 (home-page "https://code.google.com/archive/p/socksipy-branch/")
5211 (synopsis "Python SOCKS module")
5212 (description
5213 "SocksiPy - A Python SOCKS client module. It provides a
5214 socket-like interface that supports connections to any TCP
5215 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
5216 The original version was developed by Dan Haim, this is a
5217 branch created by Mario Vilas to address some open issues,
5218 as the original project seems to have been abandoned circa 2007.")
5219 (license license:bsd-3)))
5220
5221 (define-public python2-socksipy-branch
5222 (package-with-python2 python-socksipy-branch))
5223
5224 (define-public python-socksipychain
5225 (package
5226 (name "python-socksipychain")
5227 (version "2.1.2")
5228 (source
5229 (origin
5230 (method git-fetch)
5231 (uri (git-reference
5232 (url "https://github.com/pagekite/PySocksipyChain")
5233 (commit (string-append "v" version))))
5234 (file-name (git-file-name name version))
5235 (sha256
5236 (base32
5237 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5238 (build-system python-build-system)
5239 (arguments
5240 `(#:tests? #f)) ; Tests try to access the network.
5241 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5242 (synopsis "Python SOCKS module with chained proxies support")
5243 (description
5244 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5245 adds support for arbitrary chaining of proxy servers and various modes of
5246 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5247 a simple netcat replacement with chaining support.")
5248 (license license:bsd-3)))
5249
5250 (define-public python-pycodestyle
5251 (package
5252 (name "python-pycodestyle")
5253 (version "2.6.0")
5254 (source
5255 (origin
5256 (method url-fetch)
5257 (uri (pypi-uri "pycodestyle" version))
5258 (sha256
5259 (base32
5260 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))
5261 (build-system python-build-system)
5262 (arguments
5263 `(#:phases
5264 (modify-phases %standard-phases
5265 (replace 'check
5266 (lambda _
5267 (invoke "pytest" "-vv"))))))
5268 (native-inputs
5269 `(("python-pytest" ,python-pytest)))
5270 (home-page "https://pycodestyle.readthedocs.io/")
5271 (synopsis "Python style guide checker")
5272 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5273 Python code against some of the style conventions in
5274 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5275 (license license:expat)))
5276
5277 (define-public python2-pycodestyle
5278 (package-with-python2 python-pycodestyle))
5279
5280 (define-public python-multidict
5281 (package
5282 (name "python-multidict")
5283 (version "4.7.5")
5284 (source
5285 (origin
5286 (method url-fetch)
5287 (uri (pypi-uri "multidict" version))
5288 (sha256
5289 (base32
5290 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5291 (build-system python-build-system)
5292 (arguments
5293 '(#:modules ((ice-9 ftw)
5294 (srfi srfi-1)
5295 (srfi srfi-26)
5296 (guix build utils)
5297 (guix build python-build-system))
5298 #:phases (modify-phases %standard-phases
5299 (replace 'check
5300 (lambda* (#:key tests? #:allow-other-keys)
5301 (if tests?
5302 (begin
5303 (let ((libdir (find (cut string-prefix? "lib." <>)
5304 (scandir "build"))))
5305 (setenv "PYTHONPATH"
5306 (string-append "./build/" libdir ":"
5307 (getenv "PYTHONPATH")))
5308 (invoke "pytest" "-vv")))
5309 (format #t "test suite not run~%"))
5310 #t)))))
5311 (native-inputs
5312 `(("python-pytest" ,python-pytest)
5313 ("python-pytest-cov" ,python-pytest-cov)))
5314 (home-page "https://github.com/aio-libs/multidict/")
5315 (synopsis "Multidict implementation")
5316 (description "Multidict is dict-like collection of key-value pairs
5317 where key might be occurred more than once in the container.")
5318 (license license:asl2.0)))
5319
5320 (define-public python-orderedmultidict
5321 (package
5322 (name "python-orderedmultidict")
5323 (version "1.0")
5324 (source
5325 (origin
5326 (method url-fetch)
5327 (uri (pypi-uri "orderedmultidict" version))
5328 (sha256
5329 (base32
5330 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5331 (build-system python-build-system)
5332 (arguments
5333 `(#:phases
5334 (modify-phases %standard-phases
5335 (add-after 'unpack 'fix-tests
5336 (lambda _
5337 ;; The package uses nosetest for running the tests.
5338 ;; Adding this initfile allows to run the test suite
5339 ;; without requiring nosetest.
5340 (with-output-to-file "tests/__init__.py" newline)
5341 #t)))))
5342 (propagated-inputs
5343 `(("python-six" ,python-six)))
5344 (native-inputs
5345 `(("python-pycodestyle" ,python-pycodestyle)))
5346 (home-page "https://github.com/gruns/orderedmultidict")
5347 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5348 (description "This package contains a library for ordered multivalue
5349 dictionaries. A multivalue dictionary is a dictionary that can store
5350 multiple values for the same key. An ordered multivalue dictionary is a
5351 multivalue dictionary that retains the order of insertions and deletions.")
5352 (license license:unlicense)))
5353
5354 (define-public python2-orderedmultidict
5355 (package-with-python2 python-orderedmultidict))
5356
5357 (define-public python-autopep8
5358 (package
5359 (name "python-autopep8")
5360 (version "1.5.3")
5361 (source
5362 (origin
5363 (method url-fetch)
5364 (uri (pypi-uri "autopep8" version))
5365 (sha256
5366 (base32
5367 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5368 (build-system python-build-system)
5369 (propagated-inputs
5370 `(("python-pycodestyle" ,python-pycodestyle)
5371 ("python-toml" ,python-toml)))
5372 (home-page "https://github.com/hhatto/autopep8")
5373 (synopsis "Format Python code according to the PEP 8 style guide")
5374 (description
5375 "@code{autopep8} automatically formats Python code to conform to
5376 the PEP 8 style guide. It uses the pycodestyle utility to determine
5377 what parts of the code needs to be formatted. @code{autopep8} is
5378 capable of fixing most of the formatting issues that can be reported
5379 by pycodestyle.")
5380 (license (license:non-copyleft
5381 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5382
5383 (define-public python2-autopep8
5384 (package-with-python2 python-autopep8))
5385
5386 (define-public python-distlib
5387 (package
5388 (name "python-distlib")
5389 (version "0.3.0")
5390 (source
5391 (origin
5392 (method url-fetch)
5393 (uri (pypi-uri "distlib" version ".zip"))
5394 (sha256
5395 (base32
5396 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5397 (build-system python-build-system)
5398 (arguments
5399 `(#:phases
5400 (modify-phases %standard-phases
5401 (add-before 'build 'no-/bin/sh
5402 (lambda _
5403 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5404 (("/bin/sh") (which "sh")))
5405 #t))
5406 (add-before 'check 'prepare-test-env
5407 (lambda _
5408 (setenv "HOME" "/tmp")
5409 ;; NOTE: Any value works, the variable just has to be present.
5410 (setenv "SKIP_ONLINE" "1")
5411 #t)))))
5412 (native-inputs `(("unzip" ,unzip)))
5413 (home-page "https://bitbucket.org/pypa/distlib")
5414 (synopsis "Distribution utilities")
5415 (description "Distlib is a library which implements low-level functions that
5416 relate to packaging and distribution of Python software. It is intended to be
5417 used as the basis for third-party packaging tools.")
5418 (license license:psfl)))
5419
5420 (define-public python-distutils-extra
5421 (package
5422 (name "python-distutils-extra")
5423 (version "2.38")
5424 (source
5425 (origin
5426 (method url-fetch)
5427 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5428 version "/+download/python-distutils-extra-"
5429 version ".tar.gz"))
5430 (sha256
5431 (base32
5432 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5433 (build-system python-build-system)
5434 (home-page "https://launchpad.net/python-distutils-extra/")
5435 (synopsis "Enhancements to Python's distutils")
5436 (description
5437 "The python-distutils-extra module enables you to easily integrate
5438 gettext support, themed icons, and scrollkeeper-based documentation into
5439 Python's distutils.")
5440 (license license:gpl2)))
5441
5442 (define-public python2-distutils-extra
5443 (package-with-python2 python-distutils-extra))
5444
5445 (define-public python2-elib.intl
5446 (package
5447 (name "python2-elib.intl")
5448 (version "0.0.3")
5449 (source
5450 (origin
5451 ;; This project doesn't tag releases or publish tarballs, so we take
5452 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5453 (method git-fetch)
5454 (uri (git-reference
5455 (url "https://github.com/dieterv/elib.intl")
5456 (commit "d09997cfef")))
5457 (file-name (string-append name "-" version "-checkout"))
5458 (sha256
5459 (base32
5460 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5461 (build-system python-build-system)
5462 (arguments
5463 ;; incompatible with Python 3 (exception syntax)
5464 `(#:python ,python-2
5465 #:tests? #f))
5466 (home-page "https://github.com/dieterv/elib.intl")
5467 (synopsis "Enhanced internationalization for Python")
5468 (description
5469 "The elib.intl module provides enhanced internationalization (I18N)
5470 services for your Python modules and applications.")
5471 (license license:lgpl3+)))
5472
5473 (define-public python-olefile
5474 (package
5475 (name "python-olefile")
5476 (version "0.46")
5477 (source
5478 (origin
5479 (method url-fetch)
5480 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5481 "download/v" version "/olefile-" version ".tar.gz"))
5482 (file-name (string-append name "-" version ".tar.gz"))
5483 (sha256
5484 (base32
5485 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5486 (build-system python-build-system)
5487 (home-page "https://www.decalage.info/python/olefileio")
5488 (synopsis "Read and write Microsoft OLE2 files.")
5489 (description
5490 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5491 Storage or Compound Document, Microsoft Office). It is an improved version of
5492 the OleFileIO module from PIL, the Python Image Library.")
5493 (license license:bsd-3)))
5494
5495 (define-public python2-olefile
5496 (package-with-python2 python-olefile))
5497
5498 (define-public python-pillow
5499 (package
5500 (name "python-pillow")
5501 (version "6.2.1")
5502 (source
5503 (origin
5504 (method url-fetch)
5505 (uri (pypi-uri "Pillow" version))
5506 (sha256
5507 (base32
5508 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5509 (build-system python-build-system)
5510 (native-inputs
5511 `(("python-pytest" ,python-pytest)))
5512 (inputs
5513 `(("freetype" ,freetype)
5514 ("lcms" ,lcms)
5515 ("libjpeg" ,libjpeg-turbo)
5516 ("libtiff" ,libtiff)
5517 ("libwebp" ,libwebp)
5518 ("openjpeg" ,openjpeg)
5519 ("zlib" ,zlib)))
5520 (propagated-inputs
5521 `(("python-olefile" ,python-olefile)))
5522 (arguments
5523 `(#:phases
5524 (modify-phases %standard-phases
5525 (add-after 'unpack 'patch-ldconfig
5526 (lambda _
5527 (substitute* "setup.py"
5528 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5529 (replace 'check
5530 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5531 (if tests?
5532 (begin
5533 (setenv "HOME" (getcwd))
5534 ;; Make installed package available for running the tests.
5535 (add-installed-pythonpath inputs outputs)
5536 (invoke "python" "selftest.py" "--installed")
5537 (invoke "python" "-m" "pytest" "-vv"))
5538 #t))))))
5539 (home-page "https://python-pillow.org")
5540 (synopsis "Fork of the Python Imaging Library")
5541 (description
5542 "The Python Imaging Library adds image processing capabilities to your
5543 Python interpreter. This library provides extensive file format support, an
5544 efficient internal representation, and fairly powerful image processing
5545 capabilities. The core image library is designed for fast access to data
5546 stored in a few basic pixel formats. It should provide a solid foundation for
5547 a general image processing tool.")
5548 (license (license:x11-style
5549 "http://www.pythonware.com/products/pil/license.htm"
5550 "The PIL Software License"))))
5551
5552 (define-public python2-pillow
5553 (package-with-python2 python-pillow))
5554
5555 (define-public python-pillow-2.9
5556 (package
5557 (inherit python-pillow)
5558 (version "2.9.0")
5559 (source
5560 (origin
5561 (method url-fetch)
5562 (uri (pypi-uri "Pillow" version))
5563 (sha256
5564 (base32
5565 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
5566 (arguments
5567 (substitute-keyword-arguments (package-arguments python-pillow)
5568 ((#:tests? _ #f) #f)))
5569 (properties '((hidden? #t)))))
5570
5571 (define-public python-roifile
5572 (package
5573 (name "python-roifile")
5574 (version "2020.5.28")
5575 (source
5576 (origin
5577 (method url-fetch)
5578 (uri (pypi-uri "roifile" version))
5579 (sha256
5580 (base32
5581 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
5582 (build-system python-build-system)
5583 (arguments `(#:tests? #f)) ; there are none
5584 (propagated-inputs
5585 `(("python-numpy" ,python-numpy)))
5586 (home-page "https://www.lfd.uci.edu/~gohlke/")
5587 (synopsis "Read and write ImageJ ROI format")
5588 (description "Roifile is a Python library to read, write, create, and plot
5589 ImageJ ROIs, an undocumented and ImageJ application specific format to store
5590 regions of interest, geometric shapes, paths, text, etc for image overlays.")
5591 (license license:bsd-3)))
5592
5593 (define-public python-tifffile
5594 (package
5595 (name "python-tifffile")
5596 (version "2020.6.3")
5597 (source
5598 (origin
5599 (method url-fetch)
5600 (uri (pypi-uri "tifffile" version))
5601 (sha256
5602 (base32
5603 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
5604 (build-system python-build-system)
5605 ;; Tests require lfdfiles, which depends on tifffile
5606 (arguments `(#:tests? #f))
5607 (propagated-inputs
5608 `(("python-numpy" ,python-numpy)
5609 ;;("python-lfdfiles" ,python-lfdfiles)
5610 ("python-roifile" ,python-roifile)))
5611 (home-page "https://www.lfd.uci.edu/~gohlke/")
5612 (synopsis "Read and write TIFF(r) files")
5613 (description "This package lets you read image and metadata from many
5614 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
5615 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
5616 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
5617 (license license:bsd-3)))
5618
5619 (define-public python-lfdfiles
5620 (package
5621 (name "python-lfdfiles")
5622 (version "2020.1.1")
5623 (source
5624 (origin
5625 (method url-fetch)
5626 (uri (pypi-uri "lfdfiles" version))
5627 (sha256
5628 (base32
5629 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
5630 (build-system python-build-system)
5631 (propagated-inputs
5632 `(("python-click" ,python-click)
5633 ("python-numpy" ,python-numpy)
5634 ("python-tifffile" ,python-tifffile)))
5635 (home-page "https://www.lfd.uci.edu/~gohlke/")
5636 (synopsis "Work with LFD data files")
5637 (description
5638 "Lfdfiles is a Python library and console script for reading, writing,
5639 converting, and viewing many of the proprietary file formats used to store
5640 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
5641 (license license:bsd-3)))
5642
5643 (define-public python-imageio
5644 (package
5645 (name "python-imageio")
5646 (version "2.8.0")
5647 (source
5648 (origin
5649 (method url-fetch)
5650 (uri (pypi-uri "imageio" version))
5651 (sha256
5652 (base32
5653 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
5654 (build-system python-build-system)
5655 (arguments
5656 `(#:tests? #f ; many tests require online data
5657 #:phases
5658 (modify-phases %standard-phases
5659 (replace 'check
5660 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5661 (if tests?
5662 (begin
5663 ;; Make installed package available for running the tests.
5664 (add-installed-pythonpath inputs outputs)
5665 (invoke "pytest" "-vv"))
5666 #t))))))
5667 (propagated-inputs
5668 `(("python-numpy" ,python-numpy)
5669 ("python-pillow" ,python-pillow)
5670 ("python-psutil" ,python-psutil)))
5671 (native-inputs
5672 `(("python-pytest" ,python-pytest)))
5673 (home-page "https://imageio.github.io/")
5674 (synopsis "Library for reading and writing a wide range of image data")
5675 (description
5676 "Imageio is a Python library that provides an easy interface to read and
5677 write a wide range of image data, including animated images, video, volumetric
5678 data, and scientific formats.")
5679 (license license:bsd-2)))
5680
5681 (define-public python-pycparser
5682 (package
5683 (name "python-pycparser")
5684 (version "2.20")
5685 (source
5686 (origin
5687 (method url-fetch)
5688 (uri (pypi-uri "pycparser" version))
5689 (sha256
5690 (base32
5691 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5692 (outputs '("out" "doc"))
5693 (build-system python-build-system)
5694 (native-inputs
5695 `(("pkg-config" ,pkg-config)))
5696 (arguments
5697 `(#:phases
5698 (modify-phases %standard-phases
5699 (replace 'check
5700 (lambda _
5701 (with-directory-excursion "tests"
5702 (invoke "python" "all_tests.py"))
5703 #t))
5704 (add-after 'install 'install-doc
5705 (lambda* (#:key outputs #:allow-other-keys)
5706 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5707 (doc (string-append data "/doc/" ,name "-" ,version))
5708 (examples (string-append doc "/examples")))
5709 (mkdir-p examples)
5710 (for-each (lambda (file)
5711 (copy-file (string-append "." file)
5712 (string-append doc file)))
5713 '("/README.rst" "/CHANGES" "/LICENSE"))
5714 (copy-recursively "examples" examples)
5715 #t))))))
5716 (home-page "https://github.com/eliben/pycparser")
5717 (synopsis "C parser in Python")
5718 (description
5719 "Pycparser is a complete parser of the C language, written in pure Python
5720 using the PLY parsing library. It parses C code into an AST and can serve as
5721 a front-end for C compilers or analysis tools.")
5722 (license license:bsd-3)))
5723
5724 (define-public python2-pycparser
5725 (package-with-python2 python-pycparser))
5726
5727 (define-public python-pywavelets
5728 (package
5729 (name "python-pywavelets")
5730 (version "1.1.1")
5731 (home-page "https://github.com/PyWavelets/pywt")
5732 (source (origin
5733 (method url-fetch)
5734 (uri (pypi-uri "PyWavelets" version))
5735 (sha256
5736 (base32
5737 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
5738 (build-system python-build-system)
5739 (arguments
5740 '(#:modules ((ice-9 ftw)
5741 (srfi srfi-1)
5742 (srfi srfi-26)
5743 (guix build utils)
5744 (guix build python-build-system))
5745 #:phases
5746 (modify-phases %standard-phases
5747 (replace 'check
5748 (lambda _
5749 (let ((cwd (getcwd))
5750 (libdir (find (cut string-prefix? "lib." <>)
5751 (scandir "build"))))
5752 (with-directory-excursion (string-append cwd "/build/" libdir)
5753 (invoke "pytest" "-vv"))))))))
5754 (native-inputs
5755 `(("python-matplotlib" ,python-matplotlib) ;for tests
5756 ("python-pytest" ,python-pytest)))
5757 (propagated-inputs
5758 `(("python-numpy" ,python-numpy)))
5759 (synopsis "Wavelet transforms in Python")
5760 (description
5761 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5762 mathematical basis functions that are localized in both time and frequency.
5763 Wavelet transforms are time-frequency transforms employing wavelets. They are
5764 similar to Fourier transforms, the difference being that Fourier transforms are
5765 localized only in frequency instead of in time and frequency.")
5766 (license license:expat)))
5767
5768 (define-public python-pywinrm
5769 (package
5770 (name "python-pywinrm")
5771 (version "0.4.1")
5772 (source
5773 (origin
5774 (method url-fetch)
5775 (uri (pypi-uri "pywinrm" version))
5776 (sha256
5777 (base32
5778 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5779 (build-system python-build-system)
5780 (propagated-inputs
5781 `(("python-six" ,python-six)
5782 ("python-requests_ntlm" ,python-requests_ntlm)
5783 ("python-xmltodict" ,python-xmltodict)
5784 ("python-kerberos" ,python-kerberos)))
5785 (native-inputs
5786 `(("python-mock" ,python-mock)
5787 ("python-pytest" ,python-pytest)))
5788 (home-page "https://github.com/diyan/pywinrm/")
5789 (synopsis
5790 "Python library for Windows Remote Management (WinRM)")
5791 (description
5792 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5793 service. It allows you to invoke commands on target Windows machines from
5794 any machine that can run Python.")
5795 (license license:expat)))
5796
5797 (define-public python-xcffib
5798 (package
5799 (name "python-xcffib")
5800 (version "0.6.0")
5801 (source
5802 (origin
5803 (method url-fetch)
5804 (uri (pypi-uri "xcffib" version))
5805 (sha256
5806 (base32
5807 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5808 (build-system python-build-system)
5809 (inputs
5810 `(("libxcb" ,libxcb)))
5811 (propagated-inputs
5812 `(("python-cffi" ,python-cffi) ; used at run time
5813 ("python-six" ,python-six)))
5814 (arguments
5815 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5816 #:tests? #f
5817 #:phases
5818 (modify-phases %standard-phases
5819 (add-after 'unpack 'fix-libxcb-path
5820 (lambda* (#:key inputs #:allow-other-keys)
5821 (let ((libxcb (assoc-ref inputs "libxcb")))
5822 (substitute* '("xcffib/__init__.py")
5823 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5824 #t)))
5825 (add-after 'install 'install-doc
5826 (lambda* (#:key outputs #:allow-other-keys)
5827 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5828 "/doc/" ,name "-" ,version)))
5829 (mkdir-p doc)
5830 (copy-file "README.md"
5831 (string-append doc "/README.md"))
5832 #t))))))
5833 (home-page "https://github.com/tych0/xcffib")
5834 (synopsis "XCB Python bindings")
5835 (description
5836 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5837 support for Python 3 and PyPy. It is based on cffi.")
5838 (license license:expat)))
5839
5840 (define-public python2-xcffib
5841 (package-with-python2 python-xcffib))
5842
5843 (define-public python-cairocffi
5844 (package
5845 (name "python-cairocffi")
5846 (version "0.9.0")
5847 (source
5848 (origin
5849 (method url-fetch)
5850 (uri (pypi-uri "cairocffi" version))
5851 (sha256
5852 (base32
5853 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5854 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5855 (build-system python-build-system)
5856 (outputs '("out" "doc"))
5857 (inputs
5858 `(("glib" ,glib)
5859 ("gtk+" ,gtk+)
5860 ("gdk-pixbuf" ,gdk-pixbuf)
5861 ("cairo" ,cairo)
5862 ("pango" ,pango)))
5863 (native-inputs
5864 `(("pkg-config" ,pkg-config)
5865 ("python-pytest" ,python-pytest)
5866 ("python-pytest-cov" ,python-pytest-cov)
5867 ("python-pytest-runner" ,python-pytest-runner)
5868 ("python-sphinx" ,python-sphinx)
5869 ("python-docutils" ,python-docutils)))
5870 (propagated-inputs
5871 `(("python-xcffib" ,python-xcffib))) ; used at run time
5872 (arguments
5873 `(#:phases
5874 (modify-phases %standard-phases
5875 (add-after 'unpack 'patch-paths
5876 (lambda* (#:key inputs outputs #:allow-other-keys)
5877 (substitute* (find-files "." "\\.py$")
5878 (("dlopen\\(ffi, 'cairo'")
5879 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5880 "/lib/libcairo.so.2'"))
5881 (("dlopen\\(ffi, 'gdk-3'")
5882 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5883 "/lib/libgtk-3.so.0'"))
5884 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5885 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5886 "/lib/libgdk_pixbuf-2.0.so.0'"))
5887 (("dlopen\\(ffi, 'glib-2.0'")
5888 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5889 "/lib/libglib-2.0.so.0'"))
5890 (("dlopen\\(ffi, 'gobject-2.0'")
5891 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5892 "/lib/libgobject-2.0.so.0'"))
5893 (("dlopen\\(ffi, 'pangocairo-1.0'")
5894 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5895 "/lib/libpangocairo-1.0.so.0'"))
5896 (("dlopen\\(ffi, 'pango-1.0'")
5897 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5898 "/lib/libpango-1.0.so.0'")))
5899 #t))
5900 (add-after 'install 'install-doc
5901 (lambda* (#:key inputs outputs #:allow-other-keys)
5902 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5903 (doc (string-append data "/doc/" ,name "-" ,version))
5904 (html (string-append doc "/html")))
5905 (setenv "LD_LIBRARY_PATH"
5906 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5907 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5908 (setenv "LANG" "en_US.UTF-8")
5909 (mkdir-p html)
5910 (for-each (lambda (file)
5911 (copy-file (string-append "." file)
5912 (string-append doc file)))
5913 '("/README.rst" "/CHANGES" "/LICENSE"))
5914 (system* "python" "setup.py" "build_sphinx")
5915 (copy-recursively "docs/_build/html" html)
5916 #t))))))
5917 (home-page "https://github.com/Kozea/cairocffi")
5918 (synopsis "Python bindings and object-oriented API for Cairo")
5919 (description
5920 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5921 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5922 graphics library with support for multiple backends including image buffers,
5923 PNG, PostScript, PDF, and SVG file output.")
5924 (license license:bsd-3)))
5925
5926 (define-public python2-cairocffi
5927 (package-with-python2 python-cairocffi))
5928
5929 (define-public python-decorator
5930 (package
5931 (name "python-decorator")
5932 (version "4.3.0")
5933 (source
5934 (origin
5935 (method url-fetch)
5936 (uri (pypi-uri "decorator" version))
5937 (sha256
5938 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5939 (build-system python-build-system)
5940 (home-page "https://pypi.org/project/decorator/")
5941 (synopsis "Python module to simplify usage of decorators")
5942 (description
5943 "The aim of the decorator module is to simplify the usage of decorators
5944 for the average programmer, and to popularize decorators usage giving examples
5945 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5946 etc. The core of this module is a decorator factory.")
5947 (license license:expat)))
5948
5949 (define-public python2-decorator
5950 (package-with-python2 python-decorator))
5951
5952 (define-public python-drmaa
5953 (package
5954 (name "python-drmaa")
5955 (version "0.7.7")
5956 (source
5957 (origin
5958 (method url-fetch)
5959 (uri (pypi-uri "drmaa" version))
5960 (sha256
5961 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5962 (build-system python-build-system)
5963 ;; The test suite requires libdrmaa which is provided by the cluster
5964 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5965 ;; should be set to the path of the libdrmaa library.
5966 (arguments '(#:tests? #f))
5967 (native-inputs
5968 `(("python-nose" ,python-nose)))
5969 (home-page "https://pypi.org/project/drmaa/")
5970 (synopsis "Python bindings for the DRMAA library")
5971 (description
5972 "A Python package for Distributed Resource Management (DRM) job
5973 submission and control. This package is an implementation of the DRMAA 1.0
5974 Python language binding specification.")
5975 (license license:bsd-3)))
5976
5977 (define-public python2-drmaa
5978 (package-with-python2 python-drmaa))
5979
5980 (define-public python-grako
5981 (package
5982 (name "python-grako")
5983 (version "3.99.9")
5984 (source
5985 (origin
5986 (method url-fetch)
5987 (uri
5988 (pypi-uri "grako" version ".zip"))
5989 (sha256
5990 (base32
5991 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5992 (build-system python-build-system)
5993 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5994 (native-inputs
5995 `(("unzip" ,unzip)
5996 ("python-pytest" ,python-pytest)
5997 ("python-pytest-runner" ,python-pytest-runner)))
5998 (home-page "https://bitbucket.org/neogeny/grako")
5999 (synopsis "EBNF parser generator")
6000 (description
6001 "Grako takes a grammar in a variation of EBNF as input, and outputs a
6002 memoizing PEG/Packrat parser in Python.")
6003 (license license:bsd-3)))
6004
6005 (define-public python2-grako
6006 (package-with-python2 python-grako))
6007
6008 (define-public python-gridmap
6009 (package
6010 (name "python-gridmap")
6011 (version "0.14.0")
6012 (source
6013 (origin
6014 (method git-fetch)
6015 (uri (git-reference
6016 (url "https://github.com/pygridtools/gridmap")
6017 (commit (string-append "v" version))))
6018 (file-name (git-file-name name version))
6019 (sha256
6020 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
6021 (build-system python-build-system)
6022 (arguments
6023 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
6024 (propagated-inputs
6025 `(("python-psutil" ,python-psutil)
6026 ("python-drmaa" ,python-drmaa)
6027 ("python-pyzmq" ,python-pyzmq)))
6028 (home-page "https://github.com/pygridtools/gridmap")
6029 (synopsis "Create jobs on a cluster directly from Python")
6030 (description
6031 "Gridmap is a Python package to allow you to easily create jobs on the
6032 cluster directly from Python. You can directly map Python functions onto the
6033 cluster without needing to write any wrapper code yourself.")
6034 (license license:gpl3+)))
6035
6036 (define-public python2-gridmap
6037 (package-with-python2 python-gridmap))
6038
6039 (define-public python-honcho
6040 (package
6041 (name "python-honcho")
6042 (version "1.0.1")
6043 (source
6044 (origin
6045 (method git-fetch)
6046 (uri (git-reference
6047 (url "https://github.com/nickstenning/honcho")
6048 (commit (string-append "v" version))))
6049 (file-name (git-file-name name version))
6050 (sha256
6051 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
6052 (build-system python-build-system)
6053 (native-inputs
6054 `(("python-pytest" ,python-pytest)
6055 ("python-mock" ,python-mock)
6056 ("python-tox" ,python-tox)
6057 ("which" ,which))) ;for tests
6058 (propagated-inputs
6059 `(("python-jinja2" ,python-jinja2)))
6060 (arguments
6061 `(#:phases
6062 (modify-phases %standard-phases
6063 (delete 'check)
6064 (add-after 'install 'check
6065 (lambda* (#:key outputs inputs #:allow-other-keys)
6066 ;; fix honcho path in testsuite
6067 (substitute* "tests/conftest.py"
6068 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
6069 "/bin/honcho" "'")))
6070 ;; It's easier to run tests after install.
6071 ;; Make installed package available for running the tests
6072 (add-installed-pythonpath inputs outputs)
6073 (invoke "py.test" "-v"))))))
6074 (home-page "https://github.com/nickstenning/honcho")
6075 (synopsis "Manage Procfile-based applications")
6076 (description
6077 "A Procfile is a file which describes how to run an application
6078 consisting of several processes. honcho starts all listed processes.
6079 The output of all running processes is collected by honcho and
6080 displayed.")
6081 (license license:expat)))
6082
6083 (define-public python2-honcho
6084 (package-with-python2 python-honcho))
6085
6086 (define-public python-pexpect
6087 (package
6088 (name "python-pexpect")
6089 (version "4.8.0")
6090 (source
6091 (origin
6092 (method url-fetch)
6093 (uri (pypi-uri "pexpect" version))
6094 (sha256
6095 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
6096 (build-system python-build-system)
6097 (arguments
6098 `(#:phases
6099 (modify-phases %standard-phases
6100 (add-before 'check 'prepare-tests
6101 (lambda _
6102 (substitute* (find-files "tests")
6103 (("/bin/ls") (which "ls"))
6104 (("/bin/echo") (which "echo"))
6105 (("/bin/which") (which "which"))
6106 ;; Many tests try to use the /bin directory which
6107 ;; is not present in the build environment.
6108 ;; Use one that's non-empty and unlikely to change.
6109 (("/bin'") "/dev'")
6110 ;; Disable failing test. See upstream bug report
6111 ;; https://github.com/pexpect/pexpect/issues/568
6112 (("def test_bash") "def _test_bash"))
6113 ;; XXX: Socket connection test gets "Connection reset by peer".
6114 ;; Why does it not work? Delete for now.
6115 (delete-file "tests/test_socket.py")
6116 #t))
6117 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
6118 (native-inputs
6119 `(("python-nose" ,python-nose)
6120 ("python-pytest" ,python-pytest)
6121 ("man-db" ,man-db)
6122 ("which" ,which)
6123 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
6124 (propagated-inputs
6125 `(("python-ptyprocess" ,python-ptyprocess)))
6126 (home-page "http://pexpect.readthedocs.org/")
6127 (synopsis "Controlling interactive console applications")
6128 (description
6129 "Pexpect is a pure Python module for spawning child applications;
6130 controlling them; and responding to expected patterns in their output.
6131 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
6132 child application and control it as if a human were typing commands.")
6133 (license license:isc)))
6134
6135 (define-public python2-pexpect
6136 (package-with-python2 python-pexpect))
6137
6138 (define-public python-setuptools-scm
6139 (package
6140 (name "python-setuptools-scm")
6141 (version "3.4.3")
6142 (source (origin
6143 (method url-fetch)
6144 (uri (pypi-uri "setuptools_scm" version))
6145 (sha256
6146 (base32
6147 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
6148 (build-system python-build-system)
6149 (home-page "https://github.com/pypa/setuptools_scm/")
6150 (synopsis "Manage Python package versions in SCM metadata")
6151 (description
6152 "Setuptools_scm handles managing your Python package versions in
6153 @dfn{software configuration management} (SCM) metadata instead of declaring
6154 them as the version argument or in a SCM managed file.")
6155 (license license:expat)))
6156
6157 (define-public python2-setuptools-scm
6158 (package-with-python2 python-setuptools-scm))
6159
6160 (define-public python-sexpdata
6161 (package
6162 (name "python-sexpdata")
6163 (version "0.0.3")
6164 (source
6165 (origin
6166 (method url-fetch)
6167 (uri (pypi-uri "sexpdata" version))
6168 (sha256
6169 (base32
6170 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
6171 (build-system python-build-system)
6172 (home-page "https://github.com/jd-boyd/sexpdata")
6173 (synopsis "S-expression parser for Python")
6174 (description
6175 "Sexpdata is an S-expression parser/serializer. It has load and dump
6176 functions like pickle, json or PyYAML module.")
6177 (license license:bsd-3)))
6178
6179 (define-public python-pathlib2
6180 (package
6181 (name "python-pathlib2")
6182 (version "2.3.3")
6183 (source
6184 (origin
6185 (method url-fetch)
6186 (uri (pypi-uri "pathlib2" version))
6187 (sha256
6188 (base32
6189 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
6190 (build-system python-build-system)
6191 (propagated-inputs
6192 `(("python-scandir" ,python-scandir)
6193 ("python-six" ,python-six)))
6194 (home-page "https://pypi.org/project/pathlib2/")
6195 (synopsis "Object-oriented file system paths")
6196 (description "The goal of pathlib2 is to provide a backport of the
6197 standard @code{pathlib} module which tracks the standard library module, so
6198 all the newest features of the standard @code{pathlib} can be used also on
6199 older Python versions.")
6200 (license license:expat)))
6201
6202 (define-public python-importlib-resources
6203 (package
6204 (name "python-importlib-resources")
6205 (version "3.0.0")
6206 (source
6207 (origin
6208 (method url-fetch)
6209 (uri (pypi-uri "importlib_resources" version))
6210 (sha256
6211 (base32
6212 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
6213 (build-system python-build-system)
6214 (native-inputs
6215 `(("python-setuptools-scm" ,python-setuptools-scm)
6216 ("python-toml" ,python-toml)))
6217 (home-page "http://importlib-resources.readthedocs.io/")
6218 (synopsis "Read resources from Python packages")
6219 (description
6220 "@code{importlib_resources} is a backport of Python 3's standard library
6221 @code{importlib.resources} module for Python 2.7, and Python 3.")
6222 (properties `((python2-variant . ,(delay python2-importlib-resources))))
6223 (license license:asl2.0)))
6224
6225 (define-public python2-importlib-resources
6226 (package
6227 (name "python2-importlib-resources")
6228 (version "1.0.2")
6229 (source (origin
6230 (method url-fetch)
6231 (uri (pypi-uri "importlib_resources" version))
6232 (sha256
6233 (base32
6234 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
6235 (build-system python-build-system)
6236 (arguments
6237 `(#:python ,python-2
6238 #:phases (modify-phases %standard-phases
6239 ;; The build system tests for python-wheel, but it is
6240 ;; not required for Guix nor the test suite. Just drop
6241 ;; it to make bootstrapping pytest easier.
6242 (add-after 'unpack 'drop-wheel-dependency
6243 (lambda _
6244 (substitute* "setup.cfg"
6245 (("^[[:blank:]]+wheel")
6246 ""))
6247 #t)))))
6248 (propagated-inputs
6249 `(("python-pathlib2" ,python2-pathlib2)
6250 ("python-typing" ,python2-typing)))
6251 (home-page "https://gitlab.com/python-devs/importlib_resources")
6252 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6253 (description
6254 "This package provides an implementation of @code{importlib.resources}
6255 for older versions of Python.")
6256 (license license:asl2.0)))
6257
6258 ;; For importlib-metadata-bootstrap below.
6259 (define-public python2-importlib-resources-bootstrap
6260 (hidden-package
6261 (package/inherit
6262 python2-importlib-resources
6263 (name "python2-importlib-resources-bootstrap")
6264 (propagated-inputs
6265 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6266 ("python-typing" ,python2-typing))))))
6267
6268 (define-public python-importlib-metadata
6269 (package
6270 (name "python-importlib-metadata")
6271 (version "1.5.0")
6272 (source
6273 (origin
6274 (method url-fetch)
6275 (uri (pypi-uri "importlib_metadata" version))
6276 (sha256
6277 (base32
6278 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6279 (build-system python-build-system)
6280 (propagated-inputs
6281 `(("python-zipp" ,python-zipp)))
6282 (native-inputs
6283 `(("python-setuptools-scm" ,python-setuptools-scm)
6284 ("python-pyfakefs" ,python-pyfakefs)
6285 ("python-packaging" ,python-packaging)))
6286 (home-page "https://importlib-metadata.readthedocs.io/")
6287 (synopsis "Read metadata from Python packages")
6288 (description
6289 "@code{importlib_metadata} is a library which provides an API for
6290 accessing an installed Python package's metadata, such as its entry points or
6291 its top-level name. This functionality intends to replace most uses of
6292 @code{pkg_resources} entry point API and metadata API. Along with
6293 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6294 need to use the older and less efficient @code{pkg_resources} package.")
6295 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6296 (license license:asl2.0)))
6297
6298 (define-public python2-importlib-metadata
6299 (let ((base (package-with-python2 (strip-python2-variant
6300 python-importlib-metadata))))
6301 (package/inherit
6302 base
6303 (name "python2-importlib-metadata")
6304 (native-inputs
6305 `(("python-setuptools-scm" ,python2-setuptools-scm)
6306 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6307 ("python-packaging" ,python2-packaging-bootstrap)))
6308 (propagated-inputs
6309 `(("python-configparser" ,python2-configparser)
6310 ("python-contextlib2" ,python2-contextlib2)
6311 ("python-importlib-resources" ,python2-importlib-resources)
6312 ("python-pathlib2" ,python2-pathlib2)
6313 ,@(package-propagated-inputs base))))))
6314
6315 ;; This package is used by python2-pytest, and thus must not depend on it.
6316 (define-public python2-importlib-metadata-bootstrap
6317 (hidden-package
6318 (package/inherit
6319 python2-importlib-metadata
6320 (name "python2-importlib-metadata-bootstrap")
6321 (arguments
6322 `(#:tests? #f
6323 ,@(package-arguments python2-importlib-metadata)))
6324 (propagated-inputs
6325 `(("python-zipp" ,python2-zipp-bootstrap)
6326 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6327 ("python-configparser" ,python2-configparser)
6328 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6329 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6330
6331 (define-public python-importmagic
6332 (package
6333 (name "python-importmagic")
6334 (version "0.1.7")
6335 (source
6336 (origin
6337 (method url-fetch)
6338 (uri (pypi-uri "importmagic" version))
6339 (sha256
6340 (base32
6341 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6342 (build-system python-build-system)
6343 (home-page "https://github.com/alecthomas/importmagic")
6344 (synopsis "Library for adding, removing and managing Python imports")
6345 (description
6346 "Importmagic is a Python library for automatically managing imports by
6347 finding unresolved symbols in Python code and their corresponding imports.")
6348 (license license:bsd-3)))
6349
6350 (define-public python-jaraco-packaging
6351 (package
6352 (name "python-jaraco-packaging")
6353 (version "6.1")
6354 (source
6355 (origin
6356 (method url-fetch)
6357 (uri (pypi-uri "jaraco.packaging" version))
6358 (sha256
6359 (base32
6360 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6361 (build-system python-build-system)
6362 (propagated-inputs
6363 `(("python-pytest" ,python-pytest)
6364 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6365 ("python-pytest-flake8" ,python-pytest-flake8)
6366 ("python-rst.linker" ,python-rst.linker)
6367 ("python-setuptools" ,python-setuptools)
6368 ("python-setuptools-scm" ,python-setuptools-scm)
6369 ("python-six" ,python-six)
6370 ("python-sphinx" ,python-sphinx)))
6371 (home-page "https://github.com/jaraco/jaraco.packaging")
6372 (synopsis "Tools to supplement packaging Python releases")
6373 (description
6374 "This package provides various tools to supplement packaging Python
6375 releases.")
6376 (license license:expat)))
6377
6378 (define-public python-pathpy
6379 (package
6380 (name "python-pathpy")
6381 (version "11.5.1")
6382 (source
6383 (origin
6384 (method url-fetch)
6385 (uri (pypi-uri "path.py" version))
6386 (sha256
6387 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6388 (outputs '("out" "doc"))
6389 (build-system python-build-system)
6390 (propagated-inputs
6391 `(("python-appdirs" ,python-appdirs)
6392 ("python-importlib-metadata" ,python-importlib-metadata)))
6393 (native-inputs
6394 `(("python-setuptools-scm" ,python-setuptools-scm)
6395 ("python-sphinx" ,python-sphinx)
6396 ("python-rst.linker" ,python-rst.linker)
6397 ("python-pytest" ,python-pytest)
6398 ("python-pytest-runner" ,python-pytest-runner)
6399 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6400 (arguments
6401 `(#:phases
6402 (modify-phases %standard-phases
6403 (add-after 'build 'build-doc
6404 (lambda _
6405 (setenv "LANG" "en_US.UTF-8")
6406 (invoke "python" "setup.py" "build_sphinx")))
6407 (add-after 'install 'install-doc
6408 (lambda* (#:key outputs #:allow-other-keys)
6409 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6410 (doc (string-append data "/doc/" ,name "-" ,version))
6411 (html (string-append doc "/html")))
6412 (mkdir-p html)
6413 (for-each (lambda (file)
6414 (copy-file file (string-append doc "/" file)))
6415 '("README.rst" "CHANGES.rst"))
6416 (copy-recursively "build/sphinx/html" html)
6417 #t)))
6418 (replace 'check
6419 (lambda _
6420 ;; The import time test aborts if an import takes longer than
6421 ;; 100ms. It may very well take a little longer than that.
6422 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6423 (home-page "https://github.com/jaraco/path.py")
6424 (synopsis "Python module wrapper for built-in os.path")
6425 (description
6426 "@code{path.py} implements path objects as first-class entities, allowing
6427 common operations on files to be invoked on those path objects directly.")
6428 (license license:expat)))
6429
6430 (define-public python2-pathpy
6431 (package-with-python2 python-pathpy))
6432
6433 (define-public python-simplegeneric
6434 (package
6435 (name "python-simplegeneric")
6436 (version "0.8.1")
6437 (source
6438 (origin
6439 (method url-fetch)
6440 (uri (pypi-uri "simplegeneric" version ".zip"))
6441 (sha256
6442 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6443 (build-system python-build-system)
6444 (native-inputs
6445 `(("unzip" ,unzip)))
6446 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6447 (synopsis "Python module for simple generic functions")
6448 (description
6449 "The simplegeneric module lets you define simple single-dispatch generic
6450 functions, akin to Python’s built-in generic functions like @code{len()},
6451 @code{iter()} and so on. However, instead of using specially-named methods,
6452 these generic functions use simple lookup tables, akin to those used by
6453 e.g. @code{pickle.dump()} and other generic functions found in the Python
6454 standard library.")
6455 (license license:zpl2.1)))
6456
6457 (define-public python2-simplegeneric
6458 (package-with-python2 python-simplegeneric))
6459
6460 (define-public python-ipython-genutils
6461 ;; TODO: This package is retired, check if can be removed, see description.
6462 (package
6463 (name "python-ipython-genutils")
6464 (version "0.1.0")
6465 (source
6466 (origin
6467 (method url-fetch)
6468 (uri (pypi-uri "ipython_genutils" version))
6469 (sha256
6470 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6471 (build-system python-build-system)
6472 (arguments `(#:tests? #f)) ; no tests
6473 (home-page "https://ipython.org")
6474 (synopsis "Vestigial utilities from IPython")
6475 (description
6476 "This package provides retired utilities from IPython. No packages
6477 outside IPython/Jupyter should depend on it.
6478
6479 This package shouldn't exist. It contains some common utilities shared by
6480 Jupyter and IPython projects during The Big Split. As soon as possible, those
6481 packages will remove their dependency on this, and this package will go
6482 away.")
6483 (license license:bsd-3)))
6484
6485 (define-public python2-ipython-genutils
6486 (package-with-python2 python-ipython-genutils))
6487
6488 (define-public python-ipyparallel
6489 (package
6490 (name "python-ipyparallel")
6491 (version "6.2.4")
6492 (source
6493 (origin
6494 (method url-fetch)
6495 (uri (pypi-uri "ipyparallel" version))
6496 (sha256
6497 (base32
6498 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6499 (build-system python-build-system)
6500 (arguments
6501 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6502 #:phases
6503 (modify-phases %standard-phases
6504 (add-before 'check 'prepare-for-tests
6505 (lambda _
6506 (setenv "HOME" (getcwd))
6507 #t)))))
6508 (propagated-inputs
6509 `(("python-dateutil" ,python-dateutil)
6510 ("python-decorator" ,python-decorator)
6511 ("python-ipykernel" ,python-ipykernel)
6512 ("python-ipython" ,python-ipython)
6513 ("python-ipython-genutils" ,python-ipython-genutils)
6514 ("python-jupyter-client" ,python-jupyter-client)
6515 ("python-pyzmq" ,python-pyzmq)
6516 ("python-tornado" ,python-tornado)
6517 ("python-traitlets" ,python-traitlets)))
6518 (native-inputs
6519 `(("python-ipython" ,python-ipython)
6520 ("python-mock" ,python-mock)
6521 ("python-nose" ,python-nose)
6522 ("python-pytest" ,python-pytest)
6523 ("python-pytest-cov" ,python-pytest-cov)
6524 ("python-testpath" ,python-testpath)))
6525 (home-page "https://ipython.org/")
6526 (synopsis "Interactive Parallel Computing with IPython")
6527 (description
6528 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6529 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6530 CLI scripts:
6531 @enumerate
6532 @item ipcluster - start/stop a cluster
6533 @item ipcontroller - start a scheduler
6534 @item ipengine - start an engine
6535 @end enumerate")
6536 (license license:bsd-3)))
6537
6538 (define-public python2-ipyparallel
6539 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6540 (package
6541 (inherit ipyparallel)
6542 (propagated-inputs
6543 `(("python2-futures" ,python2-futures)
6544 ,@(package-propagated-inputs ipyparallel))))))
6545
6546 (define-public python-ipython-cluster-helper
6547 (package
6548 (name "python-ipython-cluster-helper")
6549 (version "0.6.4")
6550 (source
6551 (origin
6552 (method url-fetch)
6553 (uri (pypi-uri "ipython-cluster-helper" version))
6554 (sha256
6555 (base32
6556 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6557 (modules '((guix build utils)))
6558 (snippet
6559 '(begin (substitute* "requirements.txt"
6560 (("ipython.*") "ipython\n"))
6561 #t))))
6562 (build-system python-build-system)
6563 (arguments
6564 `(#:tests? #f ; Test suite can't find IPython.
6565 #:phases
6566 (modify-phases %standard-phases
6567 (replace 'check
6568 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6569 (if tests?
6570 (begin
6571 (setenv "HOME" (getcwd))
6572 (add-installed-pythonpath inputs outputs)
6573 (invoke "python" "example/example.py" "--local"))
6574 #t))))))
6575 (propagated-inputs
6576 `(("python-ipyparallel" ,python-ipyparallel)
6577 ("python-ipython" ,python-ipython)
6578 ("python-netifaces" ,python-netifaces)
6579 ("python-pyzmq" ,python-pyzmq)
6580 ("python-setuptools" ,python-setuptools)
6581 ("python-six" ,python-six)))
6582 (home-page "https://github.com/roryk/ipython-cluster-helper")
6583 (synopsis
6584 "Simplify IPython cluster start up and use for multiple schedulers")
6585 (description
6586 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6587 profile, launches a cluster and returns a view. On program exit it shuts the
6588 cluster down and deletes the throwaway profile.")
6589 (license license:expat)))
6590
6591 (define-public python2-ipython-cluster-helper
6592 (package-with-python2 python-ipython-cluster-helper))
6593
6594 (define-public python-traitlets
6595 (package
6596 (name "python-traitlets")
6597 (version "4.3.3")
6598 (source
6599 (origin
6600 (method url-fetch)
6601 (uri (pypi-uri "traitlets" version))
6602 (sha256
6603 (base32
6604 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6605 (build-system python-build-system)
6606 (arguments
6607 `(#:phases
6608 (modify-phases %standard-phases
6609 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6610 (propagated-inputs
6611 `(("python-ipython-genutils" ,python-ipython-genutils)
6612 ("python-decorator" ,python-decorator)))
6613 (native-inputs
6614 `(("python-pytest" ,python-pytest)))
6615 (properties `((python2-variant . ,(delay python2-traitlets))))
6616 (home-page "https://ipython.org")
6617 (synopsis "Configuration system for Python applications")
6618 (description
6619 "Traitlets is a framework that lets Python classes have attributes with
6620 type checking, dynamically calculated default values, and ‘on change’
6621 callbacks. The package also includes a mechanism to use traitlets for
6622 configuration, loading values from files or from command line arguments. This
6623 is a distinct layer on top of traitlets, so you can use traitlets in your code
6624 without using the configuration machinery.")
6625 (license license:bsd-3)))
6626
6627 (define-public python2-traitlets
6628 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6629 (package
6630 (inherit traitlets)
6631 (propagated-inputs
6632 `(("python2-enum34" ,python2-enum34)
6633 ,@(package-propagated-inputs traitlets))))))
6634
6635 (define-public python-jupyter-core
6636 (package
6637 (name "python-jupyter-core")
6638 (version "4.4.0")
6639 (source
6640 (origin
6641 (method url-fetch)
6642 (uri (string-append (pypi-uri "jupyter_core" version)))
6643 (sha256
6644 (base32
6645 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6646 (build-system python-build-system)
6647 ;; FIXME: not sure how to run the tests
6648 (arguments `(#:tests? #f))
6649 (propagated-inputs
6650 `(("python-traitlets" ,python-traitlets)))
6651 (home-page "http://jupyter.org/")
6652 (synopsis "Jupyter base package")
6653 (description
6654 "Jupyter core is the base package on which Jupyter projects rely.")
6655 (license license:bsd-3)))
6656
6657 (define-public python2-jupyter-core
6658 (package-with-python2 python-jupyter-core))
6659
6660 (define-public python-jupyter-client
6661 (package
6662 (name "python-jupyter-client")
6663 (version "5.2.4")
6664 (source
6665 (origin
6666 (method url-fetch)
6667 (uri (pypi-uri "jupyter_client" version))
6668 (sha256
6669 (base32
6670 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6671 (build-system python-build-system)
6672 ;; Tests fail because of missing native python kernel which I assume is
6673 ;; provided by the ipython package, which we cannot use because it would
6674 ;; cause a dependency cycle.
6675 (arguments
6676 `(#:tests? #f
6677
6678 #:phases (modify-phases %standard-phases
6679 (add-after 'unpack 'set-tool-file-names
6680 (lambda* (#:key inputs #:allow-other-keys)
6681 (let ((iproute (assoc-ref inputs "iproute")))
6682 (substitute* "jupyter_client/localinterfaces.py"
6683 (("'ip'")
6684 (string-append "'" iproute "/sbin/ip'")))
6685 #t))))))
6686 (inputs
6687 `(("iproute" ,iproute)))
6688 (propagated-inputs
6689 `(("python-pyzmq" ,python-pyzmq)
6690 ("python-traitlets" ,python-traitlets)
6691 ("python-jupyter-core" ,python-jupyter-core)))
6692 (home-page "http://jupyter.org/")
6693 (synopsis "Jupyter protocol implementation and client libraries")
6694 (description
6695 "The @code{jupyter_client} package contains the reference implementation
6696 of the Jupyter protocol. It also provides client and kernel management APIs
6697 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6698 installing @code{kernelspec}s for use with Jupyter frontends.")
6699 (license license:bsd-3)))
6700
6701 (define-public python2-jupyter-client
6702 (package-with-python2 python-jupyter-client))
6703
6704 (define-public python-ipykernel
6705 (package
6706 (name "python-ipykernel")
6707 (version "5.1.3")
6708 (source
6709 (origin
6710 (method url-fetch)
6711 (uri (pypi-uri "ipykernel" version))
6712 (sha256
6713 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6714 (build-system python-build-system)
6715 (arguments
6716 `(#:phases
6717 (modify-phases %standard-phases
6718 (replace 'check
6719 (lambda _
6720 (setenv "HOME" "/tmp")
6721 (invoke "pytest" "-v")
6722 #t))
6723 (add-after 'install 'set-python-file-name
6724 (lambda* (#:key outputs #:allow-other-keys)
6725 ;; Record the absolute file name of the 'python' executable in
6726 ;; 'kernel.json'.
6727 (let ((out (assoc-ref outputs "out")))
6728 (substitute* (string-append out "/share/jupyter"
6729 "/kernels/python3/kernel.json")
6730 (("\"python\"")
6731 (string-append "\"" (which "python") "\"")))
6732 #t))))))
6733 (propagated-inputs
6734 `(("python-ipython" ,python-ipython)
6735 ;; imported at runtime during connect
6736 ("python-jupyter-client" ,python-jupyter-client)))
6737 (native-inputs
6738 `(("python-flaky" ,python-flaky)
6739 ("python-nose" ,python-nose)
6740 ("python-pytest" ,python-pytest)))
6741 (home-page "https://ipython.org")
6742 (synopsis "IPython Kernel for Jupyter")
6743 (description
6744 "This package provides the IPython kernel for Jupyter.")
6745 (properties `((python2-variant . ,(delay python2-ipykernel))))
6746 (license license:bsd-3)))
6747
6748 ;; Version 5.x and above no longer support Python 2.
6749 (define-public python2-ipykernel
6750 (package
6751 (name "python2-ipykernel")
6752 (version "4.10.1")
6753 (source
6754 (origin
6755 (method url-fetch)
6756 (uri (pypi-uri "ipykernel" version))
6757 (sha256
6758 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6759 (build-system python-build-system)
6760 (arguments
6761 `(#:python ,python-2))
6762 (propagated-inputs
6763 `(("python2-ipython" ,python2-ipython)
6764 ;; imported at runtime during connect
6765 ("python2-jupyter-client" ,python2-jupyter-client)
6766 ("python2-tornado" ,python2-tornado)
6767 ("python2-traitlets" ,python2-traitlets)))
6768 (native-inputs
6769 `(("python2-mock" ,python2-mock)
6770 ("python2-nose" ,python2-nose)
6771 ("python2-pytest" ,python2-pytest)
6772 ("python2-pytest-cov" ,python2-pytest-cov)))
6773 (home-page "https://ipython.org")
6774 (synopsis "IPython Kernel for Jupyter")
6775 (description
6776 "This package provides the IPython kernel for Jupyter.")
6777 (license license:bsd-3)))
6778
6779 (define-public python-pari-jupyter
6780 (package
6781 (name "python-pari-jupyter")
6782 (version "1.3.2")
6783 (source
6784 (origin
6785 (method url-fetch)
6786 (uri (pypi-uri "pari_jupyter" version))
6787 (sha256
6788 (base32
6789 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6790 (build-system python-build-system)
6791 (propagated-inputs
6792 `(("python-ipykernel" ,python-ipykernel)))
6793 (inputs
6794 `(("pari-gp" ,pari-gp)
6795 ("readline" ,readline)))
6796 (arguments
6797 `(#:tests? #f)) ; no test suite
6798 (home-page
6799 "https://github.com/jdemeyer/pari_jupyter")
6800 (synopsis "A Jupyter kernel for PARI/GP")
6801 (description "The package provides a PARI/GP kernel for Jupyter.")
6802 (license license:gpl3+)))
6803
6804 (define-public python-backcall
6805 (package
6806 (name "python-backcall")
6807 (version "0.1.0")
6808 (source
6809 (origin
6810 (method url-fetch)
6811 (uri (pypi-uri "backcall" version))
6812 (sha256
6813 (base32
6814 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6815 (build-system python-build-system)
6816 (home-page "https://github.com/takluyver/backcall/")
6817 (synopsis "Specifications for callback functions passed in to an API")
6818 (description
6819 "If your code lets other people supply callback functions, it's important
6820 to specify the function signature you expect, and check that functions support
6821 that. Adding extra parameters later would break other peoples code unless
6822 you're careful. The @code{backcall} package provides a way of specifying the
6823 callback signature using a prototype function.")
6824 (license license:bsd-3)))
6825
6826 (define-public python-ipython
6827 (package
6828 (name "python-ipython")
6829 (version "7.9.0")
6830 (source
6831 (origin
6832 (method url-fetch)
6833 (uri (pypi-uri "ipython" version ".tar.gz"))
6834 (sha256
6835 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6836 (build-system python-build-system)
6837 (propagated-inputs
6838 `(("python-backcall" ,python-backcall)
6839 ("python-pyzmq" ,python-pyzmq)
6840 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
6841 ("python-terminado" ,python-terminado)
6842 ("python-matplotlib" ,python-matplotlib)
6843 ("python-numpy" ,python-numpy)
6844 ("python-numpydoc" ,python-numpydoc)
6845 ("python-jedi" ,python-jedi)
6846 ("python-jinja2" ,python-jinja2)
6847 ("python-mistune" ,python-mistune)
6848 ("python-pexpect" ,python-pexpect)
6849 ("python-pickleshare" ,python-pickleshare)
6850 ("python-simplegeneric" ,python-simplegeneric)
6851 ("python-jsonschema" ,python-jsonschema)
6852 ("python-traitlets" ,python-traitlets)
6853 ("python-nbformat" ,python-nbformat)
6854 ("python-pygments" ,python-pygments)))
6855 (inputs
6856 `(("readline" ,readline)
6857 ("which" ,which)))
6858 (native-inputs
6859 `(("graphviz" ,graphviz)
6860 ("pkg-config" ,pkg-config)
6861 ("python-requests" ,python-requests) ;; for tests
6862 ("python-testpath" ,python-testpath)
6863 ("python-nose" ,python-nose)))
6864 (arguments
6865 `(#:phases
6866 (modify-phases %standard-phases
6867 (add-after 'unpack 'make-docs-reproducible
6868 (lambda _
6869 (substitute* "IPython/sphinxext/ipython_directive.py"
6870 ((".*import datetime") "")
6871 ((".*datetime.datetime.now\\(\\)") "")
6872 (("%timeit") "# %timeit"))
6873 #t))
6874 ;; Tests can only be run after the library has been installed and not
6875 ;; within the source directory.
6876 (delete 'check)
6877 (add-after 'install 'check
6878 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6879 (if tests?
6880 (begin
6881 ;; Make installed package available for running the tests
6882 (add-installed-pythonpath inputs outputs)
6883 (setenv "HOME" "/tmp/") ;; required by a test
6884 ;; We only test the core because one of the other tests
6885 ;; tries to import ipykernel.
6886 (invoke "python" "IPython/testing/iptest.py"
6887 "-v" "IPython/core/tests"))
6888 #t)))
6889 (add-before 'check 'fix-tests
6890 (lambda* (#:key inputs #:allow-other-keys)
6891 (substitute* "./IPython/utils/_process_posix.py"
6892 (("/usr/bin/env', 'which") (which "which")))
6893 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6894 (("#!/usr/bin/env python")
6895 (string-append "#!" (which "python"))))
6896 ;; This test introduces a circular dependency on ipykernel
6897 ;; (which depends on ipython).
6898 (delete-file "IPython/core/tests/test_display.py")
6899 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6900 (delete-file "IPython/core/tests/test_interactiveshell.py")
6901 #t)))))
6902 (home-page "https://ipython.org")
6903 (synopsis "IPython is a tool for interactive computing in Python")
6904 (description
6905 "IPython provides a rich architecture for interactive computing with:
6906 Powerful interactive shells, a browser-based notebook, support for interactive
6907 data visualization, embeddable interpreters and tools for parallel
6908 computing.")
6909 (properties `((python2-variant . ,(delay python2-ipython))))
6910 (license license:bsd-3)))
6911
6912 ;; This is the latest release of the LTS version of ipython with support for
6913 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6914 ;; dropped support for Python 2.7.
6915 (define-public python2-ipython
6916 (package
6917 (name "python2-ipython")
6918 (version "5.8.0")
6919 (source
6920 (origin
6921 (method url-fetch)
6922 (uri (pypi-uri "ipython" version ".tar.gz"))
6923 (sha256
6924 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6925 (build-system python-build-system)
6926 (propagated-inputs
6927 `(("python2-backports-shutil-get-terminal-size"
6928 ,python2-backports-shutil-get-terminal-size)
6929 ("python2-pathlib2" ,python2-pathlib2)
6930 ("python2-pyzmq" ,python2-pyzmq)
6931 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6932 ("python2-terminado" ,python2-terminado)
6933 ("python2-matplotlib" ,python2-matplotlib)
6934 ("python2-numpy" ,python2-numpy)
6935 ("python2-numpydoc" ,python2-numpydoc)
6936 ("python2-jinja2" ,python2-jinja2)
6937 ("python2-mistune" ,python2-mistune)
6938 ("python2-pexpect" ,python2-pexpect)
6939 ("python2-pickleshare" ,python2-pickleshare)
6940 ("python2-simplegeneric" ,python2-simplegeneric)
6941 ("python2-jsonschema" ,python2-jsonschema)
6942 ("python2-traitlets" ,python2-traitlets)
6943 ("python2-nbformat" ,python2-nbformat)
6944 ("python2-pygments" ,python2-pygments)))
6945 (inputs
6946 `(("readline" ,readline)
6947 ("which" ,which)))
6948 (native-inputs
6949 `(("graphviz" ,graphviz)
6950 ("pkg-config" ,pkg-config)
6951 ("python2-requests" ,python2-requests) ;; for tests
6952 ("python2-testpath" ,python2-testpath)
6953 ("python2-mock" ,python2-mock)
6954 ("python2-nose" ,python2-nose)))
6955 (arguments
6956 `(#:python ,python-2
6957 #:phases
6958 (modify-phases %standard-phases
6959 (add-before 'check 'delete-broken-tests
6960 (lambda* (#:key inputs #:allow-other-keys)
6961 ;; These tests throw errors for unknown reasons.
6962 (delete-file "IPython/core/tests/test_displayhook.py")
6963 (delete-file "IPython/core/tests/test_magic_terminal.py")
6964 (delete-file "IPython/core/tests/test_profile.py")
6965 #t)))))
6966 (home-page "https://ipython.org")
6967 (synopsis "IPython is a tool for interactive computing in Python")
6968 (description
6969 "IPython provides a rich architecture for interactive computing with:
6970 Powerful interactive shells, a browser-based notebook, support for interactive
6971 data visualization, embeddable interpreters and tools for parallel
6972 computing.")
6973 (license license:bsd-3)))
6974
6975 (define-public python-ipython-documentation
6976 (package
6977 (inherit python-ipython)
6978 (name "python-ipython-documentation")
6979 (version (package-version python-ipython))
6980 (arguments
6981 `(#:phases
6982 (modify-phases %standard-phases
6983 (delete 'build)
6984 (delete 'check)
6985 (replace 'install
6986 (lambda* (#:key outputs #:allow-other-keys)
6987 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6988 (doc (string-append data "/doc/" ,name "-" ,version))
6989 (html (string-append doc "/html"))
6990 (man1 (string-append data "/man/man1"))
6991 (info (string-append data "/info"))
6992 (examples (string-append doc "/examples"))
6993 (python-arg (string-append "PYTHON=" (which "python"))))
6994 (setenv "LANG" "en_US.utf8")
6995 (with-directory-excursion "docs"
6996 ;; FIXME: pdf fails to build
6997 ;;(system* "make" "pdf" "PAPER=a4")
6998 (system* "make" python-arg "html")
6999 ;; FIXME: the generated texi file contains ^@^@, which trips
7000 ;; up the parser.
7001 ;; (system* "make" python-arg "info")
7002 )
7003 (copy-recursively "docs/man" man1)
7004 (copy-recursively "examples" examples)
7005 (copy-recursively "docs/build/html" html)
7006 ;; (copy-file "docs/build/latex/ipython.pdf"
7007 ;; (string-append doc "/ipython.pdf"))
7008 (mkdir-p info)
7009 ;; (copy-file "docs/build/texinfo/ipython.info"
7010 ;; (string-append info "/ipython.info"))
7011 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
7012 #t)))))
7013 (inputs
7014 `(("python-ipython" ,python-ipython)
7015 ("python-ipykernel" ,python-ipykernel)))
7016 (native-inputs
7017 `(("python-sphinx" ,python-sphinx)
7018 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
7019 ;; FIXME: It's possible that a smaller union would work just as well.
7020 ("texlive" ,(texlive-union (list texlive-amsfonts
7021 texlive-fonts-ec
7022 texlive-generic-ifxetex
7023 texlive-generic-pdftex
7024 texlive-latex-capt-of
7025 texlive-latex-cmap
7026 texlive-latex-environ
7027 texlive-latex-eqparbox
7028 texlive-latex-etoolbox
7029 texlive-latex-expdlist
7030 texlive-latex-fancyhdr
7031 texlive-latex-fancyvrb
7032 texlive-latex-fncychap
7033 texlive-latex-float
7034 texlive-latex-framed
7035 texlive-latex-geometry
7036 texlive-latex-graphics
7037 texlive-latex-hyperref
7038 texlive-latex-mdwtools
7039 texlive-latex-multirow
7040 texlive-latex-needspace
7041 texlive-latex-oberdiek
7042 texlive-latex-parskip
7043 texlive-latex-preview
7044 texlive-latex-tabulary
7045 texlive-latex-threeparttable
7046 texlive-latex-titlesec
7047 texlive-latex-trimspaces
7048 texlive-latex-ucs
7049 texlive-latex-upquote
7050 texlive-latex-url
7051 texlive-latex-varwidth
7052 texlive-latex-wrapfig)))
7053 ("texinfo" ,texinfo)))))
7054
7055 (define-public python-urwid
7056 (package
7057 (name "python-urwid")
7058 (version "2.1.0")
7059 (source
7060 (origin
7061 (method url-fetch)
7062 (uri (pypi-uri "urwid" version))
7063 (sha256
7064 (base32
7065 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
7066 (build-system python-build-system)
7067 (home-page "http://urwid.org")
7068 (synopsis "Console user interface library for Python")
7069 (description
7070 "Urwid is a curses-based UI/widget library for Python. It includes many
7071 features useful for text console applications.")
7072 (license license:lgpl2.1+)))
7073
7074 (define-public python2-urwid
7075 (package-with-python2 python-urwid))
7076
7077 (define-public python-urwidtrees
7078 (package
7079 (name "python-urwidtrees")
7080 (version "1.0.2")
7081 (source
7082 (origin
7083 (method git-fetch)
7084 ;; package author intends on distributing via github rather than pypi:
7085 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
7086 (uri (git-reference
7087 (url "https://github.com/pazz/urwidtrees")
7088 (commit version)))
7089 (file-name (git-file-name name version))
7090 (sha256
7091 (base32
7092 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
7093 (build-system python-build-system)
7094 (arguments
7095 '(#:use-setuptools? #f
7096 #:tests? #f)) ; no tests
7097 (propagated-inputs `(("python-urwid" ,python-urwid)))
7098 (home-page "https://github.com/pazz/urwidtrees")
7099 (synopsis "Tree widgets for urwid")
7100 (description "Urwidtrees is a Widget Container API for the @code{urwid}
7101 toolkit. Use it to build trees of widgets.")
7102 (license license:gpl3+)))
7103
7104 (define-public python2-urwidtrees
7105 (package-with-python2 python-urwidtrees))
7106
7107 (define-public python-ua-parser
7108 (package
7109 (name "python-ua-parser")
7110 (version "0.8.0")
7111 (source
7112 (origin
7113 (method url-fetch)
7114 (uri (pypi-uri "ua-parser" version))
7115 (sha256
7116 (base32
7117 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
7118 (build-system python-build-system)
7119 (arguments
7120 `(#:tests? #f)) ;no test suite in release
7121 (native-inputs
7122 `(("python-pyyaml" ,python-pyyaml)))
7123 (home-page "https://github.com/ua-parser/uap-python")
7124 (synopsis "User agent parser")
7125 (description
7126 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
7127 (license license:asl2.0)))
7128
7129 (define-public python2-ua-parser
7130 (package-with-python2 python-ua-parser))
7131
7132 (define-public python-user-agents
7133 (package
7134 (name "python-user-agents")
7135 (version "1.1.0")
7136 (source
7137 (origin
7138 (method url-fetch)
7139 (uri (pypi-uri "user-agents" version))
7140 (sha256
7141 (base32
7142 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
7143 (build-system python-build-system)
7144 (arguments
7145 `(#:tests? #f)) ;missing devices.json test file in release
7146 (propagated-inputs
7147 `(("python-ua-parser" ,python-ua-parser)))
7148 (home-page "https://github.com/selwin/python-user-agents")
7149 (synopsis "User Agent strings parsing library")
7150 (description
7151 "A library to identify devices (phones, tablets) and their capabilities by
7152 parsing (browser/HTTP) user agent strings.")
7153 (license license:expat)))
7154
7155 (define-public python2-user-agents
7156 (package-with-python2 python-user-agents))
7157
7158 (define-public python-dbus
7159 (package
7160 (name "python-dbus")
7161 (version "1.2.16")
7162 (source
7163 (origin
7164 (method url-fetch)
7165 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
7166 "dbus-python-" version ".tar.gz"))
7167 (sha256
7168 (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
7169 (build-system gnu-build-system)
7170 (native-inputs
7171 `(("pkg-config" ,pkg-config)))
7172 (inputs
7173 `(("python" ,python-wrapper)
7174 ("dbus-glib" ,dbus-glib)))
7175 (synopsis "Python bindings for D-bus")
7176 (description "python-dbus provides bindings for libdbus, the reference
7177 implementation of D-Bus.")
7178 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
7179 (license license:expat)))
7180
7181 (define-public python2-dbus
7182 (package (inherit python-dbus)
7183 (name "python2-dbus")
7184 (inputs `(("python" ,python-2)
7185 ,@(alist-delete "python"
7186 (package-inputs python-dbus)
7187 equal?)))))
7188
7189 (define-public python-notify2
7190 (package
7191 (name "python-notify2")
7192 (version "0.3.1")
7193 (source
7194 (origin
7195 (method url-fetch)
7196 (uri (pypi-uri "notify2" version))
7197 (sha256
7198 (base32
7199 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
7200 (build-system python-build-system)
7201 (arguments `(#:tests? #f)) ; tests depend on system state
7202 (native-inputs
7203 `(("python-dbus" ,python-dbus)))
7204 (home-page "https://bitbucket.org/takluyver/pynotify2")
7205 (synopsis "Python interface to D-Bus notifications")
7206 (description
7207 "Pynotify2 provides a Python interface for sending D-Bus notifications.
7208 It is a reimplementation of pynotify in pure Python, and an alternative to
7209 the GObject Introspection bindings to libnotify for non-GTK applications.")
7210 (license (list license:bsd-2
7211 license:lgpl2.1+))))
7212
7213 (define-public python2-notify2
7214 (package-with-python2 python-notify2))
7215
7216 ;; beautifulsoup4 has a totally different namespace than 3.x,
7217 ;; and pypi seems to put it under its own name, so I guess we should too
7218 (define-public python-beautifulsoup4
7219 (package
7220 (name "python-beautifulsoup4")
7221 (version "4.9.1")
7222 (source
7223 (origin
7224 (method url-fetch)
7225 (uri (pypi-uri "beautifulsoup4" version))
7226 (sha256
7227 (base32
7228 "1mvzlw3pzbhsvl3z8784s5h7iiflm2hggiy1fxyrrxwnbc8lvk3k"))))
7229 (build-system python-build-system)
7230 (arguments
7231 `(#:phases
7232 (modify-phases %standard-phases
7233 ;; The Python 2 source is the definitive source of beautifulsoup4. We
7234 ;; must use this conversion script when building with Python 3. The
7235 ;; conversion script also runs the tests.
7236 ;; For more information, see the file 'convert-py3k' in the source
7237 ;; distribution.
7238 (replace 'check
7239 (lambda _ (invoke "./convert-py3k"))))))
7240 (propagated-inputs
7241 `(("python-soupsieve" ,python-soupsieve)))
7242 (home-page
7243 "https://www.crummy.com/software/BeautifulSoup/bs4/")
7244 (synopsis
7245 "Python screen-scraping library")
7246 (description
7247 "Beautiful Soup is a Python library designed for rapidly setting up
7248 screen-scraping projects. It offers Pythonic idioms for navigating,
7249 searching, and modifying a parse tree, providing a toolkit for
7250 dissecting a document and extracting what you need. It automatically
7251 converts incoming documents to Unicode and outgoing documents to UTF-8.")
7252 (license license:expat)
7253 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7254
7255 (define-public python2-beautifulsoup4
7256 (package
7257 (inherit (package-with-python2
7258 (strip-python2-variant python-beautifulsoup4)))
7259 (arguments `(#:python ,python-2))))
7260
7261 (define-public python-soupsieve
7262 (package
7263 (name "python-soupsieve")
7264 (version "2.0.1")
7265 (source
7266 (origin
7267 (method url-fetch)
7268 (uri (pypi-uri "soupsieve" version))
7269 (sha256
7270 (base32
7271 "0ch2rhvsbwfpvzm4kzy81rclbzr533yv83hzg1gx55byfa0w37d5"))))
7272 (build-system python-build-system)
7273 (arguments `(#:tests? #f))
7274 ;;XXX: 2 tests fail currently despite claming they were to be
7275 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7276 ;;don't want to create a circular dependency.
7277 (home-page "https://github.com/facelessuser/soupsieve")
7278 (synopsis "CSS selector library")
7279 (description
7280 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7281 Soup 4. It aims to provide selecting, matching, and filtering using modern
7282 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7283 specifications up through the latest CSS level 4 drafts and beyond (though
7284 some are not yet implemented).")
7285 (properties `((python2-variant . ,(delay python2-soupsieve))))
7286 (license license:expat)))
7287
7288 ;; This is the last version that supports python-2
7289 (define-public python2-soupsieve
7290 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7291 (package
7292 (inherit base)
7293 (version "1.9.6")
7294 (source
7295 (origin
7296 (method url-fetch)
7297 (uri (pypi-uri "soupsieve" version))
7298 (sha256
7299 (base32
7300 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7301 (propagated-inputs
7302 `(("python2-backports-functools-lru-cache"
7303 ,python2-backports-functools-lru-cache)
7304 ,@(package-propagated-inputs base))))))
7305
7306 (define-public python-netifaces
7307 (package
7308 (name "python-netifaces")
7309 (version "0.10.9")
7310 (source
7311 (origin
7312 (method url-fetch)
7313 (uri (pypi-uri "netifaces" version))
7314 (sha256
7315 (base32
7316 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7317 (build-system python-build-system)
7318 (home-page "https://github.com/al45tair/netifaces")
7319 (synopsis
7320 "Python module for portable network interface information")
7321 (description
7322 "Netifaces is a Python module providing information on network
7323 interfaces in an easy and portable manner.")
7324 (license license:expat)))
7325
7326 (define-public python2-netifaces
7327 (package-with-python2 python-netifaces))
7328
7329 (define-public python-networkx
7330 (package
7331 (name "python-networkx")
7332 (version "2.4")
7333 (source
7334 (origin
7335 (method url-fetch)
7336 (uri (pypi-uri "networkx" version))
7337 (sha256
7338 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
7339 (build-system python-build-system)
7340 (arguments
7341 '(#:phases (modify-phases %standard-phases
7342 (replace 'check
7343 (lambda* (#:key tests? #:allow-other-keys)
7344 (if tests?
7345 (invoke "pytest" "-vv" "--pyargs" "networkx")
7346 (format #t "test suite not run~%"))
7347 #t)))))
7348 ;; python-decorator is needed at runtime.
7349 (propagated-inputs
7350 `(("python-decorator" ,python-decorator)))
7351 (native-inputs
7352 `(("python-pytest" ,python-pytest)))
7353 (home-page "https://networkx.github.io/")
7354 (synopsis "Python module for creating and manipulating graphs and networks")
7355 (description
7356 "NetworkX is a Python package for the creation, manipulation, and study
7357 of the structure, dynamics, and functions of complex networks.")
7358 (properties `((python2-variant . ,(delay python2-networkx))))
7359 (license license:bsd-3)))
7360
7361 ;; NetworkX 2.2 is the last version with support for Python 2.
7362 (define-public python2-networkx
7363 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7364 (package
7365 (inherit base)
7366 (version "2.2")
7367 (source (origin
7368 (method url-fetch)
7369 (uri (pypi-uri "networkx" version ".zip"))
7370 (sha256
7371 (base32
7372 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7373 (arguments
7374 `(#:python ,python-2))
7375 (native-inputs
7376 `(("python-nose" ,python2-nose)
7377 ("unzip" ,unzip))))))
7378
7379 (define-public python-datrie
7380 (package
7381 (name "python-datrie")
7382 (version "0.8.2")
7383 (source
7384 (origin
7385 (method url-fetch)
7386 (uri (pypi-uri "datrie" version))
7387 (sha256
7388 (base32
7389 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
7390 (build-system python-build-system)
7391 (native-inputs
7392 `(("python-cython" ,python-cython)
7393 ("python-hypothesis" ,python-hypothesis)
7394 ("python-pytest" ,python-pytest)
7395 ("python-pytest-runner" ,python-pytest-runner)))
7396 (home-page "https://github.com/kmike/datrie")
7397 (synopsis "Fast, efficiently stored trie for Python")
7398 (description
7399 "This package provides a fast, efficiently stored trie implementation for
7400 Python.")
7401 (license license:lgpl2.1+)))
7402
7403 (define-public snakemake
7404 (package
7405 (name "snakemake")
7406 (version "5.7.1")
7407 (source
7408 (origin
7409 (method url-fetch)
7410 (uri (pypi-uri "snakemake" version))
7411 (sha256
7412 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7413 (build-system python-build-system)
7414 (arguments
7415 ;; TODO: Package missing test dependencies.
7416 '(#:tests? #f
7417 #:phases
7418 (modify-phases %standard-phases
7419 ;; For cluster execution Snakemake will call Python. Since there is
7420 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7421 ;; this by calling the snakemake wrapper instead.
7422 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7423 (lambda* (#:key outputs #:allow-other-keys)
7424 (substitute* "snakemake/executors.py"
7425 (("\\{sys.executable\\} -m snakemake")
7426 (string-append (assoc-ref outputs "out")
7427 "/bin/snakemake")))
7428 #t)))))
7429 (propagated-inputs
7430 `(("python-appdirs" ,python-appdirs)
7431 ("python-configargparse" ,python-configargparse)
7432 ("python-datrie" ,python-datrie)
7433 ("python-docutils" ,python-docutils)
7434 ("python-gitpython" ,python-gitpython)
7435 ("python-jinja2" ,python-jinja2)
7436 ("python-jsonschema" ,python-jsonschema)
7437 ("python-networkx" ,python-networkx)
7438 ("python-psutil" ,python-psutil)
7439 ("python-pyyaml" ,python-pyyaml)
7440 ("python-ratelimiter" ,python-ratelimiter)
7441 ("python-requests" ,python-requests)
7442 ("python-wrapt" ,python-wrapt)))
7443 (home-page "https://snakemake.readthedocs.io")
7444 (synopsis "Python-based execution environment for make-like workflows")
7445 (description
7446 "Snakemake aims to reduce the complexity of creating workflows by
7447 providing a clean and modern domain specific specification language (DSL) in
7448 Python style, together with a fast and comfortable execution environment.")
7449 (license license:expat)))
7450
7451 (define-public python-pyqrcode
7452 (package
7453 (name "python-pyqrcode")
7454 (version "1.2.1")
7455 (source
7456 (origin
7457 (method url-fetch)
7458 (uri (pypi-uri "PyQRCode" version))
7459 (sha256
7460 (base32
7461 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7462 (build-system python-build-system)
7463 (home-page
7464 "https://github.com/mnooner256/pyqrcode")
7465 (synopsis "QR code generator")
7466 (description
7467 "Pyqrcode is a QR code generator written purely in Python with
7468 SVG, EPS, PNG and terminal output.")
7469 (license license:bsd-3)))
7470
7471 (define-public python-seaborn
7472 (package
7473 (name "python-seaborn")
7474 (version "0.10.0")
7475 (source
7476 (origin
7477 (method url-fetch)
7478 (uri (pypi-uri "seaborn" version))
7479 (sha256
7480 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7481 (build-system python-build-system)
7482 (arguments
7483 `(#:phases
7484 (modify-phases %standard-phases
7485 (add-before 'check 'start-xserver
7486 (lambda* (#:key inputs #:allow-other-keys)
7487 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7488 ;; There must be a running X server and make check doesn't
7489 ;; start one. Therefore we must do it.
7490 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7491 (setenv "DISPLAY" ":1")
7492 #t)))
7493 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7494 (propagated-inputs
7495 `(("python-pandas" ,python-pandas)
7496 ("python-matplotlib" ,python-matplotlib)
7497 ("python-numpy" ,python-numpy)
7498 ("python-scipy" ,python-scipy)))
7499 (native-inputs
7500 `(("python-pytest" ,python-pytest)
7501 ("xorg-server" ,xorg-server-for-tests)))
7502 (home-page "https://seaborn.pydata.org/")
7503 (synopsis "Statistical data visualization")
7504 (description
7505 "Seaborn is a library for making attractive and informative statistical
7506 graphics in Python. It is built on top of matplotlib and tightly integrated
7507 with the PyData stack, including support for numpy and pandas data structures
7508 and statistical routines from scipy and statsmodels.")
7509 (properties `((python2-variant . ,(delay python2-seaborn))))
7510 (license license:bsd-3)))
7511
7512 ;; 0.9.1 is the last release with support for Python 2.
7513 (define-public python2-seaborn
7514 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7515 (package
7516 (inherit base)
7517 (version "0.9.1")
7518 (source (origin
7519 (method url-fetch)
7520 (uri (pypi-uri "seaborn" version))
7521 (sha256
7522 (base32
7523 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7524
7525 (define-public python-mpmath
7526 (package
7527 (name "python-mpmath")
7528 (version "0.19")
7529 (source (origin
7530 (method url-fetch)
7531 (uri (string-append "http://mpmath.org/files/mpmath-"
7532 version ".tar.gz"))
7533 (sha256
7534 (base32
7535 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7536 (build-system python-build-system)
7537 (arguments
7538 '(#:phases
7539 (modify-phases %standard-phases
7540 (replace 'check
7541 (lambda _
7542 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7543 (home-page "http://mpmath.org")
7544 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7545 (description
7546 "@code{mpmath} can be used as an arbitrary-precision substitute for
7547 Python's float/complex types and math/cmath modules, but also does much
7548 more advanced mathematics.")
7549 (license license:bsd-3)))
7550
7551 (define-public python2-mpmath
7552 (package-with-python2 python-mpmath))
7553
7554 (define-public python-bigfloat
7555 (package
7556 (name "python-bigfloat")
7557 (version "0.3.0")
7558 (source
7559 (origin
7560 (method url-fetch)
7561 (uri (pypi-uri "bigfloat" version))
7562 (sha256
7563 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7564 (build-system python-build-system)
7565 (inputs
7566 `(("mpfr" ,mpfr)))
7567 (home-page "https://github.com/mdickinson/bigfloat")
7568 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7569 (description
7570 "This package provides a Python interface to the MPFR library for
7571 multiprecision arithmetic.")
7572 (license license:lgpl3+)))
7573
7574 (define-public python2-bigfloat
7575 (package-with-python2 python-bigfloat))
7576
7577 (define-public python-sympy
7578 (package
7579 (name "python-sympy")
7580 (version "1.1.1")
7581 (source
7582 (origin
7583 (method url-fetch)
7584 (uri (string-append
7585 "https://github.com/sympy/sympy/releases/download/sympy-"
7586 version "/sympy-" version ".tar.gz"))
7587 (sha256
7588 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7589 (build-system python-build-system)
7590 (arguments
7591 `(#:phases
7592 (modify-phases %standard-phases
7593 ;; Run the core tests after installation. By default it would run
7594 ;; *all* tests, which take a very long time to complete and are known
7595 ;; to be flaky.
7596 (delete 'check)
7597 (add-after 'install 'check
7598 (lambda* (#:key outputs #:allow-other-keys)
7599 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7600 #t)))))
7601 (propagated-inputs
7602 `(("python-mpmath" ,python-mpmath)))
7603 (home-page "https://www.sympy.org/")
7604 (synopsis "Python library for symbolic mathematics")
7605 (description
7606 "SymPy is a Python library for symbolic mathematics. It aims to become a
7607 full-featured computer algebra system (CAS) while keeping the code as simple
7608 as possible in order to be comprehensible and easily extensible.")
7609 (license license:bsd-3)))
7610
7611 (define-public python2-sympy
7612 (package
7613 (inherit (package-with-python2 python-sympy))
7614 (arguments
7615 `(#:phases
7616 (modify-phases %standard-phases
7617 ;; Run the core tests after installation. By default it would run
7618 ;; *all* tests, which take a very long time to complete and are known
7619 ;; to be flaky.
7620 (delete 'check)
7621 (add-after 'install 'check
7622 (lambda* (#:key outputs #:allow-other-keys)
7623 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7624 #t)))))))
7625
7626 (define-public python-q
7627 (package
7628 (name "python-q")
7629 (version "2.6")
7630 (source
7631 (origin
7632 (method url-fetch)
7633 (uri (pypi-uri "q" version))
7634 (sha256
7635 (base32
7636 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7637 (build-system python-build-system)
7638 (home-page "https://github.com/zestyping/q")
7639 (synopsis "Quick-and-dirty debugging output for tired programmers")
7640 (description
7641 "q is a Python module for \"print\" style of debugging Python code. It
7642 provides convenient short API for print out of values, tracebacks, and
7643 falling into the Python interpreter.")
7644 (license license:asl2.0)))
7645
7646 (define-public python2-q
7647 (package-with-python2 python-q))
7648
7649 (define-public python-xlib
7650 (package
7651 (name "python-xlib")
7652 (version "0.27")
7653 (source
7654 (origin
7655 (method git-fetch)
7656 (uri (git-reference
7657 (url "https://github.com/python-xlib/python-xlib")
7658 (commit version)))
7659 (file-name (git-file-name name version))
7660 (sha256
7661 (base32 "09kimic8rhprx3q8nzalc4aggg42ahqm4v5qcj8dm68yvxfdk986"))))
7662 (build-system python-build-system)
7663 (arguments
7664 `(#:phases
7665 (modify-phases %standard-phases
7666 (add-before 'check 'start-xserver
7667 (lambda* (#:key inputs #:allow-other-keys)
7668 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7669 ;; There must be a running X server and make check doesn't
7670 ;; start one. Therefore we must do it.
7671 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7672 (setenv "DISPLAY" ":1")
7673 #t))))))
7674 (native-inputs
7675 `(("python-mock" ,python-mock)
7676 ("python-setuptools-scm" ,python-setuptools-scm)
7677 ("python-six" ,python-six)
7678 ("xorg-server" ,xorg-server)))
7679 (home-page "https://github.com/python-xlib/python-xlib")
7680 (synopsis "Python X11 client library")
7681 (description
7682 "The Python X Library is intended to be a fully functional
7683 X client library for Python programs. It is useful to implement
7684 low-level X clients. It is written entirely in Python.")
7685 (license license:gpl2+)))
7686
7687 (define-public python2-xlib
7688 (package-with-python2 python-xlib))
7689
7690 (define-public python-singledispatch
7691 (package
7692 (name "python-singledispatch")
7693 (version "3.4.0.3")
7694 (source
7695 (origin
7696 (method url-fetch)
7697 (uri (pypi-uri "singledispatch" version))
7698 (sha256
7699 (base32
7700 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7701 (build-system python-build-system)
7702 (native-inputs
7703 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7704 (home-page
7705 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7706 (synopsis "Backport of singledispatch feature from Python 3.4")
7707 (description
7708 "This library brings functools.singledispatch from Python 3.4 to Python
7709 2.6-3.3.")
7710 (license license:expat)))
7711
7712 (define-public python2-singledispatch
7713 (package-with-python2 python-singledispatch))
7714
7715 ;; the python- version can be removed with python-3.5
7716 (define-public python-backports-abc
7717 (package
7718 (name "python-backports-abc")
7719 (version "0.5")
7720 (source
7721 (origin
7722 (method url-fetch)
7723 (uri (pypi-uri "backports_abc" version))
7724 (sha256
7725 (base32
7726 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7727 (build-system python-build-system)
7728 (home-page "https://github.com/cython/backports_abc")
7729 (synopsis "Backport of additions to the 'collections.abc' module")
7730 (description
7731 "Python-backports-abc provides a backport of additions to the
7732 @code{collections.abc} module in Python-3.5.")
7733 (license license:psfl)))
7734
7735 (define-public python2-backports-abc
7736 (package-with-python2 python-backports-abc))
7737
7738 (define-public python-backports-csv
7739 (package
7740 (name "python-backports-csv")
7741 (version "1.0.7")
7742 (source
7743 (origin
7744 (method url-fetch)
7745 (uri (pypi-uri "backports.csv" version))
7746 (sha256
7747 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7748 (build-system python-build-system)
7749 (home-page "https://github.com/ryanhiebert/backports.csv")
7750 (synopsis "Backport of Python 3's csv module for Python 2")
7751 (description
7752 "Provides a backport of Python 3's @code{csv} module for parsing
7753 comma separated values. The API of the @code{csv} module in Python 2
7754 is drastically different from the @code{csv} module in Python 3.
7755 This is due, for the most part, to the difference between str in
7756 Python 2 and Python 3.")
7757 (license license:psfl)))
7758
7759 (define-public python2-backports-csv
7760 (package-with-python2 python-backports-csv))
7761
7762 (define-public python2-backports-shutil-get-terminal-size
7763 (package
7764 (name "python2-backports-shutil-get-terminal-size")
7765 (version "1.0.0")
7766 (source
7767 (origin
7768 (method url-fetch)
7769 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7770 (sha256
7771 (base32
7772 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7773 (build-system python-build-system)
7774 (arguments
7775 `(#:python ,python-2
7776 #:phases
7777 (modify-phases %standard-phases
7778 (replace 'check
7779 (lambda _
7780 (setenv "PYTHONPATH" (string-append "./build/lib:"
7781 (getenv "PYTHONPATH")))
7782 (invoke "py.test" "-v"))))))
7783 (native-inputs
7784 `(("python2-pytest" ,python2-pytest)))
7785 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7786 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7787 (description
7788 "This package provides a backport of the @code{get_terminal_size
7789 function} from Python 3.3's @code{shutil}.
7790 Unlike the original version it is written in pure Python rather than C,
7791 so it might be a tiny bit slower.")
7792 (license license:expat)))
7793
7794 (define-public python-waf
7795 (package
7796 (name "python-waf")
7797 (version "2.0.19")
7798 (source (origin
7799 (method url-fetch)
7800 (uri (string-append "https://waf.io/"
7801 "waf-" version ".tar.bz2"))
7802 (sha256
7803 (base32
7804 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7805 (build-system python-build-system)
7806 (arguments
7807 '(#:phases
7808 (modify-phases %standard-phases
7809 (replace 'build
7810 (lambda _
7811 ;; XXX: Find a way to add all extra tools.
7812 (let ((tools '("gccdeps"
7813 "clang_compilation_database")))
7814 (invoke "python" "waf-light" "configure" "build"
7815 (string-append "--tools="
7816 (string-join tools ","))))))
7817 (replace 'check
7818 (lambda _
7819 (invoke "python" "waf" "--version")))
7820 (replace 'install
7821 (lambda* (#:key outputs #:allow-other-keys)
7822 (let ((out (assoc-ref outputs "out")))
7823 (install-file "waf" (string-append out "/bin")))
7824 #t))
7825 ;; waf breaks when it is wrapped.
7826 (delete 'wrap))))
7827 (home-page "https://waf.io/")
7828 (synopsis "Python-based build system")
7829 (description
7830 "Waf is a Python-based framework for configuring, compiling and installing
7831 applications.")
7832 (license license:bsd-3)))
7833
7834 (define-public python2-waf
7835 (package-with-python2 python-waf))
7836
7837 (define-public python-pyzmq
7838 (package
7839 (name "python-pyzmq")
7840 (version "17.1.2")
7841 (source
7842 (origin
7843 (method url-fetch)
7844 (uri (pypi-uri "pyzmq" version))
7845 (sha256
7846 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7847 (build-system python-build-system)
7848 (arguments
7849 `(#:configure-flags
7850 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7851 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7852 ;; --inplace' for 'python setup.py test' to work.
7853 #:tests? #f))
7854 (inputs
7855 `(("zeromq" ,zeromq)))
7856 (native-inputs
7857 `(("pkg-config" ,pkg-config)
7858 ("python-nose" ,python-nose)))
7859 (home-page "https://github.com/zeromq/pyzmq")
7860 (synopsis "Python bindings for 0MQ")
7861 (description
7862 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7863 (license license:bsd-4)))
7864
7865 (define-public python2-pyzmq
7866 (package-with-python2 python-pyzmq))
7867
7868 (define-public python-pep8
7869 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7870 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7871 ;; some dependents' test suites, and nothing more.
7872 (package
7873 (name "python-pep8")
7874 (version "1.7.0")
7875 (source
7876 (origin
7877 (method url-fetch)
7878 (uri (pypi-uri "pep8" version))
7879 (sha256
7880 (base32
7881 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7882 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7883 (build-system python-build-system)
7884 (home-page "https://pep8.readthedocs.org/")
7885 (synopsis "Python style guide checker")
7886 (description
7887 "This tools checks Python code against some of the style conventions in
7888 PEP 8.")
7889 (license license:expat)))
7890
7891 (define-public python2-pep8
7892 (package-with-python2 python-pep8))
7893
7894 (define-public python-pep517
7895 (package
7896 (name "python-pep517")
7897 (version "0.8.2")
7898 (source
7899 (origin
7900 (method url-fetch)
7901 (uri (pypi-uri "pep517" version))
7902 (sha256
7903 (base32
7904 "17m2bcabx3sr5wjalgzppfx5xahqrwm12zq58h68mm482b7rjqcf"))))
7905 (build-system python-build-system)
7906 (arguments
7907 '(#:phases
7908 (modify-phases %standard-phases
7909 (replace 'check
7910 (lambda* (#:key tests? #:allow-other-keys)
7911 (delete-file "pytest.ini")
7912 ;; This test tries to connect to the internet
7913 (delete-file "tests/test_meta.py")
7914 (if tests?
7915 (invoke "pytest")
7916 #t))))))
7917 (native-inputs
7918 `(("python-mock" ,python-mock)
7919 ("python-pytest" ,python-pytest)
7920 ("python-testpath" ,python-testpath)))
7921 (propagated-inputs
7922 `(("python-toml" ,python-toml)
7923 ("python-wheel" ,python-wheel)))
7924 (home-page "https://github.com/pypa/pep517")
7925 (synopsis "Wrappers to build Python packages using PEP 517 hooks")
7926 (description
7927 "Wrappers to build Python packages using PEP 517 hooks.")
7928 (properties `((python2-variant . ,(delay python2-pep517))))
7929 (license license:expat)))
7930
7931 ;; Skip the tests so we don't create a cyclical dependency with pytest.
7932 (define-public python2-pep517
7933 (let ((base (package-with-python2
7934 (strip-python2-variant python-pep517))))
7935 (package
7936 (inherit base)
7937 (name "python2-pep517")
7938 (arguments
7939 `(#:tests? #f
7940 ,@(package-arguments base)))
7941 (native-inputs `()))))
7942
7943 (define-public python-pyflakes
7944 (package
7945 (name "python-pyflakes")
7946 (version "2.2.0")
7947 (source
7948 (origin
7949 (method url-fetch)
7950 (uri (pypi-uri "pyflakes" version))
7951 (sha256
7952 (base32
7953 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))
7954 (build-system python-build-system)
7955 (home-page
7956 "https://github.com/pyflakes/pyflakes")
7957 (synopsis "Passive checker of Python programs")
7958 (description
7959 "Pyflakes statically checks Python source code for common errors.")
7960 (license license:expat)))
7961
7962 (define-public python2-pyflakes
7963 (package-with-python2 python-pyflakes))
7964
7965 ;; Flake8 2.6 requires an older version of pyflakes.
7966 ;; This should be removed ASAP.
7967 (define-public python-pyflakes-1.2
7968 (package (inherit python-pyflakes)
7969 (version "1.2.3")
7970 (source
7971 (origin
7972 (method url-fetch)
7973 (uri (pypi-uri "pyflakes" version))
7974 (sha256
7975 (base32
7976 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7977 (arguments
7978 '(#:phases
7979 (modify-phases %standard-phases
7980 ;; This one test fails.
7981 (replace 'check
7982 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7983 (native-inputs
7984 `(("python-pytest" ,python-pytest)))))
7985
7986 (define-public python-mccabe
7987 (package
7988 (name "python-mccabe")
7989 (version "0.6.1")
7990 (source
7991 (origin
7992 (method url-fetch)
7993 (uri (pypi-uri "mccabe" version))
7994 (sha256
7995 (base32
7996 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7997 (build-system python-build-system)
7998 (native-inputs
7999 `(("python-pytest" ,python-pytest-bootstrap)
8000 ("python-pytest-runner" ,python-pytest-runner)))
8001 (home-page "https://github.com/flintwork/mccabe")
8002 (synopsis "McCabe checker, plugin for flake8")
8003 (description
8004 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
8005 complexity of Python source code.")
8006 (license license:expat)))
8007
8008 (define-public python2-mccabe
8009 (package-with-python2 python-mccabe))
8010
8011 (define-public python-mccabe-0.2.1
8012 (package (inherit python-mccabe)
8013 (version "0.2.1")
8014 (source
8015 (origin
8016 (method url-fetch)
8017 (uri (pypi-uri "mccabe" version))
8018 (sha256
8019 (base32
8020 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
8021
8022 (define-public python2-mccabe-0.2.1
8023 (package-with-python2 python-mccabe-0.2.1))
8024
8025 ;; Flake8 2.4.1 requires an older version of pep8.
8026 ;; This should be removed ASAP.
8027 (define-public python-pep8-1.5.7
8028 (package (inherit python-pep8)
8029 (version "1.5.7")
8030 (source
8031 (origin
8032 (method url-fetch)
8033 (uri (pypi-uri "pep8" version))
8034 (sha256
8035 (base32
8036 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
8037 (arguments
8038 ;; XXX Tests not compatible with Python 3.5.
8039 '(#:tests? #f))))
8040
8041 (define-public python2-pep8-1.5.7
8042 (package-with-python2 python-pep8-1.5.7))
8043
8044 (define-public python-flake8
8045 (package
8046 (name "python-flake8")
8047 (version "3.8.3")
8048 (source (origin
8049 (method url-fetch)
8050 (uri (pypi-uri "flake8" version))
8051 (sha256
8052 (base32
8053 "02527892hh0qjivxaiphzalj7q32qkna1cqaikjs7c03mk5ryjzh"))))
8054 (build-system python-build-system)
8055 (arguments
8056 `(#:phases
8057 (modify-phases %standard-phases
8058 (delete 'check)
8059 (add-after 'install 'check
8060 (lambda* (#:key inputs outputs #:allow-other-keys)
8061 (add-installed-pythonpath inputs outputs)
8062 (invoke "pytest" "-v")
8063 #t)))))
8064 (propagated-inputs
8065 `(("python-pycodestyle" ,python-pycodestyle)
8066 ("python-entrypoints" ,python-entrypoints)
8067 ("python-pyflakes" ,python-pyflakes)
8068 ("python-mccabe" ,python-mccabe)))
8069 (native-inputs
8070 `(("python-mock" ,python-mock)
8071 ("python-pytest" ,python-pytest-bootstrap)))
8072 (home-page "https://gitlab.com/pycqa/flake8")
8073 (synopsis
8074 "The modular source code checker: pep8, pyflakes and co")
8075 (description
8076 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
8077 (properties `((python2-variant . ,(delay python2-flake8))))
8078 (license license:expat)))
8079
8080 (define-public python2-flake8
8081 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
8082 (package (inherit base)
8083 (propagated-inputs
8084 `(("python2-configparser" ,python2-configparser)
8085 ("python2-enum34" ,python2-enum34)
8086 ("python2-functools32" ,python2-functools32)
8087 ("python2-typing" ,python2-typing)
8088 ,@(package-propagated-inputs base))))))
8089
8090 ;; python-hacking requires flake8 <2.7.0.
8091 (define-public python-flake8-2.6
8092 (package
8093 (inherit python-flake8)
8094 (version "2.6.2")
8095 (source (origin
8096 (method url-fetch)
8097 (uri (pypi-uri "flake8" version))
8098 (sha256
8099 (base32
8100 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
8101 (arguments
8102 `(#:phases
8103 (modify-phases %standard-phases
8104 (add-after 'unpack 'use-later-pycodestyles
8105 (lambda __
8106 (substitute* '("flake8.egg-info/requires.txt"
8107 "setup.py")
8108 (("pycodestyle >= 2.0, < 2.1")
8109 "pycodestyle >= 2.0"))
8110 #t))
8111 (delete 'check)
8112 (add-after 'install 'check
8113 (lambda* (#:key inputs outputs #:allow-other-keys)
8114 (add-installed-pythonpath inputs outputs)
8115 (invoke "pytest" "-v")
8116 #t)))))
8117 (propagated-inputs
8118 `(("python-pep8" ,python-pep8)
8119 ("python-pycodestyle" ,python-pycodestyle)
8120 ("python-entrypoints" ,python-entrypoints)
8121 ("python-pyflakes" ,python-pyflakes-1.2)
8122 ("python-mccabe" ,python-mccabe)))))
8123
8124 (define-public python-flake8-bugbear
8125 (package
8126 (name "python-flake8-bugbear")
8127 (version "20.1.4")
8128 (source
8129 (origin
8130 (method url-fetch)
8131 (uri (pypi-uri "flake8-bugbear" version))
8132 (sha256
8133 (base32
8134 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
8135 (build-system python-build-system)
8136 (arguments
8137 '(#:phases
8138 (modify-phases %standard-phases
8139 (add-before 'check 'disable-test
8140 (lambda _
8141 ;; This test fails on slow computers.
8142 (substitute* "tests/test_bugbear.py"
8143 (("def test_does_not_crash_on_any_valid_code")
8144 "def _test_does_not_crash_on_any_valid_code")))))))
8145 (native-inputs
8146 `(("python-hypothesis" ,python-hypothesis)
8147 ("python-hypothesmith" ,python-hypothesmith)))
8148 (propagated-inputs
8149 `(("python-attrs" ,python-attrs)
8150 ("python-flake8" ,python-flake8)))
8151 (home-page "https://github.com/PyCQA/flake8-bugbear")
8152 (synopsis
8153 "Flake8 plugin for finding likely bugs and design problems in your program")
8154 (description
8155 "This package contains a plugin for Flake8 finding likely bugs and
8156 design problems in your program. It contains warnings that don't belong
8157 in pyflakes and pycodestyle.")
8158 (license license:expat)))
8159
8160 (define-public python-flake8-polyfill
8161 (package
8162 (name "python-flake8-polyfill")
8163 (version "1.0.2")
8164 (source
8165 (origin
8166 (method url-fetch)
8167 (uri (pypi-uri "flake8-polyfill" version))
8168 (sha256
8169 (base32
8170 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
8171 (build-system python-build-system)
8172 (arguments
8173 '(#:phases
8174 (modify-phases %standard-phases
8175 (replace 'check
8176 (lambda _
8177 ;; Be compatible with Pytest 4:
8178 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
8179 (substitute* "setup.cfg"
8180 (("\\[pytest\\]")
8181 "[tool:pytest]"))
8182
8183 (setenv "PYTHONPATH"
8184 (string-append (getcwd) "/build/lib:"
8185 (getenv "PYTHONPATH")))
8186 (invoke "py.test" "-v"))))))
8187 (native-inputs
8188 `(("python-flake8" ,python-flake8)
8189 ("python-mock" ,python-mock)
8190 ("python-pep8" ,python-pep8)
8191 ("python-pycodestyle" ,python-pycodestyle)
8192 ("python-pytest" ,python-pytest)))
8193 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
8194 (synopsis "Polyfill package for Flake8 plugins")
8195 (description
8196 "This package that provides some compatibility helpers for Flake8
8197 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
8198 (license license:expat)))
8199
8200 (define-public python2-flake8-polyfill
8201 (package-with-python2 python-flake8-polyfill))
8202
8203 (define-public python-flake8-pyi
8204 (package
8205 (name "python-flake8-pyi")
8206 (version "20.5.0")
8207 (source
8208 (origin
8209 (method url-fetch)
8210 (uri (pypi-uri "flake8-pyi" version))
8211 (sha256
8212 (base32
8213 "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
8214 (build-system python-build-system)
8215 (propagated-inputs
8216 `(("python-attrs" ,python-attrs)
8217 ("python-flake8" ,python-flake8)
8218 ("python-pyflakes" ,python-pyflakes)))
8219 (home-page "https://github.com/ambv/flake8-pyi")
8220 (synopsis
8221 "Flake8 plugin that provides specializations for type hinting stub files")
8222 (description
8223 "This package contains a plugin that provides specializations for
8224 type hinting stub files, especially interesting for linting typeshed. It
8225 adds the @file{.pyi} extension to the default value of the @code{--filename}
8226 command-line argument to Flake8. This means stubs are linted by default with
8227 this plugin enabled, without needing to explicitly list every file. It
8228 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
8229 expressions after the entire file has been read. This enables support for
8230 first-class forward references that stub files use.")
8231 (license license:expat)))
8232
8233 (define-public python-flake8-pie
8234 (package
8235 (name "python-flake8-pie")
8236 (version "0.5.0")
8237 (source
8238 (origin
8239 (method url-fetch)
8240 (uri (pypi-uri "flake8-pie" version))
8241 (sha256
8242 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
8243 (build-system python-build-system)
8244 (home-page "https://github.com/sbdchd/flake8-pie")
8245 (synopsis "Flake8 extension that implements lints")
8246 (description
8247 "This package provides a flake8 extension that implements miscellaneous
8248 lints.")
8249 (license license:bsd-2)))
8250
8251 (define-public python-autoflake
8252 (package
8253 (name "python-autoflake")
8254 (version "1.3.1")
8255 (source
8256 (origin
8257 (method url-fetch)
8258 (uri (pypi-uri "autoflake" version))
8259 (sha256
8260 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
8261 (build-system python-build-system)
8262 (propagated-inputs
8263 `(("python-pyflakes" ,python-pyflakes)))
8264 (home-page "https://github.com/myint/autoflake")
8265 (synopsis "Removes unused imports and unused variables")
8266 (description
8267 "@code{autoflake} removes unused imports and unused variables from Python
8268 code as reported by @code{pyflakes}.
8269
8270 By default, it only removes unused imports for modules that are part of the
8271 standard library. Removal of unused variables is also disabled by default.
8272 It also removes useless @code{pass} statements.")
8273 (license license:expat)))
8274
8275 (define-public python-mistune
8276 (package
8277 (name "python-mistune")
8278 (version "0.8.4")
8279 (source
8280 (origin
8281 (method url-fetch)
8282 (uri (pypi-uri "mistune" version))
8283 (sha256
8284 (base32
8285 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
8286 (build-system python-build-system)
8287 (native-inputs
8288 `(("python-nose" ,python-nose)
8289 ("python-cython" ,python-cython)))
8290 (home-page "https://github.com/lepture/mistune")
8291 (synopsis "Markdown parser in pure Python")
8292 (description "This package provides a fast markdown parser in pure
8293 Python.")
8294 (license license:bsd-3)))
8295
8296 (define-public python2-mistune
8297 (package-with-python2 python-mistune))
8298
8299 (define-public python-markdown
8300 (package
8301 (name "python-markdown")
8302 (version "3.2.1")
8303 (source
8304 (origin
8305 (method url-fetch)
8306 (uri (pypi-uri "Markdown" version))
8307 (sha256
8308 (base32
8309 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
8310 (build-system python-build-system)
8311 (native-inputs
8312 `(("python-nose" ,python-nose)
8313 ("python-pyyaml" ,python-pyyaml)))
8314 (home-page "https://python-markdown.github.io/")
8315 (synopsis "Python implementation of Markdown")
8316 (description
8317 "This package provides a Python implementation of John Gruber's
8318 Markdown. The library features international input, various Markdown
8319 extensions, and several HTML output formats. A command line wrapper
8320 markdown_py is also provided to convert Markdown files to HTML.")
8321 (properties `((python2-variant . ,(delay python2-markdown))))
8322 (license license:bsd-3)))
8323
8324 ;; Markdown 3.2 dropped support for Python 2.
8325 (define-public python2-markdown
8326 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
8327 (package/inherit
8328 base
8329 (version "3.1.1")
8330 (source (origin
8331 (method url-fetch)
8332 (uri (pypi-uri "Markdown" version))
8333 (sha256
8334 (base32
8335 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
8336
8337 (define-public python-ptyprocess
8338 (package
8339 (name "python-ptyprocess")
8340 (version "0.5.2")
8341 (source
8342 (origin
8343 (method url-fetch)
8344 (uri (pypi-uri "ptyprocess" version))
8345 (sha256
8346 (base32
8347 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
8348 (build-system python-build-system)
8349 (native-inputs
8350 `(("python-nose" ,python-nose)))
8351 (arguments
8352 `(#:phases
8353 (modify-phases %standard-phases
8354 (replace 'check
8355 (lambda _ (invoke "nosetests"))))))
8356 (home-page "https://github.com/pexpect/ptyprocess")
8357 (synopsis "Run a subprocess in a pseudo terminal")
8358 (description
8359 "This package provides a Python library used to launch a subprocess in a
8360 pseudo terminal (pty), and interact with both the process and its pty.")
8361 (license license:isc)))
8362
8363 (define-public python2-ptyprocess
8364 (package-with-python2 python-ptyprocess))
8365
8366 (define-public python-cram
8367 (package
8368 (name "python-cram")
8369 (version "0.7")
8370 (home-page "https://bitheap.org/cram/")
8371 (source (origin
8372 (method url-fetch)
8373 (uri (list (string-append home-page "cram-"
8374 version ".tar.gz")
8375 (pypi-uri "cram" version)))
8376 (sha256
8377 (base32
8378 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
8379 (arguments
8380 '(#:phases
8381 (modify-phases %standard-phases
8382 (add-after 'unpack 'patch-source
8383 (lambda _
8384 (substitute* (find-files "cram" ".*\\.py$")
8385 ;; Replace default shell path.
8386 (("/bin/sh") (which "sh")))
8387 (substitute* (find-files "tests" ".*\\.t$")
8388 (("md5") "md5sum")
8389 (("/bin/bash") (which "bash"))
8390 (("/bin/sh") (which "sh")))
8391 (substitute* "cram/_test.py"
8392 ;; This hack works around a bug triggered by substituting
8393 ;; the /bin/sh paths. "tests/usage.t" compares the output of
8394 ;; "cram -h", which breaks the output at 80 characters. This
8395 ;; causes the line showing the default shell to break into two
8396 ;; lines, but the test expects a single line...
8397 (("env\\['COLUMNS'\\] = '80'")
8398 "env['COLUMNS'] = '160'"))
8399
8400 (substitute* "Makefile"
8401 ;; Recent versions of python-coverage have caused the test
8402 ;; coverage to decrease (as of version 0.7). Allow that.
8403 (("--fail-under=100")
8404 "--fail-under=90"))
8405
8406 #t))
8407 (replace 'check
8408 ;; The test phase uses the built library and executable.
8409 (lambda* (#:key inputs outputs #:allow-other-keys)
8410 (add-installed-pythonpath inputs outputs)
8411 (setenv "PATH" (string-append (getenv "PATH") ":"
8412 (assoc-ref outputs "out") "/bin"))
8413 (invoke "make" "test"))))))
8414 (build-system python-build-system)
8415 (native-inputs
8416 `(("python-coverage" ,python-coverage)
8417 ("which" ,which)))
8418 (synopsis "Simple testing framework for command line applications")
8419 (description
8420 "Cram is a functional testing framework for command line applications.
8421 Cram tests look like snippets of interactive shell sessions. Cram runs each
8422 command and compares the command output in the test with the command’s actual
8423 output.")
8424 (license license:gpl2+)))
8425
8426 (define-public python2-cram
8427 (package-with-python2 python-cram))
8428
8429 (define-public python-crashtest
8430 (package
8431 (name "python-crashtest")
8432 (version "0.3.1")
8433 (source
8434 (origin
8435 (method url-fetch)
8436 (uri (pypi-uri "crashtest" version))
8437 (sha256
8438 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
8439 (build-system python-build-system)
8440 (home-page "https://github.com/sdispater/crashtest")
8441 (synopsis "Manage Python errors with ease")
8442 (description
8443 "Python library that makes exceptions handling and inspection easier.")
8444 (license license:expat)))
8445
8446 (define-public python-straight-plugin
8447 (package
8448 (name "python-straight-plugin")
8449 (version "1.4.1")
8450 (source
8451 (origin
8452 (method url-fetch)
8453 (uri (pypi-uri "straight.plugin" version))
8454 (sha256
8455 (base32
8456 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
8457 (build-system python-build-system)
8458 (home-page "https://github.com/ironfroggy/straight.plugin")
8459 (synopsis "Simple namespaced plugin facility")
8460 (description "Straight Plugin provides a type of plugin you can create from
8461 almost any existing Python modules, and an easy way for outside developers to
8462 add functionality and customization to your projects with their own plugins.")
8463 (license license:expat)))
8464
8465 (define-public python2-straight-plugin
8466 (package-with-python2 python-straight-plugin))
8467
8468 (define-public python-fonttools
8469 (package
8470 (name "python-fonttools")
8471 (version "4.6.0")
8472 (source (origin
8473 (method url-fetch)
8474 (uri (pypi-uri "fonttools" version ".zip"))
8475 (sha256
8476 (base32
8477 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
8478 (build-system python-build-system)
8479 (native-inputs
8480 `(("unzip" ,unzip)
8481 ("python-pytest" ,python-pytest)
8482 ("python-pytest-runner" ,python-pytest-runner)))
8483 (home-page "https://github.com/fonttools/fonttools")
8484 (synopsis "Tools to manipulate font files")
8485 (description
8486 "FontTools/TTX is a library to manipulate font files from Python. It
8487 supports reading and writing of TrueType/OpenType fonts, reading and writing
8488 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
8489 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
8490 from an XML-based format.")
8491 (license license:expat)))
8492
8493 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
8494 (define-public python2-fonttools
8495 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
8496 (package/inherit
8497 base
8498 (version "3.44.0")
8499 (source (origin
8500 (method url-fetch)
8501 (uri (pypi-uri "fonttools" version ".zip"))
8502 (sha256
8503 (base32
8504 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
8505
8506 (define-public python-ly
8507 (package
8508 (name "python-ly")
8509 (version "0.9.5")
8510 (source
8511 (origin
8512 (method url-fetch)
8513 (uri (pypi-uri name version))
8514 (sha256
8515 (base32
8516 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
8517 (build-system python-build-system)
8518 (arguments
8519 ;; FIXME: Some tests need network access.
8520 '(#:tests? #f))
8521 (synopsis "Tool and library for manipulating LilyPond files")
8522 (description "This package provides a Python library to parse, manipulate
8523 or create documents in LilyPond format. A command line program ly is also
8524 provided that can be used to do various manipulations with LilyPond files.")
8525 (home-page "https://pypi.org/project/python-ly/")
8526 (license license:gpl2+)))
8527
8528 (define-public python-appdirs
8529 (package
8530 (name "python-appdirs")
8531 (version "1.4.3")
8532 (source
8533 (origin
8534 (method url-fetch)
8535 (uri (pypi-uri "appdirs" version))
8536 (sha256
8537 (base32
8538 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
8539 (build-system python-build-system)
8540 (home-page "https://github.com/ActiveState/appdirs")
8541 (synopsis
8542 "Determine platform-specific dirs, e.g. a \"user data dir\"")
8543 (description
8544 "This module provides a portable way of finding out where user data
8545 should be stored on various operating systems.")
8546 (license license:expat)))
8547
8548 (define-public python2-appdirs
8549 (package-with-python2 python-appdirs))
8550
8551 (define-public python-llfuse
8552 (package
8553 (name "python-llfuse")
8554 (version "1.3.6")
8555 (source (origin
8556 (method url-fetch)
8557 (uri (pypi-uri "llfuse" version ".tar.bz2"))
8558 (sha256
8559 (base32
8560 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
8561 (build-system python-build-system)
8562 (inputs
8563 `(("fuse" ,fuse)
8564 ("attr" ,attr)))
8565 (native-inputs
8566 `(("pkg-config" ,pkg-config)))
8567 (synopsis "Python bindings for FUSE")
8568 (description
8569 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
8570 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
8571 (license license:lgpl2.0+)
8572 (properties `((python2-variant . ,(delay python2-llfuse))))))
8573
8574 (define-public python2-llfuse
8575 (package (inherit (package-with-python2
8576 (strip-python2-variant python-llfuse)))
8577 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
8578
8579 ;; For attic-0.16
8580 (define-public python-llfuse-0.41
8581 (package (inherit python-llfuse)
8582 (version "0.41.1")
8583 (source (origin
8584 (method url-fetch)
8585 (uri (string-append
8586 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8587 "llfuse-" version ".tar.bz2"))
8588 (sha256
8589 (base32
8590 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8591 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8592 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8593 (license (list license:expat license:lgpl2.0+))))
8594
8595 (define-public python-msgpack
8596 (package
8597 (name "python-msgpack")
8598 (version "1.0.0")
8599 (source (origin
8600 (method url-fetch)
8601 (uri (pypi-uri "msgpack" version))
8602 (sha256
8603 (base32
8604 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8605 (build-system python-build-system)
8606 (arguments
8607 `(#:modules ((guix build utils)
8608 (guix build python-build-system)
8609 (ice-9 ftw)
8610 (srfi srfi-1)
8611 (srfi srfi-26))
8612 #:phases
8613 (modify-phases %standard-phases
8614 (replace 'check
8615 (lambda _
8616 (let ((cwd (getcwd)))
8617 (setenv "PYTHONPATH"
8618 (string-append cwd "/build/"
8619 (find (cut string-prefix? "lib" <>)
8620 (scandir (string-append cwd "/build")))
8621 ":"
8622 (getenv "PYTHONPATH")))
8623 (invoke "pytest" "-v" "test")))))))
8624 (native-inputs
8625 `(("python-pytest" ,python-pytest)))
8626 (synopsis "MessagePack (de)serializer")
8627 (description "MessagePack is a fast, compact binary serialization format,
8628 suitable for similar data to JSON. This package provides CPython bindings for
8629 reading and writing MessagePack data.")
8630 (home-page "https://pypi.org/project/msgpack/")
8631 (license license:asl2.0)))
8632
8633 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8634 ;; release 0.5. Some packages like borg still call it by the old name for now.
8635 ;; <https://bugs.gnu.org/30662>
8636 (define-public python-msgpack-transitional
8637 (package
8638 (inherit python-msgpack)
8639 (name "python-msgpack-transitional")
8640 (version "0.5.6")
8641 (source (origin
8642 (method url-fetch)
8643 (uri (pypi-uri "msgpack" version))
8644 (sha256
8645 (base32
8646 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8647 (arguments
8648 (substitute-keyword-arguments (package-arguments python-msgpack)
8649 ((#:phases phases)
8650 `(modify-phases ,phases
8651 (add-after 'unpack 'configure-transitional
8652 (lambda _
8653 ;; Keep using the old name.
8654 (substitute* "setup.py"
8655 (("TRANSITIONAL = False")
8656 "TRANSITIONAL = 1"))
8657 #t))))))))
8658
8659 (define-public python2-msgpack
8660 (package-with-python2 python-msgpack))
8661
8662 (define-public python-netaddr
8663 (package
8664 (name "python-netaddr")
8665 (version "0.7.19")
8666 (source
8667 (origin
8668 (method url-fetch)
8669 (uri (pypi-uri "netaddr" version))
8670 (sha256
8671 (base32
8672 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8673 (build-system python-build-system)
8674 (arguments `(#:tests? #f)) ;; No tests.
8675 (home-page "https://github.com/drkjam/netaddr/")
8676 (synopsis "Pythonic manipulation of network addresses")
8677 (description
8678 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8679 and MAC network addresses.")
8680 (license license:bsd-3)))
8681
8682 (define-public python2-netaddr
8683 (package-with-python2 python-netaddr))
8684
8685 (define-public python2-pyroute2
8686 (package
8687 (name "python2-pyroute2")
8688 (version "0.5.6")
8689 (source
8690 (origin
8691 (method url-fetch)
8692 (uri (pypi-uri "pyroute2" version))
8693 (sha256
8694 (base32
8695 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8696 (build-system python-build-system)
8697 (arguments
8698 `(#:python ,python-2)) ;Python 3.x is not supported
8699 (home-page "https://github.com/svinota/pyroute2")
8700 (synopsis "Python netlink library")
8701 (description
8702 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8703 Supported netlink families and protocols include:
8704 @itemize
8705 @item rtnl, network settings - addresses, routes, traffic controls
8706 @item nfnetlink - netfilter API: ipset, nftables, ...
8707 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8708 @item devlink - manage and monitor devlink-enabled hardware
8709 @item generic - generic netlink families
8710 @itemize
8711 @item nl80211 - wireless functions API (basic support)
8712 @item taskstats - extended process statistics
8713 @item acpi_events - ACPI events monitoring
8714 @item thermal_events - thermal events monitoring
8715 @item VFS_DQUOT - disk quota events monitoring
8716 @end itemize
8717 @end itemize")
8718 (license license:gpl2+)))
8719
8720 (define-public python-wrapt
8721 (package
8722 (name "python-wrapt")
8723 (version "1.11.2")
8724 (source
8725 (origin
8726 (method url-fetch)
8727 (uri (pypi-uri "wrapt" version))
8728 (sha256
8729 (base32
8730 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8731 (build-system python-build-system)
8732 (arguments
8733 ;; Tests are not included in the tarball, they are only available in the
8734 ;; git repository.
8735 `(#:tests? #f))
8736 (home-page "https://github.com/GrahamDumpleton/wrapt")
8737 (synopsis "Module for decorators, wrappers and monkey patching")
8738 (description
8739 "The aim of the wrapt module is to provide a transparent object proxy for
8740 Python, which can be used as the basis for the construction of function
8741 wrappers and decorator functions.")
8742 (license license:bsd-2)))
8743
8744 (define-public python2-wrapt
8745 (package-with-python2 python-wrapt))
8746
8747 (define-public python-xlrd
8748 (package
8749 (name "python-xlrd")
8750 (version "1.2.0")
8751 (source (origin
8752 (method url-fetch)
8753 (uri (pypi-uri "xlrd" version))
8754 (sha256
8755 (base32
8756 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8757 (build-system python-build-system)
8758 (arguments
8759 `(#:phases
8760 (modify-phases %standard-phases
8761 ;; Some tests depend on writing a temporary file to the user's home
8762 ;; directory.
8763 (add-after 'unpack 'fix-tests
8764 (lambda _
8765 (delete-file "tests/test_open_workbook.py")
8766 #t)))))
8767 (home-page "http://www.python-excel.org/")
8768 (synopsis "Library for extracting data from Excel files")
8769 (description "This package provides a library to extract data from
8770 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8771 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8772 Unicode-aware. It is not intended as an end-user tool.")
8773 (license license:bsd-3)))
8774
8775 (define-public python2-xlrd
8776 (package-with-python2 python-xlrd))
8777
8778 (define-public python-immutables
8779 (package
8780 (name "python-immutables")
8781 (version "0.14")
8782 (source
8783 (origin
8784 (method url-fetch)
8785 (uri (pypi-uri "immutables" version))
8786 (sha256
8787 (base32 "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0"))))
8788 (build-system python-build-system)
8789 (home-page "https://github.com/MagicStack/immutables")
8790 (synopsis "High-performance immutable mapping type for Python")
8791 (description
8792 "An immutable mapping type for Python. The underlying datastructure is a
8793 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
8794 functional languages.")
8795 (license license:asl2.0)))
8796
8797 (define-public python-prettytable
8798 (package
8799 (name "python-prettytable")
8800 (version "0.7.2")
8801 (source
8802 (origin
8803 (method url-fetch)
8804 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8805 (sha256
8806 (base32
8807 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8808 (build-system python-build-system)
8809 (home-page "https://code.google.com/archive/p/prettytable/")
8810 (synopsis "Display tabular data in an ASCII table format")
8811 (description
8812 "A library designed to represent tabular data in visually appealing ASCII
8813 tables. PrettyTable allows for selection of which columns are to be printed,
8814 independent alignment of columns (left or right justified or centred) and
8815 printing of sub-tables by specifying a row range.")
8816 (license license:bsd-3)))
8817
8818 (define-public python2-prettytable
8819 (package-with-python2 python-prettytable))
8820
8821 (define-public python-curio
8822 (package
8823 (name "python-curio")
8824 (version "1.2")
8825 (source
8826 (origin
8827 (method url-fetch)
8828 (uri (pypi-uri "curio" version))
8829 (sha256
8830 (base32 "16wkww6kh511b9bzsfhpvrv0766cc6ssgbzz4lgpjnrzzgx21wwh"))))
8831 (build-system python-build-system)
8832 (arguments
8833 `(#:phases
8834 (modify-phases %standard-phases
8835 (replace 'check
8836 (lambda* (#:key inputs outputs #:allow-other-keys)
8837 (add-installed-pythonpath inputs outputs)
8838 (invoke "pytest" "-vv" "-k"
8839 ;; Tries to open an outgoing connection.
8840 "not test_ssl_outgoing"))))))
8841 (native-inputs
8842 `(("python-pytest" ,python-pytest)))
8843 (home-page "https://github.com/dabeaz/curio")
8844 (synopsis "Coroutine-based library for concurrent Python")
8845 (description
8846 "Curio is a coroutine-based library for concurrent Python systems
8847 programming. It provides standard programming abstractions such as as
8848 tasks, sockets, files, locks, and queues.")
8849 (license license:bsd-3)))
8850
8851 (define-public python-tables
8852 (package
8853 (name "python-tables")
8854 (version "3.6.1")
8855 (source
8856 (origin
8857 (method url-fetch)
8858 (uri (pypi-uri "tables" version))
8859 (sha256
8860 (base32
8861 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8862 (modules '((guix build utils)))
8863 (snippet
8864 '(begin
8865 ;; Remove pre-compiled .pyc files from source.
8866 (for-each delete-file-recursively
8867 (find-files "." "__pycache__" #:directories? #t))
8868 (for-each delete-file (find-files "." "\\.pyc$"))
8869 #t))))
8870 (build-system python-build-system)
8871 (arguments
8872 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8873 ;; or "check", so we must override the build and check phases.
8874 #:phases
8875 (modify-phases %standard-phases
8876 (add-after 'unpack 'use-gcc
8877 (lambda _
8878 (substitute* "setup.py"
8879 (("^( +)compiler = new_compiler\\(\\)" line indent)
8880 (string-append line
8881 "\n"
8882 indent
8883 "compiler.set_executables(compiler='gcc',"
8884 "compiler_so='gcc',"
8885 "linker_exe='gcc',"
8886 "linker_so='gcc -shared')")))
8887 #t))
8888 (add-after 'unpack 'disable-tuning
8889 (lambda _
8890 (substitute* "setup.py"
8891 (("cpu_flags = .*")
8892 "cpu_flags = ['sse2']\n"))
8893 #t))
8894 (replace 'build
8895 (lambda* (#:key inputs #:allow-other-keys)
8896 (invoke "python" "setup.py" "build"
8897 (string-append "--hdf5="
8898 (assoc-ref inputs "hdf5")))))
8899 (replace 'check
8900 (lambda* (#:key inputs #:allow-other-keys)
8901 (invoke "python" "setup.py" "check"
8902 (string-append "--hdf5="
8903 (assoc-ref inputs "hdf5"))))))))
8904 (propagated-inputs
8905 `(("python-numexpr" ,python-numexpr)
8906 ("python-numpy" ,python-numpy)))
8907 (native-inputs
8908 `(("python-cython" ,python-cython)
8909 ("pkg-config" ,pkg-config)))
8910 (inputs
8911 `(("hdf5" ,hdf5-1.10)
8912 ("bzip2" ,bzip2)
8913 ("zlib" ,zlib)))
8914 (home-page "https://www.pytables.org/")
8915 (synopsis "Hierarchical datasets for Python")
8916 (description "PyTables is a package for managing hierarchical datasets and
8917 designed to efficiently cope with extremely large amounts of data.")
8918 (license license:bsd-3)))
8919
8920 (define-public python2-tables
8921 (package-with-python2 python-tables))
8922
8923 (define-public python-sniffio
8924 (package
8925 (name "python-sniffio")
8926 (version "1.1.0")
8927 (source
8928 (origin
8929 (method url-fetch)
8930 (uri (pypi-uri "sniffio" version))
8931 (sha256
8932 (base32 "08bsp2pp2dxzn9yzcafwzw8jlm0jf50as0ix8vfhxzk91w810f4f"))))
8933 (build-system python-build-system)
8934 (arguments
8935 `(#:phases
8936 (modify-phases %standard-phases
8937 (replace 'check
8938 (lambda _
8939 (invoke "pytest" "-vv"))))))
8940 (native-inputs
8941 `(("python-curio" ,python-curio)
8942 ("python-pytest" ,python-pytest)
8943 ("python-pytest-cov" ,python-pytest-cov)))
8944 (home-page "https://github.com/python-trio/sniffio")
8945 (synopsis "Detect which async library a program is running under")
8946 (description "This package detects which async library a program is
8947 running under. It supports multiple async I/O packages, like Trio, and
8948 asyncio.")
8949 ;; Either license applies.
8950 (license (list license:expat license:asl2.0))))
8951
8952 (define-public python-pytest-black
8953 (package
8954 (name "python-pytest-black")
8955 (version "0.3.8")
8956 (source
8957 (origin
8958 (method url-fetch)
8959 (uri (pypi-uri "pytest-black" version))
8960 (sha256
8961 (base32
8962 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8963 (build-system python-build-system)
8964 (propagated-inputs
8965 `(("python-pytest" ,python-pytest)
8966 ("python-black" ,python-black)
8967 ("python-toml" ,python-toml)))
8968 (native-inputs
8969 `(("python-setuptools-scm" ,python-setuptools-scm)))
8970 (home-page "https://github.com/shopkeep/pytest-black")
8971 (synopsis "Pytest plugin to enable format checking with black")
8972 (description
8973 "This package provides a pytest plugin to enable format checking with the
8974 Python code formatter \"black\".")
8975 (license license:expat)))
8976
8977 (define-public python-get-version
8978 (package
8979 (name "python-get-version")
8980 (version "2.1")
8981 (source
8982 (origin
8983 (method url-fetch)
8984 (uri (pypi-uri "get_version" version))
8985 (sha256
8986 (base32
8987 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8988 (build-system python-build-system)
8989 (propagated-inputs
8990 `(("python-pygments" ,python-pygments)
8991 ("python-pytest" ,python-pytest)
8992 ("python-pytest-black" ,python-pytest-black)
8993 ("python-pytest-cov" ,python-pytest-cov)
8994 ("python-setuptools" ,python-setuptools)
8995 ("python-testpath" ,python-testpath)))
8996 (home-page "https://github.com/flying-sheep/get_version")
8997 (synopsis "Version helper in the spirit of versioneer")
8998 (description
8999 "This package provides a version helper that lets you automatically use
9000 the latest @code{vX.X.X} Git tag as the version in your Python package. It
9001 also supports getting the version from Python source distributions or, once
9002 your package is installed, via @code{pkg_resources} (part of
9003 @code{setuptools}).")
9004 (license license:gpl3+)))
9005
9006 (define-public python-legacy-api-wrap
9007 (package
9008 (name "python-legacy-api-wrap")
9009 (version "1.2")
9010 (source
9011 (origin
9012 (method url-fetch)
9013 (uri (pypi-uri "legacy-api-wrap" version))
9014 (sha256
9015 (base32
9016 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
9017 (build-system python-build-system)
9018 (propagated-inputs
9019 `(("python-get-version" ,python-get-version)
9020 ("python-pytest" ,python-pytest)
9021 ("python-pytest-black" ,python-pytest-black)
9022 ("python-pytest-cov" ,python-pytest-cov)
9023 ("python-setuptools" ,python-setuptools)))
9024 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
9025 (synopsis "Legacy API wrapper")
9026 (description "This module defines a decorator to wrap legacy APIs. The
9027 primary use case is APIs defined before keyword-only parameters existed.")
9028 (license license:gpl3+)))
9029
9030 (define-public python-pyasn1
9031 (package
9032 (name "python-pyasn1")
9033 (version "0.4.8")
9034 (source
9035 (origin
9036 (method url-fetch)
9037 (uri (pypi-uri "pyasn1" version))
9038 (sha256
9039 (base32
9040 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
9041 (build-system python-build-system)
9042 (home-page "http://pyasn1.sourceforge.net/")
9043 (synopsis "ASN.1 types and codecs")
9044 (description
9045 "This is an implementation of ASN.1 types and codecs in Python. It is
9046 suitable for a wide range of protocols based on the ASN.1 specification.")
9047 (license license:bsd-2)))
9048
9049 (define-public python2-pyasn1
9050 (package-with-python2 python-pyasn1))
9051
9052 (define-public python-pyasn1-modules
9053 (package
9054 (name "python-pyasn1-modules")
9055 (version "0.2.2")
9056 (source
9057 (origin
9058 (method url-fetch)
9059 (uri (pypi-uri "pyasn1-modules" version))
9060 (sha256
9061 (base32
9062 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
9063 (build-system python-build-system)
9064 (propagated-inputs
9065 `(("python-pyasn1" ,python-pyasn1)))
9066 (home-page "https://sourceforge.net/projects/pyasn1/")
9067 (synopsis "ASN.1 codec implementations")
9068 (description
9069 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
9070 implementations of ASN.1-based codecs and protocols.")
9071 (license license:bsd-3)))
9072
9073 (define-public python2-pyasn1-modules
9074 (package-with-python2 python-pyasn1-modules))
9075
9076 (define-public python-ipaddress
9077 (package
9078 (name "python-ipaddress")
9079 (version "1.0.22")
9080 (source (origin
9081 (method url-fetch)
9082 (uri (pypi-uri "ipaddress" version))
9083 (sha256
9084 (base32
9085 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
9086 (build-system python-build-system)
9087 (home-page "https://github.com/phihag/ipaddress")
9088 (synopsis "IP address manipulation library")
9089 (description
9090 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
9091 in Python. This library is used to create, poke at, and manipulate IPv4 and
9092 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
9093 module to older versions of Python.")
9094 (license license:psfl)))
9095
9096 (define-public python2-ipaddress
9097 (package-with-python2 python-ipaddress))
9098
9099 (define-public python2-ipaddr
9100 (package
9101 (name "python2-ipaddr")
9102 (version "2.1.11")
9103 (source
9104 (origin
9105 (method url-fetch)
9106 (uri (pypi-uri "ipaddr" version))
9107 (sha256
9108 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
9109 (build-system python-build-system)
9110 (arguments
9111 `(#:python ,python-2 ;version 2 only
9112 #:phases
9113 (modify-phases %standard-phases
9114 (replace 'check
9115 (lambda _ (invoke "python" "ipaddr_test.py"))))))
9116 (home-page "https://github.com/google/ipaddr-py")
9117 (synopsis "IP address manipulation library")
9118 (description
9119 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
9120 IPv6 addresses and networks.
9121
9122 For new implementations you may prefer to use the standard module
9123 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
9124 versions of Python.")
9125 (license license:asl2.0)))
9126
9127 (define-public python-idna
9128 (package
9129 (name "python-idna")
9130 (version "2.9")
9131 (source
9132 (origin
9133 (method url-fetch)
9134 (uri (pypi-uri "idna" version))
9135 (sha256
9136 (base32
9137 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
9138 (build-system python-build-system)
9139 (home-page "https://github.com/kjd/idna")
9140 (synopsis "Internationalized domain names in applications")
9141 (description
9142 "This is a library to support the Internationalised Domain Names in
9143 Applications (IDNA) protocol as specified in RFC 5891. This version of the
9144 protocol is often referred to as “IDNA2008” and can produce different results
9145 from the earlier standard from 2003. The library is also intended to act as a
9146 suitable drop-in replacement for the “encodings.idna” module that comes with
9147 the Python standard library but currently only supports the older 2003
9148 specification.")
9149 (license license:bsd-4)))
9150
9151 (define-public python-idna-2.7
9152 (package (inherit python-idna)
9153 (version "2.7")
9154 (source (origin
9155 (method url-fetch)
9156 (uri (pypi-uri "idna" version))
9157 (sha256
9158 (base32
9159 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
9160
9161
9162 (define-public python2-idna
9163 (package-with-python2 python-idna))
9164
9165 (define-public python-libsass
9166 (package
9167 (name "python-libsass")
9168 (version "0.20.1")
9169 (source
9170 (origin
9171 ;; PyPI tarball is missing some test files.
9172 (method git-fetch)
9173 (uri (git-reference
9174 (url "https://github.com/sass/libsass-python")
9175 (commit version)))
9176 (file-name (git-file-name name version))
9177 (sha256
9178 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
9179 (build-system python-build-system)
9180 (arguments
9181 `(#:phases
9182 (modify-phases %standard-phases
9183 ;; Use Guix package of libsass instead of compiling from a checkout.
9184 (add-before 'build 'set-libsass
9185 (lambda _
9186 (setenv "SYSTEM_SASS" (assoc-ref %build-inputs "libsass"))
9187 #t))
9188 (replace 'check
9189 (lambda* (#:key inputs outputs #:allow-other-keys)
9190 (add-installed-pythonpath inputs outputs)
9191 (invoke "pytest" "sasstests.py"))))))
9192 (native-inputs
9193 `(("python-pytest" ,python-pytest)
9194 ("python-werkzeug" ,python-werkzeug)))
9195 (inputs
9196 `(("libsass" ,libsass)))
9197 (propagated-inputs
9198 `(("python-six" ,python-six)))
9199 (home-page "https://sass.github.io/libsass-python/")
9200 (synopsis "Straightforward binding of libsass for Python")
9201 (description
9202 "This package provides a simple Python extension module @code{sass} which
9203 is binding LibSass.")
9204 (license license:expat)))
9205
9206 (define-public python-idna-ssl
9207 (package
9208 (name "python-idna-ssl")
9209 (version "1.0.1")
9210 (source
9211 (origin
9212 (method url-fetch)
9213 (uri (pypi-uri "idna-ssl" version))
9214 (sha256
9215 (base32
9216 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
9217 (build-system python-build-system)
9218 (arguments
9219 `(#:tests? #f)) ;circular dependency with python-aiohttp
9220 (home-page "https://github.com/aio-libs/idna-ssl")
9221 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
9222 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
9223 domains support.")
9224 (license license:expat)))
9225
9226 (define-public python-pretend
9227 (package
9228 (name "python-pretend")
9229 (version "1.0.9")
9230 (source
9231 (origin
9232 (method url-fetch)
9233 (uri (pypi-uri "pretend" version))
9234 (sha256
9235 (base32
9236 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
9237 (build-system python-build-system)
9238 (home-page "https://github.com/alex/pretend")
9239 (synopsis "Library for stubbing in Python")
9240 (description
9241 "Pretend is a library to make stubbing with Python easier. Stubbing is a
9242 technique for writing tests. You may hear the term mixed up with mocks,
9243 fakes, or doubles. Basically, a stub is an object that returns pre-canned
9244 responses, rather than doing any computation.")
9245 (license license:bsd-3)))
9246
9247 (define-public python2-pretend
9248 (package-with-python2 python-pretend))
9249
9250 (define-public python-pip
9251 (package
9252 (name "python-pip")
9253 (version "20.0.2")
9254 (source
9255 (origin
9256 (method url-fetch)
9257 (uri (pypi-uri "pip" version))
9258 (sha256
9259 (base32
9260 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
9261 (build-system python-build-system)
9262 (arguments
9263 '(#:tests? #f)) ; there are no tests in the pypi archive.
9264 (home-page "https://pip.pypa.io/")
9265 (synopsis "Package manager for Python software")
9266 (description
9267 "Pip is a package manager for Python software, that finds packages on the
9268 Python Package Index (PyPI).")
9269 (license license:expat)))
9270
9271 (define-public python2-pip
9272 (package-with-python2 python-pip))
9273
9274 (define-public python-tlsh
9275 (package
9276 (name "python-tlsh")
9277 (version "3.4.5")
9278 (home-page "https://github.com/trendmicro/tlsh")
9279 (source
9280 (origin
9281 (method git-fetch)
9282 (uri (git-reference
9283 (url "https://github.com/trendmicro/tlsh")
9284 (commit (string-append "v" version))))
9285 (file-name (git-file-name name version))
9286 (sha256
9287 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
9288 (build-system cmake-build-system)
9289 (arguments
9290 '(#:out-of-source? #f
9291 #:phases (modify-phases %standard-phases
9292 (replace
9293 'install
9294 (lambda* (#:key outputs #:allow-other-keys)
9295 ;; Build and install the Python bindings. The underlying
9296 ;; C++ library is apparently not meant to be installed.
9297 (let ((out (assoc-ref outputs "out")))
9298 (with-directory-excursion "py_ext"
9299 (and (system* "python" "setup.py" "build")
9300 (system* "python" "setup.py" "install"
9301 (string-append "--prefix=" out))))))))))
9302 (inputs `(("python" ,python-wrapper))) ;for the bindings
9303 (synopsis "Fuzzy matching library for Python")
9304 (description
9305 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
9306 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
9307 value which can be used for similarity comparisons. Similar objects have
9308 similar hash values, which allows for the detection of similar objects by
9309 comparing their hash values. The byte stream should have a sufficient amount
9310 of complexity; for example, a byte stream of identical bytes will not generate
9311 a hash value.")
9312 (license license:asl2.0)))
9313
9314 (define-public python2-tlsh
9315 (package
9316 (inherit python-tlsh)
9317 (name "python2-tlsh")
9318 (inputs `(("python" ,python-2)))))
9319
9320 (define-public python-termcolor
9321 (package
9322 (name "python-termcolor")
9323 (version "1.1.0")
9324 (source
9325 (origin
9326 (method url-fetch)
9327 (uri (pypi-uri "termcolor" version))
9328 (sha256
9329 (base32
9330 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
9331 (build-system python-build-system)
9332 (arguments
9333 ;; There are no tests.
9334 `(#:tests? #f))
9335 (home-page "https://pypi.org/project/termcolor/")
9336 (synopsis "ANSII Color formatting for terminal output")
9337 (description
9338 "This package provides ANSII Color formatting for output in terminals.")
9339 (license license:expat)))
9340
9341 (define-public python2-termcolor
9342 (package-with-python2 python-termcolor))
9343
9344 (define-public python-terminaltables
9345 (package
9346 (name "python-terminaltables")
9347 (version "3.1.0")
9348 (source
9349 (origin
9350 (method url-fetch)
9351 (uri (pypi-uri "terminaltables" version))
9352 (sha256
9353 (base32
9354 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
9355 (build-system python-build-system)
9356 (home-page "https://github.com/Robpol86/terminaltables")
9357 (synopsis
9358 "Generate simple tables in terminals from a nested list of strings")
9359 (description
9360 "This package makes it easy to draw tables in terminal/console
9361 applications from a list of lists of strings. It supports multi-line rows.")
9362 (license license:expat)))
9363
9364 (define-public python-libarchive-c
9365 (package
9366 (name "python-libarchive-c")
9367 (version "2.9")
9368 (source (origin
9369 (method url-fetch)
9370 (uri (pypi-uri "libarchive-c" version))
9371 (sha256
9372 (base32
9373 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
9374 (build-system python-build-system)
9375 (arguments
9376 '(#:phases (modify-phases %standard-phases
9377 (add-before
9378 'build 'reference-libarchive
9379 (lambda* (#:key inputs #:allow-other-keys)
9380 ;; Retain the absolute file name of libarchive.so.
9381 (let ((libarchive (assoc-ref inputs "libarchive")))
9382 (substitute* "libarchive/ffi.py"
9383 (("find_library\\('archive'\\)")
9384 (string-append "'" libarchive
9385 "/lib/libarchive.so'"))))))
9386 (replace 'check
9387 (lambda _ (invoke "pytest" "-vv"))))))
9388 (native-inputs
9389 `(("python-mock" ,python-mock)
9390 ("python-pytest" ,python-pytest)))
9391 (inputs
9392 `(("libarchive" ,libarchive)))
9393 (home-page "https://github.com/Changaco/python-libarchive-c")
9394 (synopsis "Python interface to libarchive")
9395 (description
9396 "This package provides Python bindings to libarchive, a C library to
9397 access possibly compressed archives in many different formats. It uses
9398 Python's @code{ctypes} foreign function interface (FFI).")
9399 (license license:lgpl2.0+)))
9400
9401 (define-public python2-libarchive-c
9402 (package-with-python2 python-libarchive-c))
9403
9404 (define-public python-file
9405 (package
9406 (inherit file)
9407 (name "python-file")
9408 (build-system python-build-system)
9409 (arguments
9410 '(#:tests? #f ;no tests
9411 #:configure-flags '("--single-version-externally-managed" "--root=/")
9412 #:phases (modify-phases %standard-phases
9413 (add-before 'build 'change-directory
9414 (lambda _
9415 (chdir "python")
9416 #t))
9417 (add-before 'build 'set-library-file-name
9418 (lambda* (#:key inputs #:allow-other-keys)
9419 (let ((file (assoc-ref inputs "file")))
9420 (substitute* "magic.py"
9421 (("find_library\\('magic'\\)")
9422 (string-append "'" file "/lib/libmagic.so'")))
9423 #t))))))
9424 (inputs `(("file" ,file)))
9425 (native-inputs (if (%current-target-system)
9426 `(("self" ,this-package))
9427 '()))
9428 (synopsis "Python bindings to the libmagic file type guesser")
9429 (description "This package provides Python bindings to the libmagic file
9430 type guesser.
9431
9432 Note that this module and the @code{python-magic} module both provide a
9433 @file{magic.py} file; these two modules, which are different and were
9434 developed separately, both serve the same purpose: provide Python bindings for
9435 libmagic.")))
9436
9437 (define-public python2-file
9438 (package-with-python2 python-file))
9439
9440 (define-public python-debian
9441 (package
9442 (name "python-debian")
9443 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
9444 (version "0.1.36")
9445 (source
9446 (origin
9447 ;; Use git-fetch, as pypi doesn't include test suite.
9448 (method git-fetch)
9449 (uri (git-reference
9450 (url home-page)
9451 (commit version)))
9452 (file-name (git-file-name name version))
9453 (sha256
9454 (base32
9455 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
9456 (build-system python-build-system)
9457 (arguments
9458 `(#:phases (modify-phases %standard-phases
9459 (add-after 'unpack 'remove-debian-specific-tests
9460 ;; python-apt, apt and dpkg are not yet available in guix,
9461 ;; and these tests heavily depend on them.
9462 (lambda _
9463 (delete-file "lib/debian/tests/test_deb822.py")
9464 (delete-file "lib/debian/tests/test_debfile.py")
9465 #t)))))
9466 (propagated-inputs
9467 `(("python-six" ,python-six)
9468 ("python-chardet" ,python-chardet)))
9469 (synopsis "Debian package related modules")
9470 (description
9471 ;; XXX: Use @enumerate instead of @itemize to work around
9472 ;; <http://bugs.gnu.org/21772>.
9473 "This package provides Python modules that abstract many formats of
9474 Debian-related files, such as:
9475
9476 @enumerate
9477 @item Debtags information;
9478 @item @file{debian/changelog} files;
9479 @item packages files, pdiffs;
9480 @item control files of single or multiple RFC822-style paragraphs---e.g.
9481 @file{debian/control}, @file{.changes}, @file{.dsc};
9482 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
9483 contained files and meta-information.
9484 @end enumerate\n")
9485
9486 ;; Modules are either GPLv2+ or GPLv3+.
9487 (license license:gpl3+)))
9488
9489 (define-public python-nbformat
9490 (package
9491 (name "python-nbformat")
9492 (version "4.4.0")
9493 (source
9494 (origin
9495 (method url-fetch)
9496 (uri (pypi-uri "nbformat" version))
9497 (sha256
9498 (base32
9499 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
9500 (build-system python-build-system)
9501 (arguments `(#:tests? #f)) ; no test target
9502 (propagated-inputs
9503 `(("python-ipython-genutils" ,python-ipython-genutils)
9504 ("python-jsonschema" ,python-jsonschema)
9505 ("python-jupyter-core" ,python-jupyter-core)
9506 ("python-traitlets" ,python-traitlets)))
9507 (home-page "http://jupyter.org")
9508 (synopsis "Jupyter Notebook format")
9509 (description "This package provides the reference implementation of the
9510 Jupyter Notebook format and Python APIs for working with notebooks.")
9511 (license license:bsd-3)))
9512
9513 (define-public python2-nbformat
9514 (package-with-python2 python-nbformat))
9515
9516 (define-public python-bleach
9517 (package
9518 (name "python-bleach")
9519 (version "3.1.5")
9520 (source
9521 (origin
9522 (method url-fetch)
9523 (uri (pypi-uri "bleach" version))
9524 (sha256
9525 (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
9526 (build-system python-build-system)
9527 (propagated-inputs
9528 `(("python-webencodings" ,python-webencodings)
9529 ("python-six" ,python-six)))
9530 (native-inputs
9531 `(("python-datrie" ,python-datrie)
9532 ("python-genshi" ,python-genshi)
9533 ("python-lxml" ,python-lxml)
9534 ("python-pytest" ,python-pytest)))
9535 (home-page "https://github.com/mozilla/bleach")
9536 (synopsis "Whitelist-based HTML-sanitizing tool")
9537 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
9538 (license license:asl2.0)))
9539
9540 (define-public python2-bleach
9541 (package-with-python2 python-bleach))
9542
9543 (define-public python-entrypoints
9544 (package
9545 (name "python-entrypoints")
9546 (version "0.3")
9547 (source
9548 (origin
9549 (method url-fetch)
9550 (uri (pypi-uri "entrypoints" version))
9551 (sha256
9552 (base32
9553 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
9554 (build-system python-build-system)
9555 ;; The package does not come with a setup.py file, so we have to generate
9556 ;; one ourselves.
9557 (arguments
9558 `(#:tests? #f
9559 #:phases
9560 (modify-phases %standard-phases
9561 (add-after 'unpack 'create-setup.py
9562 (lambda _
9563 (call-with-output-file "setup.py"
9564 (lambda (port)
9565 (format port "\
9566 from setuptools import setup
9567 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
9568 " ,version))))))))
9569 (home-page "https://github.com/takluyver/entrypoints")
9570 (synopsis "Discover and load entry points from installed Python packages")
9571 (description "Entry points are a way for Python packages to advertise
9572 objects with some common interface. The most common examples are
9573 @code{console_scripts} entry points, which define shell commands by
9574 identifying a Python function to run. The @code{entrypoints} module contains
9575 functions to find and load entry points.")
9576 (license license:expat)))
9577
9578 (define-public python2-entrypoints
9579 (package-with-python2 python-entrypoints))
9580
9581 (define-public python-epc
9582 (package
9583 (name "python-epc")
9584 (version "0.0.5")
9585 (source
9586 (origin
9587 (method url-fetch)
9588 (uri (pypi-uri "epc" version))
9589 (sha256
9590 (base32
9591 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
9592 (build-system python-build-system)
9593 (propagated-inputs
9594 `(("python-sexpdata" ,python-sexpdata)))
9595 (native-inputs
9596 `(("python-nose" ,python-nose)))
9597 (home-page "https://github.com/tkf/python-epc")
9598 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
9599 (description
9600 "Python-EPC can call elisp functions from Python and Python functions
9601 from elisp.")
9602 (license license:gpl3)))
9603
9604 (define-public python-forex-python
9605 (package
9606 (name "python-forex-python")
9607 (version "1.5")
9608 (source
9609 (origin
9610 (method url-fetch)
9611 (uri (pypi-uri "forex-python" version))
9612 (sha256
9613 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
9614 (build-system python-build-system)
9615 (arguments
9616 ;; Tests are not included in the PyPI tarball. Also, the tests in the
9617 ;; repository require online data.
9618 `(#:tests? #f))
9619 (propagated-inputs
9620 `(("python-requests" ,python-requests)
9621 ("python-simplejson" ,python-simplejson)))
9622 (home-page "https://github.com/MicroPyramid/forex-python")
9623 (synopsis "Foreign exchange rates and currency conversion")
9624 (description
9625 "@code{python-forex-python} can be used to manipulate foreign
9626 exchange rates and to operate currency conversions.
9627
9628 Features:
9629 @itemize
9630 @item List all currency rates.
9631 @item BitCoin price for all currencies.
9632 @item Converting amount to BitCoins.
9633 @item Get historical rates for any day since 1999.
9634 @item Conversion rate for one currency(ex; USD to INR).
9635 @item Convert amount from one currency to other.('USD 10$' to INR).
9636 @item Currency symbols.
9637 @item Currency names.
9638 @end itemize")
9639 (license license:expat)))
9640
9641 (define-public python-simpleeval
9642 (package
9643 (name "python-simpleeval")
9644 (version "0.9.10")
9645 (source
9646 (origin
9647 (method url-fetch)
9648 (uri (pypi-uri "simpleeval" version))
9649 (sha256
9650 (base32 "1skvl467kj83rzkhk01i0wm8m5vmh6j5znrfdizn6r18ii45a839"))))
9651 (build-system python-build-system)
9652 (home-page "https://github.com/danthedeckie/simpleeval")
9653 (synopsis "Simple, safe single expression evaluator library")
9654 (description
9655 "This package provides a quick single file library for easily adding
9656 evaluatable expressions into python projects. Say you want to allow a user
9657 to set an alarm volume, which could depend on the time of day, alarm level,
9658 how many previous alarms had gone off, and if there is music playing at the
9659 time.")
9660 (license license:expat)))
9661
9662 (define-public python-nbconvert
9663 (package
9664 (name "python-nbconvert")
9665 (version "5.0.0b1")
9666 (source
9667 (origin
9668 (method url-fetch)
9669 (uri (pypi-uri "nbconvert" version))
9670 (sha256
9671 (base32
9672 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
9673 (build-system python-build-system)
9674 (arguments
9675 `(;; The "bdist_egg" target is disabled by default, causing the installation
9676 ;; to fail.
9677 #:configure-flags (list "bdist_egg")
9678 ;; FIXME: 5 failures, 40 errors.
9679 #:tests? #f))
9680 ;; #:phases
9681 ;; (modify-phases %standard-phases
9682 ;; (replace 'check
9683 ;; (lambda _
9684 ;; (zero? (system* "py.test" "-v")))))
9685 (native-inputs
9686 `(("python-pytest" ,python-pytest)))
9687 (propagated-inputs
9688 `(("python-bleach" ,python-bleach)
9689 ("python-entrypoints" ,python-entrypoints)
9690 ("python-jinja2" ,python-jinja2)
9691 ("python-jupyter-core" ,python-jupyter-core)
9692 ("python-mistune" ,python-mistune)
9693 ("python-nbformat" ,python-nbformat)
9694 ("python-pygments" ,python-pygments)
9695 ("python-traitlets" ,python-traitlets)))
9696 (home-page "http://jupyter.org")
9697 (synopsis "Converting Jupyter Notebooks")
9698 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
9699 notebooks to various other formats via Jinja templates. It allows you to
9700 convert an @code{.ipynb} notebook file into various static formats including:
9701
9702 @enumerate
9703 @item HTML
9704 @item LaTeX
9705 @item PDF
9706 @item Reveal JS
9707 @item Markdown (md)
9708 @item ReStructured Text (rst)
9709 @item executable script
9710 @end enumerate\n")
9711 (license license:bsd-3)))
9712
9713 (define-public python2-nbconvert
9714 (package-with-python2 python-nbconvert))
9715
9716 (define-public python-notebook
9717 (package
9718 (name "python-notebook")
9719 (version "5.7.4")
9720 (source (origin
9721 (method url-fetch)
9722 (uri (pypi-uri "notebook" version))
9723 (sha256
9724 (base32
9725 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
9726 (build-system python-build-system)
9727 (arguments
9728 `(#:phases
9729 (modify-phases %standard-phases
9730 (replace 'check
9731 (lambda _
9732 ;; These tests require a browser
9733 (delete-file-recursively "notebook/tests/selenium")
9734 ;; Some tests need HOME
9735 (setenv "HOME" "/tmp")
9736 ;; This file contains "warningfilters", which are not supported
9737 ;; by this version of nose.
9738 (delete-file "setup.cfg")
9739 (with-directory-excursion "/tmp"
9740 (invoke "nosetests" "-v"))
9741 #t)))))
9742 (propagated-inputs
9743 `(("python-jupyter-core" ,python-jupyter-core)
9744 ("python-nbformat" ,python-nbformat)
9745 ("python-nbconvert" ,python-nbconvert)
9746 ("python-prometheus-client" ,python-prometheus-client)
9747 ("python-send2trash" ,python-send2trash)
9748 ("python-terminado" ,python-terminado)))
9749 (native-inputs
9750 `(("python-nose" ,python-nose)
9751 ("python-sphinx" ,python-sphinx)
9752 ("python-requests" ,python-requests)))
9753 (home-page "http://jupyter.org/")
9754 (synopsis "Web-based notebook environment for interactive computing")
9755 (description
9756 "The Jupyter HTML notebook is a web-based notebook environment for
9757 interactive computing.")
9758 (properties `((python2-variant . ,(delay python2-notebook))))
9759 (license license:bsd-3)))
9760
9761 (define-public python2-notebook
9762 (let ((base (package-with-python2
9763 (strip-python2-variant python-notebook))))
9764 (package (inherit base)
9765 (native-inputs
9766 `(("python2-mock" ,python2-mock)
9767 ,@(package-native-inputs base)))
9768 (arguments
9769 (substitute-keyword-arguments (package-arguments base)
9770 ((#:phases phases)
9771 `(modify-phases ,phases
9772 (add-before 'check 'disable-test-case
9773 ;; The test requires network access to localhost. Curiously it
9774 ;; fails with Python 2 only. Simply make the test-case return
9775 ;; immediately.
9776 (lambda _
9777 (substitute*
9778 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
9779 (("formats = self.nbconvert_api") "return #")))))))))))
9780
9781 (define-public python-widgetsnbextension
9782 (package
9783 (name "python-widgetsnbextension")
9784 (version "3.5.1")
9785 (source
9786 (origin
9787 (method url-fetch)
9788 (uri (pypi-uri "widgetsnbextension" version))
9789 (sha256
9790 (base32
9791 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9792 (build-system python-build-system)
9793 (propagated-inputs
9794 `(("python-ipykernel" ,python-ipykernel)
9795 ("python-notebook" ,python-notebook)))
9796 (native-inputs
9797 `(("python-certifi" ,python-certifi)
9798 ("python-nose" ,python-nose)))
9799 (home-page "https://ipython.org")
9800 (synopsis "IPython HTML widgets for Jupyter")
9801 (description "This package provides interactive HTML widgets for Jupyter
9802 notebooks.")
9803 (license license:bsd-3)))
9804
9805 (define-public python2-widgetsnbextension
9806 (package-with-python2 python-widgetsnbextension))
9807
9808 (define-public python-ipywidgets
9809 (package
9810 (name "python-ipywidgets")
9811 (version "7.5.1")
9812 (source
9813 (origin
9814 (method url-fetch)
9815 (uri (pypi-uri "ipywidgets" version))
9816 (sha256
9817 (base32
9818 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9819 (build-system python-build-system)
9820 (propagated-inputs
9821 `(("python-ipython" ,python-ipython)
9822 ("python-traitlets" ,python-traitlets)
9823 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9824 (native-inputs
9825 `(("python-nose" ,python-nose)
9826 ("python-pytest" ,python-pytest)))
9827 (home-page "https://ipython.org")
9828 (synopsis "IPython HTML widgets for Jupyter")
9829 (description "Ipywidgets are interactive HTML widgets for Jupyter
9830 notebooks and the IPython kernel. Notebooks come alive when interactive
9831 widgets are used. Users gain control of their data and can visualize changes
9832 in the data.")
9833 (license license:bsd-3)))
9834
9835 (define-public python2-ipywidgets
9836 (package-with-python2 python-ipywidgets))
9837
9838 (define-public python-jupyter-console
9839 (package
9840 (name "python-jupyter-console")
9841 (version "6.1.0")
9842 (source
9843 (origin
9844 (method url-fetch)
9845 (uri (pypi-uri "jupyter_console" version))
9846 (sha256
9847 (base32
9848 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9849 (build-system python-build-system)
9850 (propagated-inputs
9851 `(("python-ipykernel" ,python-ipykernel)
9852 ("python-jupyter-client" ,python-jupyter-client)
9853 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9854 ("python-pygments" ,python-pygments)))
9855 (native-inputs
9856 `(("python-nose" ,python-nose)))
9857 (home-page "https://jupyter.org")
9858 (synopsis "Jupyter terminal console")
9859 (description "This package provides a terminal-based console frontend for
9860 Jupyter kernels. It also allows for console-based interaction with non-Python
9861 Jupyter kernels such as IJulia and IRKernel.")
9862 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9863 (license license:bsd-3)))
9864
9865 (define-public python2-jupyter-console
9866 (package
9867 (name "python2-jupyter-console")
9868 (version "5.2.0")
9869 (source
9870 (origin
9871 (method url-fetch)
9872 (uri (pypi-uri "jupyter_console" version))
9873 (sha256
9874 (base32
9875 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9876 (build-system python-build-system)
9877 (arguments
9878 `(#:python ,python-2
9879 #:tests? #f)) ; Tests only run in a TTY.
9880 (propagated-inputs
9881 `(("python2-ipykernel" ,python2-ipykernel)
9882 ("python2-jupyter-client" ,python2-jupyter-client)
9883 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9884 ("python2-pygments" ,python2-pygments)))
9885 (native-inputs
9886 `(("python2-nose" ,python2-nose)))
9887 (home-page "https://jupyter.org")
9888 (synopsis "Jupyter terminal console")
9889 (description "This package provides a terminal-based console frontend for
9890 Jupyter kernels. It also allows for console-based interaction with non-Python
9891 Jupyter kernels such as IJulia and IRKernel.")
9892 (license license:bsd-3)))
9893
9894 ;; The python-ipython and python-jupyter-console require each other. To get
9895 ;; the functionality in both packages working, strip down the
9896 ;; python-jupyter-console package when using it as an input to python-ipython.
9897 (define python-jupyter-console-minimal
9898 (package
9899 (inherit python-jupyter-console)
9900 (name "python-jupyter-console-minimal")
9901 (arguments
9902 (substitute-keyword-arguments
9903 (package-arguments python-jupyter-console)
9904 ((#:phases phases)
9905 `(modify-phases ,phases
9906 (add-after 'install 'delete-bin
9907 (lambda* (#:key outputs #:allow-other-keys)
9908 ;; Delete the bin files, to avoid conflicts in profiles
9909 ;; where python-ipython and python-jupyter-console are
9910 ;; both present.
9911 (delete-file-recursively
9912 (string-append
9913 (assoc-ref outputs "out") "/bin"))))))))
9914 ;; Remove the python-ipython propagated input, to avoid the cycle
9915 (propagated-inputs
9916 (alist-delete
9917 "python-ipython"
9918 (package-propagated-inputs python-jupyter-console)))))
9919
9920 (define-public python-qtconsole
9921 (package
9922 (name "python-qtconsole")
9923 (version "4.4.3")
9924 (source
9925 (origin
9926 (method url-fetch)
9927 (uri (pypi-uri "qtconsole" version))
9928 (sha256
9929 (base32
9930 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9931 (build-system python-build-system)
9932 (arguments
9933 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9934 ;; but we only have the LTS version 5.x. This means that there might be
9935 ;; runtime errors, but since this is a dependency of the Jupyter package,
9936 ;; and Jupyter can be used without the qtconsole we can overlook this for
9937 ;; now.
9938 `(#:tests? #f
9939 #:phases
9940 (modify-phases %standard-phases
9941 (add-before 'check 'pre-check
9942 (lambda _
9943 (setenv "QT_QPA_PLATFORM" "offscreen")
9944 #t)))))
9945 (propagated-inputs
9946 `(("python-ipykernel" ,python-ipykernel)
9947 ("python-ipython" ,python-ipython)))
9948 (native-inputs
9949 `(("python-pytest" ,python-pytest)))
9950 (home-page "http://jupyter.org")
9951 (synopsis "Jupyter Qt console")
9952 (description "This package provides a Qt-based console for Jupyter with
9953 support for rich media output.")
9954 (license license:bsd-3)))
9955
9956 (define-public python-jsbeautifier
9957 (package
9958 (name "python-jsbeautifier")
9959 (version "1.10.2")
9960 (home-page "https://github.com/beautify-web/js-beautify")
9961 (source (origin
9962 (method git-fetch)
9963 (uri (git-reference
9964 (url home-page)
9965 (commit (string-append "v" version))))
9966 (file-name (git-file-name name version))
9967 (sha256
9968 (base32
9969 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9970 (build-system python-build-system)
9971 (arguments
9972 `(#:phases (modify-phases %standard-phases
9973 (add-after 'unpack 'chdir
9974 (lambda _
9975 ;; The upstream Git repository contains all the code,
9976 ;; but this package only builds the python code.
9977 (chdir "python")
9978 #t))
9979 (add-after 'unpack 'patch-python-six-requirements
9980 (lambda _
9981 (substitute* "python/setup.py"
9982 (("six>=1.12.0")
9983 "six>=1.11.0"))
9984 #t)))))
9985 (propagated-inputs
9986 `(("python-editorconfig" ,python-editorconfig)
9987 ("python-six" ,python-six)))
9988 (native-inputs
9989 `(("python-pytest" ,python-pytest)))
9990 (synopsis "JavaScript unobfuscator and beautifier")
9991 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9992 popular online obfuscators.")
9993 (license license:expat)))
9994
9995 (define-public jupyter
9996 (package
9997 (name "jupyter")
9998 (version "1.0.0")
9999 (source
10000 (origin
10001 (method url-fetch)
10002 (uri (pypi-uri "jupyter" version))
10003 (sha256
10004 (base32
10005 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
10006 (build-system python-build-system)
10007 (arguments '(#:tests? #f)) ; there are none.
10008 (propagated-inputs
10009 `(("python-ipykernel" ,python-ipykernel)
10010 ("python-ipywidgets" ,python-ipywidgets)
10011 ("python-jupyter-console" ,python-jupyter-console)
10012 ("python-nbconvert" ,python-nbconvert)
10013 ("python-notebook" ,python-notebook)
10014 ("python-qtconsole" ,python-qtconsole)))
10015 (native-search-paths
10016 (list (search-path-specification
10017 (variable "JUPYTER_PATH")
10018 (files '("share/jupyter")))))
10019 (home-page "https://jupyter.org")
10020 (synopsis "Web application for interactive documents")
10021 (description
10022 "The Jupyter Notebook is a web application that allows you to create and
10023 share documents that contain live code, equations, visualizations and
10024 explanatory text. Uses include: data cleaning and transformation, numerical
10025 simulation, statistical modeling, machine learning and much more.")
10026 (license license:bsd-3)))
10027
10028 (define-public python-chardet
10029 (package
10030 (name "python-chardet")
10031 (version "3.0.4")
10032 (source
10033 (origin
10034 (method url-fetch)
10035 (uri (pypi-uri "chardet" version))
10036 (sha256
10037 (base32
10038 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
10039 (native-inputs
10040 `(("python-hypothesis" ,python-hypothesis)
10041 ("python-pytest" ,python-pytest)
10042 ("python-pytest-runner" ,python-pytest-runner)))
10043 (build-system python-build-system)
10044 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
10045 (arguments `(#:tests? #f))
10046 (home-page "https://github.com/chardet/chardet")
10047 (synopsis "Universal encoding detector for Python 2 and 3")
10048 (description
10049 "This package provides @code{chardet}, a Python module that can
10050 automatically detect a wide range of file encodings.")
10051 (license license:lgpl2.1+)))
10052
10053 (define-public python2-chardet
10054 (package-with-python2 python-chardet))
10055
10056 (define-public python-docopt
10057 (package
10058 (name "python-docopt")
10059 (version "0.6.2")
10060 (source
10061 (origin
10062 (method git-fetch)
10063 ;; The release on PyPI does not include tests.
10064 (uri (git-reference
10065 (url "https://github.com/docopt/docopt")
10066 (commit version)))
10067 (file-name (git-file-name name version))
10068 (sha256
10069 (base32
10070 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
10071 (build-system python-build-system)
10072 (native-inputs
10073 `(("python-pytest" ,python-pytest)))
10074 (arguments
10075 `(#:phases
10076 (modify-phases %standard-phases
10077 (replace 'check
10078 (lambda _ (invoke "py.test"))))))
10079 (home-page "http://docopt.org")
10080 (synopsis "Command-line interface description language for Python")
10081 (description "This library allows the user to define a command-line
10082 interface from a program's help message rather than specifying it
10083 programmatically with command-line parsers like @code{getopt} and
10084 @code{argparse}.")
10085 (license license:expat)))
10086
10087 (define-public python2-docopt
10088 (package-with-python2 python-docopt))
10089
10090 (define-public python-pythondialog
10091 (package
10092 (name "python-pythondialog")
10093 (version "3.4.0")
10094 (source
10095 (origin
10096 (method url-fetch)
10097 (uri (pypi-uri "pythondialog" version))
10098 (sha256
10099 (base32
10100 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
10101 (build-system python-build-system)
10102 (arguments
10103 `(#:phases
10104 (modify-phases %standard-phases
10105 (add-after 'unpack 'patch-path
10106 (lambda* (#:key inputs #:allow-other-keys)
10107 (let* ((dialog (assoc-ref inputs "dialog")))
10108 ;; Since this library really wants to grovel the search path, we
10109 ;; must hardcode dialog's store path into it.
10110 (substitute* "dialog.py"
10111 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
10112 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
10113 #t))))
10114 #:tests? #f)) ; no test suite
10115 (propagated-inputs
10116 `(("dialog" ,dialog)))
10117 (home-page "http://pythondialog.sourceforge.net/")
10118 (synopsis "Python interface to the UNIX dialog utility")
10119 (description "A Python wrapper for the dialog utility. Its purpose is to
10120 provide an easy to use, pythonic and comprehensive Python interface to dialog.
10121 This allows one to make simple text-mode user interfaces on Unix-like systems")
10122 (license license:lgpl2.1)
10123 (properties `((python2-variant . ,(delay python2-pythondialog))))))
10124
10125 (define-public python2-pythondialog
10126 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
10127 (package
10128 (inherit base)
10129 (version (package-version python-pythondialog))
10130 (source (origin
10131 (method url-fetch)
10132 (uri (pypi-uri "python2-pythondialog" version))
10133 (sha256
10134 (base32
10135 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
10136
10137 (define-public python-configobj
10138 (package
10139 (name "python-configobj")
10140 (version "5.0.6")
10141 (source (origin
10142 (method url-fetch)
10143 (uri (pypi-uri "configobj" version))
10144 (sha256
10145 (base32
10146 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
10147 ;; Patch setup.py so it looks for python-setuptools, which is
10148 ;; required to parse the keyword 'install_requires' in setup.py.
10149 (patches (search-patches "python-configobj-setuptools.patch"))))
10150 (build-system python-build-system)
10151 (propagated-inputs
10152 `(("python-six" ,python-six)))
10153 (synopsis "Config file reading, writing and validation")
10154 (description "ConfigObj is a simple but powerful config file reader and
10155 writer: an ini file round tripper. Its main feature is that it is very easy to
10156 use, with a straightforward programmer’s interface and a simple syntax for
10157 config files.")
10158 (home-page "https://github.com/DiffSK/configobj")
10159 (license license:bsd-3)))
10160
10161 (define-public python2-configobj
10162 (package-with-python2 python-configobj))
10163
10164 (define-public python-configargparse
10165 (package
10166 (name "python-configargparse")
10167 (version "0.14.0")
10168 (source (origin
10169 (method url-fetch)
10170 (uri (pypi-uri "ConfigArgParse" version))
10171 (sha256
10172 (base32
10173 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
10174 (build-system python-build-system)
10175 (native-inputs
10176 `(("python-pyyaml" ,python-pyyaml)))
10177 (arguments
10178 `(#:phases
10179 (modify-phases %standard-phases
10180 (replace 'check
10181 (lambda _
10182 ;; Bypass setuptools-shim because one test relies on "setup.py"
10183 ;; being the first argument passed to the python call.
10184 ;;
10185 ;; NOTE: Many tests do not run because they rely on Python's
10186 ;; built-in test.test_argparse, but we remove the unit tests from
10187 ;; our Python installation.
10188 (invoke "python" "setup.py" "test"))))))
10189 (synopsis "Replacement for argparse")
10190 (description "A drop-in replacement for argparse that allows options to also
10191 be set via config files and/or environment variables.")
10192 (home-page "https://github.com/bw2/ConfigArgParse")
10193 (license license:expat)))
10194
10195 (define-public python2-configargparse
10196 (package-with-python2 python-configargparse))
10197
10198 (define-public python-argparse-manpage
10199 (package
10200 (name "python-argparse-manpage")
10201 (version "1.1")
10202 (source
10203 (origin
10204 (method url-fetch)
10205 (uri (pypi-uri "argparse-manpage" version))
10206 (sha256
10207 (base32
10208 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
10209 (build-system python-build-system)
10210 (home-page "https://github.com/praiskup/argparse-manpage")
10211 (synopsis "Build manual page from Python's ArgumentParser object")
10212 (description
10213 "This package provides tools to build manual pages from Python's
10214 @code{ArgumentParser} object.")
10215 (license license:asl2.0)))
10216
10217 (define-public python-contextlib2
10218 (package
10219 (name "python-contextlib2")
10220 (version "0.6.0.post1")
10221 (source
10222 (origin
10223 (method url-fetch)
10224 (uri (pypi-uri "contextlib2" version))
10225 (sha256
10226 (base32
10227 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
10228 (build-system python-build-system)
10229 (home-page "https://contextlib2.readthedocs.org/")
10230 (synopsis "Tools for decorators and context managers")
10231 (description "This module is primarily a backport of the Python
10232 3.2 contextlib to earlier Python versions. Like contextlib, it
10233 provides utilities for common tasks involving decorators and context
10234 managers. It also contains additional features that are not part of
10235 the standard library.")
10236 (properties `((python2-variant . ,(delay python2-contextlib2))))
10237 (license license:psfl)))
10238
10239 (define-public python2-contextlib2
10240 (let ((base (package-with-python2
10241 (strip-python2-variant python-contextlib2))))
10242 (package
10243 (inherit base)
10244 (arguments
10245 (substitute-keyword-arguments (package-arguments base)
10246 ((#:phases phases)
10247 `(modify-phases ,phases
10248 (replace 'check
10249 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
10250 (native-inputs
10251 `(("python2-unittest2" ,python2-unittest2))))))
10252
10253 ;; This package is used by python2-pytest via python2-importlib-metadata,
10254 ;; and thus can not depend on python-unittest2 (which depends on pytest).
10255 (define-public python2-contextlib2-bootstrap
10256 (hidden-package
10257 (package/inherit
10258 python2-contextlib2
10259 (name "python2-contextlib2-bootstrap")
10260 (arguments
10261 `(#:tests? #f
10262 ,@(package-arguments python2-contextlib2)))
10263 (native-inputs '()))))
10264
10265 (define-public python-texttable
10266 (package
10267 (name "python-texttable")
10268 (version "1.6.2")
10269 (source
10270 (origin
10271 (method url-fetch)
10272 (uri (pypi-uri "texttable" version))
10273 (sha256
10274 (base32
10275 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
10276 (build-system python-build-system)
10277 (arguments
10278 `(#:phases
10279 (modify-phases %standard-phases
10280 (replace 'check
10281 (lambda _ (invoke "pytest" "tests.py"))))))
10282 (native-inputs
10283 `(("python-pytest" ,python-pytest)))
10284 (home-page "https://github.com/foutaise/texttable/")
10285 (synopsis "Python module for creating simple ASCII tables")
10286 (description "Texttable is a Python module for creating simple ASCII
10287 tables.")
10288 (license license:expat)))
10289
10290 (define-public python2-texttable
10291 (package-with-python2 python-texttable))
10292
10293 (define-public python-atomicwrites
10294 (package
10295 (name "python-atomicwrites")
10296 (version "1.3.0")
10297 (source (origin
10298 (method url-fetch)
10299 (uri (pypi-uri "atomicwrites" version))
10300 (sha256
10301 (base32
10302 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
10303 (build-system python-build-system)
10304 (synopsis "Atomic file writes in Python")
10305 (description "Library for atomic file writes using platform dependent tools
10306 for atomic file system operations.")
10307 (home-page "https://github.com/untitaker/python-atomicwrites")
10308 (license license:expat)))
10309
10310 (define-public python2-atomicwrites
10311 (package-with-python2 python-atomicwrites))
10312
10313 (define-public python-click-threading
10314 (package
10315 (name "python-click-threading")
10316 (version "0.4.4")
10317 (source (origin
10318 (method url-fetch)
10319 (uri (pypi-uri "click-threading" version))
10320 (sha256
10321 (base32
10322 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
10323 (build-system python-build-system)
10324 (propagated-inputs
10325 `(("python-click" ,python-click)))
10326 (synopsis "Utilities for multithreading in Click")
10327 (description "This package provides utilities for multithreading in Click
10328 applications.")
10329 (home-page "https://github.com/click-contrib/click-threading")
10330 (license license:expat)))
10331
10332 (define-public python-click-log
10333 (package
10334 (name "python-click-log")
10335 (version "0.3.2")
10336 (source (origin
10337 (method url-fetch)
10338 (uri (pypi-uri "click-log" version))
10339 (sha256
10340 (base32
10341 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
10342 (build-system python-build-system)
10343 (propagated-inputs
10344 `(("python-click" ,python-click)))
10345 (synopsis "Logging for click applications")
10346 (description "This package provides a Python library for logging Click
10347 applications.")
10348 (home-page "https://github.com/click-contrib/click-log")
10349 (license license:expat)))
10350
10351 (define-public python-apipkg
10352 (package
10353 (name "python-apipkg")
10354 (version "1.5")
10355 (source (origin
10356 (method url-fetch)
10357 (uri (pypi-uri "apipkg" version))
10358 (sha256
10359 (base32
10360 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
10361 (build-system python-build-system)
10362 (native-inputs
10363 `(("python-pytest" ,python-pytest)
10364 ("python-setuptools-scm" ,python-setuptools-scm)))
10365 (synopsis "Namespace control and lazy-import mechanism")
10366 (description "With apipkg you can control the exported namespace of a Python
10367 package and greatly reduce the number of imports for your users. It is a small
10368 pure Python module that works on virtually all Python versions.")
10369 (home-page "https://github.com/pytest-dev/apipkg")
10370 (license license:expat)))
10371
10372 (define-public python-execnet
10373 (package
10374 (name "python-execnet")
10375 (version "1.4.1")
10376 (source (origin
10377 (method url-fetch)
10378 (uri (pypi-uri "execnet" version))
10379 (sha256
10380 (base32
10381 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
10382 (build-system python-build-system)
10383 (arguments
10384 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
10385 ;; The two test failures are caused by the lack of an `ssh` executable.
10386 ;; The test suite can be run with pytest after the 'install' phase.
10387 #:tests? #f))
10388 (native-inputs
10389 `(("python-pytest" ,python-pytest)
10390 ("python-setuptools-scm" ,python-setuptools-scm)))
10391 (propagated-inputs
10392 `(("python-apipkg" ,python-apipkg)))
10393 (synopsis "Rapid multi-Python deployment")
10394 (description "Execnet provides a share-nothing model with
10395 channel-send/receive communication for distributing execution across many
10396 Python interpreters across version, platform and network barriers. It has a
10397 minimal and fast API targeting the following uses:
10398 @enumerate
10399 @item distribute tasks to (many) local or remote CPUs
10400 @item write and deploy hybrid multi-process applications
10401 @item write scripts to administer multiple environments
10402 @end enumerate")
10403 (home-page "https://codespeak.net/execnet/")
10404 (license license:expat)))
10405
10406 (define-public python2-execnet
10407 (package-with-python2 python-execnet))
10408
10409 (define-public python-icalendar
10410 (package
10411 (name "python-icalendar")
10412 (version "4.0.5")
10413 (source (origin
10414 (method url-fetch)
10415 (uri (pypi-uri "icalendar" version))
10416 (sha256
10417 (base32
10418 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
10419 (build-system python-build-system)
10420 (propagated-inputs
10421 `(("python-dateutil" ,python-dateutil)
10422 ("python-pytz" ,python-pytz)))
10423 (synopsis "Python library for parsing iCalendar files")
10424 (description "The icalendar package is a parser/generator of iCalendar
10425 files for use with Python.")
10426 (home-page "https://github.com/collective/icalendar")
10427 (license license:bsd-2)))
10428
10429 (define-public python-args
10430 (package
10431 (name "python-args")
10432 (version "0.1.0")
10433 (source (origin
10434 (method url-fetch)
10435 (uri (pypi-uri "args" version))
10436 (sha256
10437 (base32
10438 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
10439 (build-system python-build-system)
10440 (home-page "https://github.com/kennethreitz/args")
10441 (synopsis "Command-line argument parser")
10442 (description
10443 "This library provides a Python module to parse command-line arguments.")
10444 (license license:bsd-3)))
10445
10446 (define-public python2-args
10447 (package-with-python2 python-args))
10448
10449 (define-public python-clint
10450 (package
10451 (name "python-clint")
10452 (version "0.5.1")
10453 (source (origin
10454 (method url-fetch)
10455 (uri (pypi-uri "clint" version))
10456 (sha256
10457 (base32
10458 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
10459 (build-system python-build-system)
10460 (arguments
10461 '(#:phases
10462 (modify-phases %standard-phases
10463 (replace 'check
10464 (lambda _ (invoke "py.test" "-v"))))))
10465 (native-inputs
10466 `(("python-pytest" ,python-pytest)))
10467 (propagated-inputs
10468 `(("python-args" ,python-args)))
10469 (home-page "https://github.com/kennethreitz/clint")
10470 (synopsis "Command-line interface tools")
10471 (description
10472 "Clint is a Python module filled with a set of tools for developing
10473 command-line applications, including tools for colored and indented
10474 output, progress bar display, and pipes.")
10475 (license license:isc)))
10476
10477 (define-public python2-clint
10478 (package-with-python2 python-clint))
10479
10480 (define-public python-rply
10481 (package
10482 (name "python-rply")
10483 (version "0.7.5")
10484 (source (origin
10485 (method url-fetch)
10486 (uri (pypi-uri "rply" version))
10487 (sha256
10488 (base32
10489 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
10490 (build-system python-build-system)
10491 (propagated-inputs
10492 `(("python-appdirs" ,python-appdirs)))
10493 (home-page "https://github.com/alex/rply")
10494 (synopsis "Parser generator for Python")
10495 (description
10496 "This package provides a pure Python based parser generator, that also
10497 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
10498 with a new public API, and RPython support.")
10499 (license license:bsd-3)))
10500
10501 (define-public python2-rply
10502 (package-with-python2 python-rply))
10503
10504 (define-public python-hy
10505 (package
10506 (name "python-hy")
10507 (version "0.18.0")
10508 (source (origin
10509 (method url-fetch)
10510 (uri (pypi-uri "hy" version))
10511 (sha256
10512 (base32
10513 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
10514 (build-system python-build-system)
10515 (arguments
10516 '(#:phases
10517 (modify-phases %standard-phases
10518 (add-before 'install 'set-HOME
10519 (lambda _
10520 (setenv "HOME" "/tmp") #t))
10521 (replace 'check
10522 (lambda _
10523 ;; Tests require write access to HOME.
10524 (setenv "HOME" "/tmp")
10525 (invoke "nosetests"))))))
10526 (native-inputs
10527 `(("python-coverage" ,python-coverage)
10528 ("python-nose" ,python-nose)))
10529 (propagated-inputs
10530 `(("python-astor" ,python-astor)
10531 ("python-colorama" ,python-colorama)
10532 ("python-rply" ,python-rply)
10533 ("python-funcparserlib"
10534 ,python-funcparserlib)))
10535 (home-page "http://hylang.org/")
10536 (synopsis "Lisp frontend to Python")
10537 (description
10538 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
10539 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
10540 Python at your fingertips, in Lisp form.")
10541 (license license:expat)))
10542
10543 (define-public python2-functools32
10544 (package
10545 (name "python2-functools32")
10546 (version "3.2.3-2")
10547 (source
10548 (origin
10549 (method url-fetch)
10550 (uri (pypi-uri "functools32" version))
10551 (sha256
10552 (base32
10553 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
10554 (build-system python-build-system)
10555 (arguments
10556 `(#:python ,python-2
10557 #:tests? #f)) ; no test target
10558 (home-page "https://github.com/MiCHiLU/python-functools32")
10559 (synopsis
10560 "Backport of the functools module from Python 3.2.3")
10561 (description
10562 "This package is a backport of the @code{functools} module from Python
10563 3.2.3 for use with older versions of Python and PyPy.")
10564 (license license:expat)))
10565
10566 (define-public python2-subprocess32
10567 (package
10568 (name "python2-subprocess32")
10569 (version "3.2.7")
10570 (source (origin
10571 (method url-fetch)
10572 (uri (pypi-uri "subprocess32" version))
10573 (sha256
10574 (base32
10575 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
10576 (patches
10577 (search-patches "python2-subprocess32-disable-input-test.patch"))))
10578 (build-system python-build-system)
10579 (arguments
10580 `(#:python ,python-2
10581 ;; The test suite fails with Python > 2.7.13:
10582 ;; import test.support
10583 ;; ImportError: No module named support
10584 #:tests? #f
10585 #:phases
10586 (modify-phases %standard-phases
10587 (add-after 'unpack 'patch-/bin/sh
10588 (lambda _
10589 (substitute* '("subprocess32.py"
10590 "test_subprocess32.py")
10591 (("/bin/sh") (which "sh")))
10592 #t)))))
10593 (home-page "https://github.com/google/python-subprocess32")
10594 (synopsis "Backport of the subprocess module from Python 3.2")
10595 (description
10596 "This is a backport of the @code{subprocess} standard library module
10597 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
10598 new features. On POSIX systems it is guaranteed to be reliable when used
10599 in threaded applications. It includes timeout support from Python 3.3 but
10600 otherwise matches 3.2’s API.")
10601 (license license:psfl)))
10602
10603 (define-public python2-futures
10604 (package
10605 (name "python2-futures")
10606 (version "3.2.0")
10607 (source
10608 (origin
10609 (method url-fetch)
10610 (uri (pypi-uri "futures" version))
10611 (sha256
10612 (base32
10613 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
10614 (build-system python-build-system)
10615 (arguments
10616 `(#:python ,python-2
10617 #:phases
10618 (modify-phases %standard-phases
10619 (replace 'check
10620 (lambda _
10621 (invoke "python" "test_futures.py")
10622 #t)))))
10623 (home-page "https://github.com/agronholm/pythonfutures")
10624 (synopsis
10625 "Backport of the concurrent.futures package from Python 3.2")
10626 (description
10627 "The concurrent.futures module provides a high-level interface for
10628 asynchronously executing callables. This package backports the
10629 concurrent.futures package from Python 3.2")
10630 (license license:bsd-3)))
10631
10632 (define-public python-promise
10633 (package
10634 (name "python-promise")
10635 (version "0.4.2")
10636 (source
10637 (origin
10638 (method url-fetch)
10639 (uri (pypi-uri "promise" version))
10640 (sha256
10641 (base32
10642 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
10643 (build-system python-build-system)
10644 ;; Tests wants python-futures, which is a python2 only program, and
10645 ;; can't be found by python-promise at test time.
10646 (arguments `(#:tests? #f))
10647 (home-page "https://github.com/syrusakbary/promise")
10648 (synopsis "Promises/A+ implementation for Python")
10649 (description
10650 "Promises/A+ implementation for Python")
10651 (properties `((python2-variant . ,(delay python2-promise))))
10652 (license license:expat)))
10653
10654 (define-public python2-promise
10655 (let ((promise (package-with-python2
10656 (strip-python2-variant python-promise))))
10657 (package (inherit promise)
10658 (arguments (substitute-keyword-arguments (package-arguments promise)
10659 ((#:tests? _) #t)))
10660 (native-inputs
10661 `(("python2-futures" ,python2-futures)
10662 ("python2-pytest" ,python2-pytest)
10663 ,@(package-native-inputs promise))))))
10664
10665 (define-public python-progressbar2
10666 (package
10667 (name "python-progressbar2")
10668 (version "3.51.3")
10669 (source
10670 (origin
10671 (method url-fetch)
10672 (uri (pypi-uri "progressbar2" version))
10673 (sha256
10674 (base32
10675 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
10676 (build-system python-build-system)
10677 (propagated-inputs
10678 `(("python-six" ,python-six)
10679 ("python-utils" ,python-utils)))
10680 (native-inputs
10681 `(("python-flake8" ,python-flake8)
10682 ("python-freezegun" ,python-freezegun)
10683 ("python-pycodestyle" ,python-pycodestyle)
10684 ("python-pytest" ,python-pytest)
10685 ("python-pytest-cache" ,python-pytest-cache)
10686 ("python-pytest-cov" ,python-pytest-cov)
10687 ("python-pytest-flakes" ,python-pytest-flakes)
10688 ("python-pytest-pep8" ,python-pytest-pep8)
10689 ("python-sphinx" ,python-sphinx)))
10690 (home-page "https://github.com/WoLpH/python-progressbar")
10691 (synopsis "Text progress bar library for Python")
10692 (description
10693 "This package provides a Python progressbar library to provide
10694 visual (yet text based) progress to long running operations.")
10695 (license license:bsd-3)))
10696
10697 (define-public python-progressbar33
10698 (package
10699 (name "python-progressbar33")
10700 (version "2.4")
10701 (source
10702 (origin
10703 (method url-fetch)
10704 (uri (pypi-uri "progressbar33" version))
10705 (sha256
10706 (base32
10707 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
10708 (build-system python-build-system)
10709 (home-page "https://github.com/germangh/python-progressbar")
10710 (synopsis "Text progress bar library for Python")
10711 (description
10712 "This package provides a text progress bar library for Python. This
10713 version only differs from the original @code{progressbar} package in that it
10714 uses relative package imports instead of absolute imports, which is necessary
10715 for the module to work under Python 3.3.")
10716 ;; Either or both of these licenses may be selected.
10717 (license (list license:lgpl2.1+ license:bsd-3))))
10718
10719 (define-public python-colorama
10720 (package
10721 (name "python-colorama")
10722 (version "0.4.3")
10723 (source
10724 (origin
10725 (method url-fetch)
10726 (uri (pypi-uri "colorama" version))
10727 (sha256
10728 (base32
10729 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
10730 (build-system python-build-system)
10731 (synopsis "Colored terminal text rendering for Python")
10732 (description "Colorama is a Python library for rendering colored terminal
10733 text.")
10734 (home-page "https://pypi.org/project/colorama/")
10735 (license license:bsd-3)))
10736
10737 (define-public python2-colorama
10738 (package-with-python2 python-colorama))
10739
10740 (define-public python-rsa
10741 (package
10742 (name "python-rsa")
10743 (version "3.4.2")
10744 (source
10745 (origin
10746 (method url-fetch)
10747 (uri (pypi-uri "rsa" version))
10748 (sha256
10749 (base32
10750 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
10751 (build-system python-build-system)
10752 (propagated-inputs
10753 `(("python-pyasn1" ,python-pyasn1)))
10754 (synopsis "Pure-Python RSA implementation")
10755 (description "Python-RSA is a pure-Python RSA implementation. It supports
10756 encryption and decryption, signing and verifying signatures, and key
10757 generation according to PKCS#1 version 1.5. It can be used as a Python
10758 library as well as on the command line.")
10759 (home-page "https://stuvel.eu/rsa")
10760 (license license:asl2.0)))
10761
10762 (define-public python2-rsa
10763 (package-with-python2 python-rsa))
10764
10765 (define-public python-pluggy
10766 (package
10767 (name "python-pluggy")
10768 (version "0.13.1")
10769 (source
10770 (origin
10771 (method url-fetch)
10772 (uri (pypi-uri "pluggy" version))
10773 (sha256
10774 (base32
10775 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
10776 (build-system python-build-system)
10777 (native-inputs
10778 `(("python-setuptools-scm" ,python-setuptools-scm)))
10779 (synopsis "Plugin and hook calling mechanism for Python")
10780 (description "Pluggy is an extraction of the plugin manager as used by
10781 Pytest but stripped of Pytest specific details.")
10782 (home-page "https://pypi.org/project/pluggy/")
10783 (properties `((python2-variant . ,(delay python2-pluggy))))
10784 (license license:expat)))
10785
10786 (define-public python2-pluggy
10787 (let ((base (package-with-python2 (strip-python2-variant
10788 python-pluggy))))
10789 (package/inherit
10790 base
10791 (propagated-inputs
10792 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
10793
10794 ;; This package requires python2-importlib-metadata, but that package
10795 ;; ends up needing python2-pluggy via python2-pytest, so we need this
10796 ;; variant to solve the circular dependency.
10797 (define-public python2-pluggy-bootstrap
10798 (hidden-package
10799 (package/inherit
10800 python2-pluggy
10801 (name "python2-pluggy-bootstrap")
10802 (arguments
10803 `(#:tests? #f
10804 ,@(package-arguments python2-pluggy)))
10805 (propagated-inputs
10806 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
10807
10808 (define-public python-tox
10809 (package
10810 (name "python-tox")
10811 (version "2.8.1")
10812 (source
10813 (origin
10814 (method url-fetch)
10815 (uri (pypi-uri "tox" version))
10816 (sha256
10817 (base32
10818 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10819 (build-system python-build-system)
10820 (arguments
10821 ;; FIXME: Tests require pytest-timeout, which itself requires
10822 ;; pytest>=2.8.0 for installation.
10823 '(#:tests? #f))
10824 (propagated-inputs
10825 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10826 ("python-py" ,python-py)
10827 ("python-virtualenv" ,python-virtualenv)))
10828 (native-inputs
10829 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10830 ("python-pytest" ,python-pytest) ; >= 2.3.5
10831 ("python-setuptools-scm" ,python-setuptools-scm)))
10832 (home-page "https://tox.readthedocs.io")
10833 (synopsis "Virtualenv-based automation of test activities")
10834 (description "Tox is a generic virtualenv management and test command line
10835 tool. It can be used to check that a package installs correctly with
10836 different Python versions and interpreters, or run tests in each type of
10837 supported environment, or act as a frontend to continuous integration
10838 servers.")
10839 (license license:expat)))
10840
10841 (define-public python2-tox
10842 (package-with-python2 python-tox))
10843
10844 (define-public python-jmespath
10845 (package
10846 (name "python-jmespath")
10847 (version "0.9.4")
10848 (source
10849 (origin
10850 (method url-fetch)
10851 (uri (pypi-uri "jmespath" version))
10852 (sha256
10853 (base32
10854 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10855 (build-system python-build-system)
10856 (native-inputs
10857 `(("python-nose" ,python-nose)))
10858 (synopsis "JSON Matching Expressions")
10859 (description "JMESPath (pronounced “james path”) is a Python library that
10860 allows one to declaratively specify how to extract elements from a JSON
10861 document.")
10862 (home-page "https://github.com/jmespath/jmespath.py")
10863 (license license:expat)))
10864
10865 (define-public python2-jmespath
10866 (package-with-python2 python-jmespath))
10867
10868 (define-public python-symengine
10869 (package
10870 (name "python-symengine")
10871 (version "0.6.1")
10872 (source
10873 (origin
10874 (method url-fetch)
10875 (uri (pypi-uri "symengine" version))
10876 (sha256
10877 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
10878 (build-system python-build-system)
10879 (native-inputs
10880 `(("cmake" ,cmake)
10881 ("python-cython" ,python-cython)))
10882 (inputs
10883 `(("symengine" ,symengine)))
10884 (home-page "https://github.com/symengine/symengine.py")
10885 (synopsis "Python library providing wrappers to SymEngine")
10886 (description
10887 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
10888 manipulation library.")
10889 (license license:expat)))
10890
10891 (define-public python-botocore
10892 (package
10893 (name "python-botocore")
10894 (version "1.15.26")
10895 (source
10896 (origin
10897 (method url-fetch)
10898 (uri (pypi-uri "botocore" version))
10899 (sha256
10900 (base32
10901 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10902 (build-system python-build-system)
10903 (arguments
10904 ;; FIXME: Many tests are failing.
10905 '(#:tests? #f))
10906 (propagated-inputs
10907 `(("python-dateutil" ,python-dateutil)
10908 ("python-docutils" ,python-docutils)
10909 ("python-jmespath" ,python-jmespath)))
10910 (native-inputs
10911 `(("python-mock" ,python-mock)
10912 ("python-nose" ,python-nose)
10913 ("behave" ,behave)
10914 ("python-tox" ,python-tox)
10915 ("python-urllib3" ,python-urllib3)
10916 ("python-wheel" ,python-wheel)))
10917 (home-page "https://github.com/boto/botocore")
10918 (synopsis "Low-level interface to AWS")
10919 (description "Botocore is a Python library that provides a low-level
10920 interface to the Amazon Web Services (AWS) API.")
10921 (license license:asl2.0)))
10922
10923 (define-public python2-botocore
10924 (package-with-python2 python-botocore))
10925
10926 (define-public python-pyfiglet
10927 (package
10928 (name "python-pyfiglet")
10929 (version "0.8.post1")
10930 (source
10931 (origin
10932 (method url-fetch)
10933 (uri (pypi-uri "pyfiglet" version))
10934 (sha256
10935 (base32
10936 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
10937 (build-system python-build-system)
10938 (home-page "https://github.com/pwaller/pyfiglet")
10939 (synopsis "Draw ASCII art big letters in Python")
10940 (description "This module lets you draw large letter from ordinary characters
10941 in pure Python.")
10942 (license license:expat)))
10943
10944 (define-public python-xdo
10945 (package
10946 (name "python-xdo")
10947 (version "0.3")
10948 (source (origin
10949 (method url-fetch)
10950 (uri (string-append
10951 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10952 "python-xdo_" version ".orig.tar.gz"))
10953 (sha256
10954 (base32
10955 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10956 (build-system python-build-system)
10957 (arguments
10958 '(#:phases
10959 (modify-phases %standard-phases
10960 (add-before 'install 'patch-libxdo-path
10961 ;; Hardcode the path of dynamically loaded libxdo library.
10962 (lambda* (#:key inputs #:allow-other-keys)
10963 (let ((libxdo (string-append
10964 (assoc-ref inputs "xdotool")
10965 "/lib/libxdo.so")))
10966 (substitute* "xdo/_xdo.py"
10967 (("find_library\\(\"xdo\"\\)")
10968 (simple-format #f "\"~a\"" libxdo)))
10969 #t))))
10970 #:tests? #f)) ; no tests provided
10971 (propagated-inputs
10972 `(("python-six" ,python-six)))
10973 (inputs
10974 `(("xdotool" ,xdotool)
10975 ("libX11" ,libx11)))
10976 (home-page "https://tracker.debian.org/pkg/python-xdo")
10977 (synopsis "Python library for simulating X11 keyboard/mouse input")
10978 (description "Provides bindings to libxdo for manipulating X11 via simulated
10979 input. (Note that this is mostly a legacy library; you may wish to look at
10980 python-xdo for newer bindings.)")
10981 (license license:bsd-3)))
10982
10983 (define-public python2-xdo
10984 (package-with-python2 python-xdo))
10985
10986 (define-public python-mako
10987 (package
10988 (name "python-mako")
10989 (version "1.1.2")
10990 (source
10991 (origin
10992 (method url-fetch)
10993 (uri (pypi-uri "Mako" version))
10994 (sha256
10995 (base32
10996 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10997 (build-system python-build-system)
10998 (arguments
10999 `(#:phases (modify-phases %standard-phases
11000 (replace 'check
11001 (lambda* (#:key tests? #:allow-other-keys)
11002 (if tests?
11003 (invoke "nosetests" "-v")
11004 (format #t "test suite not run~%"))
11005 #t)))))
11006 (propagated-inputs
11007 `(("python-markupsafe" ,python-markupsafe)))
11008 (native-inputs
11009 `(("python-mock" ,python-mock)
11010 ("python-nose" ,python-nose)))
11011 (home-page "https://www.makotemplates.org/")
11012 (synopsis "Templating language for Python")
11013 (description "Mako is a templating language for Python that compiles
11014 templates into Python modules.")
11015 (license license:expat)))
11016
11017 (define-public python2-mako
11018 (package-with-python2 python-mako))
11019
11020 (define-public python-waitress
11021 (package
11022 (name "python-waitress")
11023 (version "1.1.0")
11024 (source
11025 (origin
11026 (method url-fetch)
11027 (uri (pypi-uri "waitress" version))
11028 (patches (search-patches "python-waitress-fix-tests.patch"))
11029 (sha256
11030 (base32
11031 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
11032 (build-system python-build-system)
11033 (home-page "https://github.com/Pylons/waitress")
11034 (synopsis "Waitress WSGI server")
11035 (description "Waitress is meant to be a production-quality pure-Python WSGI
11036 server with very acceptable performance.")
11037 (license license:zpl2.1)))
11038
11039 (define-public python2-waitress
11040 (package-with-python2 python-waitress))
11041
11042 (define-public python-whichcraft
11043 (package
11044 (name "python-whichcraft")
11045 (version "0.6.1")
11046 (source
11047 (origin
11048 (method url-fetch)
11049 (uri (pypi-uri "whichcraft" version))
11050 (sha256
11051 (base32
11052 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
11053 (build-system python-build-system)
11054 (native-inputs
11055 `(("python-pytest" ,python-pytest)))
11056 (home-page "https://github.com/pydanny/whichcraft")
11057 (synopsis "Cross-platform cross-python shutil.which functionality")
11058 (description
11059 "This package provides a shim of the shutil.which function that's
11060 designed to work across multiple versions of Python.")
11061 (license license:bsd-3)))
11062
11063 (define-public python-cookiecutter
11064 (package
11065 (name "python-cookiecutter")
11066 (version "1.7.2")
11067 (source
11068 (origin
11069 (method url-fetch)
11070 (uri (pypi-uri "cookiecutter" version))
11071 (sha256
11072 (base32
11073 "1b2xa5dypk1vf8aq599fd8zw4y0pwvq3hgl7ia8aiv8gg3ab5dpg"))))
11074 (build-system python-build-system)
11075 (native-inputs
11076 `(("python-freezegun" ,python-freezegun)
11077 ("python-pytest" ,python-pytest)
11078 ("python-pytest-catchlog" ,python-pytest-catchlog)
11079 ("python-pytest-cov" ,python-pytest-cov)
11080 ("python-pytest-mock" ,python-pytest-mock)))
11081 (propagated-inputs
11082 `(("python-binaryornot" ,python-binaryornot)
11083 ("python-click" ,python-click)
11084 ("python-future" ,python-future)
11085 ("python-jinja2" ,python-jinja2)
11086 ("python-jinja2-time" ,python-jinja2-time)
11087 ("python-poyo" ,python-poyo)
11088 ("python-requests" ,python-requests)
11089 ("python-slugify" ,python-slugify)
11090 ("python-text-unidecode" ,python-text-unidecode)
11091 ("python-whichcraft" ,python-whichcraft)))
11092 (home-page "https://github.com/cookiecutter/cookiecutter")
11093 (synopsis
11094 "Command-line utility that creates projects from project templates")
11095 (description
11096 "This package provides a command-line utility that creates projects from
11097 project templates, e.g. creating a Python package project from a Python package
11098 project template.")
11099 (license license:bsd-3)))
11100
11101 (define-public python-pyquery
11102 (package
11103 (name "python-pyquery")
11104 (version "1.2.17")
11105 (source
11106 (origin
11107 (method url-fetch)
11108 (uri (pypi-uri "pyquery" version))
11109 (sha256
11110 (base32
11111 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
11112 (build-system python-build-system)
11113 (native-inputs
11114 `(("python-webob" ,python-webob)
11115 ("python-webtest" ,python-webtest)))
11116 (propagated-inputs
11117 `(("python-lxml" ,python-lxml)
11118 ("python-cssselect" ,python-cssselect)))
11119 (home-page "https://github.com/gawel/pyquery")
11120 (synopsis "Make jQuery-like queries on xml documents")
11121 (description "pyquery allows you to make jQuery queries on xml documents.
11122 The API is as much as possible the similar to jQuery. pyquery uses lxml for
11123 fast xml and html manipulation.")
11124 (license license:bsd-3)))
11125
11126 (define-public python-anyjson
11127 (package
11128 (name "python-anyjson")
11129 (version "0.3.3")
11130 (source
11131 (origin
11132 (method url-fetch)
11133 (uri (pypi-uri "anyjson" version))
11134 (sha256
11135 (base32
11136 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
11137 (build-system python-build-system)
11138 (arguments
11139 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
11140 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
11141 ;; whatever) so this transformation needs to be done before the tests
11142 ;; can be run. Maybe we could add a build step to transform beforehand
11143 ;; but it could be annoying/difficult.
11144 ;; We can enable tests for the Python 2 version, though, and do below.
11145 #:tests? #f))
11146 (home-page "https://bitbucket.org/runeh/anyjson/")
11147 (synopsis
11148 "Wraps best available JSON implementation in a common interface")
11149 (description
11150 "Anyjson loads whichever is the fastest JSON module installed
11151 and provides a uniform API regardless of which JSON implementation is used.")
11152 (license license:bsd-3)
11153 (properties `((python2-variant . ,(delay python2-anyjson))))))
11154
11155 (define-public python2-anyjson
11156 (let ((anyjson (package-with-python2
11157 (strip-python2-variant python-anyjson))))
11158 (package
11159 (inherit anyjson)
11160 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
11161 #:tests? #t
11162 ,@(package-arguments anyjson)))
11163 (native-inputs `(("python2-nose" ,python2-nose))))))
11164
11165 (define-public python-amqp
11166 (package
11167 (name "python-amqp")
11168 (version "2.3.2")
11169 (source
11170 (origin
11171 (method url-fetch)
11172 (uri (pypi-uri "amqp" version))
11173 (sha256
11174 (base32
11175 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
11176 (build-system python-build-system)
11177 (native-inputs
11178 `(("python-case" ,python-case)
11179 ("python-pytest-sugar" ,python-pytest-sugar)
11180 ("python-mock" ,python-mock)))
11181 (propagated-inputs
11182 `(("python-vine" ,python-vine)))
11183 (home-page "https://github.com/celery/py-amqp")
11184 (synopsis
11185 "Low-level AMQP client for Python (fork of amqplib)")
11186 (description
11187 "This is a fork of amqplib which was originally written by Barry Pederson.
11188 It is maintained by the Celery project, and used by kombu as a pure python
11189 alternative when librabbitmq is not available.")
11190 (license license:lgpl2.1+)
11191 (properties `((python2-variant . ,(delay python2-amqp))))))
11192
11193 (define-public python2-amqp
11194 (let ((amqp (package-with-python2
11195 (strip-python2-variant python-amqp))))
11196 (package
11197 (inherit amqp)
11198 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
11199 ;; unmaintained. Weirdly, does not do this on the python 3
11200 ;; version?
11201 #:tests? #f
11202 ,@(package-arguments amqp))))))
11203
11204 (define-public python-txamqp
11205 (package
11206 (name "python-txamqp")
11207 (version "0.8.2")
11208 (source
11209 (origin
11210 (method url-fetch)
11211 (uri (pypi-uri "txAMQP" version))
11212 (sha256
11213 (base32
11214 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
11215 (build-system python-build-system)
11216 (propagated-inputs
11217 `(("python-six" ,python-six)
11218 ("python-twisted" ,python-twisted)))
11219 (home-page "https://github.com/txamqp/txamqp")
11220 (synopsis "Communicate with AMQP peers and brokers using Twisted")
11221 (description
11222 "This package provides a Python library for communicating with AMQP peers
11223 and brokers using the asynchronous networking framework Twisted. It contains
11224 all the necessary code to connect, send and receive messages to/from an
11225 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
11226 also includes support for using Thrift RPC over AMQP in Twisted
11227 applications.")
11228 (license license:asl2.0)))
11229
11230 (define-public python2-txamqp
11231 (package-with-python2 python-txamqp))
11232
11233 (define-public python-kombu
11234 (package
11235 (name "python-kombu")
11236 (version "4.2.2")
11237 (source
11238 (origin
11239 (method url-fetch)
11240 (uri (pypi-uri "kombu" version))
11241 (sha256
11242 (base32
11243 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
11244 (build-system python-build-system)
11245 (native-inputs
11246 `(("python-mock" ,python-mock)
11247 ("python-case" ,python-case)
11248 ("python-pyro4" ,python-pyro4)
11249 ("python-pytest-sugar" ,python-pytest-sugar)
11250 ("python-pytz" ,python-pytz)))
11251 (propagated-inputs
11252 `(("python-anyjson" ,python-anyjson)
11253 ("python-amqp" ,python-amqp)
11254 ("python-redis" ,python-redis)))
11255 (home-page "https://kombu.readthedocs.io")
11256 (synopsis "Message passing library for Python")
11257 (description "The aim of Kombu is to make messaging in Python as easy as
11258 possible by providing an idiomatic high-level interface for the AMQ protocol,
11259 and also provide proven and tested solutions to common messaging problems.
11260 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
11261 message orientation, queuing, routing, reliability and security, for which the
11262 RabbitMQ messaging server is the most popular implementation.")
11263 (license license:bsd-3)
11264 (properties `((python2-variant . ,(delay python2-kombu))))))
11265
11266 (define-public python2-kombu
11267 (let ((kombu (package-with-python2
11268 (strip-python2-variant python-kombu))))
11269 (package
11270 (inherit kombu)
11271 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
11272 ;; It works fine on the python3 variant.
11273 #:tests? #f
11274 ,@(package-arguments kombu)))
11275 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11276 ,@(package-native-inputs kombu))))))
11277
11278 (define-public python-billiard
11279 (package
11280 (name "python-billiard")
11281 (version "3.5.0.5")
11282 (source
11283 (origin
11284 (method url-fetch)
11285 (uri (pypi-uri "billiard" version))
11286 (sha256
11287 (base32
11288 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
11289 (build-system python-build-system)
11290 (native-inputs
11291 `(("python-case" ,python-case)
11292 ("python-pytest" ,python-pytest)))
11293 (home-page "https://github.com/celery/billiard")
11294 (synopsis
11295 "Python multiprocessing fork with improvements and bugfixes")
11296 (description
11297 "Billiard is a fork of the Python 2.7 multiprocessing package. The
11298 multiprocessing package itself is a renamed and updated version of R Oudkerk's
11299 pyprocessing package. This standalone variant is intended to be compatible with
11300 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
11301 (license license:bsd-3)
11302 (properties `((python2-variant . ,(delay python2-billiard))))))
11303
11304 (define-public python2-billiard
11305 (let ((billiard (package-with-python2
11306 (strip-python2-variant python-billiard))))
11307 (package
11308 (inherit billiard)
11309 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11310 ("python2-mock" ,python2-mock)
11311 ,@(package-native-inputs billiard))))))
11312
11313 (define-public python-celery
11314 (package
11315 (name "python-celery")
11316 (version "4.2.1")
11317 (source
11318 (origin
11319 (method url-fetch)
11320 (uri (pypi-uri "celery" version))
11321 (sha256
11322 (base32
11323 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
11324 (build-system python-build-system)
11325 (arguments
11326 '(;; TODO The tests fail with Python 3.7
11327 ;; https://github.com/celery/celery/issues/4849
11328 #:tests? #f
11329 #:phases
11330 (modify-phases %standard-phases
11331 (add-after 'unpack 'patch-requirements
11332 (lambda _
11333 (substitute* "requirements/test.txt"
11334 (("pytest>=3\\.0,<3\\.3")
11335 "pytest>=3.0"))
11336 #t)))))
11337 (native-inputs
11338 `(("python-case" ,python-case)
11339 ("python-pytest" ,python-pytest)))
11340 (propagated-inputs
11341 `(("python-pytz" ,python-pytz)
11342 ("python-billiard" ,python-billiard)
11343 ("python-kombu" ,python-kombu)))
11344 (home-page "https://celeryproject.org")
11345 (synopsis "Distributed Task Queue")
11346 (description "Celery is an asynchronous task queue/job queue based on
11347 distributed message passing. It is focused on real-time operation, but
11348 supports scheduling as well. The execution units, called tasks, are executed
11349 concurrently on a single or more worker servers using multiprocessing,
11350 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
11351 synchronously (wait until ready).")
11352 (license license:bsd-3)
11353 (properties `((python2-variant . ,(delay python2-celery))))))
11354
11355 (define-public python2-celery
11356 (let ((celery (package-with-python2
11357 (strip-python2-variant python-celery))))
11358 (package
11359 (inherit celery)
11360 (native-inputs `(("python2-unittest2" ,python2-unittest2)
11361 ("python2-mock" ,python2-mock)
11362 ,@(package-native-inputs celery))))))
11363
11364 (define-public python-translitcodec
11365 (package
11366 (name "python-translitcodec")
11367 (version "0.4.0")
11368 (source
11369 (origin
11370 (method url-fetch)
11371 (uri (pypi-uri "translitcodec" version))
11372 (sha256
11373 (base32
11374 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
11375 (build-system python-build-system)
11376 (arguments
11377 `(#:tests? #f)) ; no tests provided
11378 (home-page
11379 "https://github.com/claudep/translitcodec")
11380 (synopsis
11381 "Unicode to 8-bit charset transliteration codec")
11382 (description
11383 "This package contains codecs for transliterating ISO 10646 texts into
11384 best-effort representations using smaller coded character sets (ASCII,
11385 ISO 8859, etc.).")
11386 (license license:expat)))
11387
11388 (define-public python2-translitcodec
11389 (package-with-python2 python-translitcodec))
11390
11391 (define-public python-editor
11392 (package
11393 (name "python-editor")
11394 (version "1.0.4")
11395 (source
11396 (origin
11397 (method url-fetch)
11398 (uri (pypi-uri "python-editor" version))
11399 (sha256
11400 (base32
11401 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
11402 (build-system python-build-system)
11403 (arguments
11404 '(#:tests? #f)) ;XXX: needs a TTY and an editor
11405 (home-page "https://github.com/fmoo/python-editor")
11406 (synopsis "Programmatically open an editor, capture the result")
11407 (description
11408 "python-editor is a library that provides the editor module for
11409 programmatically interfacing with your system's $EDITOR.")
11410 (license license:asl2.0)))
11411
11412 (define-public python2-editor
11413 (package-with-python2 python-editor))
11414
11415 (define-public python-vobject
11416 (package
11417 (name "python-vobject")
11418 (version "0.9.6.1")
11419 (source (origin
11420 (method url-fetch)
11421 (uri (pypi-uri "vobject" version))
11422 (sha256
11423 (base32
11424 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
11425 (build-system python-build-system)
11426 (arguments
11427 '(;; The test suite relies on some non-portable Windows interfaces.
11428 #:tests? #f))
11429 (propagated-inputs
11430 `(("python-dateutil" ,python-dateutil)
11431 ("python-pyicu" ,python-pyicu)))
11432 (synopsis "Parse and generate vCard and vCalendar files")
11433 (description "Vobject is intended to be a full featured Python package for
11434 parsing and generating vCard and vCalendar files. Currently, iCalendar files
11435 are supported and well tested. vCard 3.0 files are supported, and all data
11436 should be imported, but only a few components are understood in a sophisticated
11437 way.")
11438 (home-page "https://eventable.github.io/vobject/")
11439 (license license:asl2.0)))
11440
11441 (define-public python2-vobject
11442 (package-with-python2 python-vobject))
11443
11444 (define-public python-munkres
11445 (package
11446 (name "python-munkres")
11447 (version "1.0.8")
11448 (source (origin
11449 (method url-fetch)
11450 (uri (pypi-uri "munkres" version))
11451 (sha256
11452 (base32
11453 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
11454 (build-system python-build-system)
11455 (arguments
11456 '(#:tests? #f)) ; no test suite
11457 (home-page "https://software.clapper.org/munkres/")
11458 (synopsis "Implementation of the Munkres algorithm")
11459 (description "The Munkres module provides an implementation of the Munkres
11460 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
11461 useful for solving the Assignment Problem.")
11462 (license license:bsd-3)))
11463
11464 (define-public python2-munkres
11465 (package-with-python2 python-munkres))
11466
11467 (define-public python-whoosh
11468 (package
11469 (name "python-whoosh")
11470 (version "2.7.4")
11471 (source
11472 (origin
11473 (method url-fetch)
11474 (uri (pypi-uri "Whoosh" version))
11475 (sha256
11476 (base32
11477 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
11478 (build-system python-build-system)
11479 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
11480 (native-inputs
11481 `(("python-pytest" ,python-pytest)))
11482 (home-page "https://bitbucket.org/mchaput/whoosh")
11483 (synopsis "Full text indexing, search, and spell checking library")
11484 (description
11485 "Whoosh is a fast, pure-Python full text indexing, search, and spell
11486 checking library.")
11487 (license license:bsd-2)))
11488
11489 (define-public python2-whoosh
11490 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
11491 (package (inherit whoosh)
11492 (propagated-inputs
11493 `(("python2-backport-ssl-match-hostname"
11494 ,python2-backport-ssl-match-hostname)
11495 ,@(package-propagated-inputs whoosh))))))
11496
11497 (define-public python-pathlib
11498 (package
11499 (name "python-pathlib")
11500 (version "1.0.1")
11501 (source (origin
11502 (method url-fetch)
11503 (uri (pypi-uri "pathlib" version))
11504 (sha256
11505 (base32
11506 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
11507 (build-system python-build-system)
11508 ;; The tests depend on the internal "test" module, which does not provide
11509 ;; a stable interface.
11510 (arguments `(#:tests? #f))
11511 (home-page "https://pathlib.readthedocs.org/")
11512 (synopsis "Object-oriented file system paths")
11513 (description "Pathlib offers a set of classes to handle file system paths.
11514 It offers the following advantages over using string objects:
11515
11516 @enumerate
11517 @item No more cumbersome use of os and os.path functions. Everything can
11518 be done easily through operators, attribute accesses, and method calls.
11519 @item Embodies the semantics of different path types. For example,
11520 comparing Windows paths ignores casing.
11521 @item Well-defined semantics, eliminating any inconsistencies or
11522 ambiguities (forward vs. backward slashes, etc.).
11523 @end enumerate
11524
11525 Note: In Python 3.4, pathlib is now part of the standard library. For other
11526 Python versions please consider python-pathlib2 instead, which tracks the
11527 standard library module. This module (python-pathlib) isn't maintained
11528 anymore.")
11529 (license license:expat)))
11530
11531 (define-public python2-pathlib
11532 (package-with-python2 python-pathlib))
11533
11534 (define-public python2-pathlib2
11535 (package
11536 (name "python2-pathlib2")
11537 (version "2.3.5")
11538 (source (origin
11539 (method url-fetch)
11540 (uri (pypi-uri "pathlib2" version))
11541 (sha256
11542 (base32
11543 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
11544 (build-system python-build-system)
11545 ;; We only need the the Python 2 variant, since for Python 3 our minimum
11546 ;; version is 3.4 which already includes this package as part of the
11547 ;; standard library.
11548 (arguments
11549 `(#:python ,python-2))
11550 (propagated-inputs
11551 `(("python2-scandir" ,python2-scandir)
11552 ("python2-six" ,python2-six)))
11553 (home-page "https://pypi.org/project/pathlib2/")
11554 (synopsis "Object-oriented file system paths - backport of standard
11555 pathlib module")
11556 (description "The goal of pathlib2 is to provide a backport of standard
11557 pathlib module which tracks the standard library module, so all the newest
11558 features of the standard pathlib can be used also on older Python versions.
11559
11560 Pathlib offers a set of classes to handle file system paths. It offers the
11561 following advantages over using string objects:
11562
11563 @enumerate
11564 @item No more cumbersome use of os and os.path functions. Everything can
11565 be done easily through operators, attribute accesses, and method calls.
11566 @item Embodies the semantics of different path types. For example,
11567 comparing Windows paths ignores casing.
11568 @item Well-defined semantics, eliminating any inconsistencies or
11569 ambiguities (forward vs. backward slashes, etc.).
11570 @end enumerate")
11571 (license license:expat)))
11572
11573 (define-public python2-pathlib2-bootstrap
11574 (hidden-package
11575 (package
11576 (inherit python2-pathlib2)
11577 (name "python2-pathlib2-bootstrap")
11578 (propagated-inputs
11579 `(("python2-scandir" ,python2-scandir)
11580 ("python2-six" ,python2-six-bootstrap))))))
11581
11582 (define-public python-jellyfish
11583 (package
11584 (name "python-jellyfish")
11585 (version "0.5.6")
11586 (source (origin
11587 (method url-fetch)
11588 (uri (pypi-uri "jellyfish" version))
11589 (sha256
11590 (base32
11591 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
11592 (build-system python-build-system)
11593 (native-inputs
11594 `(("python-pytest" ,python-pytest)))
11595 (home-page "https://github.com/jamesturk/jellyfish")
11596 (synopsis "Approximate and phonetic matching of strings")
11597 (description "Jellyfish uses a variety of string comparison and phonetic
11598 encoding algorithms to do fuzzy string matching.")
11599 (license license:bsd-2)
11600 (properties `((python2-variant . ,(delay python2-jellyfish))))))
11601
11602 (define-public python2-jellyfish
11603 (let ((jellyfish (package-with-python2
11604 (strip-python2-variant python-jellyfish))))
11605 (package (inherit jellyfish)
11606 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
11607 ,@(package-native-inputs jellyfish))))))
11608
11609 (define-public python2-unicodecsv
11610 (package
11611 (name "python2-unicodecsv")
11612 (version "0.14.1")
11613 (source (origin
11614 (method git-fetch)
11615 ;; The test suite is not included in the PyPi release.
11616 ;; https://github.com/jdunck/python-unicodecsv/issues/19
11617 (uri (git-reference
11618 (url "https://github.com/jdunck/python-unicodecsv")
11619 (commit version)))
11620 (file-name (git-file-name name version))
11621 (sha256
11622 (base32
11623 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
11624 (build-system python-build-system)
11625 (arguments
11626 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
11627 #:python ,python-2))
11628 (native-inputs
11629 `(("python2-unittest2" ,python2-unittest2)))
11630 (home-page "https://github.com/jdunck/python-unicodecsv")
11631 (synopsis "Unicode CSV module for Python 2")
11632 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
11633 module, adding support for Unicode strings.")
11634 (license license:bsd-2)))
11635
11636 (define-public python-rarfile
11637 (package
11638 (name "python-rarfile")
11639 (version "2.8")
11640 (source (origin
11641 (method url-fetch)
11642 (uri (pypi-uri "rarfile" version))
11643 (sha256
11644 (base32
11645 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
11646 (build-system python-build-system)
11647 (arguments
11648 '(#:phases
11649 (modify-phases %standard-phases
11650 (replace 'check
11651 ;; Many tests fail, but the installation proceeds.
11652 (lambda _ (invoke "make" "-C" "test" "test"))))))
11653 (native-inputs
11654 `(("which" ,which))) ; required for tests
11655 (propagated-inputs
11656 `(("libarchive" ,libarchive)))
11657 (home-page "https://github.com/markokr/rarfile")
11658 (synopsis "RAR archive reader for Python")
11659 (description "This is Python module for RAR archive reading. The interface
11660 is made as zipfile like as possible.")
11661 (license license:isc)))
11662
11663 (define-public python2-rarfile
11664 (package-with-python2 python-rarfile))
11665
11666 (define-public python-magic
11667 (package
11668 (name "python-magic")
11669 (version "0.4.15")
11670 (source
11671 (origin
11672 (method url-fetch)
11673 (uri (pypi-uri "python-magic" version))
11674 (sha256
11675 (base32
11676 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
11677 (file-name (string-append name "-" version "-checkout"))))
11678 (build-system python-build-system)
11679 (arguments
11680 ;; The tests are unreliable, so don't run them. The tests fail
11681 ;; under Python3 because they were written for Python2 and
11682 ;; contain import statements that do not work in Python3. One of
11683 ;; the tests fails under Python2 because its assertions are
11684 ;; overly stringent; it relies on comparing output strings which
11685 ;; are brittle and can change depending on the version of
11686 ;; libmagic being used and the system on which the test is
11687 ;; running. In my case, under GuixSD 0.10.0, only one test
11688 ;; failed, and it seems to have failed only because the version
11689 ;; of libmagic that is packaged in Guix outputs a slightly
11690 ;; different (but not wrong) string than the one that the test
11691 ;; expected.
11692 '(#:tests? #f
11693 #:phases (modify-phases %standard-phases
11694 ;; Replace a specific method call with a hard-coded
11695 ;; path to the necessary libmagic.so file in the
11696 ;; store. If we don't do this, then the method call
11697 ;; will fail to find the libmagic.so file, which in
11698 ;; turn will cause any application using
11699 ;; python-magic to fail.
11700 (add-before 'build 'hard-code-path-to-libmagic
11701 (lambda* (#:key inputs #:allow-other-keys)
11702 (let ((file (assoc-ref inputs "file")))
11703 (substitute* "magic.py"
11704 (("ctypes.util.find_library\\('magic'\\)")
11705 (string-append "'" file "/lib/libmagic.so'")))
11706 #t)))
11707 (add-before 'install 'disable-egg-compression
11708 (lambda _
11709 (let ((port (open-file "setup.cfg" "a")))
11710 (display "\n[easy_install]\nzip_ok = 0\n"
11711 port)
11712 (close-port port)
11713 #t))))))
11714 (inputs
11715 ;; python-magic needs to be able to find libmagic.so.
11716 `(("file" ,file)))
11717 (home-page
11718 "https://github.com/ahupp/python-magic")
11719 (synopsis
11720 "File type identification using libmagic")
11721 (description
11722 "This module uses ctypes to access the libmagic file type
11723 identification library. It makes use of the local magic database and
11724 supports both textual and MIME-type output. Note that this module and
11725 the python-file module both provide a \"magic.py\" file; these two
11726 modules, which are different and were developed separately, both serve
11727 the same purpose: to provide Python bindings for libmagic.")
11728 (license license:expat)))
11729
11730 (define-public python2-magic
11731 (package-with-python2 python-magic))
11732
11733 (define-public python2-s3cmd
11734 (package
11735 (name "python2-s3cmd")
11736 (version "1.6.1")
11737 (source
11738 (origin
11739 (method url-fetch)
11740 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
11741 "s3cmd-" version ".tar.gz"))
11742 (sha256
11743 (base32
11744 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
11745 (build-system python-build-system)
11746 (arguments
11747 ;; s3cmd is written for python2 only and contains no tests.
11748 `(#:python ,python-2
11749 #:tests? #f))
11750 (propagated-inputs
11751 `(("python2-dateutil" ,python2-dateutil)
11752 ;; The python-file package also provides a magic.py module.
11753 ;; This is an unfortunate state of affairs; however, s3cmd
11754 ;; fails to install if it cannot find specifically the
11755 ;; python-magic package. Thus we include it, instead of using
11756 ;; python-file. Ironically, s3cmd sometimes works better
11757 ;; without libmagic bindings at all:
11758 ;; https://github.com/s3tools/s3cmd/issues/198
11759 ("python2-magic" ,python2-magic)))
11760 (home-page "https://s3tools.org/s3cmd")
11761 (synopsis "Command line tool for S3-compatible storage services")
11762 (description
11763 "S3cmd is a command line tool for uploading, retrieving and managing data
11764 in storage services that are compatible with the Amazon Simple Storage
11765 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
11766 GnuPG encryption, and more. It also supports management of Amazon's
11767 CloudFront content delivery network.")
11768 (license license:gpl2+)))
11769
11770 (define-public python-pkgconfig
11771 (package
11772 (name "python-pkgconfig")
11773 (version "1.3.1")
11774 (source
11775 (origin
11776 (method url-fetch)
11777 (uri (pypi-uri "pkgconfig" version))
11778 (sha256
11779 (base32
11780 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
11781 (build-system python-build-system)
11782 (native-inputs
11783 `(("python-nose" ,python-nose)))
11784 (inputs
11785 `(("pkg-config" ,pkg-config)))
11786 (arguments
11787 `(#:phases
11788 (modify-phases %standard-phases
11789 (add-before 'build 'patch
11790 ;; Hard-code the path to pkg-config.
11791 (lambda _
11792 (substitute* "pkgconfig/pkgconfig.py"
11793 (("cmd = 'pkg-config")
11794 (string-append "cmd = '" (which "pkg-config"))))
11795 #t))
11796 (replace 'check
11797 (lambda _
11798 (invoke "nosetests" "test.py"))))))
11799 (home-page "https://github.com/matze/pkgconfig")
11800 (synopsis "Python interface for pkg-config")
11801 (description "This module provides a Python interface to pkg-config. It
11802 can be used to find all pkg-config packages, check if a package exists,
11803 check if a package meets certain version requirements, query CFLAGS and
11804 LDFLAGS and parse the output to build extensions with setup.py.")
11805 (license license:expat)))
11806
11807 (define-public python2-pkgconfig
11808 (package-with-python2 python-pkgconfig))
11809
11810 (define-public python-bz2file
11811 (package
11812 (name "python-bz2file")
11813 (version "0.98")
11814 (source
11815 (origin
11816 (method url-fetch)
11817 (uri (pypi-uri "bz2file" version))
11818 (sha256
11819 (base32
11820 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
11821 (build-system python-build-system)
11822 (arguments
11823 `(#:tests? #f)) ; Tests use deprecated python modules.
11824 (home-page "https://github.com/nvawda/bz2file")
11825 (synopsis "Read and write bzip2-compressed files")
11826 (description
11827 "Bz2file is a Python library for reading and writing bzip2-compressed
11828 files. It contains a drop-in replacement for the I/O interface in the
11829 standard library's @code{bz2} module, including features from the latest
11830 development version of CPython that are not available in older releases.")
11831 (license license:asl2.0)))
11832
11833 (define-public python2-bz2file
11834 (package-with-python2 python-bz2file))
11835
11836 (define-public python-future
11837 (package
11838 (name "python-future")
11839 (version "0.17.1")
11840 (source
11841 (origin
11842 (method url-fetch)
11843 (uri (pypi-uri "future" version))
11844 (sha256
11845 (base32
11846 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
11847 (build-system python-build-system)
11848 ;; Many tests connect to the network or are otherwise flawed.
11849 ;; https://github.com/PythonCharmers/python-future/issues/210
11850 (arguments
11851 `(#:tests? #f))
11852 (home-page "https://python-future.org")
11853 (synopsis "Single-source support for Python 3 and 2")
11854 (description
11855 "@code{python-future} is the missing compatibility layer between Python 2 and
11856 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11857 to support both Python 2 and Python 3 with minimal overhead.")
11858 (license license:expat)))
11859
11860 (define-public python2-future
11861 (package-with-python2 python-future))
11862
11863 (define-public python-cysignals
11864 (package
11865 (name "python-cysignals")
11866 (version "1.9.0")
11867 (source
11868 (origin
11869 (method url-fetch)
11870 (uri (pypi-uri "cysignals" version))
11871 (sha256
11872 (base32
11873 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11874 (build-system python-build-system)
11875 (native-inputs
11876 `(("python-cython" ,python-cython)
11877 ("python-sphinx" ,python-sphinx)))
11878 (inputs
11879 `(("pari-gp" ,pari-gp)))
11880 (arguments
11881 `(#:modules ((guix build python-build-system)
11882 ((guix build gnu-build-system) #:prefix gnu:)
11883 (guix build utils))
11884 ;; FIXME: Tests are executed after installation and currently fail
11885 ;; when not installing into standard locations; the author is working
11886 ;; on a fix.
11887 #:tests? #f
11888 #:phases
11889 (modify-phases %standard-phases
11890 (add-before
11891 'build 'configure
11892 (assoc-ref gnu:%standard-phases 'configure)))))
11893 (home-page
11894 "https://github.com/sagemath/cysignals")
11895 (synopsis
11896 "Handling of interrupts and signals for Cython")
11897 (description
11898 "The cysignals package provides mechanisms to handle interrupts (and
11899 other signals and errors) in Cython code, using two related approaches,
11900 for mixed Cython/Python code or external C libraries and pure Cython code,
11901 respectively.")
11902 (license license:lgpl3+)))
11903
11904 (define-public python2-cysignals
11905 (package-with-python2 python-cysignals))
11906
11907 (define-public python2-shedskin
11908 (package
11909 (name "python2-shedskin")
11910 (version "0.9.4")
11911 (source
11912 (origin
11913 (method url-fetch)
11914 (uri (string-append "https://github.com/shedskin/shedskin/"
11915 "releases/download/v" version
11916 "/shedskin-" version ".tgz"))
11917 (sha256
11918 (base32
11919 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11920 (build-system python-build-system)
11921 (arguments
11922 `(#:python ,python-2
11923 #:phases (modify-phases %standard-phases
11924 (add-after 'unpack 'fix-resulting-include-libs
11925 (lambda* (#:key inputs #:allow-other-keys)
11926 (let ((libgc (assoc-ref inputs "libgc"))
11927 (pcre (assoc-ref inputs "pcre")))
11928 (substitute* "shedskin/makefile.py"
11929 (("variable == 'CCFLAGS':[ ]*")
11930 (string-append "variable == 'CCFLAGS':\n"
11931 " line += ' -I " pcre "/include"
11932 " -I " libgc "/include'"))
11933 (("variable == 'LFLAGS':[ ]*")
11934 (string-append "variable == 'LFLAGS':\n"
11935 " line += ' -L" pcre "/lib"
11936 " -L " libgc "/lib'")))
11937 #t))))))
11938 (inputs `(("pcre" ,pcre)
11939 ("libgc" ,libgc)))
11940 (home-page "https://shedskin.github.io/")
11941 (synopsis "Experimental Python-2 to C++ Compiler")
11942 (description (string-append "This is an experimental compiler for a subset of
11943 Python. It generates C++ code and a Makefile."))
11944 (license (list license:gpl3 license:bsd-3 license:expat))))
11945
11946 (define-public python2-rope
11947 (package
11948 (name "python2-rope")
11949 (version "0.11.0")
11950 (source
11951 (origin
11952 (method url-fetch)
11953 (uri (pypi-uri "rope" version))
11954 (sha256
11955 (base32
11956 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11957 (arguments
11958 ;; Rope has only partial python3 support, see `python-rope'
11959 `(#:python ,python-2))
11960 (build-system python-build-system)
11961 (native-inputs
11962 `(("python2-unittest2" ,python2-unittest2)))
11963 (home-page "https://github.com/python-rope/rope")
11964 (synopsis "Refactoring library for Python")
11965 (description "Rope is a refactoring library for Python. It facilitates
11966 the renaming, moving and extracting of attributes, functions, modules, fields
11967 and parameters in Python 2 source code. These refactorings can also be applied
11968 to occurrences in strings and comments.")
11969 (license license:gpl2)))
11970
11971 (define-public python-rope
11972 (package
11973 (inherit python2-rope)
11974 (name "python-rope")
11975 (arguments `(#:python ,python-wrapper
11976 ;; XXX: Only partial python3 support, results in some failing
11977 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11978 #:tests? #f))
11979 (properties `((python2-variant . ,(delay python2-rope))))))
11980
11981 (define-public python-py3status
11982 (package
11983 (name "python-py3status")
11984 (version "3.21")
11985 (source
11986 (origin
11987 (method url-fetch)
11988 (uri (pypi-uri "py3status" version))
11989 (sha256
11990 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11991 (build-system python-build-system)
11992 (inputs
11993 `(("file" ,file)))
11994 (arguments
11995 '(#:phases
11996 (modify-phases %standard-phases
11997 ;; 'file' is used for detection of configuration file encoding
11998 ;; let's make link the dependency to particular input
11999 (add-before 'build 'patch-file-path
12000 (lambda* (#:key inputs #:allow-other-keys)
12001 (let ((file-path (assoc-ref inputs "file")))
12002 (substitute* "py3status/parse_config.py"
12003 (("\\[\"file\", \"-b\"")
12004 (string-append "['" file-path "/bin/file', '-b'")))
12005 #t))))
12006 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
12007 (home-page "https://github.com/ultrabug/py3status")
12008 (synopsis "Extensible i3status wrapper written in Python")
12009 (description "py3status is an i3status wrapper which extends i3status
12010 functionality in a modular way, allowing you to extend your panel with your
12011 own code, responding to click events and updating clock every second.")
12012 (license license:bsd-3)))
12013
12014 (define-public python2-selectors2
12015 (package
12016 (name "python2-selectors2")
12017 (version "2.0.1")
12018 (source (origin
12019 (method url-fetch)
12020 (uri (pypi-uri "selectors2" version))
12021 (sha256
12022 (base32
12023 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
12024 (build-system python-build-system)
12025 (arguments
12026 `(#:python ,python-2))
12027 (native-inputs
12028 `(("python2-mock" ,python2-mock)
12029 ("python2-psutil" ,python2-psutil)))
12030 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
12031 (synopsis "Backport of the selectors module from Python 3.5+")
12032 (description
12033 "This package provides a drop-in replacement for the @code{selectors}
12034 module in Python 3.5 and later.")
12035 (license license:expat)))
12036
12037 (define-public python-tblib
12038 (package
12039 (name "python-tblib")
12040 (version "1.6.0")
12041 (source (origin
12042 (method url-fetch)
12043 (uri (pypi-uri "tblib" version))
12044 (sha256
12045 (base32
12046 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
12047 (build-system python-build-system)
12048 (arguments
12049 `(#:phases
12050 (modify-phases %standard-phases
12051 (replace 'check
12052 (lambda _
12053 ;; Upstream runs tests after installation and the package itself
12054 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
12055 ;; found.
12056 (setenv "PYTHONPATH"
12057 (string-append (getcwd) "/build/lib:"
12058 (getenv "PYTHONPATH")))
12059 (invoke "py.test" "-vv" "tests" "README.rst"))))))
12060 (native-inputs
12061 `(("python-pytest" ,python-pytest)
12062 ("python-six" ,python-six)))
12063 (home-page "https://github.com/ionelmc/python-tblib")
12064 (synopsis "Traceback serialization library")
12065 (description
12066 "Traceback serialization allows you to:
12067
12068 @enumerate
12069 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
12070 different processes. This allows better error handling when running code over
12071 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
12072
12073 @item Parse traceback strings and raise with the parsed tracebacks.
12074 @end enumerate\n")
12075 (license license:bsd-3)))
12076
12077 (define-public python2-tblib
12078 (package-with-python2 python-tblib))
12079
12080 (define-public python-greenlet
12081 (package
12082 (name "python-greenlet")
12083 (version "0.4.16")
12084 (source (origin
12085 (method url-fetch)
12086 (uri (pypi-uri "greenlet" version))
12087 (sha256
12088 (base32
12089 "0v2571d0av1hz3yx63gvmnrinyn57nnvibg4zkl9frv74b3yl1kf"))))
12090 (build-system python-build-system)
12091 (home-page "https://greenlet.readthedocs.io/")
12092 (synopsis "Lightweight in-process concurrent programming")
12093 (description
12094 "Greenlet package is a spin-off of Stackless, a version of CPython
12095 that supports micro-threads called \"tasklets\". Tasklets run
12096 pseudo-concurrently (typically in a single or a few OS-level threads) and
12097 are synchronized with data exchanges on \"channels\".")
12098 (license (list license:psfl license:expat))))
12099
12100 (define-public python2-greenlet
12101 (package-with-python2 python-greenlet))
12102
12103 (define-public python-objgraph
12104 (package
12105 (name "python-objgraph")
12106 (version "3.4.1")
12107 (source
12108 (origin
12109 (method url-fetch)
12110 (uri (pypi-uri "objgraph" version))
12111 (sha256
12112 (base32
12113 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
12114 (build-system python-build-system)
12115 (propagated-inputs
12116 `(("python-graphviz" ,python-graphviz)))
12117 (native-inputs
12118 `(("python-mock" ,python-mock)
12119 ("graphviz" ,graphviz)))
12120 (home-page "https://mg.pov.lt/objgraph/")
12121 (synopsis "Draw Python object reference graphs with graphviz")
12122 (description
12123 "This package provides tools to draw Python object reference graphs with
12124 graphviz.")
12125 (license license:expat)))
12126
12127 (define-public python2-objgraph
12128 (package-with-python2 python-objgraph))
12129
12130 (define-public python-gevent
12131 (package
12132 (name "python-gevent")
12133 (version "20.6.2")
12134 (source (origin
12135 (method url-fetch)
12136 (uri (pypi-uri "gevent" version))
12137 (sha256
12138 (base32
12139 "1ldmppgghfphdaazjw6wq2i17xcmsjb2jsizfa4cjlg812zjlg52"))
12140 (modules '((guix build utils)))
12141 (snippet
12142 '(begin
12143 ;; unbunding libev and c-ares
12144 (delete-file-recursively "deps")
12145 #t))))
12146 (build-system python-build-system)
12147 (arguments
12148 `(#:modules ((ice-9 ftw)
12149 (ice-9 match)
12150 (srfi srfi-26)
12151 (guix build utils)
12152 (guix build python-build-system))
12153 #:phases (modify-phases %standard-phases
12154 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
12155 (lambda _
12156 (substitute* "src/gevent/subprocess.py"
12157 (("/bin/sh") (which "sh")))
12158 (for-each (lambda (file)
12159 (substitute* file
12160 (("/bin/sh") (which "sh"))
12161 (("/bin/true") (which "true"))))
12162 (find-files "src/greentest" "\\.py$"))
12163 #t))
12164 (add-before 'build 'do-not-use-bundled-sources
12165 (lambda _
12166 (setenv "GEVENTSETUP_EMBED" "0")
12167
12168 ;; Prevent building bundled libev.
12169 (substitute* "setup.py"
12170 (("run_make=_BUILDING")
12171 "run_make=False"))
12172 #t))
12173 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
12174 (lambda* (#:key inputs #:allow-other-keys)
12175 (let ((greenlet (string-append
12176 (assoc-ref inputs "python-greenlet")
12177 "/include")))
12178 (match (scandir greenlet
12179 (lambda (item)
12180 (string-prefix? "python" item)))
12181 ((python)
12182 (setenv "C_INCLUDE_PATH"
12183 (string-append greenlet "/" python ":"
12184 (or (getenv "C_INCLUDE_PATH")
12185 ""))))))
12186 #t))
12187 (add-before 'check 'pretend-to-be-CI
12188 (lambda _
12189 ;; A few tests are skipped due to network constraints or
12190 ;; get longer timeouts when running in a CI environment.
12191 ;; Piggy-back on that, as we need the same adjustments.
12192 (setenv "TRAVIS" "1")
12193 (setenv "APPVEYOR" "1")
12194 #t))
12195 (add-before 'check 'adjust-tests
12196 (lambda _
12197 (let ((disabled-tests
12198 '(;; These tests rely on networking which is not
12199 ;; available in the build container.
12200 "test_urllib2net.py"
12201 "test__server.py"
12202 "test__server_pywsgi.py"
12203 "test_socket.py"
12204 "test__socket.py"
12205 "test__socket_ssl.py"
12206 "test__socket_dns.py"
12207 "test__socket_dns6.py"
12208 "test___example_servers.py"
12209 "test__getaddrinfo_import.py"
12210 "test__examples.py"
12211 "test_httplib.py"
12212 "test_https.py"
12213 "test_urllib2_localnet.py"
12214 "test_ssl.py"
12215 "test__ssl.py"
12216 ;; XXX: These tests borrow functionality from the
12217 ;; Python builtin 'test' module, but it is not
12218 ;; installed with the Guix Python distribution.
12219 "test_smtpd.py"
12220 "test_wsgiref.py"
12221 "test_urllib2.py"
12222 "test_thread.py"
12223 "test_threading.py"
12224 "test__threading_2.py"
12225 ;; These tests rely on KeyboardInterrupts which do not
12226 ;; work inside the build container for some reason
12227 ;; (lack of controlling terminal?).
12228 "test_subprocess.py"
12229 "test__issues461_471.py"
12230 ;; TODO: Patch out the tests that use getprotobyname, etc
12231 ;; instead of disabling all the tests from these files.
12232 "test__resolver_dnspython.py"
12233 "test__doctests.py"
12234 "test__all__.py"
12235 "test___config.py"
12236 "test__execmodules.py")))
12237 (call-with-output-file "skipped_tests.txt"
12238 (lambda (port)
12239 (format port "~a~%"
12240 (string-join disabled-tests "\n"))))
12241 #t)))
12242 (replace 'check
12243 (lambda _
12244 ;; Make sure the build directory is on PYTHONPATH.
12245 (setenv "PYTHONPATH"
12246 (string-append
12247 (getenv "PYTHONPATH") ":"
12248 (getcwd) "/build/"
12249 (car (scandir "build" (cut string-prefix? "lib." <>)))))
12250
12251 ;; Use the build daemons configured number of workers.
12252 (setenv "NWORKERS" (number->string (parallel-job-count)))
12253
12254 (invoke "python" "-m" "gevent.tests" "--config"
12255 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
12256 (propagated-inputs
12257 `(("python-greenlet" ,python-greenlet)
12258 ("python-objgraph" ,python-objgraph)
12259 ("python-zope.event" ,python-zope-event)
12260 ("python-zope.interface" ,python-zope-interface)))
12261 (native-inputs
12262 `(("python-six" ,python-six)
12263
12264 ;; For tests.
12265 ("python-dnspython" ,python-dnspython)
12266 ("python-psutil" ,python-psutil)))
12267 (inputs
12268 `(("c-ares" ,c-ares)
12269 ("libev" ,libev)))
12270 (home-page "http://www.gevent.org/")
12271 (synopsis "Coroutine-based network library")
12272 (description
12273 "gevent is a coroutine-based Python networking library that uses greenlet
12274 to provide a high-level synchronous API on top of the libev event loop.")
12275 (license license:expat)
12276 (properties `((python2-variant . ,(delay python2-gevent))))))
12277
12278 (define-public python2-gevent
12279 (let ((base (package-with-python2
12280 (strip-python2-variant python-gevent))))
12281 (package
12282 (inherit base)
12283 (native-inputs `(,@(package-native-inputs base)
12284 ("python-mock" ,python2-mock)
12285 ("python2-selectors2" ,python2-selectors2))))))
12286
12287 (define-public python-fastimport
12288 (package
12289 (name "python-fastimport")
12290 (version "0.9.8")
12291 (source
12292 (origin
12293 (method url-fetch)
12294 (uri (pypi-uri "fastimport" version))
12295 (sha256
12296 (base32 "1fb3b7y3sw55f6wykxx478ybkirz0l52lgdqmbhmc0h0jzmyiwmj"))))
12297 (build-system python-build-system)
12298 (home-page "https://github.com/jelmer/python-fastimport")
12299 (synopsis "VCS fastimport parser and generator in Python")
12300 (description "This package provides a parser for and generator of the Git
12301 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
12302 format.")
12303 (license license:gpl2+)))
12304
12305 (define-public python2-fastimport
12306 (package-with-python2 python-fastimport))
12307
12308 (define-public python-twisted
12309 (package
12310 (name "python-twisted")
12311 (version "19.7.0")
12312 (source (origin
12313 (method url-fetch)
12314 (uri (pypi-uri "Twisted" version ".tar.bz2"))
12315 (sha256
12316 (base32
12317 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
12318 (build-system python-build-system)
12319 (arguments
12320 '(#:tests? #f)) ; FIXME: some tests fail
12321 (propagated-inputs
12322 `(("python-zope-interface" ,python-zope-interface)
12323 ("python-pyhamcrest" ,python-pyhamcrest)
12324 ("python-incremental" ,python-incremental)
12325 ("python-hyperlink" ,python-hyperlink)
12326 ("python-constantly" ,python-constantly)
12327 ("python-automat" ,python-automat)))
12328 (home-page "https://twistedmatrix.com/")
12329 (synopsis "Asynchronous networking framework written in Python")
12330 (description
12331 "Twisted is an extensible framework for Python programming, with special
12332 focus on event-based network programming and multiprotocol integration.")
12333 (license license:expat)))
12334
12335 (define-public python2-twisted
12336 (package-with-python2 python-twisted))
12337
12338 (define-public python-pika
12339 (package
12340 (name "python-pika")
12341 (version "0.12.0")
12342 (source
12343 (origin
12344 (method url-fetch)
12345 (uri (pypi-uri "pika" version))
12346 (sha256
12347 (base32
12348 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
12349 (build-system python-build-system)
12350 (native-inputs
12351 `(("python-pyev" ,python-pyev)
12352 ("python-tornado" ,python-tornado)
12353 ("python-twisted" ,python-twisted)))
12354 (home-page "https://pika.readthedocs.org")
12355 (synopsis "Pure Python AMQP Client Library")
12356 (description
12357 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
12358 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
12359 network support library.")
12360 (license license:bsd-3)))
12361
12362 (define-public python2-pika
12363 (package-with-python2 python-pika))
12364
12365 (define-public python-ply
12366 (package
12367 (name "python-ply")
12368 (version "3.11")
12369 (source
12370 (origin
12371 (method url-fetch)
12372 (uri (pypi-uri "ply" version))
12373 (sha256
12374 (base32
12375 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
12376 (build-system python-build-system)
12377 (home-page "http://www.dabeaz.com/ply/")
12378 (synopsis "Python Lex & Yacc")
12379 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
12380 It uses LR parsing and does extensive error checking.")
12381 (license license:bsd-3)))
12382
12383 (define-public python-tabulate
12384 (package
12385 (name "python-tabulate")
12386 (version "0.8.7")
12387 (source (origin
12388 (method url-fetch)
12389 (uri (pypi-uri "tabulate" version))
12390 (sha256
12391 (base32
12392 "01shi7bmj09f0bcm5s0c9skys063lzp76p0n4a2xmg041ni269yv"))))
12393 (build-system python-build-system)
12394 (arguments
12395 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
12396 ;; and the latest release is not tagged in the upstream repository.
12397 '(#:tests? #f))
12398 (home-page "https://bitbucket.org/astanin/python-tabulate")
12399 (synopsis "Pretty-print tabular data")
12400 (description
12401 "Tabulate is a library and command-line utility to pretty-print tabular
12402 data in Python.")
12403 (license license:expat)))
12404
12405 (define-public python2-tabulate
12406 (package-with-python2 python-tabulate))
12407
12408 (define-public python-kazoo
12409 (package
12410 (name "python-kazoo")
12411 (version "2.4.0")
12412 (source
12413 (origin
12414 (method url-fetch)
12415 (uri (pypi-uri "kazoo" version))
12416 (sha256
12417 (base32
12418 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
12419 (build-system python-build-system)
12420 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
12421 (propagated-inputs
12422 `(("python-six" ,python-six)))
12423 (home-page "https://kazoo.readthedocs.org")
12424 (synopsis "High-level Zookeeper client library")
12425 (description
12426 "Kazoo is a Python client library for the Apache Zookeeper distributed
12427 application service. It is designed to be easy to use and to avoid common
12428 programming errors.")
12429 (license license:asl2.0)))
12430
12431 (define-public python2-kazoo
12432 (package-with-python2 python-kazoo))
12433
12434 (define-public python-pykafka
12435 (package
12436 (name "python-pykafka")
12437 (version "2.4.0")
12438 (source (origin
12439 (method url-fetch)
12440 (uri (pypi-uri "pykafka" version))
12441 (sha256
12442 (base32
12443 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
12444 (build-system python-build-system)
12445 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
12446 (propagated-inputs
12447 `(("python-gevent" ,python-gevent)
12448 ("python-kazoo" ,python-kazoo)
12449 ("python-tabulate" ,python-tabulate)))
12450 (inputs
12451 `(("librdkafka" ,librdkafka)))
12452 (home-page "https://pykafka.readthedocs.io/")
12453 (synopsis "Apache Kafka client for Python")
12454 (description
12455 "PyKafka is a client for the Apache Kafka distributed messaging system.
12456 It includes Python implementations of Kafka producers and consumers, which
12457 are optionally backed by a C extension built on librdkafka.")
12458 (license license:asl2.0)))
12459
12460 (define-public python2-pykafka
12461 (package-with-python2 python-pykafka))
12462
12463 (define-public python-wcwidth
12464 (package
12465 (name "python-wcwidth")
12466 (version "0.1.8")
12467 (source (origin
12468 (method url-fetch)
12469 (uri (pypi-uri "wcwidth" version))
12470 (sha256
12471 (base32
12472 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
12473 (build-system python-build-system)
12474 (home-page "https://github.com/jquast/wcwidth")
12475 (synopsis "Measure number of terminal column cells of wide-character codes")
12476 (description "Wcwidth measures the number of terminal column cells of
12477 wide-character codes. It is useful for those implementing a terminal emulator,
12478 or programs that carefully produce output to be interpreted by one. It is a
12479 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
12480 specified in POSIX.1-2001 and POSIX.1-2008.")
12481 (license license:expat)))
12482
12483 (define-public python2-wcwidth
12484 (package-with-python2 python-wcwidth))
12485
12486 (define-public python2-jsonrpclib
12487 (package
12488 (name "python2-jsonrpclib")
12489 (version "0.1.7")
12490 (source (origin
12491 (method url-fetch)
12492 (uri (pypi-uri "jsonrpclib" version))
12493 (sha256
12494 (base32
12495 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
12496 (build-system python-build-system)
12497 (arguments
12498 `(#:tests? #f
12499 #:python ,python-2))
12500 (home-page "https://github.com/joshmarshall/jsonrpclib/")
12501 (synopsis "Implementation of JSON-RPC specification for Python")
12502 (description
12503 "This library is an implementation of the JSON-RPC specification.
12504 It supports both the original 1.0 specification, as well as the
12505 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
12506 etc.")
12507 (license license:asl2.0)))
12508
12509 (define-public python-chai
12510 (package
12511 (name "python-chai")
12512 (version "1.1.2")
12513 (source (origin
12514 (method url-fetch)
12515 (uri (pypi-uri "chai" version))
12516 (sha256
12517 (base32
12518 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
12519 (build-system python-build-system)
12520 (home-page "https://github.com/agoragames/chai")
12521 (synopsis "Mocking framework for Python")
12522 (description
12523 "Chai provides an api for mocking, stubbing and spying your python
12524 objects, patterned after the Mocha library for Ruby.")
12525 (license license:bsd-3)))
12526
12527 (define-public python2-chai
12528 (package-with-python2 python-chai))
12529
12530 (define-public python-inflection
12531 (package
12532 (name "python-inflection")
12533 (version "0.3.1")
12534 (source
12535 (origin (method url-fetch)
12536 (uri (pypi-uri "inflection" version))
12537 (sha256
12538 (base32
12539 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
12540 (build-system python-build-system)
12541 (native-inputs
12542 `(("python-pytest" ,python-pytest)))
12543 (home-page "https://github.com/jpvanhal/inflection")
12544 (synopsis "Python string transformation library")
12545 (description
12546 "Inflection is a string transformation library. It singularizes
12547 and pluralizes English words, and transforms strings from CamelCase to
12548 underscored string.")
12549 (license license:expat)))
12550
12551 (define-public python2-inflection
12552 (package-with-python2 python-inflection))
12553
12554 (define-public python-pylev
12555 (package
12556 (name "python-pylev")
12557 (version "1.3.0")
12558 (source (origin
12559 (method url-fetch)
12560 (uri (pypi-uri "pylev" version))
12561 (sha256
12562 (base32
12563 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
12564 (build-system python-build-system)
12565 (home-page "https://github.com/toastdriven/pylev")
12566 (synopsis "Levenshtein distance implementation in Python")
12567 (description "Pure Python Levenshtein implementation, based off the
12568 Wikipedia code samples at
12569 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
12570 (license license:bsd-3)))
12571
12572 (define-public python2-pylev
12573 (package-with-python2 python-pylev))
12574
12575 (define-public python-cleo
12576 (package
12577 (name "python-cleo")
12578 (version "0.8.1")
12579 (source (origin
12580 (method url-fetch)
12581 (uri (pypi-uri "cleo" version))
12582 (sha256
12583 (base32
12584 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
12585 (build-system python-build-system)
12586 (native-inputs
12587 `( ;; For testing
12588 ("python-mock" ,python-mock)
12589 ("python-pytest-mock" ,python-pytest-mock)
12590 ("python-pytest" ,python-pytest)))
12591 (propagated-inputs
12592 `(("python-backpack" ,python-backpack)
12593 ("python-clikit" ,python-clikit)
12594 ("python-pastel" ,python-pastel)
12595 ("python-pylev" ,python-pylev)))
12596 (home-page "https://github.com/sdispater/cleo")
12597 (synopsis "Command-line arguments library for Python")
12598 (description
12599 "Cleo allows you to create command-line commands with signature in
12600 docstring and colored output.")
12601 (license license:expat)))
12602
12603 (define-public python2-cleo
12604 (package-with-python2 python-cleo))
12605
12606 (define-public python-tomlkit
12607 (package
12608 (name "python-tomlkit")
12609 (version "0.6.0")
12610 (source
12611 (origin
12612 (method url-fetch)
12613 (uri (pypi-uri "tomlkit" version))
12614 (sha256
12615 (base32 "16jf0060csn8p500jnxa7m5h1sl3pzispvd11961dzrhh287dybl"))))
12616 (build-system python-build-system)
12617 (native-inputs
12618 `(("python-pytest" ,python-pytest)))
12619 (home-page "https://github.com/sdispater/tomlkit")
12620 (synopsis "Style-preserving TOML library")
12621 (description
12622 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
12623 preserves all comments, indentations, whitespace and internal element ordering,
12624 and makes them accessible and editable via an intuitive API. It can also
12625 create new TOML documents from scratch using the provided helpers. Part of the
12626 implementation has been adapted, improved, and fixed from Molten.")
12627 (license license:expat)))
12628
12629 (define-public python-shellingham
12630 (package
12631 (name "python-shellingham")
12632 (version "1.3.2")
12633 (source
12634 (origin
12635 (method url-fetch)
12636 (uri (pypi-uri "shellingham" version))
12637 (sha256
12638 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
12639 (build-system python-build-system)
12640 (arguments
12641 `(#:phases
12642 (modify-phases %standard-phases
12643 (add-after 'unpack 'restore-setup.py
12644 ;; setup.py will return in the next release.
12645 ;; <https://github.com/sarugaku/shellingham/issues/33>
12646 (lambda _
12647 (with-output-to-file "setup.py"
12648 (lambda _
12649 (display "from setuptools import setup\nsetup()\n")))
12650 #t)))))
12651 (home-page "https://github.com/sarugaku/shellingham")
12652 (synopsis "Tool to detect surrounding shell")
12653 (description
12654 "Shellingham detects what shell the current Python executable is
12655 running in.")
12656 (license license:isc)))
12657
12658 (define-public python-memcached
12659 (package
12660 (name "python-memcached")
12661 (version "1.59")
12662 (source
12663 (origin
12664 (method url-fetch)
12665 (uri (pypi-uri "python-memcached" version))
12666 (sha256
12667 (base32
12668 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
12669 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
12670 (build-system python-build-system)
12671 (propagated-inputs `(("python-six" ,python-six)))
12672 (home-page
12673 "https://github.com/linsomniac/python-memcached")
12674 (synopsis "Pure python memcached client")
12675 (description
12676 "This software is a pure Python interface to the memcached memory cache
12677 daemon. It is the client side software which allows storing values in one or
12678 more, possibly remote, memcached servers.")
12679 (license license:psfl)))
12680
12681 (define-public python-clikit
12682 (package
12683 (name "python-clikit")
12684 (version "0.6.2")
12685 (source
12686 (origin
12687 (method url-fetch)
12688 (uri (pypi-uri "clikit" version))
12689 (sha256
12690 (base32
12691 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
12692 (build-system python-build-system)
12693 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
12694 (propagated-inputs
12695 `(("python-crashtest" ,python-crashtest)
12696 ("python-pastel" ,python-pastel)
12697 ("python-pylev" ,python-pylev)))
12698 (home-page "https://github.com/sdispater/clikit")
12699 (synopsis "Group of utilities to build command line interfaces")
12700 (description
12701 "CliKit is a group of utilities to build testable command line
12702 interfaces.")
12703 (properties `((python2-variant . ,(delay python2-clikit))))
12704 (license license:expat)))
12705
12706 (define-public python2-clikit
12707 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
12708 (package/inherit
12709 base
12710 (propagated-inputs
12711 `(("python-enum34" ,python2-enum34)
12712 ("python-typing" ,python2-typing)
12713 ,@(package-propagated-inputs base))))))
12714
12715 (define-public python-msgpack-python
12716 (package
12717 (name "python-msgpack-python")
12718 (version "0.5.6")
12719 (source
12720 (origin
12721 (method url-fetch)
12722 (uri (pypi-uri "msgpack-python" version))
12723 (sha256
12724 (base32
12725 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
12726 (build-system python-build-system)
12727 (home-page "http://msgpack.org/")
12728 (synopsis "Package to deserialize messages in MessagePack binary format")
12729 (description
12730 "MessagePack is an efficient binary serialization format. It lets you
12731 exchange data among multiple languages like JSON. But it's faster and
12732 smaller. Small integers are encoded into a single byte, and typical short
12733 strings require only one extra byte in addition to the strings themselves.")
12734 (license license:asl2.0)))
12735
12736 (define-public python-cachy
12737 (package
12738 (name "python-cachy")
12739 (version "0.3.0")
12740 (source
12741 (origin
12742 (method url-fetch)
12743 (uri (pypi-uri "cachy" version))
12744 (sha256
12745 (base32
12746 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
12747 (build-system python-build-system)
12748 (arguments
12749 '(#:phases
12750 (modify-phases %standard-phases
12751 (replace 'check
12752 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
12753 "pytest"))))))
12754 (native-inputs
12755 `(("memcached" ,memcached)
12756 ("python-fakeredis" ,python-fakeredis)
12757 ("python-flexmock" ,python-flexmock)
12758 ("python-pifpaf" ,python-pifpaf)
12759 ("python-pytest" ,python-pytest)))
12760 (propagated-inputs
12761 `(("python-memcached" ,python-memcached)
12762 ("python-msgpack-python" ,python-msgpack-python)
12763 ("python-redis" ,python-redis)))
12764 (home-page "https://github.com/sdispater/cachy")
12765 (synopsis "Simple yet effective caching library")
12766 (description
12767 "Cachy provides a simple yet effective caching library. A simple but
12768 powerful API: thread-safety; decorator syntax; support for memcached, redis,
12769 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
12770 (license license:expat)))
12771
12772 (define-public poetry
12773 (package
12774 (name "poetry")
12775 (version "1.0.10")
12776 ;; Poetry can only be built from source with Poetry.
12777 (source
12778 (origin
12779 (method url-fetch)
12780 (uri (pypi-uri "poetry" version))
12781 (sha256
12782 (base32
12783 "1wm66xlsls4f0q4skmq96yb7aahjsqwgwvbrw4iax6rd4xfqj6sb"))))
12784 (build-system python-build-system)
12785 (arguments
12786 `(#:tests? #f ;; Pypi does not have tests.
12787 #:phases
12788 (modify-phases %standard-phases
12789 (add-before 'build 'patch-setup-py
12790 (lambda _
12791 (substitute* "setup.py"
12792 ;; poetry won't update version as 21.0.0 relies on python > 3.6
12793 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
12794 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0")
12795 ;; Reported upstream:
12796 ;; <https://github.com/python-poetry/poetry/issues/2752>.
12797 (("tomlkit>=0.5.11,<0.6.0") "tomlkit>=0.5.11,<0.7.0")
12798 (("cleo>=0.7.6,<0.8.0") "cleo>=0.7.6,<0.9.0")
12799 (("clikit>=0.4.2,<0.5.0") "clikit>=0.4.2,<0.7.0"))
12800 #t)))))
12801 (propagated-inputs
12802 `(("python-cachecontrol" ,python-cachecontrol)
12803 ("python-cachy" ,python-cachy)
12804 ("python-cleo" ,python-cleo)
12805 ("python-clikit" ,python-clikit)
12806 ("python-html5lib" ,python-html5lib)
12807 ("python-jsonschema" ,python-jsonschema)
12808 ("python-keyring" ,python-keyring)
12809 ("python-msgpack-transitional" ,python-msgpack-transitional)
12810 ("python-pexpect" ,python-pexpect)
12811 ("python-pkginfo" ,python-pkginfo)
12812 ("python-pyparsing" ,python-pyparsing)
12813 ("python-pyrsistent" ,python-pyrsistent)
12814 ("python-requests" ,python-requests)
12815 ("python-requests-toolbelt" ,python-requests-toolbelt)
12816 ("python-shellingham" ,python-shellingham)
12817 ("python-tomlkit" ,python-tomlkit)
12818 ("python-virtualenv" ,python-virtualenv)))
12819 (home-page "https://python-poetry.org")
12820 (synopsis "Python dependency management and packaging made easy")
12821 (description "Poetry is a tool for dependency management and packaging
12822 in Python. It allows you to declare the libraries your project depends on and
12823 it will manage (install/update) them for you.")
12824 (license license:expat)))
12825
12826 (define-public python-lark-parser
12827 (package
12828 (name "python-lark-parser")
12829 (version "0.9.0")
12830 (source (origin
12831 (method url-fetch)
12832 (uri (pypi-uri "lark-parser" version))
12833 (sha256
12834 (base32
12835 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
12836 (build-system python-build-system)
12837 (home-page "https://github.com/lark-parser/lark")
12838 (synopsis "Multi-language parser for Python")
12839 (description
12840 "Lark is a parser built with a focus on ergonomics, performance and
12841 resilience. Lark can parse all context-free languages. That means it is
12842 capable of parsing almost any programming language out there, and to
12843 some degree most natural languages too.")
12844 (license license:expat)))
12845
12846 (define-public python-libcst
12847 (package
12848 (name "python-libcst")
12849 (version "0.3.8")
12850 (source (origin
12851 (method url-fetch)
12852 (uri (pypi-uri "libcst" version))
12853 (sha256
12854 (base32
12855 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
12856 (build-system python-build-system)
12857 (arguments
12858 `(#:phases
12859 (modify-phases %standard-phases
12860 (add-after 'unpack 'remove-failing-tests
12861 (lambda _
12862 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
12863 (delete-file "libcst/tests/test_fuzz.py")
12864 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
12865 (delete-file "libcst/tests/test_pyre_integration.py")
12866 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
12867 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
12868 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
12869 #t))
12870 (add-before 'check 'generate-test-data
12871 (lambda _
12872 (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
12873 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
12874 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
12875 (replace 'check
12876 (lambda _
12877 (invoke "python" "-m" "unittest")
12878 #t)))))
12879 (native-inputs
12880 `(("python-black" ,python-black)
12881 ("python-isort" ,python-isort)))
12882 (propagated-inputs
12883 `(("python-typing-extensions" ,python-typing-extensions)
12884 ("python-typing-inspect" ,python-typing-inspect)
12885 ("python-pyyaml" ,python-pyyaml)))
12886 (home-page "https://github.com/Instagram/LibCST")
12887 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
12888 (description
12889 "LibCST parses Python source code as a CST tree that keeps all
12890 formatting details (comments, whitespaces, parentheses, etc). It's useful
12891 for building automated refactoring (codemod) applications and linters.
12892 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
12893 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
12894 naming node types and fields, LibCST creates a lossless CST that looks and
12895 feels like an AST.")
12896 (license (list license:expat
12897 ;; Some files unde libcst/_parser/ are under Python Software
12898 ;; Foundation license (see LICENSE file for details)
12899 license:psfl
12900 ;; libcst/_add_slots.py
12901 license:asl2.0))))
12902
12903 (define-public python-typing-inspect
12904 (package
12905 (name "python-typing-inspect")
12906 (version "0.6.0")
12907 (source (origin
12908 (method url-fetch)
12909 (uri (pypi-uri "typing_inspect" version))
12910 (sha256
12911 (base32
12912 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
12913 (build-system python-build-system)
12914 (propagated-inputs
12915 `(("python-mypy-extensions" ,python-mypy-extensions)
12916 ("python-typing-extensions" ,python-typing-extensions)))
12917 (home-page "https://github.com/ilevkivskyi/typing_inspect")
12918 (synopsis "API for inspection of types in the Python @code{typing} module")
12919 (description
12920 "The @code{typing_inspect} module defines experimental API for runtime
12921 inspection of types defined in the Python standard typing module.")
12922 (license license:expat)))
12923
12924 (define-public python-lazy-object-proxy
12925 (package
12926 (name "python-lazy-object-proxy")
12927 (version "1.5.1")
12928 (source (origin
12929 (method url-fetch)
12930 (uri (pypi-uri "lazy-object-proxy" version))
12931 (sha256
12932 (base32
12933 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
12934 (native-inputs
12935 `(("python-setuptools-scm" ,python-setuptools-scm)))
12936 (build-system python-build-system)
12937 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
12938 (synopsis "Lazy object proxy for python")
12939 (description
12940 "Lazy object proxy is an object that wraps a callable but defers the call
12941 until the object is actually required, and caches the result of said call.")
12942 (license license:bsd-2)))
12943
12944 (define-public python2-lazy-object-proxy
12945 (package-with-python2 python-lazy-object-proxy))
12946
12947 (define-public python-dnspython
12948 (package
12949 (name "python-dnspython")
12950 (version "1.16.0")
12951 (source (origin
12952 (method url-fetch)
12953 (uri (string-append "http://www.dnspython.org/kits/"
12954 version "/dnspython-" version ".tar.gz"))
12955 (sha256
12956 (base32
12957 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
12958 (build-system python-build-system)
12959 (arguments '(#:tests? #f)) ; XXX: requires internet access
12960 (home-page "http://www.dnspython.org")
12961 (synopsis "DNS toolkit for Python")
12962 (description
12963 "dnspython is a DNS toolkit for Python. It supports almost all record
12964 types. It can be used for queries, zone transfers, and dynamic updates.
12965 It supports TSIG authenticated messages and EDNS0.")
12966 (license license:expat)))
12967
12968 (define-public python2-dnspython
12969 (package-with-python2 python-dnspython))
12970
12971 (define-public python-py3dns
12972 (package
12973 (name "python-py3dns")
12974 (version "3.2.1")
12975 (source
12976 (origin
12977 (method url-fetch)
12978 (uri (pypi-uri "py3dns" version))
12979 (sha256
12980 (base32
12981 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
12982 (build-system python-build-system)
12983 ;; This package wants to read /etc/resolv.conf. We can't patch it without
12984 ;; removing functionality so we copy from Nix and "just don't build it".
12985 (arguments
12986 `(#:phases
12987 (modify-phases %standard-phases
12988 (add-after 'unpack 'patch-source
12989 (lambda _
12990 (substitute* "setup.py"
12991 (("import DNS") "")
12992 (("DNS.__version__") (string-append "\"" ,version "\"")))
12993 #t)))
12994 #:tests? #f)) ; Also skip the tests.
12995 (home-page "https://launchpad.net/py3dns")
12996 (synopsis "Python 3 DNS library")
12997 (description "This Python 3 module provides a DNS API for looking up DNS
12998 entries from within Python 3 modules and applications. This module is a
12999 simple, lightweight implementation.")
13000 (license license:psfl)))
13001
13002 (define-public python-email-validator
13003 (package
13004 (name "python-email-validator")
13005 (version "1.0.2")
13006 (source
13007 (origin (method url-fetch)
13008 (uri (pypi-uri "email_validator" version))
13009 (sha256
13010 (base32
13011 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
13012 (build-system python-build-system)
13013 (arguments
13014 '(#:phases
13015 (modify-phases %standard-phases
13016 (add-before 'build 'use-dnspython
13017 (lambda _
13018 (substitute* "setup.py"
13019 (("dnspython3") "dnspython"))
13020 #t)))))
13021 (propagated-inputs
13022 `(("python-dnspython" ,python-dnspython)
13023 ("python-idna" ,python-idna)))
13024 (home-page "https://github.com/JoshData/python-email-validator")
13025 (synopsis "Email address validation library for Python")
13026 (description
13027 "This library validates email address syntax and deliverability.")
13028 (license license:cc0)))
13029
13030 (define-public python2-email-validator
13031 (package-with-python2 python-email-validator))
13032
13033 (define-public python-ukpostcodeparser
13034 (package
13035 (name "python-ukpostcodeparser")
13036 (version "1.0.3")
13037 (source (origin
13038 (method url-fetch)
13039 (uri (pypi-uri "UkPostcodeParser" version))
13040 (sha256
13041 (base32
13042 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
13043 (build-system python-build-system)
13044 (home-page "https://github.com/hamstah/ukpostcodeparser")
13045 (synopsis "UK Postcode parser for Python")
13046 (description
13047 "This library provides the @code{parse_uk_postcode} function for
13048 parsing UK postcodes.")
13049 (license license:expat)))
13050
13051 (define-public python2-ukpostcodeparser
13052 (package-with-python2 python-ukpostcodeparser))
13053
13054 (define-public python-faker
13055 (package
13056 (name "python-faker")
13057 (version "4.0.2")
13058 (source (origin
13059 (method url-fetch)
13060 (uri (pypi-uri "Faker" version))
13061 (sha256
13062 (base32
13063 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
13064 (build-system python-build-system)
13065 (arguments
13066 '(#:phases
13067 (modify-phases %standard-phases
13068 (replace 'check
13069 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
13070 (native-inputs
13071 `(;; For testing
13072 ("python-freezegun" ,python-freezegun)
13073 ("python-pytest" ,python-pytest)
13074 ("python-random2" ,python-random2)
13075 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
13076 ("python-validators" ,python-validators)))
13077 (propagated-inputs
13078 `(("python-dateutil" ,python-dateutil)
13079 ("python-text-unidecode" ,python-text-unidecode)))
13080 (home-page "https://github.com/joke2k/faker")
13081 (synopsis "Python package that generates fake data")
13082 (description
13083 "Faker is a Python package that generates fake data such as names,
13084 addresses, and phone numbers.")
13085 (license license:expat)
13086 (properties `((python2-variant . ,(delay python2-faker))))))
13087
13088 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
13089 (define-public python2-faker
13090 (let ((base (package-with-python2 (strip-python2-variant
13091 python-faker))))
13092 (package
13093 (inherit base)
13094 (version "3.0.1")
13095 (source (origin
13096 (method url-fetch)
13097 (uri (pypi-uri "Faker" version))
13098 (sha256
13099 (base32
13100 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
13101 (native-inputs
13102 `(("python-mock" ,python2-mock)
13103 ,@(package-native-inputs base)))
13104 (propagated-inputs
13105 `(("python2-ipaddress" ,python2-ipaddress)
13106 ("python2-six" ,python2-six)
13107 ,@(package-propagated-inputs base))))))
13108
13109 (define-public python-pyaml
13110 (package
13111 (name "python-pyaml")
13112 (version "18.11.0")
13113 (source (origin
13114 (method url-fetch)
13115 (uri (pypi-uri "pyaml" version))
13116 (sha256
13117 (base32
13118 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
13119 (build-system python-build-system)
13120 (native-inputs
13121 `(("python-unidecode" ,python-unidecode)))
13122 (propagated-inputs
13123 `(("python-pyyaml" ,python-pyyaml)))
13124 (home-page "https://github.com/mk-fg/pretty-yaml")
13125 (synopsis "YAML pretty-print library for Python")
13126 (description
13127 "pyaml is a PyYAML based python module to produce pretty and readable
13128 YAML-serialized data.")
13129 (license license:wtfpl2)))
13130
13131 (define-public python2-pyaml
13132 (package-with-python2 python-pyaml))
13133
13134 (define-public python-backpack
13135 (package
13136 (name "python-backpack")
13137 (version "0.1")
13138 (source
13139 (origin
13140 (method url-fetch)
13141 (uri (pypi-uri "backpack" version))
13142 (sha256
13143 (base32
13144 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
13145 (build-system python-build-system)
13146 (native-inputs
13147 `(("python-pytest" ,python-pytest)
13148 ("python-nose" ,python-nose)))
13149 (propagated-inputs
13150 `(("python-simplejson" ,python-simplejson)))
13151 (home-page "https://github.com/sdispater/backpack")
13152 (synopsis "Utilities for working with Python collections")
13153 (description "Backpack provides some useful utilities for working with
13154 collections of data.")
13155 (license license:expat)))
13156
13157 (define-public python2-backpack
13158 (package-with-python2 python-backpack))
13159
13160 (define-public python-prompt-toolkit
13161 (package
13162 (name "python-prompt-toolkit")
13163 (version "3.0.7")
13164 (source
13165 (origin
13166 (method url-fetch)
13167 (uri (pypi-uri "prompt_toolkit" version))
13168 (sha256
13169 (base32 "12a4pyrpnm3vcrvx7lb4cglp220lbvi336mhn2k2nzcgy82lcbw2"))))
13170 (build-system python-build-system)
13171 (arguments
13172 `(#:phases
13173 (modify-phases %standard-phases
13174 (delete 'check)
13175 (add-after 'install 'post-install-check
13176 (lambda* (#:key inputs outputs #:allow-other-keys)
13177 ;; HOME is needed for the test
13178 ;; "test_pathcompleter_can_expanduser".
13179 (setenv "HOME" "/tmp")
13180 (add-installed-pythonpath inputs outputs)
13181 (invoke "py.test"))))))
13182 (propagated-inputs
13183 `(("python-wcwidth" ,python-wcwidth)))
13184 (native-inputs
13185 `(("python-pytest" ,python-pytest)))
13186 (home-page
13187 "https://github.com/prompt-toolkit/python-prompt-toolkit")
13188 (synopsis "Library for building command line interfaces in Python")
13189 (description
13190 "Prompt-Toolkit is a library for building interactive command line
13191 interfaces in Python. It's like GNU Readline but it also features syntax
13192 highlighting while typing, out-of-the-box multi-line input editing, advanced
13193 code completion, incremental search, support for Chinese double-width
13194 characters, mouse support, and auto suggestions.")
13195 (license license:bsd-3)
13196 (properties `((python2-variant . ,(delay python-prompt-toolkit-2))))))
13197
13198 (define-public python-prompt-toolkit-2
13199 (package (inherit python-prompt-toolkit)
13200 (name "python-prompt-toolkit")
13201 (version "2.0.7")
13202 (source
13203 (origin
13204 (method url-fetch)
13205 (uri (pypi-uri "prompt_toolkit" version))
13206 (sha256
13207 (base32
13208 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
13209 (propagated-inputs
13210 `(("python-wcwidth" ,python-wcwidth)
13211 ("python-six" ,python-six)
13212 ("python-pygments" ,python-pygments)))
13213 (properties '())))
13214
13215 (define-public python2-prompt-toolkit
13216 (package-with-python2 python-prompt-toolkit-2))
13217
13218 (define-public python-prompt-toolkit-1
13219 (package (inherit python-prompt-toolkit-2)
13220 (version "1.0.15")
13221 (source
13222 (origin
13223 (method url-fetch)
13224 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
13225 (sha256
13226 (base32
13227 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
13228
13229 (define-public python2-prompt-toolkit-1
13230 (package-with-python2 python-prompt-toolkit-1))
13231
13232 (define-public python-jedi
13233 (package
13234 (name "python-jedi")
13235 (version "0.17.2")
13236 (source
13237 (origin
13238 (method url-fetch)
13239 (uri (pypi-uri "jedi" version))
13240 (sha256
13241 (base32 "080xyf97ifabdz7jp8clg00b8zv5g33fva1fb2xf80q6fndpvvc6"))))
13242 (build-system python-build-system)
13243 (arguments
13244 `(#:phases
13245 (modify-phases %standard-phases
13246 (replace 'check
13247 (lambda _
13248 (setenv "HOME" "/tmp")
13249 (invoke "python" "-m" "pytest" "-vv"))))))
13250 (native-inputs
13251 `(("python-pytest" ,python-pytest)
13252 ("python-docopt" ,python-docopt)))
13253 (propagated-inputs
13254 `(("python-parso" ,python-parso)))
13255 (home-page "https://github.com/davidhalter/jedi")
13256 (synopsis "Autocompletion and static analysis library for Python")
13257 (description
13258 "Jedi is a static analysis tool for Python that can be used in Integrated
13259 Development Environments (@dfn{IDE}s) and text editors. It understands Python
13260 on a deeper level than many other static analysis frameworks for Python.
13261
13262 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
13263 well.")
13264 (license license:expat)))
13265
13266 (define-public python2-jedi
13267 (package-with-python2 python-jedi))
13268
13269 (define-public ptpython
13270 (package
13271 (name "ptpython")
13272 (version "3.0.5")
13273 (source (origin
13274 (method url-fetch)
13275 (uri (pypi-uri "ptpython" version))
13276 (sha256
13277 (base32
13278 "0c2ry5gwi2v99slna62j8r2bwq0hpzmvgdryqg9m6x57vbjfg52h"))))
13279 (build-system python-build-system)
13280 (arguments
13281 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
13282 (propagated-inputs
13283 `(("python-appdirs" ,python-appdirs)
13284 ("python-jedi" ,python-jedi)
13285 ("python-prompt-toolkit" ,python-prompt-toolkit)
13286 ("python-pygments" ,python-pygments)))
13287 (home-page "https://github.com/jonathanslenders/ptpython")
13288 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
13289 (description
13290 "ptpython is a Python read-eval-print loop with IDE-like features.
13291 It supports syntax highlighting, multiline editing, autocompletion, mouse,
13292 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
13293 etc.")
13294 (license license:bsd-3)
13295 (properties `((python2-variant . ,(delay ptpython-2))))))
13296
13297 (define-public ptpython-2
13298 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
13299 (package
13300 (inherit base)
13301 (name "ptpython2"))))
13302
13303 (define-public python-stem
13304 (package
13305 (name "python-stem")
13306 (version "1.8.0")
13307 (source
13308 (origin
13309 (method url-fetch)
13310 (uri (pypi-uri "stem" version))
13311 (sha256
13312 (base32
13313 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
13314 (build-system python-build-system)
13315 (arguments
13316 `(#:phases
13317 (modify-phases %standard-phases
13318 (replace 'check
13319 (lambda _
13320 (invoke "./run_tests.py" "--unit")
13321 #t)))))
13322 (native-inputs
13323 `(("python-mock" ,python-mock)
13324 ("python-pycodestyle" ,python-pycodestyle)
13325 ("python-pyflakes" ,python-pyflakes)))
13326 (home-page "https://stem.torproject.org/")
13327 (synopsis
13328 "Python controller library that allows applications to interact with Tor")
13329 (description
13330 "Stem is a Python controller library for Tor. With it you can use Tor's
13331 control protocol to script against the Tor process and read descriptor data
13332 relays publish about themselves.")
13333 (license license:lgpl3)))
13334
13335 (define-public python2-stem
13336 (package-with-python2 python-stem))
13337
13338 (define-public python-pyserial
13339 (package
13340 (name "python-pyserial")
13341 (version "3.4")
13342 (source
13343 (origin
13344 (method url-fetch)
13345 (uri (pypi-uri "pyserial" version))
13346 (sha256
13347 (base32
13348 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
13349 (build-system python-build-system)
13350 (arguments
13351 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
13352 ;; #:phases
13353 ;; (modify-phases %standard-phases
13354 ;; (replace 'check
13355 ;; (lambda _
13356 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
13357 (home-page
13358 "https://github.com/pyserial/pyserial")
13359 (synopsis "Python Serial Port Bindings")
13360 (description "@code{pyserial} provide serial port bindings for Python. It
13361 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
13362 and/or Xon/Xoff. The port is accessed in RAW mode.")
13363 (license license:bsd-3)))
13364
13365 (define-public python2-pyserial
13366 (package-with-python2 python-pyserial))
13367
13368 (define-public python-kivy
13369 (package
13370 (name "python-kivy")
13371 (version "1.10.1")
13372 (source
13373 (origin
13374 (method url-fetch)
13375 (uri (pypi-uri "Kivy" version))
13376 (file-name (string-append name "-" version ".tar.gz"))
13377 (sha256
13378 (base32
13379 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
13380 (build-system python-build-system)
13381 (arguments
13382 `(#:tests? #f ; Tests require many optional packages
13383 #:phases
13384 (modify-phases %standard-phases
13385 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
13386 (lambda* (#:key inputs #:allow-other-keys)
13387 (setenv "KIVY_SDL2_PATH"
13388 (string-append (assoc-ref inputs "sdl-union")
13389 "/include/SDL2"))
13390 #t)))))
13391 (native-inputs
13392 `(("pkg-config" ,pkg-config)
13393 ("python-cython" ,python-cython)))
13394 (inputs
13395 `(("gstreamer" ,gstreamer)
13396 ("mesa" ,mesa)
13397 ("sdl-union"
13398 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
13399 (home-page "https://kivy.org")
13400 (synopsis
13401 "Multitouch application framework")
13402 (description
13403 "A software library for rapid development of
13404 hardware-accelerated multitouch applications.")
13405 (license license:expat)))
13406
13407 (define-public python2-kivy
13408 (package-with-python2 python-kivy))
13409
13410 (define-public python-binaryornot
13411 (package
13412 (name "python-binaryornot")
13413 (version "0.4.4")
13414 (source (origin
13415 (method url-fetch)
13416 (uri (pypi-uri "binaryornot" version))
13417 (sha256
13418 (base32
13419 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
13420 (build-system python-build-system)
13421 (arguments
13422 `(#:phases
13423 (modify-phases %standard-phases
13424 (add-after 'unpack 'patch-tests
13425 (lambda _
13426 ;; TypeError: binary() got an unexpected keyword argument
13427 ;; 'average_size'.
13428 (substitute* "tests/test_check.py"
13429 (("average_size=512") ""))
13430 #t)))))
13431 (propagated-inputs
13432 `(("python-chardet" ,python-chardet)
13433 ("python-hypothesis" ,python-hypothesis)))
13434 (home-page "https://github.com/audreyr/binaryornot")
13435 (synopsis "Package to check if a file is binary or text")
13436 (description "Ultra-lightweight pure Python package to check if a file is
13437 binary or text.")
13438 (license license:bsd-3)
13439 (properties `((python2-variant . ,(delay python2-binaryornot))))))
13440
13441 (define-public python2-binaryornot
13442 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
13443 (package (inherit base)
13444 (propagated-inputs
13445 `(("python2-enum34" ,python2-enum34)
13446 ,@(package-propagated-inputs base))))))
13447
13448 (define-public python-binwalk
13449 (package
13450 (name "python-binwalk")
13451 (version "2.2.0")
13452 (source
13453 (origin
13454 (method git-fetch)
13455 (uri (git-reference
13456 (url "https://github.com/ReFirmLabs/binwalk")
13457 (commit (string-append "v" version))))
13458 (file-name (git-file-name name version))
13459 (sha256
13460 (base32
13461 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
13462 (build-system python-build-system)
13463 (arguments
13464 `(#:phases
13465 (modify-phases %standard-phases
13466 (add-before 'check 'set-pythonpath
13467 (lambda _
13468 (setenv "PYTHONPATH"
13469 (string-append
13470 (getcwd) "/src/"
13471 ":" (getenv "PYTHONPATH")))
13472 (setenv "HOME" "")
13473 #t)))))
13474 (native-inputs
13475 `(("python-coverage" ,python-coverage)
13476 ("python-nose" ,python-nose)))
13477 (home-page "https://github.com/ReFirmLabs/binwalk")
13478 (synopsis "Firmware analysis tool")
13479 (description "Binwalk is a tool for analyzing, reverse engineering, and
13480 extracting firmware images")
13481 (license license:expat)))
13482
13483 (define-public python-nltk
13484 (package
13485 (name "python-nltk")
13486 (version "3.2.1")
13487 (source (origin
13488 (method url-fetch)
13489 (uri (pypi-uri "nltk" version))
13490 (sha256
13491 (base32
13492 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
13493 (build-system python-build-system)
13494 (arguments
13495 '(;; The tests require some extra resources to be downloaded.
13496 ;; TODO Try packaging these resources.
13497 #:tests? #f))
13498 (home-page "http://nltk.org/")
13499 (synopsis "Natural Language Toolkit")
13500 (description "It provides interfaces to over 50 corpora and lexical
13501 resources such as WordNet, along with a suite of text processing libraries
13502 for classification, tokenization, stemming, tagging, parsing, and semantic
13503 reasoning, wrappers for natural language processing libraries.")
13504 (license license:asl2.0)))
13505
13506 (define-public python2-nltk
13507 (package-with-python2 python-nltk))
13508
13509 (define-public python-pymongo
13510 (package
13511 (name "python-pymongo")
13512 (version "3.7.2")
13513 (source (origin
13514 (method url-fetch)
13515 (uri (pypi-uri "pymongo" version))
13516 (sha256
13517 (base32
13518 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
13519 (build-system python-build-system)
13520 (propagated-inputs
13521 `(("python-certifi" ,python-certifi)))
13522 (home-page "https://github.com/mongodb/mongo-python-driver")
13523 (synopsis "Python driver for MongoDB")
13524 (description "Python driver for MongoDB.")
13525 (license license:asl2.0)))
13526
13527 (define-public python2-pymongo
13528 (package-with-python2 python-pymongo))
13529
13530 (define-public python-consul
13531 (package
13532 (name "python-consul")
13533 (version "0.6.1")
13534 (source
13535 (origin
13536 (method url-fetch)
13537 (uri (pypi-uri "python-consul" version))
13538 (sha256
13539 (base32
13540 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
13541 (build-system python-build-system)
13542 (arguments
13543 '(#:tests? #f)) ; The tests are not distributed
13544 (propagated-inputs
13545 `(("python-requests" ,python-requests)
13546 ("python-six" ,python-six)))
13547 (home-page "https://github.com/cablehead/python-consul")
13548 (synopsis "Python client for Consul")
13549 (description
13550 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
13551 discovery, monitoring and configuration.")
13552 (license license:expat)))
13553
13554 (define-public python2-consul
13555 (package-with-python2 python-consul))
13556
13557 (define-public python-schematics
13558 (package
13559 (name "python-schematics")
13560 (version "1.1.1")
13561 (source
13562 (origin
13563 (method git-fetch)
13564 (uri (git-reference
13565 (url "https://github.com/schematics/schematics")
13566 (commit (string-append "v" version))))
13567 (file-name (git-file-name name version))
13568 (sha256
13569 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
13570 (build-system python-build-system)
13571 (propagated-inputs
13572 `(("python-six" ,python-six)))
13573 (arguments
13574 ;; The tests require a bunch of not very nice packages with fixed
13575 ;; version requirements (e.g. python-coveralls).
13576 `(#:tests? #f))
13577 (home-page "https://github.com/schematics/schematics")
13578 (synopsis "Python Data Structures for Humans")
13579 (description "Python Data Structures for Humans.")
13580 (license license:bsd-3)))
13581
13582 (define-public python2-schematics
13583 (package-with-python2 python-schematics))
13584
13585 (define-public python-odfpy
13586 (package
13587 (name "python-odfpy")
13588 (version "1.4.1")
13589 (source (origin
13590 (method url-fetch)
13591 (uri (pypi-uri "odfpy" version))
13592 (sha256
13593 (base32
13594 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
13595 (arguments
13596 `(#:phases
13597 (modify-phases %standard-phases
13598 (replace 'check
13599 (lambda _
13600 (setenv "PYTHONPATH" (string-append "./build/lib:"
13601 (getenv "PYTHONPATH")))
13602 (invoke "pytest" "-vv"))))))
13603 (build-system python-build-system)
13604 (native-inputs
13605 `(("python-pytest" ,python-pytest)))
13606 (propagated-inputs
13607 `(("python-defusedxml" ,python-defusedxml)))
13608 (home-page "https://github.com/eea/odfpy")
13609 (synopsis "Python API and tools to manipulate OpenDocument files")
13610 (description "Collection of libraries and utility programs written in
13611 Python to manipulate OpenDocument 1.2 files.")
13612 (license
13613 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
13614 ;; number of files with other licenses.
13615 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
13616
13617 (define-public python2-odfpy
13618 (package-with-python2 python-odfpy))
13619
13620 (define-public python-natsort
13621 (package
13622 (name "python-natsort")
13623 (version "7.0.1")
13624 (source (origin
13625 (method url-fetch)
13626 (uri (pypi-uri "natsort" version))
13627 (sha256
13628 (base32
13629 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
13630 (build-system python-build-system)
13631 (arguments
13632 `(#:modules ((guix build utils)
13633 (guix build python-build-system)
13634 (srfi srfi-1)
13635 (srfi srfi-26)
13636 (ice-9 ftw))
13637 #:phases
13638 (modify-phases %standard-phases
13639 (add-before 'check 'set-cachedir
13640 ;; Tests require write access to $HOME by default
13641 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
13642 (replace 'check
13643 (lambda _
13644 (let ((cwd (getcwd)))
13645 (setenv "PYTHONPATH"
13646 (string-append
13647 cwd "/build/"
13648 (find (cut string-prefix? "lib" <>)
13649 (scandir (string-append cwd "/build")))
13650 ":"
13651 (getenv "PYTHONPATH")))
13652 (invoke "pytest" "-v")))))))
13653 (native-inputs
13654 `(("python-hypothesis" ,python-hypothesis)
13655 ("python-pytest-cov" ,python-pytest-cov)
13656 ("python-pytest-mock" ,python-pytest-mock)
13657 ("python-pytest" ,python-pytest)))
13658 (propagated-inputs ; TODO: Add python-fastnumbers.
13659 `(("python-pyicu" ,python-pyicu)))
13660 (home-page "https://github.com/SethMMorton/natsort")
13661 (synopsis "Natural sorting for python and shell")
13662 (description
13663 "Natsort lets you apply natural sorting on lists instead of
13664 lexicographical. If you use the built-in @code{sorted} method in python
13665 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
13666 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
13667 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
13668 identifies numbers and sorts them separately from strings. It can also sort
13669 version numbers, real numbers, mixed types and more, and comes with a shell
13670 command @command{natsort} that exposes this functionality in the command line.")
13671 (license license:expat)
13672 (properties `((python2-variant . ,(delay python2-natsort))))))
13673
13674 ;; Natsort 6.x are the last versions with support for Python 2.
13675 (define-public python2-natsort
13676 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
13677 (package (inherit base)
13678 (version "6.2.1")
13679 (source (origin
13680 (method url-fetch)
13681 (uri (pypi-uri "natsort" version))
13682 (sha256
13683 (base32
13684 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
13685 (native-inputs
13686 `(("python2-pathlib" ,python2-pathlib)
13687 ,@(package-native-inputs base))))))
13688
13689 (define-public glances
13690 (package
13691 (name "glances")
13692 (version "3.1.4")
13693 (source
13694 (origin
13695 (method url-fetch)
13696 (uri (pypi-uri "Glances" version))
13697 (sha256
13698 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
13699 (modules '((guix build utils)))
13700 (snippet
13701 '(begin
13702 ;; Glances phones PyPI for weekly update checks by default.
13703 ;; Disable these. The user can re-enable them if desired.
13704 (substitute* "glances/outdated.py"
13705 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
13706 (string-append indentation
13707 "self.args.disable_check_update = True\n"
13708 line)))
13709 #t))))
13710 (build-system python-build-system)
13711 (propagated-inputs
13712 `(("python-future" ,python-future)
13713 ("python-psutil" ,python-psutil)))
13714 (home-page "https://github.com/nicolargo/glances")
13715 (synopsis "Cross-platform curses-based monitoring tool")
13716 (description
13717 "Glances is a curses-based monitoring tool for a wide variety of platforms.
13718 Glances uses the PsUtil library to get information from your system. It
13719 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
13720 (license license:lgpl3+)))
13721
13722 (define-public python-glances
13723 (deprecated-package "python-glances" glances))
13724
13725 (define-public python-graphql-core
13726 (package
13727 (name "python-graphql-core")
13728 (version "0.5.3")
13729 (source
13730 (origin
13731 (method url-fetch)
13732 (uri (pypi-uri "graphql-core" version))
13733 (sha256
13734 (base32
13735 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
13736 (build-system python-build-system)
13737 (arguments
13738 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
13739 #:phases
13740 (modify-phases %standard-phases
13741 (add-after 'unpack 'patch-hardcoded-version
13742 (lambda _ (substitute*
13743 "setup.py"
13744 (("'gevent==1.1rc1'") "'gevent'"))
13745 #t)))))
13746 (native-inputs
13747 `(("python-gevent" ,python-gevent)
13748 ("python-mock" ,python-mock)
13749 ("python-pytest-mock" ,python-pytest-mock)))
13750 (propagated-inputs
13751 `(("python-promise" ,python-promise)
13752 ("python-six" ,python-six)))
13753 (home-page "https://github.com/graphql-python/graphql-core")
13754 (synopsis "GraphQL implementation for Python")
13755 (description
13756 "GraphQL implementation for Python. GraphQL is a data query language and
13757 runtime designed and used to request and deliver data to mobile and web apps.
13758 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
13759 to Python.")
13760 (license license:expat)))
13761
13762 (define-public python2-graphql-core
13763 (package-with-python2 python-graphql-core))
13764
13765 (define-public python-graphql-relay
13766 (package
13767 (name "python-graphql-relay")
13768 (version "0.4.5")
13769 (source
13770 (origin
13771 (method url-fetch)
13772 (uri (pypi-uri "graphql-relay" version))
13773 (sha256
13774 (base32
13775 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
13776 (build-system python-build-system)
13777 (arguments
13778 '(#:tests? #f)) ; The tests are not distributed
13779 (propagated-inputs
13780 `(("python-graphql-core" ,python-graphql-core)
13781 ("python-promise" ,python-promise)
13782 ("python-six" ,python-six)))
13783 (home-page "https://github.com/graphql-python/graphql-relay-py")
13784 (synopsis "Relay implementation for Python")
13785 (description
13786 "This is a library to allow the easy creation of Relay-compliant servers
13787 using the GraphQL Python reference implementation of a GraphQL server. It
13788 should be noted that the code is a exact port of the original
13789 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
13790 from Facebook.")
13791 (license license:expat)))
13792
13793 (define-public python2-graphql-relay
13794 (package-with-python2 python-graphql-relay))
13795
13796 (define-public python-graphene
13797 (package
13798 (name "python-graphene")
13799 (version "0.10.2")
13800 (source
13801 (origin
13802 (method url-fetch)
13803 (uri (pypi-uri "graphene" version))
13804 (sha256
13805 (base32
13806 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
13807 (build-system python-build-system)
13808 (propagated-inputs
13809 `(("python-graphql-core" ,python-graphql-core)
13810 ("python-graphql-relay" ,python-graphql-relay)
13811 ("python-iso8601" ,python-iso8601)
13812 ("python-promise" ,python-promise)
13813 ("python-six" ,python-six)))
13814 (arguments
13815 `(#:tests? #f)) ; no tests/ in the PyPI tarball
13816 (home-page "https://graphene-python.org/")
13817 (synopsis "GraphQL Framework for Python")
13818 (description
13819 "Graphene is a Python library for building GraphQL schemas/types.
13820 A GraphQL schema describes your data model, and provides a GraphQL server
13821 with an associated set of resolve methods that know how to fetch data.")
13822 (properties `((python2-variant . ,(delay python2-graphene))))
13823 (license license:expat)))
13824
13825 (define-public python2-graphene
13826 (let ((base (package-with-python2
13827 (strip-python2-variant python-graphene))))
13828 (package (inherit base)
13829 (native-inputs
13830 `(("python2-sqlalchemy" ,python2-sqlalchemy)
13831 ,@(package-native-inputs base))))))
13832
13833 (define-public python-nautilus
13834 (package
13835 (name "python-nautilus")
13836 (version "0.4.9")
13837 (source
13838 (origin
13839 (method url-fetch)
13840 (uri (pypi-uri "nautilus" version))
13841 (sha256
13842 (base32
13843 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
13844 (build-system python-build-system)
13845 (arguments `(#:tests? #f)) ; fails to import test modules
13846 (propagated-inputs
13847 `(("python-bcrypt" ,python-bcrypt)
13848 ("python-click" ,python-click)
13849 ("python-consul" ,python-consul)
13850 ("python-graphene" ,python-graphene)
13851 ("python-jinja2" ,python-jinja2)
13852 ("python-peewee" ,python-peewee)
13853 ("python-pika" ,python-pika)
13854 ("python-tornado" ,python-tornado)
13855 ("python-wtforms" ,python-wtforms)))
13856 (native-inputs
13857 `(("python-nose2" ,python-nose2)))
13858 (home-page "https://github.com/AlecAivazis/nautilus")
13859 (synopsis "Library for creating microservice applications")
13860 (description
13861 "Nautilus is a framework for flux based microservices that looks to
13862 provide extendible implementations of common aspects of a cloud so that you can
13863 focus on building massively scalable web applications.")
13864 (license license:expat)))
13865
13866 (define-public python-random2
13867 (package
13868 (name "python-random2")
13869 (version "1.0.1")
13870 (source (origin
13871 (method url-fetch)
13872 (uri (pypi-uri "random2" version ".zip"))
13873 (sha256
13874 (base32
13875 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
13876 (build-system python-build-system)
13877 (native-inputs `(("unzip" ,unzip)))
13878 (home-page "http://pypi.python.org/pypi/random2")
13879 (synopsis "Python 3 version of the Python 2 @code{random} module")
13880 (description
13881 "This package provides a Python 3 ported version of Python 2.7’s
13882 @code{random} module. It has also been back-ported to work in Python 2.6.
13883
13884 In Python 3, the implementation of @code{randrange()} was changed, so that
13885 even with the same seed you get different sequences in Python 2 and 3.
13886
13887 This package closes that gap, allowing stable random number generation
13888 between the different Python versions.")
13889 (license license:psfl)))
13890
13891 (define-public python2-random2
13892 (package-with-python2 python-random2))
13893
13894 (define-public python-snowballstemmer
13895 (package
13896 (name "python-snowballstemmer")
13897 (version "2.0.0")
13898 (source (origin
13899 (method url-fetch)
13900 (uri (pypi-uri "snowballstemmer" version))
13901 (sha256
13902 (base32
13903 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
13904 (build-system python-build-system)
13905 (arguments
13906 `(;; No tests exist
13907 #:tests? #f))
13908 (home-page "https://github.com/shibukawa/snowball_py")
13909 (synopsis "Snowball stemming library collection for Python")
13910 (description "This package provides 16 word stemmer algorithms generated
13911 from Snowball algorithms. It includes the 15 original ones plus the Poerter
13912 English stemmer.")
13913 (license license:bsd-3)))
13914
13915 (define-public python2-snowballstemmer
13916 (package-with-python2 python-snowballstemmer))
13917
13918 (define-public python-setproctitle
13919 (package
13920 (name "python-setproctitle")
13921 (version "1.1.10")
13922 (source
13923 (origin
13924 (method url-fetch)
13925 (uri (pypi-uri "setproctitle" version))
13926 (sha256
13927 (base32
13928 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
13929 (build-system python-build-system)
13930 (arguments
13931 '(#:phases
13932 (modify-phases %standard-phases
13933 (add-before 'check 'patch-Makefile
13934 ;; Stricly this is only required for the python2 variant.
13935 ;; But adding a phase in an inherited package seems to be
13936 ;; cumbersum. So we patch even for python3.
13937 (lambda _
13938 (let ((nose (assoc-ref %build-inputs "python2-nose")))
13939 (when nose
13940 (substitute* "Makefile"
13941 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
13942 (string-append nose "/bin/nosetests "))))
13943 #t)))
13944 (replace 'check
13945 (lambda _
13946 (setenv "PYTHON" (or (which "python3") (which "python")))
13947 (setenv "PYCONFIG" (if (which "python3-config")
13948 "python3-config --embed"
13949 "python-config"))
13950 (setenv "CC" "gcc")
13951 ;; No need to extend PYTHONPATH to find the built package, since
13952 ;; the Makefile will build anyway
13953 (invoke "make" "check"))))))
13954 (native-inputs
13955 `(("procps" ,procps))) ; required for tests
13956 (home-page "https://github.com/dvarrazzo/py-setproctitle")
13957 (synopsis
13958 "Setproctitle implementation for Python to customize the process title")
13959 (description "The library allows a process to change its title (as displayed
13960 by system tools such as ps and top).
13961
13962 Changing the title is mostly useful in multi-process systems, for
13963 example when a master process is forked: changing the children's title
13964 allows identifying the task each process is busy with. The technique
13965 is used by PostgreSQL and the OpenSSH Server for example.")
13966 (license license:bsd-3)
13967 (properties `((python2-variant . ,(delay python2-setproctitle))))))
13968
13969 (define-public python2-setproctitle
13970 (let ((base (package-with-python2
13971 (strip-python2-variant python-setproctitle))))
13972 (package
13973 (inherit base)
13974 (native-inputs `(("python2-nose" ,python2-nose)
13975 ,@(package-native-inputs base))))))
13976
13977 (define-public python-validictory
13978 (package
13979 (name "python-validictory")
13980 (version "1.0.1")
13981 (source
13982 (origin
13983 (method url-fetch)
13984 (uri (pypi-uri "validictory" version))
13985 (sha256
13986 (base32
13987 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
13988 (build-system python-build-system)
13989 (arguments
13990 '(#:phases
13991 (modify-phases %standard-phases
13992 (add-after 'unpack 'bootstrap
13993 ;; Move the tests out of the package directory to avoid
13994 ;; packaging them.
13995 (lambda* _
13996 (rename-file "validictory/tests" "tests")
13997 (delete-file "tests/__init__.py")))
13998 (replace 'check
13999 (lambda _
14000 ;; Extend PYTHONPATH so the built package will be found.
14001 (setenv "PYTHONPATH"
14002 (string-append (getcwd) "/build/lib:"
14003 (getenv "PYTHONPATH")))
14004 (invoke "py.test" "-vv" ))))))
14005 (native-inputs
14006 `(("python-pytest" ,python-pytest)))
14007 (home-page
14008 "https://github.com/jamesturk/validictory")
14009 (synopsis "General purpose Python data validator")
14010 (description "It allows validation of arbitrary Python data structures.
14011
14012 The schema format is based on the JSON Schema
14013 proposal (http://json-schema.org), so combined with json the library is also
14014 useful as a validator for JSON data.")
14015 (license license:expat)))
14016
14017 (define-public python2-validictory
14018 (package-with-python2 python-validictory))
14019
14020 (define-public python-pyelftools
14021 (package
14022 (name "python-pyelftools")
14023 (version "0.25")
14024 (source
14025 (origin
14026 (method url-fetch)
14027 (uri (pypi-uri "pyelftools" version))
14028 (sha256
14029 (base32
14030 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
14031 (build-system python-build-system)
14032 (arguments
14033 `(#:phases
14034 (modify-phases %standard-phases
14035 (add-before 'check 'set-pythonpath
14036 (lambda _
14037 (setenv "PYTHONPATH"
14038 (string-append
14039 (getcwd) "/test/"
14040 ":" (getenv "PYTHONPATH")))
14041 #t)))))
14042 (home-page
14043 "https://github.com/eliben/pyelftools")
14044 (synopsis
14045 "Analyze binary and library file information")
14046 (description "This Python library provides interfaces for parsing and
14047 analyzing two binary and library file formats; the Executable and Linking
14048 Format (ELF), and debugging information in the Debugging With Attributed
14049 Record Format (DWARF).")
14050 (license license:public-domain)))
14051
14052 (define-public python-pyev
14053 (package
14054 (name "python-pyev")
14055 (version "0.9.0")
14056 (source
14057 (origin
14058 (method url-fetch)
14059 (uri (pypi-uri "pyev" version))
14060 (sha256
14061 (base32
14062 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
14063 (build-system python-build-system)
14064 (arguments
14065 `(#:tests? #f ; no test suite
14066 #:phases
14067 (modify-phases %standard-phases
14068 (add-after 'unpack 'patch
14069 (lambda* (#:key inputs #:allow-other-keys)
14070 (let ((libev (string-append (assoc-ref inputs "libev")
14071 "/lib/libev.so.4")))
14072 (substitute* "setup.py"
14073 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
14074 (string-append "libev_dll_name = \"" libev "\"")))))))))
14075 (inputs
14076 `(("libev" ,libev)))
14077 (home-page "http://pythonhosted.org/pyev/")
14078 (synopsis "Python libev interface")
14079 (description "Pyev provides a Python interface to libev.")
14080 (license license:gpl3)))
14081
14082 (define-public python2-pyev
14083 (package-with-python2 python-pyev))
14084
14085 (define-public python-imagesize
14086 (package
14087 (name "python-imagesize")
14088 (version "1.2.0")
14089 (source
14090 (origin
14091 (method url-fetch)
14092 (uri (pypi-uri "imagesize" version))
14093 (sha256
14094 (base32
14095 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
14096 (build-system python-build-system)
14097 (home-page "https://github.com/shibukawa/imagesize_py")
14098 (synopsis "Gets image size of files in various formats in Python")
14099 (description
14100 "This package allows determination of image size from
14101 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
14102 (license license:expat)))
14103
14104 (define-public python2-imagesize
14105 (package-with-python2 python-imagesize))
14106
14107 (define-public python-termstyle
14108 (package
14109 (name "python-termstyle")
14110 (version "0.1.11")
14111 (source
14112 (origin
14113 (method url-fetch)
14114 (uri (pypi-uri "termstyle" version))
14115 (sha256
14116 (base32
14117 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
14118 (build-system python-build-system)
14119 (arguments
14120 '(#:phases
14121 (modify-phases %standard-phases
14122 (replace 'check
14123 (lambda _
14124 (invoke "python" "test3.py"))))))
14125 (home-page "https://github.com/gfxmonk/termstyle")
14126 (synopsis "Console text coloring for Python")
14127 (description "This package provides console text coloring for Python.")
14128 (license license:bsd-3)))
14129
14130 (define-public python-argcomplete
14131 (package
14132 (name "python-argcomplete")
14133 (version "1.11.1")
14134 (source
14135 (origin
14136 (method url-fetch)
14137 (uri (pypi-uri "argcomplete" version))
14138 (sha256
14139 (base32
14140 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
14141 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
14142 (build-system python-build-system)
14143 (native-inputs
14144 `(("python-coverage" ,python-coverage)
14145 ("python-flake8" ,python-flake8)
14146 ("python-pexpect" ,python-pexpect)
14147 ("python-wheel" ,python-wheel)
14148 ("tcsh" ,tcsh)
14149 ("fish" ,fish)
14150 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
14151 (home-page "https://github.com/kislyuk/argcomplete")
14152 (synopsis "Shell tab completion for Python argparse")
14153 (description "argcomplete provides extensible command line tab completion
14154 of arguments and options for Python scripts using @code{argparse}. It's
14155 particularly useful for programs with many options or sub-parsers that can
14156 dynamically suggest completions; for example, when browsing resources over the
14157 network.")
14158 (license license:asl2.0)))
14159
14160 (define-public python2-argcomplete
14161 (package-with-python2 python-argcomplete))
14162
14163 (define-public python-csscompressor
14164 (package
14165 (name "python-csscompressor")
14166 (version "0.9.5")
14167 (source
14168 (origin
14169 (method url-fetch)
14170 (uri (pypi-uri "csscompressor" version))
14171 (sha256
14172 (base32
14173 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
14174 (build-system python-build-system)
14175 (arguments
14176 '(#:phases
14177 (modify-phases %standard-phases
14178 (replace 'check
14179 (lambda _
14180 (invoke "py.test"))))))
14181 (native-inputs
14182 `(("python-pytest" ,python-pytest)))
14183 (home-page "https://github.com/sprymix/csscompressor")
14184 (synopsis "Python port of YUI CSS Compressor")
14185 (description
14186 "This package provides a python port of YUI CSS Compressor.")
14187 (license license:bsd-3)))
14188
14189 (define-public python-rcssmin
14190 (package
14191 (name "python-rcssmin")
14192 (version "1.0.6")
14193 (source
14194 (origin
14195 (method url-fetch)
14196 (uri (pypi-uri "rcssmin" version))
14197 (sha256
14198 (base32
14199 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
14200 (build-system python-build-system)
14201 (arguments
14202 '(#:phases
14203 (modify-phases %standard-phases
14204 (replace 'check
14205 (lambda _
14206 (invoke "python" "run_tests.py" "tests"))))))
14207 (home-page "http://opensource.perlig.de/rcssmin/")
14208 (synopsis "CSS Minifier")
14209 (description "The minifier is based on the semantics of the YUI compressor,
14210 which itself is based on the rule list by Isaac Schlueter.")
14211 (license license:asl2.0)))
14212
14213 (define-public python-rjsmin
14214 (package
14215 (name "python-rjsmin")
14216 (version "1.1.0")
14217 (source
14218 (origin
14219 (method url-fetch)
14220 (uri (pypi-uri "rjsmin" version))
14221 (sha256
14222 (base32
14223 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
14224 (modules '((guix build utils)))
14225 (snippet
14226 '(begin
14227 (for-each delete-file (find-files "bench" "\\.js$"))
14228 #t))))
14229 (build-system python-build-system)
14230 (arguments
14231 '(#:tests? #f ; Not all test files included.
14232 #:phases
14233 (modify-phases %standard-phases
14234 (replace 'check
14235 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14236 (add-installed-pythonpath inputs outputs)
14237 (if tests?
14238 (invoke "py.test" "-vv" "tests")
14239 #t))))))
14240 (native-inputs
14241 `(("python-pytest" ,python-pytest)))
14242 (home-page "http://opensource.perlig.de/rjsmin/")
14243 (synopsis "Javascript Minifier")
14244 (description "@code{rJSmin} is a javascript minifier written in Python. The
14245 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
14246 is a re-implementation aiming for speed, so it can be used at runtime (rather
14247 than during a preprocessing step).")
14248 (license license:asl2.0)))
14249
14250 (define-public python-xopen
14251 (package
14252 (name "python-xopen")
14253 (version "0.5.0")
14254 (source
14255 (origin
14256 (method url-fetch)
14257 (uri (pypi-uri "xopen" version))
14258 (sha256
14259 (base32
14260 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
14261 (build-system python-build-system)
14262 (propagated-inputs
14263 `(("python-setuptools-scm" ,python-setuptools-scm)))
14264 (home-page "https://github.com/marcelm/xopen/")
14265 (synopsis "Open compressed files transparently")
14266 (description "This module provides an @code{xopen} function that works like
14267 Python's built-in @code{open} function, but can also deal with compressed files.
14268 Supported compression formats are gzip, bzip2 and, xz, and are automatically
14269 recognized by their file extensions. The focus is on being as efficient as
14270 possible on all supported Python versions.")
14271 (license license:expat)))
14272
14273 (define-public python2-xopen
14274 (let ((base (package-with-python2
14275 (strip-python2-variant python-xopen))))
14276 (package
14277 (inherit base)
14278 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
14279 ,@(package-propagated-inputs base))))))
14280
14281 (define-public python-cheetah
14282 (package
14283 (name "python-cheetah")
14284 (version "3.2.4")
14285 (source
14286 (origin
14287 (method url-fetch)
14288 (uri (pypi-uri "Cheetah3" version))
14289 (sha256
14290 (base32
14291 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
14292 (build-system python-build-system)
14293 (arguments
14294 `(#:modules ((guix build utils)
14295 (guix build python-build-system)
14296 (ice-9 ftw)
14297 (srfi srfi-1)
14298 (srfi srfi-26))
14299 #:phases (modify-phases %standard-phases
14300 (add-after 'unpack 'use-absolute-python
14301 (lambda _
14302 (substitute* "Cheetah/CheetahWrapper.py"
14303 (("#!/usr/bin/env python")
14304 (string-append "#!" (which "python"))))
14305 #t))
14306 (add-after 'unpack 'fix-tests
14307 (lambda _
14308 (substitute* "Cheetah/Tests/ImportHooks.py"
14309 (("os.path.dirname\\(__file__\\)")
14310 (string-append "'" (getcwd) "/Cheetah/Tests'")))
14311 #t))
14312 (replace 'check
14313 (lambda _
14314 (let ((cwd (getcwd)))
14315 (setenv "PYTHONPATH"
14316 (string-append
14317 cwd "/build/"
14318 (find (cut string-prefix? "lib" <>)
14319 (scandir (string-append cwd "/build")))
14320 ":" (getenv "PYTHONPATH")))
14321 (setenv "PATH"
14322 (string-append (getenv "PATH")
14323 ":" cwd "/bin"))
14324 (setenv "TMPDIR" "/tmp")
14325
14326 (substitute* "Cheetah/Tests/Test.py"
14327 (("unittest.TextTestRunner\\(\\)")
14328 "unittest.TextTestRunner(verbosity=2)"))
14329
14330 (invoke "python" "Cheetah/Tests/Test.py")))))))
14331 (propagated-inputs
14332 `(("python-markdown" ,python-markdown))) ;optional
14333 (home-page "https://cheetahtemplate.org/")
14334 (synopsis "Template engine")
14335 (description "Cheetah is a text-based template engine and Python code
14336 generator.
14337
14338 Cheetah can be used as a standalone templating utility or referenced as
14339 a library from other Python applications. It has many potential uses,
14340 but web developers looking for a viable alternative to ASP, JSP, PHP and
14341 PSP are expected to be its principle user group.
14342
14343 Features:
14344 @enumerate
14345 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
14346 text-based format.
14347 @item Cleanly separates content, graphic design, and program code.
14348 @item Blends the power and flexibility of Python with a simple template language
14349 that non-programmers can understand.
14350 @item Gives template writers full access to any Python data structure, module,
14351 function, object, or method in their templates.
14352 @item Makes code reuse easy by providing an object-orientated interface to
14353 templates that is accessible from Python code or other Cheetah templates.
14354 One template can subclass another and selectively reimplement sections of it.
14355 @item Provides a simple, yet powerful, caching mechanism that can dramatically
14356 improve the performance of a dynamic website.
14357 @item Compiles templates into optimized, yet readable, Python code.
14358 @end enumerate")
14359 (license (license:x11-style "file://LICENSE"))))
14360
14361 (define-public python2-cheetah
14362 (package-with-python2 python-cheetah))
14363
14364 (define-public python-dulwich
14365 (package
14366 (name "python-dulwich")
14367 (version "0.19.16")
14368 (source
14369 (origin
14370 (method url-fetch)
14371 (uri (list (string-append "https://www.dulwich.io/releases/"
14372 "dulwich-" version ".tar.gz")
14373 (pypi-uri "dulwich" version)))
14374 (sha256
14375 (base32
14376 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
14377 (build-system python-build-system)
14378 (arguments
14379 `(#:phases
14380 (modify-phases %standard-phases
14381 (add-before 'check 'fix-tests
14382 (lambda* (#:key inputs #:allow-other-keys)
14383 ;; The tests use Popen with a custom environment which doesn't
14384 ;; include PATH.
14385 (substitute* "dulwich/tests/compat/utils.py"
14386 (("'git'") (string-append "'"
14387 (which "git")
14388 "'")))
14389 (substitute* '("dulwich/tests/test_repository.py"
14390 "dulwich/tests/test_hooks.py")
14391 (("#!/bin/sh") (string-append "#!" (which "sh"))))
14392 (setenv "TEST_RUNNER" "unittest")
14393 (setenv "PYTHONHASHSEED" "random")
14394 #t)))))
14395 (propagated-inputs
14396 `(("python-fastimport" ,python-fastimport)
14397 ("python-urllib3" ,python-urllib3)))
14398 (native-inputs
14399 `(("python-mock" ,python-mock)
14400 ("python-geventhttpclient" ,python-geventhttpclient)
14401 ("git" ,git)))
14402 (home-page "https://www.dulwich.io/")
14403 (synopsis "Git implementation in Python")
14404 (description "Dulwich is an implementation of the Git file formats and
14405 protocols written in pure Python.")
14406 ;; Can be used with either license.
14407 (license (list license:asl2.0 license:gpl2+))))
14408
14409 (define-public python2-dulwich
14410 (package-with-python2 python-dulwich))
14411
14412 (define-public python-pbkdf2
14413 (package
14414 (name "python-pbkdf2")
14415 (version "1.3")
14416 (source
14417 (origin
14418 (method url-fetch)
14419 (uri (pypi-uri "pbkdf2" version))
14420 (sha256
14421 (base32
14422 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
14423 (build-system python-build-system)
14424 (arguments
14425 '(#:phases
14426 (modify-phases %standard-phases
14427 (replace 'check
14428 (lambda _
14429 (setenv "PYTHONPATH"
14430 (string-append (getcwd) "/build/lib:"
14431 (getenv "PYTHONPATH")))
14432 (invoke "python" "test/test_pbkdf2.py"))))))
14433 (propagated-inputs
14434 `(("python-pycrypto" ,python-pycrypto))) ; optional
14435 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
14436 (synopsis "Password-based key derivation")
14437 (description "This module implements the password-based key derivation
14438 function, PBKDF2, specified in RSA PKCS#5 v2.0.
14439
14440 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
14441 is part of the RSA Public Key Cryptography Standards series. The provided
14442 implementation takes a password or a passphrase and a salt value (and
14443 optionally a iteration count, a digest module, and a MAC module) and provides
14444 a file-like object from which an arbitrarily-sized key can be read.")
14445 (license license:expat)))
14446
14447 (define-public python2-pbkdf2
14448 (package-with-python2 python-pbkdf2))
14449
14450 (define-public python-qrcode
14451 (package
14452 (name "python-qrcode")
14453 (version "6.1")
14454 (source
14455 (origin
14456 (method url-fetch)
14457 (uri (pypi-uri "qrcode" version))
14458 (sha256
14459 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
14460 (build-system python-build-system)
14461 (arguments
14462 ;; FIXME: Tests require packaging 'pymaging'.
14463 '(#:tests? #f))
14464 (propagated-inputs
14465 `(("python-lxml" ,python-lxml) ; for SVG output
14466 ("python-pillow" ,python-pillow) ; for PNG output
14467 ("python-six" ,python-six)))
14468 (home-page "https://github.com/lincolnloop/python-qrcode")
14469 (synopsis "QR Code image generator")
14470 (description "This package provides a pure Python QR Code generator
14471 module. It uses the Python Imaging Library (PIL) to allow for the generation
14472 of QR Codes.
14473
14474 In addition this package provides a command line tool to generate QR codes and
14475 either write these QR codes to a file or do the output as ascii art at the
14476 console.")
14477 (license license:bsd-3)))
14478
14479 (define-public python2-qrcode
14480 (package-with-python2 python-qrcode))
14481
14482 (define-public python-rst2ansi
14483 (package
14484 (name "python-rst2ansi")
14485 (version "0.1.5")
14486 (source
14487 (origin
14488 (method url-fetch)
14489 (uri (pypi-uri "rst2ansi" version))
14490 (sha256
14491 (base32
14492 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
14493 (build-system python-build-system)
14494 (propagated-inputs
14495 `(("python-docutils" ,python-docutils)))
14496 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
14497 (synopsis "Convert RST to ANSI-decorated console output")
14498 (description
14499 "Python module dedicated to rendering RST (reStructuredText) documents
14500 to ansi-escaped strings suitable for display in a terminal.")
14501 (license license:expat)))
14502
14503 (define-public python-ansi2html
14504 (package
14505 (name "python-ansi2html")
14506 (version "1.2.0")
14507 (source
14508 (origin
14509 (method url-fetch)
14510 (uri (pypi-uri "ansi2html" version))
14511 (sha256
14512 (base32
14513 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
14514 (build-system python-build-system)
14515 (native-inputs
14516 `(("python-mock" ,python-mock)
14517 ("python-nose" ,python-nose)))
14518 (propagated-inputs
14519 `(("python-six" ,python-six)))
14520 (home-page "https://github.com/ralphbean/ansi2html")
14521 (synopsis "Convert ANSI-decorated console output to HTML")
14522 (description
14523 "@command{ansi2html} is a Python library and command line utility for
14524 converting text with ANSI color codes to HTML or LaTeX.")
14525 (license license:gpl3+)))
14526
14527 (define-public python2-ansi2html
14528 (package-with-python2 python-ansi2html))
14529
14530 (define-public python-ddt
14531 (package
14532 (name "python-ddt")
14533 (version "1.1.3")
14534 (source
14535 (origin
14536 (method url-fetch)
14537 (uri (pypi-uri "ddt" version))
14538 (sha256
14539 (base32
14540 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
14541 (build-system python-build-system)
14542 (native-inputs
14543 `(("python-mock" ,python-mock)
14544 ("python-nose" ,python-nose)))
14545 (propagated-inputs
14546 `(("python-six" ,python-six)
14547 ("python-pyyaml" ,python-pyyaml)))
14548 (home-page "https://github.com/txels/ddt")
14549 (synopsis "Data-Driven Tests")
14550 (description
14551 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
14552 running it with different test data, and make it appear as multiple test
14553 cases.")
14554 (license license:expat)))
14555
14556 (define-public python2-ddt
14557 (package-with-python2 python-ddt))
14558
14559 (define-public python-pycountry
14560 (package
14561 (name "python-pycountry")
14562 (version "18.5.26")
14563 (source
14564 (origin
14565 (method url-fetch)
14566 (uri (pypi-uri "pycountry" version))
14567 (sha256
14568 (base32
14569 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
14570 (build-system python-build-system)
14571 (home-page "https://bitbucket.org/flyingcircus/pycountry")
14572 (synopsis "ISO databases for languages, countries, currencies, etc.")
14573 (description
14574 "@code{pycountry} provides the ISO databases for the standards:
14575 @enumerate
14576 @item 639-3 (Languages)
14577 @item 3166 (Countries)
14578 @item 3166-3 (Deleted Countries)
14579 @item 3166-2 (Subdivisions of countries)
14580 @item 4217 (Currencies)
14581 @item 15924 (Scripts)
14582 @end enumerate
14583 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
14584 through a Python API.")
14585 (license license:lgpl2.1+)))
14586
14587 (define-public python2-pycountry
14588 (package-with-python2 python-pycountry))
14589
14590 (define-public python-pycosat
14591 (package
14592 (name "python-pycosat")
14593 (version "0.6.3")
14594 (source
14595 (origin
14596 (method url-fetch)
14597 (uri (pypi-uri "pycosat" version ".zip"))
14598 (sha256
14599 (base32
14600 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
14601 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
14602 (build-system python-build-system)
14603 (native-inputs
14604 `(("unzip" ,unzip)))
14605 (home-page "https://github.com/ContinuumIO/pycosat")
14606 (synopsis "Bindings to picosat (a SAT solver)")
14607 (description
14608 "This package provides efficient Python bindings to @code{picosat} on
14609 the C level. When importing pycosat, the @code{picosat} solver becomes part
14610 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
14611 Problem} (SAT) solver.")
14612 (license license:expat)))
14613
14614 (define-public python2-pycosat
14615 (package-with-python2 python-pycosat))
14616
14617 (define-public python2-ruamel.ordereddict
14618 (package
14619 (name "python2-ruamel.ordereddict")
14620 (version "0.4.9")
14621 (source
14622 (origin
14623 (method url-fetch)
14624 (uri (pypi-uri "ruamel.ordereddict" version))
14625 (sha256
14626 (base32
14627 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
14628 (build-system python-build-system)
14629 (arguments
14630 `(#:python ,python-2
14631 #:phases
14632 (modify-phases %standard-phases
14633 (delete 'check)
14634 (add-after 'install 'check
14635 (lambda* (#:key inputs outputs #:allow-other-keys)
14636 (add-installed-pythonpath inputs outputs)
14637 (invoke "python" "test/testordereddict.py"))))))
14638 (home-page "https://bitbucket.org/ruamel/ordereddict")
14639 (synopsis "Version of dict that keeps keys in insertion order")
14640 (description
14641 "This is an implementation of an ordered dictionary with @dfn{Key
14642 Insertion Order} (KIO: updates of values do not affect the position of the
14643 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
14644 removed and put at the back). The standard library module @code{OrderedDict},
14645 implemented later, implements a subset of @code{ordereddict} functionality.
14646 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
14647 Order} (KSO, no sorting function can be specified, but a transform can be
14648 specified to apply on the key before comparison (e.g. @code{string.lower})).")
14649 (license license:expat)))
14650
14651 (define-public python-pypeg2
14652 (package
14653 (name "python-pypeg2")
14654 (version "2.15.2")
14655 (source
14656 (origin
14657 (method url-fetch)
14658 (uri (pypi-uri "pyPEG2" version))
14659 (sha256
14660 (base32
14661 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
14662 (build-system python-build-system)
14663 (propagated-inputs `(("python-lxml" ,python-lxml)))
14664 (arguments
14665 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
14666 '(#:tests? #f))
14667 (home-page "https://fdik.org/pyPEG/")
14668 (synopsis "Parsering Expression Grammars in Python")
14669 (description "PyPEG is an intrinsic parser interpreter framework for
14670 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
14671 parse many formal languages.")
14672 (license license:gpl2)))
14673
14674 (define-public python-incremental
14675 (package
14676 (name "python-incremental")
14677 (version "17.5.0")
14678 (source
14679 (origin
14680 (method url-fetch)
14681 (uri (pypi-uri "incremental" version))
14682 (sha256
14683 (base32
14684 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
14685 (build-system python-build-system)
14686 (home-page "https://github.com/hawkowl/incremental")
14687 (synopsis "Library for versioning Python projects")
14688 (description "Incremental is a small library that versions your Python
14689 projects.")
14690 (license license:expat)))
14691
14692 (define-public python2-incremental
14693 (package-with-python2 python-incremental))
14694
14695 (define-public python-invoke
14696 (package
14697 (name "python-invoke")
14698 (home-page "https://www.pyinvoke.org/")
14699 (version "1.3.0")
14700 (source (origin
14701 (method url-fetch)
14702 (uri (pypi-uri "invoke" version))
14703 (sha256
14704 (base32
14705 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
14706 (build-system python-build-system)
14707 (arguments
14708 ;; XXX: Requires many dependencies that are not yet in Guix.
14709 `(#:tests? #f))
14710 (synopsis "Pythonic task execution")
14711 (description
14712 "Invoke is a Python task execution tool and library, drawing inspiration
14713 from various sources to arrive at a powerful and clean feature set. It is
14714 evolved from the Fabric project, but focuses on local and abstract concerns
14715 instead of servers and network commands.")
14716 (license license:bsd-3)))
14717
14718 (define-public python2-invoke
14719 (package-with-python2 python-invoke))
14720
14721 (define-public python-automat
14722 (package
14723 (name "python-automat")
14724 (version "20.2.0")
14725 (source (origin
14726 (method url-fetch)
14727 (uri (pypi-uri "Automat" version))
14728 (sha256
14729 (base32
14730 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
14731 (build-system python-build-system)
14732 ;; We disable the tests because they require python-twisted, while
14733 ;; python-twisted depends on python-automat. Twisted is optional, but the
14734 ;; tests fail if it is not available. Also see
14735 ;; <https://github.com/glyph/automat/issues/71>.
14736 (arguments '(#:tests? #f))
14737 (native-inputs
14738 `(("python-m2r" ,python-m2r)
14739 ("python-setuptools-scm" ,python-setuptools-scm)
14740 ("python-graphviz" ,python-graphviz)))
14741 (propagated-inputs
14742 `(("python-six" ,python-six)
14743 ("python-attrs" ,python-attrs)))
14744 (home-page "https://github.com/glyph/Automat")
14745 (synopsis "Self-service finite-state machines")
14746 (description "Automat is a library for concise, idiomatic Python
14747 expression of finite-state automata (particularly deterministic finite-state
14748 transducers).")
14749 (license license:expat)))
14750
14751 (define-public python2-automat
14752 (package-with-python2 python-automat))
14753
14754 (define-public python-m2r
14755 (package
14756 (name "python-m2r")
14757 (version "0.2.1")
14758 (source (origin
14759 (method url-fetch)
14760 (uri (pypi-uri "m2r" version))
14761 (sha256
14762 (base32
14763 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
14764 (build-system python-build-system)
14765 (propagated-inputs
14766 `(("python-docutils" ,python-docutils)
14767 ("python-mistune" ,python-mistune)))
14768 (native-inputs
14769 `(("python-pygments" ,python-pygments)
14770 ("python-mock" ,python-mock)))
14771 (home-page "https://github.com/miyakogi/m2r")
14772 (synopsis "Markdown to reStructuredText converter")
14773 (description "M2R converts a markdown file including reST markups to valid
14774 reST format.")
14775 (license license:expat)))
14776
14777 (define-public python2-m2r
14778 (package-with-python2 python-m2r))
14779
14780 (define-public python-constantly
14781 (package
14782 (name "python-constantly")
14783 (version "15.1.0")
14784 (source (origin
14785 (method url-fetch)
14786 (uri (pypi-uri "constantly" version))
14787 (sha256
14788 (base32
14789 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
14790 (build-system python-build-system)
14791 (home-page "https://github.com/twisted/constantly")
14792 (synopsis "Symbolic constants in Python")
14793 (description "Constantly is a Python library that provides symbolic
14794 constant support. It includes collections and constants with text, numeric,
14795 and bit flag values.")
14796 (license license:expat)))
14797
14798 (define-public python2-constantly
14799 (package-with-python2 python-constantly))
14800
14801 (define-public python-attrs
14802 (package
14803 (name "python-attrs")
14804 (version "19.3.0")
14805 (source (origin
14806 (method url-fetch)
14807 (uri (pypi-uri "attrs" version))
14808 (sha256
14809 (base32
14810 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
14811 (build-system python-build-system)
14812 (arguments
14813 `(#:modules ((guix build utils)
14814 (guix build python-build-system)
14815 (ice-9 ftw)
14816 (srfi srfi-1)
14817 (srfi srfi-26))
14818 #:phases (modify-phases %standard-phases
14819 (replace 'check
14820 (lambda _
14821 (let ((cwd (getcwd)))
14822 (setenv "PYTHONPATH"
14823 (string-append
14824 cwd "/build/"
14825 (find (cut string-prefix? "lib" <>)
14826 (scandir (string-append cwd "/build")))
14827 ":"
14828 (getenv "PYTHONPATH")))
14829 (invoke "python" "-m" "pytest")))))))
14830 (native-inputs
14831 `(("python-coverage" ,python-coverage)
14832 ("python-hypothesis" ,python-hypothesis)
14833 ("python-pympler" ,python-pympler)
14834 ("python-pytest" ,python-pytest)
14835 ("python-six" ,python-six)
14836 ("python-sphinx" ,python-sphinx)
14837 ("python-zope-interface" ,python-zope-interface)))
14838 (home-page "https://github.com/python-attrs/attrs/")
14839 (synopsis "Attributes without boilerplate")
14840 (description "@code{attrs} is a Python package with class decorators that
14841 ease the chores of implementing the most common attribute-related object
14842 protocols.")
14843 (license license:expat)))
14844
14845 (define-public python2-attrs
14846 (package-with-python2 python-attrs))
14847
14848 (define-public python-attrs-bootstrap
14849 (package
14850 (inherit python-attrs)
14851 (name "python-attrs-bootstrap")
14852 (native-inputs `())
14853 (arguments `(#:tests? #f))))
14854
14855 (define-public python2-attrs-bootstrap
14856 (package-with-python2 python-attrs-bootstrap))
14857
14858 (define-public python2-cliapp
14859 (package
14860 (name "python2-cliapp")
14861 (version "1.20180812.1")
14862 (source
14863 (origin
14864 (method url-fetch)
14865 (uri (string-append
14866 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
14867 version ".tar.gz"))
14868 (sha256
14869 (base32
14870 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
14871 (build-system python-build-system)
14872 (arguments
14873 `(#:python ,python-2
14874 #:phases
14875 (modify-phases %standard-phases
14876 ;; check phase needs to be run before the build phase. If not,
14877 ;; coverage-test-runner looks for tests for the built source files,
14878 ;; and fails.
14879 (delete 'check)
14880 (add-before 'build 'check
14881 (lambda _
14882 ;; Disable python3 tests
14883 (substitute* "check"
14884 (("python3") "# python3"))
14885 (invoke "./check"))))))
14886 (native-inputs
14887 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14888 ("python2-pep8" ,python2-pep8)))
14889 (propagated-inputs
14890 `(("python2-pyaml" ,python2-pyaml)))
14891 (home-page "https://liw.fi/cliapp/")
14892 (synopsis "Python framework for command line programs")
14893 (description "@code{python2-cliapp} is a python framework for
14894 command line programs. It contains the typical stuff such programs
14895 need to do, such as parsing the command line for options, and
14896 iterating over input files.")
14897 (license license:gpl2+)))
14898
14899 (define-public python2-ttystatus
14900 (package
14901 (name "python2-ttystatus")
14902 (version "0.38")
14903 (source
14904 (origin
14905 (method git-fetch)
14906 (uri (git-reference
14907 (url "http://git.liw.fi/ttystatus")
14908 ;; There are no tags after ttystatus-0.36.
14909 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
14910 (sha256
14911 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
14912 (file-name (git-file-name name version))))
14913 (build-system python-build-system)
14914 (native-inputs
14915 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14916 ("python2-pep8" ,python2-pep8)))
14917 (arguments
14918 `(#:python ,python-2
14919 #:phases
14920 (modify-phases %standard-phases
14921 ;; check phase needs to be run before the build phase. If not,
14922 ;; coverage-test-runner looks for tests for the built source files,
14923 ;; and fails.
14924 (delete 'check)
14925 (add-before 'build 'check
14926 (lambda _ (invoke "make" "check"))))))
14927 (home-page "https://liw.fi/ttystatus/")
14928 (synopsis "Python library for showing progress reporting and
14929 status updates on terminals")
14930 (description "@code{python2-ttystatus} is a python library for
14931 showing progress reporting and status updates on terminals, for
14932 command line programs. Output is automatically adapted to the width
14933 of the terminal: truncated if it does not fit, and resized if the
14934 terminal size changes.")
14935 (license license:gpl3+)))
14936
14937 (define-public python2-tracing
14938 (package
14939 (name "python2-tracing")
14940 (version "0.10")
14941 (source
14942 (origin
14943 (method url-fetch)
14944 (uri (string-append
14945 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
14946 version ".tar.gz"))
14947 (sha256
14948 (base32
14949 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
14950 (build-system python-build-system)
14951 (arguments
14952 `(#:python ,python-2))
14953 (home-page "https://liw.fi/tracing/")
14954 (synopsis "Python debug logging helper")
14955 (description "@code{python2-tracing} is a python library for
14956 logging debug messages. It provides a way to turn debugging messages
14957 on and off, based on the filename they occur in. It is much faster
14958 than using @code{logging.Filter} to accomplish the same thing, which
14959 matters when code is run in production mode. The actual logging still
14960 happens using the @code{logging} library.")
14961 (license license:gpl3+)))
14962
14963 (define-public python2-larch
14964 (package
14965 (name "python2-larch")
14966 (version "1.20151025")
14967 (source
14968 (origin
14969 (method url-fetch)
14970 (uri (string-append
14971 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
14972 version ".tar.gz"))
14973 (patches (search-patches
14974 "python2-larch-coverage-4.0a6-compatibility.patch"))
14975 (sha256
14976 (base32
14977 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
14978 (build-system python-build-system)
14979 (arguments
14980 `(#:python ,python-2
14981 #:phases
14982 (modify-phases %standard-phases
14983 ;; check phase needs to be run before the build phase. If not,
14984 ;; coverage-test-runner looks for tests for the built source files,
14985 ;; and fails.
14986 (delete 'check)
14987 (add-before 'build 'check
14988 (lambda _ (invoke "make" "check"))))))
14989 (native-inputs
14990 `(("cmdtest" ,cmdtest)
14991 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
14992 (propagated-inputs
14993 `(("python2-tracing" ,python2-tracing)))
14994 (home-page "https://liw.fi/larch/")
14995 (synopsis "Python copy-on-write B-tree library")
14996 (description "@code{python2-larch} is an implementation of
14997 particular kind of B-tree, based on research by Ohad Rodeh. See
14998 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
14999 on the data structure.
15000
15001 The distinctive feature of this B-tree is that a node is never
15002 (conceptually) modified. Instead, all updates are done by
15003 copy-on-write. This makes it easy to clone a tree, and modify only the
15004 clone, while other processes access the original tree.")
15005 (license license:gpl3+)))
15006
15007 (define-public python-astroid
15008 (package
15009 (name "python-astroid")
15010 (version "2.4.2")
15011 (source
15012 (origin
15013 (method url-fetch)
15014 (uri (pypi-uri "astroid" version))
15015 (sha256
15016 (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
15017 (modules '((guix build utils)))
15018 (snippet
15019 '(begin
15020 ;; Check to see if the version pinning has been removed.
15021 (substitute* "astroid/__pkginfo__.py"
15022 (("==1\\.4\\.\\*") ">=1.4.0"))
15023 #t))))
15024 (build-system python-build-system)
15025 (propagated-inputs
15026 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
15027 ("python-six" ,python-six)
15028 ("python-wrapt" ,python-wrapt)))
15029 (native-inputs
15030 `(("python-dateutil" ,python-dateutil)
15031 ("python-pytest" ,python-pytest)
15032 ("python-pytest-runner" ,python-pytest-runner)))
15033 (home-page "https://github.com/PyCQA/astroid")
15034 (synopsis "Common base representation of python source code for pylint and
15035 other projects")
15036 (description "@code{python-astroid} provides a common base representation
15037 of python source code for projects such as pychecker, pyreverse, pylint, etc.
15038
15039 It provides a compatible representation which comes from the _ast module. It
15040 rebuilds the tree generated by the builtin _ast module by recursively walking
15041 down the AST and building an extended ast. The new node classes have
15042 additional methods and attributes for different usages. They include some
15043 support for static inference and local name scopes. Furthermore, astroid
15044 builds partial trees by inspecting living objects.")
15045 (license license:lgpl2.1+)
15046 (properties `((python2-variant . ,(delay python2-astroid))))))
15047
15048 (define-public python2-astroid
15049 (let ((base (package-with-python2
15050 (strip-python2-variant python-astroid))))
15051 (package (inherit base)
15052 ;; Version 2.x removes python2 support.
15053 (version "1.6.5")
15054 (source
15055 (origin
15056 (method url-fetch)
15057 (uri (pypi-uri "astroid" version))
15058 (sha256
15059 (base32
15060 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
15061 (arguments
15062 (substitute-keyword-arguments (package-arguments base)
15063 ((#:phases phases)
15064 `(modify-phases ,phases
15065 (add-after 'unpack 'remove-spurious-test
15066 (lambda _
15067 ;; https://github.com/PyCQA/astroid/issues/276
15068 (delete-file "astroid/tests/unittest_brain.py")
15069 #t))
15070 (replace 'check
15071 (lambda _
15072 (invoke"python" "-m" "unittest" "discover"
15073 "-p" "unittest*.py")))))))
15074 (native-inputs `())
15075 (propagated-inputs
15076 `(("python2-backports-functools-lru-cache"
15077 ,python2-backports-functools-lru-cache)
15078 ("python2-enum34" ,python2-enum34)
15079 ("python2-singledispatch" ,python2-singledispatch)
15080 ,@(alist-delete "python-typed-ast"
15081 (package-propagated-inputs base)))))))
15082
15083 (define-public python-isbnlib
15084 (package
15085 (name "python-isbnlib")
15086 (version "3.10.3")
15087 (source
15088 (origin
15089 (method url-fetch)
15090 (uri (pypi-uri "isbnlib" version))
15091 (sha256
15092 (base32
15093 "07qhykv0x60d5rsx5pj6s4q15ri4znczscll3xmpf6gyclac1592"))))
15094 (build-system python-build-system)
15095 (arguments '(#:tests? #f)) ; No test
15096 (home-page "https://github.com/xlcnd/isbnlib")
15097 (synopsis "Python library to work with ISBN strings")
15098 (description "@code{python-isbnlib} is a (pure) python library that provides
15099 several useful methods and functions to validate, clean, transform, hyphenate and
15100 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
15101 version, is suitable to be include as a dependency in other projects.")
15102 (license license:lgpl3+)))
15103
15104 (define-public python-isort
15105 (package
15106 (name "python-isort")
15107 (version "4.3.4")
15108 (source
15109 (origin
15110 (method git-fetch)
15111 (uri (git-reference
15112 ;; Tests pass only from the Github sources
15113 (url "https://github.com/timothycrosley/isort")
15114 (commit version)))
15115 (file-name (git-file-name name version))
15116 (sha256
15117 (base32
15118 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
15119 (build-system python-build-system)
15120 (native-inputs
15121 `(("python-mock" ,python-mock)
15122 ("python-pytest" ,python-pytest)))
15123 (home-page "https://github.com/timothycrosley/isort")
15124 (synopsis "Python utility/library to sort python imports")
15125 (description "@code{python-isort} is a python utility/library to sort
15126 imports alphabetically, and automatically separated into sections. It
15127 provides a command line utility, a python library and plugins for various
15128 editors.")
15129 (license license:expat)
15130 (properties `((python2-variant . ,(delay python2-isort))))))
15131
15132 (define-public python2-isort
15133 (let ((base (package-with-python2
15134 (strip-python2-variant python-isort))))
15135 (package (inherit base)
15136 (native-inputs
15137 `(("python2-futures" ,python2-futures)
15138 ,@(package-native-inputs base))))))
15139
15140 (define-public python2-backports-functools-lru-cache
15141 (package
15142 (name "python2-backports-functools-lru-cache")
15143 (version "1.6.1")
15144 (source
15145 (origin
15146 (method url-fetch)
15147 ;; only the pypi tarballs contain the necessary metadata
15148 (uri (pypi-uri "backports.functools_lru_cache" version))
15149 (sha256
15150 (base32
15151 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
15152 (build-system python-build-system)
15153 (native-inputs
15154 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
15155 (arguments
15156 `(#:python ,python-2))
15157 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
15158 (synopsis "Backport of functools.lru_cache from Python 3.3")
15159 (description "@code{python2-backports-functools-lru-cache} is a backport
15160 of @code{functools.lru_cache} from python 3.3.")
15161 (license license:expat)))
15162
15163 (define-public python-configparser
15164 (package
15165 (name "python-configparser")
15166 (version "4.0.2")
15167 (source
15168 (origin
15169 (method url-fetch)
15170 (uri (pypi-uri "configparser" version))
15171 (sha256
15172 (base32
15173 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
15174 (native-inputs
15175 `(("python-setuptools_scm" ,python-setuptools-scm)))
15176 (build-system python-build-system)
15177 (home-page "https://github.com/jaraco/configparser/")
15178 (synopsis "Backport of configparser from python 3.5")
15179 (description "@code{python-configparser} is a backport of
15180 @code{configparser} from Python 3.5 so that it can be used directly
15181 in other versions.")
15182 (license license:expat)))
15183
15184 (define-public python2-configparser
15185 (package-with-python2 python-configparser))
15186
15187 (define-public python-mamba
15188 (package
15189 (name "python-mamba")
15190 (version "0.11.1")
15191 (source (origin
15192 (method url-fetch)
15193 (uri (pypi-uri "mamba" version))
15194 (sha256
15195 (base32
15196 "1jxy3bva94ac02a0wjsms79rp5104zmalxh8rhqqg6mw95cp6xpr"))))
15197 (build-system python-build-system)
15198 (arguments `(#:tests? #f)) ; No test
15199 (propagated-inputs
15200 `(("python-clint" ,python-clint)
15201 ("python-coverage" ,python-coverage)))
15202 (home-page "https://nestorsalceda.com/mamba/")
15203 (synopsis "Test runner for Python")
15204 (description
15205 "Mamba is a Behaviour-Driven Development tool for Python developers.
15206 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
15207 (license license:expat)))
15208
15209 (define-public python-mando
15210 (package
15211 (name "python-mando")
15212 (version "0.6.4")
15213 (source (origin
15214 (method url-fetch)
15215 (uri (pypi-uri "mando" version))
15216 (sha256
15217 (base32
15218 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
15219 (build-system python-build-system)
15220 (propagated-inputs
15221 `(("python-rst2ansi" ,python-rst2ansi)
15222 ("python-six" ,python-six)))
15223 (native-inputs
15224 `(("python-pytest" ,python-pytest)))
15225 (home-page "https://mando.readthedocs.org/")
15226 (synopsis
15227 "Wrapper around argparse, allowing creation of complete CLI applications")
15228 (description
15229 "This package is a wrapper around argparse, allowing you to write complete CLI
15230 applications in seconds while maintaining all the flexibility.")
15231 (license license:expat)))
15232
15233 (define-public python2-mando
15234 (package-with-python2 python-mando))
15235
15236 (define-public python2-argparse
15237 (package
15238 (name "python2-argparse")
15239 (version "1.4.0")
15240 (source
15241 (origin
15242 (method url-fetch)
15243 (uri (pypi-uri "argparse" version))
15244 (sha256
15245 (base32
15246 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
15247 (build-system python-build-system)
15248 (arguments
15249 `(#:python ,python-2))
15250 (home-page "https://github.com/ThomasWaldmann/argparse/")
15251 (synopsis "Python command-line parsing library")
15252 (description
15253 "This package is mostly for people who want to have @code{argparse} on
15254 older Pythons because it was not part of the standard library back then.")
15255 (license license:psfl)))
15256
15257 (define-public python-fudge
15258 (package
15259 (name "python-fudge")
15260 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
15261 ;; package, which is currently the only use of this package.
15262 (version "0.9.6")
15263 (source
15264 (origin
15265 (method url-fetch)
15266 (uri (pypi-uri "fudge" version))
15267 (sha256
15268 (base32
15269 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
15270 (build-system python-build-system)
15271 (arguments
15272 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
15273 (home-page "https://github.com/fudge-py/fudge")
15274 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
15275 (description
15276 "Fudge is a Python module for using fake objects (mocks and stubs) to
15277 test real ones.
15278
15279 In readable Python code, you declare the methods available on your fake object
15280 and how they should be called. Then you inject that into your application and
15281 start testing. This declarative approach means you don’t have to record and
15282 playback actions and you don’t have to inspect your fakes after running code.
15283 If the fake object was used incorrectly then you’ll see an informative
15284 exception message with a traceback that points to the culprit.")
15285 (license license:expat)))
15286
15287 (define-public python2-fudge
15288 (package-with-python2 python-fudge))
15289
15290 (define-public python-mwclient
15291 (package
15292 (name "python-mwclient")
15293 (version "0.10.1")
15294 (source
15295 (origin
15296 (method git-fetch)
15297 ;; The PyPI version wouldn't contain tests.
15298 (uri (git-reference
15299 (url "https://github.com/mwclient/mwclient")
15300 (commit (string-append "v" version))))
15301 (file-name (git-file-name name version))
15302 (sha256
15303 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
15304 (build-system python-build-system)
15305 (propagated-inputs
15306 `(("python-requests-oauthlib" ,python-requests-oauthlib)
15307 ("python-six" ,python-six)))
15308 (native-inputs
15309 `(("python-mock" ,python-mock)
15310 ("python-pytest" ,python-pytest)
15311 ("python-pytest-cov" ,python-pytest-cov)
15312 ("python-pytest-runner" ,python-pytest-runner)
15313 ("python-responses" ,python-responses)))
15314 (home-page "https://github.com/btongminh/mwclient")
15315 (synopsis "MediaWiki API client")
15316 (description "This package provides a MediaWiki API client.")
15317 (license license:expat)))
15318
15319 (define-public python2-mwclient
15320 (package-with-python2 python-mwclient))
15321
15322 (define-public python-utils
15323 (package
15324 (name "python-utils")
15325 (version "2.4.0")
15326 (source (origin
15327 (method url-fetch)
15328 (uri (pypi-uri "python-utils" version))
15329 (sha256
15330 (base32
15331 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
15332 (build-system python-build-system)
15333 (arguments
15334 `(#:phases
15335 (modify-phases %standard-phases
15336 (replace 'check
15337 (lambda* (#:key inputs outputs #:allow-other-keys)
15338 (add-installed-pythonpath inputs outputs)
15339 (delete-file "pytest.ini")
15340 (invoke "pytest" "-vv"))))))
15341 (native-inputs
15342 `(("pytest-runner" ,python-pytest-runner)
15343 ("pytest" ,python-pytest)
15344 ("six" ,python-six)))
15345 (home-page "https://github.com/WoLpH/python-utils")
15346 (synopsis "Convenient utilities not included with the standard Python install")
15347 (description
15348 "Python Utils is a collection of small Python functions and classes which
15349 make common patterns shorter and easier.")
15350 (license license:bsd-2)))
15351
15352 (define-public python2-utils
15353 (package-with-python2 python-utils))
15354
15355 (define-public python-diff-match-patch
15356 (package
15357 (name "python-diff-match-patch")
15358 (version "20121119")
15359 (source
15360 (origin
15361 (method url-fetch)
15362 (uri (pypi-uri "diff-match-patch" version))
15363 (sha256
15364 (base32
15365 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
15366 (build-system python-build-system)
15367 (home-page "https://code.google.com/p/google-diff-match-patch")
15368 (synopsis "Synchronize plain text")
15369 (description "Diff Match and Patch libraries offer robust algorithms to
15370 perform the operations required for synchronizing plain text.")
15371 (license license:asl2.0)))
15372
15373 (define-public python2-diff-match-patch
15374 (package-with-python2 python-diff-match-patch))
15375
15376 (define-public python-dirsync
15377 (package
15378 (name "python-dirsync")
15379 (version "2.2.3")
15380 (source
15381 (origin
15382 (method url-fetch)
15383 (uri (pypi-uri "dirsync" version))
15384 (sha256
15385 (base32
15386 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
15387 (build-system python-build-system)
15388 (propagated-inputs
15389 `(("six" ,python-six)))
15390 (home-page "https://bitbucket.org/tkhyn/dirsync")
15391 (synopsis "Advanced directory tree synchronisation tool")
15392 (description "Advanced directory tree synchronisation tool.")
15393 (license license:expat)))
15394
15395 (define-public python2-dirsync
15396 (package-with-python2 python-dirsync))
15397
15398 (define-public python-levenshtein
15399 (package
15400 (name "python-levenshtein")
15401 (version "0.12.0")
15402 (source
15403 (origin
15404 (method url-fetch)
15405 (uri (pypi-uri "python-Levenshtein" version))
15406 (sha256
15407 (base32
15408 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
15409 (build-system python-build-system)
15410 (home-page "https://github.com/ztane/python-Levenshtein")
15411 (synopsis "Fast computation of Levenshtein distance and string similarity")
15412 (description
15413 "The Levenshtein Python C extension module contains functions for fast computation of
15414 @enumerate
15415 @item Levenshtein (edit) distance, and edit operations
15416 @item string similarity
15417 @item approximate median strings, and generally string averaging
15418 @item string sequence and set similarity
15419 @end enumerate
15420 It supports both normal and Unicode strings.")
15421 (license license:gpl2+)))
15422
15423 (define-public python2-levenshtein
15424 (package-with-python2 python-levenshtein))
15425
15426 (define-public python-scandir
15427 (package
15428 (name "python-scandir")
15429 (version "1.10.0")
15430 (source
15431 (origin
15432 (method url-fetch)
15433 (uri (pypi-uri "scandir" version))
15434 (sha256
15435 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
15436 (build-system python-build-system)
15437 (arguments
15438 `(#:phases (modify-phases %standard-phases
15439 (replace 'check
15440 (lambda _
15441 (invoke "python" "test/run_tests.py"))))))
15442 (home-page "https://github.com/benhoyt/scandir")
15443 (synopsis "Directory iteration function")
15444 (description
15445 "Directory iteration function like os.listdir(), except that instead of
15446 returning a list of bare filenames, it yields DirEntry objects that include
15447 file type and stat information along with the name. Using scandir() increases
15448 the speed of os.walk() by 2-20 times (depending on the platform and file
15449 system) by avoiding unnecessary calls to os.stat() in most cases.
15450
15451 This package is part of the Python standard library since version 3.5.")
15452 (license license:bsd-3)))
15453
15454 (define-public python2-scandir
15455 (package-with-python2 python-scandir))
15456
15457 (define-public python2-stemming
15458 (package
15459 (name "python2-stemming")
15460 (version "1.0.1")
15461 (source
15462 (origin
15463 (method url-fetch)
15464 (uri (pypi-uri "stemming" version))
15465 (sha256
15466 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
15467 (build-system python-build-system)
15468 (arguments
15469 `(#:python ,python-2))
15470 (home-page "https://bitbucket.org/mchaput/stemming/overview")
15471 (synopsis "Python implementations of various stemming algorithms")
15472 (description
15473 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
15474 stemming algorithms for English. These implementations are straightforward and
15475 efficient, unlike some Python versions of the same algorithms available on the
15476 Web. This package is an extraction of the stemming code included in the Whoosh
15477 search engine.")
15478 (license license:public-domain)))
15479
15480 (define-public python-factory-boy
15481 (package
15482 (name "python-factory-boy")
15483 (version "2.8.1")
15484 (source
15485 (origin
15486 (method url-fetch)
15487 (uri (pypi-uri "factory_boy" version))
15488 (sha256
15489 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
15490 (build-system python-build-system)
15491 (arguments
15492 ;; Tests are not included in the tarball.
15493 `(#:tests? #f))
15494 (propagated-inputs
15495 `(("faker" ,python-faker)))
15496 (home-page "https://github.com/benhoyt/scandir")
15497 (synopsis "Versatile test fixtures replacement")
15498 (description
15499 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
15500
15501 As a fixtures replacement tool, it aims to replace static, hard to maintain
15502 fixtures with easy-to-use factories for complex object.
15503
15504 Instead of building an exhaustive test setup with every possible combination
15505 of corner cases, factory_boy allows you to use objects customized for the
15506 current test, while only declaring the test-specific fields")
15507 (license license:expat)))
15508
15509 (define-public python2-factory-boy
15510 (package-with-python2 python-factory-boy))
15511
15512 (define-public python-translate-toolkit
15513 (package
15514 (name "python-translate-toolkit")
15515 (version "2.1.0")
15516 (source
15517 (origin
15518 (method url-fetch)
15519 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
15520 (sha256
15521 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
15522 (build-system python-build-system)
15523 (native-inputs
15524 `(("python-pytest" ,python-pytest)
15525 ("python-sphinx" ,python-sphinx)))
15526 (propagated-inputs
15527 `(("python-babel" ,python-babel)
15528 ("python-beautifulsoup4" ,python-beautifulsoup4)
15529 ("python-chardet" ,python-chardet)
15530 ("python-diff-match-patch" ,python-diff-match-patch)
15531 ("python-levenshtein" ,python-levenshtein)
15532 ("python-lxml" ,python-lxml)
15533 ("python-six" ,python-six)
15534 ("python-vobject" ,python-vobject)
15535 ("python-pyyaml" ,python-pyyaml)))
15536 (arguments
15537 ;; TODO: tests are not run, because they end with
15538 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
15539 ;; 'parse_funcs'
15540 ;; during test setup.
15541 `(#:tests? #f))
15542 (home-page "https://toolkit.translatehouse.org")
15543 (synopsis "Tools and API for translation and localization engineering")
15544 (description
15545 "Tools and API for translation and localization engineering. It contains
15546 several utilities, as well as an API for building localization tools.")
15547 (license license:gpl2+)))
15548
15549 (define-public python2-translate-toolkit
15550 (package-with-python2 python-translate-toolkit))
15551
15552 (define-public python-packaging
15553 (package
15554 (name "python-packaging")
15555 (version "20.0")
15556 (source
15557 (origin
15558 (method url-fetch)
15559 (uri (pypi-uri "packaging" version))
15560 ;; XXX: The URL in the patch file is wrong, it should be
15561 ;; <https://github.com/pypa/packaging/pull/256>.
15562 (patches (search-patches "python-packaging-test-arch.patch"))
15563 (sha256
15564 (base32
15565 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
15566 (build-system python-build-system)
15567 (arguments
15568 `(#:phases (modify-phases %standard-phases
15569 (replace 'check
15570 (lambda* (#:key tests? #:allow-other-keys)
15571 (if tests?
15572 (invoke "py.test" "-vv")
15573 (format #t "test suite not run~%"))
15574 #t)))))
15575 (native-inputs
15576 `(("python-pretend" ,python-pretend)
15577 ("python-pytest" ,python-pytest)))
15578 (propagated-inputs
15579 `(("python-pyparsing" ,python-pyparsing)
15580 ("python-six" ,python-six)))
15581 (home-page "https://github.com/pypa/packaging")
15582 (synopsis "Core utilities for Python packages")
15583 (description "Packaging is a Python module for dealing with Python packages.
15584 It offers an interface for working with package versions, names, and dependency
15585 information.")
15586 ;; From 'LICENSE': This software is made available under the terms of
15587 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
15588 ;; Contributions to this software is made under the terms of *both* these
15589 ;; licenses.
15590 (license (list license:asl2.0 license:bsd-2))))
15591
15592 (define-public python2-packaging
15593 (package-with-python2 python-packaging))
15594
15595 ;; Variants with minimal dependencies, for bootstrapping Pytest.
15596 (define-public python-packaging-bootstrap
15597 (hidden-package
15598 (package/inherit
15599 python-packaging
15600 (name "python-packaging-bootstrap")
15601 (native-inputs '())
15602 (propagated-inputs
15603 `(("python-pyparsing" ,python-pyparsing)))
15604 (arguments '(#:tests? #f)))))
15605
15606 (define-public python2-packaging-bootstrap
15607 (hidden-package
15608 (package/inherit
15609 python2-packaging
15610 (name "python2-packaging-bootstrap")
15611 (native-inputs '())
15612 (propagated-inputs
15613 `(("python-pyparsing" ,python2-pyparsing)))
15614 (arguments
15615 `(#:tests? #f
15616 ,@(package-arguments python2-packaging))))))
15617
15618 (define-public python-relatorio
15619 (package
15620 (name "python-relatorio")
15621 (version "0.8.0")
15622 (source
15623 (origin
15624 (method url-fetch)
15625 (uri (pypi-uri "relatorio" version))
15626 (sha256
15627 (base32
15628 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
15629 (build-system python-build-system)
15630 (propagated-inputs
15631 `(("python-lxml" ,python-lxml)
15632 ("python-genshi" ,python-genshi)))
15633 (native-inputs
15634 `(("python-magic" ,python-magic)))
15635 (home-page "https://relatorio.tryton.org/")
15636 (synopsis "Templating library able to output ODT and PDF files")
15637 (description "Relatorio is a templating library which provides a way to
15638 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
15639 for more filetypes can be easily added by creating plugins for them.")
15640 (license license:gpl3+)))
15641
15642 (define-public python2-relatorio
15643 (package-with-python2 python-relatorio))
15644
15645 (define-public python-radon
15646 (package
15647 (name "python-radon")
15648 (version "4.1.0")
15649 (source
15650 (origin
15651 (method url-fetch)
15652 (uri (pypi-uri "radon" version))
15653 (sha256
15654 (base32
15655 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
15656 (build-system python-build-system)
15657 (arguments
15658 `(#:phases (modify-phases %standard-phases
15659 (replace 'check
15660 (lambda _
15661 (invoke "python" "radon/tests/run.py"))))))
15662 (propagated-inputs
15663 `(("python-colorama" ,python-colorama)
15664 ("python-flake8-polyfill" ,python-flake8-polyfill)
15665 ("python-mando" ,python-mando)))
15666 (native-inputs
15667 `(("python-pytest" ,python-pytest)
15668 ("python-pytest-mock" ,python-pytest-mock)))
15669 (home-page "https://radon.readthedocs.org/")
15670 (synopsis "Code Metrics in Python")
15671 (description "Radon is a Python tool which computes various code metrics.
15672 Supported metrics are:
15673 @itemize @bullet
15674 @item raw metrics: SLOC, comment lines, blank lines, &c.
15675 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
15676 @item Halstead metrics (all of them)
15677 @item the Maintainability Index (a Visual Studio metric)
15678 @end itemize")
15679 (properties `((python2-variant . ,(delay python2-radon))))
15680 (license license:expat)))
15681
15682 (define-public python2-radon
15683 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
15684 (package
15685 (inherit base)
15686 (propagated-inputs
15687 `(("python-configparser" ,python2-configparser)
15688 ("python-future" ,python2-future)
15689 ,@(package-propagated-inputs base))))))
15690
15691 (define-public python-sure
15692 (package
15693 (name "python-sure")
15694 (version "1.4.11")
15695 (source
15696 (origin
15697 (method url-fetch)
15698 (uri (pypi-uri "sure" version))
15699 (sha256
15700 (base32
15701 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
15702 (build-system python-build-system)
15703 (propagated-inputs
15704 `(("python-mock" ,python-mock)
15705 ("python-six" ,python-six)))
15706 (native-inputs
15707 `(("python-nose" ,python-nose)))
15708 (home-page "https://github.com/gabrielfalcao/sure")
15709 (synopsis "Automated testing library in python for python")
15710 (description
15711 "Sure is a python library that leverages a DSL for writing assertions.
15712 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
15713 (license license:gpl3+)))
15714
15715 (define-public python2-sure
15716 (package-with-python2 python-sure))
15717
15718 (define-public python2-couleur
15719 ;; This package does not seem to support python3 at all, hence,
15720 ;; only the python2 variant definition is provided.
15721 (package
15722 (name "python2-couleur")
15723 (version "0.6.2")
15724 (source
15725 (origin
15726 (method url-fetch)
15727 (uri (pypi-uri "couleur" version))
15728 (sha256
15729 (base32
15730 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
15731 (build-system python-build-system)
15732 (arguments
15733 `(#:python ,python-2))
15734 (home-page "https://github.com/gabrielfalcao/couleur")
15735 (synopsis
15736 "ANSI terminal tool for python, colored shell and other handy fancy features")
15737 (description
15738 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
15739 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
15740 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
15741 ;; https://github.com/gabrielfalcao/couleur/issues/11
15742 (license license:lgpl3+)))
15743
15744 (define-public python-misaka
15745 (package
15746 (name "python-misaka")
15747 (version "2.1.1")
15748 (source
15749 (origin
15750 (method url-fetch)
15751 (uri (pypi-uri "misaka" version))
15752 (sha256
15753 (base32
15754 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
15755 (build-system python-build-system)
15756 (arguments
15757 `(;; Line 37 of setup.py calls self.run_command('develop')
15758 ;; in the 'check' phase. This command seems to be trying
15759 ;; to write to
15760 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
15761 ;; for which it does not have the permission to write.
15762 #:tests? #f))
15763 (propagated-inputs
15764 `(("python-cffi" ,python-cffi)))
15765 (home-page "https://github.com/FSX/misaka")
15766 (synopsis "Python binding for Hoedown")
15767 (description
15768 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
15769 library written in C. It features a fast HTML renderer and functionality to make custom
15770 renderers (e.g. man pages or LaTeX).")
15771 (license license:expat)))
15772
15773 (define-public python2-misaka
15774 (package-with-python2 python-misaka))
15775
15776 (define-public python2-steadymark
15777 ;; This is forced into being a python2 only variant
15778 ;; due to its dependence on couleur that has no support
15779 ;; for python3
15780 (package
15781 (name "python2-steadymark")
15782 (version "0.7.3")
15783 (source
15784 (origin
15785 (method url-fetch)
15786 (uri (pypi-uri "steadymark" version))
15787 (sha256
15788 (base32
15789 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
15790 (build-system python-build-system)
15791 (native-inputs
15792 `(("python-couleur" ,python2-couleur)
15793 ("python-sure" ,python2-sure)
15794 ("python-misaka" ,python2-misaka)))
15795 (arguments
15796 `(#:python ,python-2
15797 #:phases
15798 (modify-phases %standard-phases
15799 (add-before 'build 'patch-setup-py
15800 (lambda _
15801 ;; Update requirements from dependency==version
15802 ;; to dependency>=version
15803 (substitute* "setup.py"
15804 (("==") ">="))
15805 #t)))))
15806 (home-page "https://github.com/gabrielfalcao/steadymark")
15807 (synopsis "Markdown-based test runner for python")
15808 (description
15809 "@code{Steadymark} allows documentation to be written in github-flavoured
15810 markdown. The documentation may contain snippets of code surrounded by python
15811 code blocks and @code{Steadymark} will find these snippets and run them, making
15812 sure that there are no old malfunctional examples in the documentation examples.")
15813 (license license:expat)))
15814
15815 (define-public python-jsonpointer
15816 (package
15817 (name "python-jsonpointer")
15818 (version "1.10")
15819 (source
15820 (origin
15821 (method url-fetch)
15822 (uri (pypi-uri "jsonpointer" version))
15823 (sha256
15824 (base32
15825 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15826 (build-system python-build-system)
15827 (home-page "https://github.com/stefankoegl/python-json-pointer")
15828 (synopsis "Identify specific nodes in a JSON document")
15829 (description "@code{jsonpointer} allows you to access specific nodes
15830 by path in a JSON document (see RFC 6901).")
15831 (license license:bsd-3)))
15832
15833 (define-public python2-jsonpointer
15834 (package-with-python2 python-jsonpointer))
15835
15836 (define-public python-jsonpatch
15837 (package
15838 (name "python-jsonpatch")
15839 (version "1.16")
15840 (source
15841 (origin
15842 (method git-fetch)
15843 ;; pypi version lacks tests.js
15844 (uri (git-reference
15845 (url "https://github.com/stefankoegl/python-json-patch")
15846 (commit (string-append "v" version))))
15847 (file-name (git-file-name name version))
15848 (sha256
15849 (base32
15850 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
15851 (build-system python-build-system)
15852 (native-inputs
15853 `(("python-jsonpointer" ,python-jsonpointer)))
15854 (home-page "https://github.com/stefankoegl/python-json-patch")
15855 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
15856 (description "@code{jsonpatch} is a library and program that allows
15857 applying JSON Patches according to RFC 6902.")
15858 (license license:bsd-3)))
15859
15860 (define-public python2-jsonpatch
15861 (package-with-python2 python-jsonpatch))
15862
15863 (define-public python-jsonpatch-0.4
15864 (package (inherit python-jsonpatch)
15865 (name "python-jsonpatch")
15866 (version "0.4")
15867 (source
15868 (origin
15869 (method git-fetch)
15870 (uri (git-reference
15871 (url "https://github.com/stefankoegl/python-json-patch")
15872 (commit (string-append "v" version))))
15873 (file-name (git-file-name name version))
15874 (sha256
15875 (base32
15876 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
15877
15878 (define-public python2-jsonpatch-0.4
15879 (package-with-python2 python-jsonpatch-0.4))
15880
15881 (define-public python-rfc3986
15882 (package
15883 (name "python-rfc3986")
15884 (version "1.4.0")
15885 (source (origin
15886 (method url-fetch)
15887 (uri (pypi-uri "rfc3986" version))
15888 (sha256
15889 (base32
15890 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
15891 (build-system python-build-system)
15892 (arguments
15893 `(#:modules ((guix build utils)
15894 (guix build python-build-system)
15895 (ice-9 ftw)
15896 (srfi srfi-1)
15897 (srfi srfi-26))
15898 #:phases
15899 (modify-phases %standard-phases
15900 (replace 'check
15901 (lambda _
15902 (let ((cwd (getcwd)))
15903 (setenv "PYTHONPATH"
15904 (string-append cwd "/build/"
15905 (find (cut string-prefix? "lib" <>)
15906 (scandir (string-append cwd "/build")))
15907 ":"
15908 (getenv "PYTHONPATH")))
15909 (invoke "pytest" "-v")))))))
15910 (native-inputs
15911 `(("python-pytest" ,python-pytest)))
15912 (home-page "https://rfc3986.readthedocs.io/")
15913 (synopsis "Parse and validate URI references")
15914 (description
15915 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
15916 validation and authority parsing. This module also supports RFC@tie{}6874
15917 which adds support for zone identifiers to IPv6 addresses.")
15918 (license license:asl2.0)))
15919
15920 (define-public python2-rfc3986
15921 (package-with-python2 python-rfc3986))
15922
15923 (define-public python-rfc3987
15924 (package
15925 (name "python-rfc3987")
15926 (version "1.3.7")
15927 (source
15928 (origin
15929 (method url-fetch)
15930 (uri (pypi-uri "rfc3987" version))
15931 (sha256
15932 (base32
15933 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15934 (build-system python-build-system)
15935 (home-page "https://pypi.org/project/rfc3987/")
15936 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15937 (description "@code{rfc3987} provides routines for parsing and
15938 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15939 (license license:gpl3+)))
15940
15941 (define-public python2-rfc3987
15942 (package-with-python2 python-rfc3987))
15943
15944 (define-public python-validators
15945 (package
15946 (name "python-validators")
15947 (version "0.14.2")
15948 (source (origin
15949 (method url-fetch)
15950 (uri (pypi-uri "validators" version))
15951 (sha256
15952 (base32
15953 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
15954 (build-system python-build-system)
15955 (arguments
15956 '(#:phases (modify-phases %standard-phases
15957 (replace 'check
15958 (lambda _
15959 (invoke "pytest" "-vv"))))))
15960 (propagated-inputs
15961 `(("python-decorator" ,python-decorator)
15962 ("python-six" ,python-six)))
15963 (native-inputs
15964 `(("python-flake8" ,python-flake8)
15965 ("python-isort" ,python-isort)
15966 ("python-pytest" ,python-pytest)))
15967 (home-page "https://github.com/kvesteri/validators")
15968 (synopsis "Data validation library")
15969 (description
15970 "This package contains validators for different things such as email
15971 addresses, IP addresses, URLs, hashes and more. It has been designed to
15972 be easy to use and not require defining a schema or form just to validate
15973 some input.")
15974 (license license:expat)))
15975
15976 (define-public python2-validators
15977 (package-with-python2 python-validators))
15978
15979 (define-public python-validate-email
15980 (package
15981 (name "python-validate-email")
15982 (version "1.3")
15983 (source
15984 (origin
15985 (method url-fetch)
15986 (uri (pypi-uri "validate_email" version))
15987 (sha256
15988 (base32
15989 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15990 (build-system python-build-system)
15991 (home-page "https://github.com/syrusakbary/validate_email")
15992 (synopsis "Verifies if an email address is valid and really exists")
15993 (description "@code{validate_email} can be used to verify if an email
15994 address is valid and really exists.")
15995 (license license:lgpl3+)))
15996
15997 (define-public python2-validate-email
15998 (package-with-python2 python-validate-email))
15999
16000 (define-public python-flex
16001 (package
16002 (name "python-flex")
16003 (version "6.10.0")
16004 (source
16005 (origin
16006 (method url-fetch)
16007 (uri (pypi-uri "flex" version))
16008 (sha256
16009 (base32
16010 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
16011 (build-system python-build-system)
16012 (propagated-inputs
16013 `(("python-click" ,python-click)
16014 ("python-iso8601" ,python-iso8601)
16015 ("python-jsonpointer" ,python-jsonpointer)
16016 ("python-pyyaml" ,python-pyyaml)
16017 ("python-requests" ,python-requests)
16018 ("python-rfc3987" ,python-rfc3987)
16019 ("python-six" ,python-six)
16020 ("python-validate-email" ,python-validate-email)))
16021 (home-page "https://github.com/pipermerriam/flex")
16022 (synopsis "Validates Swagger schemata")
16023 (description "@code{flex} can be used to validate Swagger schemata.")
16024 (license license:bsd-3)))
16025
16026 (define-public python2-flex
16027 (package-with-python2 python-flex))
16028
16029 (define-public python-marshmallow
16030 (package
16031 (name "python-marshmallow")
16032 (version "3.0.0b14")
16033 (source
16034 (origin
16035 (method url-fetch)
16036 (uri (pypi-uri "marshmallow" version))
16037 (sha256
16038 (base32
16039 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
16040 (build-system python-build-system)
16041 (propagated-inputs
16042 `(("python-dateutil" ,python-dateutil)
16043 ("python-simplejson" ,python-simplejson)))
16044 (native-inputs
16045 `(("python-pytest" ,python-pytest)
16046 ("python-pytz" ,python-pytz)))
16047 (home-page "https://github.com/marshmallow-code/marshmallow")
16048 (synopsis "Convert complex datatypes to and from native
16049 Python datatypes.")
16050 (description "@code{marshmallow} provides a library for converting
16051 complex datatypes to and from native Python datatypes.")
16052 (license license:expat)))
16053
16054 (define-public python2-marshmallow
16055 (package-with-python2 python-marshmallow))
16056
16057 (define-public python-apispec
16058 (package
16059 (name "python-apispec")
16060 (version "0.25.3")
16061 (source
16062 (origin
16063 (method url-fetch)
16064 (uri (pypi-uri "apispec" version))
16065 (sha256
16066 (base32
16067 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
16068 (build-system python-build-system)
16069 (propagated-inputs
16070 `(("python-pyyaml" ,python-pyyaml)))
16071 (native-inputs
16072 `(("python-pytest" ,python-pytest)
16073 ("python-flask" ,python-flask)
16074 ("python-marshmallow" ,python-marshmallow)
16075 ("python-tornado" ,python-tornado)
16076 ("python-bottle" ,python-bottle)
16077 ("python-mock" ,python-mock)))
16078 (home-page "https://github.com/marshmallow-code/apispec")
16079 (synopsis "Swagger 2.0 API specification generator")
16080 (description "@code{python-apispec} is a pluggable API specification
16081 generator. Currently supports the OpenAPI specification (f.k.a.
16082 Swagger 2.0).")
16083 (license license:expat)))
16084
16085 (define-public python2-apispec
16086 (package-with-python2 python-apispec))
16087
16088 (define-public python-flasgger
16089 (package
16090 (name "python-flasgger")
16091 (version "0.6.3")
16092 (source
16093 (origin
16094 (method git-fetch)
16095 (uri (git-reference
16096 (url "https://github.com/rochacbruno/flasgger")
16097 (commit version)))
16098 (file-name (git-file-name name version))
16099 (sha256
16100 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
16101 (build-system python-build-system)
16102 (arguments
16103 `(#:phases
16104 (modify-phases %standard-phases
16105 (replace 'check
16106 (lambda* (#:key inputs outputs #:allow-other-keys)
16107 (substitute* "Makefile"
16108 (("flake8 flasgger --ignore=F403")
16109 "flake8 flasgger --ignore=E731,F403"))
16110 (setenv "PYTHONPATH" (string-append (getcwd)
16111 ":"
16112 (getenv "PYTHONPATH")))
16113 (invoke "py.test"))))))
16114 (propagated-inputs
16115 `(("python-flask" ,python-flask)
16116 ("python-pyyaml" ,python-pyyaml)
16117 ("python-jsonschema" ,python-jsonschema)
16118 ("python-mistune" ,python-mistune)
16119 ("python-six" ,python-six)))
16120 (native-inputs
16121 `(("python-decorator" ,python-decorator)
16122 ("python-flake8" ,python-flake8)
16123 ("python-flask-restful" ,python-flask-restful)
16124 ("python-flex" ,python-flex)
16125 ("python-pytest" ,python-pytest)
16126 ("python-pytest-cov" ,python-pytest-cov)
16127 ("python-marshmallow" ,python-marshmallow)
16128 ("python-apispec" ,python-apispec)))
16129 (home-page "https://github.com/rochacbruno/flasgger/")
16130 (synopsis "Extract Swagger specs from your Flask project")
16131 (description "@code{python-flasgger} allows extracting Swagger specs
16132 from your Flask project. It is a fork of Flask-Swagger.")
16133 (license license:expat)))
16134
16135 (define-public python2-flasgger
16136 (package-with-python2 python-flasgger))
16137
16138 (define-public python-swagger-spec-validator
16139 (package
16140 (name "python-swagger-spec-validator")
16141 (version "2.4.3")
16142 (source
16143 (origin
16144 (method url-fetch)
16145 (uri (pypi-uri "swagger-spec-validator" version))
16146 (sha256
16147 (base32
16148 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
16149 (build-system python-build-system)
16150 (propagated-inputs
16151 `(("python-jsonschema" ,python-jsonschema)
16152 ("python-pyyaml" ,python-pyyaml)
16153 ("python-six" ,python-six)))
16154 (home-page
16155 "https://github.com/Yelp/swagger_spec_validator")
16156 (synopsis "Validation of Swagger specifications")
16157 (description "@code{swagger_spec_validator} provides a library for
16158 validating Swagger API specifications.")
16159 (license license:asl2.0)))
16160
16161 (define-public python2-swagger-spec-validator
16162 (package-with-python2 python-swagger-spec-validator))
16163
16164 (define-public python-apache-libcloud
16165 (package
16166 (name "python-apache-libcloud")
16167 (version "3.1.0")
16168 (source
16169 (origin
16170 (method url-fetch)
16171 (uri (pypi-uri "apache-libcloud" version))
16172 (sha256
16173 (base32
16174 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
16175 (build-system python-build-system)
16176 (arguments
16177 `(#:phases
16178 (modify-phases %standard-phases
16179 (add-after 'unpack 'patch-ssh
16180 (lambda* (#:key inputs #:allow-other-keys)
16181 (substitute* "libcloud/compute/ssh.py"
16182 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
16183 "/bin/ssh" "'")))
16184 #t))
16185 (add-after 'unpack 'patch-tests
16186 (lambda _
16187 (substitute* "libcloud/test/compute/test_ssh_client.py"
16188 (("class ShellOutSSHClientTests")
16189 "@unittest.skip(\"Guix container doesn't have ssh service\")
16190 class ShellOutSSHClientTests"))
16191 #t))
16192 (add-before 'check 'copy-secret
16193 (lambda _
16194 (copy-file "libcloud/test/secrets.py-dist"
16195 "libcloud/test/secrets.py")
16196 #t)))))
16197 (inputs
16198 `(("openssh" ,openssh)))
16199 (propagated-inputs
16200 `(("python-paramiko" ,python-paramiko)
16201 ("python-requests" ,python-requests)))
16202 (native-inputs
16203 `(("python-lockfile" ,python-lockfile)
16204 ("python-mock" ,python-mock)
16205 ("python-pytest" ,python-pytest)
16206 ("python-pytest-runner" ,python-pytest-runner)
16207 ("python-requests-mock" ,python-requests-mock)))
16208 (home-page "https://libcloud.apache.org/")
16209 (synopsis "Unified Cloud API")
16210 (description "@code{libcloud} is a Python library for interacting with
16211 many of the popular cloud service providers using a unified API.")
16212 (license license:asl2.0)))
16213
16214 (define-public python2-apache-libcloud
16215 (package-with-python2 python-apache-libcloud))
16216
16217 (define-public python-smmap
16218 (package
16219 (name "python-smmap")
16220 (version "3.0.1")
16221 (source
16222 (origin
16223 (method url-fetch)
16224 (uri (pypi-uri "smmap" version))
16225 (sha256
16226 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
16227 (build-system python-build-system)
16228 (native-inputs
16229 `(("python-nosexcover" ,python-nosexcover)))
16230 (home-page "https://github.com/Byron/smmap")
16231 (synopsis "Python sliding window memory map manager")
16232 (description "@code{smmap} is a pure Python implementation of a sliding
16233 window memory map manager.")
16234 (license license:bsd-3)))
16235
16236 (define-public python-smmap2
16237 (deprecated-package "python-smmap2" python-smmap))
16238
16239 (define-public python2-smmap
16240 (package-with-python2 python-smmap))
16241
16242 (define-public python2-smmap2
16243 (deprecated-package "python2-smmap2" python2-smmap))
16244
16245 (define-public python-regex
16246 (package
16247 (name "python-regex")
16248 (version "2020.6.8")
16249 (source (origin
16250 (method url-fetch)
16251 (uri (pypi-uri "regex" version))
16252 (sha256
16253 (base32
16254 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
16255 (build-system python-build-system)
16256 (arguments
16257 '(#:phases
16258 (modify-phases %standard-phases
16259 (replace 'check
16260 (lambda* (#:key inputs outputs #:allow-other-keys)
16261 (add-installed-pythonpath inputs outputs)
16262 (invoke "python" "-c"
16263 "from regex.test_regex import test_main; test_main()"))))))
16264 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
16265 (synopsis "Alternative regular expression module")
16266 (description "This regular expression implementation is backwards-
16267 compatible with the standard @code{re} module, but offers additional
16268 functionality like full case-folding for case-insensitive matches in Unicode.")
16269 (license license:psfl)))
16270
16271 (define-public python2-regex
16272 (package-with-python2 python-regex))
16273
16274 (define-public python-pyopengl
16275 (package
16276 (name "python-pyopengl")
16277 (version "3.1.5")
16278 (source
16279 (origin
16280 (method url-fetch)
16281 (uri (pypi-uri "PyOpenGL" version))
16282 (sha256
16283 (base32
16284 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
16285 (build-system python-build-system)
16286 (inputs
16287 `(("mesa" ,mesa)
16288 ("freeglut" ,freeglut)
16289 ("glu" ,glu)))
16290 (arguments
16291 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
16292 ;attribute 'OSMesa'
16293 #:phases
16294 (modify-phases %standard-phases
16295 (add-before 'build 'fix-paths
16296 (lambda* (#:key inputs outputs #:allow-other-keys)
16297 (substitute* '("OpenGL/platform/ctypesloader.py")
16298 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
16299 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
16300 (("'GL'")
16301 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
16302 (("'GLU'")
16303 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
16304 (("'glut',")
16305 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
16306 (("'GLESv1_CM'")
16307 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
16308 (("'GLESv2'")
16309 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
16310 ;; Not providing libgle. It seems to be very old.
16311 #t)))))
16312 (home-page "http://pyopengl.sourceforge.net")
16313 (synopsis "Standard OpenGL bindings for Python")
16314 (description
16315 "PyOpenGL is the most common cross platform Python binding to OpenGL and
16316 related APIs. The binding is created using the standard @code{ctypes}
16317 library.")
16318 (license license:bsd-3)))
16319
16320 (define-public python-pyopengl-accelerate
16321 (package
16322 (inherit python-pyopengl)
16323 (name "python-pyopengl-accelerate")
16324 (version "3.1.5")
16325 (source
16326 (origin
16327 (method url-fetch)
16328 (uri (pypi-uri "PyOpenGL-accelerate" version))
16329 (sha256
16330 (base32
16331 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
16332 (inputs
16333 `(("mesa" ,mesa)
16334 ("python-numpy" ,python-numpy))) ; for cython module
16335 ; numpy_formathandler, thus not propagated
16336 (arguments
16337 `(#:tests? #f
16338 #:phases
16339 (modify-phases %standard-phases
16340 (delete 'fix-paths))))
16341 (synopsis "Acceleration code for PyOpenGL")
16342 (description
16343 "This is the Cython-coded accelerator module for PyOpenGL.")))
16344
16345 (define-public python-rencode
16346 (package
16347 (name "python-rencode")
16348 (version "1.0.5")
16349 (source
16350 (origin
16351 (method url-fetch)
16352 (uri (pypi-uri "rencode" version))
16353 (sha256
16354 (base32
16355 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
16356 (build-system python-build-system)
16357 (arguments
16358 `(#:phases
16359 (modify-phases %standard-phases
16360 (add-before 'check 'delete-bogus-test
16361 ;; This test requires /home/aresch/Downloads, which is not provided by
16362 ;; the build environment.
16363 (lambda _
16364 (delete-file "rencode/t.py")
16365 #t)))))
16366 (native-inputs `(("pkg-config" ,pkg-config)
16367 ("python-cython" ,python-cython)))
16368 (home-page "https://github.com/aresch/rencode")
16369 (synopsis "Serialization of heterogeneous data structures")
16370 (description
16371 "The @code{rencode} module is a data structure serialization library,
16372 similar to @code{bencode} from the BitTorrent project. For complex,
16373 heterogeneous data structures with many small elements, r-encoding stake up
16374 significantly less space than b-encodings. This version of rencode is a
16375 complete rewrite in Cython to attempt to increase the performance over the
16376 pure Python module.")
16377 (license license:bsd-3)))
16378
16379 (define-public python2-rencode
16380 (package-with-python2 python-rencode))
16381
16382 (define-public python-xenon
16383 (package
16384 (name "python-xenon")
16385 (version "0.7.0")
16386 (source
16387 (origin
16388 (method url-fetch)
16389 (uri (pypi-uri "xenon" version))
16390 (sha256
16391 (base32
16392 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
16393 (build-system python-build-system)
16394 (native-inputs
16395 `(("python-pyyaml" ,python-pyyaml)
16396 ("python-radon" ,python-radon)
16397 ("python-requests" ,python-requests)
16398 ("python-flake8" ,python-flake8)
16399 ("python-tox" ,python-tox)))
16400 (arguments
16401 `(#:tests? #f ;test suite not shipped with the PyPI archive
16402 #:phases
16403 (modify-phases %standard-phases
16404 (add-before 'build 'patch-test-requirements
16405 (lambda _
16406 ;; Remove httpretty dependency for tests.
16407 (substitute* "setup.py"
16408 (("httpretty") ""))
16409 #t)))))
16410 (home-page "https://xenon.readthedocs.org/")
16411 (synopsis "Monitor code metrics for Python on your CI server")
16412 (description
16413 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
16414 Ideally, @code{xenon} is run every time code is committed. Through command
16415 line options, various thresholds can be set for the complexity of code. It
16416 will fail (i.e. it will exit with a non-zero exit code) when any of these
16417 requirements is not met.")
16418 (license license:expat)))
16419
16420 (define-public python2-xenon
16421 (package-with-python2 python-xenon))
16422
16423 (define-public python-pysocks
16424 (package
16425 (name "python-pysocks")
16426 (version "1.7.0")
16427 (source
16428 (origin
16429 (method url-fetch)
16430 (uri (pypi-uri "PySocks" version))
16431 (sha256
16432 (base32
16433 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
16434 (build-system python-build-system)
16435 (arguments `(#:tests? #f))
16436 (home-page "https://github.com/Anorov/PySocks")
16437 (synopsis "SOCKS client module")
16438 (description "@code{pysocks} is an updated and semi-actively maintained
16439 version of @code{SocksiPy} with bug fixes and extra features.")
16440 (license license:bsd-3)))
16441
16442 (define-public python2-pysocks
16443 (package-with-python2 python-pysocks))
16444
16445 (define-public python-pydiff
16446 (package
16447 (name "python-pydiff")
16448 (version "0.2")
16449 (source
16450 (origin
16451 (method url-fetch)
16452 (uri (pypi-uri "pydiff" version))
16453 (sha256
16454 (base32
16455 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
16456 (build-system python-build-system)
16457 (home-page "https://github.com/myint/pydiff")
16458 (synopsis "Library to diff two Python files at the bytecode level")
16459 (description
16460 "@code{pydiff} makes it easy to look for actual code changes while
16461 ignoring formatting changes.")
16462 (license license:expat)))
16463
16464 (define-public python2-pydiff
16465 (package-with-python2 python-pydiff))
16466
16467 (define-public python-tqdm
16468 (package
16469 (name "python-tqdm")
16470 (version "4.43.0")
16471 (source
16472 (origin
16473 (method url-fetch)
16474 (uri (pypi-uri "tqdm" version))
16475 (sha256
16476 (base32
16477 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
16478 (build-system python-build-system)
16479 (arguments
16480 '(#:phases (modify-phases %standard-phases
16481 (replace 'check
16482 (lambda* (#:key inputs outputs #:allow-other-keys)
16483 (add-installed-pythonpath inputs outputs)
16484 ;; This invokation is taken from tox.ini.
16485 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
16486 "-d" "-v" "tqdm/"))))))
16487 (native-inputs
16488 `(("python-nose" ,python-nose)))
16489 (home-page "https://github.com/tqdm/tqdm")
16490 (synopsis "Fast, extensible progress meter")
16491 (description
16492 "Make loops show a progress bar on the console by just wrapping any
16493 iterable with @code{|tqdm(iterable)|}. Offers many options to define
16494 design and layout.")
16495 (license (list license:mpl2.0 license:expat))))
16496
16497 (define-public python2-tqdm
16498 (package-with-python2 python-tqdm))
16499
16500 (define-public python-pkginfo
16501 (package
16502 (name "python-pkginfo")
16503 (version "1.4.2")
16504 (source
16505 (origin
16506 (method url-fetch)
16507 (uri (pypi-uri "pkginfo" version))
16508 (sha256
16509 (base32
16510 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
16511 (build-system python-build-system)
16512 (arguments
16513 ;; The tests are broken upstream.
16514 '(#:tests? #f))
16515 (home-page
16516 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
16517 (synopsis
16518 "Query metadatdata from sdists, bdists, and installed packages")
16519 (description
16520 "API to query the distutils metadata written in @file{PKG-INFO} inside a
16521 source distriubtion (an sdist) or a binary distribution (e.g., created by
16522 running bdist_egg). It can also query the EGG-INFO directory of an installed
16523 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
16524 created by running @code{python setup.py develop}).")
16525 (license license:expat)))
16526
16527 (define-public python2-pkginfo
16528 (package-with-python2 python-pkginfo))
16529
16530 (define-public python-twine
16531 (package
16532 (name "python-twine")
16533 (version "1.15.0")
16534 (source
16535 (origin
16536 (method url-fetch)
16537 (uri (pypi-uri "twine" version))
16538 (sha256
16539 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
16540 (build-system python-build-system)
16541 (propagated-inputs
16542 `(("python-tqdm" ,python-tqdm)
16543 ("python-packaging" ,python-packaging)
16544 ("python-pkginfo" ,python-pkginfo)
16545 ("python-readme-renderer" ,python-readme-renderer)
16546 ("python-requests" ,python-requests)
16547 ("python-requests-toolbelt" ,python-requests-toolbelt)))
16548 (home-page "https://github.com/pypa/twine")
16549 (synopsis "Collection of utilities for interacting with PyPI")
16550 (description
16551 "@code{twine} currently supports registering projects and uploading
16552 distributions. It authenticates the user over HTTPS, allows them to pre-sign
16553 their files and supports any packaging format (including wheels).")
16554 (license license:asl2.0)))
16555
16556 (define-public python2-twine
16557 (package-with-python2 python-twine))
16558
16559 (define-public python-linecache2
16560 (package
16561 (name "python-linecache2")
16562 (version "1.0.0")
16563 (source
16564 (origin
16565 (method url-fetch)
16566 (uri (pypi-uri "linecache2" version))
16567 (sha256
16568 (base32
16569 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
16570 (build-system python-build-system)
16571 (arguments
16572 `(;; The tests depend on unittest2, and our version is a bit too old.
16573 #:tests? #f))
16574 (native-inputs
16575 `(("python-pbr" ,python-pbr-minimal)))
16576 (home-page
16577 "https://github.com/testing-cabal/linecache2")
16578 (synopsis "Backports of the linecache module")
16579 (description
16580 "The linecache module allows one to get any line from any file, while
16581 attempting to optimize internally, using a cache, the common case where many
16582 lines are read from a single file.")
16583 (license license:psfl)))
16584
16585 (define-public python2-linecache2
16586 (package-with-python2 python-linecache2))
16587
16588 (define-public python-traceback2
16589 (package
16590 (name "python-traceback2")
16591 (version "1.4.0")
16592 (source
16593 (origin
16594 (method url-fetch)
16595 (uri (pypi-uri "traceback2" version))
16596 (sha256
16597 (base32
16598 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
16599 (build-system python-build-system)
16600 (arguments
16601 `(;; python-traceback2 and python-unittest2 depend on one another.
16602 #:tests? #f))
16603 (native-inputs
16604 `(("python-pbr" ,python-pbr-minimal)))
16605 (propagated-inputs
16606 `(("python-linecache2" ,python-linecache2)))
16607 (home-page
16608 "https://github.com/testing-cabal/traceback2")
16609 (synopsis "Backports of the traceback module")
16610 (description
16611 "This module provides a standard interface to extract, format and print
16612 stack traces of Python programs. It exactly mimics the behavior of the Python
16613 interpreter when it prints a stack trace.")
16614 (license license:psfl)))
16615
16616 (define-public python2-traceback2
16617 (package-with-python2 python-traceback2))
16618
16619 (define-public python-ratelimiter
16620 (package
16621 (name "python-ratelimiter")
16622 (version "1.2.0")
16623 (source
16624 (origin
16625 (method url-fetch)
16626 (uri (pypi-uri "ratelimiter" version))
16627 (sha256
16628 (base32
16629 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
16630 (build-system python-build-system)
16631 (arguments
16632 '(#:tests? #f)) ; There are no tests in the pypi archive.
16633 (home-page "https://github.com/RazerM/ratelimiter")
16634 (synopsis "Simple rate limiting object")
16635 (description
16636 "The @code{ratelimiter} module ensures that an operation will not be
16637 executed more than a given number of times during a given period.")
16638 (license license:asl2.0)))
16639
16640 (define-public python2-ratelimiter
16641 (package-with-python2 python-ratelimiter))
16642
16643 (define-public python-dukpy
16644 (package
16645 (name "python-dukpy")
16646 (version "0.3")
16647 (source
16648 (origin
16649 (method git-fetch)
16650 (uri (git-reference
16651 (url "https://github.com/kovidgoyal/dukpy")
16652 (commit (string-append "v" version))))
16653 (file-name (git-file-name name version))
16654 (sha256
16655 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
16656 (build-system python-build-system)
16657 (home-page "https://github.com/kovidgoyal/dukpy")
16658 (synopsis "Run JavaScript in python")
16659 (description
16660 "dukpy is a JavaScript runtime environment for Python using the duktape
16661 embeddable JavaScript engine.")
16662 ;; Dukpy is licensed under MIT like the embedded duktape library,
16663 ;; with 'errors.c' as GPL3.
16664 (license (list license:expat license:gpl3))))
16665
16666 (define-public python2-dukpy
16667 (package-with-python2 python-dukpy))
16668
16669 (define-public python-jsonrpclib-pelix
16670 (package
16671 (name "python-jsonrpclib-pelix")
16672 (version "0.3.2")
16673 (source
16674 (origin
16675 (method url-fetch)
16676 (uri (pypi-uri "jsonrpclib-pelix" version))
16677 (sha256
16678 (base32
16679 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
16680 (build-system python-build-system)
16681 (arguments
16682 `(#:tests? #f)) ; no tests in PyPI tarball
16683 (home-page "https://github.com/tcalmant/jsonrpclib/")
16684 (synopsis "JSON-RPC 2.0 client library for Python")
16685 (description
16686 "This library implements the JSON-RPC v2.0
16687 specification (backwards-compatible) as a client library for Python. This
16688 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
16689 services.")
16690 (license license:asl2.0)))
16691
16692 (define-public python2-jsonrpclib-pelix
16693 (package-with-python2 python-jsonrpclib-pelix))
16694
16695 (define-public python-setuptools-scm-git-archive
16696 (package
16697 (name "python-setuptools-scm-git-archive")
16698 (version "1.0")
16699 (source
16700 (origin
16701 (method url-fetch)
16702 (uri (pypi-uri "setuptools_scm_git_archive" version))
16703 (sha256
16704 (base32
16705 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
16706 (build-system python-build-system)
16707 (native-inputs
16708 `(("python-pytest" ,python-pytest)))
16709 (propagated-inputs
16710 `(("python-setuptools-scm" ,python-setuptools-scm)))
16711 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
16712 (synopsis "Setuptools_scm plugin for git archives")
16713 (description
16714 "The setuptools_scm_git_archive package is a plugin to
16715 setuptools_scm, which supports obtaining versions from git archives that
16716 belong to tagged versions.")
16717 (license license:expat)))
16718
16719 (define-public python2-setuptools-scm-git-archive
16720 (package-with-python2 python-setuptools-scm-git-archive))
16721
16722 (define-public python-setuptools-git
16723 (package
16724 (name "python-setuptools-git")
16725 (version "1.2")
16726 (source
16727 (origin
16728 (method url-fetch)
16729 (uri (pypi-uri "setuptools-git" version))
16730 (sha256
16731 (base32
16732 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
16733 (build-system python-build-system)
16734 (arguments
16735 `(#:phases
16736 (modify-phases %standard-phases
16737 ;; This is needed for tests.
16738 (add-after 'unpack 'configure-git
16739 (lambda _
16740 (setenv "HOME" "/tmp")
16741 (invoke "git" "config" "--global" "user.email" "guix")
16742 (invoke "git" "config" "--global" "user.name" "guix")
16743 #t)))))
16744 (native-inputs
16745 `(("git" ,git-minimal)))
16746 (home-page "https://github.com/msabramo/setuptools-git")
16747 (synopsis "Setuptools revision control system plugin for Git")
16748 (description
16749 "This package provides a plugin for Setuptools for revision control with
16750 Git.")
16751 (license license:bsd-3)))
16752
16753 (define-public python-pyclipper
16754 (package
16755 (name "python-pyclipper")
16756 (version "1.1.0.post3")
16757 (source
16758 (origin
16759 (method url-fetch)
16760 (uri (pypi-uri "pyclipper" version ".zip"))
16761 (sha256
16762 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
16763 (modules '((guix build utils)))
16764 (snippet
16765 '(begin
16766 ;; This file is generated by Cython.
16767 (delete-file "pyclipper/pyclipper.cpp") #t))))
16768 (build-system python-build-system)
16769 (arguments
16770 `(#:phases
16771 (modify-phases %standard-phases
16772 (add-before 'build 'cythonize-sources
16773 (lambda _
16774 (with-directory-excursion "pyclipper"
16775 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
16776 (propagated-inputs
16777 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
16778 (native-inputs
16779 `(("python-cython" ,python-cython)
16780 ("python-pytest" ,python-pytest)
16781 ("python-pytest-runner" ,python-pytest-runner)
16782 ("python-unittest2" ,python-unittest2)
16783 ("unzip" ,unzip)))
16784 (home-page "https://github.com/greginvm/pyclipper")
16785 (synopsis "Wrapper for Angus Johnson's Clipper library")
16786 (description
16787 "Pyclipper is a Cython wrapper for the C++ translation of the
16788 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
16789 (license license:expat)))
16790
16791 (define-public python2-pyclipper
16792 (package-with-python2 python-pyclipper))
16793
16794 (define-public python2-booleanoperations
16795 (package
16796 (name "python2-booleanoperations")
16797 (version "0.7.1")
16798 (source
16799 (origin
16800 (method url-fetch)
16801 (uri (pypi-uri "booleanOperations" version ".zip"))
16802 (sha256
16803 (base32
16804 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
16805 (build-system python-build-system)
16806 (arguments
16807 `(#:python ,python-2))
16808 (native-inputs
16809 `(("unzip" ,unzip)
16810 ("python2-pytest" ,python2-pytest)
16811 ("python2-pytest-runner" ,python2-pytest-runner)))
16812 (propagated-inputs
16813 `(("python-fonttools" ,python2-fonttools)
16814 ("python-pyclipper" ,python2-pyclipper)
16815 ("python-ufolib" ,python2-ufolib)))
16816 (home-page "https://github.com/typemytype/booleanOperations")
16817 (synopsis "Boolean operations on paths")
16818 (description
16819 "BooleanOperations provides a Python library that enables
16820 boolean operations on paths.")
16821 (license license:expat)))
16822
16823 (define-public python-tempdir
16824 (package
16825 (name "python-tempdir")
16826 (version "0.7.1")
16827 (source
16828 (origin
16829 (method url-fetch)
16830 (uri (pypi-uri "tempdir" version))
16831 (sha256
16832 (base32
16833 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
16834 (build-system python-build-system)
16835 (home-page "https://pypi.org/project/tempdir/")
16836 (arguments
16837 ;; the package has no tests
16838 '(#:tests? #f))
16839 (synopsis "Python library for managing temporary directories")
16840 (description
16841 "This library manages temporary directories that are automatically
16842 deleted with all their contents when they are no longer needed. It is
16843 particularly convenient for use in tests.")
16844 (license license:expat)))
16845
16846 (define-public python2-tempdir
16847 (package-with-python2 python-tempdir))
16848
16849 (define-public python-activepapers
16850 (package
16851 (name "python-activepapers")
16852 (version "0.2.2")
16853 (source
16854 (origin
16855 (method url-fetch)
16856 (uri (pypi-uri "ActivePapers.Py" version))
16857 (sha256
16858 (base32
16859 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
16860 (build-system python-build-system)
16861 (arguments
16862 `(#:modules ((ice-9 ftw)
16863 (srfi srfi-1)
16864 (guix build utils)
16865 (guix build python-build-system))
16866
16867 #:phases
16868 (modify-phases %standard-phases
16869 (add-after 'unpack 'delete-python2-code
16870 (lambda _
16871 (for-each delete-file
16872 '("lib/activepapers/builtins2.py"
16873 "lib/activepapers/standardlib2.py"
16874 "lib/activepapers/utility2.py"))))
16875 (replace 'check
16876 (lambda _
16877 ;; Deactivate the test cases that download files
16878 (setenv "NO_NETWORK_ACCESS" "1")
16879 ;; For some strange reason, some tests fail if nosetests runs all
16880 ;; test modules in a single execution. They pass if each test
16881 ;; module is run individually.
16882 (for-each (lambda (filename)
16883 (invoke "nosetests"
16884 (string-append "tests/" filename)))
16885 (scandir "tests"
16886 (lambda (filename)
16887 (string-suffix? ".py" filename)))))))))
16888 (native-inputs
16889 `(("python-tempdir" ,python-tempdir)
16890 ("python-nose" ,python-nose)))
16891 (propagated-inputs
16892 `(("python-h5py" ,python-h5py)))
16893 (home-page "https://www.activepapers.org/")
16894 (synopsis "Executable papers for scientific computing")
16895 (description
16896 "ActivePapers is a tool for working with executable papers, which
16897 combine data, code, and documentation in single-file packages,
16898 suitable for publication as supplementary material or on repositories
16899 such as figshare or Zenodo.")
16900 (properties `((python2-variant . ,(delay python2-activepapers))))
16901 (license license:bsd-3)))
16902
16903 (define-public python2-activepapers
16904 (let ((base (package-with-python2
16905 (strip-python2-variant python-activepapers))))
16906 (package
16907 (inherit base)
16908 (arguments
16909 (substitute-keyword-arguments (package-arguments base)
16910 ((#:phases phases)
16911 `(modify-phases ,phases
16912 (delete 'delete-python2-code)
16913 (add-after 'unpack 'delete-python3-code
16914 (lambda _
16915 (for-each delete-file
16916 '("lib/activepapers/builtins3.py"
16917 "lib/activepapers/standardlib3.py"
16918 "lib/activepapers/utility3.py")))))))))))
16919
16920 (define-public python-semver
16921 (package
16922 (name "python-semver")
16923 (version "2.9.0")
16924 (source
16925 (origin
16926 (method url-fetch)
16927 (uri (pypi-uri "semver" version))
16928 (sha256
16929 (base32
16930 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
16931 (build-system python-build-system)
16932 (native-inputs
16933 `(("python-appdirs" ,python-appdirs)
16934 ("python-distlib" ,python-distlib)
16935 ("python-importlib-metadata" ,python-importlib-metadata)
16936 ("python-filelock" ,python-filelock)
16937 ("python-six" ,python-six)
16938 ("python-tox" ,python-tox)
16939 ("python-virtualenv" ,python-virtualenv)))
16940 (home-page "https://github.com/k-bx/python-semver")
16941 (synopsis "Python helper for Semantic Versioning")
16942 (description "This package provides a Python library for
16943 @url{Semantic Versioning, http://semver.org/}.")
16944 (license license:bsd-3)))
16945
16946 (define-public python2-semver
16947 (package-with-python2 python-semver))
16948
16949 (define-public python-pyro4
16950 (package
16951 (name "python-pyro4")
16952 (version "4.77")
16953 (source
16954 (origin
16955 (method url-fetch)
16956 (uri (pypi-uri "Pyro4" version))
16957 (sha256
16958 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
16959 (build-system python-build-system)
16960 (arguments
16961 '(#:tests? #f)) ;FIXME: Some tests require network access.
16962 (native-inputs
16963 `(("python-cloudpickle" ,python-cloudpickle)
16964 ("python-dill" ,python-dill)
16965 ("python-msgpack" ,python-msgpack)))
16966 (propagated-inputs
16967 `(("python-serpent" ,python-serpent)))
16968 (home-page "https://pyro4.readthedocs.io")
16969 (synopsis "Distributed object middleware for Python")
16970 (description
16971 "Pyro enables you to build applications in which objects can talk to each
16972 other over the network. You can just use normal Python method calls to call
16973 objects on other machines, also known as remote procedure calls (RPC).")
16974 (license license:expat)))
16975
16976 (define-public python2-pyro
16977 (package
16978 (name "python2-pyro")
16979 (version "3.16")
16980 (source
16981 (origin
16982 (method url-fetch)
16983 (uri (pypi-uri "Pyro" version))
16984 (file-name (string-append "Pyro-" version ".tar.gz"))
16985 (sha256
16986 (base32
16987 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
16988 (build-system python-build-system)
16989 (arguments
16990 ;; Pyro is not compatible with Python 3
16991 `(#:python ,python-2
16992 ;; Pyro has no test cases for automatic execution
16993 #:tests? #f))
16994 (home-page "https://pythonhosted.org/Pyro/")
16995 (synopsis "Distributed object manager for Python")
16996 (description "Pyro is a Distributed Object Technology system
16997 written in Python that is designed to be easy to use. It resembles
16998 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
16999 which is a system and language independent Distributed Object Technology
17000 and has much more to offer than Pyro or RMI. Pyro 3.x is no
17001 longer maintained. New projects should use Pyro4 instead, which
17002 is the new Pyro version that is actively developed.")
17003 (license license:expat)))
17004
17005 (define-public python2-scientific
17006 (package
17007 (name "python2-scientific")
17008 (version "2.9.4")
17009 (source
17010 (origin
17011 (method git-fetch)
17012 (uri (git-reference
17013 (url "https://github.com/khinsen/ScientificPython")
17014 (commit (string-append "rel" version))))
17015 (file-name (git-file-name name version))
17016 (sha256
17017 (base32
17018 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
17019 (build-system python-build-system)
17020 (inputs
17021 `(("netcdf" ,netcdf)))
17022 (propagated-inputs
17023 `(("python-numpy" ,python2-numpy-1.8)
17024 ("python-pyro" ,python2-pyro)))
17025 (arguments
17026 ;; ScientificPython is not compatible with Python 3
17027 `(#:python ,python-2
17028 #:tests? #f ; No test suite
17029 #:phases
17030 (modify-phases %standard-phases
17031 (replace 'build
17032 (lambda* (#:key inputs #:allow-other-keys)
17033 (invoke "python" "setup.py" "build"
17034 (string-append "--netcdf_prefix="
17035 (assoc-ref inputs "netcdf"))))))))
17036 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
17037 (synopsis "Python modules for scientific computing")
17038 (description "ScientificPython is a collection of Python modules that are
17039 useful for scientific computing. Most modules are rather general (Geometry,
17040 physical units, automatic derivatives, ...) whereas others are more
17041 domain-specific (e.g. netCDF and PDB support). The library is currently
17042 not actively maintained and works only with Python 2 and NumPy < 1.9.")
17043 (license license:cecill-c)))
17044
17045 (define-public python2-mmtk
17046 (package
17047 (name "python2-mmtk")
17048 (version "2.7.12")
17049 (source
17050 (origin
17051 (method git-fetch)
17052 (uri (git-reference
17053 (url "https://github.com/khinsen/MMTK")
17054 (commit (string-append "rel" version))))
17055 (file-name (git-file-name name version))
17056 (sha256
17057 (base32
17058 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
17059 (build-system python-build-system)
17060 (native-inputs
17061 `(("netcdf" ,netcdf)))
17062 (propagated-inputs
17063 `(("python-scientific" ,python2-scientific)
17064 ("python-tkinter" ,python-2 "tk")))
17065 (arguments
17066 `(#:python ,python-2
17067 #:tests? #f
17068 #:phases
17069 (modify-phases %standard-phases
17070 (add-before 'build 'includes-from-scientific
17071 (lambda* (#:key inputs #:allow-other-keys)
17072 (mkdir-p "Include/Scientific")
17073 (copy-recursively
17074 (string-append
17075 (assoc-ref inputs "python-scientific")
17076 "/include/python2.7/Scientific")
17077 "Include/Scientific"))))))
17078 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
17079 (synopsis "Python library for molecular simulation")
17080 (description "MMTK is a library for molecular simulations with an emphasis
17081 on biomolecules. It provides widely used methods such as Molecular Dynamics
17082 and normal mode analysis, but also basic routines for implementing new methods
17083 for simulation and analysis. The library is currently not actively maintained
17084 and works only with Python 2 and NumPy < 1.9.")
17085 (license license:cecill-c)))
17086
17087 (define-public python-phonenumbers
17088 (package
17089 (name "python-phonenumbers")
17090 (version "8.9.1")
17091 (source
17092 (origin
17093 (method url-fetch)
17094 (uri (pypi-uri "phonenumbers" version))
17095 (sha256
17096 (base32
17097 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
17098 (build-system python-build-system)
17099 (home-page
17100 "https://github.com/daviddrysdale/python-phonenumbers")
17101 (synopsis
17102 "Python library for dealing with international phone numbers")
17103 (description
17104 "This package provides a Python port of Google's libphonenumber library.")
17105 (license license:asl2.0)))
17106
17107 (define-public python2-phonenumbers
17108 (package-with-python2 python-phonenumbers))
17109
17110 (define-public python-send2trash
17111 (package
17112 (name "python-send2trash")
17113 (version "1.5.0")
17114 (source
17115 (origin (method git-fetch)
17116 ;; Source tarball on PyPI doesn't include tests.
17117 (uri (git-reference
17118 (url "https://github.com/hsoft/send2trash")
17119 (commit version)))
17120 (file-name (git-file-name name version))
17121 (sha256
17122 (base32
17123 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
17124 (build-system python-build-system)
17125 (arguments
17126 '(#:phases
17127 (modify-phases %standard-phases
17128 (add-before 'check 'pre-check
17129 (lambda _
17130 (mkdir-p "/tmp/foo")
17131 (setenv "HOME" "/tmp/foo")
17132 #t)))))
17133 (home-page "https://github.com/hsoft/send2trash")
17134 (synopsis "Send files to the user's @file{~/Trash} directory")
17135 (description "This package provides a Python library to send files to the
17136 user's @file{~/Trash} directory.")
17137 (properties `((python2-variant . ,(delay python2-send2trash))))
17138 (license license:bsd-3)))
17139
17140 (define-public python2-send2trash
17141 (package
17142 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
17143 (arguments
17144 (substitute-keyword-arguments (package-arguments python-send2trash)
17145 ((#:phases phases)
17146 `(modify-phases ,phases
17147 (add-before 'check 'setenv
17148 (lambda _
17149 (setenv "PYTHONPATH"
17150 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
17151 #t))))))))
17152
17153 (define-public python-yapf
17154 (package
17155 (name "python-yapf")
17156 (version "0.29.0")
17157 (source
17158 (origin
17159 (method url-fetch)
17160 (uri (pypi-uri "yapf" version))
17161 (sha256
17162 (base32
17163 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
17164 (build-system python-build-system)
17165 (home-page "https://github.com/google/yapf")
17166 (synopsis "Formatter for Python code")
17167 (description "YAPF is a formatter for Python code. It's based off of
17168 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
17169 takes the code and reformats it to the best formatting that conforms to the
17170 style guide, even if the original code didn't violate the style guide.")
17171 (license license:asl2.0)))
17172
17173 (define-public python2-yapf
17174 (package-with-python2 python-yapf))
17175
17176 (define-public python-gyp
17177 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
17178 (revision "0"))
17179 (package
17180 (name "python-gyp")
17181 ;; Google does not release versions,
17182 ;; based on second most recent commit date.
17183 (version (git-version "0.0.0" revision commit))
17184 (source
17185 (origin
17186 ;; Google does not release tarballs,
17187 ;; git checkout is needed.
17188 (method git-fetch)
17189 (uri (git-reference
17190 (url "https://chromium.googlesource.com/external/gyp")
17191 (commit commit)))
17192 (file-name (git-file-name name version))
17193 (sha256
17194 (base32
17195 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
17196 (build-system python-build-system)
17197 (home-page "https://gyp.gsrc.io/")
17198 (synopsis "GYP is a Meta-Build system")
17199 (description
17200 "GYP builds build systems for large, cross platform applications.
17201 It can be used to generate XCode projects, Visual Studio projects, Ninja build
17202 files, and Makefiles.")
17203 (license license:bsd-3))))
17204
17205 (define-public python2-gyp
17206 (package-with-python2 python-gyp))
17207
17208 (define-public python-whatever
17209 (package
17210 (name "python-whatever")
17211 (version "0.6")
17212 (source
17213 (origin
17214 (method git-fetch)
17215 (uri (git-reference
17216 (url "https://github.com/Suor/whatever")
17217 (commit version)))
17218 (file-name (git-file-name name version))
17219 (sha256
17220 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
17221 (build-system python-build-system)
17222 (arguments
17223 `(#:phases
17224 (modify-phases %standard-phases
17225 (replace 'check
17226 (lambda _
17227 (invoke "py.test"))))))
17228 (native-inputs
17229 `(("python-pytest" ,python-pytest)))
17230 (home-page "https://github.com/Suor/whatever")
17231 (synopsis "Make anonymous functions by partial application of operators")
17232 (description "@code{whatever} provides an easy way to make anonymous
17233 functions by partial application of operators.")
17234 (license license:bsd-3)))
17235
17236 (define-public python2-whatever
17237 (package-with-python2 python-whatever))
17238
17239 (define-public python-funcy
17240 (package
17241 (name "python-funcy")
17242 (version "1.11")
17243 (source
17244 (origin
17245 (method git-fetch)
17246 (uri (git-reference
17247 (url "https://github.com/Suor/funcy")
17248 (commit version)))
17249 (sha256
17250 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
17251 (file-name (git-file-name name version))))
17252 (build-system python-build-system)
17253 (arguments
17254 `(#:phases
17255 (modify-phases %standard-phases
17256 (replace 'check
17257 (lambda _
17258 (invoke "py.test"))))))
17259 (native-inputs
17260 `(("python-pytest" ,python-pytest)
17261 ("python-whatever" ,python-whatever)))
17262 (home-page "https://github.com/Suor/funcy")
17263 (synopsis "Functional tools")
17264 (description "@code{funcy} is a library that provides functional tools.
17265 Examples are:
17266 @enumerate
17267 @item merge - Merges collections of the same type
17268 @item walk - Type-preserving map
17269 @item select - Selects a part of a collection
17270 @item take - Takes the first n items of a collection
17271 @item first - Takes the first item of a collection
17272 @item remove - Predicated-removes items of a collection
17273 @item concat - Concatenates two collections
17274 @item flatten - Flattens a collection with subcollections
17275 @item distinct - Returns only distinct items
17276 @item split - Predicated-splits a collection
17277 @item split_at - Splits a collection at a given item
17278 @item group_by - Groups items by group
17279 @item pairwise - Pairs off adjacent items
17280 @item partial - Partially-applies a function
17281 @item curry - Curries a function
17282 @item compose - Composes functions
17283 @item complement - Complements a predicate
17284 @item all_fn - \"all\" with predicate
17285 @end enumerate")
17286 (license license:bsd-3)))
17287
17288 (define-public python2-funcy
17289 (package-with-python2 python-funcy))
17290
17291 (define-public python-isoweek
17292 (package
17293 (name "python-isoweek")
17294 (version "1.3.3")
17295 (source
17296 (origin
17297 (method url-fetch)
17298 (uri (pypi-uri "isoweek" version))
17299 (sha256
17300 (base32
17301 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
17302 (build-system python-build-system)
17303 (home-page "https://github.com/gisle/isoweek")
17304 (synopsis "Objects representing a week")
17305 (description "The @code{isoweek} module provide the class Week that
17306 implements the week definition of ISO 8601. This standard also defines
17307 a notation for identifying weeks; yyyyWww (where the W is a literal).
17308 Week instances stringify to this form.")
17309 (license license:bsd-3)))
17310
17311 (define-public python2-isoweek
17312 (package-with-python2 python-isoweek))
17313
17314 (define-public python-tokenize-rt
17315 (package
17316 (name "python-tokenize-rt")
17317 (version "2.0.1")
17318 (source
17319 (origin
17320 (method url-fetch)
17321 (uri (pypi-uri "tokenize-rt" version))
17322 (sha256
17323 (base32
17324 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
17325 (build-system python-build-system)
17326 (home-page "https://github.com/asottile/tokenize-rt")
17327 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
17328 (description
17329 "This Python library is a wrapper around @code{tokenize} from the Python
17330 standard library. It provides two additional tokens @code{ESCAPED_NL} and
17331 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
17332 and @code{tokens_to_src} to roundtrip.")
17333 (license license:expat)))
17334
17335 (define-public python-future-fstrings
17336 (package
17337 (name "python-future-fstrings")
17338 (version "0.4.1")
17339 (source
17340 (origin
17341 (method url-fetch)
17342 (uri (pypi-uri "future_fstrings" version))
17343 (sha256
17344 (base32
17345 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
17346 (build-system python-build-system)
17347 (propagated-inputs
17348 `(("python-tokenize-rt" ,python-tokenize-rt)))
17349 (home-page "https://github.com/asottile/future-fstrings")
17350 (synopsis "Backport of fstrings to Python < 3.6")
17351 (description
17352 "This package provides a UTF-8 compatible encoding
17353 @code{future_fstrings}, which performs source manipulation. It decodes the
17354 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
17355 @code{f} strings.")
17356 (license license:expat)))
17357
17358 (define-public python-typed-ast
17359 (package
17360 (name "python-typed-ast")
17361 (version "1.4.0")
17362 (source
17363 (origin
17364 (method git-fetch)
17365 (uri (git-reference
17366 (url "https://github.com/python/typed_ast")
17367 (commit version)))
17368 (sha256
17369 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
17370 (file-name (git-file-name name version))))
17371 (build-system python-build-system)
17372 (arguments
17373 `(#:modules ((guix build utils)
17374 (guix build python-build-system)
17375 (ice-9 ftw)
17376 (srfi srfi-1)
17377 (srfi srfi-26))
17378 #:phases
17379 (modify-phases %standard-phases
17380 (replace 'check
17381 (lambda _
17382 (let ((cwd (getcwd)))
17383 (setenv "PYTHONPATH"
17384 (string-append cwd "/build/"
17385 (find (cut string-prefix? "lib" <>)
17386 (scandir (string-append cwd "/build")))
17387 ":"
17388 (getenv "PYTHONPATH"))))
17389 (invoke "pytest")
17390 #t)))))
17391 (native-inputs `(("python-pytest" ,python-pytest)))
17392 (home-page "https://github.com/python/typed_ast")
17393 (synopsis "Fork of Python @code{ast} modules with type comment support")
17394 (description "This package provides a parser similar to the standard
17395 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
17396 include PEP 484 type comments and are independent of the version of Python
17397 under which they are run. The @code{typed_ast} parsers produce the standard
17398 Python AST (plus type comments), and are both fast and correct, as they are
17399 based on the CPython 2.7 and 3.7 parsers.")
17400 ;; See the file "LICENSE" for the details.
17401 (license (list license:psfl
17402 license:asl2.0
17403 license:expat)))) ;ast27/Parser/spark.py
17404
17405 (define-public python-typing
17406 (package
17407 (name "python-typing")
17408 (version "3.7.4.3")
17409 (source
17410 (origin
17411 (method url-fetch)
17412 (uri (pypi-uri "typing" version))
17413 (sha256
17414 (base32 "1j8wnz8c9s049w9xbf7ssr1dmgg4rz7vdfq7m880srzxhafgp1qi"))))
17415 (build-system python-build-system)
17416 (home-page "https://docs.python.org/3/library/typing.html")
17417 (synopsis "Type hints for Python")
17418 (description "This is a backport of the standard library @code{typing}
17419 module to Python versions older than 3.5. Typing defines a standard notation
17420 for Python function and variable type annotations. The notation can be used
17421 for documenting code in a concise, standard format, and it has been designed
17422 to also be used by static and runtime type checkers, static analyzers, IDEs
17423 and other tools.")
17424 (license license:psfl)))
17425
17426 (define-public python2-typing
17427 (package-with-python2 python-typing))
17428
17429 (define-public python-typing-extensions
17430 (package
17431 (name "python-typing-extensions")
17432 (version "3.7.4.2")
17433 (source
17434 (origin
17435 (method url-fetch)
17436 (uri (pypi-uri "typing_extensions" version))
17437 (sha256
17438 (base32
17439 "1bk9b60s3rm1c8cwhv0bl3gh0x43153xxa6jpyllk9mc7jd5ivkr"))))
17440 (build-system python-build-system)
17441 (home-page
17442 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
17443 (synopsis "Experimental type hints for Python")
17444 (description
17445 "The typing_extensions module contains additional @code{typing} hints not
17446 yet present in the of the @code{typing} standard library.
17447 Included are implementations of:
17448 @enumerate
17449 @item ClassVar
17450 @item ContextManager
17451 @item Counter
17452 @item DefaultDict
17453 @item Deque
17454 @item NewType
17455 @item NoReturn
17456 @item overload
17457 @item Protocol
17458 @item runtime
17459 @item Text
17460 @item Type
17461 @item TYPE_CHECKING
17462 @item AsyncGenerator
17463 @end enumerate\n")
17464 (license license:psfl)))
17465
17466 (define-public bpython
17467 (package
17468 (name "bpython")
17469 (version "0.18")
17470 (source
17471 (origin
17472 (method url-fetch)
17473 (uri (pypi-uri "bpython" version))
17474 (sha256
17475 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
17476 (build-system python-build-system)
17477 (arguments
17478 `(#:phases
17479 (modify-phases %standard-phases
17480 (add-after 'unpack 'remove-failing-test
17481 (lambda _
17482 ;; Remove failing test. FIXME: make it pass
17483 (delete-file "bpython/test/test_args.py")
17484 #t))
17485 (add-after 'wrap 'add-aliases
17486 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
17487 (lambda* (#:key outputs #:allow-other-keys)
17488 (let ((out (assoc-ref outputs "out")))
17489 (for-each
17490 (lambda (old new)
17491 (symlink old (string-append out "/bin/" new)))
17492 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
17493 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
17494 #t)))))
17495 (propagated-inputs
17496 `(("python-pygments" ,python-pygments)
17497 ("python-requests" ,python-requests)
17498 ("python-babel" ,python-babel) ; optional, for internationalization
17499 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
17500 ("python-greenlet" ,python-greenlet)
17501 ("python-urwid" ,python-urwid) ; for bpython-urwid only
17502 ("python-six" ,python-six)))
17503 (native-inputs
17504 `(("python-sphinx" ,python-sphinx)
17505 ("python-mock" ,python-mock)))
17506 (home-page "https://bpython-interpreter.org/")
17507 (synopsis "Fancy interface to the Python interpreter")
17508 (description "Bpython is a fancy interface to the Python
17509 interpreter. bpython's main features are
17510
17511 @enumerate
17512 @item in-line syntax highlighting,
17513 @item readline-like autocomplete with suggestions displayed as you type,
17514 @item expected parameter list for any Python function,
17515 @item \"rewind\" function to pop the last line of code from memory and
17516 re-evaluate,
17517 @item send the code you've entered off to a pastebin,
17518 @item save the code you've entered to a file, and
17519 @item auto-indentation.
17520 @end enumerate")
17521 (license license:expat)))
17522
17523 (define-public bpython2
17524 (let ((base (package-with-python2
17525 (strip-python2-variant bpython))))
17526 (package (inherit base)
17527 (name "bpython2")
17528 (arguments
17529 `(#:python ,python-2
17530 #:phases
17531 (modify-phases %standard-phases
17532 (add-after 'unpack 'remove-failing-test
17533 (lambda _
17534 ;; Remove failing test. FIXME: make it pass
17535 (delete-file "bpython/test/test_args.py")
17536 ;; Disable failing test-cases (renaming inhibits they are
17537 ;; discovered)
17538 (substitute* "bpython/test/test_curtsies_repl.py"
17539 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
17540 (string-append a "xxx_off_" b))
17541 (("^(\\s*def )(test_complex\\W)" _ a b)
17542 (string-append a "xxx_off_" b)))
17543 #t))
17544 (add-before 'build 'rename-scripts
17545 ;; rename the scripts to bypthon2, bpdb2, etc.
17546 (lambda _
17547 (substitute* "setup.py"
17548 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
17549 (string-append name "2" rest "\n"))
17550 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
17551 (string-append name "2" (or sub "") rest "\n")))
17552 #t))))))))
17553
17554 (define-public python-pyinotify
17555 (package
17556 (name "python-pyinotify")
17557 (version "0.9.6")
17558 (source (origin
17559 (method url-fetch)
17560 (uri (pypi-uri "pyinotify" version))
17561 (sha256
17562 (base32
17563 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
17564 (build-system python-build-system)
17565 (arguments `(#:tests? #f)) ;no tests
17566 (home-page "https://github.com/seb-m/pyinotify")
17567 (synopsis "Python library for monitoring inotify events")
17568 (description
17569 "@code{pyinotify} provides a Python interface for monitoring
17570 file system events on Linux.")
17571 (license license:expat)))
17572
17573 (define-public python2-pyinotify
17574 (package-with-python2 python-pyinotify))
17575
17576 ;; Ada parser uses this version.
17577 (define-public python2-quex-0.67.3
17578 (package
17579 (name "python2-quex")
17580 (version "0.67.3")
17581 (source
17582 (origin
17583 (method url-fetch)
17584 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
17585 (version-major+minor version)
17586 "/quex-" version ".zip"))
17587 (sha256
17588 (base32
17589 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
17590 (build-system python-build-system)
17591 (native-inputs
17592 `(("unzip" ,unzip)))
17593 (arguments
17594 `(#:python ,python-2
17595 #:tests? #f
17596 #:phases
17597 (modify-phases %standard-phases
17598 (delete 'configure)
17599 (delete 'build)
17600 (replace 'install
17601 (lambda* (#:key outputs #:allow-other-keys)
17602 (let* ((out (assoc-ref outputs "out"))
17603 (share/quex (string-append out "/share/quex"))
17604 (bin (string-append out "/bin")))
17605 (copy-recursively "." share/quex)
17606 (mkdir-p bin)
17607 (symlink (string-append share/quex "/quex-exe.py")
17608 (string-append bin "/quex"))
17609 #t))))))
17610 (native-search-paths
17611 (list (search-path-specification
17612 (variable "QUEX_PATH")
17613 (files '("share/quex")))))
17614 (home-page "http://quex.sourceforge.net/")
17615 (synopsis "Lexical analyzer generator in Python")
17616 (description "@code{quex} is a lexical analyzer generator in Python.")
17617 (license license:lgpl2.1+))) ; Non-military
17618
17619 (define-public python2-quex
17620 (package (inherit python2-quex-0.67.3)
17621 (name "python2-quex")
17622 (version "0.68.1")
17623 (source
17624 (origin
17625 (method url-fetch)
17626 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
17627 (sha256
17628 (base32
17629 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
17630 (file-name (string-append name "-" version ".tar.gz"))))))
17631
17632 (define-public python-more-itertools
17633 (package
17634 (name "python-more-itertools")
17635 (version "8.2.0")
17636 (source
17637 (origin
17638 (method url-fetch)
17639 (uri (pypi-uri "more-itertools" version))
17640 (sha256
17641 (base32
17642 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
17643 (build-system python-build-system)
17644 (home-page "https://github.com/erikrose/more-itertools")
17645 (synopsis "More routines for operating on iterables, beyond itertools")
17646 (description "Python's built-in @code{itertools} module implements a
17647 number of iterator building blocks inspired by constructs from APL, Haskell,
17648 and SML. @code{more-itertools} includes additional building blocks for
17649 working with iterables.")
17650 (properties `((python2-variant . ,(delay python2-more-itertools))))
17651 (license license:expat)))
17652
17653 ;; The 5.x series are the last versions supporting Python 2.7.
17654 (define-public python2-more-itertools
17655 (package
17656 (inherit python-more-itertools)
17657 (name "python2-more-itertools")
17658 (version "5.0.0")
17659 (source (origin
17660 (method url-fetch)
17661 (uri (pypi-uri "more-itertools" version))
17662 (sha256
17663 (base32
17664 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
17665 (arguments
17666 `(#:python ,python-2))
17667 (propagated-inputs
17668 `(("python2-six" ,python2-six-bootstrap)))))
17669
17670 (define-public python-latexcodec
17671 (package
17672 (name "python-latexcodec")
17673 (version "1.0.7")
17674 (source
17675 (origin
17676 (method url-fetch)
17677 (uri (pypi-uri "latexcodec" version))
17678 (sha256
17679 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
17680 (build-system python-build-system)
17681 (inputs
17682 `(("python-six" ,python-six)))
17683 (home-page "https://readthedocs.org/projects/latexcodec/")
17684 (synopsis "Work with LaTeX code in Python")
17685 (description "Lexer and codec to work with LaTeX code in Python.")
17686 (license license:expat)))
17687
17688 (define-public python-pybtex
17689 (package
17690 (name "python-pybtex")
17691 (version "0.22.2")
17692 (source
17693 (origin
17694 (method url-fetch)
17695 (uri (pypi-uri "pybtex" version))
17696 (sha256
17697 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
17698 (build-system python-build-system)
17699 (native-inputs
17700 `(("python-nose" ,python-nose)))
17701 (inputs
17702 `(("python-latexcodec" ,python-latexcodec)
17703 ("python-pyyaml" ,python-pyyaml)
17704 ("python-six" ,python-six)))
17705 (arguments
17706 `(#:test-target "nosetests"))
17707 (home-page "https://pybtex.org/")
17708 (synopsis "BibTeX-compatible bibliography processor")
17709 (description "Pybtex is a BibTeX-compatible bibliography processor written
17710 in Python. You can simply type pybtex instead of bibtex.")
17711 (license license:expat)))
17712
17713 (define-public python-onetimepass
17714 (package
17715 (name "python-onetimepass")
17716 (version "1.0.1")
17717 (source
17718 (origin
17719 (method url-fetch)
17720 (uri (pypi-uri "onetimepass" version))
17721 (sha256
17722 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
17723 (build-system python-build-system)
17724 (propagated-inputs `(("python-six" ,python-six)))
17725 (home-page "https://github.com/tadeck/onetimepass/")
17726 (synopsis "One-time password library")
17727 (description "Python one-time password library for HMAC-based (HOTP) and
17728 time-based (TOTP) passwords.")
17729 (license license:expat)))
17730
17731 (define-public python-parso
17732 (package
17733 (name "python-parso")
17734 (version "0.7.1")
17735 (source
17736 (origin
17737 (method url-fetch)
17738 (uri (pypi-uri "parso" version))
17739 (sha256
17740 (base32 "1f9fc99mjx0h2ad4mgsid728nnmw58hvnq3411g8ljlr9dr49fna"))))
17741 (native-inputs
17742 `(("python-pytest" ,python-pytest)))
17743 (build-system python-build-system)
17744 (arguments
17745 `(#:phases (modify-phases %standard-phases
17746 (replace 'check
17747 (lambda _ (invoke "pytest" "-vv"))))))
17748 (home-page "https://github.com/davidhalter/parso")
17749 (synopsis "Python Parser")
17750 (description "Parso is a Python parser that supports error recovery and
17751 round-trip parsing for different Python versions (in multiple Python versions).
17752 Parso is also able to list multiple syntax errors in your Python file.")
17753 (license license:expat)))
17754
17755 (define-public python2-parso
17756 (package-with-python2 python-parso))
17757
17758 (define-public python-async-generator
17759 (package
17760 (name "python-async-generator")
17761 (version "1.10")
17762 (source
17763 (origin
17764 (method url-fetch)
17765 (uri (pypi-uri "async_generator" version))
17766 (sha256
17767 (base32
17768 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
17769 (build-system python-build-system)
17770 (native-inputs
17771 `(("python-pytest" ,python-pytest)))
17772 (home-page "https://github.com/python-trio/async_generator")
17773 (synopsis "Async generators and context managers for Python 3.5+")
17774 (description "@code{async_generator} back-ports Python 3.6's native async
17775 generators and Python 3.7's context managers into Python 3.5.")
17776 ;; Dual licensed.
17777 (license (list license:expat license:asl2.0))))
17778
17779 (define-public python-async-timeout
17780 (package
17781 (name "python-async-timeout")
17782 (version "3.0.1")
17783 (source
17784 (origin
17785 (method url-fetch)
17786 (uri (pypi-uri "async-timeout" version))
17787 (sha256
17788 (base32
17789 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
17790 (build-system python-build-system)
17791 (home-page "https://github.com/aio-libs/async_timeout/")
17792 (synopsis "Timeout context manager for asyncio programs")
17793 (description "@code{async-timeout} provides a timeout timeout context
17794 manager compatible with @code{asyncio}.")
17795 (license license:asl2.0)))
17796
17797 (define-public python-glob2
17798 (package
17799 (name "python-glob2")
17800 (version "0.7")
17801 (source
17802 (origin
17803 (method git-fetch)
17804 (uri (git-reference
17805 (url "https://github.com/miracle2k/python-glob2")
17806 (commit (string-append "v" version))))
17807 (file-name (git-file-name name version))
17808 (sha256
17809 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
17810 (build-system python-build-system)
17811 (home-page "https://github.com/miracle2k/python-glob2/")
17812 (synopsis "Extended Version of the python buildin glob module")
17813 (description "This is an extended version of the Python
17814 @url{http://docs.python.org/library/glob.html, built-in glob module} which
17815 adds:
17816
17817 @itemize
17818 @item The ability to capture the text matched by glob patterns, and return
17819 those matches alongside the file names.
17820 @item A recursive @code{**} globbing syntax, akin for example to the
17821 @code{globstar} option of Bash.
17822 @item The ability to replace the file system functions used, in order to glob
17823 on virtual file systems.
17824 @item Compatible with Python 2 and Python 3 (tested with 3.3).
17825 @end itemize
17826
17827 Glob2 currently based on the glob code from Python 3.3.1.")
17828 (license license:bsd-2)))
17829
17830 (define-public python2-glob2
17831 (package-with-python2 python-glob2))
17832
17833 (define-public python-gipc
17834 (package
17835 (name "python-gipc")
17836 (version "0.6.0")
17837 (source
17838 (origin
17839 (method url-fetch)
17840 (uri (pypi-uri "gipc" version ".zip"))
17841 (sha256
17842 (base32
17843 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
17844 (build-system python-build-system)
17845 (native-inputs
17846 `(("unzip" ,unzip)))
17847 (propagated-inputs
17848 `(("python-gevent" ,python-gevent)))
17849 (home-page "https://gehrcke.de/gipc/")
17850 (synopsis "Child process management in the context of gevent")
17851 (description "Usage of Python's multiprocessing package in a
17852 gevent-powered application may raise problems. With @code{gipc},
17853 process-based child processes can safely be created anywhere within a
17854 gevent-powered application.")
17855 (license license:expat)))
17856
17857 (define-public python2-gipc
17858 (package-with-python2 python-gipc))
17859
17860 (define-public python-fusepy
17861 (package
17862 (name "python-fusepy")
17863 (version "2.0.4")
17864 (source
17865 (origin
17866 (method url-fetch)
17867 (uri (pypi-uri "fusepy" version))
17868 (sha256
17869 (base32
17870 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
17871 (build-system python-build-system)
17872 (arguments
17873 `(#:phases
17874 (modify-phases %standard-phases
17875 (add-before 'build 'set-library-file-name
17876 (lambda* (#:key inputs #:allow-other-keys)
17877 (let ((fuse (assoc-ref inputs "fuse")))
17878 (substitute* "fuse.py"
17879 (("find_library\\('fuse'\\)")
17880 (string-append "'" fuse "/lib/libfuse.so'")))
17881 #t))))))
17882 (propagated-inputs
17883 `(("fuse" ,fuse)))
17884 (home-page "https://github.com/fusepy/fusepy")
17885 (synopsis "Simple ctypes bindings for FUSE")
17886 (description "Python module that provides a simple interface to FUSE and
17887 MacFUSE. The binding is created using the standard @code{ctypes} library.")
17888 (license license:isc)))
17889
17890 (define-public python2-fusepy
17891 (package-with-python2 python-fusepy))
17892
17893 (define-public python-fusepyng
17894 (package
17895 (name "python-fusepyng")
17896 (version "1.0.7")
17897 (source
17898 (origin
17899 (method url-fetch)
17900 (uri (pypi-uri "fusepyng" version))
17901 (sha256
17902 (base32
17903 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
17904 (build-system python-build-system)
17905 (arguments
17906 '(#:phases
17907 (modify-phases %standard-phases
17908 (add-after 'unpack 'set-libfuse-path
17909 (lambda* (#:key inputs #:allow-other-keys)
17910 (let ((fuse (assoc-ref inputs "fuse")))
17911 (substitute* "fusepyng.py"
17912 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
17913 (string-append "\"" fuse "/lib/libfuse.so\""))))
17914 #t)))))
17915 (inputs
17916 `(("fuse" ,fuse)))
17917 (propagated-inputs
17918 `(("python-paramiko" ,python-paramiko)))
17919 (home-page "https://github.com/rianhunter/fusepyng")
17920 (synopsis "Simple ctypes bindings for FUSE")
17921 (description "@code{fusepyng} is a Python module that provides a simple
17922 interface to FUSE on various operating systems. It's just one file and is
17923 implemented using @code{ctypes}.")
17924 (license license:isc)))
17925
17926 (define-public python2-gdrivefs
17927 (package
17928 (name "python2-gdrivefs")
17929 (version "0.14.9")
17930 (source
17931 (origin
17932 (method url-fetch)
17933 (uri (pypi-uri "gdrivefs" version))
17934 (sha256
17935 (base32
17936 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
17937 (build-system python-build-system)
17938 (arguments
17939 `(#:python ,python-2
17940 #:phases
17941 (modify-phases %standard-phases
17942 (add-before 'build 'patch-setup-py
17943 (lambda _
17944 ;; Update requirements from dependency==version
17945 ;; to dependency>=version
17946 (substitute* "gdrivefs/resources/requirements.txt"
17947 (("==") ">="))
17948 #t)))))
17949 (native-inputs
17950 `(("python2-gipc" ,python2-gipc)
17951 ("python2-gevent" ,python2-gevent)
17952 ("python2-greenlet" ,python2-greenlet)
17953 ("python2-httplib2" ,python2-httplib2)
17954 ("python2-uritemplate" ,python2-uritemplate)
17955 ("python2-oauth2client" ,python2-oauth2client)
17956 ("python2-six" ,python2-six)))
17957 (propagated-inputs
17958 `(("python2-dateutil" ,python2-dateutil)
17959 ("python2-fusepy" ,python2-fusepy)
17960 ("python2-google-api-client" ,python2-google-api-client)))
17961 (home-page "https://github.com/dsoprea/GDriveFS")
17962 (synopsis "Mount Google Drive as a local file system")
17963 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
17964 under Python 2.7.")
17965 (license license:gpl2)))
17966
17967 (define-public python-userspacefs
17968 (package
17969 (name "python-userspacefs")
17970 (version "1.0.13")
17971 (source
17972 (origin
17973 (method url-fetch)
17974 (uri (pypi-uri "userspacefs" version))
17975 (sha256
17976 (base32
17977 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
17978 (build-system python-build-system)
17979 (propagated-inputs
17980 `(("python-fusepyng" ,python-fusepyng)))
17981 (home-page "https://github.com/rianhunter/userspacefs")
17982 (synopsis "User-space file systems for Python")
17983 (description
17984 "@code{userspacefs} is a library that allows you to easily write
17985 user-space file systems in Python.")
17986 (license license:gpl3+)))
17987
17988 (define-public pybind11
17989 (package
17990 (name "pybind11")
17991 (version "2.4.3")
17992 (source (origin
17993 (method git-fetch)
17994 (uri (git-reference
17995 (url "https://github.com/pybind/pybind11")
17996 (commit (string-append "v" version))))
17997 (sha256
17998 (base32
17999 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
18000 (file-name (git-file-name name version))))
18001 (build-system cmake-build-system)
18002 (native-inputs
18003 `(("python" ,python-wrapper)
18004
18005 ;; The following dependencies are used for tests.
18006 ("python-pytest" ,python-pytest)
18007 ("catch" ,catch-framework2-1)
18008 ("eigen" ,eigen)))
18009 (arguments
18010 `(#:configure-flags
18011 (list (string-append "-DCATCH_INCLUDE_DIR="
18012 (assoc-ref %build-inputs "catch")
18013 "/include/catch"))
18014
18015 #:phases (modify-phases %standard-phases
18016 (add-after 'install 'install-python
18017 (lambda* (#:key outputs #:allow-other-keys)
18018 (let ((out (assoc-ref outputs "out")))
18019 (with-directory-excursion "../source"
18020 (setenv "PYBIND11_USE_CMAKE" "yes")
18021 (invoke "python" "setup.py" "install"
18022 "--single-version-externally-managed"
18023 "--root=/"
18024 (string-append "--prefix=" out)))))))
18025
18026 #:test-target "check"))
18027 (home-page "https://github.com/pybind/pybind11/")
18028 (synopsis "Seamless operability between C++11 and Python")
18029 (description
18030 "@code{pybind11} is a lightweight header-only library that exposes C++
18031 types in Python and vice versa, mainly to create Python bindings of existing
18032 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
18033 library: to minimize boilerplate code in traditional extension modules by
18034 inferring type information using compile-time introspection.")
18035 (license license:bsd-3)))
18036
18037 (define-public python-fasteners
18038 (package
18039 (name "python-fasteners")
18040 (version "0.15")
18041 (source
18042 (origin
18043 (method url-fetch)
18044 (uri (pypi-uri "fasteners" version))
18045 (sha256
18046 (base32
18047 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
18048 (build-system python-build-system)
18049 (propagated-inputs
18050 `(("python-monotonic" ,python-monotonic)
18051 ("python-six" ,python-six)))
18052 (native-inputs
18053 `(("python-testtools" ,python-testtools)))
18054 (home-page "https://github.com/harlowja/fasteners")
18055 (synopsis "Python package that provides useful locks")
18056 (description
18057 "This package provides a Python program that provides following locks:
18058
18059 @itemize
18060 @item Locking decorator
18061 @item Reader-writer locks
18062 @item Inter-process locks
18063 @item Generic helpers
18064 @end itemize\n")
18065 (properties `((python2-variant . ,(delay python2-fasteners))))
18066 (license license:asl2.0)))
18067
18068 (define-public python2-fasteners
18069 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
18070 (package
18071 (inherit base)
18072 (propagated-inputs
18073 `(("python2-futures" ,python2-futures)
18074 ,@(package-propagated-inputs base))))))
18075
18076 (define-public python-requests-file
18077 (package
18078 (name "python-requests-file")
18079 (version "1.4.3")
18080 (source
18081 (origin
18082 (method url-fetch)
18083 (uri (pypi-uri "requests-file" version))
18084 (sha256
18085 (base32
18086 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
18087 (build-system python-build-system)
18088 (propagated-inputs
18089 `(("python-requests" ,python-requests)
18090 ("python-six" ,python-six)))
18091 (home-page
18092 "https://github.com/dashea/requests-file")
18093 (synopsis "File transport adapter for Requests")
18094 (description
18095 "Requests-File is a transport adapter for use with the Requests Python
18096 library to allow local file system access via @code{file://} URLs.")
18097 (license license:asl2.0)))
18098
18099 (define-public python2-requests-file
18100 (package-with-python2 python-requests-file))
18101
18102 (define-public python-identify
18103 (package
18104 (name "python-identify")
18105 (version "1.4.25")
18106 (source
18107 (origin
18108 ;; There are no tests in the PyPI tarball.
18109 (method git-fetch)
18110 (uri (git-reference
18111 (url "https://github.com/chriskuehl/identify")
18112 (commit (string-append "v" version))))
18113 (file-name (git-file-name name version))
18114 (sha256
18115 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
18116 (build-system python-build-system)
18117 (arguments
18118 `(#:phases
18119 (modify-phases %standard-phases
18120 (replace 'check
18121 (lambda _
18122 (invoke "pytest" "-vv"))))))
18123 (native-inputs
18124 `(("python-coverage" ,python-coverage)
18125 ("python-pytest" ,python-pytest)))
18126 (propagated-inputs
18127 `(("python-editdistance" ,python-editdistance)))
18128 (home-page "https://github.com/chriskuehl/identify")
18129 (synopsis "File identification library for Python")
18130 (description
18131 "@code{identify} is a file identification library for Python. Given
18132 a file (or some information about a file), return a set of standardized tags
18133 identifying what the file is.")
18134 (license license:expat)))
18135
18136 (define-public python-tldextract
18137 (package
18138 (name "python-tldextract")
18139 (version "2.2.0")
18140 (source
18141 (origin
18142 (method url-fetch)
18143 (uri (pypi-uri "tldextract" version))
18144 (sha256
18145 (base32
18146 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
18147 (build-system python-build-system)
18148 (native-inputs
18149 `(("python-pytest" ,python-pytest)
18150 ("python-responses" ,python-responses)))
18151 (propagated-inputs
18152 `(("python-idna" ,python-idna)
18153 ("python-requests" ,python-requests)
18154 ("python-requests-file" ,python-requests-file)))
18155 (home-page
18156 "https://github.com/john-kurkowski/tldextract")
18157 (synopsis
18158 "Separate the TLD from the registered domain and subdomains of a URL")
18159 (description
18160 "TLDExtract accurately separates the TLD from the registered domain and
18161 subdomains of a URL, using the Public Suffix List. By default, this includes
18162 the public ICANN TLDs and their exceptions. It can optionally support the
18163 Public Suffix List's private domains as well.")
18164 (license license:bsd-3)))
18165
18166 (define-public python2-tldextract
18167 (package-with-python2 python-tldextract))
18168
18169 (define-public python-nodeenv
18170 (package
18171 (name "python-nodeenv")
18172 (version "1.4.0")
18173 (source
18174 (origin
18175 ;; There's no tarball in PyPI.
18176 (method git-fetch)
18177 (uri (git-reference
18178 (url "https://github.com/ekalinin/nodeenv")
18179 (commit version)))
18180 (file-name (git-file-name name version))
18181 (sha256
18182 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
18183 (build-system python-build-system)
18184 (arguments
18185 `(#:phases
18186 (modify-phases %standard-phases
18187 (replace 'check
18188 (lambda _
18189 ;; This test fails. It tries to open a network socket.
18190 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
18191 (native-inputs
18192 `(("python-coverage" ,python-coverage)
18193 ("python-mock" ,python-mock)
18194 ("python-pytest" ,python-pytest)))
18195 (home-page "https://ekalinin.github.io/nodeenv/")
18196 (synopsis "Create isolated node.js environments")
18197 (description
18198 "Nodeenv (node.js virtual environment) is a tool to create isolated
18199 node.js environments. It creates an environment that has its own installation
18200 directories, that doesn't share libraries with other node.js virtual
18201 environments.")
18202 (license license:bsd-3)))
18203
18204 (define-public python-pynamecheap
18205 (package
18206 (name "python-pynamecheap")
18207 (version "0.0.3")
18208 (source
18209 (origin
18210 (method url-fetch)
18211 (uri (pypi-uri "PyNamecheap" version))
18212 (sha256
18213 (base32
18214 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
18215 (build-system python-build-system)
18216 (propagated-inputs
18217 `(("python-requests" ,python-requests)))
18218 (home-page
18219 "https://github.com/Bemmu/PyNamecheap")
18220 (synopsis
18221 "Namecheap API client in Python")
18222 (description
18223 "PyNamecheap is a Namecheap API client in Python.")
18224 (license license:expat)))
18225
18226 (define-public python2-pynamecheap
18227 (package-with-python2 python-pynamecheap))
18228
18229 (define-public python-dns-lexicon
18230 (package
18231 (name "python-dns-lexicon")
18232 (version "2.4.0")
18233 (source
18234 (origin
18235 (method url-fetch)
18236 (uri (pypi-uri "dns-lexicon" version))
18237 (sha256
18238 (base32
18239 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
18240 (build-system python-build-system)
18241 (arguments
18242 `(#:tests? #f)) ;requires internet access
18243 (propagated-inputs
18244 `(("python-future" ,python-future)
18245 ("python-pynamecheap" ,python-pynamecheap)
18246 ("python-requests" ,python-requests)
18247 ("python-tldextract" ,python-tldextract)
18248 ("python-urllib3" ,python-urllib3)))
18249 (home-page "https://github.com/AnalogJ/lexicon")
18250 (synopsis
18251 "Manipulate DNS records on various DNS providers")
18252 (description
18253 "Lexicon provides a way to manipulate DNS records on multiple DNS
18254 providers in a standardized way. It has a CLI but it can also be used as a
18255 Python library. It was designed to be used in automation, specifically with
18256 Let's Encrypt.")
18257 (license license:expat)))
18258
18259 (define-public python2-dns-lexicon
18260 (package-with-python2 python-dns-lexicon))
18261
18262 (define-public python-cfgv
18263 (package
18264 (name "python-cfgv")
18265 (version "3.1.0")
18266 (source
18267 (origin
18268 ;; There are no tests in the PyPI tarball.
18269 (method git-fetch)
18270 (uri (git-reference
18271 (url "https://github.com/asottile/cfgv")
18272 (commit (string-append "v" version))))
18273 (file-name (git-file-name name version))
18274 (sha256
18275 (base32 "1vvkkqw92sak4b28bpscpppq483amy52ch2yqy1i2m23q7xjkabx"))))
18276 (build-system python-build-system)
18277 (arguments
18278 `(#:phases
18279 (modify-phases %standard-phases
18280 (replace 'check
18281 (lambda _
18282 (invoke "pytest" "-vv"))))))
18283 (native-inputs
18284 `(("python-covdefaults" ,python-covdefaults)
18285 ("python-coverage" ,python-coverage)
18286 ("python-pytest" ,python-pytest)))
18287 (home-page "https://github.com/asottile/cfgv")
18288 (synopsis "Configuration validation library")
18289 (description
18290 "This library helps to validate configuration files and produce human
18291 readable error messages.")
18292 (license license:expat)))
18293
18294 (define-public python-commandlines
18295 (package
18296 (name "python-commandlines")
18297 (version "0.4.1")
18298 (source
18299 (origin
18300 (method url-fetch)
18301 (uri (pypi-uri "commandlines" version))
18302 (sha256
18303 (base32
18304 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
18305 (build-system python-build-system)
18306 (home-page "https://github.com/chrissimpkins/commandlines")
18307 (synopsis "Command line argument to object parsing library")
18308 (description
18309 "@code{Commandlines} is a Python library for command line application
18310 development that supports command line argument parsing, command string
18311 validation testing and application logic.")
18312 (license license:expat)))
18313
18314 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
18315 ;; python-numba. They have a very unflexible relationship.
18316 (define-public python-numba
18317 (package
18318 (name "python-numba")
18319 (version "0.46.0")
18320 (source
18321 (origin
18322 (method url-fetch)
18323 (uri (pypi-uri "numba" version))
18324 (sha256
18325 (base32
18326 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
18327 (build-system python-build-system)
18328 (arguments
18329 `(#:modules ((guix build utils)
18330 (guix build python-build-system)
18331 (ice-9 ftw)
18332 (srfi srfi-1)
18333 (srfi srfi-26))
18334 #:phases
18335 (modify-phases %standard-phases
18336 (add-after 'unpack 'disable-proprietary-features
18337 (lambda _
18338 (setenv "NUMBA_DISABLE_HSA" "1")
18339 (setenv "NUMBA_DISABLE_CUDA" "1")
18340 #t))
18341 (add-after 'unpack 'remove-failing-tests
18342 (lambda _
18343 ;; FIXME: These tests fail for unknown reasons:
18344 ;; test_non_writable_pycache, test_non_creatable_pycache, and
18345 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
18346 (substitute* "numba/tests/test_dispatcher.py"
18347 (("def test(_non_writable_pycache)" _ m)
18348 (string-append "def guix_skip" m))
18349 (("def test(_non_creatable_pycache)" _ m)
18350 (string-append "def guix_skip" m))
18351 (("def test(_frozen)" _ m)
18352 (string-append "def guix_skip" m)))
18353
18354 ;; These tests fail because we don't run the tests from the build
18355 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
18356 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
18357 (substitute* "numba/tests/test_pycc.py"
18358 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
18359 (string-append "def guix_skip" m)))
18360
18361 ;; These tests fail because our version of Python does not have
18362 ;; a recognizable front-end for the Numba distribution to use
18363 ;; to check against.
18364 (substitute* "numba/tests/test_entrypoints.py"
18365 (("def test(_init_entrypoint)" _ m)
18366 (string-append "def guix_skip" m)))
18367 (substitute* "numba/tests/test_jitclasses.py"
18368 (("def test(_jitclass_longlabel_not_truncated)" _ m)
18369 (string-append "def guix_skip" m)))
18370 #t))
18371 (replace 'check
18372 (lambda _
18373 (let ((cwd (getcwd)))
18374 (setenv "PYTHONPATH"
18375 (string-append cwd "/build/"
18376 (find (cut string-prefix? "lib" <>)
18377 (scandir (string-append cwd "/build")))
18378 ":"
18379 (getenv "PYTHONPATH")))
18380 ;; Something is wrong with the PYTHONPATH when running the
18381 ;; tests from the build directory, as it complains about not being
18382 ;; able to import certain modules.
18383 (with-directory-excursion "/tmp"
18384 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
18385 #t)))))
18386 (propagated-inputs
18387 `(("python-llvmlite" ,python-llvmlite)
18388 ("python-numpy" ,python-numpy)
18389 ("python-singledispatch" ,python-singledispatch)))
18390 ;; Needed for tests.
18391 (inputs
18392 `(("python-jinja2" ,python-jinja2)
18393 ("python-pygments" ,python-pygments)))
18394 (home-page "https://numba.pydata.org")
18395 (synopsis "Compile Python code using LLVM")
18396 (description "Numba gives you the power to speed up your applications with
18397 high performance functions written directly in Python. With a few
18398 annotations, array-oriented and math-heavy Python code can be just-in-time
18399 compiled to native machine instructions, similar in performance to C, C++ and
18400 Fortran, without having to switch languages or Python interpreters.
18401
18402 Numba works by generating optimized machine code using the LLVM compiler
18403 infrastructure at import time, runtime, or statically (using the included pycc
18404 tool).")
18405 (license license:bsd-3)))
18406
18407 (define-public python-numcodecs
18408 (package
18409 (name "python-numcodecs")
18410 (version "0.6.4")
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "numcodecs" version))
18415 (sha256
18416 (base32
18417 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
18418 (build-system python-build-system)
18419 (propagated-inputs
18420 `(("python-numpy" ,python-numpy)
18421 ("python-msgpack" ,python-msgpack)))
18422 (native-inputs
18423 `(("python-pytest" ,python-pytest)
18424 ("python-setuptools-scm" ,python-setuptools-scm)))
18425 (home-page "https://github.com/zarr-developers/numcodecs")
18426 (synopsis "Buffer compression and transformation codecs")
18427 (description
18428 "This Python package provides buffer compression and transformation
18429 codecs for use in data storage and communication applications.")
18430 (license license:expat)))
18431
18432 (define-public python-asciitree
18433 (package
18434 (name "python-asciitree")
18435 (version "0.3.3")
18436 (source
18437 (origin
18438 (method url-fetch)
18439 (uri (pypi-uri "asciitree" version))
18440 (sha256
18441 (base32
18442 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
18443 (build-system python-build-system)
18444 (home-page "https://github.com/mbr/asciitree")
18445 (synopsis "Draws ASCII trees")
18446 (description "This package draws tree structures using characters.")
18447 (license license:expat)))
18448
18449 (define-public python-zarr
18450 (package
18451 (name "python-zarr")
18452 (version "2.4.0")
18453 (source
18454 (origin
18455 (method url-fetch)
18456 (uri (pypi-uri "zarr" version))
18457 (sha256
18458 (base32
18459 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
18460 (build-system python-build-system)
18461 (arguments
18462 `(#:phases
18463 (modify-phases %standard-phases
18464 (add-after 'unpack 'disable-service-tests
18465 (lambda _
18466 (setenv "ZARR_TEST_ABS" "0")
18467 (setenv "ZARR_TEST_MONGO" "0")
18468 (setenv "ZARR_TEST_REDIS" "0")
18469 #t))
18470 (replace 'check
18471 (lambda _
18472 (invoke "pytest" "-vv" "-k" "not lmdb")
18473 #t)))))
18474 (propagated-inputs
18475 `(("python-asciitree" ,python-asciitree)
18476 ("python-fasteners" ,python-fasteners)
18477 ("python-numcodecs" ,python-numcodecs)
18478 ("python-numpy" ,python-numpy)))
18479 (native-inputs
18480 `(("python-pytest" ,python-pytest)
18481 ("python-setuptools-scm" ,python-setuptools-scm)))
18482 (home-page "https://github.com/zarr-developers/zarr-python")
18483 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
18484 (description
18485 "This package provides an implementation of chunked, compressed,
18486 N-dimensional arrays for Python.")
18487 (license license:expat)))
18488
18489 (define-public python-anndata
18490 (package
18491 (name "python-anndata")
18492 (version "0.7.1")
18493 (source
18494 (origin
18495 (method url-fetch)
18496 (uri (pypi-uri "anndata" version))
18497 (sha256
18498 (base32
18499 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
18500 (build-system python-build-system)
18501 (arguments
18502 `(#:phases
18503 (modify-phases %standard-phases
18504 (add-after 'unpack 'delete-inconvenient-tests
18505 (lambda _
18506 ;; This test depends on python-scikit-learn.
18507 (delete-file "anndata/tests/test_inplace_subset.py")
18508 #t))
18509 (delete 'check)
18510 (add-after 'install 'check
18511 (lambda* (#:key inputs outputs #:allow-other-keys)
18512 (add-installed-pythonpath inputs outputs)
18513 (invoke "pytest" "-vv"))))))
18514 (propagated-inputs
18515 `(("python-h5py" ,python-h5py)
18516 ("python-importlib-metadata" ,python-importlib-metadata)
18517 ("python-natsort" ,python-natsort)
18518 ("python-numcodecs" ,python-numcodecs)
18519 ("python-packaging" ,python-packaging)
18520 ("python-pandas" ,python-pandas)
18521 ("python-scipy" ,python-scipy)
18522 ("python-zarr" ,python-zarr)))
18523 (native-inputs
18524 `(("python-joblib" ,python-joblib)
18525 ("python-pytest" ,python-pytest)
18526 ("python-setuptools-scm" ,python-setuptools-scm)))
18527 (home-page "https://github.com/theislab/anndata")
18528 (synopsis "Annotated data for data analysis pipelines")
18529 (description "Anndata is a package for simple (functional) high-level APIs
18530 for data analysis pipelines. In this context, it provides an efficient,
18531 scalable way of keeping track of data together with learned annotations and
18532 reduces the code overhead typically encountered when using a mostly
18533 object-oriented library such as @code{scikit-learn}.")
18534 (license license:bsd-3)))
18535
18536 (define-public python-dill
18537 (package
18538 (name "python-dill")
18539 (version "0.3.1.1")
18540 (source
18541 (origin
18542 (method url-fetch)
18543 (uri (pypi-uri "dill" version))
18544 (sha256
18545 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
18546 (build-system python-build-system)
18547 (arguments
18548 `(#:phases
18549 (modify-phases %standard-phases
18550 (replace 'check
18551 (lambda _
18552 (with-directory-excursion "/tmp"
18553 (invoke "nosetests" "-v"))
18554 #t)))))
18555 (native-inputs
18556 `(("python-nose" ,python-nose)))
18557 (home-page "https://pypi.org/project/dill/")
18558 (synopsis "Serialize all of Python")
18559 (description "Dill extends Python's @code{pickle} module for serializing
18560 and de-serializing Python objects to the majority of the built-in Python
18561 types. Dill provides the user the same interface as the @code{pickle} module,
18562 and also includes some additional features. In addition to pickling Python
18563 objects, @code{dill} provides the ability to save the state of an interpreter
18564 session in a single command. Hence, it would be feasible to save a
18565 interpreter session, close the interpreter, ship the pickled file to another
18566 computer, open a new interpreter, unpickle the session and thus continue from
18567 the saved state of the original interpreter session.")
18568 (license license:bsd-3)))
18569
18570 (define-public python-multiprocess
18571 (package
18572 (name "python-multiprocess")
18573 (version "0.70.9")
18574 (source
18575 (origin
18576 (method url-fetch)
18577 (uri (pypi-uri "multiprocess" version))
18578 (sha256
18579 (base32
18580 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
18581 (build-system python-build-system)
18582 (arguments
18583 `(#:phases
18584 (modify-phases %standard-phases
18585 (add-after 'unpack 'disable-broken-tests
18586 (lambda _
18587 ;; This test is broken as there is no keyboard interrupt.
18588 (substitute* "py3.7/multiprocess/tests/__init__.py"
18589 (("^(.*)def test_wait_result"
18590 line indent)
18591 (string-append indent
18592 "@unittest.skip(\"Disabled by Guix\")\n"
18593 line)))
18594 #t))
18595 ;; Tests must be run after installation.
18596 (delete 'check)
18597 (add-after 'install 'check
18598 (lambda* (#:key inputs outputs #:allow-other-keys)
18599 (add-installed-pythonpath inputs outputs)
18600 (invoke "python" "-m" "multiprocess.tests")
18601 #t)))))
18602 (propagated-inputs
18603 `(("python-dill" ,python-dill)))
18604 (home-page "https://pypi.org/project/multiprocess/")
18605 (synopsis "Multiprocessing and multithreading in Python")
18606 (description
18607 "This package is a fork of the multiprocessing Python package, a package
18608 which supports the spawning of processes using the API of the standard
18609 library's @code{threading} module.")
18610 (license license:bsd-3)))
18611
18612 (define-public python-toolz
18613 (package
18614 (name "python-toolz")
18615 (version "0.9.0")
18616 (source
18617 (origin
18618 (method url-fetch)
18619 (uri (pypi-uri "toolz" version))
18620 (sha256
18621 (base32
18622 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
18623 (build-system python-build-system)
18624 ;; FIXME: tests cannot be computed: "Can't perform this operation for
18625 ;; unregistered loader type"
18626 (arguments '(#:tests? #f))
18627 (home-page "https://github.com/pytoolz/toolz/")
18628 (synopsis "List processing tools and functional utilities")
18629 (description
18630 "This package provides a set of utility functions for iterators,
18631 functions, and dictionaries.")
18632 (license license:bsd-3)))
18633
18634 (define-public python2-toolz
18635 (package-with-python2 python-toolz))
18636
18637 (define-public python-cytoolz
18638 (package
18639 (name "python-cytoolz")
18640 (version "0.9.0.1")
18641 (source
18642 (origin
18643 (method url-fetch)
18644 (uri (pypi-uri "cytoolz" version))
18645 (sha256
18646 (base32
18647 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
18648 (build-system python-build-system)
18649 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
18650 ;; 'exceptions'"
18651 (arguments '(#:tests? #f))
18652 (propagated-inputs
18653 `(("python-toolz" ,python-toolz)))
18654 (native-inputs
18655 `(("python-cython" ,python-cython)))
18656 (home-page "https://github.com/pytoolz/cytoolz")
18657 (synopsis "High performance functional utilities")
18658 (description
18659 "The cytoolz package implements the same API as provided by toolz. The
18660 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
18661 that is accessible to other projects developed in Cython.")
18662 (license license:bsd-3)))
18663
18664 (define-public python-sortedcontainers
18665 (package
18666 (name "python-sortedcontainers")
18667 (version "2.1.0")
18668 (source
18669 (origin
18670 (method url-fetch)
18671 (uri (pypi-uri "sortedcontainers" version))
18672 (sha256
18673 (base32
18674 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
18675 (build-system python-build-system)
18676 (arguments
18677 ;; FIXME: Tests require many extra dependencies, and would introduce
18678 ;; a circular dependency on hypothesis, which uses this package.
18679 '(#:tests? #f))
18680 (propagated-inputs
18681 `(("python-appdirs" ,python-appdirs)
18682 ("python-distlib" ,python-distlib)
18683 ("python-filelock" ,python-filelock)
18684 ("python-six" ,python-six-bootstrap)))
18685 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
18686 (synopsis "Sorted List, Sorted Dict, Sorted Set")
18687 (description
18688 "This package provides a sorted collections library, written in
18689 pure-Python.")
18690 (license license:asl2.0)))
18691
18692 (define-public python2-sortedcontainers
18693 (package-with-python2 python-sortedcontainers))
18694
18695 (define-public python-cloudpickle
18696 (package
18697 (name "python-cloudpickle")
18698 (version "1.3.0")
18699 (source
18700 (origin
18701 (method url-fetch)
18702 (uri (pypi-uri "cloudpickle" version))
18703 (sha256
18704 (base32
18705 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
18706 (build-system python-build-system)
18707 (arguments
18708 '(#:phases (modify-phases %standard-phases
18709 (add-before 'check 'do-not-override-PYTHONPATH
18710 (lambda _
18711 ;; Append to PYTHONPATH instead of overriding it so
18712 ;; that dependencies from Guix can be found.
18713 (substitute* "tests/testutils.py"
18714 (("env\\['PYTHONPATH'\\] = pythonpath")
18715 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
18716 #t))
18717 (replace 'check
18718 (lambda* (#:key tests? #:allow-other-keys)
18719 (if tests?
18720 (invoke "pytest" "-s" "-vv")
18721 (format #t "test suite not run~%"))
18722 #t)))))
18723 (native-inputs
18724 `(;; For tests.
18725 ("python-psutil" ,python-psutil)
18726 ("python-pytest" ,python-pytest)
18727 ("python-tornado" ,python-tornado)))
18728 (home-page "https://github.com/cloudpipe/cloudpickle")
18729 (synopsis "Extended pickling support for Python objects")
18730 (description
18731 "Cloudpickle makes it possible to serialize Python constructs not
18732 supported by the default pickle module from the Python standard library. It
18733 is especially useful for cluster computing where Python expressions are
18734 shipped over the network to execute on remote hosts, possibly close to the
18735 data.")
18736 (properties `((python2-variant . ,(delay python2-cloudpickle))))
18737 (license license:bsd-3)))
18738
18739 (define-public python2-cloudpickle
18740 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
18741 (package
18742 (inherit base)
18743 (native-inputs
18744 `(("python-mock" ,python2-mock)
18745 ,@(package-native-inputs base)))
18746 (propagated-inputs
18747 `(("python-futures" ,python2-futures)
18748 ,@(package-propagated-inputs base))))))
18749
18750 (define-public python-locket
18751 (package
18752 (name "python-locket")
18753 (version "0.2.0")
18754 (source
18755 (origin
18756 (method url-fetch)
18757 (uri (pypi-uri "locket" version))
18758 (sha256
18759 (base32
18760 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
18761 (build-system python-build-system)
18762 (home-page "https://github.com/mwilliamson/locket.py")
18763 (synopsis "File-based locks for Python")
18764 (description
18765 "Locket implements a lock that can be used by multiple processes provided
18766 they use the same path.")
18767 (license license:bsd-2)))
18768
18769 (define-public python2-locket
18770 (package-with-python2 python-locket))
18771
18772 (define-public python-blosc
18773 (package
18774 (name "python-blosc")
18775 (version "1.5.1")
18776 (source
18777 (origin
18778 (method url-fetch)
18779 (uri (pypi-uri "blosc" version))
18780 (sha256
18781 (base32
18782 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
18783 (build-system python-build-system)
18784 ;; FIXME: all tests pass, but then this error is printed:
18785 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
18786 (arguments '(#:tests? #f))
18787 (propagated-inputs
18788 `(("python-numpy" ,python-numpy)))
18789 (home-page "https://github.com/blosc/python-blosc")
18790 (synopsis "Python wrapper for the Blosc data compressor library")
18791 (description "Blosc is a high performance compressor optimized for binary
18792 data. It has been designed to transmit data to the processor cache faster
18793 than the traditional, non-compressed, direct memory fetch approach via a
18794 @code{memcpy()} system call.
18795
18796 Blosc works well for compressing numerical arrays that contains data with
18797 relatively low entropy, like sparse data, time series, grids with
18798 regular-spaced values, etc.
18799
18800 This Python package wraps the Blosc library.")
18801 (license license:bsd-3)))
18802
18803 (define-public python2-blosc
18804 (package-with-python2 python-blosc))
18805
18806 (define-public python-partd
18807 (package
18808 (name "python-partd")
18809 (version "0.3.9")
18810 (source
18811 (origin
18812 (method url-fetch)
18813 (uri (pypi-uri "partd" version))
18814 (sha256
18815 (base32
18816 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
18817 (build-system python-build-system)
18818 (propagated-inputs
18819 `(("python-blosc" ,python-blosc)
18820 ("python-locket" ,python-locket)
18821 ("python-numpy" ,python-numpy)
18822 ("python-pandas" ,python-pandas)
18823 ("python-pyzmq" ,python-pyzmq)
18824 ("python-toolz" ,python-toolz)))
18825 (home-page "https://github.com/dask/partd/")
18826 (synopsis "Appendable key-value storage")
18827 (description "Partd stores key-value pairs. Values are raw bytes. We
18828 append on old values. Partd excels at shuffling operations.")
18829 (license license:bsd-3)))
18830
18831 (define-public python2-partd
18832 (package-with-python2 python-partd))
18833
18834 (define-public python-fsspec
18835 (package
18836 (name "python-fsspec")
18837 (version "0.6.1")
18838 (source
18839 (origin
18840 (method url-fetch)
18841 (uri (pypi-uri "fsspec" version))
18842 (sha256
18843 (base32
18844 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
18845 (build-system python-build-system)
18846 (arguments '(#:tests? #f)) ; there are none
18847 (home-page "https://github.com/intake/filesystem_spec")
18848 (synopsis "File-system specification")
18849 (description "The purpose of this package is to produce a template or
18850 specification for a file-system interface, that specific implementations
18851 should follow, so that applications making use of them can rely on a common
18852 behavior and not have to worry about the specific internal implementation
18853 decisions with any given backend.")
18854 (license license:bsd-3)))
18855
18856 (define-public python-dask
18857 (package
18858 (name "python-dask")
18859 (version "2.14.0")
18860 (source
18861 (origin
18862 (method url-fetch)
18863 (uri (pypi-uri "dask" version))
18864 (sha256
18865 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
18866 (build-system python-build-system)
18867 (arguments
18868 `(#:phases
18869 (modify-phases %standard-phases
18870 (add-after 'unpack 'disable-broken-tests
18871 (lambda _
18872 ;; This test is marked as xfail when pytest-xdist is used.
18873 (substitute* "dask/tests/test_threaded.py"
18874 (("def test_interrupt\\(\\)" m)
18875 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
18876 m)))
18877 ;; This one fails with a type error:
18878 ;; TypeError: Already tz-aware, use tz_convert to convert.
18879 (substitute* "dask/dataframe/tests/test_shuffle.py"
18880 (("def test_set_index_timestamp\\(\\)" m)
18881 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
18882 m)))
18883 #t))
18884 (replace 'check
18885 (lambda _ (invoke "pytest" "-vv"))))))
18886 (propagated-inputs
18887 `(("python-cloudpickle" ,python-cloudpickle)
18888 ("python-fsspec" ,python-fsspec)
18889 ("python-numpy" ,python-numpy)
18890 ("python-packaging" ,python-packaging)
18891 ("python-pandas" ,python-pandas)
18892 ("python-partd" ,python-partd)
18893 ("python-toolz" ,python-toolz)
18894 ("python-pyyaml" ,python-pyyaml)))
18895 (native-inputs
18896 `(("python-pytest" ,python-pytest)
18897 ("python-pytest-runner" ,python-pytest-runner)))
18898 (home-page "https://github.com/dask/dask/")
18899 (synopsis "Parallel computing with task scheduling")
18900 (description
18901 "Dask is a flexible parallel computing library for analytics. It
18902 consists of two components: dynamic task scheduling optimized for computation,
18903 and large data collections like parallel arrays, dataframes, and lists that
18904 extend common interfaces like NumPy, Pandas, or Python iterators to
18905 larger-than-memory or distributed environments. These parallel collections
18906 run on top of the dynamic task schedulers. ")
18907 (license license:bsd-3)))
18908
18909 (define-public python-ilinkedlist
18910 (package
18911 (name "python-ilinkedlist")
18912 (version "0.4.0")
18913 (source
18914 (origin
18915 (method url-fetch)
18916 (uri (pypi-uri "ilinkedlist" version))
18917 (sha256
18918 (base32
18919 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
18920 (build-system python-build-system)
18921 (native-inputs `(("python-pytest" ,python-pytest)))
18922 (inputs `(("python" ,python)))
18923 (home-page "https://github.com/luther9/ilinkedlist-py")
18924 (synopsis "Immutable linked list library")
18925 (description
18926 "This is a implementation of immutable linked lists for Python. It
18927 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
18928 Since a linked list is treated as immutable, it is hashable, and its length
18929 can be retrieved in constant time. Some of the terminology is inspired by
18930 LISP. It is possible to create an improper list by creating a @code{Pair}
18931 with a non-list @code{cdr}.")
18932 (license license:gpl3+)))
18933
18934 (define-public python-readlike
18935 (package
18936 (name "python-readlike")
18937 (version "0.1.3")
18938 (source
18939 (origin
18940 (method url-fetch)
18941 (uri (pypi-uri "readlike" version))
18942 (sha256
18943 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
18944 (build-system python-build-system)
18945 (home-page "https://github.com/jangler/readlike")
18946 (synopsis "GNU Readline-like line editing module")
18947 (description
18948 "This Python module provides line editing functions similar to the default
18949 Emacs-style ones of GNU Readline. Unlike the Python standard library's
18950 @code{readline} package, this one allows access to those capabilties in settings
18951 outside of a standard command-line interface. It is especially well-suited to
18952 interfacing with Urwid, due to a shared syntax for describing key inputs.
18953
18954 Currently, all stateless Readline commands are implemented. Yanking and history
18955 are not supported.")
18956 (license license:expat)))
18957
18958 (define-public python2-readlike
18959 (package-with-python2 python-readlike))
18960
18961 (define-public python-reparser
18962 (package
18963 (name "python-reparser")
18964 (version "1.4.3")
18965 (source
18966 (origin
18967 (method url-fetch)
18968 (uri (pypi-uri "ReParser" version))
18969 (sha256
18970 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
18971 (build-system python-build-system)
18972 (home-page "https://github.com/xmikos/reparser")
18973 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
18974 (description
18975 "This Python library provides a simple lexer/parser for inline markup based
18976 on regular expressions.")
18977 (license license:expat)))
18978
18979 (define-public python2-reparser
18980 (let ((reparser (package-with-python2
18981 (strip-python2-variant python-reparser))))
18982 (package (inherit reparser)
18983 (propagated-inputs
18984 `(("python2-enum34" ,python2-enum34)
18985 ,@(package-propagated-inputs reparser))))))
18986
18987 (define-public python-retrying
18988 (package
18989 (name "python-retrying")
18990 (version "1.3.3")
18991 (source
18992 (origin
18993 (method git-fetch)
18994 (uri (git-reference
18995 (url "https://github.com/rholder/retrying")
18996 (commit (string-append "v" version))))
18997 (file-name (git-file-name name version))
18998 (sha256
18999 (base32
19000 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
19001 (build-system python-build-system)
19002 (propagated-inputs
19003 `(("python-six" ,python-six)))
19004 (home-page "https://github.com/rholder/retrying")
19005 (synopsis "Library for adding retry behavior")
19006 (description "Retrying is a general-purpose retrying library to simplify
19007 the task of adding retry behavior to just about anything.
19008
19009 Features:
19010
19011 @itemize
19012 @item Generic Decorator API.
19013 @item Specify stop condition (i.e. limit by number of attempts).
19014 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
19015 @item Customize retrying on Exceptions.
19016 @item Customize retrying on expected returned result.
19017 @end itemize")
19018 (license license:asl2.0)))
19019
19020 (define-public python-precis-i18n
19021 (package
19022 (name "python-precis-i18n")
19023 (version "1.0.0")
19024 (source
19025 (origin
19026 (method url-fetch)
19027 (uri (pypi-uri "precis_i18n" version))
19028 (sha256
19029 (base32
19030 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
19031 (build-system python-build-system)
19032 (home-page "https://github.com/byllyfish/precis_i18n")
19033 (synopsis "Implementation of the PRECIS framework")
19034 (description
19035 "This module implements the PRECIS Framework as described in RFC 8264,
19036 RFC 8265 and RFC 8266.")
19037 (license license:expat)))
19038
19039 (define-public python-absl-py
19040 (package
19041 (name "python-absl-py")
19042 (version "0.6.1")
19043 (source
19044 (origin
19045 (method url-fetch)
19046 (uri (pypi-uri "absl-py" version))
19047 (sha256
19048 (base32
19049 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
19050 (build-system python-build-system)
19051 (propagated-inputs
19052 `(("python-six" ,python-six)))
19053 (home-page "https://github.com/abseil/abseil-py")
19054 (synopsis "Abseil Python common libraries")
19055 (description
19056 "This package provides the Abseil Python Common Libraries, a collection
19057 of Python libraries for building Python applications.")
19058 (license license:asl2.0)))
19059
19060 (define-public python-astor
19061 (package
19062 (name "python-astor")
19063 (version "0.7.1")
19064 (source
19065 (origin
19066 (method url-fetch)
19067 (uri (pypi-uri "astor" version))
19068 (sha256
19069 (base32
19070 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
19071 (build-system python-build-system)
19072 ;; FIXME: There are two errors and two test failures.
19073 (arguments `(#:tests? #f))
19074 (home-page "https://github.com/berkerpeksag/astor")
19075 (synopsis "Read and write Python ASTs")
19076 (description "Astor is designed to allow easy manipulation of Python
19077 source via the Abstract Syntax Tree.")
19078 (license license:bsd-3)))
19079
19080 (define-public python2-astor
19081 (package-with-python2 python-astor))
19082
19083 (define-public python-astunparse
19084 (package
19085 (name "python-astunparse")
19086 (version "1.6.2")
19087 (source
19088 (origin
19089 (method url-fetch)
19090 (uri (pypi-uri "astunparse" version))
19091 (sha256
19092 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
19093 (build-system python-build-system)
19094 (arguments '(#:tests? #f)) ; there are none
19095 (propagated-inputs
19096 `(("python-six" ,python-six)
19097 ("python-wheel" ,python-wheel)))
19098 (home-page "https://github.com/simonpercivall/astunparse")
19099 (synopsis "AST unparser for Python")
19100 (description "This package provides an AST unparser for Python. It is a
19101 factored out version of @code{unparse} found in the Python source
19102 distribution.")
19103 (license license:bsd-3)))
19104
19105 (define-public python-gast
19106 (package
19107 (name "python-gast")
19108 (version "0.3.3")
19109 (source
19110 (origin
19111 (method url-fetch)
19112 (uri (pypi-uri "gast" version))
19113 (sha256
19114 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
19115 (build-system python-build-system)
19116 (propagated-inputs
19117 `(("python-astunparse" ,python-astunparse)))
19118 (home-page "https://pypi.org/project/gast/")
19119 (synopsis "Generic Python AST that abstracts the underlying Python version")
19120 (description
19121 "GAST provides a compatibility layer between the AST of various Python
19122 versions, as produced by @code{ast.parse} from the standard @code{ast}
19123 module.")
19124 (license license:bsd-3)))
19125
19126 (define-public python-wikidata
19127 (package
19128 (name "python-wikidata")
19129 (version "0.6.1")
19130 (source
19131 (origin
19132 (method url-fetch)
19133 (uri (pypi-uri "Wikidata" version))
19134 (sha256
19135 (base32
19136 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
19137 (build-system python-build-system)
19138 (propagated-inputs
19139 `(("python-babel" ,python-babel)))
19140 (home-page "https://github.com/dahlia/wikidata")
19141 (synopsis "Wikidata client library")
19142 (description
19143 "This package provides a Python interface to
19144 @url{https://www.wikidata.org/, Wikidata}.")
19145 (properties '((upstream-name . "Wikidata")))
19146 (license license:gpl3+)))
19147
19148 (define-public python-doctest-ignore-unicode
19149 (package
19150 (name "python-doctest-ignore-unicode")
19151 (version "0.1.2")
19152 (source
19153 (origin
19154 (method url-fetch)
19155 (uri (pypi-uri "doctest-ignore-unicode" version))
19156 (sha256
19157 (base32
19158 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
19159 (build-system python-build-system)
19160 (native-inputs
19161 `(("python-nose" ,python-nose)))
19162 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
19163 (synopsis "Ignore Unicode literal prefixes in doctests")
19164 (description
19165 "This package adds support for a flag to ignore Unicode literal prefixes
19166 in doctests.")
19167 (license license:asl2.0)))
19168
19169 (define-public python-attr
19170 (package
19171 (name "python-attr")
19172 (version "0.3.1")
19173 (source
19174 (origin
19175 (method url-fetch)
19176 (uri (pypi-uri "attr" version))
19177 (sha256
19178 (base32
19179 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
19180 (build-system python-build-system)
19181 (home-page "https://github.com/denis-ryzhkov/attr")
19182 (synopsis "Decorator for attributes of target function or class")
19183 (description "Simple decorator to set attributes of target function or
19184 class in a @acronym{DRY, Don't Repeat Yourself} way.")
19185 (license license:expat)))
19186
19187 (define-public python-construct
19188 (package
19189 (name "python-construct")
19190 (version "2.10.56")
19191 (source
19192 (origin
19193 (method url-fetch)
19194 (uri (pypi-uri "construct" version))
19195 (sha256
19196 (base32
19197 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
19198 (build-system python-build-system)
19199 (arguments
19200 `(#:tests? #f)) ; No tests exist.
19201 (propagated-inputs
19202 `(("python-extras" ,python-extras)
19203 ("python-arrow" ,python-arrow)
19204 ("python-numpy" ,python-numpy)
19205 ("python-ruamel.yaml" ,python-ruamel.yaml)))
19206 (home-page "https://construct.readthedocs.io")
19207 (synopsis "Declarative and symmetrical parser and builder for binary data")
19208 (description
19209 "This package provides both simple, atomic constructs (such as
19210 integers of various sizes), as well as composite ones which allow you
19211 form hierarchical and sequential structures of increasing complexity.
19212 It features bit and byte granularity, easy debugging and testing, an
19213 easy-to-extend subclass system, and lots of primitive constructs to
19214 make your work easier.")
19215 (license license:expat)))
19216
19217 (define-public python-outcome
19218 (package
19219 (name "python-outcome")
19220 (version "1.0.1")
19221 (source
19222 (origin
19223 (method url-fetch)
19224 (uri (pypi-uri "outcome" version))
19225 (sha256
19226 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
19227 (build-system python-build-system)
19228 (arguments
19229 `(#:phases
19230 (modify-phases %standard-phases
19231 (replace 'check
19232 (lambda* (#:key inputs outputs #:allow-other-keys)
19233 (add-installed-pythonpath inputs outputs)
19234 (invoke "pytest" "-vv"))))))
19235 (native-inputs
19236 `(("python-pytest" ,python-pytest)
19237 ("python-pytest-cov" ,python-pytest-cov)
19238 ("python-pytest-asyncio" ,python-pytest-asyncio)))
19239 (propagated-inputs
19240 `(("python-async-generator" ,python-async-generator)
19241 ("python-attrs" ,python-attrs)))
19242 (home-page "https://github.com/python-trio/outcome")
19243 (synopsis "Capture the outcome of Python function calls")
19244 (description
19245 "Capture the outcome of Python function calls. Extracted from the Trio
19246 project.")
19247 ;; Either license applies.
19248 (license (list license:expat license:asl2.0))))
19249
19250 (define-public python-trio
19251 (package
19252 (name "python-trio")
19253 (version "0.16.0")
19254 (source
19255 (origin
19256 (method url-fetch)
19257 (uri (pypi-uri "trio" version))
19258 (sha256
19259 (base32 "0g6gkwz6i05rm9ym4l4imxakzld7qcgxhb21kprilchcav87s1nz"))))
19260 (build-system python-build-system)
19261 (arguments
19262 `(#:phases
19263 (modify-phases %standard-phases
19264 (add-before 'check 'change-home
19265 (lambda _
19266 ;; Tests require a writable home.
19267 (setenv "HOME" "/tmp")
19268 #t))
19269 (replace 'check
19270 (lambda _
19271 (invoke "pytest" "-vv" "-k"
19272 (string-append
19273 ;; This test times out.
19274 "not test_ki_protection_works"
19275 ;; Assertion errors.
19276 " and not test_guest_mode_ki"
19277 " and not test_run_in_trio_thread_ki"
19278 ;; These try to raise KeyboardInterrupt which does not work
19279 ;; in the build environment.
19280 " and not test_ki_self"
19281 " and not test_ki_wakes_us_up"
19282 ;; Failure in name resolution.
19283 " and not test_getnameinfo"
19284 " and not test_SocketType_resolve"
19285 ;; OSError: protocol not found.
19286 " and not test_getprotobyname")))))))
19287 (native-inputs
19288 `(("python-astor" ,python-astor)
19289 ("python-ipython" ,python-ipython)
19290 ("python-jedi" ,python-jedi)
19291 ("python-pylint" ,python-pylint)
19292 ("python-pyopenssl" ,python-pyopenssl)
19293 ("python-pytest" ,python-pytest)
19294 ("python-pytest-cov" ,python-pytest-cov)
19295 ("python-trustme" ,python-trustme)))
19296 (propagated-inputs
19297 `(("python-attrs" ,python-attrs)
19298 ("python-idna" ,python-idna)
19299 ("python-outcome" ,python-outcome)
19300 ("python-sniffio" ,python-sniffio)
19301 ("python-sortedcontainers"
19302 ,python-sortedcontainers)))
19303 (home-page "https://github.com/python-trio/trio")
19304 (synopsis "Friendly Python library for async concurrency and I/O")
19305 (description
19306 "Trio strives to be a production-quality, async/await-native I/O library
19307 for Python. Like all async libraries, its main purpose is to help you write
19308 programs that do multiple things at the same time with parallelized I/O.")
19309 ;; Either license applies.
19310 (license (list license:expat license:asl2.0))))
19311
19312 (define-public python-trio-typing
19313 (package
19314 (name "python-trio-typing")
19315 (version "0.5.0")
19316 (source
19317 (origin
19318 (method url-fetch)
19319 (uri (pypi-uri "trio-typing" version))
19320 (sha256
19321 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
19322 (build-system python-build-system)
19323 (arguments
19324 `(#:phases
19325 (modify-phases %standard-phases
19326 (replace 'check
19327 (lambda _
19328 (invoke "pytest" "-vv"))))))
19329 (native-inputs
19330 `(("python-attrs" ,python-attrs)
19331 ("python-pytest" ,python-pytest)))
19332 (propagated-inputs
19333 `(("python-mypy" ,python-mypy)
19334 ("python-mypy-extensions"
19335 ,python-mypy-extensions)
19336 ("python-trio" ,python-trio)
19337 ("python-typing-extensions"
19338 ,python-typing-extensions)))
19339 (home-page "https://github.com/python-trio/trio-typing")
19340 (synopsis "Static type checking support for Trio and related projects")
19341 (description
19342 "This package provides:
19343
19344 @itemize
19345 @item PEP 561 typing stubs packages for the Trio project packages:
19346
19347 @itemize
19348 @item trio (@code{trio-stubs})
19349 @item outcome (@code{outcome-stubs})
19350 @item async_generator (@code{async_generator-stubs})
19351 @end itemize
19352
19353 @item A package @code{trio_typing} containing types that Trio programs often
19354 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
19355 a mypy plugin that smooths over some limitations in the basic type hints.
19356 @end itemize")
19357 ;; Either license applies.
19358 (license (list license:expat license:asl2.0))))
19359
19360 (define-public python-humanize
19361 (package
19362 (name "python-humanize")
19363 (version "0.5.1")
19364 (source
19365 (origin
19366 (method url-fetch)
19367 (uri (pypi-uri "humanize" version))
19368 (sha256
19369 (base32
19370 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
19371 (arguments
19372 '(#:tests? #f)) ; tests not in pypi archive
19373 (build-system python-build-system)
19374 (home-page "https://github.com/jmoiron/humanize")
19375 (synopsis "Print numerical information in a human-readable form")
19376 (description "This package provides a Python module that displays numbers
19377 and dates in \"human readable\" forms. For example, it would display
19378 \"12345591313\" as \"12.3 billion\".")
19379 (license license:expat)))
19380
19381 (define-public python-txaio
19382 (package
19383 (name "python-txaio")
19384 (version "18.8.1")
19385 (source
19386 (origin
19387 (method url-fetch)
19388 (uri (pypi-uri "txaio" version))
19389 (sha256
19390 (base32
19391 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
19392 (build-system python-build-system)
19393 (propagated-inputs
19394 `(("python-twisted" ,python-twisted)
19395 ("python-six" ,python-six)))
19396 (home-page "https://github.com/crossbario/txaio")
19397 (synopsis "Compatibility layer between Python asyncio and Twisted")
19398 (description "Txaio provides a compatibility layer between the Python
19399 @code{asyncio} module and @code{Twisted}.")
19400 (license license:expat)))
19401
19402 (define-public python-toolshed
19403 (package
19404 (name "python-toolshed")
19405 (version "0.4.6")
19406 (source
19407 (origin
19408 (method url-fetch)
19409 (uri (pypi-uri "toolshed" version))
19410 (sha256
19411 (base32
19412 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
19413 (build-system python-build-system)
19414 (native-inputs
19415 `(("python-nose" ,python-nose)))
19416 (home-page "https://github.com/brentp/toolshed/")
19417 (synopsis "Collection of modules and functions for working with data")
19418 (description "This is a collection of well-tested, simple modules and
19419 functions that aim to reduce boilerplate when working with data.")
19420 (license license:bsd-2)))
19421
19422 (define-public python-annoy
19423 (package
19424 (name "python-annoy")
19425 (version "1.15.1")
19426 (source
19427 (origin
19428 (method url-fetch)
19429 (uri (pypi-uri "annoy" version))
19430 (sha256
19431 (base32
19432 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
19433 (build-system python-build-system)
19434 (native-inputs
19435 `(("python-nose" ,python-nose)))
19436 (home-page "https://github.com/spotify/annoy/")
19437 (synopsis "Approximate nearest neighbors library")
19438 (description
19439 "Annoy is a C++ library with Python bindings to search for points in
19440 space that are close to a given query point. It also creates large read-only
19441 file-based data structures that are @code{mmap}ped into memory so that many
19442 processes may share the same data.")
19443 (license license:asl2.0)))
19444
19445 (define-public python-pylzma
19446 (package
19447 (name "python-pylzma")
19448 (version "0.5.0")
19449 (source
19450 (origin
19451 (method url-fetch)
19452 (uri (pypi-uri "pylzma" version))
19453 (sha256
19454 (base32
19455 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
19456 (build-system python-build-system)
19457 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
19458 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
19459 (description "This package provides Python bindings for the LZMA library
19460 by Igor Pavlov.")
19461 (license license:lgpl2.1+)))
19462
19463 (define-public python2-pylzma
19464 (package-with-python2 python-pylzma))
19465
19466 (define-public python2-zeroconf
19467 (package
19468 (name "python2-zeroconf")
19469
19470 ;; This is the last version that supports Python 2.x.
19471 (version "0.19.1")
19472 (source
19473 (origin
19474 (method url-fetch)
19475 (uri (pypi-uri "zeroconf" version))
19476 (sha256
19477 (base32
19478 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
19479 (build-system python-build-system)
19480 (arguments
19481 `(#:python ,python-2
19482 #:phases
19483 (modify-phases %standard-phases
19484 (add-after 'unpack 'patch-requires
19485 (lambda* (#:key inputs #:allow-other-keys)
19486 (substitute* "setup.py"
19487 (("enum-compat")
19488 "enum34"))
19489 #t)))))
19490 (native-inputs
19491 `(("python2-six" ,python2-six)
19492 ("python2-enum32" ,python2-enum34)
19493 ("python2-netifaces" ,python2-netifaces)
19494 ("python2-typing" ,python2-typing)))
19495 (home-page "https://github.com/jstasiak/python-zeroconf")
19496 (synopsis "Pure Python mDNS service discovery")
19497 (description
19498 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
19499 compatible).")
19500 (license license:lgpl2.1+)))
19501
19502 (define-public python-bsddb3
19503 (package
19504 (name "python-bsddb3")
19505 (version "6.2.6")
19506 (source
19507 (origin
19508 (method url-fetch)
19509 (uri (pypi-uri "bsddb3" version))
19510 (sha256
19511 (base32
19512 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
19513 (build-system python-build-system)
19514 (inputs
19515 `(("bdb" ,bdb)))
19516 (arguments
19517 '(#:phases
19518 (modify-phases %standard-phases
19519 (add-after 'unpack 'configure-locations
19520 (lambda* (#:key inputs #:allow-other-keys)
19521 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
19522 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
19523 #t))
19524 (replace 'check
19525 (lambda _
19526 (invoke "python3" "test3.py" "-v"))))))
19527 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
19528 (synopsis "Python bindings for Oracle Berkeley DB")
19529 (description
19530 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
19531 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
19532 Transaction objects, and each of these is exposed as a Python type in the
19533 bsddb3.db module. The database objects can use various access methods: btree,
19534 hash, recno, and queue. Complete support of Berkeley DB distributed
19535 transactions. Complete support for Berkeley DB Replication Manager.
19536 Complete support for Berkeley DB Base Replication. Support for RPC.")
19537 (license license:bsd-3)))
19538
19539 (define-public python-dbfread
19540 (package
19541 (name "python-dbfread")
19542 (version "2.0.7")
19543 (source (origin
19544 (method url-fetch)
19545 (uri (pypi-uri "dbfread" version))
19546 (sha256
19547 (base32
19548 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
19549 (build-system python-build-system)
19550 (native-inputs
19551 `(("python-pytest" ,python-pytest)))
19552 (home-page "https://dbfread.readthedocs.io")
19553 (synopsis "Read DBF Files with Python")
19554 (description
19555 "This library reads DBF files and returns the data as native Python data
19556 types for further processing. It is primarily intended for batch jobs and
19557 one-off scripts.")
19558 (license license:expat)))
19559
19560 (define-public python-cached-property
19561 (package
19562 (name "python-cached-property")
19563 (version "1.5.1")
19564 (source
19565 (origin
19566 (method url-fetch)
19567 (uri (pypi-uri "cached-property" version))
19568 (sha256
19569 (base32
19570 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
19571 (build-system python-build-system)
19572 (arguments
19573 `(#:phases
19574 (modify-phases %standard-phases
19575 ;; https://github.com/pydanny/cached-property/issues/131
19576 ;; recent versions of freezegun break one test
19577 (add-after 'unpack 'disable-broken-test
19578 (lambda _
19579 (substitute* "tests/test_cached_property.py"
19580 (("def test_threads_ttl_expiry\\(self\\)" m)
19581 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
19582 " " m)))
19583 #t)))))
19584 (native-inputs
19585 `(("python-freezegun" ,python-freezegun)))
19586 (home-page
19587 "https://github.com/pydanny/cached-property")
19588 (synopsis
19589 "Decorator for caching properties in classes")
19590 (description
19591 "This package provides a decorator which makes caching
19592 time-or-computationally-expensive properties quick and easy and works in Python
19593 2 or 3.")
19594 (license license:bsd-3)))
19595
19596 (define-public python-folium
19597 (package
19598 (name "python-folium")
19599 (version "0.11.0")
19600 (source
19601 (origin
19602 (method url-fetch)
19603 (uri (pypi-uri "folium" version))
19604 (sha256
19605 (base32 "19sclsq3xcjfa7bavzjpyn6rl9b15jbc76n5aag4cwhqqamqj1sl"))))
19606 (build-system python-build-system)
19607 (propagated-inputs
19608 `(("python-branca" ,python-branca)
19609 ("python-jinja2" ,python-jinja2)
19610 ("python-numpy" ,python-numpy)
19611 ("python-requests" ,python-requests)))
19612 (native-inputs
19613 `(("python-pytest" ,python-pytest)))
19614 (home-page "https://github.com/python-visualization/folium")
19615 (synopsis "Make beautiful maps with Leaflet.js & Python")
19616 (description "@code{folium} makes it easy to visualize data that’s been
19617 manipulated in Python on an interactive leaflet map. It enables both the
19618 binding of data to a map for @code{choropleth} visualizations as well as
19619 passing rich vector/raster/HTML visualizations as markers on the map.
19620
19621 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
19622 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
19623 supports Image, Video, GeoJSON and TopoJSON overlays.")
19624 (license license:expat)))
19625
19626 (define-public jube
19627 (package
19628 ;; This is a command-line tool, so no "python-" prefix.
19629 (name "jube")
19630 (version "2.2.2")
19631 (source (origin
19632 (method url-fetch)
19633 (uri (string-append
19634 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
19635 version))
19636 (sha256
19637 (base32
19638 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
19639 (file-name (string-append "jube-" version ".tar.gz"))))
19640 (build-system python-build-system)
19641 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
19642 (synopsis "Benchmarking environment")
19643 (description
19644 "JUBE helps perform and analyze benchmarks in a systematic way. For each
19645 benchmarked application, benchmark data is stored in a format that allows JUBE
19646 to deduct the desired information. This data can be parsed by automatic pre-
19647 and post-processing scripts that draw information and store it more densely
19648 for manual interpretation.")
19649 (license license:gpl3+)))
19650
19651 (define-public python-pyroutelib3
19652 (package
19653 (name "python-pyroutelib3")
19654 (version "1.3.post1")
19655 (source
19656 (origin
19657 (method url-fetch)
19658 (uri (pypi-uri "pyroutelib3" version))
19659 (sha256
19660 (base32
19661 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
19662 (build-system python-build-system)
19663 (propagated-inputs
19664 `(("python-dateutil" ,python-dateutil)))
19665 (home-page "https://github.com/MKuranowski/pyroutelib3")
19666 (synopsis "Library for simple routing on OSM data")
19667 (description "Library for simple routing on OSM data")
19668 (license license:gpl3+)))
19669
19670 (define-public python-bibtexparser
19671 (package
19672 (name "python-bibtexparser")
19673 (version "1.1.0")
19674 (source
19675 (origin
19676 (method url-fetch)
19677 (uri (pypi-uri "bibtexparser" version))
19678 (sha256
19679 (base32
19680 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
19681 (build-system python-build-system)
19682 (propagated-inputs
19683 `(("python-pyparsing" ,python-pyparsing)))
19684 (native-inputs
19685 `(("python-future" ,python-future)))
19686 (home-page "https://github.com/sciunto-org/python-bibtexparser")
19687 (synopsis "Python library to parse BibTeX files")
19688 (description "BibtexParser is a Python library to parse BibTeX files.")
19689 (license (list license:bsd-3 license:lgpl3))))
19690
19691 (define-public python-distro
19692 (package
19693 (name "python-distro")
19694 (version "1.4.0")
19695 (source
19696 (origin
19697 (method url-fetch)
19698 (uri (pypi-uri "distro" version))
19699 (sha256
19700 (base32
19701 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
19702 (build-system python-build-system)
19703 (native-inputs
19704 `(("python-pytest" ,python-pytest)))
19705 (home-page "https://github.com/nir0s/distro")
19706 (synopsis
19707 "OS platform information API")
19708 (description
19709 "@code{distro} provides information about the OS distribution it runs on,
19710 such as a reliable machine-readable ID, or version information.
19711
19712 It is the recommended replacement for Python's original
19713 `platform.linux_distribution` function (which will be removed in Python 3.8).
19714 @code{distro} also provides a command-line interface to output the platform
19715 information in various formats.")
19716 (license license:asl2.0)))
19717
19718 (define-public python-cairosvg
19719 (package
19720 (name "python-cairosvg")
19721 (version "2.4.2")
19722 (source
19723 (origin
19724 (method url-fetch)
19725 (uri (pypi-uri "CairoSVG" version))
19726 (sha256
19727 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
19728 (build-system python-build-system)
19729 (arguments
19730 `(#:phases
19731 (modify-phases %standard-phases
19732 (replace 'check
19733 (lambda _ (invoke "pytest"))))))
19734 (propagated-inputs
19735 `(("python-cairocffi" ,python-cairocffi)
19736 ("python-cssselect2" ,python-cssselect2)
19737 ("python-defusedxml" ,python-defusedxml)
19738 ("python-pillow" ,python-pillow)
19739 ("python-tinycss2" ,python-tinycss2)))
19740 (native-inputs
19741 `(("python-pytest-flake8" ,python-pytest-flake8)
19742 ("python-pytest-isort" ,python-pytest-isort)
19743 ("python-pytest-runner" ,python-pytest-runner)))
19744 (home-page "https://cairosvg.org/")
19745 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
19746 (description "CairoSVG is a SVG converter based on Cairo. It can export
19747 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
19748 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
19749 parsed, the result is drawn to a Cairo surface that can be exported to
19750 qvarious formats: PDF, PostScript, PNG and even SVG.")
19751 (license license:lgpl3+)))
19752
19753 (define-public python-pyphen
19754 (package
19755 (name "python-pyphen")
19756 (version "0.9.5")
19757 (source
19758 (origin
19759 (method url-fetch)
19760 (uri (pypi-uri "Pyphen" version))
19761 (sha256
19762 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
19763 (build-system python-build-system)
19764 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
19765 ;; embedded set provided by upstream - like Debian does.
19766 (home-page "https://github.com/Kozea/Pyphen")
19767 (synopsis "Pure Python module to hyphenate text")
19768 (description "Pyphen is a pure Python module to hyphenate text using
19769 existing Hunspell hyphenation dictionaries.")
19770 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
19771
19772 (define-public python-intelhex
19773 (package
19774 (name "python-intelhex")
19775 (version "2.2.1")
19776 (source
19777 (origin
19778 (method url-fetch)
19779 (uri (pypi-uri "intelhex" version))
19780 (sha256
19781 (base32
19782 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
19783 (build-system python-build-system)
19784 (arguments '(#:tests? #f)) ;issue with version
19785 (home-page "https://pypi.org/project/IntelHex/")
19786 (synopsis "Python library for Intel HEX files manipulations")
19787 (description "The Intel HEX file format is widely used in microprocessors
19788 and microcontrollers area (embedded systems etc.) as the de facto standard for
19789 representation of code to be programmed into microelectronic devices. This
19790 package provides an intelhex Python library to read, write, create from
19791 scratch and manipulate data from Intel HEX file format. It also includes
19792 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
19793 converters and more, those based on the library itself.")
19794 (license license:bsd-3)))
19795
19796 (define-public python-pykwalify
19797 (package
19798 (name "python-pykwalify")
19799 (version "1.7.0")
19800 (source
19801 (origin
19802 (method url-fetch)
19803 (uri (pypi-uri "pykwalify" version))
19804 (sha256
19805 (base32
19806 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
19807 (build-system python-build-system)
19808 (arguments '(#:tests? #f)) ;missing dependencies
19809 (propagated-inputs
19810 `(("python-dateutil" ,python-dateutil)
19811 ("python-docopt" ,python-docopt)
19812 ("python-pyyaml" ,python-pyyaml)))
19813 (home-page "https://github.com/grokzen/pykwalify")
19814 (synopsis
19815 "Python lib/cli for JSON/YAML schema validation")
19816 (description
19817 "This package provides a parser, schema validator, and data binding tool
19818 for YAML and JSON.")
19819 (license license:expat)))
19820
19821 (define-public python-dbusmock
19822 (package
19823 (name "python-dbusmock")
19824 (version "0.18.3")
19825 (source
19826 (origin
19827 (method url-fetch)
19828 (uri (pypi-uri "python-dbusmock" version))
19829 (sha256
19830 (base32
19831 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
19832 (build-system python-build-system)
19833 (arguments
19834 '(#:phases
19835 (modify-phases %standard-phases
19836 (add-after 'unpack 'patch-shell-path
19837 (lambda _
19838 (substitute* "tests/test_code.py"
19839 (("/bin/bash") (which "bash")))
19840 #t)))))
19841 (native-inputs
19842 `(;; For tests.
19843 ("dbus" ,dbus) ; for dbus-daemon
19844 ("python-nose" ,python-nose)
19845 ("which" ,which)))
19846 (propagated-inputs
19847 `(("python-dbus" ,python-dbus)
19848 ("python-pygobject" ,python-pygobject)))
19849 (home-page "https://github.com/martinpitt/python-dbusmock")
19850 (synopsis "Python library for mock D-Bus objects")
19851 (description "python-dbusmock allows for the easy creation of mock objects on
19852 D-Bus. This is useful for writing tests for software which talks to D-Bus
19853 services such as upower, systemd, logind, gnome-session or others, and it is
19854 hard (or impossible without root privileges) to set the state of the real
19855 services to what you expect in your tests.")
19856 (license license:lgpl3+)))
19857
19858 (define-public python-ujson
19859 (package
19860 (name "python-ujson")
19861 (version "2.0.3")
19862 (source
19863 (origin
19864 (method url-fetch)
19865 (uri (pypi-uri "ujson" version))
19866 (sha256
19867 (base32
19868 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
19869 (modules '((guix build utils)))
19870 (snippet
19871 '(begin (delete-file-recursively "deps") #t))))
19872 (build-system python-build-system)
19873 (arguments
19874 `(#:phases
19875 (modify-phases %standard-phases
19876 (add-after 'unpack 'link-to-system-double-conversion
19877 (lambda* (#:key inputs #:allow-other-keys)
19878 (let ((d-c (assoc-ref inputs "double-conversion")))
19879 (substitute* "setup.py"
19880 (("./deps/double-conversion/double-conversion\"")
19881 (string-append d-c "/include/double-conversion\""))
19882 (("-lstdc++" stdc)
19883 (string-append "-L" d-c "/lib\","
19884 " \"-ldouble-conversion\","
19885 " \"" stdc)))
19886 #t)))
19887 (replace 'check
19888 (lambda* (#:key inputs outputs #:allow-other-keys)
19889 (add-installed-pythonpath inputs outputs)
19890 (invoke "pytest"))))))
19891 (native-inputs
19892 `(("double-conversion" ,double-conversion)
19893 ("python-setuptools-scm" ,python-setuptools-scm)
19894 ("python-pytest" ,python-pytest)))
19895 (home-page "https://github.com/ultrajson/ultrajson")
19896 (synopsis "Ultra fast JSON encoder and decoder for Python")
19897 (description
19898 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
19899 bindings for Python 3.")
19900 (license license:bsd-3)))
19901
19902 (define-public python-ujson-1
19903 (package
19904 (inherit python-ujson)
19905 (version "1.35")
19906 (source
19907 (origin
19908 (method url-fetch)
19909 (uri (pypi-uri "ujson" version))
19910 (sha256
19911 (base32
19912 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
19913 (arguments
19914 '(#:phases %standard-phases))
19915 (native-inputs '())
19916 (home-page "http://www.esn.me")
19917 (description
19918 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
19919 bindings for Python 2.5+ and 3.")))
19920
19921 (define-public python2-ujson-1
19922 (package-with-python2 python-ujson-1))
19923
19924 (define-public python-iocapture
19925 ;; The latest release is more than a year older than this commit.
19926 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
19927 (revision "1"))
19928 (package
19929 (name "python-iocapture")
19930 (version "0.1.2")
19931 (source
19932 (origin
19933 (method git-fetch)
19934 (uri (git-reference
19935 (url "https://github.com/oinume/iocapture")
19936 (commit commit)))
19937 (file-name (git-file-name name version))
19938 (sha256
19939 (base32
19940 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
19941 (build-system python-build-system)
19942 (arguments
19943 `(#:phases
19944 (modify-phases %standard-phases
19945 (delete 'check)
19946 (add-after 'install 'check
19947 (lambda* (#:key inputs outputs #:allow-other-keys)
19948 (add-installed-pythonpath inputs outputs)
19949 (invoke "py.test" "-v" "tests")
19950 #t)))))
19951 (propagated-inputs
19952 `(("python-flexmock" ,python-flexmock)
19953 ("python-pytest" ,python-pytest)
19954 ("python-pytest-cov" ,python-pytest-cov)
19955 ("python-six" ,python-six)))
19956 (home-page "https://github.com/oinume/iocapture")
19957 (synopsis "Python capturing tool for stdout and stderr")
19958 (description
19959 "This package helps you to capture the standard out (stdout) and the
19960 standard error channel (stderr) in your program.")
19961 (license license:expat))))
19962
19963 (define-public python-argh
19964 ;; There are 21 commits since the latest release containing important
19965 ;; improvements.
19966 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
19967 (revision "1"))
19968 (package
19969 (name "python-argh")
19970 (version (git-version "0.26.2" revision commit))
19971 (source
19972 (origin
19973 (method git-fetch)
19974 (uri (git-reference
19975 (url "https://github.com/neithere/argh")
19976 (commit commit)))
19977 (file-name (git-file-name name version))
19978 (sha256
19979 (base32
19980 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
19981 (build-system python-build-system)
19982 (propagated-inputs
19983 `(("python-iocapture" ,python-iocapture)
19984 ("python-mock" ,python-mock)
19985 ("python-pytest" ,python-pytest)
19986 ("python-pytest-cov" ,python-pytest-cov)
19987 ("python-pytest-xdist" ,python-pytest-xdist)
19988 ("python-tox" ,python-tox)))
19989 (home-page "https://github.com/neithere/argh/")
19990 (synopsis "Argparse wrapper with natural syntax")
19991 (description
19992 "python-argh is a small library that provides several layers of
19993 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
19994 always possible to declare a command with the highest possible (and least
19995 flexible) layer and then tune the behaviour with any of the lower layers
19996 including the native API of @code{python-argparse}.")
19997 (license license:lgpl3+))))
19998
19999 (define-public python-ppft
20000 (package
20001 (name "python-ppft")
20002 (version "1.6.6.1")
20003 (source
20004 (origin
20005 (method url-fetch)
20006 (uri (pypi-uri "ppft" version))
20007 (sha256
20008 (base32
20009 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
20010 (build-system python-build-system)
20011 (arguments '(#:tests? #f)) ; there are none
20012 (propagated-inputs
20013 `(("python-six" ,python-six)))
20014 (home-page "https://pypi.org/project/ppft/")
20015 (synopsis "Fork of Parallel Python")
20016 (description
20017 "This package is a fork of Parallel Python. The Parallel Python
20018 module (@code{pp}) provides an easy and efficient way to create
20019 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
20020 computers and clusters. It features cross-platform portability and dynamic
20021 load balancing.")
20022 (license license:bsd-3)))
20023
20024 (define-public python-pox
20025 (package
20026 (name "python-pox")
20027 (version "0.2.7")
20028 (source
20029 (origin
20030 (method url-fetch)
20031 (uri (pypi-uri "pox" version))
20032 (sha256
20033 (base32
20034 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
20035 (build-system python-build-system)
20036 (arguments
20037 `(#:phases
20038 (modify-phases %standard-phases
20039 (replace 'check
20040 (lambda _
20041 (mkdir-p "/tmp/guix")
20042 (setenv "SHELL" "bash")
20043 (setenv "USERNAME" "guix")
20044 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
20045 (invoke "py.test" "-vv")
20046 #t)))))
20047 (native-inputs
20048 `(("python-pytest" ,python-pytest)
20049 ("which" ,which)))
20050 (home-page "https://pypi.org/project/pox/")
20051 (synopsis "Python utilities for filesystem exploration and automated builds")
20052 (description
20053 "Pox provides a collection of utilities for navigating and manipulating
20054 filesystems. This module is designed to facilitate some of the low level
20055 operating system interactions that are useful when exploring a filesystem on a
20056 remote host. Pox provides Python equivalents of several shell commands such
20057 as @command{which} and @command{find}. These commands allow automated
20058 discovery of what has been installed on an operating system, and where the
20059 essential tools are located.")
20060 (license license:bsd-3)))
20061
20062 (define-public python-pathos
20063 (package
20064 (name "python-pathos")
20065 (version "0.2.5")
20066 (source
20067 (origin
20068 (method url-fetch)
20069 (uri (pypi-uri "pathos" version))
20070 (sha256
20071 (base32
20072 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
20073 (build-system python-build-system)
20074 (arguments
20075 '(#:phases
20076 (modify-phases %standard-phases
20077 (replace 'check
20078 (lambda _
20079 (setenv "PYTHONPATH"
20080 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
20081 (invoke "python" "./tests/__main__.py"))))))
20082 (propagated-inputs
20083 `(("python-dill" ,python-dill)
20084 ("python-multiprocess" ,python-multiprocess)
20085 ("python-pox" ,python-pox)
20086 ("python-ppft" ,python-ppft)))
20087 (native-inputs
20088 `(("python-pytest" ,python-pytest)))
20089 (home-page "https://pypi.org/project/pathos/")
20090 (synopsis
20091 "Parallel graph management and execution in heterogeneous computing")
20092 (description
20093 "Python-pathos is a framework for heterogeneous computing. It provides a
20094 consistent high-level interface for configuring and launching parallel
20095 computations across heterogeneous resources. Python-pathos provides configurable
20096 launchers for parallel and distributed computing, where each launcher contains
20097 the syntactic logic to configure and launch jobs in an execution environment.")
20098 (license license:bsd-3)))
20099
20100 (define-public python-flit
20101 (package
20102 (name "python-flit")
20103 (version "2.1.0")
20104 (source
20105 (origin
20106 (method url-fetch)
20107 (uri (pypi-uri "flit" version))
20108 (sha256
20109 (base32
20110 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
20111 (build-system python-build-system)
20112 (arguments
20113 `(#:tests? #f)) ; XXX: Check requires network access.
20114 (home-page "https://flit.readthedocs.io/")
20115 (synopsis
20116 "Simple packaging tool for simple packages")
20117 (description
20118 "Flit is a simple way to put Python packages and modules on PyPI. Flit
20119 packages a single importable module or package at a time, using the import
20120 name as the name on PyPI. All subpackages and data files within a package
20121 are included automatically.")
20122 (license license:bsd-3)))
20123
20124 (define-public python-pathtools
20125 (package
20126 (name "python-pathtools")
20127 (version "0.1.2")
20128 (source
20129 (origin
20130 (method url-fetch)
20131 (uri (pypi-uri "pathtools" version))
20132 (sha256
20133 (base32
20134 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
20135 (build-system python-build-system)
20136 (home-page
20137 "https://github.com/gorakhargosh/pathtools")
20138 (synopsis "Path utilities for Python")
20139 (description "Pattern matching and various utilities for file systems
20140 paths.")
20141 (license license:expat)))
20142
20143 (define-public python-fastentrypoints
20144 (package
20145 (name "python-fastentrypoints")
20146 (version "0.12")
20147 (source
20148 (origin
20149 (method url-fetch)
20150 (uri (pypi-uri "fastentrypoints" version))
20151 (sha256
20152 (base32
20153 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
20154 (build-system python-build-system)
20155 (home-page
20156 "https://github.com/ninjaaron/fast-entry_points")
20157 (synopsis
20158 "Makes entry_points specified in setup.py load more quickly")
20159 (description
20160 "Using entry_points in your setup.py makes scripts that start really
20161 slowly because it imports pkg_resources. This package allows such setup
20162 scripts to load entry points more quickly.")
20163 (license license:bsd-3)))
20164
20165 (define-public python-funcparserlib
20166 (package
20167 (name "python-funcparserlib")
20168 (version "0.3.6")
20169 (source
20170 (origin
20171 (method url-fetch)
20172 (uri (pypi-uri "funcparserlib" version))
20173 (sha256
20174 (base32
20175 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
20176 (native-inputs
20177 `(("python-tox" ,python-tox)))
20178 (arguments
20179 `(#:phases
20180 (modify-phases %standard-phases
20181 (replace 'check
20182 (lambda _
20183 (invoke "tox"))))))
20184 (build-system python-build-system)
20185 (home-page
20186 "https://github.com/vlasovskikh/funcparserlib")
20187 (synopsis
20188 "Recursive descent parsing library based on functional combinators")
20189 (description
20190 "This package is a recursive descent parsing library for Python based on
20191 functional combinators. Parser combinators are just higher-order functions
20192 that take parsers as their arguments and return them as result values.")
20193 (license license:expat)))
20194
20195 (define-public python-speg
20196 (package
20197 (name "python-speg")
20198 (version "0.3")
20199 (source
20200 (origin
20201 (method url-fetch)
20202 (uri (pypi-uri "speg" version ".zip"))
20203 (sha256
20204 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
20205 (arguments
20206 `(#:tests? #f)) ;FIXME: tests fail, not sure why
20207 (native-inputs
20208 `(("unzip" ,unzip)))
20209 (build-system python-build-system)
20210 (home-page "https://github.com/avakar/speg")
20211 (synopsis "PEG-based parser interpreter with memoization")
20212 (description "This package is a PEG-based parser and interpreter with
20213 memoization.")
20214 (license license:expat)))
20215
20216 (define-public python-cson
20217 (package
20218 (name "python-cson")
20219 (version "0.8")
20220 (source
20221 (origin
20222 (method url-fetch)
20223 (uri (pypi-uri "cson" version))
20224 (sha256
20225 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
20226 (build-system python-build-system)
20227 (propagated-inputs
20228 `(("python-speg" ,python-speg)))
20229 (home-page "https://github.com/avakar/pycson")
20230 (synopsis "Parser for Coffeescript Object Notation (CSON)")
20231 (description "This package is a parser for Coffeescript Object
20232 Notation (CSON).")
20233 (license license:expat)))
20234
20235 (define-public python-asynctest
20236 (package
20237 (name "python-asynctest")
20238 (version "0.13.0")
20239 (source
20240 (origin
20241 (method url-fetch)
20242 (uri (pypi-uri "asynctest" version))
20243 (sha256
20244 (base32
20245 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
20246 (build-system python-build-system)
20247 (arguments
20248 '(#:phases
20249 (modify-phases %standard-phases
20250 (replace 'check
20251 (lambda _
20252 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
20253 (add-after 'unpack 'disable-tests
20254 (lambda* _
20255 (substitute* "test/test_selector.py"
20256 ;; XXX: This test fails for unknown reason inside the build
20257 ;; environment.
20258 (("def test_events_watched_outside_test_are_ignored")
20259 "@unittest.skip('disabled by guix')
20260 def test_events_watched_outside_test_are_ignored")))))))
20261 (home-page "https://github.com/Martiusweb/asynctest")
20262 (synopsis "Extension of unittest for testing asyncio libraries")
20263 (description
20264 "The package asynctest is built on top of the standard unittest module
20265 and cuts down boilerplate code when testing libraries for asyncio.")
20266 (license license:asl2.0)))
20267
20268 (define-public python-aionotify
20269 (package
20270 (name "python-aionotify")
20271 (version "0.2.0")
20272 (source
20273 (origin
20274 ;; Source tarball on PyPi lacks tests
20275 (method git-fetch)
20276 (uri (git-reference
20277 (url "https://github.com/rbarrois/aionotify")
20278 (commit (string-append "v" version))))
20279 (file-name (git-file-name name version))
20280 (sha256
20281 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
20282 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
20283 (build-system python-build-system)
20284 (home-page "https://github.com/rbarrois/aionotify")
20285 (synopsis "Asyncio-powered inotify library")
20286 (description
20287 "@code{aionotify} is a simple, asyncio-based inotify library.")
20288 (license license:bsd-3)))
20289
20290 (define-public python-forbiddenfruit
20291 (package
20292 (name "python-forbiddenfruit")
20293 (version "0.1.3")
20294 (source
20295 (origin
20296 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
20297 (method git-fetch)
20298 (uri (git-reference
20299 (url "https://github.com/clarete/forbiddenfruit")
20300 (commit version)))
20301 (file-name (git-file-name name version))
20302 (sha256
20303 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
20304 (build-system python-build-system)
20305 (arguments
20306 '(#:phases
20307 (modify-phases %standard-phases
20308 (replace 'check
20309 (lambda _
20310 (invoke "make" "SKIP_DEPS=1"))))))
20311 (native-inputs
20312 `(("python-nose" ,python-nose)
20313 ("python-coverage" ,python-coverage)))
20314 (home-page "https://github.com/clarete/forbiddenfruit")
20315 (synopsis "Patch python built-in objects")
20316 (description "This project allows Python code to extend built-in types.")
20317 (license (list license:gpl3+ license:expat))))
20318
20319 (define-public python-shouldbe
20320 (package
20321 (name "python-shouldbe")
20322 (version "0.1.2")
20323 (source
20324 (origin
20325 (method url-fetch)
20326 (uri (pypi-uri "shouldbe" version))
20327 (sha256
20328 (base32
20329 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
20330 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
20331 (build-system python-build-system)
20332 (propagated-inputs
20333 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
20334 (native-inputs
20335 `(("python-nose" ,python-nose)))
20336 (home-page "https://github.com/directxman12/should_be")
20337 (synopsis "Python Assertion Helpers inspired by Shouldly")
20338 (description
20339 "Python Assertion Helpers inspired by Shouldly.")
20340 (license license:isc)))
20341
20342 (define-public python-k5test
20343 (package
20344 (name "python-k5test")
20345 (version "0.9.2")
20346 (source
20347 (origin
20348 (method url-fetch)
20349 (uri (pypi-uri "k5test" version))
20350 (sha256
20351 (base32
20352 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
20353 (build-system python-build-system)
20354 (propagated-inputs
20355 `(("python-six" ,python-six)
20356 ;; `which`, `kadmin.local` binaries called inside library
20357 ("which" ,which)
20358 ("mit-krb5" ,mit-krb5)))
20359 (native-inputs `(("mit-krb5" ,mit-krb5)))
20360 (arguments
20361 '(#:phases
20362 (modify-phases %standard-phases
20363 (add-after 'unpack 'patch-paths
20364 (lambda* _
20365 (substitute* "k5test/realm.py"
20366 (("'kadmin_local'") "'kadmin.local'")))))))
20367 (home-page "https://github.com/pythongssapi/k5test")
20368 (synopsis "Library for setting up self-contained Kerberos 5 environments")
20369 (description
20370 "@code{k5test} is a library for setting up self-contained Kerberos 5
20371 environments, and running Python unit tests inside those environments. It is
20372 based on the file of the same name found alongside the MIT Kerberos 5 unit
20373 tests.")
20374 (license license:isc)))
20375
20376 (define-public python-gssapi
20377 (package
20378 (name "python-gssapi")
20379 (version "1.6.5")
20380 (source
20381 (origin
20382 (method url-fetch)
20383 (uri (pypi-uri "gssapi" version))
20384 (sha256
20385 (base32
20386 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
20387 (build-system python-build-system)
20388 (propagated-inputs
20389 `(("python-decorator" ,python-decorator)
20390 ("python-six" ,python-six)))
20391 (inputs
20392 `(("mit-krb5" ,mit-krb5)))
20393 ;; for tests
20394 (native-inputs
20395 `(("python-shouldbe" ,python-shouldbe)
20396 ("python-parameterized" ,python-parameterized)
20397 ("python-k5test" ,python-k5test)
20398 ("python-nose" ,python-nose)))
20399 (home-page "https://github.com/pythongssapi/python-gssapi")
20400 (synopsis "Python GSSAPI Wrapper")
20401 (description
20402 "Python-GSSAPI provides both low-level and high level wrappers around the
20403 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
20404 also be useable with other GSSAPI mechanisms.")
20405 (license license:isc)))
20406
20407 (define-public python-check-manifest
20408 (package
20409 (name "python-check-manifest")
20410 (version "0.37")
20411 (source
20412 (origin
20413 (method url-fetch)
20414 (uri (pypi-uri "check-manifest" version))
20415 (sha256
20416 (base32
20417 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
20418 (build-system python-build-system)
20419 (native-inputs
20420 `(("python-mock" ,python-mock)
20421 ("git" ,git)))
20422 (home-page "https://github.com/mgedmin/check-manifest")
20423 (synopsis "Check MANIFEST.in in a Python source package for completeness")
20424 (description "Python package can include a MANIFEST.in file to help with
20425 sending package files to the Python Package Index. This package checks that
20426 file to ensure it completely and accurately describes your project.")
20427 (license license:expat)))
20428
20429 (define-public python-android-stringslib
20430 (package
20431 (name "python-android-stringslib")
20432 (version "0.1.2")
20433 (source
20434 (origin
20435 (method git-fetch)
20436 (uri (git-reference
20437 (url "https://framagit.org/tyreunom/python-android-strings-lib")
20438 (commit (string-append "v" version))))
20439 (file-name (git-file-name name version))
20440 (sha256
20441 (base32
20442 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
20443 (build-system python-build-system)
20444 (arguments
20445 `(#:tests? #f))
20446 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
20447 (synopsis "Android strings.xml support")
20448 (description "Android Strings Lib provides support for android's strings.xml
20449 files. These files are used to translate strings in android apps.")
20450 (license license:expat)))
20451
20452 (define-public python-watchdog
20453 (package
20454 (name "python-watchdog")
20455 (version "0.9.0")
20456 (source
20457 (origin
20458 (method url-fetch)
20459 (uri (pypi-uri "watchdog" version))
20460 (sha256
20461 (base32
20462 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
20463 (build-system python-build-system)
20464 (arguments
20465 `(#:phases
20466 (modify-phases %standard-phases
20467 (add-before 'check 'remove-failing
20468 (lambda _
20469 (delete-file "tests/test_inotify_buffer.py")
20470 (delete-file "tests/test_snapshot_diff.py")
20471 #t)))))
20472 (propagated-inputs
20473 `(("python-argh" ,python-argh)
20474 ("python-pathtools" ,python-pathtools)
20475 ("python-pyyaml" ,python-pyyaml)))
20476 (native-inputs
20477 `(("python-pytest-cov" ,python-pytest-cov)
20478 ("python-pytest-timeout" ,python-pytest-timeout)))
20479 (home-page "https://github.com/gorakhargosh/watchdog")
20480 (synopsis "Filesystem events monitoring")
20481 (description "This package provides a way to monitor filesystem events
20482 such as a file modification and trigger an action. This is similar to inotify,
20483 but portable.")
20484 (license license:asl2.0)))
20485
20486 (define-public python-watchgod
20487 (package
20488 (name "python-watchgod")
20489 (version "0.6")
20490 (source
20491 (origin
20492 ;; There are no tests in the PyPI tarball.
20493 (method git-fetch)
20494 (uri (git-reference
20495 (url "https://github.com/samuelcolvin/watchgod")
20496 (commit (string-append "v" version))))
20497 (file-name (git-file-name name version))
20498 (sha256
20499 (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66"))))
20500 (build-system python-build-system)
20501 (arguments
20502 `(#:phases
20503 (modify-phases %standard-phases
20504 (replace 'check
20505 (lambda _
20506 (invoke "pytest" "-vv"))))))
20507 (native-inputs
20508 `(("python-coverage" ,python-coverage)
20509 ("python-docutils" ,python-docutils)
20510 ("python-flake8" ,python-flake8)
20511 ("python-isort" ,python-isort)
20512 ("python-pycodestyle" ,python-pycodestyle)
20513 ("python-pyflakes" ,python-pyflakes)
20514 ("python-pygments" ,python-pygments)
20515 ("python-pytest" ,python-pytest)
20516 ("python-pytest-cov" ,python-pytest-cov)
20517 ("python-pytest-aiohttp" ,python-pytest-aiohttp)
20518 ("python-pytest-mock" ,python-pytest-mock)
20519 ("python-pytest-sugar" ,python-pytest-sugar)
20520 ("python-pytest-toolbox" ,python-pytest-toolbox)))
20521 (home-page "https://github.com/samuelcolvin/watchgod")
20522 (synopsis "Simple, modern file watching and code reload in Python")
20523 (description
20524 "Simple, modern file watching and code reload in Python inspired by
20525 @code{watchdog}. Among the differences are a unified approach for each
20526 operating systems and an elegant approach to concurrency using threading.")
20527 (license license:expat)))
20528
20529 (define-public python-wget
20530 (package
20531 (name "python-wget")
20532 (version "3.2")
20533 (source
20534 (origin
20535 (method url-fetch)
20536 (uri (pypi-uri "wget" version ".zip"))
20537 (sha256
20538 (base32
20539 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
20540 (build-system python-build-system)
20541 (native-inputs `(("unzip" ,unzip)))
20542 (home-page "https://bitbucket.org/techtonik/python-wget/")
20543 (synopsis "Pure Python download utility")
20544 (description "The python-wget library provides an API to download files
20545 with features similar to the @command{wget} utility.")
20546 (license license:unlicense)))
20547
20548 (define-public offlate
20549 (package
20550 (name "offlate")
20551 (version "0.5")
20552 (source
20553 (origin
20554 (method git-fetch)
20555 (uri (git-reference
20556 (url "https://framagit.org/tyreunom/offlate")
20557 (commit version)))
20558 (file-name (git-file-name name version))
20559 (sha256
20560 (base32
20561 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
20562 (build-system python-build-system)
20563 (arguments
20564 ;; No tests
20565 `(#:tests? #f))
20566 (propagated-inputs
20567 `(("python-android-stringslib" ,python-android-stringslib)
20568 ("python-dateutil" ,python-dateutil)
20569 ("python-gitlab" ,python-gitlab)
20570 ("python-lxml" ,python-lxml)
20571 ("python-polib" ,python-polib)
20572 ("python-pyenchant" ,python-pyenchant)
20573 ("python-pygit2" ,python-pygit2)
20574 ("python-pygithub" ,python-pygithub)
20575 ("python-pyqt" ,python-pyqt)
20576 ("python-requests" ,python-requests)
20577 ("python-ruamel.yaml" ,python-ruamel.yaml)
20578 ("python-translation-finder" ,python-translation-finder)
20579 ("python-watchdog" ,python-watchdog)))
20580 (native-inputs
20581 `(("qttools" ,qttools)))
20582 (home-page "https://framagit.org/tyreunom/offlate")
20583 (synopsis "Offline translation interface for online translation tools")
20584 (description "Offlate offers a unified interface for different translation
20585 file formats, as well as many different online translation platforms. You can
20586 use it to get work from online platforms, specialized such as the Translation
20587 Project, or not such a gitlab instance when your upstream doesn't use any
20588 dedicated platform. The tool proposes a unified interface for any format and
20589 an upload option to send your work back to the platform.")
20590 (license license:gpl3+)))
20591
20592 (define-public python-titlecase
20593 (package
20594 (name "python-titlecase")
20595 (version "0.12.0")
20596 (source
20597 (origin
20598 (method url-fetch)
20599 (uri (pypi-uri "titlecase" version))
20600 (sha256
20601 (base32
20602 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
20603 (build-system python-build-system)
20604 (native-inputs
20605 `(("python-nose" ,python-nose)))
20606 (home-page "https://github.com/ppannuto/python-titlecase")
20607 (synopsis "Capitalize strings similar to book titles")
20608 (description
20609 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
20610 It capitalizes (predominantly English) strings in a way that is similar to
20611 book titles, using the New York Times Manual of Style to leave certain words
20612 lowercase.")
20613 (license license:expat)))
20614
20615 (define-public python-pypng
20616 (package
20617 (name "python-pypng")
20618 (version "0.0.20")
20619 (source
20620 (origin
20621 (method url-fetch)
20622 (uri (pypi-uri "pypng" version))
20623 (sha256
20624 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
20625 (build-system python-build-system)
20626 (home-page "https://github.com/drj11/pypng")
20627 (synopsis "Pure Python PNG image encoder/decoder")
20628 (description
20629 "The PyPNG module implements support for PNG images. It reads and writes
20630 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
20631 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
20632 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
20633 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
20634 A number of optional chunks can be specified (when writing) and
20635 understood (when reading): tRNS, bKGD, gAMA.
20636
20637 PyPNG is not a high level toolkit for image processing (like PIL) and does not
20638 aim at being a replacement or competitor. Its strength lies in fine-grained
20639 extensive support of PNG features. It can also read and write Netpbm PAM
20640 files, with a focus on its use as an intermediate format for implementing
20641 custom PNG processing.")
20642 (license license:expat)))
20643
20644 (define-public python-fuzzywuzzy
20645 (package
20646 (name "python-fuzzywuzzy")
20647 (version "0.18.0")
20648 (source
20649 (origin
20650 (method url-fetch)
20651 (uri (pypi-uri "fuzzywuzzy" version))
20652 (sha256
20653 (base32
20654 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
20655 (build-system python-build-system)
20656 (native-inputs
20657 `(("python-hypothesis" ,python-hypothesis)
20658 ("python-pycodestyle" ,python-pycodestyle)
20659 ("python-pytest" ,python-pytest)))
20660 (propagated-inputs
20661 `(("python-levenshtein" ,python-levenshtein)))
20662 (home-page "https://github.com/seatgeek/fuzzywuzzy")
20663 (synopsis "Fuzzy string matching in Python")
20664 (description "Approximate string matching using
20665 @emph{Levenshtein Distance} to calculate the differences between
20666 sequences.")
20667 (license license:gpl2)))
20668
20669 (define-public python2-fuzzywuzzy
20670 (package-with-python2 python-fuzzywuzzy))
20671
20672 (define-public python-block-tracing
20673 (package
20674 (name "python-block-tracing")
20675 (version "1.0.1")
20676 (source
20677 (origin
20678 (method url-fetch)
20679 (uri (pypi-uri "block_tracing" version))
20680 (sha256
20681 (base32
20682 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
20683 (build-system python-build-system)
20684 (arguments '(#:tests? #f)) ; no tests
20685 (home-page "https://github.com/rianhunter/block_tracing")
20686 (synopsis "Protect process memory")
20687 (description
20688 "@code{block_tracing} is a tiny Python library that can be used to
20689 prevent debuggers and other applications from inspecting the memory within
20690 your process.")
20691 (license license:expat)))
20692
20693 (define-public python-gcovr
20694 (package
20695 (name "python-gcovr")
20696 (version "4.2")
20697 (source
20698 (origin
20699 (method url-fetch)
20700 (uri (pypi-uri "gcovr" version))
20701 (sha256
20702 (base32
20703 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
20704 (build-system python-build-system)
20705 (propagated-inputs
20706 `(("python-lxml" ,python-lxml)
20707 ("python-jinja2" ,python-jinja2)))
20708 (home-page "https://gcovr.com/")
20709 (synopsis "Utility for generating code coverage results")
20710 (description
20711 "Gcovr provides a utility for managing the use of the GNU gcov
20712 utility and generating summarized code coverage results. It is inspired
20713 by the Python coverage.py package, which provides a similar utility for
20714 Python.")
20715 (license license:bsd-3)))
20716
20717 (define-public python-owslib
20718 (package
20719 (name "python-owslib")
20720 (version "0.19.2")
20721 (source
20722 (origin
20723 (method url-fetch)
20724 (uri (pypi-uri "OWSLib" version))
20725 (sha256
20726 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
20727 (build-system python-build-system)
20728 (arguments
20729 '(#:tests? #f)) ; TODO: package dependencies required for tests.
20730 (synopsis "Interface for Open Geospatial Consortium web service")
20731 (description
20732 "OWSLib is a Python package for client programming with Open Geospatial
20733 Consortium (OGC) web service (hence OWS) interface standards, and their related
20734 content models.")
20735 (home-page "https://geopython.github.io/OWSLib/")
20736 (license license:bsd-3)))
20737
20738 (define-public python-docusign-esign
20739 (package
20740 (name "python-docusign-esign")
20741 (version "3.1.0")
20742 (source (origin
20743 (method url-fetch)
20744 (uri (pypi-uri "docusign_esign" version))
20745 (sha256
20746 (base32
20747 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
20748 (build-system python-build-system)
20749 ;; Testing requires undocumented setup changes, and so testing is disabled here.
20750 (arguments `(#:tests? #f))
20751 (propagated-inputs
20752 `(("python-certifi", python-certifi)
20753 ("python-six", python-six)
20754 ("python-dateutil", python-dateutil)
20755 ("python-urllib3", python-urllib3)
20756 ("python-pyjwt", python-pyjwt)
20757 ("python-cryptography", python-cryptography)
20758 ("python-nose", python-nose)))
20759 (synopsis "DocuSign Python Client")
20760 (description "The Official DocuSign Python Client Library used to interact
20761 with the eSign REST API. Send, sign, and approve documents using this client.")
20762 (home-page "https://www.docusign.com/devcenter")
20763 (license license:expat)))
20764
20765 (define-public python-xattr
20766 (package
20767 (name "python-xattr")
20768 (version "0.9.7")
20769 (source
20770 (origin
20771 (method url-fetch)
20772 (uri (pypi-uri "xattr" version))
20773 (sha256
20774 (base32
20775 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
20776 (build-system python-build-system)
20777 (propagated-inputs
20778 `(("python-cffi" ,python-cffi)))
20779 (home-page "https://github.com/xattr/xattr")
20780 (synopsis
20781 "Python wrapper for extended filesystem attributes")
20782 (description "This package provides a Python wrapper for using extended
20783 filesystem attributes. Extended attributes extend the basic attributes of files
20784 and directories in the file system. They are stored as name:data pairs
20785 associated with file system objects (files, directories, symlinks, etc).")
20786 (license license:expat)))
20787
20788 (define-public python-json-logger
20789 (package
20790 (name "python-json-logger")
20791 (version "0.1.11")
20792 (source
20793 (origin
20794 (method url-fetch)
20795 (uri (pypi-uri "python-json-logger" version))
20796 (sha256
20797 (base32
20798 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
20799 (build-system python-build-system)
20800 (home-page
20801 "https://github.com/madzak/python-json-logger")
20802 (synopsis "JSON log formatter in Python")
20803 (description "This library allows standard Python logging to output log data
20804 as JSON objects. With JSON we can make our logs more readable by machines and
20805 we can stop writing custom parsers for syslog-type records.")
20806 (license license:bsd-3)))
20807
20808 (define-public python-daiquiri
20809 (package
20810 (name "python-daiquiri")
20811 (version "2.1.1")
20812 (source
20813 (origin
20814 (method url-fetch)
20815 (uri (pypi-uri "daiquiri" version))
20816 (sha256
20817 (base32
20818 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
20819 (build-system python-build-system)
20820 (propagated-inputs
20821 `(("python-json-logger" ,python-json-logger)))
20822 (native-inputs
20823 `(("python-mock" ,python-mock)
20824 ("python-pytest" ,python-pytest)
20825 ("python-setuptools-scm" ,python-setuptools-scm)
20826 ("python-six" ,python-six)))
20827 (home-page "https://github.com/jd/daiquiri")
20828 (synopsis
20829 "Library to configure Python logging easily")
20830 (description "The daiquiri library provides an easy way to configure
20831 logging in Python. It also provides some custom formatters and handlers.")
20832 (license license:asl2.0)))
20833
20834 (define-public python-pifpaf
20835 (package
20836 (name "python-pifpaf")
20837 (version "2.5.0")
20838 (source
20839 (origin
20840 (method url-fetch)
20841 (uri (pypi-uri "pifpaf" version))
20842 (sha256
20843 (base32
20844 "1gy9p4nqf70fh38wn4icyfm7i9wrvx22wnjpg71g89wxbz27igaa"))))
20845 (build-system python-build-system)
20846 (arguments
20847 '(#:phases
20848 (modify-phases %standard-phases
20849 (replace 'check
20850 (lambda _
20851 (invoke "python" "setup.py" "testr" "--slowest"
20852 "--testr-args=until-failure"))))))
20853 (propagated-inputs
20854 `(("python-click" ,python-click)
20855 ("python-daiquiri" ,python-daiquiri)
20856 ("python-fixtures" ,python-fixtures)
20857 ("python-jinja2" ,python-jinja2)
20858 ("python-pbr" ,python-pbr)
20859 ("python-psutil" ,python-psutil)
20860 ("python-six" ,python-six)
20861 ("python-xattr" ,python-xattr)))
20862 (native-inputs
20863 `(("python-mock" ,python-mock)
20864 ("python-os-testr" ,python-os-testr)
20865 ("python-requests" ,python-requests)
20866 ("python-testrepository" ,python-testrepository)
20867 ("python-testtools" ,python-testtools)))
20868 (home-page "https://github.com/jd/pifpaf")
20869 (synopsis "Tools and fixtures to manage daemons for testing in Python")
20870 (description "Pifpaf is a suite of fixtures and a command-line tool that
20871 starts and stops daemons for a quick throw-away usage. This is typically
20872 useful when needing these daemons to run integration testing. It originally
20873 evolved from its precursor @code{overtest}.")
20874 (license license:asl2.0)))
20875
20876 (define-public python-pytest-check-links
20877 (package
20878 (name "python-pytest-check-links")
20879 (version "0.3.0")
20880 (source
20881 (origin
20882 (method url-fetch)
20883 ;; URI uses underscores
20884 (uri (pypi-uri "pytest_check_links" version))
20885 (sha256
20886 (base32
20887 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
20888 (build-system python-build-system)
20889 (propagated-inputs
20890 `(("python-docutils" ,python-docutils)
20891 ("python-html5lib" ,python-html5lib)
20892 ("python-nbconvert" ,python-nbconvert)
20893 ("python-nbformat" ,python-nbformat)
20894 ("python-pytest" ,python-pytest)
20895 ("python-six" ,python-six)))
20896 (native-inputs
20897 `(("python-pbr-minimal" ,python-pbr-minimal)))
20898 (home-page "https://github.com/minrk/pytest-check-links")
20899 (synopsis "Check links in files")
20900 (description "This package provides a pytest plugin that checks URLs for
20901 HTML-containing files.")
20902 (license license:bsd-3)))
20903
20904 (define-public python-json5
20905 (package
20906 (name "python-json5")
20907 (version "0.8.5")
20908 (source
20909 (origin
20910 ;; sample.json5 is missing from PyPi source tarball
20911 (method git-fetch)
20912 (uri (git-reference
20913 (url "https://github.com/dpranke/pyjson5")
20914 (commit (string-append "v" version))))
20915 (file-name (git-file-name name version))
20916 (sha256
20917 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
20918 (build-system python-build-system)
20919 (home-page "https://github.com/dpranke/pyjson5")
20920 (synopsis
20921 "Python implementation of the JSON5 data format")
20922 (description
20923 "JSON5 extends the JSON data interchange format to make it slightly more
20924 usable as a configuration language. This Python package implements parsing and
20925 dumping of JSON5 data structures.")
20926 (license license:asl2.0)))
20927
20928 (define-public python-frozendict
20929 (package
20930 (name "python-frozendict")
20931 (version "1.2")
20932 (source
20933 (origin
20934 (method url-fetch)
20935 (uri (pypi-uri "frozendict" version))
20936 (sha256
20937 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
20938 (build-system python-build-system)
20939 (home-page "https://github.com/slezica/python-frozendict")
20940 (synopsis "Simple immutable mapping for Python")
20941 (description
20942 "@dfn{frozendict} is an immutable wrapper around dictionaries that
20943 implements the complete mapping interface. It can be used as a drop-in
20944 replacement for dictionaries where immutability is desired.")
20945 (license license:expat)))
20946
20947 (define-public python-unpaddedbase64
20948 (package
20949 (name "python-unpaddedbase64")
20950 (version "1.1.0")
20951 (source
20952 (origin
20953 (method git-fetch)
20954 (uri (git-reference
20955 (url "https://github.com/matrix-org/python-unpaddedbase64")
20956 (commit (string-append "v" version))))
20957 (file-name (git-file-name name version))
20958 (sha256
20959 (base32
20960 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
20961 (build-system python-build-system)
20962 (home-page "https://pypi.org/project/unpaddedbase64/")
20963 (synopsis "Encode and decode Base64 without “=” padding")
20964 (description
20965 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
20966 using “=” characters. However this conveys no benefit so many protocols
20967 choose to use Base64 without the “=” padding.")
20968 (license license:asl2.0)))
20969
20970 (define-public python-py-cpuinfo
20971 (package
20972 (name "python-py-cpuinfo")
20973 (version "5.0.0")
20974 (source
20975 (origin
20976 (method url-fetch)
20977 (uri (pypi-uri "py-cpuinfo" version))
20978 (sha256
20979 (base32
20980 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
20981 (build-system python-build-system)
20982 (home-page "https://github.com/workhorsy/py-cpuinfo")
20983 (synopsis "Get CPU info with Python")
20984 (description
20985 "This Python module returns the CPU info by using the best sources of
20986 information for your operating system.")
20987 (license license:expat)))
20988
20989 (define-public python-canonicaljson
20990 (package
20991 (name "python-canonicaljson")
20992 (version "1.1.4")
20993 (source
20994 (origin
20995 (method url-fetch)
20996 (uri (pypi-uri "canonicaljson" version))
20997 (sha256
20998 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
20999 (build-system python-build-system)
21000 (propagated-inputs
21001 `(("python-six" ,python-six)
21002 ("python-frozendict" ,python-frozendict)
21003 ("python-simplejson" ,python-simplejson)))
21004 (home-page "https://github.com/matrix-org/python-canonicaljson")
21005 (synopsis "Canonical JSON")
21006 (description
21007 "Deterministically encode JSON.
21008
21009 @itemize
21010 @item Encodes objects and arrays as RFC 7159 JSON.
21011 @item Sorts object keys so that you get the same result each time.
21012 @item Has no insignificant whitespace to make the output as small as possible.
21013 @item Escapes only the characters that must be escaped, U+0000 to
21014 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
21015 @item Uses the shortest escape sequence for each escaped character.
21016 @item Encodes the JSON as UTF-8.
21017 @item Can encode frozendict immutable dictionaries.
21018 @end itemize")
21019 (license license:asl2.0)))
21020
21021 (define-public python-signedjson
21022 (package
21023 (name "python-signedjson")
21024 (version "1.1.1")
21025 (source
21026 (origin
21027 (method url-fetch)
21028 (uri (pypi-uri "signedjson" version))
21029 (sha256
21030 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
21031 (build-system python-build-system)
21032 (propagated-inputs
21033 `(("python-canonicaljson" ,python-canonicaljson)
21034 ("python-importlib-metadata" ,python-importlib-metadata)
21035 ("python-pynacl" ,python-pynacl)
21036 ("python-typing-extensions" ,python-typing-extensions)
21037 ("python-unpaddedbase64" ,python-unpaddedbase64)))
21038 (native-inputs
21039 `(("python-setuptools-scm" ,python-setuptools-scm)))
21040 (home-page "https://github.com/matrix-org/python-signedjson")
21041 (synopsis "Sign JSON objects with ED25519 signatures")
21042 (description
21043 "Sign JSON objects with ED25519 signatures.
21044
21045 @itemize
21046 @item More than one entity can sign the same object.
21047 @item Each entity can sign the object with more than one key making it easier to
21048 rotate keys
21049 @item ED25519 can be replaced with a different algorithm.
21050 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
21051 key.
21052 @end itemize")
21053 (license license:asl2.0)))
21054
21055 (define-public python-daemonize
21056 (package
21057 (name "python-daemonize")
21058 (version "2.5.0")
21059 (source
21060 (origin
21061 (method url-fetch)
21062 (uri (pypi-uri "daemonize" version))
21063 (sha256
21064 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
21065 (build-system python-build-system)
21066 (home-page "https://github.com/thesharp/daemonize")
21067 (synopsis "Library for writing system daemons in Python")
21068 (description "Daemonize is a library for writing system daemons in Python.")
21069 (license license:expat)))
21070
21071 (define-public python-pymacaroons
21072 (package
21073 (name "python-pymacaroons")
21074 (version "0.13.0")
21075 (source
21076 (origin
21077 (method url-fetch)
21078 (uri (pypi-uri "pymacaroons" version))
21079 (sha256
21080 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
21081 (build-system python-build-system)
21082 (propagated-inputs
21083 `(("python-six" ,python-six)
21084 ("python-pynacl" ,python-pynacl)))
21085 (home-page "https://github.com/ecordell/pymacaroons")
21086 (synopsis "Python Macaroon Library")
21087 (description
21088 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
21089 tokens, macaroons embed caveats that define specific authorization
21090 requirements for the target service, the service that issued the root macaroon
21091 and which is capable of verifying the integrity of macaroons it receives.
21092
21093 Macaroons allow for delegation and attenuation of authorization. They are
21094 simple and fast to verify, and decouple authorization policy from the
21095 enforcement of that policy.")
21096 (license license:expat)))
21097
21098 (define-public python-ldap3
21099 (package
21100 (name "python-ldap3")
21101 (version "2.7")
21102 (home-page "https://github.com/cannatag/ldap3")
21103 (source
21104 (origin
21105 (method git-fetch)
21106 (uri (git-reference (url home-page)
21107 (commit (string-append "v" version))))
21108 (file-name (git-file-name name version))
21109 (sha256
21110 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
21111 (build-system python-build-system)
21112 (arguments
21113 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
21114 #:phases (modify-phases %standard-phases
21115 (replace 'check
21116 (lambda* (#:key tests? #:allow-other-keys)
21117 (when tests?
21118 (invoke "nosetests" "-s" "test"))
21119 #t)))))
21120 (native-inputs
21121 `(("python-nose" ,python-nose)))
21122 (propagated-inputs
21123 `(("python-gssapi" ,python-gssapi)
21124 ("python-pyasn1" ,python-pyasn1)))
21125 (synopsis "Python LDAP client")
21126 (description
21127 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
21128 library.")
21129 (license license:lgpl3+)))
21130
21131 (define-public python-boltons
21132 (package
21133 (name "python-boltons")
21134 (version "20.0.0")
21135 (source
21136 (origin
21137 (method url-fetch)
21138 (uri (pypi-uri "boltons" version))
21139 (sha256
21140 (base32
21141 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
21142 (build-system python-build-system)
21143 (home-page "https://github.com/mahmoud/boltons")
21144 (synopsis "Extensions to the Python standard library")
21145 (description
21146 "Boltons is a set of over 230 pure-Python utilities in the same spirit
21147 as — and yet conspicuously missing from — the standard library, including:
21148
21149 @itemize
21150 @item Atomic file saving, bolted on with fileutils
21151 @item A highly-optimized OrderedMultiDict, in dictutils
21152 @item Two types of PriorityQueue, in queueutils
21153 @item Chunked and windowed iteration, in iterutils
21154 @item Recursive data structure iteration and merging, with iterutils.remap
21155 @item Exponential backoff functionality, including jitter, through
21156 iterutils.backoff
21157 @item A full-featured TracebackInfo type, for representing stack traces, in
21158 tbutils
21159 @end itemize")
21160 (license license:bsd-3)))
21161
21162 (define-public python-eliot
21163 (package
21164 (name "python-eliot")
21165 (version "1.12.0")
21166 (source
21167 (origin
21168 (method url-fetch)
21169 (uri (pypi-uri "eliot" version))
21170 (sha256
21171 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
21172 (build-system python-build-system)
21173 (arguments
21174 `(#:phases
21175 (modify-phases %standard-phases
21176 (add-after 'unpack 'remove-journald-support
21177 (lambda _
21178 (for-each delete-file
21179 '("eliot/tests/test_journald.py"
21180 "eliot/journald.py"))
21181 #t))
21182 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
21183 ;; remove command-line tool's tests. TODO eliot-prettyprint should
21184 ;; be installed and these tests should pass.
21185 (lambda _
21186 (delete-file "eliot/tests/test_prettyprint.py")
21187 #t)))))
21188 (propagated-inputs
21189 `(("python-boltons" ,python-boltons)
21190 ("python-pyrsistent" ,python-pyrsistent)
21191 ("python-six" ,python-six)
21192 ("python-zope-interface" ,python-zope-interface)))
21193 (native-inputs
21194 `(("python-black" ,python-black)
21195 ("python-coverage" ,python-coverage)
21196 ("python-dask" ,python-dask)
21197 ("python-flake8" ,python-flake8)
21198 ("python-hypothesis" ,python-hypothesis)
21199 ("python-pytest" ,python-pytest)
21200 ("python-setuptools" ,python-setuptools)
21201 ("python-sphinx" ,python-sphinx)
21202 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
21203 ("python-testtools" ,python-testtools)
21204 ("python-twine" ,python-twine)
21205 ("python-twisted" ,python-twisted)))
21206 (home-page "https://github.com/itamarst/eliot/")
21207 (synopsis "Eliot: the logging system that tells you why it happened")
21208 (description
21209 "@dfn{eliot} is a Python logging system that outputs causal chains of
21210 actions: actions can spawn other actions, and eventually they either succeed
21211 or fail. The resulting logs tell you the story of what your software did: what
21212 happened, and what caused it.")
21213 (license license:asl2.0)))
21214
21215 (define-public python-pem
21216 (package
21217 (name "python-pem")
21218 (version "20.1.0")
21219 (source
21220 (origin
21221 (method url-fetch)
21222 (uri (pypi-uri "pem" version))
21223 (sha256
21224 (base32
21225 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
21226 (build-system python-build-system)
21227 (native-inputs
21228 `(("python-certifi" ,python-certifi)
21229 ("python-coverage" ,python-coverage)
21230 ("python-pretend" ,python-pretend)
21231 ("python-pyopenssl" ,python-pyopenssl)
21232 ("python-pytest" ,python-pytest)
21233 ("python-sphinx" ,python-sphinx)
21234 ("python-twisted" ,python-twisted)))
21235 (home-page "https://pem.readthedocs.io/")
21236 (synopsis "Easy PEM file parsing in Python")
21237 (description
21238 "This package provides a Python module for parsing and splitting PEM files.")
21239 (license license:expat)))
21240
21241 (define-public python-txsni
21242 ;; We need a few commits on top of 0.1.9 for compatibility with newer
21243 ;; Python and OpenSSL.
21244 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
21245 (revision "0"))
21246 (package
21247 (name "python-txsni")
21248 (version (git-version "0.1.9" revision commit))
21249 (home-page "https://github.com/glyph/txsni")
21250 (source
21251 (origin
21252 (method git-fetch)
21253 (uri (git-reference (url home-page) (commit commit)))
21254 (file-name (git-file-name name version))
21255 (sha256
21256 (base32
21257 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
21258 (build-system python-build-system)
21259 (propagated-inputs
21260 `(("python-pyopenssl" ,python-pyopenssl)
21261 ("python-service-identity" ,python-service-identity)
21262 ("python-twisted" ,python-twisted)))
21263 (synopsis "Run TLS servers with Twisted")
21264 (description
21265 "This package provides an easy-to-use SNI endpoint for use
21266 with the Twisted web framework.")
21267 (license license:expat))))
21268
21269 (define-public python-txacme
21270 (package
21271 (name "python-txacme")
21272 (version "0.9.2")
21273 (source
21274 (origin
21275 (method url-fetch)
21276 (uri (pypi-uri "txacme" version))
21277 (sha256
21278 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
21279 (build-system python-build-system)
21280 (propagated-inputs
21281 `(("python-acme" ,python-acme)
21282 ("python-attrs" ,python-attrs)
21283 ("python-eliot" ,python-eliot)
21284 ("python-josepy" ,python-josepy)
21285 ("python-pem" ,python-pem)
21286 ("python-treq" ,python-treq)
21287 ("python-twisted" ,python-twisted)
21288 ("python-txsni" ,python-txsni)))
21289 (native-inputs
21290 `(("python-fixtures" ,python-fixtures)
21291 ("python-hypothesis" ,python-hypothesis)
21292 ("python-mock" ,python-mock)
21293 ("python-service-identity"
21294 ,python-service-identity)
21295 ("python-testrepository" ,python-testrepository)
21296 ("python-testscenarios" ,python-testscenarios)
21297 ("python-testtools" ,python-testtools)))
21298 (home-page "https://github.com/twisted/txacme")
21299 (synopsis "Twisted implexmentation of the ACME protocol")
21300 (description
21301 "ACME is Automatic Certificate Management Environment, a protocol that
21302 allows clients and certificate authorities to automate verification and
21303 certificate issuance. The ACME protocol is used by the free Let's Encrypt
21304 Certificate Authority.
21305
21306 txacme is an implementation of the protocol for Twisted, the event-driven
21307 networking engine for Python.")
21308 (license license:expat)))
21309
21310 (define-public python-pysaml2
21311 (package
21312 (name "python-pysaml2")
21313 (version "5.0.0")
21314 (source
21315 (origin
21316 (method url-fetch)
21317 (uri (pypi-uri "pysaml2" version))
21318 (sha256
21319 (base32
21320 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
21321 (build-system python-build-system)
21322 (propagated-inputs
21323 `(("python-cryptography" ,python-cryptography)
21324 ("python-dateutil" ,python-dateutil)
21325 ("python-defusedxml" ,python-defusedxml)
21326 ("python-pyopenssl" ,python-pyopenssl)
21327 ("python-pytz" ,python-pytz)
21328 ("python-requests" ,python-requests)
21329 ("python-six" ,python-six)))
21330 (home-page "https://idpy.org")
21331 (synopsis "Python implementation of SAML Version 2 Standard")
21332 (description
21333 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
21334 It contains all necessary pieces for building a SAML2 service provider or
21335 an identity provider. The distribution contains examples of both.
21336
21337 This package was originally written to work in a WSGI environment, but
21338 there are extensions that allow you to use it with other frameworks.")
21339 (license license:asl2.0)))
21340
21341 (define-public python-click-plugins
21342 (package
21343 (name "python-click-plugins")
21344 (version "1.1.1")
21345 (source
21346 (origin
21347 (method url-fetch)
21348 (uri (pypi-uri "click-plugins" version))
21349 (sha256
21350 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
21351 (build-system python-build-system)
21352 (native-inputs
21353 `(("python-pytest" ,python-pytest)))
21354 (propagated-inputs
21355 `(("python-click" ,python-click)))
21356 (synopsis "Extension for Click to register external CLI commands")
21357 (description "This package provides n extension module for Click to
21358 register external CLI commands via setuptools entry-points.")
21359 (home-page "https://github.com/click-contrib/click-plugins")
21360 (license license:bsd-3)))
21361
21362 (define-public python-diceware
21363 (package
21364 (name "python-diceware")
21365 (version "0.9.6")
21366 (source
21367 (origin
21368 (method url-fetch)
21369 (uri (pypi-uri "diceware" version))
21370 (sha256
21371 (base32
21372 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
21373 (build-system python-build-system)
21374 (native-inputs
21375 `(("python-coverage" ,python-coverage)
21376 ("python-pytest" ,python-pytest)
21377 ("python-pytest-runner" ,python-pytest-runner)))
21378 (home-page "https://github.com/ulif/diceware/")
21379 (synopsis "Generates memorable passphrases")
21380 (description "This package generates passphrases by concatenating words
21381 randomly picked from wordlists. It supports several sources of
21382 randomness (including real life dice) and different wordlists (including
21383 cryptographically signed ones).")
21384 (license license:gpl3+)))
21385
21386 (define-public pyzo
21387 (package
21388 (name "pyzo")
21389 (version "4.10.2")
21390 (source
21391 (origin
21392 (method url-fetch)
21393 (uri (pypi-uri "pyzo" version))
21394 (sha256
21395 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
21396 (build-system python-build-system)
21397 (arguments
21398 `(#:phases
21399 (modify-phases %standard-phases
21400 (add-before 'check 'fix-home-directory
21401 (lambda _
21402 ;; Tests fail with "Permission denied: '/homeless-shelter'".
21403 (setenv "HOME" "/tmp")
21404 #t)))
21405 ;; Tests fail with "Uncaught Python exception: invalid literal for
21406 ;; int() with base 10: 'test'".
21407 #:tests? #f))
21408 (propagated-inputs
21409 `(("python-pyqt" ,python-pyqt)))
21410 (home-page "https://pyzo.org")
21411 (synopsis
21412 "Python IDE for scientific computing")
21413 (description
21414 "Pyzo is a Python IDE focused on interactivity and introspection,
21415 which makes it very suitable for scientific computing. Its practical
21416 design is aimed at simplicity and efficiency.
21417
21418 It consists of two main components, the editor and the shell, and uses
21419 a set of pluggable tools to help the programmer in various ways. Some
21420 example tools are source structure, project manager, interactive help,
21421 workspace...")
21422 (license license:bsd-2)))
21423
21424 (define-public python-osc
21425 (package
21426 (name "python-osc")
21427 (version "1.7.4")
21428 (source
21429 (origin
21430 (method url-fetch)
21431 (uri (pypi-uri "python-osc" version))
21432 (sha256
21433 (base32
21434 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
21435 (build-system python-build-system)
21436 (home-page "https://github.com/attwad/python-osc")
21437 (synopsis "Open Sound Control server and client implementations")
21438 (description
21439 "@code{python-osc} is a pure Python library with no external
21440 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
21441 Open Sound Control 1.0} specification.")
21442 (license license:unlicense)))
21443
21444 (define-public python-voluptuous
21445 (package
21446 (name "python-voluptuous")
21447 (version "0.11.7")
21448 (source
21449 (origin
21450 (method url-fetch)
21451 (uri (pypi-uri "voluptuous" version))
21452 (sha256
21453 (base32
21454 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
21455 (build-system python-build-system)
21456 (native-inputs
21457 `(("python-nose" ,python-nose)))
21458 (home-page "https://github.com/alecthomas/voluptuous")
21459 (synopsis "Python data validation library")
21460 (description
21461 "Voluptuous is a Python data validation library. It is primarily
21462 intended for validating data coming into Python as JSON, YAML, etc.")
21463 (license license:bsd-3)))
21464
21465 (define-public python-cmd2
21466 (package
21467 (name "python-cmd2")
21468 (version "1.0.2")
21469 (source
21470 (origin
21471 (method url-fetch)
21472 (uri (pypi-uri "cmd2" version))
21473 (sha256
21474 (base32
21475 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
21476 (build-system python-build-system)
21477 (propagated-inputs
21478 `(("python-attrs" ,python-attrs)
21479 ("python-colorama" ,python-colorama)
21480 ("python-pyperclip" ,python-pyperclip)
21481 ("python-wcwidth" ,python-wcwidth)))
21482 (native-inputs
21483 `(("python-codecov" ,python-codecov)
21484 ("python-coverage" ,python-coverage)
21485 ("python-doc8" ,python-doc8)
21486 ("python-flake8" ,python-flake8)
21487 ("python-invoke" ,python-invoke)
21488 ("python-mock" ,python-mock)
21489 ("python-pytest" ,python-pytest)
21490 ("python-pytest-cov" ,python-pytest-cov)
21491 ("python-pytest-mock" ,python-pytest-mock)
21492 ("python-setuptools-scm" ,python-setuptools-scm)
21493 ("python-sphinx" ,python-sphinx)
21494 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
21495 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
21496 ("python-tox" ,python-tox)
21497 ("python-twine" ,python-twine)
21498 ("which" ,which)))
21499 (home-page "https://github.com/python-cmd2/cmd2")
21500 (synopsis "Tool for building interactive command line applications")
21501 (description
21502 "Cmd2 is a tool for building interactive command line applications in
21503 Python. Its goal is to make it quick and easy for developers to build
21504 feature-rich and user-friendly interactive command line applications. It
21505 provides a simple API which is an extension of Python's built-in @code{cmd}
21506 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
21507 make your life easier and eliminates much of the boilerplate code which would
21508 be necessary when using @code{cmd}.")
21509 (license license:expat)))
21510
21511 (define-public python-pytidylib
21512 (package
21513 (name "python-pytidylib")
21514 (version "0.3.2")
21515 (source (origin
21516 (method url-fetch)
21517 (uri (pypi-uri "pytidylib" version))
21518 (sha256
21519 (base32
21520 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
21521 (build-system python-build-system)
21522 (arguments
21523 '(#:phases
21524 (modify-phases %standard-phases
21525 (add-before 'build 'qualify-libtidy
21526 (lambda* (#:key inputs #:allow-other-keys)
21527 (let ((libtidy (string-append (assoc-ref inputs "tidy")
21528 "/lib/libtidy.so")))
21529 (substitute* "tidylib/tidy.py"
21530 (("ctypes\\.util\\.find_library\\('tidy'\\)")
21531 (format #f "'~a'" libtidy)))
21532 #t))))))
21533 (inputs `(("tidy" ,tidy)))
21534 (home-page "https://github.com/countergram/pytidylib")
21535 (synopsis "Python wrapper for HTML Tidy library")
21536 (description
21537 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
21538 allows you, from Python code, to “fix” invalid (X)HTML markup.")
21539 (license license:expat)))
21540
21541 (define-public python2-pytidylib
21542 (package-with-python2 python-pytidylib))
21543
21544 (define-public python-mujson
21545 (package
21546 (name "python-mujson")
21547 (version "1.4")
21548 (source
21549 (origin
21550 (method url-fetch)
21551 (uri (pypi-uri "mujson" version))
21552 (sha256
21553 (base32
21554 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
21555 (build-system python-build-system)
21556 (home-page "https://github.com/mattgiles/mujson")
21557 (synopsis "Use the fastest JSON functions available at import time")
21558 (description "This packages selects the fastest JSON functions available
21559 at import time.")
21560 (license license:expat)))
21561
21562 (define-public python-bashlex
21563 (package
21564 (name "python-bashlex")
21565 (version "0.14")
21566 (source
21567 (origin
21568 (method url-fetch)
21569 (uri (pypi-uri "bashlex" version))
21570 (sha256
21571 (base32
21572 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
21573 (build-system python-build-system)
21574 (arguments
21575 `(#:phases
21576 (modify-phases %standard-phases
21577 (add-before 'build 'pregenerate-yacc-tables
21578 (lambda _
21579 ;; parser.py caches tables, which attempts to write to site lib
21580 ;; see https://github.com/idank/bashlex/issues/51
21581 (invoke "python" "-c" "import bashlex"))))))
21582 (home-page
21583 "https://github.com/idank/bashlex")
21584 (synopsis "Python parser for bash")
21585 (description "@code{bashlex} is a Python port of the parser used
21586 internally by GNU bash.
21587
21588 For the most part it's transliterated from C, the major differences are:
21589
21590 @itemize
21591 @item it does not execute anything
21592 @item it is reentrant
21593 @item it generates a complete AST
21594 @end itemize
21595 ")
21596 (license license:gpl3+)))
21597
21598 (define-public python-jinxed
21599 (package
21600 (name "python-jinxed")
21601 (version "1.0.0")
21602 (source
21603 (origin
21604 (method url-fetch)
21605 (uri (pypi-uri "jinxed" version))
21606 (sha256
21607 (base32
21608 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
21609 (build-system python-build-system)
21610 (arguments
21611 '(#:phases
21612 (modify-phases %standard-phases
21613 (add-before 'check 'set-environment-variables
21614 (lambda* (#:key inputs #:allow-other-keys)
21615 (let ((ncurses (assoc-ref inputs "ncurses")))
21616 (setenv "TERM" "LINUX")
21617 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
21618 #t))))
21619 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
21620 (native-inputs
21621 `(("ncurses" ,ncurses)))
21622 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
21623 (synopsis "Jinxed Terminal Library")
21624 (description
21625 "Jinxed is an implementation of a subset of the Python curses library.")
21626 (license license:mpl2.0)))
21627
21628 (define-public python-blessed
21629 (package
21630 (name "python-blessed")
21631 (version "1.17.8")
21632 (source
21633 (origin
21634 (method url-fetch)
21635 (uri (pypi-uri "blessed" version))
21636 (sha256
21637 (base32
21638 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
21639 (modules '((guix build utils)))
21640 (snippet
21641 '(begin
21642 ;; Don't get hung up on Windows test failures.
21643 (delete-file "blessed/win_terminal.py") #t))))
21644 (build-system python-build-system)
21645 (propagated-inputs
21646 `(("python-jinxed" ,python-jinxed)
21647 ("python-six" ,python-six)
21648 ("python-wcwidth" ,python-wcwidth)))
21649 (native-inputs
21650 `(("python-mock" ,python-mock)
21651 ("python-pytest" ,python-pytest)))
21652 (home-page "https://github.com/jquast/blessed")
21653 (synopsis "Wrapper around terminal capabilities")
21654 (description
21655 "Blessed is a thin, practical wrapper around terminal styling, screen
21656 positioning, and keyboard input.")
21657 (license license:expat)))
21658
21659 (define-public python-readme-renderer
21660 (package
21661 (name "python-readme-renderer")
21662 (version "26.0")
21663 (source
21664 (origin
21665 (method url-fetch)
21666 (uri (pypi-uri "readme_renderer" version))
21667 (sha256
21668 (base32
21669 "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
21670 (build-system python-build-system)
21671 (propagated-inputs
21672 `(("python-bleach" ,python-bleach)
21673 ("python-docutils" ,python-docutils)
21674 ("python-pygments" ,python-pygments)
21675 ("python-six" ,python-six)))
21676 (native-inputs
21677 `(("python-mock" ,python-mock)
21678 ("python-pytest" ,python-pytest)))
21679 (home-page "https://github.com/pypa/readme_renderer")
21680 (synopsis "Render README files in Warehouse")
21681 (description
21682 "Readme Renderer is a library that will safely render arbitrary README
21683 files into HTML. It is designed to be used in Warehouse to render the
21684 @code{long_description} for packages. It can handle Markdown, reStructuredText,
21685 and plain text.")
21686 (license license:asl2.0)))
21687
21688 (define-public python-lazr-delegates
21689 (package
21690 (name "python-lazr-delegates")
21691 (version "2.0.4")
21692 (source
21693 (origin
21694 (method url-fetch)
21695 (uri (pypi-uri "lazr.delegates" version))
21696 (sha256
21697 (base32
21698 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
21699 (build-system python-build-system)
21700 (arguments
21701 '(#:phases
21702 (modify-phases %standard-phases
21703 (replace 'check
21704 (lambda _
21705 (invoke "python" "setup.py" "nosetests"))))))
21706 (native-inputs
21707 `(("python-nose" ,python-nose)))
21708 (propagated-inputs
21709 `(("python-zope-interface" ,python-zope-interface)))
21710 (home-page "https://launchpad.net/lazr.delegates")
21711 (synopsis "Easily write objects that delegate behavior")
21712 (description
21713 "The @code{lazr.delegates} package makes it easy to write objects that
21714 delegate behavior to another object. The new object adds some property or
21715 behavior on to the other object, while still providing the underlying interface,
21716 and delegating behavior.")
21717 (license license:lgpl3)))
21718
21719 (define-public python-lazr-config
21720 (package
21721 (name "python-lazr-config")
21722 (version "2.2.2")
21723 (source
21724 (origin
21725 (method url-fetch)
21726 (uri (pypi-uri "lazr.config" version))
21727 (sha256
21728 (base32
21729 "11xpddgyhyj7sf27wbmrq5lnqk21wnprx3ajycgwlxjamh6sgffd"))))
21730 (build-system python-build-system)
21731 (arguments
21732 '(#:phases
21733 (modify-phases %standard-phases
21734 (replace 'check
21735 (lambda _
21736 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
21737 (native-inputs
21738 `(("python-nose" ,python-nose)))
21739 (propagated-inputs
21740 `(("python-lazr-delegates" ,python-lazr-delegates)
21741 ("python-zope-interface" ,python-zope-interface)))
21742 (home-page "https://launchpad.net/lazr.config")
21743 (synopsis "Create configuration schemas and process and validate configurations")
21744 (description
21745 "The LAZR config system is typically used to manage process configuration.
21746 Process configuration is for saying how things change when we run systems on
21747 different machines, or under different circumstances. This system uses ini-like
21748 file format of section, keys, and values. The config file supports inheritance
21749 to minimize duplication of information across files. The format supports schema
21750 validation.")
21751 (license license:lgpl3)))
21752
21753 (define-public python-flufl-bounce
21754 (package
21755 (name "python-flufl-bounce")
21756 (version "3.0.1")
21757 (source
21758 (origin
21759 (method url-fetch)
21760 (uri (pypi-uri "flufl.bounce" version))
21761 (sha256
21762 (base32
21763 "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
21764 (build-system python-build-system)
21765 (propagated-inputs
21766 `(("python-atpublic" ,python-atpublic)
21767 ("python-zope-interface" ,python-zope-interface)))
21768 (native-inputs
21769 `(("python-nose2" ,python-nose2)))
21770 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
21771 (synopsis "Email bounce detectors")
21772 (description "The @code{flufl.bounce} library provides a set of heuristics
21773 and an API for detecting the original bouncing email addresses from a bounce
21774 message. Many formats found in the wild are supported, as are VERP and
21775 RFC 3464.")
21776 (license (list license:asl2.0
21777 license:lgpl3)))) ; only for setup_headers.py
21778
21779 (define-public python-flufl-i18n
21780 (package
21781 (name "python-flufl-i18n")
21782 (version "3.0")
21783 (source
21784 (origin
21785 (method url-fetch)
21786 (uri (pypi-uri "flufl.i18n" version))
21787 (sha256
21788 (base32
21789 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
21790 (build-system python-build-system)
21791 (propagated-inputs
21792 `(("python-atpublic" ,python-atpublic)))
21793 (home-page "https://flufli18n.readthedocs.io")
21794 (synopsis "API for Python internationalization")
21795 (description
21796 "This package provides a high level, convenient API for managing
21797 internationalization translation contexts in Python application. There is a
21798 simple API for single-context applications, such as command line scripts which
21799 only need to translate into one language during the entire course of thei
21800 execution. There is a more flexible, but still convenient API for multi-context
21801 applications, such as servers, which may need to switch language contexts for
21802 different tasks.")
21803 (license license:asl2.0)))
21804
21805 (define-public python-flufl-lock
21806 (package
21807 (name "python-flufl-lock")
21808 (version "4.0")
21809 (source
21810 (origin
21811 (method url-fetch)
21812 (uri (pypi-uri "flufl.lock" version))
21813 (sha256
21814 (base32
21815 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
21816 (build-system python-build-system)
21817 (propagated-inputs
21818 `(("python-atpublic" ,python-atpublic)
21819 ("python-psutil" ,python-psutil)))
21820 (home-page "https://flufllock.readthedocs.io")
21821 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
21822 (description
21823 "The @dfn{flufl.lock} package provides NFS-safe file locking with
21824 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
21825 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
21826 and have a maximum lifetime built-in.")
21827 (license (list license:asl2.0
21828 license:lgpl3)))) ; only for setup_helpers.py
21829
21830 (define-public python-flufl-testing
21831 (package
21832 (name "python-flufl-testing")
21833 (version "0.8")
21834 (source
21835 (origin
21836 (method url-fetch)
21837 (uri (pypi-uri "flufl.testing" version))
21838 (sha256
21839 (base32
21840 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
21841 (build-system python-build-system)
21842 (native-inputs
21843 `(("python-nose2" ,python-nose2)))
21844 (home-page "https://gitlab.com/warsaw/flufl.testing")
21845 (synopsis "Collection of test tool plugins")
21846 (description
21847 "This package contains a small collection of test tool plugins for
21848 @code{nose2} and @code{flake8}.")
21849 (license license:asl2.0)))
21850
21851 (define-public python-devtools
21852 (package
21853 (name "python-devtools")
21854 (version "0.6")
21855 (source
21856 (origin
21857 (method git-fetch)
21858 (uri (git-reference
21859 (url "https://github.com/samuelcolvin/python-devtools")
21860 (commit (string-append "v" version))))
21861 (file-name (git-file-name name version))
21862 (sha256
21863 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
21864 (build-system python-build-system)
21865 (native-inputs
21866 `(("python-pytest" ,python-pytest)
21867 ("python-pytest-mock" ,python-pytest-mock)))
21868 (propagated-inputs
21869 `(("python-pygments" ,python-pygments)))
21870 (arguments
21871 `(#:phases (modify-phases %standard-phases
21872 (replace 'check
21873 (lambda _
21874 (invoke "pytest")
21875 #t)))))
21876 (home-page "https://github.com/samuelcolvin/python-devtools")
21877 (synopsis "Debug command and development tools")
21878 (description
21879 "This package provides a debug print command and other development tools.
21880 It adds a simple and readable way to print stuff during development.")
21881 (license license:expat)))
21882
21883 (define-public python-dateparser
21884 (package
21885 (name "python-dateparser")
21886 (version "0.7.6")
21887 (source
21888 (origin
21889 (method url-fetch)
21890 (uri (pypi-uri "dateparser" version))
21891 (sha256
21892 (base32
21893 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
21894 (build-system python-build-system)
21895 (inputs
21896 `(("tzdata" ,tzdata)))
21897 (propagated-inputs
21898 `(("python-dateutil" ,python-dateutil)
21899 ("python-pytz" ,python-pytz)
21900 ("python-regex" ,python-regex)
21901 ("python-ruamel.yaml" ,python-ruamel.yaml)
21902 ("python-tzlocal" ,python-tzlocal)))
21903 (native-inputs
21904 `(("python-mock" ,python-mock)
21905 ("python-parameterized" ,python-parameterized)))
21906 (arguments
21907 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
21908 #:tests? #f
21909 #:phases
21910 (modify-phases %standard-phases
21911 (add-before 'check 'set-check-environment
21912 (lambda* (#:key inputs #:allow-other-keys)
21913 (setenv "TZ" "UTC")
21914 (setenv "TZDIR"
21915 (string-append (assoc-ref inputs "tzdata")
21916 "/share/zoneinfo"))
21917 #t)))))
21918 (home-page "https://github.com/scrapinghub/dateparser")
21919 (synopsis
21920 "Date parsing library designed to parse dates from HTML pages")
21921 (description
21922 "@code{python-dateparser} provides modules to easily parse localized
21923 dates in almost any string formats commonly found on web pages.")
21924 (license license:bsd-3)))
21925
21926 (define-public python-dparse
21927 (package
21928 (name "python-dparse")
21929 (version "0.5.1")
21930 (source
21931 (origin
21932 (method url-fetch)
21933 (uri (pypi-uri "dparse" version))
21934 (sha256
21935 (base32
21936 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
21937 (build-system python-build-system)
21938 (native-inputs
21939 `(("python-pytest" ,python-pytest)))
21940 (propagated-inputs
21941 `(("python-packaging" ,python-packaging)
21942 ("python-pyyaml" ,python-pyyaml)
21943 ("python-toml" ,python-toml)))
21944 (home-page "https://github.com/pyupio/dparse")
21945 (synopsis "Parser for Python dependency files")
21946 (description "This package provides a parser for Python dependency files.")
21947 (license license:expat)))
21948
21949 (define-public python-safety
21950 (package
21951 (name "python-safety")
21952 (version "1.9.0")
21953 (source
21954 (origin
21955 (method url-fetch)
21956 (uri (pypi-uri "safety" version))
21957 (sha256
21958 (base32
21959 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
21960 (build-system python-build-system)
21961 (arguments
21962 `(#:phases
21963 (modify-phases %standard-phases
21964 (add-after 'unpack 'disable-tests
21965 (lambda _
21966 (substitute* "tests/test_safety.py"
21967 ;; requires network
21968 (("def test_check_live") "def _test_check_live"))
21969 #t)))))
21970 (propagated-inputs
21971 `(("python-click" ,python-click)
21972 ("python-dparse" ,python-dparse)
21973 ("python-packaging" ,python-packaging)
21974 ("python-requests" ,python-requests)))
21975 (home-page "https://github.com/pyupio/safety")
21976 (synopsis "Check installed dependencies for known vulnerabilities")
21977 (description "Safety checks installed dependencies for known vulnerabilities.
21978 By default it uses the open Python vulnerability database Safety DB.")
21979 (license license:expat)))
21980
21981 (define-public python-pypandoc
21982 (package
21983 (name "python-pypandoc")
21984 (version "1.5")
21985 (source
21986 (origin
21987 (method url-fetch)
21988 (uri (pypi-uri "pypandoc" version))
21989 (sha256
21990 (base32
21991 "1zvn9764cf7kkjkmr9gw6wc8adpk06qxr1rhxwa9pg0zmdvrk90l"))))
21992 (build-system python-build-system)
21993 (inputs
21994 `(("pandoc" ,pandoc)
21995 ("pandoc-citeproc" ,pandoc-citeproc)))
21996 (propagated-inputs
21997 `(("wheel" ,python-wheel)))
21998 (native-inputs
21999 `(("texlive" ,(texlive-union (list texlive-amsfonts
22000 texlive-fonts-ec
22001 texlive-latex-hyperref
22002 texlive-latex-oberdiek
22003 texlive-lm
22004 texlive-xcolor)))))
22005 (arguments
22006 `(#:phases
22007 (modify-phases %standard-phases
22008 (add-before 'check 'disable-tests
22009 (lambda _
22010 ;; Disable test requiring network access
22011 (substitute* "tests.py"
22012 (("test_basic_conversion_from_http_url")
22013 "skip_test_basic_conversion_from_http_url"))
22014 ;; Needed by texlive-union to generate fonts
22015 (setenv "HOME" "/tmp")
22016 #t)))))
22017 (home-page "https://github.com/bebraw/pypandoc")
22018 (synopsis "Python wrapper for pandoc")
22019 (description "pypandoc is a thin Python wrapper around pandoc
22020 and pandoc-citeproc.")
22021 (license license:expat)))