gnu: python-ipykernel: Update to 5.5.3.
[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, 2021 Eric Bavier <bavier@posteo.net>
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, 2021 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, 2021 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017, 2020 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, 2021 Marius Bakke <marius@gnu.org>
30 ;;; Copyright © 2016, 2017, 2021 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, 2021 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016–2021 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, 2021 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, 2021 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 © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
60 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
61 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
62 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
63 ;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
64 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
65 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
66 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
67 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
68 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
69 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
70 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
71 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
72 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
73 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
74 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
75 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
76 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
77 ;;; Copyright © 2020, 2021 Alexandros Theodotou <alex@zrythm.org>
78 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
79 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
80 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
81 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
82 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
83 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
84 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
85 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
86 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
87 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
88 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
89 ;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
90 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
91 ;;; Copyright © 2020 Bonface Munyoki Kilyungi <bonfacemunyoki@gmail.com>
92 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
93 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
94 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
95 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
96 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
97 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
98 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
99 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
100 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
101 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
102 ;;;
103 ;;; This file is part of GNU Guix.
104 ;;;
105 ;;; GNU Guix is free software; you can redistribute it and/or modify it
106 ;;; under the terms of the GNU General Public License as published by
107 ;;; the Free Software Foundation; either version 3 of the License, or (at
108 ;;; your option) any later version.
109 ;;;
110 ;;; GNU Guix is distributed in the hope that it will be useful, but
111 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
112 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
113 ;;; GNU General Public License for more details.
114 ;;;
115 ;;; You should have received a copy of the GNU General Public License
116 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
117
118 (define-module (gnu packages python-xyz)
119 #:use-module ((guix licenses) #:prefix license:)
120 #:use-module (gnu packages)
121 #:use-module (gnu packages algebra)
122 #:use-module (gnu packages adns)
123 #:use-module (gnu packages aidc)
124 #:use-module (gnu packages attr)
125 #:use-module (gnu packages backup)
126 #:use-module (gnu packages bash)
127 #:use-module (gnu packages check)
128 #:use-module (gnu packages cmake)
129 #:use-module (gnu packages compression)
130 #:use-module (gnu packages crypto)
131 #:use-module (gnu packages databases)
132 #:use-module (gnu packages dbm)
133 #:use-module (gnu packages djvu)
134 #:use-module (gnu packages docker)
135 #:use-module (gnu packages enchant)
136 #:use-module (gnu packages file)
137 #:use-module (gnu packages fontutils)
138 #:use-module (gnu packages gcc)
139 #:use-module (gnu packages geo)
140 #:use-module (gnu packages ghostscript)
141 #:use-module (gnu packages gl)
142 #:use-module (gnu packages glib)
143 #:use-module (gnu packages gnome)
144 #:use-module (gnu packages gnupg)
145 #:use-module (gnu packages graphviz)
146 #:use-module (gnu packages graphics)
147 #:use-module (gnu packages gsasl)
148 #:use-module (gnu packages gstreamer)
149 #:use-module (gnu packages gtk)
150 #:use-module (gnu packages haskell-xyz)
151 #:use-module (gnu packages icu4c)
152 #:use-module (gnu packages image)
153 #:use-module (gnu packages imagemagick)
154 #:use-module (gnu packages kerberos)
155 #:use-module (gnu packages libevent)
156 #:use-module (gnu packages libffi)
157 #:use-module (gnu packages libidn)
158 #:use-module (gnu packages linux)
159 #:use-module (gnu packages llvm)
160 #:use-module (gnu packages man)
161 #:use-module (gnu packages markup)
162 #:use-module (gnu packages maths)
163 #:use-module (gnu packages monitoring)
164 #:use-module (gnu packages multiprecision)
165 #:use-module (gnu packages networking)
166 #:use-module (gnu packages ncurses)
167 #:use-module (gnu packages openstack)
168 #:use-module (gnu packages pcre)
169 #:use-module (gnu packages pdf)
170 #:use-module (gnu packages perl)
171 #:use-module (gnu packages photo)
172 #:use-module (gnu packages pkg-config)
173 #:use-module (gnu packages python)
174 #:use-module (gnu packages python-build)
175 #:use-module (gnu packages python-check)
176 #:use-module (gnu packages python-compression)
177 #:use-module (gnu packages python-crypto)
178 #:use-module (gnu packages python-science)
179 #:use-module (gnu packages python-web)
180 #:use-module (gnu packages qt)
181 #:use-module (gnu packages rdf)
182 #:use-module (gnu packages readline)
183 #:use-module (gnu packages sdl)
184 #:use-module (gnu packages search)
185 #:use-module (gnu packages scanner)
186 #:use-module (gnu packages shells)
187 #:use-module (gnu packages sphinx)
188 #:use-module (gnu packages ssh)
189 #:use-module (gnu packages swig)
190 #:use-module (gnu packages terminals)
191 #:use-module (gnu packages tex)
192 #:use-module (gnu packages texinfo)
193 #:use-module (gnu packages textutils)
194 #:use-module (gnu packages time)
195 #:use-module (gnu packages tls)
196 #:use-module (gnu packages version-control)
197 #:use-module (gnu packages video)
198 #:use-module (gnu packages web)
199 #:use-module (gnu packages wxwidgets)
200 #:use-module (gnu packages base)
201 #:use-module (gnu packages xml)
202 #:use-module (gnu packages xorg)
203 #:use-module (gnu packages xdisorg)
204 #:use-module (gnu packages tcl)
205 #:use-module (gnu packages bdw-gc)
206 #:use-module (gnu packages serialization)
207 #:use-module (guix packages)
208 #:use-module (guix download)
209 #:use-module (guix git-download)
210 #:use-module (guix hg-download)
211 #:use-module (guix utils)
212 #:use-module (guix build-system gnu)
213 #:use-module (guix build-system cmake)
214 #:use-module (guix build-system python)
215 #:use-module (guix build-system trivial)
216 #:use-module (srfi srfi-1)
217 #:use-module (srfi srfi-26))
218
219 (define-public python-slixmpp
220 (package
221 (name "python-slixmpp")
222 (version "1.5.2")
223 (source
224 (origin
225 (method git-fetch)
226 (uri
227 (git-reference
228 (url "https://lab.louiz.org/poezio/slixmpp.git")
229 (commit
230 (string-append "slix-" version))))
231 (file-name
232 (git-file-name name version))
233 (sha256
234 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
235 (build-system python-build-system)
236 (arguments
237 `(#:phases
238 (modify-phases %standard-phases
239 (add-after 'unpack 'patch
240 (lambda _
241 (substitute* "setup.py"
242 (("'CC', 'cc'")
243 "'CC', 'gcc'"))
244 #t)))))
245 (native-inputs
246 `(("cython" ,python-cython)
247 ("gnupg" ,gnupg)
248 ("pkg-config" ,pkg-config)))
249 (propagated-inputs
250 `(("python-aiodns" ,python-aiodns)
251 ("python-aiohttp" ,python-aiohttp)
252 ("python-pyasn1" ,python-pyasn1)
253 ("python-pyasn1-modules" ,python-pyasn1-modules)))
254 (inputs
255 `(("libidn" ,libidn)
256 ("python" ,python))) ; We are building a Python extension.
257 (synopsis "XMPP library without threads")
258 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
259 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
260 socket handling, the timers, the events dispatching) in order to remove all
261 threads.")
262 (home-page "https://lab.louiz.org/poezio/slixmpp")
263 (license license:expat)))
264
265 (define-public python-tenacity
266 (package
267 (name "python-tenacity")
268 (version "6.1.0")
269 (source (origin
270 (method url-fetch)
271 (uri (pypi-uri "tenacity" version))
272 (sha256
273 (base32
274 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
275 (build-system python-build-system)
276 (native-inputs
277 `(("python-setuptools-scm" ,python-setuptools-scm)
278 ("python-sphinx" ,python-sphinx)
279 ("python-tornado" ,python-tornado)
280 ("python-pytest" ,python-pytest)))
281 (propagated-inputs
282 `(("python-six" ,python-six)))
283 (arguments
284 `(#:phases (modify-phases %standard-phases
285 (replace 'check
286 (lambda _
287 (invoke "pytest")
288 #t)))))
289 (home-page "https://github.com/jd/tenacity")
290 (synopsis "Retrying library for python")
291 (description "Tenacity is a general-purpose python library to simplify the
292 task of adding retry behavior to just about anything.")
293 (license license:asl2.0)))
294
295 (define-public python-pytelegrambotapi
296 (package
297 (name "python-pytelegrambotapi")
298 (version "3.7.4")
299 (source
300 (origin
301 (method git-fetch)
302 (uri (git-reference
303 (url "https://github.com/eternnoir/pyTelegramBotAPI")
304 (commit version)))
305 (file-name (git-file-name name version))
306 (sha256
307 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
308 (build-system python-build-system)
309 (arguments
310 `(#:phases
311 (modify-phases %standard-phases
312 (replace 'check
313 (lambda* (#:key tests? #:allow-other-keys)
314 (when tests?
315 (with-directory-excursion "tests"
316 (invoke "py.test")))
317 #t)))))
318 (propagated-inputs
319 `(("python-requests" ,python-requests)))
320 (native-inputs
321 `(("python-pytest" ,python-pytest)))
322 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
323 (synopsis "Python Telegram bot api")
324 (description "This package provides a simple, but extensible Python
325 implementation for the Telegram Bot API.")
326 (license license:gpl2)))
327
328 (define-public python-colorlog
329 (package
330 (name "python-colorlog")
331 (version "4.1.0")
332 (source (origin
333 (method url-fetch)
334 (uri (pypi-uri "colorlog" version))
335 (sha256
336 (base32
337 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
338 (build-system python-build-system)
339 (native-inputs
340 `(("python-pytest" ,python-pytest)))
341 (arguments
342 `(#:phases (modify-phases %standard-phases
343 (replace 'check
344 (lambda _
345 ;; Extend PYTHONPATH so the built package will be found.
346 (setenv "PYTHONPATH"
347 (string-append (getcwd) "/build/lib:"
348 (getenv "PYTHONPATH")))
349 (invoke "pytest" "-p" "no:logging")
350 #t)))))
351 (home-page "https://github.com/borntyping/python-colorlog")
352 (synopsis "Log formatting with colors for python")
353 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
354 with Python's logging module that outputs records using terminal colors.")
355 (license license:expat)))
356
357 (define-public python-pyprind
358 (package
359 (name "python-pyprind")
360 (version "2.11.2")
361 (source (origin
362 (method url-fetch)
363 (uri (pypi-uri "PyPrind" version))
364 (sha256
365 (base32
366 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
367 (build-system python-build-system)
368 (propagated-inputs
369 `(("python-psutil" ,python-psutil)))
370 (home-page "https://github.com/rasbt/pyprind")
371 (synopsis "Python Progress Bar and Percent Indicator Utility")
372 (description "The PyPrind (Python Progress Indicator) module provides a
373 progress bar and a percentage indicator object that let you track the progress
374 of a loop structure or other iterative computation.")
375 (license license:bsd-3)))
376
377 (define-public python-gphoto2
378 (package
379 (name "python-gphoto2")
380 (version "2.2.1")
381 (source (origin
382 (method url-fetch)
383 (uri (pypi-uri "gphoto2" version))
384 (sha256
385 (base32
386 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
387 (build-system python-build-system)
388 (native-inputs
389 `(("pkg-config" ,pkg-config)))
390 (inputs
391 `(("libgphoto2" ,libgphoto2)))
392 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
393 (synopsis "Python interface to libgphoto2")
394 (description "@code{python-gphoto2} is a comprehensive Python interface
395 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
396 automatically generate the interface code.")
397 (license license:gpl3+)))
398
399 (define-public python-colour
400 (package
401 (name "python-colour")
402 (version "0.1.5")
403 (source (origin
404 (method url-fetch)
405 (uri (pypi-uri "colour" version))
406 (sha256
407 (base32
408 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
409 (build-system python-build-system)
410 (native-inputs
411 `(("python-d2to1" ,python-d2to1)))
412 (home-page "https://github.com/vaab/colour")
413 (synopsis "Convert and manipulate various color representations")
414 (description "Pythonic way to manipulate color representations (HSL, RVB,
415 web, X11, ...).")
416 (license license:expat)))
417
418 (define-public python-d2to1
419 (package
420 (name "python-d2to1")
421 (version "0.2.12.post1")
422 (source (origin
423 (method url-fetch)
424 (uri (pypi-uri "d2to1" version))
425 (sha256
426 (base32
427 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
428 (build-system python-build-system)
429 (native-inputs
430 `(("python-nose" ,python-nose)))
431 (home-page "https://github.com/embray/d2to1")
432 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
433 in python")
434 (description "The python package d2to1 (the d is for distutils) allows
435 using distutils2-like setup.cfg files for a package's metadata with a
436 distribute/setuptools setup.py script.")
437 (license license:bsd-2)))
438
439 (define-public python-rawkit
440 (package
441 (name "python-rawkit")
442 (version "0.6.0")
443 (source (origin
444 (method url-fetch)
445 (uri (pypi-uri "rawkit" version))
446 (sha256
447 (base32
448 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
449 (build-system python-build-system)
450 (native-inputs
451 `(("python-pytest" ,python-pytest)
452 ("python-mock" ,python-mock)))
453 (inputs
454 `(("libraw" ,libraw)))
455 (home-page "https://rawkit.readthedocs.io")
456 (synopsis "Ctypes-based LibRaw binding for Python")
457 (description "The rawkit package provides two modules: rawkit and libraw.
458 The rawkit module provides a high-level Pythonic interface for developing raw
459 photos, while the libraw module provides a CTypes based interface for
460 interacting with the low-level LibRaw C APIs.")
461 (license license:expat)))
462
463 (define-public python-easygui
464 (package
465 (name "python-easygui")
466 (version "0.98.1")
467 (source (origin
468 (method url-fetch)
469 (uri (pypi-uri "easygui" version))
470 (sha256
471 (base32
472 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
473 (build-system python-build-system)
474 (propagated-inputs
475 `(("python-tkinter" ,python "tk")))
476 (home-page "https://github.com/robertlugg/easygui")
477 (synopsis "GUI programming module for Python")
478 (description "EasyGUI is a module for very simple, very easy GUI
479 programming in Python. EasyGUI is different from other GUI generators in that
480 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
481 simple function calls.")
482 (license license:bsd-3)))
483
484 (define-public python-pymd4c
485 (package
486 (name "python-pymd4c")
487 (version "0.4.6.0b1")
488 (source
489 (origin
490 (method url-fetch)
491 (uri (pypi-uri "pymd4c" version))
492 (sha256
493 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
494 (build-system python-build-system)
495 (inputs
496 `(("md4c" ,md4c)))
497 (native-inputs
498 `(("python-flake8" ,python-flake8)
499 ("python-pkgconfig" ,python-pkgconfig)
500 ("pkg-config" ,pkg-config)))
501 (home-page "https://github.com/dominickpastore/pymd4c")
502 (synopsis "Python bindings for MD4C")
503 (description
504 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
505 to CommonMark.")
506 (license license:expat)))
507
508 (define-public python-pymediainfo
509 (package
510 (name "python-pymediainfo")
511 (version "4.1")
512 (source
513 (origin
514 (method url-fetch)
515 (uri (pypi-uri "pymediainfo" version))
516 (sha256
517 (base32
518 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
519 (build-system python-build-system)
520 (native-inputs
521 `(("python-setuptools-scm" ,python-setuptools-scm)
522 ("python-pytest" ,python-pytest)))
523 (inputs
524 `(("libmediainfo" ,libmediainfo)))
525 (arguments
526 `(#:phases
527 (modify-phases %standard-phases
528 (add-after 'unpack 'patch-libmediainfo
529 (lambda _
530 (substitute* "pymediainfo/__init__.py"
531 (("libmediainfo.so.0")
532 (string-append (assoc-ref %build-inputs "libmediainfo")
533 "/lib/libmediainfo.so.0")))
534 #t))
535 (replace 'check
536 (lambda _
537 ;; Extend PYTHONPATH so the built package will be found.
538 (setenv "PYTHONPATH"
539 (string-append (getcwd) "/build/lib:"
540 (getenv "PYTHONPATH")))
541 ;; Skip the only failing test "test_parse_url"
542 (invoke "pytest" "-vv" "-k" "not test_parse_url")
543 #t)))))
544 (home-page
545 "https://github.com/sbraz/pymediainfo")
546 (synopsis
547 "Python wrapper for the mediainfo library")
548 (description
549 "Python wrapper for the mediainfo library to access the technical and tag
550 data for video and audio files.")
551 (license license:expat)))
552
553 (define-public python-psutil
554 (package
555 (name "python-psutil")
556 (version "5.8.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "psutil" version))
561 (sha256
562 (base32 "1immnj532bnnrh1qmk5q3lsw3san8qfk9kxy1cpmy0knmfcwp70c"))))
563 (build-system python-build-system)
564 (arguments
565 ;; FIXME: some tests do not return and time out. Some tests fail because
566 ;; some processes survive kill().
567 '(#:tests? #f))
568 (home-page "https://github.com/giampaolo/psutil")
569 (synopsis "Library for retrieving information on running processes")
570 (description
571 "@code{psutil} (Python system and process utilities) is a library for
572 retrieving information on running processes and system utilization (CPU,
573 memory, disks, network) in Python. It is useful mainly for system monitoring,
574 profiling and limiting process resources and management of running processes.
575 It implements many functionalities offered by command line tools such as: ps,
576 top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
577 iotop, uptime, pidof, tty, taskset, pmap.")
578 (properties `((python2-variant . ,(delay python2-psutil))))
579 (license license:bsd-3)))
580
581 (define-public python2-psutil
582 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
583 (package/inherit base
584 (propagated-inputs
585 `(("python2-enum34" ,python2-enum34) ;optional
586 ,@(package-propagated-inputs base))))))
587
588 (define-public python-shapely
589 (package
590 (name "python-shapely")
591 (version "1.7.1")
592 (source
593 (origin
594 (method url-fetch)
595 (uri (pypi-uri "Shapely" version))
596 (sha256
597 (base32
598 "0adiz4jwmwxk7k1awqifb1a9bj5x4nx4gglb5dz9liam21674h8n"))
599 (modules '((guix build utils)))
600 (snippet
601 '(begin
602 (delete-file "shapely/speedups/_speedups.c")
603 (delete-file "shapely/vectorized/_vectorized.c")
604 #t))))
605 (build-system python-build-system)
606 (native-inputs
607 `(("python-cython" ,python-cython)
608 ("python-matplotlib" ,python-matplotlib)
609 ("python-pytest" ,python-pytest)
610 ("python-pytest-cov" ,python-pytest-cov)))
611 (inputs
612 `(("geos" ,geos)))
613 (propagated-inputs
614 `(("python-numpy" ,python-numpy)))
615 (arguments
616 `(#:phases
617 (modify-phases %standard-phases
618 (add-after 'unpack 'patch-geos-path
619 (lambda* (#:key inputs #:allow-other-keys)
620 (let ((geos (assoc-ref inputs "geos"))
621 (glibc (assoc-ref inputs ,(if (%current-target-system)
622 "cross-libc" "libc"))))
623 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
624 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
625 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
626 geos "/lib/libgeos_c.so'])"))
627 (("free = load_dll\\('c'\\)\\.free")
628 (string-append "free = load_dll('c', fallbacks=['"
629 glibc "/lib/libc.so.6']).free"))
630 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
631 (string-append "free = load_dll('c', fallbacks=['"
632 glibc "/lib/libc.so.6']).free"))))
633 #t)))))
634 (home-page "https://github.com/Toblerity/Shapely")
635 (synopsis "Library for the manipulation and analysis of geometric objects")
636 (description "Shapely is a Python package for manipulation and analysis of
637 planar geometric objects. It is based on the @code{GEOS} library.")
638 (license license:bsd-3)))
639
640 (define-public python-shortuuid
641 (package
642 (name "python-shortuuid")
643 (version "0.5.0")
644 (source
645 (origin
646 (method url-fetch)
647 (uri (pypi-uri "shortuuid" version))
648 (sha256
649 (base32
650 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
651 (build-system python-build-system)
652 (native-inputs
653 `(("python-pep8" ,python-pep8)))
654 (home-page "https://github.com/skorokithakis/shortuuid")
655 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
656 (description
657 "@code{shortuuid} is a Python library for generating concise, unambiguous
658 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
659 module and then similar looking characters are removed.")
660 (license license:bsd-3)))
661
662 (define-public python-logwrap
663 (package
664 (name "python-logwrap")
665 (version "8.2.0.post0")
666 (source
667 (origin
668 (method url-fetch)
669 (uri (pypi-uri "logwrap" version))
670 (sha256
671 (base32
672 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
673 (build-system python-build-system)
674 (arguments
675 `(#:tests? #f ; Tests not included in pypi release.
676 #:phases
677 (modify-phases %standard-phases
678 (replace 'check
679 (lambda* (#:key tests? #:allow-other-keys)
680 (when tests?
681 (invoke "pytest"))
682 #t)))))
683 (native-inputs
684 `(("python-cython" ,python-cython)
685 ("python-pytest" ,python-pytest)
686 ("python-setuptools-scm" ,python-setuptools-scm)
687 ("python-toml" ,python-toml)
688 ("python-wheel" ,python-wheel)))
689 (home-page "https://github.com/python-useful-helpers/logwrap")
690 (synopsis "Decorator for logging function arguments")
691 (description "This package provides a decorator to log function arguments
692 and function call return values in a human-readable way.")
693 (license license:asl2.0)))
694
695 (define-public python2-shapely
696 (package-with-python2 python-shapely))
697
698 (define-public python-clyent
699 (package
700 (name "python-clyent")
701 (version "1.2.1")
702 (source
703 (origin
704 (method url-fetch)
705 (uri (pypi-uri "clyent" version))
706 (sha256
707 (base32
708 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
709 (build-system python-build-system)
710 (native-inputs
711 `(("python-mock" ,python-mock)))
712 (home-page "https://github.com/Anaconda-Platform/clyent")
713 (synopsis "Command line client library")
714 (description "Clyent is a Python command line utility library. It is used
715 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
716 (license license:bsd-3)))
717
718 (define-public python2-clyent
719 (package-with-python2 python-clyent))
720
721 (define-public python-babel
722 (package
723 (name "python-babel")
724 (version "2.9.0")
725 (source
726 (origin
727 (method url-fetch)
728 (uri (pypi-uri "Babel" version))
729 (sha256
730 (base32
731 "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
732 (build-system python-build-system)
733 (native-inputs
734 `(("python-freezegun" ,python-freezegun)
735 ("python-pytest" ,python-pytest)))
736 (propagated-inputs
737 `(("python-pytz" ,python-pytz)))
738 (arguments
739 `(#:phases (modify-phases %standard-phases
740 (replace 'check
741 (lambda _
742 (invoke "pytest" "-vv"))))))
743 (home-page "http://babel.pocoo.org/")
744 (synopsis
745 "Tools for internationalizing Python applications")
746 (description
747 "Babel is composed of two major parts:
748 - tools to build and work with gettext message catalogs
749 - a Python interface to the CLDR (Common Locale Data Repository), providing
750 access to various locale display names, localized number and date formatting,
751 etc. ")
752 (license license:bsd-3)))
753
754 (define-public python2-babel
755 (package-with-python2 python-babel))
756
757 (define-public python2-backport-ssl-match-hostname
758 (package
759 (name "python2-backport-ssl-match-hostname")
760 (version "3.5.0.1")
761 (source
762 (origin
763 (method url-fetch)
764 (uri (pypi-uri "backports.ssl_match_hostname" version))
765 (sha256
766 (base32
767 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
768 (build-system python-build-system)
769 (arguments
770 `(#:python ,python-2
771 #:tests? #f)) ; no test target
772 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
773 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
774 (description
775 "This backport brings the ssl.match_hostname() function to users of
776 earlier versions of Python. The function checks the hostname in the
777 certificate returned by the server to which a connection has been established,
778 and verifies that it matches the intended target hostname.")
779 (license license:psfl)))
780
781 (define-public python-bidict
782 (package
783 (name "python-bidict")
784 (version "0.21.2")
785 (source
786 (origin
787 (method url-fetch)
788 (uri (pypi-uri "bidict" version))
789 (sha256
790 (base32
791 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
792 (build-system python-build-system)
793 (native-inputs
794 `(("python-coverage" ,python-coverage)
795 ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0
796 ("python-pre-commit" ,python-pre-commit)
797 ("python-py" ,python-py)
798 ("python-pytest" ,python-pytest)
799 ("python-pytest-benchmark" ,python-pytest-benchmark)
800 ("python-pytest-cov" ,python-pytest-cov)
801 ("python-setuptools-scm" ,python-setuptools-scm)
802 ("python-sortedcollections" ,python-sortedcollections)
803 ("python-sortedcontainers" ,python-sortedcontainers)
804 ("python-sphinx" ,python-sphinx)
805 ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)
806 ("python-tox" ,python-tox)))
807 (arguments
808 `(#:phases (modify-phases %standard-phases
809 (add-after 'unpack 'relax-reqs
810 (lambda _
811 (substitute* "setup.py"
812 (("sortedcollections < 2") "sortedcollections"))
813 #t))
814 (replace 'check
815 (lambda _ (invoke "./run_tests.py"))))))
816 (home-page "https://bidict.readthedocs.io")
817 (synopsis "Bidirectional mapping library")
818 (description "The @code{bidict} library provides several data structures
819 for working with bidirectional mappings in Python.")
820 (license license:mpl2.0)))
821
822 (define-public python-bitarray
823 (package
824 (name "python-bitarray")
825 (version "1.4.0")
826 (source (origin
827 (method url-fetch)
828 (uri (pypi-uri "bitarray" version))
829 (sha256
830 (base32
831 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
832 (build-system python-build-system)
833 (home-page "https://github.com/ilanschnell/bitarray")
834 (synopsis "Efficient arrays of booleans")
835 (description "This package provides an object type which efficiently
836 represents an array of booleans. Bitarrays are sequence types and behave very
837 much like usual lists. Eight bits are represented by one byte in a contiguous
838 block of memory. The user can select between two representations:
839 little-endian and big-endian. All of the functionality is implemented in C.
840 Methods for accessing the machine representation are provided. This can be
841 useful when bit level access to binary files is required, such as portable
842 bitmap image files. Also, when dealing with compressed data which uses
843 variable bit length encoding, you may find this module useful.")
844 (license license:psfl)))
845
846 (define-public python-boolean.py
847 (package
848 (name "python-boolean.py")
849 (version "3.6")
850 (source
851 (origin
852 ;; There's no source tarball on PyPI.
853 (method git-fetch)
854 (uri (git-reference
855 (url "https://github.com/bastikr/boolean.py")
856 (commit (string-append "v" version))))
857 (file-name (git-file-name name version))
858 (sha256
859 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
860 (build-system python-build-system)
861 (home-page "https://github.com/bastikr/boolean.py")
862 (synopsis "Boolean algebra in one Python module")
863 (description
864 "This is a small Python library that implements boolean algebra.
865 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
866 @code{Symbol} class that can take on one of these two values. Calculations
867 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
868 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
869 Expressions are constructed from parsed strings or directly in Python.")
870 (license license:bsd-2)))
871
872 (define-public python-hdf4
873 (package
874 (name "python-hdf4")
875 (version "0.9")
876 (source
877 (origin
878 (method url-fetch)
879 (uri (pypi-uri name version))
880 (sha256
881 (base32
882 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
883 (build-system python-build-system)
884 (native-inputs `(("nose" ,python-nose)))
885 (propagated-inputs `(("numpy" ,python-numpy)))
886 (inputs
887 `(("hdf4" ,hdf4)
888 ("libjpeg" ,libjpeg-turbo)
889 ("zlib" ,zlib)))
890 (arguments
891 `(#:phases
892 (modify-phases %standard-phases
893 (replace 'check
894 (lambda _
895 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
896 ;; on to import numpy. Somehow this works on their CI system.
897 ;; Let's just manage PYTHONPATH here instead.
898 (substitute* "runexamples.sh"
899 (("export PYTHONPATH=.*") ""))
900 (setenv "PYTHONPATH"
901 (string-append (getcwd) ":"
902 (getenv "PYTHONPATH")))
903 (invoke "./runexamples.sh")
904 (invoke "nosetests" "-v"))))))
905 (home-page "https://github.com/fhs/python-hdf4")
906 (synopsis "Python interface to the NCSA HDF4 library")
907 (description
908 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
909 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
910 NetCDF files can also be read and modified. Python-HDF4 is a fork of
911 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
912 (license license:expat)))
913
914 (define-public python2-hdf4
915 (package-with-python2 python-hdf4))
916
917 (define-public python-h5py
918 (package
919 (name "python-h5py")
920 (version "2.10.0")
921 (source
922 (origin
923 (method url-fetch)
924 (uri (pypi-uri "h5py" version))
925 (sha256
926 (base32
927 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
928 (build-system python-build-system)
929 (arguments
930 `(#:tests? #f ; no test target
931 #:phases
932 (modify-phases %standard-phases
933 (add-after 'unpack 'fix-hdf5-paths
934 (lambda* (#:key inputs #:allow-other-keys)
935 (let ((prefix (assoc-ref inputs "hdf5")))
936 (substitute* "setup_build.py"
937 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
938 (string-append "['" prefix "/lib" "']"))
939 (("'/opt/local/include', '/usr/local/include'")
940 (string-append "'" prefix "/include" "'")))
941 (substitute* "setup_configure.py"
942 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
943 (string-append "['" prefix "/lib" "']")))
944 #t))))))
945 (propagated-inputs
946 `(("python-six" ,python-six)
947 ("python-numpy" ,python-numpy)))
948 (inputs
949 `(("hdf5" ,hdf5-1.10)))
950 (native-inputs
951 `(("python-cython" ,python-cython)
952 ("python-pkgconfig" ,python-pkgconfig)
953 ("pkg-config" ,pkg-config)))
954 (home-page "https://www.h5py.org/")
955 (synopsis "Read and write HDF5 files from Python")
956 (description
957 "The h5py package provides both a high- and low-level interface to the
958 HDF5 library from Python. The low-level interface is intended to be a
959 complete wrapping of the HDF5 API, while the high-level component supports
960 access to HDF5 files, datasets and groups using established Python and NumPy
961 concepts.")
962 (license license:bsd-3)))
963
964 (define-public python2-h5py
965 (package-with-python2 python-h5py))
966
967 (define-public python-sh
968 (package
969 (name "python-sh")
970 (version "1.12.14")
971 (source
972 (origin
973 (method url-fetch)
974 (uri (pypi-uri "sh" version))
975 (sha256
976 (base32
977 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
978 (build-system python-build-system)
979 (arguments
980 '(#:phases
981 (modify-phases %standard-phases
982 (replace 'check
983 (lambda _
984 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
985 (setenv "HOME" "/tmp")
986 (invoke "python" "sh.py" "test"))))))
987 (native-inputs
988 `(("python-coverage" ,python-coverage)))
989 (home-page "https://github.com/amoffat/sh")
990 (synopsis "Python subprocess replacement")
991 (description "This package provides a replacement for Python's
992 @code{subprocess} feature.")
993 (license license:expat)))
994
995 (define-public python-cftime
996 (package
997 (name "python-cftime")
998 (version "1.0.4.2")
999 (source
1000 (origin
1001 (method url-fetch)
1002 (uri (pypi-uri "cftime" version))
1003 (sha256
1004 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
1005 (build-system python-build-system)
1006 (propagated-inputs
1007 `(("python-numpy" ,python-numpy)))
1008 (native-inputs
1009 `(("python-coveralls" ,python-coveralls)
1010 ("python-cython" ,python-cython)
1011 ("python-pytest-cov" ,python-pytest-cov)))
1012 (home-page "https://github.com/Unidata/cftime")
1013 (synopsis "Library for time handling")
1014 (description
1015 "This package provides time-handling functionality that used to be part
1016 of the netcdf4 package before.")
1017 ;; This package claims to include code under the GPLv3 but is released
1018 ;; under ISC.
1019 (license (list license:isc license:gpl3+))))
1020
1021 (define-public python-netcdf4
1022 (package
1023 (name "python-netcdf4")
1024 (version "1.5.3")
1025 (source
1026 (origin
1027 (method url-fetch)
1028 (uri (pypi-uri "netCDF4" version))
1029 (sha256
1030 (base32
1031 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
1032 (build-system python-build-system)
1033 (arguments
1034 '(#:phases
1035 (modify-phases %standard-phases
1036 (add-after 'unpack 'configure-locations
1037 (lambda* (#:key inputs #:allow-other-keys)
1038 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1039 #t)))))
1040 (native-inputs
1041 `(("python-cython" ,python-cython)))
1042 (propagated-inputs
1043 `(("python-numpy" ,python-numpy)
1044 ("python-cftime" ,python-cftime)))
1045 (inputs
1046 `(("netcdf" ,netcdf)
1047 ("hdf4" ,hdf4)
1048 ("hdf5" ,hdf5)))
1049 (home-page "https://github.com/Unidata/netcdf4-python")
1050 (synopsis "Python/numpy interface to the netCDF library")
1051 (description "Netcdf4-python is a Python interface to the netCDF C
1052 library. netCDF version 4 has many features not found in earlier
1053 versions of the library and is implemented on top of HDF5. This module
1054 can read and write files in both the new netCDF 4 and the old netCDF 3
1055 format, and can create files that are readable by HDF5 clients. The
1056 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1057 to users of that module.")
1058 ;; The software is mainly ISC, but includes some files covered
1059 ;; by the Expat license.
1060 (license (list license:isc license:expat))))
1061
1062 (define-public python-license-expression
1063 (package
1064 (name "python-license-expression")
1065 (version "1.2")
1066 (source
1067 (origin
1068 (method url-fetch)
1069 (uri (pypi-uri "license-expression" version))
1070 (sha256
1071 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
1072 (build-system python-build-system)
1073 (propagated-inputs
1074 `(("python-boolean.py" ,python-boolean.py)))
1075 (home-page "https://github.com/nexB/license-expression")
1076 (synopsis "Apply boolean logic to license expressions")
1077 (description
1078 "This Python module defines a tiny language to evaluate and compare
1079 license expressions using boolean logic. Logical combinations of licenses can
1080 be tested for equality, containment, and equivalence. They can be normalised
1081 and simplified. It supports SPDX license expressions as well as other naming
1082 conventions and aliases in the same expression.")
1083 (license license:gpl2+)))
1084
1085 (define-public python-lockfile
1086 (package
1087 (name "python-lockfile")
1088 (version "0.12.2")
1089 (source
1090 (origin
1091 (method url-fetch)
1092 (uri (pypi-uri "lockfile" version))
1093 (sha256
1094 (base32
1095 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
1096 (build-system python-build-system)
1097 (arguments '(#:test-target "check"))
1098 (native-inputs
1099 `(("python-pbr" ,python-pbr)))
1100 (home-page "https://launchpad.net/pylockfile")
1101 (synopsis "Platform-independent file locking module")
1102 (description
1103 "The lockfile package exports a LockFile class which provides a simple
1104 API for locking files.")
1105 (license license:expat)))
1106
1107 (define-public python-filelock
1108 (package
1109 (name "python-filelock")
1110 (version "3.0.12")
1111 (source
1112 (origin
1113 (method url-fetch)
1114 (uri (pypi-uri "filelock" version))
1115 (sha256
1116 (base32
1117 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
1118 (build-system python-build-system)
1119 (home-page
1120 "https://github.com/benediktschmitt/py-filelock")
1121 (synopsis "Platform independent file lock")
1122 (description "@code{filelock} contains a single module implementing
1123 a platform independent file lock in Python, which provides a simple way of
1124 inter-process communication.")
1125 (license license:unlicense)))
1126
1127 (define-public python-semantic-version
1128 (package
1129 (name "python-semantic-version")
1130 (version "2.8.5")
1131 (source
1132 (origin
1133 (method url-fetch)
1134 (uri (pypi-uri "semantic_version" version))
1135 (sha256
1136 (base32
1137 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
1138 (build-system python-build-system)
1139 (home-page "https://github.com/rbarrois/python-semanticversion")
1140 (synopsis "Semantic versioning module for Python")
1141 (description
1142 "The @code{semantic_version} class is a small library for handling
1143 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
1144
1145 It can compare versions, generate a new version that represents a bump in one of
1146 the version levels, and check whether any given string is a proper semantic
1147 version identifier.")
1148 (license license:bsd-3)))
1149
1150 (define-public python2-semantic-version
1151 (package-with-python2 python-semantic-version))
1152
1153 (define-public python-serpent
1154 (package
1155 (name "python-serpent")
1156 (version "1.28")
1157 (source
1158 (origin
1159 (method url-fetch)
1160 (uri (pypi-uri "serpent" version))
1161 (sha256
1162 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1163 (build-system python-build-system)
1164 (native-inputs
1165 `(("python-attrs" ,python-attrs)
1166 ("python-pytz" ,python-pytz)))
1167 (home-page "https://github.com/irmen/Serpent")
1168 (synopsis "Serializer for literal Python expressions")
1169 (description
1170 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1171 serialization. It serializes an object tree into bytes (an utf-8 encoded
1172 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1173 to rebuild the original object tree.
1174
1175 Because only safe literals are encoded, it is safe to send serpent data to
1176 other machines, such as over the network.")
1177 (properties `((python2-variant . ,(delay python2-serpent))))
1178 (license license:expat)))
1179
1180 (define-public python2-serpent
1181 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1182 (package/inherit base
1183 (propagated-inputs
1184 `(("python-enum34" ,python2-enum34)
1185 ,@(package-propagated-inputs base))))))
1186
1187 (define-public python-setuptools
1188 (package
1189 (name "python-setuptools")
1190 (version "52.0.0")
1191 (source
1192 (origin
1193 (method url-fetch)
1194 (uri (pypi-uri "setuptools" version))
1195 (sha256
1196 (base32
1197 "15ibjdjhkwgj6qbmpsxikkqdfsb1550z46fly7dm15ah4bk1wfpv"))
1198 (modules '((guix build utils)))
1199 (snippet
1200 '(begin
1201 ;; Remove included binaries which are used to build self-extracting
1202 ;; installers for Windows.
1203 ;; TODO: Find some way to build them ourself so we can include them.
1204 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1205 #t))))
1206 (build-system python-build-system)
1207 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1208 ;; One could bootstrap with an internal untested setuptools.
1209 (arguments
1210 `(#:tests? #f))
1211 (home-page "https://pypi.org/project/setuptools/")
1212 (synopsis
1213 "Library designed to facilitate packaging Python projects")
1214 (description
1215 "Setuptools is a fully-featured, stable library designed to facilitate
1216 packaging Python projects, where packaging includes:
1217 Python package and module definitions,
1218 distribution package metadata,
1219 test hooks,
1220 project installation,
1221 platform-specific details,
1222 Python 3 support.")
1223 ;; TODO: setuptools now bundles the following libraries:
1224 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1225 (license (list license:psfl ; setuptools itself
1226 license:expat ; six, appdirs, pyparsing
1227 license:asl2.0 ; packaging is dual ASL2/BSD-2
1228 license:bsd-2))
1229 (properties `((python2-variant . ,(delay python2-setuptools))))))
1230
1231 ;; Newer versions of setuptools no longer support Python 2.
1232 (define-public python2-setuptools
1233 (package
1234 (name "python2-setuptools")
1235 (version "41.0.1")
1236 (source
1237 (origin
1238 (method url-fetch)
1239 (uri (pypi-uri "setuptools" version ".zip"))
1240 (sha256
1241 (base32
1242 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1243 (modules '((guix build utils)))
1244 (snippet
1245 '(begin
1246 ;; Remove included binaries which are used to build self-extracting
1247 ;; installers for Windows.
1248 ;; TODO: Find some way to build them ourself so we can include them.
1249 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1250 #t))))
1251 (build-system python-build-system)
1252 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1253 ;; One could bootstrap with an internal untested setuptools.
1254 (arguments
1255 `(#:tests? #f))
1256 (native-inputs
1257 `(("unzip" ,unzip)))
1258 (home-page "https://pypi.org/project/setuptools/")
1259 (synopsis
1260 "Library designed to facilitate packaging Python projects")
1261 (description
1262 "Setuptools is a fully-featured, stable library designed to facilitate
1263 packaging Python projects, where packaging includes:
1264 Python package and module definitions,
1265 distribution package metadata,
1266 test hooks,
1267 project installation,
1268 platform-specific details,
1269 Python 3 support.")
1270 ;; TODO: setuptools now bundles the following libraries:
1271 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1272 (license (list license:psfl ; setuptools itself
1273 license:expat ; six, appdirs, pyparsing
1274 license:asl2.0 ; packaging is dual ASL2/BSD-2
1275 license:bsd-2))))
1276
1277 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1278 (define-public python-setuptools-for-tensorflow
1279 (hidden-package
1280 (package
1281 (inherit python-setuptools)
1282 (version "39.1.0")
1283 (source (origin
1284 (inherit (package-source python-setuptools))
1285 (uri (pypi-uri "setuptools" version ".zip"))
1286 (sha256
1287 (base32
1288 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1289
1290 (define-public python-uniseg
1291 (package
1292 (name "python-uniseg")
1293 (version "0.7.1")
1294 (source
1295 (origin
1296 (method url-fetch)
1297 (uri (pypi-uri "uniseg" version ".zip"))
1298 (sha256
1299 (base32
1300 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1301 (build-system python-build-system)
1302 (arguments
1303 '(#:tests? #f)) ; The test suite requires network access.
1304 (native-inputs
1305 `(("unzip" ,unzip)))
1306 (home-page
1307 "https://bitbucket.org/emptypage/uniseg-python")
1308 (synopsis
1309 "Python library to determine Unicode text segmentations")
1310 (description
1311 "Uniseg is a Python package used to determine Unicode text segmentations.
1312 Supported segmentations include:
1313 @enumerate
1314 @item @dfn{Code point} (any value in the Unicode codespace)
1315 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1316 multiple Unicode code points, e.g. \"G\" + acute-accent)
1317 @item Word break
1318 @item Sentence break
1319 @item Line break
1320 @end enumerate")
1321 (license license:expat)))
1322
1323 (define-public python2-uniseg
1324 (package-with-python2 python-uniseg))
1325
1326 (define-public python-humanfriendly
1327 (package
1328 (name "python-humanfriendly")
1329 (version "8.2")
1330 (source
1331 (origin
1332 (method url-fetch)
1333 (uri (pypi-uri "humanfriendly" version))
1334 (sha256
1335 (base32
1336 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
1337 (build-system python-build-system)
1338 (arguments
1339 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1340 #:tests? #f))
1341 (home-page "https://humanfriendly.readthedocs.io")
1342 (synopsis "Human-friendly input and output in Python")
1343 (description
1344 "The functions and classes in @code{humanfriendly} can be used to make
1345 text interfaces more user-friendly. It includes tools to parse and format
1346 numbers, file sizes, and timespans, timers for long-running operations, menus
1347 to allow the user to choose from a list of options, and terminal interaction
1348 helpers.")
1349 (properties `((python2-variant . ,(delay python2-humanfriendly))))
1350 (license license:expat)))
1351
1352 (define-public python2-humanfriendly
1353 (let ((base (package-with-python2
1354 (strip-python2-variant python-humanfriendly))))
1355 (package/inherit base
1356 (propagated-inputs
1357 `(("python2-monotonic" ,python2-monotonic)
1358 ,@(package-propagated-inputs base))))))
1359
1360 (define-public python-textparser
1361 (package
1362 (name "python-textparser")
1363 (version "0.23.0")
1364 (source
1365 (origin
1366 (method url-fetch)
1367 (uri (pypi-uri "textparser" version))
1368 (sha256
1369 (base32
1370 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1371 (build-system python-build-system)
1372 (home-page "https://github.com/eerimoq/textparser")
1373 (synopsis "Fast text parser for Python")
1374 (description "This library provides a text parser written in the Python
1375 language. It aims to be fast.")
1376 (license license:expat)))
1377
1378 (define-public python-aenum
1379 (package
1380 (name "python-aenum")
1381 (version "2.2.4")
1382 (source
1383 (origin
1384 (method url-fetch)
1385 (uri (pypi-uri "aenum" version))
1386 (sha256
1387 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
1388 (build-system python-build-system)
1389 (arguments
1390 `(#:phases (modify-phases %standard-phases
1391 (replace 'check
1392 (lambda _
1393 (format #t "current working dir ~s~%" (getcwd))
1394 (setenv "PYTHONPATH"
1395 (string-append ".:" (getenv "PYTHONPATH")))
1396 ;; We must run the test suite module directly, as it
1397 ;; fails to define the 'tempdir' variable in scope for
1398 ;; the tests otherwise
1399 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1400 ;; issues/32/running-tests-with-python-setuppy-test).
1401 (invoke "python3" "aenum/test.py")
1402 ;; This one fails with "NameError: name
1403 ;; 'test_pickle_dump_load' is not defined" (see:
1404 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1405 ;; /error-running-the-test_v3py-test-suite).
1406 ;; (invoke "python3" "aenum/test_v3.py")
1407 #t)))))
1408 (home-page "https://bitbucket.org/stoneleaf/aenum")
1409 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1410 (description "The aenum library includes an @code{Enum} base class, a
1411 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1412 class.")
1413 (license license:bsd-3)))
1414
1415 (define-public python-can
1416 (package
1417 (name "python-can")
1418 (version "3.3.3")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "python-can" version))
1423 (sha256
1424 (base32
1425 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1426 (build-system python-build-system)
1427 (arguments
1428 `(#:phases (modify-phases %standard-phases
1429 (add-after 'unpack 'relax-version-requirements
1430 (lambda _
1431 (substitute* "setup.py"
1432 (("mock~=2\\.0") "mock")
1433 (("coverage<5") "coverage")
1434 (("pytest~=4\\.3") "pytest")
1435 (("hypothesis~=4\\.56") "hypothesis"))
1436 #t))
1437 (add-after 'unpack 'fix-broken-tests
1438 ;; The tests try to run two scripts it expects should be
1439 ;; in PATH, but they aren't at this time (see:
1440 ;; https://github.com/hardbyte/python-can/issues/805).
1441 (lambda _
1442 (substitute* "test/test_scripts.py"
1443 (("\"can_logger\\.py --help\"") "")
1444 (("\"can_player\\.py --help\"") ""))
1445 #t)))))
1446 (propagated-inputs
1447 `(("python-aenum" ,python-aenum)
1448 ("python-wrapt" ,python-wrapt)))
1449 (native-inputs
1450 `(("python-codecov" ,python-codecov)
1451 ("python-coverage" ,python-coverage)
1452 ("python-future" ,python-future)
1453 ("python-hypothesis" ,python-hypothesis)
1454 ("python-mock" ,python-mock)
1455 ("python-pyserial" ,python-pyserial)
1456 ("python-pytest" ,python-pytest)
1457 ("python-pytest-cov" ,python-pytest-cov)
1458 ("python-pytest-runner" ,python-pytest-runner)
1459 ("python-pytest-timeout" ,python-pytest-timeout)))
1460 (home-page "https://github.com/hardbyte/python-can")
1461 (synopsis "Controller Area Network (CAN) interface module for Python")
1462 (description "This package defines the @code{can} module, which provides
1463 controller area network (CAN) support for Python developers; providing common
1464 abstractions to different hardware devices, and a suite of utilities for
1465 sending and receiving messages on a CAN bus.")
1466 (license license:lgpl3+)))
1467
1468 (define-public python-caniusepython3
1469 (package
1470 (name "python-caniusepython3")
1471 (version "7.2.0")
1472 (source
1473 (origin
1474 (method url-fetch)
1475 (uri (pypi-uri "caniusepython3" version))
1476 (sha256
1477 (base32
1478 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
1479 (build-system python-build-system)
1480 (arguments
1481 `(#:phases (modify-phases %standard-phases
1482 (add-after 'unpack 'relax-requirements
1483 (lambda _
1484 (substitute* "setup.py"
1485 ;; These are for compatibility with Python 2.
1486 ((".*'argparse', 'backports.functools_lru_cache',.*")
1487 ""))
1488 (substitute* "dev_requirements.txt"
1489 ((".*pylint.*") "")) ;not actually required
1490 #t))
1491 (replace 'check
1492 (lambda _
1493 (invoke "py.test" "-k" "not NetworkTests"))))))
1494 (propagated-inputs
1495 `(("python-distlib" ,python-distlib)
1496 ("python-packaging" ,python-packaging)
1497 ("python-requests" ,python-requests)))
1498 (native-inputs
1499 `(("python-mock" ,python-mock)
1500 ("python-pytest" ,python-pytest)))
1501 (home-page "https://github.com/brettcannon/caniusepython3")
1502 (synopsis "Check for Python 3-incompatible Python libraries")
1503 (description "The @command{caniusepython3} command scans your project and
1504 reports the Python 3-incompatible libraries it found. It can also be used as
1505 a library.")
1506 (license license:asl2.0)))
1507
1508 (define-public python-diskcache
1509 (package
1510 (name "python-diskcache")
1511 (version "4.1.0")
1512 (source
1513 (origin
1514 (method url-fetch)
1515 (uri (pypi-uri "diskcache" version))
1516 (sha256
1517 (base32
1518 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1519 (build-system python-build-system)
1520 (arguments
1521 `(#:tests? #f)) ;test suite not included in the release
1522 (home-page "http://www.grantjenks.com/docs/diskcache/")
1523 (synopsis "Disk and file backed cache library")
1524 (description "DiskCache is a disk and file backed persistent cache.")
1525 (license license:asl2.0)))
1526
1527 (define-public python-bitstruct
1528 (package
1529 (name "python-bitstruct")
1530 (version "8.9.0")
1531 (source
1532 (origin
1533 (method url-fetch)
1534 (uri (pypi-uri "bitstruct" version))
1535 (sha256
1536 (base32
1537 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1538 (build-system python-build-system)
1539 (home-page "https://github.com/eerimoq/bitstruct")
1540 (synopsis "Python values to and C bit field structs converter")
1541 (description "This module performs conversions between Python values and C
1542 bit field structs represented as Python byte strings. It is intended to have
1543 a similar interface as the @code{struct} module from Python, but working on
1544 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1545 (license license:expat)))
1546
1547 (define-public python-cantools
1548 (package
1549 (name "python-cantools")
1550 (version "33.1.1")
1551 (source
1552 (origin
1553 ;; We take the sources from the Git repository as the documentation is
1554 ;; not included with the PyPI archive.
1555 (method git-fetch)
1556 (uri (git-reference
1557 (url "https://github.com/eerimoq/cantools")
1558 (commit version)))
1559 (file-name (git-file-name name version))
1560 (sha256
1561 (base32
1562 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1563 (build-system python-build-system)
1564 (arguments
1565 `(#:phases
1566 (modify-phases %standard-phases
1567 (add-after 'build 'build-doc
1568 (lambda _
1569 ;; See: https://github.com/eerimoq/cantools/issues/190.
1570 (substitute* "README.rst"
1571 (("https://github.com/eerimoq/cantools/raw/master\
1572 /docs/monitor.png")
1573 "monitor.png"))
1574 (with-directory-excursion "docs"
1575 (invoke "make" "man" "info"))))
1576 (add-after 'install 'install-doc
1577 (lambda* (#:key outputs #:allow-other-keys)
1578 (let* ((out (assoc-ref outputs "out"))
1579 (info (string-append out "/share/info"))
1580 (man1 (string-append out "/share/man/man1")))
1581 (format #t "CWD: ~s~%" (getcwd))
1582 (install-file "docs/_build/texinfo/cantools.info" info)
1583 (install-file "docs/_build/man/cantools.1" man1)
1584 #t))))))
1585 (native-inputs
1586 `(("sphinx" ,python-sphinx)
1587 ("texinfo" ,texinfo)))
1588 (propagated-inputs
1589 `(("python-bitstruct" ,python-bitstruct)
1590 ("python-can" ,python-can)
1591 ("python-diskcache" ,python-diskcache)
1592 ("python-textparser" ,python-textparser)))
1593 (home-page "https://github.com/eerimoq/cantools")
1594 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1595 (description "This package includes Controller Area Network (CAN) related
1596 tools that can be used to:
1597 @itemize
1598 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1599 @item encode and decode CAN messages
1600 @item multiplex simple and extended signals
1601 @item diagnose DID encoding and decoding
1602 @item dump the CAN decoder output
1603 @item test CAN nodes
1604 @item generate C source code
1605 @item monitor the CAN bus
1606 @end itemize")
1607 (license license:expat)))
1608
1609 (define-public python-capturer
1610 (package
1611 (name "python-capturer")
1612 (version "2.4")
1613 (source
1614 (origin
1615 (method url-fetch)
1616 (uri (pypi-uri "capturer" version))
1617 (sha256
1618 (base32
1619 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1620 (build-system python-build-system)
1621 (arguments
1622 `(#:tests? #f))
1623 (propagated-inputs
1624 `(("python-humanfriendly" ,python-humanfriendly)))
1625 (home-page "https://capturer.readthedocs.io")
1626 (synopsis "Capture stdout and stderr streams of the current process")
1627 (description
1628 "The capturer package makes it easy to capture the stdout and stderr
1629 streams of the current process and subprocesses. Output can be relayed
1630 to the terminal in real time but is also available to the Python program
1631 for additional processing.")
1632 (license license:expat)))
1633
1634 (define-public python2-capturer
1635 (package-with-python2 python-capturer))
1636
1637 (define-public python-case
1638 (package
1639 (name "python-case")
1640 (version "1.5.3")
1641 (source
1642 (origin
1643 (method url-fetch)
1644 (uri (pypi-uri "case" version))
1645 (sha256
1646 (base32
1647 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1648 (build-system python-build-system)
1649 (propagated-inputs
1650 `(("python-mock" ,python-mock)
1651 ("python-nose" ,python-nose)
1652 ("python-six" ,python-six)
1653 ("python-unittest2" ,python-unittest2)))
1654 (native-inputs
1655 `(("python-coverage" ,python-coverage)))
1656 (home-page "https://github.com/celery/case")
1657 (synopsis "Unittest utilities and convenience methods")
1658 (description
1659 "The @code{case} package provides utilities on top of unittest, including
1660 some helpful Python 2 compatibility convenience methods.")
1661 (license license:bsd-3)))
1662
1663 (define-public python-verboselogs
1664 (package
1665 (name "python-verboselogs")
1666 (version "1.7")
1667 (source
1668 (origin
1669 (method url-fetch)
1670 (uri (pypi-uri "verboselogs" version))
1671 (sha256
1672 (base32
1673 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1674 (build-system python-build-system)
1675 (arguments
1676 `(#:phases
1677 (modify-phases %standard-phases
1678 (replace 'check
1679 (lambda _
1680 ;; Do not run pylint plugin test, as astroid is an old
1681 ;; unsupported version.
1682 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1683 "verboselogs/tests.py"))))))
1684 (native-inputs
1685 `(("python-mock" ,python-mock)
1686 ("python-pytest" ,python-pytest)))
1687 (home-page "https://verboselogs.readthedocs.io")
1688 (synopsis "Verbose logging level for Python's logging module")
1689 (description
1690 "The @code{verboselogs} package extends Python's @code{logging} module to
1691 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1692 (license license:expat)))
1693
1694 (define-public python2-verboselogs
1695 (package-with-python2 python-verboselogs))
1696
1697 (define-public python-coloredlogs
1698 (package
1699 (name "python-coloredlogs")
1700 (version "10.0")
1701 (source
1702 (origin
1703 (method url-fetch)
1704 (uri (pypi-uri "coloredlogs" version))
1705 (sha256
1706 (base32
1707 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1708 (build-system python-build-system)
1709 (arguments
1710 `(;Tests require some updated modules
1711 #:tests? #f))
1712 (propagated-inputs
1713 `(("python-capturer" ,python-capturer)))
1714 (home-page "https://coloredlogs.readthedocs.io")
1715 (synopsis "Colored stream handler for Python's logging module")
1716 (description
1717 "The @code{coloredlogs} package enables colored terminal output for
1718 Python's logging module. The @code{ColoredFormatter} class inherits from
1719 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1720 messages in color.")
1721 (license license:expat)))
1722
1723 (define-public python2-coloredlogs
1724 (package-with-python2 python-coloredlogs))
1725
1726 (define-public python-editorconfig
1727 (package
1728 (name "python-editorconfig")
1729 (version "0.12.2")
1730 (source
1731 (origin
1732 (method url-fetch)
1733 (uri (pypi-uri "EditorConfig" version))
1734 (sha256
1735 (base32
1736 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1737 (build-system python-build-system)
1738 (home-page "https://editorconfig.org/")
1739 (synopsis "EditorConfig bindings for python")
1740 (description "The EditorConfig project consists of a file format for
1741 defining coding styles and a collection of text editor plugins that enable
1742 editors to read the file format and adhere to defined styles. EditorConfig
1743 files are easily readable and they work nicely with version control systems.")
1744 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1745 (license (list license:bsd-2 license:psfl))))
1746
1747 (define-public dosage
1748 (package
1749 (name "dosage")
1750 (version "2.17")
1751 (source
1752 (origin
1753 (method url-fetch)
1754 (uri (pypi-uri "dosage" version))
1755 (sha256
1756 (base32
1757 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
1758 (build-system python-build-system)
1759 (propagated-inputs
1760 `(("python2-backports-functools-lru-cache"
1761 ,python2-backports-functools-lru-cache)
1762 ("python2-backports-shutil-get-terminal-size"
1763 ,python2-backports-shutil-get-terminal-size)
1764 ("python-cached-property" ,python-cached-property)
1765 ("python-colorama" ,python-colorama)
1766 ("python-imagesize" ,python-imagesize)
1767 ("python-importlib-metadata" ,python-importlib-metadata)
1768 ("python-lxml" ,python-lxml)
1769 ("python-requests" ,python-requests)
1770 ("python-six" ,python-six)))
1771 (native-inputs
1772 `(("python-pytest-cov" ,python-pytest-cov)
1773 ("python-pytest-xdist" ,python-pytest-xdist)
1774 ("python-responses" ,python-responses)
1775 ("python-setuptools-scm" ,python-setuptools-scm)))
1776 (home-page "https://github.com/webcomics/dosage")
1777 (synopsis "Comic strip downloader and archiver")
1778 (description "Dosage is designed to keep a local copy of specific webcomics and other
1779 picture-based content such as Picture of the Day sites. With the @command{dosage}
1780 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
1781 downloaded, or download a strip for a particular date or index, if possible.")
1782 (license license:expat)))
1783
1784 (define-public python-et-xmlfile
1785 (package
1786 (name "python-et-xmlfile")
1787 (version "1.0.1")
1788 (source
1789 (origin
1790 (method url-fetch)
1791 (uri (pypi-uri "et_xmlfile" version))
1792 (sha256
1793 (base32
1794 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1795 (build-system python-build-system)
1796 (arguments
1797 `(#:phases (modify-phases %standard-phases
1798 (replace 'check
1799 (lambda _
1800 (invoke "pytest"))))))
1801 (native-inputs
1802 `(("python-pytest" ,python-pytest)
1803 ("python-lxml" ,python-lxml))) ;used for the tests
1804 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1805 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1806 (description "This Python library is based upon the @code{xmlfile} module
1807 from @code{lxml}. It aims to provide a low memory, compatible implementation
1808 of @code{xmlfile}.")
1809 (license license:expat)))
1810
1811 (define-public python2-et-xmlfile
1812 (package-with-python2 python-et-xmlfile))
1813
1814 (define-public python-openpyxl
1815 (package
1816 (name "python-openpyxl")
1817 (version "3.0.5")
1818 (source
1819 (origin
1820 ;; We use the upstream repository, as the tests are not included in the
1821 ;; PyPI releases.
1822 (method hg-fetch)
1823 (uri (hg-reference
1824 (url "https://foss.heptapod.net/openpyxl/openpyxl")
1825 (changeset version)))
1826 (file-name (string-append name "-" version "-checkout"))
1827 (sha256
1828 (base32 "0s6fgwwkcfz1bnrp5gjd4g2lcbl4a76147ylkrmkbabi2nf4xlli"))))
1829 (build-system python-build-system)
1830 (arguments
1831 `(#:phases (modify-phases %standard-phases
1832 (replace 'check
1833 (lambda _
1834 (invoke "pytest"))))))
1835 (native-inputs
1836 ;; For the test suite.
1837 `(("python-lxml" ,python-lxml)
1838 ("python-pillow" ,python-pillow)
1839 ("python-pytest" ,python-pytest)))
1840 (propagated-inputs
1841 `(("python-et-xmlfile" ,python-et-xmlfile)
1842 ("python-jdcal" ,python-jdcal)))
1843 (home-page "https://openpyxl.readthedocs.io")
1844 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1845 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1846 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1847 standard.")
1848 (properties `((python2-variant . ,(delay python2-openpyxl))))
1849 (license license:expat)))
1850
1851 (define-public python2-openpyxl
1852 (let ((base (package-with-python2
1853 (strip-python2-variant python-openpyxl))))
1854 (package
1855 (inherit base)
1856 ;; This is the latest version that has python2 support
1857 (version "2.6.4")
1858 (source
1859 (origin
1860 (method url-fetch)
1861 (uri (pypi-uri "openpyxl" version))
1862 (sha256
1863 (base32
1864 "1qzjj8nwj4dn0mhq1j64f136afiqqb81lvqiikipz3g1g0b80lqx"))))
1865 (arguments '(#:tests? #f))))) ; No test suite.
1866
1867 (define-public python-eventlet
1868 (package
1869 (name "python-eventlet")
1870 (version "0.25.1")
1871 (source
1872 (origin
1873 (method url-fetch)
1874 (uri (pypi-uri "eventlet" version))
1875 (sha256
1876 (base32
1877 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1878 (build-system python-build-system)
1879 (propagated-inputs
1880 `(("python-dnspython" ,python-dnspython)
1881 ("python-greenlet" ,python-greenlet)
1882 ("python-monotonic" ,python-monotonic)))
1883 (arguments
1884 ;; TODO: Requires unpackaged 'enum-compat'.
1885 '(#:tests? #f))
1886 (home-page "https://eventlet.net")
1887 (synopsis "Concurrent networking library for Python")
1888 (description
1889 "Eventlet is a concurrent networking library for Python that
1890 allows you to change how you run your code, not how you write it.
1891 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1892 Coroutines ensure that the developer uses a blocking style of programming
1893 that is similar to threading, but provide the benefits of non-blocking I/O.
1894 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1895 from the Python interpreter, or as a small part of a larger application.")
1896 (license license:expat)))
1897
1898 (define-public python-six
1899 (package
1900 (name "python-six")
1901 (version "1.14.0")
1902 (source
1903 (origin
1904 (method url-fetch)
1905 (uri (pypi-uri "six" version))
1906 (sha256
1907 (base32
1908 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1909 (build-system python-build-system)
1910 (arguments
1911 `(#:phases
1912 (modify-phases %standard-phases
1913 (replace 'check
1914 (lambda _
1915 (invoke "py.test" "-v"))))))
1916 (native-inputs
1917 `(("python-pytest" ,python-pytest-bootstrap)))
1918 (home-page "https://pypi.org/project/six/")
1919 (synopsis "Python 2 and 3 compatibility utilities")
1920 (description
1921 "Six is a Python 2 and 3 compatibility library. It provides utility
1922 functions for smoothing over the differences between the Python versions with
1923 the goal of writing Python code that is compatible on both Python versions.
1924 Six supports every Python version since 2.5. It is contained in only one
1925 Python file, so it can be easily copied into your project.")
1926 (license license:x11)))
1927
1928 (define-public python2-six
1929 (package-with-python2 python-six))
1930
1931 (define-public python-six-bootstrap
1932 (package
1933 (inherit python-six)
1934 (name "python-six-bootstrap")
1935 (native-inputs `())
1936 (arguments `(#:tests? #f))))
1937
1938 (define-public python2-six-bootstrap
1939 (package-with-python2 python-six-bootstrap))
1940
1941 (define-public python-schedule
1942 (package
1943 (name "python-schedule")
1944 (version "0.4.3")
1945 (source
1946 (origin
1947 (method url-fetch)
1948 (uri (pypi-uri "schedule" version))
1949 (sha256
1950 (base32
1951 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1952 (build-system python-build-system)
1953 (native-inputs
1954 `(("python-pytest" ,python-pytest)
1955 ("python-mock" ,python-mock)))
1956 (home-page "https://github.com/dbader/schedule")
1957 (synopsis "Schedule periodic function calls in Python")
1958 (description
1959 "Schedule is an in-process scheduler for periodic jobs that uses the
1960 builder pattern for configuration. Schedule lets you run Python functions (or
1961 any other callable) periodically at pre-determined intervals using a simple,
1962 human-friendly syntax.")
1963 (license license:expat)))
1964
1965 (define-public python2-schedule
1966 (package-with-python2 python-schedule))
1967
1968 (define-public python-scour
1969 (package
1970 (name "python-scour")
1971 (version "038.1")
1972 (source
1973 (origin
1974 (method git-fetch)
1975 (uri
1976 (git-reference
1977 (url "https://github.com/scour-project/scour")
1978 (commit
1979 (string-append "v" version))))
1980 (file-name (git-file-name name version))
1981 (sha256
1982 (base32 "0rgiypb9ig8x4rl3hfzpy7kwnx1q3064nvlrv4fk0dnp84girn0v"))))
1983 (propagated-inputs
1984 `(("python-six" ,python-six)))
1985 (build-system python-build-system)
1986 (home-page "https://github.com/scour-project/scour")
1987 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
1988 (description "The goal of Scour is to output a file that renders
1989 identically at a fraction of the size by removing a lot of redundant
1990 information created by most SVG editors. Optimization options are typically
1991 lossless but can be tweaked for more aggressive cleaning.")
1992 (license license:asl2.0)))
1993
1994 (define-public python-mechanize
1995 (package
1996 (name "python-mechanize")
1997 (version "0.4.5")
1998 (source
1999 (origin
2000 (method url-fetch)
2001 (uri (pypi-uri "mechanize" version))
2002 (sha256
2003 (base32
2004 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2005 (build-system python-build-system)
2006 (propagated-inputs
2007 `(("python-html5lib" ,python-html5lib)))
2008 (home-page "https://github.com/python-mechanize/mechanize")
2009 (synopsis
2010 "Stateful programmatic web browsing in Python")
2011 (description
2012 "Mechanize implements stateful programmatic web browsing in Python,
2013 after Andy Lester’s Perl module WWW::Mechanize.")
2014 (license license:bsd-3)))
2015
2016 (define-public python2-mechanize
2017 (package-with-python2 python-mechanize))
2018
2019 (define-public python-simpleaudio
2020 (package
2021 (name "python-simpleaudio")
2022 (version "1.0.4")
2023 (source
2024 (origin
2025 (method url-fetch)
2026 (uri (pypi-uri "simpleaudio" version))
2027 (sha256
2028 (base32
2029 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2030 (build-system python-build-system)
2031 (arguments
2032 `(#:tests? #f))
2033 (inputs
2034 `(("alsa-lib" ,alsa-lib)))
2035 (home-page
2036 "https://github.com/hamiltron/py-simple-audio")
2037 (synopsis "Simple, asynchronous audio playback for Python 3")
2038 (description
2039 "The @code{simplaudio} package provides cross-platform, dependency-free
2040 audio playback capability for Python 3 on OSX, Windows, and Linux.")
2041 (license license:expat))) ; MIT license
2042
2043 (define-public python-simplejson
2044 (package
2045 (name "python-simplejson")
2046 (version "3.17.0")
2047 (source
2048 (origin
2049 (method url-fetch)
2050 (uri (pypi-uri "simplejson" version))
2051 (sha256
2052 (base32
2053 "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
2054 (build-system python-build-system)
2055 (home-page "http://simplejson.readthedocs.org/en/latest/")
2056 (synopsis
2057 "Json library for Python")
2058 (description
2059 "JSON (JavaScript Object Notation) is a subset of JavaScript
2060 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
2061 format.
2062
2063 Simplejson exposes an API familiar to users of the standard library marshal
2064 and pickle modules. It is the externally maintained version of the json
2065 library contained in Python 2.6, but maintains compatibility with Python 2.5
2066 and (currently) has significant performance advantages, even without using
2067 the optional C extension for speedups. Simplejson is also supported on
2068 Python 3.3+.")
2069 (license license:x11)))
2070
2071 (define-public python2-simplejson
2072 (package-with-python2 python-simplejson))
2073
2074
2075 (define-public python-pyicu
2076 (package
2077 (name "python-pyicu")
2078 (version "2.4.3")
2079 (source
2080 (origin
2081 (method url-fetch)
2082 (uri (pypi-uri "PyICU" version))
2083 (sha256
2084 (base32
2085 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
2086 (build-system python-build-system)
2087 (inputs
2088 `(("icu4c" ,icu4c)))
2089 (native-inputs
2090 `(("python-pytest" ,python-pytest)
2091 ("python-six" ,python-six)))
2092 (home-page "https://github.com/ovalhub/pyicu")
2093 (synopsis "Python extension wrapping the ICU C++ API")
2094 (description
2095 "PyICU is a python extension wrapping the ICU C++ API.")
2096 (license license:x11)))
2097
2098 (define-public python2-pyicu
2099 (package-with-python2 python-pyicu))
2100
2101 (define-public python-dogtail
2102 (package
2103 (name "python-dogtail")
2104 (version "0.9.11")
2105 (source (origin
2106 (method url-fetch)
2107 (uri
2108 (string-append
2109 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
2110 "dogtail-" version ".tar.gz"))
2111 (sha256
2112 (base32
2113 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
2114 (build-system python-build-system)
2115 (arguments
2116 `(#:tests? #f ; TODO Launching dbus for the tests
2117 ; fails
2118 #:phases
2119 (modify-phases %standard-phases
2120 (replace 'check
2121 (lambda* (#:key tests? #:allow-other-keys)
2122 (when tests?
2123 (system "Xvfb :1 &")
2124 (setenv "DISPLAY" ":1")
2125 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
2126 #t)))))
2127 (propagated-inputs
2128 `(("python-pygobject" ,python-pygobject)
2129 ("python-pycairo" ,python-pycairo)
2130 ("python-pyatspi" ,python-pyatspi)))
2131 (native-inputs
2132 `(("python-nose" ,python-nose)
2133 ("gtk+" ,gtk+)
2134 ("xvfb" ,xorg-server)
2135 ("dbus" ,dbus)
2136 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
2137 ("gobject-introspection" ,gobject-introspection)))
2138 (home-page "https://gitlab.com/dogtail/dogtail/")
2139 (synopsis "GUI test tool and automation framework written in Python")
2140 (description
2141 "Dogtail is a GUI test tool and automation framework written in Python.
2142 It uses Accessibility (a11y) technologies to communicate with desktop
2143 applications. dogtail scripts are written in Python and executed like any
2144 other Python program.")
2145 (license license:gpl2+)))
2146
2147 (define-public python2-dogtail
2148 (package-with-python2 python-dogtail))
2149
2150 (define-public python-empy
2151 (package
2152 (name "python-empy")
2153 (version "3.3.3")
2154 (source (origin
2155 (method url-fetch)
2156 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
2157 version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
2161 (build-system python-build-system)
2162 (arguments
2163 `(#:tests? #f)) ; python2 only
2164 (home-page "http://www.alcyone.com/software/empy/")
2165 (synopsis "Templating system for Python")
2166 (description
2167 "EmPy is a system for embedding Python expressions and statements in
2168 template text; it takes an EmPy source file, processes it, and produces
2169 output. This is accomplished via expansions, which are special signals to the
2170 EmPy system and are set off by a special prefix (by default the at sign, @@).
2171 EmPy can expand arbitrary Python expressions and statements in this way, as
2172 well as a variety of special forms. Textual data not explicitly delimited in
2173 this way is sent unaffected to the output, allowing Python to be used in
2174 effect as a markup language. Also supported are callbacks via hooks,
2175 recording and playback via diversions, and dynamic, chainable filters. The
2176 system is highly configurable via command line options and embedded
2177 commands.")
2178 (license license:lgpl2.1+)))
2179
2180 (define-public python2-empy
2181 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
2182 (package/inherit base
2183 (arguments `(,@(package-arguments base)
2184 #:tests? #t)))))
2185
2186 (define-public python2-element-tree
2187 (package
2188 (name "python2-element-tree")
2189 (version "1.2.6")
2190 (source (origin
2191 (method url-fetch)
2192 (uri (string-append
2193 "http://effbot.org/media/downloads/elementtree-"
2194 version "-20050316.tar.gz"))
2195 (sha256
2196 (base32
2197 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
2198 (build-system python-build-system)
2199 (arguments
2200 `(#:python ,python-2 ; seems to be part of Python 3
2201 #:tests? #f)) ; no 'test' sub-command
2202 (synopsis "Toolkit for XML processing in Python")
2203 (description
2204 "ElementTree is a Python library supporting lightweight XML processing.")
2205 (home-page "https://effbot.org/zone/element-index.htm")
2206 (license (license:x11-style
2207 "http://docs.python.org/2/license.html"
2208 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
2209
2210 (define-public python2-pybugz
2211 (package
2212 (name "python2-pybugz")
2213 (version "0.6.11")
2214 (source (origin
2215 (method url-fetch)
2216 (uri (string-append
2217 "http://bits.liquidx.net/projects/pybugz/pybugz-"
2218 version ".tar.gz"))
2219 (sha256
2220 (base32
2221 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
2222 (patches (search-patches "pybugz-stty.patch"
2223 "pybugz-encode-error.patch"))))
2224 (build-system python-build-system)
2225 (arguments
2226 `(#:python ,python-2 ; SyntaxError with Python 3
2227 #:tests? #f)) ; no 'test' sub-command
2228 (propagated-inputs
2229 `(("element-tree" ,python2-element-tree)))
2230 (synopsis "Python and command-line interface to Bugzilla")
2231 (description
2232 "PyBugz is a Python library and command-line tool to query the Bugzilla
2233 bug tracking system. It is meant as an aid to speed up interaction with the
2234 bug tracker.")
2235 (home-page "http://www.liquidx.net/pybugz/")
2236 (license license:gpl2)))
2237
2238 (define-public python2-enum
2239 (package
2240 (name "python2-enum")
2241 (version "0.4.6")
2242 (source (origin
2243 (method url-fetch)
2244 (uri (pypi-uri "enum" version))
2245 (sha256
2246 (base32
2247 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
2248 (build-system python-build-system)
2249 (arguments
2250 `(#:python ,python-2))
2251 (home-page "https://pypi.org/project/enum/")
2252 (synopsis "Robust enumerated type support in Python")
2253 (description
2254 "This provides a module for robust enumerations in Python. It has
2255 been superseded by the Python standard library and is provided only for
2256 compatibility.")
2257 ;; Choice of either license.
2258 (license (list license:gpl3+ license:psfl))))
2259
2260 (define-public python-enum34
2261 (package
2262 (name "python-enum34")
2263 (version "1.1.6")
2264 (source
2265 (origin
2266 (method url-fetch)
2267 (uri (pypi-uri "enum34" version))
2268 (sha256
2269 (base32
2270 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
2271 (build-system python-build-system)
2272 (home-page "https://pypi.org/project/enum34/")
2273 (synopsis "Backported Python 3.4 Enum")
2274 (description
2275 "Enum34 is the new Python stdlib enum module available in Python 3.4
2276 backported for previous versions of Python from 2.4 to 3.3.")
2277 (license license:bsd-3)))
2278
2279 (define-public python2-enum34
2280 (package-with-python2 python-enum34))
2281
2282 (define-public python-parse-type
2283 (package
2284 (name "python-parse-type")
2285 (version "0.4.2")
2286 (source
2287 (origin
2288 (method url-fetch)
2289 (uri (pypi-uri "parse_type" version))
2290 (sha256
2291 (base32
2292 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
2293 (build-system python-build-system)
2294 (propagated-inputs
2295 `(("python-six" ,python-six)
2296 ("python-parse" ,python-parse)))
2297 (native-inputs
2298 `(("python-pytest" ,python-pytest)
2299 ("python-pytest-runner" ,python-pytest-runner)))
2300 (home-page "https://github.com/jenisys/parse_type")
2301 (synopsis "Extended parse module")
2302 (description
2303 "Parse_type extends the python parse module.")
2304 (properties
2305 `((python2-variant . ,(delay python2-parse-type))))
2306 (license license:bsd-3)))
2307
2308 (define-public python2-parse-type
2309 (let ((base (package-with-python2
2310 (strip-python2-variant python-parse-type))))
2311 (package/inherit base
2312 (propagated-inputs
2313 `(("python2-enum34" ,python2-enum34)
2314 ,@(package-propagated-inputs base))))))
2315
2316 (define-public python-parse
2317 (package
2318 (name "python-parse")
2319 (version "1.18.0")
2320 (source
2321 (origin
2322 (method url-fetch)
2323 (uri (pypi-uri "parse" version))
2324 (sha256
2325 (base32
2326 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
2327 (build-system python-build-system)
2328 (arguments
2329 `(#:phases
2330 (modify-phases %standard-phases
2331 (replace 'check
2332 (lambda _ (invoke "python" "test_parse.py"))))))
2333 (home-page "https://github.com/r1chardj0n3s/parse")
2334 (synopsis "Parse strings")
2335 (description
2336 "Parse strings using a specification based on the Python @code{format()}
2337 syntax.")
2338 (license license:x11)))
2339
2340 (define-public python-polib
2341 (package
2342 (name "python-polib")
2343 (version "1.1.0")
2344 (source (origin
2345 (method url-fetch)
2346 (uri (pypi-uri "polib" version))
2347 (sha256
2348 (base32
2349 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
2350 (build-system python-build-system)
2351 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2352 (synopsis "Manipulate, create and modify gettext files")
2353 (description "Polib can manipulate any gettext format (po, pot and mo)
2354 files. It can be used to create po files from scratch or to modify
2355 existing ones.")
2356 (license license:expat)))
2357
2358 (define-public python2-polib
2359 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2360 (package/inherit base
2361 (arguments `(,@(package-arguments base)
2362 ;; Tests don't work with python2.
2363 #:tests? #f)))))
2364
2365 (define-public python-poyo
2366 (package
2367 (name "python-poyo")
2368 (version "0.5.0")
2369 (source
2370 (origin
2371 (method url-fetch)
2372 (uri (pypi-uri "poyo" version))
2373 (sha256
2374 (base32
2375 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2376 (build-system python-build-system)
2377 (home-page "https://github.com/hackebrot/poyo")
2378 (synopsis "Lightweight YAML Parser for Python")
2379 (description
2380 "This package provides a lightweight YAML Parser for Python. It supports
2381 only a chosen subset of the YAML format that is required to parse cookiecutter
2382 user configuration files. It does not have support for serializing into YAML
2383 and is not compatible with JSON.")
2384 (license license:expat)))
2385
2386 (define-public scons
2387 (package
2388 (name "scons")
2389 (version "3.0.4")
2390 (source (origin
2391 (method git-fetch)
2392 (uri (git-reference
2393 (url "https://github.com/SCons/scons")
2394 (commit version)))
2395 (file-name (git-file-name name version))
2396 (sha256
2397 (base32
2398 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2399 (build-system python-build-system)
2400 (arguments
2401 `(#:use-setuptools? #f ; still relies on distutils
2402 #:tests? #f ; no 'python setup.py test' command
2403 #:phases
2404 (modify-phases %standard-phases
2405 (add-before 'build 'bootstrap
2406 (lambda _
2407 (substitute* "src/engine/SCons/compat/__init__.py"
2408 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2409 "sys.modules[new] = __import__(old)"))
2410 (substitute* "src/engine/SCons/Platform/__init__.py"
2411 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2412 "mod = __import__(full_name)"))
2413 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2414 (chdir "build/scons")
2415 #t)))))
2416 (home-page "https://scons.org/")
2417 (synopsis "Software construction tool written in Python")
2418 (description
2419 "SCons is a software construction tool. Think of SCons as an improved,
2420 cross-platform substitute for the classic Make utility with integrated
2421 functionality similar to autoconf/automake and compiler caches such as ccache.
2422 In short, SCons is an easier, more reliable and faster way to build
2423 software.")
2424 (license license:x11)))
2425
2426 (define-public scons-python2
2427 (package
2428 (inherit (package-with-python2 scons))
2429 (name "scons-python2")))
2430
2431 (define-public python-extension-helpers
2432 (package
2433 (name "python-extension-helpers")
2434 (version "0.1")
2435 (source
2436 (origin
2437 (method url-fetch)
2438 (uri (pypi-uri "extension-helpers" version))
2439 (sha256
2440 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
2441 (build-system python-build-system)
2442 (native-inputs
2443 `(("coverage" ,python-coverage)
2444 ("pytest" ,python-pytest-astropy)
2445 ("pytest-cov" ,python-pytest-cov)
2446 ("setuptools-scm" ,python-setuptools-scm)))
2447 (home-page "https://github.com/astropy/astropy-helpers")
2448 (synopsis
2449 "Utilities for building and installing packages in the Astropy ecosystem")
2450 (description
2451 "The extension-helpers package includes many build, installation, and
2452 documentation-related tools used by the Astropy project.")
2453 (license license:bsd-3)))
2454
2455 (define-public python-extras
2456 (package
2457 (name "python-extras")
2458 (version "1.0.0")
2459 (source
2460 (origin
2461 (method url-fetch)
2462 (uri (pypi-uri "extras" version))
2463 (sha256
2464 (base32
2465 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2466 (build-system python-build-system)
2467 (arguments
2468 ;; FIXME: Circular dependency on testtools.
2469 '(#:tests? #f))
2470 (home-page "https://github.com/testing-cabal/extras")
2471 (synopsis "Useful extensions to the Python standard library")
2472 (description
2473 "Extras is a set of extensions to the Python standard library.")
2474 (license license:expat)))
2475
2476 (define-public python2-extras
2477 (package-with-python2 python-extras))
2478
2479 (define-public python-mimeparse
2480 (package
2481 (name "python-mimeparse")
2482 (version "1.6.0")
2483 (source
2484 (origin
2485 (method url-fetch)
2486 (uri (pypi-uri "python-mimeparse" version))
2487 (sha256
2488 (base32
2489 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2490 (build-system python-build-system)
2491 (arguments
2492 '(#:phases
2493 (modify-phases %standard-phases
2494 (replace 'check
2495 (lambda _
2496 (invoke "./mimeparse_test.py"))))))
2497 (home-page
2498 "https://github.com/dbtsai/python-mimeparse")
2499 (synopsis "Python library for parsing MIME types")
2500 (description
2501 "Mimeparse provides basic functions for parsing MIME type names and
2502 matching them against a list of media-ranges.")
2503 (license license:expat)))
2504
2505 (define-public python2-mimeparse
2506 (package-with-python2 python-mimeparse))
2507
2508 (define-public python-miniboa
2509 (package
2510 (name "python-miniboa")
2511 (version "1.0.7")
2512 (source
2513 (origin
2514 (method url-fetch)
2515 (uri (pypi-uri "miniboa" version))
2516 (sha256
2517 (base32
2518 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2519 (build-system python-build-system)
2520 (home-page "https://github.com/shmup/miniboa")
2521 (synopsis "Simple, single-threaded Telnet server")
2522 (description
2523 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2524 server.")
2525 (license license:asl2.0)))
2526
2527 (define-public python2-miniboa
2528 (package-with-python2 python-miniboa))
2529
2530 (define-public python-pafy
2531 (package
2532 (name "python-pafy")
2533 (version "0.5.3.1")
2534 (source
2535 (origin
2536 (method url-fetch)
2537 (uri (pypi-uri "pafy" version))
2538 (sha256
2539 (base32
2540 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2541 (build-system python-build-system)
2542 (arguments
2543 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2544 (propagated-inputs
2545 ;; Youtube-dl is a python package which is imported in the file
2546 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2547 `(("youtube-dl" ,youtube-dl)))
2548 (home-page "https://np1.github.io/pafy/")
2549 (synopsis "Retrieve YouTube content and metadata")
2550 (description
2551 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2552 (license license:lgpl3+)))
2553
2554 (define-public python2-funcsigs
2555 (package
2556 (name "python2-funcsigs")
2557 (version "1.0.2")
2558 (source (origin
2559 (method url-fetch)
2560 (uri (pypi-uri "funcsigs" version))
2561 (sha256
2562 (base32
2563 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2564 (build-system python-build-system)
2565 (arguments
2566 `(#:python ,python-2))
2567 (native-inputs
2568 `(("python2-unittest2" ,python2-unittest2)))
2569 (home-page "http://funcsigs.readthedocs.org")
2570 (synopsis "Python function signatures from PEP362")
2571 (description
2572 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2573 (license license:asl2.0)))
2574
2575 (define-public python2-funcsigs-bootstrap
2576 (package
2577 (inherit python2-funcsigs)
2578 (name "python2-funcsigs-bootstrap")
2579 (native-inputs `())
2580 (arguments
2581 `(#:tests? #f
2582 ,@(package-arguments python2-funcsigs)))))
2583
2584 (define-public python-py
2585 (package
2586 (name "python-py")
2587 (version "1.8.1")
2588 (source
2589 (origin
2590 (method url-fetch)
2591 (uri (pypi-uri "py" version))
2592 (sha256
2593 (base32
2594 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2595 (build-system python-build-system)
2596 (arguments
2597 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2598 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2599 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2600 ;; Is this module globally installed?"
2601 '(#:tests? #f))
2602 (native-inputs
2603 `(("python-setuptools-scm" ,python-setuptools-scm)))
2604 (home-page "https://github.com/pytest-dev/py")
2605 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2606 (description
2607 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2608 code introspection, and logging.")
2609 (license license:expat)))
2610
2611 (define-public python-py-next
2612 (package
2613 (inherit python-py)
2614 (version "1.9.0")
2615 (source
2616 (origin
2617 (method url-fetch)
2618 (uri (pypi-uri "py" version))
2619 (sha256
2620 (base32
2621 "0hpk0gzd4v1pcnq7zinwg5n219czi23qghcswykqskkbwly8i9lw"))))))
2622
2623 (define-public python2-py
2624 (package-with-python2 python-py))
2625
2626 ;; Recent versions of python-fixtures and python-testrepository need
2627 ;; python-pbr for packaging, which itself needs these two packages for
2628 ;; testing.
2629 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2630 ;; same source, just without any test dependencies and with tests disabled.
2631 ;; python-pbr-minmal is then used to package python-fixtures and
2632 ;; python-testrepository.
2633 ;; Strictly speaking we currently could remove the test-requirements from the
2634 ;; normal python-pbr package (and save this package) since test are disabled
2635 ;; there anyway. But this may change in future.
2636 (define-public python-pbr-minimal
2637 (package
2638 (name "python-pbr-minimal")
2639 (version "3.0.1")
2640 (source
2641 (origin
2642 (method url-fetch)
2643 (uri (pypi-uri "pbr" version))
2644 (sha256
2645 (base32
2646 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2647 (build-system python-build-system)
2648 (arguments
2649 `(#:tests? #f))
2650 (home-page "https://docs.openstack.org/pbr/latest/")
2651 (synopsis "Minimal build of python-pbr used for bootstrapping")
2652 (description
2653 "Used only for bootstrapping python2-pbr, you should not need this.")
2654 (license license:asl2.0)))
2655
2656 (define-public python-pbr
2657 (package
2658 (inherit python-pbr-minimal)
2659 (name "python-pbr")
2660 (arguments
2661 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2662 (propagated-inputs
2663 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2664 (native-inputs
2665 `(("python-fixtures" ,python-fixtures-bootstrap)
2666 ;; discover, coverage, hacking, subunit
2667 ("python-mock" ,python-mock)
2668 ("python-six" ,python-six)
2669 ("python-sphinx" ,python-sphinx)
2670 ("python-testrepository" ,python-testrepository-bootstrap)
2671 ("python-testresources" ,python-testresources-bootstrap)
2672 ("python-testscenarios" ,python-testscenarios-bootstrap)
2673 ("python-testtools" ,python-testtools-bootstrap)
2674 ("python-virtualenv" ,python-virtualenv)))
2675 (synopsis "Enhance the default behavior of Python’s setuptools")
2676 (description
2677 "Python Build Reasonableness (PBR) is a library that injects some useful
2678 and sensible default behaviors into your setuptools run. It will set
2679 versions, process requirements files and generate AUTHORS and ChangeLog file
2680 from git information.
2681 ")))
2682
2683 (define-public python-pyrsistent
2684 (package
2685 (name "python-pyrsistent")
2686 (version "0.16.0")
2687 (home-page "https://github.com/tobgu/pyrsistent")
2688 (source (origin
2689 (method url-fetch)
2690 (uri (pypi-uri "pyrsistent" version))
2691 (sha256
2692 (base32
2693 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2694 (build-system python-build-system)
2695 (arguments
2696 '(#:phases (modify-phases %standard-phases
2697 ;; The package works fine with newer Pytest and Hypothesis, but
2698 ;; has pinned older versions to stay compatible with Python 2.
2699 (add-before 'check 'loosen-pytest-requirement
2700 (lambda _
2701 (substitute* "setup.py"
2702 (("pytest<5") "pytest")
2703 (("hypothesis<5") "hypothesis"))
2704 #t)))))
2705 (native-inputs
2706 `(("python-hypothesis" ,python-hypothesis)
2707 ("python-pytest" ,python-pytest)
2708 ("python-pytest-runner" ,python-pytest-runner)))
2709 (propagated-inputs
2710 `(("python-six" ,python-six)))
2711 (synopsis "Persistent data structures for Python")
2712 (description
2713 "Pyrsistent is a number of persistent collections (by some referred to as
2714 functional data structures). Persistent in the sense that they are immutable.
2715
2716 All methods on a data structure that would normally mutate it instead return a
2717 new copy of the structure containing the requested updates. The original
2718 structure is left untouched.")
2719 (license license:expat)))
2720
2721 (define-public python2-pyrsistent
2722 (package-with-python2 python-pyrsistent))
2723
2724 (define-public python-exif-read
2725 (package
2726 (name "python-exif-read")
2727 (version "2.1.2")
2728 (source (origin
2729 (method url-fetch)
2730 (uri (pypi-uri "ExifRead" version))
2731 (sha256
2732 (base32
2733 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2734 (build-system python-build-system)
2735 (arguments `(#:tests? #f)) ; no tests
2736 (home-page "https://github.com/ianare/exif-py")
2737 (synopsis "Python library to extract EXIF data from image files")
2738 (description
2739 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2740 files.")
2741 (license license:bsd-3)))
2742
2743 (define-public python2-exif-read
2744 (package-with-python2 python-exif-read))
2745
2746 (define-public python-pyld
2747 (package
2748 (name "python-pyld")
2749 (version "1.0.5")
2750 (source (origin
2751 (method url-fetch)
2752 (uri (pypi-uri "PyLD" version))
2753 (sha256
2754 (base32
2755 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2756 (build-system python-build-system)
2757 (home-page "https://github.com/digitalbazaar/pyld")
2758 (synopsis "Python implementation of the JSON-LD specification")
2759 (description
2760 "PyLD is an implementation of the JSON-LD specification.")
2761 (license license:bsd-3)))
2762
2763 (define-public python2-pyld
2764 (package-with-python2 python-pyld))
2765
2766 (define-public python-cli-helpers
2767 (package
2768 (name "python-cli-helpers")
2769 (version "2.0.1")
2770 (source
2771 (origin
2772 ;; There's no source tarball on PyPI.
2773 (method git-fetch)
2774 (uri (git-reference
2775 (url "https://github.com/dbcli/cli_helpers")
2776 (commit (string-append "v" version))))
2777 (file-name (git-file-name name version))
2778 (sha256
2779 (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
2780 (build-system python-build-system)
2781 (native-inputs
2782 `(("python-pytest" ,python-pytest)))
2783 (propagated-inputs
2784 `(("python-wcwidth" ,python-wcwidth)
2785 ("python-configobj" ,python-configobj)
2786 ("python-tabulate" ,python-tabulate)
2787 ("python-terminaltables" ,python-terminaltables)))
2788 (home-page "https://github.com/dbcli/cli_helpers")
2789 (synopsis "Helpers for building command-line apps")
2790 (description
2791 "CLI Helpers is a Python package that makes it easy to perform common
2792 tasks when building command-line apps. It's a helper library for command-line
2793 interfaces.")
2794 (license license:bsd-3)))
2795
2796 (define-public python-click
2797 (package
2798 (name "python-click")
2799 (version "7.1.2")
2800 (source
2801 (origin
2802 (method url-fetch)
2803 (uri (pypi-uri "click" version))
2804 (sha256
2805 (base32
2806 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
2807 (build-system python-build-system)
2808 (arguments
2809 `(#:phases
2810 (modify-phases %standard-phases
2811 (add-after 'unpack 'fix-paths
2812 (lambda* (#:key inputs #:allow-other-keys)
2813 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2814 "cross-libc" "libc"))))
2815 (substitute* "src/click/_unicodefun.py"
2816 (("'locale'")
2817 (string-append "'" glibc "/bin/locale'"))))
2818 #t))
2819 (replace 'check
2820 (lambda _
2821 (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
2822 (invoke "python" "-m" "pytest"))))))
2823 (native-inputs
2824 `(("python-pytest" ,python-pytest)))
2825 (home-page "https://palletsprojects.com/p/click/")
2826 (synopsis "Command line library for Python")
2827 (description
2828 "Click is a Python package for creating command line interfaces in a
2829 composable way with as little code as necessary. Its name stands for
2830 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2831 with sensible defaults out of the box.")
2832 (license license:bsd-3)))
2833
2834 (define-public python2-click
2835 (package-with-python2 python-click))
2836
2837 (define-public python-click-5
2838 (package (inherit python-click)
2839 (name "python-click")
2840 (version "5.1")
2841 (source
2842 (origin
2843 (method url-fetch)
2844 (uri (pypi-uri "click" version))
2845 (sha256
2846 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2847 (arguments `())))
2848
2849 (define-public python-vcversioner
2850 (package
2851 (name "python-vcversioner")
2852 (version "2.16.0.0")
2853 (source
2854 (origin
2855 (method url-fetch)
2856 (uri (pypi-uri "vcversioner" version))
2857 (sha256
2858 (base32
2859 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2860 (build-system python-build-system)
2861 (synopsis "Python library for version number discovery")
2862 (description "Vcversioner is a Python library that inspects tagging
2863 information in a variety of version control systems in order to discover
2864 version numbers.")
2865 (home-page "https://github.com/habnabit/vcversioner")
2866 (license license:isc)))
2867
2868 (define-public python2-vcversioner
2869 (package-with-python2 python-vcversioner))
2870
2871 (define-public python-jdcal
2872 (package
2873 (name "python-jdcal")
2874 (version "1.4")
2875 (source
2876 (origin
2877 (method url-fetch)
2878 (uri (pypi-uri "jdcal" version))
2879 (sha256
2880 (base32
2881 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2882 (build-system python-build-system)
2883 (arguments
2884 `(#:phases (modify-phases %standard-phases
2885 (replace 'check
2886 (lambda _
2887 (invoke "pytest"))))))
2888 (native-inputs
2889 `(("python-pytest" ,python-pytest)))
2890 (home-page "https://github.com/phn/jdcal")
2891 (synopsis "Functions to convert between Julian dates Gregorian dates")
2892 (description "This Python library provides functions for converting
2893 between Julian dates and Gregorian dates.")
2894 (license license:bsd-2)))
2895
2896 (define-public python2-jdcal
2897 (package-with-python2 python-jdcal))
2898
2899 (define-public python-jsondiff
2900 (package
2901 (name "python-jsondiff")
2902 (version "1.2.0")
2903 (source
2904 (origin
2905 (method url-fetch)
2906 (uri (pypi-uri "jsondiff" version))
2907 (sha256
2908 (base32
2909 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2910 (build-system python-build-system)
2911 (native-inputs
2912 `(("python-nose" ,python-nose)
2913 ("python-nose-random" ,python-nose-random)))
2914 (home-page
2915 "https://github.com/fzumstein/jsondiff")
2916 (synopsis "Compare JSON and JSON-like structures in Python")
2917 (description "@code{jsondiff} is a Python library which lets you
2918 compare, diff, and patch JSON and JSON-like structures in Python.")
2919 (license license:expat)))
2920
2921 (define-public python-jsonschema
2922 (package
2923 (name "python-jsonschema")
2924 (version "3.2.0")
2925 (source (origin
2926 (method url-fetch)
2927 (uri (pypi-uri "jsonschema" version))
2928 (sha256
2929 (base32
2930 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2931 (build-system python-build-system)
2932 (arguments
2933 '(#:phases
2934 (modify-phases %standard-phases
2935 (replace 'check
2936 (lambda* (#:key inputs outputs #:allow-other-keys)
2937 (add-installed-pythonpath inputs outputs)
2938 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2939 (invoke "trial" "jsonschema"))))))
2940 (native-inputs
2941 `(("python-setuptools_scm" ,python-setuptools-scm)
2942 ("python-twisted" ,python-twisted)))
2943 (propagated-inputs
2944 `(("python-attrs" ,python-attrs)
2945 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2946 ("python-pyrsistent" ,python-pyrsistent)
2947 ("python-six" ,python-six)))
2948 (home-page "https://github.com/Julian/jsonschema")
2949 (synopsis "Implementation of JSON Schema for Python")
2950 (description
2951 "Jsonschema is an implementation of JSON Schema for Python.")
2952 (license license:expat)
2953 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2954
2955 (define-public python2-jsonschema
2956 (let ((jsonschema (package-with-python2
2957 (strip-python2-variant python-jsonschema))))
2958 (package/inherit jsonschema
2959 (propagated-inputs
2960 `(("python2-functools32" ,python2-functools32)
2961 ,@(package-propagated-inputs jsonschema))))))
2962
2963 (define-public python-schema
2964 (package
2965 (name "python-schema")
2966 (version "0.6.6")
2967 (source
2968 (origin
2969 (method url-fetch)
2970 (uri (pypi-uri "schema" version))
2971 (sha256
2972 (base32
2973 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2974 (build-system python-build-system)
2975 (native-inputs
2976 `(("python-pytest" ,python-pytest)))
2977 (home-page "https://github.com/keleshev/schema")
2978 (synopsis "Simple data validation library")
2979 (description
2980 "@code{python-schema} is a library for validating Python data
2981 structures, such as those obtained from config-files, forms, external
2982 services or command-line parsing, converted from JSON/YAML (or
2983 something else) to Python data-types.")
2984 (license license:psfl)))
2985
2986 (define-public python2-schema
2987 (package-with-python2 python-schema))
2988
2989 (define-public python-schema-0.5
2990 (package (inherit python-schema)
2991 (version "0.5.0")
2992 (source
2993 (origin
2994 (method url-fetch)
2995 (uri (pypi-uri "schema" version))
2996 (sha256
2997 (base32
2998 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2999
3000 (define-public python2-schema-0.5
3001 (package-with-python2 python-schema-0.5))
3002
3003 (define-public python-kitchen
3004 (package
3005 (name "python-kitchen")
3006 (version "1.2.5")
3007 (source
3008 (origin
3009 (method url-fetch)
3010 (uri (pypi-uri "kitchen" version))
3011 (sha256
3012 (base32
3013 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3014 (build-system python-build-system)
3015 (propagated-inputs
3016 `(("python-chardet" ,python-chardet)))
3017 (home-page "https://github.com/fedora-infra/kitchen")
3018 (synopsis "Python API for snippets")
3019 (description "@code{kitchen} module provides a python API for all sorts of
3020 little useful snippets of code that everybody ends up writing for their projects
3021 but never seem big enough to build an independent release. Use kitchen and stop
3022 cutting and pasting that code over and over.")
3023 (license (list license:lgpl2.1+
3024 ;; subprocess.py, test_subprocess.py,
3025 ;; kitchen/pycompat25/defaultdict.py:
3026 license:psfl))))
3027
3028 (define-public python2-kitchen
3029 (package-with-python2 python-kitchen))
3030
3031 (define-public python-unidecode
3032 (package
3033 (name "python-unidecode")
3034 (version "1.1.1")
3035 (source (origin
3036 (method url-fetch)
3037 (uri (pypi-uri "Unidecode" version))
3038 (sha256
3039 (base32
3040 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3041 (build-system python-build-system)
3042 (home-page "https://pypi.org/project/Unidecode/")
3043 (synopsis "ASCII transliterations of Unicode text")
3044 (description
3045 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3046 useful when integrating with legacy code that doesn't support Unicode, or for
3047 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3048 machine identifiers from human-readable Unicode strings that should still be
3049 somewhat intelligible.")
3050 (license license:gpl2+)))
3051
3052 (define-public python2-unidecode
3053 (package-with-python2 python-unidecode))
3054
3055 (define-public python-text-unidecode
3056 (package
3057 (name "python-text-unidecode")
3058 (version "1.3")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "text-unidecode" version))
3062 (sha256
3063 (base32
3064 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3065 (build-system python-build-system)
3066 (arguments
3067 '(#:phases (modify-phases %standard-phases
3068 (replace 'check
3069 (lambda _
3070 (setenv "PYTHONPATH"
3071 (string-append "./build/lib:"
3072 (getenv "PYTHONPATH")))
3073 (invoke "pytest" "-vv"))))))
3074 (native-inputs
3075 `(("python-pytest" ,python-pytest)))
3076 (home-page "https://github.com/kmike/text-unidecode/")
3077 (synopsis "Decode Unicode data")
3078 (description
3079 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3080 Perl library. It can create ASCII representations of Unicode data. In general
3081 users should prefer the @code{python-unidecode} package which offers better
3082 memory usage and transliteration quality.")
3083 ;; The user can choose either license.
3084 (license (list license:clarified-artistic license:gpl2+))))
3085
3086 (define-public python2-text-unidecode
3087 (package-with-python2 python-text-unidecode))
3088
3089 (define-public python-pyjwt
3090 (package
3091 (name "python-pyjwt")
3092 (version "1.7.1")
3093 (source
3094 (origin
3095 (method url-fetch)
3096 (uri (pypi-uri "PyJWT" version))
3097 (sha256
3098 (base32
3099 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
3100 (modules '((guix build utils)))
3101 (snippet
3102 '(begin
3103 (for-each delete-file-recursively
3104 (find-files "." "\\.pyc$"))
3105 #t))))
3106 (build-system python-build-system)
3107 (arguments
3108 '(#:phases (modify-phases %standard-phases
3109 (replace 'check
3110 (lambda _
3111 ;; Mimic upstream commit 3a20892442b34c7 to get
3112 ;; rid of dependency on pytest-runner < 5.0.
3113 ;; Remove substitution for PyJWT > 1.7.1.
3114 (substitute* "setup.py"
3115 ((".*pytest-runner.*")
3116 ""))
3117 (invoke "pytest" "-vv"))))))
3118 (native-inputs
3119 `(("python-pytest" ,python-pytest)
3120 ("python-pytest-cov" ,python-pytest-cov)))
3121 (home-page "https://github.com/progrium/pyjwt")
3122 (synopsis "JSON Web Token implementation in Python")
3123 (description
3124 "PyJWT is a JSON Web Token implementation written in Python.")
3125 (license license:expat)))
3126
3127 (define-public python2-pyjwt
3128 (package-with-python2 python-pyjwt))
3129
3130 (define-public python-pykka
3131 (package
3132 (name "python-pykka")
3133 (version "1.2.1")
3134 (source
3135 (origin
3136 (method url-fetch)
3137 (uri (pypi-uri "Pykka" version))
3138 (sha256
3139 (base32
3140 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
3141 (build-system python-build-system)
3142 (native-inputs
3143 `(("python-mock" ,python-mock)
3144 ("python-nose" ,python-nose)
3145 ("python-gevent" ,python-gevent)
3146 ("python-eventlet" ,python-eventlet)))
3147 (home-page "https://www.pykka.org/")
3148 (synopsis "Pykka is a Python implementation of the actor model")
3149 (description
3150 "Pykka is a Python implementation of the actor model.
3151 The actor model introduces some simple rules to control the sharing
3152 of state and cooperation between execution units, which makes it
3153 easier to build concurrent applications.")
3154 (license license:asl2.0)))
3155
3156 (define-public python-pymsgbox
3157 (package
3158 (name "python-pymsgbox")
3159 (version "1.0.6")
3160 (source
3161 (origin
3162 (method git-fetch)
3163 (uri (git-reference
3164 ;; LICENSE.txt is not present on pypi
3165 (url "https://github.com/asweigart/PyMsgBox")
3166 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
3167 (file-name (git-file-name name version))
3168 (sha256
3169 (base32
3170 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
3171 (arguments
3172 ;; Circular dependency to run tests:
3173 ;; Tests need pyautogui, which depends on pymsgbox.
3174 '(#:tests? #f))
3175 (build-system python-build-system)
3176 (home-page "https://github.com/asweigart/PyMsgBox")
3177 (synopsis "Python module for JavaScript-like message boxes")
3178 (description
3179 "PyMsgBox is a simple, cross-platform, pure Python module for
3180 JavaScript-like message boxes. Types of dialog boxes include:
3181 @enumerate
3182 @item alert
3183 @item confirm
3184 @item prompt
3185 @item password
3186 @end enumerate
3187 ")
3188 (license license:bsd-3)))
3189
3190 (define-public python-pympler
3191 (package
3192 (name "python-pympler")
3193 (home-page "https://pythonhosted.org/Pympler/")
3194 (version "0.8")
3195 (source (origin
3196 (method url-fetch)
3197 (uri (pypi-uri "Pympler" version))
3198 (sha256
3199 (base32
3200 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
3201 (build-system python-build-system)
3202 (arguments
3203 `(#:phases (modify-phases %standard-phases
3204 (delete 'check)
3205 (add-after 'install 'check
3206 (lambda* (#:key inputs outputs #:allow-other-keys)
3207 (add-installed-pythonpath inputs outputs)
3208 (invoke "python" "setup.py" "test"))))))
3209 (synopsis "Measure, monitor and analyze memory behavior")
3210 (description
3211 "Pympler is a development tool to measure, monitor and analyze
3212 the memory behavior of Python objects in a running Python application.
3213
3214 By pympling a Python application, detailed insight in the size and the
3215 lifetime of Python objects can be obtained. Undesirable or unexpected
3216 runtime behavior like memory bloat and other @samp{pymples} can easily
3217 be identified.
3218
3219 A web profiling frontend exposes process statistics, garbage
3220 visualisation and class tracker statistics.")
3221 (license license:asl2.0)))
3222
3223 (define-public python2-pympler
3224 (package-with-python2 python-pympler))
3225
3226 (define-public python-itsdangerous
3227 (package
3228 (name "python-itsdangerous")
3229 (version "1.1.0")
3230 (source
3231 (origin
3232 (method url-fetch)
3233 (uri (pypi-uri "itsdangerous" version))
3234 (sha256
3235 (base32
3236 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
3237 (build-system python-build-system)
3238 (home-page "https://palletsprojects.com/p/itsdangerous/")
3239 (synopsis "Python library for passing data to/from untrusted environments")
3240 (description
3241 "Itsdangerous provides various helpers to pass trusted data to untrusted
3242 environments and back.")
3243 (license license:bsd-3)))
3244
3245 (define-public python2-itsdangerous
3246 (package-with-python2 python-itsdangerous))
3247
3248 (define-public python-pyyaml
3249 (package
3250 (name "python-pyyaml")
3251 (version "5.3.1")
3252 (source
3253 (origin
3254 (method url-fetch)
3255 (uri (pypi-uri "PyYAML" version))
3256 (sha256
3257 (base32
3258 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
3259 (build-system python-build-system)
3260 (inputs
3261 `(("libyaml" ,libyaml)))
3262 (home-page "https://pyyaml.org")
3263 (synopsis "YAML parser and emitter for Python")
3264 (description
3265 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
3266 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
3267 API, and sensible error messages. PyYAML supports standard YAML tags and
3268 provides Python-specific tags that represent an arbitrary Python object.")
3269 (license license:expat)))
3270
3271 (define-public python2-pyyaml
3272 (package-with-python2 python-pyyaml))
3273
3274 (define-public python-vine
3275 (package
3276 (name "python-vine")
3277 (version "1.1.4")
3278 (source
3279 (origin
3280 (method url-fetch)
3281 (uri (pypi-uri "vine" version))
3282 (sha256
3283 (base32
3284 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
3285 (build-system python-build-system)
3286 (native-inputs
3287 `(("python-pytest" ,python-pytest)
3288 ("python-case" ,python-case)))
3289 (home-page "https://github.com/celery/vine")
3290 (synopsis "Promises for Python")
3291 (description
3292 "@code{vine} provides a special implementation of promises in that it can
3293 be used both for \"promise of a value\" and lazy evaluation. The biggest
3294 upside for this is that everything in a promise can also be a promise,
3295 e.g. filters, callbacks and errbacks can all be promises.")
3296 (license license:bsd-3)))
3297
3298 (define-public python-virtualenv
3299 (package
3300 (name "python-virtualenv")
3301 (version "20.2.1")
3302 (source
3303 (origin
3304 (method url-fetch)
3305 (uri (pypi-uri "virtualenv" version))
3306 (sha256
3307 (base32
3308 "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0"))))
3309 (build-system python-build-system)
3310 (native-inputs
3311 `(("python-mock" ,python-mock)
3312 ("python-pytest" ,python-pytest)
3313 ;; NOTE: guix lint remarks that "python-setuptools should probably not
3314 ;; be an input at all". However, removing the input makes the build error:
3315 ;; File "setup.py", line 4, in <module>
3316 ;; raise RuntimeError("setuptools >= 41 required to build")
3317 ("python-setuptools" ,python-setuptools)
3318 ("python-setuptools-scm" ,python-setuptools-scm)))
3319 (propagated-inputs
3320 `(("python-appdirs" ,python-appdirs)
3321 ("python-distlib" ,python-distlib/next)
3322 ("python-filelock" ,python-filelock)
3323 ("python-six" ,python-six)
3324 ("python-importlib-metadata" ,python-importlib-metadata)))
3325 (home-page "https://virtualenv.pypa.io/")
3326 (synopsis "Virtual Python environment builder")
3327 (description
3328 "Virtualenv is a tool to create isolated Python environments.")
3329 (license license:expat)))
3330
3331 (define-public python-markupsafe
3332 (package
3333 (name "python-markupsafe")
3334 (version "1.1.1")
3335 (source
3336 (origin
3337 (method url-fetch)
3338 (uri (pypi-uri "MarkupSafe" version))
3339 (sha256
3340 (base32
3341 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3342 (build-system python-build-system)
3343 (arguments
3344 `(#:modules ((ice-9 ftw)
3345 (srfi srfi-1)
3346 (srfi srfi-26)
3347 (guix build utils)
3348 (guix build python-build-system))
3349 #:phases (modify-phases %standard-phases
3350 (replace 'check
3351 (lambda _
3352 (let ((cwd (getcwd))
3353 (libdir (find (cut string-prefix? "lib." <>)
3354 (scandir "build"))))
3355 (setenv "PYTHONPATH"
3356 (string-append cwd "/build/" libdir ":"
3357 (getenv "PYTHONPATH")))
3358 (invoke "pytest" "-vv")))))))
3359 (native-inputs
3360 `(("python-pytest" ,python-pytest)))
3361 (home-page "https://github.com/mitsuhiko/markupsafe")
3362 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3363 (description
3364 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3365 for Python.")
3366 (license license:bsd-3)))
3367
3368 (define-public python2-markupsafe
3369 (package-with-python2 python-markupsafe))
3370
3371 (define-public python-jinja2
3372 (package
3373 (name "python-jinja2")
3374 (version "2.11.2")
3375 (source
3376 (origin
3377 (method url-fetch)
3378 (uri (pypi-uri "Jinja2" version))
3379 (sha256
3380 (base32
3381 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3382 (build-system python-build-system)
3383 (arguments
3384 '(#:phases (modify-phases %standard-phases
3385 (replace 'check
3386 (lambda* (#:key tests? #:allow-other-keys)
3387 (if tests?
3388 (begin
3389 (setenv "PYTHONPATH"
3390 (string-append "./build/lib:"
3391 (getenv "PYTHONPATH")))
3392 (invoke "pytest" "-vv"))
3393 (format #t "test suite not run~%"))
3394 #t)))))
3395 (native-inputs
3396 `(("python-pytest" ,python-pytest)))
3397 (propagated-inputs
3398 `(("python-markupsafe" ,python-markupsafe)))
3399 (home-page "http://jinja.pocoo.org/")
3400 (synopsis "Python template engine")
3401 (description
3402 "Jinja2 is a small but fast and easy to use stand-alone template engine
3403 written in pure Python.")
3404 (license license:bsd-3)))
3405
3406 (define-public python2-jinja2
3407 (package-with-python2 python-jinja2))
3408
3409 (define-public python-jinja2-time
3410 (package
3411 (name "python-jinja2-time")
3412 (version "0.2.0")
3413 (source
3414 (origin
3415 (method url-fetch)
3416 (uri (pypi-uri "jinja2-time" version))
3417 (sha256
3418 (base32
3419 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3420 (build-system python-build-system)
3421 (propagated-inputs
3422 `(("python-arrow" ,python-arrow)
3423 ("python-jinja2" ,python-jinja2)))
3424 (home-page
3425 "https://github.com/hackebrot/jinja2-time")
3426 (synopsis "Jinja2 Extension for Dates and Times")
3427 (description
3428 "This package provides an extension for the template engine Jinja2. It
3429 adds a 'now' tag providing a convenient access to the arrow.now() API from
3430 templates. A format string can be provided to control the output.")
3431 (license license:expat)))
3432
3433 (define-public python-pystache
3434 (package
3435 (name "python-pystache")
3436 (version "0.5.4")
3437 (source (origin
3438 (method url-fetch)
3439 (uri (pypi-uri "pystache" version))
3440 (sha256
3441 (base32
3442 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3443 (build-system python-build-system)
3444 (arguments
3445 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3446 (home-page "http://defunkt.io/pystache/")
3447 (synopsis "Python logic-less template engine")
3448 (description
3449 "Pystache is a Python implementation of the framework agnostic,
3450 logic-free templating system Mustache.")
3451 (license license:expat)
3452 (properties `((python2-variant . ,(delay python2-pystache))))))
3453
3454 (define-public python2-pystache
3455 (let ((base (package-with-python2
3456 (strip-python2-variant python-pystache))))
3457 (package/inherit base
3458 (arguments
3459 `(#:python ,python-2
3460 #:phases
3461 (modify-phases %standard-phases
3462 (replace 'check
3463 (lambda _
3464 (invoke "python" "test_pystache.py")))))))))
3465
3466 (define-public python-joblib
3467 (package
3468 (name "python-joblib")
3469 (version "0.14.1")
3470 (source (origin
3471 (method url-fetch)
3472 (uri (pypi-uri "joblib" version))
3473 (sha256
3474 (base32
3475 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3476 (build-system python-build-system)
3477 (arguments
3478 `(#:phases
3479 (modify-phases %standard-phases
3480 (replace 'check
3481 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3482 (native-inputs
3483 `(("python-pytest" ,python-pytest)))
3484 (home-page "https://joblib.readthedocs.io/")
3485 (synopsis "Using Python functions as pipeline jobs")
3486 (description
3487 "Joblib is a set of tools to provide lightweight pipelining in Python.
3488 In particular, joblib offers: transparent disk-caching of the output values
3489 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3490 logging and tracing of the execution.")
3491 (license license:bsd-3)))
3492
3493 (define-public python2-joblib
3494 (package-with-python2 python-joblib))
3495
3496 (define-public python-daemon
3497 (package
3498 (name "python-daemon")
3499 (version "2.2.3")
3500 (source
3501 (origin
3502 (method url-fetch)
3503 (uri (pypi-uri "python-daemon" version))
3504 (sha256
3505 (base32
3506 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3507 (build-system python-build-system)
3508 (arguments
3509 `(#:phases
3510 (modify-phases %standard-phases
3511 (add-before 'check 'disable-tests
3512 (lambda _
3513 ;; FIXME: Determine why test fails
3514 (substitute* "test/test_daemon.py"
3515 (("test_detaches_process_context")
3516 "skip_test_detaches_process_context"))
3517 #t)))))
3518 (propagated-inputs
3519 `(("python-lockfile" ,python-lockfile)))
3520 (native-inputs
3521 `(("python-unittest2" ,python-unittest2)
3522 ("python-testtools" ,python-testtools)
3523 ("python-testscenarios" ,python-testscenarios)
3524 ("python-mock" ,python-mock)
3525 ("python-docutils" ,python-docutils)))
3526 (home-page "https://pagure.io/python-daemon/")
3527 (synopsis "Python library for making a Unix daemon process")
3528 (description "Python-daemon is a library that assists a Python program to
3529 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3530
3531 This library provides a @code{DaemonContext} class that manages the following
3532 important tasks for becoming a daemon process:
3533 @enumerate
3534 @item Detach the process into its own process group.
3535 @item Set process environment appropriate for running inside a chroot.
3536 @item Renounce suid and sgid privileges.
3537 @item Close all open file descriptors.
3538 @item Change the working directory, uid, gid, and umask.
3539 @item Set appropriate signal handlers.
3540 @item Open new file descriptors for stdin, stdout, and stderr.
3541 @item Manage a specified PID lock file.
3542 @item Register cleanup functions for at-exit processing.
3543 @end enumerate")
3544 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3545 (license (list license:asl2.0 license:gpl3+))))
3546
3547 (define-public python-anytree
3548 (package
3549 (name "python-anytree")
3550 (version "2.8.0")
3551 (source (origin
3552 (method url-fetch)
3553 (uri (pypi-uri "anytree" version))
3554 (sha256
3555 (base32
3556 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3557 (build-system python-build-system)
3558 (propagated-inputs
3559 `(("python-six" ,python-six)))
3560 (native-inputs
3561 `(;; For tests.
3562 ("graphviz" ,graphviz) ;for 'dot'
3563 ("python-nose" ,python-nose)))
3564 (home-page "https://github.com/c0fec0de/anytree")
3565 (synopsis "Lightweight tree data library")
3566 (description
3567 "@code{anytree} is a simple, lightweight, and extensible tree data
3568 structure for Python.")
3569 (license license:asl2.0)))
3570
3571 (define-public python-docutils
3572 (package
3573 (name "python-docutils")
3574 (version "0.16")
3575 (source
3576 (origin
3577 (method url-fetch)
3578 (uri (pypi-uri "docutils" version))
3579 (sha256
3580 (base32
3581 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3582 (build-system python-build-system)
3583 (arguments
3584 '(#:phases (modify-phases %standard-phases
3585 (replace 'check
3586 (lambda* (#:key tests? #:allow-other-keys)
3587 (if tests?
3588 (invoke "python" "test/alltests.py")
3589 (format #t "test suite not run~%"))
3590 #t)))))
3591 (home-page "http://docutils.sourceforge.net/")
3592 (synopsis "Python Documentation Utilities")
3593 (description
3594 "Docutils is a modular system for processing documentation into useful
3595 formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
3596 easy to use markup language, for input.
3597
3598 This package provides tools for converting @file{.rst} files to other formats
3599 via commands such as @command{rst2man}, as well as supporting Python code.")
3600 ;; Most of the source code is public domain, but some source files are
3601 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3602 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3603
3604 (define-public python2-docutils
3605 (package-with-python2 python-docutils))
3606
3607 ;; python2-sphinx fails its test suite with newer versions.
3608 (define-public python2-docutils-0.14
3609 (package
3610 (inherit python2-docutils)
3611 (version "0.14")
3612 (source (origin
3613 (method url-fetch)
3614 (uri (pypi-uri "docutils" version))
3615 (sha256
3616 (base32
3617 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3618
3619 (define-public python-restructuredtext-lint
3620 (package
3621 (name "python-restructuredtext-lint")
3622 (version "1.3.0")
3623 (source
3624 (origin
3625 (method url-fetch)
3626 (uri (pypi-uri "restructuredtext-lint" version))
3627 (sha256
3628 (base32
3629 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3630 (build-system python-build-system)
3631 (arguments
3632 `(#:phases
3633 (modify-phases %standard-phases
3634 (delete 'check)
3635 (add-after 'install 'check
3636 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3637 (when tests?
3638 (add-installed-pythonpath inputs outputs)
3639 (invoke "nosetests" "-v"))
3640 #t)))))
3641 (propagated-inputs
3642 `(("python-docutils" ,python-docutils)))
3643 (native-inputs
3644 `(("python-nose" ,python-nose)))
3645 (home-page "https://github.com/twolfson/restructuredtext-lint")
3646 (synopsis "reStructuredText linter")
3647 (description "This package provides a linter for the reStructuredText
3648 format.")
3649 (license license:unlicense)))
3650
3651 (define-public python-doc8
3652 (package
3653 (name "python-doc8")
3654 (version "0.8.0")
3655 (source
3656 (origin
3657 (method url-fetch)
3658 (uri (pypi-uri "doc8" version))
3659 (sha256
3660 (base32
3661 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3662 (build-system python-build-system)
3663 (arguments
3664 `(#:phases
3665 (modify-phases %standard-phases
3666 (delete 'check)
3667 (add-after 'install 'check
3668 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3669 (when tests?
3670 (add-installed-pythonpath inputs outputs)
3671 (invoke "pytest" "-v"))
3672 #t)))))
3673 (propagated-inputs
3674 `(("python-chardet" ,python-chardet)
3675 ("python-docutils" ,python-docutils)
3676 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3677 ("python-six" ,python-six)
3678 ("python-stevedore" ,python-stevedore)))
3679 (native-inputs
3680 `(("python-testtools" ,python-testtools)
3681 ("python-pytest" ,python-pytest)))
3682 (home-page "https://launchpad.net/doc8")
3683 (synopsis
3684 "Style checker for Sphinx (or other) RST documentation")
3685 (description
3686 "Doc8 is an opinionated style checker for reStructured Text and plain
3687 text styles of documentation.")
3688 (license license:asl2.0)))
3689
3690 (define-public python-pygments
3691 (package
3692 (name "python-pygments")
3693 (version "2.7.3")
3694 (source
3695 (origin
3696 (method url-fetch)
3697 (uri (pypi-uri "Pygments" version))
3698 (sha256
3699 (base32
3700 "05mps9r966r3dpqw6zrs1nlwjdf5y4960hl9m7abwb3qyfnarwyc"))))
3701 (replacement python-pygments/fixed)
3702 (build-system python-build-system)
3703 (arguments
3704 ;; FIXME: Tests require sphinx, which depends on this.
3705 '(#:tests? #f))
3706 (home-page "https://pygments.org/")
3707 (synopsis "Syntax highlighting")
3708 (description
3709 "Pygments is a syntax highlighting package written in Python.")
3710 (license license:bsd-2)
3711 (properties `((python2-variant . ,(delay python2-pygments))))))
3712
3713 (define python-pygments/fixed
3714 (package/inherit python-pygments
3715 (version "2.7.4")
3716 (source
3717 (origin
3718 (method url-fetch)
3719 (uri (pypi-uri "Pygments" version))
3720 (sha256
3721 (base32
3722 "0dy35ry5qa8dpklk4fkj9kfpw2qb4mh5ha9866kw30wf96dx0jfz"))))))
3723
3724 ;; Pygments 2.6 and later does not support Python 2.
3725 (define-public python2-pygments
3726 (let ((base (package-with-python2 (strip-python2-variant python-pygments))))
3727 (package
3728 (inherit base)
3729 (version "2.5.2")
3730 (source (origin
3731 (method url-fetch)
3732 (uri (pypi-uri "Pygments" version))
3733 (sha256
3734 (base32
3735 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q")))))))
3736
3737 (define-public python-bump2version
3738 (package
3739 (name "python-bump2version")
3740 (version "1.0.1")
3741 (source
3742 (origin
3743 (method url-fetch)
3744 (uri (pypi-uri "bump2version" version))
3745 (sha256
3746 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
3747 (build-system python-build-system)
3748 (arguments
3749 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
3750 ;; required: --new-version".
3751 `(#:tests? #false))
3752 (home-page "https://github.com/c4urself/bump2version")
3753 (synopsis "Version-bump your software with a single command!")
3754 (description
3755 "This package provides a small command line tool to simplify releasing
3756 software by updating all version strings in your source code by the correct
3757 increment. It also creates commits and tags.")
3758 (license license:expat)))
3759
3760 (define-public python-bumpversion
3761 (package
3762 (name "python-bumpversion")
3763 (version "0.5.3")
3764 (source
3765 (origin
3766 (method url-fetch)
3767 (uri (pypi-uri "bumpversion" version))
3768 (sha256
3769 (base32
3770 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3771 (build-system python-build-system)
3772 (home-page "https://github.com/peritus/bumpversion")
3773 (synopsis "Tool to bump software version")
3774 (description "This tool provides a command-line interface (CLI) to bump a
3775 software version simply.")
3776 (license license:expat)))
3777
3778 (define-public python-deprecated
3779 (package
3780 (name "python-deprecated")
3781 (version "1.2.5")
3782 (source
3783 (origin
3784 (method git-fetch)
3785 (uri (git-reference
3786 (url "https://github.com/tantale/deprecated")
3787 (commit (string-append "v" version))))
3788 (file-name (git-file-name name version))
3789 (sha256
3790 (base32
3791 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3792 (build-system python-build-system)
3793 (arguments
3794 `(#:phases (modify-phases %standard-phases
3795 (replace 'check
3796 (lambda _
3797 (invoke "pytest"))))))
3798 (propagated-inputs
3799 `(("python-wrapt" ,python-wrapt)))
3800 (native-inputs
3801 `(("python-bumpversion" ,python-bumpversion)
3802 ("python-pytest" ,python-pytest)
3803 ("python-pytest-cov" ,python-pytest-cov)
3804 ("python-sphinx" ,python-sphinx)
3805 ("python-tox" ,python-tox)))
3806 (home-page "https://github.com/tantale/deprecated")
3807 (synopsis "Python decorator to deprecate classes, functions or methods")
3808 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3809 to deprecate classes, functions or methods.")
3810 (license license:expat)))
3811
3812 (define-public python-pygithub
3813 (package
3814 (name "python-pygithub")
3815 (version "1.54.1")
3816 (source
3817 ;; We fetch from the Git repo because there are no tests in the PyPI
3818 ;; archive.
3819 (origin
3820 (method git-fetch)
3821 (uri (git-reference
3822 (url "https://github.com/PyGithub/PyGithub")
3823 (commit (string-append "v" version))))
3824 (file-name (git-file-name name version))
3825 (sha256
3826 (base32 "1nl74bp5ikdnrc8xq0qr25ryl1mvarf0xi43k8w5jzlrllhq0nkq"))))
3827 (build-system python-build-system)
3828 (arguments
3829 `(#:phases
3830 (modify-phases %standard-phases
3831 (replace 'check
3832 (lambda* (#:key tests? #:allow-other-keys)
3833 (when tests?
3834 (invoke "pytest"))
3835 #t)))))
3836 (propagated-inputs
3837 `(("python-cryptography" ,python-cryptography)
3838 ("python-deprecated" ,python-deprecated)
3839 ("python-pyjwt" ,python-pyjwt)
3840 ("python-requests" ,python-requests)))
3841 (native-inputs
3842 `(("python-httpretty" ,python-httpretty)
3843 ("python-pytest" ,python-pytest)))
3844 (home-page "https://pygithub.readthedocs.io/en/latest/")
3845 (synopsis "Python library for the GitHub API")
3846 (description "This library allows managing GitHub resources such as
3847 repositories, user profiles, and organizations in your Python applications,
3848 using version 3 of the GitHub application programming interface (API).")
3849 (license license:lgpl3+)))
3850
3851 (define-public python-rellu
3852 (package
3853 (name "python-rellu")
3854 (version "0.7")
3855 (source
3856 (origin
3857 (method url-fetch)
3858 (uri (pypi-uri "rellu" version))
3859 (sha256
3860 (base32
3861 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3862 (build-system python-build-system)
3863 (propagated-inputs
3864 `(("python-invoke" ,python-invoke)
3865 ("python-pygithub" ,python-pygithub)))
3866 (home-page "https://github.com/robotframework/rellu")
3867 (synopsis "Utilities to create PyPI releases")
3868 (description "This collection of utilities contains tooling and templates
3869 to assist in creating releases on GitHub and publishing them on PyPI. It is
3870 designed to be used by Robot Framework and tools and libraries in its
3871 ecosystem, but can naturally be used also by other projects.")
3872 (license license:asl2.0)))
3873
3874 (define-public python-robotframework
3875 (package
3876 (name "python-robotframework")
3877 (version "3.2.2")
3878 ;; There are no tests in the PyPI archive.
3879 (source
3880 (origin
3881 (method git-fetch)
3882 (uri (git-reference
3883 (url "https://github.com/robotframework/robotframework")
3884 (commit (string-append "v" version))))
3885 (file-name (git-file-name name version))
3886 (sha256
3887 (base32 "0if0h3myb9m3hgmn1phrhq8pfp89kfqsaq32vmfdjkyjdj7y59ds"))
3888 (patches (search-patches
3889 "python-robotframework-source-date-epoch.patch"))))
3890 (build-system python-build-system)
3891 (arguments
3892 `(#:phases (modify-phases %standard-phases
3893 (add-before 'build 'build-and-install-doc
3894 (lambda* (#:key outputs #:allow-other-keys)
3895 (let* ((doc-output (assoc-ref outputs "doc"))
3896 (doc (string-append doc-output "/share/"
3897 ,name "-" ,version "/")))
3898 (invoke "invoke" "library-docs" "all")
3899 (mkdir-p doc)
3900 (copy-recursively "doc/libraries"
3901 (string-append doc "/libraries"))
3902 #t)))
3903 (replace 'check
3904 (lambda* (#:key inputs #:allow-other-keys)
3905 ;; Some tests require timezone data. Otherwise, they
3906 ;; look up /etc/localtime, which doesn't exist, and fail
3907 ;; with:
3908 ;;
3909 ;; OverflowError: mktime argument out of range
3910 (setenv "TZDIR"
3911 (string-append (assoc-ref inputs "tzdata")
3912 "/share/zoneinfo"))
3913 (setenv "TZ" "Europe/Paris")
3914
3915 (invoke "python" "utest/run.py"))))))
3916 (native-inputs
3917 `(("python-invoke" ,python-invoke)
3918 ("python-rellu" ,python-rellu)
3919 ("python:tk" ,python "tk") ;used when building the HTML doc
3920 ("tzdata" ,tzdata-for-tests)))
3921 (outputs '("out" "doc"))
3922 (home-page "https://robotframework.org")
3923 (synopsis "Generic automation framework")
3924 (description "Robot Framework is a generic automation framework for
3925 acceptance testing, acceptance test driven development (ATDD), and robotic
3926 process automation (RPA).")
3927 (license license:asl2.0)))
3928
3929 (define-public python-robotframework-lint
3930 ;; There is no properly tagged release; the commit below seems to correspond
3931 ;; to the 0.9 stable release available from PyPI. The tests are not
3932 ;; included in the PyPI archive, so we fetch the sources from the upstream
3933 ;; Git repo.
3934 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
3935 (revision "0"))
3936 (package
3937 (name "python-robotframework-lint")
3938 (version (git-version "1.1" ;version taken from 'rflint/version.py'
3939 revision commit))
3940 (source
3941 (origin
3942 (method git-fetch)
3943 (uri (git-reference
3944 (url "https://github.com/boakley/robotframework-lint")
3945 (commit commit)))
3946 (file-name (git-file-name name version))
3947 (sha256
3948 (base32
3949 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
3950 (build-system python-build-system)
3951 (arguments
3952 `(#:phases
3953 (modify-phases %standard-phases
3954 (replace 'check
3955 (lambda _
3956 (invoke "python" "-m" "robot" "-A"
3957 "tests/conf/default.args" "tests"))))))
3958 (propagated-inputs
3959 `(("python-robotframework" ,python-robotframework)))
3960 (home-page "https://github.com/boakley/robotframework-lint/")
3961 (synopsis "Static analysis tool (linter) for Robot Framework")
3962 (description "This package provides the @code{rflint} command-line
3963 utility, a static analysis tool (linter) for Robot Framework source files.")
3964 (license license:asl2.0))))
3965
3966 (define-public python-robotframework-sshlibrary
3967 (package
3968 (name "python-robotframework-sshlibrary")
3969 (version "3.3.0")
3970 ;; There are no tests in the PyPI archive.
3971 (source
3972 (origin
3973 (method git-fetch)
3974 (uri (git-reference
3975 (url "https://github.com/robotframework/SSHLibrary")
3976 (commit (string-append "v" version))))
3977 (file-name (git-file-name name version))
3978 (sha256
3979 (base32
3980 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3981 (build-system python-build-system)
3982 (arguments
3983 `(#:phases
3984 (modify-phases %standard-phases
3985 (add-before 'build 'build-and-install-doc
3986 (lambda* (#:key outputs #:allow-other-keys)
3987 (let* ((doc-output (assoc-ref outputs "doc"))
3988 (doc (string-append doc-output "/share/"
3989 ,name "-" ,version "/")))
3990 (invoke "chmod" "-R" "+w" "docs")
3991 (invoke "invoke" "kw-docs" "project-docs")
3992 (mkdir-p doc)
3993 (for-each delete-file (find-files "docs" "\\.rst"))
3994 (copy-recursively "docs" doc)
3995 #t)))
3996 (replace 'check
3997 (lambda _
3998 ;; Some tests require an SSH server; we remove them.
3999 (delete-file "utest/test_client_api.py")
4000 (delete-file "utest/test_scp.py")
4001 (invoke "python" "utest/run.py"))))))
4002 (propagated-inputs
4003 `(("python-robotframework" ,python-robotframework)
4004 ("python-paramiko" ,python-paramiko)
4005 ("python-scp" ,python-scp)))
4006 (native-inputs
4007 `(("openssh" ,openssh)
4008 ("which" ,which)
4009 ;; To generate the documentation
4010 ("python-docutils" ,python-docutils)
4011 ("python-invoke" ,python-invoke)
4012 ("python-pygments" ,python-pygments)
4013 ("python-rellu" ,python-rellu)))
4014 (outputs '("out" "doc"))
4015 (home-page "https://github.com/robotframework/SSHLibrary")
4016 (synopsis "Robot Framework library for SSH and SFTP")
4017 (description "SSHLibrary is a Robot Framework library providing support
4018 for SSH and SFTP. It has the following main usages:
4019 @itemize @bullet
4020 @item Executing commands on the remote machine, either blocking or non-blocking.
4021 @item Writing and reading in an interactive shell.
4022 @item Transferring files and directories over SFTP.
4023 @item Ensuring that files and directories exist on the remote machine.
4024 @end itemize")
4025 (license license:asl2.0)))
4026
4027 (define-public python-rstr
4028 (package
4029 (name "python-rstr")
4030 (version "2.2.6")
4031 (source
4032 (origin
4033 (method url-fetch)
4034 (uri (pypi-uri "rstr" version))
4035 (sha256
4036 (base32
4037 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
4038 (build-system python-build-system)
4039 (home-page "https://github.com/leapfrogonline/rstr")
4040 (synopsis "Generate random strings in Python")
4041 (description "This package provides a python module for generating
4042 random strings of various types. It could be useful for fuzz testing,
4043 generating dummy data, or other applications. It has no dependencies
4044 outside the standard library.")
4045 (license license:bsd-3)))
4046
4047 (define-public python-scp
4048 (package
4049 (name "python-scp")
4050 (version "0.13.3")
4051 (source
4052 (origin
4053 (method url-fetch)
4054 (uri (pypi-uri "scp" version))
4055 (sha256
4056 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
4057 (build-system python-build-system)
4058 (arguments
4059 '(#:tests? #f)) ;tests require an SSH server
4060 (propagated-inputs
4061 `(("python-paramiko" ,python-paramiko)))
4062 (home-page "https://github.com/jbardin/scp.py")
4063 (synopsis "SCP protocol module for Python and Paramiko")
4064 (description "The scp module extends the Paramiko library to send and
4065 receive files via the SCP1 protocol, as implemented by the OpenSSH
4066 @command{scp} program.")
4067 (license license:gpl2+)))
4068
4069 (define-public python-rst.linker
4070 (package
4071 (name "python-rst.linker")
4072 (version "1.11")
4073 (source
4074 (origin
4075 (method url-fetch)
4076 (uri (pypi-uri "rst.linker" version))
4077 (sha256
4078 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
4079 (build-system python-build-system)
4080 (propagated-inputs
4081 `(("python-dateutil" ,python-dateutil)
4082 ("python-six" ,python-six)))
4083 (native-inputs
4084 `(("python-setuptools-scm" ,python-setuptools-scm)))
4085 ;; Test would require path.py, which would introduce a cyclic dependence.
4086 (arguments `(#:tests? #f))
4087 ;; Note: As of version 1.7 the documentation is not worth building.
4088 (home-page "https://github.com/jaraco/rst.linker")
4089 (synopsis "Sphinx plugin to add links and timestamps")
4090 (description "rst.linker automatically replaces text by a
4091 reStructuredText external reference or timestamps. It's primary purpose is to
4092 augment the changelog, but it can be used for other documents, too.")
4093 (license license:expat)))
4094
4095 (define-public python2-rst.linker
4096 (package-with-python2 python-rst.linker))
4097
4098 (define-public python-sshpubkeys
4099 (package
4100 (name "python-sshpubkeys")
4101 (version "3.1.0")
4102 (home-page "https://github.com/ojarva/python-sshpubkeys")
4103 (source (origin
4104 (method git-fetch)
4105 (uri (git-reference
4106 (url home-page)
4107 (commit (string-append "v" version))))
4108 (file-name (git-file-name name version))
4109 (sha256
4110 (base32
4111 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
4112 (build-system python-build-system)
4113 (propagated-inputs
4114 `(("python-cryptography" ,python-cryptography)
4115 ("python-ecdsa" ,python-ecdsa)))
4116 (synopsis "OpenSSH public key parser")
4117 (description
4118 "This package provides a library for parsing and validating OpenSSH
4119 public key files.")
4120 (license license:bsd-3)))
4121
4122 (define-public python-feedgenerator
4123 (package
4124 (name "python-feedgenerator")
4125 (version "1.9")
4126 (source
4127 (origin
4128 (method url-fetch)
4129 (uri (pypi-uri "feedgenerator" version))
4130 (sha256
4131 (base32
4132 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
4133 (modules '((guix build utils)))
4134 (snippet
4135 '(begin
4136 ;; Remove pre-compiled .pyc files from source.
4137 (for-each delete-file-recursively
4138 (find-files "." "__pycache__" #:directories? #t))
4139 (for-each delete-file (find-files "." "\\.pyc$"))
4140 #t))))
4141 (build-system python-build-system)
4142 (propagated-inputs
4143 `(("python-pytz" ,python-pytz)
4144 ("python-six" ,python-six)))
4145 (home-page "https://github.com/getpelican/feedgenerator")
4146 (synopsis
4147 "Standalone version of Django's Atom/RSS feed generator")
4148 (description
4149 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
4150 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
4151 (license license:bsd-3)))
4152
4153 (define-public python2-feedgenerator
4154 (package-with-python2 python-feedgenerator))
4155
4156 (define-public python-jsonrpc-server
4157 (package
4158 (name "python-jsonrpc-server")
4159 (version "0.4.0")
4160 (source
4161 (origin
4162 (method url-fetch)
4163 (uri (pypi-uri "python-jsonrpc-server" version))
4164 (sha256
4165 (base32
4166 "1585ybn3djvx5r5zbxkzlhz2wb1d47y4wrfwaxdyq0gi87jl7ib2"))))
4167 (build-system python-build-system)
4168 (propagated-inputs
4169 `(("python-mock" ,python-mock)
4170 ("python-pytest" ,python-pytest)
4171 ("python-ujson" ,python-ujson)))
4172 (home-page
4173 "https://github.com/palantir/python-jsonrpc-server")
4174 (synopsis "JSON RPC 2.0 server library")
4175 (description
4176 "This package provides a JSON RPC 2.0 server library for Python.")
4177 (license license:expat)))
4178
4179 (define-public python-pydantic
4180 (package
4181 (name "python-pydantic")
4182 (version "1.6.1")
4183 (source
4184 (origin
4185 (method git-fetch)
4186 (uri (git-reference
4187 (url "https://github.com/samuelcolvin/pydantic")
4188 (commit (string-append "v" version))))
4189 (file-name (git-file-name name version))
4190 (sha256
4191 (base32 "1380s9k77g6q15by9fkxndczjk89q6xpz09jdrqip535xws2z3j8"))))
4192 (build-system python-build-system)
4193 (arguments
4194 '(#:phases
4195 (modify-phases %standard-phases
4196 ;; Reported upstream:
4197 ;; <https://github.com/samuelcolvin/pydantic/issues/1580>.
4198 ;; Disable the faulty test as the fix is unclear.
4199 (add-before 'check 'disable-test
4200 (lambda _
4201 (substitute* "tests/test_validators.py"
4202 (("test_assert_raises_validation_error")
4203 "_test_assert_raises_validation_error"))
4204 #t))
4205 (replace 'check
4206 (lambda _ (invoke "pytest" "-vv" "tests"))))))
4207 (native-inputs
4208 `(("python-pytest" ,python-pytest)))
4209 (home-page "https://github.com/samuelcolvin/pydantic")
4210 (synopsis "Python data validation and settings management")
4211 (description
4212 "Pydantic enforces type hints at runtime, and provides user friendly
4213 errors when data is invalid.")
4214 (license license:expat)))
4215
4216 (define-public python-pydocstyle
4217 (package
4218 (name "python-pydocstyle")
4219 (version "3.0.0")
4220 (source
4221 (origin
4222 (method url-fetch)
4223 (uri (pypi-uri "pydocstyle" version))
4224 (sha256
4225 (base32
4226 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
4227 (build-system python-build-system)
4228 (propagated-inputs
4229 `(("python-six" ,python-six)
4230 ("python-snowballstemmer" ,python-snowballstemmer)))
4231 (home-page
4232 "https://github.com/PyCQA/pydocstyle/")
4233 (synopsis "Python docstring style checker")
4234 (description
4235 "This package provides a style checker for the Python Language
4236 Server (PLS).")
4237 (license license:expat)))
4238
4239 (define-public python-language-server
4240 (package
4241 (name "python-language-server")
4242 (version "0.36.2")
4243 (source
4244 (origin
4245 (method url-fetch)
4246 (uri (pypi-uri "python-language-server" version))
4247 (sha256
4248 (base32
4249 "1c0pnk2aibfhfaanrs0a5gkabkvz81gj20z7r0152b7fcx5ci14r"))))
4250 (build-system python-build-system)
4251 (propagated-inputs
4252 `(("python-autopep8" ,python-autopep8)
4253 ("python-configparser" ,python-configparser)
4254 ("python-pydocstyle" ,python-pydocstyle)
4255 ("python-future" ,python-future)
4256 ("python-jedi" ,python-jedi)
4257 ("python-jsonrpc-server" ,python-jsonrpc-server)
4258 ("python-pluggy" ,python-pluggy)
4259 ("python-pycodestyle" ,python-pycodestyle)
4260 ("python-pyflakes" ,python-pyflakes)
4261 ("python-rope" ,python-rope)
4262 ("python-ujson" ,python-ujson)
4263 ("python-yapf" ,python-yapf)))
4264 (native-inputs
4265 `(("python-coverage" ,python-coverage)
4266 ("python-flaky" ,python-flaky)
4267 ("python-matplotlib" ,python-matplotlib)
4268 ("python-mock" ,python-mock)
4269 ("python-numpy" ,python-numpy)
4270 ("python-pandas" ,python-pandas)
4271 ("python-pylint" ,python-pylint)
4272 ("python-pytest" ,python-pytest)
4273 ("python-pytest-cov" ,python-pytest-cov)
4274 ("python-versioneer" ,python-versioneer)))
4275 (home-page "https://github.com/palantir/python-language-server")
4276 (synopsis "Python implementation of the Language Server Protocol")
4277 (description
4278 "The Python Language Server (pyls) is an implementation of the Python 3
4279 language specification for the Language Server Protocol (LSP). This tool is
4280 used in text editing environments to provide a complete and integrated
4281 feature-set for programming Python effectively.")
4282 (license license:expat)))
4283
4284 (define-public python-pathspec
4285 (package
4286 (name "python-pathspec")
4287 (version "0.7.0")
4288 (source
4289 (origin
4290 (method url-fetch)
4291 (uri (pypi-uri "pathspec" version))
4292 (sha256
4293 (base32
4294 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
4295 (build-system python-build-system)
4296 (home-page "https://github.com/cpburnz/python-path-specification")
4297 (synopsis "Utility library for gitignore style pattern matching of file paths")
4298 (description
4299 "This package provides a utility library for gitignore style pattern
4300 matching of file paths.")
4301 (license license:mpl2.0)))
4302
4303 (define-public python-black
4304 (package
4305 (name "python-black")
4306 (version "20.8b1")
4307 (source
4308 (origin
4309 (method url-fetch)
4310 (uri (pypi-uri "black" version))
4311 (sha256
4312 (base32
4313 "1spv6sldp3mcxr740dh3ywp25lly9s8qlvs946fin44rl1x5a0hw"))))
4314 (build-system python-build-system)
4315 (arguments
4316 `(#:phases
4317 (modify-phases %standard-phases
4318 (add-after 'patch-source-shebangs 'patch-extra-shebangs
4319 (lambda _
4320 (let ((python3 (which "python3")))
4321 (substitute* '("tests/data/fmtonoff.py"
4322 "tests/data/string_prefixes.py"
4323 "tests/data/function.py"
4324 "tests/data/python37.py")
4325 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
4326 (string-append "#!" python3 (if (string? minor-version)
4327 minor-version
4328 "")))))
4329 #t))
4330 (add-after 'unpack 'disable-broken-tests
4331 (lambda* (#:key outputs inputs #:allow-other-keys)
4332 ;; Make installed package available for running the tests
4333 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4334 ":" (getenv "PATH")))
4335
4336 ;; These tests are supposed to be skipped when the blackd
4337 ;; dependencies are missing, but this doesn't quite work.
4338 (substitute* "tests/test_black.py"
4339 (("( *)class BlackDTestCase.*" match indent)
4340 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
4341 indent "class BlackDTestCase(unittest.TestCase):\n"))
4342 (("web.Application") "False")
4343 (("@unittest_run_loop") ""))
4344
4345 ;; Patching the above file breaks the self test
4346 (substitute* "tests/test_black.py"
4347 (("( *)def test_self" match indent)
4348 (string-append indent "@unittest.skip(\"guix\")\n" match)))
4349
4350 (substitute* "tests/test_black.py"
4351 (("( *)def test_python38" match indent)
4352 (string-append indent "@unittest.skip(\"guix\")\n" match)))
4353 #t)))))
4354 (propagated-inputs
4355 `(("python-click" ,python-click)
4356 ("python-attrs" ,python-attrs)
4357 ("python-appdirs" ,python-appdirs)
4358 ("python-pathspec" ,python-pathspec)
4359 ("python-mypy-extensions" ,python-mypy-extensions)
4360 ("python-regex" ,python-regex)
4361 ("python-toml" ,python-toml)
4362 ("python-typed-ast" ,python-typed-ast)
4363 ("python-typing-extensions" ,python-typing-extensions)))
4364 (native-inputs
4365 `(("python-setuptools-scm" ,python-setuptools-scm)))
4366 (home-page "https://github.com/ambv/black")
4367 (synopsis "The uncompromising code formatter")
4368 (description "Black is the uncompromising Python code formatter.")
4369 (license license:expat)))
4370
4371 (define-public python-black-macchiato
4372 (package
4373 (name "python-black-macchiato")
4374 (version "1.3.0")
4375 (source
4376 (origin
4377 (method url-fetch)
4378 (uri (pypi-uri "black-macchiato" version))
4379 (sha256
4380 (base32
4381 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
4382 (build-system python-build-system)
4383 (propagated-inputs
4384 `(("python-black" ,python-black)))
4385 (home-page "https://github.com/wbolster/black-macchiato")
4386 (synopsis "Partial @code{python-black} formatting")
4387 (description
4388 "This package is built on top the @{python-black} code formatter to
4389 enable formatting of partial files.")
4390 (license license:bsd-3)))
4391
4392 (define-public python-blinker
4393 (package
4394 (name "python-blinker")
4395 (version "1.4")
4396 (source
4397 (origin
4398 (method url-fetch)
4399 (uri (pypi-uri "blinker" version))
4400 (sha256
4401 (base32
4402 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
4403 (build-system python-build-system)
4404 (home-page "https://pythonhosted.org/blinker/")
4405 (synopsis "Fast, simple object-to-object and broadcast signaling")
4406 (description
4407 "Blinker provides a fast dispatching system that allows any number of
4408 interested parties to subscribe to events, or \"signals\".")
4409 (license license:expat)))
4410
4411 (define-public python2-blinker
4412 (package-with-python2 python-blinker))
4413
4414 (define-public pelican
4415 (package
4416 (name "pelican")
4417 (version "4.2.0")
4418 (source
4419 (origin
4420 (method url-fetch)
4421 (uri (pypi-uri "pelican" version))
4422 (sha256
4423 (base32
4424 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
4425 (build-system python-build-system)
4426 (propagated-inputs
4427 `(("python-blinker" ,python-blinker)
4428 ("python-dateutil" ,python-dateutil)
4429 ("python-docutils" ,python-docutils)
4430 ("python-feedgenerator" ,python-feedgenerator)
4431 ("python-jinja2" ,python-jinja2)
4432 ("python-markdown" ,python-markdown)
4433 ("python-pygments" ,python-pygments)
4434 ("python-pytz" ,python-pytz)
4435 ("python-six" ,python-six)
4436 ("python-unidecode" ,python-unidecode)))
4437 (home-page "https://getpelican.com/")
4438 (arguments
4439 `(;; XXX Requires a lot more packages to do unit tests :P
4440 #:tests? #f))
4441 (synopsis "Python-based static site publishing system")
4442 (description
4443 "Pelican is a tool to generate a static blog from reStructuredText,
4444 Markdown input files, and more. Pelican uses Jinja2 for templating
4445 and is very extensible.")
4446 (license license:agpl3+)))
4447
4448 (define-public mallard-ducktype
4449 (package
4450 (name "mallard-ducktype")
4451 (version "1.0.2")
4452 (source
4453 (origin
4454 (method git-fetch)
4455 ;; git-reference because tests are not included in pypi source tarball
4456 ;; https://issues.guix.gnu.org/issue/36755#2
4457 (uri (git-reference
4458 (url "https://github.com/projectmallard/mallard-ducktype")
4459 (commit version)))
4460 (file-name (git-file-name name version))
4461 (sha256
4462 (base32
4463 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
4464 (build-system python-build-system)
4465 (arguments
4466 '(#:phases
4467 (modify-phases %standard-phases
4468 (replace 'check
4469 (lambda _
4470 (with-directory-excursion "tests"
4471 (invoke "sh" "runtests")))))))
4472 (home-page "http://projectmallard.org")
4473 (synopsis "Convert Ducktype to Mallard documentation markup")
4474 (description
4475 "Ducktype is a lightweight syntax that can represent all the semantics
4476 of the Mallard XML documentation system. Ducktype files can be converted to
4477 Mallard using the @command{ducktype} tool. The yelp-tools package
4478 provides additional functionality on the produced Mallard documents.")
4479 (license license:expat)))
4480
4481 (define-public python-cython
4482 (package
4483 (name "python-cython")
4484 (version "0.29.22")
4485 (source
4486 (origin
4487 (method url-fetch)
4488 (uri (pypi-uri "Cython" version))
4489 (sha256
4490 (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz"))))
4491 (build-system python-build-system)
4492 ;; we need the full python package and not just the python-wrapper
4493 ;; because we need libpython3.3m.so
4494 (inputs
4495 `(("python" ,python)))
4496 (arguments
4497 `(#:phases
4498 (modify-phases %standard-phases
4499 (add-before 'check 'set-HOME
4500 ;; some tests require access to "$HOME/.cython"
4501 (lambda _ (setenv "HOME" "/tmp") #t))
4502 (replace 'check
4503 (lambda _
4504 ;; Disable compiler optimizations to greatly reduce the running
4505 ;; time of the test suite.
4506 (setenv "CFLAGS" "-O0")
4507
4508 (invoke "python" "runtests.py" "-vv"
4509 "-j" (number->string (parallel-job-count))
4510 ;; XXX: On 32-bit architectures, running the parallel tests
4511 ;; fails on many-core systems, see
4512 ;; <https://github.com/cython/cython/issues/2807>.
4513 ,@(if (not (target-64bit?))
4514 '("-x" "run.parallel")
4515 '())))))))
4516 (home-page "https://cython.org/")
4517 (synopsis "C extensions for Python")
4518 (description "Cython is an optimising static compiler for both the Python
4519 programming language and the extended Cython programming language. It makes
4520 writing C extensions for Python as easy as Python itself.")
4521 (license license:asl2.0)
4522 (properties `((python2-variant . ,(delay python2-cython))))))
4523
4524 (define-public python2-cython
4525 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4526 (package/inherit base
4527 (name "python2-cython")
4528 (inputs
4529 `(("python-2" ,python-2))) ;this is not automatically changed
4530 (arguments
4531 (substitute-keyword-arguments (package-arguments base)
4532 ((#:phases phases)
4533 `(modify-phases ,phases
4534 (add-before 'check 'adjust-test_embed
4535 (lambda _
4536 (substitute* "runtests.py"
4537 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4538 ;; so it can give the right -L flag to GCC when embedding static
4539 ;; builds of Python. It is unaware that the Python "config"
4540 ;; directory (where the static library lives) was renamed in
4541 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4542 ;; which works fine, because that is where the shared library is.
4543 ;;
4544 ;; It also appears to be unaware that the Makefile in Demos/embed
4545 ;; already unconditionally pass the static library location to GCC,
4546 ;; after checking sysconfig.get_config_var('LIBPL).
4547 ;;
4548 ;; The effect is that the linker is unable to resolve libexpat
4549 ;; symbols when building for Python 2, because neither the Python 2
4550 ;; shared library nor Expat is available. To fix it, we can either
4551 ;; add Expat as an input and make it visible to the linker, or just
4552 ;; prevent it from overriding the Python shared library location.
4553 ;; The end result is identical, so we take the easy route.
4554 ((" or libname not in os\\.listdir\\(libdir\\)")
4555 ""))
4556 #t)))))))))
4557
4558 ;; The RPython toolchain currently does not support Python 3.
4559 (define-public python2-rpython
4560 (package
4561 (name "python2-rpython")
4562 (version "0.2.1")
4563 (source
4564 (origin
4565 (method url-fetch)
4566 (uri (pypi-uri "rpython" version))
4567 (sha256
4568 (base32
4569 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4570 (build-system python-build-system)
4571 (arguments `(#:python ,python-2))
4572 (native-inputs
4573 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4574 (home-page "https://rpython.readthedocs.org")
4575 (synopsis "Framework for implementing interpreters and virtual machines")
4576 (description "RPython is a translation and support framework for
4577 producing implementations of dynamic languages, emphasizing a clean separation
4578 between language specification and implementation aspects.")
4579 (license license:expat)))
4580
4581 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4582 ;; python-scipy still build, as these three packages are often used together.
4583 (define-public python-numpy
4584 (package
4585 (name "python-numpy")
4586 (version "1.17.3")
4587 (source
4588 (origin
4589 (method url-fetch)
4590 (uri (string-append
4591 "https://github.com/numpy/numpy/releases/download/v"
4592 version "/numpy-" version ".tar.gz"))
4593 (sha256
4594 (base32
4595 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4596 (build-system python-build-system)
4597 (inputs
4598 `(("openblas" ,openblas)
4599 ("lapack" ,lapack)))
4600 (native-inputs
4601 `(("python-cython" ,python-cython)
4602 ("python-pytest" ,python-pytest)
4603 ("gfortran" ,gfortran)))
4604 (arguments
4605 `(#:phases
4606 (modify-phases %standard-phases
4607 (add-before 'build 'configure-blas-lapack
4608 (lambda* (#:key inputs #:allow-other-keys)
4609 (call-with-output-file "site.cfg"
4610 (lambda (port)
4611 (format port
4612 "[openblas]
4613 libraries = openblas
4614 library_dirs = ~a/lib
4615 include_dirs = ~a/include
4616
4617 # backslash-n to make emacs happy
4618 \n[lapack]
4619 lapack_libs = lapack
4620 library_dirs = ~a/lib
4621 include_dirs = ~a/include
4622 "
4623 (assoc-ref inputs "openblas")
4624 (assoc-ref inputs "openblas")
4625 (assoc-ref inputs "lapack")
4626 (assoc-ref inputs "lapack"))))
4627 #t))
4628 (add-before 'build 'fix-executable-paths
4629 (lambda* (#:key inputs #:allow-other-keys)
4630 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4631 ;; instead of /bin/sh.
4632 (substitute* "numpy/distutils/exec_command.py"
4633 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4634 (string-append match-start (assoc-ref inputs "bash") match-end)))
4635 ;; Use "gcc" executable, not "cc".
4636 (substitute* "numpy/distutils/system_info.py"
4637 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4638 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4639 #t))
4640 ;; Tests can only be run after the library has been installed and not
4641 ;; within the source directory.
4642 (delete 'check)
4643 (add-after 'install 'check
4644 (lambda* (#:key outputs inputs #:allow-other-keys)
4645 ;; Make installed package available for running the tests
4646 (add-installed-pythonpath inputs outputs)
4647 ;; Make sure "f2py" etc is found.
4648 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4649 ":" (getenv "PATH")))
4650 (with-directory-excursion "/tmp"
4651 (invoke "python" "-c"
4652 "import numpy; numpy.test(verbose=2)")))))))
4653 (home-page "https://numpy.org")
4654 (synopsis "Fundamental package for scientific computing with Python")
4655 (description "NumPy is the fundamental package for scientific computing
4656 with Python. It contains among other things: a powerful N-dimensional array
4657 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4658 and Fortran code, useful linear algebra, Fourier transform, and random number
4659 capabilities.")
4660 (properties `((python2-variant . ,(delay python2-numpy))))
4661 (license license:bsd-3)))
4662
4663 ;; Numpy 1.16.x are the last versions that support Python 2.
4664 (define-public python2-numpy
4665 (let ((numpy (package-with-python2
4666 (strip-python2-variant python-numpy))))
4667 (package/inherit
4668 numpy
4669 (version "1.16.5")
4670 (source (origin
4671 (method url-fetch)
4672 (uri (string-append
4673 "https://github.com/numpy/numpy/releases/download/v"
4674 version "/numpy-" version ".tar.gz"))
4675 (sha256
4676 (base32
4677 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4678
4679 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4680 ;; interest only for legacy code going back to NumPy's predecessor
4681 ;; Numeric.
4682 (define-public python2-numpy-1.8
4683 (package (inherit python2-numpy)
4684 (version "1.8.2")
4685 (source
4686 (origin
4687 (method git-fetch)
4688 (uri (git-reference
4689 (url "https://github.com/numpy/numpy")
4690 (commit (string-append "v" version))))
4691 (file-name (git-file-name "numpy" version))
4692 (sha256
4693 (base32
4694 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4695 (arguments
4696 (substitute-keyword-arguments (package-arguments python2-numpy)
4697 ((#:phases phases)
4698 `(modify-phases ,phases
4699 (replace 'configure-blas-lapack
4700 (lambda* (#:key inputs #:allow-other-keys)
4701 (call-with-output-file "site.cfg"
4702 (lambda (port)
4703 (format port
4704 "[openblas]
4705 libraries = openblas,lapack
4706 library_dirs = ~a/lib:~a/lib
4707 include_dirs = ~a/include:~a/include
4708 "
4709 (assoc-ref inputs "openblas")
4710 (assoc-ref inputs "lapack")
4711 (assoc-ref inputs "openblas")
4712 (assoc-ref inputs "lapack"))))
4713 #t))))))
4714 (native-inputs
4715 `(("python2-nose" ,python2-nose)))
4716 (description "NumPy is the fundamental package for scientific computing
4717 with Python. It contains among other things: a powerful N-dimensional array
4718 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4719 and Fortran code, useful linear algebra, Fourier transform, and random number
4720 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4721 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4722 Numeric.")
4723 (license license:bsd-3)))
4724
4725 (define-public python-munch
4726 (package
4727 (name "python-munch")
4728 (version "2.0.4")
4729 (source
4730 (origin
4731 (method url-fetch)
4732 (uri (pypi-uri "munch" version))
4733 (sha256
4734 (base32
4735 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4736 (build-system python-build-system)
4737 (home-page "https://github.com/Infinidat/munch")
4738 (synopsis "Dot-accessible dictionary")
4739 (description "Munch is a dot-accessible dictionary similar to JavaScript
4740 objects.")
4741 (license license:expat)))
4742
4743 (define-public python2-munch
4744 (package-with-python2 python-munch))
4745
4746 (define-public python-colormath
4747 (package
4748 (name "python-colormath")
4749 (version "3.0.0")
4750 (source
4751 (origin
4752 (method url-fetch)
4753 (uri (pypi-uri "colormath" version))
4754 (sha256
4755 (base32
4756 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4757 (build-system python-build-system)
4758 (propagated-inputs
4759 `(("python-networkx" ,python-networkx)
4760 ("python-numpy" ,python-numpy)))
4761 (home-page "https://github.com/gtaylor/python-colormath")
4762 (synopsis "Color math and conversion library")
4763 (description
4764 "This is a Python library for color math and conversions.")
4765 (license license:bsd-3)))
4766
4767 (define-public python2-colormath
4768 (package-with-python2 python-colormath))
4769
4770 (define-public python-spectra
4771 (package
4772 (name "python-spectra")
4773 (version "0.0.11")
4774 (source
4775 (origin
4776 (method url-fetch)
4777 (uri (pypi-uri "spectra" version))
4778 (sha256
4779 (base32
4780 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4781 (build-system python-build-system)
4782 (arguments
4783 `(#:phases
4784 (modify-phases %standard-phases
4785 (replace 'check
4786 (lambda _ (invoke "nosetests" "-v"))))))
4787 (propagated-inputs
4788 `(("python-colormath" ,python-colormath)))
4789 (native-inputs
4790 `(("python-nose" ,python-nose)))
4791 (home-page "https://github.com/jsvine/spectra")
4792 (synopsis "Color scales and color conversion")
4793 (description
4794 "This package provides a Python library intended to make color math,
4795 color scales, and color space conversion easy. It has support for:
4796
4797 @enumerate
4798 @item Color scales
4799 @item Color ranges
4800 @item Color blending
4801 @item Brightening/darkening colors
4802 @item Saturating/desaturating colors
4803 @item Conversion to/from multiple color spaces.
4804 @end enumerate\n")
4805 (license license:expat)))
4806
4807 (define-public python2-spectra
4808 (package-with-python2 python-spectra))
4809
4810 (define-public python-numpy-documentation
4811 (package
4812 (name "python-numpy-documentation")
4813 (version (package-version python-numpy))
4814 (source (package-source python-numpy))
4815 (build-system python-build-system)
4816 (native-inputs
4817 `(("python-matplotlib" ,python-matplotlib)
4818 ("python-numpy" ,python-numpy)
4819 ("pkg-config" ,pkg-config)
4820 ("python-sphinx" ,python-sphinx)
4821 ("python-numpydoc" ,python-numpydoc)
4822 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4823 texlive-fonts-ec
4824 texlive-generic-ifxetex
4825 texlive-generic-pdftex
4826 texlive-amsfonts
4827 texlive-latex-capt-of
4828 texlive-latex-cmap
4829 texlive-latex-environ
4830 texlive-latex-eqparbox
4831 texlive-latex-etoolbox
4832 texlive-latex-expdlist
4833 texlive-latex-fancyhdr
4834 texlive-latex-fancyvrb
4835 texlive-latex-fncychap
4836 texlive-latex-float
4837 texlive-latex-framed
4838 texlive-latex-geometry
4839 texlive-latex-graphics
4840 texlive-latex-hyperref
4841 texlive-latex-mdwtools
4842 texlive-latex-multirow
4843 texlive-latex-needspace
4844 texlive-latex-oberdiek
4845 texlive-latex-parskip
4846 texlive-latex-preview
4847 texlive-latex-tabulary
4848 texlive-latex-threeparttable
4849 texlive-latex-titlesec
4850 texlive-latex-trimspaces
4851 texlive-latex-ucs
4852 texlive-latex-upquote
4853 texlive-latex-url
4854 texlive-latex-varwidth
4855 texlive-latex-wrapfig)))
4856 ("texinfo" ,texinfo)
4857 ("perl" ,perl)
4858 ("scipy-sphinx-theme"
4859 ,(let ((commit "c466764e2231ba132c09826b5b138fffa1cfcec3"))
4860 (origin ;the build script expects scipy-sphinx-theme as a git submodule
4861 (method git-fetch)
4862 (uri (git-reference
4863 (url "https://github.com/scipy/scipy-sphinx-theme")
4864 (commit commit)))
4865 (file-name (git-file-name "python-scipy-sphinx-theme"
4866 (string-take commit 7)))
4867 (sha256
4868 (base32
4869 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl")))))
4870 ,@(package-native-inputs python-numpy)))
4871 (arguments
4872 `(#:tests? #f ; we're only generating the documentation
4873 #:phases
4874 (modify-phases %standard-phases
4875 (delete 'build)
4876 (replace 'install
4877 (lambda* (#:key inputs outputs #:allow-other-keys)
4878 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4879 (doc (string-append
4880 data "/doc/" ,name "-"
4881 ,(package-version python-numpy)))
4882 (info-reader (string-append data "/info"))
4883 (html (string-append doc "/html"))
4884 (scipy-sphinx-theme "scipy-sphinx-theme")
4885 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4886 (pyver ,(string-append "PYVER=")))
4887
4888 ;; FIXME: this is needed to for texlive-union to generate
4889 ;; fonts, which are not found.
4890 (setenv "HOME" "/tmp")
4891
4892 (with-directory-excursion "doc"
4893 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4894 (mkdir-p html)
4895 (invoke "make" "html" pyver)
4896 (invoke "make" "latex" "PAPER=a4" pyver)
4897 (invoke "make" "-C" "build/latex"
4898 "all-pdf" "PAPER=a4" pyver)
4899 ;; FIXME: Generation of the info file fails.
4900 ;; (invoke "make" "info" pyver)
4901 ;; (mkdir-p info)
4902 ;; (copy-file "build/texinfo/numpy.info"
4903 ;; (string-append info "/numpy.info"))
4904 (for-each (lambda (file)
4905 (copy-file (string-append "build/latex" file)
4906 (string-append doc file)))
4907 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4908 (with-directory-excursion "build/html"
4909 (for-each (lambda (file)
4910 (let* ((dir (dirname file))
4911 (tgt-dir (string-append html "/" dir)))
4912 (unless (equal? "." dir)
4913 (mkdir-p tgt-dir))
4914 (install-file file html)))
4915 (find-files "." ".*")))))
4916 #t)))))
4917 (home-page (package-home-page python-numpy))
4918 (synopsis "Documentation for the python-numpy package")
4919 (description (package-description python-numpy))
4920 (license (package-license python-numpy))))
4921
4922 (define-public python2-numpy-documentation
4923 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4924 (package
4925 (inherit numpy-documentation)
4926 (native-inputs `(("python2-functools32" ,python2-functools32)
4927 ,@(package-native-inputs numpy-documentation))))))
4928
4929 (define-public python-pygit2
4930 (package
4931 (name "python-pygit2")
4932 (version "1.4.0")
4933 (source
4934 (origin
4935 (method url-fetch)
4936 (uri (pypi-uri "pygit2" version))
4937 (sha256
4938 (base32 "1j71iskvirkm8jzfmwdm79v69878m9iix8a8cn4xidgr3nmkisyb"))))
4939 (build-system python-build-system)
4940 (arguments
4941 '(#:tests? #f)) ; tests don't run correctly in our environment
4942 (propagated-inputs
4943 `(("python-cached-property" ,python-cached-property)
4944 ("python-cffi" ,python-cffi)
4945 ("libgit2" ,libgit2)))
4946 (native-inputs
4947 `(("python-pytest" ,python-pytest)))
4948 (home-page "https://github.com/libgit2/pygit2")
4949 (synopsis "Python bindings for libgit2")
4950 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4951 library, libgit2 implements Git plumbing.")
4952 ;; GPL2.0 only, with linking exception.
4953 (license license:gpl2)))
4954
4955 (define-public python-patiencediff
4956 (package
4957 (name "python-patiencediff")
4958 (version "0.2.0")
4959 (source
4960 (origin
4961 (method url-fetch)
4962 (uri (pypi-uri "patiencediff" version))
4963 (sha256
4964 (base32
4965 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
4966 (build-system python-build-system)
4967 (home-page "https://www.breezy-vcs.org/")
4968 (synopsis "Python implementation of the patiencediff algorithm")
4969 (description
4970 "This package contains a Python implementation of the @code{patiencediff}
4971 algorithm. Patiencediff provides a good balance of performance, nice output for
4972 humans, and implementation simplicity.")
4973 (license license:gpl2)))
4974
4975 (define-public python-pdftotext
4976 (package
4977 (name "python-pdftotext")
4978 (version "2.1.5")
4979 (source
4980 (origin
4981 (method url-fetch)
4982 (uri (pypi-uri "pdftotext" version))
4983 (sha256
4984 (base32
4985 "19la1cw1hmkcr8big04gm2dd5fw0y0z97g930aiy29s1gaqbiblq"))))
4986 (build-system python-build-system)
4987 (inputs
4988 `(("poppler" ,poppler)))
4989 (home-page "https://github.com/jalan/pdftotext")
4990 (synopsis "Simple PDF text extraction")
4991 (description "Pdftotext is a Python library of PDF text extraction.")
4992 (license license:expat)))
4993
4994 (define-public python-pyparsing
4995 (package
4996 (name "python-pyparsing")
4997 (version "2.4.6")
4998 (source
4999 (origin
5000 (method url-fetch)
5001 (uri (pypi-uri "pyparsing" version))
5002 (sha256
5003 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
5004 (build-system python-build-system)
5005 (outputs '("out" "doc"))
5006 (arguments
5007 `(#:tests? #f ; no test target
5008 #:phases
5009 (modify-phases %standard-phases
5010 (add-after 'install 'install-doc
5011 (lambda* (#:key outputs #:allow-other-keys)
5012 (let* ((doc (string-append (assoc-ref outputs "doc")
5013 "/share/doc/" ,name "-" ,version))
5014 (html-doc (string-append doc "/html"))
5015 (examples (string-append doc "/examples")))
5016 (mkdir-p html-doc)
5017 (mkdir-p examples)
5018 (for-each
5019 (lambda (dir tgt)
5020 (map (lambda (file)
5021 (install-file file tgt))
5022 (find-files dir ".*")))
5023 (list "docs" "htmldoc" "examples")
5024 (list doc html-doc examples))
5025 #t))))))
5026 (home-page "https://github.com/pyparsing/pyparsing")
5027 (synopsis "Python parsing class library")
5028 (description
5029 "The pyparsing module is an alternative approach to creating and
5030 executing simple grammars, vs. the traditional lex/yacc approach, or the use
5031 of regular expressions. The pyparsing module provides a library of classes
5032 that client code uses to construct the grammar directly in Python code.")
5033 (license license:expat)))
5034
5035 (define-public python2-pyparsing
5036 (package-with-python2 python-pyparsing))
5037
5038 (define-public python-pyparsing-2.4.7
5039 (package
5040 (inherit python-pyparsing)
5041 (version "2.4.7")
5042 (source
5043 (origin
5044 (method url-fetch)
5045 (uri (pypi-uri "pyparsing" version))
5046 (sha256
5047 (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
5048
5049 (define-public python-numpydoc
5050 (package
5051 (name "python-numpydoc")
5052 (version "0.8.0")
5053 (source
5054 (origin
5055 (method url-fetch)
5056 (uri (pypi-uri "numpydoc" version))
5057 (sha256
5058 (base32
5059 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
5060 (build-system python-build-system)
5061 (propagated-inputs
5062 `(("python-sphinx" ,python-sphinx)))
5063 (native-inputs
5064 `(("python-nose" ,python-nose)))
5065 (home-page "https://pypi.org/project/numpydoc/")
5066 (synopsis
5067 "Numpy's Sphinx extensions")
5068 (description
5069 "Sphinx extension to support docstrings in Numpy format.")
5070 (license license:bsd-2)
5071 (properties `((python2-variant . ,(delay python2-numpydoc))))))
5072
5073 (define-public python2-numpydoc
5074 (let ((base (package-with-python2
5075 (strip-python2-variant python-numpydoc))))
5076 (package/inherit base
5077 (propagated-inputs
5078 `(("python2-jinja2" ,python2-jinja2)
5079 ,@(package-propagated-inputs base))))))
5080
5081 (define-public python-numexpr
5082 (package
5083 (name "python-numexpr")
5084 (version "2.6.5")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (pypi-uri "numexpr" version))
5089 (sha256
5090 (base32
5091 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
5092 (build-system python-build-system)
5093 (arguments `(#:tests? #f)) ; no tests included
5094 (propagated-inputs
5095 `(("python-numpy" ,python-numpy)))
5096 (home-page "https://github.com/pydata/numexpr")
5097 (synopsis "Fast numerical expression evaluator for NumPy")
5098 (description
5099 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
5100 expressions that operate on arrays are accelerated and use less memory than
5101 doing the same calculation in Python. In addition, its multi-threaded
5102 capabilities can make use of all your cores, which may accelerate
5103 computations, most specially if they are not memory-bounded (e.g. those using
5104 transcendental functions).")
5105 (license license:expat)))
5106
5107 (define-public python2-numexpr
5108 (package-with-python2 python-numexpr))
5109
5110 (define-public python-cycler
5111 (package
5112 (name "python-cycler")
5113 (version "0.10.0")
5114 (source (origin
5115 (method url-fetch)
5116 (uri (pypi-uri "cycler" version))
5117 (sha256
5118 (base32
5119 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
5120 (build-system python-build-system)
5121 (arguments
5122 ;; XXX: The current version requires 'coveralls' which we don't have.
5123 ;; Enable this for the next release which uses 'python-pytest'.
5124 '(#:tests? #f))
5125 (propagated-inputs
5126 `(("python-six" ,python-six)))
5127 (home-page "https://matplotlib.org/cycler/")
5128 (synopsis "Composable keyword argument iterator")
5129 (description
5130 "When using @code{matplotlib} and plotting more than one line, it is
5131 common to want to be able to want to be able to cycle over one or more artist
5132 styles; but the plotting logic can quickly become involved.
5133 To address this and enable easy cycling over arbitrary @code{kwargs}, the
5134 @code{Cycler} class was developed.")
5135 (license license:bsd-3)))
5136
5137 (define-public python2-cycler
5138 (package-with-python2 python-cycler))
5139
5140 (define-public python-colorspacious
5141 (package
5142 (name "python-colorspacious")
5143 (version "1.1.2")
5144 (source
5145 (origin
5146 (method git-fetch)
5147 (uri (git-reference
5148 (url "https://github.com/njsmith/colorspacious")
5149 (commit (string-append "v" version))))
5150 (file-name (git-file-name name version))
5151 (sha256
5152 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
5153 (build-system python-build-system)
5154 (propagated-inputs
5155 `(("python-numpy" ,python-numpy)))
5156 (native-inputs
5157 `(("python-nose" ,python-nose)))
5158 (arguments
5159 `(#:phases
5160 (modify-phases %standard-phases
5161 (replace 'check
5162 (lambda _
5163 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
5164 (home-page "https://github.com/njsmith/colorspacious")
5165 (synopsis "Python library for colorspace conversions")
5166 (description "@code{colorspacious} is a Python library that lets you
5167 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
5168 (license license:expat)))
5169
5170 (define-public python2-colorspacious
5171 (package-with-python2 python-colorspacious))
5172
5173 (define-public python-matplotlib
5174 (package
5175 (name "python-matplotlib")
5176 (version "3.1.2")
5177 (source
5178 (origin
5179 (method url-fetch)
5180 (uri (pypi-uri "matplotlib" version))
5181 (sha256
5182 (base32 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))
5183 (patches
5184 (search-patches "python-matplotlib-run-under-wayland-gtk3.patch"))))
5185 (build-system python-build-system)
5186 (propagated-inputs ; the following packages are all needed at run time
5187 `(("python-cycler" ,python-cycler)
5188 ("python-kiwisolver" ,python-kiwisolver)
5189 ("python-pyparsing" ,python-pyparsing)
5190 ("python-pygobject" ,python-pygobject)
5191 ("gobject-introspection" ,gobject-introspection)
5192 ("python-tkinter" ,python "tk")
5193 ("python-dateutil" ,python-dateutil)
5194 ("python-numpy" ,python-numpy)
5195 ("python-pillow" ,python-pillow)
5196 ("python-pytz" ,python-pytz)
5197 ("python-six" ,python-six)
5198 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
5199 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
5200 ;; object. For this reason we need to import both libraries.
5201 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
5202 ("python-pycairo" ,python-pycairo)
5203 ("python-cairocffi" ,python-cairocffi)))
5204 (inputs
5205 `(("libpng" ,libpng)
5206 ("freetype" ,freetype)
5207 ("cairo" ,cairo)
5208 ("glib" ,glib)
5209 ;; FIXME: Add backends when available.
5210 ;("python-wxpython" ,python-wxpython)
5211 ("tcl" ,tcl)
5212 ("tk" ,tk)))
5213 (native-inputs
5214 `(("pkg-config" ,pkg-config)
5215 ("python-pytest" ,python-pytest)
5216 ("python-mock" ,python-mock)
5217 ("unzip" ,unzip)
5218 ("jquery-ui"
5219 ,(origin
5220 (method url-fetch)
5221 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
5222 (sha256
5223 (base32
5224 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
5225 (arguments
5226 `(#:phases
5227 (modify-phases %standard-phases
5228 ;; XXX We disable all image comparison tests because we're using a
5229 ;; newer version of FreeType than matplotlib expects. This leads to
5230 ;; minor differences throughout the tests.
5231 (add-after 'unpack 'fix-and-disable-failing-tests
5232 (lambda _
5233 (substitute* (append (find-files "lib/matplotlib/tests/"
5234 "test_.*\\.py$")
5235 (find-files "lib/mpl_toolkits/tests"
5236 "test_.*\\.py$"))
5237 (("^from matplotlib" match)
5238 (string-append "import pytest\n" match))
5239 (("( *)@image_comparison" match indent)
5240 (string-append indent
5241 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
5242 match)))
5243 (substitute* "lib/matplotlib/tests/test_animation.py"
5244 (("/bin/sh") (which "sh")))
5245 (for-each delete-file
5246 ;; test_normal_axes, test_get_tightbbox_polar
5247 '("lib/matplotlib/tests/test_axes.py"
5248 ;; We don't use the webagg backend and this test forces it.
5249 "lib/matplotlib/tests/test_backend_webagg.py"
5250 ;; test_outward_ticks
5251 "lib/matplotlib/tests/test_tightlayout.py"
5252 ;; test_hidden_axes fails with minor extent
5253 ;; differences, possibly due to the use of a
5254 ;; different version of FreeType.
5255 "lib/matplotlib/tests/test_constrainedlayout.py"
5256 ;; Fontconfig returns no fonts.
5257 "lib/matplotlib/tests/test_font_manager.py"))
5258 #t))
5259 (add-before 'install 'install-jquery-ui
5260 (lambda* (#:key outputs inputs #:allow-other-keys)
5261 (let ((dir (string-append (assoc-ref outputs "out")
5262 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
5263 (mkdir-p dir)
5264 (invoke "unzip"
5265 (assoc-ref inputs "jquery-ui")
5266 "-d" dir))
5267 #t))
5268 (replace 'check
5269 (lambda* (#:key outputs inputs #:allow-other-keys)
5270 (add-installed-pythonpath inputs outputs)
5271 (invoke "python" "tests.py" "-v"
5272 "-m" "not network and not webagg")))
5273 (add-before 'build 'configure-environment
5274 (lambda* (#:key outputs inputs #:allow-other-keys)
5275 (let ((cairo (assoc-ref inputs "cairo")))
5276 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
5277 ;; has not effect.
5278 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
5279 (setenv "HOME" (getcwd))
5280 ;; Fix rounding errors when using the x87 FPU.
5281 (when (string-prefix? "i686" ,(%current-system))
5282 (setenv "CFLAGS" "-ffloat-store"))
5283 (call-with-output-file "setup.cfg"
5284 (lambda (port)
5285 (format port "[directories]~%
5286 basedirlist = ~a,~a~%
5287 [packages]~%
5288 tests = True~%"
5289 (assoc-ref inputs "tcl")
5290 (assoc-ref inputs "tk")))))
5291 #t)))))
5292 (home-page "https://matplotlib.org/")
5293 (synopsis "2D plotting library for Python")
5294 (description
5295 "Matplotlib is a Python 2D plotting library which produces publication
5296 quality figures in a variety of hardcopy formats and interactive environments
5297 across platforms. Matplotlib can be used in Python scripts, the python and
5298 ipython shell, web application servers, and six graphical user interface
5299 toolkits.")
5300 (license license:psfl)
5301 (properties `((python2-variant . ,(delay python2-matplotlib))))))
5302
5303 (define-public python2-matplotlib
5304 (let ((matplotlib (package-with-python2
5305 (strip-python2-variant python-matplotlib))))
5306 (package (inherit matplotlib)
5307 (version "2.2.4")
5308 (source
5309 (origin
5310 (method url-fetch)
5311 (uri (pypi-uri "matplotlib" version))
5312 (sha256
5313 (base32
5314 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
5315 (arguments
5316 (substitute-keyword-arguments (package-arguments matplotlib)
5317 ((#:phases phases)
5318 `(modify-phases ,phases
5319 (replace 'install-jquery-ui
5320 (lambda* (#:key outputs inputs #:allow-other-keys)
5321 (let ((dir (string-append (assoc-ref outputs "out")
5322 "/lib/python2.7/site-packages/"
5323 "matplotlib/backends/web_backend/")))
5324 (mkdir-p dir)
5325 (invoke "unzip"
5326 (assoc-ref inputs "jquery-ui")
5327 "-d" dir))
5328 #t))
5329 (delete 'fix-and-disable-failing-tests)
5330 (delete 'check))))) ; These tests weren't run the the past.
5331 ;; Make sure to use special packages for Python 2 instead
5332 ;; of those automatically rewritten by package-with-python2.
5333 (propagated-inputs
5334 `(("python2-pycairo" ,python2-pycairo)
5335 ("python2-backports-functools-lru-cache"
5336 ,python2-backports-functools-lru-cache)
5337 ("python2-functools32" ,python2-functools32)
5338 ("python2-pygobject-2" ,python2-pygobject-2)
5339 ("python2-subprocess32" ,python2-subprocess32)
5340 ("python2-tkinter" ,python-2 "tk")
5341 ,@(fold alist-delete (package-propagated-inputs matplotlib)
5342 '("python-cairocffi"
5343 "python-pycairo"
5344 "python-pygobject"
5345 "python-tkinter")))))))
5346
5347 (define-public python-matplotlib-documentation
5348 (package
5349 (name "python-matplotlib-documentation")
5350 (version (package-version python-matplotlib))
5351 (source (package-source python-matplotlib))
5352 (build-system python-build-system)
5353 (native-inputs
5354 `(("python-matplotlib" ,python-matplotlib)
5355 ("python-colorspacious" ,python-colorspacious)
5356 ("python-sphinx" ,python-sphinx)
5357 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
5358 ("python-sphinx-gallery" ,python-sphinx-gallery)
5359 ("python-numpydoc" ,python-numpydoc)
5360 ("python-ipython" ,python-ipython)
5361 ("python-ipykernel" ,python-ipykernel)
5362 ("python-mock" ,python-mock)
5363 ("graphviz" ,graphviz)
5364 ("texlive" ,(texlive-union (list texlive-amsfonts
5365 texlive-latex-amsmath
5366 texlive-latex-enumitem
5367 texlive-latex-expdlist
5368 texlive-latex-geometry
5369 texlive-latex-preview
5370 texlive-latex-type1cm
5371 texlive-latex-ucs
5372
5373 texlive-generic-pdftex
5374
5375 texlive-fonts-ec
5376 texlive-fonts-adobe-times
5377 texlive-fonts-txfonts)))
5378 ("texinfo" ,texinfo)
5379 ,@(package-native-inputs python-matplotlib)))
5380 (arguments
5381 `(#:tests? #f ; we're only generating documentation
5382 #:phases
5383 (modify-phases %standard-phases
5384 ;; The tests in python-matplotlib are run after the install phase, so
5385 ;; we need to delete the extra phase here.
5386 (delete 'check)
5387 (replace 'build
5388 (lambda _
5389 (chdir "doc")
5390 (setenv "PYTHONPATH"
5391 (string-append (getenv "PYTHONPATH")
5392 ":" (getcwd) "/../examples/units"))
5393 (substitute* "conf.py"
5394 ;; Don't use git.
5395 (("^SHA = check_output.*")
5396 (string-append "SHA = \"" ,version "\"\n"))
5397 ;; Don't fetch intersphinx files from the Internet
5398 (("^explicit_order_folders" m)
5399 (string-append "intersphinx_mapping = {}\n" m))
5400 (("'sphinx.ext.intersphinx',") "")
5401 ;; Disable URL embedding which requires internet access.
5402 (("'https://docs.scipy.org/doc/numpy'") "None")
5403 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
5404 (invoke "make"
5405 "SPHINXBUILD=sphinx-build"
5406 "SPHINXOPTS=" ; don't abort on warnings
5407 "html" "texinfo")))
5408 (replace 'install
5409 (lambda* (#:key inputs outputs #:allow-other-keys)
5410 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
5411 (doc (string-append data "/doc/python-matplotlib-" ,version))
5412 (info (string-append data "/info"))
5413 (html (string-append doc "/html")))
5414 (mkdir-p html)
5415 (mkdir-p info)
5416 (copy-recursively "build/html" html)
5417 (symlink (string-append html "/_images")
5418 (string-append info "/matplotlib-figures"))
5419 (with-directory-excursion "build/texinfo"
5420 (substitute* "matplotlib.texi"
5421 (("@image\\{([^,]*)" all file)
5422 (string-append "@image{matplotlib-figures/" file)))
5423 (symlink (string-append html "/_images")
5424 "./matplotlib-figures")
5425 (invoke "makeinfo" "--no-split"
5426 "-o" "matplotlib.info" "matplotlib.texi"))
5427 (install-file "build/texinfo/matplotlib.info" info))
5428 #t)))))
5429 (home-page (package-home-page python-matplotlib))
5430 (synopsis "Documentation for the python-matplotlib package")
5431 (description (package-description python-matplotlib))
5432 (license (package-license python-matplotlib))))
5433
5434 (define-public python2-matplotlib-documentation
5435 (let ((parent (package-with-python2 python-matplotlib-documentation)))
5436 (package
5437 (inherit parent)
5438 (native-inputs
5439 (alist-delete "python-sphinx-copybutton"
5440 (package-native-inputs parent))))))
5441
5442 (define-public python-matplotlib-venn
5443 (package
5444 (name "python-matplotlib-venn")
5445 (version "0.11.5")
5446 (source
5447 (origin
5448 (method url-fetch)
5449 (uri (pypi-uri "matplotlib-venn" version ".zip"))
5450 (sha256
5451 (base32
5452 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
5453 (build-system python-build-system)
5454 (arguments '(#:tests? #f)) ; tests are not included
5455 (propagated-inputs
5456 `(("python-matplotlib" ,python-matplotlib)
5457 ("python-numpy" ,python-numpy)
5458 ("python-scipy" ,python-scipy)))
5459 (native-inputs
5460 `(("unzip" ,unzip)))
5461 (home-page "https://github.com/konstantint/matplotlib-venn")
5462 (synopsis "Plot area-proportional Venn diagrams")
5463 (description
5464 "This package provides tools for plotting area-proportional two- and
5465 three-way Venn diagrams in @code{matplotlib}.")
5466 (license license:expat)))
5467
5468 (define-public python-pysnptools
5469 (package
5470 (name "python-pysnptools")
5471 (version "0.4.11")
5472 (source
5473 (origin
5474 (method url-fetch)
5475 (uri (pypi-uri "pysnptools" version))
5476 (sha256
5477 (base32
5478 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
5479 (build-system python-build-system)
5480 (arguments
5481 `(#:tests? #f ; no test data are included
5482 #:phases
5483 (modify-phases %standard-phases
5484 (replace 'check
5485 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5486 (if tests?
5487 (begin
5488 (add-installed-pythonpath inputs outputs)
5489 (invoke "python3" "pysnptools/test.py"))
5490 #t))))))
5491 (propagated-inputs
5492 `(("python-dill" ,python-dill)
5493 ("python-h5py" ,python-h5py)
5494 ("python-numpy" ,python-numpy)
5495 ("python-pandas" ,python-pandas)
5496 ("python-psutil" ,python-psutil)
5497 ("python-scipy" ,python-scipy)))
5498 (native-inputs
5499 `(("python-cython" ,python-cython)))
5500 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
5501 (synopsis "Library for reading and manipulating genetic data")
5502 (description
5503 "PySnpTools is a library for reading and manipulating genetic data. It
5504 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
5505 those files. It can also efficiently manipulate ranges of integers using set
5506 operators such as union, intersection, and difference.")
5507 (license license:asl2.0)))
5508
5509 (define-public python2-pysnptools
5510 (package-with-python2 python-pysnptools))
5511
5512 (define-public python-wurlitzer
5513 (package
5514 (name "python-wurlitzer")
5515 (version "2.0.1")
5516 (source
5517 (origin
5518 (method url-fetch)
5519 (uri (pypi-uri "wurlitzer" version))
5520 (sha256
5521 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
5522 (build-system python-build-system)
5523 (arguments
5524 '(#:phases
5525 (modify-phases %standard-phases
5526 (replace 'check
5527 (lambda _
5528 (invoke "pytest" "-vv" "test.py"))))))
5529 (native-inputs
5530 `(("python-mock" ,python-mock)
5531 ("python-pytest" ,python-pytest)))
5532 (home-page "https://github.com/minrk/wurlitzer")
5533 (synopsis "Capture C-level output in context managers")
5534 (description
5535 "This library helps to redirect @code{sys.stdout} to a stream or a file
5536 while executing some piece of code, including C code running within a Python
5537 process.")
5538 (license license:expat)))
5539
5540 (define-public python-socksipy-branch
5541 (package
5542 (name "python-socksipy-branch")
5543 (version "1.01")
5544 (source
5545 (origin
5546 (method url-fetch)
5547 (uri (pypi-uri "SocksiPy-branch" version))
5548 (sha256
5549 (base32
5550 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
5551 (build-system python-build-system)
5552 (arguments
5553 `(#:tests? #f)) ; There are no tests
5554 (home-page "https://code.google.com/archive/p/socksipy-branch/")
5555 (synopsis "Python SOCKS module")
5556 (description
5557 "SocksiPy - A Python SOCKS client module. It provides a
5558 socket-like interface that supports connections to any TCP
5559 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
5560 The original version was developed by Dan Haim, this is a
5561 branch created by Mario Vilas to address some open issues,
5562 as the original project seems to have been abandoned circa 2007.")
5563 (license license:bsd-3)))
5564
5565 (define-public python2-socksipy-branch
5566 (package-with-python2 python-socksipy-branch))
5567
5568 (define-public python-socksipychain
5569 (package
5570 (name "python-socksipychain")
5571 (version "2.1.2")
5572 (source
5573 (origin
5574 (method git-fetch)
5575 (uri (git-reference
5576 (url "https://github.com/pagekite/PySocksipyChain")
5577 (commit (string-append "v" version))))
5578 (file-name (git-file-name name version))
5579 (sha256
5580 (base32
5581 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5582 (build-system python-build-system)
5583 (arguments
5584 `(#:tests? #f)) ; Tests try to access the network.
5585 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5586 (synopsis "Python SOCKS module with chained proxies support")
5587 (description
5588 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5589 adds support for arbitrary chaining of proxy servers and various modes of
5590 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5591 a simple netcat replacement with chaining support.")
5592 (license license:bsd-3)))
5593
5594 (define-public python-pycodestyle
5595 (package
5596 (name "python-pycodestyle")
5597 (version "2.7.0")
5598 (source
5599 (origin
5600 (method url-fetch)
5601 (uri (pypi-uri "pycodestyle" version))
5602 (sha256
5603 (base32
5604 "1vqwmzmjdv331kmfq3q9j3as2x7r2r49lf83r9w4147pdg8c32f3"))))
5605 (build-system python-build-system)
5606 (arguments
5607 `(#:phases
5608 (modify-phases %standard-phases
5609 (replace 'check
5610 (lambda _
5611 (invoke "pytest" "-vv"))))))
5612 (native-inputs
5613 `(("python-pytest" ,python-pytest)))
5614 (home-page "https://pycodestyle.readthedocs.io/")
5615 (synopsis "Python style guide checker")
5616 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5617 Python code against some of the style conventions in
5618 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5619 (license license:expat)))
5620
5621 (define-public python2-pycodestyle
5622 (package-with-python2 python-pycodestyle))
5623
5624 (define-public python-multidict
5625 (package
5626 (name "python-multidict")
5627 (version "4.7.5")
5628 (source
5629 (origin
5630 (method url-fetch)
5631 (uri (pypi-uri "multidict" version))
5632 (sha256
5633 (base32
5634 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5635 (build-system python-build-system)
5636 (arguments
5637 '(#:modules ((ice-9 ftw)
5638 (srfi srfi-1)
5639 (srfi srfi-26)
5640 (guix build utils)
5641 (guix build python-build-system))
5642 #:phases (modify-phases %standard-phases
5643 (replace 'check
5644 (lambda* (#:key tests? #:allow-other-keys)
5645 (if tests?
5646 (begin
5647 (let ((libdir (find (cut string-prefix? "lib." <>)
5648 (scandir "build"))))
5649 (setenv "PYTHONPATH"
5650 (string-append "./build/" libdir ":"
5651 (getenv "PYTHONPATH")))
5652 (invoke "pytest" "-vv")))
5653 (format #t "test suite not run~%"))
5654 #t)))))
5655 (native-inputs
5656 `(("python-pytest" ,python-pytest)
5657 ("python-pytest-cov" ,python-pytest-cov)))
5658 (home-page "https://github.com/aio-libs/multidict/")
5659 (synopsis "Multidict implementation")
5660 (description "Multidict is dict-like collection of key-value pairs
5661 where key might be occurred more than once in the container.")
5662 (license license:asl2.0)))
5663
5664 (define-public python-orderedmultidict
5665 (package
5666 (name "python-orderedmultidict")
5667 (version "1.0")
5668 (source
5669 (origin
5670 (method url-fetch)
5671 (uri (pypi-uri "orderedmultidict" version))
5672 (sha256
5673 (base32
5674 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5675 (build-system python-build-system)
5676 (arguments
5677 `(#:phases
5678 (modify-phases %standard-phases
5679 (add-after 'unpack 'fix-tests
5680 (lambda _
5681 ;; The package uses nosetest for running the tests.
5682 ;; Adding this initfile allows to run the test suite
5683 ;; without requiring nosetest.
5684 (with-output-to-file "tests/__init__.py" newline)
5685 #t)))))
5686 (propagated-inputs
5687 `(("python-six" ,python-six)))
5688 (native-inputs
5689 `(("python-pycodestyle" ,python-pycodestyle)))
5690 (home-page "https://github.com/gruns/orderedmultidict")
5691 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5692 (description "This package contains a library for ordered multivalue
5693 dictionaries. A multivalue dictionary is a dictionary that can store
5694 multiple values for the same key. An ordered multivalue dictionary is a
5695 multivalue dictionary that retains the order of insertions and deletions.")
5696 (license license:unlicense)))
5697
5698 (define-public python2-orderedmultidict
5699 (package-with-python2 python-orderedmultidict))
5700
5701 (define-public python-autopep8
5702 (package
5703 (name "python-autopep8")
5704 (version "1.5.3")
5705 (source
5706 (origin
5707 (method url-fetch)
5708 (uri (pypi-uri "autopep8" version))
5709 (sha256
5710 (base32
5711 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5712 (build-system python-build-system)
5713 (propagated-inputs
5714 `(("python-pycodestyle" ,python-pycodestyle)
5715 ("python-toml" ,python-toml)))
5716 (home-page "https://github.com/hhatto/autopep8")
5717 (synopsis "Format Python code according to the PEP 8 style guide")
5718 (description
5719 "@code{autopep8} automatically formats Python code to conform to
5720 the PEP 8 style guide. It uses the pycodestyle utility to determine
5721 what parts of the code needs to be formatted. @code{autopep8} is
5722 capable of fixing most of the formatting issues that can be reported
5723 by pycodestyle.")
5724 (license (license:non-copyleft
5725 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5726
5727 (define-public python2-autopep8
5728 (package-with-python2 python-autopep8))
5729
5730 (define-public python-distlib
5731 (package
5732 (name "python-distlib")
5733 (version "0.3.0")
5734 (source
5735 (origin
5736 (method url-fetch)
5737 (uri (pypi-uri "distlib" version ".zip"))
5738 (sha256
5739 (base32
5740 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5741 (build-system python-build-system)
5742 (arguments
5743 `(#:phases
5744 (modify-phases %standard-phases
5745 (add-before 'build 'no-/bin/sh
5746 (lambda _
5747 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5748 (("/bin/sh") (which "sh")))
5749 #t))
5750 (add-before 'check 'prepare-test-env
5751 (lambda _
5752 (setenv "HOME" "/tmp")
5753 ;; NOTE: Any value works, the variable just has to be present.
5754 (setenv "SKIP_ONLINE" "1")
5755 #t)))))
5756 (native-inputs `(("unzip" ,unzip)))
5757 (home-page "https://bitbucket.org/pypa/distlib")
5758 (synopsis "Distribution utilities")
5759 (description "Distlib is a library which implements low-level functions that
5760 relate to packaging and distribution of Python software. It is intended to be
5761 used as the basis for third-party packaging tools.")
5762 (license license:psfl)))
5763
5764 ;; TODO: Merge with 'python-distlib' on the next rebuild cycle.
5765 (define-public python-distlib/next
5766 (package
5767 (inherit python-distlib)
5768 (version "0.3.1")
5769 (source
5770 (origin
5771 (method url-fetch)
5772 (uri (pypi-uri "distlib" version ".zip"))
5773 (sha256
5774 (base32
5775 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))))
5776
5777 (define-public python-distutils-extra
5778 (package
5779 (name "python-distutils-extra")
5780 (version "2.38")
5781 (source
5782 (origin
5783 (method url-fetch)
5784 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5785 version "/+download/python-distutils-extra-"
5786 version ".tar.gz"))
5787 (sha256
5788 (base32
5789 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5790 (build-system python-build-system)
5791 (home-page "https://launchpad.net/python-distutils-extra/")
5792 (synopsis "Enhancements to Python's distutils")
5793 (description
5794 "The python-distutils-extra module enables you to easily integrate
5795 gettext support, themed icons, and scrollkeeper-based documentation into
5796 Python's distutils.")
5797 (license license:gpl2)))
5798
5799 (define-public python2-distutils-extra
5800 (package-with-python2 python-distutils-extra))
5801
5802 (define-public python2-elib.intl
5803 (package
5804 (name "python2-elib.intl")
5805 (version "0.0.3")
5806 (source
5807 (origin
5808 ;; This project doesn't tag releases or publish tarballs, so we take
5809 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5810 (method git-fetch)
5811 (uri (git-reference
5812 (url "https://github.com/dieterv/elib.intl")
5813 (commit "d09997cfef")))
5814 (file-name (string-append name "-" version "-checkout"))
5815 (sha256
5816 (base32
5817 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5818 (build-system python-build-system)
5819 (arguments
5820 ;; incompatible with Python 3 (exception syntax)
5821 `(#:python ,python-2
5822 #:tests? #f))
5823 (home-page "https://github.com/dieterv/elib.intl")
5824 (synopsis "Enhanced internationalization for Python")
5825 (description
5826 "The elib.intl module provides enhanced internationalization (I18N)
5827 services for your Python modules and applications.")
5828 (license license:lgpl3+)))
5829
5830 (define-public python-olefile
5831 (package
5832 (name "python-olefile")
5833 (version "0.46")
5834 (source
5835 (origin
5836 (method url-fetch)
5837 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5838 "download/v" version "/olefile-" version ".tar.gz"))
5839 (file-name (string-append name "-" version ".tar.gz"))
5840 (sha256
5841 (base32
5842 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5843 (build-system python-build-system)
5844 (home-page "https://www.decalage.info/python/olefileio")
5845 (synopsis "Read and write Microsoft OLE2 files.")
5846 (description
5847 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5848 Storage or Compound Document, Microsoft Office). It is an improved version of
5849 the OleFileIO module from PIL, the Python Image Library.")
5850 (license license:bsd-3)))
5851
5852 (define-public python2-olefile
5853 (package-with-python2 python-olefile))
5854
5855 (define-public python-pikepdf
5856 (package
5857 (name "python-pikepdf")
5858 (version "2.10.0")
5859 (source
5860 (origin
5861 (method url-fetch)
5862 (uri (pypi-uri "pikepdf" version))
5863 (sha256
5864 (base32 "09wfj1hjvj3r9gv7ywrqd7h3d0bz64bvils8sm3ghj90jhalb03s"))))
5865 (build-system python-build-system)
5866 (arguments
5867 `(#:tests? #false)) ;require python-xmp-toolkit
5868 (native-inputs
5869 `(("pybind11" ,pybind11)
5870 ("python-setuptools" ,python-setuptools)
5871 ("python-setuptools-scm" ,python-setuptools-scm/next)
5872 ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
5873 ("python-toml" ,python-toml)
5874 ("python-wheel" ,python-wheel)))
5875 (inputs
5876 `(("qpdf" ,qpdf)))
5877 (propagated-inputs
5878 `(("python-lxml" ,python-lxml)
5879 ("python-pillow" ,python-pillow)))
5880 (home-page "https://github.com/pikepdf/pikepdf")
5881 (synopsis "Read and write PDFs with Python")
5882 (description
5883 "pikepdf is a Python library for reading and writing PDF files.")
5884 (license license:mpl2.0)))
5885
5886 (define-public python-pillow
5887 (package
5888 (name "python-pillow")
5889 (version "8.1.1")
5890 (source
5891 (origin
5892 (method url-fetch)
5893 (uri (pypi-uri "Pillow" version))
5894 (sha256
5895 (base32
5896 "086g7nhv52wclrwnzbzs2x3nvyzs2hfq1bvgivsrp5f7r7wiiz7n"))))
5897 (build-system python-build-system)
5898 (native-inputs
5899 `(("python-pytest" ,python-pytest)))
5900 (inputs
5901 `(("freetype" ,freetype)
5902 ("lcms" ,lcms)
5903 ("libjpeg" ,libjpeg-turbo)
5904 ("libtiff" ,libtiff)
5905 ("libwebp" ,libwebp)
5906 ("openjpeg" ,openjpeg)
5907 ("zlib" ,zlib)))
5908 (propagated-inputs
5909 `(("python-olefile" ,python-olefile)))
5910 (arguments
5911 `(#:phases
5912 (modify-phases %standard-phases
5913 (add-after 'unpack 'patch-ldconfig
5914 (lambda _
5915 (substitute* "setup.py"
5916 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5917 (replace 'check
5918 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5919 (if tests?
5920 (begin
5921 (setenv "HOME" (getcwd))
5922 ;; Make installed package available for running the tests.
5923 (add-installed-pythonpath inputs outputs)
5924 (invoke "python" "selftest.py" "--installed")
5925 (invoke "python" "-m" "pytest" "-vv"))
5926 #t))))))
5927 (home-page "https://python-pillow.org")
5928 (synopsis "Fork of the Python Imaging Library")
5929 (description
5930 "The Python Imaging Library adds image processing capabilities to your
5931 Python interpreter. This library provides extensive file format support, an
5932 efficient internal representation, and fairly powerful image processing
5933 capabilities. The core image library is designed for fast access to data
5934 stored in a few basic pixel formats. It should provide a solid foundation for
5935 a general image processing tool.")
5936 (properties `((python2-variant . ,(delay python2-pillow))))
5937 (license (license:x11-style
5938 "http://www.pythonware.com/products/pil/license.htm"
5939 "The PIL Software License"))))
5940
5941 (define-public python2-pillow
5942 (package-with-python2
5943 (package
5944 (inherit (strip-python2-variant python-pillow))
5945 ;; Version 6 is the last series with Python 2 support.
5946 (version "6.2.2")
5947 (source
5948 (origin
5949 (method url-fetch)
5950 (uri (pypi-uri "Pillow" version))
5951 (sha256
5952 (base32
5953 "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv")))))))
5954
5955 (define-public python-pillow-2.9
5956 (package
5957 (inherit python-pillow)
5958 (version "2.9.0")
5959 (source
5960 (origin
5961 (method url-fetch)
5962 (uri (pypi-uri "Pillow" version))
5963 (sha256
5964 (base32
5965 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
5966 (arguments
5967 (substitute-keyword-arguments (package-arguments python-pillow)
5968 ((#:tests? _ #f) #f)))
5969 (properties '((hidden? #t)))))
5970
5971 (define-public python-pillow-simd
5972 (package
5973 (inherit python-pillow)
5974 (name "python-pillow-simd")
5975 (version "7.1.2")
5976 ;; The PyPI tarball does not include test files.
5977 (source
5978 (origin
5979 (method git-fetch)
5980 (uri (git-reference
5981 (url "https://github.com/uploadcare/pillow-simd")
5982 (commit version)))
5983 (file-name (git-file-name name version))
5984 (sha256
5985 (base32 "0w11np4cybamry3jsg70x747c79zwjzfq0xiprfp6c186rd6nzp9"))))
5986 (arguments
5987 (substitute-keyword-arguments
5988 (package-arguments python-pillow)
5989 ((#:phases phases)
5990 `(modify-phases ,phases
5991 (add-after 'unpack 'make-tests-writable
5992 (lambda _
5993 (for-each make-file-writable (find-files "Tests"))
5994 #t))))))
5995 (inputs
5996 `(("libraqm" ,libraqm)
5997 ("libimagequant" ,libimagequant)
5998 ,@(package-inputs python-pillow)))
5999 (home-page "https://github.com/uploadcare/pillow-simd")
6000 (synopsis "Fork of the Python Imaging Library (Pillow)")
6001 (description "This package is a fork of Pillow which adds support for SIMD
6002 parallelism.")))
6003
6004 (define-public python-roifile
6005 (package
6006 (name "python-roifile")
6007 (version "2020.5.28")
6008 (source
6009 (origin
6010 (method url-fetch)
6011 (uri (pypi-uri "roifile" version))
6012 (sha256
6013 (base32
6014 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
6015 (build-system python-build-system)
6016 (arguments `(#:tests? #f)) ; there are none
6017 (propagated-inputs
6018 `(("python-numpy" ,python-numpy)))
6019 (home-page "https://www.lfd.uci.edu/~gohlke/")
6020 (synopsis "Read and write ImageJ ROI format")
6021 (description "Roifile is a Python library to read, write, create, and plot
6022 ImageJ ROIs, an undocumented and ImageJ application specific format to store
6023 regions of interest, geometric shapes, paths, text, etc for image overlays.")
6024 (license license:bsd-3)))
6025
6026 (define-public python-tifffile
6027 (package
6028 (name "python-tifffile")
6029 (version "2020.6.3")
6030 (source
6031 (origin
6032 (method url-fetch)
6033 (uri (pypi-uri "tifffile" version))
6034 (sha256
6035 (base32
6036 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
6037 (build-system python-build-system)
6038 ;; Tests require lfdfiles, which depends on tifffile
6039 (arguments `(#:tests? #f))
6040 (propagated-inputs
6041 `(("python-numpy" ,python-numpy)
6042 ;;("python-lfdfiles" ,python-lfdfiles)
6043 ("python-roifile" ,python-roifile)))
6044 (home-page "https://www.lfd.uci.edu/~gohlke/")
6045 (synopsis "Read and write TIFF(r) files")
6046 (description "This package lets you read image and metadata from many
6047 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
6048 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
6049 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
6050 (license license:bsd-3)))
6051
6052 (define-public python-lfdfiles
6053 (package
6054 (name "python-lfdfiles")
6055 (version "2020.1.1")
6056 (source
6057 (origin
6058 (method url-fetch)
6059 (uri (pypi-uri "lfdfiles" version))
6060 (sha256
6061 (base32
6062 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
6063 (build-system python-build-system)
6064 (propagated-inputs
6065 `(("python-click" ,python-click)
6066 ("python-numpy" ,python-numpy)
6067 ("python-tifffile" ,python-tifffile)))
6068 (home-page "https://www.lfd.uci.edu/~gohlke/")
6069 (synopsis "Work with LFD data files")
6070 (description
6071 "Lfdfiles is a Python library and console script for reading, writing,
6072 converting, and viewing many of the proprietary file formats used to store
6073 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
6074 (license license:bsd-3)))
6075
6076 (define-public python-imageio
6077 (package
6078 (name "python-imageio")
6079 (version "2.8.0")
6080 (source
6081 (origin
6082 (method url-fetch)
6083 (uri (pypi-uri "imageio" version))
6084 (sha256
6085 (base32
6086 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
6087 (build-system python-build-system)
6088 (arguments
6089 `(#:tests? #f ; many tests require online data
6090 #:phases
6091 (modify-phases %standard-phases
6092 (replace 'check
6093 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
6094 (if tests?
6095 (begin
6096 ;; Make installed package available for running the tests.
6097 (add-installed-pythonpath inputs outputs)
6098 (invoke "pytest" "-vv"))
6099 #t))))))
6100 (propagated-inputs
6101 `(("python-numpy" ,python-numpy)
6102 ("python-pillow" ,python-pillow)
6103 ("python-psutil" ,python-psutil)))
6104 (native-inputs
6105 `(("python-pytest" ,python-pytest)))
6106 (home-page "https://imageio.github.io/")
6107 (synopsis "Library for reading and writing a wide range of image data")
6108 (description
6109 "Imageio is a Python library that provides an easy interface to read and
6110 write a wide range of image data, including animated images, video, volumetric
6111 data, and scientific formats.")
6112 (license license:bsd-2)))
6113
6114 (define-public python-pycparser
6115 (package
6116 (name "python-pycparser")
6117 (version "2.20")
6118 (source
6119 (origin
6120 (method url-fetch)
6121 (uri (pypi-uri "pycparser" version))
6122 (sha256
6123 (base32
6124 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
6125 (outputs '("out" "doc"))
6126 (build-system python-build-system)
6127 (native-inputs
6128 `(("pkg-config" ,pkg-config)))
6129 (arguments
6130 `(#:phases
6131 (modify-phases %standard-phases
6132 (replace 'check
6133 (lambda _
6134 (with-directory-excursion "tests"
6135 (invoke "python" "all_tests.py"))
6136 #t))
6137 (add-after 'install 'install-doc
6138 (lambda* (#:key outputs #:allow-other-keys)
6139 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6140 (doc (string-append data "/doc/" ,name "-" ,version))
6141 (examples (string-append doc "/examples")))
6142 (mkdir-p examples)
6143 (for-each (lambda (file)
6144 (copy-file (string-append "." file)
6145 (string-append doc file)))
6146 '("/README.rst" "/CHANGES" "/LICENSE"))
6147 (copy-recursively "examples" examples)
6148 #t))))))
6149 (home-page "https://github.com/eliben/pycparser")
6150 (synopsis "C parser in Python")
6151 (description
6152 "Pycparser is a complete parser of the C language, written in pure Python
6153 using the PLY parsing library. It parses C code into an AST and can serve as
6154 a front-end for C compilers or analysis tools.")
6155 (license license:bsd-3)))
6156
6157 (define-public python2-pycparser
6158 (package-with-python2 python-pycparser))
6159
6160 (define-public python-xlsxwriter
6161 (package
6162 (name "python-xlsxwriter")
6163 (version "1.3.7")
6164 (source
6165 (origin
6166 ;; There are no tests in the PyPI tarball.
6167 (method git-fetch)
6168 (uri (git-reference
6169 (url "https://github.com/jmcnamara/XlsxWriter")
6170 (commit (string-append "RELEASE_" version))))
6171 (file-name (git-file-name name version))
6172 (sha256
6173 (base32 "1qg40r2mwrqfmhaxnary1cfgi0dwwazp5qga7c9p2cdji2v0x5rm"))))
6174 (build-system python-build-system)
6175 (home-page "https://github.com/jmcnamara/XlsxWriter")
6176 (synopsis "Python module for creating Excel XLSX files")
6177 (description
6178 "XlsxWriter is a Python module that can be used to write text, numbers,
6179 formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
6180 (license license:bsd-2)))
6181
6182 (define-public python-pywavelets
6183 (package
6184 (name "python-pywavelets")
6185 (version "1.1.1")
6186 (home-page "https://github.com/PyWavelets/pywt")
6187 (source (origin
6188 (method url-fetch)
6189 (uri (pypi-uri "PyWavelets" version))
6190 (sha256
6191 (base32
6192 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
6193 (build-system python-build-system)
6194 (arguments
6195 '(#:modules ((ice-9 ftw)
6196 (srfi srfi-1)
6197 (srfi srfi-26)
6198 (guix build utils)
6199 (guix build python-build-system))
6200 #:phases
6201 (modify-phases %standard-phases
6202 (replace 'check
6203 (lambda _
6204 (let ((cwd (getcwd))
6205 (libdir (find (cut string-prefix? "lib." <>)
6206 (scandir "build"))))
6207 (with-directory-excursion (string-append cwd "/build/" libdir)
6208 (invoke "pytest" "-vv"))))))))
6209 (native-inputs
6210 `(("python-matplotlib" ,python-matplotlib) ;for tests
6211 ("python-pytest" ,python-pytest)))
6212 (propagated-inputs
6213 `(("python-numpy" ,python-numpy)))
6214 (synopsis "Wavelet transforms in Python")
6215 (description
6216 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
6217 mathematical basis functions that are localized in both time and frequency.
6218 Wavelet transforms are time-frequency transforms employing wavelets. They are
6219 similar to Fourier transforms, the difference being that Fourier transforms are
6220 localized only in frequency instead of in time and frequency.")
6221 (license license:expat)))
6222
6223 (define-public python-pywal
6224 (package
6225 (name "python-pywal")
6226 (version "3.3.0")
6227 (source
6228 (origin
6229 (method git-fetch)
6230 (uri (git-reference
6231 (url "https://github.com/dylanaraps/pywal")
6232 (commit version)))
6233 (file-name (git-file-name name version))
6234 (sha256
6235 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
6236 (build-system python-build-system)
6237 (arguments
6238 `(#:phases
6239 (modify-phases %standard-phases
6240 (add-before 'check 'fix-home-directory
6241 (lambda _
6242 ;; Tests fail with "Permission denied: '/homeless-shelter'".
6243 (setenv "HOME" "/tmp")
6244 #t)))))
6245 (inputs
6246 `(("imagemagick" ,imagemagick)))
6247 (home-page "https://github.com/dylanaraps/pywal")
6248 (synopsis "Color palette generator and applicator")
6249 (description
6250 "Pywal is a tool that generates a color palette from the dominant colors
6251 in an image. It then applies the colors system-wide and on-the-fly in all of
6252 your favourite programs.")
6253 (license license:expat)))
6254
6255 (define-public python-pywinrm
6256 (package
6257 (name "python-pywinrm")
6258 (version "0.4.1")
6259 (source
6260 (origin
6261 (method url-fetch)
6262 (uri (pypi-uri "pywinrm" version))
6263 (sha256
6264 (base32
6265 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
6266 (build-system python-build-system)
6267 (propagated-inputs
6268 `(("python-six" ,python-six)
6269 ("python-requests_ntlm" ,python-requests_ntlm)
6270 ("python-xmltodict" ,python-xmltodict)
6271 ("python-kerberos" ,python-kerberos)))
6272 (native-inputs
6273 `(("python-mock" ,python-mock)
6274 ("python-pytest" ,python-pytest)))
6275 (home-page "https://github.com/diyan/pywinrm/")
6276 (synopsis
6277 "Python library for Windows Remote Management (WinRM)")
6278 (description
6279 "pywinrm is a Python client for the Windows Remote Management (WinRM)
6280 service. It allows you to invoke commands on target Windows machines from
6281 any machine that can run Python.")
6282 (license license:expat)))
6283
6284 (define-public python-xcffib
6285 (package
6286 (name "python-xcffib")
6287 (version "0.6.0")
6288 (source
6289 (origin
6290 (method url-fetch)
6291 (uri (pypi-uri "xcffib" version))
6292 (sha256
6293 (base32
6294 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
6295 (build-system python-build-system)
6296 (inputs
6297 `(("libxcb" ,libxcb)))
6298 (propagated-inputs
6299 `(("python-cffi" ,python-cffi) ; used at run time
6300 ("python-six" ,python-six)))
6301 (arguments
6302 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
6303 #:tests? #f
6304 #:phases
6305 (modify-phases %standard-phases
6306 (add-after 'unpack 'fix-libxcb-path
6307 (lambda* (#:key inputs #:allow-other-keys)
6308 (let ((libxcb (assoc-ref inputs "libxcb")))
6309 (substitute* '("xcffib/__init__.py")
6310 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
6311 #t)))
6312 (add-after 'install 'install-doc
6313 (lambda* (#:key outputs #:allow-other-keys)
6314 (let ((doc (string-append (assoc-ref outputs "out") "/share"
6315 "/doc/" ,name "-" ,version)))
6316 (mkdir-p doc)
6317 (copy-file "README.md"
6318 (string-append doc "/README.md"))
6319 #t))))))
6320 (home-page "https://github.com/tych0/xcffib")
6321 (synopsis "XCB Python bindings")
6322 (description
6323 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
6324 support for Python 3 and PyPy. It is based on cffi.")
6325 (license license:expat)))
6326
6327 (define-public python2-xcffib
6328 (package-with-python2 python-xcffib))
6329
6330 (define-public python-cairocffi
6331 (package
6332 (name "python-cairocffi")
6333 (version "1.2.0")
6334 (source
6335 (origin
6336 ;; The PyPI archive does not include the documentation, so use Git.
6337 (method git-fetch)
6338 (uri (git-reference
6339 (url "https://github.com/Kozea/cairocffi")
6340 (commit (string-append "v" version))))
6341 (file-name (git-file-name name version))
6342 (sha256
6343 (base32
6344 "1ypw0c2lr43acn57hbmckk183zq4h477j7p4ig2zjvw0mcpvia50"))))
6345 (build-system python-build-system)
6346 (outputs '("out" "doc"))
6347 (inputs
6348 `(("glib" ,glib)
6349 ("gtk+" ,gtk+)
6350 ("gdk-pixbuf" ,gdk-pixbuf)
6351 ("cairo" ,cairo)))
6352 (native-inputs
6353 `(("python-numpy" ,python-numpy)
6354 ("python-pytest" ,python-pytest)
6355 ("python-pytest-cov" ,python-pytest-cov)
6356 ("python-pytest-runner" ,python-pytest-runner)
6357 ("python-sphinx" ,python-sphinx)
6358 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
6359 (propagated-inputs
6360 `(("python-xcffib" ,python-xcffib))) ; used at run time
6361 (arguments
6362 `(#:phases
6363 (modify-phases %standard-phases
6364 (add-after 'unpack 'patch-paths
6365 (lambda* (#:key inputs #:allow-other-keys)
6366 (substitute* "cairocffi/__init__.py"
6367 ;; Hack the dynamic library loading mechanism.
6368 (("find_library\\(library_name\\)")
6369 "\"found\"")
6370 (("filenames = \\(library_filename,\\) \\+ filenames")
6371 "pass")
6372 (("libcairo.so.2")
6373 (string-append (assoc-ref inputs "cairo")
6374 "/lib/libcairo.so.2")))
6375 (substitute* "cairocffi/pixbuf.py"
6376 (("libgdk_pixbuf-2.0.so.0")
6377 (string-append (assoc-ref inputs "gdk-pixbuf")
6378 "/lib/libgdk_pixbuf-2.0.so.0"))
6379 (("libgobject-2.0.so.0")
6380 (string-append (assoc-ref inputs "glib")
6381 "/lib/libgobject-2.0.so.0"))
6382 (("libglib-2.0.so.0")
6383 (string-append (assoc-ref inputs "glib")
6384 "/lib/libglib-2.0.so.0"))
6385 (("libgdk-3.so.0")
6386 (string-append (assoc-ref inputs "gtk+")
6387 "/lib/libgdk-3.so.0")))
6388 #t))
6389 (add-after 'unpack 'disable-linters
6390 ;; Their check fails; none of our business.
6391 (lambda _
6392 (substitute* "setup.cfg"
6393 ((".*pytest-flake8.*") "")
6394 ((".*pytest-isort.*") "")
6395 (("--flake8") "")
6396 (("--isort") ""))
6397 #t))
6398 (add-after 'install 'install-doc
6399 (lambda* (#:key inputs outputs #:allow-other-keys)
6400 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6401 (doc (string-append data "/doc/" ,name "-" ,version))
6402 (html (string-append doc "/html")))
6403 (setenv "LD_LIBRARY_PATH"
6404 (string-append (assoc-ref inputs "cairo") "/lib" ":"
6405 (assoc-ref inputs "gdk-pixbuf") "/lib"))
6406 (setenv "LANG" "en_US.UTF-8")
6407 (mkdir-p html)
6408 (for-each (lambda (file)
6409 (copy-file (string-append "." file)
6410 (string-append doc file)))
6411 '("/README.rst" "/NEWS.rst"))
6412 (system* "python" "setup.py" "build_sphinx")
6413 (copy-recursively "docs/_build/html" html)
6414 #t))))))
6415 (home-page "https://github.com/Kozea/cairocffi")
6416 (synopsis "Python bindings and object-oriented API for Cairo")
6417 (description
6418 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
6419 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
6420 graphics library with support for multiple backends including image buffers,
6421 PNG, PostScript, PDF, and SVG file output.")
6422 (license license:bsd-3)))
6423
6424 (define-public python-decorator
6425 (package
6426 (name "python-decorator")
6427 (version "4.3.0")
6428 (source
6429 (origin
6430 (method url-fetch)
6431 (uri (pypi-uri "decorator" version))
6432 (sha256
6433 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
6434 (build-system python-build-system)
6435 (home-page "https://pypi.org/project/decorator/")
6436 (synopsis "Python module to simplify usage of decorators")
6437 (description
6438 "The aim of the decorator module is to simplify the usage of decorators
6439 for the average programmer, and to popularize decorators usage giving examples
6440 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
6441 etc. The core of this module is a decorator factory.")
6442 (license license:expat)))
6443
6444 (define-public python2-decorator
6445 (package-with-python2 python-decorator))
6446
6447 (define-public python-drmaa
6448 (package
6449 (name "python-drmaa")
6450 (version "0.7.7")
6451 (source
6452 (origin
6453 (method url-fetch)
6454 (uri (pypi-uri "drmaa" version))
6455 (sha256
6456 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
6457 (build-system python-build-system)
6458 ;; The test suite requires libdrmaa which is provided by the cluster
6459 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
6460 ;; should be set to the path of the libdrmaa library.
6461 (arguments '(#:tests? #f))
6462 (native-inputs
6463 `(("python-nose" ,python-nose)))
6464 (home-page "https://pypi.org/project/drmaa/")
6465 (synopsis "Python bindings for the DRMAA library")
6466 (description
6467 "A Python package for Distributed Resource Management (DRM) job
6468 submission and control. This package is an implementation of the DRMAA 1.0
6469 Python language binding specification.")
6470 (license license:bsd-3)))
6471
6472 (define-public python2-drmaa
6473 (package-with-python2 python-drmaa))
6474
6475 (define-public python-grako
6476 (package
6477 (name "python-grako")
6478 (version "3.99.9")
6479 (source
6480 (origin
6481 (method url-fetch)
6482 (uri
6483 (pypi-uri "grako" version ".zip"))
6484 (sha256
6485 (base32
6486 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
6487 (build-system python-build-system)
6488 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
6489 (native-inputs
6490 `(("unzip" ,unzip)
6491 ("python-pytest" ,python-pytest)
6492 ("python-pytest-runner" ,python-pytest-runner)))
6493 (home-page "https://bitbucket.org/neogeny/grako")
6494 (synopsis "EBNF parser generator")
6495 (description
6496 "Grako takes a grammar in a variation of EBNF as input, and outputs a
6497 memoizing PEG/Packrat parser in Python.")
6498 (license license:bsd-3)))
6499
6500 (define-public python2-grako
6501 (package-with-python2 python-grako))
6502
6503 (define-public python-grandalf
6504 (package
6505 (name "python-grandalf")
6506 (version "0.7")
6507 (source
6508 (origin
6509 ;; There's no source tarball on PyPI.
6510 (method git-fetch)
6511 (uri (git-reference
6512 (url "https://github.com/bdcht/grandalf")
6513 (commit (string-append "v" version))))
6514 (file-name (git-file-name name version))
6515 (sha256
6516 (base32
6517 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
6518 (build-system python-build-system)
6519 (arguments
6520 '(#:phases
6521 (modify-phases %standard-phases
6522 (replace 'check
6523 (lambda _
6524 (invoke "python" "setup.py" "pytest"))))))
6525 (native-inputs
6526 `(("python-pytest" ,python-pytest)
6527 ("python-pytest-runner" ,python-pytest-runner)))
6528 (propagated-inputs
6529 `(("python-numpy" ,python-numpy)
6530 ("python-ply" ,python-ply)))
6531 (home-page "https://github.com/bdcht/grandalf")
6532 (synopsis "Graph and drawing algorithms framework")
6533 (description
6534 "Grandalf is a Python package made for experimentations with graphs
6535 drawing algorithms. It is written in pure Python, and currently implements
6536 two layouts: the Sugiyama hierarchical layout and the force-driven or energy
6537 minimization approach. While not as fast or featured as graphviz or other
6538 libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
6539 than thousands of nodes, while keeping the source code simple enough to tweak
6540 and hack any part of it for experimental purpose. With a total of about 1500
6541 lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
6542 in less than 600 lines. The energy minimization approach is comprised of only
6543 250 lines!
6544
6545 Grandalf does only 2 not-so-simple things:
6546 @itemize
6547 @item computing the nodes (x,y) coordinates (based on provided nodes
6548 dimensions, and a chosen layout)
6549 @item routing the edges with lines or nurbs
6550 @end itemize
6551
6552 It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
6553 will help you find where to draw things like nodes and edges, but it’s up to
6554 you to actually draw things with your favorite toolkit.")
6555 ;; The user can choose either license.
6556 (license (list license:gpl2 license:epl1.0))))
6557
6558 (define-public python-gridmap
6559 (package
6560 (name "python-gridmap")
6561 (version "0.14.0")
6562 (source
6563 (origin
6564 (method git-fetch)
6565 (uri (git-reference
6566 (url "https://github.com/pygridtools/gridmap")
6567 (commit (string-append "v" version))))
6568 (file-name (git-file-name name version))
6569 (sha256
6570 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
6571 (build-system python-build-system)
6572 (arguments
6573 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
6574 (propagated-inputs
6575 `(("python-psutil" ,python-psutil)
6576 ("python-drmaa" ,python-drmaa)
6577 ("python-pyzmq" ,python-pyzmq)))
6578 (home-page "https://github.com/pygridtools/gridmap")
6579 (synopsis "Create jobs on a cluster directly from Python")
6580 (description
6581 "Gridmap is a Python package to allow you to easily create jobs on the
6582 cluster directly from Python. You can directly map Python functions onto the
6583 cluster without needing to write any wrapper code yourself.")
6584 (license license:gpl3+)))
6585
6586 (define-public python2-gridmap
6587 (package-with-python2 python-gridmap))
6588
6589 (define-public python-honcho
6590 (package
6591 (name "python-honcho")
6592 (version "1.0.1")
6593 (source
6594 (origin
6595 (method git-fetch)
6596 (uri (git-reference
6597 (url "https://github.com/nickstenning/honcho")
6598 (commit (string-append "v" version))))
6599 (file-name (git-file-name name version))
6600 (sha256
6601 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
6602 (build-system python-build-system)
6603 (native-inputs
6604 `(("python-pytest" ,python-pytest)
6605 ("python-mock" ,python-mock)
6606 ("python-tox" ,python-tox)
6607 ("which" ,which))) ;for tests
6608 (propagated-inputs
6609 `(("python-jinja2" ,python-jinja2)))
6610 (arguments
6611 `(#:phases
6612 (modify-phases %standard-phases
6613 (delete 'check)
6614 (add-after 'install 'check
6615 (lambda* (#:key outputs inputs #:allow-other-keys)
6616 ;; fix honcho path in testsuite
6617 (substitute* "tests/conftest.py"
6618 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
6619 "/bin/honcho" "'")))
6620 ;; It's easier to run tests after install.
6621 ;; Make installed package available for running the tests
6622 (add-installed-pythonpath inputs outputs)
6623 (invoke "py.test" "-v"))))))
6624 (home-page "https://github.com/nickstenning/honcho")
6625 (synopsis "Manage Procfile-based applications")
6626 (description
6627 "A Procfile is a file which describes how to run an application
6628 consisting of several processes. honcho starts all listed processes.
6629 The output of all running processes is collected by honcho and
6630 displayed.")
6631 (license license:expat)))
6632
6633 (define-public python-pexpect
6634 (package
6635 (name "python-pexpect")
6636 (version "4.8.0")
6637 (source
6638 (origin
6639 (method url-fetch)
6640 (uri (pypi-uri "pexpect" version))
6641 (sha256
6642 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
6643 (build-system python-build-system)
6644 (arguments
6645 `(#:phases
6646 (modify-phases %standard-phases
6647 (add-before 'check 'prepare-tests
6648 (lambda _
6649 (substitute* (find-files "tests")
6650 (("/bin/ls") (which "ls"))
6651 (("/bin/echo") (which "echo"))
6652 (("/bin/which") (which "which"))
6653 ;; Many tests try to use the /bin directory which
6654 ;; is not present in the build environment.
6655 ;; Use one that's non-empty and unlikely to change.
6656 (("/bin'") "/dev'")
6657 ;; Disable failing test. See upstream bug report
6658 ;; https://github.com/pexpect/pexpect/issues/568
6659 (("def test_bash") "def _test_bash"))
6660 ;; XXX: Socket connection test gets "Connection reset by peer".
6661 ;; Why does it not work? Delete for now.
6662 (delete-file "tests/test_socket.py")
6663 #t))
6664 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
6665 (native-inputs
6666 `(("python-nose" ,python-nose)
6667 ("python-pytest" ,python-pytest)
6668 ("man-db" ,man-db)
6669 ("which" ,which)
6670 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
6671 (propagated-inputs
6672 `(("python-ptyprocess" ,python-ptyprocess)))
6673 (home-page "http://pexpect.readthedocs.org/")
6674 (synopsis "Controlling interactive console applications")
6675 (description
6676 "Pexpect is a pure Python module for spawning child applications;
6677 controlling them; and responding to expected patterns in their output.
6678 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
6679 child application and control it as if a human were typing commands.")
6680 (license license:isc)))
6681
6682 (define-public python2-pexpect
6683 (package-with-python2 python-pexpect))
6684
6685 (define-public python-setuptools-scm
6686 (package
6687 (name "python-setuptools-scm")
6688 (version "3.4.3")
6689 (source (origin
6690 (method url-fetch)
6691 (uri (pypi-uri "setuptools_scm" version))
6692 (sha256
6693 (base32
6694 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
6695 (build-system python-build-system)
6696 (home-page "https://github.com/pypa/setuptools_scm/")
6697 (synopsis "Manage Python package versions in SCM metadata")
6698 (description
6699 "Setuptools_scm handles managing your Python package versions in
6700 @dfn{software configuration management} (SCM) metadata instead of declaring
6701 them as the version argument or in a SCM managed file.")
6702 (license license:expat)))
6703
6704 ;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
6705 (define-public python-setuptools-scm/next
6706 (package
6707 (inherit python-setuptools-scm)
6708 (version "5.0.1")
6709 (source
6710 (origin
6711 (method url-fetch)
6712 (uri (pypi-uri "setuptools_scm" version))
6713 (sha256
6714 (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
6715
6716 (define-public python2-setuptools-scm
6717 (package-with-python2 python-setuptools-scm))
6718
6719 (define-public python-sexpdata
6720 (package
6721 (name "python-sexpdata")
6722 (version "0.0.3")
6723 (source
6724 (origin
6725 (method url-fetch)
6726 (uri (pypi-uri "sexpdata" version))
6727 (sha256
6728 (base32
6729 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
6730 (build-system python-build-system)
6731 (home-page "https://github.com/jd-boyd/sexpdata")
6732 (synopsis "S-expression parser for Python")
6733 (description
6734 "Sexpdata is an S-expression parser/serializer. It has load and dump
6735 functions like pickle, json or PyYAML module.")
6736 (license license:bsd-3)))
6737
6738 (define-public python-pathlib2
6739 (package
6740 (name "python-pathlib2")
6741 (version "2.3.3")
6742 (source
6743 (origin
6744 (method url-fetch)
6745 (uri (pypi-uri "pathlib2" version))
6746 (sha256
6747 (base32
6748 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
6749 (build-system python-build-system)
6750 (propagated-inputs
6751 `(("python-scandir" ,python-scandir)
6752 ("python-six" ,python-six)))
6753 (home-page "https://pypi.org/project/pathlib2/")
6754 (synopsis "Object-oriented file system paths")
6755 (description "The goal of pathlib2 is to provide a backport of the
6756 standard @code{pathlib} module which tracks the standard library module, so
6757 all the newest features of the standard @code{pathlib} can be used also on
6758 older Python versions.")
6759 (license license:expat)))
6760
6761 (define-public python-importlib-resources
6762 (package
6763 (name "python-importlib-resources")
6764 (version "3.0.0")
6765 (source
6766 (origin
6767 (method url-fetch)
6768 (uri (pypi-uri "importlib_resources" version))
6769 (sha256
6770 (base32
6771 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
6772 (build-system python-build-system)
6773 (native-inputs
6774 `(("python-setuptools-scm" ,python-setuptools-scm)
6775 ("python-toml" ,python-toml)))
6776 (home-page "http://importlib-resources.readthedocs.io/")
6777 (synopsis "Read resources from Python packages")
6778 (description
6779 "@code{importlib_resources} is a backport of Python 3's standard library
6780 @code{importlib.resources} module for Python 2.7, and Python 3.")
6781 (properties `((python2-variant . ,(delay python2-importlib-resources))))
6782 (license license:asl2.0)))
6783
6784 (define-public python2-importlib-resources
6785 (package
6786 (name "python2-importlib-resources")
6787 (version "1.0.2")
6788 (source (origin
6789 (method url-fetch)
6790 (uri (pypi-uri "importlib_resources" version))
6791 (sha256
6792 (base32
6793 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
6794 (build-system python-build-system)
6795 (arguments
6796 `(#:python ,python-2
6797 #:phases (modify-phases %standard-phases
6798 ;; The build system tests for python-wheel, but it is
6799 ;; not required for Guix nor the test suite. Just drop
6800 ;; it to make bootstrapping pytest easier.
6801 (add-after 'unpack 'drop-wheel-dependency
6802 (lambda _
6803 (substitute* "setup.cfg"
6804 (("^[[:blank:]]+wheel")
6805 ""))
6806 #t)))))
6807 (propagated-inputs
6808 `(("python-pathlib2" ,python2-pathlib2)
6809 ("python-typing" ,python2-typing)))
6810 (home-page "https://gitlab.com/python-devs/importlib_resources")
6811 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6812 (description
6813 "This package provides an implementation of @code{importlib.resources}
6814 for older versions of Python.")
6815 (license license:asl2.0)))
6816
6817 ;; For importlib-metadata-bootstrap below.
6818 (define-public python2-importlib-resources-bootstrap
6819 (hidden-package
6820 (package/inherit
6821 python2-importlib-resources
6822 (name "python2-importlib-resources-bootstrap")
6823 (propagated-inputs
6824 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6825 ("python-typing" ,python2-typing))))))
6826
6827 (define-public python-importlib-metadata
6828 (package
6829 (name "python-importlib-metadata")
6830 (version "1.5.0")
6831 (source
6832 (origin
6833 (method url-fetch)
6834 (uri (pypi-uri "importlib_metadata" version))
6835 (sha256
6836 (base32
6837 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6838 (build-system python-build-system)
6839 (propagated-inputs
6840 `(("python-zipp" ,python-zipp)))
6841 (native-inputs
6842 `(("python-setuptools-scm" ,python-setuptools-scm)
6843 ("python-pyfakefs" ,python-pyfakefs)
6844 ("python-packaging" ,python-packaging)))
6845 (home-page "https://importlib-metadata.readthedocs.io/")
6846 (synopsis "Read metadata from Python packages")
6847 (description
6848 "@code{importlib_metadata} is a library which provides an API for
6849 accessing an installed Python package's metadata, such as its entry points or
6850 its top-level name. This functionality intends to replace most uses of
6851 @code{pkg_resources} entry point API and metadata API. Along with
6852 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6853 need to use the older and less efficient @code{pkg_resources} package.")
6854 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6855 (license license:asl2.0)))
6856
6857 (define-public python2-importlib-metadata
6858 (let ((base (package-with-python2 (strip-python2-variant
6859 python-importlib-metadata))))
6860 (package/inherit
6861 base
6862 (name "python2-importlib-metadata")
6863 (native-inputs
6864 `(("python-setuptools-scm" ,python2-setuptools-scm)
6865 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6866 ("python-packaging" ,python2-packaging-bootstrap)))
6867 (propagated-inputs
6868 `(("python-configparser" ,python2-configparser)
6869 ("python-contextlib2" ,python2-contextlib2)
6870 ("python-importlib-resources" ,python2-importlib-resources)
6871 ("python-pathlib2" ,python2-pathlib2)
6872 ,@(package-propagated-inputs base))))))
6873
6874 ;; This package is used by python2-pytest, and thus must not depend on it.
6875 (define-public python2-importlib-metadata-bootstrap
6876 (hidden-package
6877 (package/inherit
6878 python2-importlib-metadata
6879 (name "python2-importlib-metadata-bootstrap")
6880 (arguments
6881 `(#:tests? #f
6882 ,@(package-arguments python2-importlib-metadata)))
6883 (propagated-inputs
6884 `(("python-zipp" ,python2-zipp-bootstrap)
6885 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6886 ("python-configparser" ,python2-configparser)
6887 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6888 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6889
6890 (define-public python-importmagic
6891 (package
6892 (name "python-importmagic")
6893 (version "0.1.7")
6894 (source
6895 (origin
6896 (method url-fetch)
6897 (uri (pypi-uri "importmagic" version))
6898 (sha256
6899 (base32
6900 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6901 (build-system python-build-system)
6902 (home-page "https://github.com/alecthomas/importmagic")
6903 (synopsis "Library for adding, removing and managing Python imports")
6904 (description
6905 "Importmagic is a Python library for automatically managing imports by
6906 finding unresolved symbols in Python code and their corresponding imports.")
6907 (license license:bsd-3)))
6908
6909 (define-public python-inotify-simple
6910 (package
6911 (name "python-inotify-simple")
6912 (version "1.3.5")
6913 (source
6914 (origin
6915 (method git-fetch)
6916 (uri (git-reference
6917 (url "https://github.com/chrisjbillington/inotify_simple")
6918 (commit version)))
6919 (file-name (git-file-name name version))
6920 (sha256
6921 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
6922 (build-system python-build-system)
6923 (home-page
6924 "https://github.com/chrisjbillington/inotify_simple")
6925 (synopsis "Simple wrapper around inotify library")
6926 (description
6927 "@code{inotify-simple} is a simple wrapper around inotify library.")
6928 (license license:bsd-3)))
6929
6930 (define-public python-jaraco-packaging
6931 (package
6932 (name "python-jaraco-packaging")
6933 (version "6.1")
6934 (source
6935 (origin
6936 (method url-fetch)
6937 (uri (pypi-uri "jaraco.packaging" version))
6938 (sha256
6939 (base32
6940 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6941 (build-system python-build-system)
6942 (propagated-inputs
6943 `(("python-pytest" ,python-pytest)
6944 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6945 ("python-pytest-flake8" ,python-pytest-flake8)
6946 ("python-rst.linker" ,python-rst.linker)
6947 ("python-setuptools" ,python-setuptools)
6948 ("python-setuptools-scm" ,python-setuptools-scm)
6949 ("python-six" ,python-six)
6950 ("python-sphinx" ,python-sphinx)))
6951 (home-page "https://github.com/jaraco/jaraco.packaging")
6952 (synopsis "Tools to supplement packaging Python releases")
6953 (description
6954 "This package provides various tools to supplement packaging Python
6955 releases.")
6956 (license license:expat)))
6957
6958 (define-public python-pathpy
6959 (package
6960 (name "python-pathpy")
6961 (version "11.5.1")
6962 (source
6963 (origin
6964 (method url-fetch)
6965 (uri (pypi-uri "path.py" version))
6966 (sha256
6967 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6968 (outputs '("out" "doc"))
6969 (build-system python-build-system)
6970 (propagated-inputs
6971 `(("python-appdirs" ,python-appdirs)
6972 ("python-importlib-metadata" ,python-importlib-metadata)))
6973 (native-inputs
6974 `(("python-setuptools-scm" ,python-setuptools-scm)
6975 ("python-sphinx" ,python-sphinx)
6976 ("python-rst.linker" ,python-rst.linker)
6977 ("python-pytest" ,python-pytest)
6978 ("python-pytest-runner" ,python-pytest-runner)
6979 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6980 (arguments
6981 `(#:phases
6982 (modify-phases %standard-phases
6983 (add-after 'build 'build-doc
6984 (lambda _
6985 (setenv "LANG" "en_US.UTF-8")
6986 (invoke "python" "setup.py" "build_sphinx")))
6987 (add-after 'install 'install-doc
6988 (lambda* (#:key outputs #:allow-other-keys)
6989 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6990 (doc (string-append data "/doc/" ,name "-" ,version))
6991 (html (string-append doc "/html")))
6992 (mkdir-p html)
6993 (for-each (lambda (file)
6994 (copy-file file (string-append doc "/" file)))
6995 '("README.rst" "CHANGES.rst"))
6996 (copy-recursively "build/sphinx/html" html)
6997 #t)))
6998 (replace 'check
6999 (lambda _
7000 ;; The import time test aborts if an import takes longer than
7001 ;; 100ms. It may very well take a little longer than that.
7002 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
7003 (home-page "https://github.com/jaraco/path.py")
7004 (synopsis "Python module wrapper for built-in os.path")
7005 (description
7006 "@code{path.py} implements path objects as first-class entities, allowing
7007 common operations on files to be invoked on those path objects directly.")
7008 (license license:expat)))
7009
7010 (define-public python-simplegeneric
7011 (package
7012 (name "python-simplegeneric")
7013 (version "0.8.1")
7014 (source
7015 (origin
7016 (method url-fetch)
7017 (uri (pypi-uri "simplegeneric" version ".zip"))
7018 (sha256
7019 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
7020 (build-system python-build-system)
7021 (native-inputs
7022 `(("unzip" ,unzip)))
7023 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
7024 (synopsis "Python module for simple generic functions")
7025 (description
7026 "The simplegeneric module lets you define simple single-dispatch generic
7027 functions, akin to Python’s built-in generic functions like @code{len()},
7028 @code{iter()} and so on. However, instead of using specially-named methods,
7029 these generic functions use simple lookup tables, akin to those used by
7030 e.g. @code{pickle.dump()} and other generic functions found in the Python
7031 standard library.")
7032 (license license:zpl2.1)))
7033
7034 (define-public python2-simplegeneric
7035 (package-with-python2 python-simplegeneric))
7036
7037 (define-public python-ipython-genutils
7038 ;; TODO: This package is retired, check if can be removed, see description.
7039 (package
7040 (name "python-ipython-genutils")
7041 (version "0.1.0")
7042 (source
7043 (origin
7044 (method url-fetch)
7045 (uri (pypi-uri "ipython_genutils" version))
7046 (sha256
7047 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
7048 (build-system python-build-system)
7049 (arguments `(#:tests? #f)) ; no tests
7050 (home-page "https://ipython.org")
7051 (synopsis "Vestigial utilities from IPython")
7052 (description
7053 "This package provides retired utilities from IPython. No packages
7054 outside IPython/Jupyter should depend on it.
7055
7056 This package shouldn't exist. It contains some common utilities shared by
7057 Jupyter and IPython projects during The Big Split. As soon as possible, those
7058 packages will remove their dependency on this, and this package will go
7059 away.")
7060 (license license:bsd-3)))
7061
7062 (define-public python2-ipython-genutils
7063 (package-with-python2 python-ipython-genutils))
7064
7065 (define-public python-ipyparallel
7066 (package
7067 (name "python-ipyparallel")
7068 (version "6.2.4")
7069 (source
7070 (origin
7071 (method url-fetch)
7072 (uri (pypi-uri "ipyparallel" version))
7073 (sha256
7074 (base32
7075 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
7076 (build-system python-build-system)
7077 (arguments
7078 `(#:tests? #f ; RuntimeError: IO Loop failed to start
7079 #:phases
7080 (modify-phases %standard-phases
7081 (add-before 'check 'prepare-for-tests
7082 (lambda _
7083 (setenv "HOME" (getcwd))
7084 #t)))))
7085 (propagated-inputs
7086 `(("python-dateutil" ,python-dateutil)
7087 ("python-decorator" ,python-decorator)
7088 ("python-ipykernel" ,python-ipykernel)
7089 ("python-ipython" ,python-ipython)
7090 ("python-ipython-genutils" ,python-ipython-genutils)
7091 ("python-jupyter-client" ,python-jupyter-client)
7092 ("python-pyzmq" ,python-pyzmq)
7093 ("python-tornado" ,python-tornado)
7094 ("python-traitlets" ,python-traitlets)))
7095 (native-inputs
7096 `(("python-ipython" ,python-ipython)
7097 ("python-mock" ,python-mock)
7098 ("python-nose" ,python-nose)
7099 ("python-pytest" ,python-pytest)
7100 ("python-pytest-cov" ,python-pytest-cov)
7101 ("python-testpath" ,python-testpath)))
7102 (home-page "https://ipython.org/")
7103 (synopsis "Interactive Parallel Computing with IPython")
7104 (description
7105 "@code{ipyparallel} is a Python package and collection of CLI scripts for
7106 controlling clusters for Jupyter. @code{ipyparallel} contains the following
7107 CLI scripts:
7108 @enumerate
7109 @item ipcluster - start/stop a cluster
7110 @item ipcontroller - start a scheduler
7111 @item ipengine - start an engine
7112 @end enumerate")
7113 (license license:bsd-3)))
7114
7115 (define-public python2-ipyparallel
7116 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
7117 (package/inherit ipyparallel
7118 (propagated-inputs
7119 `(("python2-futures" ,python2-futures)
7120 ,@(package-propagated-inputs ipyparallel))))))
7121
7122 (define-public python-ipython-cluster-helper
7123 (package
7124 (name "python-ipython-cluster-helper")
7125 (version "0.6.4")
7126 (source
7127 (origin
7128 (method url-fetch)
7129 (uri (pypi-uri "ipython-cluster-helper" version))
7130 (sha256
7131 (base32
7132 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
7133 (modules '((guix build utils)))
7134 (snippet
7135 '(begin (substitute* "requirements.txt"
7136 (("ipython.*") "ipython\n"))
7137 #t))))
7138 (build-system python-build-system)
7139 (arguments
7140 `(#:tests? #f ; Test suite can't find IPython.
7141 #:phases
7142 (modify-phases %standard-phases
7143 (replace 'check
7144 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7145 (if tests?
7146 (begin
7147 (setenv "HOME" (getcwd))
7148 (add-installed-pythonpath inputs outputs)
7149 (invoke "python" "example/example.py" "--local"))
7150 #t))))))
7151 (propagated-inputs
7152 `(("python-ipyparallel" ,python-ipyparallel)
7153 ("python-ipython" ,python-ipython)
7154 ("python-netifaces" ,python-netifaces)
7155 ("python-pyzmq" ,python-pyzmq)
7156 ("python-setuptools" ,python-setuptools)
7157 ("python-six" ,python-six)))
7158 (home-page "https://github.com/roryk/ipython-cluster-helper")
7159 (synopsis
7160 "Simplify IPython cluster start up and use for multiple schedulers")
7161 (description
7162 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
7163 profile, launches a cluster and returns a view. On program exit it shuts the
7164 cluster down and deletes the throwaway profile.")
7165 (license license:expat)))
7166
7167 (define-public python2-ipython-cluster-helper
7168 (package-with-python2 python-ipython-cluster-helper))
7169
7170 (define-public python-traitlets
7171 (package
7172 (name "python-traitlets")
7173 (version "4.3.3")
7174 (source
7175 (origin
7176 (method url-fetch)
7177 (uri (pypi-uri "traitlets" version))
7178 (sha256
7179 (base32
7180 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
7181 (build-system python-build-system)
7182 (arguments
7183 `(#:phases
7184 (modify-phases %standard-phases
7185 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
7186 (propagated-inputs
7187 `(("python-ipython-genutils" ,python-ipython-genutils)
7188 ("python-decorator" ,python-decorator)))
7189 (native-inputs
7190 `(("python-pytest" ,python-pytest)))
7191 (properties `((python2-variant . ,(delay python2-traitlets))))
7192 (home-page "https://ipython.org")
7193 (synopsis "Configuration system for Python applications")
7194 (description
7195 "Traitlets is a framework that lets Python classes have attributes with
7196 type checking, dynamically calculated default values, and ‘on change’
7197 callbacks. The package also includes a mechanism to use traitlets for
7198 configuration, loading values from files or from command line arguments. This
7199 is a distinct layer on top of traitlets, so you can use traitlets in your code
7200 without using the configuration machinery.")
7201 (license license:bsd-3)))
7202
7203 (define-public python2-traitlets
7204 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
7205 (package/inherit traitlets
7206 (propagated-inputs
7207 `(("python2-enum34" ,python2-enum34)
7208 ,@(package-propagated-inputs traitlets))))))
7209
7210 (define-public python-jupyter-core
7211 (package
7212 (name "python-jupyter-core")
7213 (version "4.7.1")
7214 (source
7215 (origin
7216 (method url-fetch)
7217 (uri (string-append (pypi-uri "jupyter_core" version)))
7218 (sha256
7219 (base32
7220 "1d12j5hkff0xiax87pnhmzbsph3jqqzhz16h8xld7z2y4armq0kr"))))
7221 (build-system python-build-system)
7222 ;; FIXME: not sure how to run the tests
7223 (arguments `(#:tests? #f))
7224 (propagated-inputs
7225 `(("python-traitlets" ,python-traitlets)))
7226 (home-page "https://jupyter.org/")
7227 (synopsis "Jupyter base package")
7228 (description
7229 "Jupyter core is the base package on which Jupyter projects rely.")
7230 (license license:bsd-3)))
7231
7232 (define-public python2-jupyter-core
7233 (package-with-python2 python-jupyter-core))
7234
7235 (define-public python-jupyter-client
7236 (package
7237 (name "python-jupyter-client")
7238 (version "6.1.12")
7239 (source
7240 (origin
7241 (method url-fetch)
7242 (uri (pypi-uri "jupyter_client" version))
7243 (sha256
7244 (base32
7245 "10p7fcgvv9hvz9zical9wk68ks5ssak2ykbzx65wm1k1hk8a3g64"))))
7246 (build-system python-build-system)
7247 ;; Tests fail because of missing native python kernel which I assume is
7248 ;; provided by the ipython package, which we cannot use because it would
7249 ;; cause a dependency cycle.
7250 (arguments
7251 `(#:tests? #f
7252 #:phases (modify-phases %standard-phases
7253 (add-after 'unpack 'set-tool-file-names
7254 (lambda* (#:key inputs #:allow-other-keys)
7255 (let ((iproute (assoc-ref inputs "iproute")))
7256 (substitute* "jupyter_client/localinterfaces.py"
7257 (("'ip'")
7258 (string-append "'" iproute "/sbin/ip'")))
7259 #t))))))
7260 (inputs
7261 `(("iproute" ,iproute)))
7262 (propagated-inputs
7263 `(("python-dateutil" ,python-dateutil)
7264 ("python-jupyter-core" ,python-jupyter-core)
7265 ("python-pyzmq" ,python-pyzmq)
7266 ("python-tornado" ,python-tornado-6)
7267 ("python-traitlets" ,python-traitlets)))
7268 (native-inputs
7269 `(("python-pytest" ,python-pytest)))
7270 (home-page "https://jupyter.org/")
7271 (synopsis "Jupyter protocol implementation and client libraries")
7272 (description
7273 "The @code{jupyter_client} package contains the reference implementation
7274 of the Jupyter protocol. It also provides client and kernel management APIs
7275 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
7276 installing @code{kernelspec}s for use with Jupyter frontends.")
7277 (license license:bsd-3)))
7278
7279 (define-public python2-jupyter-client
7280 (package-with-python2 python-jupyter-client))
7281
7282 (define-public python-ipykernel
7283 (package
7284 (name "python-ipykernel")
7285 (version "5.5.3")
7286 (source
7287 (origin
7288 (method url-fetch)
7289 (uri (pypi-uri "ipykernel" version))
7290 (sha256
7291 (base32 "02f55cjkp5q64x7ikjxznbxwjpkdmfy237b9kg7dk1pxmzvy90m6"))))
7292 (build-system python-build-system)
7293 (arguments
7294 `(#:phases
7295 (modify-phases %standard-phases
7296 (replace 'check
7297 (lambda _
7298 (setenv "HOME" "/tmp")
7299 (invoke "pytest" "-v")
7300 #t))
7301 (add-after 'install 'set-python-file-name
7302 (lambda* (#:key outputs #:allow-other-keys)
7303 ;; Record the absolute file name of the 'python' executable in
7304 ;; 'kernel.json'.
7305 (let ((out (assoc-ref outputs "out")))
7306 (substitute* (string-append out "/share/jupyter"
7307 "/kernels/python3/kernel.json")
7308 (("\"python\"")
7309 (string-append "\"" (which "python") "\"")))
7310 #t))))))
7311 (propagated-inputs
7312 `(("python-ipython" ,python-ipython)
7313 ;; imported at runtime during connect
7314 ("python-jupyter-client" ,python-jupyter-client)))
7315 (native-inputs
7316 `(("python-flaky" ,python-flaky)
7317 ("python-nose" ,python-nose)
7318 ("python-pytest" ,python-pytest)))
7319 (home-page "https://ipython.org")
7320 (synopsis "IPython Kernel for Jupyter")
7321 (description
7322 "This package provides the IPython kernel for Jupyter.")
7323 (properties `((python2-variant . ,(delay python2-ipykernel))))
7324 (license license:bsd-3)))
7325
7326 ;; Version 5.x and above no longer support Python 2.
7327 (define-public python2-ipykernel
7328 (package
7329 (name "python2-ipykernel")
7330 (version "4.10.1")
7331 (source
7332 (origin
7333 (method url-fetch)
7334 (uri (pypi-uri "ipykernel" version))
7335 (sha256
7336 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
7337 (build-system python-build-system)
7338 (arguments
7339 `(#:python ,python-2))
7340 (propagated-inputs
7341 `(("python2-ipython" ,python2-ipython)
7342 ;; imported at runtime during connect
7343 ("python2-jupyter-client" ,python2-jupyter-client)
7344 ("python2-tornado" ,python2-tornado)
7345 ("python2-traitlets" ,python2-traitlets)))
7346 (native-inputs
7347 `(("python2-mock" ,python2-mock)
7348 ("python2-nose" ,python2-nose)
7349 ("python2-pytest" ,python2-pytest)
7350 ("python2-pytest-cov" ,python2-pytest-cov)))
7351 (home-page "https://ipython.org")
7352 (synopsis "IPython Kernel for Jupyter")
7353 (description
7354 "This package provides the IPython kernel for Jupyter.")
7355 (license license:bsd-3)))
7356
7357 (define-public python-pari-jupyter
7358 (package
7359 (name "python-pari-jupyter")
7360 (version "1.3.2")
7361 (source
7362 (origin
7363 (method url-fetch)
7364 (uri (pypi-uri "pari_jupyter" version))
7365 (sha256
7366 (base32
7367 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
7368 (build-system python-build-system)
7369 (propagated-inputs
7370 `(("python-ipykernel" ,python-ipykernel)))
7371 (inputs
7372 `(("pari-gp" ,pari-gp)
7373 ("readline" ,readline)))
7374 (arguments
7375 `(#:tests? #f)) ; no test suite
7376 (home-page
7377 "https://github.com/jdemeyer/pari_jupyter")
7378 (synopsis "A Jupyter kernel for PARI/GP")
7379 (description "The package provides a PARI/GP kernel for Jupyter.")
7380 (license license:gpl3+)))
7381
7382 (define-public python-backcall
7383 (package
7384 (name "python-backcall")
7385 (version "0.2.0")
7386 (source
7387 (origin
7388 (method url-fetch)
7389 (uri (pypi-uri "backcall" version))
7390 (sha256
7391 (base32
7392 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
7393 (build-system python-build-system)
7394 (home-page "https://github.com/takluyver/backcall/")
7395 (synopsis "Specifications for callback functions passed in to an API")
7396 (description
7397 "If your code lets other people supply callback functions, it's important
7398 to specify the function signature you expect, and check that functions support
7399 that. Adding extra parameters later would break other peoples code unless
7400 you're careful. The @code{backcall} package provides a way of specifying the
7401 callback signature using a prototype function.")
7402 (license license:bsd-3)))
7403
7404 (define-public python-ipython
7405 (package
7406 (name "python-ipython")
7407 (version "7.9.0")
7408 (source
7409 (origin
7410 (method url-fetch)
7411 (uri (pypi-uri "ipython" version ".tar.gz"))
7412 (sha256
7413 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
7414 (build-system python-build-system)
7415 (propagated-inputs
7416 `(("python-backcall" ,python-backcall)
7417 ("python-pyzmq" ,python-pyzmq)
7418 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
7419 ("python-terminado" ,python-terminado)
7420 ("python-matplotlib" ,python-matplotlib)
7421 ("python-numpy" ,python-numpy)
7422 ("python-numpydoc" ,python-numpydoc)
7423 ("python-jedi" ,python-jedi)
7424 ("python-jinja2" ,python-jinja2)
7425 ("python-mistune" ,python-mistune)
7426 ("python-pexpect" ,python-pexpect)
7427 ("python-pickleshare" ,python-pickleshare)
7428 ("python-simplegeneric" ,python-simplegeneric)
7429 ("python-jsonschema" ,python-jsonschema)
7430 ("python-traitlets" ,python-traitlets)
7431 ("python-nbformat" ,python-nbformat)
7432 ("python-pygments" ,python-pygments)))
7433 (inputs
7434 `(("readline" ,readline)
7435 ("which" ,which)))
7436 (native-inputs
7437 `(("graphviz" ,graphviz)
7438 ("pkg-config" ,pkg-config)
7439 ("python-requests" ,python-requests) ;; for tests
7440 ("python-testpath" ,python-testpath)
7441 ("python-nose" ,python-nose)))
7442 (arguments
7443 `(#:phases
7444 (modify-phases %standard-phases
7445 (add-after 'unpack 'make-docs-reproducible
7446 (lambda _
7447 (substitute* "IPython/sphinxext/ipython_directive.py"
7448 ((".*import datetime") "")
7449 ((".*datetime.datetime.now\\(\\)") "")
7450 (("%timeit") "# %timeit"))
7451 #t))
7452 ;; Tests can only be run after the library has been installed and not
7453 ;; within the source directory.
7454 (delete 'check)
7455 (add-after 'install 'check
7456 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7457 (if tests?
7458 (begin
7459 ;; Make installed package available for running the tests
7460 (add-installed-pythonpath inputs outputs)
7461 (setenv "HOME" "/tmp/") ;; required by a test
7462 ;; We only test the core because one of the other tests
7463 ;; tries to import ipykernel.
7464 (invoke "python" "IPython/testing/iptest.py"
7465 "-v" "IPython/core/tests"))
7466 #t)))
7467 (add-before 'check 'fix-tests
7468 (lambda* (#:key inputs #:allow-other-keys)
7469 (substitute* "./IPython/utils/_process_posix.py"
7470 (("/usr/bin/env', 'which") (which "which")))
7471 (substitute* "./IPython/core/tests/test_inputtransformer.py"
7472 (("#!/usr/bin/env python")
7473 (string-append "#!" (which "python"))))
7474 ;; This test introduces a circular dependency on ipykernel
7475 ;; (which depends on ipython).
7476 (delete-file "IPython/core/tests/test_display.py")
7477 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
7478 (delete-file "IPython/core/tests/test_interactiveshell.py")
7479 #t)))))
7480 (home-page "https://ipython.org")
7481 (synopsis "IPython is a tool for interactive computing in Python")
7482 (description
7483 "IPython provides a rich architecture for interactive computing with:
7484 Powerful interactive shells, a browser-based notebook, support for interactive
7485 data visualization, embeddable interpreters and tools for parallel
7486 computing.")
7487 (properties `((python2-variant . ,(delay python2-ipython))))
7488 (license license:bsd-3)))
7489
7490 ;; This is the latest release of the LTS version of ipython with support for
7491 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
7492 ;; dropped support for Python 2.7.
7493 (define-public python2-ipython
7494 (package
7495 (name "python2-ipython")
7496 (version "5.8.0")
7497 (source
7498 (origin
7499 (method url-fetch)
7500 (uri (pypi-uri "ipython" version ".tar.gz"))
7501 (sha256
7502 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
7503 (build-system python-build-system)
7504 (propagated-inputs
7505 `(("python2-backports-shutil-get-terminal-size"
7506 ,python2-backports-shutil-get-terminal-size)
7507 ("python2-pathlib2" ,python2-pathlib2)
7508 ("python2-pyzmq" ,python2-pyzmq)
7509 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
7510 ("python2-terminado" ,python2-terminado)
7511 ("python2-matplotlib" ,python2-matplotlib)
7512 ("python2-numpy" ,python2-numpy)
7513 ("python2-numpydoc" ,python2-numpydoc)
7514 ("python2-jinja2" ,python2-jinja2)
7515 ("python2-mistune" ,python2-mistune)
7516 ("python2-pexpect" ,python2-pexpect)
7517 ("python2-pickleshare" ,python2-pickleshare)
7518 ("python2-simplegeneric" ,python2-simplegeneric)
7519 ("python2-jsonschema" ,python2-jsonschema)
7520 ("python2-traitlets" ,python2-traitlets)
7521 ("python2-nbformat" ,python2-nbformat)
7522 ("python2-pygments" ,python2-pygments)))
7523 (inputs
7524 `(("readline" ,readline)
7525 ("which" ,which)))
7526 (native-inputs
7527 `(("graphviz" ,graphviz)
7528 ("pkg-config" ,pkg-config)
7529 ("python2-requests" ,python2-requests) ;; for tests
7530 ("python2-testpath" ,python2-testpath)
7531 ("python2-mock" ,python2-mock)
7532 ("python2-nose" ,python2-nose)))
7533 (arguments
7534 `(#:python ,python-2
7535 #:phases
7536 (modify-phases %standard-phases
7537 (add-before 'check 'delete-broken-tests
7538 (lambda* (#:key inputs #:allow-other-keys)
7539 ;; These tests throw errors for unknown reasons.
7540 (delete-file "IPython/core/tests/test_displayhook.py")
7541 (delete-file "IPython/core/tests/test_magic_terminal.py")
7542 (delete-file "IPython/core/tests/test_profile.py")
7543 #t)))))
7544 (home-page "https://ipython.org")
7545 (synopsis "IPython is a tool for interactive computing in Python")
7546 (description
7547 "IPython provides a rich architecture for interactive computing with:
7548 Powerful interactive shells, a browser-based notebook, support for interactive
7549 data visualization, embeddable interpreters and tools for parallel
7550 computing.")
7551 (license license:bsd-3)))
7552
7553 (define-public python-ipython-documentation
7554 (package
7555 (inherit python-ipython)
7556 (name "python-ipython-documentation")
7557 (version (package-version python-ipython))
7558 (arguments
7559 `(#:phases
7560 (modify-phases %standard-phases
7561 (delete 'build)
7562 (delete 'check)
7563 (replace 'install
7564 (lambda* (#:key outputs #:allow-other-keys)
7565 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
7566 (doc (string-append data "/doc/" ,name "-" ,version))
7567 (html (string-append doc "/html"))
7568 (man1 (string-append data "/man/man1"))
7569 (info (string-append data "/info"))
7570 (examples (string-append doc "/examples"))
7571 (python-arg (string-append "PYTHON=" (which "python"))))
7572 (setenv "LANG" "en_US.utf8")
7573 (with-directory-excursion "docs"
7574 ;; FIXME: pdf fails to build
7575 ;;(system* "make" "pdf" "PAPER=a4")
7576 (system* "make" python-arg "html")
7577 ;; FIXME: the generated texi file contains ^@^@, which trips
7578 ;; up the parser.
7579 ;; (system* "make" python-arg "info")
7580 )
7581 (copy-recursively "docs/man" man1)
7582 (copy-recursively "examples" examples)
7583 (copy-recursively "docs/build/html" html)
7584 ;; (copy-file "docs/build/latex/ipython.pdf"
7585 ;; (string-append doc "/ipython.pdf"))
7586 (mkdir-p info)
7587 ;; (copy-file "docs/build/texinfo/ipython.info"
7588 ;; (string-append info "/ipython.info"))
7589 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
7590 #t)))))
7591 (inputs
7592 `(("python-ipython" ,python-ipython)
7593 ("python-ipykernel" ,python-ipykernel)))
7594 (native-inputs
7595 `(("python-sphinx" ,python-sphinx)
7596 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
7597 ;; FIXME: It's possible that a smaller union would work just as well.
7598 ("texlive" ,(texlive-union (list texlive-amsfonts
7599 texlive-fonts-ec
7600 texlive-generic-ifxetex
7601 texlive-generic-pdftex
7602 texlive-latex-capt-of
7603 texlive-latex-cmap
7604 texlive-latex-environ
7605 texlive-latex-eqparbox
7606 texlive-latex-etoolbox
7607 texlive-latex-expdlist
7608 texlive-latex-fancyhdr
7609 texlive-latex-fancyvrb
7610 texlive-latex-fncychap
7611 texlive-latex-float
7612 texlive-latex-framed
7613 texlive-latex-geometry
7614 texlive-latex-graphics
7615 texlive-latex-hyperref
7616 texlive-latex-mdwtools
7617 texlive-latex-multirow
7618 texlive-latex-needspace
7619 texlive-latex-oberdiek
7620 texlive-latex-parskip
7621 texlive-latex-preview
7622 texlive-latex-tabulary
7623 texlive-latex-threeparttable
7624 texlive-latex-titlesec
7625 texlive-latex-trimspaces
7626 texlive-latex-ucs
7627 texlive-latex-upquote
7628 texlive-latex-url
7629 texlive-latex-varwidth
7630 texlive-latex-wrapfig)))
7631 ("texinfo" ,texinfo)))))
7632
7633 (define-public python-urwid
7634 (package
7635 (name "python-urwid")
7636 (version "2.1.2")
7637 (source
7638 (origin
7639 (method url-fetch)
7640 (uri (pypi-uri "urwid" version))
7641 (sha256
7642 (base32
7643 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
7644 (build-system python-build-system)
7645 (home-page "http://urwid.org")
7646 (synopsis "Console user interface library for Python")
7647 (description
7648 "Urwid is a curses-based UI/widget library for Python. It includes many
7649 features useful for text console applications.")
7650 (properties `((python2-variant . ,(delay python2-urwid))))
7651 (license license:lgpl2.1+)))
7652
7653 (define-public python2-urwid
7654 (let ((base (package-with-python2
7655 (strip-python2-variant python-urwid))))
7656 (package/inherit base
7657 (version "2.1.0")
7658 (source
7659 (origin
7660 (method url-fetch)
7661 (uri (pypi-uri "urwid" version))
7662 (sha256
7663 (base32
7664 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8")))))))
7665
7666 (define-public python-urwid-readline
7667 (package
7668 (name "python-urwid-readline")
7669 (version "0.12")
7670 (source
7671 (origin
7672 (method git-fetch)
7673 (uri (git-reference
7674 (url "https://github.com/rr-/urwid_readline")
7675 (commit version)))
7676 (file-name (git-file-name name version))
7677 (sha256
7678 (base32
7679 "0sq5qgxj7gcfww3ww7idr87isnmp0hi36n241b3q395x1zafdv22"))))
7680 (build-system python-build-system)
7681 (arguments
7682 `(#:phases
7683 (modify-phases %standard-phases
7684 (replace 'check
7685 (lambda* (#:key tests? #:allow-other-keys)
7686 (when tests?
7687 (invoke "python" "-m" "pytest"))
7688 #t)))))
7689 (propagated-inputs
7690 `(("python-urwid" ,python-urwid)))
7691 (native-inputs
7692 `(("python-pytest" ,python-pytest)))
7693 (home-page "https://github.com/rr-/urwid_readline")
7694 (synopsis "Text input widget for urwid that supports readline shortcuts")
7695 (description
7696 "This package provides a textbox edit widget for @code{python-urwid} that
7697 supports @code{readline} shortcuts.")
7698 (license license:expat)))
7699
7700 (define-public python-urwidtrees
7701 (package
7702 (name "python-urwidtrees")
7703 (version "1.0.2")
7704 (source
7705 (origin
7706 (method git-fetch)
7707 ;; package author intends on distributing via github rather than pypi:
7708 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
7709 (uri (git-reference
7710 (url "https://github.com/pazz/urwidtrees")
7711 (commit version)))
7712 (file-name (git-file-name name version))
7713 (sha256
7714 (base32
7715 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
7716 (build-system python-build-system)
7717 (arguments
7718 '(#:use-setuptools? #f
7719 #:tests? #f)) ; no tests
7720 (propagated-inputs `(("python-urwid" ,python-urwid)))
7721 (home-page "https://github.com/pazz/urwidtrees")
7722 (synopsis "Tree widgets for urwid")
7723 (description "Urwidtrees is a Widget Container API for the @code{urwid}
7724 toolkit. Use it to build trees of widgets.")
7725 (license license:gpl3+)))
7726
7727 (define-public python2-urwidtrees
7728 (package-with-python2 python-urwidtrees))
7729
7730 (define-public python-ua-parser
7731 (package
7732 (name "python-ua-parser")
7733 (version "0.8.0")
7734 (source
7735 (origin
7736 (method url-fetch)
7737 (uri (pypi-uri "ua-parser" version))
7738 (sha256
7739 (base32
7740 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
7741 (build-system python-build-system)
7742 (arguments
7743 `(#:tests? #f)) ;no test suite in release
7744 (native-inputs
7745 `(("python-pyyaml" ,python-pyyaml)))
7746 (home-page "https://github.com/ua-parser/uap-python")
7747 (synopsis "User agent parser")
7748 (description
7749 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
7750 (license license:asl2.0)))
7751
7752 (define-public python2-ua-parser
7753 (package-with-python2 python-ua-parser))
7754
7755 (define-public python-user-agents
7756 (package
7757 (name "python-user-agents")
7758 (version "1.1.0")
7759 (source
7760 (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "user-agents" version))
7763 (sha256
7764 (base32
7765 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
7766 (build-system python-build-system)
7767 (arguments
7768 `(#:tests? #f)) ;missing devices.json test file in release
7769 (propagated-inputs
7770 `(("python-ua-parser" ,python-ua-parser)))
7771 (home-page "https://github.com/selwin/python-user-agents")
7772 (synopsis "User Agent strings parsing library")
7773 (description
7774 "A library to identify devices (phones, tablets) and their capabilities by
7775 parsing (browser/HTTP) user agent strings.")
7776 (license license:expat)))
7777
7778 (define-public python2-user-agents
7779 (package-with-python2 python-user-agents))
7780
7781 (define-public python-dbus
7782 (package
7783 (name "python-dbus")
7784 (version "1.2.16")
7785 (source
7786 (origin
7787 (method url-fetch)
7788 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
7789 "dbus-python-" version ".tar.gz"))
7790 (sha256
7791 (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
7792 (build-system gnu-build-system)
7793 (native-inputs
7794 `(("pkg-config" ,pkg-config)))
7795 (inputs
7796 `(("python" ,python-wrapper)
7797 ("dbus-glib" ,dbus-glib)))
7798 (synopsis "Python bindings for D-bus")
7799 (description "python-dbus provides bindings for libdbus, the reference
7800 implementation of D-Bus.")
7801 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
7802 (license license:expat)))
7803
7804 (define-public python2-dbus
7805 (package/inherit python-dbus
7806 (name "python2-dbus")
7807 (inputs `(("python" ,python-2)
7808 ,@(alist-delete "python"
7809 (package-inputs python-dbus)
7810 equal?)))))
7811
7812 (define-public python-notify2
7813 (package
7814 (name "python-notify2")
7815 (version "0.3.1")
7816 (source
7817 (origin
7818 (method url-fetch)
7819 (uri (pypi-uri "notify2" version))
7820 (sha256
7821 (base32
7822 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
7823 (build-system python-build-system)
7824 (arguments `(#:tests? #f)) ; tests depend on system state
7825 (native-inputs
7826 `(("python-dbus" ,python-dbus)))
7827 (home-page "https://bitbucket.org/takluyver/pynotify2")
7828 (synopsis "Python interface to D-Bus notifications")
7829 (description
7830 "Pynotify2 provides a Python interface for sending D-Bus notifications.
7831 It is a reimplementation of pynotify in pure Python, and an alternative to
7832 the GObject Introspection bindings to libnotify for non-GTK applications.")
7833 (license (list license:bsd-2
7834 license:lgpl2.1+))))
7835
7836 (define-public python2-notify2
7837 (package-with-python2 python-notify2))
7838
7839 ;; beautifulsoup4 has a totally different namespace than 3.x,
7840 ;; and pypi seems to put it under its own name, so I guess we should too
7841 (define-public python-beautifulsoup4
7842 (package
7843 (name "python-beautifulsoup4")
7844 (version "4.9.3")
7845 (source
7846 (origin
7847 (method url-fetch)
7848 (uri (pypi-uri "beautifulsoup4" version))
7849 (sha256
7850 (base32
7851 "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
7852 (build-system python-build-system)
7853 (arguments
7854 `(#:phases
7855 (modify-phases %standard-phases
7856 ;; The Python 2 source is the definitive source of beautifulsoup4. We
7857 ;; must use this conversion script when building with Python 3. The
7858 ;; conversion script also runs the tests.
7859 ;; For more information, see the file 'convert-py3k' in the source
7860 ;; distribution.
7861 (replace 'check
7862 (lambda _ (invoke "./convert-py3k"))))))
7863 (propagated-inputs
7864 `(("python-soupsieve" ,python-soupsieve)))
7865 (home-page
7866 "https://www.crummy.com/software/BeautifulSoup/bs4/")
7867 (synopsis
7868 "Python screen-scraping library")
7869 (description
7870 "Beautiful Soup is a Python library designed for rapidly setting up
7871 screen-scraping projects. It offers Pythonic idioms for navigating,
7872 searching, and modifying a parse tree, providing a toolkit for
7873 dissecting a document and extracting what you need. It automatically
7874 converts incoming documents to Unicode and outgoing documents to UTF-8.")
7875 (license license:expat)
7876 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7877
7878 (define-public python2-beautifulsoup4
7879 (let ((base (package-with-python2
7880 (strip-python2-variant python-beautifulsoup4))))
7881 (package/inherit base
7882 (arguments `(#:python ,python-2)))))
7883
7884 (define-public python-soupsieve
7885 (package
7886 (name "python-soupsieve")
7887 (version "2.2.1")
7888 (source
7889 (origin
7890 (method url-fetch)
7891 (uri (pypi-uri "soupsieve" version))
7892 (sha256
7893 (base32
7894 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
7895 (build-system python-build-system)
7896 (arguments `(#:tests? #f))
7897 ;;XXX: 2 tests fail currently despite claming they were to be
7898 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7899 ;;don't want to create a circular dependency.
7900 (home-page "https://github.com/facelessuser/soupsieve")
7901 (synopsis "CSS selector library")
7902 (description
7903 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7904 Soup 4. It aims to provide selecting, matching, and filtering using modern
7905 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7906 specifications up through the latest CSS level 4 drafts and beyond (though
7907 some are not yet implemented).")
7908 (properties `((python2-variant . ,(delay python2-soupsieve))))
7909 (license license:expat)))
7910
7911 ;; This is the last version that supports python-2
7912 (define-public python2-soupsieve
7913 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7914 (package
7915 (inherit base)
7916 (version "1.9.6")
7917 (source
7918 (origin
7919 (method url-fetch)
7920 (uri (pypi-uri "soupsieve" version))
7921 (sha256
7922 (base32
7923 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7924 (propagated-inputs
7925 `(("python2-backports-functools-lru-cache"
7926 ,python2-backports-functools-lru-cache)
7927 ,@(package-propagated-inputs base))))))
7928
7929 (define-public python-netifaces
7930 (package
7931 (name "python-netifaces")
7932 (version "0.10.9")
7933 (source
7934 (origin
7935 (method url-fetch)
7936 (uri (pypi-uri "netifaces" version))
7937 (sha256
7938 (base32
7939 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7940 (build-system python-build-system)
7941 (home-page "https://github.com/al45tair/netifaces")
7942 (synopsis
7943 "Python module for portable network interface information")
7944 (description
7945 "Netifaces is a Python module providing information on network
7946 interfaces in an easy and portable manner.")
7947 (license license:expat)))
7948
7949 (define-public python2-netifaces
7950 (package-with-python2 python-netifaces))
7951
7952 (define-public python-networkx
7953 (package
7954 (name "python-networkx")
7955 (version "2.5")
7956 (source
7957 (origin
7958 (method url-fetch)
7959 (uri (pypi-uri "networkx" version))
7960 (sha256
7961 (base32 "00hnii2lplig2s324k1hvi29pyfab6z7i22922f67jgv4da9ay3r"))))
7962 (build-system python-build-system)
7963 (arguments
7964 '(#:phases (modify-phases %standard-phases
7965 (replace 'check
7966 (lambda* (#:key tests? #:allow-other-keys)
7967 (if tests?
7968 (invoke "pytest" "-vv" "--pyargs" "networkx")
7969 (format #t "test suite not run~%"))
7970 #t)))))
7971 ;; python-decorator is needed at runtime.
7972 (propagated-inputs
7973 `(("python-decorator" ,python-decorator)))
7974 (native-inputs
7975 `(("python-pytest" ,python-pytest)))
7976 (home-page "https://networkx.github.io/")
7977 (synopsis "Python module for creating and manipulating graphs and networks")
7978 (description
7979 "NetworkX is a Python package for the creation, manipulation, and study
7980 of the structure, dynamics, and functions of complex networks.")
7981 (properties `((python2-variant . ,(delay python2-networkx))))
7982 (license license:bsd-3)))
7983
7984 ;; NetworkX 2.2 is the last version with support for Python 2.
7985 (define-public python2-networkx
7986 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7987 (package
7988 (inherit base)
7989 (version "2.2")
7990 (source (origin
7991 (method url-fetch)
7992 (uri (pypi-uri "networkx" version ".zip"))
7993 (sha256
7994 (base32
7995 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7996 (arguments
7997 `(#:python ,python-2))
7998 (native-inputs
7999 `(("python-nose" ,python2-nose)
8000 ("unzip" ,unzip))))))
8001
8002 (define-public python-datrie
8003 (package
8004 (name "python-datrie")
8005 (version "0.8.2")
8006 (source
8007 (origin
8008 (method url-fetch)
8009 (uri (pypi-uri "datrie" version))
8010 (sha256
8011 (base32
8012 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
8013 (build-system python-build-system)
8014 (native-inputs
8015 `(("python-cython" ,python-cython)
8016 ("python-hypothesis" ,python-hypothesis)
8017 ("python-pytest" ,python-pytest)
8018 ("python-pytest-runner" ,python-pytest-runner)))
8019 (home-page "https://github.com/kmike/datrie")
8020 (synopsis "Fast, efficiently stored trie for Python")
8021 (description
8022 "This package provides a fast, efficiently stored trie implementation for
8023 Python.")
8024 (license license:lgpl2.1+)))
8025
8026 (define-public python-amply
8027 (package
8028 (name "python-amply")
8029 (version "0.1.4")
8030 (source
8031 (origin
8032 (method url-fetch)
8033 (uri (pypi-uri "amply" version))
8034 (sha256
8035 (base32
8036 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
8037 (build-system python-build-system)
8038 (propagated-inputs
8039 `(("python-docutils" ,python-docutils)
8040 ("python-pyparsing" ,python-pyparsing)))
8041 (native-inputs
8042 `(("python-setuptools-scm" ,python-setuptools-scm)))
8043 (home-page "https://github.com/willu47/amply")
8044 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
8045 (description
8046 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
8047 structures.")
8048 (license license:epl1.0)))
8049
8050 (define-public python-pulp
8051 (package
8052 (name "python-pulp")
8053 (version "2.4")
8054 (source
8055 (origin
8056 (method url-fetch)
8057 (uri (pypi-uri "PuLP" version))
8058 (sha256
8059 (base32
8060 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
8061 (build-system python-build-system)
8062 (propagated-inputs
8063 `(("python-amply" ,python-amply)))
8064 (home-page "https://github.com/coin-or/pulp")
8065 (synopsis "Linear Programming modeler")
8066 (description
8067 "PuLP is a Linear Programming modeler written in Python. PuLP can
8068 generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
8069 solve linear problems.")
8070 (license license:expat)))
8071
8072 (define-public python-toposort
8073 (package
8074 (name "python-toposort")
8075 (version "1.6")
8076 (source
8077 (origin
8078 (method url-fetch)
8079 (uri (pypi-uri "toposort" version))
8080 (sha256
8081 (base32
8082 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
8083 (build-system python-build-system)
8084 (home-page "https://gitlab.com/ericvsmith/toposort")
8085 (synopsis "Topological sort algorithm")
8086 (description
8087 "This package provides an implementation of a topological sort
8088 algorithm.")
8089 (license license:asl2.0)))
8090
8091 (define-public snakemake
8092 (package
8093 (name "snakemake")
8094 (version "5.32.2")
8095 (source
8096 (origin
8097 (method url-fetch)
8098 (uri (pypi-uri "snakemake" version))
8099 (sha256
8100 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
8101 (build-system python-build-system)
8102 (arguments
8103 ;; TODO: Package missing test dependencies.
8104 '(#:tests? #f
8105 #:phases
8106 (modify-phases %standard-phases
8107 ;; For cluster execution Snakemake will call Python. Since there is
8108 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
8109 ;; this by calling the snakemake wrapper instead.
8110 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
8111 (lambda* (#:key outputs #:allow-other-keys)
8112 (substitute* "snakemake/executors/__init__.py"
8113 (("\\{sys.executable\\} -m snakemake")
8114 (string-append (assoc-ref outputs "out")
8115 "/bin/snakemake")))
8116 #t)))))
8117 (propagated-inputs
8118 `(("python-appdirs" ,python-appdirs)
8119 ("python-configargparse" ,python-configargparse)
8120 ("python-datrie" ,python-datrie)
8121 ("python-docutils" ,python-docutils)
8122 ("python-gitpython" ,python-gitpython)
8123 ("python-jinja2" ,python-jinja2)
8124 ("python-jsonschema" ,python-jsonschema)
8125 ("python-nbformat" ,python-nbformat)
8126 ("python-networkx" ,python-networkx)
8127 ("python-psutil" ,python-psutil)
8128 ("python-pulp" ,python-pulp)
8129 ("python-pyyaml" ,python-pyyaml)
8130 ("python-ratelimiter" ,python-ratelimiter)
8131 ("python-requests" ,python-requests)
8132 ("python-toposort" ,python-toposort)
8133 ("python-wrapt" ,python-wrapt)))
8134 (home-page "https://snakemake.readthedocs.io")
8135 (synopsis "Python-based execution environment for make-like workflows")
8136 (description
8137 "Snakemake aims to reduce the complexity of creating workflows by
8138 providing a clean and modern domain specific specification language (DSL) in
8139 Python style, together with a fast and comfortable execution environment.")
8140 (license license:expat)))
8141
8142 (define-public python-pyqrcode
8143 (package
8144 (name "python-pyqrcode")
8145 (version "1.2.1")
8146 (source
8147 (origin
8148 (method url-fetch)
8149 (uri (pypi-uri "PyQRCode" version))
8150 (sha256
8151 (base32
8152 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
8153 (build-system python-build-system)
8154 (home-page
8155 "https://github.com/mnooner256/pyqrcode")
8156 (synopsis "QR code generator")
8157 (description
8158 "Pyqrcode is a QR code generator written purely in Python with
8159 SVG, EPS, PNG and terminal output.")
8160 (license license:bsd-3)))
8161
8162 (define-public python-seaborn
8163 (package
8164 (name "python-seaborn")
8165 (version "0.10.0")
8166 (source
8167 (origin
8168 (method url-fetch)
8169 (uri (pypi-uri "seaborn" version))
8170 (sha256
8171 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
8172 (build-system python-build-system)
8173 (arguments
8174 `(#:phases
8175 (modify-phases %standard-phases
8176 (add-before 'check 'start-xserver
8177 (lambda* (#:key inputs #:allow-other-keys)
8178 (let ((xorg-server (assoc-ref inputs "xorg-server")))
8179 ;; There must be a running X server and make check doesn't
8180 ;; start one. Therefore we must do it.
8181 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
8182 (setenv "DISPLAY" ":1")
8183 #t)))
8184 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
8185 (propagated-inputs
8186 `(("python-pandas" ,python-pandas)
8187 ("python-matplotlib" ,python-matplotlib)
8188 ("python-numpy" ,python-numpy)
8189 ("python-scipy" ,python-scipy)))
8190 (native-inputs
8191 `(("python-pytest" ,python-pytest)
8192 ("xorg-server" ,xorg-server-for-tests)))
8193 (home-page "https://seaborn.pydata.org/")
8194 (synopsis "Statistical data visualization")
8195 (description
8196 "Seaborn is a library for making attractive and informative statistical
8197 graphics in Python. It is built on top of matplotlib and tightly integrated
8198 with the PyData stack, including support for numpy and pandas data structures
8199 and statistical routines from scipy and statsmodels.")
8200 (properties `((python2-variant . ,(delay python2-seaborn))))
8201 (license license:bsd-3)))
8202
8203 ;; 0.9.1 is the last release with support for Python 2.
8204 (define-public python2-seaborn
8205 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
8206 (package
8207 (inherit base)
8208 (version "0.9.1")
8209 (source (origin
8210 (method url-fetch)
8211 (uri (pypi-uri "seaborn" version))
8212 (sha256
8213 (base32
8214 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
8215
8216 (define-public python-mpmath
8217 (package
8218 (name "python-mpmath")
8219 (version "1.1.0")
8220 (source (origin
8221 (method url-fetch)
8222 (uri (pypi-uri "mpmath" version))
8223 (file-name (git-file-name name version))
8224 (sha256
8225 (base32
8226 "1xlrcja213jpfhw25q1jl5pl10w1a2cc68x1c4mkicxsbzhan5zw"))))
8227 (build-system python-build-system)
8228 (native-inputs
8229 `(("python-pytest" ,python-pytest)))
8230 (arguments
8231 '(#:phases
8232 (modify-phases %standard-phases
8233 (replace 'check
8234 (lambda _
8235 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
8236 (home-page "https://mpmath.org")
8237 (synopsis "Arbitrary-precision floating-point arithmetic in python")
8238 (description
8239 "@code{mpmath} can be used as an arbitrary-precision substitute for
8240 Python's float/complex types and math/cmath modules, but also does much
8241 more advanced mathematics.")
8242 (license license:bsd-3)))
8243
8244 (define-public python2-mpmath
8245 (package-with-python2 python-mpmath))
8246
8247 (define-public python-bigfloat
8248 (package
8249 (name "python-bigfloat")
8250 (version "0.3.0")
8251 (source
8252 (origin
8253 (method url-fetch)
8254 (uri (pypi-uri "bigfloat" version))
8255 (sha256
8256 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
8257 (build-system python-build-system)
8258 (inputs
8259 `(("mpfr" ,mpfr)))
8260 (home-page "https://github.com/mdickinson/bigfloat")
8261 (synopsis "Arbitrary precision floating-point arithmetic for Python")
8262 (description
8263 "This package provides a Python interface to the MPFR library for
8264 multiprecision arithmetic.")
8265 (license license:lgpl3+)))
8266
8267 (define-public python2-bigfloat
8268 (package-with-python2 python-bigfloat))
8269
8270 (define-public python-sympy
8271 (package
8272 (name "python-sympy")
8273 (version "1.7.1")
8274 (source
8275 (origin
8276 (method url-fetch)
8277 (uri (pypi-uri "sympy" version))
8278 (sha256
8279 (base32 "0bkb4jf24yv5i4kjpsmg1xjjccfhqyi0syv0p0xvhdbmx5hr5pm3"))))
8280 (build-system python-build-system)
8281 (arguments
8282 `(#:phases
8283 (modify-phases %standard-phases
8284 (replace 'check
8285 (lambda* (#:key outputs #:allow-other-keys)
8286 (invoke
8287 (or (which "python3") (which "python"))
8288 "-c" "import sympy; sympy.test(\"/core\")"))))))
8289 (propagated-inputs
8290 `(("python-mpmath" ,python-mpmath)))
8291 (home-page "https://www.sympy.org/")
8292 (synopsis "Python library for symbolic mathematics")
8293 (description
8294 "SymPy is a Python library for symbolic mathematics. It aims to become a
8295 full-featured computer algebra system (CAS) while keeping the code as simple
8296 as possible in order to be comprehensible and easily extensible.")
8297 (license license:bsd-3)))
8298
8299 (define-public python2-sympy
8300 (package
8301 (inherit (package-with-python2 python-sympy))
8302 (version "1.5.1") ; last release for python2
8303 (source
8304 (origin
8305 (method url-fetch)
8306 (uri (pypi-uri "sympy" version))
8307 (sha256
8308 (base32 "0zjfbxlkazzh9z22gf62azrkipb2xw7mpzjz3wl1az9893bh2yfp"))))))
8309
8310 (define-public python-q
8311 (package
8312 (name "python-q")
8313 (version "2.6")
8314 (source
8315 (origin
8316 (method url-fetch)
8317 (uri (pypi-uri "q" version))
8318 (sha256
8319 (base32
8320 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
8321 (build-system python-build-system)
8322 (home-page "https://github.com/zestyping/q")
8323 (synopsis "Quick-and-dirty debugging output for tired programmers")
8324 (description
8325 "q is a Python module for \"print\" style of debugging Python code. It
8326 provides convenient short API for print out of values, tracebacks, and
8327 falling into the Python interpreter.")
8328 (license license:asl2.0)))
8329
8330 (define-public python2-q
8331 (package-with-python2 python-q))
8332
8333 (define-public python-xlib
8334 (package
8335 (name "python-xlib")
8336 (version "0.29")
8337 (source
8338 (origin
8339 (method git-fetch)
8340 (uri (git-reference
8341 (url "https://github.com/python-xlib/python-xlib")
8342 (commit version)))
8343 (file-name (git-file-name name version))
8344 (sha256
8345 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
8346 (build-system python-build-system)
8347 (arguments
8348 `(#:phases
8349 (modify-phases %standard-phases
8350 (add-before 'check 'start-xserver
8351 (lambda* (#:key inputs #:allow-other-keys)
8352 (let ((xorg-server (assoc-ref inputs "xorg-server")))
8353 ;; There must be a running X server and make check doesn't
8354 ;; start one. Therefore we must do it.
8355 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
8356 (setenv "DISPLAY" ":1")
8357 #t))))))
8358 (native-inputs
8359 `(("python-mock" ,python-mock)
8360 ("python-setuptools-scm" ,python-setuptools-scm)
8361 ("xorg-server" ,xorg-server)))
8362 (propagated-inputs
8363 `(("python-six" ,python-six)))
8364 (home-page "https://github.com/python-xlib/python-xlib")
8365 (synopsis "Python X11 client library")
8366 (description
8367 "The Python X Library is intended to be a fully functional
8368 X client library for Python programs. It is useful to implement
8369 low-level X clients. It is written entirely in Python.")
8370 (license license:gpl2+)))
8371
8372 (define-public python2-xlib
8373 (package-with-python2 python-xlib))
8374
8375 (define-public python-singledispatch
8376 (package
8377 (name "python-singledispatch")
8378 (version "3.4.0.3")
8379 (source
8380 (origin
8381 (method url-fetch)
8382 (uri (pypi-uri "singledispatch" version))
8383 (sha256
8384 (base32
8385 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
8386 (build-system python-build-system)
8387 (native-inputs
8388 `(("python-six" ,python-six))) ; required for conversion, not at run-time
8389 (home-page
8390 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
8391 (synopsis "Backport of singledispatch feature from Python 3.4")
8392 (description
8393 "This library brings functools.singledispatch from Python 3.4 to Python
8394 2.6-3.3.")
8395 (license license:expat)))
8396
8397 (define-public python2-singledispatch
8398 (package-with-python2 python-singledispatch))
8399
8400 ;; the python- version can be removed with python-3.5
8401 (define-public python-backports-abc
8402 (package
8403 (name "python-backports-abc")
8404 (version "0.5")
8405 (source
8406 (origin
8407 (method url-fetch)
8408 (uri (pypi-uri "backports_abc" version))
8409 (sha256
8410 (base32
8411 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
8412 (build-system python-build-system)
8413 (home-page "https://github.com/cython/backports_abc")
8414 (synopsis "Backport of additions to the 'collections.abc' module")
8415 (description
8416 "Python-backports-abc provides a backport of additions to the
8417 @code{collections.abc} module in Python-3.5.")
8418 (license license:psfl)))
8419
8420 (define-public python2-backports-abc
8421 (package-with-python2 python-backports-abc))
8422
8423 (define-public python-backports-csv
8424 (package
8425 (name "python-backports-csv")
8426 (version "1.0.7")
8427 (source
8428 (origin
8429 (method url-fetch)
8430 (uri (pypi-uri "backports.csv" version))
8431 (sha256
8432 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
8433 (build-system python-build-system)
8434 (home-page "https://github.com/ryanhiebert/backports.csv")
8435 (synopsis "Backport of Python 3's csv module for Python 2")
8436 (description
8437 "Provides a backport of Python 3's @code{csv} module for parsing
8438 comma separated values. The API of the @code{csv} module in Python 2
8439 is drastically different from the @code{csv} module in Python 3.
8440 This is due, for the most part, to the difference between str in
8441 Python 2 and Python 3.")
8442 (license license:psfl)))
8443
8444 (define-public python2-backports-csv
8445 (package-with-python2 python-backports-csv))
8446
8447 (define-public python2-backports-shutil-get-terminal-size
8448 (package
8449 (name "python2-backports-shutil-get-terminal-size")
8450 (version "1.0.0")
8451 (source
8452 (origin
8453 (method url-fetch)
8454 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
8455 (sha256
8456 (base32
8457 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
8458 (build-system python-build-system)
8459 (arguments
8460 `(#:python ,python-2
8461 #:phases
8462 (modify-phases %standard-phases
8463 (replace 'check
8464 (lambda _
8465 (setenv "PYTHONPATH" (string-append "./build/lib:"
8466 (getenv "PYTHONPATH")))
8467 (invoke "py.test" "-v"))))))
8468 (native-inputs
8469 `(("python2-pytest" ,python2-pytest)))
8470 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
8471 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
8472 (description
8473 "This package provides a backport of the @code{get_terminal_size
8474 function} from Python 3.3's @code{shutil}.
8475 Unlike the original version it is written in pure Python rather than C,
8476 so it might be a tiny bit slower.")
8477 (license license:expat)))
8478
8479 (define-public python-waf
8480 (package
8481 (name "python-waf")
8482 (version "2.0.19")
8483 (source (origin
8484 (method url-fetch)
8485 (uri (string-append "https://waf.io/"
8486 "waf-" version ".tar.bz2"))
8487 (sha256
8488 (base32
8489 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
8490 (build-system python-build-system)
8491 (arguments
8492 '(#:phases
8493 (modify-phases %standard-phases
8494 (replace 'build
8495 (lambda _
8496 ;; XXX: Find a way to add all extra tools.
8497 (let ((tools '("gccdeps"
8498 "clang_compilation_database")))
8499 (invoke "python" "waf-light" "configure" "build"
8500 (string-append "--tools="
8501 (string-join tools ","))))))
8502 (replace 'check
8503 (lambda _
8504 (invoke "python" "waf" "--version")))
8505 (replace 'install
8506 (lambda* (#:key outputs #:allow-other-keys)
8507 (let ((out (assoc-ref outputs "out")))
8508 (install-file "waf" (string-append out "/bin")))
8509 #t))
8510 ;; waf breaks when it is wrapped.
8511 (delete 'wrap))))
8512 (home-page "https://waf.io/")
8513 (synopsis "Python-based build system")
8514 (description
8515 "Waf is a Python-based framework for configuring, compiling and installing
8516 applications.")
8517 (license license:bsd-3)))
8518
8519 (define-public python2-waf
8520 (package-with-python2 python-waf))
8521
8522 (define-public python-pyzmq
8523 (package
8524 (name "python-pyzmq")
8525 (version "22.0.3")
8526 (source
8527 (origin
8528 (method url-fetch)
8529 (uri (pypi-uri "pyzmq" version))
8530 (sha256
8531 (base32 "0bgrn65cxfz1c1sjrgyq5dy1mkhppxxbizd5wvrl03cq4zhkrxpp"))))
8532 (build-system python-build-system)
8533 (arguments
8534 `(#:configure-flags
8535 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
8536 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
8537 ;; --inplace' for 'python setup.py test' to work.
8538 #:tests? #f))
8539 (inputs
8540 `(("zeromq" ,zeromq)))
8541 (native-inputs
8542 `(("pkg-config" ,pkg-config)
8543 ("python-nose" ,python-nose)))
8544 (home-page "https://github.com/zeromq/pyzmq")
8545 (synopsis "Python bindings for 0MQ")
8546 (description
8547 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
8548 (license license:bsd-4)))
8549
8550 (define-public python2-pyzmq
8551 (package-with-python2 python-pyzmq))
8552
8553 (define-public python-pep8
8554 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
8555 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
8556 ;; some dependents' test suites, and nothing more.
8557 (package
8558 (name "python-pep8")
8559 (version "1.7.0")
8560 (source
8561 (origin
8562 (method url-fetch)
8563 (uri (pypi-uri "pep8" version))
8564 (sha256
8565 (base32
8566 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
8567 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
8568 (build-system python-build-system)
8569 (home-page "https://pep8.readthedocs.org/")
8570 (synopsis "Python style guide checker")
8571 (description
8572 "This tools checks Python code against some of the style conventions in
8573 PEP 8.")
8574 (license license:expat)))
8575
8576 (define-public python2-pep8
8577 (package-with-python2 python-pep8))
8578
8579 (define-public python-pep517
8580 (package
8581 (inherit python-pep517-bootstrap)
8582 (name "python-pep517")
8583 (arguments
8584 '(#:phases
8585 (modify-phases %standard-phases
8586 (replace 'check
8587 (lambda* (#:key tests? #:allow-other-keys)
8588 (delete-file "pytest.ini")
8589 ;; This test tries to connect to the internet
8590 (delete-file "tests/test_meta.py")
8591 (if tests?
8592 (invoke "pytest")
8593 #t))))))
8594 (native-inputs
8595 `(("python-mock" ,python-mock)
8596 ("python-pytest" ,python-pytest)
8597 ("python-testpath" ,python-testpath)))
8598 (properties `((python2-variant . ,(delay python2-pep517))))))
8599
8600 ;; Skip the tests so we don't create a cyclical dependency with pytest.
8601 (define-public python2-pep517
8602 (let ((base (package-with-python2
8603 (strip-python2-variant python-pep517))))
8604 (package/inherit base
8605 (name "python2-pep517")
8606 (arguments
8607 `(#:tests? #f
8608 ,@(package-arguments base)))
8609 (native-inputs `()))))
8610
8611 (define-public python-pyflakes
8612 (package
8613 (name "python-pyflakes")
8614 (version "2.3.1")
8615 (source
8616 (origin
8617 (method url-fetch)
8618 (uri (pypi-uri "pyflakes" version))
8619 (sha256
8620 (base32
8621 "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
8622 (build-system python-build-system)
8623 (home-page
8624 "https://github.com/pyflakes/pyflakes")
8625 (synopsis "Passive checker of Python programs")
8626 (description
8627 "Pyflakes statically checks Python source code for common errors.")
8628 (license license:expat)))
8629
8630 (define-public python2-pyflakes
8631 (package-with-python2 python-pyflakes))
8632
8633 (define-public python-mccabe
8634 (package
8635 (name "python-mccabe")
8636 (version "0.6.1")
8637 (source
8638 (origin
8639 (method url-fetch)
8640 (uri (pypi-uri "mccabe" version))
8641 (sha256
8642 (base32
8643 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
8644 (build-system python-build-system)
8645 (native-inputs
8646 `(("python-pytest" ,python-pytest-bootstrap)
8647 ("python-pytest-runner" ,python-pytest-runner)))
8648 (home-page "https://github.com/flintwork/mccabe")
8649 (synopsis "McCabe checker, plugin for flake8")
8650 (description
8651 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
8652 complexity of Python source code.")
8653 (license license:expat)))
8654
8655 (define-public python2-mccabe
8656 (package-with-python2 python-mccabe))
8657
8658 (define-public python-flake8
8659 (package
8660 (name "python-flake8")
8661 (version "3.9.0")
8662 (source (origin
8663 (method url-fetch)
8664 (uri (pypi-uri "flake8" version))
8665 (sha256
8666 (base32
8667 "1w65iyjnrwipv4dbcqxh725ri7mdx01d6pjyggd97c0j5cvkx1vq"))))
8668 (build-system python-build-system)
8669 (arguments
8670 `(#:phases
8671 (modify-phases %standard-phases
8672 (delete 'check)
8673 (add-after 'install 'check
8674 (lambda* (#:key inputs outputs #:allow-other-keys)
8675 (add-installed-pythonpath inputs outputs)
8676 (invoke "pytest" "-v")
8677 #t)))))
8678 (propagated-inputs
8679 `(("python-pycodestyle" ,python-pycodestyle)
8680 ("python-entrypoints" ,python-entrypoints)
8681 ("python-pyflakes" ,python-pyflakes)
8682 ("python-mccabe" ,python-mccabe)))
8683 (native-inputs
8684 `(("python-mock" ,python-mock)
8685 ("python-pytest" ,python-pytest-bootstrap)))
8686 (home-page "https://gitlab.com/pycqa/flake8")
8687 (synopsis
8688 "The modular source code checker: pep8, pyflakes and co")
8689 (description
8690 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
8691 (properties `((python2-variant . ,(delay python2-flake8))))
8692 (license license:expat)))
8693
8694 (define-public python2-flake8
8695 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
8696 (package/inherit base
8697 (propagated-inputs
8698 `(("python2-configparser" ,python2-configparser)
8699 ("python2-enum34" ,python2-enum34)
8700 ("python2-functools32" ,python2-functools32)
8701 ("python2-typing" ,python2-typing)
8702 ,@(package-propagated-inputs base))))))
8703
8704 (define-public python-flake8-bugbear
8705 (package
8706 (name "python-flake8-bugbear")
8707 (version "20.1.4")
8708 (source
8709 (origin
8710 (method url-fetch)
8711 (uri (pypi-uri "flake8-bugbear" version))
8712 (sha256
8713 (base32
8714 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
8715 (build-system python-build-system)
8716 (arguments
8717 '(#:phases
8718 (modify-phases %standard-phases
8719 (add-before 'check 'disable-test
8720 (lambda _
8721 ;; This test fails on slow computers.
8722 (substitute* "tests/test_bugbear.py"
8723 (("def test_does_not_crash_on_any_valid_code")
8724 "def _test_does_not_crash_on_any_valid_code")))))))
8725 (native-inputs
8726 `(("python-hypothesis" ,python-hypothesis)
8727 ("python-hypothesmith" ,python-hypothesmith)))
8728 (propagated-inputs
8729 `(("python-attrs" ,python-attrs)
8730 ("python-flake8" ,python-flake8)))
8731 (home-page "https://github.com/PyCQA/flake8-bugbear")
8732 (synopsis
8733 "Flake8 plugin for finding likely bugs and design problems in your program")
8734 (description
8735 "This package contains a plugin for Flake8 finding likely bugs and
8736 design problems in your program. It contains warnings that don't belong
8737 in pyflakes and pycodestyle.")
8738 (license license:expat)))
8739
8740 (define-public python-flake8-continuation
8741 (package
8742 (name "python-flake8-continuation")
8743 (version "1.0.5")
8744 (source
8745 (origin
8746 (method url-fetch)
8747 (uri (pypi-uri "flake8-continuation" version))
8748 (sha256
8749 (base32
8750 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
8751 (build-system python-build-system)
8752 (propagated-inputs
8753 `(("python-flake8" ,python-flake8)
8754 ("python-pycodestyle" ,python-pycodestyle)
8755 ("python-six" ,python-six)))
8756 (home-page "https://github.com/planetlabs/flake8-continuation")
8757 (synopsis "Flake8 Line Continuation Plugin")
8758 (description "A Flake8 plugin that checks for the line continuation
8759 style to be in the preferred method according to PEP-8, specifically:
8760 @quotation
8761 The preferred way of wrapping long lines is by using Python's implied
8762 line continuation inside parentheses, brackets and braces. Long lines
8763 can be broken over multiple lines by wrapping expressions in parentheses.
8764 These should be used in preference to using a backslash for line continuation.
8765 @end quotation")
8766 (license license:asl2.0)))
8767
8768 (define-public python-flake8-implicit-str-concat
8769 (package
8770 (name "python-flake8-implicit-str-concat")
8771 (version "0.2.0")
8772 (source
8773 (origin
8774 (method url-fetch)
8775 (uri (pypi-uri "flake8_implicit_str_concat" version))
8776 (sha256
8777 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
8778 (build-system python-build-system)
8779 (propagated-inputs
8780 `(("python-attrs" ,python-attrs)
8781 ("python-more-itertools" ,python-more-itertools)))
8782 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
8783 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
8784 (description
8785 "This is a plugin for the Python code checking tool Flake8 to encourage
8786 correct string literal concatenation.
8787
8788 It looks for style problems like implicitly concatenated string literals on
8789 the same line (which can be introduced by the code formating tool Black), or
8790 unnecessary plus operators for explicit string literal concatenation.")
8791 (license license:expat)))
8792
8793 (define-public python-flake8-polyfill
8794 (package
8795 (name "python-flake8-polyfill")
8796 (version "1.0.2")
8797 (source
8798 (origin
8799 (method url-fetch)
8800 (uri (pypi-uri "flake8-polyfill" version))
8801 (sha256
8802 (base32
8803 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
8804 (build-system python-build-system)
8805 (arguments
8806 '(#:phases
8807 (modify-phases %standard-phases
8808 (replace 'check
8809 (lambda _
8810 ;; Be compatible with Pytest 4:
8811 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
8812 (substitute* "setup.cfg"
8813 (("\\[pytest\\]")
8814 "[tool:pytest]"))
8815
8816 (setenv "PYTHONPATH"
8817 (string-append (getcwd) "/build/lib:"
8818 (getenv "PYTHONPATH")))
8819 (invoke "py.test" "-v"))))))
8820 (native-inputs
8821 `(("python-flake8" ,python-flake8)
8822 ("python-mock" ,python-mock)
8823 ("python-pep8" ,python-pep8)
8824 ("python-pycodestyle" ,python-pycodestyle)
8825 ("python-pytest" ,python-pytest)))
8826 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
8827 (synopsis "Polyfill package for Flake8 plugins")
8828 (description
8829 "This package that provides some compatibility helpers for Flake8
8830 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
8831 (license license:expat)))
8832
8833 (define-public python2-flake8-polyfill
8834 (package-with-python2 python-flake8-polyfill))
8835
8836 (define-public python-flake8-print
8837 (package
8838 (name "python-flake8-print")
8839 (version "4.0.0")
8840 (source
8841 (origin
8842 (method url-fetch)
8843 (uri (pypi-uri "flake8-print" version))
8844 (sha256
8845 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
8846 (build-system python-build-system)
8847 (propagated-inputs
8848 `(("python-flake8" ,python-flake8)
8849 ("python-pycodestyle" ,python-pycodestyle)
8850 ("python-six" ,python-six)))
8851 (home-page "https://github.com/jbkahn/flake8-print")
8852 (synopsis "Print statement checker plugin for Flake8")
8853 (description
8854 "This plugin for Flake8 checks for @code{print} statements in Python
8855 files.")
8856 (license license:expat)))
8857
8858 (define-public python-flake8-pyi
8859 (package
8860 (name "python-flake8-pyi")
8861 (version "20.5.0")
8862 (source
8863 (origin
8864 (method url-fetch)
8865 (uri (pypi-uri "flake8-pyi" version))
8866 (sha256
8867 (base32
8868 "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
8869 (build-system python-build-system)
8870 (propagated-inputs
8871 `(("python-attrs" ,python-attrs)
8872 ("python-flake8" ,python-flake8)
8873 ("python-pyflakes" ,python-pyflakes)))
8874 (home-page "https://github.com/ambv/flake8-pyi")
8875 (synopsis
8876 "Flake8 plugin that provides specializations for type hinting stub files")
8877 (description
8878 "This package contains a plugin that provides specializations for
8879 type hinting stub files, especially interesting for linting typeshed. It
8880 adds the @file{.pyi} extension to the default value of the @code{--filename}
8881 command-line argument to Flake8. This means stubs are linted by default with
8882 this plugin enabled, without needing to explicitly list every file. It
8883 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
8884 expressions after the entire file has been read. This enables support for
8885 first-class forward references that stub files use.")
8886 (license license:expat)))
8887
8888 (define-public python-flake8-pie
8889 (package
8890 (name "python-flake8-pie")
8891 (version "0.5.0")
8892 (source
8893 (origin
8894 (method url-fetch)
8895 (uri (pypi-uri "flake8-pie" version))
8896 (sha256
8897 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
8898 (build-system python-build-system)
8899 (home-page "https://github.com/sbdchd/flake8-pie")
8900 (synopsis "Flake8 extension that implements lints")
8901 (description
8902 "This package provides a flake8 extension that implements miscellaneous
8903 lints.")
8904 (license license:bsd-2)))
8905
8906 (define-public python-flake8-quotes
8907 (package
8908 (name "python-flake8-quotes")
8909 (version "3.2.0")
8910 (source
8911 (origin
8912 (method url-fetch)
8913 (uri (pypi-uri "flake8-quotes" version))
8914 (sha256
8915 (base32
8916 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
8917 (build-system python-build-system)
8918 (propagated-inputs
8919 `(("python-flake8" ,python-flake8)))
8920 (home-page "https://github.com/zheller/flake8-quotes/")
8921 (synopsis "Flake8 lint for quotes")
8922 (description "This package provides a Flake8 lint for quotes.")
8923 (license license:expat)))
8924
8925 (define-public python-autoflake
8926 (package
8927 (name "python-autoflake")
8928 (version "1.3.1")
8929 (source
8930 (origin
8931 (method url-fetch)
8932 (uri (pypi-uri "autoflake" version))
8933 (sha256
8934 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
8935 (build-system python-build-system)
8936 (propagated-inputs
8937 `(("python-pyflakes" ,python-pyflakes)))
8938 (home-page "https://github.com/myint/autoflake")
8939 (synopsis "Removes unused imports and unused variables")
8940 (description
8941 "@code{autoflake} removes unused imports and unused variables from Python
8942 code as reported by @code{pyflakes}.
8943
8944 By default, it only removes unused imports for modules that are part of the
8945 standard library. Removal of unused variables is also disabled by default.
8946 It also removes useless @code{pass} statements.")
8947 (license license:expat)))
8948
8949 (define-public python-mistune
8950 (package
8951 (name "python-mistune")
8952 (version "0.8.4")
8953 (source
8954 (origin
8955 (method url-fetch)
8956 (uri (pypi-uri "mistune" version))
8957 (sha256
8958 (base32
8959 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
8960 (build-system python-build-system)
8961 (native-inputs
8962 `(("python-nose" ,python-nose)
8963 ("python-cython" ,python-cython)))
8964 (home-page "https://github.com/lepture/mistune")
8965 (synopsis "Markdown parser in pure Python")
8966 (description "This package provides a fast markdown parser in pure
8967 Python.")
8968 (license license:bsd-3)))
8969
8970 (define-public python2-mistune
8971 (package-with-python2 python-mistune))
8972
8973 (define-public python-markdown
8974 (package
8975 (name "python-markdown")
8976 (version "3.3.4")
8977 (source
8978 (origin
8979 (method url-fetch)
8980 (uri (pypi-uri "Markdown" version))
8981 (sha256
8982 (base32
8983 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
8984 (build-system python-build-system)
8985 (native-inputs
8986 `(("python-nose" ,python-nose)
8987 ("python-pyyaml" ,python-pyyaml)))
8988 (home-page "https://python-markdown.github.io/")
8989 (synopsis "Python implementation of Markdown")
8990 (description
8991 "This package provides a Python implementation of John Gruber's
8992 Markdown. The library features international input, various Markdown
8993 extensions, and several HTML output formats. A command line wrapper
8994 markdown_py is also provided to convert Markdown files to HTML.")
8995 (properties `((python2-variant . ,(delay python2-markdown))))
8996 (license license:bsd-3)))
8997
8998 ;; Markdown 3.2 dropped support for Python 2.
8999 (define-public python2-markdown
9000 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
9001 (package/inherit
9002 base
9003 (version "3.1.1")
9004 (source (origin
9005 (method url-fetch)
9006 (uri (pypi-uri "Markdown" version))
9007 (sha256
9008 (base32
9009 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
9010
9011 (define-public python-ptyprocess
9012 (package
9013 (name "python-ptyprocess")
9014 (version "0.5.2")
9015 (source
9016 (origin
9017 (method url-fetch)
9018 (uri (pypi-uri "ptyprocess" version))
9019 (sha256
9020 (base32
9021 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
9022 (build-system python-build-system)
9023 (native-inputs
9024 `(("python-nose" ,python-nose)))
9025 (arguments
9026 `(#:phases
9027 (modify-phases %standard-phases
9028 (replace 'check
9029 (lambda _ (invoke "nosetests"))))))
9030 (home-page "https://github.com/pexpect/ptyprocess")
9031 (synopsis "Run a subprocess in a pseudo terminal")
9032 (description
9033 "This package provides a Python library used to launch a subprocess in a
9034 pseudo terminal (pty), and interact with both the process and its pty.")
9035 (license license:isc)))
9036
9037 (define-public python2-ptyprocess
9038 (package-with-python2 python-ptyprocess))
9039
9040 (define-public python-cram
9041 (package
9042 (name "python-cram")
9043 (version "0.7")
9044 (home-page "https://bitheap.org/cram/")
9045 (source (origin
9046 (method url-fetch)
9047 (uri (list (string-append home-page "cram-"
9048 version ".tar.gz")
9049 (pypi-uri "cram" version)))
9050 (sha256
9051 (base32
9052 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
9053 (arguments
9054 '(#:phases
9055 (modify-phases %standard-phases
9056 (add-after 'unpack 'patch-source
9057 (lambda _
9058 (substitute* (find-files "cram" ".*\\.py$")
9059 ;; Replace default shell path.
9060 (("/bin/sh") (which "sh")))
9061 (substitute* (find-files "tests" ".*\\.t$")
9062 (("md5") "md5sum")
9063 (("/bin/bash") (which "bash"))
9064 (("/bin/sh") (which "sh")))
9065 (substitute* "cram/_test.py"
9066 ;; This hack works around a bug triggered by substituting
9067 ;; the /bin/sh paths. "tests/usage.t" compares the output of
9068 ;; "cram -h", which breaks the output at 80 characters. This
9069 ;; causes the line showing the default shell to break into two
9070 ;; lines, but the test expects a single line...
9071 (("env\\['COLUMNS'\\] = '80'")
9072 "env['COLUMNS'] = '160'"))
9073
9074 (substitute* "Makefile"
9075 ;; Recent versions of python-coverage have caused the test
9076 ;; coverage to decrease (as of version 0.7). Allow that.
9077 (("--fail-under=100")
9078 "--fail-under=90"))
9079
9080 #t))
9081 (replace 'check
9082 ;; The test phase uses the built library and executable.
9083 (lambda* (#:key inputs outputs #:allow-other-keys)
9084 (add-installed-pythonpath inputs outputs)
9085 (setenv "PATH" (string-append (getenv "PATH") ":"
9086 (assoc-ref outputs "out") "/bin"))
9087 (invoke "make" "test"))))))
9088 (build-system python-build-system)
9089 (native-inputs
9090 `(("python-coverage" ,python-coverage)
9091 ("which" ,which)))
9092 (synopsis "Simple testing framework for command line applications")
9093 (description
9094 "Cram is a functional testing framework for command line applications.
9095 Cram tests look like snippets of interactive shell sessions. Cram runs each
9096 command and compares the command output in the test with the command’s actual
9097 output.")
9098 (license license:gpl2+)))
9099
9100 (define-public python2-cram
9101 (package-with-python2 python-cram))
9102
9103 (define-public python-crashtest
9104 (package
9105 (name "python-crashtest")
9106 (version "0.3.1")
9107 (source
9108 (origin
9109 (method url-fetch)
9110 (uri (pypi-uri "crashtest" version))
9111 (sha256
9112 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
9113 (build-system python-build-system)
9114 (home-page "https://github.com/sdispater/crashtest")
9115 (synopsis "Manage Python errors with ease")
9116 (description
9117 "Python library that makes exceptions handling and inspection easier.")
9118 (license license:expat)))
9119
9120 (define-public python-straight-plugin
9121 (package
9122 (name "python-straight-plugin")
9123 (version "1.4.1")
9124 (source
9125 (origin
9126 (method url-fetch)
9127 (uri (pypi-uri "straight.plugin" version))
9128 (sha256
9129 (base32
9130 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
9131 (build-system python-build-system)
9132 (home-page "https://github.com/ironfroggy/straight.plugin")
9133 (synopsis "Simple namespaced plugin facility")
9134 (description "Straight Plugin provides a type of plugin you can create from
9135 almost any existing Python modules, and an easy way for outside developers to
9136 add functionality and customization to your projects with their own plugins.")
9137 (license license:expat)))
9138
9139 (define-public python2-straight-plugin
9140 (package-with-python2 python-straight-plugin))
9141
9142 (define-public python-fonttools
9143 (package
9144 (name "python-fonttools")
9145 (version "4.6.0")
9146 (source (origin
9147 (method url-fetch)
9148 (uri (pypi-uri "fonttools" version ".zip"))
9149 (sha256
9150 (base32
9151 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
9152 (build-system python-build-system)
9153 (native-inputs
9154 `(("unzip" ,unzip)
9155 ("python-pytest" ,python-pytest)
9156 ("python-pytest-runner" ,python-pytest-runner)))
9157 (home-page "https://github.com/fonttools/fonttools")
9158 (synopsis "Tools to manipulate font files")
9159 (description
9160 "FontTools/TTX is a library to manipulate font files from Python. It
9161 supports reading and writing of TrueType/OpenType fonts, reading and writing
9162 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
9163 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
9164 from an XML-based format.")
9165 (license license:expat)))
9166
9167 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
9168 (define-public python2-fonttools
9169 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
9170 (package/inherit
9171 base
9172 (version "3.44.0")
9173 (source (origin
9174 (method url-fetch)
9175 (uri (pypi-uri "fonttools" version ".zip"))
9176 (sha256
9177 (base32
9178 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
9179
9180 (define-public python-ly
9181 (package
9182 (name "python-ly")
9183 (version "0.9.5")
9184 (source
9185 (origin
9186 (method url-fetch)
9187 (uri (pypi-uri name version))
9188 (sha256
9189 (base32
9190 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
9191 (build-system python-build-system)
9192 (arguments
9193 ;; FIXME: Some tests need network access.
9194 '(#:tests? #f))
9195 (synopsis "Tool and library for manipulating LilyPond files")
9196 (description "This package provides a Python library to parse, manipulate
9197 or create documents in LilyPond format. A command line program ly is also
9198 provided that can be used to do various manipulations with LilyPond files.")
9199 (home-page "https://pypi.org/project/python-ly/")
9200 (license license:gpl2+)))
9201
9202 (define-public python-appdirs
9203 (package
9204 (name "python-appdirs")
9205 (version "1.4.3")
9206 (source
9207 (origin
9208 (method url-fetch)
9209 (uri (pypi-uri "appdirs" version))
9210 (sha256
9211 (base32
9212 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
9213 (build-system python-build-system)
9214 (home-page "https://github.com/ActiveState/appdirs")
9215 (synopsis
9216 "Determine platform-specific dirs, e.g. a \"user data dir\"")
9217 (description
9218 "This module provides a portable way of finding out where user data
9219 should be stored on various operating systems.")
9220 (license license:expat)))
9221
9222 (define-public python2-appdirs
9223 (package-with-python2 python-appdirs))
9224
9225 (define-public python-gorilla
9226 (package
9227 (name "python-gorilla")
9228 (version "0.3.0")
9229 (source (origin
9230 (method url-fetch)
9231 (uri (pypi-uri "gorilla" version))
9232 (sha256
9233 (base32
9234 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
9235 (build-system python-build-system)
9236 (home-page "https://github.com/christophercrouzet/gorilla")
9237 (synopsis "Convenient monkey patching with Python")
9238 (description
9239 "Gorilla is a Python library that provides a convenient approach to
9240 monkey patching. Monkey patching is the process of modifying module and
9241 class attributes at runtime with the purpose of replacing or extending
9242 third-party code.")
9243 (license license:expat)))
9244
9245 (define-public python-llfuse
9246 (package
9247 (name "python-llfuse")
9248 (version "1.3.8")
9249 (source (origin
9250 (method url-fetch)
9251 (uri (pypi-uri "llfuse" version))
9252 (sha256
9253 (base32
9254 "1g2cdhdqrb6m7655qp61pn61pwj1ql61cdzhr2jvl3w4i8877ddr"))))
9255 (build-system python-build-system)
9256 (inputs
9257 `(("fuse" ,fuse)
9258 ("attr" ,attr)))
9259 (native-inputs
9260 `(("pkg-config" ,pkg-config)))
9261 (synopsis "Python bindings for FUSE")
9262 (description
9263 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
9264 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
9265 (license license:lgpl2.0+)
9266 (properties `((python2-variant . ,(delay python2-llfuse))))))
9267
9268 (define-public python2-llfuse
9269 (let ((base (package-with-python2
9270 (strip-python2-variant python-llfuse))))
9271 (package/inherit base
9272 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2))))))
9273
9274 (define-public python-msgpack
9275 (package
9276 (name "python-msgpack")
9277 (version "1.0.0")
9278 (source (origin
9279 (method url-fetch)
9280 (uri (pypi-uri "msgpack" version))
9281 (sha256
9282 (base32
9283 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
9284 (build-system python-build-system)
9285 (arguments
9286 `(#:modules ((guix build utils)
9287 (guix build python-build-system)
9288 (ice-9 ftw)
9289 (srfi srfi-1)
9290 (srfi srfi-26))
9291 #:phases
9292 (modify-phases %standard-phases
9293 (replace 'check
9294 (lambda _
9295 (let ((cwd (getcwd)))
9296 (setenv "PYTHONPATH"
9297 (string-append cwd "/build/"
9298 (find (cut string-prefix? "lib" <>)
9299 (scandir (string-append cwd "/build")))
9300 ":"
9301 (getenv "PYTHONPATH")))
9302 (invoke "pytest" "-v" "test")))))))
9303 (native-inputs
9304 `(("python-pytest" ,python-pytest)))
9305 (synopsis "MessagePack (de)serializer")
9306 (description "MessagePack is a fast, compact binary serialization format,
9307 suitable for similar data to JSON. This package provides CPython bindings for
9308 reading and writing MessagePack data.")
9309 (home-page "https://pypi.org/project/msgpack/")
9310 (license license:asl2.0)))
9311
9312 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
9313 ;; release 0.5. Some packages like borg still call it by the old name for now.
9314 ;; <https://bugs.gnu.org/30662>
9315 (define-public python-msgpack-transitional
9316 (package
9317 (inherit python-msgpack)
9318 (name "python-msgpack-transitional")
9319 (version "0.5.6")
9320 (source (origin
9321 (method url-fetch)
9322 (uri (pypi-uri "msgpack" version))
9323 (sha256
9324 (base32
9325 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
9326 (arguments
9327 (substitute-keyword-arguments (package-arguments python-msgpack)
9328 ((#:phases phases)
9329 `(modify-phases ,phases
9330 (add-after 'unpack 'configure-transitional
9331 (lambda _
9332 ;; Keep using the old name.
9333 (substitute* "setup.py"
9334 (("TRANSITIONAL = False")
9335 "TRANSITIONAL = 1"))
9336 #t))))))))
9337
9338 (define-public python2-msgpack
9339 (package-with-python2 python-msgpack))
9340
9341 (define-public python-netaddr
9342 (package
9343 (name "python-netaddr")
9344 (version "0.7.19")
9345 (source
9346 (origin
9347 (method url-fetch)
9348 (uri (pypi-uri "netaddr" version))
9349 (sha256
9350 (base32
9351 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
9352 (build-system python-build-system)
9353 (arguments `(#:tests? #f)) ;; No tests.
9354 (home-page "https://github.com/drkjam/netaddr/")
9355 (synopsis "Pythonic manipulation of network addresses")
9356 (description
9357 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
9358 and MAC network addresses.")
9359 (license license:bsd-3)))
9360
9361 (define-public python2-netaddr
9362 (package-with-python2 python-netaddr))
9363
9364 (define-public python2-pyroute2
9365 (package
9366 (name "python2-pyroute2")
9367 (version "0.5.6")
9368 (source
9369 (origin
9370 (method url-fetch)
9371 (uri (pypi-uri "pyroute2" version))
9372 (sha256
9373 (base32
9374 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
9375 (build-system python-build-system)
9376 (arguments
9377 `(#:python ,python-2)) ;Python 3.x is not supported
9378 (home-page "https://github.com/svinota/pyroute2")
9379 (synopsis "Python netlink library")
9380 (description
9381 "Pyroute2 is a pure Python netlink library with minimal dependencies.
9382 Supported netlink families and protocols include:
9383 @itemize
9384 @item rtnl, network settings - addresses, routes, traffic controls
9385 @item nfnetlink - netfilter API: ipset, nftables, ...
9386 @item ipq - simplest userspace packet filtering, iptables QUEUE target
9387 @item devlink - manage and monitor devlink-enabled hardware
9388 @item generic - generic netlink families
9389 @itemize
9390 @item nl80211 - wireless functions API (basic support)
9391 @item taskstats - extended process statistics
9392 @item acpi_events - ACPI events monitoring
9393 @item thermal_events - thermal events monitoring
9394 @item VFS_DQUOT - disk quota events monitoring
9395 @end itemize
9396 @end itemize")
9397 (license license:gpl2+)))
9398
9399 (define-public python-wrapt
9400 (package
9401 (name "python-wrapt")
9402 (version "1.11.2")
9403 (source
9404 (origin
9405 (method url-fetch)
9406 (uri (pypi-uri "wrapt" version))
9407 (sha256
9408 (base32
9409 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
9410 (build-system python-build-system)
9411 (arguments
9412 ;; Tests are not included in the tarball, they are only available in the
9413 ;; git repository.
9414 `(#:tests? #f))
9415 (home-page "https://github.com/GrahamDumpleton/wrapt")
9416 (synopsis "Module for decorators, wrappers and monkey patching")
9417 (description
9418 "The aim of the wrapt module is to provide a transparent object proxy for
9419 Python, which can be used as the basis for the construction of function
9420 wrappers and decorator functions.")
9421 (license license:bsd-2)))
9422
9423 (define-public python2-wrapt
9424 (package-with-python2 python-wrapt))
9425
9426 (define-public python-commonmark
9427 (package
9428 (name "python-commonmark")
9429 (version "0.9.1")
9430 (source
9431 (origin
9432 (method url-fetch)
9433 (uri (pypi-uri "commonmark" version))
9434 (sha256
9435 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
9436 (build-system python-build-system)
9437 (arguments
9438 `(#:phases
9439 (modify-phases %standard-phases
9440 (replace 'check
9441 (lambda* (#:key inputs outputs #:allow-other-keys)
9442 (add-installed-pythonpath inputs outputs)
9443 (invoke "python" "setup.py" "test"))))))
9444 (home-page "https://github.com/readthedocs/commonmark.py")
9445 (synopsis "Python parser for the CommonMark Markdown spec")
9446 (description
9447 "This module is a pure Python port of jgm's @code{commonmark.js}, a
9448 Markdown parser and renderer for the CommonMark specification, using only
9449 native modules.")
9450 (license license:bsd-3)))
9451
9452 (define-public python-xlrd
9453 (package
9454 (name "python-xlrd")
9455 (version "1.2.0")
9456 (source (origin
9457 (method url-fetch)
9458 (uri (pypi-uri "xlrd" version))
9459 (sha256
9460 (base32
9461 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
9462 (build-system python-build-system)
9463 (arguments
9464 `(#:phases
9465 (modify-phases %standard-phases
9466 ;; Some tests depend on writing a temporary file to the user's home
9467 ;; directory.
9468 (add-after 'unpack 'fix-tests
9469 (lambda _
9470 (delete-file "tests/test_open_workbook.py")
9471 #t)))))
9472 (home-page "http://www.python-excel.org/")
9473 (synopsis "Library for extracting data from Excel files")
9474 (description "This package provides a library to extract data from
9475 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
9476 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
9477 Unicode-aware. It is not intended as an end-user tool.")
9478 (license license:bsd-3)))
9479
9480 (define-public python2-xlrd
9481 (package-with-python2 python-xlrd))
9482
9483 (define-public python-immutables
9484 (package
9485 (name "python-immutables")
9486 (version "0.14")
9487 (source
9488 (origin
9489 (method url-fetch)
9490 (uri (pypi-uri "immutables" version))
9491 (sha256
9492 (base32 "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0"))))
9493 (build-system python-build-system)
9494 (home-page "https://github.com/MagicStack/immutables")
9495 (synopsis "High-performance immutable mapping type for Python")
9496 (description
9497 "An immutable mapping type for Python. The underlying datastructure is a
9498 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
9499 functional languages.")
9500 (license license:asl2.0)))
9501
9502 (define-public python-prettytable
9503 (package
9504 (name "python-prettytable")
9505 (version "0.7.2")
9506 (source
9507 (origin
9508 (method url-fetch)
9509 (uri (pypi-uri "prettytable" version ".tar.bz2"))
9510 (sha256
9511 (base32
9512 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
9513 (build-system python-build-system)
9514 (home-page "https://code.google.com/archive/p/prettytable/")
9515 (synopsis "Display tabular data in an ASCII table format")
9516 (description
9517 "A library designed to represent tabular data in visually appealing ASCII
9518 tables. PrettyTable allows for selection of which columns are to be printed,
9519 independent alignment of columns (left or right justified or centred) and
9520 printing of sub-tables by specifying a row range.")
9521 (license license:bsd-3)))
9522
9523 (define-public python2-prettytable
9524 (package-with-python2 python-prettytable))
9525
9526 (define-public python-curio
9527 (package
9528 (name "python-curio")
9529 (version "1.2")
9530 (source
9531 (origin
9532 (method url-fetch)
9533 (uri (pypi-uri "curio" version))
9534 (sha256
9535 (base32 "16wkww6kh511b9bzsfhpvrv0766cc6ssgbzz4lgpjnrzzgx21wwh"))))
9536 (build-system python-build-system)
9537 (arguments
9538 `(#:phases
9539 (modify-phases %standard-phases
9540 (replace 'check
9541 (lambda* (#:key inputs outputs #:allow-other-keys)
9542 (add-installed-pythonpath inputs outputs)
9543 (invoke "pytest" "-vv" "-k"
9544 ;; Tries to open an outgoing connection.
9545 "not test_ssl_outgoing"))))))
9546 (native-inputs
9547 `(("python-pytest" ,python-pytest)))
9548 (home-page "https://github.com/dabeaz/curio")
9549 (synopsis "Coroutine-based library for concurrent Python")
9550 (description
9551 "Curio is a coroutine-based library for concurrent Python systems
9552 programming. It provides standard programming abstractions such as as
9553 tasks, sockets, files, locks, and queues.")
9554 (license license:bsd-3)))
9555
9556 (define-public python-tables
9557 (package
9558 (name "python-tables")
9559 (version "3.6.1")
9560 (source
9561 (origin
9562 (method url-fetch)
9563 (uri (pypi-uri "tables" version))
9564 (sha256
9565 (base32
9566 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
9567 (modules '((guix build utils)))
9568 (snippet
9569 '(begin
9570 ;; Remove pre-compiled .pyc files from source.
9571 (for-each delete-file-recursively
9572 (find-files "." "__pycache__" #:directories? #t))
9573 (for-each delete-file (find-files "." "\\.pyc$"))
9574 #t))))
9575 (build-system python-build-system)
9576 (arguments
9577 `(;; FIXME: python-build-system does not pass configure-flags to "build"
9578 ;; or "check", so we must override the build and check phases.
9579 #:phases
9580 (modify-phases %standard-phases
9581 (add-after 'unpack 'use-gcc
9582 (lambda _
9583 (substitute* "setup.py"
9584 (("^( +)compiler = new_compiler\\(\\)" line indent)
9585 (string-append line
9586 "\n"
9587 indent
9588 "compiler.set_executables(compiler='gcc',"
9589 "compiler_so='gcc',"
9590 "linker_exe='gcc',"
9591 "linker_so='gcc -shared')")))
9592 #t))
9593 (add-after 'unpack 'disable-tuning
9594 (lambda _
9595 (substitute* "setup.py"
9596 (("cpu_flags = .*")
9597 "cpu_flags = ['sse2']\n"))
9598 #t))
9599 (replace 'build
9600 (lambda* (#:key inputs #:allow-other-keys)
9601 (invoke "python" "setup.py" "build"
9602 (string-append "--hdf5="
9603 (assoc-ref inputs "hdf5")))))
9604 (replace 'check
9605 (lambda* (#:key inputs #:allow-other-keys)
9606 (invoke "python" "setup.py" "check"
9607 (string-append "--hdf5="
9608 (assoc-ref inputs "hdf5"))))))))
9609 (propagated-inputs
9610 `(("python-numexpr" ,python-numexpr)
9611 ("python-numpy" ,python-numpy)))
9612 (native-inputs
9613 `(("python-cython" ,python-cython)
9614 ("pkg-config" ,pkg-config)))
9615 (inputs
9616 `(("hdf5" ,hdf5-1.10)
9617 ("bzip2" ,bzip2)
9618 ("zlib" ,zlib)))
9619 (home-page "https://www.pytables.org/")
9620 (synopsis "Hierarchical datasets for Python")
9621 (description "PyTables is a package for managing hierarchical datasets and
9622 designed to efficiently cope with extremely large amounts of data.")
9623 (license license:bsd-3)))
9624
9625 (define-public python-sniffio
9626 (package
9627 (name "python-sniffio")
9628 (version "1.1.0")
9629 (source
9630 (origin
9631 (method url-fetch)
9632 (uri (pypi-uri "sniffio" version))
9633 (sha256
9634 (base32 "08bsp2pp2dxzn9yzcafwzw8jlm0jf50as0ix8vfhxzk91w810f4f"))))
9635 (build-system python-build-system)
9636 (arguments
9637 `(#:phases
9638 (modify-phases %standard-phases
9639 (replace 'check
9640 (lambda _
9641 (invoke "pytest" "-vv"))))))
9642 (native-inputs
9643 `(("python-curio" ,python-curio)
9644 ("python-pytest" ,python-pytest)
9645 ("python-pytest-cov" ,python-pytest-cov)))
9646 (home-page "https://github.com/python-trio/sniffio")
9647 (synopsis "Detect which async library a program is running under")
9648 (description "This package detects which async library a program is
9649 running under. It supports multiple async I/O packages, like Trio, and
9650 asyncio.")
9651 ;; Either license applies.
9652 (license (list license:expat license:asl2.0))))
9653
9654 (define-public python-pytest-black
9655 (package
9656 (name "python-pytest-black")
9657 (version "0.3.8")
9658 (source
9659 (origin
9660 (method url-fetch)
9661 (uri (pypi-uri "pytest-black" version))
9662 (sha256
9663 (base32
9664 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
9665 (build-system python-build-system)
9666 (propagated-inputs
9667 `(("python-pytest" ,python-pytest)
9668 ("python-black" ,python-black)
9669 ("python-toml" ,python-toml)))
9670 (native-inputs
9671 `(("python-setuptools-scm" ,python-setuptools-scm)))
9672 (home-page "https://github.com/shopkeep/pytest-black")
9673 (synopsis "Pytest plugin to enable format checking with black")
9674 (description
9675 "This package provides a pytest plugin to enable format checking with the
9676 Python code formatter \"black\".")
9677 (license license:expat)))
9678
9679 (define-public python-get-version
9680 (package
9681 (name "python-get-version")
9682 (version "2.1")
9683 (source
9684 (origin
9685 (method url-fetch)
9686 (uri (pypi-uri "get_version" version))
9687 (sha256
9688 (base32
9689 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
9690 (build-system python-build-system)
9691 (propagated-inputs
9692 `(("python-pygments" ,python-pygments)
9693 ("python-pytest" ,python-pytest)
9694 ("python-pytest-black" ,python-pytest-black)
9695 ("python-pytest-cov" ,python-pytest-cov)
9696 ("python-setuptools" ,python-setuptools)
9697 ("python-testpath" ,python-testpath)))
9698 (home-page "https://github.com/flying-sheep/get_version")
9699 (synopsis "Version helper in the spirit of versioneer")
9700 (description
9701 "This package provides a version helper that lets you automatically use
9702 the latest @code{vX.X.X} Git tag as the version in your Python package. It
9703 also supports getting the version from Python source distributions or, once
9704 your package is installed, via @code{pkg_resources} (part of
9705 @code{setuptools}).")
9706 (license license:gpl3+)))
9707
9708 (define-public python-legacy-api-wrap
9709 (package
9710 (name "python-legacy-api-wrap")
9711 (version "1.2")
9712 (source
9713 (origin
9714 (method url-fetch)
9715 (uri (pypi-uri "legacy-api-wrap" version))
9716 (sha256
9717 (base32
9718 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
9719 (build-system python-build-system)
9720 (propagated-inputs
9721 `(("python-get-version" ,python-get-version)
9722 ("python-pytest" ,python-pytest)
9723 ("python-pytest-black" ,python-pytest-black)
9724 ("python-pytest-cov" ,python-pytest-cov)
9725 ("python-setuptools" ,python-setuptools)))
9726 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
9727 (synopsis "Legacy API wrapper")
9728 (description "This module defines a decorator to wrap legacy APIs. The
9729 primary use case is APIs defined before keyword-only parameters existed.")
9730 (license license:gpl3+)))
9731
9732 (define-public python-pyasn1
9733 (package
9734 (name "python-pyasn1")
9735 (version "0.4.8")
9736 (source
9737 (origin
9738 (method url-fetch)
9739 (uri (pypi-uri "pyasn1" version))
9740 (sha256
9741 (base32
9742 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
9743 (build-system python-build-system)
9744 (home-page "http://pyasn1.sourceforge.net/")
9745 (synopsis "ASN.1 types and codecs")
9746 (description
9747 "This is an implementation of ASN.1 types and codecs in Python. It is
9748 suitable for a wide range of protocols based on the ASN.1 specification.")
9749 (license license:bsd-2)))
9750
9751 (define-public python2-pyasn1
9752 (package-with-python2 python-pyasn1))
9753
9754 (define-public python-pyasn1-modules
9755 (package
9756 (name "python-pyasn1-modules")
9757 (version "0.2.2")
9758 (source
9759 (origin
9760 (method url-fetch)
9761 (uri (pypi-uri "pyasn1-modules" version))
9762 (sha256
9763 (base32
9764 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
9765 (build-system python-build-system)
9766 (propagated-inputs
9767 `(("python-pyasn1" ,python-pyasn1)))
9768 (home-page "https://sourceforge.net/projects/pyasn1/")
9769 (synopsis "ASN.1 codec implementations")
9770 (description
9771 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
9772 implementations of ASN.1-based codecs and protocols.")
9773 (license license:bsd-3)))
9774
9775 (define-public python2-pyasn1-modules
9776 (package-with-python2 python-pyasn1-modules))
9777
9778 (define-public python-ipaddress
9779 (package
9780 (name "python-ipaddress")
9781 (version "1.0.23")
9782 (source (origin
9783 (method url-fetch)
9784 (uri (pypi-uri "ipaddress" version))
9785 (sha256
9786 (base32
9787 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
9788 (build-system python-build-system)
9789 (home-page "https://github.com/phihag/ipaddress")
9790 (synopsis "IP address manipulation library")
9791 (description
9792 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
9793 in Python. This library is used to create, poke at, and manipulate IPv4 and
9794 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
9795 module to older versions of Python.")
9796 (license license:psfl)))
9797
9798 (define-public python2-ipaddress
9799 (package-with-python2 python-ipaddress))
9800
9801 (define-public python2-ipaddr
9802 (package
9803 (name "python2-ipaddr")
9804 (version "2.1.11")
9805 (source
9806 (origin
9807 (method url-fetch)
9808 (uri (pypi-uri "ipaddr" version))
9809 (sha256
9810 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
9811 (build-system python-build-system)
9812 (arguments
9813 `(#:python ,python-2 ;version 2 only
9814 #:phases
9815 (modify-phases %standard-phases
9816 (replace 'check
9817 (lambda _ (invoke "python" "ipaddr_test.py"))))))
9818 (home-page "https://github.com/google/ipaddr-py")
9819 (synopsis "IP address manipulation library")
9820 (description
9821 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
9822 IPv6 addresses and networks.
9823
9824 For new implementations you may prefer to use the standard module
9825 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
9826 versions of Python.")
9827 (license license:asl2.0)))
9828
9829 (define-public python-idna
9830 (package
9831 (name "python-idna")
9832 (version "2.10")
9833 (source
9834 (origin
9835 (method url-fetch)
9836 (uri (pypi-uri "idna" version))
9837 (sha256
9838 (base32
9839 "1xmk3s92d2vq42684p61wixfmh3qpr2mw762w0n6662vhlpqf1xk"))))
9840 (build-system python-build-system)
9841 (home-page "https://github.com/kjd/idna")
9842 (synopsis "Internationalized domain names in applications")
9843 (description
9844 "This is a library to support the Internationalised Domain Names in
9845 Applications (IDNA) protocol as specified in RFC 5891. This version of the
9846 protocol is often referred to as “IDNA2008” and can produce different results
9847 from the earlier standard from 2003. The library is also intended to act as a
9848 suitable drop-in replacement for the “encodings.idna” module that comes with
9849 the Python standard library but currently only supports the older 2003
9850 specification.")
9851 (license license:bsd-4)))
9852
9853 (define-public python-idna-2.7
9854 (package (inherit python-idna)
9855 (version "2.7")
9856 (source (origin
9857 (method url-fetch)
9858 (uri (pypi-uri "idna" version))
9859 (sha256
9860 (base32
9861 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
9862
9863
9864 (define-public python2-idna
9865 (package-with-python2 python-idna))
9866
9867 (define-public python-libsass
9868 (package
9869 (name "python-libsass")
9870 (version "0.20.1")
9871 (source
9872 (origin
9873 ;; PyPI tarball is missing some test files.
9874 (method git-fetch)
9875 (uri (git-reference
9876 (url "https://github.com/sass/libsass-python")
9877 (commit version)))
9878 (file-name (git-file-name name version))
9879 (sha256
9880 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
9881 (build-system python-build-system)
9882 (arguments
9883 `(#:phases
9884 (modify-phases %standard-phases
9885 ;; Use Guix package of libsass instead of compiling from a checkout.
9886 (add-before 'build 'set-libsass
9887 (lambda _
9888 (setenv "SYSTEM_SASS" (assoc-ref %build-inputs "libsass"))
9889 #t))
9890 (replace 'check
9891 (lambda* (#:key inputs outputs #:allow-other-keys)
9892 (add-installed-pythonpath inputs outputs)
9893 (invoke "pytest" "sasstests.py"))))))
9894 (native-inputs
9895 `(("python-pytest" ,python-pytest)
9896 ("python-werkzeug" ,python-werkzeug)))
9897 (inputs
9898 `(("libsass" ,libsass)))
9899 (propagated-inputs
9900 `(("python-six" ,python-six)))
9901 (home-page "https://sass.github.io/libsass-python/")
9902 (synopsis "Straightforward binding of libsass for Python")
9903 (description
9904 "This package provides a simple Python extension module @code{sass} which
9905 is binding LibSass.")
9906 (license license:expat)))
9907
9908 (define-public python-idna-ssl
9909 (package
9910 (name "python-idna-ssl")
9911 (version "1.0.1")
9912 (source
9913 (origin
9914 (method url-fetch)
9915 (uri (pypi-uri "idna-ssl" version))
9916 (sha256
9917 (base32
9918 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
9919 (build-system python-build-system)
9920 (arguments
9921 `(#:tests? #f)) ;circular dependency with python-aiohttp
9922 (home-page "https://github.com/aio-libs/idna-ssl")
9923 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
9924 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
9925 domains support.")
9926 (license license:expat)))
9927
9928 (define-public python-pretend
9929 (package
9930 (name "python-pretend")
9931 (version "1.0.9")
9932 (source
9933 (origin
9934 (method url-fetch)
9935 (uri (pypi-uri "pretend" version))
9936 (sha256
9937 (base32
9938 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
9939 (build-system python-build-system)
9940 (home-page "https://github.com/alex/pretend")
9941 (synopsis "Library for stubbing in Python")
9942 (description
9943 "Pretend is a library to make stubbing with Python easier. Stubbing is a
9944 technique for writing tests. You may hear the term mixed up with mocks,
9945 fakes, or doubles. Basically, a stub is an object that returns pre-canned
9946 responses, rather than doing any computation.")
9947 (license license:bsd-3)))
9948
9949 (define-public python2-pretend
9950 (package-with-python2 python-pretend))
9951
9952 (define-public python-pip
9953 (package
9954 (name "python-pip")
9955 (version "20.2.4")
9956 (source
9957 (origin
9958 (method url-fetch)
9959 (uri (pypi-uri "pip" version))
9960 (sha256
9961 (base32
9962 "18b4qcijwivvkj1g0hs4w8zjbks0bjzdjcrqybnhmyx0gs2rmjc5"))))
9963 (build-system python-build-system)
9964 (arguments
9965 '(#:tests? #f)) ; there are no tests in the pypi archive.
9966 (home-page "https://pip.pypa.io/")
9967 (synopsis "Package manager for Python software")
9968 (description
9969 "Pip is a package manager for Python software, that finds packages on the
9970 Python Package Index (PyPI).")
9971 (license license:expat)))
9972
9973 (define-public python2-pip
9974 (package-with-python2 python-pip))
9975
9976 (define-public python-tlsh
9977 (package
9978 (name "python-tlsh")
9979 (version "3.4.5")
9980 (home-page "https://github.com/trendmicro/tlsh")
9981 (source
9982 (origin
9983 (method git-fetch)
9984 (uri (git-reference
9985 (url "https://github.com/trendmicro/tlsh")
9986 (commit (string-append "v" version))))
9987 (file-name (git-file-name name version))
9988 (sha256
9989 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
9990 (build-system cmake-build-system)
9991 (arguments
9992 '(#:out-of-source? #f
9993 #:phases (modify-phases %standard-phases
9994 (replace
9995 'install
9996 (lambda* (#:key outputs #:allow-other-keys)
9997 ;; Build and install the Python bindings. The underlying
9998 ;; C++ library is apparently not meant to be installed.
9999 (let ((out (assoc-ref outputs "out")))
10000 (with-directory-excursion "py_ext"
10001 (and (system* "python" "setup.py" "build")
10002 (system* "python" "setup.py" "install"
10003 (string-append "--prefix=" out))))))))))
10004 (inputs `(("python" ,python-wrapper))) ;for the bindings
10005 (synopsis "Fuzzy matching library for Python")
10006 (description
10007 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
10008 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
10009 value which can be used for similarity comparisons. Similar objects have
10010 similar hash values, which allows for the detection of similar objects by
10011 comparing their hash values. The byte stream should have a sufficient amount
10012 of complexity; for example, a byte stream of identical bytes will not generate
10013 a hash value.")
10014 (license license:asl2.0)))
10015
10016 (define-public python2-tlsh
10017 (package/inherit python-tlsh
10018 (name "python2-tlsh")
10019 (inputs `(("python" ,python-2)))))
10020
10021 (define-public python-termcolor
10022 (package
10023 (name "python-termcolor")
10024 (version "1.1.0")
10025 (source
10026 (origin
10027 (method url-fetch)
10028 (uri (pypi-uri "termcolor" version))
10029 (sha256
10030 (base32
10031 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
10032 (build-system python-build-system)
10033 (arguments
10034 ;; There are no tests.
10035 `(#:tests? #f))
10036 (home-page "https://pypi.org/project/termcolor/")
10037 (synopsis "ANSII Color formatting for terminal output")
10038 (description
10039 "This package provides ANSII Color formatting for output in terminals.")
10040 (license license:expat)))
10041
10042 (define-public python2-termcolor
10043 (package-with-python2 python-termcolor))
10044
10045 (define-public python-terminaltables
10046 (package
10047 (name "python-terminaltables")
10048 (version "3.1.0")
10049 (source
10050 (origin
10051 (method url-fetch)
10052 (uri (pypi-uri "terminaltables" version))
10053 (sha256
10054 (base32
10055 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
10056 (build-system python-build-system)
10057 (home-page "https://github.com/Robpol86/terminaltables")
10058 (synopsis
10059 "Generate simple tables in terminals from a nested list of strings")
10060 (description
10061 "This package makes it easy to draw tables in terminal/console
10062 applications from a list of lists of strings. It supports multi-line rows.")
10063 (license license:expat)))
10064
10065 (define-public python-libarchive-c
10066 (package
10067 (name "python-libarchive-c")
10068 (version "2.9")
10069 (source (origin
10070 (method url-fetch)
10071 (uri (pypi-uri "libarchive-c" version))
10072 (sha256
10073 (base32
10074 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
10075 (build-system python-build-system)
10076 (arguments
10077 '(#:phases (modify-phases %standard-phases
10078 (add-before
10079 'build 'reference-libarchive
10080 (lambda* (#:key inputs #:allow-other-keys)
10081 ;; Retain the absolute file name of libarchive.so.
10082 (let ((libarchive (assoc-ref inputs "libarchive")))
10083 (substitute* "libarchive/ffi.py"
10084 (("find_library\\('archive'\\)")
10085 (string-append "'" libarchive
10086 "/lib/libarchive.so'"))))))
10087 (replace 'check
10088 (lambda _ (invoke "pytest" "-vv"))))))
10089 (native-inputs
10090 `(("python-mock" ,python-mock)
10091 ("python-pytest" ,python-pytest)))
10092 (inputs
10093 `(("libarchive" ,libarchive)))
10094 (home-page "https://github.com/Changaco/python-libarchive-c")
10095 (synopsis "Python interface to libarchive")
10096 (description
10097 "This package provides Python bindings to libarchive, a C library to
10098 access possibly compressed archives in many different formats. It uses
10099 Python's @code{ctypes} foreign function interface (FFI).")
10100 (license license:lgpl2.0+)))
10101
10102 (define-public python2-libarchive-c
10103 (package-with-python2 python-libarchive-c))
10104
10105 (define-public python-file
10106 (package/inherit file
10107 (name "python-file")
10108 (build-system python-build-system)
10109 (arguments
10110 '(#:tests? #f ;no tests
10111 #:configure-flags '("--single-version-externally-managed" "--root=/")
10112 #:phases (modify-phases %standard-phases
10113 (add-before 'build 'change-directory
10114 (lambda _
10115 (chdir "python")
10116 #t))
10117 (add-before 'build 'set-library-file-name
10118 (lambda* (#:key inputs #:allow-other-keys)
10119 (let ((file (assoc-ref inputs "file")))
10120 (substitute* "magic.py"
10121 (("find_library\\('magic'\\)")
10122 (string-append "'" file "/lib/libmagic.so'")))
10123 #t))))))
10124 (inputs `(("file" ,file)))
10125 (native-inputs (if (%current-target-system)
10126 `(("self" ,this-package))
10127 '()))
10128 (synopsis "Python bindings to the libmagic file type guesser")
10129 (description "This package provides Python bindings to the libmagic file
10130 type guesser.
10131
10132 Note that this module and the @code{python-magic} module both provide a
10133 @file{magic.py} file; these two modules, which are different and were
10134 developed separately, both serve the same purpose: provide Python bindings for
10135 libmagic.")))
10136
10137 (define-public python2-file
10138 (package-with-python2 python-file))
10139
10140 (define-public python-debian
10141 (package
10142 (name "python-debian")
10143 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
10144 (version "0.1.36")
10145 (source
10146 (origin
10147 ;; Use git-fetch, as pypi doesn't include test suite.
10148 (method git-fetch)
10149 (uri (git-reference
10150 (url home-page)
10151 (commit version)))
10152 (file-name (git-file-name name version))
10153 (sha256
10154 (base32
10155 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
10156 (build-system python-build-system)
10157 (arguments
10158 `(#:phases (modify-phases %standard-phases
10159 (add-after 'unpack 'remove-debian-specific-tests
10160 ;; python-apt, apt and dpkg are not yet available in guix,
10161 ;; and these tests heavily depend on them.
10162 (lambda _
10163 (delete-file "lib/debian/tests/test_deb822.py")
10164 (delete-file "lib/debian/tests/test_debfile.py")
10165 #t)))))
10166 (propagated-inputs
10167 `(("python-six" ,python-six)
10168 ("python-chardet" ,python-chardet)))
10169 (synopsis "Debian package related modules")
10170 (description
10171 ;; XXX: Use @enumerate instead of @itemize to work around
10172 ;; <http://bugs.gnu.org/21772>.
10173 "This package provides Python modules that abstract many formats of
10174 Debian-related files, such as:
10175
10176 @enumerate
10177 @item Debtags information;
10178 @item @file{debian/changelog} files;
10179 @item packages files, pdiffs;
10180 @item control files of single or multiple RFC822-style paragraphs---e.g.
10181 @file{debian/control}, @file{.changes}, @file{.dsc};
10182 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
10183 contained files and meta-information.
10184 @end enumerate\n")
10185
10186 ;; Modules are either GPLv2+ or GPLv3+.
10187 (license license:gpl3+)))
10188
10189 (define-public python-nbformat
10190 (package
10191 (name "python-nbformat")
10192 (version "4.4.0")
10193 (source
10194 (origin
10195 (method url-fetch)
10196 (uri (pypi-uri "nbformat" version))
10197 (sha256
10198 (base32
10199 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
10200 (build-system python-build-system)
10201 (arguments `(#:tests? #f)) ; no test target
10202 (propagated-inputs
10203 `(("python-ipython-genutils" ,python-ipython-genutils)
10204 ("python-jsonschema" ,python-jsonschema)
10205 ("python-jupyter-core" ,python-jupyter-core)
10206 ("python-traitlets" ,python-traitlets)))
10207 (home-page "https://jupyter.org")
10208 (synopsis "Jupyter Notebook format")
10209 (description "This package provides the reference implementation of the
10210 Jupyter Notebook format and Python APIs for working with notebooks.")
10211 (license license:bsd-3)))
10212
10213 (define-public python2-nbformat
10214 (package-with-python2 python-nbformat))
10215
10216 (define-public python-bleach
10217 (package
10218 (name "python-bleach")
10219 (version "3.1.5")
10220 (source
10221 (origin
10222 (method url-fetch)
10223 (uri (pypi-uri "bleach" version))
10224 (sha256
10225 (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
10226 (build-system python-build-system)
10227 (propagated-inputs
10228 `(("python-webencodings" ,python-webencodings)
10229 ("python-six" ,python-six)))
10230 (native-inputs
10231 `(("python-datrie" ,python-datrie)
10232 ("python-genshi" ,python-genshi)
10233 ("python-lxml" ,python-lxml)
10234 ("python-pytest" ,python-pytest)))
10235 (home-page "https://github.com/mozilla/bleach")
10236 (synopsis "Whitelist-based HTML-sanitizing tool")
10237 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
10238 (license license:asl2.0)))
10239
10240 (define-public python2-bleach
10241 (package-with-python2 python-bleach))
10242
10243 (define-public python-entrypoints
10244 (package
10245 (name "python-entrypoints")
10246 (version "0.3")
10247 (source
10248 (origin
10249 (method url-fetch)
10250 (uri (pypi-uri "entrypoints" version))
10251 (sha256
10252 (base32
10253 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
10254 (build-system python-build-system)
10255 ;; The package does not come with a setup.py file, so we have to generate
10256 ;; one ourselves.
10257 (arguments
10258 `(#:tests? #f
10259 #:phases
10260 (modify-phases %standard-phases
10261 (add-after 'unpack 'create-setup.py
10262 (lambda _
10263 (call-with-output-file "setup.py"
10264 (lambda (port)
10265 (format port "\
10266 from setuptools import setup
10267 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
10268 " ,version))))))))
10269 (home-page "https://github.com/takluyver/entrypoints")
10270 (synopsis "Discover and load entry points from installed Python packages")
10271 (description "Entry points are a way for Python packages to advertise
10272 objects with some common interface. The most common examples are
10273 @code{console_scripts} entry points, which define shell commands by
10274 identifying a Python function to run. The @code{entrypoints} module contains
10275 functions to find and load entry points.")
10276 (license license:expat)))
10277
10278 (define-public python2-entrypoints
10279 (package-with-python2 python-entrypoints))
10280
10281 (define-public python-epc
10282 (package
10283 (name "python-epc")
10284 (version "0.0.5")
10285 (source
10286 (origin
10287 (method url-fetch)
10288 (uri (pypi-uri "epc" version))
10289 (sha256
10290 (base32
10291 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
10292 (build-system python-build-system)
10293 (propagated-inputs
10294 `(("python-sexpdata" ,python-sexpdata)))
10295 (native-inputs
10296 `(("python-nose" ,python-nose)))
10297 (home-page "https://github.com/tkf/python-epc")
10298 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
10299 (description
10300 "Python-EPC can call elisp functions from Python and Python functions
10301 from elisp.")
10302 (license license:gpl3)))
10303
10304 (define-public python-forex-python
10305 (package
10306 (name "python-forex-python")
10307 (version "1.5")
10308 (source
10309 (origin
10310 (method url-fetch)
10311 (uri (pypi-uri "forex-python" version))
10312 (sha256
10313 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
10314 (build-system python-build-system)
10315 (arguments
10316 ;; Tests are not included in the PyPI tarball. Also, the tests in the
10317 ;; repository require online data.
10318 `(#:tests? #f))
10319 (propagated-inputs
10320 `(("python-requests" ,python-requests)
10321 ("python-simplejson" ,python-simplejson)))
10322 (home-page "https://github.com/MicroPyramid/forex-python")
10323 (synopsis "Foreign exchange rates and currency conversion")
10324 (description
10325 "@code{python-forex-python} can be used to manipulate foreign
10326 exchange rates and to operate currency conversions.
10327
10328 Features:
10329 @itemize
10330 @item List all currency rates.
10331 @item BitCoin price for all currencies.
10332 @item Converting amount to BitCoins.
10333 @item Get historical rates for any day since 1999.
10334 @item Conversion rate for one currency(ex; USD to INR).
10335 @item Convert amount from one currency to other.('USD 10$' to INR).
10336 @item Currency symbols.
10337 @item Currency names.
10338 @end itemize")
10339 (license license:expat)))
10340
10341 (define-public python-simpleeval
10342 (package
10343 (name "python-simpleeval")
10344 (version "0.9.10")
10345 (source
10346 (origin
10347 (method url-fetch)
10348 (uri (pypi-uri "simpleeval" version))
10349 (sha256
10350 (base32 "1skvl467kj83rzkhk01i0wm8m5vmh6j5znrfdizn6r18ii45a839"))))
10351 (build-system python-build-system)
10352 (home-page "https://github.com/danthedeckie/simpleeval")
10353 (synopsis "Simple, safe single expression evaluator library")
10354 (description
10355 "This package provides a quick single file library for easily adding
10356 evaluatable expressions into python projects. Say you want to allow a user
10357 to set an alarm volume, which could depend on the time of day, alarm level,
10358 how many previous alarms had gone off, and if there is music playing at the
10359 time.")
10360 (license license:expat)))
10361
10362 (define-public python-nbconvert
10363 (package
10364 (name "python-nbconvert")
10365 (version "5.0.0b1")
10366 (source
10367 (origin
10368 (method url-fetch)
10369 (uri (pypi-uri "nbconvert" version))
10370 (sha256
10371 (base32
10372 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
10373 (build-system python-build-system)
10374 (arguments
10375 `(;; The "bdist_egg" target is disabled by default, causing the installation
10376 ;; to fail.
10377 #:configure-flags (list "bdist_egg")
10378 ;; FIXME: 5 failures, 40 errors.
10379 #:tests? #f))
10380 ;; #:phases
10381 ;; (modify-phases %standard-phases
10382 ;; (replace 'check
10383 ;; (lambda _
10384 ;; (zero? (system* "py.test" "-v")))))
10385 (native-inputs
10386 `(("python-pytest" ,python-pytest)))
10387 (propagated-inputs
10388 `(("python-bleach" ,python-bleach)
10389 ("python-entrypoints" ,python-entrypoints)
10390 ("python-jinja2" ,python-jinja2)
10391 ("python-jupyter-core" ,python-jupyter-core)
10392 ("python-mistune" ,python-mistune)
10393 ("python-nbformat" ,python-nbformat)
10394 ("python-pygments" ,python-pygments)
10395 ("python-traitlets" ,python-traitlets)))
10396 (home-page "https://jupyter.org")
10397 (synopsis "Converting Jupyter Notebooks")
10398 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
10399 notebooks to various other formats via Jinja templates. It allows you to
10400 convert an @code{.ipynb} notebook file into various static formats including:
10401
10402 @enumerate
10403 @item HTML
10404 @item LaTeX
10405 @item PDF
10406 @item Reveal JS
10407 @item Markdown (md)
10408 @item ReStructured Text (rst)
10409 @item executable script
10410 @end enumerate\n")
10411 (license license:bsd-3)))
10412
10413 (define-public python2-nbconvert
10414 (package-with-python2 python-nbconvert))
10415
10416 (define-public python-notebook
10417 (package
10418 (name "python-notebook")
10419 (version "5.7.4")
10420 (source (origin
10421 (method url-fetch)
10422 (uri (pypi-uri "notebook" version))
10423 (sha256
10424 (base32
10425 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
10426 (build-system python-build-system)
10427 (arguments
10428 `(#:phases
10429 (modify-phases %standard-phases
10430 (replace 'check
10431 (lambda _
10432 ;; These tests require a browser
10433 (delete-file-recursively "notebook/tests/selenium")
10434 ;; Some tests need HOME
10435 (setenv "HOME" "/tmp")
10436 ;; This file contains "warningfilters", which are not supported
10437 ;; by this version of nose.
10438 (delete-file "setup.cfg")
10439 (with-directory-excursion "/tmp"
10440 (invoke "nosetests" "-v"))
10441 #t)))))
10442 (propagated-inputs
10443 `(("python-jupyter-core" ,python-jupyter-core)
10444 ("python-nbformat" ,python-nbformat)
10445 ("python-nbconvert" ,python-nbconvert)
10446 ("python-prometheus-client" ,python-prometheus-client)
10447 ("python-send2trash" ,python-send2trash)
10448 ("python-terminado" ,python-terminado)))
10449 (native-inputs
10450 `(("python-nose" ,python-nose)
10451 ("python-sphinx" ,python-sphinx)
10452 ("python-requests" ,python-requests)))
10453 (home-page "https://jupyter.org/")
10454 (synopsis "Web-based notebook environment for interactive computing")
10455 (description
10456 "The Jupyter HTML notebook is a web-based notebook environment for
10457 interactive computing.")
10458 (properties `((python2-variant . ,(delay python2-notebook))))
10459 (license license:bsd-3)))
10460
10461 (define-public python2-notebook
10462 (let ((base (package-with-python2
10463 (strip-python2-variant python-notebook))))
10464 (package/inherit base
10465 (native-inputs
10466 `(("python2-mock" ,python2-mock)
10467 ,@(package-native-inputs base)))
10468 (arguments
10469 (substitute-keyword-arguments (package-arguments base)
10470 ((#:phases phases)
10471 `(modify-phases ,phases
10472 (add-before 'check 'disable-test-case
10473 ;; The test requires network access to localhost. Curiously it
10474 ;; fails with Python 2 only. Simply make the test-case return
10475 ;; immediately.
10476 (lambda _
10477 (substitute*
10478 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
10479 (("formats = self.nbconvert_api") "return #")))))))))))
10480
10481 (define-public python-widgetsnbextension
10482 (package
10483 (name "python-widgetsnbextension")
10484 (version "3.5.1")
10485 (source
10486 (origin
10487 (method url-fetch)
10488 (uri (pypi-uri "widgetsnbextension" version))
10489 (sha256
10490 (base32
10491 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
10492 (build-system python-build-system)
10493 (propagated-inputs
10494 `(("python-ipykernel" ,python-ipykernel)
10495 ("python-notebook" ,python-notebook)))
10496 (native-inputs
10497 `(("python-certifi" ,python-certifi)
10498 ("python-nose" ,python-nose)))
10499 (home-page "https://ipython.org")
10500 (synopsis "IPython HTML widgets for Jupyter")
10501 (description "This package provides interactive HTML widgets for Jupyter
10502 notebooks.")
10503 (license license:bsd-3)))
10504
10505 (define-public python-ipywidgets
10506 (package
10507 (name "python-ipywidgets")
10508 (version "7.5.1")
10509 (source
10510 (origin
10511 (method url-fetch)
10512 (uri (pypi-uri "ipywidgets" version))
10513 (sha256
10514 (base32
10515 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
10516 (build-system python-build-system)
10517 (propagated-inputs
10518 `(("python-ipython" ,python-ipython)
10519 ("python-traitlets" ,python-traitlets)
10520 ("python-widgetsnbextension" ,python-widgetsnbextension)))
10521 (native-inputs
10522 `(("python-nose" ,python-nose)
10523 ("python-pytest" ,python-pytest)))
10524 (home-page "https://ipython.org")
10525 (synopsis "IPython HTML widgets for Jupyter")
10526 (description "Ipywidgets are interactive HTML widgets for Jupyter
10527 notebooks and the IPython kernel. Notebooks come alive when interactive
10528 widgets are used. Users gain control of their data and can visualize changes
10529 in the data.")
10530 (license license:bsd-3)))
10531
10532 (define-public python-jupyter-console
10533 (package
10534 (name "python-jupyter-console")
10535 (version "6.1.0")
10536 (source
10537 (origin
10538 (method url-fetch)
10539 (uri (pypi-uri "jupyter_console" version))
10540 (sha256
10541 (base32
10542 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
10543 (build-system python-build-system)
10544 (propagated-inputs
10545 `(("python-ipykernel" ,python-ipykernel)
10546 ("python-jupyter-client" ,python-jupyter-client)
10547 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
10548 ("python-pygments" ,python-pygments)))
10549 (native-inputs
10550 `(("python-nose" ,python-nose)))
10551 (home-page "https://jupyter.org")
10552 (synopsis "Jupyter terminal console")
10553 (description "This package provides a terminal-based console frontend for
10554 Jupyter kernels. It also allows for console-based interaction with non-Python
10555 Jupyter kernels such as IJulia and IRKernel.")
10556 (properties `((python2-variant . ,(delay python2-jupyter-console))))
10557 (license license:bsd-3)))
10558
10559 (define-public python2-jupyter-console
10560 (package
10561 (name "python2-jupyter-console")
10562 (version "5.2.0")
10563 (source
10564 (origin
10565 (method url-fetch)
10566 (uri (pypi-uri "jupyter_console" version))
10567 (sha256
10568 (base32
10569 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
10570 (build-system python-build-system)
10571 (arguments
10572 `(#:python ,python-2
10573 #:tests? #f)) ; Tests only run in a TTY.
10574 (propagated-inputs
10575 `(("python2-ipykernel" ,python2-ipykernel)
10576 ("python2-jupyter-client" ,python2-jupyter-client)
10577 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
10578 ("python2-pygments" ,python2-pygments)))
10579 (native-inputs
10580 `(("python2-nose" ,python2-nose)))
10581 (home-page "https://jupyter.org")
10582 (synopsis "Jupyter terminal console")
10583 (description "This package provides a terminal-based console frontend for
10584 Jupyter kernels. It also allows for console-based interaction with non-Python
10585 Jupyter kernels such as IJulia and IRKernel.")
10586 (license license:bsd-3)))
10587
10588 ;; The python-ipython and python-jupyter-console require each other. To get
10589 ;; the functionality in both packages working, strip down the
10590 ;; python-jupyter-console package when using it as an input to python-ipython.
10591 (define python-jupyter-console-minimal
10592 (package/inherit python-jupyter-console
10593 (name "python-jupyter-console-minimal")
10594 (arguments
10595 (substitute-keyword-arguments
10596 (package-arguments python-jupyter-console)
10597 ((#:phases phases)
10598 `(modify-phases ,phases
10599 (add-after 'install 'delete-bin
10600 (lambda* (#:key outputs #:allow-other-keys)
10601 ;; Delete the bin files, to avoid conflicts in profiles
10602 ;; where python-ipython and python-jupyter-console are
10603 ;; both present.
10604 (delete-file-recursively
10605 (string-append
10606 (assoc-ref outputs "out") "/bin"))))))))
10607 ;; Remove the python-ipython propagated input, to avoid the cycle
10608 (propagated-inputs
10609 (alist-delete
10610 "python-ipython"
10611 (package-propagated-inputs python-jupyter-console)))))
10612
10613 (define-public python-qtconsole
10614 (package
10615 (name "python-qtconsole")
10616 (version "4.4.3")
10617 (source
10618 (origin
10619 (method url-fetch)
10620 (uri (pypi-uri "qtconsole" version))
10621 (sha256
10622 (base32
10623 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
10624 (build-system python-build-system)
10625 (arguments
10626 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
10627 ;; but we only have the LTS version 5.x. This means that there might be
10628 ;; runtime errors, but since this is a dependency of the Jupyter package,
10629 ;; and Jupyter can be used without the qtconsole we can overlook this for
10630 ;; now.
10631 `(#:tests? #f
10632 #:phases
10633 (modify-phases %standard-phases
10634 (add-before 'check 'pre-check
10635 (lambda _
10636 (setenv "QT_QPA_PLATFORM" "offscreen")
10637 #t)))))
10638 (propagated-inputs
10639 `(("python-ipykernel" ,python-ipykernel)
10640 ("python-ipython" ,python-ipython)))
10641 (native-inputs
10642 `(("python-pytest" ,python-pytest)))
10643 (home-page "https://jupyter.org")
10644 (synopsis "Jupyter Qt console")
10645 (description "This package provides a Qt-based console for Jupyter with
10646 support for rich media output.")
10647 (license license:bsd-3)))
10648
10649 (define-public python-jsbeautifier
10650 (package
10651 (name "python-jsbeautifier")
10652 (version "1.10.2")
10653 (home-page "https://github.com/beautify-web/js-beautify")
10654 (source (origin
10655 (method git-fetch)
10656 (uri (git-reference
10657 (url home-page)
10658 (commit (string-append "v" version))))
10659 (file-name (git-file-name name version))
10660 (sha256
10661 (base32
10662 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
10663 (build-system python-build-system)
10664 (arguments
10665 `(#:phases (modify-phases %standard-phases
10666 (add-after 'unpack 'chdir
10667 (lambda _
10668 ;; The upstream Git repository contains all the code,
10669 ;; but this package only builds the python code.
10670 (chdir "python")
10671 #t))
10672 (add-after 'unpack 'patch-python-six-requirements
10673 (lambda _
10674 (substitute* "python/setup.py"
10675 (("six>=1.12.0")
10676 "six>=1.11.0"))
10677 #t)))))
10678 (propagated-inputs
10679 `(("python-editorconfig" ,python-editorconfig)
10680 ("python-six" ,python-six)))
10681 (native-inputs
10682 `(("python-pytest" ,python-pytest)))
10683 (synopsis "JavaScript unobfuscator and beautifier")
10684 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
10685 popular online obfuscators.")
10686 (license license:expat)))
10687
10688 (define-public jupyter
10689 (package
10690 (name "jupyter")
10691 (version "1.0.0")
10692 (source
10693 (origin
10694 (method url-fetch)
10695 (uri (pypi-uri "jupyter" version))
10696 (sha256
10697 (base32
10698 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
10699 (build-system python-build-system)
10700 (arguments '(#:tests? #f)) ; there are none.
10701 (propagated-inputs
10702 `(("python-ipykernel" ,python-ipykernel)
10703 ("python-ipywidgets" ,python-ipywidgets)
10704 ("python-jupyter-console" ,python-jupyter-console)
10705 ("python-nbconvert" ,python-nbconvert)
10706 ("python-notebook" ,python-notebook)
10707 ("python-qtconsole" ,python-qtconsole)))
10708 (native-search-paths
10709 (list (search-path-specification
10710 (variable "JUPYTER_PATH")
10711 (files '("share/jupyter")))))
10712 (home-page "https://jupyter.org")
10713 (synopsis "Web application for interactive documents")
10714 (description
10715 "The Jupyter Notebook is a web application that allows you to create and
10716 share documents that contain live code, equations, visualizations and
10717 explanatory text. Uses include: data cleaning and transformation, numerical
10718 simulation, statistical modeling, machine learning and much more.")
10719 (license license:bsd-3)))
10720
10721 (define-public python-chardet
10722 (package
10723 (name "python-chardet")
10724 (version "3.0.4")
10725 (source
10726 (origin
10727 (method url-fetch)
10728 (uri (pypi-uri "chardet" version))
10729 (sha256
10730 (base32
10731 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
10732 (native-inputs
10733 `(("python-hypothesis" ,python-hypothesis)
10734 ("python-pytest" ,python-pytest)
10735 ("python-pytest-runner" ,python-pytest-runner)))
10736 (build-system python-build-system)
10737 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
10738 (arguments `(#:tests? #f))
10739 (home-page "https://github.com/chardet/chardet")
10740 (synopsis "Universal encoding detector for Python 2 and 3")
10741 (description
10742 "This package provides @code{chardet}, a Python module that can
10743 automatically detect a wide range of file encodings.")
10744 (license license:lgpl2.1+)))
10745
10746 (define-public python2-chardet
10747 (package-with-python2 python-chardet))
10748
10749 (define-public python-docopt
10750 (package
10751 (name "python-docopt")
10752 (version "0.6.2")
10753 (source
10754 (origin
10755 (method git-fetch)
10756 ;; The release on PyPI does not include tests.
10757 (uri (git-reference
10758 (url "https://github.com/docopt/docopt")
10759 (commit version)))
10760 (file-name (git-file-name name version))
10761 (sha256
10762 (base32
10763 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
10764 (build-system python-build-system)
10765 (native-inputs
10766 `(("python-pytest" ,python-pytest)))
10767 (arguments
10768 `(#:phases
10769 (modify-phases %standard-phases
10770 (replace 'check
10771 (lambda _ (invoke "py.test"))))))
10772 (home-page "http://docopt.org")
10773 (synopsis "Command-line interface description language for Python")
10774 (description "This library allows the user to define a command-line
10775 interface from a program's help message rather than specifying it
10776 programmatically with command-line parsers like @code{getopt} and
10777 @code{argparse}.")
10778 (license license:expat)))
10779
10780 (define-public python2-docopt
10781 (package-with-python2 python-docopt))
10782
10783 (define-public python-pythondialog
10784 (package
10785 (name "python-pythondialog")
10786 (version "3.4.0")
10787 (source
10788 (origin
10789 (method url-fetch)
10790 (uri (pypi-uri "pythondialog" version))
10791 (sha256
10792 (base32
10793 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
10794 (build-system python-build-system)
10795 (arguments
10796 `(#:phases
10797 (modify-phases %standard-phases
10798 (add-after 'unpack 'patch-path
10799 (lambda* (#:key inputs #:allow-other-keys)
10800 (let* ((dialog (assoc-ref inputs "dialog")))
10801 ;; Since this library really wants to grovel the search path, we
10802 ;; must hardcode dialog's store path into it.
10803 (substitute* "dialog.py"
10804 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
10805 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
10806 #t))))
10807 #:tests? #f)) ; no test suite
10808 (propagated-inputs
10809 `(("dialog" ,dialog)))
10810 (home-page "http://pythondialog.sourceforge.net/")
10811 (synopsis "Python interface to the UNIX dialog utility")
10812 (description "A Python wrapper for the dialog utility. Its purpose is to
10813 provide an easy to use, pythonic and comprehensive Python interface to dialog.
10814 This allows one to make simple text-mode user interfaces on Unix-like systems")
10815 (license license:lgpl2.1)
10816 (properties `((python2-variant . ,(delay python2-pythondialog))))))
10817
10818 (define-public python2-pythondialog
10819 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
10820 (package
10821 (inherit base)
10822 (version (package-version python-pythondialog))
10823 (source (origin
10824 (method url-fetch)
10825 (uri (pypi-uri "python2-pythondialog" version))
10826 (sha256
10827 (base32
10828 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
10829
10830 (define-public python-configobj
10831 (package
10832 (name "python-configobj")
10833 (version "5.0.6")
10834 (source (origin
10835 (method url-fetch)
10836 (uri (pypi-uri "configobj" version))
10837 (sha256
10838 (base32
10839 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
10840 ;; Patch setup.py so it looks for python-setuptools, which is
10841 ;; required to parse the keyword 'install_requires' in setup.py.
10842 (patches (search-patches "python-configobj-setuptools.patch"))))
10843 (build-system python-build-system)
10844 (propagated-inputs
10845 `(("python-six" ,python-six)))
10846 (synopsis "Config file reading, writing and validation")
10847 (description "ConfigObj is a simple but powerful config file reader and
10848 writer: an ini file round tripper. Its main feature is that it is very easy to
10849 use, with a straightforward programmer’s interface and a simple syntax for
10850 config files.")
10851 (home-page "https://github.com/DiffSK/configobj")
10852 (license license:bsd-3)))
10853
10854 (define-public python2-configobj
10855 (package-with-python2 python-configobj))
10856
10857 (define-public python-configargparse
10858 (package
10859 (name "python-configargparse")
10860 (version "1.2.3")
10861 (source (origin
10862 (method url-fetch)
10863 (uri (pypi-uri "ConfigArgParse" version))
10864 (sha256
10865 (base32
10866 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
10867 (build-system python-build-system)
10868 (native-inputs
10869 `(("python-pyyaml" ,python-pyyaml)))
10870 (arguments
10871 `(#:phases
10872 (modify-phases %standard-phases
10873 (replace 'check
10874 (lambda _
10875 ;; Bypass setuptools-shim because one test relies on "setup.py"
10876 ;; being the first argument passed to the python call.
10877 ;;
10878 ;; NOTE: Many tests do not run because they rely on Python's
10879 ;; built-in test.test_argparse, but we remove the unit tests from
10880 ;; our Python installation.
10881 (invoke "python" "setup.py" "test"))))))
10882 (synopsis "Replacement for argparse")
10883 (description "A drop-in replacement for argparse that allows options to also
10884 be set via config files and/or environment variables.")
10885 (home-page "https://github.com/bw2/ConfigArgParse")
10886 (license license:expat)))
10887
10888 (define-public python-argparse-manpage
10889 (package
10890 (name "python-argparse-manpage")
10891 (version "1.1")
10892 (source
10893 (origin
10894 (method url-fetch)
10895 (uri (pypi-uri "argparse-manpage" version))
10896 (sha256
10897 (base32
10898 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
10899 (build-system python-build-system)
10900 (home-page "https://github.com/praiskup/argparse-manpage")
10901 (synopsis "Build manual page from Python's ArgumentParser object")
10902 (description
10903 "This package provides tools to build manual pages from Python's
10904 @code{ArgumentParser} object.")
10905 (license license:asl2.0)))
10906
10907 (define-public python-contextlib2
10908 (package
10909 (name "python-contextlib2")
10910 (version "0.6.0.post1")
10911 (source
10912 (origin
10913 (method url-fetch)
10914 (uri (pypi-uri "contextlib2" version))
10915 (sha256
10916 (base32
10917 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
10918 (build-system python-build-system)
10919 (home-page "https://contextlib2.readthedocs.org/")
10920 (synopsis "Tools for decorators and context managers")
10921 (description "This module is primarily a backport of the Python
10922 3.2 contextlib to earlier Python versions. Like contextlib, it
10923 provides utilities for common tasks involving decorators and context
10924 managers. It also contains additional features that are not part of
10925 the standard library.")
10926 (properties `((python2-variant . ,(delay python2-contextlib2))))
10927 (license license:psfl)))
10928
10929 (define-public python2-contextlib2
10930 (let ((base (package-with-python2
10931 (strip-python2-variant python-contextlib2))))
10932 (package/inherit base
10933 (arguments
10934 (substitute-keyword-arguments (package-arguments base)
10935 ((#:phases phases)
10936 `(modify-phases ,phases
10937 (replace 'check
10938 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
10939 (native-inputs
10940 `(("python2-unittest2" ,python2-unittest2))))))
10941
10942 ;; This package is used by python2-pytest via python2-importlib-metadata,
10943 ;; and thus can not depend on python-unittest2 (which depends on pytest).
10944 (define-public python2-contextlib2-bootstrap
10945 (hidden-package
10946 (package/inherit
10947 python2-contextlib2
10948 (name "python2-contextlib2-bootstrap")
10949 (arguments
10950 `(#:tests? #f
10951 ,@(package-arguments python2-contextlib2)))
10952 (native-inputs '()))))
10953
10954 (define-public python-texttable
10955 (package
10956 (name "python-texttable")
10957 (version "1.6.2")
10958 (source
10959 (origin
10960 (method url-fetch)
10961 (uri (pypi-uri "texttable" version))
10962 (sha256
10963 (base32
10964 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
10965 (build-system python-build-system)
10966 (arguments
10967 `(#:phases
10968 (modify-phases %standard-phases
10969 (replace 'check
10970 (lambda _ (invoke "pytest" "tests.py"))))))
10971 (native-inputs
10972 `(("python-pytest" ,python-pytest)))
10973 (home-page "https://github.com/foutaise/texttable/")
10974 (synopsis "Python module for creating simple ASCII tables")
10975 (description "Texttable is a Python module for creating simple ASCII
10976 tables.")
10977 (license license:expat)))
10978
10979 (define-public python2-texttable
10980 (package-with-python2 python-texttable))
10981
10982 (define-public python-atomicwrites
10983 (package
10984 (name "python-atomicwrites")
10985 (version "1.3.0")
10986 (source (origin
10987 (method url-fetch)
10988 (uri (pypi-uri "atomicwrites" version))
10989 (sha256
10990 (base32
10991 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
10992 (build-system python-build-system)
10993 (synopsis "Atomic file writes in Python")
10994 (description "Library for atomic file writes using platform dependent tools
10995 for atomic file system operations.")
10996 (home-page "https://github.com/untitaker/python-atomicwrites")
10997 (license license:expat)))
10998
10999 (define-public python2-atomicwrites
11000 (package-with-python2 python-atomicwrites))
11001
11002 (define-public python-click-threading
11003 (package
11004 (name "python-click-threading")
11005 (version "0.4.4")
11006 (source (origin
11007 (method url-fetch)
11008 (uri (pypi-uri "click-threading" version))
11009 (sha256
11010 (base32
11011 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
11012 (build-system python-build-system)
11013 (propagated-inputs
11014 `(("python-click" ,python-click)))
11015 (synopsis "Utilities for multithreading in Click")
11016 (description "This package provides utilities for multithreading in Click
11017 applications.")
11018 (home-page "https://github.com/click-contrib/click-threading")
11019 (license license:expat)))
11020
11021 (define-public python-click-log
11022 (package
11023 (name "python-click-log")
11024 (version "0.3.2")
11025 (source (origin
11026 (method url-fetch)
11027 (uri (pypi-uri "click-log" version))
11028 (sha256
11029 (base32
11030 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
11031 (build-system python-build-system)
11032 (propagated-inputs
11033 `(("python-click" ,python-click)))
11034 (synopsis "Logging for click applications")
11035 (description "This package provides a Python library for logging Click
11036 applications.")
11037 (home-page "https://github.com/click-contrib/click-log")
11038 (license license:expat)))
11039
11040 (define-public python-click-default-group
11041 (package
11042 (name "python-click-default-group")
11043 (version "1.2.2")
11044 (source (origin
11045 (method url-fetch)
11046 (uri (pypi-uri "click-default-group" version))
11047 (sha256
11048 (base32
11049 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
11050 (build-system python-build-system)
11051 (arguments
11052 `(#:tests? #f)) ; no target
11053 (propagated-inputs
11054 `(("python-click" ,python-click)))
11055 (synopsis "Extends click.Group")
11056 (description "This package extends click.Group to invoke a command without
11057 explicit subcommand name.")
11058 (home-page "https://github.com/click-contrib/click-default-group")
11059 (license license:bsd-3)))
11060
11061 (define-public python-structlog
11062 (package
11063 (name "python-structlog")
11064 (version "20.2.0")
11065 (source
11066 (origin
11067 (method url-fetch)
11068 (uri (pypi-uri "structlog" version))
11069 (sha256
11070 (base32
11071 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
11072 (build-system python-build-system)
11073 (arguments
11074 `(#:phases
11075 (modify-phases %standard-phases
11076 (replace 'check
11077 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11078 (when tests?
11079 (add-installed-pythonpath inputs outputs)
11080 (invoke "pytest"))
11081 #t)))))
11082 (native-inputs
11083 `(("python-coverage" ,python-coverage)
11084 ("python-freezegun" ,python-freezegun)
11085 ("python-pretend" ,python-pretend)
11086 ("python-pytest" ,python-pytest)
11087 ("python-pytest-asyncio" ,python-pytest-asyncio)
11088 ("python-simplejson" ,python-simplejson)
11089 ("python-twisted" ,python-twisted)))
11090 (home-page "https://www.structlog.org/")
11091 (synopsis "Structured Logging for Python")
11092 (description "@code{structlog} changes logging in Python by adding structure
11093 to your log entries.")
11094 (license (list license:asl2.0 license:expat))))
11095
11096 (define-public python-apipkg
11097 (package
11098 (name "python-apipkg")
11099 (version "1.5")
11100 (source (origin
11101 (method url-fetch)
11102 (uri (pypi-uri "apipkg" version))
11103 (sha256
11104 (base32
11105 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
11106 (build-system python-build-system)
11107 (native-inputs
11108 `(("python-pytest" ,python-pytest)
11109 ("python-setuptools-scm" ,python-setuptools-scm)))
11110 (synopsis "Namespace control and lazy-import mechanism")
11111 (description "With apipkg you can control the exported namespace of a Python
11112 package and greatly reduce the number of imports for your users. It is a small
11113 pure Python module that works on virtually all Python versions.")
11114 (home-page "https://github.com/pytest-dev/apipkg")
11115 (license license:expat)))
11116
11117 (define-public python-execnet
11118 (package
11119 (name "python-execnet")
11120 (version "1.4.1")
11121 (source (origin
11122 (method url-fetch)
11123 (uri (pypi-uri "execnet" version))
11124 (sha256
11125 (base32
11126 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
11127 (build-system python-build-system)
11128 (arguments
11129 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
11130 ;; The two test failures are caused by the lack of an `ssh` executable.
11131 ;; The test suite can be run with pytest after the 'install' phase.
11132 #:tests? #f))
11133 (native-inputs
11134 `(("python-pytest" ,python-pytest)
11135 ("python-setuptools-scm" ,python-setuptools-scm)))
11136 (propagated-inputs
11137 `(("python-apipkg" ,python-apipkg)))
11138 (synopsis "Rapid multi-Python deployment")
11139 (description "Execnet provides a share-nothing model with
11140 channel-send/receive communication for distributing execution across many
11141 Python interpreters across version, platform and network barriers. It has a
11142 minimal and fast API targeting the following uses:
11143 @enumerate
11144 @item distribute tasks to (many) local or remote CPUs
11145 @item write and deploy hybrid multi-process applications
11146 @item write scripts to administer multiple environments
11147 @end enumerate")
11148 (home-page "https://codespeak.net/execnet/")
11149 (license license:expat)))
11150
11151 (define-public python2-execnet
11152 (package-with-python2 python-execnet))
11153
11154 (define-public python-icalendar
11155 (package
11156 (name "python-icalendar")
11157 (version "4.0.7")
11158 (source (origin
11159 (method url-fetch)
11160 (uri (pypi-uri "icalendar" version))
11161 (sha256
11162 (base32
11163 "19574j3jwssm2dkqykih4568xqfgjsa3hcd79yl5s2vfys3qvh8g"))))
11164 (build-system python-build-system)
11165 (propagated-inputs
11166 `(("python-dateutil" ,python-dateutil)
11167 ("python-pytz" ,python-pytz)))
11168 (synopsis "Python library for parsing iCalendar files")
11169 (description "The icalendar package is a parser/generator of iCalendar
11170 files for use with Python.")
11171 (home-page "https://github.com/collective/icalendar")
11172 (license license:bsd-2)))
11173
11174 (define-public python-args
11175 (package
11176 (name "python-args")
11177 (version "0.1.0")
11178 (source (origin
11179 (method url-fetch)
11180 (uri (pypi-uri "args" version))
11181 (sha256
11182 (base32
11183 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
11184 (build-system python-build-system)
11185 (home-page "https://github.com/kennethreitz/args")
11186 (synopsis "Command-line argument parser")
11187 (description
11188 "This library provides a Python module to parse command-line arguments.")
11189 (license license:bsd-3)))
11190
11191 (define-public python2-args
11192 (package-with-python2 python-args))
11193
11194 (define-public python-clint
11195 (package
11196 (name "python-clint")
11197 (version "0.5.1")
11198 (source (origin
11199 (method url-fetch)
11200 (uri (pypi-uri "clint" version))
11201 (sha256
11202 (base32
11203 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
11204 (build-system python-build-system)
11205 (arguments
11206 '(#:phases
11207 (modify-phases %standard-phases
11208 (replace 'check
11209 (lambda _ (invoke "py.test" "-v"))))))
11210 (native-inputs
11211 `(("python-pytest" ,python-pytest)))
11212 (propagated-inputs
11213 `(("python-args" ,python-args)))
11214 (home-page "https://github.com/kennethreitz/clint")
11215 (synopsis "Command-line interface tools")
11216 (description
11217 "Clint is a Python module filled with a set of tools for developing
11218 command-line applications, including tools for colored and indented
11219 output, progress bar display, and pipes.")
11220 (license license:isc)))
11221
11222 (define-public python2-clint
11223 (package-with-python2 python-clint))
11224
11225 (define-public python-rply
11226 (package
11227 (name "python-rply")
11228 (version "0.7.5")
11229 (source (origin
11230 (method url-fetch)
11231 (uri (pypi-uri "rply" version))
11232 (sha256
11233 (base32
11234 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
11235 (build-system python-build-system)
11236 (propagated-inputs
11237 `(("python-appdirs" ,python-appdirs)))
11238 (home-page "https://github.com/alex/rply")
11239 (synopsis "Parser generator for Python")
11240 (description
11241 "This package provides a pure Python based parser generator, that also
11242 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
11243 with a new public API, and RPython support.")
11244 (license license:bsd-3)))
11245
11246 (define-public python2-rply
11247 (package-with-python2 python-rply))
11248
11249 (define-public python-hy
11250 (package
11251 (name "python-hy")
11252 (version "0.18.0")
11253 (source (origin
11254 (method url-fetch)
11255 (uri (pypi-uri "hy" version))
11256 (sha256
11257 (base32
11258 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
11259 (build-system python-build-system)
11260 (arguments
11261 '(#:phases
11262 (modify-phases %standard-phases
11263 (add-before 'install 'set-HOME
11264 (lambda _
11265 (setenv "HOME" "/tmp") #t))
11266 (replace 'check
11267 (lambda _
11268 ;; Tests require write access to HOME.
11269 (setenv "HOME" "/tmp")
11270 (invoke "nosetests"))))))
11271 (native-inputs
11272 `(("python-coverage" ,python-coverage)
11273 ("python-nose" ,python-nose)))
11274 (propagated-inputs
11275 `(("python-astor" ,python-astor)
11276 ("python-colorama" ,python-colorama)
11277 ("python-rply" ,python-rply)
11278 ("python-funcparserlib"
11279 ,python-funcparserlib)))
11280 (home-page "http://hylang.org/")
11281 (synopsis "Lisp frontend to Python")
11282 (description
11283 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
11284 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
11285 Python at your fingertips, in Lisp form.")
11286 (license license:expat)))
11287
11288 (define-public python2-functools32
11289 (package
11290 (name "python2-functools32")
11291 (version "3.2.3-2")
11292 (source
11293 (origin
11294 (method url-fetch)
11295 (uri (pypi-uri "functools32" version))
11296 (sha256
11297 (base32
11298 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
11299 (build-system python-build-system)
11300 (arguments
11301 `(#:python ,python-2
11302 #:tests? #f)) ; no test target
11303 (home-page "https://github.com/MiCHiLU/python-functools32")
11304 (synopsis
11305 "Backport of the functools module from Python 3.2.3")
11306 (description
11307 "This package is a backport of the @code{functools} module from Python
11308 3.2.3 for use with older versions of Python and PyPy.")
11309 (license license:expat)))
11310
11311 (define-public python2-subprocess32
11312 (package
11313 (name "python2-subprocess32")
11314 (version "3.2.7")
11315 (source (origin
11316 (method url-fetch)
11317 (uri (pypi-uri "subprocess32" version))
11318 (sha256
11319 (base32
11320 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
11321 (patches
11322 (search-patches "python2-subprocess32-disable-input-test.patch"))))
11323 (build-system python-build-system)
11324 (arguments
11325 `(#:python ,python-2
11326 ;; The test suite fails with Python > 2.7.13:
11327 ;; import test.support
11328 ;; ImportError: No module named support
11329 #:tests? #f
11330 #:phases
11331 (modify-phases %standard-phases
11332 (add-after 'unpack 'patch-/bin/sh
11333 (lambda _
11334 (substitute* '("subprocess32.py"
11335 "test_subprocess32.py")
11336 (("/bin/sh") (which "sh")))
11337 #t)))))
11338 (home-page "https://github.com/google/python-subprocess32")
11339 (synopsis "Backport of the subprocess module from Python 3.2")
11340 (description
11341 "This is a backport of the @code{subprocess} standard library module
11342 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
11343 new features. On POSIX systems it is guaranteed to be reliable when used
11344 in threaded applications. It includes timeout support from Python 3.3 but
11345 otherwise matches 3.2’s API.")
11346 (license license:psfl)))
11347
11348 (define-public python2-futures
11349 (package
11350 (name "python2-futures")
11351 (version "3.2.0")
11352 (source
11353 (origin
11354 (method url-fetch)
11355 (uri (pypi-uri "futures" version))
11356 (sha256
11357 (base32
11358 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
11359 (build-system python-build-system)
11360 (arguments
11361 `(#:python ,python-2
11362 #:phases
11363 (modify-phases %standard-phases
11364 (replace 'check
11365 (lambda _
11366 (invoke "python" "test_futures.py")
11367 #t)))))
11368 (home-page "https://github.com/agronholm/pythonfutures")
11369 (synopsis
11370 "Backport of the concurrent.futures package from Python 3.2")
11371 (description
11372 "The concurrent.futures module provides a high-level interface for
11373 asynchronously executing callables. This package backports the
11374 concurrent.futures package from Python 3.2")
11375 (license license:bsd-3)))
11376
11377 (define-public python-promise
11378 (package
11379 (name "python-promise")
11380 (version "0.4.2")
11381 (source
11382 (origin
11383 (method url-fetch)
11384 (uri (pypi-uri "promise" version))
11385 (sha256
11386 (base32
11387 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
11388 (build-system python-build-system)
11389 ;; Tests wants python-futures, which is a python2 only program, and
11390 ;; can't be found by python-promise at test time.
11391 (arguments `(#:tests? #f))
11392 (home-page "https://github.com/syrusakbary/promise")
11393 (synopsis "Promises/A+ implementation for Python")
11394 (description
11395 "Promises/A+ implementation for Python")
11396 (properties `((python2-variant . ,(delay python2-promise))))
11397 (license license:expat)))
11398
11399 (define-public python2-promise
11400 (let ((promise (package-with-python2
11401 (strip-python2-variant python-promise))))
11402 (package/inherit promise
11403 (arguments (substitute-keyword-arguments (package-arguments promise)
11404 ((#:tests? _) #t)))
11405 (native-inputs
11406 `(("python2-futures" ,python2-futures)
11407 ("python2-pytest" ,python2-pytest)
11408 ,@(package-native-inputs promise))))))
11409
11410 (define-public python-progressbar2
11411 (package
11412 (name "python-progressbar2")
11413 (version "3.51.3")
11414 (source
11415 (origin
11416 (method url-fetch)
11417 (uri (pypi-uri "progressbar2" version))
11418 (sha256
11419 (base32
11420 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
11421 (build-system python-build-system)
11422 (propagated-inputs
11423 `(("python-six" ,python-six)
11424 ("python-utils" ,python-utils)))
11425 (native-inputs
11426 `(("python-flake8" ,python-flake8)
11427 ("python-freezegun" ,python-freezegun)
11428 ("python-pycodestyle" ,python-pycodestyle)
11429 ("python-pytest" ,python-pytest)
11430 ("python-pytest-cache" ,python-pytest-cache)
11431 ("python-pytest-cov" ,python-pytest-cov)
11432 ("python-pytest-flakes" ,python-pytest-flakes)
11433 ("python-pytest-pep8" ,python-pytest-pep8)
11434 ("python-sphinx" ,python-sphinx)))
11435 (home-page "https://github.com/WoLpH/python-progressbar")
11436 (synopsis "Text progress bar library for Python")
11437 (description
11438 "This package provides a Python progressbar library to provide
11439 visual (yet text based) progress to long running operations.")
11440 (license license:bsd-3)))
11441
11442 (define-public python-progressbar33
11443 (package
11444 (name "python-progressbar33")
11445 (version "2.4")
11446 (source
11447 (origin
11448 (method url-fetch)
11449 (uri (pypi-uri "progressbar33" version))
11450 (sha256
11451 (base32
11452 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
11453 (build-system python-build-system)
11454 (home-page "https://github.com/germangh/python-progressbar")
11455 (synopsis "Text progress bar library for Python")
11456 (description
11457 "This package provides a text progress bar library for Python. This
11458 version only differs from the original @code{progressbar} package in that it
11459 uses relative package imports instead of absolute imports, which is necessary
11460 for the module to work under Python 3.3.")
11461 ;; Either or both of these licenses may be selected.
11462 (license (list license:lgpl2.1+ license:bsd-3))))
11463
11464 (define-public python-colorama
11465 (package
11466 (name "python-colorama")
11467 (version "0.4.4")
11468 (source
11469 (origin
11470 (method url-fetch)
11471 (uri (pypi-uri "colorama" version))
11472 (sha256
11473 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
11474 (build-system python-build-system)
11475 (synopsis "Colored terminal text rendering for Python")
11476 (description "Colorama is a Python library for rendering colored terminal
11477 text.")
11478 (home-page "https://pypi.org/project/colorama/")
11479 (license license:bsd-3)))
11480
11481 (define-public python2-colorama
11482 (package-with-python2 python-colorama))
11483
11484 (define-public python-moto
11485 (package
11486 (name "python-moto")
11487 ;; XXX: Use a pre-release for compatibility with latest botocore & friends.
11488 (version "1.3.16.dev134")
11489 (source (origin
11490 (method url-fetch)
11491 (uri (pypi-uri "moto" version))
11492 (sha256
11493 (base32
11494 "1pix0c7zszjwzfy88n1rpih9vkdm25nqcvz93z850xvgwb4v81bd"))))
11495 (build-system python-build-system)
11496 (arguments
11497 `(#:phases (modify-phases %standard-phases
11498 (add-after 'unpack 'patch-hardcoded-executable-names
11499 (lambda _
11500 (substitute* "moto/batch/models.py"
11501 (("/bin/sh")
11502 (which "sh")))
11503 (substitute* (find-files "tests" "\\.py$")
11504 (("#!/bin/bash")
11505 (string-append "#!" (which "bash"))))
11506 #t))
11507 (replace 'check
11508 (lambda _
11509 (setenv "PYTHONPATH" (string-append "./build/lib:"
11510 (getenv "PYTHONPATH")))
11511 (invoke "pytest" "-vv" "-m" "not network"
11512 ;; These tests require Docker.
11513 "-k" "not test_terminate_job \
11514 and not test_invoke_function_from_sqs_exception"))))))
11515 (native-inputs
11516 `(("python-flask" ,python-flask)
11517 ("python-flask-cors" ,python-flask-cors)
11518 ("python-freezegun" ,python-freezegun)
11519 ("python-parameterized" ,python-parameterized)
11520 ("python-pytest" ,python-pytest)
11521 ("python-sure" ,python-sure)))
11522 (propagated-inputs
11523 `(("python-aws-xray-sdk" ,python-aws-xray-sdk)
11524 ("python-boto" ,python-boto)
11525 ("python-boto3" ,python-boto3)
11526 ("python-botocore" ,python-botocore)
11527 ("python-cfn-lint" ,python-cfn-lint)
11528 ("python-cryptography" ,python-cryptography)
11529 ("python-dateutil" ,python-dateutil)
11530 ("python-docker" ,python-docker)
11531 ("python-idna" ,python-idna)
11532 ("python-jinja2" ,python-jinja2)
11533 ("python-jose" ,python-jose)
11534 ("python-jsondiff" ,python-jsondiff)
11535 ("python-mock" ,python-mock)
11536 ("python-pytz" ,python-pytz)
11537 ("python-pyyaml" ,python-pyyaml)
11538 ("python-requests" ,python-requests)
11539 ("python-responses" ,python-responses)
11540 ("python-six" ,python-six)
11541 ("python-sshpubkeys" ,python-sshpubkeys)
11542 ("python-werkzeug" ,python-werkzeug)
11543 ("python-xmltodict" ,python-xmltodict)))
11544 (home-page "https://github.com/spulec/moto")
11545 (synopsis "Mock out the boto library")
11546 (description
11547 "@code{moto} is a library designed to easily mock out the
11548 @code{boto} library.")
11549 (license license:asl2.0)))
11550
11551 (define-public python-rsa
11552 (package
11553 (name "python-rsa")
11554 (version "3.4.2")
11555 (source
11556 (origin
11557 (method url-fetch)
11558 (uri (pypi-uri "rsa" version))
11559 (sha256
11560 (base32
11561 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
11562 (build-system python-build-system)
11563 (propagated-inputs
11564 `(("python-pyasn1" ,python-pyasn1)))
11565 (synopsis "Pure-Python RSA implementation")
11566 (description "Python-RSA is a pure-Python RSA implementation. It supports
11567 encryption and decryption, signing and verifying signatures, and key
11568 generation according to PKCS#1 version 1.5. It can be used as a Python
11569 library as well as on the command line.")
11570 (home-page "https://stuvel.eu/rsa")
11571 (license license:asl2.0)))
11572
11573 (define-public python2-rsa
11574 (package-with-python2 python-rsa))
11575
11576 (define-public python-pluggy
11577 (package
11578 (name "python-pluggy")
11579 (version "0.13.1")
11580 (source
11581 (origin
11582 (method url-fetch)
11583 (uri (pypi-uri "pluggy" version))
11584 (sha256
11585 (base32
11586 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
11587 (build-system python-build-system)
11588 (native-inputs
11589 `(("python-setuptools-scm" ,python-setuptools-scm)))
11590 (synopsis "Plugin and hook calling mechanism for Python")
11591 (description "Pluggy is an extraction of the plugin manager as used by
11592 Pytest but stripped of Pytest specific details.")
11593 (home-page "https://pypi.org/project/pluggy/")
11594 (properties `((python2-variant . ,(delay python2-pluggy))))
11595 (license license:expat)))
11596
11597 (define-public python2-pluggy
11598 (let ((base (package-with-python2 (strip-python2-variant
11599 python-pluggy))))
11600 (package/inherit
11601 base
11602 (propagated-inputs
11603 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
11604
11605 ;; This package requires python2-importlib-metadata, but that package
11606 ;; ends up needing python2-pluggy via python2-pytest, so we need this
11607 ;; variant to solve the circular dependency.
11608 (define-public python2-pluggy-bootstrap
11609 (hidden-package
11610 (package/inherit
11611 python2-pluggy
11612 (name "python2-pluggy-bootstrap")
11613 (arguments
11614 `(#:tests? #f
11615 ,@(package-arguments python2-pluggy)))
11616 (propagated-inputs
11617 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
11618
11619 (define-public python-plumbum
11620 (package
11621 (name "python-plumbum")
11622 (version "1.7.0")
11623 (source
11624 (origin
11625 (method url-fetch)
11626 (uri (pypi-uri "plumbum" version))
11627 (sha256
11628 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
11629 (build-system python-build-system)
11630 (arguments
11631 `(#:tests? #f)) ;no tests
11632 (native-inputs
11633 ;; XXX: Not actually used since there are no tests but required for
11634 ;; build.
11635 `(("python-pytest" ,python-pytest)))
11636 (home-page "https://plumbum.readthedocs.io")
11637 (synopsis "Python shell combinators library")
11638 (description
11639 "Plumbum is a library of tools for replacing shell scripts with Python
11640 code.")
11641 (license license:expat)))
11642
11643 (define-public python-tox
11644 (package
11645 (name "python-tox")
11646 (version "3.20.0")
11647 (source
11648 (origin
11649 (method url-fetch)
11650 (uri (pypi-uri "tox" version))
11651 (sha256
11652 (base32
11653 "0nk0nyzhzamcrvn0qqzzy54isxxqwdi28swml7a2ym78c3f9sqpb"))))
11654 (build-system python-build-system)
11655 (arguments
11656 ;; FIXME: Tests require pytest-timeout, which itself requires
11657 ;; pytest>=2.8.0 for installation.
11658 '(#:tests? #f))
11659 (propagated-inputs
11660 `(("python-filelock" ,python-filelock)
11661 ("python-packaging" ,python-packaging)
11662 ("python-pluggy" ,python-pluggy)
11663 ("python-py" ,python-py)
11664 ("python-six" ,python-six)
11665 ("python-toml" ,python-toml)
11666 ("python-virtualenv" ,python-virtualenv)))
11667 (native-inputs
11668 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
11669 ("python-pytest" ,python-pytest) ; >= 2.3.5
11670 ("python-setuptools-scm" ,python-setuptools-scm)))
11671 (home-page "https://tox.readthedocs.io")
11672 (synopsis "Virtualenv-based automation of test activities")
11673 (description "Tox is a generic virtualenv management and test command line
11674 tool. It can be used to check that a package installs correctly with
11675 different Python versions and interpreters, or run tests in each type of
11676 supported environment, or act as a frontend to continuous integration
11677 servers.")
11678 (license license:expat)))
11679
11680 (define-public python-jmespath
11681 (package
11682 (name "python-jmespath")
11683 (version "0.9.4")
11684 (source
11685 (origin
11686 (method url-fetch)
11687 (uri (pypi-uri "jmespath" version))
11688 (sha256
11689 (base32
11690 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
11691 (build-system python-build-system)
11692 (native-inputs
11693 `(("python-nose" ,python-nose)))
11694 (synopsis "JSON Matching Expressions")
11695 (description "JMESPath (pronounced “james path”) is a Python library that
11696 allows one to declaratively specify how to extract elements from a JSON
11697 document.")
11698 (home-page "https://github.com/jmespath/jmespath.py")
11699 (license license:expat)))
11700
11701 (define-public python2-jmespath
11702 (package-with-python2 python-jmespath))
11703
11704 (define-public python-symengine
11705 (package
11706 (name "python-symengine")
11707 (version "0.6.1")
11708 (source
11709 (origin
11710 (method url-fetch)
11711 (uri (pypi-uri "symengine" version))
11712 (sha256
11713 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
11714 (build-system python-build-system)
11715 (native-inputs
11716 `(("cmake" ,cmake)
11717 ("python-cython" ,python-cython)))
11718 (inputs
11719 `(("symengine" ,symengine)))
11720 (home-page "https://github.com/symengine/symengine.py")
11721 (synopsis "Python library providing wrappers to SymEngine")
11722 (description
11723 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
11724 manipulation library.")
11725 (license license:expat)))
11726
11727 (define-public python-uncertainties
11728 (package
11729 (name "python-uncertainties")
11730 (version "3.1.5")
11731 (source
11732 (origin
11733 (method url-fetch)
11734 (uri (pypi-uri "uncertainties" version))
11735 (sha256
11736 (base32
11737 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
11738 (build-system python-build-system)
11739 ;; While there are test files, there is no "tests" directory, so the tests
11740 ;; fail.
11741 (arguments '(#:tests? #false))
11742 (propagated-inputs
11743 `(("python-future" ,python-future)))
11744 (native-inputs
11745 `(("python-nose" ,python-nose)
11746 ("python-numpy" ,python-numpy)))
11747 (home-page "https://uncertainties-python-package.readthedocs.io/")
11748 (synopsis "Calculations with uncertainties")
11749 (description
11750 "The uncertainties package transparently handles calculations with
11751 numbers with uncertainties. It can also yield the derivatives of any
11752 expression.")
11753 (license license:bsd-3)))
11754
11755 (define-public python-asteval
11756 (package
11757 (name "python-asteval")
11758 (version "0.9.23")
11759 (source
11760 (origin
11761 (method url-fetch)
11762 (uri (pypi-uri "asteval" version))
11763 (sha256
11764 (base32
11765 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
11766 (build-system python-build-system)
11767 (native-inputs
11768 `(("python-pytest" ,python-pytest)))
11769 (home-page "https://github.com/newville/asteval")
11770 (synopsis "Minimalistic evaluator of Python expressions")
11771 (description
11772 "This package provides a minimalistic evaluator of Python expression
11773 using the @code{ast} module")
11774 (license license:expat)))
11775
11776 (define-public python-lmfit
11777 (package
11778 (name "python-lmfit")
11779 (version "1.0.2")
11780 (source
11781 (origin
11782 (method url-fetch)
11783 (uri (pypi-uri "lmfit" version))
11784 (sha256
11785 (base32
11786 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
11787 (build-system python-build-system)
11788 (propagated-inputs
11789 `(("python-asteval" ,python-asteval)
11790 ("python-numpy" ,python-numpy)
11791 ("python-scipy" ,python-scipy)
11792 ("python-uncertainties" ,python-uncertainties)))
11793 (native-inputs
11794 `(("python-pytest" ,python-pytest)))
11795 (home-page "https://lmfit.github.io/lmfit-py/")
11796 (synopsis "Least-Squares minimization with bounds and constraints")
11797 (description
11798 "Lmfit provides a high-level interface to non-linear optimization and
11799 curve fitting problems for Python. It builds on and extends many of the
11800 optimization methods of @code{scipy.optimize}. Initially inspired by (and
11801 named for) extending the Levenberg-Marquardt method from
11802 @code{scipy.optimize.leastsq}, lmfit now provides a number of useful
11803 enhancements to optimization and data fitting problems.")
11804 (license license:bsd-3)))
11805
11806 (define-public python-boto
11807 (package
11808 (name "python-boto")
11809 (version "2.49.0")
11810 (source (origin
11811 (method url-fetch)
11812 (uri (pypi-uri "boto" version))
11813 (sha256
11814 (base32
11815 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
11816 (build-system python-build-system)
11817 (arguments
11818 ;; XXX: This package is unmaintained and has problems with newer versions
11819 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
11820 ;; subset of this library, so keep it around for now, but disable tests.
11821 '(#:tests? #f))
11822 (propagated-inputs
11823 `(("python-paramiko" ,python-paramiko)
11824 ("python-requests" ,python-requests)))
11825 (home-page "https://github.com/boto/boto")
11826 (synopsis "Python interfaces for Amazon Web Services")
11827 (description
11828 "This package provides various facilities for interacting with Amazon
11829 Web Services through Python.
11830
11831 This software is unmaintained, and new projects should use @code{boto3} instead.")
11832 (license license:expat)))
11833
11834 (define-public python-botocore
11835 ;; Note: When updating botocore, also make sure that boto3 and awscli
11836 ;; are compatible.
11837 (package
11838 (name "python-botocore")
11839 (version "1.19.22")
11840 (source
11841 (origin
11842 (method url-fetch)
11843 (uri (pypi-uri "botocore" version))
11844 (sha256
11845 (base32
11846 "0iim86x7c6hqmvd61ygz6x6x9glnsfbnyzv2y67qjdcdx8jpkmw7"))))
11847 (build-system python-build-system)
11848 (arguments
11849 ;; FIXME: Many tests are failing.
11850 '(#:tests? #f))
11851 (propagated-inputs
11852 `(("python-dateutil" ,python-dateutil)
11853 ("python-jmespath" ,python-jmespath)
11854 ("python-urllib3" ,python-urllib3)))
11855 (home-page "https://github.com/boto/botocore")
11856 (synopsis "Low-level interface to AWS")
11857 (description "Botocore is a Python library that provides a low-level
11858 interface to the Amazon Web Services (AWS) API.")
11859 (license license:asl2.0)))
11860
11861 (define-public python2-botocore
11862 (package-with-python2 python-botocore))
11863
11864 (define-public python-boto3
11865 (package
11866 (name "python-boto3")
11867 (version "1.16.22")
11868 (home-page "https://github.com/boto/boto3")
11869 (source (origin
11870 (method git-fetch)
11871 (uri (git-reference (url home-page) (commit version)))
11872 (file-name (git-file-name name version))
11873 (sha256
11874 (base32
11875 "0h20hgl4yfl58g75qhb6ibrdmzn47md3srgar7hask14cjmfhfy3"))))
11876 (arguments
11877 `(#:phases
11878 (modify-phases %standard-phases
11879 (add-after 'unpack 'delete-network-tests
11880 ;; Deleting integration tests because they are trying to connect to AWS.
11881 (lambda _
11882 (delete-file-recursively "tests/integration")
11883 #t)))))
11884 (build-system python-build-system)
11885 (native-inputs
11886 `(("python-nose" ,python-nose)
11887 ("python-mock" ,python-mock)))
11888 (propagated-inputs
11889 `(("python-botocore" ,python-botocore)
11890 ("python-jmespath" ,python-jmespath)
11891 ("python-s3transfer" ,python-s3transfer)))
11892 (synopsis "AWS SDK for Python")
11893 (description
11894 "Boto3 is a Python library for writing programs that interact with
11895 @acronym{AWS,Amazon Web Services}.")
11896 (license license:asl2.0)))
11897
11898 (define-public python-pyfiglet
11899 (package
11900 (name "python-pyfiglet")
11901 (version "0.8.post1")
11902 (source
11903 (origin
11904 (method url-fetch)
11905 (uri (pypi-uri "pyfiglet" version))
11906 (sha256
11907 (base32
11908 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
11909 (build-system python-build-system)
11910 (home-page "https://github.com/pwaller/pyfiglet")
11911 (synopsis "Draw ASCII art big letters in Python")
11912 (description "This module lets you draw large letter from ordinary characters
11913 in pure Python.")
11914 (license license:expat)))
11915
11916 (define-public python-xdo
11917 (package
11918 (name "python-xdo")
11919 (version "0.3")
11920 (source (origin
11921 (method url-fetch)
11922 (uri (string-append
11923 "http://http.debian.net/debian/pool/main/p/python-xdo/"
11924 "python-xdo_" version ".orig.tar.gz"))
11925 (sha256
11926 (base32
11927 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
11928 (build-system python-build-system)
11929 (arguments
11930 '(#:phases
11931 (modify-phases %standard-phases
11932 (add-before 'install 'patch-libxdo-path
11933 ;; Hardcode the path of dynamically loaded libxdo library.
11934 (lambda* (#:key inputs #:allow-other-keys)
11935 (let ((libxdo (string-append
11936 (assoc-ref inputs "xdotool")
11937 "/lib/libxdo.so")))
11938 (substitute* "xdo/_xdo.py"
11939 (("find_library\\(\"xdo\"\\)")
11940 (simple-format #f "\"~a\"" libxdo)))
11941 #t))))
11942 #:tests? #f)) ; no tests provided
11943 (propagated-inputs
11944 `(("python-six" ,python-six)))
11945 (inputs
11946 `(("xdotool" ,xdotool)
11947 ("libX11" ,libx11)))
11948 (home-page "https://tracker.debian.org/pkg/python-xdo")
11949 (synopsis "Python library for simulating X11 keyboard/mouse input")
11950 (description "Provides bindings to libxdo for manipulating X11 via simulated
11951 input. (Note that this is mostly a legacy library; you may wish to look at
11952 python-xdo for newer bindings.)")
11953 (license license:bsd-3)))
11954
11955 (define-public python2-xdo
11956 (package-with-python2 python-xdo))
11957
11958 (define-public python-mako
11959 (package
11960 (name "python-mako")
11961 (version "1.1.3")
11962 (source
11963 (origin
11964 (method url-fetch)
11965 (uri (pypi-uri "Mako" version))
11966 (sha256
11967 (base32
11968 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
11969 (build-system python-build-system)
11970 (arguments
11971 `(#:phases (modify-phases %standard-phases
11972 (replace 'check
11973 (lambda* (#:key tests? #:allow-other-keys)
11974 (if tests?
11975 (invoke "nosetests" "-v")
11976 (format #t "test suite not run~%"))
11977 #t)))))
11978 (propagated-inputs
11979 `(("python-markupsafe" ,python-markupsafe)))
11980 (native-inputs
11981 `(("python-mock" ,python-mock)
11982 ("python-nose" ,python-nose)))
11983 (home-page "https://www.makotemplates.org/")
11984 (synopsis "Templating language for Python")
11985 (description "Mako is a templating language for Python that compiles
11986 templates into Python modules.")
11987 (license license:expat)))
11988
11989 (define-public python2-mako
11990 (package-with-python2 python-mako))
11991
11992 (define-public python-waitress
11993 (package
11994 (name "python-waitress")
11995 (version "1.1.0")
11996 (source
11997 (origin
11998 (method url-fetch)
11999 (uri (pypi-uri "waitress" version))
12000 (patches (search-patches "python-waitress-fix-tests.patch"))
12001 (sha256
12002 (base32
12003 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
12004 (build-system python-build-system)
12005 (home-page "https://github.com/Pylons/waitress")
12006 (synopsis "Waitress WSGI server")
12007 (description "Waitress is meant to be a production-quality pure-Python WSGI
12008 server with very acceptable performance.")
12009 (license license:zpl2.1)))
12010
12011 (define-public python2-waitress
12012 (package-with-python2 python-waitress))
12013
12014 (define-public python-whichcraft
12015 (package
12016 (name "python-whichcraft")
12017 (version "0.6.1")
12018 (source
12019 (origin
12020 (method url-fetch)
12021 (uri (pypi-uri "whichcraft" version))
12022 (sha256
12023 (base32
12024 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
12025 (build-system python-build-system)
12026 (native-inputs
12027 `(("python-pytest" ,python-pytest)))
12028 (home-page "https://github.com/pydanny/whichcraft")
12029 (synopsis "Cross-platform cross-python shutil.which functionality")
12030 (description
12031 "This package provides a shim of the shutil.which function that's
12032 designed to work across multiple versions of Python.")
12033 (license license:bsd-3)))
12034
12035 (define-public python-cookiecutter
12036 (package
12037 (name "python-cookiecutter")
12038 (version "1.7.2")
12039 (source
12040 (origin
12041 (method url-fetch)
12042 (uri (pypi-uri "cookiecutter" version))
12043 (sha256
12044 (base32
12045 "1b2xa5dypk1vf8aq599fd8zw4y0pwvq3hgl7ia8aiv8gg3ab5dpg"))))
12046 (build-system python-build-system)
12047 (native-inputs
12048 `(("python-freezegun" ,python-freezegun)
12049 ("python-pytest" ,python-pytest)
12050 ("python-pytest-catchlog" ,python-pytest-catchlog)
12051 ("python-pytest-cov" ,python-pytest-cov)
12052 ("python-pytest-mock" ,python-pytest-mock)))
12053 (propagated-inputs
12054 `(("python-binaryornot" ,python-binaryornot)
12055 ("python-click" ,python-click)
12056 ("python-future" ,python-future)
12057 ("python-jinja2" ,python-jinja2)
12058 ("python-jinja2-time" ,python-jinja2-time)
12059 ("python-poyo" ,python-poyo)
12060 ("python-requests" ,python-requests)
12061 ("python-slugify" ,python-slugify)
12062 ("python-text-unidecode" ,python-text-unidecode)
12063 ("python-whichcraft" ,python-whichcraft)))
12064 (home-page "https://github.com/cookiecutter/cookiecutter")
12065 (synopsis
12066 "Command-line utility that creates projects from project templates")
12067 (description
12068 "This package provides a command-line utility that creates projects from
12069 project templates, e.g. creating a Python package project from a Python package
12070 project template.")
12071 (license license:bsd-3)))
12072
12073 (define-public python-pyquery
12074 (package
12075 (name "python-pyquery")
12076 (version "1.2.17")
12077 (source
12078 (origin
12079 (method url-fetch)
12080 (uri (pypi-uri "pyquery" version))
12081 (sha256
12082 (base32
12083 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
12084 (build-system python-build-system)
12085 (native-inputs
12086 `(("python-webob" ,python-webob)
12087 ("python-webtest" ,python-webtest)))
12088 (propagated-inputs
12089 `(("python-lxml" ,python-lxml)
12090 ("python-cssselect" ,python-cssselect)))
12091 (home-page "https://github.com/gawel/pyquery")
12092 (synopsis "Make jQuery-like queries on xml documents")
12093 (description "pyquery allows you to make jQuery queries on xml documents.
12094 The API is as much as possible the similar to jQuery. pyquery uses lxml for
12095 fast xml and html manipulation.")
12096 (license license:bsd-3)))
12097
12098 (define-public python-anyjson
12099 (package
12100 (name "python-anyjson")
12101 (version "0.3.3")
12102 (source
12103 (origin
12104 (method url-fetch)
12105 (uri (pypi-uri "anyjson" version))
12106 (sha256
12107 (base32
12108 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
12109 (build-system python-build-system)
12110 (arguments
12111 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
12112 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
12113 ;; whatever) so this transformation needs to be done before the tests
12114 ;; can be run. Maybe we could add a build step to transform beforehand
12115 ;; but it could be annoying/difficult.
12116 ;; We can enable tests for the Python 2 version, though, and do below.
12117 #:tests? #f))
12118 (home-page "https://bitbucket.org/runeh/anyjson/")
12119 (synopsis
12120 "Wraps best available JSON implementation in a common interface")
12121 (description
12122 "Anyjson loads whichever is the fastest JSON module installed
12123 and provides a uniform API regardless of which JSON implementation is used.")
12124 (license license:bsd-3)
12125 (properties `((python2-variant . ,(delay python2-anyjson))))))
12126
12127 (define-public python2-anyjson
12128 (let ((anyjson (package-with-python2
12129 (strip-python2-variant python-anyjson))))
12130 (package/inherit anyjson
12131 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
12132 #:tests? #t
12133 ,@(package-arguments anyjson)))
12134 (native-inputs `(("python2-nose" ,python2-nose))))))
12135
12136 (define-public python-amqp
12137 (package
12138 (name "python-amqp")
12139 (version "2.3.2")
12140 (source
12141 (origin
12142 (method url-fetch)
12143 (uri (pypi-uri "amqp" version))
12144 (sha256
12145 (base32
12146 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
12147 (build-system python-build-system)
12148 (native-inputs
12149 `(("python-case" ,python-case)
12150 ("python-pytest-sugar" ,python-pytest-sugar)
12151 ("python-mock" ,python-mock)))
12152 (propagated-inputs
12153 `(("python-vine" ,python-vine)))
12154 (home-page "https://github.com/celery/py-amqp")
12155 (synopsis
12156 "Low-level AMQP client for Python (fork of amqplib)")
12157 (description
12158 "This is a fork of amqplib which was originally written by Barry Pederson.
12159 It is maintained by the Celery project, and used by kombu as a pure python
12160 alternative when librabbitmq is not available.")
12161 (license license:lgpl2.1+)
12162 (properties `((python2-variant . ,(delay python2-amqp))))))
12163
12164 (define-public python2-amqp
12165 (let ((amqp (package-with-python2
12166 (strip-python2-variant python-amqp))))
12167 (package/inherit amqp
12168 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
12169 ;; unmaintained. Weirdly, does not do this on the python 3
12170 ;; version?
12171 #:tests? #f
12172 ,@(package-arguments amqp))))))
12173
12174 (define-public python-txamqp
12175 (package
12176 (name "python-txamqp")
12177 (version "0.8.2")
12178 (source
12179 (origin
12180 (method url-fetch)
12181 (uri (pypi-uri "txAMQP" version))
12182 (sha256
12183 (base32
12184 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
12185 (build-system python-build-system)
12186 (propagated-inputs
12187 `(("python-six" ,python-six)
12188 ("python-twisted" ,python-twisted)))
12189 (home-page "https://github.com/txamqp/txamqp")
12190 (synopsis "Communicate with AMQP peers and brokers using Twisted")
12191 (description
12192 "This package provides a Python library for communicating with AMQP peers
12193 and brokers using the asynchronous networking framework Twisted. It contains
12194 all the necessary code to connect, send and receive messages to/from an
12195 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
12196 also includes support for using Thrift RPC over AMQP in Twisted
12197 applications.")
12198 (license license:asl2.0)))
12199
12200 (define-public python2-txamqp
12201 (package-with-python2 python-txamqp))
12202
12203 (define-public python-kombu
12204 (package
12205 (name "python-kombu")
12206 (version "4.2.2")
12207 (source
12208 (origin
12209 (method url-fetch)
12210 (uri (pypi-uri "kombu" version))
12211 (sha256
12212 (base32
12213 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
12214 (build-system python-build-system)
12215 (native-inputs
12216 `(("python-mock" ,python-mock)
12217 ("python-case" ,python-case)
12218 ("python-pyro4" ,python-pyro4)
12219 ("python-pytest-sugar" ,python-pytest-sugar)
12220 ("python-pytz" ,python-pytz)))
12221 (propagated-inputs
12222 `(("python-anyjson" ,python-anyjson)
12223 ("python-amqp" ,python-amqp)
12224 ("python-redis" ,python-redis)))
12225 (home-page "https://kombu.readthedocs.io")
12226 (synopsis "Message passing library for Python")
12227 (description "The aim of Kombu is to make messaging in Python as easy as
12228 possible by providing an idiomatic high-level interface for the AMQ protocol,
12229 and also provide proven and tested solutions to common messaging problems.
12230 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
12231 message orientation, queuing, routing, reliability and security, for which the
12232 RabbitMQ messaging server is the most popular implementation.")
12233 (license license:bsd-3)
12234 (properties `((python2-variant . ,(delay python2-kombu))))))
12235
12236 (define-public python2-kombu
12237 (let ((kombu (package-with-python2
12238 (strip-python2-variant python-kombu))))
12239 (package/inherit kombu
12240 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
12241 ;; It works fine on the python3 variant.
12242 #:tests? #f
12243 ,@(package-arguments kombu)))
12244 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12245 ,@(package-native-inputs kombu))))))
12246
12247 (define-public python-billiard
12248 (package
12249 (name "python-billiard")
12250 (version "3.5.0.5")
12251 (source
12252 (origin
12253 (method url-fetch)
12254 (uri (pypi-uri "billiard" version))
12255 (sha256
12256 (base32
12257 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
12258 (build-system python-build-system)
12259 (native-inputs
12260 `(("python-case" ,python-case)
12261 ("python-pytest" ,python-pytest)))
12262 (home-page "https://github.com/celery/billiard")
12263 (synopsis
12264 "Python multiprocessing fork with improvements and bugfixes")
12265 (description
12266 "Billiard is a fork of the Python 2.7 multiprocessing package. The
12267 multiprocessing package itself is a renamed and updated version of R Oudkerk's
12268 pyprocessing package. This standalone variant is intended to be compatible with
12269 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
12270 (license license:bsd-3)
12271 (properties `((python2-variant . ,(delay python2-billiard))))))
12272
12273 (define-public python2-billiard
12274 (let ((billiard (package-with-python2
12275 (strip-python2-variant python-billiard))))
12276 (package/inherit billiard
12277 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12278 ("python2-mock" ,python2-mock)
12279 ,@(package-native-inputs billiard))))))
12280
12281 (define-public python-celery
12282 (package
12283 (name "python-celery")
12284 (version "4.2.1")
12285 (source
12286 (origin
12287 (method url-fetch)
12288 (uri (pypi-uri "celery" version))
12289 (sha256
12290 (base32
12291 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
12292 (build-system python-build-system)
12293 (arguments
12294 '(;; TODO The tests fail with Python 3.7
12295 ;; https://github.com/celery/celery/issues/4849
12296 #:tests? #f
12297 #:phases
12298 (modify-phases %standard-phases
12299 (add-after 'unpack 'patch-requirements
12300 (lambda _
12301 (substitute* "requirements/test.txt"
12302 (("pytest>=3\\.0,<3\\.3")
12303 "pytest>=3.0"))
12304 #t)))))
12305 (native-inputs
12306 `(("python-case" ,python-case)
12307 ("python-pytest" ,python-pytest)))
12308 (propagated-inputs
12309 `(("python-pytz" ,python-pytz)
12310 ("python-billiard" ,python-billiard)
12311 ("python-kombu" ,python-kombu)))
12312 (home-page "https://celeryproject.org")
12313 (synopsis "Distributed Task Queue")
12314 (description "Celery is an asynchronous task queue/job queue based on
12315 distributed message passing. It is focused on real-time operation, but
12316 supports scheduling as well. The execution units, called tasks, are executed
12317 concurrently on a single or more worker servers using multiprocessing,
12318 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
12319 synchronously (wait until ready).")
12320 (license license:bsd-3)
12321 (properties `((python2-variant . ,(delay python2-celery))))))
12322
12323 (define-public python2-celery
12324 (let ((celery (package-with-python2
12325 (strip-python2-variant python-celery))))
12326 (package/inherit celery
12327 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12328 ("python2-mock" ,python2-mock)
12329 ,@(package-native-inputs celery))))))
12330
12331 (define-public python-translitcodec
12332 (package
12333 (name "python-translitcodec")
12334 (version "0.4.0")
12335 (source
12336 (origin
12337 (method url-fetch)
12338 (uri (pypi-uri "translitcodec" version))
12339 (sha256
12340 (base32
12341 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
12342 (build-system python-build-system)
12343 (arguments
12344 `(#:tests? #f)) ; no tests provided
12345 (home-page
12346 "https://github.com/claudep/translitcodec")
12347 (synopsis
12348 "Unicode to 8-bit charset transliteration codec")
12349 (description
12350 "This package contains codecs for transliterating ISO 10646 texts into
12351 best-effort representations using smaller coded character sets (ASCII,
12352 ISO 8859, etc.).")
12353 (license license:expat)))
12354
12355 (define-public python2-translitcodec
12356 (package-with-python2 python-translitcodec))
12357
12358 (define-public python-editor
12359 (package
12360 (name "python-editor")
12361 (version "1.0.4")
12362 (source
12363 (origin
12364 (method url-fetch)
12365 (uri (pypi-uri "python-editor" version))
12366 (sha256
12367 (base32
12368 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
12369 (build-system python-build-system)
12370 (arguments
12371 '(#:tests? #f)) ;XXX: needs a TTY and an editor
12372 (home-page "https://github.com/fmoo/python-editor")
12373 (synopsis "Programmatically open an editor, capture the result")
12374 (description
12375 "python-editor is a library that provides the editor module for
12376 programmatically interfacing with your system's $EDITOR.")
12377 (license license:asl2.0)))
12378
12379 (define-public python2-editor
12380 (package-with-python2 python-editor))
12381
12382 (define-public python-multiprocessing-logging
12383 (package
12384 (name "python-multiprocessing-logging")
12385 (version "0.3.1")
12386 (home-page "https://github.com/jruere/multiprocessing-logging")
12387 (source (origin
12388 (method git-fetch)
12389 (uri (git-reference
12390 (url home-page)
12391 (commit (string-append "v" version))))
12392 (file-name (git-file-name name version))
12393 (sha256
12394 (base32
12395 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
12396 (build-system python-build-system)
12397 (synopsis "Manage logs from multiple processes")
12398 (description
12399 "This Python module implements a multiprocessing-aware @code{Handler}
12400 that, when set on the root @code{Logger}, will tunnel log records to the
12401 main process so that they are handled correctly.")
12402 (license license:lgpl3+)))
12403
12404 (define-public python-vobject
12405 (package
12406 (name "python-vobject")
12407 (version "0.9.6.1")
12408 (source (origin
12409 (method url-fetch)
12410 (uri (pypi-uri "vobject" version))
12411 (sha256
12412 (base32
12413 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
12414 (build-system python-build-system)
12415 (arguments
12416 '(;; The test suite relies on some non-portable Windows interfaces.
12417 #:tests? #f))
12418 (propagated-inputs
12419 `(("python-dateutil" ,python-dateutil)
12420 ("python-pyicu" ,python-pyicu)))
12421 (synopsis "Parse and generate vCard and vCalendar files")
12422 (description "Vobject is intended to be a full featured Python package for
12423 parsing and generating vCard and vCalendar files. Currently, iCalendar files
12424 are supported and well tested. vCard 3.0 files are supported, and all data
12425 should be imported, but only a few components are understood in a sophisticated
12426 way.")
12427 (home-page "https://eventable.github.io/vobject/")
12428 (license license:asl2.0)))
12429
12430 (define-public python2-vobject
12431 (package-with-python2 python-vobject))
12432
12433 (define-public python-munkres
12434 (package
12435 (name "python-munkres")
12436 (version "1.0.8")
12437 (source (origin
12438 (method url-fetch)
12439 (uri (pypi-uri "munkres" version))
12440 (sha256
12441 (base32
12442 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
12443 (build-system python-build-system)
12444 (arguments
12445 '(#:tests? #f)) ; no test suite
12446 (home-page "https://software.clapper.org/munkres/")
12447 (synopsis "Implementation of the Munkres algorithm")
12448 (description "The Munkres module provides an implementation of the Munkres
12449 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
12450 useful for solving the Assignment Problem.")
12451 (license license:bsd-3)))
12452
12453 (define-public python2-munkres
12454 (package-with-python2 python-munkres))
12455
12456 (define-public python-whoosh
12457 (package
12458 (name "python-whoosh")
12459 (version "2.7.4")
12460 (source
12461 (origin
12462 (method url-fetch)
12463 (uri (pypi-uri "Whoosh" version))
12464 (sha256
12465 (base32
12466 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
12467 (build-system python-build-system)
12468 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
12469 (native-inputs
12470 `(("python-pytest" ,python-pytest)))
12471 (home-page "https://bitbucket.org/mchaput/whoosh")
12472 (synopsis "Full text indexing, search, and spell checking library")
12473 (description
12474 "Whoosh is a fast, pure-Python full text indexing, search, and spell
12475 checking library.")
12476 (license license:bsd-2)))
12477
12478 (define-public python2-whoosh
12479 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
12480 (package/inherit whoosh
12481 (propagated-inputs
12482 `(("python2-backport-ssl-match-hostname"
12483 ,python2-backport-ssl-match-hostname)
12484 ,@(package-propagated-inputs whoosh))))))
12485
12486 (define-public python-pathlib
12487 (package
12488 (name "python-pathlib")
12489 (version "1.0.1")
12490 (source (origin
12491 (method url-fetch)
12492 (uri (pypi-uri "pathlib" version))
12493 (sha256
12494 (base32
12495 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
12496 (build-system python-build-system)
12497 ;; The tests depend on the internal "test" module, which does not provide
12498 ;; a stable interface.
12499 (arguments `(#:tests? #f))
12500 (home-page "https://pathlib.readthedocs.org/")
12501 (synopsis "Object-oriented file system paths")
12502 (description "Pathlib offers a set of classes to handle file system paths.
12503 It offers the following advantages over using string objects:
12504
12505 @enumerate
12506 @item No more cumbersome use of os and os.path functions. Everything can
12507 be done easily through operators, attribute accesses, and method calls.
12508 @item Embodies the semantics of different path types. For example,
12509 comparing Windows paths ignores casing.
12510 @item Well-defined semantics, eliminating any inconsistencies or
12511 ambiguities (forward vs. backward slashes, etc.).
12512 @end enumerate
12513
12514 Note: In Python 3.4, pathlib is now part of the standard library. For other
12515 Python versions please consider python-pathlib2 instead, which tracks the
12516 standard library module. This module (python-pathlib) isn't maintained
12517 anymore.")
12518 (license license:expat)))
12519
12520 (define-public python2-pathlib
12521 (package-with-python2 python-pathlib))
12522
12523 (define-public python2-pathlib2
12524 (package
12525 (name "python2-pathlib2")
12526 (version "2.3.5")
12527 (source (origin
12528 (method url-fetch)
12529 (uri (pypi-uri "pathlib2" version))
12530 (sha256
12531 (base32
12532 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
12533 (build-system python-build-system)
12534 ;; We only need the the Python 2 variant, since for Python 3 our minimum
12535 ;; version is 3.4 which already includes this package as part of the
12536 ;; standard library.
12537 (arguments
12538 `(#:python ,python-2))
12539 (propagated-inputs
12540 `(("python2-scandir" ,python2-scandir)
12541 ("python2-six" ,python2-six)))
12542 (home-page "https://pypi.org/project/pathlib2/")
12543 (synopsis "Object-oriented file system paths - backport of standard
12544 pathlib module")
12545 (description "The goal of pathlib2 is to provide a backport of standard
12546 pathlib module which tracks the standard library module, so all the newest
12547 features of the standard pathlib can be used also on older Python versions.
12548
12549 Pathlib offers a set of classes to handle file system paths. It offers the
12550 following advantages over using string objects:
12551
12552 @enumerate
12553 @item No more cumbersome use of os and os.path functions. Everything can
12554 be done easily through operators, attribute accesses, and method calls.
12555 @item Embodies the semantics of different path types. For example,
12556 comparing Windows paths ignores casing.
12557 @item Well-defined semantics, eliminating any inconsistencies or
12558 ambiguities (forward vs. backward slashes, etc.).
12559 @end enumerate")
12560 (license license:expat)))
12561
12562 (define-public python2-pathlib2-bootstrap
12563 (hidden-package
12564 (package
12565 (inherit python2-pathlib2)
12566 (name "python2-pathlib2-bootstrap")
12567 (propagated-inputs
12568 `(("python2-scandir" ,python2-scandir)
12569 ("python2-six" ,python2-six-bootstrap))))))
12570
12571 (define-public python-jellyfish
12572 (package
12573 (name "python-jellyfish")
12574 (version "0.5.6")
12575 (source (origin
12576 (method url-fetch)
12577 (uri (pypi-uri "jellyfish" version))
12578 (sha256
12579 (base32
12580 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
12581 (build-system python-build-system)
12582 (native-inputs
12583 `(("python-pytest" ,python-pytest)))
12584 (home-page "https://github.com/jamesturk/jellyfish")
12585 (synopsis "Approximate and phonetic matching of strings")
12586 (description "Jellyfish uses a variety of string comparison and phonetic
12587 encoding algorithms to do fuzzy string matching.")
12588 (license license:bsd-2)
12589 (properties `((python2-variant . ,(delay python2-jellyfish))))))
12590
12591 (define-public python2-jellyfish
12592 (let ((jellyfish (package-with-python2
12593 (strip-python2-variant python-jellyfish))))
12594 (package/inherit jellyfish
12595 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
12596 ,@(package-native-inputs jellyfish))))))
12597
12598 (define-public python2-unicodecsv
12599 (package
12600 (name "python2-unicodecsv")
12601 (version "0.14.1")
12602 (source (origin
12603 (method git-fetch)
12604 ;; The test suite is not included in the PyPi release.
12605 ;; https://github.com/jdunck/python-unicodecsv/issues/19
12606 (uri (git-reference
12607 (url "https://github.com/jdunck/python-unicodecsv")
12608 (commit version)))
12609 (file-name (git-file-name name version))
12610 (sha256
12611 (base32
12612 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
12613 (build-system python-build-system)
12614 (arguments
12615 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
12616 #:python ,python-2))
12617 (native-inputs
12618 `(("python2-unittest2" ,python2-unittest2)))
12619 (home-page "https://github.com/jdunck/python-unicodecsv")
12620 (synopsis "Unicode CSV module for Python 2")
12621 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
12622 module, adding support for Unicode strings.")
12623 (license license:bsd-2)))
12624
12625 (define-public python-pdfminer-six
12626 (package
12627 (name "python-pdfminer-six")
12628 (version "20201018")
12629 ;; There are no tests in the PyPI tarball.
12630 (source
12631 (origin
12632 (method git-fetch)
12633 (uri (git-reference
12634 (url "https://github.com/pdfminer/pdfminer.six")
12635 (commit version)))
12636 (file-name (git-file-name name version))
12637 (sha256
12638 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
12639 (build-system python-build-system)
12640 (arguments
12641 `(#:phases
12642 (modify-phases %standard-phases
12643 ;; Tests write to the source tree.
12644 (add-after 'unpack 'make-git-checkout-writable
12645 (lambda _
12646 (for-each make-file-writable (find-files "."))
12647 #t))
12648 (replace 'check
12649 (lambda _
12650 (invoke "make" "test")))
12651 (add-before 'reset-gzip-timestamps 'make-files-writable
12652 (lambda* (#:key outputs #:allow-other-keys)
12653 (let ((out (assoc-ref outputs "out")))
12654 (for-each make-file-writable
12655 (find-files out "\\.gz$"))
12656 #t))))))
12657 (propagated-inputs
12658 `(("python-chardet" ,python-chardet)
12659 ("python-cryptography" ,python-cryptography)
12660 ("python-sortedcontainers" ,python-sortedcontainers)))
12661 (native-inputs
12662 `(("python-nose" ,python-nose)
12663 ("python-tox" ,python-tox)))
12664 (home-page "https://github.com/pdfminer/pdfminer.six")
12665 (synopsis "PDF parser and analyzer")
12666 (description "@code{pdfminer.six} is a community maintained fork of
12667 the original PDFMiner. It is a tool for extracting information from PDF
12668 documents. It focuses on getting and analyzing text data. Pdfminer.six
12669 extracts the text from a page directly from the sourcecode of the PDF. It
12670 can also be used to get the exact location, font or color of the text.")
12671 (license license:expat)))
12672
12673 (define-public python-rarfile
12674 (package
12675 (name "python-rarfile")
12676 (version "2.8")
12677 (source (origin
12678 (method url-fetch)
12679 (uri (pypi-uri "rarfile" version))
12680 (sha256
12681 (base32
12682 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
12683 (build-system python-build-system)
12684 (arguments
12685 '(#:phases
12686 (modify-phases %standard-phases
12687 (replace 'check
12688 ;; Many tests fail, but the installation proceeds.
12689 (lambda _ (invoke "make" "-C" "test" "test"))))))
12690 (native-inputs
12691 `(("which" ,which))) ; required for tests
12692 (propagated-inputs
12693 `(("libarchive" ,libarchive)))
12694 (home-page "https://github.com/markokr/rarfile")
12695 (synopsis "RAR archive reader for Python")
12696 (description "This is Python module for RAR archive reading. The interface
12697 is made as zipfile like as possible.")
12698 (license license:isc)))
12699
12700 (define-public python2-rarfile
12701 (package-with-python2 python-rarfile))
12702
12703 (define-public python-magic
12704 (package
12705 (name "python-magic")
12706 (version "0.4.15")
12707 (source
12708 (origin
12709 (method url-fetch)
12710 (uri (pypi-uri "python-magic" version))
12711 (sha256
12712 (base32
12713 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
12714 (file-name (string-append name "-" version "-checkout"))))
12715 (build-system python-build-system)
12716 (arguments
12717 ;; The tests are unreliable, so don't run them. The tests fail
12718 ;; under Python3 because they were written for Python2 and
12719 ;; contain import statements that do not work in Python3. One of
12720 ;; the tests fails under Python2 because its assertions are
12721 ;; overly stringent; it relies on comparing output strings which
12722 ;; are brittle and can change depending on the version of
12723 ;; libmagic being used and the system on which the test is
12724 ;; running. In my case, under GuixSD 0.10.0, only one test
12725 ;; failed, and it seems to have failed only because the version
12726 ;; of libmagic that is packaged in Guix outputs a slightly
12727 ;; different (but not wrong) string than the one that the test
12728 ;; expected.
12729 '(#:tests? #f
12730 #:phases (modify-phases %standard-phases
12731 ;; Replace a specific method call with a hard-coded
12732 ;; path to the necessary libmagic.so file in the
12733 ;; store. If we don't do this, then the method call
12734 ;; will fail to find the libmagic.so file, which in
12735 ;; turn will cause any application using
12736 ;; python-magic to fail.
12737 (add-before 'build 'hard-code-path-to-libmagic
12738 (lambda* (#:key inputs #:allow-other-keys)
12739 (let ((file (assoc-ref inputs "file")))
12740 (substitute* "magic.py"
12741 (("ctypes.util.find_library\\('magic'\\)")
12742 (string-append "'" file "/lib/libmagic.so'")))
12743 #t)))
12744 (add-before 'install 'disable-egg-compression
12745 (lambda _
12746 (let ((port (open-file "setup.cfg" "a")))
12747 (display "\n[easy_install]\nzip_ok = 0\n"
12748 port)
12749 (close-port port)
12750 #t))))))
12751 (inputs
12752 ;; python-magic needs to be able to find libmagic.so.
12753 `(("file" ,file)))
12754 (home-page
12755 "https://github.com/ahupp/python-magic")
12756 (synopsis
12757 "File type identification using libmagic")
12758 (description
12759 "This module uses ctypes to access the libmagic file type
12760 identification library. It makes use of the local magic database and
12761 supports both textual and MIME-type output. Note that this module and
12762 the python-file module both provide a \"magic.py\" file; these two
12763 modules, which are different and were developed separately, both serve
12764 the same purpose: to provide Python bindings for libmagic.")
12765 (license license:expat)))
12766
12767 (define-public python2-magic
12768 (package-with-python2 python-magic))
12769
12770 (define-public python2-s3cmd
12771 (package
12772 (name "python2-s3cmd")
12773 (version "1.6.1")
12774 (source
12775 (origin
12776 (method url-fetch)
12777 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
12778 "s3cmd-" version ".tar.gz"))
12779 (sha256
12780 (base32
12781 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
12782 (build-system python-build-system)
12783 (arguments
12784 ;; s3cmd is written for python2 only and contains no tests.
12785 `(#:python ,python-2
12786 #:tests? #f))
12787 (propagated-inputs
12788 `(("python2-dateutil" ,python2-dateutil)
12789 ;; The python-file package also provides a magic.py module.
12790 ;; This is an unfortunate state of affairs; however, s3cmd
12791 ;; fails to install if it cannot find specifically the
12792 ;; python-magic package. Thus we include it, instead of using
12793 ;; python-file. Ironically, s3cmd sometimes works better
12794 ;; without libmagic bindings at all:
12795 ;; https://github.com/s3tools/s3cmd/issues/198
12796 ("python2-magic" ,python2-magic)))
12797 (home-page "https://s3tools.org/s3cmd")
12798 (synopsis "Command line tool for S3-compatible storage services")
12799 (description
12800 "S3cmd is a command line tool for uploading, retrieving and managing data
12801 in storage services that are compatible with the Amazon Simple Storage
12802 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
12803 GnuPG encryption, and more. It also supports management of Amazon's
12804 CloudFront content delivery network.")
12805 (license license:gpl2+)))
12806
12807 (define-public python-pkgconfig
12808 (package
12809 (name "python-pkgconfig")
12810 (version "1.3.1")
12811 (source
12812 (origin
12813 (method url-fetch)
12814 (uri (pypi-uri "pkgconfig" version))
12815 (sha256
12816 (base32
12817 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
12818 (build-system python-build-system)
12819 (native-inputs
12820 `(("python-nose" ,python-nose)))
12821 (inputs
12822 `(("pkg-config" ,pkg-config)))
12823 (arguments
12824 `(#:phases
12825 (modify-phases %standard-phases
12826 (add-before 'build 'patch
12827 ;; Hard-code the path to pkg-config.
12828 (lambda _
12829 (substitute* "pkgconfig/pkgconfig.py"
12830 (("cmd = 'pkg-config")
12831 (string-append "cmd = '" (which "pkg-config"))))
12832 #t))
12833 (replace 'check
12834 (lambda _
12835 (invoke "nosetests" "test.py"))))))
12836 (home-page "https://github.com/matze/pkgconfig")
12837 (synopsis "Python interface for pkg-config")
12838 (description "This module provides a Python interface to pkg-config. It
12839 can be used to find all pkg-config packages, check if a package exists,
12840 check if a package meets certain version requirements, query CFLAGS and
12841 LDFLAGS and parse the output to build extensions with setup.py.")
12842 (license license:expat)))
12843
12844 (define-public python2-pkgconfig
12845 (package-with-python2 python-pkgconfig))
12846
12847 (define-public python-bz2file
12848 (package
12849 (name "python-bz2file")
12850 (version "0.98")
12851 (source
12852 (origin
12853 (method url-fetch)
12854 (uri (pypi-uri "bz2file" version))
12855 (sha256
12856 (base32
12857 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
12858 (build-system python-build-system)
12859 (arguments
12860 `(#:tests? #f)) ; Tests use deprecated python modules.
12861 (home-page "https://github.com/nvawda/bz2file")
12862 (synopsis "Read and write bzip2-compressed files")
12863 (description
12864 "Bz2file is a Python library for reading and writing bzip2-compressed
12865 files. It contains a drop-in replacement for the I/O interface in the
12866 standard library's @code{bz2} module, including features from the latest
12867 development version of CPython that are not available in older releases.")
12868 (license license:asl2.0)))
12869
12870 (define-public python2-bz2file
12871 (package-with-python2 python-bz2file))
12872
12873 (define-public python-future
12874 (package
12875 (name "python-future")
12876 (version "0.17.1")
12877 (source
12878 (origin
12879 (method url-fetch)
12880 (uri (pypi-uri "future" version))
12881 (sha256
12882 (base32
12883 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
12884 (build-system python-build-system)
12885 ;; Many tests connect to the network or are otherwise flawed.
12886 ;; https://github.com/PythonCharmers/python-future/issues/210
12887 (arguments
12888 `(#:tests? #f))
12889 (home-page "https://python-future.org")
12890 (synopsis "Single-source support for Python 3 and 2")
12891 (description
12892 "@code{python-future} is the missing compatibility layer between Python 2 and
12893 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
12894 to support both Python 2 and Python 3 with minimal overhead.")
12895 (license license:expat)))
12896
12897 (define-public python2-future
12898 (package-with-python2 python-future))
12899
12900 (define-public python-cysignals
12901 (package
12902 (name "python-cysignals")
12903 (version "1.9.0")
12904 (source
12905 (origin
12906 (method url-fetch)
12907 (uri (pypi-uri "cysignals" version))
12908 (sha256
12909 (base32
12910 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
12911 (build-system python-build-system)
12912 (native-inputs
12913 `(("python-cython" ,python-cython)
12914 ("python-sphinx" ,python-sphinx)))
12915 (inputs
12916 `(("pari-gp" ,pari-gp)))
12917 (arguments
12918 `(#:modules ((guix build python-build-system)
12919 ((guix build gnu-build-system) #:prefix gnu:)
12920 (guix build utils))
12921 ;; FIXME: Tests are executed after installation and currently fail
12922 ;; when not installing into standard locations; the author is working
12923 ;; on a fix.
12924 #:tests? #f
12925 #:phases
12926 (modify-phases %standard-phases
12927 (add-before
12928 'build 'configure
12929 (assoc-ref gnu:%standard-phases 'configure)))))
12930 (home-page
12931 "https://github.com/sagemath/cysignals")
12932 (synopsis
12933 "Handling of interrupts and signals for Cython")
12934 (description
12935 "The cysignals package provides mechanisms to handle interrupts (and
12936 other signals and errors) in Cython code, using two related approaches,
12937 for mixed Cython/Python code or external C libraries and pure Cython code,
12938 respectively.")
12939 (license license:lgpl3+)))
12940
12941 (define-public python2-cysignals
12942 (package-with-python2 python-cysignals))
12943
12944 (define-public python2-shedskin
12945 (package
12946 (name "python2-shedskin")
12947 (version "0.9.4")
12948 (source
12949 (origin
12950 (method url-fetch)
12951 (uri (string-append "https://github.com/shedskin/shedskin/"
12952 "releases/download/v" version
12953 "/shedskin-" version ".tgz"))
12954 (sha256
12955 (base32
12956 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
12957 (build-system python-build-system)
12958 (arguments
12959 `(#:python ,python-2
12960 #:phases (modify-phases %standard-phases
12961 (add-after 'unpack 'fix-resulting-include-libs
12962 (lambda* (#:key inputs #:allow-other-keys)
12963 (let ((libgc (assoc-ref inputs "libgc"))
12964 (pcre (assoc-ref inputs "pcre")))
12965 (substitute* "shedskin/makefile.py"
12966 (("variable == 'CCFLAGS':[ ]*")
12967 (string-append "variable == 'CCFLAGS':\n"
12968 " line += ' -I " pcre "/include"
12969 " -I " libgc "/include'"))
12970 (("variable == 'LFLAGS':[ ]*")
12971 (string-append "variable == 'LFLAGS':\n"
12972 " line += ' -L" pcre "/lib"
12973 " -L " libgc "/lib'")))
12974 #t))))))
12975 (inputs `(("pcre" ,pcre)
12976 ("libgc" ,libgc)))
12977 (home-page "https://shedskin.github.io/")
12978 (synopsis "Experimental Python-2 to C++ Compiler")
12979 (description (string-append "This is an experimental compiler for a subset of
12980 Python. It generates C++ code and a Makefile."))
12981 (license (list license:gpl3 license:bsd-3 license:expat))))
12982
12983 (define-public python2-rope
12984 (package
12985 (name "python2-rope")
12986 (version "0.11.0")
12987 (source
12988 (origin
12989 (method url-fetch)
12990 (uri (pypi-uri "rope" version))
12991 (sha256
12992 (base32
12993 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
12994 (arguments
12995 ;; Rope has only partial python3 support, see `python-rope'
12996 `(#:python ,python-2))
12997 (build-system python-build-system)
12998 (native-inputs
12999 `(("python2-unittest2" ,python2-unittest2)))
13000 (home-page "https://github.com/python-rope/rope")
13001 (synopsis "Refactoring library for Python")
13002 (description "Rope is a refactoring library for Python. It facilitates
13003 the renaming, moving and extracting of attributes, functions, modules, fields
13004 and parameters in Python 2 source code. These refactorings can also be applied
13005 to occurrences in strings and comments.")
13006 (license license:gpl2)))
13007
13008 (define-public python-rope
13009 (package/inherit python2-rope
13010 (name "python-rope")
13011 (arguments `(#:python ,python-wrapper
13012 ;; XXX: Only partial python3 support, results in some failing
13013 ;; tests: <https://github.com/python-rope/rope/issues/247>.
13014 #:tests? #f))
13015 (properties `((python2-variant . ,(delay python2-rope))))))
13016
13017 (define-public python-py3status
13018 (package
13019 (name "python-py3status")
13020 (version "3.21")
13021 (source
13022 (origin
13023 (method url-fetch)
13024 (uri (pypi-uri "py3status" version))
13025 (sha256
13026 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
13027 (build-system python-build-system)
13028 (inputs
13029 `(("file" ,file)))
13030 (arguments
13031 '(#:phases
13032 (modify-phases %standard-phases
13033 ;; 'file' is used for detection of configuration file encoding
13034 ;; let's make link the dependency to particular input
13035 (add-before 'build 'patch-file-path
13036 (lambda* (#:key inputs #:allow-other-keys)
13037 (let ((file-path (assoc-ref inputs "file")))
13038 (substitute* "py3status/parse_config.py"
13039 (("\\[\"file\", \"-b\"")
13040 (string-append "['" file-path "/bin/file', '-b'")))
13041 #t))))
13042 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
13043 (home-page "https://github.com/ultrabug/py3status")
13044 (synopsis "Extensible i3status wrapper written in Python")
13045 (description "py3status is an i3status wrapper which extends i3status
13046 functionality in a modular way, allowing you to extend your panel with your
13047 own code, responding to click events and updating clock every second.")
13048 (license license:bsd-3)))
13049
13050 (define-public python2-selectors2
13051 (package
13052 (name "python2-selectors2")
13053 (version "2.0.1")
13054 (source (origin
13055 (method url-fetch)
13056 (uri (pypi-uri "selectors2" version))
13057 (sha256
13058 (base32
13059 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
13060 (build-system python-build-system)
13061 (arguments
13062 `(#:python ,python-2))
13063 (native-inputs
13064 `(("python2-mock" ,python2-mock)
13065 ("python2-psutil" ,python2-psutil)))
13066 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
13067 (synopsis "Backport of the selectors module from Python 3.5+")
13068 (description
13069 "This package provides a drop-in replacement for the @code{selectors}
13070 module in Python 3.5 and later.")
13071 (license license:expat)))
13072
13073 (define-public python-tblib
13074 (package
13075 (name "python-tblib")
13076 (version "1.6.0")
13077 (source (origin
13078 (method url-fetch)
13079 (uri (pypi-uri "tblib" version))
13080 (sha256
13081 (base32
13082 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
13083 (build-system python-build-system)
13084 (arguments
13085 `(#:phases
13086 (modify-phases %standard-phases
13087 (replace 'check
13088 (lambda _
13089 ;; Upstream runs tests after installation and the package itself
13090 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
13091 ;; found.
13092 (setenv "PYTHONPATH"
13093 (string-append (getcwd) "/build/lib:"
13094 (getenv "PYTHONPATH")))
13095 (invoke "py.test" "-vv" "tests" "README.rst"))))))
13096 (native-inputs
13097 `(("python-pytest" ,python-pytest)
13098 ("python-six" ,python-six)))
13099 (home-page "https://github.com/ionelmc/python-tblib")
13100 (synopsis "Traceback serialization library")
13101 (description
13102 "Traceback serialization allows you to:
13103
13104 @enumerate
13105 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
13106 different processes. This allows better error handling when running code over
13107 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
13108
13109 @item Parse traceback strings and raise with the parsed tracebacks.
13110 @end enumerate\n")
13111 (license license:bsd-3)))
13112
13113 (define-public python2-tblib
13114 (package-with-python2 python-tblib))
13115
13116 (define-public python-greenlet
13117 (package
13118 (name "python-greenlet")
13119 (version "1.0.0")
13120 (source (origin
13121 (method url-fetch)
13122 (uri (pypi-uri "greenlet" version))
13123 (sha256
13124 (base32
13125 "1y6wbg9yhm9dw6m768n4yslp56h85pnxkk3drz6icn15g6f1d7ki"))))
13126 (build-system python-build-system)
13127 (home-page "https://greenlet.readthedocs.io/")
13128 (synopsis "Lightweight in-process concurrent programming")
13129 (description
13130 "Greenlet package is a spin-off of Stackless, a version of CPython
13131 that supports micro-threads called \"tasklets\". Tasklets run
13132 pseudo-concurrently (typically in a single or a few OS-level threads) and
13133 are synchronized with data exchanges on \"channels\".")
13134 (license (list license:psfl license:expat))))
13135
13136 (define-public python-objgraph
13137 (package
13138 (name "python-objgraph")
13139 (version "3.4.1")
13140 (source
13141 (origin
13142 (method url-fetch)
13143 (uri (pypi-uri "objgraph" version))
13144 (sha256
13145 (base32
13146 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
13147 (build-system python-build-system)
13148 (propagated-inputs
13149 `(("python-graphviz" ,python-graphviz)))
13150 (native-inputs
13151 `(("python-mock" ,python-mock)
13152 ("graphviz" ,graphviz)))
13153 (home-page "https://mg.pov.lt/objgraph/")
13154 (synopsis "Draw Python object reference graphs with graphviz")
13155 (description
13156 "This package provides tools to draw Python object reference graphs with
13157 graphviz.")
13158 (license license:expat)))
13159
13160 (define-public python2-objgraph
13161 (package-with-python2 python-objgraph))
13162
13163 (define-public python-gevent
13164 (package
13165 (name "python-gevent")
13166 (version "21.1.2")
13167 (source (origin
13168 (method url-fetch)
13169 (uri (pypi-uri "gevent" version))
13170 (sha256
13171 (base32
13172 "10f9y899y9nmq51pv4r1zb51b4w5yxx00sz5whvg9vm956hc432j"))
13173 (modules '((guix build utils)))
13174 (snippet
13175 '(begin
13176 ;; unbunding libev and c-ares
13177 (delete-file-recursively "deps")))))
13178 (build-system python-build-system)
13179 (arguments
13180 `(#:modules ((ice-9 ftw)
13181 (ice-9 match)
13182 (srfi srfi-26)
13183 (guix build utils)
13184 (guix build python-build-system))
13185 #:phases (modify-phases %standard-phases
13186 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
13187 (lambda _
13188 (substitute* "src/gevent/subprocess.py"
13189 (("/bin/sh") (which "sh")))
13190 (for-each (lambda (file)
13191 (substitute* file
13192 (("/bin/sh") (which "sh"))
13193 (("/bin/true") (which "true"))))
13194 (find-files "src/greentest" "\\.py$"))))
13195 (add-before 'build 'do-not-use-bundled-sources
13196 (lambda _
13197 (setenv "GEVENTSETUP_EMBED" "0")
13198
13199 ;; Prevent building bundled libev.
13200 (substitute* "setup.py"
13201 (("run_make=_BUILDING")
13202 "run_make=False"))))
13203 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
13204 (lambda* (#:key inputs #:allow-other-keys)
13205 (let ((greenlet (string-append
13206 (assoc-ref inputs "python-greenlet")
13207 "/include")))
13208 (match (scandir greenlet
13209 (lambda (item)
13210 (string-prefix? "python" item)))
13211 ((python)
13212 (setenv "C_INCLUDE_PATH"
13213 (string-append greenlet "/" python ":"
13214 (or (getenv "C_INCLUDE_PATH")
13215 ""))))))))
13216 (add-before 'check 'pretend-to-be-CI
13217 (lambda _
13218 ;; A few tests are skipped due to network constraints or
13219 ;; get longer timeouts when running in a CI environment.
13220 ;; Piggy-back on that, as we need the same adjustments.
13221 (setenv "TRAVIS" "1")
13222 (setenv "APPVEYOR" "1")))
13223 (add-before 'check 'adjust-tests
13224 (lambda _
13225 (let ((disabled-tests
13226 '(;; These tests relies on networking which is
13227 ;; not available in the build container.
13228 "test__getaddrinfo_import.py"
13229 "test__server_pywsgi.py"
13230 ;; XXX: These tests borrow functionality from the
13231 ;; Python builtin 'test' module, but it is not
13232 ;; installed with the Guix Python distribution.
13233 "test_smtpd.py"
13234 "test_wsgiref.py"
13235 "test_urllib2.py"
13236 "test_thread.py"
13237 "test_threading.py"
13238 "test__threading_2.py"
13239 ;; These tests rely on KeyboardInterrupts which do not
13240 ;; work inside the build container for some reason
13241 ;; (lack of controlling terminal?).
13242 "test_subprocess.py"
13243 "test__issues461_471.py"
13244 ;; TODO: Patch out the tests that use getprotobyname, etc
13245 ;; instead of disabling all the tests from these files.
13246 "test__resolver_dnspython.py"
13247 "test__doctests.py"
13248 "test__all__.py"
13249 "test___config.py"
13250 "test__execmodules.py")))
13251 (call-with-output-file "skipped_tests.txt"
13252 (lambda (port)
13253 (format port "~a~%"
13254 (string-join disabled-tests "\n")))))))
13255 (replace 'check
13256 (lambda _
13257 ;; Make sure the build directory is on PYTHONPATH.
13258 (setenv "PYTHONPATH"
13259 (string-append
13260 (getenv "PYTHONPATH") ":"
13261 (getcwd) "/build/"
13262 (car (scandir "build" (cut string-prefix? "lib." <>)))))
13263
13264 ;; Use the build daemons configured number of workers.
13265 (setenv "NWORKERS" (number->string (parallel-job-count)))
13266
13267 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
13268 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
13269 (propagated-inputs
13270 `(("python-greenlet" ,python-greenlet)
13271 ("python-objgraph" ,python-objgraph)
13272 ("python-zope.event" ,python-zope-event)
13273 ("python-zope.interface" ,python-zope-interface)))
13274 (native-inputs
13275 `(("python-six" ,python-six)
13276
13277 ;; For tests.
13278 ("python-dnspython" ,python-dnspython)
13279 ("python-psutil" ,python-psutil)))
13280 (inputs
13281 `(("c-ares" ,c-ares)
13282 ("libev" ,libev)))
13283 (home-page "https://www.gevent.org/")
13284 (synopsis "Coroutine-based network library")
13285 (description
13286 "@code{gevent} is a coroutine-based Python networking library that uses
13287 @code{greenlet} to provide a high-level synchronous API on top of the
13288 @code{libev} event loop.")
13289 (license license:expat)))
13290
13291 (define-public python-fastimport
13292 (package
13293 (name "python-fastimport")
13294 (version "0.9.9")
13295 (source
13296 (origin
13297 (method url-fetch)
13298 (uri (pypi-uri "fastimport" version))
13299 (sha256
13300 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
13301 (build-system python-build-system)
13302 (home-page "https://github.com/jelmer/python-fastimport")
13303 (synopsis "VCS fastimport parser and generator in Python")
13304 (description "This package provides a parser for and generator of the Git
13305 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
13306 format.")
13307 (license license:gpl2+)))
13308
13309 (define-public python2-fastimport
13310 (package-with-python2 python-fastimport))
13311
13312 (define-public python-twisted
13313 (package
13314 (name "python-twisted")
13315 (version "19.7.0")
13316 (source (origin
13317 (method url-fetch)
13318 (uri (pypi-uri "Twisted" version ".tar.bz2"))
13319 (sha256
13320 (base32
13321 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
13322 (build-system python-build-system)
13323 (arguments
13324 '(#:tests? #f)) ; FIXME: some tests fail
13325 (propagated-inputs
13326 `(("python-zope-interface" ,python-zope-interface)
13327 ("python-pyhamcrest" ,python-pyhamcrest)
13328 ("python-incremental" ,python-incremental)
13329 ("python-hyperlink" ,python-hyperlink)
13330 ("python-constantly" ,python-constantly)
13331 ("python-automat" ,python-automat)))
13332 (home-page "https://twistedmatrix.com/")
13333 (synopsis "Asynchronous networking framework written in Python")
13334 (description
13335 "Twisted is an extensible framework for Python programming, with special
13336 focus on event-based network programming and multiprotocol integration.")
13337 (license license:expat)))
13338
13339 (define-public python2-twisted
13340 (package-with-python2 python-twisted))
13341
13342 (define-public python-pika
13343 (package
13344 (name "python-pika")
13345 (version "0.12.0")
13346 (source
13347 (origin
13348 (method url-fetch)
13349 (uri (pypi-uri "pika" version))
13350 (sha256
13351 (base32
13352 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
13353 (build-system python-build-system)
13354 (native-inputs
13355 `(("python-pyev" ,python-pyev)
13356 ("python-tornado" ,python-tornado)
13357 ("python-twisted" ,python-twisted)))
13358 (home-page "https://pika.readthedocs.org")
13359 (synopsis "Pure Python AMQP Client Library")
13360 (description
13361 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
13362 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
13363 network support library.")
13364 (license license:bsd-3)))
13365
13366 (define-public python2-pika
13367 (package-with-python2 python-pika))
13368
13369 (define-public python-ply
13370 (package
13371 (name "python-ply")
13372 (version "3.11")
13373 (source
13374 (origin
13375 (method url-fetch)
13376 (uri (pypi-uri "ply" version))
13377 (sha256
13378 (base32
13379 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
13380 (build-system python-build-system)
13381 (home-page "http://www.dabeaz.com/ply/")
13382 (synopsis "Python Lex & Yacc")
13383 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
13384 It uses LR parsing and does extensive error checking.")
13385 (license license:bsd-3)))
13386
13387 (define-public python-tabulate
13388 (package
13389 (name "python-tabulate")
13390 (version "0.8.9")
13391 (source (origin
13392 (method url-fetch)
13393 (uri (pypi-uri "tabulate" version))
13394 (sha256
13395 (base32
13396 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
13397 (build-system python-build-system)
13398 (arguments
13399 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
13400 ;; and the latest release is not tagged in the upstream repository.
13401 '(#:tests? #f))
13402 (home-page "https://bitbucket.org/astanin/python-tabulate")
13403 (synopsis "Pretty-print tabular data")
13404 (description
13405 "Tabulate is a library and command-line utility to pretty-print tabular
13406 data in Python.")
13407 (license license:expat)))
13408
13409 (define-public python2-tabulate
13410 (package-with-python2 python-tabulate))
13411
13412 (define-public python-kazoo
13413 (package
13414 (name "python-kazoo")
13415 (version "2.4.0")
13416 (source
13417 (origin
13418 (method url-fetch)
13419 (uri (pypi-uri "kazoo" version))
13420 (sha256
13421 (base32
13422 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
13423 (build-system python-build-system)
13424 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
13425 (propagated-inputs
13426 `(("python-six" ,python-six)))
13427 (home-page "https://kazoo.readthedocs.org")
13428 (synopsis "High-level Zookeeper client library")
13429 (description
13430 "Kazoo is a Python client library for the Apache Zookeeper distributed
13431 application service. It is designed to be easy to use and to avoid common
13432 programming errors.")
13433 (license license:asl2.0)))
13434
13435 (define-public python2-kazoo
13436 (package-with-python2 python-kazoo))
13437
13438 (define-public python-pykafka
13439 (package
13440 (name "python-pykafka")
13441 (version "2.4.0")
13442 (source (origin
13443 (method url-fetch)
13444 (uri (pypi-uri "pykafka" version))
13445 (sha256
13446 (base32
13447 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
13448 (build-system python-build-system)
13449 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
13450 (propagated-inputs
13451 `(("python-gevent" ,python-gevent)
13452 ("python-kazoo" ,python-kazoo)
13453 ("python-tabulate" ,python-tabulate)))
13454 (inputs
13455 `(("librdkafka" ,librdkafka)))
13456 (home-page "https://pykafka.readthedocs.io/")
13457 (synopsis "Apache Kafka client for Python")
13458 (description
13459 "PyKafka is a client for the Apache Kafka distributed messaging system.
13460 It includes Python implementations of Kafka producers and consumers, which
13461 are optionally backed by a C extension built on librdkafka.")
13462 (license license:asl2.0)))
13463
13464 (define-public python-wcwidth
13465 (package
13466 (name "python-wcwidth")
13467 (version "0.1.8")
13468 (source (origin
13469 (method url-fetch)
13470 (uri (pypi-uri "wcwidth" version))
13471 (sha256
13472 (base32
13473 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
13474 (build-system python-build-system)
13475 (home-page "https://github.com/jquast/wcwidth")
13476 (synopsis "Measure number of terminal column cells of wide-character codes")
13477 (description "Wcwidth measures the number of terminal column cells of
13478 wide-character codes. It is useful for those implementing a terminal emulator,
13479 or programs that carefully produce output to be interpreted by one. It is a
13480 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
13481 specified in POSIX.1-2001 and POSIX.1-2008.")
13482 (license license:expat)))
13483
13484 (define-public python2-wcwidth
13485 (package-with-python2 python-wcwidth))
13486
13487 (define-public python2-jsonrpclib
13488 (package
13489 (name "python2-jsonrpclib")
13490 (version "0.1.7")
13491 (source (origin
13492 (method url-fetch)
13493 (uri (pypi-uri "jsonrpclib" version))
13494 (sha256
13495 (base32
13496 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
13497 (build-system python-build-system)
13498 (arguments
13499 `(#:tests? #f
13500 #:python ,python-2))
13501 (home-page "https://github.com/joshmarshall/jsonrpclib/")
13502 (synopsis "Implementation of JSON-RPC specification for Python")
13503 (description
13504 "This library is an implementation of the JSON-RPC specification.
13505 It supports both the original 1.0 specification, as well as the
13506 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
13507 etc.")
13508 (license license:asl2.0)))
13509
13510 (define-public python-chai
13511 (package
13512 (name "python-chai")
13513 (version "1.1.2")
13514 (source (origin
13515 (method url-fetch)
13516 (uri (pypi-uri "chai" version))
13517 (sha256
13518 (base32
13519 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
13520 (build-system python-build-system)
13521 (home-page "https://github.com/agoragames/chai")
13522 (synopsis "Mocking framework for Python")
13523 (description
13524 "Chai provides an api for mocking, stubbing and spying your python
13525 objects, patterned after the Mocha library for Ruby.")
13526 (license license:bsd-3)))
13527
13528 (define-public python2-chai
13529 (package-with-python2 python-chai))
13530
13531 (define-public python-inflection
13532 (package
13533 (name "python-inflection")
13534 (version "0.3.1")
13535 (source
13536 (origin (method url-fetch)
13537 (uri (pypi-uri "inflection" version))
13538 (sha256
13539 (base32
13540 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
13541 (build-system python-build-system)
13542 (native-inputs
13543 `(("python-pytest" ,python-pytest)))
13544 (home-page "https://github.com/jpvanhal/inflection")
13545 (synopsis "Python string transformation library")
13546 (description
13547 "Inflection is a string transformation library. It singularizes
13548 and pluralizes English words, and transforms strings from CamelCase to
13549 underscored string.")
13550 (license license:expat)))
13551
13552 (define-public python2-inflection
13553 (package-with-python2 python-inflection))
13554
13555 (define-public python-pylev
13556 (package
13557 (name "python-pylev")
13558 (version "1.3.0")
13559 (source (origin
13560 (method url-fetch)
13561 (uri (pypi-uri "pylev" version))
13562 (sha256
13563 (base32
13564 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
13565 (build-system python-build-system)
13566 (home-page "https://github.com/toastdriven/pylev")
13567 (synopsis "Levenshtein distance implementation in Python")
13568 (description "Pure Python Levenshtein implementation, based off the
13569 Wikipedia code samples at
13570 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
13571 (license license:bsd-3)))
13572
13573 (define-public python2-pylev
13574 (package-with-python2 python-pylev))
13575
13576 (define-public python-cleo
13577 (package
13578 (name "python-cleo")
13579 (version "0.8.1")
13580 (source (origin
13581 (method url-fetch)
13582 (uri (pypi-uri "cleo" version))
13583 (sha256
13584 (base32
13585 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
13586 (build-system python-build-system)
13587 (native-inputs
13588 `( ;; For testing
13589 ("python-mock" ,python-mock)
13590 ("python-pytest-mock" ,python-pytest-mock)
13591 ("python-pytest" ,python-pytest)))
13592 (propagated-inputs
13593 `(("python-backpack" ,python-backpack)
13594 ("python-clikit" ,python-clikit)
13595 ("python-pastel" ,python-pastel)
13596 ("python-pylev" ,python-pylev)))
13597 (home-page "https://github.com/sdispater/cleo")
13598 (synopsis "Command-line arguments library for Python")
13599 (description
13600 "Cleo allows you to create command-line commands with signature in
13601 docstring and colored output.")
13602 (license license:expat)))
13603
13604 (define-public python2-cleo
13605 (package-with-python2 python-cleo))
13606
13607 (define-public python-tomlkit
13608 (package
13609 (name "python-tomlkit")
13610 (version "0.7.0")
13611 (source
13612 (origin
13613 (method url-fetch)
13614 (uri (pypi-uri "tomlkit" version))
13615 (sha256
13616 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
13617 (build-system python-build-system)
13618 (native-inputs
13619 `(("python-pytest" ,python-pytest)
13620 ("python-pyyaml" ,python-pyyaml)))
13621 (home-page "https://github.com/sdispater/tomlkit")
13622 (synopsis "Style-preserving TOML library")
13623 (description
13624 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
13625 preserves all comments, indentations, whitespace and internal element ordering,
13626 and makes them accessible and editable via an intuitive API. It can also
13627 create new TOML documents from scratch using the provided helpers. Part of the
13628 implementation has been adapted, improved, and fixed from Molten.")
13629 (license license:expat)))
13630
13631 (define-public python-shellingham
13632 (package
13633 (name "python-shellingham")
13634 (version "1.3.2")
13635 (source
13636 (origin
13637 (method url-fetch)
13638 (uri (pypi-uri "shellingham" version))
13639 (sha256
13640 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
13641 (build-system python-build-system)
13642 (arguments
13643 `(#:phases
13644 (modify-phases %standard-phases
13645 (add-after 'unpack 'restore-setup.py
13646 ;; setup.py will return in the next release.
13647 ;; <https://github.com/sarugaku/shellingham/issues/33>
13648 (lambda _
13649 (with-output-to-file "setup.py"
13650 (lambda _
13651 (display "from setuptools import setup\nsetup()\n")))
13652 #t)))))
13653 (home-page "https://github.com/sarugaku/shellingham")
13654 (synopsis "Tool to detect surrounding shell")
13655 (description
13656 "Shellingham detects what shell the current Python executable is
13657 running in.")
13658 (license license:isc)))
13659
13660 (define-public python-memcached
13661 (package
13662 (name "python-memcached")
13663 (version "1.59")
13664 (source
13665 (origin
13666 (method url-fetch)
13667 (uri (pypi-uri "python-memcached" version))
13668 (sha256
13669 (base32
13670 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
13671 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
13672 (build-system python-build-system)
13673 (propagated-inputs `(("python-six" ,python-six)))
13674 (home-page
13675 "https://github.com/linsomniac/python-memcached")
13676 (synopsis "Pure python memcached client")
13677 (description
13678 "This software is a pure Python interface to the memcached memory cache
13679 daemon. It is the client side software which allows storing values in one or
13680 more, possibly remote, memcached servers.")
13681 (license license:psfl)))
13682
13683 (define-public python-clikit
13684 (package
13685 (name "python-clikit")
13686 (version "0.6.2")
13687 (source
13688 (origin
13689 (method url-fetch)
13690 (uri (pypi-uri "clikit" version))
13691 (sha256
13692 (base32
13693 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
13694 (build-system python-build-system)
13695 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
13696 (propagated-inputs
13697 `(("python-crashtest" ,python-crashtest)
13698 ("python-pastel" ,python-pastel)
13699 ("python-pylev" ,python-pylev)))
13700 (home-page "https://github.com/sdispater/clikit")
13701 (synopsis "Group of utilities to build command line interfaces")
13702 (description
13703 "CliKit is a group of utilities to build testable command line
13704 interfaces.")
13705 (properties `((python2-variant . ,(delay python2-clikit))))
13706 (license license:expat)))
13707
13708 (define-public python2-clikit
13709 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
13710 (package/inherit
13711 base
13712 (propagated-inputs
13713 `(("python-enum34" ,python2-enum34)
13714 ("python-typing" ,python2-typing)
13715 ,@(package-propagated-inputs base))))))
13716
13717 (define-public python-msgpack-python
13718 (package
13719 (name "python-msgpack-python")
13720 (version "0.5.6")
13721 (source
13722 (origin
13723 (method url-fetch)
13724 (uri (pypi-uri "msgpack-python" version))
13725 (sha256
13726 (base32
13727 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
13728 (build-system python-build-system)
13729 (home-page "https://msgpack.org/")
13730 (synopsis "Package to deserialize messages in MessagePack binary format")
13731 (description
13732 "MessagePack is an efficient binary serialization format. It lets you
13733 exchange data among multiple languages like JSON. But it's faster and
13734 smaller. Small integers are encoded into a single byte, and typical short
13735 strings require only one extra byte in addition to the strings themselves.")
13736 (license license:asl2.0)))
13737
13738 (define-public python-cachy
13739 (package
13740 (name "python-cachy")
13741 (version "0.3.0")
13742 (source
13743 (origin
13744 (method url-fetch)
13745 (uri (pypi-uri "cachy" version))
13746 (sha256
13747 (base32
13748 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
13749 (build-system python-build-system)
13750 (arguments
13751 '(#:phases
13752 (modify-phases %standard-phases
13753 (replace 'check
13754 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
13755 "pytest"))))))
13756 (native-inputs
13757 `(("memcached" ,memcached)
13758 ("python-fakeredis" ,python-fakeredis)
13759 ("python-flexmock" ,python-flexmock)
13760 ("python-pifpaf" ,python-pifpaf)
13761 ("python-pytest" ,python-pytest)))
13762 (propagated-inputs
13763 `(("python-memcached" ,python-memcached)
13764 ("python-msgpack-python" ,python-msgpack-python)
13765 ("python-redis" ,python-redis)))
13766 (home-page "https://github.com/sdispater/cachy")
13767 (synopsis "Simple yet effective caching library")
13768 (description
13769 "Cachy provides a simple yet effective caching library. A simple but
13770 powerful API: thread-safety; decorator syntax; support for memcached, redis,
13771 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
13772 (license license:expat)))
13773
13774 (define-public poetry
13775 (package
13776 (name "poetry")
13777 (version "1.1.5")
13778 ;; Poetry can only be built from source with Poetry.
13779 (source
13780 (origin
13781 (method url-fetch)
13782 (uri (pypi-uri "poetry" version))
13783 (sha256
13784 (base32
13785 "1dvx08ksv5wnsj45db23921rj136akmcnxa0kmlsddf3wbh6wcka"))))
13786 (build-system python-build-system)
13787 (arguments
13788 `(#:tests? #f ;; Pypi does not have tests.
13789 #:phases
13790 (modify-phases %standard-phases
13791 (add-before 'build 'patch-setup-py
13792 (lambda _
13793 (substitute* "setup.py"
13794 ;; Allow newer versions of python-keyring.
13795 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
13796 ;; TODO: remove after the next release cycle,
13797 ;; when packaging has been updated.
13798 (("packaging>=20.4,<21.0") "packaging>=20.0,<21.0"))
13799 #t)))))
13800 (propagated-inputs
13801 `(("python-cachecontrol" ,python-cachecontrol)
13802 ("python-cachy" ,python-cachy)
13803 ("python-cleo" ,python-cleo)
13804 ("python-clikit" ,python-clikit)
13805 ("python-html5lib" ,python-html5lib)
13806 ("python-keyring" ,python-keyring)
13807 ("python-msgpack-transitional" ,python-msgpack-transitional)
13808 ("python-packaging" ,python-packaging)
13809 ("python-pexpect" ,python-pexpect)
13810 ("python-pip" ,python-pip)
13811 ("python-pkginfo" ,python-pkginfo)
13812 ("python-poetry-core" ,python-poetry-core)
13813 ("python-requests" ,python-requests)
13814 ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
13815 ("python-shellingham" ,python-shellingham)
13816 ("python-tomlkit" ,python-tomlkit)
13817 ("python-virtualenv" ,python-virtualenv)))
13818 (home-page "https://python-poetry.org")
13819 (synopsis "Python dependency management and packaging made easy")
13820 (description "Poetry is a tool for dependency management and packaging
13821 in Python. It allows you to declare the libraries your project depends on and
13822 it will manage (install/update) them for you.")
13823 (license license:expat)))
13824
13825 (define-public python-lark-parser
13826 (package
13827 (name "python-lark-parser")
13828 (version "0.9.0")
13829 (source (origin
13830 (method url-fetch)
13831 (uri (pypi-uri "lark-parser" version))
13832 (sha256
13833 (base32
13834 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
13835 (build-system python-build-system)
13836 (home-page "https://github.com/lark-parser/lark")
13837 (synopsis "Multi-language parser for Python")
13838 (description
13839 "Lark is a parser built with a focus on ergonomics, performance and
13840 resilience. Lark can parse all context-free languages. That means it is
13841 capable of parsing almost any programming language out there, and to
13842 some degree most natural languages too.")
13843 (license license:expat)))
13844
13845 (define-public python-libcst
13846 (package
13847 (name "python-libcst")
13848 (version "0.3.8")
13849 (source (origin
13850 (method url-fetch)
13851 (uri (pypi-uri "libcst" version))
13852 (sha256
13853 (base32
13854 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
13855 (build-system python-build-system)
13856 (arguments
13857 `(#:phases
13858 (modify-phases %standard-phases
13859 (add-after 'unpack 'remove-failing-tests
13860 (lambda _
13861 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
13862 (delete-file "libcst/tests/test_fuzz.py")
13863 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
13864 (delete-file "libcst/tests/test_pyre_integration.py")
13865 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
13866 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
13867 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
13868 #t))
13869 (add-before 'check 'generate-test-data
13870 (lambda _
13871 (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
13872 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
13873 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
13874 (replace 'check
13875 (lambda _
13876 (invoke "python" "-m" "unittest")
13877 #t)))))
13878 (native-inputs
13879 `(("python-black" ,python-black)
13880 ("python-isort" ,python-isort)))
13881 (propagated-inputs
13882 `(("python-typing-extensions" ,python-typing-extensions)
13883 ("python-typing-inspect" ,python-typing-inspect)
13884 ("python-pyyaml" ,python-pyyaml)))
13885 (home-page "https://github.com/Instagram/LibCST")
13886 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
13887 (description
13888 "LibCST parses Python source code as a CST tree that keeps all
13889 formatting details (comments, whitespaces, parentheses, etc). It's useful
13890 for building automated refactoring (codemod) applications and linters.
13891 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
13892 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
13893 naming node types and fields, LibCST creates a lossless CST that looks and
13894 feels like an AST.")
13895 (license (list license:expat
13896 ;; Some files unde libcst/_parser/ are under Python Software
13897 ;; Foundation license (see LICENSE file for details)
13898 license:psfl
13899 ;; libcst/_add_slots.py
13900 license:asl2.0))))
13901
13902 (define-public python-typing-inspect
13903 (package
13904 (name "python-typing-inspect")
13905 (version "0.6.0")
13906 (source (origin
13907 (method url-fetch)
13908 (uri (pypi-uri "typing_inspect" version))
13909 (sha256
13910 (base32
13911 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
13912 (build-system python-build-system)
13913 (propagated-inputs
13914 `(("python-mypy-extensions" ,python-mypy-extensions)
13915 ("python-typing-extensions" ,python-typing-extensions)))
13916 (home-page "https://github.com/ilevkivskyi/typing_inspect")
13917 (synopsis "API for inspection of types in the Python @code{typing} module")
13918 (description
13919 "The @code{typing_inspect} module defines experimental API for runtime
13920 inspection of types defined in the Python standard typing module.")
13921 (license license:expat)))
13922
13923 (define-public python-lazy-object-proxy
13924 (package
13925 (name "python-lazy-object-proxy")
13926 (version "1.5.1")
13927 (source (origin
13928 (method url-fetch)
13929 (uri (pypi-uri "lazy-object-proxy" version))
13930 (sha256
13931 (base32
13932 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
13933 (native-inputs
13934 `(("python-setuptools-scm" ,python-setuptools-scm)))
13935 (build-system python-build-system)
13936 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
13937 (synopsis "Lazy object proxy for python")
13938 (description
13939 "Lazy object proxy is an object that wraps a callable but defers the call
13940 until the object is actually required, and caches the result of said call.")
13941 (license license:bsd-2)))
13942
13943 (define-public python2-lazy-object-proxy
13944 (package-with-python2 python-lazy-object-proxy))
13945
13946 (define-public python-dnspython
13947 (package
13948 (name "python-dnspython")
13949 (version "2.0.0")
13950 (source (origin
13951 (method url-fetch)
13952 (uri (pypi-uri "dnspython" version ".zip"))
13953 (sha256
13954 (base32
13955 "1dyip5ygqqhrgcaiy7qzjpndl9xciip186paxqwkm726fj9z0jh4"))))
13956 (build-system python-build-system)
13957 (native-inputs `(("unzip" ,unzip)))
13958 (arguments '(#:tests? #f)) ; XXX: requires internet access
13959 (home-page "https://www.dnspython.org")
13960 (synopsis "DNS toolkit for Python")
13961 (description
13962 "dnspython is a DNS toolkit for Python. It supports almost all record
13963 types. It can be used for queries, zone transfers, and dynamic updates.
13964 It supports TSIG authenticated messages and EDNS0.")
13965 (license license:expat)))
13966
13967 (define-public python-dnspython-1.16
13968 (package
13969 (inherit python-dnspython)
13970 (version "1.16.0")
13971 (source (origin
13972 (method url-fetch)
13973 (uri (string-append "http://www.dnspython.org/kits/"
13974 version "/dnspython-" version ".tar.gz"))
13975 (sha256
13976 (base32
13977 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
13978 (native-inputs '())))
13979
13980 (define-public python2-dnspython-1.16
13981 (package-with-python2 python-dnspython-1.16))
13982
13983 (define-public python-py3dns
13984 (package
13985 (name "python-py3dns")
13986 (version "3.2.1")
13987 (source
13988 (origin
13989 (method url-fetch)
13990 (uri (pypi-uri "py3dns" version))
13991 (sha256
13992 (base32
13993 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
13994 (build-system python-build-system)
13995 ;; This package wants to read /etc/resolv.conf. We can't patch it without
13996 ;; removing functionality so we copy from Nix and "just don't build it".
13997 (arguments
13998 `(#:phases
13999 (modify-phases %standard-phases
14000 (add-after 'unpack 'patch-source
14001 (lambda _
14002 (substitute* "setup.py"
14003 (("import DNS") "")
14004 (("DNS.__version__") (string-append "\"" ,version "\"")))
14005 #t)))
14006 #:tests? #f)) ; Also skip the tests.
14007 (home-page "https://launchpad.net/py3dns")
14008 (synopsis "Python 3 DNS library")
14009 (description "This Python 3 module provides a DNS API for looking up DNS
14010 entries from within Python 3 modules and applications. This module is a
14011 simple, lightweight implementation.")
14012 (license license:psfl)))
14013
14014 (define-public python-email-validator
14015 (package
14016 (name "python-email-validator")
14017 (version "1.0.2")
14018 (source
14019 (origin (method url-fetch)
14020 (uri (pypi-uri "email_validator" version))
14021 (sha256
14022 (base32
14023 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
14024 (build-system python-build-system)
14025 (arguments
14026 '(#:phases
14027 (modify-phases %standard-phases
14028 (add-before 'build 'use-dnspython
14029 (lambda _
14030 (substitute* "setup.py"
14031 (("dnspython3") "dnspython"))
14032 #t)))))
14033 (propagated-inputs
14034 `(("python-dnspython" ,python-dnspython)
14035 ("python-idna" ,python-idna)))
14036 (home-page "https://github.com/JoshData/python-email-validator")
14037 (synopsis "Email address validation library for Python")
14038 (description
14039 "This library validates email address syntax and deliverability.")
14040 (license license:cc0)))
14041
14042 (define-public python2-email-validator
14043 (package-with-python2 python-email-validator))
14044
14045 (define-public python-ukpostcodeparser
14046 (package
14047 (name "python-ukpostcodeparser")
14048 (version "1.0.3")
14049 (source (origin
14050 (method url-fetch)
14051 (uri (pypi-uri "UkPostcodeParser" version))
14052 (sha256
14053 (base32
14054 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
14055 (build-system python-build-system)
14056 (home-page "https://github.com/hamstah/ukpostcodeparser")
14057 (synopsis "UK Postcode parser for Python")
14058 (description
14059 "This library provides the @code{parse_uk_postcode} function for
14060 parsing UK postcodes.")
14061 (license license:expat)))
14062
14063 (define-public python2-ukpostcodeparser
14064 (package-with-python2 python-ukpostcodeparser))
14065
14066 (define-public python-faker
14067 (package
14068 (name "python-faker")
14069 (version "4.0.2")
14070 (source (origin
14071 (method url-fetch)
14072 (uri (pypi-uri "Faker" version))
14073 (sha256
14074 (base32
14075 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
14076 (build-system python-build-system)
14077 (arguments
14078 '(#:phases
14079 (modify-phases %standard-phases
14080 (replace 'check
14081 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
14082 (native-inputs
14083 `(;; For testing
14084 ("python-freezegun" ,python-freezegun)
14085 ("python-pytest" ,python-pytest)
14086 ("python-random2" ,python-random2)
14087 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
14088 ("python-validators" ,python-validators)))
14089 (propagated-inputs
14090 `(("python-dateutil" ,python-dateutil)
14091 ("python-text-unidecode" ,python-text-unidecode)))
14092 (home-page "https://github.com/joke2k/faker")
14093 (synopsis "Python package that generates fake data")
14094 (description
14095 "Faker is a Python package that generates fake data such as names,
14096 addresses, and phone numbers.")
14097 (license license:expat)
14098 (properties `((python2-variant . ,(delay python2-faker))))))
14099
14100 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
14101 (define-public python2-faker
14102 (let ((base (package-with-python2 (strip-python2-variant
14103 python-faker))))
14104 (package
14105 (inherit base)
14106 (version "3.0.1")
14107 (source (origin
14108 (method url-fetch)
14109 (uri (pypi-uri "Faker" version))
14110 (sha256
14111 (base32
14112 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
14113 (native-inputs
14114 `(("python-mock" ,python2-mock)
14115 ,@(package-native-inputs base)))
14116 (propagated-inputs
14117 `(("python2-ipaddress" ,python2-ipaddress)
14118 ("python2-six" ,python2-six)
14119 ,@(package-propagated-inputs base))))))
14120
14121 (define-public python-pyaml
14122 (package
14123 (name "python-pyaml")
14124 (version "18.11.0")
14125 (source (origin
14126 (method url-fetch)
14127 (uri (pypi-uri "pyaml" version))
14128 (sha256
14129 (base32
14130 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
14131 (build-system python-build-system)
14132 (native-inputs
14133 `(("python-unidecode" ,python-unidecode)))
14134 (propagated-inputs
14135 `(("python-pyyaml" ,python-pyyaml)))
14136 (home-page "https://github.com/mk-fg/pretty-yaml")
14137 (synopsis "YAML pretty-print library for Python")
14138 (description
14139 "pyaml is a PyYAML based python module to produce pretty and readable
14140 YAML-serialized data.")
14141 (license license:wtfpl2)))
14142
14143 (define-public python2-pyaml
14144 (package-with-python2 python-pyaml))
14145
14146 (define-public python-backpack
14147 (package
14148 (name "python-backpack")
14149 (version "0.1")
14150 (source
14151 (origin
14152 (method url-fetch)
14153 (uri (pypi-uri "backpack" version))
14154 (sha256
14155 (base32
14156 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
14157 (build-system python-build-system)
14158 (native-inputs
14159 `(("python-pytest" ,python-pytest)
14160 ("python-nose" ,python-nose)))
14161 (propagated-inputs
14162 `(("python-simplejson" ,python-simplejson)))
14163 (home-page "https://github.com/sdispater/backpack")
14164 (synopsis "Utilities for working with Python collections")
14165 (description "Backpack provides some useful utilities for working with
14166 collections of data.")
14167 (license license:expat)))
14168
14169 (define-public python2-backpack
14170 (package-with-python2 python-backpack))
14171
14172 (define-public python-prompt-toolkit
14173 (package
14174 (name "python-prompt-toolkit")
14175 (version "3.0.9")
14176 (source
14177 (origin
14178 (method url-fetch)
14179 (uri (pypi-uri "prompt_toolkit" version))
14180 (sha256
14181 (base32 "0bvjp62cs6aj9lrh7njzxdjgg8pjfw3qgmr551243d9ivmcapvn5"))))
14182 (build-system python-build-system)
14183 (arguments
14184 `(#:phases
14185 (modify-phases %standard-phases
14186 (delete 'check)
14187 (add-after 'install 'post-install-check
14188 (lambda* (#:key inputs outputs #:allow-other-keys)
14189 ;; HOME is needed for the test
14190 ;; "test_pathcompleter_can_expanduser".
14191 (setenv "HOME" "/tmp")
14192 (add-installed-pythonpath inputs outputs)
14193 (invoke "py.test"))))))
14194 (propagated-inputs
14195 `(("python-wcwidth" ,python-wcwidth)))
14196 (native-inputs
14197 `(("python-pytest" ,python-pytest)))
14198 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
14199 (synopsis "Library for building command line interfaces in Python")
14200 (description
14201 "Prompt-Toolkit is a library for building interactive command line
14202 interfaces in Python. It's like GNU Readline but it also features syntax
14203 highlighting while typing, out-of-the-box multi-line input editing, advanced
14204 code completion, incremental search, support for Chinese double-width
14205 characters, mouse support, and auto suggestions.")
14206 (license license:bsd-3)
14207 (properties `((python2-variant . ,(delay python-prompt-toolkit-2))))))
14208
14209 (define-public python-prompt-toolkit-2
14210 (package (inherit python-prompt-toolkit)
14211 (name "python-prompt-toolkit")
14212 (version "2.0.7")
14213 (source
14214 (origin
14215 (method url-fetch)
14216 (uri (pypi-uri "prompt_toolkit" version))
14217 (sha256
14218 (base32
14219 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
14220 (propagated-inputs
14221 `(("python-wcwidth" ,python-wcwidth)
14222 ("python-six" ,python-six)
14223 ("python-pygments" ,python-pygments)))
14224 (properties '())))
14225
14226 (define-public python2-prompt-toolkit
14227 (package-with-python2 python-prompt-toolkit-2))
14228
14229 (define-public python-prompt-toolkit-1
14230 (package (inherit python-prompt-toolkit-2)
14231 (version "1.0.15")
14232 (source
14233 (origin
14234 (method url-fetch)
14235 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
14236 (sha256
14237 (base32
14238 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
14239
14240 (define-public python2-prompt-toolkit-1
14241 (package-with-python2 python-prompt-toolkit-1))
14242
14243 (define-public python-jedi
14244 (package
14245 (name "python-jedi")
14246 (version "0.17.2")
14247 (source
14248 (origin
14249 (method url-fetch)
14250 (uri (pypi-uri "jedi" version))
14251 (sha256
14252 (base32 "080xyf97ifabdz7jp8clg00b8zv5g33fva1fb2xf80q6fndpvvc6"))))
14253 (build-system python-build-system)
14254 (arguments
14255 `(#:phases
14256 (modify-phases %standard-phases
14257 (replace 'check
14258 (lambda* (#:key tests? #:allow-other-keys)
14259 (when tests?
14260 (setenv "HOME" "/tmp")
14261 (invoke "python" "-m" "pytest" "-vv"))
14262 #t)))))
14263 (native-inputs
14264 `(("python-pytest" ,python-pytest)
14265 ("python-docopt" ,python-docopt)))
14266 (propagated-inputs
14267 `(("python-parso" ,python-parso)))
14268 (home-page "https://github.com/davidhalter/jedi")
14269 (synopsis "Autocompletion and static analysis library for Python")
14270 (description
14271 "Jedi is a static analysis tool for Python that can be used in Integrated
14272 Development Environments (@dfn{IDE}s) and text editors. It understands Python
14273 on a deeper level than many other static analysis frameworks for Python.
14274
14275 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
14276 well.")
14277 (license license:expat)))
14278
14279 (define-public python2-jedi
14280 (package-with-python2 python-jedi))
14281
14282 (define-public ptpython
14283 (package
14284 (name "ptpython")
14285 (version "3.0.5")
14286 (source (origin
14287 (method url-fetch)
14288 (uri (pypi-uri "ptpython" version))
14289 (sha256
14290 (base32
14291 "0c2ry5gwi2v99slna62j8r2bwq0hpzmvgdryqg9m6x57vbjfg52h"))))
14292 (build-system python-build-system)
14293 (arguments
14294 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
14295 (propagated-inputs
14296 `(("python-appdirs" ,python-appdirs)
14297 ("python-jedi" ,python-jedi)
14298 ("python-prompt-toolkit" ,python-prompt-toolkit)
14299 ("python-pygments" ,python-pygments)))
14300 (home-page "https://github.com/jonathanslenders/ptpython")
14301 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
14302 (description
14303 "ptpython is a Python read-eval-print loop with IDE-like features.
14304 It supports syntax highlighting, multiline editing, autocompletion, mouse,
14305 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
14306 etc.")
14307 (license license:bsd-3)
14308 (properties `((python2-variant . ,(delay ptpython-2))))))
14309
14310 (define-public ptpython-2
14311 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
14312 (package/inherit base
14313 (name "ptpython2"))))
14314
14315 (define-public python-stem
14316 (package
14317 (name "python-stem")
14318 (version "1.8.0")
14319 (source
14320 (origin
14321 (method url-fetch)
14322 (uri (pypi-uri "stem" version))
14323 (sha256
14324 (base32
14325 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
14326 (build-system python-build-system)
14327 (arguments
14328 `(#:phases
14329 (modify-phases %standard-phases
14330 (replace 'check
14331 (lambda _
14332 (invoke "./run_tests.py" "--unit")
14333 #t)))))
14334 (native-inputs
14335 `(("python-mock" ,python-mock)
14336 ("python-pycodestyle" ,python-pycodestyle)
14337 ("python-pyflakes" ,python-pyflakes)))
14338 (home-page "https://stem.torproject.org/")
14339 (synopsis
14340 "Python controller library that allows applications to interact with Tor")
14341 (description
14342 "Stem is a Python controller library for Tor. With it you can use Tor's
14343 control protocol to script against the Tor process and read descriptor data
14344 relays publish about themselves.")
14345 (license license:lgpl3)))
14346
14347 (define-public python-pyserial
14348 (package
14349 (name "python-pyserial")
14350 (version "3.5")
14351 (source
14352 (origin
14353 (method url-fetch)
14354 (uri (pypi-uri "pyserial" version))
14355 (sha256
14356 (base32
14357 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
14358 (build-system python-build-system)
14359 (arguments
14360 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
14361 ;; #:phases
14362 ;; (modify-phases %standard-phases
14363 ;; (replace 'check
14364 ;; (lambda _
14365 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
14366 (home-page
14367 "https://github.com/pyserial/pyserial")
14368 (synopsis "Python Serial Port Bindings")
14369 (description "@code{pyserial} provide serial port bindings for Python. It
14370 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
14371 and/or Xon/Xoff. The port is accessed in RAW mode.")
14372 (license license:bsd-3)))
14373
14374 (define-public python2-pyserial
14375 (package-with-python2 python-pyserial))
14376
14377 (define-public python-kivy
14378 (package
14379 (name "python-kivy")
14380 (version "1.10.1")
14381 (source
14382 (origin
14383 (method url-fetch)
14384 (uri (pypi-uri "Kivy" version))
14385 (file-name (string-append name "-" version ".tar.gz"))
14386 (sha256
14387 (base32
14388 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
14389 (build-system python-build-system)
14390 (arguments
14391 `(#:tests? #f ; Tests require many optional packages
14392 #:phases
14393 (modify-phases %standard-phases
14394 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
14395 (lambda* (#:key inputs #:allow-other-keys)
14396 (setenv "KIVY_SDL2_PATH"
14397 (string-append (assoc-ref inputs "sdl-union")
14398 "/include/SDL2"))
14399 #t)))))
14400 (native-inputs
14401 `(("pkg-config" ,pkg-config)
14402 ("python-cython" ,python-cython)))
14403 (inputs
14404 `(("gstreamer" ,gstreamer)
14405 ("mesa" ,mesa)
14406 ("sdl-union"
14407 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
14408 (home-page "https://kivy.org")
14409 (synopsis
14410 "Multitouch application framework")
14411 (description
14412 "A software library for rapid development of
14413 hardware-accelerated multitouch applications.")
14414 (license license:expat)))
14415
14416 (define-public python2-kivy
14417 (package-with-python2 python-kivy))
14418
14419 (define-public python-binaryornot
14420 (package
14421 (name "python-binaryornot")
14422 (version "0.4.4")
14423 (source (origin
14424 (method url-fetch)
14425 (uri (pypi-uri "binaryornot" version))
14426 (sha256
14427 (base32
14428 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
14429 (build-system python-build-system)
14430 (arguments
14431 `(#:phases
14432 (modify-phases %standard-phases
14433 (add-after 'unpack 'patch-tests
14434 (lambda _
14435 ;; TypeError: binary() got an unexpected keyword argument
14436 ;; 'average_size'.
14437 (substitute* "tests/test_check.py"
14438 (("average_size=512") ""))
14439 #t)))))
14440 (propagated-inputs
14441 `(("python-chardet" ,python-chardet)
14442 ("python-hypothesis" ,python-hypothesis)))
14443 (home-page "https://github.com/audreyr/binaryornot")
14444 (synopsis "Package to check if a file is binary or text")
14445 (description "Ultra-lightweight pure Python package to check if a file is
14446 binary or text.")
14447 (license license:bsd-3)
14448 (properties `((python2-variant . ,(delay python2-binaryornot))))))
14449
14450 (define-public python2-binaryornot
14451 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
14452 (package/inherit base
14453 (propagated-inputs
14454 `(("python2-enum34" ,python2-enum34)
14455 ,@(package-propagated-inputs base))))))
14456
14457 (define-public python-binwalk
14458 (package
14459 (name "python-binwalk")
14460 (version "2.2.0")
14461 (source
14462 (origin
14463 (method git-fetch)
14464 (uri (git-reference
14465 (url "https://github.com/ReFirmLabs/binwalk")
14466 (commit (string-append "v" version))))
14467 (file-name (git-file-name name version))
14468 (sha256
14469 (base32
14470 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
14471 (build-system python-build-system)
14472 (arguments
14473 `(#:phases
14474 (modify-phases %standard-phases
14475 (add-before 'check 'set-pythonpath
14476 (lambda _
14477 (setenv "PYTHONPATH"
14478 (string-append
14479 (getcwd) "/src/"
14480 ":" (getenv "PYTHONPATH")))
14481 (setenv "HOME" "")
14482 #t)))))
14483 (native-inputs
14484 `(("python-coverage" ,python-coverage)
14485 ("python-nose" ,python-nose)))
14486 (home-page "https://github.com/ReFirmLabs/binwalk")
14487 (synopsis "Firmware analysis tool")
14488 (description "Binwalk is a tool for analyzing, reverse engineering, and
14489 extracting firmware images")
14490 (license license:expat)))
14491
14492 (define-public python-nltk
14493 (package
14494 (name "python-nltk")
14495 (version "3.2.1")
14496 (source (origin
14497 (method url-fetch)
14498 (uri (pypi-uri "nltk" version))
14499 (sha256
14500 (base32
14501 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
14502 (build-system python-build-system)
14503 (arguments
14504 '(;; The tests require some extra resources to be downloaded.
14505 ;; TODO Try packaging these resources.
14506 #:tests? #f))
14507 (home-page "http://nltk.org/")
14508 (synopsis "Natural Language Toolkit")
14509 (description "It provides interfaces to over 50 corpora and lexical
14510 resources such as WordNet, along with a suite of text processing libraries
14511 for classification, tokenization, stemming, tagging, parsing, and semantic
14512 reasoning, wrappers for natural language processing libraries.")
14513 (license license:asl2.0)))
14514
14515 (define-public python2-nltk
14516 (package-with-python2 python-nltk))
14517
14518 (define-public python-pymongo
14519 (package
14520 (name "python-pymongo")
14521 (version "3.7.2")
14522 (source (origin
14523 (method url-fetch)
14524 (uri (pypi-uri "pymongo" version))
14525 (sha256
14526 (base32
14527 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
14528 (build-system python-build-system)
14529 (propagated-inputs
14530 `(("python-certifi" ,python-certifi)))
14531 (home-page "https://github.com/mongodb/mongo-python-driver")
14532 (synopsis "Python driver for MongoDB")
14533 (description "Python driver for MongoDB.")
14534 (license license:asl2.0)))
14535
14536 (define-public python2-pymongo
14537 (package-with-python2 python-pymongo))
14538
14539 (define-public python-consul
14540 (package
14541 (name "python-consul")
14542 (version "0.6.1")
14543 (source
14544 (origin
14545 (method url-fetch)
14546 (uri (pypi-uri "python-consul" version))
14547 (sha256
14548 (base32
14549 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
14550 (build-system python-build-system)
14551 (arguments
14552 '(#:tests? #f)) ; The tests are not distributed
14553 (propagated-inputs
14554 `(("python-requests" ,python-requests)
14555 ("python-six" ,python-six)))
14556 (home-page "https://github.com/cablehead/python-consul")
14557 (synopsis "Python client for Consul")
14558 (description
14559 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
14560 discovery, monitoring and configuration.")
14561 (license license:expat)))
14562
14563 (define-public python2-consul
14564 (package-with-python2 python-consul))
14565
14566 (define-public python-schematics
14567 (package
14568 (name "python-schematics")
14569 (version "1.1.1")
14570 (source
14571 (origin
14572 (method git-fetch)
14573 (uri (git-reference
14574 (url "https://github.com/schematics/schematics")
14575 (commit (string-append "v" version))))
14576 (file-name (git-file-name name version))
14577 (sha256
14578 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
14579 (build-system python-build-system)
14580 (propagated-inputs
14581 `(("python-six" ,python-six)))
14582 (arguments
14583 ;; The tests require a bunch of not very nice packages with fixed
14584 ;; version requirements (e.g. python-coveralls).
14585 `(#:tests? #f))
14586 (home-page "https://github.com/schematics/schematics")
14587 (synopsis "Python Data Structures for Humans")
14588 (description "Python Data Structures for Humans.")
14589 (license license:bsd-3)))
14590
14591 (define-public python2-schematics
14592 (package-with-python2 python-schematics))
14593
14594 (define-public python-odfpy
14595 (package
14596 (name "python-odfpy")
14597 (version "1.4.1")
14598 (source (origin
14599 (method url-fetch)
14600 (uri (pypi-uri "odfpy" version))
14601 (sha256
14602 (base32
14603 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
14604 (arguments
14605 `(#:phases
14606 (modify-phases %standard-phases
14607 (replace 'check
14608 (lambda _
14609 (setenv "PYTHONPATH" (string-append "./build/lib:"
14610 (getenv "PYTHONPATH")))
14611 (invoke "pytest" "-vv"))))))
14612 (build-system python-build-system)
14613 (native-inputs
14614 `(("python-pytest" ,python-pytest)))
14615 (propagated-inputs
14616 `(("python-defusedxml" ,python-defusedxml)))
14617 (home-page "https://github.com/eea/odfpy")
14618 (synopsis "Python API and tools to manipulate OpenDocument files")
14619 (description "Collection of libraries and utility programs written in
14620 Python to manipulate OpenDocument 1.2 files.")
14621 (license
14622 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
14623 ;; number of files with other licenses.
14624 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
14625
14626 (define-public python2-odfpy
14627 (package-with-python2 python-odfpy))
14628
14629 (define-public python-natsort
14630 (package
14631 (name "python-natsort")
14632 (version "7.0.1")
14633 (source (origin
14634 (method url-fetch)
14635 (uri (pypi-uri "natsort" version))
14636 (sha256
14637 (base32
14638 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
14639 (build-system python-build-system)
14640 (arguments
14641 `(#:modules ((guix build utils)
14642 (guix build python-build-system)
14643 (srfi srfi-1)
14644 (srfi srfi-26)
14645 (ice-9 ftw))
14646 #:phases
14647 (modify-phases %standard-phases
14648 (add-before 'check 'set-cachedir
14649 ;; Tests require write access to $HOME by default
14650 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
14651 (replace 'check
14652 (lambda _
14653 (let ((cwd (getcwd)))
14654 (setenv "PYTHONPATH"
14655 (string-append
14656 cwd "/build/"
14657 (find (cut string-prefix? "lib" <>)
14658 (scandir (string-append cwd "/build")))
14659 ":"
14660 (getenv "PYTHONPATH")))
14661 (invoke "pytest" "-v")))))))
14662 (native-inputs
14663 `(("python-hypothesis" ,python-hypothesis)
14664 ("python-pytest-cov" ,python-pytest-cov)
14665 ("python-pytest-mock" ,python-pytest-mock)
14666 ("python-pytest" ,python-pytest)))
14667 (propagated-inputs ; TODO: Add python-fastnumbers.
14668 `(("python-pyicu" ,python-pyicu)))
14669 (home-page "https://github.com/SethMMorton/natsort")
14670 (synopsis "Natural sorting for python and shell")
14671 (description
14672 "Natsort lets you apply natural sorting on lists instead of
14673 lexicographical. If you use the built-in @code{sorted} method in python
14674 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
14675 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
14676 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
14677 identifies numbers and sorts them separately from strings. It can also sort
14678 version numbers, real numbers, mixed types and more, and comes with a shell
14679 command @command{natsort} that exposes this functionality in the command line.")
14680 (license license:expat)
14681 (properties `((python2-variant . ,(delay python2-natsort))))))
14682
14683 ;; Natsort 6.x are the last versions with support for Python 2.
14684 (define-public python2-natsort
14685 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
14686 (package (inherit base)
14687 (version "6.2.1")
14688 (source (origin
14689 (method url-fetch)
14690 (uri (pypi-uri "natsort" version))
14691 (sha256
14692 (base32
14693 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
14694 (native-inputs
14695 `(("python2-pathlib" ,python2-pathlib)
14696 ,@(package-native-inputs base))))))
14697
14698 (define-public glances
14699 (package
14700 (name "glances")
14701 (version "3.1.6")
14702 (source
14703 (origin
14704 (method url-fetch)
14705 (uri (pypi-uri "Glances" version))
14706 (sha256
14707 (base32 "11xbm8jgcxha191ly7q76nab1ilabiz14mqf6i3y6aw5xvgg017c"))
14708 (modules '((guix build utils)))
14709 (snippet
14710 '(begin
14711 ;; Glances phones PyPI for weekly update checks by default.
14712 ;; Disable these. The user can re-enable them if desired.
14713 (substitute* "glances/outdated.py"
14714 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
14715 (string-append indentation
14716 "self.args.disable_check_update = True\n"
14717 line)))
14718 #t))))
14719 (build-system python-build-system)
14720 (propagated-inputs
14721 `(("python-future" ,python-future)
14722 ("python-psutil" ,python-psutil)))
14723 (home-page "https://github.com/nicolargo/glances")
14724 (synopsis "Cross-platform curses-based monitoring tool")
14725 (description
14726 "Glances is a curses-based monitoring tool for a wide variety of platforms.
14727 Glances uses the PsUtil library to get information from your system. It
14728 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
14729 (license license:lgpl3+)))
14730
14731 (define-public python-glances
14732 (deprecated-package "python-glances" glances))
14733
14734 (define-public python-graphql-core
14735 (package
14736 (name "python-graphql-core")
14737 (version "3.1.2")
14738 (source
14739 (origin
14740 (method url-fetch)
14741 (uri (pypi-uri "graphql-core" version))
14742 (sha256
14743 (base32
14744 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
14745 (build-system python-build-system)
14746 (arguments
14747 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
14748 #:phases
14749 (modify-phases %standard-phases
14750 (add-after 'unpack 'patch-hardcoded-version
14751 (lambda _ (substitute*
14752 "setup.py"
14753 (("'gevent==1.1rc1'") "'gevent'"))
14754 #t)))))
14755 (native-inputs
14756 `(("python-gevent" ,python-gevent)
14757 ("python-mock" ,python-mock)
14758 ("python-pytest-mock" ,python-pytest-mock)))
14759 (propagated-inputs
14760 `(("python-promise" ,python-promise)
14761 ("python-six" ,python-six)))
14762 (home-page "https://github.com/graphql-python/graphql-core")
14763 (synopsis "GraphQL implementation for Python")
14764 (description
14765 "GraphQL implementation for Python. GraphQL is a data query language and
14766 runtime designed and used to request and deliver data to mobile and web apps.
14767 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
14768 to Python.")
14769 (license license:expat)))
14770
14771 (define-public python-graphql-relay
14772 (package
14773 (name "python-graphql-relay")
14774 (version "0.4.5")
14775 (source
14776 (origin
14777 (method url-fetch)
14778 (uri (pypi-uri "graphql-relay" version))
14779 (sha256
14780 (base32
14781 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
14782 (build-system python-build-system)
14783 (arguments
14784 '(#:tests? #f)) ; The tests are not distributed
14785 (propagated-inputs
14786 `(("python-graphql-core" ,python-graphql-core)
14787 ("python-promise" ,python-promise)
14788 ("python-six" ,python-six)))
14789 (home-page "https://github.com/graphql-python/graphql-relay-py")
14790 (synopsis "Relay implementation for Python")
14791 (description
14792 "This is a library to allow the easy creation of Relay-compliant servers
14793 using the GraphQL Python reference implementation of a GraphQL server. It
14794 should be noted that the code is a exact port of the original
14795 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
14796 from Facebook.")
14797 (license license:expat)))
14798
14799 (define-public python-graphene
14800 (package
14801 (name "python-graphene")
14802 (version "0.10.2")
14803 (source
14804 (origin
14805 (method url-fetch)
14806 (uri (pypi-uri "graphene" version))
14807 (sha256
14808 (base32
14809 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
14810 (build-system python-build-system)
14811 (propagated-inputs
14812 `(("python-graphql-core" ,python-graphql-core)
14813 ("python-graphql-relay" ,python-graphql-relay)
14814 ("python-iso8601" ,python-iso8601)
14815 ("python-promise" ,python-promise)
14816 ("python-six" ,python-six)))
14817 (arguments
14818 `(#:tests? #f)) ; no tests/ in the PyPI tarball
14819 (home-page "https://graphene-python.org/")
14820 (synopsis "GraphQL Framework for Python")
14821 (description
14822 "Graphene is a Python library for building GraphQL schemas/types.
14823 A GraphQL schema describes your data model, and provides a GraphQL server
14824 with an associated set of resolve methods that know how to fetch data.")
14825 (license license:expat)))
14826
14827 (define-public python-nautilus
14828 (package
14829 (name "python-nautilus")
14830 (version "0.4.9")
14831 (source
14832 (origin
14833 (method url-fetch)
14834 (uri (pypi-uri "nautilus" version))
14835 (sha256
14836 (base32
14837 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
14838 (build-system python-build-system)
14839 (arguments `(#:tests? #f)) ; fails to import test modules
14840 (propagated-inputs
14841 `(("python-bcrypt" ,python-bcrypt)
14842 ("python-click" ,python-click)
14843 ("python-consul" ,python-consul)
14844 ("python-graphene" ,python-graphene)
14845 ("python-jinja2" ,python-jinja2)
14846 ("python-peewee" ,python-peewee)
14847 ("python-pika" ,python-pika)
14848 ("python-tornado" ,python-tornado)
14849 ("python-wtforms" ,python-wtforms)))
14850 (native-inputs
14851 `(("python-nose2" ,python-nose2)))
14852 (home-page "https://github.com/AlecAivazis/nautilus")
14853 (synopsis "Library for creating microservice applications")
14854 (description
14855 "Nautilus is a framework for flux based microservices that looks to
14856 provide extendible implementations of common aspects of a cloud so that you can
14857 focus on building massively scalable web applications.")
14858 (license license:expat)))
14859
14860 (define-public python-random2
14861 (package
14862 (name "python-random2")
14863 (version "1.0.1")
14864 (source (origin
14865 (method url-fetch)
14866 (uri (pypi-uri "random2" version ".zip"))
14867 (sha256
14868 (base32
14869 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
14870 (build-system python-build-system)
14871 (native-inputs `(("unzip" ,unzip)))
14872 (home-page "http://pypi.python.org/pypi/random2")
14873 (synopsis "Python 3 version of the Python 2 @code{random} module")
14874 (description
14875 "This package provides a Python 3 ported version of Python 2.7’s
14876 @code{random} module. It has also been back-ported to work in Python 2.6.
14877
14878 In Python 3, the implementation of @code{randrange()} was changed, so that
14879 even with the same seed you get different sequences in Python 2 and 3.
14880
14881 This package closes that gap, allowing stable random number generation
14882 between the different Python versions.")
14883 (license license:psfl)))
14884
14885 (define-public python2-random2
14886 (package-with-python2 python-random2))
14887
14888 (define-public python-snowballstemmer
14889 (package
14890 (name "python-snowballstemmer")
14891 (version "2.0.0")
14892 (source (origin
14893 (method url-fetch)
14894 (uri (pypi-uri "snowballstemmer" version))
14895 (sha256
14896 (base32
14897 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
14898 (build-system python-build-system)
14899 (arguments
14900 `(;; No tests exist
14901 #:tests? #f))
14902 (home-page "https://github.com/shibukawa/snowball_py")
14903 (synopsis "Snowball stemming library collection for Python")
14904 (description "This package provides 16 word stemmer algorithms generated
14905 from Snowball algorithms. It includes the 15 original ones plus the Poerter
14906 English stemmer.")
14907 (license license:bsd-3)))
14908
14909 (define-public python2-snowballstemmer
14910 (package-with-python2 python-snowballstemmer))
14911
14912 (define-public python-setproctitle
14913 (package
14914 (name "python-setproctitle")
14915 (version "1.1.10")
14916 (source
14917 (origin
14918 (method url-fetch)
14919 (uri (pypi-uri "setproctitle" version))
14920 (sha256
14921 (base32
14922 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
14923 (build-system python-build-system)
14924 (arguments
14925 '(#:phases
14926 (modify-phases %standard-phases
14927 (add-before 'check 'patch-Makefile
14928 ;; Stricly this is only required for the python2 variant.
14929 ;; But adding a phase in an inherited package seems to be
14930 ;; cumbersum. So we patch even for python3.
14931 (lambda _
14932 (let ((nose (assoc-ref %build-inputs "python2-nose")))
14933 (when nose
14934 (substitute* "Makefile"
14935 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
14936 (string-append nose "/bin/nosetests "))))
14937 #t)))
14938 (replace 'check
14939 (lambda _
14940 (setenv "PYTHON" (or (which "python3") (which "python")))
14941 (setenv "PYCONFIG" (if (which "python3-config")
14942 "python3-config --embed"
14943 "python-config"))
14944 (setenv "CC" "gcc")
14945 ;; No need to extend PYTHONPATH to find the built package, since
14946 ;; the Makefile will build anyway
14947 (invoke "make" "check"))))))
14948 (native-inputs
14949 `(("procps" ,procps))) ; required for tests
14950 (home-page "https://github.com/dvarrazzo/py-setproctitle")
14951 (synopsis
14952 "Setproctitle implementation for Python to customize the process title")
14953 (description "The library allows a process to change its title (as displayed
14954 by system tools such as ps and top).
14955
14956 Changing the title is mostly useful in multi-process systems, for
14957 example when a master process is forked: changing the children's title
14958 allows identifying the task each process is busy with. The technique
14959 is used by PostgreSQL and the OpenSSH Server for example.")
14960 (license license:bsd-3)
14961 (properties `((python2-variant . ,(delay python2-setproctitle))))))
14962
14963 (define-public python2-setproctitle
14964 (let ((base (package-with-python2
14965 (strip-python2-variant python-setproctitle))))
14966 (package/inherit base
14967 (native-inputs `(("python2-nose" ,python2-nose)
14968 ,@(package-native-inputs base))))))
14969
14970 (define-public python-validictory
14971 (package
14972 (name "python-validictory")
14973 (version "1.0.1")
14974 (source
14975 (origin
14976 (method url-fetch)
14977 (uri (pypi-uri "validictory" version))
14978 (sha256
14979 (base32
14980 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
14981 (build-system python-build-system)
14982 (arguments
14983 '(#:phases
14984 (modify-phases %standard-phases
14985 (add-after 'unpack 'bootstrap
14986 ;; Move the tests out of the package directory to avoid
14987 ;; packaging them.
14988 (lambda* _
14989 (rename-file "validictory/tests" "tests")
14990 (delete-file "tests/__init__.py")))
14991 (replace 'check
14992 (lambda _
14993 ;; Extend PYTHONPATH so the built package will be found.
14994 (setenv "PYTHONPATH"
14995 (string-append (getcwd) "/build/lib:"
14996 (getenv "PYTHONPATH")))
14997 (invoke "py.test" "-vv" ))))))
14998 (native-inputs
14999 `(("python-pytest" ,python-pytest)))
15000 (home-page
15001 "https://github.com/jamesturk/validictory")
15002 (synopsis "General purpose Python data validator")
15003 (description "It allows validation of arbitrary Python data structures.
15004
15005 The schema format is based on the JSON Schema
15006 proposal (http://json-schema.org), so combined with json the library is also
15007 useful as a validator for JSON data.")
15008 (license license:expat)))
15009
15010 (define-public python2-validictory
15011 (package-with-python2 python-validictory))
15012
15013 (define-public python-pyelftools
15014 (package
15015 (name "python-pyelftools")
15016 (version "0.25")
15017 (source
15018 (origin
15019 (method url-fetch)
15020 (uri (pypi-uri "pyelftools" version))
15021 (sha256
15022 (base32
15023 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
15024 (build-system python-build-system)
15025 (arguments
15026 `(#:phases
15027 (modify-phases %standard-phases
15028 (add-before 'check 'set-pythonpath
15029 (lambda _
15030 (setenv "PYTHONPATH"
15031 (string-append
15032 (getcwd) "/test/"
15033 ":" (getenv "PYTHONPATH")))
15034 #t)))))
15035 (home-page
15036 "https://github.com/eliben/pyelftools")
15037 (synopsis
15038 "Analyze binary and library file information")
15039 (description "This Python library provides interfaces for parsing and
15040 analyzing two binary and library file formats; the Executable and Linking
15041 Format (ELF), and debugging information in the Debugging With Attributed
15042 Record Format (DWARF).")
15043 (license license:public-domain)))
15044
15045 (define-public python-pyev
15046 (package
15047 (name "python-pyev")
15048 (version "0.9.0")
15049 (source
15050 (origin
15051 (method url-fetch)
15052 (uri (pypi-uri "pyev" version))
15053 (sha256
15054 (base32
15055 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
15056 (build-system python-build-system)
15057 (arguments
15058 `(#:tests? #f ; no test suite
15059 #:phases
15060 (modify-phases %standard-phases
15061 (add-after 'unpack 'patch
15062 (lambda* (#:key inputs #:allow-other-keys)
15063 (let ((libev (string-append (assoc-ref inputs "libev")
15064 "/lib/libev.so.4")))
15065 (substitute* "setup.py"
15066 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
15067 (string-append "libev_dll_name = \"" libev "\"")))))))))
15068 (inputs
15069 `(("libev" ,libev)))
15070 (home-page "https://github.com/gabrielfalcao/pyev")
15071 (synopsis "Python libev interface")
15072 (description "Pyev provides a Python interface to libev.")
15073 (license license:gpl3)))
15074
15075 (define-public python2-pyev
15076 (package-with-python2 python-pyev))
15077
15078 (define-public python-imagesize
15079 (package
15080 (name "python-imagesize")
15081 (version "1.2.0")
15082 (source
15083 (origin
15084 (method url-fetch)
15085 (uri (pypi-uri "imagesize" version))
15086 (sha256
15087 (base32
15088 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
15089 (build-system python-build-system)
15090 (home-page "https://github.com/shibukawa/imagesize_py")
15091 (synopsis "Gets image size of files in various formats in Python")
15092 (description
15093 "This package allows determination of image size from
15094 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
15095 (license license:expat)))
15096
15097 (define-public python2-imagesize
15098 (package-with-python2 python-imagesize))
15099
15100 (define-public python-termstyle
15101 (package
15102 (name "python-termstyle")
15103 (version "0.1.11")
15104 (source
15105 (origin
15106 (method url-fetch)
15107 (uri (pypi-uri "termstyle" version))
15108 (sha256
15109 (base32
15110 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
15111 (build-system python-build-system)
15112 (arguments
15113 '(#:phases
15114 (modify-phases %standard-phases
15115 (replace 'check
15116 (lambda _
15117 (invoke "python" "test3.py"))))))
15118 (home-page "https://github.com/gfxmonk/termstyle")
15119 (synopsis "Console text coloring for Python")
15120 (description "This package provides console text coloring for Python.")
15121 (license license:bsd-3)))
15122
15123 (define-public python-argcomplete
15124 (package
15125 (name "python-argcomplete")
15126 (version "1.11.1")
15127 (source
15128 (origin
15129 (method url-fetch)
15130 (uri (pypi-uri "argcomplete" version))
15131 (sha256
15132 (base32
15133 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
15134 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
15135 (build-system python-build-system)
15136 (native-inputs
15137 `(("python-coverage" ,python-coverage)
15138 ("python-flake8" ,python-flake8)
15139 ("python-pexpect" ,python-pexpect)
15140 ("python-wheel" ,python-wheel)
15141 ("tcsh" ,tcsh)
15142 ("fish" ,fish)
15143 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
15144 (home-page "https://github.com/kislyuk/argcomplete")
15145 (synopsis "Shell tab completion for Python argparse")
15146 (description "argcomplete provides extensible command line tab completion
15147 of arguments and options for Python scripts using @code{argparse}. It's
15148 particularly useful for programs with many options or sub-parsers that can
15149 dynamically suggest completions; for example, when browsing resources over the
15150 network.")
15151 (license license:asl2.0)
15152 (properties `((python2-variant . ,(delay python2-argcomplete))))))
15153
15154 (define-public python2-argcomplete
15155 (let ((variant (package-with-python2
15156 (strip-python2-variant python-argcomplete))))
15157 (package/inherit variant
15158 (arguments
15159 (substitute-keyword-arguments (package-arguments variant)
15160 ((#:phases phases '%standard-phases)
15161 `(modify-phases ,phases
15162 (add-after 'unpack 'set-my-HOME
15163 (lambda _ (setenv "HOME" "/tmp")))))))
15164 (native-inputs
15165 `(("python2-importlib-metadata" ,python2-importlib-metadata)
15166 ,@(package-native-inputs variant))))))
15167
15168 (define-public python-csscompressor
15169 (package
15170 (name "python-csscompressor")
15171 (version "0.9.5")
15172 (source
15173 (origin
15174 (method url-fetch)
15175 (uri (pypi-uri "csscompressor" version))
15176 (sha256
15177 (base32
15178 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
15179 (build-system python-build-system)
15180 (arguments
15181 '(#:phases
15182 (modify-phases %standard-phases
15183 (replace 'check
15184 (lambda _
15185 (invoke "py.test"))))))
15186 (native-inputs
15187 `(("python-pytest" ,python-pytest)))
15188 (home-page "https://github.com/sprymix/csscompressor")
15189 (synopsis "Python port of YUI CSS Compressor")
15190 (description
15191 "This package provides a python port of YUI CSS Compressor.")
15192 (license license:bsd-3)))
15193
15194 (define-public python-rcssmin
15195 (package
15196 (name "python-rcssmin")
15197 (version "1.0.6")
15198 (source
15199 (origin
15200 (method url-fetch)
15201 (uri (pypi-uri "rcssmin" version))
15202 (sha256
15203 (base32
15204 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
15205 (build-system python-build-system)
15206 (arguments
15207 '(#:phases
15208 (modify-phases %standard-phases
15209 (replace 'check
15210 (lambda _
15211 (invoke "python" "run_tests.py" "tests"))))))
15212 (home-page "http://opensource.perlig.de/rcssmin/")
15213 (synopsis "CSS Minifier")
15214 (description "The minifier is based on the semantics of the YUI compressor,
15215 which itself is based on the rule list by Isaac Schlueter.")
15216 (license license:asl2.0)))
15217
15218 (define-public python-rjsmin
15219 (package
15220 (name "python-rjsmin")
15221 (version "1.1.0")
15222 (source
15223 (origin
15224 (method url-fetch)
15225 (uri (pypi-uri "rjsmin" version))
15226 (sha256
15227 (base32
15228 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
15229 (modules '((guix build utils)))
15230 (snippet
15231 '(begin
15232 (for-each delete-file (find-files "bench" "\\.js$"))
15233 #t))))
15234 (build-system python-build-system)
15235 (arguments
15236 '(#:tests? #f ; Not all test files included.
15237 #:phases
15238 (modify-phases %standard-phases
15239 (replace 'check
15240 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
15241 (add-installed-pythonpath inputs outputs)
15242 (if tests?
15243 (invoke "py.test" "-vv" "tests")
15244 #t))))))
15245 (native-inputs
15246 `(("python-pytest" ,python-pytest)))
15247 (home-page "http://opensource.perlig.de/rjsmin/")
15248 (synopsis "Javascript Minifier")
15249 (description "@code{rJSmin} is a javascript minifier written in Python. The
15250 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
15251 is a re-implementation aiming for speed, so it can be used at runtime (rather
15252 than during a preprocessing step).")
15253 (license license:asl2.0)))
15254
15255 (define-public python-xopen
15256 (package
15257 (name "python-xopen")
15258 (version "0.5.0")
15259 (source
15260 (origin
15261 (method url-fetch)
15262 (uri (pypi-uri "xopen" version))
15263 (sha256
15264 (base32
15265 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
15266 (build-system python-build-system)
15267 (propagated-inputs
15268 `(("python-setuptools-scm" ,python-setuptools-scm)))
15269 (home-page "https://github.com/marcelm/xopen/")
15270 (synopsis "Open compressed files transparently")
15271 (description "This module provides an @code{xopen} function that works like
15272 Python's built-in @code{open} function, but can also deal with compressed files.
15273 Supported compression formats are gzip, bzip2 and, xz, and are automatically
15274 recognized by their file extensions. The focus is on being as efficient as
15275 possible on all supported Python versions.")
15276 (license license:expat)))
15277
15278 (define-public python2-xopen
15279 (let ((base (package-with-python2
15280 (strip-python2-variant python-xopen))))
15281 (package/inherit base
15282 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
15283 ,@(package-propagated-inputs base))))))
15284
15285 (define-public python-cheetah
15286 (package
15287 (name "python-cheetah")
15288 (version "3.2.4")
15289 (source
15290 (origin
15291 (method url-fetch)
15292 (uri (pypi-uri "Cheetah3" version))
15293 (sha256
15294 (base32
15295 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
15296 (build-system python-build-system)
15297 (arguments
15298 `(#:modules ((guix build utils)
15299 (guix build python-build-system)
15300 (ice-9 ftw)
15301 (srfi srfi-1)
15302 (srfi srfi-26))
15303 #:phases (modify-phases %standard-phases
15304 (add-after 'unpack 'use-absolute-python
15305 (lambda _
15306 (substitute* "Cheetah/CheetahWrapper.py"
15307 (("#!/usr/bin/env python")
15308 (string-append "#!" (which "python"))))
15309 #t))
15310 (add-after 'unpack 'fix-tests
15311 (lambda _
15312 (substitute* "Cheetah/Tests/ImportHooks.py"
15313 (("os.path.dirname\\(__file__\\)")
15314 (string-append "'" (getcwd) "/Cheetah/Tests'")))
15315 #t))
15316 (replace 'check
15317 (lambda _
15318 (let ((cwd (getcwd)))
15319 (setenv "PYTHONPATH"
15320 (string-append
15321 cwd "/build/"
15322 (find (cut string-prefix? "lib" <>)
15323 (scandir (string-append cwd "/build")))
15324 ":" (getenv "PYTHONPATH")))
15325 (setenv "PATH"
15326 (string-append (getenv "PATH")
15327 ":" cwd "/bin"))
15328 (setenv "TMPDIR" "/tmp")
15329
15330 (substitute* "Cheetah/Tests/Test.py"
15331 (("unittest.TextTestRunner\\(\\)")
15332 "unittest.TextTestRunner(verbosity=2)"))
15333
15334 (invoke "python" "Cheetah/Tests/Test.py")))))))
15335 (propagated-inputs
15336 `(("python-markdown" ,python-markdown))) ;optional
15337 (home-page "https://cheetahtemplate.org/")
15338 (synopsis "Template engine")
15339 (description "Cheetah is a text-based template engine and Python code
15340 generator.
15341
15342 Cheetah can be used as a standalone templating utility or referenced as
15343 a library from other Python applications. It has many potential uses,
15344 but web developers looking for a viable alternative to ASP, JSP, PHP and
15345 PSP are expected to be its principle user group.
15346
15347 Features:
15348 @enumerate
15349 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
15350 text-based format.
15351 @item Cleanly separates content, graphic design, and program code.
15352 @item Blends the power and flexibility of Python with a simple template language
15353 that non-programmers can understand.
15354 @item Gives template writers full access to any Python data structure, module,
15355 function, object, or method in their templates.
15356 @item Makes code reuse easy by providing an object-orientated interface to
15357 templates that is accessible from Python code or other Cheetah templates.
15358 One template can subclass another and selectively reimplement sections of it.
15359 @item Provides a simple, yet powerful, caching mechanism that can dramatically
15360 improve the performance of a dynamic website.
15361 @item Compiles templates into optimized, yet readable, Python code.
15362 @end enumerate")
15363 (license (license:x11-style "file://LICENSE"))))
15364
15365 (define-public python2-cheetah
15366 (package-with-python2 python-cheetah))
15367
15368 (define-public python-dulwich
15369 (package
15370 (name "python-dulwich")
15371 (version "0.19.16")
15372 (source
15373 (origin
15374 (method url-fetch)
15375 (uri (list (string-append "https://www.dulwich.io/releases/"
15376 "dulwich-" version ".tar.gz")
15377 (pypi-uri "dulwich" version)))
15378 (sha256
15379 (base32
15380 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
15381 (build-system python-build-system)
15382 (arguments
15383 `(#:phases
15384 (modify-phases %standard-phases
15385 (add-before 'check 'fix-tests
15386 (lambda* (#:key inputs #:allow-other-keys)
15387 ;; The tests use Popen with a custom environment which doesn't
15388 ;; include PATH.
15389 (substitute* "dulwich/tests/compat/utils.py"
15390 (("'git'") (string-append "'"
15391 (which "git")
15392 "'")))
15393 (substitute* '("dulwich/tests/test_repository.py"
15394 "dulwich/tests/test_hooks.py")
15395 (("#!/bin/sh") (string-append "#!" (which "sh"))))
15396 (setenv "TEST_RUNNER" "unittest")
15397 (setenv "PYTHONHASHSEED" "random")
15398 #t)))))
15399 (propagated-inputs
15400 `(("python-fastimport" ,python-fastimport)
15401 ("python-urllib3" ,python-urllib3)))
15402 (native-inputs
15403 `(("python-mock" ,python-mock)
15404 ("python-geventhttpclient" ,python-geventhttpclient)
15405 ("git" ,git)))
15406 (home-page "https://www.dulwich.io/")
15407 (synopsis "Git implementation in Python")
15408 (description "Dulwich is an implementation of the Git file formats and
15409 protocols written in pure Python.")
15410 ;; Can be used with either license.
15411 (license (list license:asl2.0 license:gpl2+))))
15412
15413 (define-public python-pbkdf2
15414 (package
15415 (name "python-pbkdf2")
15416 (version "1.3")
15417 (source
15418 (origin
15419 (method url-fetch)
15420 (uri (pypi-uri "pbkdf2" version))
15421 (sha256
15422 (base32
15423 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
15424 (build-system python-build-system)
15425 (arguments
15426 '(#:phases
15427 (modify-phases %standard-phases
15428 (replace 'check
15429 (lambda _
15430 (setenv "PYTHONPATH"
15431 (string-append (getcwd) "/build/lib:"
15432 (getenv "PYTHONPATH")))
15433 (invoke "python" "test/test_pbkdf2.py"))))))
15434 (propagated-inputs
15435 `(("python-pycrypto" ,python-pycrypto))) ; optional
15436 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
15437 (synopsis "Password-based key derivation")
15438 (description "This module implements the password-based key derivation
15439 function, PBKDF2, specified in RSA PKCS#5 v2.0.
15440
15441 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
15442 is part of the RSA Public Key Cryptography Standards series. The provided
15443 implementation takes a password or a passphrase and a salt value (and
15444 optionally a iteration count, a digest module, and a MAC module) and provides
15445 a file-like object from which an arbitrarily-sized key can be read.")
15446 (license license:expat)))
15447
15448 (define-public python2-pbkdf2
15449 (package-with-python2 python-pbkdf2))
15450
15451 (define-public python-qrcode
15452 (package
15453 (name "python-qrcode")
15454 (version "6.1")
15455 (source
15456 (origin
15457 (method url-fetch)
15458 (uri (pypi-uri "qrcode" version))
15459 (sha256
15460 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
15461 (build-system python-build-system)
15462 (arguments
15463 ;; FIXME: Tests require packaging 'pymaging'.
15464 '(#:tests? #f))
15465 (propagated-inputs
15466 `(("python-lxml" ,python-lxml) ; for SVG output
15467 ("python-pillow" ,python-pillow) ; for PNG output
15468 ("python-six" ,python-six)))
15469 (home-page "https://github.com/lincolnloop/python-qrcode")
15470 (synopsis "QR Code image generator")
15471 (description "This package provides a pure Python QR Code generator
15472 module. It uses the Python Imaging Library (PIL) to allow for the generation
15473 of QR Codes.
15474
15475 In addition this package provides a command line tool to generate QR codes and
15476 either write these QR codes to a file or do the output as ascii art at the
15477 console.")
15478 (license license:bsd-3)))
15479
15480 (define-public python2-qrcode
15481 (package-with-python2 python-qrcode))
15482
15483 (define-public python-rst2ansi
15484 (package
15485 (name "python-rst2ansi")
15486 (version "0.1.5")
15487 (source
15488 (origin
15489 (method url-fetch)
15490 (uri (pypi-uri "rst2ansi" version))
15491 (sha256
15492 (base32
15493 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
15494 (build-system python-build-system)
15495 (propagated-inputs
15496 `(("python-docutils" ,python-docutils)))
15497 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
15498 (synopsis "Convert RST to ANSI-decorated console output")
15499 (description
15500 "Python module dedicated to rendering RST (reStructuredText) documents
15501 to ansi-escaped strings suitable for display in a terminal.")
15502 (license license:expat)))
15503
15504 (define-public python-ansi2html
15505 (package
15506 (name "python-ansi2html")
15507 (version "1.2.0")
15508 (source
15509 (origin
15510 (method url-fetch)
15511 (uri (pypi-uri "ansi2html" version))
15512 (sha256
15513 (base32
15514 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
15515 (build-system python-build-system)
15516 (native-inputs
15517 `(("python-mock" ,python-mock)
15518 ("python-nose" ,python-nose)))
15519 (propagated-inputs
15520 `(("python-six" ,python-six)))
15521 (home-page "https://github.com/ralphbean/ansi2html")
15522 (synopsis "Convert ANSI-decorated console output to HTML")
15523 (description
15524 "@command{ansi2html} is a Python library and command line utility for
15525 converting text with ANSI color codes to HTML or LaTeX.")
15526 (license license:gpl3+)))
15527
15528 (define-public python2-ansi2html
15529 (package-with-python2 python-ansi2html))
15530
15531 (define-public python-ddt
15532 (package
15533 (name "python-ddt")
15534 (version "1.4.1")
15535 (source
15536 (origin
15537 (method url-fetch)
15538 (uri (pypi-uri "ddt" version))
15539 (sha256
15540 (base32
15541 "1niqpzc26sxdbyi46r07n4pma5fjx6crww2539vpfmsf0w6yg585"))))
15542 (build-system python-build-system)
15543 (native-inputs
15544 `(("python-pytest" ,python-pytest)))
15545 (propagated-inputs
15546 `(("python-pyyaml" ,python-pyyaml)))
15547 (home-page "https://github.com/datadriventests/ddt")
15548 (synopsis "Data-Driven Tests")
15549 (description
15550 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
15551 running it with different test data, and make it appear as multiple test
15552 cases.")
15553 (license license:expat)))
15554
15555 (define-public python-pycountry
15556 (package
15557 (name "python-pycountry")
15558 (version "18.5.26")
15559 (source
15560 (origin
15561 (method url-fetch)
15562 (uri (pypi-uri "pycountry" version))
15563 (sha256
15564 (base32
15565 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
15566 (build-system python-build-system)
15567 (home-page "https://bitbucket.org/flyingcircus/pycountry")
15568 (synopsis "ISO databases for languages, countries, currencies, etc.")
15569 (description
15570 "@code{pycountry} provides the ISO databases for the standards:
15571 @enumerate
15572 @item 639-3 (Languages)
15573 @item 3166 (Countries)
15574 @item 3166-3 (Deleted Countries)
15575 @item 3166-2 (Subdivisions of countries)
15576 @item 4217 (Currencies)
15577 @item 15924 (Scripts)
15578 @end enumerate
15579 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
15580 through a Python API.")
15581 (license license:lgpl2.1+)))
15582
15583 (define-public python2-pycountry
15584 (package-with-python2 python-pycountry))
15585
15586 (define-public python-pycosat
15587 (package
15588 (name "python-pycosat")
15589 (version "0.6.3")
15590 (source
15591 (origin
15592 (method url-fetch)
15593 (uri (pypi-uri "pycosat" version ".zip"))
15594 (sha256
15595 (base32
15596 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
15597 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
15598 (build-system python-build-system)
15599 (native-inputs
15600 `(("unzip" ,unzip)))
15601 (home-page "https://github.com/ContinuumIO/pycosat")
15602 (synopsis "Bindings to picosat (a SAT solver)")
15603 (description
15604 "This package provides efficient Python bindings to @code{picosat} on
15605 the C level. When importing pycosat, the @code{picosat} solver becomes part
15606 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
15607 Problem} (SAT) solver.")
15608 (license license:expat)))
15609
15610 (define-public python2-pycosat
15611 (package-with-python2 python-pycosat))
15612
15613 (define-public python2-ruamel.ordereddict
15614 (package
15615 (name "python2-ruamel.ordereddict")
15616 (version "0.4.9")
15617 (source
15618 (origin
15619 (method url-fetch)
15620 (uri (pypi-uri "ruamel.ordereddict" version))
15621 (sha256
15622 (base32
15623 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
15624 (build-system python-build-system)
15625 (arguments
15626 `(#:python ,python-2
15627 #:phases
15628 (modify-phases %standard-phases
15629 (delete 'check)
15630 (add-after 'install 'check
15631 (lambda* (#:key inputs outputs #:allow-other-keys)
15632 (add-installed-pythonpath inputs outputs)
15633 (invoke "python" "test/testordereddict.py"))))))
15634 (home-page "https://bitbucket.org/ruamel/ordereddict")
15635 (synopsis "Version of dict that keeps keys in insertion order")
15636 (description
15637 "This is an implementation of an ordered dictionary with @dfn{Key
15638 Insertion Order} (KIO: updates of values do not affect the position of the
15639 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
15640 removed and put at the back). The standard library module @code{OrderedDict},
15641 implemented later, implements a subset of @code{ordereddict} functionality.
15642 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
15643 Order} (KSO, no sorting function can be specified, but a transform can be
15644 specified to apply on the key before comparison (e.g. @code{string.lower})).")
15645 (license license:expat)))
15646
15647 (define-public python-pypeg2
15648 (package
15649 (name "python-pypeg2")
15650 (version "2.15.2")
15651 (source
15652 (origin
15653 (method url-fetch)
15654 (uri (pypi-uri "pyPEG2" version))
15655 (sha256
15656 (base32
15657 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
15658 (build-system python-build-system)
15659 (propagated-inputs `(("python-lxml" ,python-lxml)))
15660 (arguments
15661 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
15662 '(#:tests? #f))
15663 (home-page "https://fdik.org/pyPEG/")
15664 (synopsis "Parsing Expression Grammars in Python")
15665 (description "PyPEG is an intrinsic parser interpreter framework for
15666 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
15667 parse many formal languages.")
15668 (license license:gpl2)))
15669
15670 (define-public python-incremental
15671 (package
15672 (name "python-incremental")
15673 (version "17.5.0")
15674 (source
15675 (origin
15676 (method url-fetch)
15677 (uri (pypi-uri "incremental" version))
15678 (sha256
15679 (base32
15680 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
15681 (build-system python-build-system)
15682 (home-page "https://github.com/hawkowl/incremental")
15683 (synopsis "Library for versioning Python projects")
15684 (description "Incremental is a small library that versions your Python
15685 projects.")
15686 (license license:expat)))
15687
15688 (define-public python2-incremental
15689 (package-with-python2 python-incremental))
15690
15691 (define-public python-invoke
15692 (package
15693 (name "python-invoke")
15694 (home-page "https://www.pyinvoke.org/")
15695 (version "1.5.0")
15696 (source (origin
15697 (method url-fetch)
15698 (uri (pypi-uri "invoke" version))
15699 (sha256
15700 (base32
15701 "0l16v7zcbgi36z6pvmdrs5q4ks8lalcafi5d9nhrpcjzbc3n1igh"))))
15702 (build-system python-build-system)
15703 (arguments
15704 ;; XXX: Requires many dependencies that are not yet in Guix.
15705 `(#:tests? #f
15706 #:phases
15707 (modify-phases %standard-phases
15708 (add-after 'unpack 'fix-bash-path
15709 (lambda* (#:key inputs #:allow-other-keys)
15710 (let ((bash (assoc-ref inputs "bash")))
15711 (substitute* "invoke/config.py"
15712 (("shell = \"/bin/bash\"")
15713 (string-append "shell = \"" bash "/bin/bash\""))
15714 )
15715 #t))))))
15716 (inputs
15717 `(("bash" ,bash-minimal)))
15718 (synopsis "Pythonic task execution")
15719 (description
15720 "Invoke is a Python task execution tool and library, drawing inspiration
15721 from various sources to arrive at a powerful and clean feature set. It is
15722 evolved from the Fabric project, but focuses on local and abstract concerns
15723 instead of servers and network commands.")
15724 (license license:bsd-3)))
15725
15726 (define-public python2-invoke
15727 (package-with-python2 python-invoke))
15728
15729 (define-public python-automat
15730 (package
15731 (name "python-automat")
15732 (version "20.2.0")
15733 (source (origin
15734 (method url-fetch)
15735 (uri (pypi-uri "Automat" version))
15736 (sha256
15737 (base32
15738 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
15739 (build-system python-build-system)
15740 ;; We disable the tests because they require python-twisted, while
15741 ;; python-twisted depends on python-automat. Twisted is optional, but the
15742 ;; tests fail if it is not available. Also see
15743 ;; <https://github.com/glyph/automat/issues/71>.
15744 (arguments '(#:tests? #f))
15745 (native-inputs
15746 `(("python-m2r" ,python-m2r)
15747 ("python-setuptools-scm" ,python-setuptools-scm)
15748 ("python-graphviz" ,python-graphviz)))
15749 (propagated-inputs
15750 `(("python-six" ,python-six)
15751 ("python-attrs" ,python-attrs)))
15752 (home-page "https://github.com/glyph/Automat")
15753 (synopsis "Self-service finite-state machines")
15754 (description "Automat is a library for concise, idiomatic Python
15755 expression of finite-state automata (particularly deterministic finite-state
15756 transducers).")
15757 (license license:expat)))
15758
15759 (define-public python2-automat
15760 (package-with-python2 python-automat))
15761
15762 (define-public python-m2r
15763 (package
15764 (name "python-m2r")
15765 (version "0.2.1")
15766 (source (origin
15767 (method url-fetch)
15768 (uri (pypi-uri "m2r" version))
15769 (sha256
15770 (base32
15771 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
15772 (build-system python-build-system)
15773 (propagated-inputs
15774 `(("python-docutils" ,python-docutils)
15775 ("python-mistune" ,python-mistune)))
15776 (native-inputs
15777 `(("python-pygments" ,python-pygments)
15778 ("python-mock" ,python-mock)))
15779 (home-page "https://github.com/miyakogi/m2r")
15780 (synopsis "Markdown to reStructuredText converter")
15781 (description "M2R converts a markdown file including reST markups to valid
15782 reST format.")
15783 (license license:expat)))
15784
15785 (define-public python2-m2r
15786 (package-with-python2 python-m2r))
15787
15788 (define-public python-constantly
15789 (package
15790 (name "python-constantly")
15791 (version "15.1.0")
15792 (source (origin
15793 (method url-fetch)
15794 (uri (pypi-uri "constantly" version))
15795 (sha256
15796 (base32
15797 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
15798 (build-system python-build-system)
15799 (home-page "https://github.com/twisted/constantly")
15800 (synopsis "Symbolic constants in Python")
15801 (description "Constantly is a Python library that provides symbolic
15802 constant support. It includes collections and constants with text, numeric,
15803 and bit flag values.")
15804 (license license:expat)))
15805
15806 (define-public python2-constantly
15807 (package-with-python2 python-constantly))
15808
15809 (define-public python-attrs
15810 (package
15811 (name "python-attrs")
15812 (version "19.3.0")
15813 (source (origin
15814 (method url-fetch)
15815 (uri (pypi-uri "attrs" version))
15816 (sha256
15817 (base32
15818 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
15819 (build-system python-build-system)
15820 (arguments
15821 `(#:modules ((guix build utils)
15822 (guix build python-build-system)
15823 (ice-9 ftw)
15824 (srfi srfi-1)
15825 (srfi srfi-26))
15826 #:phases (modify-phases %standard-phases
15827 (replace 'check
15828 (lambda _
15829 (let ((cwd (getcwd)))
15830 (setenv "PYTHONPATH"
15831 (string-append
15832 cwd "/build/"
15833 (find (cut string-prefix? "lib" <>)
15834 (scandir (string-append cwd "/build")))
15835 ":"
15836 (getenv "PYTHONPATH")))
15837 (invoke "python" "-m" "pytest")))))))
15838 (native-inputs
15839 `(("python-coverage" ,python-coverage)
15840 ("python-hypothesis" ,python-hypothesis)
15841 ("python-pympler" ,python-pympler)
15842 ("python-pytest" ,python-pytest)
15843 ("python-six" ,python-six)
15844 ("python-sphinx" ,python-sphinx)
15845 ("python-zope-interface" ,python-zope-interface)))
15846 (home-page "https://github.com/python-attrs/attrs/")
15847 (synopsis "Attributes without boilerplate")
15848 (description "@code{attrs} is a Python package with class decorators that
15849 ease the chores of implementing the most common attribute-related object
15850 protocols.")
15851 (license license:expat)))
15852
15853 (define-public python2-attrs
15854 (package-with-python2 python-attrs))
15855
15856 (define-public python-attrs-bootstrap
15857 (package
15858 (inherit python-attrs)
15859 (name "python-attrs-bootstrap")
15860 (native-inputs `())
15861 (arguments `(#:tests? #f))))
15862
15863 (define-public python2-attrs-bootstrap
15864 (package-with-python2 python-attrs-bootstrap))
15865
15866 (define-public python2-cliapp
15867 (package
15868 (name "python2-cliapp")
15869 (version "1.20180812.1")
15870 (source
15871 (origin
15872 (method url-fetch)
15873 (uri (string-append
15874 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
15875 version ".tar.gz"))
15876 (sha256
15877 (base32
15878 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
15879 (build-system python-build-system)
15880 (arguments
15881 `(#:python ,python-2
15882 #:phases
15883 (modify-phases %standard-phases
15884 ;; check phase needs to be run before the build phase. If not,
15885 ;; coverage-test-runner looks for tests for the built source files,
15886 ;; and fails.
15887 (delete 'check)
15888 (add-before 'build 'check
15889 (lambda _
15890 ;; Disable python3 tests
15891 (substitute* "check"
15892 (("python3") "# python3"))
15893 (invoke "./check"))))))
15894 (native-inputs
15895 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
15896 ("python2-pep8" ,python2-pep8)))
15897 (propagated-inputs
15898 `(("python2-pyaml" ,python2-pyaml)))
15899 (home-page "https://liw.fi/cliapp/")
15900 (synopsis "Python framework for command line programs")
15901 (description "@code{python2-cliapp} is a python framework for
15902 command line programs. It contains the typical stuff such programs
15903 need to do, such as parsing the command line for options, and
15904 iterating over input files.")
15905 (license license:gpl2+)))
15906
15907 (define-public python2-ttystatus
15908 (package
15909 (name "python2-ttystatus")
15910 (version "0.38")
15911 (source
15912 (origin
15913 (method git-fetch)
15914 (uri (git-reference
15915 (url "http://git.liw.fi/ttystatus")
15916 ;; There are no tags after ttystatus-0.36.
15917 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
15918 (sha256
15919 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
15920 (file-name (git-file-name name version))))
15921 (build-system python-build-system)
15922 (native-inputs
15923 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
15924 ("python2-pep8" ,python2-pep8)))
15925 (arguments
15926 `(#:python ,python-2
15927 #:phases
15928 (modify-phases %standard-phases
15929 ;; check phase needs to be run before the build phase. If not,
15930 ;; coverage-test-runner looks for tests for the built source files,
15931 ;; and fails.
15932 (delete 'check)
15933 (add-before 'build 'check
15934 (lambda _ (invoke "make" "check"))))))
15935 (home-page "https://liw.fi/ttystatus/")
15936 (synopsis "Python library for showing progress reporting and
15937 status updates on terminals")
15938 (description "@code{python2-ttystatus} is a python library for
15939 showing progress reporting and status updates on terminals, for
15940 command line programs. Output is automatically adapted to the width
15941 of the terminal: truncated if it does not fit, and resized if the
15942 terminal size changes.")
15943 (license license:gpl3+)))
15944
15945 (define-public python2-tracing
15946 (package
15947 (name "python2-tracing")
15948 (version "0.10")
15949 (source
15950 (origin
15951 (method url-fetch)
15952 (uri (string-append
15953 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
15954 version ".tar.gz"))
15955 (sha256
15956 (base32
15957 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
15958 (build-system python-build-system)
15959 (arguments
15960 `(#:python ,python-2))
15961 (home-page "https://liw.fi/tracing/")
15962 (synopsis "Python debug logging helper")
15963 (description "@code{python2-tracing} is a python library for
15964 logging debug messages. It provides a way to turn debugging messages
15965 on and off, based on the filename they occur in. It is much faster
15966 than using @code{logging.Filter} to accomplish the same thing, which
15967 matters when code is run in production mode. The actual logging still
15968 happens using the @code{logging} library.")
15969 (license license:gpl3+)))
15970
15971 (define-public python2-larch
15972 (package
15973 (name "python2-larch")
15974 (version "1.20151025")
15975 (source
15976 (origin
15977 (method url-fetch)
15978 (uri (string-append
15979 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
15980 version ".tar.gz"))
15981 (patches (search-patches
15982 "python2-larch-coverage-4.0a6-compatibility.patch"))
15983 (sha256
15984 (base32
15985 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
15986 (build-system python-build-system)
15987 (arguments
15988 `(#:python ,python-2
15989 #:phases
15990 (modify-phases %standard-phases
15991 ;; check phase needs to be run before the build phase. If not,
15992 ;; coverage-test-runner looks for tests for the built source files,
15993 ;; and fails.
15994 (delete 'check)
15995 (add-before 'build 'check
15996 (lambda _ (invoke "make" "check"))))))
15997 (native-inputs
15998 `(("cmdtest" ,cmdtest)
15999 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
16000 (propagated-inputs
16001 `(("python2-tracing" ,python2-tracing)))
16002 (home-page "https://liw.fi/larch/")
16003 (synopsis "Python copy-on-write B-tree library")
16004 (description "@code{python2-larch} is an implementation of
16005 particular kind of B-tree, based on research by Ohad Rodeh. See
16006 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
16007 on the data structure.
16008
16009 The distinctive feature of this B-tree is that a node is never
16010 (conceptually) modified. Instead, all updates are done by
16011 copy-on-write. This makes it easy to clone a tree, and modify only the
16012 clone, while other processes access the original tree.")
16013 (license license:gpl3+)))
16014
16015 (define-public python-astroid
16016 (package
16017 (name "python-astroid")
16018 (version "2.4.2")
16019 (source
16020 (origin
16021 (method url-fetch)
16022 (uri (pypi-uri "astroid" version))
16023 (sha256
16024 (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
16025 (modules '((guix build utils)))
16026 (snippet
16027 '(begin
16028 ;; Check to see if the version pinning has been removed.
16029 (substitute* "astroid/__pkginfo__.py"
16030 (("==1\\.4\\.\\*") ">=1.4.0"))
16031 #t))))
16032 (build-system python-build-system)
16033 (propagated-inputs
16034 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
16035 ("python-six" ,python-six)
16036 ("python-wrapt" ,python-wrapt)))
16037 (native-inputs
16038 `(("python-dateutil" ,python-dateutil)
16039 ("python-pytest" ,python-pytest)
16040 ("python-pytest-runner" ,python-pytest-runner)))
16041 (home-page "https://github.com/PyCQA/astroid")
16042 (synopsis "Common base representation of python source code for pylint and
16043 other projects")
16044 (description "@code{python-astroid} provides a common base representation
16045 of python source code for projects such as pychecker, pyreverse, pylint, etc.
16046
16047 It provides a compatible representation which comes from the _ast module. It
16048 rebuilds the tree generated by the builtin _ast module by recursively walking
16049 down the AST and building an extended ast. The new node classes have
16050 additional methods and attributes for different usages. They include some
16051 support for static inference and local name scopes. Furthermore, astroid
16052 builds partial trees by inspecting living objects.")
16053 (license license:lgpl2.1+)
16054 (properties `((python2-variant . ,(delay python2-astroid))))))
16055
16056 (define-public python2-astroid
16057 (let ((base (package-with-python2
16058 (strip-python2-variant python-astroid))))
16059 (package (inherit base)
16060 ;; Version 2.x removes python2 support.
16061 (version "1.6.5")
16062 (source
16063 (origin
16064 (method url-fetch)
16065 (uri (pypi-uri "astroid" version))
16066 (sha256
16067 (base32
16068 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
16069 (arguments
16070 (substitute-keyword-arguments (package-arguments base)
16071 ((#:phases phases)
16072 `(modify-phases ,phases
16073 (add-after 'unpack 'remove-spurious-test
16074 (lambda _
16075 ;; https://github.com/PyCQA/astroid/issues/276
16076 (delete-file "astroid/tests/unittest_brain.py")
16077 #t))
16078 (replace 'check
16079 (lambda _
16080 (invoke"python" "-m" "unittest" "discover"
16081 "-p" "unittest*.py")))))))
16082 (native-inputs `())
16083 (propagated-inputs
16084 `(("python2-backports-functools-lru-cache"
16085 ,python2-backports-functools-lru-cache)
16086 ("python2-enum34" ,python2-enum34)
16087 ("python2-singledispatch" ,python2-singledispatch)
16088 ,@(alist-delete "python-typed-ast"
16089 (package-propagated-inputs base)))))))
16090
16091 (define-public python-isbnlib
16092 (package
16093 (name "python-isbnlib")
16094 (version "3.10.4")
16095 (source
16096 (origin
16097 (method url-fetch)
16098 (uri (pypi-uri "isbnlib" version))
16099 (sha256
16100 (base32
16101 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
16102 (build-system python-build-system)
16103 (arguments '(#:tests? #f)) ; No test
16104 (home-page "https://github.com/xlcnd/isbnlib")
16105 (synopsis "Python library to work with ISBN strings")
16106 (description "@code{python-isbnlib} is a (pure) python library that provides
16107 several useful methods and functions to validate, clean, transform, hyphenate and
16108 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
16109 version, is suitable to be include as a dependency in other projects.")
16110 (license license:lgpl3+)))
16111
16112 (define-public python-isort
16113 (package
16114 (name "python-isort")
16115 (version "4.3.4")
16116 (source
16117 (origin
16118 (method git-fetch)
16119 (uri (git-reference
16120 ;; Tests pass only from the Github sources
16121 (url "https://github.com/timothycrosley/isort")
16122 (commit version)))
16123 (file-name (git-file-name name version))
16124 (sha256
16125 (base32
16126 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
16127 (build-system python-build-system)
16128 (native-inputs
16129 `(("python-mock" ,python-mock)
16130 ("python-pytest" ,python-pytest)))
16131 (home-page "https://github.com/timothycrosley/isort")
16132 (synopsis "Python utility/library to sort python imports")
16133 (description "@code{python-isort} is a python utility/library to sort
16134 imports alphabetically, and automatically separated into sections. It
16135 provides a command line utility, a python library and plugins for various
16136 editors.")
16137 (license license:expat)
16138 (properties `((python2-variant . ,(delay python2-isort))))))
16139
16140 (define-public python2-isort
16141 (let ((base (package-with-python2
16142 (strip-python2-variant python-isort))))
16143 (package/inherit base
16144 (native-inputs
16145 `(("python2-futures" ,python2-futures)
16146 ,@(package-native-inputs base))))))
16147
16148 (define-public python2-backports-functools-lru-cache
16149 (package
16150 (name "python2-backports-functools-lru-cache")
16151 (version "1.6.1")
16152 (source
16153 (origin
16154 (method url-fetch)
16155 ;; only the pypi tarballs contain the necessary metadata
16156 (uri (pypi-uri "backports.functools_lru_cache" version))
16157 (sha256
16158 (base32
16159 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
16160 (build-system python-build-system)
16161 (native-inputs
16162 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
16163 (arguments
16164 `(#:python ,python-2))
16165 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
16166 (synopsis "Backport of functools.lru_cache from Python 3.3")
16167 (description "@code{python2-backports-functools-lru-cache} is a backport
16168 of @code{functools.lru_cache} from python 3.3.")
16169 (license license:expat)))
16170
16171 (define-public python-configparser
16172 (package
16173 (name "python-configparser")
16174 (version "4.0.2")
16175 (source
16176 (origin
16177 (method url-fetch)
16178 (uri (pypi-uri "configparser" version))
16179 (sha256
16180 (base32
16181 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
16182 (native-inputs
16183 `(("python-setuptools_scm" ,python-setuptools-scm)))
16184 (build-system python-build-system)
16185 (home-page "https://github.com/jaraco/configparser/")
16186 (synopsis "Backport of configparser from python 3.5")
16187 (description "@code{python-configparser} is a backport of
16188 @code{configparser} from Python 3.5 so that it can be used directly
16189 in other versions.")
16190 (license license:expat)))
16191
16192 (define-public python2-configparser
16193 (package-with-python2 python-configparser))
16194
16195 (define-public python-iniconfig
16196 (package
16197 (name "python-iniconfig")
16198 (version "1.1.1")
16199 (source
16200 (origin
16201 (method url-fetch)
16202 (uri (pypi-uri "iniconfig" version))
16203 (sha256
16204 (base32
16205 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
16206 (build-system python-build-system)
16207 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
16208 (synopsis "Simple INI-file parser")
16209 (description "The @code{iniconfig} package provides a small and simple
16210 INI-file parser module having a unique set of features; @code{iniconfig}
16211 @itemize
16212 @item maintains the order of sections and entries;
16213 @item supports multi-line values with or without line-continuations;
16214 @item supports \"#\" comments everywhere;
16215 @item raises errors with proper line-numbers;
16216 @item raises an error when two sections have the same name.
16217 @end itemize")
16218 (license license:expat)))
16219
16220 (define-public python-mamba
16221 (package
16222 (name "python-mamba")
16223 (version "0.11.2")
16224 (source (origin
16225 (method url-fetch)
16226 (uri (pypi-uri "mamba" version))
16227 (sha256
16228 (base32
16229 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
16230 (build-system python-build-system)
16231 (arguments `(#:tests? #f)) ; No test
16232 (propagated-inputs
16233 `(("python-clint" ,python-clint)
16234 ("python-coverage" ,python-coverage)))
16235 (home-page "https://nestorsalceda.com/mamba/")
16236 (synopsis "Test runner for Python")
16237 (description
16238 "Mamba is a Behaviour-Driven Development tool for Python developers.
16239 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
16240 (license license:expat)))
16241
16242 (define-public python-mando
16243 (package
16244 (name "python-mando")
16245 (version "0.6.4")
16246 (source (origin
16247 (method url-fetch)
16248 (uri (pypi-uri "mando" version))
16249 (sha256
16250 (base32
16251 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
16252 (build-system python-build-system)
16253 (propagated-inputs
16254 `(("python-rst2ansi" ,python-rst2ansi)
16255 ("python-six" ,python-six)))
16256 (native-inputs
16257 `(("python-pytest" ,python-pytest)))
16258 (home-page "https://mando.readthedocs.org/")
16259 (synopsis
16260 "Wrapper around argparse, allowing creation of complete CLI applications")
16261 (description
16262 "This package is a wrapper around argparse, allowing you to write complete CLI
16263 applications in seconds while maintaining all the flexibility.")
16264 (license license:expat)))
16265
16266 (define-public python2-mando
16267 (package-with-python2 python-mando))
16268
16269 (define-public python2-argparse
16270 (package
16271 (name "python2-argparse")
16272 (version "1.4.0")
16273 (source
16274 (origin
16275 (method url-fetch)
16276 (uri (pypi-uri "argparse" version))
16277 (sha256
16278 (base32
16279 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
16280 (build-system python-build-system)
16281 (arguments
16282 `(#:python ,python-2))
16283 (home-page "https://github.com/ThomasWaldmann/argparse/")
16284 (synopsis "Python command-line parsing library")
16285 (description
16286 "This package is mostly for people who want to have @code{argparse} on
16287 older Pythons because it was not part of the standard library back then.")
16288 (license license:psfl)))
16289
16290 (define-public python-fudge
16291 (package
16292 (name "python-fudge")
16293 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
16294 ;; package, which is currently the only use of this package.
16295 (version "0.9.6")
16296 (source
16297 (origin
16298 (method url-fetch)
16299 (uri (pypi-uri "fudge" version))
16300 (sha256
16301 (base32
16302 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
16303 (build-system python-build-system)
16304 (arguments
16305 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
16306 (home-page "https://github.com/fudge-py/fudge")
16307 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
16308 (description
16309 "Fudge is a Python module for using fake objects (mocks and stubs) to
16310 test real ones.
16311
16312 In readable Python code, you declare the methods available on your fake object
16313 and how they should be called. Then you inject that into your application and
16314 start testing. This declarative approach means you don’t have to record and
16315 playback actions and you don’t have to inspect your fakes after running code.
16316 If the fake object was used incorrectly then you’ll see an informative
16317 exception message with a traceback that points to the culprit.")
16318 (license license:expat)))
16319
16320 (define-public python2-fudge
16321 (package-with-python2 python-fudge))
16322
16323 (define-public python-mwclient
16324 (package
16325 (name "python-mwclient")
16326 (version "0.10.1")
16327 (source
16328 (origin
16329 (method git-fetch)
16330 ;; The PyPI version wouldn't contain tests.
16331 (uri (git-reference
16332 (url "https://github.com/mwclient/mwclient")
16333 (commit (string-append "v" version))))
16334 (file-name (git-file-name name version))
16335 (sha256
16336 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
16337 (build-system python-build-system)
16338 (propagated-inputs
16339 `(("python-requests-oauthlib" ,python-requests-oauthlib)
16340 ("python-six" ,python-six)))
16341 (native-inputs
16342 `(("python-mock" ,python-mock)
16343 ("python-pytest" ,python-pytest)
16344 ("python-pytest-cov" ,python-pytest-cov)
16345 ("python-pytest-runner" ,python-pytest-runner)
16346 ("python-responses" ,python-responses)))
16347 (home-page "https://github.com/btongminh/mwclient")
16348 (synopsis "MediaWiki API client")
16349 (description "This package provides a MediaWiki API client.")
16350 (license license:expat)))
16351
16352 (define-public python-utils
16353 (package
16354 (name "python-utils")
16355 (version "2.4.0")
16356 (source (origin
16357 (method url-fetch)
16358 (uri (pypi-uri "python-utils" version))
16359 (sha256
16360 (base32
16361 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
16362 (build-system python-build-system)
16363 (arguments
16364 `(#:phases
16365 (modify-phases %standard-phases
16366 (replace 'check
16367 (lambda* (#:key inputs outputs #:allow-other-keys)
16368 (add-installed-pythonpath inputs outputs)
16369 (delete-file "pytest.ini")
16370 (invoke "pytest" "-vv"))))))
16371 (native-inputs
16372 `(("pytest-runner" ,python-pytest-runner)
16373 ("pytest" ,python-pytest)
16374 ("six" ,python-six)))
16375 (home-page "https://github.com/WoLpH/python-utils")
16376 (synopsis "Convenient utilities not included with the standard Python install")
16377 (description
16378 "Python Utils is a collection of small Python functions and classes which
16379 make common patterns shorter and easier.")
16380 (license license:bsd-2)))
16381
16382 (define-public python-diff-match-patch
16383 (package
16384 (name "python-diff-match-patch")
16385 (version "20121119")
16386 (source
16387 (origin
16388 (method url-fetch)
16389 (uri (pypi-uri "diff-match-patch" version))
16390 (sha256
16391 (base32
16392 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
16393 (build-system python-build-system)
16394 (home-page "https://code.google.com/p/google-diff-match-patch")
16395 (synopsis "Synchronize plain text")
16396 (description "Diff Match and Patch libraries offer robust algorithms to
16397 perform the operations required for synchronizing plain text.")
16398 (license license:asl2.0)))
16399
16400 (define-public python2-diff-match-patch
16401 (package-with-python2 python-diff-match-patch))
16402
16403 (define-public python-dirsync
16404 (package
16405 (name "python-dirsync")
16406 (version "2.2.5")
16407 (source
16408 (origin
16409 (method url-fetch)
16410 (uri (pypi-uri "dirsync" version))
16411 (sha256
16412 (base32
16413 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
16414 (build-system python-build-system)
16415 (propagated-inputs
16416 `(("six" ,python-six)))
16417 (home-page "https://github.com/tkhyn/dirsync")
16418 (synopsis "Advanced directory tree synchronisation tool")
16419 (description "Advanced directory tree synchronisation tool.")
16420 (license license:expat)))
16421
16422 (define-public python2-dirsync
16423 (package-with-python2 python-dirsync))
16424
16425 (define-public python-levenshtein
16426 (package
16427 (name "python-levenshtein")
16428 (version "0.12.0")
16429 (source
16430 (origin
16431 (method url-fetch)
16432 (uri (pypi-uri "python-Levenshtein" version))
16433 (sha256
16434 (base32
16435 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
16436 (build-system python-build-system)
16437 (home-page "https://github.com/ztane/python-Levenshtein")
16438 (synopsis "Fast computation of Levenshtein distance and string similarity")
16439 (description
16440 "The Levenshtein Python C extension module contains functions for fast computation of
16441 @enumerate
16442 @item Levenshtein (edit) distance, and edit operations
16443 @item string similarity
16444 @item approximate median strings, and generally string averaging
16445 @item string sequence and set similarity
16446 @end enumerate
16447 It supports both normal and Unicode strings.")
16448 (license license:gpl2+)))
16449
16450 (define-public python2-levenshtein
16451 (package-with-python2 python-levenshtein))
16452
16453 (define-public python-scandir
16454 (package
16455 (name "python-scandir")
16456 (version "1.10.0")
16457 (source
16458 (origin
16459 (method url-fetch)
16460 (uri (pypi-uri "scandir" version))
16461 (sha256
16462 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
16463 (build-system python-build-system)
16464 (arguments
16465 `(#:phases (modify-phases %standard-phases
16466 (replace 'check
16467 (lambda _
16468 (invoke "python" "test/run_tests.py"))))))
16469 (home-page "https://github.com/benhoyt/scandir")
16470 (synopsis "Directory iteration function")
16471 (description
16472 "Directory iteration function like os.listdir(), except that instead of
16473 returning a list of bare filenames, it yields DirEntry objects that include
16474 file type and stat information along with the name. Using scandir() increases
16475 the speed of os.walk() by 2-20 times (depending on the platform and file
16476 system) by avoiding unnecessary calls to os.stat() in most cases.
16477
16478 This package is part of the Python standard library since version 3.5.")
16479 (license license:bsd-3)))
16480
16481 (define-public python2-scandir
16482 (package-with-python2 python-scandir))
16483
16484 (define-public python2-stemming
16485 (package
16486 (name "python2-stemming")
16487 (version "1.0.1")
16488 (source
16489 (origin
16490 (method url-fetch)
16491 (uri (pypi-uri "stemming" version))
16492 (sha256
16493 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
16494 (build-system python-build-system)
16495 (arguments
16496 `(#:python ,python-2))
16497 (home-page "https://bitbucket.org/mchaput/stemming/overview")
16498 (synopsis "Python implementations of various stemming algorithms")
16499 (description
16500 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
16501 stemming algorithms for English. These implementations are straightforward and
16502 efficient, unlike some Python versions of the same algorithms available on the
16503 Web. This package is an extraction of the stemming code included in the Whoosh
16504 search engine.")
16505 (license license:public-domain)))
16506
16507 (define-public python-factory-boy
16508 (package
16509 (name "python-factory-boy")
16510 (version "2.8.1")
16511 (source
16512 (origin
16513 (method url-fetch)
16514 (uri (pypi-uri "factory_boy" version))
16515 (sha256
16516 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
16517 (build-system python-build-system)
16518 (arguments
16519 ;; Tests are not included in the tarball.
16520 `(#:tests? #f))
16521 (propagated-inputs
16522 `(("faker" ,python-faker)))
16523 (home-page "https://github.com/benhoyt/scandir")
16524 (synopsis "Versatile test fixtures replacement")
16525 (description
16526 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
16527
16528 As a fixtures replacement tool, it aims to replace static, hard to maintain
16529 fixtures with easy-to-use factories for complex object.
16530
16531 Instead of building an exhaustive test setup with every possible combination
16532 of corner cases, factory_boy allows you to use objects customized for the
16533 current test, while only declaring the test-specific fields")
16534 (license license:expat)))
16535
16536 (define-public python2-factory-boy
16537 (package-with-python2 python-factory-boy))
16538
16539 (define-public python-translate-toolkit
16540 (package
16541 (name "python-translate-toolkit")
16542 (version "2.1.0")
16543 (source
16544 (origin
16545 (method url-fetch)
16546 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
16547 (sha256
16548 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
16549 (build-system python-build-system)
16550 (native-inputs
16551 `(("python-pytest" ,python-pytest)
16552 ("python-sphinx" ,python-sphinx)))
16553 (propagated-inputs
16554 `(("python-babel" ,python-babel)
16555 ("python-beautifulsoup4" ,python-beautifulsoup4)
16556 ("python-chardet" ,python-chardet)
16557 ("python-diff-match-patch" ,python-diff-match-patch)
16558 ("python-levenshtein" ,python-levenshtein)
16559 ("python-lxml" ,python-lxml)
16560 ("python-six" ,python-six)
16561 ("python-vobject" ,python-vobject)
16562 ("python-pyyaml" ,python-pyyaml)))
16563 (arguments
16564 ;; TODO: tests are not run, because they end with
16565 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
16566 ;; 'parse_funcs'
16567 ;; during test setup.
16568 `(#:tests? #f))
16569 (home-page "https://toolkit.translatehouse.org")
16570 (synopsis "Tools and API for translation and localization engineering")
16571 (description
16572 "Tools and API for translation and localization engineering. It contains
16573 several utilities, as well as an API for building localization tools.")
16574 (license license:gpl2+)))
16575
16576 (define-public python2-translate-toolkit
16577 (package-with-python2 python-translate-toolkit))
16578
16579 (define-public python-packaging
16580 (package
16581 (name "python-packaging")
16582 (version "20.0")
16583 (source
16584 (origin
16585 (method url-fetch)
16586 (uri (pypi-uri "packaging" version))
16587 ;; XXX: The URL in the patch file is wrong, it should be
16588 ;; <https://github.com/pypa/packaging/pull/256>.
16589 (patches (search-patches "python-packaging-test-arch.patch"))
16590 (sha256
16591 (base32
16592 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
16593 (build-system python-build-system)
16594 (arguments
16595 `(#:phases (modify-phases %standard-phases
16596 (replace 'check
16597 (lambda* (#:key tests? #:allow-other-keys)
16598 (if tests?
16599 (invoke "py.test" "-vv")
16600 (format #t "test suite not run~%"))
16601 #t)))))
16602 (native-inputs
16603 `(("python-pretend" ,python-pretend)
16604 ("python-pytest" ,python-pytest)))
16605 (propagated-inputs
16606 `(("python-pyparsing" ,python-pyparsing)
16607 ("python-six" ,python-six)))
16608 (home-page "https://github.com/pypa/packaging")
16609 (synopsis "Core utilities for Python packages")
16610 (description "Packaging is a Python module for dealing with Python packages.
16611 It offers an interface for working with package versions, names, and dependency
16612 information.")
16613 ;; From 'LICENSE': This software is made available under the terms of
16614 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
16615 ;; Contributions to this software is made under the terms of *both* these
16616 ;; licenses.
16617 (license (list license:asl2.0 license:bsd-2))))
16618
16619 (define-public python2-packaging
16620 (package-with-python2 python-packaging))
16621
16622 ;; Variants with minimal dependencies, for bootstrapping Pytest.
16623 (define-public python-packaging-bootstrap
16624 (hidden-package
16625 (package/inherit
16626 python-packaging
16627 (name "python-packaging-bootstrap")
16628 (native-inputs '())
16629 (propagated-inputs
16630 `(("python-pyparsing" ,python-pyparsing)))
16631 (arguments '(#:tests? #f)))))
16632
16633 (define-public python2-packaging-bootstrap
16634 (hidden-package
16635 (package/inherit
16636 python2-packaging
16637 (name "python2-packaging-bootstrap")
16638 (native-inputs '())
16639 (propagated-inputs
16640 `(("python-pyparsing" ,python2-pyparsing)))
16641 (arguments
16642 `(#:tests? #f
16643 ,@(package-arguments python2-packaging))))))
16644
16645 (define-public python-relatorio
16646 (package
16647 (name "python-relatorio")
16648 (version "0.8.0")
16649 (source
16650 (origin
16651 (method url-fetch)
16652 (uri (pypi-uri "relatorio" version))
16653 (sha256
16654 (base32
16655 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
16656 (build-system python-build-system)
16657 (propagated-inputs
16658 `(("python-lxml" ,python-lxml)
16659 ("python-genshi" ,python-genshi)))
16660 (native-inputs
16661 `(("python-magic" ,python-magic)))
16662 (home-page "https://relatorio.tryton.org/")
16663 (synopsis "Templating library able to output ODT and PDF files")
16664 (description "Relatorio is a templating library which provides a way to
16665 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
16666 for more filetypes can be easily added by creating plugins for them.")
16667 (license license:gpl3+)))
16668
16669 (define-public python2-relatorio
16670 (package-with-python2 python-relatorio))
16671
16672 (define-public python-radon
16673 (package
16674 (name "python-radon")
16675 (version "4.1.0")
16676 (source
16677 (origin
16678 (method url-fetch)
16679 (uri (pypi-uri "radon" version))
16680 (sha256
16681 (base32
16682 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
16683 (build-system python-build-system)
16684 (arguments
16685 `(#:phases (modify-phases %standard-phases
16686 (replace 'check
16687 (lambda _
16688 (invoke "python" "radon/tests/run.py"))))))
16689 (propagated-inputs
16690 `(("python-colorama" ,python-colorama)
16691 ("python-flake8-polyfill" ,python-flake8-polyfill)
16692 ("python-mando" ,python-mando)))
16693 (native-inputs
16694 `(("python-pytest" ,python-pytest)
16695 ("python-pytest-mock" ,python-pytest-mock)))
16696 (home-page "https://radon.readthedocs.org/")
16697 (synopsis "Code Metrics in Python")
16698 (description "Radon is a Python tool which computes various code metrics.
16699 Supported metrics are:
16700 @itemize @bullet
16701 @item raw metrics: SLOC, comment lines, blank lines, &c.
16702 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
16703 @item Halstead metrics (all of them)
16704 @item the Maintainability Index (a Visual Studio metric)
16705 @end itemize")
16706 (properties `((python2-variant . ,(delay python2-radon))))
16707 (license license:expat)))
16708
16709 (define-public python2-radon
16710 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
16711 (package/inherit base
16712 (propagated-inputs
16713 `(("python-configparser" ,python2-configparser)
16714 ("python-future" ,python2-future)
16715 ,@(package-propagated-inputs base))))))
16716
16717 (define-public python-sure
16718 (package
16719 (name "python-sure")
16720 (version "1.4.11")
16721 (source
16722 (origin
16723 (method url-fetch)
16724 (uri (pypi-uri "sure" version))
16725 (sha256
16726 (base32
16727 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
16728 (build-system python-build-system)
16729 (propagated-inputs
16730 `(("python-mock" ,python-mock)
16731 ("python-six" ,python-six)))
16732 (native-inputs
16733 `(("python-nose" ,python-nose)))
16734 (home-page "https://github.com/gabrielfalcao/sure")
16735 (synopsis "Automated testing library in python for python")
16736 (description
16737 "Sure is a python library that leverages a DSL for writing assertions.
16738 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
16739 (license license:gpl3+)))
16740
16741 (define-public python2-sure
16742 (package-with-python2 python-sure))
16743
16744 (define-public python2-couleur
16745 ;; This package does not seem to support python3 at all, hence,
16746 ;; only the python2 variant definition is provided.
16747 (package
16748 (name "python2-couleur")
16749 (version "0.6.2")
16750 (source
16751 (origin
16752 (method url-fetch)
16753 (uri (pypi-uri "couleur" version))
16754 (sha256
16755 (base32
16756 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
16757 (build-system python-build-system)
16758 (arguments
16759 `(#:python ,python-2))
16760 (home-page "https://github.com/gabrielfalcao/couleur")
16761 (synopsis
16762 "ANSI terminal tool for python, colored shell and other handy fancy features")
16763 (description
16764 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
16765 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
16766 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
16767 ;; https://github.com/gabrielfalcao/couleur/issues/11
16768 (license license:lgpl3+)))
16769
16770 (define-public python-misaka
16771 (package
16772 (name "python-misaka")
16773 (version "2.1.1")
16774 (source
16775 (origin
16776 (method url-fetch)
16777 (uri (pypi-uri "misaka" version))
16778 (sha256
16779 (base32
16780 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
16781 (build-system python-build-system)
16782 (arguments
16783 `(;; Line 37 of setup.py calls self.run_command('develop')
16784 ;; in the 'check' phase. This command seems to be trying
16785 ;; to write to
16786 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
16787 ;; for which it does not have the permission to write.
16788 #:tests? #f))
16789 (propagated-inputs
16790 `(("python-cffi" ,python-cffi)))
16791 (home-page "https://github.com/FSX/misaka")
16792 (synopsis "Python binding for Hoedown")
16793 (description
16794 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
16795 library written in C. It features a fast HTML renderer and functionality to make custom
16796 renderers (e.g. man pages or LaTeX).")
16797 (license license:expat)))
16798
16799 (define-public python2-misaka
16800 (package-with-python2 python-misaka))
16801
16802 (define-public python2-steadymark
16803 ;; This is forced into being a python2 only variant
16804 ;; due to its dependence on couleur that has no support
16805 ;; for python3
16806 (package
16807 (name "python2-steadymark")
16808 (version "0.7.3")
16809 (source
16810 (origin
16811 (method url-fetch)
16812 (uri (pypi-uri "steadymark" version))
16813 (sha256
16814 (base32
16815 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
16816 (build-system python-build-system)
16817 (native-inputs
16818 `(("python-couleur" ,python2-couleur)
16819 ("python-sure" ,python2-sure)
16820 ("python-misaka" ,python2-misaka)))
16821 (arguments
16822 `(#:python ,python-2
16823 #:phases
16824 (modify-phases %standard-phases
16825 (add-before 'build 'patch-setup-py
16826 (lambda _
16827 ;; Update requirements from dependency==version
16828 ;; to dependency>=version
16829 (substitute* "setup.py"
16830 (("==") ">="))
16831 #t)))))
16832 (home-page "https://github.com/gabrielfalcao/steadymark")
16833 (synopsis "Markdown-based test runner for python")
16834 (description
16835 "@code{Steadymark} allows documentation to be written in github-flavoured
16836 markdown. The documentation may contain snippets of code surrounded by python
16837 code blocks and @code{Steadymark} will find these snippets and run them, making
16838 sure that there are no old malfunctional examples in the documentation examples.")
16839 (license license:expat)))
16840
16841 (define-public python-jsonpointer
16842 (package
16843 (name "python-jsonpointer")
16844 (version "1.10")
16845 (source
16846 (origin
16847 (method url-fetch)
16848 (uri (pypi-uri "jsonpointer" version))
16849 (sha256
16850 (base32
16851 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
16852 (build-system python-build-system)
16853 (home-page "https://github.com/stefankoegl/python-json-pointer")
16854 (synopsis "Identify specific nodes in a JSON document")
16855 (description "@code{jsonpointer} allows you to access specific nodes
16856 by path in a JSON document (see RFC 6901).")
16857 (license license:bsd-3)))
16858
16859 (define-public python2-jsonpointer
16860 (package-with-python2 python-jsonpointer))
16861
16862 (define-public python-jsonpatch
16863 (package
16864 (name "python-jsonpatch")
16865 (version "1.16")
16866 (source
16867 (origin
16868 (method git-fetch)
16869 ;; pypi version lacks tests.js
16870 (uri (git-reference
16871 (url "https://github.com/stefankoegl/python-json-patch")
16872 (commit (string-append "v" version))))
16873 (file-name (git-file-name name version))
16874 (sha256
16875 (base32
16876 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
16877 (build-system python-build-system)
16878 (propagated-inputs
16879 `(("python-jsonpointer" ,python-jsonpointer)))
16880 (home-page "https://github.com/stefankoegl/python-json-patch")
16881 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
16882 (description "@code{jsonpatch} is a library and program that allows
16883 applying JSON Patches according to RFC 6902.")
16884 (license license:bsd-3)))
16885
16886 (define-public python2-jsonpatch
16887 (package-with-python2 python-jsonpatch))
16888
16889 (define-public python-jsonpatch-0.4
16890 (package (inherit python-jsonpatch)
16891 (name "python-jsonpatch")
16892 (version "0.4")
16893 (source
16894 (origin
16895 (method git-fetch)
16896 (uri (git-reference
16897 (url "https://github.com/stefankoegl/python-json-patch")
16898 (commit (string-append "v" version))))
16899 (file-name (git-file-name name version))
16900 (sha256
16901 (base32
16902 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
16903
16904 (define-public python2-jsonpatch-0.4
16905 (package-with-python2 python-jsonpatch-0.4))
16906
16907 (define-public python-rfc3986
16908 (package
16909 (name "python-rfc3986")
16910 (version "1.4.0")
16911 (source (origin
16912 (method url-fetch)
16913 (uri (pypi-uri "rfc3986" version))
16914 (sha256
16915 (base32
16916 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
16917 (build-system python-build-system)
16918 (arguments
16919 `(#:modules ((guix build utils)
16920 (guix build python-build-system)
16921 (ice-9 ftw)
16922 (srfi srfi-1)
16923 (srfi srfi-26))
16924 #:phases
16925 (modify-phases %standard-phases
16926 (replace 'check
16927 (lambda _
16928 (let ((cwd (getcwd)))
16929 (setenv "PYTHONPATH"
16930 (string-append cwd "/build/"
16931 (find (cut string-prefix? "lib" <>)
16932 (scandir (string-append cwd "/build")))
16933 ":"
16934 (getenv "PYTHONPATH")))
16935 (invoke "pytest" "-v")))))))
16936 (native-inputs
16937 `(("python-pytest" ,python-pytest)))
16938 (home-page "https://rfc3986.readthedocs.io/")
16939 (synopsis "Parse and validate URI references")
16940 (description
16941 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
16942 validation and authority parsing. This module also supports RFC@tie{}6874
16943 which adds support for zone identifiers to IPv6 addresses.")
16944 (license license:asl2.0)))
16945
16946 (define-public python2-rfc3986
16947 (package-with-python2 python-rfc3986))
16948
16949 (define-public python-rfc3987
16950 (package
16951 (name "python-rfc3987")
16952 (version "1.3.7")
16953 (source
16954 (origin
16955 (method url-fetch)
16956 (uri (pypi-uri "rfc3987" version))
16957 (sha256
16958 (base32
16959 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
16960 (build-system python-build-system)
16961 (home-page "https://pypi.org/project/rfc3987/")
16962 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
16963 (description "@code{rfc3987} provides routines for parsing and
16964 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
16965 (license license:gpl3+)))
16966
16967 (define-public python2-rfc3987
16968 (package-with-python2 python-rfc3987))
16969
16970 ;; The latest commit contains fixes for building with both python3 and python2.
16971 (define-public python-rfc6555
16972 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
16973 (revision "1"))
16974 (package
16975 (name "python-rfc6555")
16976 (version (git-version "0.0.0" revision commit))
16977 (source (origin
16978 (method git-fetch)
16979 (uri (git-reference
16980 (url "https://github.com/sethmlarson/rfc6555")
16981 (commit commit)))
16982 (file-name (git-file-name name version))
16983 (sha256
16984 (base32
16985 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
16986 (build-system python-build-system)
16987 (arguments
16988 '(#:phases
16989 (modify-phases %standard-phases
16990 (replace 'check
16991 (lambda* (#:key tests? #:allow-other-keys)
16992 (if tests?
16993 ;; Other tests require network access.
16994 (invoke "pytest" "tests/test_ipv6.py")
16995 #t))))))
16996 (native-inputs
16997 `(("python-pytest" ,python-pytest)))
16998 (home-page "https://pypi.org/project/rfc6555/")
16999 (synopsis "Python implementation of RFC 6555")
17000 (description
17001 "Python implementation of the Happy Eyeballs Algorithm described in RFC
17002 6555. Provided with a single file and dead-simple API to allow easy vendoring
17003 and integration into other projects.")
17004 (properties `((python2-variant . ,(delay python2-rfc6555))))
17005 (license license:asl2.0))))
17006
17007 (define-public python2-rfc6555
17008 (let ((base (package-with-python2
17009 (strip-python2-variant python-rfc6555))))
17010 (package/inherit base
17011 (propagated-inputs
17012 `(("python2-selectors2" ,python2-selectors2))))))
17013
17014 (define-public python-bagit
17015 (package
17016 (name "python-bagit")
17017 (version "1.7.0")
17018 (source
17019 (origin
17020 (method url-fetch)
17021 (uri (pypi-uri "bagit" version))
17022 (sha256
17023 (base32
17024 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
17025 (build-system python-build-system)
17026 (native-inputs
17027 `(("python-setuptools-scm" ,python-setuptools-scm)
17028 ("python-coverage" ,python-coverage)
17029 ("python-mock" ,python-mock)))
17030 (home-page "https://libraryofcongress.github.io/bagit-python/")
17031 (synopsis "Create and validate BagIt packages")
17032 (description "Bagit is a Python library and command line utility for working
17033 with BagIt style packages. BagIt is a minimalist packaging format for digital
17034 preservation.")
17035 (license license:cc0)))
17036
17037 (define-public python-prov
17038 (package
17039 (name "python-prov")
17040 (version "2.0.0")
17041 (source
17042 (origin
17043 (method url-fetch)
17044 (uri (pypi-uri "prov" version))
17045 (sha256
17046 (base32
17047 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
17048 (build-system python-build-system)
17049 (propagated-inputs
17050 `(("python-dateutil" ,python-dateutil)
17051 ("python-lxml" ,python-lxml)
17052 ("python-networkx" ,python-networkx)
17053 ("python-rdflib" ,python-rdflib)))
17054 (native-inputs
17055 `(("graphviz" ,graphviz)
17056 ("python-pydot" ,python-pydot)))
17057 (home-page "https://github.com/trungdong/prov")
17058 (synopsis
17059 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
17060 (description
17061 "This package provides a library for W3C Provenance Data Model supporting
17062 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
17063 (license license:expat)))
17064
17065 (define-public python-arcp
17066 (package
17067 (name "python-arcp")
17068 (version "0.2.1")
17069 (source
17070 (origin
17071 (method url-fetch)
17072 (uri (pypi-uri "arcp" version))
17073 (sha256
17074 (base32
17075 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
17076 (build-system python-build-system)
17077 (native-inputs
17078 `(("python-pytest" ,python-pytest)))
17079 (home-page "http://arcp.readthedocs.io/")
17080 (synopsis
17081 "Archive and Package URI parser and generator")
17082 (description
17083 "@acronym{arcp, Archive and Package} provides functions for creating
17084 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
17085 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
17086 consume or reference hypermedia resources bundled inside a file archive or an
17087 application package, as well as to resolve URIs for archive resources within a
17088 programmatic framework. This URI scheme provides mechanisms to generate a
17089 unique base URI to represent the root of the archive, so that relative URI
17090 references in a bundled resource can be resolved within the archive without
17091 having to extract the archive content on the local file system. An arcp URI can
17092 be used for purposes of isolation (e.g. when consuming multiple archives),
17093 security constraints (avoiding \"climb out\" from the archive), or for
17094 externally identiyfing sub-resources referenced by hypermedia formats.")
17095 (license license:asl2.0)))
17096
17097 (define-public python-shellescape
17098 (package
17099 (name "python-shellescape")
17100 (version "3.8.1")
17101 (source
17102 (origin
17103 (method git-fetch)
17104 (uri (git-reference
17105 (url "https://github.com/chrissimpkins/shellescape")
17106 (commit (string-append "v" version))))
17107 (file-name (git-file-name name version))
17108 (sha256
17109 (base32
17110 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
17111 (build-system python-build-system)
17112 (arguments
17113 '(#:phases
17114 (modify-phases %standard-phases
17115 (replace 'check
17116 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
17117 (when tests?
17118 (add-installed-pythonpath inputs outputs)
17119 (invoke "python" "tests/test_shellescape.py"))
17120 #t)))))
17121 (native-inputs
17122 `(("python-pytest" ,python-pytest)))
17123 (home-page "https://github.com/chrissimpkins/shellescape")
17124 (synopsis
17125 "Shell escape a string to safely use it as a token in a shell command")
17126 (description
17127 "The shellescape Python module defines the @code{shellescape.quote()}
17128 function that returns a shell-escaped version of a Python string. This is a
17129 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
17130 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
17131 (license license:expat)))
17132
17133 (define-public python-validators
17134 (package
17135 (name "python-validators")
17136 (version "0.14.2")
17137 (source (origin
17138 (method url-fetch)
17139 (uri (pypi-uri "validators" version))
17140 (sha256
17141 (base32
17142 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
17143 (build-system python-build-system)
17144 (arguments
17145 '(#:phases (modify-phases %standard-phases
17146 (replace 'check
17147 (lambda _
17148 (invoke "pytest" "-vv"))))))
17149 (propagated-inputs
17150 `(("python-decorator" ,python-decorator)
17151 ("python-six" ,python-six)))
17152 (native-inputs
17153 `(("python-flake8" ,python-flake8)
17154 ("python-isort" ,python-isort)
17155 ("python-pytest" ,python-pytest)))
17156 (home-page "https://github.com/kvesteri/validators")
17157 (synopsis "Data validation library")
17158 (description
17159 "This package contains validators for different things such as email
17160 addresses, IP addresses, URLs, hashes and more. It has been designed to
17161 be easy to use and not require defining a schema or form just to validate
17162 some input.")
17163 (license license:expat)))
17164
17165 (define-public python2-validators
17166 (package-with-python2 python-validators))
17167
17168 (define-public python-validate-email
17169 (package
17170 (name "python-validate-email")
17171 (version "1.3")
17172 (source
17173 (origin
17174 (method url-fetch)
17175 (uri (pypi-uri "validate_email" version))
17176 (sha256
17177 (base32
17178 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
17179 (build-system python-build-system)
17180 (home-page "https://github.com/syrusakbary/validate_email")
17181 (synopsis "Verifies if an email address is valid and really exists")
17182 (description "@code{validate_email} can be used to verify if an email
17183 address is valid and really exists.")
17184 (license license:lgpl3+)))
17185
17186 (define-public python2-validate-email
17187 (package-with-python2 python-validate-email))
17188
17189 (define-public python-flex
17190 (package
17191 (name "python-flex")
17192 (version "6.10.0")
17193 (source
17194 (origin
17195 (method url-fetch)
17196 (uri (pypi-uri "flex" version))
17197 (sha256
17198 (base32
17199 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
17200 (build-system python-build-system)
17201 (propagated-inputs
17202 `(("python-click" ,python-click)
17203 ("python-iso8601" ,python-iso8601)
17204 ("python-jsonpointer" ,python-jsonpointer)
17205 ("python-pyyaml" ,python-pyyaml)
17206 ("python-requests" ,python-requests)
17207 ("python-rfc3987" ,python-rfc3987)
17208 ("python-six" ,python-six)
17209 ("python-validate-email" ,python-validate-email)))
17210 (home-page "https://github.com/pipermerriam/flex")
17211 (synopsis "Validates Swagger schemata")
17212 (description "@code{flex} can be used to validate Swagger schemata.")
17213 (license license:bsd-3)))
17214
17215 (define-public python2-flex
17216 (package-with-python2 python-flex))
17217
17218 (define-public python-marshmallow
17219 (package
17220 (name "python-marshmallow")
17221 (version "3.9.1")
17222 (source
17223 (origin
17224 (method url-fetch)
17225 (uri (pypi-uri "marshmallow" version))
17226 (sha256
17227 (base32
17228 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
17229 (build-system python-build-system)
17230 (propagated-inputs
17231 `(("python-dateutil" ,python-dateutil)
17232 ("python-simplejson" ,python-simplejson)))
17233 (native-inputs
17234 `(("python-pytest" ,python-pytest)
17235 ("python-pytz" ,python-pytz)))
17236 (home-page "https://github.com/marshmallow-code/marshmallow")
17237 (synopsis "Convert complex datatypes to and from native
17238 Python datatypes.")
17239 (description "@code{marshmallow} provides a library for converting
17240 complex datatypes to and from native Python datatypes.")
17241 (license license:expat)))
17242
17243 (define-public python-apispec
17244 (package
17245 (name "python-apispec")
17246 (version "4.0.0")
17247 (source
17248 (origin
17249 (method url-fetch)
17250 (uri (pypi-uri "apispec" version))
17251 (sha256
17252 (base32
17253 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
17254 (build-system python-build-system)
17255 (arguments
17256 '(#:phases (modify-phases %standard-phases
17257 (add-after 'unpack 'disable-prance-tests
17258 (lambda _
17259 ;; Disable validation tests since they require the
17260 ;; optional 'prance' library which is not yet in Guix.
17261 (substitute* "tests/test_ext_marshmallow_openapi.py"
17262 (("def test_openapi_tools_validate.*" all)
17263 (string-append "@pytest.mark.xfail\n" all)))))
17264 (replace 'check
17265 (lambda _
17266 (setenv "PYTHONPATH"
17267 (string-append "./build/lib:"
17268 (getenv "PYTHONPATH")))
17269 (invoke "pytest" "-vv"))))))
17270 (propagated-inputs
17271 `(("python-pyyaml" ,python-pyyaml)))
17272 (native-inputs
17273 `(("python-pytest" ,python-pytest)
17274 ("python-marshmallow" ,python-marshmallow)))
17275 (home-page "https://github.com/marshmallow-code/apispec")
17276 (synopsis "Swagger/OpenAPI specification generator")
17277 (description "@code{python-apispec} is a pluggable API specification
17278 generator. It currently supports the OpenAPI specification, formerly known
17279 as Swagger.")
17280 (license license:expat)))
17281
17282 (define-public python-flasgger
17283 (package
17284 (name "python-flasgger")
17285 (version "0.6.3")
17286 (source
17287 (origin
17288 (method git-fetch)
17289 (uri (git-reference
17290 (url "https://github.com/rochacbruno/flasgger")
17291 (commit version)))
17292 (file-name (git-file-name name version))
17293 (sha256
17294 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
17295 (build-system python-build-system)
17296 (arguments
17297 `(#:phases
17298 (modify-phases %standard-phases
17299 (replace 'check
17300 (lambda* (#:key inputs outputs #:allow-other-keys)
17301 (substitute* "Makefile"
17302 (("flake8 flasgger --ignore=F403")
17303 "flake8 flasgger --ignore=E731,F403"))
17304 (setenv "PYTHONPATH" (string-append (getcwd)
17305 ":"
17306 (getenv "PYTHONPATH")))
17307 (invoke "py.test"))))))
17308 (propagated-inputs
17309 `(("python-flask" ,python-flask)
17310 ("python-pyyaml" ,python-pyyaml)
17311 ("python-jsonschema" ,python-jsonschema)
17312 ("python-mistune" ,python-mistune)
17313 ("python-six" ,python-six)))
17314 (native-inputs
17315 `(("python-decorator" ,python-decorator)
17316 ("python-flake8" ,python-flake8)
17317 ("python-flask-restful" ,python-flask-restful)
17318 ("python-flex" ,python-flex)
17319 ("python-pytest" ,python-pytest)
17320 ("python-pytest-cov" ,python-pytest-cov)
17321 ("python-marshmallow" ,python-marshmallow)
17322 ("python-apispec" ,python-apispec)))
17323 (home-page "https://github.com/rochacbruno/flasgger/")
17324 (synopsis "Extract Swagger specs from your Flask project")
17325 (description "@code{python-flasgger} allows extracting Swagger specs
17326 from your Flask project. It is a fork of Flask-Swagger.")
17327 (license license:expat)))
17328
17329 (define-public python-swagger-spec-validator
17330 (package
17331 (name "python-swagger-spec-validator")
17332 (version "2.4.3")
17333 (source
17334 (origin
17335 (method url-fetch)
17336 (uri (pypi-uri "swagger-spec-validator" version))
17337 (sha256
17338 (base32
17339 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
17340 (build-system python-build-system)
17341 (propagated-inputs
17342 `(("python-jsonschema" ,python-jsonschema)
17343 ("python-pyyaml" ,python-pyyaml)
17344 ("python-six" ,python-six)))
17345 (home-page
17346 "https://github.com/Yelp/swagger_spec_validator")
17347 (synopsis "Validation of Swagger specifications")
17348 (description "@code{swagger_spec_validator} provides a library for
17349 validating Swagger API specifications.")
17350 (license license:asl2.0)))
17351
17352 (define-public python2-swagger-spec-validator
17353 (package-with-python2 python-swagger-spec-validator))
17354
17355 (define-public python-apache-libcloud
17356 (package
17357 (name "python-apache-libcloud")
17358 (version "3.1.0")
17359 (source
17360 (origin
17361 (method url-fetch)
17362 (uri (pypi-uri "apache-libcloud" version))
17363 (sha256
17364 (base32
17365 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
17366 (build-system python-build-system)
17367 (arguments
17368 `(#:phases
17369 (modify-phases %standard-phases
17370 (add-after 'unpack 'patch-ssh
17371 (lambda* (#:key inputs #:allow-other-keys)
17372 (substitute* "libcloud/compute/ssh.py"
17373 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
17374 "/bin/ssh" "'")))
17375 #t))
17376 (add-after 'unpack 'patch-tests
17377 (lambda _
17378 (substitute* "libcloud/test/compute/test_ssh_client.py"
17379 (("class ShellOutSSHClientTests")
17380 "@unittest.skip(\"Guix container doesn't have ssh service\")
17381 class ShellOutSSHClientTests"))
17382 #t))
17383 (add-before 'check 'copy-secret
17384 (lambda _
17385 (copy-file "libcloud/test/secrets.py-dist"
17386 "libcloud/test/secrets.py")
17387 #t)))))
17388 (inputs
17389 `(("openssh" ,openssh)))
17390 (propagated-inputs
17391 `(("python-paramiko" ,python-paramiko)
17392 ("python-requests" ,python-requests)))
17393 (native-inputs
17394 `(("python-lockfile" ,python-lockfile)
17395 ("python-mock" ,python-mock)
17396 ("python-pytest" ,python-pytest)
17397 ("python-pytest-runner" ,python-pytest-runner)
17398 ("python-requests-mock" ,python-requests-mock)))
17399 (home-page "https://libcloud.apache.org/")
17400 (synopsis "Unified Cloud API")
17401 (description "@code{libcloud} is a Python library for interacting with
17402 many of the popular cloud service providers using a unified API.")
17403 (license license:asl2.0)))
17404
17405 (define-public python-smmap
17406 (package
17407 (name "python-smmap")
17408 (version "3.0.1")
17409 (source
17410 (origin
17411 (method url-fetch)
17412 (uri (pypi-uri "smmap" version))
17413 (sha256
17414 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
17415 (build-system python-build-system)
17416 (native-inputs
17417 `(("python-nosexcover" ,python-nosexcover)))
17418 (home-page "https://github.com/Byron/smmap")
17419 (synopsis "Python sliding window memory map manager")
17420 (description "@code{smmap} is a pure Python implementation of a sliding
17421 window memory map manager.")
17422 (license license:bsd-3)))
17423
17424 (define-public python-smmap2
17425 (deprecated-package "python-smmap2" python-smmap))
17426
17427 (define-public python2-smmap
17428 (package-with-python2 python-smmap))
17429
17430 (define-public python2-smmap2
17431 (deprecated-package "python2-smmap2" python2-smmap))
17432
17433 (define-public python-regex
17434 (package
17435 (name "python-regex")
17436 (version "2020.6.8")
17437 (source (origin
17438 (method url-fetch)
17439 (uri (pypi-uri "regex" version))
17440 (sha256
17441 (base32
17442 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
17443 (build-system python-build-system)
17444 (arguments
17445 '(#:phases
17446 (modify-phases %standard-phases
17447 (replace 'check
17448 (lambda* (#:key inputs outputs #:allow-other-keys)
17449 (add-installed-pythonpath inputs outputs)
17450 (invoke "python" "-c"
17451 "from regex.test_regex import test_main; test_main()"))))))
17452 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
17453 (synopsis "Alternative regular expression module")
17454 (description "This regular expression implementation is backwards-
17455 compatible with the standard @code{re} module, but offers additional
17456 functionality like full case-folding for case-insensitive matches in Unicode.")
17457 (license license:psfl)))
17458
17459 (define-public python2-regex
17460 (package-with-python2 python-regex))
17461
17462 (define-public python-pyopengl
17463 (package
17464 (name "python-pyopengl")
17465 (version "3.1.5")
17466 (source
17467 (origin
17468 (method url-fetch)
17469 (uri (pypi-uri "PyOpenGL" version))
17470 (sha256
17471 (base32
17472 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
17473 (build-system python-build-system)
17474 (inputs
17475 `(("mesa" ,mesa)
17476 ("freeglut" ,freeglut)
17477 ("glu" ,glu)))
17478 (arguments
17479 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
17480 ;attribute 'OSMesa'
17481 #:phases
17482 (modify-phases %standard-phases
17483 (add-before 'build 'fix-paths
17484 (lambda* (#:key inputs outputs #:allow-other-keys)
17485 (substitute* '("OpenGL/platform/ctypesloader.py")
17486 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
17487 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
17488 (("'GL'")
17489 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
17490 (("'GLU'")
17491 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
17492 (("'glut',")
17493 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
17494 (("'GLESv1_CM'")
17495 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
17496 (("'GLESv2'")
17497 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
17498 ;; Not providing libgle. It seems to be very old.
17499 #t)))))
17500 (home-page "http://pyopengl.sourceforge.net")
17501 (synopsis "Standard OpenGL bindings for Python")
17502 (description
17503 "PyOpenGL is the most common cross platform Python binding to OpenGL and
17504 related APIs. The binding is created using the standard @code{ctypes}
17505 library.")
17506 (license license:bsd-3)))
17507
17508 (define-public python-pyopengl-accelerate
17509 (package
17510 (inherit python-pyopengl)
17511 (name "python-pyopengl-accelerate")
17512 (version "3.1.5")
17513 (source
17514 (origin
17515 (method url-fetch)
17516 (uri (pypi-uri "PyOpenGL-accelerate" version))
17517 (sha256
17518 (base32
17519 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
17520 (inputs
17521 `(("mesa" ,mesa)
17522 ("python-numpy" ,python-numpy))) ; for cython module
17523 ; numpy_formathandler, thus not propagated
17524 (arguments
17525 `(#:tests? #f
17526 #:phases
17527 (modify-phases %standard-phases
17528 (delete 'fix-paths))))
17529 (synopsis "Acceleration code for PyOpenGL")
17530 (description
17531 "This is the Cython-coded accelerator module for PyOpenGL.")))
17532
17533 (define-public python-rencode
17534 (package
17535 (name "python-rencode")
17536 (version "1.0.5")
17537 (source
17538 (origin
17539 (method url-fetch)
17540 (uri (pypi-uri "rencode" version))
17541 (sha256
17542 (base32
17543 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
17544 (build-system python-build-system)
17545 (arguments
17546 `(#:phases
17547 (modify-phases %standard-phases
17548 (add-before 'check 'delete-bogus-test
17549 ;; This test requires /home/aresch/Downloads, which is not provided by
17550 ;; the build environment.
17551 (lambda _
17552 (delete-file "rencode/t.py")
17553 #t)))))
17554 (native-inputs `(("pkg-config" ,pkg-config)
17555 ("python-cython" ,python-cython)))
17556 (home-page "https://github.com/aresch/rencode")
17557 (synopsis "Serialization of heterogeneous data structures")
17558 (description
17559 "The @code{rencode} module is a data structure serialization library,
17560 similar to @code{bencode} from the BitTorrent project. For complex,
17561 heterogeneous data structures with many small elements, r-encoding stake up
17562 significantly less space than b-encodings. This version of rencode is a
17563 complete rewrite in Cython to attempt to increase the performance over the
17564 pure Python module.")
17565 (license license:bsd-3)))
17566
17567 (define-public python2-rencode
17568 (package-with-python2 python-rencode))
17569
17570 (define-public python-xenon
17571 (package
17572 (name "python-xenon")
17573 (version "0.7.0")
17574 (source
17575 (origin
17576 (method url-fetch)
17577 (uri (pypi-uri "xenon" version))
17578 (sha256
17579 (base32
17580 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
17581 (build-system python-build-system)
17582 (native-inputs
17583 `(("python-pyyaml" ,python-pyyaml)
17584 ("python-radon" ,python-radon)
17585 ("python-requests" ,python-requests)
17586 ("python-flake8" ,python-flake8)
17587 ("python-tox" ,python-tox)))
17588 (arguments
17589 `(#:tests? #f ;test suite not shipped with the PyPI archive
17590 #:phases
17591 (modify-phases %standard-phases
17592 (add-before 'build 'patch-test-requirements
17593 (lambda _
17594 ;; Remove httpretty dependency for tests.
17595 (substitute* "setup.py"
17596 (("httpretty") ""))
17597 #t)))))
17598 (home-page "https://xenon.readthedocs.org/")
17599 (synopsis "Monitor code metrics for Python on your CI server")
17600 (description
17601 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
17602 Ideally, @code{xenon} is run every time code is committed. Through command
17603 line options, various thresholds can be set for the complexity of code. It
17604 will fail (i.e. it will exit with a non-zero exit code) when any of these
17605 requirements is not met.")
17606 (license license:expat)))
17607
17608 (define-public python-pysocks
17609 (package
17610 (name "python-pysocks")
17611 (version "1.7.1")
17612 (source
17613 (origin
17614 (method url-fetch)
17615 (uri (pypi-uri "PySocks" version))
17616 (sha256
17617 (base32
17618 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
17619 (build-system python-build-system)
17620 (arguments `(#:tests? #f))
17621 (home-page "https://github.com/Anorov/PySocks")
17622 (synopsis "SOCKS client module")
17623 (description "@code{pysocks} is an updated and semi-actively maintained
17624 version of @code{SocksiPy} with bug fixes and extra features.")
17625 (license license:bsd-3)))
17626
17627 (define-public python2-pysocks
17628 (package-with-python2 python-pysocks))
17629
17630 (define-public python-pydiff
17631 (package
17632 (name "python-pydiff")
17633 (version "0.2")
17634 (source
17635 (origin
17636 (method url-fetch)
17637 (uri (pypi-uri "pydiff" version))
17638 (sha256
17639 (base32
17640 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
17641 (build-system python-build-system)
17642 (home-page "https://github.com/myint/pydiff")
17643 (synopsis "Library to diff two Python files at the bytecode level")
17644 (description
17645 "@code{pydiff} makes it easy to look for actual code changes while
17646 ignoring formatting changes.")
17647 (license license:expat)))
17648
17649 (define-public python2-pydiff
17650 (package-with-python2 python-pydiff))
17651
17652 (define-public python-pydub
17653 (package
17654 (name "python-pydub")
17655 (version "0.24.1")
17656 (source
17657 (origin
17658 (method url-fetch)
17659 (uri (pypi-uri "pydub" version))
17660 (sha256
17661 (base32
17662 "0sfwfq7yjv4bl3yqbmizszscafvwf4zr40hzbsy7rclvzyznh333"))))
17663 (build-system python-build-system)
17664 (arguments
17665 `(#:phases
17666 (modify-phases %standard-phases
17667 (add-after 'unpack 'fix-ffmpeg-path
17668 (lambda* (#:key inputs #:allow-other-keys)
17669 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
17670 (substitute* '("pydub/utils.py")
17671 (("return \"ffmpeg\"")
17672 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
17673 (("return \"ffplay\"")
17674 (string-append "return \"" ffmpeg "/bin/ffplay\""))
17675 (("return \"ffprobe\"")
17676 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
17677 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
17678 #t))))))
17679 (home-page "https://pydub.com")
17680 (inputs
17681 `(("ffmpeg" ,ffmpeg)))
17682 (propagated-inputs
17683 `(("python-scipy" ,python-scipy)))
17684 (synopsis "Manipulate audio with a high level interface in Python")
17685 (description
17686 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
17687 @code{ffmpeg} to open various audio formats.")
17688 (license license:expat))) ; MIT license
17689
17690 (define-public python-tqdm
17691 (package
17692 (name "python-tqdm")
17693 (version "4.43.0")
17694 (source
17695 (origin
17696 (method url-fetch)
17697 (uri (pypi-uri "tqdm" version))
17698 (sha256
17699 (base32
17700 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
17701 (build-system python-build-system)
17702 (arguments
17703 '(#:phases (modify-phases %standard-phases
17704 (replace 'check
17705 (lambda* (#:key inputs outputs #:allow-other-keys)
17706 (add-installed-pythonpath inputs outputs)
17707 ;; This invokation is taken from tox.ini.
17708 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
17709 "-d" "-v" "tqdm/"))))))
17710 (native-inputs
17711 `(("python-nose" ,python-nose)))
17712 (home-page "https://github.com/tqdm/tqdm")
17713 (synopsis "Fast, extensible progress meter")
17714 (description
17715 "Make loops show a progress bar on the console by just wrapping any
17716 iterable with @code{|tqdm(iterable)|}. Offers many options to define
17717 design and layout.")
17718 (license (list license:mpl2.0 license:expat))))
17719
17720 (define-public python2-tqdm
17721 (package-with-python2 python-tqdm))
17722
17723 (define-public python-pkginfo
17724 (package
17725 (name "python-pkginfo")
17726 (version "1.7.0")
17727 (source
17728 (origin
17729 (method url-fetch)
17730 (uri (pypi-uri "pkginfo" version))
17731 (sha256
17732 (base32
17733 "1d1xn1xmfvz0jr3pj8irdwnwby3r13g0r2gwklr1q5y68p5p16h2"))))
17734 (build-system python-build-system)
17735 (arguments
17736 `(#:phases
17737 (modify-phases %standard-phases
17738 (add-before 'check 'patch-tests
17739 (lambda _
17740 (substitute* "pkginfo/tests/test_installed.py"
17741 (("test_ctor_w_package_no_PKG_INFO")
17742 "_test_ctor_w_package_no_PKG_INFO"))
17743 #t)))))
17744 (home-page
17745 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
17746 (synopsis
17747 "Query metadatdata from sdists, bdists, and installed packages")
17748 (description
17749 "API to query the distutils metadata written in @file{PKG-INFO} inside a
17750 source distriubtion (an sdist) or a binary distribution (e.g., created by
17751 running bdist_egg). It can also query the EGG-INFO directory of an installed
17752 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
17753 created by running @code{python setup.py develop}).")
17754 (license license:expat)))
17755
17756 (define-public python2-pkginfo
17757 (package-with-python2 python-pkginfo))
17758
17759 (define-public python-twine
17760 (package
17761 (name "python-twine")
17762 (version "1.15.0")
17763 (source
17764 (origin
17765 (method url-fetch)
17766 (uri (pypi-uri "twine" version))
17767 (sha256
17768 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
17769 (build-system python-build-system)
17770 (propagated-inputs
17771 `(("python-tqdm" ,python-tqdm)
17772 ("python-packaging" ,python-packaging)
17773 ("python-pkginfo" ,python-pkginfo)
17774 ("python-readme-renderer" ,python-readme-renderer)
17775 ("python-requests" ,python-requests)
17776 ("python-requests-toolbelt" ,python-requests-toolbelt)))
17777 (home-page "https://github.com/pypa/twine")
17778 (synopsis "Collection of utilities for interacting with PyPI")
17779 (description
17780 "@code{twine} currently supports registering projects and uploading
17781 distributions. It authenticates the user over HTTPS, allows them to pre-sign
17782 their files and supports any packaging format (including wheels).")
17783 (license license:asl2.0)))
17784
17785 (define-public python2-twine
17786 (package-with-python2 python-twine))
17787
17788 (define-public python-linecache2
17789 (package
17790 (name "python-linecache2")
17791 (version "1.0.0")
17792 (source
17793 (origin
17794 (method url-fetch)
17795 (uri (pypi-uri "linecache2" version))
17796 (sha256
17797 (base32
17798 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
17799 (build-system python-build-system)
17800 (arguments
17801 `(;; The tests depend on unittest2, and our version is a bit too old.
17802 #:tests? #f))
17803 (native-inputs
17804 `(("python-pbr" ,python-pbr-minimal)))
17805 (home-page
17806 "https://github.com/testing-cabal/linecache2")
17807 (synopsis "Backports of the linecache module")
17808 (description
17809 "The linecache module allows one to get any line from any file, while
17810 attempting to optimize internally, using a cache, the common case where many
17811 lines are read from a single file.")
17812 (license license:psfl)))
17813
17814 (define-public python2-linecache2
17815 (package-with-python2 python-linecache2))
17816
17817 (define-public python-traceback2
17818 (package
17819 (name "python-traceback2")
17820 (version "1.4.0")
17821 (source
17822 (origin
17823 (method url-fetch)
17824 (uri (pypi-uri "traceback2" version))
17825 (sha256
17826 (base32
17827 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
17828 (build-system python-build-system)
17829 (arguments
17830 `(;; python-traceback2 and python-unittest2 depend on one another.
17831 #:tests? #f))
17832 (native-inputs
17833 `(("python-pbr" ,python-pbr-minimal)))
17834 (propagated-inputs
17835 `(("python-linecache2" ,python-linecache2)))
17836 (home-page
17837 "https://github.com/testing-cabal/traceback2")
17838 (synopsis "Backports of the traceback module")
17839 (description
17840 "This module provides a standard interface to extract, format and print
17841 stack traces of Python programs. It exactly mimics the behavior of the Python
17842 interpreter when it prints a stack trace.")
17843 (license license:psfl)))
17844
17845 (define-public python2-traceback2
17846 (package-with-python2 python-traceback2))
17847
17848 (define-public python-ratelimiter
17849 (package
17850 (name "python-ratelimiter")
17851 (version "1.2.0")
17852 (source
17853 (origin
17854 (method url-fetch)
17855 (uri (pypi-uri "ratelimiter" version))
17856 (sha256
17857 (base32
17858 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
17859 (build-system python-build-system)
17860 (arguments
17861 '(#:tests? #f)) ; There are no tests in the pypi archive.
17862 (home-page "https://github.com/RazerM/ratelimiter")
17863 (synopsis "Simple rate limiting object")
17864 (description
17865 "The @code{ratelimiter} module ensures that an operation will not be
17866 executed more than a given number of times during a given period.")
17867 (license license:asl2.0)))
17868
17869 (define-public python2-ratelimiter
17870 (package-with-python2 python-ratelimiter))
17871
17872 (define-public python-dukpy
17873 (package
17874 (name "python-dukpy")
17875 (version "0.3")
17876 (source
17877 (origin
17878 (method git-fetch)
17879 (uri (git-reference
17880 (url "https://github.com/kovidgoyal/dukpy")
17881 (commit (string-append "v" version))))
17882 (file-name (git-file-name name version))
17883 (sha256
17884 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
17885 (build-system python-build-system)
17886 (home-page "https://github.com/kovidgoyal/dukpy")
17887 (synopsis "Run JavaScript in python")
17888 (description
17889 "dukpy is a JavaScript runtime environment for Python using the duktape
17890 embeddable JavaScript engine.")
17891 ;; Dukpy is licensed under MIT like the embedded duktape library,
17892 ;; with 'errors.c' as GPL3.
17893 (license (list license:expat license:gpl3))))
17894
17895 (define-public python2-dukpy
17896 (package-with-python2 python-dukpy))
17897
17898 (define-public python-jsonrpclib-pelix
17899 (package
17900 (name "python-jsonrpclib-pelix")
17901 (version "0.3.2")
17902 (source
17903 (origin
17904 (method url-fetch)
17905 (uri (pypi-uri "jsonrpclib-pelix" version))
17906 (sha256
17907 (base32
17908 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
17909 (build-system python-build-system)
17910 (arguments
17911 `(#:tests? #f)) ; no tests in PyPI tarball
17912 (home-page "https://github.com/tcalmant/jsonrpclib/")
17913 (synopsis "JSON-RPC 2.0 client library for Python")
17914 (description
17915 "This library implements the JSON-RPC v2.0
17916 specification (backwards-compatible) as a client library for Python. This
17917 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
17918 services.")
17919 (license license:asl2.0)))
17920
17921 (define-public python2-jsonrpclib-pelix
17922 (package-with-python2 python-jsonrpclib-pelix))
17923
17924 (define-public python-setuptools-scm-git-archive
17925 (package
17926 (name "python-setuptools-scm-git-archive")
17927 (version "1.0")
17928 (source
17929 (origin
17930 (method url-fetch)
17931 (uri (pypi-uri "setuptools_scm_git_archive" version))
17932 (sha256
17933 (base32
17934 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
17935 (build-system python-build-system)
17936 (native-inputs
17937 `(("python-pytest" ,python-pytest)))
17938 (propagated-inputs
17939 `(("python-setuptools-scm" ,python-setuptools-scm)))
17940 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
17941 (synopsis "Setuptools_scm plugin for git archives")
17942 (description
17943 "The setuptools_scm_git_archive package is a plugin to
17944 setuptools_scm, which supports obtaining versions from git archives that
17945 belong to tagged versions.")
17946 (license license:expat)))
17947
17948 (define-public python2-setuptools-scm-git-archive
17949 (package-with-python2 python-setuptools-scm-git-archive))
17950
17951 (define-public python-setuptools-git
17952 (package
17953 (name "python-setuptools-git")
17954 (version "1.2")
17955 (source
17956 (origin
17957 (method url-fetch)
17958 (uri (pypi-uri "setuptools-git" version))
17959 (sha256
17960 (base32
17961 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
17962 (build-system python-build-system)
17963 (arguments
17964 `(#:phases
17965 (modify-phases %standard-phases
17966 ;; This is needed for tests.
17967 (add-after 'unpack 'configure-git
17968 (lambda _
17969 (setenv "HOME" "/tmp")
17970 (invoke "git" "config" "--global" "user.email" "guix")
17971 (invoke "git" "config" "--global" "user.name" "guix")
17972 #t)))))
17973 (native-inputs
17974 `(("git" ,git-minimal)))
17975 (home-page "https://github.com/msabramo/setuptools-git")
17976 (synopsis "Setuptools revision control system plugin for Git")
17977 (description
17978 "This package provides a plugin for Setuptools for revision control with
17979 Git.")
17980 (license license:bsd-3)))
17981
17982 (define-public python-pyclipper
17983 (package
17984 (name "python-pyclipper")
17985 (version "1.1.0.post3")
17986 (source
17987 (origin
17988 (method url-fetch)
17989 (uri (pypi-uri "pyclipper" version ".zip"))
17990 (sha256
17991 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
17992 (modules '((guix build utils)))
17993 (snippet
17994 '(begin
17995 ;; This file is generated by Cython.
17996 (delete-file "pyclipper/pyclipper.cpp") #t))))
17997 (build-system python-build-system)
17998 (arguments
17999 `(#:phases
18000 (modify-phases %standard-phases
18001 (add-before 'build 'cythonize-sources
18002 (lambda _
18003 (with-directory-excursion "pyclipper"
18004 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
18005 (propagated-inputs
18006 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
18007 (native-inputs
18008 `(("python-cython" ,python-cython)
18009 ("python-pytest" ,python-pytest)
18010 ("python-pytest-runner" ,python-pytest-runner)
18011 ("python-unittest2" ,python-unittest2)
18012 ("unzip" ,unzip)))
18013 (home-page "https://github.com/greginvm/pyclipper")
18014 (synopsis "Wrapper for Angus Johnson's Clipper library")
18015 (description
18016 "Pyclipper is a Cython wrapper for the C++ translation of the
18017 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
18018 (license license:expat)))
18019
18020 (define-public python2-pyclipper
18021 (package-with-python2 python-pyclipper))
18022
18023 (define-public python2-booleanoperations
18024 (package
18025 (name "python2-booleanoperations")
18026 (version "0.7.1")
18027 (source
18028 (origin
18029 (method url-fetch)
18030 (uri (pypi-uri "booleanOperations" version ".zip"))
18031 (sha256
18032 (base32
18033 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
18034 (build-system python-build-system)
18035 (arguments
18036 `(#:python ,python-2))
18037 (native-inputs
18038 `(("unzip" ,unzip)
18039 ("python2-pytest" ,python2-pytest)
18040 ("python2-pytest-runner" ,python2-pytest-runner)))
18041 (propagated-inputs
18042 `(("python-fonttools" ,python2-fonttools)
18043 ("python-pyclipper" ,python2-pyclipper)
18044 ("python-ufolib" ,python2-ufolib)))
18045 (home-page "https://github.com/typemytype/booleanOperations")
18046 (synopsis "Boolean operations on paths")
18047 (description
18048 "BooleanOperations provides a Python library that enables
18049 boolean operations on paths.")
18050 (license license:expat)))
18051
18052 (define-public python-tempdir
18053 (package
18054 (name "python-tempdir")
18055 (version "0.7.1")
18056 (source
18057 (origin
18058 (method url-fetch)
18059 (uri (pypi-uri "tempdir" version))
18060 (sha256
18061 (base32
18062 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
18063 (build-system python-build-system)
18064 (home-page "https://pypi.org/project/tempdir/")
18065 (arguments
18066 ;; the package has no tests
18067 '(#:tests? #f))
18068 (synopsis "Python library for managing temporary directories")
18069 (description
18070 "This library manages temporary directories that are automatically
18071 deleted with all their contents when they are no longer needed. It is
18072 particularly convenient for use in tests.")
18073 (license license:expat)))
18074
18075 (define-public python2-tempdir
18076 (package-with-python2 python-tempdir))
18077
18078 (define-public python-activepapers
18079 (package
18080 (name "python-activepapers")
18081 (version "0.2.2")
18082 (source
18083 (origin
18084 (method url-fetch)
18085 (uri (pypi-uri "ActivePapers.Py" version))
18086 (sha256
18087 (base32
18088 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
18089 (build-system python-build-system)
18090 (arguments
18091 `(#:modules ((ice-9 ftw)
18092 (srfi srfi-1)
18093 (guix build utils)
18094 (guix build python-build-system))
18095
18096 #:phases
18097 (modify-phases %standard-phases
18098 (add-after 'unpack 'delete-python2-code
18099 (lambda _
18100 (for-each delete-file
18101 '("lib/activepapers/builtins2.py"
18102 "lib/activepapers/standardlib2.py"
18103 "lib/activepapers/utility2.py"))))
18104 (replace 'check
18105 (lambda _
18106 ;; Deactivate the test cases that download files
18107 (setenv "NO_NETWORK_ACCESS" "1")
18108 ;; For some strange reason, some tests fail if nosetests runs all
18109 ;; test modules in a single execution. They pass if each test
18110 ;; module is run individually.
18111 (for-each (lambda (filename)
18112 (invoke "nosetests"
18113 (string-append "tests/" filename)))
18114 (scandir "tests"
18115 (lambda (filename)
18116 (string-suffix? ".py" filename)))))))))
18117 (native-inputs
18118 `(("python-tempdir" ,python-tempdir)
18119 ("python-nose" ,python-nose)))
18120 (propagated-inputs
18121 `(("python-h5py" ,python-h5py)))
18122 (home-page "https://www.activepapers.org/")
18123 (synopsis "Executable papers for scientific computing")
18124 (description
18125 "ActivePapers is a tool for working with executable papers, which
18126 combine data, code, and documentation in single-file packages,
18127 suitable for publication as supplementary material or on repositories
18128 such as figshare or Zenodo.")
18129 (properties `((python2-variant . ,(delay python2-activepapers))))
18130 (license license:bsd-3)))
18131
18132 (define-public python2-activepapers
18133 (let ((base (package-with-python2
18134 (strip-python2-variant python-activepapers))))
18135 (package/inherit base
18136 (arguments
18137 (substitute-keyword-arguments (package-arguments base)
18138 ((#:phases phases)
18139 `(modify-phases ,phases
18140 (delete 'delete-python2-code)
18141 (add-after 'unpack 'delete-python3-code
18142 (lambda _
18143 (for-each delete-file
18144 '("lib/activepapers/builtins3.py"
18145 "lib/activepapers/standardlib3.py"
18146 "lib/activepapers/utility3.py")))))))))))
18147
18148 (define-public python-semver
18149 (package
18150 (name "python-semver")
18151 (version "2.9.0")
18152 (source
18153 (origin
18154 (method url-fetch)
18155 (uri (pypi-uri "semver" version))
18156 (sha256
18157 (base32
18158 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
18159 (build-system python-build-system)
18160 (arguments
18161 `(#:phases (modify-phases %standard-phases
18162 (replace 'check
18163 (lambda _
18164 (delete-file "setup.cfg")
18165 (invoke "py.test"))))))
18166 (native-inputs
18167 `(("python-pytest" ,python-pytest)))
18168 (home-page "https://github.com/k-bx/python-semver")
18169 (synopsis "Python helper for Semantic Versioning")
18170 (description "This package provides a Python library for
18171 @url{Semantic Versioning, http://semver.org/}.")
18172 (license license:bsd-3)))
18173
18174 (define-public python2-semver
18175 (package-with-python2 python-semver))
18176
18177 (define-public python-pyro4
18178 (package
18179 (name "python-pyro4")
18180 (version "4.77")
18181 (source
18182 (origin
18183 (method url-fetch)
18184 (uri (pypi-uri "Pyro4" version))
18185 (sha256
18186 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
18187 (build-system python-build-system)
18188 (arguments
18189 '(#:tests? #f)) ;FIXME: Some tests require network access.
18190 (native-inputs
18191 `(("python-cloudpickle" ,python-cloudpickle)
18192 ("python-dill" ,python-dill)
18193 ("python-msgpack" ,python-msgpack)))
18194 (propagated-inputs
18195 `(("python-serpent" ,python-serpent)))
18196 (home-page "https://pyro4.readthedocs.io")
18197 (synopsis "Distributed object middleware for Python")
18198 (description
18199 "Pyro enables you to build applications in which objects can talk to each
18200 other over the network. You can just use normal Python method calls to call
18201 objects on other machines, also known as remote procedure calls (RPC).")
18202 (license license:expat)))
18203
18204 (define-public python2-pyro
18205 (package
18206 (name "python2-pyro")
18207 (version "3.16")
18208 (source
18209 (origin
18210 (method url-fetch)
18211 (uri (pypi-uri "Pyro" version))
18212 (file-name (string-append "Pyro-" version ".tar.gz"))
18213 (sha256
18214 (base32
18215 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
18216 (build-system python-build-system)
18217 (arguments
18218 ;; Pyro is not compatible with Python 3
18219 `(#:python ,python-2
18220 ;; Pyro has no test cases for automatic execution
18221 #:tests? #f))
18222 (home-page "https://pythonhosted.org/Pyro/")
18223 (synopsis "Distributed object manager for Python")
18224 (description "Pyro is a Distributed Object Technology system
18225 written in Python that is designed to be easy to use. It resembles
18226 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
18227 which is a system and language independent Distributed Object Technology
18228 and has much more to offer than Pyro or RMI. Pyro 3.x is no
18229 longer maintained. New projects should use Pyro4 instead, which
18230 is the new Pyro version that is actively developed.")
18231 (license license:expat)))
18232
18233 (define-public python2-scientific
18234 (package
18235 (name "python2-scientific")
18236 (version "2.9.4")
18237 (source
18238 (origin
18239 (method git-fetch)
18240 (uri (git-reference
18241 (url "https://github.com/khinsen/ScientificPython")
18242 (commit (string-append "rel" version))))
18243 (file-name (git-file-name name version))
18244 (sha256
18245 (base32
18246 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
18247 (build-system python-build-system)
18248 (inputs
18249 `(("netcdf" ,netcdf)))
18250 (propagated-inputs
18251 `(("python-numpy" ,python2-numpy-1.8)
18252 ("python-pyro" ,python2-pyro)))
18253 (arguments
18254 ;; ScientificPython is not compatible with Python 3
18255 `(#:python ,python-2
18256 #:tests? #f ; No test suite
18257 #:phases
18258 (modify-phases %standard-phases
18259 (replace 'build
18260 (lambda* (#:key inputs #:allow-other-keys)
18261 (invoke "python" "setup.py" "build"
18262 (string-append "--netcdf_prefix="
18263 (assoc-ref inputs "netcdf"))))))))
18264 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
18265 (synopsis "Python modules for scientific computing")
18266 (description "ScientificPython is a collection of Python modules that are
18267 useful for scientific computing. Most modules are rather general (Geometry,
18268 physical units, automatic derivatives, ...) whereas others are more
18269 domain-specific (e.g. netCDF and PDB support). The library is currently
18270 not actively maintained and works only with Python 2 and NumPy < 1.9.")
18271 (license license:cecill-c)))
18272
18273 (define-public python2-mmtk
18274 (package
18275 (name "python2-mmtk")
18276 (version "2.7.12")
18277 (source
18278 (origin
18279 (method git-fetch)
18280 (uri (git-reference
18281 (url "https://github.com/khinsen/MMTK")
18282 (commit (string-append "rel" version))))
18283 (file-name (git-file-name name version))
18284 (sha256
18285 (base32
18286 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
18287 (build-system python-build-system)
18288 (native-inputs
18289 `(("netcdf" ,netcdf)))
18290 (propagated-inputs
18291 `(("python-scientific" ,python2-scientific)
18292 ("python-tkinter" ,python-2 "tk")))
18293 (arguments
18294 `(#:python ,python-2
18295 #:tests? #f
18296 #:phases
18297 (modify-phases %standard-phases
18298 (add-before 'build 'includes-from-scientific
18299 (lambda* (#:key inputs #:allow-other-keys)
18300 (mkdir-p "Include/Scientific")
18301 (copy-recursively
18302 (string-append
18303 (assoc-ref inputs "python-scientific")
18304 "/include/python2.7/Scientific")
18305 "Include/Scientific"))))))
18306 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
18307 (synopsis "Python library for molecular simulation")
18308 (description "MMTK is a library for molecular simulations with an emphasis
18309 on biomolecules. It provides widely used methods such as Molecular Dynamics
18310 and normal mode analysis, but also basic routines for implementing new methods
18311 for simulation and analysis. The library is currently not actively maintained
18312 and works only with Python 2 and NumPy < 1.9.")
18313 (license license:cecill-c)))
18314
18315 (define-public python-phonenumbers
18316 (package
18317 (name "python-phonenumbers")
18318 (version "8.9.1")
18319 (source
18320 (origin
18321 (method url-fetch)
18322 (uri (pypi-uri "phonenumbers" version))
18323 (sha256
18324 (base32
18325 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
18326 (build-system python-build-system)
18327 (home-page
18328 "https://github.com/daviddrysdale/python-phonenumbers")
18329 (synopsis
18330 "Python library for dealing with international phone numbers")
18331 (description
18332 "This package provides a Python port of Google's libphonenumber library.")
18333 (license license:asl2.0)))
18334
18335 (define-public python2-phonenumbers
18336 (package-with-python2 python-phonenumbers))
18337
18338 (define-public python-send2trash
18339 (package
18340 (name "python-send2trash")
18341 (version "1.5.0")
18342 (source
18343 (origin (method git-fetch)
18344 ;; Source tarball on PyPI doesn't include tests.
18345 (uri (git-reference
18346 (url "https://github.com/hsoft/send2trash")
18347 (commit version)))
18348 (file-name (git-file-name name version))
18349 (sha256
18350 (base32
18351 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
18352 (build-system python-build-system)
18353 (arguments
18354 '(#:phases
18355 (modify-phases %standard-phases
18356 (add-before 'check 'pre-check
18357 (lambda _
18358 (mkdir-p "/tmp/foo")
18359 (setenv "HOME" "/tmp/foo")
18360 #t)))))
18361 (home-page "https://github.com/hsoft/send2trash")
18362 (synopsis "Send files to the user's @file{~/Trash} directory")
18363 (description "This package provides a Python library to send files to the
18364 user's @file{~/Trash} directory.")
18365 (properties `((python2-variant . ,(delay python2-send2trash))))
18366 (license license:bsd-3)))
18367
18368 (define-public python2-send2trash
18369 (let ((base (package-with-python2
18370 (strip-python2-variant python-send2trash))))
18371 (package/inherit base
18372 (arguments
18373 (substitute-keyword-arguments (package-arguments python-send2trash)
18374 ((#:phases phases)
18375 `(modify-phases ,phases
18376 (add-before 'check 'setenv
18377 (lambda _
18378 (setenv "PYTHONPATH"
18379 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18380 #t)))))))))
18381
18382 (define-public python-pyfavicon
18383 (package
18384 (name "python-pyfavicon")
18385 (version "0.1.1")
18386 (source
18387 (origin
18388 (method url-fetch)
18389 (uri (pypi-uri "pyfavicon" version))
18390 (sha256
18391 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
18392 (build-system python-build-system)
18393 (arguments
18394 ;; There are no tests in the PyPI tarball and the tests from the
18395 ;; repository require online data.
18396 '(#:tests? #f))
18397 (propagated-inputs
18398 `(("python-aiohttp" ,python-aiohttp)
18399 ("python-beautifulsoup4" ,python-beautifulsoup4)
18400 ("python-pillow" ,python-pillow)))
18401 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
18402 (synopsis "Async favicon fetcher")
18403 (description
18404 "@code{pyfavicon} is an async favicon fetcher.")
18405 (license license:expat)))
18406
18407 (define-public python-yamllint
18408 (package
18409 (name "python-yamllint")
18410 (version "1.26.1")
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "yamllint" version))
18415 (sha256
18416 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
18417 (build-system python-build-system)
18418 (propagated-inputs
18419 `(("python-pathspec" ,python-pathspec)
18420 ("python-pyyaml" ,python-pyyaml)
18421 ("python-setuptools" ,python-setuptools)))
18422 (home-page "https://github.com/adrienverge/yamllint")
18423 (synopsis "Linter for YAML files")
18424 (description
18425 "Yamllint is a linter for YAML files. yamllint does not only check for
18426 syntax validity, but for weirdnesses like key repetition and cosmetic problems
18427 such as lines length, trailing spaces, indentation, etc.")
18428 (license license:gpl3+)))
18429
18430 (define-public python-yapf
18431 (package
18432 (name "python-yapf")
18433 (version "0.29.0")
18434 (source
18435 (origin
18436 (method url-fetch)
18437 (uri (pypi-uri "yapf" version))
18438 (sha256
18439 (base32
18440 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
18441 (build-system python-build-system)
18442 (home-page "https://github.com/google/yapf")
18443 (synopsis "Formatter for Python code")
18444 (description "YAPF is a formatter for Python code. It's based off of
18445 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
18446 takes the code and reformats it to the best formatting that conforms to the
18447 style guide, even if the original code didn't violate the style guide.")
18448 (license license:asl2.0)))
18449
18450 (define-public python2-yapf
18451 (package-with-python2 python-yapf))
18452
18453 (define-public python-yq
18454 (package
18455 (name "python-yq")
18456 (version "2.11.1")
18457 (source
18458 (origin
18459 (method url-fetch)
18460 (uri (pypi-uri "yq" version))
18461 (sha256
18462 (base32
18463 "1q4rky0a6n4izmq7slb91a54g8swry1xrbfqxwc8lkd3hhvlxxkl"))))
18464 (build-system python-build-system)
18465 (arguments
18466 '(#:phases
18467 (modify-phases %standard-phases
18468 (add-after 'unpack 'patch
18469 (lambda* (#:key inputs #:allow-other-keys)
18470 (substitute* "yq/__init__.py"
18471 (("Popen\\(\\[\"jq")
18472 (string-append
18473 "Popen([\""
18474 (assoc-ref inputs "jq")
18475 "/bin/jq")))
18476 #t)))))
18477 (inputs
18478 `(("python-argcomplete" ,python-argcomplete)
18479 ("python-pyyaml" ,python-pyyaml)
18480 ("python-xmltodict" ,python-xmltodict)
18481 ("jq" ,jq)))
18482 (native-inputs
18483 `(("python-coverage" ,python-coverage)
18484 ("python-flake8" ,python-flake8)
18485 ("python-wheel" ,python-wheel)))
18486 (home-page "https://github.com/kislyuk/yq")
18487 (synopsis "Command-line YAML/XML processor")
18488 (description
18489 "This package provides @command{yq} and @command{xq} for processing YAML
18490 and XML respectively. The processing is done through @command{jq}, @command{jq}
18491 filters can be used to process the data as it passes through.")
18492 (license license:asl2.0)))
18493
18494 (define-public python-gyp
18495 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
18496 (revision "0"))
18497 (package
18498 (name "python-gyp")
18499 ;; Google does not release versions,
18500 ;; based on second most recent commit date.
18501 (version (git-version "0.0.0" revision commit))
18502 (source
18503 (origin
18504 ;; Google does not release tarballs,
18505 ;; git checkout is needed.
18506 (method git-fetch)
18507 (uri (git-reference
18508 (url "https://chromium.googlesource.com/external/gyp")
18509 (commit commit)))
18510 (file-name (git-file-name name version))
18511 (sha256
18512 (base32
18513 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
18514 (build-system python-build-system)
18515 (home-page "https://gyp.gsrc.io/")
18516 (synopsis "GYP is a Meta-Build system")
18517 (description
18518 "GYP builds build systems for large, cross platform applications.
18519 It can be used to generate XCode projects, Visual Studio projects, Ninja build
18520 files, and Makefiles.")
18521 (license license:bsd-3))))
18522
18523 (define-public python2-gyp
18524 (package-with-python2 python-gyp))
18525
18526 (define-public python-whatever
18527 (package
18528 (name "python-whatever")
18529 (version "0.6")
18530 (source
18531 (origin
18532 (method git-fetch)
18533 (uri (git-reference
18534 (url "https://github.com/Suor/whatever")
18535 (commit version)))
18536 (file-name (git-file-name name version))
18537 (sha256
18538 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
18539 (build-system python-build-system)
18540 (arguments
18541 `(#:phases
18542 (modify-phases %standard-phases
18543 (replace 'check
18544 (lambda _
18545 (invoke "py.test"))))))
18546 (native-inputs
18547 `(("python-pytest" ,python-pytest)))
18548 (home-page "https://github.com/Suor/whatever")
18549 (synopsis "Make anonymous functions by partial application of operators")
18550 (description "@code{whatever} provides an easy way to make anonymous
18551 functions by partial application of operators.")
18552 (license license:bsd-3)))
18553
18554 (define-public python2-whatever
18555 (package-with-python2 python-whatever))
18556
18557 (define-public python-funcy
18558 (package
18559 (name "python-funcy")
18560 (version "1.11")
18561 (source
18562 (origin
18563 (method git-fetch)
18564 (uri (git-reference
18565 (url "https://github.com/Suor/funcy")
18566 (commit version)))
18567 (sha256
18568 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
18569 (file-name (git-file-name name version))))
18570 (build-system python-build-system)
18571 (arguments
18572 `(#:phases
18573 (modify-phases %standard-phases
18574 (replace 'check
18575 (lambda _
18576 (invoke "py.test"))))))
18577 (native-inputs
18578 `(("python-pytest" ,python-pytest)
18579 ("python-whatever" ,python-whatever)))
18580 (home-page "https://github.com/Suor/funcy")
18581 (synopsis "Functional tools")
18582 (description "@code{funcy} is a library that provides functional tools.
18583 Examples are:
18584 @enumerate
18585 @item merge - Merges collections of the same type
18586 @item walk - Type-preserving map
18587 @item select - Selects a part of a collection
18588 @item take - Takes the first n items of a collection
18589 @item first - Takes the first item of a collection
18590 @item remove - Predicated-removes items of a collection
18591 @item concat - Concatenates two collections
18592 @item flatten - Flattens a collection with subcollections
18593 @item distinct - Returns only distinct items
18594 @item split - Predicated-splits a collection
18595 @item split_at - Splits a collection at a given item
18596 @item group_by - Groups items by group
18597 @item pairwise - Pairs off adjacent items
18598 @item partial - Partially-applies a function
18599 @item curry - Curries a function
18600 @item compose - Composes functions
18601 @item complement - Complements a predicate
18602 @item all_fn - \"all\" with predicate
18603 @end enumerate")
18604 (license license:bsd-3)))
18605
18606 (define-public python2-funcy
18607 (package-with-python2 python-funcy))
18608
18609 (define-public python-isoweek
18610 (package
18611 (name "python-isoweek")
18612 (version "1.3.3")
18613 (source
18614 (origin
18615 (method url-fetch)
18616 (uri (pypi-uri "isoweek" version))
18617 (sha256
18618 (base32
18619 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
18620 (build-system python-build-system)
18621 (home-page "https://github.com/gisle/isoweek")
18622 (synopsis "Objects representing a week")
18623 (description "The @code{isoweek} module provide the class Week that
18624 implements the week definition of ISO 8601. This standard also defines
18625 a notation for identifying weeks; yyyyWww (where the W is a literal).
18626 Week instances stringify to this form.")
18627 (license license:bsd-3)))
18628
18629 (define-public python2-isoweek
18630 (package-with-python2 python-isoweek))
18631
18632 (define-public python-pyzbar
18633 (package
18634 (name "python-pyzbar")
18635 (version "0.1.8")
18636 (source
18637 (origin
18638 ;; There's no source tarball on PyPI.
18639 (method git-fetch)
18640 (uri (git-reference
18641 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
18642 (commit (string-append "v" version))))
18643 (file-name (git-file-name name version))
18644 (sha256
18645 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
18646 (build-system python-build-system)
18647 (arguments
18648 `(#:phases
18649 (modify-phases %standard-phases
18650 (add-after 'unpack 'remove-failing-test
18651 (lambda _
18652 ;; This tests if find_library was called once, but we remove
18653 ;; the call in the stage below to make the library find libzbar.
18654 (delete-file "pyzbar/tests/test_zbar_library.py")
18655 #t))
18656 (add-before 'build 'set-library-file-name
18657 (lambda* (#:key inputs #:allow-other-keys)
18658 (let ((libzbar (assoc-ref inputs "zbar")))
18659 (substitute* "pyzbar/zbar_library.py"
18660 (("find_library\\('zbar'\\)")
18661 (string-append "'" libzbar "/lib/libzbar.so.0'")))
18662 #t))))))
18663 (native-inputs
18664 `(("pkg-config" ,pkg-config)
18665 ("python-numpy" ,python-numpy)
18666 ("python-pillow" ,python-pillow)))
18667 (inputs
18668 `(("zbar" ,zbar)))
18669 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
18670 (synopsis "Read one-dimensional barcodes and QR codes")
18671 (description
18672 "Read one-dimensional barcodes and QR codes using the zbar library.
18673
18674 Features:
18675
18676 @itemize
18677 @item Pure python
18678 @item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
18679 @item Decodes locations of barcodes
18680 @item No dependencies, other than the zbar library itself
18681 @end itemize")
18682 (license license:expat)))
18683
18684 (define-public python-tokenize-rt
18685 (package
18686 (name "python-tokenize-rt")
18687 (version "2.0.1")
18688 (source
18689 (origin
18690 (method url-fetch)
18691 (uri (pypi-uri "tokenize-rt" version))
18692 (sha256
18693 (base32
18694 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
18695 (build-system python-build-system)
18696 (home-page "https://github.com/asottile/tokenize-rt")
18697 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
18698 (description
18699 "This Python library is a wrapper around @code{tokenize} from the Python
18700 standard library. It provides two additional tokens @code{ESCAPED_NL} and
18701 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
18702 and @code{tokens_to_src} to roundtrip.")
18703 (license license:expat)))
18704
18705 (define-public python-future-fstrings
18706 (package
18707 (name "python-future-fstrings")
18708 (version "0.4.1")
18709 (source
18710 (origin
18711 (method url-fetch)
18712 (uri (pypi-uri "future_fstrings" version))
18713 (sha256
18714 (base32
18715 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
18716 (build-system python-build-system)
18717 (propagated-inputs
18718 `(("python-tokenize-rt" ,python-tokenize-rt)))
18719 (home-page "https://github.com/asottile/future-fstrings")
18720 (synopsis "Backport of fstrings to Python < 3.6")
18721 (description
18722 "This package provides a UTF-8 compatible encoding
18723 @code{future_fstrings}, which performs source manipulation. It decodes the
18724 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
18725 @code{f} strings.")
18726 (license license:expat)))
18727
18728 (define-public python-typed-ast
18729 (package
18730 (name "python-typed-ast")
18731 (version "1.4.0")
18732 (source
18733 (origin
18734 (method git-fetch)
18735 (uri (git-reference
18736 (url "https://github.com/python/typed_ast")
18737 (commit version)))
18738 (sha256
18739 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
18740 (file-name (git-file-name name version))))
18741 (build-system python-build-system)
18742 (arguments
18743 `(#:modules ((guix build utils)
18744 (guix build python-build-system)
18745 (ice-9 ftw)
18746 (srfi srfi-1)
18747 (srfi srfi-26))
18748 #:phases
18749 (modify-phases %standard-phases
18750 (replace 'check
18751 (lambda _
18752 (let ((cwd (getcwd)))
18753 (setenv "PYTHONPATH"
18754 (string-append cwd "/build/"
18755 (find (cut string-prefix? "lib" <>)
18756 (scandir (string-append cwd "/build")))
18757 ":"
18758 (getenv "PYTHONPATH"))))
18759 (invoke "pytest")
18760 #t)))))
18761 (native-inputs `(("python-pytest" ,python-pytest)))
18762 (home-page "https://github.com/python/typed_ast")
18763 (synopsis "Fork of Python @code{ast} modules with type comment support")
18764 (description "This package provides a parser similar to the standard
18765 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
18766 include PEP 484 type comments and are independent of the version of Python
18767 under which they are run. The @code{typed_ast} parsers produce the standard
18768 Python AST (plus type comments), and are both fast and correct, as they are
18769 based on the CPython 2.7 and 3.7 parsers.")
18770 ;; See the file "LICENSE" for the details.
18771 (license (list license:psfl
18772 license:asl2.0
18773 license:expat)))) ;ast27/Parser/spark.py
18774
18775 (define-public python-typer
18776 (package
18777 (name "python-typer")
18778 (version "0.3.2")
18779 (source
18780 (origin
18781 ;; Building `python-typer` from the git repository requires the `flit-core`
18782 ;; Python package that is not installed by `python-flit`.
18783 (method url-fetch)
18784 (uri (pypi-uri "typer" version))
18785 (sha256
18786 (base32 "00v3h63dq8yxahp9vg3yb9r27l2niwv8gv0dbds9dzrc298dfmal"))))
18787 (build-system python-build-system)
18788 (arguments
18789 `(#:phases
18790 (modify-phases %standard-phases
18791 (add-before 'check 'disable-failing-tests
18792 (lambda _
18793 (substitute* "tests/test_completion/test_completion.py"
18794 (("def test_show_completion")
18795 "def _test_show_completion")
18796 (("def test_install_completion")
18797 "def _test_install_completion"))
18798 (substitute* "tests/test_completion/test_completion_install.py"
18799 (("def test_completion_install_bash")
18800 "def _test_completion_install_bash")
18801 (("def test_completion_install_zsh")
18802 "def _test_completion_install_zsh")
18803 (("def test_completion_install_fish")
18804 "def _test_completion_install_fish")
18805 (("def test_completion_install_powershell")
18806 "def _test_completion_install_powershell"))
18807 #t))
18808 (replace 'check
18809 (lambda _
18810 (setenv "PYTHONPATH"
18811 (string-append (getcwd) ":"
18812 (getenv "PYTHONPATH")))
18813 (invoke "python" "-m" "pytest" "tests/")
18814 #t)))))
18815 (propagated-inputs
18816 `(("python-click" ,python-click)))
18817 (native-inputs
18818 `(("python-coverage" ,python-coverage)
18819 ("python-pytest" ,python-pytest)
18820 ("python-shellingham" ,python-shellingham)))
18821 (home-page "https://github.com/tiangolo/typer")
18822 (synopsis
18823 "Typer builds CLI based on Python type hints")
18824 (description
18825 "Typer is a library for building CLI applications. It's based on
18826 Python 3.6+ type hints.")
18827 ;; MIT license
18828 (license license:expat)))
18829
18830 (define-public python-typing
18831 (package
18832 (name "python-typing")
18833 (version "3.7.4.3")
18834 (source
18835 (origin
18836 (method url-fetch)
18837 (uri (pypi-uri "typing" version))
18838 (sha256
18839 (base32 "1j8wnz8c9s049w9xbf7ssr1dmgg4rz7vdfq7m880srzxhafgp1qi"))))
18840 (build-system python-build-system)
18841 (home-page "https://docs.python.org/3/library/typing.html")
18842 (synopsis "Type hints for Python")
18843 (description "This is a backport of the standard library @code{typing}
18844 module to Python versions older than 3.5. Typing defines a standard notation
18845 for Python function and variable type annotations. The notation can be used
18846 for documenting code in a concise, standard format, and it has been designed
18847 to also be used by static and runtime type checkers, static analyzers, IDEs
18848 and other tools.")
18849 (license license:psfl)))
18850
18851 (define-public python2-typing
18852 (package-with-python2 python-typing))
18853
18854 (define-public python-typing-extensions
18855 (package
18856 (name "python-typing-extensions")
18857 (version "3.7.4.3")
18858 (source
18859 (origin
18860 (method url-fetch)
18861 (uri (pypi-uri "typing_extensions" version))
18862 (sha256
18863 (base32
18864 "0356ljrrplm917dqgpn8wjkw6j3mpp916gwxas7jhc3xc4xhgm4r"))))
18865 (build-system python-build-system)
18866 (home-page
18867 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
18868 (synopsis "Experimental type hints for Python")
18869 (description
18870 "The typing_extensions module contains additional @code{typing} hints not
18871 yet present in the of the @code{typing} standard library.
18872 Included are implementations of:
18873 @enumerate
18874 @item ClassVar
18875 @item ContextManager
18876 @item Counter
18877 @item DefaultDict
18878 @item Deque
18879 @item NewType
18880 @item NoReturn
18881 @item overload
18882 @item Protocol
18883 @item runtime
18884 @item Text
18885 @item Type
18886 @item TYPE_CHECKING
18887 @item AsyncGenerator
18888 @end enumerate\n")
18889 (license license:psfl)))
18890
18891 (define-public bpython
18892 (package
18893 (name "bpython")
18894 (version "0.20.1")
18895 (source
18896 (origin
18897 (method url-fetch)
18898 (uri (pypi-uri "bpython" version))
18899 (sha256
18900 (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf"))))
18901 (build-system python-build-system)
18902 (arguments
18903 `(#:phases
18904 (modify-phases %standard-phases
18905 (add-after 'unpack 'remove-failing-test
18906 (lambda _
18907 ;; Remove failing test. FIXME: make it pass
18908 (delete-file "bpython/test/test_args.py")
18909 #t))
18910 (add-after 'wrap 'add-aliases
18911 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
18912 (lambda* (#:key outputs #:allow-other-keys)
18913 (let ((out (assoc-ref outputs "out")))
18914 (for-each
18915 (lambda (old new)
18916 (symlink old (string-append out "/bin/" new)))
18917 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
18918 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
18919 #t)))))
18920 (propagated-inputs
18921 `(("python-pygments" ,python-pygments)
18922 ("python-requests" ,python-requests)
18923 ("python-curtsies" ,python-curtsies)
18924 ("python-greenlet" ,python-greenlet)
18925 ("python-six" ,python-six)
18926 ("python-wcwidth" ,python-wcwidth)
18927 ;; optional dependencies
18928 ("python-urwid" ,python-urwid) ; for bpython-urwid only
18929 ("python-watchdog" ,python-watchdog)
18930 ("python-jedi" ,python-jedi)))
18931 (native-inputs
18932 `(("python-sphinx" ,python-sphinx)
18933 ("python-mock" ,python-mock)))
18934 (home-page "https://bpython-interpreter.org/")
18935 (synopsis "Fancy interface to the Python interpreter")
18936 (description "Bpython is a fancy interface to the Python
18937 interpreter. bpython's main features are
18938
18939 @enumerate
18940 @item in-line syntax highlighting,
18941 @item readline-like autocomplete with suggestions displayed as you type,
18942 @item expected parameter list for any Python function,
18943 @item \"rewind\" function to pop the last line of code from memory and
18944 re-evaluate,
18945 @item send the code you've entered off to a pastebin,
18946 @item save the code you've entered to a file, and
18947 @item auto-indentation.
18948 @end enumerate")
18949 (license license:expat)))
18950
18951 (define-public python-pyinotify
18952 (package
18953 (name "python-pyinotify")
18954 (version "0.9.6")
18955 (source (origin
18956 (method url-fetch)
18957 (uri (pypi-uri "pyinotify" version))
18958 (sha256
18959 (base32
18960 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
18961 (build-system python-build-system)
18962 (arguments `(#:tests? #f)) ;no tests
18963 (home-page "https://github.com/seb-m/pyinotify")
18964 (synopsis "Python library for monitoring inotify events")
18965 (description
18966 "@code{pyinotify} provides a Python interface for monitoring
18967 file system events on Linux.")
18968 (license license:expat)))
18969
18970 (define-public python2-pyinotify
18971 (package-with-python2 python-pyinotify))
18972
18973 ;; Ada parser uses this version.
18974 (define-public python2-quex-0.67.3
18975 (package
18976 (name "python2-quex")
18977 (version "0.67.3")
18978 (source
18979 (origin
18980 (method url-fetch)
18981 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
18982 (version-major+minor version)
18983 "/quex-" version ".zip"))
18984 (sha256
18985 (base32
18986 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
18987 (build-system python-build-system)
18988 (native-inputs
18989 `(("unzip" ,unzip)))
18990 (arguments
18991 `(#:python ,python-2
18992 #:tests? #f
18993 #:phases
18994 (modify-phases %standard-phases
18995 (delete 'configure)
18996 (delete 'build)
18997 (replace 'install
18998 (lambda* (#:key outputs #:allow-other-keys)
18999 (let* ((out (assoc-ref outputs "out"))
19000 (share/quex (string-append out "/share/quex"))
19001 (bin (string-append out "/bin")))
19002 (copy-recursively "." share/quex)
19003 (mkdir-p bin)
19004 (symlink (string-append share/quex "/quex-exe.py")
19005 (string-append bin "/quex"))
19006 #t))))))
19007 (native-search-paths
19008 (list (search-path-specification
19009 (variable "QUEX_PATH")
19010 (files '("share/quex")))))
19011 (home-page "http://quex.sourceforge.net/")
19012 (synopsis "Lexical analyzer generator in Python")
19013 (description "@code{quex} is a lexical analyzer generator in Python.")
19014 (license license:lgpl2.1+))) ; Non-military
19015
19016 (define-public python2-quex
19017 (package (inherit python2-quex-0.67.3)
19018 (name "python2-quex")
19019 (version "0.68.1")
19020 (source
19021 (origin
19022 (method url-fetch)
19023 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
19024 (sha256
19025 (base32
19026 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
19027 (file-name (string-append name "-" version ".tar.gz"))))))
19028
19029 (define-public python-more-itertools
19030 (package
19031 (name "python-more-itertools")
19032 (version "8.2.0")
19033 (source
19034 (origin
19035 (method url-fetch)
19036 (uri (pypi-uri "more-itertools" version))
19037 (sha256
19038 (base32
19039 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
19040 (build-system python-build-system)
19041 (home-page "https://github.com/erikrose/more-itertools")
19042 (synopsis "More routines for operating on iterables, beyond itertools")
19043 (description "Python's built-in @code{itertools} module implements a
19044 number of iterator building blocks inspired by constructs from APL, Haskell,
19045 and SML. @code{more-itertools} includes additional building blocks for
19046 working with iterables.")
19047 (properties `((python2-variant . ,(delay python2-more-itertools))))
19048 (license license:expat)))
19049
19050 ;; The 5.x series are the last versions supporting Python 2.7.
19051 (define-public python2-more-itertools
19052 (package
19053 (inherit python-more-itertools)
19054 (name "python2-more-itertools")
19055 (version "5.0.0")
19056 (source (origin
19057 (method url-fetch)
19058 (uri (pypi-uri "more-itertools" version))
19059 (sha256
19060 (base32
19061 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
19062 (arguments
19063 `(#:python ,python-2))
19064 (propagated-inputs
19065 `(("python2-six" ,python2-six-bootstrap)))))
19066
19067 (define-public python-latexcodec
19068 (package
19069 (name "python-latexcodec")
19070 (version "1.0.7")
19071 (source
19072 (origin
19073 (method url-fetch)
19074 (uri (pypi-uri "latexcodec" version))
19075 (sha256
19076 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
19077 (build-system python-build-system)
19078 (inputs
19079 `(("python-six" ,python-six)))
19080 (home-page "https://readthedocs.org/projects/latexcodec/")
19081 (synopsis "Work with LaTeX code in Python")
19082 (description "Lexer and codec to work with LaTeX code in Python.")
19083 (license license:expat)))
19084
19085 (define-public python-pybtex
19086 (package
19087 (name "python-pybtex")
19088 (version "0.22.2")
19089 (source
19090 (origin
19091 (method url-fetch)
19092 (uri (pypi-uri "pybtex" version))
19093 (sha256
19094 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
19095 (build-system python-build-system)
19096 (native-inputs
19097 `(("python-nose" ,python-nose)))
19098 (inputs
19099 `(("python-latexcodec" ,python-latexcodec)
19100 ("python-pyyaml" ,python-pyyaml)
19101 ("python-six" ,python-six)))
19102 (arguments
19103 `(#:test-target "nosetests"))
19104 (home-page "https://pybtex.org/")
19105 (synopsis "BibTeX-compatible bibliography processor")
19106 (description "Pybtex is a BibTeX-compatible bibliography processor written
19107 in Python. You can simply type pybtex instead of bibtex.")
19108 (license license:expat)))
19109
19110 (define-public python-onetimepass
19111 (package
19112 (name "python-onetimepass")
19113 (version "1.0.1")
19114 (source
19115 (origin
19116 (method url-fetch)
19117 (uri (pypi-uri "onetimepass" version))
19118 (sha256
19119 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
19120 (build-system python-build-system)
19121 (propagated-inputs `(("python-six" ,python-six)))
19122 (home-page "https://github.com/tadeck/onetimepass/")
19123 (synopsis "One-time password library")
19124 (description "Python one-time password library for HMAC-based (HOTP) and
19125 time-based (TOTP) passwords.")
19126 (license license:expat)))
19127
19128 (define-public python-parso
19129 (package
19130 (name "python-parso")
19131 (version "0.7.1")
19132 (source
19133 (origin
19134 (method url-fetch)
19135 (uri (pypi-uri "parso" version))
19136 (sha256
19137 (base32 "1f9fc99mjx0h2ad4mgsid728nnmw58hvnq3411g8ljlr9dr49fna"))))
19138 (native-inputs
19139 `(("python-pytest" ,python-pytest)))
19140 (build-system python-build-system)
19141 (arguments
19142 `(#:phases (modify-phases %standard-phases
19143 (replace 'check
19144 (lambda _ (invoke "pytest" "-vv"))))))
19145 (home-page "https://github.com/davidhalter/parso")
19146 (synopsis "Python Parser")
19147 (description "Parso is a Python parser that supports error recovery and
19148 round-trip parsing for different Python versions (in multiple Python versions).
19149 Parso is also able to list multiple syntax errors in your Python file.")
19150 (license license:expat)))
19151
19152 (define-public python2-parso
19153 (package-with-python2 python-parso))
19154
19155 (define-public python-async-generator
19156 (package
19157 (name "python-async-generator")
19158 (version "1.10")
19159 (source
19160 (origin
19161 (method url-fetch)
19162 (uri (pypi-uri "async_generator" version))
19163 (sha256
19164 (base32
19165 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
19166 (build-system python-build-system)
19167 (native-inputs
19168 `(("python-pytest" ,python-pytest)))
19169 (home-page "https://github.com/python-trio/async_generator")
19170 (synopsis "Async generators and context managers for Python 3.5+")
19171 (description "@code{async_generator} back-ports Python 3.6's native async
19172 generators and Python 3.7's context managers into Python 3.5.")
19173 ;; Dual licensed.
19174 (license (list license:expat license:asl2.0))))
19175
19176 (define-public python-async-timeout
19177 (package
19178 (name "python-async-timeout")
19179 (version "3.0.1")
19180 (source
19181 (origin
19182 (method url-fetch)
19183 (uri (pypi-uri "async-timeout" version))
19184 (sha256
19185 (base32
19186 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
19187 (build-system python-build-system)
19188 (home-page "https://github.com/aio-libs/async_timeout/")
19189 (synopsis "Timeout context manager for asyncio programs")
19190 (description "@code{async-timeout} provides a timeout timeout context
19191 manager compatible with @code{asyncio}.")
19192 (license license:asl2.0)))
19193
19194 (define-public python-glob2
19195 (package
19196 (name "python-glob2")
19197 (version "0.7")
19198 (source
19199 (origin
19200 (method git-fetch)
19201 (uri (git-reference
19202 (url "https://github.com/miracle2k/python-glob2")
19203 (commit (string-append "v" version))))
19204 (file-name (git-file-name name version))
19205 (sha256
19206 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
19207 (build-system python-build-system)
19208 (home-page "https://github.com/miracle2k/python-glob2/")
19209 (synopsis "Extended Version of the python buildin glob module")
19210 (description "This is an extended version of the Python
19211 @url{http://docs.python.org/library/glob.html, built-in glob module} which
19212 adds:
19213
19214 @itemize
19215 @item The ability to capture the text matched by glob patterns, and return
19216 those matches alongside the file names.
19217 @item A recursive @code{**} globbing syntax, akin for example to the
19218 @code{globstar} option of Bash.
19219 @item The ability to replace the file system functions used, in order to glob
19220 on virtual file systems.
19221 @item Compatible with Python 2 and Python 3 (tested with 3.3).
19222 @end itemize
19223
19224 Glob2 currently based on the glob code from Python 3.3.1.")
19225 (license license:bsd-2)))
19226
19227 (define-public python2-glob2
19228 (package-with-python2 python-glob2))
19229
19230 (define-public python-gipc
19231 (package
19232 (name "python-gipc")
19233 (version "0.6.0")
19234 (source
19235 (origin
19236 (method url-fetch)
19237 (uri (pypi-uri "gipc" version ".zip"))
19238 (sha256
19239 (base32
19240 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
19241 (build-system python-build-system)
19242 (native-inputs
19243 `(("unzip" ,unzip)))
19244 (propagated-inputs
19245 `(("python-gevent" ,python-gevent)))
19246 (home-page "https://gehrcke.de/gipc/")
19247 (synopsis "Child process management in the context of gevent")
19248 (description "Usage of Python's multiprocessing package in a
19249 gevent-powered application may raise problems. With @code{gipc},
19250 process-based child processes can safely be created anywhere within a
19251 gevent-powered application.")
19252 (license license:expat)))
19253
19254 (define-public python-beautifultable
19255 (package
19256 (name "python-beautifultable")
19257 (version "1.0.0")
19258 (source
19259 (origin
19260 (method url-fetch)
19261 (uri (pypi-uri "beautifultable" version))
19262 (sha256
19263 (base32
19264 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
19265 (build-system python-build-system)
19266 (propagated-inputs
19267 `(("python-wcwidth" ,python-wcwidth)))
19268 (arguments
19269 `(#:phases
19270 (modify-phases %standard-phases
19271 (add-after 'unpack 'patch-setup.py
19272 (lambda _
19273 (substitute* "setup.py"
19274 (("setup\\(")
19275 "setup(\n test_suite=\"test\",")))))))
19276 (home-page "https://github.com/pri22296/beautifultable")
19277 (synopsis "Print ASCII tables for terminals")
19278 (description "@code{python-beautifultable} provides a class for easily
19279 printing tabular data in a visually appealing ASCII format to a terminal.
19280
19281 Features include, but are not limited to:
19282 @itemize
19283 @item Full customization of the look and feel of the table
19284 @item Row and column accessors.
19285 @item Full support for colors using ANSI sequences or any library.
19286 @item Plenty of predefined styles and option to create custom ones.
19287 @item Support for Unicode characters.
19288 @item Supports streaming table when data is slow to retrieve.
19289 @end itemize")
19290 (license license:expat)))
19291
19292 (define-public python-globber
19293 (package
19294 (name "python-globber")
19295 (version "0.2.1")
19296 (source
19297 (origin
19298 (method git-fetch)
19299 (uri (git-reference
19300 (url "https://github.com/asharov/globber")
19301 (commit version)))
19302 (file-name (git-file-name name version))
19303 (sha256
19304 (base32
19305 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
19306 (build-system python-build-system)
19307 (home-page "https://github.com/asharov/globber")
19308 (synopsis "Library for string matching with glob patterns")
19309 (description
19310 "Globber is a Python library for matching file names against glob patterns.
19311 In contrast to other glob-matching libraries, it matches arbitrary strings and
19312 doesn't require the matched names to be existing files. In addition, it
19313 supports the globstar @code{**} operator to match an arbitrary number of
19314 path components.")
19315 (license license:asl2.0)))
19316
19317 (define-public python-git-hammer
19318 (package
19319 (name "python-git-hammer")
19320 (version "0.3.1")
19321 (source
19322 (origin
19323 (method git-fetch)
19324 (uri (git-reference
19325 (url "https://github.com/asharov/git-hammer")
19326 (commit version)))
19327 (file-name (git-file-name name version))
19328 (sha256
19329 (base32
19330 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
19331 (build-system python-build-system)
19332 (arguments
19333 `(#:phases
19334 (modify-phases %standard-phases
19335 (add-after 'unpack 'patch-setup.py
19336 (lambda _
19337 (substitute* "setup.py"
19338 (("setup\\(")
19339 "setup(\n test_suite=\"test\",")))))))
19340 (propagated-inputs
19341 `(("python-beautifultable" ,python-beautifultable)
19342 ("python-dateutil" ,python-dateutil)
19343 ("python-gitpython" ,python-gitpython)
19344 ("python-globber" ,python-globber)
19345 ("python-matplotlib" ,python-matplotlib)
19346 ("python-sqlalchemy" ,python-sqlalchemy)
19347 ("python-sqlalchemy-utils"
19348 ,python-sqlalchemy-utils)))
19349 (home-page "https://github.com/asharov/git-hammer")
19350 (synopsis "Provide statistics for git repositories")
19351 (description
19352 "Git Hammer is a statistics tool for projects in git repositories.
19353 Its major feature is tracking the number of lines authored by each person for every
19354 commit, but it also includes some other useful statistics.")
19355 (license license:asl2.0)))
19356
19357 (define-public python-fusepy
19358 (package
19359 (name "python-fusepy")
19360 (version "2.0.4")
19361 (source
19362 (origin
19363 (method url-fetch)
19364 (uri (pypi-uri "fusepy" version))
19365 (sha256
19366 (base32
19367 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
19368 (build-system python-build-system)
19369 (arguments
19370 `(#:phases
19371 (modify-phases %standard-phases
19372 (add-before 'build 'set-library-file-name
19373 (lambda* (#:key inputs #:allow-other-keys)
19374 (let ((fuse (assoc-ref inputs "fuse")))
19375 (substitute* "fuse.py"
19376 (("find_library\\('fuse'\\)")
19377 (string-append "'" fuse "/lib/libfuse.so'")))
19378 #t))))))
19379 (propagated-inputs
19380 `(("fuse" ,fuse)))
19381 (home-page "https://github.com/fusepy/fusepy")
19382 (synopsis "Simple ctypes bindings for FUSE")
19383 (description "Python module that provides a simple interface to FUSE and
19384 MacFUSE. The binding is created using the standard @code{ctypes} library.")
19385 (license license:isc)))
19386
19387 (define-public python2-fusepy
19388 (package-with-python2 python-fusepy))
19389
19390 (define-public python-fusepyng
19391 (package
19392 (name "python-fusepyng")
19393 (version "1.0.7")
19394 (source
19395 (origin
19396 (method url-fetch)
19397 (uri (pypi-uri "fusepyng" version))
19398 (sha256
19399 (base32
19400 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
19401 (build-system python-build-system)
19402 (arguments
19403 '(#:phases
19404 (modify-phases %standard-phases
19405 (add-after 'unpack 'set-libfuse-path
19406 (lambda* (#:key inputs #:allow-other-keys)
19407 (let ((fuse (assoc-ref inputs "fuse")))
19408 (substitute* "fusepyng.py"
19409 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
19410 (string-append "\"" fuse "/lib/libfuse.so\""))))
19411 #t)))))
19412 (inputs
19413 `(("fuse" ,fuse)))
19414 (propagated-inputs
19415 `(("python-paramiko" ,python-paramiko)))
19416 (home-page "https://github.com/rianhunter/fusepyng")
19417 (synopsis "Simple ctypes bindings for FUSE")
19418 (description "@code{fusepyng} is a Python module that provides a simple
19419 interface to FUSE on various operating systems. It's just one file and is
19420 implemented using @code{ctypes}.")
19421 (license license:isc)))
19422
19423 (define-public python-userspacefs
19424 (package
19425 (name "python-userspacefs")
19426 (version "2.0.3")
19427 (source
19428 (origin
19429 (method url-fetch)
19430 (uri (pypi-uri "userspacefs" version))
19431 (sha256
19432 (base32
19433 "1v6saf62ml3j63adalvlkj4iavxjbsbapl20b21mn73p7kvn4ayf"))))
19434 (build-system python-build-system)
19435 (propagated-inputs
19436 `(("python-fusepyng" ,python-fusepyng)))
19437 (home-page "https://github.com/rianhunter/userspacefs")
19438 (synopsis "User-space file systems for Python")
19439 (description
19440 "@code{userspacefs} is a library that allows you to easily write
19441 user-space file systems in Python.")
19442 (license license:gpl3+)))
19443
19444 (define-public python-stone
19445 (package
19446 (name "python-stone")
19447 (version "3.2.1")
19448 (source
19449 (origin
19450 (method url-fetch)
19451 (uri (pypi-uri "stone" version))
19452 (sha256
19453 (base32
19454 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
19455 (build-system python-build-system)
19456 (arguments
19457 `(#:phases
19458 (modify-phases %standard-phases
19459 (add-after 'unpack 'change-version-requirements
19460 (lambda _
19461 ;; Match the requirement in test/requirements.txt
19462 (substitute* "setup.py"
19463 (("pytest < 5") "pytest < 7"))
19464 ;; We don't care about a coverage report.
19465 (substitute* "test/requirements.txt"
19466 (("coverage.*") "coverage\n"))
19467 #t))
19468 (replace 'check
19469 (lambda* (#:key tests? #:allow-other-keys)
19470 (when tests?
19471 ;; These tests don't import currectly.
19472 (delete-file "test/test_js_client.py")
19473 (delete-file "test/test_tsd_types.py")
19474 (delete-file "test/test_python_gen.py")
19475 (setenv "PYTHONPATH"
19476 (string-append (getcwd) ":"
19477 (getenv "PYTHONPATH")))
19478 (invoke "pytest"))
19479 #t)))))
19480 (propagated-inputs
19481 `(("python-ply" ,python-ply)
19482 ("python-six" ,python-six)))
19483 (native-inputs
19484 `(("python-coverage" ,python-coverage)
19485 ("python-mock" ,python-mock)
19486 ("python-pytest" ,python-pytest)
19487 ("python-pytest-runner" ,python-pytest-runner)))
19488 (home-page "https://github.com/dropbox/stone")
19489 (synopsis "Official Api Spec Language for Dropbox")
19490 (description
19491 "Stone is an interface description language (IDL) for APIs.")
19492 (license license:expat)))
19493
19494 (define-public pybind11
19495 (package
19496 (name "pybind11")
19497 (version "2.6.1")
19498 (source (origin
19499 (method git-fetch)
19500 (uri (git-reference
19501 (url "https://github.com/pybind/pybind11")
19502 (commit (string-append "v" version))))
19503 (sha256
19504 (base32
19505 "1wh5b1xnywzxwxkyac2wvyqwzmy1qxs341jjk820r7b825wn6yad"))
19506 (file-name (git-file-name name version))))
19507 (build-system cmake-build-system)
19508 (native-inputs
19509 `(("python" ,python-wrapper)
19510
19511 ;; The following dependencies are used for tests.
19512 ("python-pytest" ,python-pytest)
19513 ("catch" ,catch-framework2-1)
19514 ("eigen" ,eigen)))
19515 (arguments
19516 `(#:configure-flags
19517 (list (string-append "-DCATCH_INCLUDE_DIR="
19518 (assoc-ref %build-inputs "catch")
19519 "/include/catch"))
19520
19521 #:phases (modify-phases %standard-phases
19522 (add-after 'install 'install-python
19523 (lambda* (#:key outputs #:allow-other-keys)
19524 (let ((out (assoc-ref outputs "out")))
19525 (with-directory-excursion "../source"
19526 (setenv "PYBIND11_USE_CMAKE" "yes")
19527 (invoke "python" "setup.py" "install"
19528 "--single-version-externally-managed"
19529 "--root=/"
19530 (string-append "--prefix=" out)))))))
19531
19532 #:test-target "check"))
19533 (home-page "https://github.com/pybind/pybind11/")
19534 (synopsis "Seamless operability between C++11 and Python")
19535 (description
19536 "@code{pybind11} is a lightweight header-only library that exposes C++
19537 types in Python and vice versa, mainly to create Python bindings of existing
19538 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
19539 library: to minimize boilerplate code in traditional extension modules by
19540 inferring type information using compile-time introspection.")
19541 (license license:bsd-3)))
19542
19543 (define-public python-pooch
19544 (package
19545 (name "python-pooch")
19546 (version "1.3.0")
19547 (source
19548 (origin
19549 (method url-fetch)
19550 (uri (pypi-uri "pooch" version))
19551 (sha256
19552 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
19553 (build-system python-build-system)
19554 (arguments
19555 `(#:tests? #f)) ;requires online data
19556 (propagated-inputs
19557 `(("python-appdirs" ,python-appdirs)
19558 ("python-packaging" ,python-packaging)
19559 ("python-requests" ,python-requests)))
19560 (home-page "https://github.com/fatiando/pooch")
19561 (synopsis "Manage your Python library's sample data files")
19562 (description
19563 "Pooch manages your Python library's sample data files: it automatically
19564 downloads and stores them in a local directory, with support for versioning
19565 and corruption checks.")
19566 (license license:bsd-3)))
19567
19568 (define-public python-fasteners
19569 (package
19570 (name "python-fasteners")
19571 (version "0.15")
19572 (source
19573 (origin
19574 (method url-fetch)
19575 (uri (pypi-uri "fasteners" version))
19576 (sha256
19577 (base32
19578 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
19579 (build-system python-build-system)
19580 (propagated-inputs
19581 `(("python-monotonic" ,python-monotonic)
19582 ("python-six" ,python-six)))
19583 (native-inputs
19584 `(("python-testtools" ,python-testtools)))
19585 (home-page "https://github.com/harlowja/fasteners")
19586 (synopsis "Python package that provides useful locks")
19587 (description
19588 "This package provides a Python program that provides following locks:
19589
19590 @itemize
19591 @item Locking decorator
19592 @item Reader-writer locks
19593 @item Inter-process locks
19594 @item Generic helpers
19595 @end itemize\n")
19596 (license license:asl2.0)))
19597
19598 (define-public python-requests-file
19599 (package
19600 (name "python-requests-file")
19601 (version "1.4.3")
19602 (source
19603 (origin
19604 (method url-fetch)
19605 (uri (pypi-uri "requests-file" version))
19606 (sha256
19607 (base32
19608 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
19609 (build-system python-build-system)
19610 (propagated-inputs
19611 `(("python-requests" ,python-requests)
19612 ("python-six" ,python-six)))
19613 (home-page
19614 "https://github.com/dashea/requests-file")
19615 (synopsis "File transport adapter for Requests")
19616 (description
19617 "Requests-File is a transport adapter for use with the Requests Python
19618 library to allow local file system access via @code{file://} URLs.")
19619 (license license:asl2.0)))
19620
19621 (define-public python2-requests-file
19622 (package-with-python2 python-requests-file))
19623
19624 (define-public python-identify
19625 (package
19626 (name "python-identify")
19627 (version "1.4.25")
19628 (source
19629 (origin
19630 ;; There are no tests in the PyPI tarball.
19631 (method git-fetch)
19632 (uri (git-reference
19633 (url "https://github.com/chriskuehl/identify")
19634 (commit (string-append "v" version))))
19635 (file-name (git-file-name name version))
19636 (sha256
19637 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
19638 (build-system python-build-system)
19639 (arguments
19640 `(#:phases
19641 (modify-phases %standard-phases
19642 (replace 'check
19643 (lambda _
19644 (invoke "pytest" "-vv"))))))
19645 (native-inputs
19646 `(("python-coverage" ,python-coverage)
19647 ("python-pytest" ,python-pytest)))
19648 (propagated-inputs
19649 `(("python-editdistance" ,python-editdistance)))
19650 (home-page "https://github.com/chriskuehl/identify")
19651 (synopsis "File identification library for Python")
19652 (description
19653 "@code{identify} is a file identification library for Python. Given
19654 a file (or some information about a file), return a set of standardized tags
19655 identifying what the file is.")
19656 (license license:expat)))
19657
19658 (define-public python-tldextract
19659 (package
19660 (name "python-tldextract")
19661 (version "2.2.0")
19662 (source
19663 (origin
19664 (method url-fetch)
19665 (uri (pypi-uri "tldextract" version))
19666 (sha256
19667 (base32
19668 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
19669 (build-system python-build-system)
19670 (native-inputs
19671 `(("python-pytest" ,python-pytest)
19672 ("python-responses" ,python-responses)))
19673 (propagated-inputs
19674 `(("python-idna" ,python-idna)
19675 ("python-requests" ,python-requests)
19676 ("python-requests-file" ,python-requests-file)))
19677 (home-page
19678 "https://github.com/john-kurkowski/tldextract")
19679 (synopsis
19680 "Separate the TLD from the registered domain and subdomains of a URL")
19681 (description
19682 "TLDExtract accurately separates the TLD from the registered domain and
19683 subdomains of a URL, using the Public Suffix List. By default, this includes
19684 the public ICANN TLDs and their exceptions. It can optionally support the
19685 Public Suffix List's private domains as well.")
19686 (license license:bsd-3)))
19687
19688 (define-public python2-tldextract
19689 (package-with-python2 python-tldextract))
19690
19691 (define-public python-nodeenv
19692 (package
19693 (name "python-nodeenv")
19694 (version "1.4.0")
19695 (source
19696 (origin
19697 ;; There's no tarball in PyPI.
19698 (method git-fetch)
19699 (uri (git-reference
19700 (url "https://github.com/ekalinin/nodeenv")
19701 (commit version)))
19702 (file-name (git-file-name name version))
19703 (sha256
19704 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
19705 (build-system python-build-system)
19706 (arguments
19707 `(#:phases
19708 (modify-phases %standard-phases
19709 (replace 'check
19710 (lambda _
19711 ;; This test fails. It tries to open a network socket.
19712 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
19713 (native-inputs
19714 `(("python-coverage" ,python-coverage)
19715 ("python-mock" ,python-mock)
19716 ("python-pytest" ,python-pytest)))
19717 (home-page "https://ekalinin.github.io/nodeenv/")
19718 (synopsis "Create isolated node.js environments")
19719 (description
19720 "Nodeenv (node.js virtual environment) is a tool to create isolated
19721 node.js environments. It creates an environment that has its own installation
19722 directories, that doesn't share libraries with other node.js virtual
19723 environments.")
19724 (license license:bsd-3)))
19725
19726 (define-public python-pynamecheap
19727 (package
19728 (name "python-pynamecheap")
19729 (version "0.0.3")
19730 (source
19731 (origin
19732 (method url-fetch)
19733 (uri (pypi-uri "PyNamecheap" version))
19734 (sha256
19735 (base32
19736 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
19737 (build-system python-build-system)
19738 (propagated-inputs
19739 `(("python-requests" ,python-requests)))
19740 (home-page
19741 "https://github.com/Bemmu/PyNamecheap")
19742 (synopsis
19743 "Namecheap API client in Python")
19744 (description
19745 "PyNamecheap is a Namecheap API client in Python.")
19746 (license license:expat)))
19747
19748 (define-public python2-pynamecheap
19749 (package-with-python2 python-pynamecheap))
19750
19751 (define-public python-dns-lexicon
19752 (package
19753 (name "python-dns-lexicon")
19754 (version "2.4.0")
19755 (source
19756 (origin
19757 (method url-fetch)
19758 (uri (pypi-uri "dns-lexicon" version))
19759 (sha256
19760 (base32
19761 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
19762 (build-system python-build-system)
19763 (arguments
19764 `(#:tests? #f)) ;requires internet access
19765 (propagated-inputs
19766 `(("python-future" ,python-future)
19767 ("python-pynamecheap" ,python-pynamecheap)
19768 ("python-requests" ,python-requests)
19769 ("python-tldextract" ,python-tldextract)
19770 ("python-urllib3" ,python-urllib3)))
19771 (home-page "https://github.com/AnalogJ/lexicon")
19772 (synopsis
19773 "Manipulate DNS records on various DNS providers")
19774 (description
19775 "Lexicon provides a way to manipulate DNS records on multiple DNS
19776 providers in a standardized way. It has a CLI but it can also be used as a
19777 Python library. It was designed to be used in automation, specifically with
19778 Let's Encrypt.")
19779 (license license:expat)))
19780
19781 (define-public python2-dns-lexicon
19782 (package-with-python2 python-dns-lexicon))
19783
19784 (define-public python-cfgv
19785 (package
19786 (name "python-cfgv")
19787 (version "3.1.0")
19788 (source
19789 (origin
19790 ;; There are no tests in the PyPI tarball.
19791 (method git-fetch)
19792 (uri (git-reference
19793 (url "https://github.com/asottile/cfgv")
19794 (commit (string-append "v" version))))
19795 (file-name (git-file-name name version))
19796 (sha256
19797 (base32 "1vvkkqw92sak4b28bpscpppq483amy52ch2yqy1i2m23q7xjkabx"))))
19798 (build-system python-build-system)
19799 (arguments
19800 `(#:phases
19801 (modify-phases %standard-phases
19802 (replace 'check
19803 (lambda _
19804 (invoke "pytest" "-vv"))))))
19805 (native-inputs
19806 `(("python-covdefaults" ,python-covdefaults)
19807 ("python-coverage" ,python-coverage)
19808 ("python-pytest" ,python-pytest)))
19809 (home-page "https://github.com/asottile/cfgv")
19810 (synopsis "Configuration validation library")
19811 (description
19812 "This library helps to validate configuration files and produce human
19813 readable error messages.")
19814 (license license:expat)))
19815
19816 (define-public python-commandlines
19817 (package
19818 (name "python-commandlines")
19819 (version "0.4.1")
19820 (source
19821 (origin
19822 (method url-fetch)
19823 (uri (pypi-uri "commandlines" version))
19824 (sha256
19825 (base32
19826 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
19827 (build-system python-build-system)
19828 (home-page "https://github.com/chrissimpkins/commandlines")
19829 (synopsis "Command line argument to object parsing library")
19830 (description
19831 "@code{Commandlines} is a Python library for command line application
19832 development that supports command line argument parsing, command string
19833 validation testing and application logic.")
19834 (license license:expat)))
19835
19836 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
19837 ;; python-numba. They have a very unflexible relationship.
19838 (define-public python-numba
19839 (package
19840 (name "python-numba")
19841 (version "0.51.2")
19842 (source
19843 (origin
19844 (method url-fetch)
19845 (uri (pypi-uri "numba" version))
19846 (sha256
19847 (base32
19848 "0s0777m8kq4l96i88zj78np7283v1n4878qfc1gvzb8l45bmkg8n"))))
19849 (build-system python-build-system)
19850 (arguments
19851 `(#:phases
19852 (modify-phases %standard-phases
19853 (add-after 'unpack 'disable-proprietary-features
19854 (lambda _
19855 (setenv "NUMBA_DISABLE_HSA" "1")
19856 (setenv "NUMBA_DISABLE_CUDA" "1")
19857 #t))
19858 (replace 'check
19859 (lambda* (#:key inputs outputs #:allow-other-keys)
19860 (add-installed-pythonpath inputs outputs)
19861 ;; Something is wrong with the PYTHONPATH when running the
19862 ;; tests from the build directory, as it complains about not being
19863 ;; able to import certain modules.
19864 (with-directory-excursion "/tmp"
19865 (setenv "HOME" (getcwd))
19866 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))))))
19867 (propagated-inputs
19868 `(("python-llvmlite" ,python-llvmlite)
19869 ("python-numpy" ,python-numpy)
19870 ("python-singledispatch" ,python-singledispatch)))
19871 (native-inputs ;for tests
19872 `(("python-jinja2" ,python-jinja2)
19873 ("python-pygments" ,python-pygments)))
19874 (home-page "https://numba.pydata.org")
19875 (synopsis "Compile Python code using LLVM")
19876 (description "Numba gives you the power to speed up your applications with
19877 high performance functions written directly in Python. With a few
19878 annotations, array-oriented and math-heavy Python code can be just-in-time
19879 compiled to native machine instructions, similar in performance to C, C++ and
19880 Fortran, without having to switch languages or Python interpreters.
19881
19882 Numba works by generating optimized machine code using the LLVM compiler
19883 infrastructure at import time, runtime, or statically (using the included pycc
19884 tool).")
19885 (license license:bsd-3)))
19886
19887 (define-public python-numcodecs
19888 (package
19889 (name "python-numcodecs")
19890 (version "0.6.4")
19891 (source
19892 (origin
19893 (method url-fetch)
19894 (uri (pypi-uri "numcodecs" version))
19895 (sha256
19896 (base32
19897 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
19898 (build-system python-build-system)
19899 (propagated-inputs
19900 `(("python-numpy" ,python-numpy)
19901 ("python-msgpack" ,python-msgpack)))
19902 (native-inputs
19903 `(("python-pytest" ,python-pytest)
19904 ("python-setuptools-scm" ,python-setuptools-scm)))
19905 (home-page "https://github.com/zarr-developers/numcodecs")
19906 (synopsis "Buffer compression and transformation codecs")
19907 (description
19908 "This Python package provides buffer compression and transformation
19909 codecs for use in data storage and communication applications.")
19910 (license license:expat)))
19911
19912 (define-public python-asciitree
19913 (package
19914 (name "python-asciitree")
19915 (version "0.3.3")
19916 (source
19917 (origin
19918 (method url-fetch)
19919 (uri (pypi-uri "asciitree" version))
19920 (sha256
19921 (base32
19922 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
19923 (build-system python-build-system)
19924 (home-page "https://github.com/mbr/asciitree")
19925 (synopsis "Draws ASCII trees")
19926 (description "This package draws tree structures using characters.")
19927 (license license:expat)))
19928
19929 (define-public python-zarr
19930 (package
19931 (name "python-zarr")
19932 (version "2.4.0")
19933 (source
19934 (origin
19935 (method url-fetch)
19936 (uri (pypi-uri "zarr" version))
19937 (sha256
19938 (base32
19939 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
19940 (build-system python-build-system)
19941 (arguments
19942 `(#:phases
19943 (modify-phases %standard-phases
19944 (add-after 'unpack 'disable-service-tests
19945 (lambda _
19946 (setenv "ZARR_TEST_ABS" "0")
19947 (setenv "ZARR_TEST_MONGO" "0")
19948 (setenv "ZARR_TEST_REDIS" "0")
19949 #t))
19950 (replace 'check
19951 (lambda _
19952 (invoke "pytest" "-vv" "-k" "not lmdb")
19953 #t)))))
19954 (propagated-inputs
19955 `(("python-asciitree" ,python-asciitree)
19956 ("python-fasteners" ,python-fasteners)
19957 ("python-numcodecs" ,python-numcodecs)
19958 ("python-numpy" ,python-numpy)))
19959 (native-inputs
19960 `(("python-pytest" ,python-pytest)
19961 ("python-setuptools-scm" ,python-setuptools-scm)))
19962 (home-page "https://github.com/zarr-developers/zarr-python")
19963 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
19964 (description
19965 "This package provides an implementation of chunked, compressed,
19966 N-dimensional arrays for Python.")
19967 (license license:expat)))
19968
19969 (define-public python-anndata
19970 (package
19971 (name "python-anndata")
19972 (version "0.7.1")
19973 (source
19974 (origin
19975 (method url-fetch)
19976 (uri (pypi-uri "anndata" version))
19977 (sha256
19978 (base32
19979 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
19980 (build-system python-build-system)
19981 (arguments
19982 `(#:phases
19983 (modify-phases %standard-phases
19984 (add-after 'unpack 'delete-inconvenient-tests
19985 (lambda _
19986 ;; This test depends on python-scikit-learn.
19987 (delete-file "anndata/tests/test_inplace_subset.py")
19988 #t))
19989 (delete 'check)
19990 (add-after 'install 'check
19991 (lambda* (#:key inputs outputs #:allow-other-keys)
19992 (add-installed-pythonpath inputs outputs)
19993 (invoke "pytest" "-vv"))))))
19994 (propagated-inputs
19995 `(("python-h5py" ,python-h5py)
19996 ("python-importlib-metadata" ,python-importlib-metadata)
19997 ("python-natsort" ,python-natsort)
19998 ("python-numcodecs" ,python-numcodecs)
19999 ("python-packaging" ,python-packaging)
20000 ("python-pandas" ,python-pandas)
20001 ("python-scipy" ,python-scipy)
20002 ("python-zarr" ,python-zarr)))
20003 (native-inputs
20004 `(("python-joblib" ,python-joblib)
20005 ("python-pytest" ,python-pytest)
20006 ("python-setuptools-scm" ,python-setuptools-scm)))
20007 (home-page "https://github.com/theislab/anndata")
20008 (synopsis "Annotated data for data analysis pipelines")
20009 (description "Anndata is a package for simple (functional) high-level APIs
20010 for data analysis pipelines. In this context, it provides an efficient,
20011 scalable way of keeping track of data together with learned annotations and
20012 reduces the code overhead typically encountered when using a mostly
20013 object-oriented library such as @code{scikit-learn}.")
20014 (license license:bsd-3)))
20015
20016 (define-public python-dill
20017 (package
20018 (name "python-dill")
20019 (version "0.3.1.1")
20020 (source
20021 (origin
20022 (method url-fetch)
20023 (uri (pypi-uri "dill" version))
20024 (sha256
20025 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
20026 (build-system python-build-system)
20027 (arguments
20028 `(#:phases
20029 (modify-phases %standard-phases
20030 (replace 'check
20031 (lambda _
20032 (with-directory-excursion "/tmp"
20033 (invoke "nosetests" "-v"))
20034 #t)))))
20035 (native-inputs
20036 `(("python-nose" ,python-nose)))
20037 (home-page "https://pypi.org/project/dill/")
20038 (synopsis "Serialize all of Python")
20039 (description "Dill extends Python's @code{pickle} module for serializing
20040 and de-serializing Python objects to the majority of the built-in Python
20041 types. Dill provides the user the same interface as the @code{pickle} module,
20042 and also includes some additional features. In addition to pickling Python
20043 objects, @code{dill} provides the ability to save the state of an interpreter
20044 session in a single command. Hence, it would be feasible to save a
20045 interpreter session, close the interpreter, ship the pickled file to another
20046 computer, open a new interpreter, unpickle the session and thus continue from
20047 the saved state of the original interpreter session.")
20048 (license license:bsd-3)))
20049
20050 (define-public python-multiprocess
20051 (package
20052 (name "python-multiprocess")
20053 (version "0.70.9")
20054 (source
20055 (origin
20056 (method url-fetch)
20057 (uri (pypi-uri "multiprocess" version))
20058 (sha256
20059 (base32
20060 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
20061 (build-system python-build-system)
20062 (arguments
20063 `(#:phases
20064 (modify-phases %standard-phases
20065 (add-after 'unpack 'disable-broken-tests
20066 (lambda _
20067 ;; This test is broken as there is no keyboard interrupt.
20068 (substitute* "py3.7/multiprocess/tests/__init__.py"
20069 (("^(.*)def test_wait_result"
20070 line indent)
20071 (string-append indent
20072 "@unittest.skip(\"Disabled by Guix\")\n"
20073 line)))
20074 #t))
20075 ;; Tests must be run after installation.
20076 (delete 'check)
20077 (add-after 'install 'check
20078 (lambda* (#:key inputs outputs #:allow-other-keys)
20079 (add-installed-pythonpath inputs outputs)
20080 (invoke "python" "-m" "multiprocess.tests")
20081 #t)))))
20082 (propagated-inputs
20083 `(("python-dill" ,python-dill)))
20084 (home-page "https://pypi.org/project/multiprocess/")
20085 (synopsis "Multiprocessing and multithreading in Python")
20086 (description
20087 "This package is a fork of the multiprocessing Python package, a package
20088 which supports the spawning of processes using the API of the standard
20089 library's @code{threading} module.")
20090 (license license:bsd-3)))
20091
20092 (define-public python-toolz
20093 (package
20094 (name "python-toolz")
20095 (version "0.9.0")
20096 (source
20097 (origin
20098 (method url-fetch)
20099 (uri (pypi-uri "toolz" version))
20100 (sha256
20101 (base32
20102 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
20103 (build-system python-build-system)
20104 ;; FIXME: tests cannot be computed: "Can't perform this operation for
20105 ;; unregistered loader type"
20106 (arguments '(#:tests? #f))
20107 (home-page "https://github.com/pytoolz/toolz/")
20108 (synopsis "List processing tools and functional utilities")
20109 (description
20110 "This package provides a set of utility functions for iterators,
20111 functions, and dictionaries.")
20112 (license license:bsd-3)))
20113
20114 (define-public python2-toolz
20115 (package-with-python2 python-toolz))
20116
20117 (define-public python-cytoolz
20118 (package
20119 (name "python-cytoolz")
20120 (version "0.9.0.1")
20121 (source
20122 (origin
20123 (method url-fetch)
20124 (uri (pypi-uri "cytoolz" version))
20125 (sha256
20126 (base32
20127 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
20128 (build-system python-build-system)
20129 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
20130 ;; 'exceptions'"
20131 (arguments '(#:tests? #f))
20132 (propagated-inputs
20133 `(("python-toolz" ,python-toolz)))
20134 (native-inputs
20135 `(("python-cython" ,python-cython)))
20136 (home-page "https://github.com/pytoolz/cytoolz")
20137 (synopsis "High performance functional utilities")
20138 (description
20139 "The cytoolz package implements the same API as provided by toolz. The
20140 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
20141 that is accessible to other projects developed in Cython.")
20142 (license license:bsd-3)))
20143
20144 (define-public python-sortedcollections
20145 (package
20146 (name "python-sortedcollections")
20147 (version "2.1.0")
20148 (source
20149 (origin
20150 (method url-fetch)
20151 (uri (pypi-uri "sortedcollections" version))
20152 (sha256
20153 (base32
20154 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
20155 (build-system python-build-system)
20156 (propagated-inputs
20157 `(("python-sortedcontainers" ,python-sortedcontainers)))
20158 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
20159 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
20160 (synopsis "Python Sorted Collections")
20161 (description "Sorted Collections is a Python sorted collections library.")
20162 (license license:asl2.0)))
20163
20164 (define-public python-sortedcontainers
20165 (package
20166 (name "python-sortedcontainers")
20167 (version "2.1.0")
20168 (source
20169 (origin
20170 (method url-fetch)
20171 (uri (pypi-uri "sortedcontainers" version))
20172 (sha256
20173 (base32
20174 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
20175 (build-system python-build-system)
20176 (arguments
20177 ;; FIXME: Tests require many extra dependencies, and would introduce
20178 ;; a circular dependency on hypothesis, which uses this package.
20179 '(#:tests? #f))
20180 (propagated-inputs
20181 `(("python-appdirs" ,python-appdirs)
20182 ("python-distlib" ,python-distlib)
20183 ("python-filelock" ,python-filelock)
20184 ("python-six" ,python-six-bootstrap)))
20185 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
20186 (synopsis "Sorted List, Sorted Dict, Sorted Set")
20187 (description
20188 "This package provides a sorted collections library, written in
20189 pure-Python.")
20190 (license license:asl2.0)))
20191
20192 (define-public python2-sortedcontainers
20193 (package-with-python2 python-sortedcontainers))
20194
20195 (define-public python-cloudpickle
20196 (package
20197 (name "python-cloudpickle")
20198 (version "1.3.0")
20199 (source
20200 (origin
20201 (method url-fetch)
20202 (uri (pypi-uri "cloudpickle" version))
20203 (sha256
20204 (base32
20205 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
20206 (build-system python-build-system)
20207 (arguments
20208 '(#:phases (modify-phases %standard-phases
20209 (add-before 'check 'do-not-override-PYTHONPATH
20210 (lambda _
20211 ;; Append to PYTHONPATH instead of overriding it so
20212 ;; that dependencies from Guix can be found.
20213 (substitute* "tests/testutils.py"
20214 (("env\\['PYTHONPATH'\\] = pythonpath")
20215 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
20216 #t))
20217 (replace 'check
20218 (lambda* (#:key tests? #:allow-other-keys)
20219 (if tests?
20220 (invoke "pytest" "-s" "-vv")
20221 (format #t "test suite not run~%"))
20222 #t)))))
20223 (native-inputs
20224 `(;; For tests.
20225 ("python-psutil" ,python-psutil)
20226 ("python-pytest" ,python-pytest)
20227 ("python-tornado" ,python-tornado)))
20228 (home-page "https://github.com/cloudpipe/cloudpickle")
20229 (synopsis "Extended pickling support for Python objects")
20230 (description
20231 "Cloudpickle makes it possible to serialize Python constructs not
20232 supported by the default pickle module from the Python standard library. It
20233 is especially useful for cluster computing where Python expressions are
20234 shipped over the network to execute on remote hosts, possibly close to the
20235 data.")
20236 (properties `((python2-variant . ,(delay python2-cloudpickle))))
20237 (license license:bsd-3)))
20238
20239 (define-public python2-cloudpickle
20240 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
20241 (package/inherit base
20242 (native-inputs
20243 `(("python-mock" ,python2-mock)
20244 ,@(package-native-inputs base)))
20245 (propagated-inputs
20246 `(("python-futures" ,python2-futures)
20247 ,@(package-propagated-inputs base))))))
20248
20249 (define-public python-locket
20250 (package
20251 (name "python-locket")
20252 (version "0.2.0")
20253 (source
20254 (origin
20255 (method url-fetch)
20256 (uri (pypi-uri "locket" version))
20257 (sha256
20258 (base32
20259 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
20260 (build-system python-build-system)
20261 (home-page "https://github.com/mwilliamson/locket.py")
20262 (synopsis "File-based locks for Python")
20263 (description
20264 "Locket implements a lock that can be used by multiple processes provided
20265 they use the same path.")
20266 (license license:bsd-2)))
20267
20268 (define-public python2-locket
20269 (package-with-python2 python-locket))
20270
20271 (define-public python-blosc
20272 (package
20273 (name "python-blosc")
20274 (version "1.5.1")
20275 (source
20276 (origin
20277 (method url-fetch)
20278 (uri (pypi-uri "blosc" version))
20279 (sha256
20280 (base32
20281 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
20282 (build-system python-build-system)
20283 ;; FIXME: all tests pass, but then this error is printed:
20284 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
20285 (arguments '(#:tests? #f))
20286 (propagated-inputs
20287 `(("python-numpy" ,python-numpy)))
20288 (home-page "https://github.com/blosc/python-blosc")
20289 (synopsis "Python wrapper for the Blosc data compressor library")
20290 (description "Blosc is a high performance compressor optimized for binary
20291 data. It has been designed to transmit data to the processor cache faster
20292 than the traditional, non-compressed, direct memory fetch approach via a
20293 @code{memcpy()} system call.
20294
20295 Blosc works well for compressing numerical arrays that contains data with
20296 relatively low entropy, like sparse data, time series, grids with
20297 regular-spaced values, etc.
20298
20299 This Python package wraps the Blosc library.")
20300 (license license:bsd-3)))
20301
20302 (define-public python2-blosc
20303 (package-with-python2 python-blosc))
20304
20305 (define-public python-partd
20306 (package
20307 (name "python-partd")
20308 (version "0.3.9")
20309 (source
20310 (origin
20311 (method url-fetch)
20312 (uri (pypi-uri "partd" version))
20313 (sha256
20314 (base32
20315 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
20316 (build-system python-build-system)
20317 (propagated-inputs
20318 `(("python-blosc" ,python-blosc)
20319 ("python-locket" ,python-locket)
20320 ("python-numpy" ,python-numpy)
20321 ("python-pandas" ,python-pandas)
20322 ("python-pyzmq" ,python-pyzmq)
20323 ("python-toolz" ,python-toolz)))
20324 (home-page "https://github.com/dask/partd/")
20325 (synopsis "Appendable key-value storage")
20326 (description "Partd stores key-value pairs. Values are raw bytes. We
20327 append on old values. Partd excels at shuffling operations.")
20328 (license license:bsd-3)))
20329
20330 (define-public python2-partd
20331 (package-with-python2 python-partd))
20332
20333 (define-public python-fsspec
20334 (package
20335 (name "python-fsspec")
20336 (version "0.6.1")
20337 (source
20338 (origin
20339 (method url-fetch)
20340 (uri (pypi-uri "fsspec" version))
20341 (sha256
20342 (base32
20343 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
20344 (build-system python-build-system)
20345 (arguments '(#:tests? #f)) ; there are none
20346 (home-page "https://github.com/intake/filesystem_spec")
20347 (synopsis "File-system specification")
20348 (description "The purpose of this package is to produce a template or
20349 specification for a file-system interface, that specific implementations
20350 should follow, so that applications making use of them can rely on a common
20351 behavior and not have to worry about the specific internal implementation
20352 decisions with any given backend.")
20353 (license license:bsd-3)))
20354
20355 (define-public python-dask
20356 (package
20357 (name "python-dask")
20358 (version "2.14.0")
20359 (source
20360 (origin
20361 (method url-fetch)
20362 (uri (pypi-uri "dask" version))
20363 (sha256
20364 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
20365 (build-system python-build-system)
20366 (arguments
20367 `(#:phases
20368 (modify-phases %standard-phases
20369 (add-after 'unpack 'disable-broken-tests
20370 (lambda _
20371 ;; This test is marked as xfail when pytest-xdist is used.
20372 (substitute* "dask/tests/test_threaded.py"
20373 (("def test_interrupt\\(\\)" m)
20374 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
20375 m)))
20376 ;; This one fails with a type error:
20377 ;; TypeError: Already tz-aware, use tz_convert to convert.
20378 (substitute* "dask/dataframe/tests/test_shuffle.py"
20379 (("def test_set_index_timestamp\\(\\)" m)
20380 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
20381 m)))
20382 #t))
20383 (replace 'check
20384 (lambda _ (invoke "pytest" "-vv"))))))
20385 (propagated-inputs
20386 `(("python-cloudpickle" ,python-cloudpickle)
20387 ("python-fsspec" ,python-fsspec)
20388 ("python-numpy" ,python-numpy)
20389 ("python-packaging" ,python-packaging)
20390 ("python-pandas" ,python-pandas)
20391 ("python-partd" ,python-partd)
20392 ("python-toolz" ,python-toolz)
20393 ("python-pyyaml" ,python-pyyaml)))
20394 (native-inputs
20395 `(("python-pytest" ,python-pytest)
20396 ("python-pytest-runner" ,python-pytest-runner)))
20397 (home-page "https://github.com/dask/dask/")
20398 (synopsis "Parallel computing with task scheduling")
20399 (description
20400 "Dask is a flexible parallel computing library for analytics. It
20401 consists of two components: dynamic task scheduling optimized for computation,
20402 and large data collections like parallel arrays, dataframes, and lists that
20403 extend common interfaces like NumPy, Pandas, or Python iterators to
20404 larger-than-memory or distributed environments. These parallel collections
20405 run on top of the dynamic task schedulers. ")
20406 (license license:bsd-3)))
20407
20408 (define-public python-ilinkedlist
20409 (package
20410 (name "python-ilinkedlist")
20411 (version "0.4.0")
20412 (source
20413 (origin
20414 (method url-fetch)
20415 (uri (pypi-uri "ilinkedlist" version))
20416 (sha256
20417 (base32
20418 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
20419 (build-system python-build-system)
20420 (native-inputs `(("python-pytest" ,python-pytest)))
20421 (inputs `(("python" ,python)))
20422 (home-page "https://github.com/luther9/ilinkedlist-py")
20423 (synopsis "Immutable linked list library")
20424 (description
20425 "This is a implementation of immutable linked lists for Python. It
20426 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
20427 Since a linked list is treated as immutable, it is hashable, and its length
20428 can be retrieved in constant time. Some of the terminology is inspired by
20429 LISP. It is possible to create an improper list by creating a @code{Pair}
20430 with a non-list @code{cdr}.")
20431 (license license:gpl3+)))
20432
20433 (define-public python-readlike
20434 (package
20435 (name "python-readlike")
20436 (version "0.1.3")
20437 (source
20438 (origin
20439 (method url-fetch)
20440 (uri (pypi-uri "readlike" version))
20441 (sha256
20442 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
20443 (build-system python-build-system)
20444 (home-page "https://github.com/jangler/readlike")
20445 (synopsis "GNU Readline-like line editing module")
20446 (description
20447 "This Python module provides line editing functions similar to the default
20448 Emacs-style ones of GNU Readline. Unlike the Python standard library's
20449 @code{readline} package, this one allows access to those capabilities in settings
20450 outside of a standard command-line interface. It is especially well-suited to
20451 interfacing with Urwid, due to a shared syntax for describing key inputs.
20452
20453 Currently, all stateless Readline commands are implemented. Yanking and history
20454 are not supported.")
20455 (license license:expat)))
20456
20457 (define-public python2-readlike
20458 (package-with-python2 python-readlike))
20459
20460 (define-public python-reparser
20461 (package
20462 (name "python-reparser")
20463 (version "1.4.3")
20464 (source
20465 (origin
20466 (method url-fetch)
20467 (uri (pypi-uri "ReParser" version))
20468 (sha256
20469 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
20470 (build-system python-build-system)
20471 (home-page "https://github.com/xmikos/reparser")
20472 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
20473 (description
20474 "This Python library provides a simple lexer/parser for inline markup based
20475 on regular expressions.")
20476 (license license:expat)))
20477
20478 (define-public python2-reparser
20479 (let ((reparser (package-with-python2
20480 (strip-python2-variant python-reparser))))
20481 (package/inherit reparser
20482 (propagated-inputs
20483 `(("python2-enum34" ,python2-enum34)
20484 ,@(package-propagated-inputs reparser))))))
20485
20486 (define-public python-retrying
20487 (package
20488 (name "python-retrying")
20489 (version "1.3.3")
20490 (source
20491 (origin
20492 (method git-fetch)
20493 (uri (git-reference
20494 (url "https://github.com/rholder/retrying")
20495 (commit (string-append "v" version))))
20496 (file-name (git-file-name name version))
20497 (sha256
20498 (base32
20499 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
20500 (build-system python-build-system)
20501 (propagated-inputs
20502 `(("python-six" ,python-six)))
20503 (home-page "https://github.com/rholder/retrying")
20504 (synopsis "Library for adding retry behavior")
20505 (description "Retrying is a general-purpose retrying library to simplify
20506 the task of adding retry behavior to just about anything.
20507
20508 Features:
20509
20510 @itemize
20511 @item Generic Decorator API.
20512 @item Specify stop condition (i.e. limit by number of attempts).
20513 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
20514 @item Customize retrying on Exceptions.
20515 @item Customize retrying on expected returned result.
20516 @end itemize")
20517 (license license:asl2.0)))
20518
20519 (define-public python-pre-commit
20520 (package
20521 (name "python-pre-commit")
20522 (version "2.10.0")
20523 (source
20524 (origin
20525 (method url-fetch)
20526 (uri (pypi-uri "pre_commit" version))
20527 (sha256
20528 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
20529 (build-system python-build-system)
20530 (arguments
20531 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
20532 ;; attribute 'empty_template_setup'".
20533 `(#:tests? #false))
20534 (propagated-inputs
20535 `(("python-cfgv" ,python-cfgv)
20536 ("python-identify" ,python-identify)
20537 ("python-importlib-metadata" ,python-importlib-metadata)
20538 ("python-importlib-resources" ,python-importlib-resources)
20539 ("python-nodeenv" ,python-nodeenv)
20540 ("python-pyyaml" ,python-pyyaml)
20541 ("python-toml" ,python-toml)
20542 ("python-virtualenv" ,python-virtualenv)))
20543 (home-page "https://github.com/pre-commit/pre-commit")
20544 (synopsis "Framework for managing multi-language pre-commit hooks")
20545 (description
20546 "This package provides a framework for managing and maintaining
20547 multi-language pre-commit hooks.")
20548 (license license:expat)))
20549
20550 (define-public python-precis-i18n
20551 (package
20552 (name "python-precis-i18n")
20553 (version "1.0.0")
20554 (source
20555 (origin
20556 (method url-fetch)
20557 (uri (pypi-uri "precis_i18n" version))
20558 (sha256
20559 (base32
20560 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
20561 (build-system python-build-system)
20562 (home-page "https://github.com/byllyfish/precis_i18n")
20563 (synopsis "Implementation of the PRECIS framework")
20564 (description
20565 "This module implements the PRECIS Framework as described in RFC 8264,
20566 RFC 8265 and RFC 8266.")
20567 (license license:expat)))
20568
20569 (define-public python-absl-py
20570 (package
20571 (name "python-absl-py")
20572 (version "0.6.1")
20573 (source
20574 (origin
20575 (method url-fetch)
20576 (uri (pypi-uri "absl-py" version))
20577 (sha256
20578 (base32
20579 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
20580 (build-system python-build-system)
20581 (propagated-inputs
20582 `(("python-six" ,python-six)))
20583 (home-page "https://github.com/abseil/abseil-py")
20584 (synopsis "Abseil Python common libraries")
20585 (description
20586 "This package provides the Abseil Python Common Libraries, a collection
20587 of Python libraries for building Python applications.")
20588 (license license:asl2.0)))
20589
20590 (define-public python-astor
20591 (package
20592 (name "python-astor")
20593 (version "0.8.1")
20594 (source
20595 (origin
20596 (method url-fetch)
20597 (uri (pypi-uri "astor" version))
20598 (sha256
20599 (base32
20600 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
20601 (build-system python-build-system)
20602 ;; FIXME: There are two errors and two test failures.
20603 (arguments `(#:tests? #f))
20604 (home-page "https://github.com/berkerpeksag/astor")
20605 (synopsis "Read and write Python ASTs")
20606 (description "Astor is designed to allow easy manipulation of Python
20607 source via the Abstract Syntax Tree.")
20608 (license license:bsd-3)))
20609
20610 (define-public python2-astor
20611 (package-with-python2 python-astor))
20612
20613 (define-public python-astunparse
20614 (package
20615 (name "python-astunparse")
20616 (version "1.6.2")
20617 (source
20618 (origin
20619 (method url-fetch)
20620 (uri (pypi-uri "astunparse" version))
20621 (sha256
20622 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
20623 (build-system python-build-system)
20624 (arguments '(#:tests? #f)) ; there are none
20625 (propagated-inputs
20626 `(("python-six" ,python-six)
20627 ("python-wheel" ,python-wheel)))
20628 (home-page "https://github.com/simonpercivall/astunparse")
20629 (synopsis "AST unparser for Python")
20630 (description "This package provides an AST unparser for Python. It is a
20631 factored out version of @code{unparse} found in the Python source
20632 distribution.")
20633 (license license:bsd-3)))
20634
20635 (define-public python-gast
20636 (package
20637 (name "python-gast")
20638 (version "0.3.3")
20639 (source
20640 (origin
20641 (method url-fetch)
20642 (uri (pypi-uri "gast" version))
20643 (sha256
20644 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
20645 (build-system python-build-system)
20646 (propagated-inputs
20647 `(("python-astunparse" ,python-astunparse)))
20648 (home-page "https://pypi.org/project/gast/")
20649 (synopsis "Generic Python AST that abstracts the underlying Python version")
20650 (description
20651 "GAST provides a compatibility layer between the AST of various Python
20652 versions, as produced by @code{ast.parse} from the standard @code{ast}
20653 module.")
20654 (license license:bsd-3)))
20655
20656 (define-public python-wikidata
20657 (package
20658 (name "python-wikidata")
20659 (version "0.6.1")
20660 (source
20661 (origin
20662 (method url-fetch)
20663 (uri (pypi-uri "Wikidata" version))
20664 (sha256
20665 (base32
20666 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
20667 (build-system python-build-system)
20668 (propagated-inputs
20669 `(("python-babel" ,python-babel)))
20670 (home-page "https://github.com/dahlia/wikidata")
20671 (synopsis "Wikidata client library")
20672 (description
20673 "This package provides a Python interface to
20674 @url{https://www.wikidata.org/, Wikidata}.")
20675 (properties '((upstream-name . "Wikidata")))
20676 (license license:gpl3+)))
20677
20678 (define-public python-doctest-ignore-unicode
20679 (package
20680 (name "python-doctest-ignore-unicode")
20681 (version "0.1.2")
20682 (source
20683 (origin
20684 (method url-fetch)
20685 (uri (pypi-uri "doctest-ignore-unicode" version))
20686 (sha256
20687 (base32
20688 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
20689 (build-system python-build-system)
20690 (native-inputs
20691 `(("python-nose" ,python-nose)))
20692 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
20693 (synopsis "Ignore Unicode literal prefixes in doctests")
20694 (description
20695 "This package adds support for a flag to ignore Unicode literal prefixes
20696 in doctests.")
20697 (license license:asl2.0)))
20698
20699 (define-public python-attr
20700 (package
20701 (name "python-attr")
20702 (version "0.3.1")
20703 (source
20704 (origin
20705 (method url-fetch)
20706 (uri (pypi-uri "attr" version))
20707 (sha256
20708 (base32
20709 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
20710 (build-system python-build-system)
20711 (home-page "https://github.com/denis-ryzhkov/attr")
20712 (synopsis "Decorator for attributes of target function or class")
20713 (description "Simple decorator to set attributes of target function or
20714 class in a @acronym{DRY, Don't Repeat Yourself} way.")
20715 (license license:expat)))
20716
20717 (define-public python-construct
20718 (package
20719 (name "python-construct")
20720 (version "2.10.56")
20721 (source
20722 (origin
20723 (method url-fetch)
20724 (uri (pypi-uri "construct" version))
20725 (sha256
20726 (base32
20727 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
20728 (build-system python-build-system)
20729 (arguments
20730 `(#:tests? #f)) ; No tests exist.
20731 (propagated-inputs
20732 `(("python-extras" ,python-extras)
20733 ("python-arrow" ,python-arrow)
20734 ("python-numpy" ,python-numpy)
20735 ("python-ruamel.yaml" ,python-ruamel.yaml)))
20736 (home-page "https://construct.readthedocs.io")
20737 (synopsis "Declarative and symmetrical parser and builder for binary data")
20738 (description
20739 "This package provides both simple, atomic constructs (such as
20740 integers of various sizes), as well as composite ones which allow you
20741 form hierarchical and sequential structures of increasing complexity.
20742 It features bit and byte granularity, easy debugging and testing, an
20743 easy-to-extend subclass system, and lots of primitive constructs to
20744 make your work easier.")
20745 (license license:expat)))
20746
20747 (define-public python-outcome
20748 (package
20749 (name "python-outcome")
20750 (version "1.0.1")
20751 (source
20752 (origin
20753 (method url-fetch)
20754 (uri (pypi-uri "outcome" version))
20755 (sha256
20756 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
20757 (build-system python-build-system)
20758 (arguments
20759 `(#:phases
20760 (modify-phases %standard-phases
20761 (replace 'check
20762 (lambda* (#:key inputs outputs #:allow-other-keys)
20763 (add-installed-pythonpath inputs outputs)
20764 (invoke "pytest" "-vv"))))))
20765 (native-inputs
20766 `(("python-pytest" ,python-pytest)
20767 ("python-pytest-cov" ,python-pytest-cov)
20768 ("python-pytest-asyncio" ,python-pytest-asyncio)))
20769 (propagated-inputs
20770 `(("python-async-generator" ,python-async-generator)
20771 ("python-attrs" ,python-attrs)))
20772 (home-page "https://github.com/python-trio/outcome")
20773 (synopsis "Capture the outcome of Python function calls")
20774 (description
20775 "Capture the outcome of Python function calls. Extracted from the Trio
20776 project.")
20777 ;; Either license applies.
20778 (license (list license:expat license:asl2.0))))
20779
20780 (define-public python-trio
20781 (package
20782 (name "python-trio")
20783 (version "0.17.0")
20784 (source
20785 (origin
20786 (method url-fetch)
20787 (uri (pypi-uri "trio" version))
20788 (sha256
20789 (base32 "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78"))))
20790 (build-system python-build-system)
20791 (arguments
20792 `(#:phases
20793 (modify-phases %standard-phases
20794 (add-before 'check 'change-home
20795 (lambda _
20796 ;; Tests require a writable home.
20797 (setenv "HOME" "/tmp")
20798 #t))
20799 (replace 'check
20800 (lambda _
20801 (invoke "pytest" "-vv" "-k"
20802 (string-append
20803 ;; This test times out.
20804 "not test_ki_protection_works"
20805 ;; Assertion errors.
20806 " and not test_guest_mode_ki"
20807 " and not test_run_in_trio_thread_ki"
20808 ;; These try to raise KeyboardInterrupt which does not work
20809 ;; in the build environment.
20810 " and not test_ki_self"
20811 " and not test_ki_wakes_us_up"
20812 ;; Failure in name resolution.
20813 " and not test_getnameinfo"
20814 " and not test_SocketType_resolve"
20815 ;; OSError: protocol not found.
20816 " and not test_getprotobyname")))))))
20817 (native-inputs
20818 `(("python-astor" ,python-astor)
20819 ("python-ipython" ,python-ipython)
20820 ("python-jedi" ,python-jedi)
20821 ("python-pylint" ,python-pylint)
20822 ("python-pyopenssl" ,python-pyopenssl)
20823 ("python-pytest" ,python-pytest)
20824 ("python-pytest-cov" ,python-pytest-cov)
20825 ("python-trustme" ,python-trustme)))
20826 (propagated-inputs
20827 `(("python-attrs" ,python-attrs)
20828 ("python-idna" ,python-idna)
20829 ("python-outcome" ,python-outcome)
20830 ("python-sniffio" ,python-sniffio)
20831 ("python-sortedcontainers"
20832 ,python-sortedcontainers)))
20833 (home-page "https://github.com/python-trio/trio")
20834 (synopsis "Friendly Python library for async concurrency and I/O")
20835 (description
20836 "Trio strives to be a production-quality, async/await-native I/O library
20837 for Python. Like all async libraries, its main purpose is to help you write
20838 programs that do multiple things at the same time with parallelized I/O.")
20839 ;; Either license applies.
20840 (license (list license:expat license:asl2.0))))
20841
20842 (define-public python-trio-typing
20843 (package
20844 (name "python-trio-typing")
20845 (version "0.5.0")
20846 (source
20847 (origin
20848 (method url-fetch)
20849 (uri (pypi-uri "trio-typing" version))
20850 (sha256
20851 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
20852 (build-system python-build-system)
20853 (arguments
20854 `(#:phases
20855 (modify-phases %standard-phases
20856 (replace 'check
20857 (lambda _
20858 (invoke "pytest" "-vv"))))))
20859 (native-inputs
20860 `(("python-attrs" ,python-attrs)
20861 ("python-pytest" ,python-pytest)))
20862 (propagated-inputs
20863 `(("python-mypy" ,python-mypy)
20864 ("python-mypy-extensions"
20865 ,python-mypy-extensions)
20866 ("python-trio" ,python-trio)
20867 ("python-typing-extensions"
20868 ,python-typing-extensions)))
20869 (home-page "https://github.com/python-trio/trio-typing")
20870 (synopsis "Static type checking support for Trio and related projects")
20871 (description
20872 "This package provides:
20873
20874 @itemize
20875 @item PEP 561 typing stubs packages for the Trio project packages:
20876
20877 @itemize
20878 @item trio (@code{trio-stubs})
20879 @item outcome (@code{outcome-stubs})
20880 @item async_generator (@code{async_generator-stubs})
20881 @end itemize
20882
20883 @item A package @code{trio_typing} containing types that Trio programs often
20884 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
20885 a mypy plugin that smooths over some limitations in the basic type hints.
20886 @end itemize")
20887 ;; Either license applies.
20888 (license (list license:expat license:asl2.0))))
20889
20890 (define-public python-humanize
20891 (package
20892 (name "python-humanize")
20893 (version "0.5.1")
20894 (source
20895 (origin
20896 (method url-fetch)
20897 (uri (pypi-uri "humanize" version))
20898 (sha256
20899 (base32
20900 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
20901 (arguments
20902 '(#:tests? #f)) ; tests not in pypi archive
20903 (build-system python-build-system)
20904 (home-page "https://github.com/jmoiron/humanize")
20905 (synopsis "Print numerical information in a human-readable form")
20906 (description "This package provides a Python module that displays numbers
20907 and dates in \"human readable\" forms. For example, it would display
20908 \"12345591313\" as \"12.3 billion\".")
20909 (license license:expat)))
20910
20911 (define-public python-txaio
20912 (package
20913 (name "python-txaio")
20914 (version "18.8.1")
20915 (source
20916 (origin
20917 (method url-fetch)
20918 (uri (pypi-uri "txaio" version))
20919 (sha256
20920 (base32
20921 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
20922 (build-system python-build-system)
20923 (propagated-inputs
20924 `(("python-twisted" ,python-twisted)
20925 ("python-six" ,python-six)))
20926 (home-page "https://github.com/crossbario/txaio")
20927 (synopsis "Compatibility layer between Python asyncio and Twisted")
20928 (description "Txaio provides a compatibility layer between the Python
20929 @code{asyncio} module and @code{Twisted}.")
20930 (license license:expat)))
20931
20932 (define-public python-toolshed
20933 (package
20934 (name "python-toolshed")
20935 (version "0.4.6")
20936 (source
20937 (origin
20938 (method url-fetch)
20939 (uri (pypi-uri "toolshed" version))
20940 (sha256
20941 (base32
20942 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
20943 (build-system python-build-system)
20944 (native-inputs
20945 `(("python-nose" ,python-nose)))
20946 (home-page "https://github.com/brentp/toolshed/")
20947 (synopsis "Collection of modules and functions for working with data")
20948 (description "This is a collection of well-tested, simple modules and
20949 functions that aim to reduce boilerplate when working with data.")
20950 (license license:bsd-2)))
20951
20952 (define-public python-annoy
20953 (package
20954 (name "python-annoy")
20955 (version "1.15.1")
20956 (source
20957 (origin
20958 (method url-fetch)
20959 (uri (pypi-uri "annoy" version))
20960 (sha256
20961 (base32
20962 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
20963 (build-system python-build-system)
20964 (native-inputs
20965 `(("python-nose" ,python-nose)))
20966 (home-page "https://github.com/spotify/annoy/")
20967 (synopsis "Approximate nearest neighbors library")
20968 (description
20969 "Annoy is a C++ library with Python bindings to search for points in
20970 space that are close to a given query point. It also creates large read-only
20971 file-based data structures that are @code{mmap}ped into memory so that many
20972 processes may share the same data.")
20973 (license license:asl2.0)))
20974
20975 (define-public python-croniter
20976 (package
20977 (name "python-croniter")
20978 (version "0.3.34")
20979 (source (origin
20980 (method url-fetch)
20981 (uri (pypi-uri "croniter" version))
20982 (sha256
20983 (base32
20984 "0r79cx4v2dw4hzr0annkkxxis46c8hivq61sr39z6p7lcjsbk1ki"))))
20985 (build-system python-build-system)
20986 (propagated-inputs
20987 `(("python-dateutil" ,python-dateutil)
20988 ("python-natsort" ,python-natsort)))
20989 (home-page "https://github.com/kiorky/croniter")
20990 (synopsis "Iterate datetime objects with cron-like syntax")
20991 (description
20992 "@code{croniter} provides iteration for datetime object with cron-like
20993 format.")
20994 (license license:expat)))
20995
20996 (define-public python-pylzma
20997 (package
20998 (name "python-pylzma")
20999 (version "0.5.0")
21000 (source
21001 (origin
21002 (method url-fetch)
21003 (uri (pypi-uri "pylzma" version))
21004 (sha256
21005 (base32
21006 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
21007 (build-system python-build-system)
21008 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
21009 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
21010 (description "This package provides Python bindings for the LZMA library
21011 by Igor Pavlov.")
21012 (license license:lgpl2.1+)))
21013
21014 (define-public python2-pylzma
21015 (package-with-python2 python-pylzma))
21016
21017 (define-public python-ifaddr
21018 (package
21019 (name "python-ifaddr")
21020 (version "0.1.7")
21021 (source
21022 (origin
21023 (method url-fetch)
21024 (uri (pypi-uri "ifaddr" version))
21025 (sha256
21026 (base32
21027 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
21028 (build-system python-build-system)
21029 (arguments
21030 `(#:phases
21031 (modify-phases %standard-phases
21032 (replace 'check
21033 (lambda _ (invoke "nosetests"))))))
21034 (native-inputs
21035 `(("python-nose" ,python-nose)))
21036 (home-page "https://github.com/pydron/ifaddr")
21037 (synopsis "Network interface and IP address enumeration library")
21038 (description "This package provides a network interface and IP address
21039 enumeration library in Python.")
21040 (license license:expat)))
21041
21042 (define-public python-zeroconf
21043 (package
21044 (name "python-zeroconf")
21045 (version "0.28.8")
21046 (source
21047 (origin
21048 (method url-fetch)
21049 (uri (pypi-uri "zeroconf" version))
21050 (sha256
21051 (base32
21052 "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb"))))
21053 (build-system python-build-system)
21054 (native-inputs
21055 `(("python-nose" ,python-nose)))
21056 (propagated-inputs
21057 `(("python-ifaddr" ,python-ifaddr)))
21058 (arguments
21059 `(#:phases
21060 (modify-phases %standard-phases
21061 (replace 'check
21062 (lambda _ ;; Networking isn't available for these tests.
21063 (invoke "nosetests" "-v"
21064 "--exclude" "test_integration_with_listener_ipv6"
21065 "--exclude" "test_launch_and_close_v6_only"
21066 "--exclude" "test_launch_and_close_v4_v6"
21067 "--exclude" "test_launch_and_close"))))))
21068 (home-page "https://github.com/jstasiak/python-zeroconf")
21069 (synopsis "Pure Python mDNS service discovery")
21070 (description
21071 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
21072 compatible).")
21073 (license license:lgpl2.1+)))
21074
21075 (define-public python2-zeroconf
21076 (package
21077 (name "python2-zeroconf")
21078
21079 ;; This is the last version that supports Python 2.x.
21080 (version "0.19.1")
21081 (source
21082 (origin
21083 (method url-fetch)
21084 (uri (pypi-uri "zeroconf" version))
21085 (sha256
21086 (base32
21087 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
21088 (build-system python-build-system)
21089 (arguments
21090 `(#:python ,python-2
21091 #:phases
21092 (modify-phases %standard-phases
21093 (add-after 'unpack 'patch-requires
21094 (lambda* (#:key inputs #:allow-other-keys)
21095 (substitute* "setup.py"
21096 (("enum-compat")
21097 "enum34"))
21098 #t)))))
21099 (native-inputs
21100 `(("python2-six" ,python2-six)
21101 ("python2-enum32" ,python2-enum34)
21102 ("python2-netifaces" ,python2-netifaces)
21103 ("python2-typing" ,python2-typing)))
21104 (home-page "https://github.com/jstasiak/python-zeroconf")
21105 (synopsis "Pure Python mDNS service discovery")
21106 (description
21107 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
21108 compatible).")
21109 (license license:lgpl2.1+)))
21110
21111 (define-public python-bsddb3
21112 (package
21113 (name "python-bsddb3")
21114 (version "6.2.6")
21115 (source
21116 (origin
21117 (method url-fetch)
21118 (uri (pypi-uri "bsddb3" version))
21119 (sha256
21120 (base32
21121 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
21122 (build-system python-build-system)
21123 (inputs
21124 `(("bdb" ,bdb)))
21125 (arguments
21126 '(#:phases
21127 (modify-phases %standard-phases
21128 (add-after 'unpack 'configure-locations
21129 (lambda* (#:key inputs #:allow-other-keys)
21130 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
21131 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
21132 #t))
21133 (replace 'check
21134 (lambda _
21135 (invoke "python3" "test3.py" "-v"))))))
21136 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
21137 (synopsis "Python bindings for Oracle Berkeley DB")
21138 (description
21139 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
21140 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
21141 Transaction objects, and each of these is exposed as a Python type in the
21142 bsddb3.db module. The database objects can use various access methods: btree,
21143 hash, recno, and queue. Complete support of Berkeley DB distributed
21144 transactions. Complete support for Berkeley DB Replication Manager.
21145 Complete support for Berkeley DB Base Replication. Support for RPC.")
21146 (license license:bsd-3)))
21147
21148 (define-public python-dbfread
21149 (package
21150 (name "python-dbfread")
21151 (version "2.0.7")
21152 (source (origin
21153 (method url-fetch)
21154 (uri (pypi-uri "dbfread" version))
21155 (sha256
21156 (base32
21157 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
21158 (build-system python-build-system)
21159 (native-inputs
21160 `(("python-pytest" ,python-pytest)))
21161 (home-page "https://dbfread.readthedocs.io")
21162 (synopsis "Read DBF Files with Python")
21163 (description
21164 "This library reads DBF files and returns the data as native Python data
21165 types for further processing. It is primarily intended for batch jobs and
21166 one-off scripts.")
21167 (license license:expat)))
21168
21169 (define-public python-cached-property
21170 (package
21171 (name "python-cached-property")
21172 (version "1.5.1")
21173 (source
21174 (origin
21175 (method url-fetch)
21176 (uri (pypi-uri "cached-property" version))
21177 (sha256
21178 (base32
21179 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
21180 (build-system python-build-system)
21181 (arguments
21182 `(#:phases
21183 (modify-phases %standard-phases
21184 ;; https://github.com/pydanny/cached-property/issues/131
21185 ;; recent versions of freezegun break one test
21186 (add-after 'unpack 'disable-broken-test
21187 (lambda _
21188 (substitute* "tests/test_cached_property.py"
21189 (("def test_threads_ttl_expiry\\(self\\)" m)
21190 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
21191 " " m)))
21192 #t)))))
21193 (native-inputs
21194 `(("python-freezegun" ,python-freezegun)))
21195 (home-page
21196 "https://github.com/pydanny/cached-property")
21197 (synopsis
21198 "Decorator for caching properties in classes")
21199 (description
21200 "This package provides a decorator which makes caching
21201 time-or-computationally-expensive properties quick and easy and works in Python
21202 2 or 3.")
21203 (license license:bsd-3)))
21204
21205 (define-public python-folium
21206 (package
21207 (name "python-folium")
21208 (version "0.12.1")
21209 (source
21210 (origin
21211 ;; PyPI has a ".whl" file but not a proper source release.
21212 ;; Thus, fetch code from Git.
21213 (method git-fetch)
21214 (uri (git-reference
21215 (url "https://github.com/python-visualization/folium")
21216 (commit (string-append "v" version))))
21217 (file-name (git-file-name name version))
21218 (sha256
21219 (base32 "0yi5y9pfpbc4bc4ibr8cblif8ls1wf3k0zawyx86r2qwxxkkyd6k"))))
21220 (build-system python-build-system)
21221 (propagated-inputs
21222 `(("python-branca" ,python-branca)
21223 ("python-jinja2" ,python-jinja2)
21224 ("python-numpy" ,python-numpy)
21225 ("python-requests" ,python-requests)))
21226 (native-inputs
21227 `(("python-pytest" ,python-pytest)))
21228 (home-page "https://github.com/python-visualization/folium")
21229 (synopsis "Make beautiful maps with Leaflet.js & Python")
21230 (description "@code{folium} makes it easy to visualize data that’s been
21231 manipulated in Python on an interactive leaflet map. It enables both the
21232 binding of data to a map for @code{choropleth} visualizations as well as
21233 passing rich vector/raster/HTML visualizations as markers on the map.
21234
21235 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
21236 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
21237 supports Image, Video, GeoJSON and TopoJSON overlays.")
21238 (license license:expat)))
21239
21240 (define-public jube
21241 (package
21242 ;; This is a command-line tool, so no "python-" prefix.
21243 (name "jube")
21244 (version "2.2.2")
21245 (source (origin
21246 (method url-fetch)
21247 (uri (string-append
21248 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
21249 version))
21250 (sha256
21251 (base32
21252 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
21253 (file-name (string-append "jube-" version ".tar.gz"))))
21254 (build-system python-build-system)
21255 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
21256 (synopsis "Benchmarking environment")
21257 (description
21258 "JUBE helps perform and analyze benchmarks in a systematic way. For each
21259 benchmarked application, benchmark data is stored in a format that allows JUBE
21260 to deduct the desired information. This data can be parsed by automatic pre-
21261 and post-processing scripts that draw information and store it more densely
21262 for manual interpretation.")
21263 (license license:gpl3+)))
21264
21265 (define-public python-pyroutelib3
21266 (package
21267 (name "python-pyroutelib3")
21268 (version "1.3.post1")
21269 (source
21270 (origin
21271 (method url-fetch)
21272 (uri (pypi-uri "pyroutelib3" version))
21273 (sha256
21274 (base32
21275 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
21276 (build-system python-build-system)
21277 (propagated-inputs
21278 `(("python-dateutil" ,python-dateutil)))
21279 (home-page "https://github.com/MKuranowski/pyroutelib3")
21280 (synopsis "Library for simple routing on OSM data")
21281 (description "Library for simple routing on OSM data")
21282 (license license:gpl3+)))
21283
21284 (define-public python-bibtexparser
21285 (package
21286 (name "python-bibtexparser")
21287 (version "1.1.0")
21288 (source
21289 (origin
21290 (method url-fetch)
21291 (uri (pypi-uri "bibtexparser" version))
21292 (sha256
21293 (base32
21294 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
21295 (build-system python-build-system)
21296 (propagated-inputs
21297 `(("python-pyparsing" ,python-pyparsing)))
21298 (native-inputs
21299 `(("python-future" ,python-future)))
21300 (home-page "https://github.com/sciunto-org/python-bibtexparser")
21301 (synopsis "Python library to parse BibTeX files")
21302 (description "BibtexParser is a Python library to parse BibTeX files.")
21303 (license (list license:bsd-3 license:lgpl3))))
21304
21305 (define-public python-distro
21306 (package
21307 (name "python-distro")
21308 (version "1.4.0")
21309 (source
21310 (origin
21311 (method url-fetch)
21312 (uri (pypi-uri "distro" version))
21313 (sha256
21314 (base32
21315 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
21316 (build-system python-build-system)
21317 (native-inputs
21318 `(("python-pytest" ,python-pytest)))
21319 (home-page "https://github.com/nir0s/distro")
21320 (synopsis
21321 "OS platform information API")
21322 (description
21323 "@code{distro} provides information about the OS distribution it runs on,
21324 such as a reliable machine-readable ID, or version information.
21325
21326 It is the recommended replacement for Python's original
21327 `platform.linux_distribution` function (which will be removed in Python 3.8).
21328 @code{distro} also provides a command-line interface to output the platform
21329 information in various formats.")
21330 (license license:asl2.0)))
21331
21332 (define-public python-cairosvg
21333 (package
21334 (name "python-cairosvg")
21335 (version "2.5.0")
21336 (source
21337 (origin
21338 (method url-fetch)
21339 (uri (pypi-uri "CairoSVG" version))
21340 (sha256
21341 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
21342 (build-system python-build-system)
21343 (arguments
21344 `(#:phases
21345 (modify-phases %standard-phases
21346 (replace 'check
21347 (lambda _ (invoke "pytest"))))))
21348 (propagated-inputs
21349 `(("python-cairocffi" ,python-cairocffi)
21350 ("python-cssselect2" ,python-cssselect2)
21351 ("python-defusedxml" ,python-defusedxml)
21352 ("python-pillow" ,python-pillow)
21353 ("python-tinycss2" ,python-tinycss2)))
21354 (native-inputs
21355 `(("python-pytest-flake8" ,python-pytest-flake8)
21356 ("python-pytest-isort" ,python-pytest-isort)
21357 ("python-pytest-runner" ,python-pytest-runner)))
21358 (home-page "https://cairosvg.org/")
21359 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
21360 (description "CairoSVG is a SVG converter based on Cairo. It can export
21361 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
21362 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
21363 parsed, the result is drawn to a Cairo surface that can be exported to
21364 qvarious formats: PDF, PostScript, PNG and even SVG.")
21365 (license license:lgpl3+)))
21366
21367 (define-public python-pyphen
21368 (package
21369 (name "python-pyphen")
21370 (version "0.10.0")
21371 (source
21372 (origin
21373 (method url-fetch)
21374 (uri (pypi-uri "Pyphen" version))
21375 (sha256
21376 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
21377 (build-system python-build-system)
21378 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
21379 ;; embedded set provided by upstream - like Debian does.
21380 (home-page "https://github.com/Kozea/Pyphen")
21381 (synopsis "Pure Python module to hyphenate text")
21382 (description "Pyphen is a pure Python module to hyphenate text using
21383 existing Hunspell hyphenation dictionaries.")
21384 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
21385
21386 (define-public python-intelhex
21387 (package
21388 (name "python-intelhex")
21389 (version "2.2.1")
21390 (source
21391 (origin
21392 (method url-fetch)
21393 (uri (pypi-uri "intelhex" version))
21394 (sha256
21395 (base32
21396 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
21397 (build-system python-build-system)
21398 (arguments '(#:tests? #f)) ;issue with version
21399 (home-page "https://pypi.org/project/IntelHex/")
21400 (synopsis "Python library for Intel HEX files manipulations")
21401 (description "The Intel HEX file format is widely used in microprocessors
21402 and microcontrollers area (embedded systems etc.) as the de facto standard for
21403 representation of code to be programmed into microelectronic devices. This
21404 package provides an intelhex Python library to read, write, create from
21405 scratch and manipulate data from Intel HEX file format. It also includes
21406 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
21407 converters and more, those based on the library itself.")
21408 (license license:bsd-3)))
21409
21410 (define-public python-pykwalify
21411 (package
21412 (name "python-pykwalify")
21413 (version "1.7.0")
21414 (source
21415 (origin
21416 (method url-fetch)
21417 (uri (pypi-uri "pykwalify" version))
21418 (sha256
21419 (base32
21420 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
21421 (build-system python-build-system)
21422 (arguments '(#:tests? #f)) ;missing dependencies
21423 (propagated-inputs
21424 `(("python-dateutil" ,python-dateutil)
21425 ("python-docopt" ,python-docopt)
21426 ("python-pyyaml" ,python-pyyaml)))
21427 (home-page "https://github.com/grokzen/pykwalify")
21428 (synopsis
21429 "Python lib/cli for JSON/YAML schema validation")
21430 (description
21431 "This package provides a parser, schema validator, and data binding tool
21432 for YAML and JSON.")
21433 (license license:expat)))
21434
21435 (define-public python-dbusmock
21436 (package
21437 (name "python-dbusmock")
21438 (version "0.18.3")
21439 (source
21440 (origin
21441 (method url-fetch)
21442 (uri (pypi-uri "python-dbusmock" version))
21443 (sha256
21444 (base32
21445 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
21446 (build-system python-build-system)
21447 (arguments
21448 '(#:phases
21449 (modify-phases %standard-phases
21450 (add-after 'unpack 'patch-shell-path
21451 (lambda _
21452 (substitute* "tests/test_code.py"
21453 (("/bin/bash") (which "bash")))
21454 #t)))))
21455 (native-inputs
21456 `(;; For tests.
21457 ("dbus" ,dbus) ; for dbus-daemon
21458 ("python-nose" ,python-nose)
21459 ("which" ,which)))
21460 (propagated-inputs
21461 `(("python-dbus" ,python-dbus)
21462 ("python-pygobject" ,python-pygobject)))
21463 (home-page "https://github.com/martinpitt/python-dbusmock")
21464 (synopsis "Python library for mock D-Bus objects")
21465 (description "python-dbusmock allows for the easy creation of mock objects on
21466 D-Bus. This is useful for writing tests for software which talks to D-Bus
21467 services such as upower, systemd, logind, gnome-session or others, and it is
21468 hard (or impossible without root privileges) to set the state of the real
21469 services to what you expect in your tests.")
21470 (license license:lgpl3+)))
21471
21472 (define-public python-jsonplus
21473 (package
21474 (name "python-jsonplus")
21475 (version "0.8.0")
21476 (home-page "https://github.com/randomir/jsonplus")
21477 (source (origin
21478 (method url-fetch)
21479 (uri (pypi-uri "jsonplus" version))
21480 (sha256
21481 (base32
21482 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
21483 (build-system python-build-system)
21484 ;; XXX: No tests on PyPI, and the repository has no tags.
21485 (arguments '(#:tests? #f))
21486 (propagated-inputs
21487 `(("python-dateutil" ,python-dateutil)
21488 ("python-simplejson" ,python-simplejson)
21489 ("python-sortedcontainers" ,python-sortedcontainers)))
21490 (synopsis "Serialize Python types to/from JSON")
21491 (description
21492 "This package provides functionality to serialize arbitrary data types
21493 to and from JSON. Common data types are implemented and it is easy to
21494 register custom encoders and decoders.")
21495 (license license:expat)))
21496
21497 (define-public python-ujson
21498 (package
21499 (name "python-ujson")
21500 (version "4.0.2")
21501 (source
21502 (origin
21503 (method url-fetch)
21504 (uri (pypi-uri "ujson" version))
21505 (sha256
21506 (base32
21507 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
21508 (modules '((guix build utils)))
21509 (snippet
21510 '(begin (delete-file-recursively "deps") #t))))
21511 (build-system python-build-system)
21512 (arguments
21513 `(#:phases
21514 (modify-phases %standard-phases
21515 (add-after 'unpack 'link-to-system-double-conversion
21516 (lambda* (#:key inputs #:allow-other-keys)
21517 (let ((d-c (assoc-ref inputs "double-conversion")))
21518 (substitute* "setup.py"
21519 (("./deps/double-conversion/double-conversion\"")
21520 (string-append d-c "/include/double-conversion\""))
21521 (("-lstdc++" stdc)
21522 (string-append "-L" d-c "/lib\","
21523 " \"-ldouble-conversion\","
21524 " \"" stdc)))
21525 #t)))
21526 (replace 'check
21527 (lambda* (#:key inputs outputs #:allow-other-keys)
21528 (add-installed-pythonpath inputs outputs)
21529 (invoke "pytest"))))))
21530 (native-inputs
21531 `(("double-conversion" ,double-conversion)
21532 ("python-setuptools-scm" ,python-setuptools-scm)
21533 ("python-pytest" ,python-pytest)))
21534 (home-page "https://github.com/ultrajson/ultrajson")
21535 (synopsis "Ultra fast JSON encoder and decoder for Python")
21536 (description
21537 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
21538 bindings for Python 3.")
21539 (license license:bsd-3)))
21540
21541 (define-public python-iocapture
21542 ;; The latest release is more than a year older than this commit.
21543 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
21544 (revision "1"))
21545 (package
21546 (name "python-iocapture")
21547 (version "0.1.2")
21548 (source
21549 (origin
21550 (method git-fetch)
21551 (uri (git-reference
21552 (url "https://github.com/oinume/iocapture")
21553 (commit commit)))
21554 (file-name (git-file-name name version))
21555 (sha256
21556 (base32
21557 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
21558 (build-system python-build-system)
21559 (arguments
21560 `(#:phases
21561 (modify-phases %standard-phases
21562 (delete 'check)
21563 (add-after 'install 'check
21564 (lambda* (#:key inputs outputs #:allow-other-keys)
21565 (add-installed-pythonpath inputs outputs)
21566 (invoke "py.test" "-v" "tests")
21567 #t)))))
21568 (propagated-inputs
21569 `(("python-flexmock" ,python-flexmock)
21570 ("python-pytest" ,python-pytest)
21571 ("python-pytest-cov" ,python-pytest-cov)
21572 ("python-six" ,python-six)))
21573 (home-page "https://github.com/oinume/iocapture")
21574 (synopsis "Python capturing tool for stdout and stderr")
21575 (description
21576 "This package helps you to capture the standard out (stdout) and the
21577 standard error channel (stderr) in your program.")
21578 (license license:expat))))
21579
21580 (define-public python-argh
21581 ;; There are 21 commits since the latest release containing important
21582 ;; improvements.
21583 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
21584 (revision "1"))
21585 (package
21586 (name "python-argh")
21587 (version (git-version "0.26.2" revision commit))
21588 (source
21589 (origin
21590 (method git-fetch)
21591 (uri (git-reference
21592 (url "https://github.com/neithere/argh")
21593 (commit commit)))
21594 (file-name (git-file-name name version))
21595 (sha256
21596 (base32
21597 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
21598 (build-system python-build-system)
21599 (propagated-inputs
21600 `(("python-iocapture" ,python-iocapture)
21601 ("python-mock" ,python-mock)
21602 ("python-pytest" ,python-pytest)
21603 ("python-pytest-cov" ,python-pytest-cov)
21604 ("python-pytest-xdist" ,python-pytest-xdist)
21605 ("python-tox" ,python-tox)))
21606 (home-page "https://github.com/neithere/argh/")
21607 (synopsis "Argparse wrapper with natural syntax")
21608 (description
21609 "python-argh is a small library that provides several layers of
21610 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
21611 always possible to declare a command with the highest possible (and least
21612 flexible) layer and then tune the behaviour with any of the lower layers
21613 including the native API of @code{python-argparse}.")
21614 (license license:lgpl3+))))
21615
21616 (define-public python-ppft
21617 (package
21618 (name "python-ppft")
21619 (version "1.6.6.1")
21620 (source
21621 (origin
21622 (method url-fetch)
21623 (uri (pypi-uri "ppft" version))
21624 (sha256
21625 (base32
21626 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
21627 (build-system python-build-system)
21628 (arguments '(#:tests? #f)) ; there are none
21629 (propagated-inputs
21630 `(("python-six" ,python-six)))
21631 (home-page "https://pypi.org/project/ppft/")
21632 (synopsis "Fork of Parallel Python")
21633 (description
21634 "This package is a fork of Parallel Python. The Parallel Python
21635 module (@code{pp}) provides an easy and efficient way to create
21636 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
21637 computers and clusters. It features cross-platform portability and dynamic
21638 load balancing.")
21639 (license license:bsd-3)))
21640
21641 (define-public python-pox
21642 (package
21643 (name "python-pox")
21644 (version "0.2.7")
21645 (source
21646 (origin
21647 (method url-fetch)
21648 (uri (pypi-uri "pox" version))
21649 (sha256
21650 (base32
21651 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
21652 (build-system python-build-system)
21653 (arguments
21654 `(#:phases
21655 (modify-phases %standard-phases
21656 (replace 'check
21657 (lambda _
21658 (mkdir-p "/tmp/guix")
21659 (setenv "SHELL" "bash")
21660 (setenv "USERNAME" "guix")
21661 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
21662 (invoke "py.test" "-vv")
21663 #t)))))
21664 (native-inputs
21665 `(("python-pytest" ,python-pytest)
21666 ("which" ,which)))
21667 (home-page "https://pypi.org/project/pox/")
21668 (synopsis "Python utilities for file system exploration and automated builds")
21669 (description
21670 "Pox provides a collection of utilities for navigating and manipulating
21671 file systems. This module is designed to facilitate some of the low-level
21672 operating system interactions that are useful when exploring a file system on a
21673 remote host. Pox provides Python equivalents of several shell commands such
21674 as @command{which} and @command{find}. These commands allow automated
21675 discovery of what has been installed on an operating system, and where the
21676 essential tools are located.")
21677 (license license:bsd-3)))
21678
21679 (define-public python-pathos
21680 (package
21681 (name "python-pathos")
21682 (version "0.2.5")
21683 (source
21684 (origin
21685 (method url-fetch)
21686 (uri (pypi-uri "pathos" version))
21687 (sha256
21688 (base32
21689 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
21690 (build-system python-build-system)
21691 (arguments
21692 '(#:phases
21693 (modify-phases %standard-phases
21694 (replace 'check
21695 (lambda _
21696 (setenv "PYTHONPATH"
21697 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
21698 (invoke "python" "./tests/__main__.py"))))))
21699 (propagated-inputs
21700 `(("python-dill" ,python-dill)
21701 ("python-multiprocess" ,python-multiprocess)
21702 ("python-pox" ,python-pox)
21703 ("python-ppft" ,python-ppft)))
21704 (native-inputs
21705 `(("python-pytest" ,python-pytest)))
21706 (home-page "https://pypi.org/project/pathos/")
21707 (synopsis
21708 "Parallel graph management and execution in heterogeneous computing")
21709 (description
21710 "Python-pathos is a framework for heterogeneous computing. It provides a
21711 consistent high-level interface for configuring and launching parallel
21712 computations across heterogeneous resources. Python-pathos provides configurable
21713 launchers for parallel and distributed computing, where each launcher contains
21714 the syntactic logic to configure and launch jobs in an execution environment.")
21715 (license license:bsd-3)))
21716
21717 (define-public python-flit
21718 (package
21719 (name "python-flit")
21720 (version "3.0.0")
21721 (source
21722 (origin
21723 (method url-fetch)
21724 (uri (pypi-uri "flit" version))
21725 (sha256
21726 (base32
21727 "14q8qa48bli2mniznc8b54qkwvhbik4kw99y01fi5gzzl620zzml"))))
21728 (build-system python-build-system)
21729 (arguments
21730 `(#:tests? #f)) ; XXX: Check requires network access.
21731 (home-page "https://flit.readthedocs.io/")
21732 (synopsis
21733 "Simple packaging tool for simple packages")
21734 (description
21735 "Flit is a simple way to put Python packages and modules on PyPI. Flit
21736 packages a single importable module or package at a time, using the import
21737 name as the name on PyPI. All subpackages and data files within a package
21738 are included automatically.")
21739 (license license:bsd-3)))
21740
21741 (define-public python-pathtools
21742 (package
21743 (name "python-pathtools")
21744 (version "0.1.2")
21745 (source
21746 (origin
21747 (method url-fetch)
21748 (uri (pypi-uri "pathtools" version))
21749 (sha256
21750 (base32
21751 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
21752 (build-system python-build-system)
21753 (home-page
21754 "https://github.com/gorakhargosh/pathtools")
21755 (synopsis "Path utilities for Python")
21756 (description "Pattern matching and various utilities for file systems
21757 paths.")
21758 (license license:expat)))
21759
21760 (define-public python-fastentrypoints
21761 (package
21762 (name "python-fastentrypoints")
21763 (version "0.12")
21764 (source
21765 (origin
21766 (method url-fetch)
21767 (uri (pypi-uri "fastentrypoints" version))
21768 (sha256
21769 (base32
21770 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
21771 (build-system python-build-system)
21772 (home-page
21773 "https://github.com/ninjaaron/fast-entry_points")
21774 (synopsis
21775 "Makes entry_points specified in setup.py load more quickly")
21776 (description
21777 "Using entry_points in your setup.py makes scripts that start really
21778 slowly because it imports pkg_resources. This package allows such setup
21779 scripts to load entry points more quickly.")
21780 (license license:bsd-3)))
21781
21782 (define-public python-funcparserlib
21783 (package
21784 (name "python-funcparserlib")
21785 (version "0.3.6")
21786 (source
21787 (origin
21788 (method url-fetch)
21789 (uri (pypi-uri "funcparserlib" version))
21790 (sha256
21791 (base32
21792 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
21793 (native-inputs
21794 `(("python-tox" ,python-tox)))
21795 (arguments
21796 `(#:phases
21797 (modify-phases %standard-phases
21798 (replace 'check
21799 (lambda _
21800 (invoke "tox"))))))
21801 (build-system python-build-system)
21802 (home-page
21803 "https://github.com/vlasovskikh/funcparserlib")
21804 (synopsis
21805 "Recursive descent parsing library based on functional combinators")
21806 (description
21807 "This package is a recursive descent parsing library for Python based on
21808 functional combinators. Parser combinators are just higher-order functions
21809 that take parsers as their arguments and return them as result values.")
21810 (license license:expat)))
21811
21812 (define-public python-speg
21813 (package
21814 (name "python-speg")
21815 (version "0.3")
21816 (source
21817 (origin
21818 (method url-fetch)
21819 (uri (pypi-uri "speg" version ".zip"))
21820 (sha256
21821 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
21822 (arguments
21823 `(#:tests? #f)) ;FIXME: tests fail, not sure why
21824 (native-inputs
21825 `(("unzip" ,unzip)))
21826 (build-system python-build-system)
21827 (home-page "https://github.com/avakar/speg")
21828 (synopsis "PEG-based parser interpreter with memoization")
21829 (description "This package is a PEG-based parser and interpreter with
21830 memoization.")
21831 (license license:expat)))
21832
21833 (define-public python-cson
21834 (package
21835 (name "python-cson")
21836 (version "0.8")
21837 (source
21838 (origin
21839 (method url-fetch)
21840 (uri (pypi-uri "cson" version))
21841 (sha256
21842 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
21843 (build-system python-build-system)
21844 (propagated-inputs
21845 `(("python-speg" ,python-speg)))
21846 (home-page "https://github.com/avakar/pycson")
21847 (synopsis "Parser for Coffeescript Object Notation (CSON)")
21848 (description "This package is a parser for Coffeescript Object
21849 Notation (CSON).")
21850 (license license:expat)))
21851
21852 (define-public python-asynctest
21853 (package
21854 (name "python-asynctest")
21855 (version "0.13.0")
21856 (source
21857 (origin
21858 (method url-fetch)
21859 (uri (pypi-uri "asynctest" version))
21860 (sha256
21861 (base32
21862 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
21863 (build-system python-build-system)
21864 (arguments
21865 '(#:phases
21866 (modify-phases %standard-phases
21867 (replace 'check
21868 (lambda _
21869 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
21870 (add-after 'unpack 'disable-tests
21871 (lambda* _
21872 ;; XXX: 7 tests fail out of 220. Disable them for now.
21873 (substitute* (list "test/test_selector.py"
21874 "test/test_mock.py")
21875 (("def test_events_watched_outside_test_are_ignored")
21876 "@unittest.skip('disabled by guix')
21877 def test_events_watched_outside_test_are_ignored")
21878 (("def test_awaited_from_autospec_mock.*" line)
21879 (string-append line " return True\n"))
21880 (("def test_create_autospec_on_coroutine_and_using_assert_methods.*" line)
21881 (string-append line " return True\n"))
21882 (("def test_patch_coroutine_with_multiple_scopes.*" line)
21883 (string-append line " return True\n"))
21884 (("def test_multiple_patches_on_coroutine.*" line)
21885 (string-append line " return True\n"))
21886 (("def test_patch_coroutine_only_when_running.*" line)
21887 (string-append line " return True\n")))
21888 #t)))))
21889 (home-page "https://github.com/Martiusweb/asynctest")
21890 (synopsis "Extension of unittest for testing asyncio libraries")
21891 (description
21892 "The package asynctest is built on top of the standard unittest module
21893 and cuts down boilerplate code when testing libraries for asyncio.")
21894 (license license:asl2.0)))
21895
21896 (define-public python-aionotify
21897 (package
21898 (name "python-aionotify")
21899 (version "0.2.0")
21900 (source
21901 (origin
21902 ;; Source tarball on PyPi lacks tests
21903 (method git-fetch)
21904 (uri (git-reference
21905 (url "https://github.com/rbarrois/aionotify")
21906 (commit (string-append "v" version))))
21907 (file-name (git-file-name name version))
21908 (sha256
21909 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
21910 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
21911 (build-system python-build-system)
21912 (home-page "https://github.com/rbarrois/aionotify")
21913 (synopsis "Asyncio-powered inotify library")
21914 (description
21915 "@code{aionotify} is a simple, asyncio-based inotify library.")
21916 (license license:bsd-3)))
21917
21918 (define-public python-forbiddenfruit
21919 (package
21920 (name "python-forbiddenfruit")
21921 (version "0.1.3")
21922 (source
21923 (origin
21924 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
21925 (method git-fetch)
21926 (uri (git-reference
21927 (url "https://github.com/clarete/forbiddenfruit")
21928 (commit version)))
21929 (file-name (git-file-name name version))
21930 (sha256
21931 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
21932 (build-system python-build-system)
21933 (arguments
21934 '(#:phases
21935 (modify-phases %standard-phases
21936 (replace 'check
21937 (lambda _
21938 (invoke "make" "SKIP_DEPS=1"))))))
21939 (native-inputs
21940 `(("python-nose" ,python-nose)
21941 ("python-coverage" ,python-coverage)))
21942 (home-page "https://github.com/clarete/forbiddenfruit")
21943 (synopsis "Patch python built-in objects")
21944 (description "This project allows Python code to extend built-in types.")
21945 (license (list license:gpl3+ license:expat))))
21946
21947 (define-public python-k5test
21948 (package
21949 (name "python-k5test")
21950 (version "0.9.2")
21951 (source
21952 (origin
21953 (method url-fetch)
21954 (uri (pypi-uri "k5test" version))
21955 (sha256
21956 (base32
21957 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
21958 (build-system python-build-system)
21959 (propagated-inputs
21960 `(("python-six" ,python-six)
21961 ;; `which`, `kadmin.local` binaries called inside library
21962 ("which" ,which)
21963 ("mit-krb5" ,mit-krb5)))
21964 (native-inputs `(("mit-krb5" ,mit-krb5)))
21965 (arguments
21966 '(#:phases
21967 (modify-phases %standard-phases
21968 (add-after 'unpack 'patch-paths
21969 (lambda* _
21970 (substitute* "k5test/realm.py"
21971 (("'kadmin_local'") "'kadmin.local'")))))))
21972 (home-page "https://github.com/pythongssapi/k5test")
21973 (synopsis "Library for setting up self-contained Kerberos 5 environments")
21974 (description
21975 "@code{k5test} is a library for setting up self-contained Kerberos 5
21976 environments, and running Python unit tests inside those environments. It is
21977 based on the file of the same name found alongside the MIT Kerberos 5 unit
21978 tests.")
21979 (license license:isc)))
21980
21981 (define-public python-gssapi
21982 (package
21983 (name "python-gssapi")
21984 (version "1.6.12")
21985 (source
21986 (origin
21987 (method url-fetch)
21988 (uri (pypi-uri "gssapi" version))
21989 (sha256
21990 (base32
21991 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
21992 (build-system python-build-system)
21993 (propagated-inputs
21994 `(("python-decorator" ,python-decorator)
21995 ("python-six" ,python-six)))
21996 (inputs
21997 `(("mit-krb5" ,mit-krb5)))
21998 ;; for tests
21999 (native-inputs
22000 `(("python-parameterized" ,python-parameterized)
22001 ("python-k5test" ,python-k5test)
22002 ("python-nose" ,python-nose)))
22003 (home-page "https://github.com/pythongssapi/python-gssapi")
22004 (synopsis "Python GSSAPI Wrapper")
22005 (description
22006 "Python-GSSAPI provides both low-level and high level wrappers around the
22007 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
22008 also be usable with other GSSAPI mechanisms.")
22009 (license license:isc)))
22010
22011 (define-public python-check-manifest
22012 (package
22013 (name "python-check-manifest")
22014 (version "0.37")
22015 (source
22016 (origin
22017 (method url-fetch)
22018 (uri (pypi-uri "check-manifest" version))
22019 (sha256
22020 (base32
22021 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
22022 (build-system python-build-system)
22023 (native-inputs
22024 `(("python-mock" ,python-mock)
22025 ("git" ,git)))
22026 (home-page "https://github.com/mgedmin/check-manifest")
22027 (synopsis "Check MANIFEST.in in a Python source package for completeness")
22028 (description "Python package can include a MANIFEST.in file to help with
22029 sending package files to the Python Package Index. This package checks that
22030 file to ensure it completely and accurately describes your project.")
22031 (license license:expat)))
22032
22033 (define-public python-android-stringslib
22034 (package
22035 (name "python-android-stringslib")
22036 (version "0.1.2")
22037 (source
22038 (origin
22039 (method git-fetch)
22040 (uri (git-reference
22041 (url "https://framagit.org/tyreunom/python-android-strings-lib")
22042 (commit (string-append "v" version))))
22043 (file-name (git-file-name name version))
22044 (sha256
22045 (base32
22046 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
22047 (build-system python-build-system)
22048 (arguments
22049 `(#:tests? #f))
22050 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
22051 (synopsis "Android strings.xml support")
22052 (description "Android Strings Lib provides support for android's strings.xml
22053 files. These files are used to translate strings in android apps.")
22054 (license license:expat)))
22055
22056 (define-public python-watchdog
22057 (package
22058 (name "python-watchdog")
22059 (version "0.9.0")
22060 (source
22061 (origin
22062 (method url-fetch)
22063 (uri (pypi-uri "watchdog" version))
22064 (sha256
22065 (base32
22066 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
22067 (build-system python-build-system)
22068 (arguments
22069 `(#:phases
22070 (modify-phases %standard-phases
22071 (add-before 'check 'remove-failing
22072 (lambda _
22073 (delete-file "tests/test_inotify_buffer.py")
22074 (delete-file "tests/test_snapshot_diff.py")
22075 #t)))))
22076 (propagated-inputs
22077 `(("python-argh" ,python-argh)
22078 ("python-pathtools" ,python-pathtools)
22079 ("python-pyyaml" ,python-pyyaml)))
22080 (native-inputs
22081 `(("python-pytest-cov" ,python-pytest-cov)
22082 ("python-pytest-timeout" ,python-pytest-timeout)))
22083 (home-page "https://github.com/gorakhargosh/watchdog")
22084 (synopsis "File system events monitoring")
22085 (description "This package provides a way to monitor file system events
22086 such as a file modification and trigger an action. This is similar to inotify,
22087 but portable.")
22088 (license license:asl2.0)))
22089
22090 (define-public python-watchgod
22091 (package
22092 (name "python-watchgod")
22093 (version "0.6")
22094 (source
22095 (origin
22096 ;; There are no tests in the PyPI tarball.
22097 (method git-fetch)
22098 (uri (git-reference
22099 (url "https://github.com/samuelcolvin/watchgod")
22100 (commit (string-append "v" version))))
22101 (file-name (git-file-name name version))
22102 (sha256
22103 (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66"))))
22104 (build-system python-build-system)
22105 (arguments
22106 `(#:phases
22107 (modify-phases %standard-phases
22108 (replace 'check
22109 (lambda _
22110 (invoke "pytest" "-vv"))))))
22111 (native-inputs
22112 `(("python-coverage" ,python-coverage)
22113 ("python-docutils" ,python-docutils)
22114 ("python-flake8" ,python-flake8)
22115 ("python-isort" ,python-isort)
22116 ("python-pycodestyle" ,python-pycodestyle)
22117 ("python-pyflakes" ,python-pyflakes)
22118 ("python-pygments" ,python-pygments)
22119 ("python-pytest" ,python-pytest)
22120 ("python-pytest-cov" ,python-pytest-cov)
22121 ("python-pytest-aiohttp" ,python-pytest-aiohttp)
22122 ("python-pytest-mock" ,python-pytest-mock)
22123 ("python-pytest-sugar" ,python-pytest-sugar)
22124 ("python-pytest-toolbox" ,python-pytest-toolbox)))
22125 (home-page "https://github.com/samuelcolvin/watchgod")
22126 (synopsis "Simple, modern file watching and code reload in Python")
22127 (description
22128 "Simple, modern file watching and code reload in Python inspired by
22129 @code{watchdog}. Among the differences are a unified approach for each
22130 operating systems and an elegant approach to concurrency using threading.")
22131 (license license:expat)))
22132
22133 (define-public python-wget
22134 (package
22135 (name "python-wget")
22136 (version "3.2")
22137 (source
22138 (origin
22139 (method url-fetch)
22140 (uri (pypi-uri "wget" version ".zip"))
22141 (sha256
22142 (base32
22143 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
22144 (build-system python-build-system)
22145 (native-inputs `(("unzip" ,unzip)))
22146 (home-page "https://bitbucket.org/techtonik/python-wget/")
22147 (synopsis "Pure Python download utility")
22148 (description "The python-wget library provides an API to download files
22149 with features similar to the @command{wget} utility.")
22150 (license license:unlicense)))
22151
22152 (define-public offlate
22153 (package
22154 (name "offlate")
22155 (version "0.5")
22156 (source
22157 (origin
22158 (method git-fetch)
22159 (uri (git-reference
22160 (url "https://framagit.org/tyreunom/offlate")
22161 (commit version)))
22162 (file-name (git-file-name name version))
22163 (sha256
22164 (base32
22165 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
22166 (build-system python-build-system)
22167 (arguments
22168 ;; No tests
22169 `(#:tests? #f))
22170 (propagated-inputs
22171 `(("python-android-stringslib" ,python-android-stringslib)
22172 ("python-dateutil" ,python-dateutil)
22173 ("python-gitlab" ,python-gitlab)
22174 ("python-lxml" ,python-lxml)
22175 ("python-polib" ,python-polib)
22176 ("python-pyenchant" ,python-pyenchant)
22177 ("python-pygit2" ,python-pygit2)
22178 ("python-pygithub" ,python-pygithub)
22179 ("python-pyqt" ,python-pyqt)
22180 ("python-requests" ,python-requests)
22181 ("python-ruamel.yaml" ,python-ruamel.yaml)
22182 ("python-translation-finder" ,python-translation-finder)
22183 ("python-watchdog" ,python-watchdog)))
22184 (native-inputs
22185 `(("qttools" ,qttools)))
22186 (home-page "https://framagit.org/tyreunom/offlate")
22187 (synopsis "Offline translation interface for online translation tools")
22188 (description "Offlate offers a unified interface for different translation
22189 file formats, as well as many different online translation platforms. You can
22190 use it to get work from online platforms, specialized such as the Translation
22191 Project, or not such a gitlab instance when your upstream doesn't use any
22192 dedicated platform. The tool proposes a unified interface for any format and
22193 an upload option to send your work back to the platform.")
22194 (license license:gpl3+)))
22195
22196 (define-public python-titlecase
22197 (package
22198 (name "python-titlecase")
22199 (version "0.12.0")
22200 (source
22201 (origin
22202 (method url-fetch)
22203 (uri (pypi-uri "titlecase" version))
22204 (sha256
22205 (base32
22206 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
22207 (build-system python-build-system)
22208 (native-inputs
22209 `(("python-nose" ,python-nose)))
22210 (home-page "https://github.com/ppannuto/python-titlecase")
22211 (synopsis "Capitalize strings similar to book titles")
22212 (description
22213 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
22214 It capitalizes (predominantly English) strings in a way that is similar to
22215 book titles, using the New York Times Manual of Style to leave certain words
22216 lowercase.")
22217 (license license:expat)))
22218
22219 (define-public python-pypng
22220 (package
22221 (name "python-pypng")
22222 (version "0.0.20")
22223 (source
22224 (origin
22225 (method url-fetch)
22226 (uri (pypi-uri "pypng" version))
22227 (sha256
22228 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
22229 (build-system python-build-system)
22230 (home-page "https://github.com/drj11/pypng")
22231 (synopsis "Pure Python PNG image encoder/decoder")
22232 (description
22233 "The PyPNG module implements support for PNG images. It reads and writes
22234 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
22235 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
22236 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
22237 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
22238 A number of optional chunks can be specified (when writing) and
22239 understood (when reading): tRNS, bKGD, gAMA.
22240
22241 PyPNG is not a high level toolkit for image processing (like PIL) and does not
22242 aim at being a replacement or competitor. Its strength lies in fine-grained
22243 extensive support of PNG features. It can also read and write Netpbm PAM
22244 files, with a focus on its use as an intermediate format for implementing
22245 custom PNG processing.")
22246 (license license:expat)))
22247
22248 (define-public python-fuzzywuzzy
22249 (package
22250 (name "python-fuzzywuzzy")
22251 (version "0.18.0")
22252 (source
22253 (origin
22254 (method url-fetch)
22255 (uri (pypi-uri "fuzzywuzzy" version))
22256 (sha256
22257 (base32
22258 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
22259 (build-system python-build-system)
22260 (native-inputs
22261 `(("python-hypothesis" ,python-hypothesis)
22262 ("python-pycodestyle" ,python-pycodestyle)
22263 ("python-pytest" ,python-pytest)))
22264 (propagated-inputs
22265 `(("python-levenshtein" ,python-levenshtein)))
22266 (home-page "https://github.com/seatgeek/fuzzywuzzy")
22267 (synopsis "Fuzzy string matching in Python")
22268 (description "Approximate string matching using
22269 @emph{Levenshtein Distance} to calculate the differences between
22270 sequences.")
22271 (license license:gpl2)))
22272
22273 (define-public python2-fuzzywuzzy
22274 (package-with-python2 python-fuzzywuzzy))
22275
22276 (define-public python-block-tracing
22277 (package
22278 (name "python-block-tracing")
22279 (version "1.0.1")
22280 (source
22281 (origin
22282 (method url-fetch)
22283 (uri (pypi-uri "block_tracing" version))
22284 (sha256
22285 (base32
22286 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
22287 (build-system python-build-system)
22288 (arguments '(#:tests? #f)) ; no tests
22289 (home-page "https://github.com/rianhunter/block_tracing")
22290 (synopsis "Protect process memory")
22291 (description
22292 "@code{block_tracing} is a tiny Python library that can be used to
22293 prevent debuggers and other applications from inspecting the memory within
22294 your process.")
22295 (license license:expat)))
22296
22297 (define-public python-gcovr
22298 (package
22299 (name "python-gcovr")
22300 (version "4.2")
22301 (source
22302 (origin
22303 (method url-fetch)
22304 (uri (pypi-uri "gcovr" version))
22305 (sha256
22306 (base32
22307 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
22308 (build-system python-build-system)
22309 (propagated-inputs
22310 `(("python-lxml" ,python-lxml)
22311 ("python-jinja2" ,python-jinja2)))
22312 (home-page "https://gcovr.com/")
22313 (synopsis "Utility for generating code coverage results")
22314 (description
22315 "Gcovr provides a utility for managing the use of the GNU gcov
22316 utility and generating summarized code coverage results. It is inspired
22317 by the Python coverage.py package, which provides a similar utility for
22318 Python.")
22319 (license license:bsd-3)))
22320
22321 (define-public python-owslib
22322 (package
22323 (name "python-owslib")
22324 (version "0.19.2")
22325 (source
22326 (origin
22327 (method url-fetch)
22328 (uri (pypi-uri "OWSLib" version))
22329 (sha256
22330 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
22331 (build-system python-build-system)
22332 (arguments
22333 '(#:tests? #f)) ; TODO: package dependencies required for tests.
22334 (synopsis "Interface for Open Geospatial Consortium web service")
22335 (description
22336 "OWSLib is a Python package for client programming with Open Geospatial
22337 Consortium (OGC) web service (hence OWS) interface standards, and their related
22338 content models.")
22339 (home-page "https://geopython.github.io/OWSLib/")
22340 (license license:bsd-3)))
22341
22342 (define-public python-docusign-esign
22343 (package
22344 (name "python-docusign-esign")
22345 (version "3.1.0")
22346 (source (origin
22347 (method url-fetch)
22348 (uri (pypi-uri "docusign_esign" version))
22349 (sha256
22350 (base32
22351 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
22352 (build-system python-build-system)
22353 ;; Testing requires undocumented setup changes, and so testing is disabled here.
22354 (arguments `(#:tests? #f))
22355 (propagated-inputs
22356 `(("python-certifi" ,python-certifi)
22357 ("python-six" ,python-six)
22358 ("python-dateutil" ,python-dateutil)
22359 ("python-urllib3" ,python-urllib3)
22360 ("python-pyjwt" ,python-pyjwt)
22361 ("python-cryptography" ,python-cryptography)
22362 ("python-nose" ,python-nose)))
22363 (synopsis "DocuSign Python Client")
22364 (description "The Official DocuSign Python Client Library used to interact
22365 with the eSign REST API. Send, sign, and approve documents using this client.")
22366 (home-page "https://www.docusign.com/devcenter")
22367 (license license:expat)))
22368
22369 (define-public python-xattr
22370 (package
22371 (name "python-xattr")
22372 (version "0.9.7")
22373 (source
22374 (origin
22375 (method url-fetch)
22376 (uri (pypi-uri "xattr" version))
22377 (sha256
22378 (base32
22379 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
22380 (build-system python-build-system)
22381 (propagated-inputs
22382 `(("python-cffi" ,python-cffi)))
22383 (home-page "https://github.com/xattr/xattr")
22384 (synopsis
22385 "Python wrapper for extended file system attributes")
22386 (description "This package provides a Python wrapper for using extended
22387 file system attributes. Extended attributes extend the basic attributes of files
22388 and directories in the file system. They are stored as name:data pairs
22389 associated with file system objects (files, directories, symlinks, etc).")
22390 (license license:expat)))
22391
22392 (define-public python-json-logger
22393 (package
22394 (name "python-json-logger")
22395 (version "0.1.11")
22396 (source
22397 (origin
22398 (method url-fetch)
22399 (uri (pypi-uri "python-json-logger" version))
22400 (sha256
22401 (base32
22402 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
22403 (build-system python-build-system)
22404 (home-page
22405 "https://github.com/madzak/python-json-logger")
22406 (synopsis "JSON log formatter in Python")
22407 (description "This library allows standard Python logging to output log data
22408 as JSON objects. With JSON we can make our logs more readable by machines and
22409 we can stop writing custom parsers for syslog-type records.")
22410 (license license:bsd-3)))
22411
22412 (define-public python-daiquiri
22413 (package
22414 (name "python-daiquiri")
22415 (version "2.1.1")
22416 (source
22417 (origin
22418 (method url-fetch)
22419 (uri (pypi-uri "daiquiri" version))
22420 (sha256
22421 (base32
22422 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
22423 (build-system python-build-system)
22424 (propagated-inputs
22425 `(("python-json-logger" ,python-json-logger)))
22426 (native-inputs
22427 `(("python-mock" ,python-mock)
22428 ("python-pytest" ,python-pytest)
22429 ("python-setuptools-scm" ,python-setuptools-scm)
22430 ("python-six" ,python-six)))
22431 (home-page "https://github.com/jd/daiquiri")
22432 (synopsis
22433 "Library to configure Python logging easily")
22434 (description "The daiquiri library provides an easy way to configure
22435 logging in Python. It also provides some custom formatters and handlers.")
22436 (license license:asl2.0)))
22437
22438 (define-public python-pifpaf
22439 (package
22440 (name "python-pifpaf")
22441 (version "2.5.0")
22442 (source
22443 (origin
22444 (method url-fetch)
22445 (uri (pypi-uri "pifpaf" version))
22446 (sha256
22447 (base32
22448 "1gy9p4nqf70fh38wn4icyfm7i9wrvx22wnjpg71g89wxbz27igaa"))))
22449 (build-system python-build-system)
22450 (arguments
22451 '(#:phases
22452 (modify-phases %standard-phases
22453 (replace 'check
22454 (lambda _
22455 (invoke "python" "setup.py" "testr" "--slowest"
22456 "--testr-args=until-failure"))))))
22457 (propagated-inputs
22458 `(("python-click" ,python-click)
22459 ("python-daiquiri" ,python-daiquiri)
22460 ("python-fixtures" ,python-fixtures)
22461 ("python-jinja2" ,python-jinja2)
22462 ("python-pbr" ,python-pbr)
22463 ("python-psutil" ,python-psutil)
22464 ("python-six" ,python-six)
22465 ("python-xattr" ,python-xattr)))
22466 (native-inputs
22467 `(("python-mock" ,python-mock)
22468 ("python-os-testr" ,python-os-testr)
22469 ("python-requests" ,python-requests)
22470 ("python-testrepository" ,python-testrepository)
22471 ("python-testtools" ,python-testtools)))
22472 (home-page "https://github.com/jd/pifpaf")
22473 (synopsis "Tools and fixtures to manage daemons for testing in Python")
22474 (description "Pifpaf is a suite of fixtures and a command-line tool that
22475 starts and stops daemons for a quick throw-away usage. This is typically
22476 useful when needing these daemons to run integration testing. It originally
22477 evolved from its precursor @code{overtest}.")
22478 (license license:asl2.0)))
22479
22480 (define-public python-pytest-check-links
22481 (package
22482 (name "python-pytest-check-links")
22483 (version "0.3.0")
22484 (source
22485 (origin
22486 (method url-fetch)
22487 ;; URI uses underscores
22488 (uri (pypi-uri "pytest_check_links" version))
22489 (sha256
22490 (base32
22491 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
22492 (build-system python-build-system)
22493 (propagated-inputs
22494 `(("python-docutils" ,python-docutils)
22495 ("python-html5lib" ,python-html5lib)
22496 ("python-nbconvert" ,python-nbconvert)
22497 ("python-nbformat" ,python-nbformat)
22498 ("python-pytest" ,python-pytest)
22499 ("python-six" ,python-six)))
22500 (native-inputs
22501 `(("python-pbr-minimal" ,python-pbr-minimal)))
22502 (home-page "https://github.com/minrk/pytest-check-links")
22503 (synopsis "Check links in files")
22504 (description "This package provides a pytest plugin that checks URLs for
22505 HTML-containing files.")
22506 (license license:bsd-3)))
22507
22508 (define-public python-json5
22509 (package
22510 (name "python-json5")
22511 (version "0.8.5")
22512 (source
22513 (origin
22514 ;; sample.json5 is missing from PyPi source tarball
22515 (method git-fetch)
22516 (uri (git-reference
22517 (url "https://github.com/dpranke/pyjson5")
22518 (commit (string-append "v" version))))
22519 (file-name (git-file-name name version))
22520 (sha256
22521 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
22522 (build-system python-build-system)
22523 (home-page "https://github.com/dpranke/pyjson5")
22524 (synopsis
22525 "Python implementation of the JSON5 data format")
22526 (description
22527 "JSON5 extends the JSON data interchange format to make it slightly more
22528 usable as a configuration language. This Python package implements parsing and
22529 dumping of JSON5 data structures.")
22530 (license license:asl2.0)))
22531
22532 (define-public python-frozendict
22533 (package
22534 (name "python-frozendict")
22535 (version "1.2")
22536 (source
22537 (origin
22538 (method url-fetch)
22539 (uri (pypi-uri "frozendict" version))
22540 (sha256
22541 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
22542 (build-system python-build-system)
22543 (home-page "https://github.com/slezica/python-frozendict")
22544 (synopsis "Simple immutable mapping for Python")
22545 (description
22546 "@dfn{frozendict} is an immutable wrapper around dictionaries that
22547 implements the complete mapping interface. It can be used as a drop-in
22548 replacement for dictionaries where immutability is desired.")
22549 (license license:expat)))
22550
22551 (define-public python-unpaddedbase64
22552 (package
22553 (name "python-unpaddedbase64")
22554 (version "1.1.0")
22555 (source
22556 (origin
22557 (method git-fetch)
22558 (uri (git-reference
22559 (url "https://github.com/matrix-org/python-unpaddedbase64")
22560 (commit (string-append "v" version))))
22561 (file-name (git-file-name name version))
22562 (sha256
22563 (base32
22564 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
22565 (build-system python-build-system)
22566 (home-page "https://pypi.org/project/unpaddedbase64/")
22567 (synopsis "Encode and decode Base64 without “=” padding")
22568 (description
22569 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
22570 using “=” characters. However this conveys no benefit so many protocols
22571 choose to use Base64 without the “=” padding.")
22572 (license license:asl2.0)))
22573
22574 (define-public python-py-cpuinfo
22575 (package
22576 (name "python-py-cpuinfo")
22577 (version "5.0.0")
22578 (source
22579 (origin
22580 (method url-fetch)
22581 (uri (pypi-uri "py-cpuinfo" version))
22582 (sha256
22583 (base32
22584 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
22585 (build-system python-build-system)
22586 (home-page "https://github.com/workhorsy/py-cpuinfo")
22587 (synopsis "Get CPU info with Python")
22588 (description
22589 "This Python module returns the CPU info by using the best sources of
22590 information for your operating system.")
22591 (license license:expat)))
22592
22593 (define-public python-canonicaljson
22594 (package
22595 (name "python-canonicaljson")
22596 (version "1.4.0")
22597 (source
22598 (origin
22599 (method url-fetch)
22600 (uri (pypi-uri "canonicaljson" version))
22601 (sha256
22602 (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
22603 (build-system python-build-system)
22604 (propagated-inputs
22605 `(("python-six" ,python-six)
22606 ("python-frozendict" ,python-frozendict)
22607 ("python-simplejson" ,python-simplejson)))
22608 (home-page "https://github.com/matrix-org/python-canonicaljson")
22609 (synopsis "Canonical JSON")
22610 (description
22611 "Deterministically encode JSON.
22612
22613 @itemize
22614 @item Encodes objects and arrays as RFC 7159 JSON.
22615 @item Sorts object keys so that you get the same result each time.
22616 @item Has no insignificant whitespace to make the output as small as possible.
22617 @item Escapes only the characters that must be escaped, U+0000 to
22618 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
22619 @item Uses the shortest escape sequence for each escaped character.
22620 @item Encodes the JSON as UTF-8.
22621 @item Can encode frozendict immutable dictionaries.
22622 @end itemize")
22623 (license license:asl2.0)))
22624
22625 (define-public python-signedjson
22626 (package
22627 (name "python-signedjson")
22628 (version "1.1.1")
22629 (source
22630 (origin
22631 (method url-fetch)
22632 (uri (pypi-uri "signedjson" version))
22633 (sha256
22634 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
22635 (build-system python-build-system)
22636 (propagated-inputs
22637 `(("python-canonicaljson" ,python-canonicaljson)
22638 ("python-importlib-metadata" ,python-importlib-metadata)
22639 ("python-pynacl" ,python-pynacl)
22640 ("python-typing-extensions" ,python-typing-extensions)
22641 ("python-unpaddedbase64" ,python-unpaddedbase64)))
22642 (native-inputs
22643 `(("python-setuptools-scm" ,python-setuptools-scm)))
22644 (home-page "https://github.com/matrix-org/python-signedjson")
22645 (synopsis "Sign JSON objects with ED25519 signatures")
22646 (description
22647 "Sign JSON objects with ED25519 signatures.
22648
22649 @itemize
22650 @item More than one entity can sign the same object.
22651 @item Each entity can sign the object with more than one key making it easier to
22652 rotate keys
22653 @item ED25519 can be replaced with a different algorithm.
22654 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
22655 key.
22656 @end itemize")
22657 (license license:asl2.0)))
22658
22659 (define-public python-daemonize
22660 (package
22661 (name "python-daemonize")
22662 (version "2.5.0")
22663 (source
22664 (origin
22665 (method url-fetch)
22666 (uri (pypi-uri "daemonize" version))
22667 (sha256
22668 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
22669 (build-system python-build-system)
22670 (home-page "https://github.com/thesharp/daemonize")
22671 (synopsis "Library for writing system daemons in Python")
22672 (description "Daemonize is a library for writing system daemons in Python.")
22673 (license license:expat)))
22674
22675 (define-public python-pymacaroons
22676 (package
22677 (name "python-pymacaroons")
22678 (version "0.13.0")
22679 (source
22680 (origin
22681 (method url-fetch)
22682 (uri (pypi-uri "pymacaroons" version))
22683 (sha256
22684 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
22685 (build-system python-build-system)
22686 (propagated-inputs
22687 `(("python-six" ,python-six)
22688 ("python-pynacl" ,python-pynacl)))
22689 (home-page "https://github.com/ecordell/pymacaroons")
22690 (synopsis "Python Macaroon Library")
22691 (description
22692 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
22693 tokens, macaroons embed caveats that define specific authorization
22694 requirements for the target service, the service that issued the root macaroon
22695 and which is capable of verifying the integrity of macaroons it receives.
22696
22697 Macaroons allow for delegation and attenuation of authorization. They are
22698 simple and fast to verify, and decouple authorization policy from the
22699 enforcement of that policy.")
22700 (license license:expat)))
22701
22702 (define-public python-ldap3
22703 (package
22704 (name "python-ldap3")
22705 (version "2.7")
22706 (home-page "https://github.com/cannatag/ldap3")
22707 (source
22708 (origin
22709 (method git-fetch)
22710 (uri (git-reference (url home-page)
22711 (commit (string-append "v" version))))
22712 (file-name (git-file-name name version))
22713 (sha256
22714 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
22715 (build-system python-build-system)
22716 (arguments
22717 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
22718 #:phases (modify-phases %standard-phases
22719 (replace 'check
22720 (lambda* (#:key tests? #:allow-other-keys)
22721 (when tests?
22722 (invoke "nosetests" "-s" "test"))
22723 #t)))))
22724 (native-inputs
22725 `(("python-nose" ,python-nose)))
22726 (propagated-inputs
22727 `(("python-gssapi" ,python-gssapi)
22728 ("python-pyasn1" ,python-pyasn1)))
22729 (synopsis "Python LDAP client")
22730 (description
22731 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
22732 library.")
22733 (license license:lgpl3+)))
22734
22735 (define-public python-boltons
22736 (package
22737 (name "python-boltons")
22738 (version "20.0.0")
22739 (source
22740 (origin
22741 (method url-fetch)
22742 (uri (pypi-uri "boltons" version))
22743 (sha256
22744 (base32
22745 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
22746 (build-system python-build-system)
22747 (home-page "https://github.com/mahmoud/boltons")
22748 (synopsis "Extensions to the Python standard library")
22749 (description
22750 "Boltons is a set of over 230 pure-Python utilities in the same spirit
22751 as — and yet conspicuously missing from — the standard library, including:
22752
22753 @itemize
22754 @item Atomic file saving, bolted on with fileutils
22755 @item A highly-optimized OrderedMultiDict, in dictutils
22756 @item Two types of PriorityQueue, in queueutils
22757 @item Chunked and windowed iteration, in iterutils
22758 @item Recursive data structure iteration and merging, with iterutils.remap
22759 @item Exponential backoff functionality, including jitter, through
22760 iterutils.backoff
22761 @item A full-featured TracebackInfo type, for representing stack traces, in
22762 tbutils
22763 @end itemize")
22764 (license license:bsd-3)))
22765
22766 (define-public python-eliot
22767 (package
22768 (name "python-eliot")
22769 (version "1.12.0")
22770 (source
22771 (origin
22772 (method url-fetch)
22773 (uri (pypi-uri "eliot" version))
22774 (sha256
22775 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
22776 (build-system python-build-system)
22777 (arguments
22778 `(#:phases
22779 (modify-phases %standard-phases
22780 (add-after 'unpack 'remove-journald-support
22781 (lambda _
22782 (for-each delete-file
22783 '("eliot/tests/test_journald.py"
22784 "eliot/journald.py"))
22785 #t))
22786 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
22787 ;; remove command-line tool's tests. TODO eliot-prettyprint should
22788 ;; be installed and these tests should pass.
22789 (lambda _
22790 (delete-file "eliot/tests/test_prettyprint.py")
22791 #t)))))
22792 (propagated-inputs
22793 `(("python-boltons" ,python-boltons)
22794 ("python-pyrsistent" ,python-pyrsistent)
22795 ("python-six" ,python-six)
22796 ("python-zope-interface" ,python-zope-interface)))
22797 (native-inputs
22798 `(("python-black" ,python-black)
22799 ("python-coverage" ,python-coverage)
22800 ("python-dask" ,python-dask)
22801 ("python-flake8" ,python-flake8)
22802 ("python-hypothesis" ,python-hypothesis)
22803 ("python-pytest" ,python-pytest)
22804 ("python-setuptools" ,python-setuptools)
22805 ("python-sphinx" ,python-sphinx)
22806 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
22807 ("python-testtools" ,python-testtools)
22808 ("python-twine" ,python-twine)
22809 ("python-twisted" ,python-twisted)))
22810 (home-page "https://github.com/itamarst/eliot/")
22811 (synopsis "Eliot: the logging system that tells you why it happened")
22812 (description
22813 "@dfn{eliot} is a Python logging system that outputs causal chains of
22814 actions: actions can spawn other actions, and eventually they either succeed
22815 or fail. The resulting logs tell you the story of what your software did: what
22816 happened, and what caused it.")
22817 (license license:asl2.0)))
22818
22819 (define-public python-pem
22820 (package
22821 (name "python-pem")
22822 (version "20.1.0")
22823 (source
22824 (origin
22825 (method url-fetch)
22826 (uri (pypi-uri "pem" version))
22827 (sha256
22828 (base32
22829 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
22830 (build-system python-build-system)
22831 (native-inputs
22832 `(("python-certifi" ,python-certifi)
22833 ("python-coverage" ,python-coverage)
22834 ("python-pretend" ,python-pretend)
22835 ("python-pyopenssl" ,python-pyopenssl)
22836 ("python-pytest" ,python-pytest)
22837 ("python-sphinx" ,python-sphinx)
22838 ("python-twisted" ,python-twisted)))
22839 (home-page "https://pem.readthedocs.io/")
22840 (synopsis "Easy PEM file parsing in Python")
22841 (description
22842 "This package provides a Python module for parsing and splitting PEM files.")
22843 (license license:expat)))
22844
22845 (define-public python-txsni
22846 ;; We need a few commits on top of 0.1.9 for compatibility with newer
22847 ;; Python and OpenSSL.
22848 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
22849 (revision "0"))
22850 (package
22851 (name "python-txsni")
22852 (version (git-version "0.1.9" revision commit))
22853 (home-page "https://github.com/glyph/txsni")
22854 (source
22855 (origin
22856 (method git-fetch)
22857 (uri (git-reference (url home-page) (commit commit)))
22858 (file-name (git-file-name name version))
22859 (sha256
22860 (base32
22861 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
22862 (build-system python-build-system)
22863 (propagated-inputs
22864 `(("python-pyopenssl" ,python-pyopenssl)
22865 ("python-service-identity" ,python-service-identity)
22866 ("python-twisted" ,python-twisted)))
22867 (synopsis "Run TLS servers with Twisted")
22868 (description
22869 "This package provides an easy-to-use SNI endpoint for use
22870 with the Twisted web framework.")
22871 (license license:expat))))
22872
22873 (define-public python-txacme
22874 (package
22875 (name "python-txacme")
22876 (version "0.9.2")
22877 (source
22878 (origin
22879 (method url-fetch)
22880 (uri (pypi-uri "txacme" version))
22881 (sha256
22882 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
22883 (build-system python-build-system)
22884 (propagated-inputs
22885 `(("python-acme" ,python-acme)
22886 ("python-attrs" ,python-attrs)
22887 ("python-eliot" ,python-eliot)
22888 ("python-josepy" ,python-josepy)
22889 ("python-pem" ,python-pem)
22890 ("python-treq" ,python-treq)
22891 ("python-twisted" ,python-twisted)
22892 ("python-txsni" ,python-txsni)))
22893 (native-inputs
22894 `(("python-fixtures" ,python-fixtures)
22895 ("python-hypothesis" ,python-hypothesis)
22896 ("python-mock" ,python-mock)
22897 ("python-service-identity"
22898 ,python-service-identity)
22899 ("python-testrepository" ,python-testrepository)
22900 ("python-testscenarios" ,python-testscenarios)
22901 ("python-testtools" ,python-testtools)))
22902 (home-page "https://github.com/twisted/txacme")
22903 (synopsis "Twisted implexmentation of the ACME protocol")
22904 (description
22905 "ACME is Automatic Certificate Management Environment, a protocol that
22906 allows clients and certificate authorities to automate verification and
22907 certificate issuance. The ACME protocol is used by the free Let's Encrypt
22908 Certificate Authority.
22909
22910 txacme is an implementation of the protocol for Twisted, the event-driven
22911 networking engine for Python.")
22912 (license license:expat)))
22913
22914 (define-public python-pysaml2
22915 (package
22916 (name "python-pysaml2")
22917 (version "6.5.1")
22918 (source
22919 (origin
22920 (method url-fetch)
22921 (uri (pypi-uri "pysaml2" version))
22922 (sha256
22923 (base32
22924 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
22925 (build-system python-build-system)
22926 (propagated-inputs
22927 `(("python-cryptography" ,python-cryptography)
22928 ("python-dateutil" ,python-dateutil)
22929 ("python-defusedxml" ,python-defusedxml)
22930 ("python-importlib-resources"
22931 ,python-importlib-resources)
22932 ("python-pyopenssl" ,python-pyopenssl)
22933 ("python-pytz" ,python-pytz)
22934 ("python-requests" ,python-requests)
22935 ("python-six" ,python-six)
22936 ("python-xmlschema" ,python-xmlschema)))
22937 (home-page "https://idpy.org")
22938 (synopsis "Python implementation of SAML Version 2 Standard")
22939 (description
22940 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
22941 It contains all necessary pieces for building a SAML2 service provider or
22942 an identity provider. The distribution contains examples of both.
22943
22944 This package was originally written to work in a WSGI environment, but
22945 there are extensions that allow you to use it with other frameworks.")
22946 (license license:asl2.0)))
22947
22948 (define-public python-click-plugins
22949 (package
22950 (name "python-click-plugins")
22951 (version "1.1.1")
22952 (source
22953 (origin
22954 (method url-fetch)
22955 (uri (pypi-uri "click-plugins" version))
22956 (sha256
22957 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
22958 (build-system python-build-system)
22959 (native-inputs
22960 `(("python-pytest" ,python-pytest)))
22961 (propagated-inputs
22962 `(("python-click" ,python-click)))
22963 (synopsis "Extension for Click to register external CLI commands")
22964 (description "This package provides n extension module for Click to
22965 register external CLI commands via setuptools entry-points.")
22966 (home-page "https://github.com/click-contrib/click-plugins")
22967 (license license:bsd-3)))
22968
22969 (define-public python-diceware
22970 (package
22971 (name "python-diceware")
22972 (version "0.9.6")
22973 (source
22974 (origin
22975 (method url-fetch)
22976 (uri (pypi-uri "diceware" version))
22977 (sha256
22978 (base32
22979 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
22980 (build-system python-build-system)
22981 (native-inputs
22982 `(("python-coverage" ,python-coverage)
22983 ("python-pytest" ,python-pytest)
22984 ("python-pytest-runner" ,python-pytest-runner)))
22985 (home-page "https://github.com/ulif/diceware/")
22986 (synopsis "Generates memorable passphrases")
22987 (description "This package generates passphrases by concatenating words
22988 randomly picked from wordlists. It supports several sources of
22989 randomness (including real life dice) and different wordlists (including
22990 cryptographically signed ones).")
22991 (license license:gpl3+)))
22992
22993 (define-public python-dictdiffer
22994 (package
22995 (name "python-dictdiffer")
22996 (version "0.8.1")
22997 (source (origin
22998 (method url-fetch)
22999 (uri (pypi-uri "dictdiffer" version))
23000 (sha256
23001 (base32
23002 "1lk3qmy1hkaphk4n7ayfk0wl6m2yvd6r7qkam6yncqfzgkbc1phs"))))
23003 (build-system python-build-system)
23004 (native-inputs
23005 `(("python-check-manifest" ,python-check-manifest)
23006 ("python-coverage" ,python-coverage)
23007 ("python-isort" ,python-isort)
23008 ("python-mock" ,python-mock)
23009 ("python-pydoctstyle" ,python-pydocstyle)
23010 ("python-pytest-cache" ,python-pytest-cache)
23011 ("python-pytest-cov" ,python-pytest-cov)
23012 ("python-pytest-pep8" ,python-pytest-pep8)
23013 ("python-pytest-runner" ,python-pytest-runner)
23014 ("python-pytest" ,python-pytest)
23015 ("python-setuptools-scm" ,python-setuptools-scm)
23016 ("python-tox" ,python-tox)))
23017 (home-page "https://github.com/inveniosoftware/dictdiffer")
23018 (synopsis "Diff and patch Python dictionary objects")
23019 (description
23020 "Dictdiffer is a Python module that helps you to diff and patch
23021 dictionaries.")
23022 (license license:expat)))
23023
23024 (define-public pyzo
23025 (package
23026 (name "pyzo")
23027 (version "4.11.2")
23028 (source
23029 (origin
23030 (method url-fetch)
23031 (uri (pypi-uri "pyzo" version))
23032 (sha256
23033 (base32 "1jk5f79lj09vnsdk9h01w21p9h49z2hhf8xhkx8471pjbg9vrlzr"))))
23034 (build-system python-build-system)
23035 (arguments
23036 `(#:phases
23037 (modify-phases %standard-phases
23038 (add-before 'check 'fix-home-directory
23039 (lambda _
23040 ;; Tests fail with "Permission denied: '/homeless-shelter'".
23041 (setenv "HOME" "/tmp")
23042 #t)))
23043 ;; Tests fail with "Uncaught Python exception: python: undefined
23044 ;; symbol: objc_getClass".
23045 #:tests? #f))
23046 (propagated-inputs
23047 `(("python-pyqt" ,python-pyqt)))
23048 (home-page "https://pyzo.org")
23049 (synopsis
23050 "Python IDE for scientific computing")
23051 (description
23052 "Pyzo is a Python IDE focused on interactivity and introspection,
23053 which makes it very suitable for scientific computing. Its practical
23054 design is aimed at simplicity and efficiency.
23055
23056 It consists of two main components, the editor and the shell, and uses
23057 a set of pluggable tools to help the programmer in various ways. Some
23058 example tools are source structure, project manager, interactive help,
23059 workspace...")
23060 (license license:bsd-2)))
23061
23062 (define-public python-osc
23063 (package
23064 (name "python-osc")
23065 (version "1.7.4")
23066 (source
23067 (origin
23068 (method url-fetch)
23069 (uri (pypi-uri "python-osc" version))
23070 (sha256
23071 (base32
23072 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
23073 (build-system python-build-system)
23074 (home-page "https://github.com/attwad/python-osc")
23075 (synopsis "Open Sound Control server and client implementations")
23076 (description
23077 "@code{python-osc} is a pure Python library with no external
23078 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
23079 Open Sound Control 1.0} specification.")
23080 (license license:unlicense)))
23081
23082 (define-public python-voluptuous
23083 (package
23084 (name "python-voluptuous")
23085 (version "0.11.7")
23086 (source
23087 (origin
23088 (method url-fetch)
23089 (uri (pypi-uri "voluptuous" version))
23090 (sha256
23091 (base32
23092 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
23093 (build-system python-build-system)
23094 (native-inputs
23095 `(("python-nose" ,python-nose)))
23096 (home-page "https://github.com/alecthomas/voluptuous")
23097 (synopsis "Python data validation library")
23098 (description
23099 "Voluptuous is a Python data validation library. It is primarily
23100 intended for validating data coming into Python as JSON, YAML, etc.")
23101 (license license:bsd-3)))
23102
23103 (define-public python-cmd2
23104 (package
23105 (name "python-cmd2")
23106 (version "1.0.2")
23107 (source
23108 (origin
23109 (method url-fetch)
23110 (uri (pypi-uri "cmd2" version))
23111 (sha256
23112 (base32
23113 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
23114 (build-system python-build-system)
23115 (propagated-inputs
23116 `(("python-attrs" ,python-attrs)
23117 ("python-colorama" ,python-colorama)
23118 ("python-pyperclip" ,python-pyperclip)
23119 ("python-wcwidth" ,python-wcwidth)))
23120 (native-inputs
23121 `(("python-codecov" ,python-codecov)
23122 ("python-coverage" ,python-coverage)
23123 ("python-doc8" ,python-doc8)
23124 ("python-flake8" ,python-flake8)
23125 ("python-invoke" ,python-invoke)
23126 ("python-mock" ,python-mock)
23127 ("python-pytest" ,python-pytest)
23128 ("python-pytest-cov" ,python-pytest-cov)
23129 ("python-pytest-mock" ,python-pytest-mock)
23130 ("python-setuptools-scm" ,python-setuptools-scm)
23131 ("python-sphinx" ,python-sphinx)
23132 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
23133 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
23134 ("python-tox" ,python-tox)
23135 ("python-twine" ,python-twine)
23136 ("which" ,which)))
23137 (home-page "https://github.com/python-cmd2/cmd2")
23138 (synopsis "Tool for building interactive command line applications")
23139 (description
23140 "Cmd2 is a tool for building interactive command line applications in
23141 Python. Its goal is to make it quick and easy for developers to build
23142 feature-rich and user-friendly interactive command line applications. It
23143 provides a simple API which is an extension of Python's built-in @code{cmd}
23144 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
23145 make your life easier and eliminates much of the boilerplate code which would
23146 be necessary when using @code{cmd}.")
23147 (license license:expat)))
23148
23149 (define-public python-pytidylib
23150 (package
23151 (name "python-pytidylib")
23152 (version "0.3.2")
23153 (source (origin
23154 (method url-fetch)
23155 (uri (pypi-uri "pytidylib" version))
23156 (sha256
23157 (base32
23158 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
23159 (build-system python-build-system)
23160 (arguments
23161 '(#:phases
23162 (modify-phases %standard-phases
23163 (add-before 'build 'qualify-libtidy
23164 (lambda* (#:key inputs #:allow-other-keys)
23165 (let ((libtidy (string-append (assoc-ref inputs "tidy")
23166 "/lib/libtidy.so")))
23167 (substitute* "tidylib/tidy.py"
23168 (("ctypes\\.util\\.find_library\\('tidy'\\)")
23169 (format #f "'~a'" libtidy)))
23170 #t))))))
23171 (inputs `(("tidy" ,tidy)))
23172 (home-page "https://github.com/countergram/pytidylib")
23173 (synopsis "Python wrapper for HTML Tidy library")
23174 (description
23175 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
23176 allows you, from Python code, to “fix” invalid (X)HTML markup.")
23177 (license license:expat)))
23178
23179 (define-public python2-pytidylib
23180 (package-with-python2 python-pytidylib))
23181
23182 (define-public python-mujson
23183 (package
23184 (name "python-mujson")
23185 (version "1.4")
23186 (source
23187 (origin
23188 (method url-fetch)
23189 (uri (pypi-uri "mujson" version))
23190 (sha256
23191 (base32
23192 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
23193 (build-system python-build-system)
23194 (home-page "https://github.com/mattgiles/mujson")
23195 (synopsis "Use the fastest JSON functions available at import time")
23196 (description "This package selects the fastest JSON functions available
23197 at import time.")
23198 (license license:expat)))
23199
23200 (define-public python-bashlex
23201 (package
23202 (name "python-bashlex")
23203 (version "0.14")
23204 (source
23205 (origin
23206 (method url-fetch)
23207 (uri (pypi-uri "bashlex" version))
23208 (sha256
23209 (base32
23210 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
23211 (build-system python-build-system)
23212 (arguments
23213 `(#:phases
23214 (modify-phases %standard-phases
23215 (add-before 'build 'pregenerate-yacc-tables
23216 (lambda _
23217 ;; parser.py caches tables, which attempts to write to site lib
23218 ;; see https://github.com/idank/bashlex/issues/51
23219 (invoke "python" "-c" "import bashlex"))))))
23220 (home-page
23221 "https://github.com/idank/bashlex")
23222 (synopsis "Python parser for bash")
23223 (description "@code{bashlex} is a Python port of the parser used
23224 internally by GNU bash.
23225
23226 For the most part it's transliterated from C, the major differences are:
23227
23228 @itemize
23229 @item it does not execute anything
23230 @item it is reentrant
23231 @item it generates a complete AST
23232 @end itemize
23233 ")
23234 (license license:gpl3+)))
23235
23236 (define-public python-jinxed
23237 (package
23238 (name "python-jinxed")
23239 (version "1.0.0")
23240 (source
23241 (origin
23242 (method url-fetch)
23243 (uri (pypi-uri "jinxed" version))
23244 (sha256
23245 (base32
23246 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
23247 (build-system python-build-system)
23248 (arguments
23249 '(#:phases
23250 (modify-phases %standard-phases
23251 (add-before 'check 'set-environment-variables
23252 (lambda* (#:key inputs #:allow-other-keys)
23253 (let ((ncurses (assoc-ref inputs "ncurses")))
23254 (setenv "TERM" "LINUX")
23255 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
23256 #t))))
23257 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
23258 (native-inputs
23259 `(("ncurses" ,ncurses)))
23260 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
23261 (synopsis "Jinxed Terminal Library")
23262 (description
23263 "Jinxed is an implementation of a subset of the Python curses library.")
23264 (license license:mpl2.0)))
23265
23266 (define-public python-blessed
23267 (package
23268 (name "python-blessed")
23269 (version "1.17.8")
23270 (source
23271 (origin
23272 (method url-fetch)
23273 (uri (pypi-uri "blessed" version))
23274 (sha256
23275 (base32
23276 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
23277 (modules '((guix build utils)))
23278 (snippet
23279 '(begin
23280 ;; Don't get hung up on Windows test failures.
23281 (delete-file "blessed/win_terminal.py") #t))))
23282 (build-system python-build-system)
23283 (propagated-inputs
23284 `(("python-jinxed" ,python-jinxed)
23285 ("python-six" ,python-six)
23286 ("python-wcwidth" ,python-wcwidth)))
23287 (native-inputs
23288 `(("python-mock" ,python-mock)
23289 ("python-pytest" ,python-pytest)))
23290 (home-page "https://github.com/jquast/blessed")
23291 (synopsis "Wrapper around terminal capabilities")
23292 (description
23293 "Blessed is a thin, practical wrapper around terminal styling, screen
23294 positioning, and keyboard input.")
23295 (license license:expat)))
23296
23297 (define-public python-readme-renderer
23298 (package
23299 (name "python-readme-renderer")
23300 (version "26.0")
23301 (source
23302 (origin
23303 (method url-fetch)
23304 (uri (pypi-uri "readme_renderer" version))
23305 (sha256
23306 (base32
23307 "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
23308 (build-system python-build-system)
23309 (propagated-inputs
23310 `(("python-bleach" ,python-bleach)
23311 ("python-docutils" ,python-docutils)
23312 ("python-pygments" ,python-pygments)
23313 ("python-six" ,python-six)))
23314 (native-inputs
23315 `(("python-mock" ,python-mock)
23316 ("python-pytest" ,python-pytest)))
23317 (home-page "https://github.com/pypa/readme_renderer")
23318 (synopsis "Render README files in Warehouse")
23319 (description
23320 "Readme Renderer is a library that will safely render arbitrary README
23321 files into HTML. It is designed to be used in Warehouse to render the
23322 @code{long_description} for packages. It can handle Markdown, reStructuredText,
23323 and plain text.")
23324 (license license:asl2.0)))
23325
23326 (define-public python-lazr-delegates
23327 (package
23328 (name "python-lazr-delegates")
23329 (version "2.0.4")
23330 (source
23331 (origin
23332 (method url-fetch)
23333 (uri (pypi-uri "lazr.delegates" version))
23334 (sha256
23335 (base32
23336 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
23337 (build-system python-build-system)
23338 (arguments
23339 '(#:phases
23340 (modify-phases %standard-phases
23341 (replace 'check
23342 (lambda _
23343 (invoke "python" "setup.py" "nosetests"))))))
23344 (native-inputs
23345 `(("python-nose" ,python-nose)))
23346 (propagated-inputs
23347 `(("python-zope-interface" ,python-zope-interface)))
23348 (home-page "https://launchpad.net/lazr.delegates")
23349 (synopsis "Easily write objects that delegate behavior")
23350 (description
23351 "The @code{lazr.delegates} package makes it easy to write objects that
23352 delegate behavior to another object. The new object adds some property or
23353 behavior on to the other object, while still providing the underlying interface,
23354 and delegating behavior.")
23355 (license license:lgpl3)))
23356
23357 (define-public python-lazr-config
23358 (package
23359 (name "python-lazr-config")
23360 (version "2.2.2")
23361 (source
23362 (origin
23363 (method url-fetch)
23364 (uri (pypi-uri "lazr.config" version))
23365 (sha256
23366 (base32
23367 "11xpddgyhyj7sf27wbmrq5lnqk21wnprx3ajycgwlxjamh6sgffd"))))
23368 (build-system python-build-system)
23369 (arguments
23370 '(#:phases
23371 (modify-phases %standard-phases
23372 (replace 'check
23373 (lambda _
23374 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
23375 (native-inputs
23376 `(("python-nose" ,python-nose)))
23377 (propagated-inputs
23378 `(("python-lazr-delegates" ,python-lazr-delegates)
23379 ("python-zope-interface" ,python-zope-interface)))
23380 (home-page "https://launchpad.net/lazr.config")
23381 (synopsis "Create configuration schemas and process and validate configurations")
23382 (description
23383 "The LAZR config system is typically used to manage process configuration.
23384 Process configuration is for saying how things change when we run systems on
23385 different machines, or under different circumstances. This system uses ini-like
23386 file format of section, keys, and values. The config file supports inheritance
23387 to minimize duplication of information across files. The format supports schema
23388 validation.")
23389 (license license:lgpl3)))
23390
23391 (define-public python-flufl-bounce
23392 (package
23393 (name "python-flufl-bounce")
23394 (version "3.0.1")
23395 (source
23396 (origin
23397 (method url-fetch)
23398 (uri (pypi-uri "flufl.bounce" version))
23399 (sha256
23400 (base32
23401 "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
23402 (build-system python-build-system)
23403 (propagated-inputs
23404 `(("python-atpublic" ,python-atpublic)
23405 ("python-zope-interface" ,python-zope-interface)))
23406 (native-inputs
23407 `(("python-nose2" ,python-nose2)))
23408 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
23409 (synopsis "Email bounce detectors")
23410 (description "The @code{flufl.bounce} library provides a set of heuristics
23411 and an API for detecting the original bouncing email addresses from a bounce
23412 message. Many formats found in the wild are supported, as are VERP and
23413 RFC 3464.")
23414 (license (list license:asl2.0
23415 license:lgpl3)))) ; only for setup_headers.py
23416
23417 (define-public python-flufl-i18n
23418 (package
23419 (name "python-flufl-i18n")
23420 (version "3.0")
23421 (source
23422 (origin
23423 (method url-fetch)
23424 (uri (pypi-uri "flufl.i18n" version))
23425 (sha256
23426 (base32
23427 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
23428 (build-system python-build-system)
23429 (propagated-inputs
23430 `(("python-atpublic" ,python-atpublic)))
23431 (home-page "https://flufli18n.readthedocs.io")
23432 (synopsis "API for Python internationalization")
23433 (description
23434 "This package provides a high-level, convenient API for managing
23435 internationalization/translation contexts in Python applications. There is a
23436 simple API for single-context applications, such as command line scripts which
23437 only need to translate into one language during the entire course of their
23438 execution. There is a more flexible, but still convenient API for multi-context
23439 applications, such as servers, which may need to switch language contexts for
23440 different tasks.")
23441 (license license:asl2.0)))
23442
23443 (define-public python-flufl-lock
23444 (package
23445 (name "python-flufl-lock")
23446 (version "4.0")
23447 (source
23448 (origin
23449 (method url-fetch)
23450 (uri (pypi-uri "flufl.lock" version))
23451 (sha256
23452 (base32
23453 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
23454 (build-system python-build-system)
23455 (propagated-inputs
23456 `(("python-atpublic" ,python-atpublic)
23457 ("python-psutil" ,python-psutil)))
23458 (home-page "https://flufllock.readthedocs.io")
23459 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
23460 (description
23461 "The @dfn{flufl.lock} package provides NFS-safe file locking with
23462 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
23463 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
23464 and have a maximum lifetime built-in.")
23465 (license (list license:asl2.0
23466 license:lgpl3)))) ; only for setup_helpers.py
23467
23468 (define-public python-flufl-testing
23469 (package
23470 (name "python-flufl-testing")
23471 (version "0.8")
23472 (source
23473 (origin
23474 (method url-fetch)
23475 (uri (pypi-uri "flufl.testing" version))
23476 (sha256
23477 (base32
23478 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
23479 (build-system python-build-system)
23480 (native-inputs
23481 `(("python-nose2" ,python-nose2)))
23482 (home-page "https://gitlab.com/warsaw/flufl.testing")
23483 (synopsis "Collection of test tool plugins")
23484 (description
23485 "This package contains a small collection of test tool plugins for
23486 @code{nose2} and @code{flake8}.")
23487 (license license:asl2.0)))
23488
23489 (define-public python-devtools
23490 (package
23491 (name "python-devtools")
23492 (version "0.6")
23493 (source
23494 (origin
23495 (method git-fetch)
23496 (uri (git-reference
23497 (url "https://github.com/samuelcolvin/python-devtools")
23498 (commit (string-append "v" version))))
23499 (file-name (git-file-name name version))
23500 (sha256
23501 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
23502 (build-system python-build-system)
23503 (native-inputs
23504 `(("python-pytest" ,python-pytest)
23505 ("python-pytest-mock" ,python-pytest-mock)))
23506 (propagated-inputs
23507 `(("python-pygments" ,python-pygments)))
23508 (arguments
23509 `(#:phases (modify-phases %standard-phases
23510 (replace 'check
23511 (lambda _
23512 (invoke "pytest")
23513 #t)))))
23514 (home-page "https://github.com/samuelcolvin/python-devtools")
23515 (synopsis "Debug command and development tools")
23516 (description
23517 "This package provides a debug print command and other development tools.
23518 It adds a simple and readable way to print stuff during development.")
23519 (license license:expat)))
23520
23521 (define-public python-dateparser
23522 (package
23523 (name "python-dateparser")
23524 (version "0.7.6")
23525 (source
23526 (origin
23527 (method url-fetch)
23528 (uri (pypi-uri "dateparser" version))
23529 (sha256
23530 (base32
23531 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
23532 (build-system python-build-system)
23533 (propagated-inputs
23534 `(("python-dateutil" ,python-dateutil)
23535 ("python-pytz" ,python-pytz)
23536 ("python-regex" ,python-regex)
23537 ("python-ruamel.yaml" ,python-ruamel.yaml)
23538 ("python-tzlocal" ,python-tzlocal)))
23539 (native-inputs
23540 `(("python-mock" ,python-mock)
23541 ("python-parameterized" ,python-parameterized)
23542 ("tzdata" ,tzdata-for-tests)))
23543 (arguments
23544 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
23545 #:tests? #f
23546 #:phases
23547 (modify-phases %standard-phases
23548 (add-before 'check 'set-check-environment
23549 (lambda* (#:key inputs #:allow-other-keys)
23550 (setenv "TZ" "UTC")
23551 (setenv "TZDIR"
23552 (string-append (assoc-ref inputs "tzdata")
23553 "/share/zoneinfo"))
23554 #t)))))
23555 (home-page "https://github.com/scrapinghub/dateparser")
23556 (synopsis
23557 "Date parsing library designed to parse dates from HTML pages")
23558 (description
23559 "@code{python-dateparser} provides modules to easily parse localized
23560 dates in almost any string formats commonly found on web pages.")
23561 (license license:bsd-3)))
23562
23563 (define-public python-dparse
23564 (package
23565 (name "python-dparse")
23566 (version "0.5.1")
23567 (source
23568 (origin
23569 (method url-fetch)
23570 (uri (pypi-uri "dparse" version))
23571 (sha256
23572 (base32
23573 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
23574 (build-system python-build-system)
23575 (native-inputs
23576 `(("python-pytest" ,python-pytest)))
23577 (propagated-inputs
23578 `(("python-packaging" ,python-packaging)
23579 ("python-pyyaml" ,python-pyyaml)
23580 ("python-toml" ,python-toml)))
23581 (home-page "https://github.com/pyupio/dparse")
23582 (synopsis "Parser for Python dependency files")
23583 (description "This package provides a parser for Python dependency files.")
23584 (license license:expat)))
23585
23586 (define-public python-dpath
23587 (package
23588 (name "python-dpath")
23589 (version "2.0.1")
23590 (source
23591 (origin
23592 (method url-fetch)
23593 (uri (pypi-uri "dpath" version))
23594 (sha256
23595 (base32
23596 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
23597 (build-system python-build-system)
23598 (native-inputs
23599 `(("python-hypothesis" ,python-hypothesis)
23600 ("python-mock" ,python-mock)
23601 ("python-nose" ,python-nose)))
23602 (arguments
23603 '(#:phases
23604 (modify-phases %standard-phases
23605 (replace 'check
23606 (lambda* (#:key inputs outputs #:allow-other-keys)
23607 (add-installed-pythonpath inputs outputs)
23608 ;; This invokation is taken from tox.ini.
23609 (invoke "nosetests" "-d" "-v" "tests/"))))))
23610 (home-page "https://github.com/akesterson/dpath-python")
23611 (synopsis "File-system-like pathing and searching for dictionaries")
23612 (description
23613 "@code{python-dpath} is a library for accessing and searching
23614 dictionaries via /slashed/paths ala xpath.
23615
23616 Basically it lets you glob over a dictionary as if it were a file system. It
23617 allows you to specify globs (ala the bash eglob syntax, through some advanced
23618 fnmatch.fnmatch magic) to access dictionary elements, and provides some
23619 facility for filtering those results.")
23620 (license license:expat)))
23621
23622 (define-public python-safety
23623 (package
23624 (name "python-safety")
23625 (version "1.9.0")
23626 (source
23627 (origin
23628 (method url-fetch)
23629 (uri (pypi-uri "safety" version))
23630 (sha256
23631 (base32
23632 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
23633 (build-system python-build-system)
23634 (arguments
23635 `(#:phases
23636 (modify-phases %standard-phases
23637 (add-after 'unpack 'disable-tests
23638 (lambda _
23639 (substitute* "tests/test_safety.py"
23640 ;; requires network
23641 (("def test_check_live") "def _test_check_live"))
23642 #t)))))
23643 (propagated-inputs
23644 `(("python-click" ,python-click)
23645 ("python-dparse" ,python-dparse)
23646 ("python-packaging" ,python-packaging)
23647 ("python-requests" ,python-requests)))
23648 (home-page "https://github.com/pyupio/safety")
23649 (synopsis "Check installed dependencies for known vulnerabilities")
23650 (description "Safety checks installed dependencies for known vulnerabilities.
23651 By default it uses the open Python vulnerability database Safety DB.")
23652 (license license:expat)))
23653
23654 (define-public python-pypandoc
23655 (package
23656 (name "python-pypandoc")
23657 (version "1.5")
23658 (source
23659 (origin
23660 (method url-fetch)
23661 (uri (pypi-uri "pypandoc" version))
23662 (sha256
23663 (base32
23664 "1zvn9764cf7kkjkmr9gw6wc8adpk06qxr1rhxwa9pg0zmdvrk90l"))))
23665 (build-system python-build-system)
23666 (inputs
23667 `(("pandoc" ,pandoc)
23668 ("pandoc-citeproc" ,pandoc-citeproc)))
23669 (propagated-inputs
23670 `(("wheel" ,python-wheel)))
23671 (native-inputs
23672 `(("texlive" ,(texlive-union (list texlive-amsfonts
23673 texlive-fonts-ec
23674 texlive-latex-hyperref
23675 texlive-latex-oberdiek
23676 texlive-lm
23677 texlive-xcolor)))))
23678 (arguments
23679 `(#:phases
23680 (modify-phases %standard-phases
23681 (add-before 'check 'disable-tests
23682 (lambda _
23683 ;; Disable test requiring network access
23684 (substitute* "tests.py"
23685 (("test_basic_conversion_from_http_url")
23686 "skip_test_basic_conversion_from_http_url"))
23687 ;; Needed by texlive-union to generate fonts
23688 (setenv "HOME" "/tmp")
23689 #t)))))
23690 (home-page "https://github.com/bebraw/pypandoc")
23691 (synopsis "Python wrapper for pandoc")
23692 (description "pypandoc is a thin Python wrapper around pandoc
23693 and pandoc-citeproc.")
23694 (license license:expat)))
23695
23696 (define-public python-rnc2rng
23697 (package
23698 (name "python-rnc2rng")
23699 (version "2.6.4")
23700 (source
23701 (origin
23702 (method url-fetch)
23703 (uri (pypi-uri "rnc2rng" version))
23704 (sha256
23705 (base32
23706 "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
23707 (build-system python-build-system)
23708 (propagated-inputs
23709 `(("python-rply" ,python-rply)))
23710 (arguments
23711 `(#:phases (modify-phases %standard-phases
23712 (replace 'check
23713 (lambda _
23714 (invoke "python" "test.py"))))))
23715 (home-page "https://github.com/djc/rnc2rng")
23716 (synopsis "Convert RELAX NG Compact to regular syntax")
23717 (description
23718 "This package provides the @command{rnc2rng} command-line tool as well as
23719 a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
23720 equivalent schemata in the XML-based default RELAX NG syntax.")
23721 (license license:expat)))
23722
23723 (define-public python-telethon
23724 (package
23725 (name "python-telethon")
23726 (version "1.17.5")
23727 (source
23728 (origin
23729 (method git-fetch)
23730 (uri (git-reference
23731 (url "https://github.com/LonamiWebs/Telethon")
23732 (commit (string-append "v" version))))
23733 (file-name (git-file-name name version))
23734 (sha256
23735 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
23736 (build-system python-build-system)
23737 (arguments
23738 '(#:phases
23739 (modify-phases %standard-phases
23740 (replace 'check
23741 (lambda* (#:key tests? #:allow-other-keys)
23742 (when tests?
23743 (invoke "py.test" "-v"))
23744 #t)))))
23745 (propagated-inputs
23746 `(("python-rsa" ,python-rsa)
23747 ("python-pyaes" ,python-pyaes)))
23748 (native-inputs
23749 `(("python-pytest" ,python-pytest)
23750 ("python-pytest-asyncio" ,python-pytest-asyncio)
23751 ("python-pytest-trio" ,python-pytest-trio)))
23752 (home-page "https://docs.telethon.dev")
23753 (synopsis "Full-featured Telegram client library for Python 3")
23754 (description "This library is designed to make it easy to write Python
23755 programs that can interact with Telegram.")
23756 (license license:expat)))
23757
23758 (define-public python-citeproc-py
23759 (package
23760 (name "python-citeproc-py")
23761 (version "0.5.1")
23762 (source
23763 (origin
23764 (method url-fetch)
23765 (uri (pypi-uri "citeproc-py" version))
23766 (sha256
23767 (base32
23768 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
23769 (build-system python-build-system)
23770 (propagated-inputs
23771 `(("python-lxml" ,python-lxml)
23772 ("python-rnc2rng" ,python-rnc2rng)))
23773 (home-page
23774 "https://github.com/brechtm/citeproc-py")
23775 (synopsis "Citations and bibliography formatter")
23776 (description
23777 "Citeproc-py is a CSL processor for Python. It aims to implement the
23778 CSL 1.0.1 specification. citeproc-py can output styled citations and
23779 bibliographies in a number of different output formats. Currently supported
23780 are plain text, reStructuredText and HTML.")
23781 (license license:bsd-2)))
23782
23783 (define-public python-inform
23784 (package
23785 (name "python-inform")
23786 (version "1.23.0")
23787 (source
23788 (origin
23789 (method url-fetch)
23790 (uri (pypi-uri "inform" version))
23791 (sha256
23792 (base32
23793 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
23794 (build-system python-build-system)
23795 (arguments
23796 `(#:tests? #f)) ; PyPI tarball lacks tests
23797 (native-inputs
23798 `(("python-hypothesis" ,python-hypothesis)
23799 ("python-pytest-cov" ,python-pytest-cov)
23800 ("python-pytest-runner" ,python-pytest-runner)))
23801 (propagated-inputs
23802 `(("python-arrow" ,python-arrow)
23803 ("python-six" ,python-six)))
23804 (home-page "https://inform.readthedocs.io")
23805 (synopsis "Print & logging utilities for communicating with user")
23806 (description
23807 "Inform is designed to display messages from programs that are typically run from
23808 a console. It provides a collection of ‘print’ functions that allow you to simply and
23809 cleanly print different types of messages.")
23810 (license license:gpl3+)))
23811
23812 (define-public python-nestedtext
23813 (package
23814 (name "python-nestedtext")
23815 (version "1.0.0")
23816 (source
23817 (origin
23818 (method url-fetch)
23819 (uri (pypi-uri "nestedtext" version))
23820 (sha256
23821 (base32
23822 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
23823 (build-system python-build-system)
23824 (arguments
23825 `(#:tests? #f)) ; PyPI tarball lacks tests
23826 (propagated-inputs
23827 `(("python-inform" ,python-inform)))
23828 (home-page "https://nestedtext.org")
23829 (synopsis "Human readable and writable data interchange format")
23830 (description
23831 "NestedText is a file format for holding data that is to be entered, edited, or
23832 viewed by people. It allows data to be organized into a nested collection of
23833 dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
23834 without the complexity and risk of YAML and without the syntactic clutter of JSON.
23835 NestedText is both simple and natural. Only a small number of concepts and rules must
23836 be kept in mind when creating it. It is easily created, modified, or viewed with
23837 a text editor and easily understood and used by both programmers and non-programmers.")
23838 (license license:expat))) ; MIT license
23839
23840 (define-public python-parallel
23841 (package
23842 (name "python-parallel")
23843 (version "1.6.4.4")
23844 (source
23845 (origin
23846 (method url-fetch)
23847 (uri (string-append
23848 "https://www.parallelpython.com/downloads/pp/pp-"
23849 version ".zip"))
23850 (sha256
23851 (base32
23852 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
23853 (native-inputs
23854 `(("unzip" ,unzip)))
23855 (build-system python-build-system)
23856 (arguments '(#:tests? #f)) ; No test suite.
23857 (home-page "https://www.parallelpython.com")
23858 (synopsis "Parallel and distributed programming for Python")
23859 (description "Parallel Python module (PP) provides an easy and efficient
23860 way to create parallel-enabled applications for SMP computers and clusters.
23861 PP module features cross-platform portability and dynamic load balancing.
23862 Thus applications written with PP will parallelize efficiently even on
23863 heterogeneous and multi-platform clusters (including clusters running other
23864 applications with variable CPU loads).")
23865 (license license:bsd-3)))
23866
23867 (define-public python2-parallel
23868 (package-with-python2 python-parallel))
23869
23870 (define-public python-djvulibre
23871 (package
23872 (name "python-djvulibre")
23873 (version "0.8.5")
23874 (source
23875 (origin
23876 (method url-fetch)
23877 (uri (pypi-uri "python-djvulibre" version))
23878 (sha256
23879 (base32 "1c0lvpg7j2525cv52s3q5sg7hfnakkb8rmghg0jc02gshsxmrj4f"))))
23880 (build-system python-build-system)
23881 (native-inputs
23882 `(("ghostscript" ,ghostscript)
23883 ("pkg-config" ,pkg-config)
23884 ("python-nose" ,python-nose)))
23885 (inputs
23886 `(("djvulibre" ,djvulibre)
23887 ("python-cython" ,python-cython)))
23888 (arguments
23889 `(#:phases
23890 (modify-phases %standard-phases
23891 (add-after 'unpack 'fix-tests
23892 (lambda _
23893 ;; Unit tests try to load the 'dllpath.py' and fail, because it
23894 ;; doesn't make sense on GNU/Linux.
23895 (delete-file "djvu/dllpath.py")
23896 #t)))))
23897 (synopsis "Python bindings for DjVuLibre")
23898 (description "This is a set of Python bindings for the DjVuLibre library.")
23899 (home-page "https://jwilk.net/software/python-djvulibre")
23900 (license license:gpl2)))
23901
23902 (define-public python2-djvulibre
23903 (package-with-python2 python-djvulibre))
23904
23905 (define-public python-versioneer
23906 (package
23907 (name "python-versioneer")
23908 (version "0.19")
23909 (source
23910 (origin
23911 (method url-fetch)
23912 (uri (pypi-uri "versioneer" version))
23913 (sha256
23914 (base32
23915 "1bmg8y78am371rd9b4clf11b8g1h7xvq8q58z03jvgdwpsdx7zm4"))))
23916 (build-system python-build-system)
23917 (home-page
23918 "https://github.com/python-versioneer/python-versioneer")
23919 (synopsis
23920 "Version-string management for VCS-controlled trees")
23921 (description
23922 "@code{versioneer} is a tool for managing a recorded version number in
23923 distutils-based python projects. The goal is to remove the tedious and
23924 error-prone \"update the embedded version string\" step from your release
23925 process.")
23926 (license license:public-domain)))
23927
23928 (define-public python2-gamera
23929 (package
23930 (name "python2-gamera")
23931 (version "3.4.4")
23932 (source
23933 (origin
23934 (method url-fetch)
23935 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
23936 "gamera-" version ".tar.gz"))
23937 (sha256
23938 (base32 "1g4y1kxk1hmxfsiz682hbxvwryqilnb21ci509m559yp7hcliiyy"))
23939 (modules '((guix build utils)))
23940 (snippet
23941 '(begin
23942 ;; Remove bundled libraries.
23943 (for-each delete-file-recursively
23944 '("src/libpng-1.2.5"
23945 "src/libtiff"
23946 "src/zlib-1.2.8"))))))
23947 (build-system python-build-system)
23948 (inputs
23949 `(("libpng" ,libpng)
23950 ("libtiff" ,libtiff)
23951 ("python2-wxpython" ,python2-wxpython)
23952 ("zlib" ,zlib)))
23953 (arguments
23954 `(#:python ,python-2))
23955 (synopsis "Framework for building document analysis applications")
23956 (description
23957 "Gamera is a toolkit for building document image recognition systems.")
23958 (home-page "https://gamera.informatik.hsnr.de/")
23959 (license license:gpl2+)))
23960
23961 (define-public python-contextvars
23962 (package
23963 (name "python-contextvars")
23964 (version "2.4")
23965 (source
23966 (origin
23967 (method url-fetch)
23968 (uri (pypi-uri "contextvars" version))
23969 (sha256
23970 (base32
23971 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
23972 (build-system python-build-system)
23973 (propagated-inputs
23974 `(("python-immutables" ,python-immutables)))
23975 (home-page
23976 "https://github.com/MagicStack/contextvars")
23977 (synopsis "PEP 567 Backport")
23978 (description "This package implements a backport of Python 3.7
23979 @code{contextvars} module (see PEP 567) for Python 3.6.")
23980 (license license:asl2.0)))
23981
23982 (define-public python-aiofiles
23983 (package
23984 (name "python-aiofiles")
23985 (version "0.6.0")
23986 (source
23987 (origin
23988 (method url-fetch)
23989 (uri (pypi-uri "aiofiles" version))
23990 (sha256
23991 (base32
23992 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
23993 (build-system python-build-system)
23994 (home-page "https://github.com/Tinche/aiofiles")
23995 (synopsis "File support for @code{asyncio}")
23996 (description "@code{python-aiofiles} is a library for handling local
23997 disk files in asyncio applications.")
23998 (license license:asl2.0)))
23999
24000 (define-public python-pyre-extensions
24001 (package
24002 (name "python-pyre-extensions")
24003 (version "0.0.18")
24004 (source
24005 (origin
24006 (method url-fetch)
24007 (uri (pypi-uri "pyre-extensions" version))
24008 (sha256
24009 (base32
24010 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
24011 (build-system python-build-system)
24012 (propagated-inputs
24013 `(("python-typing-extensions"
24014 ,python-typing-extensions)
24015 ("python-typing-inspect" ,python-typing-inspect)))
24016 (home-page "https://pyre-check.org")
24017 (synopsis
24018 "Type system extensions for use with @code{python-pyre}")
24019 (description
24020 "@code{python-pyre-extensions} defines extensions to the standard
24021 @code{typing} module that are supported by the Pyre typechecker.")
24022 (license license:expat)))
24023
24024 (define-public python-dataclasses
24025 (package
24026 (name "python-dataclasses")
24027 (version "0.7")
24028 (source
24029 (origin
24030 (method url-fetch)
24031 (uri (pypi-uri "dataclasses" version))
24032 (sha256
24033 (base32
24034 "1rh8111fbws2vxyf2qy2zw3x6p6cq1jfz8pf904gig5qwg56sjj9"))))
24035 (build-system python-build-system)
24036 (home-page
24037 "https://github.com/ericvsmith/dataclasses")
24038 (synopsis
24039 "Backport of the @code{dataclasses} module for Python 3.6")
24040 (description
24041 "This is an implementation of PEP 557, Data Classes. It is a
24042 backport of the @code{dataclasses} module for Python 3.6.")
24043 (license license:asl2.0)))
24044
24045 (define-public python-pywatchman
24046 (package
24047 (name "python-pywatchman")
24048 (version "1.4.1")
24049 (source
24050 (origin
24051 (method url-fetch)
24052 (uri (pypi-uri "pywatchman" version))
24053 (sha256
24054 (base32
24055 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
24056 (build-system python-build-system)
24057 (arguments
24058 `(#:tests? #f)) ;there are none
24059 (home-page
24060 "https://facebook.github.io/watchman/")
24061 (synopsis "Watchman client for python")
24062 (description "@code{python-pywatchman} is a library to connect and
24063 query Watchman to discover file changes.")
24064 (license license:bsd-3)))
24065
24066 (define-public python-helpdev
24067 (package
24068 (name "python-helpdev")
24069 (version "0.7.1")
24070 (source
24071 (origin
24072 (method url-fetch)
24073 (uri (pypi-uri "helpdev" version))
24074 (sha256
24075 (base32
24076 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
24077 (build-system python-build-system)
24078 (arguments
24079 `(#:phases
24080 (modify-phases %standard-phases
24081 (replace 'check
24082 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24083 (when tests?
24084 (add-installed-pythonpath inputs outputs)
24085 (invoke "pytest" "tests"))
24086 #t)))))
24087 (propagated-inputs
24088 `(("python-importlib-metadata" ,python-importlib-metadata)))
24089 (native-inputs
24090 `(("python-pytest" ,python-pytest)))
24091 (home-page "https://gitlab.com/dpizetta/helpdev")
24092 (synopsis
24093 "Extract information about the Python environment easily")
24094 (description
24095 "Helpdev is a library to easily extract information about the Python
24096 environment.")
24097 (license license:expat)))
24098
24099 (define-public python-qdarkstyle
24100 (package
24101 (name "python-qdarkstyle")
24102 (version "2.8.1")
24103 (source
24104 (origin
24105 (method url-fetch)
24106 (uri (pypi-uri "QDarkStyle" version))
24107 (sha256
24108 (base32
24109 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
24110 (build-system python-build-system)
24111 (arguments
24112 `(;; Fails unable to detect valid Qt bindings even when
24113 ;; added as native-inputs.
24114 #:tests? #f))
24115 (propagated-inputs
24116 `(("python-helpdev" ,python-helpdev)
24117 ("python-qtpy" ,python-qtpy)))
24118 (home-page
24119 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
24120 (synopsis
24121 "Complete dark stylesheet for Python and Qt applications")
24122 (description "QDarkStyle is the most complete dark stylesheet for Python and
24123 Qt applications.")
24124 (license license:expat)))
24125
24126 (define-public python-bitstring
24127 (package
24128 (name "python-bitstring")
24129 (version "3.1.7")
24130 (source
24131 (origin
24132 (method url-fetch)
24133 (uri (pypi-uri "bitstring" version))
24134 (sha256
24135 (base32
24136 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
24137 (build-system python-build-system)
24138 (arguments
24139 `(#:phases
24140 (modify-phases %standard-phases
24141 (replace 'check
24142 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
24143 (when tests?
24144 (add-installed-pythonpath inputs outputs)
24145 (with-directory-excursion "test"
24146 (invoke "pytest")))
24147 #t)))))
24148 (native-inputs
24149 `(("python-pytest" ,python-pytest)))
24150 (home-page "https://github.com/scott-griffiths/bitstring")
24151 (synopsis
24152 "Simple construction, analysis and modification of binary data")
24153 (description
24154 "Bitstring is a library for simple construction, analysis and modification
24155 of binary data.")
24156 (license license:expat)))
24157
24158 (define-public python-confuse
24159 (package
24160 (name "python-confuse")
24161 (version "1.4.0")
24162 (source
24163 (origin
24164 (method url-fetch)
24165 (uri (pypi-uri "confuse" version))
24166 (sha256
24167 (base32
24168 "0r74djc8r6lfx6ldsqnhpvfsn256gsfzbl33qcm77hp2qr8h9z4j"))))
24169 (build-system python-build-system)
24170 (propagated-inputs
24171 `(("python-pathlib" ,python-pathlib)
24172 ("python-pyyaml" ,python-pyyaml)))
24173 (home-page "https://github.com/beetbox/confuse")
24174 (synopsis "Painless YAML configuration.")
24175 (description "Confuse is a configuration library for Python that uses
24176 YAML. It takes care of defaults, overrides, type checking, command-line
24177 integration, human-readable errors, and standard OS-specific locations.")
24178 (license license:expat)))
24179
24180 (define-public python-reflink
24181 (package
24182 (name "python-reflink")
24183 (version "0.2.1")
24184 (source
24185 (origin
24186 (method url-fetch)
24187 (uri (pypi-uri "reflink" version))
24188 (sha256
24189 (base32
24190 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
24191 (build-system python-build-system)
24192 (arguments
24193 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
24194 (propagated-inputs
24195 `(("python-cffi" ,python-cffi)))
24196 (native-inputs
24197 `(("python-pytest" ,python-pytest)
24198 ("python-pytest-runner" ,python-pytest-runner)))
24199 (home-page "https://gitlab.com/rubdos/pyreflink")
24200 (synopsis "Python wrapper around reflink system call")
24201 (description
24202 "Python reflink wraps around platform specific @code{reflink}
24203 implementations.")
24204 (license license:expat)))
24205
24206 (define-public python-pivy
24207 (package
24208 (name "python-pivy")
24209 (version "0.6.5")
24210 (source
24211 (origin
24212 (method git-fetch)
24213 (uri (git-reference
24214 (url "https://github.com/coin3d/pivy")
24215 (commit version)))
24216 (file-name (git-file-name name version))
24217 (sha256
24218 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
24219 (build-system python-build-system)
24220 (arguments
24221 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
24222 #:tests? #f
24223 #:phases
24224 (modify-phases %standard-phases
24225 (add-after 'unpack 'patch-cmake-include-dirs
24226 (lambda _
24227 ;; Patch buildsystem to respect Coin3D include directory
24228 (substitute* "CMakeLists.txt"
24229 (("\\$\\{SoQt_INCLUDE_DIRS}")
24230 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
24231 #t)))))
24232 (native-inputs
24233 `(("cmake" ,cmake)
24234 ("swig" ,swig)))
24235 (inputs
24236 `(("python-wrapper" ,python-wrapper)
24237 ("qtbase" ,qtbase)
24238 ("libxi" ,libxi)
24239 ("libice" ,libice)
24240 ("soqt" ,soqt)
24241 ("glew" ,glew)
24242 ("coin3D" ,coin3D-4)))
24243 (home-page "https://github.com/coin3d/pivy")
24244 (synopsis "Python bindings to Coin3D")
24245 (description
24246 "Pivy provides python bindings for Coin, a 3D graphics library with an
24247 Application Programming Interface based on the Open Inventor 2.1 API.")
24248 (license license:isc)))
24249
24250 (define-public python-crayons
24251 (package
24252 (name "python-crayons")
24253 (version "0.4.0")
24254 (source
24255 (origin
24256 (method url-fetch)
24257 (uri (pypi-uri "crayons" version))
24258 (sha256
24259 (base32
24260 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
24261 (build-system python-build-system)
24262 (propagated-inputs
24263 `(("python-colorama" ,python-colorama)))
24264 (home-page "https://github.com/MasterOdin/crayons")
24265 (synopsis "TextUI colors for Python")
24266 (description "This package gives you colored strings for the terminal.
24267 Crayons automatically wraps a given string in the foreground color and
24268 restores the original state after the string is printed.")
24269 (license license:expat)))
24270
24271 (define-public python-sane
24272 (package
24273 (name "python-sane")
24274 (version "2.9.1")
24275 (source
24276 (origin
24277 (method url-fetch)
24278 (uri (pypi-uri name version))
24279 (sha256
24280 (base32
24281 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
24282 (build-system python-build-system)
24283 (native-inputs
24284 `(("python-pytest" ,python-pytest)))
24285 (inputs
24286 `(("sane-backends" ,sane-backends)))
24287 (home-page "https://github.com/python-pillow/Sane")
24288 (synopsis "Python interface to the SANE scanner")
24289 (description "This package provides Python interface to the SANE scanner
24290 and frame grabber interface.")
24291 (license (license:non-copyleft
24292 ;; Yet another variant of the X/MIT license.
24293 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
24294
24295 (define-public python-screenkey
24296 (package
24297 (name "python-screenkey")
24298 (version "1.4")
24299 (source
24300 (origin
24301 (method git-fetch)
24302 (uri (git-reference
24303 (url "https://gitlab.com/screenkey/screenkey")
24304 (commit (string-append "v" version))))
24305 (file-name (git-file-name name version))
24306 (sha256
24307 (base32
24308 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
24309 (build-system python-build-system)
24310 (arguments
24311 `(#:phases
24312 (modify-phases %standard-phases
24313 (add-after 'unpack 'fix-dlopen-paths
24314 (lambda* (#:key inputs outputs #:allow-other-keys)
24315 (let* ((x11 (assoc-ref inputs "libx11"))
24316 (xtst (assoc-ref inputs "libxtst")))
24317 (substitute* "Screenkey/xlib.py"
24318 (("libX11.so.6")
24319 (string-append x11 "/lib/libX11.so.6")))
24320 (substitute* "Screenkey/xlib.py"
24321 (("libXtst.so.6")
24322 (string-append xtst "/lib/libXtst.so.6")))
24323 #t)))
24324 (add-after 'install 'wrap-screenkey
24325 (lambda* (#:key outputs #:allow-other-keys)
24326 (wrap-program
24327 (string-append (assoc-ref outputs "out") "/bin/screenkey")
24328 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
24329 `("GI_TYPELIB_PATH"
24330 ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
24331 #t)))))
24332 (inputs
24333 `(("python-distutils-extra" ,python-distutils-extra)
24334 ("python-tokenize-rt" ,python-tokenize-rt)
24335 ("libx11" ,libx11)
24336 ("libxtst" ,libxtst)
24337 ("gtk+" ,gtk+)
24338 ("python-pygobject" ,python-pygobject)
24339 ("python-pycairo" ,python-pycairo)
24340 ("python-setuptools-git" ,python-setuptools-git)
24341 ("python-babel" ,python-babel)))
24342 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
24343 (synopsis
24344 "Screencast tool to display pressed keys")
24345 (description
24346 "A screencast tool to display your keys inspired by Screenflick.")
24347 (license license:gpl3+)))
24348
24349 (define-public python-jinja2-cli
24350 (package
24351 (name "python-jinja2-cli")
24352 (version "0.7.0")
24353 (source
24354 (origin
24355 (method url-fetch)
24356 (uri (pypi-uri "jinja2-cli" version))
24357 (sha256
24358 (base32
24359 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
24360 (build-system python-build-system)
24361 (propagated-inputs
24362 `(("python-jinja2" ,python-jinja2)))
24363 (native-inputs
24364 `(("python-flake8" ,python-flake8)
24365 ("python-jinja2" ,python-jinja2)
24366 ("python-pytest" ,python-pytest)))
24367 (home-page "https://github.com/mattrobenolt/jinja2-cli")
24368 (synopsis "Command-line interface to Jinja2")
24369 (description
24370 "This package provides a command-line interface (CLI) to the Jinja2
24371 template engine.")
24372 (license license:bsd-3)))
24373
24374 (define-public python-readability
24375 (package
24376 (name "python-readability")
24377 (version "0.3.1")
24378 (source
24379 (origin
24380 (method url-fetch)
24381 (uri (pypi-uri "readability" version))
24382 (sha256
24383 (base32
24384 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
24385 (build-system python-build-system)
24386 (home-page
24387 "https://github.com/andreasvc/readability/")
24388 (synopsis
24389 "Measure the readability of a given text using surface
24390 characteristics")
24391 (description
24392 "This package provides a Python library that is an implementation of
24393 traditional readability measures based on simple surface
24394 characteristics. These measures are basically linear regressions based on the
24395 number of words, syllables, and sentences.")
24396 (license license:asl2.0)))
24397
24398 (define-public python-listparser
24399 (package
24400 (name "python-listparser")
24401 (version "0.18")
24402 (source
24403 (origin
24404 (method url-fetch)
24405 (uri (pypi-uri "listparser" version))
24406 (sha256
24407 (base32
24408 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
24409 (build-system python-build-system)
24410 (home-page
24411 "https://github.com/kurtmckee/listparser")
24412 (synopsis
24413 "Parse subscription lists in Python")
24414 (description
24415 "This package provides a Python library that can parse OPML, FOAF, and
24416 iGoogle subscription lists.")
24417 (license license:expat)))
24418
24419 (define-public python-smartypants
24420 (package
24421 (name "python-smartypants")
24422 (version "2.0.1")
24423 (source
24424 (origin
24425 ;; There's no source tarball for 2.0.1 on PyPI.
24426 (method git-fetch)
24427 (uri (git-reference
24428 (url "https://github.com/leohemsted/smartypants.py")
24429 (commit (string-append "v" version))))
24430 (file-name (git-file-name name version))
24431 (sha256
24432 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
24433 (build-system python-build-system)
24434 (arguments
24435 '(#:phases
24436 (modify-phases %standard-phases
24437 (replace 'check
24438 ;; Its `setup.py test` doesn't report failure with exit status, so
24439 ;; we use `nose` instead.
24440 (lambda _
24441 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
24442 (native-inputs
24443 ;; For tests.
24444 `(("python-docutils" ,python-docutils)
24445 ("python-nose" ,python-nose)
24446 ("python-pygments" ,python-pygments)))
24447 (home-page "https://github.com/leohemsted/smartypants.py")
24448 (synopsis "Translate punctuation characters into smart quotes")
24449 (description
24450 "@command{smartpants} can perform the following transformations:
24451 @enumerate
24452 @item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
24453 @item Backticks-style quotes (``like this'') into \"curly\" quote HTML
24454 entities
24455 @item Dashes (-- and ---) into en- and em-dash entities
24456 @item Three consecutive dots (... or . . .) into an ellipsis entity
24457 @end enumerate")
24458 (license license:bsd-3)))
24459
24460 (define-public python-typogrify
24461 (package
24462 (name "python-typogrify")
24463 (version "2.0.7")
24464 (source (origin
24465 (method url-fetch)
24466 (uri (pypi-uri "typogrify" version))
24467 (sha256
24468 (base32
24469 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
24470 (build-system python-build-system)
24471 (arguments
24472 '(#:phases
24473 (modify-phases %standard-phases
24474 (replace 'check
24475 (lambda _
24476 (invoke "nosetests" "-v"))))))
24477 (propagated-inputs
24478 `(("python-smartypants" ,python-smartypants)))
24479 (native-inputs
24480 ;; For tests.
24481 `(("python-nose" ,python-nose)))
24482 (home-page "https://github.com/mintchaos/typogrify")
24483 (synopsis "Filters to transform text into typographically-improved HTML")
24484 (description
24485 "@code{typogrify} provides a set of custom filters that automatically
24486 apply various transformations to plain text in order to yield
24487 typographically-improved HTML. While often used in conjunction with Jinja and
24488 Django template systems, the filters can be used in any environment.")
24489 (license license:bsd-3)))
24490
24491 (define-public python-pathvalidate
24492 (package
24493 (name "python-pathvalidate")
24494 (version "2.4.1")
24495 (source
24496 (origin
24497 (method url-fetch)
24498 (uri (pypi-uri "pathvalidate" version))
24499 (sha256
24500 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
24501 (build-system python-build-system)
24502 (arguments
24503 '(#:tests? #f))
24504 ;; Tests disabled because of circular dependencies.
24505 ;; pathvalidate tests depend on pytest-md-report, which
24506 ;; depends on pathvalidate.
24507 (native-inputs
24508 `(("python-allpairspy" ,python-allpairspy)
24509 ("python-click" ,python-click)
24510 ("python-faker" ,python-faker)
24511 ("python-pytest" ,python-pytest)))
24512 (home-page "https://github.com/thombashi/pathvalidate")
24513 (synopsis "Sanitize strings representing paths")
24514 (description
24515 "@code{pathvalidate} is a Python library to sanitize/validate strings
24516 representing paths or filenames.")
24517 (license license:expat)))