Merge branch 'master' into staging
[jackhill/guix/guix.git] / gnu / packages / python.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016 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 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 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015 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 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 Troy Sankey <sankeytms@gmail.com>
26 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
27 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
28 ;;; Copyright © 2016 David Craven <david@craven.ch>
29 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
32 ;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
33 ;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
34 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
35 ;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
36 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
37 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
38 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
39 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
40 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
41 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
42 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
43 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
44 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
45 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
46 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
47 ;;;
48 ;;; This file is part of GNU Guix.
49 ;;;
50 ;;; GNU Guix is free software; you can redistribute it and/or modify it
51 ;;; under the terms of the GNU General Public License as published by
52 ;;; the Free Software Foundation; either version 3 of the License, or (at
53 ;;; your option) any later version.
54 ;;;
55 ;;; GNU Guix is distributed in the hope that it will be useful, but
56 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
57 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
58 ;;; GNU General Public License for more details.
59 ;;;
60 ;;; You should have received a copy of the GNU General Public License
61 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
62
63 (define-module (gnu packages python)
64 #:use-module ((guix licenses) #:prefix license:)
65 #:use-module (gnu packages)
66 #:use-module (gnu packages algebra)
67 #:use-module (gnu packages adns)
68 #:use-module (gnu packages attr)
69 #:use-module (gnu packages backup)
70 #:use-module (gnu packages bash)
71 #:use-module (gnu packages check)
72 #:use-module (gnu packages compression)
73 #:use-module (gnu packages crypto)
74 #:use-module (gnu packages databases)
75 #:use-module (gnu packages django)
76 #:use-module (gnu packages file)
77 #:use-module (gnu packages fontutils)
78 #:use-module (gnu packages gcc)
79 #:use-module (gnu packages ghostscript)
80 #:use-module (gnu packages gl)
81 #:use-module (gnu packages glib)
82 #:use-module (gnu packages graphviz)
83 #:use-module (gnu packages graphics)
84 #:use-module (gnu packages gstreamer)
85 #:use-module (gnu packages gtk)
86 #:use-module (gnu packages icu4c)
87 #:use-module (gnu packages image)
88 #:use-module (gnu packages imagemagick)
89 #:use-module (gnu packages libevent)
90 #:use-module (gnu packages libffi)
91 #:use-module (gnu packages linux)
92 #:use-module (gnu packages man)
93 #:use-module (gnu packages maths)
94 #:use-module (gnu packages multiprecision)
95 #:use-module (gnu packages networking)
96 #:use-module (gnu packages ncurses)
97 #:use-module (gnu packages openstack)
98 #:use-module (gnu packages password-utils)
99 #:use-module (gnu packages pcre)
100 #:use-module (gnu packages perl)
101 #:use-module (gnu packages pkg-config)
102 #:use-module (gnu packages protobuf)
103 #:use-module (gnu packages qt)
104 #:use-module (gnu packages readline)
105 #:use-module (gnu packages sdl)
106 #:use-module (gnu packages search)
107 #:use-module (gnu packages shells)
108 #:use-module (gnu packages ssh)
109 #:use-module (gnu packages statistics)
110 #:use-module (gnu packages tex)
111 #:use-module (gnu packages texinfo)
112 #:use-module (gnu packages tls)
113 #:use-module (gnu packages version-control)
114 #:use-module (gnu packages video)
115 #:use-module (gnu packages web)
116 #:use-module (gnu packages base)
117 #:use-module (gnu packages xml)
118 #:use-module (gnu packages xorg)
119 #:use-module (gnu packages xdisorg)
120 #:use-module (gnu packages tcl)
121 #:use-module (gnu packages bdw-gc)
122 #:use-module (guix packages)
123 #:use-module (guix download)
124 #:use-module (guix git-download)
125 #:use-module (guix utils)
126 #:use-module (guix build-system gnu)
127 #:use-module (guix build-system cmake)
128 #:use-module (guix build-system python)
129 #:use-module (guix build-system trivial)
130 #:use-module (srfi srfi-1))
131
132 (define-public python-2.7
133 (package
134 (name "python")
135 (version "2.7.13")
136 (source
137 (origin
138 (method url-fetch)
139 (uri (string-append "https://www.python.org/ftp/python/"
140 version "/Python-" version ".tar.xz"))
141 (sha256
142 (base32
143 "0cgpk3zk0fgpji59pb4zy9nzljr70qzgv1vpz5hq5xw2d2c47m9m"))
144 (patches (search-patches "python-2.7-search-paths.patch"
145 "python-2-deterministic-build-info.patch"
146 "python-2.7-site-prefixes.patch"
147 "python-2.7-source-date-epoch.patch"
148 "python-2.7-getentropy-on-old-kernels.patch"))
149 (modules '((guix build utils)))
150 ;; suboptimal to delete failing tests here, but if we delete them in the
151 ;; arguments then we need to make sure to strip out that phase when it
152 ;; gets inherited by python and python-minimal.
153 (snippet
154 '(begin
155 (for-each delete-file
156 '("Lib/test/test_compileall.py"
157 "Lib/test/test_ctypes.py" ; fails on mips64el
158 "Lib/test/test_distutils.py"
159 "Lib/test/test_import.py"
160 "Lib/test/test_shutil.py"
161 "Lib/test/test_socket.py"
162 "Lib/test/test_subprocess.py"))
163 #t))))
164 (outputs '("out"
165 "tk")) ;tkinter; adds 50 MiB to the closure
166 (build-system gnu-build-system)
167 (arguments
168 `(;; 356 tests OK.
169 ;; 6 tests failed:
170 ;; test_compileall test_distutils test_import test_shutil test_socket
171 ;; test_subprocess
172 ;; 39 tests skipped:
173 ;; test_aepack test_al test_applesingle test_bsddb test_bsddb185
174 ;; test_bsddb3 test_cd test_cl test_codecmaps_cn test_codecmaps_hk
175 ;; test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_curses
176 ;; test_dl test_gdb test_gl test_imageop test_imgfile test_ioctl
177 ;; test_kqueue test_linuxaudiodev test_macos test_macostools
178 ;; test_msilib test_ossaudiodev test_scriptpackages test_smtpnet
179 ;; test_socketserver test_startfile test_sunaudiodev test_timeout
180 ;; test_tk test_ttk_guionly test_urllib2net test_urllibnet
181 ;; test_winreg test_winsound test_zipfile64
182 ;; 4 skips unexpected on linux2:
183 ;; test_bsddb test_bsddb3 test_gdb test_ioctl
184 #:test-target "test"
185 #:configure-flags
186 (list "--enable-shared" ;allow embedding
187 "--with-system-ffi" ;build ctypes
188 "--with-ensurepip=install" ;install pip and setuptools
189 "--enable-unicode=ucs4"
190 (string-append "LDFLAGS=-Wl,-rpath="
191 (assoc-ref %outputs "out") "/lib"))
192
193 #:modules ((ice-9 ftw) (ice-9 match)
194 (guix build utils) (guix build gnu-build-system))
195 #:phases
196 (modify-phases %standard-phases
197 (add-before
198 'configure 'patch-lib-shells
199 (lambda _
200 ;; Filter for existing files, since some may not exist in all
201 ;; versions of python that are built with this recipe.
202 (substitute* (filter file-exists?
203 '("Lib/subprocess.py"
204 "Lib/popen2.py"
205 "Lib/distutils/tests/test_spawn.py"
206 "Lib/test/test_subprocess.py"))
207 (("/bin/sh") (which "sh")))
208
209 ;; Use zero as the timestamp in .pyc files so that builds are
210 ;; deterministic. TODO: Remove it when this variable is set in
211 ;; gnu-build-system.scm.
212 (setenv "SOURCE_DATE_EPOCH" "1")
213 #t))
214 (add-before 'configure 'do-not-record-configure-flags
215 (lambda* (#:key configure-flags #:allow-other-keys)
216 ;; Remove configure flags from the installed '_sysconfigdata.py'
217 ;; and 'Makefile' so we don't end up keeping references to the
218 ;; build tools.
219 ;;
220 ;; Preserve at least '--with-system-ffi' since otherwise the
221 ;; thing tries to build libffi, fails, and we end up with a
222 ;; Python that lacks ctypes.
223 (substitute* "configure"
224 (("^CONFIG_ARGS=.*$")
225 (format #f "CONFIG_ARGS='~a'\n"
226 (if (member "--with-system-ffi" configure-flags)
227 "--with-system-ffi"
228 ""))))
229 #t))
230 (add-before
231 'check 'pre-check
232 (lambda _
233 ;; 'Lib/test/test_site.py' needs a valid $HOME
234 (setenv "HOME" (getcwd))
235 #t))
236 (add-after
237 'unpack 'set-source-file-times-to-1980
238 ;; XXX One of the tests uses a ZIP library to pack up some of the
239 ;; source tree, and fails with "ZIP does not support timestamps
240 ;; before 1980". Work around this by setting the file times in the
241 ;; source tree to sometime in early 1980.
242 (lambda _
243 (let ((circa-1980 (* 10 366 24 60 60)))
244 (ftw "." (lambda (file stat flag)
245 (utime file circa-1980 circa-1980)
246 #t))
247 #t)))
248 (add-after 'install 'remove-tests
249 ;; Remove 25 MiB of unneeded unit tests. Keep test_support.*
250 ;; because these files are used by some libraries out there.
251 (lambda* (#:key outputs #:allow-other-keys)
252 (let ((out (assoc-ref outputs "out")))
253 (match (scandir (string-append out "/lib")
254 (lambda (name)
255 (string-prefix? "python" name)))
256 ((pythonX.Y)
257 (let ((testdir (string-append out "/lib/" pythonX.Y
258 "/test")))
259 (with-directory-excursion testdir
260 (for-each delete-file-recursively
261 (scandir testdir
262 (match-lambda
263 ((or "." "..") #f)
264 (file
265 (not
266 (string-prefix? "test_support."
267 file))))))
268 (call-with-output-file "__init__.py" (const #t))
269 #t)))))))
270 (add-before 'strip 'make-libraries-writable
271 (lambda* (#:key outputs #:allow-other-keys)
272 ;; Make .so files writable so they can be stripped.
273 (let ((out (assoc-ref outputs "out")))
274 (for-each (lambda (file)
275 (chmod file #o755))
276 (find-files (string-append out "/lib")
277 "\\.so"))
278 #t)))
279 (add-after 'install 'move-tk-inter
280 (lambda* (#:key outputs #:allow-other-keys)
281 ;; When Tkinter support is built move it to a separate output so
282 ;; that the main output doesn't contain a reference to Tcl/Tk.
283 (let ((out (assoc-ref outputs "out"))
284 (tk (assoc-ref outputs "tk")))
285 (when tk
286 (match (find-files out "tkinter.*\\.so")
287 ((tkinter.so)
288 ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
289 ;; want it under TK/lib/pythonX.Y/site-packages.
290 (let* ((len (string-length out))
291 (target (string-append
292 tk "/"
293 (string-drop
294 (dirname (dirname tkinter.so))
295 len)
296 "/site-packages")))
297 (install-file tkinter.so target)
298 (delete-file tkinter.so)))))
299 #t))))))
300 (inputs
301 `(("bzip2" ,bzip2)
302 ("gdbm" ,gdbm)
303 ("libffi" ,libffi) ; for ctypes
304 ("sqlite" ,sqlite) ; for sqlite extension
305 ("openssl" ,openssl)
306 ("readline" ,readline)
307 ("zlib" ,zlib)
308 ("tcl" ,tcl)
309 ("tk" ,tk))) ; for tkinter
310 (native-inputs
311 `(("pkg-config" ,pkg-config)))
312 (native-search-paths
313 (list (search-path-specification
314 (variable "PYTHONPATH")
315 (files '("lib/python2.7/site-packages")))))
316 (home-page "https://www.python.org")
317 (synopsis "High-level, dynamically-typed programming language")
318 (description
319 "Python is a remarkably powerful dynamic programming language that
320 is used in a wide variety of application domains. Some of its key
321 distinguishing features include: clear, readable syntax; strong
322 introspection capabilities; intuitive object orientation; natural
323 expression of procedural code; full modularity, supporting hierarchical
324 packages; exception-based error handling; and very high level dynamic
325 data types.")
326 (license license:psfl)))
327
328 ;; Current 2.x version.
329 (define-public python-2 python-2.7)
330
331 (define-public python-3.5
332 (package (inherit python-2)
333 (version "3.5.3")
334 (source (origin
335 (method url-fetch)
336 (uri (string-append "https://www.python.org/ftp/python/"
337 version "/Python-" version ".tar.xz"))
338 (patches (search-patches
339 "python-fix-tests.patch"
340 "python-3.5-fix-tests.patch"
341 "python-3.5-getentropy-on-old-kernels.patch"
342 "python-3-deterministic-build-info.patch"
343 "python-3-search-paths.patch"))
344 (patch-flags '("-p0"))
345 (sha256
346 (base32
347 "1c6v1n9nz4mlx9mw1125fxpmbrgniqdbbx9hnqx44maqazb2mzpf"))
348 (snippet
349 '(begin
350 (for-each delete-file
351 '("Lib/ctypes/test/test_win32.py" ; fails on aarch64
352 "Lib/test/test_fcntl.py"))
353 #t))))
354 (arguments (substitute-keyword-arguments (package-arguments python-2)
355 ((#:tests? _) #t)))
356 (native-search-paths
357 (list (search-path-specification
358 (variable "PYTHONPATH")
359 (files (list (string-append "lib/python"
360 (version-major+minor version)
361 "/site-packages"))))))))
362
363 ;; Current 3.x version.
364 (define-public python-3 python-3.5)
365
366 ;; Current major version.
367 (define-public python python-3)
368
369 ;; Minimal variants of Python, mostly used to break the cycle between Tk and
370 ;; Python (Tk -> libxcb -> Python.)
371
372 (define-public python2-minimal
373 (package (inherit python-2)
374 (name "python-minimal")
375 (outputs '("out"))
376
377 ;; Keep zlib, which is used by 'pip' (via the 'zipimport' module), which
378 ;; is invoked upon 'make install'. 'pip' also expects 'ctypes' and thus
379 ;; libffi.
380 (inputs `(("libffi" ,libffi)
381 ("zlib" ,zlib)))))
382
383 (define-public python-minimal
384 (package (inherit python)
385 (name "python-minimal")
386 (outputs '("out"))
387
388 ;; Build fails due to missing ctypes without libffi.
389 ;; OpenSSL is a mandatory dependency of Python 3.x, for urllib;
390 ;; zlib is required by 'zipimport', used by pip.
391 (inputs `(("libffi" ,libffi)
392 ("openssl" ,openssl)
393 ("zlib" ,zlib)))))
394
395 (define* (wrap-python3 python
396 #:optional
397 (name (string-append (package-name python) "-wrapper")))
398 (package (inherit python)
399 (name name)
400 (source #f)
401 (build-system trivial-build-system)
402 (outputs '("out"))
403 (inputs `(("bash" ,bash)))
404 (propagated-inputs `(("python" ,python)))
405 (arguments
406 `(#:modules ((guix build utils))
407 #:builder
408 (begin
409 (use-modules (guix build utils))
410 (let ((bin (string-append (assoc-ref %outputs "out") "/bin"))
411 (python (string-append (assoc-ref %build-inputs "python") "/bin/")))
412 (mkdir-p bin)
413 (for-each
414 (lambda (old new)
415 (symlink (string-append python old)
416 (string-append bin "/" new)))
417 `("python3" ,"pydoc3" ,"idle3" ,"pip3")
418 `("python" ,"pydoc" ,"idle" ,"pip"))
419 ;; python-config outputs search paths based upon its location,
420 ;; use a bash wrapper to avoid changing its outputs.
421 (let ((bash (string-append (assoc-ref %build-inputs "bash")
422 "/bin/bash"))
423 (old (string-append python "python3-config"))
424 (new (string-append bin "/python-config")))
425 (with-output-to-file new
426 (lambda ()
427 (format #t "#!~a~%" bash)
428 (format #t "exec \"~a\" \"$@\"~%" old)
429 (chmod new #o755)
430 #t)))))))
431 (synopsis "Wrapper for the Python 3 commands")
432 (description
433 "This package provides wrappers for the commands of Python@tie{}3.x such
434 that they can be invoked under their usual name---e.g., @command{python}
435 instead of @command{python3}.")))
436
437 (define-public python-wrapper (wrap-python3 python))
438 (define-public python-minimal-wrapper (wrap-python3 python-minimal))
439
440 (define-public python-psutil
441 (package
442 (name "python-psutil")
443 (version "4.3.0")
444 (source
445 (origin
446 (method url-fetch)
447 (uri (pypi-uri "psutil" version))
448 (sha256
449 (base32
450 "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6"))))
451 (build-system python-build-system)
452 (arguments
453 ;; FIXME: some tests does not return and times out.
454 '(#:tests? #f))
455 (home-page "https://www.github.com/giampaolo/psutil")
456 (synopsis "Library for retrieving information on running processes")
457 (description
458 "psutil (Python system and process utilities) is a library for retrieving
459 information on running processes and system utilization (CPU, memory, disks,
460 network) in Python. It is useful mainly for system monitoring, profiling and
461 limiting process resources and management of running processes. It implements
462 many functionalities offered by command line tools such as: ps, top, lsof,
463 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
464 pidof, tty, taskset, pmap.")
465 (license license:bsd-3)))
466
467 (define-public python2-psutil
468 (package-with-python2 python-psutil))
469
470 (define-public python-passlib
471 (package
472 (name "python-passlib")
473 (version "1.7.1")
474 (source
475 (origin
476 (method url-fetch)
477 (uri (pypi-uri "passlib" version))
478 (sha256
479 (base32
480 "1q2khqpj9rlcgdmkypjdq1kswvhjf72bq0zk2cv669cc2dj8z51x"))))
481 (build-system python-build-system)
482 (native-inputs
483 `(("python-nose" ,python-nose)))
484 (propagated-inputs
485 `(("python-py-bcrypt" ,python-py-bcrypt)))
486 (arguments
487 `(#:phases
488 (alist-cons-before
489 'check 'set-PYTHON_EGG_CACHE
490 ;; some tests require access to "$HOME/.cython"
491 (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp"))
492 %standard-phases)))
493 (home-page "https://bitbucket.org/ecollins/passlib")
494 (synopsis
495 "Comprehensive password hashing framework")
496 (description
497 "Passlib is a password hashing library for Python 2 & 3, which provides
498 cross-platform implementations of over 30 password hashing algorithms, as well
499 as a framework for managing existing password hashes. It's designed to be
500 useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
501 to providing full-strength password hashing for multi-user application.")
502 (license license:bsd-3)))
503
504 (define-public python2-passlib
505 (package-with-python2 python-passlib))
506
507 (define-public python-py-bcrypt
508 (package
509 (name "python-py-bcrypt")
510 (version "0.4")
511 (source
512 (origin
513 (method url-fetch)
514 (uri (string-append
515 "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-"
516 version
517 ".tar.gz"))
518 (sha256
519 (base32
520 "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
521 (build-system python-build-system)
522 (home-page "https://code.google.com/p/py-bcrypt")
523 (synopsis
524 "Bcrypt password hashing and key derivation")
525 (description
526 "A python wrapper of OpenBSD's Blowfish password hashing code. This
527 system hashes passwords using a version of Bruce Schneier's Blowfish block
528 cipher with modifications designed to raise the cost of off-line password
529 cracking and frustrate fast hardware implementation. The computation cost of
530 the algorithm is parametised, so it can be increased as computers get faster.
531 The intent is to make a compromise of a password database less likely to
532 result in an attacker gaining knowledge of the plaintext passwords (e.g. using
533 John the Ripper).")
534 ;; "sha2.c" is under BSD-3;
535 ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
536 ;; the rest is under ISC.
537 (license (list license:isc license:bsd-3 license:bsd-4))))
538
539 (define-public python2-py-bcrypt
540 (package-with-python2 python-py-bcrypt))
541
542
543 (define-public python-paramiko
544 (package
545 (name "python-paramiko")
546 (version "2.1.2")
547 (source
548 (origin
549 (method url-fetch)
550 (uri (pypi-uri "paramiko" version))
551 (sha256
552 (base32
553 "04734n0wy3hxk6rij4fr29in5jmr70nxpc7pqi2ksbjysfz4kbjz"))))
554 (build-system python-build-system)
555 (arguments
556 '(#:phases
557 (modify-phases %standard-phases
558 (replace 'check
559 (lambda _
560 (zero? (system* "python" "test.py")))))))
561 (propagated-inputs
562 `(("python-pyasn1" ,python-pyasn1)
563 ("python-cryptography" ,python-cryptography)))
564 (home-page "http://www.paramiko.org/")
565 (synopsis "SSHv2 protocol library")
566 (description "Paramiko is a python implementation of the SSHv2 protocol,
567 providing both client and server functionality. While it leverages a Python C
568 extension for low level cryptography (PyCrypto), Paramiko itself is a pure
569 Python interface around SSH networking concepts.")
570 (license license:lgpl2.1+)))
571
572 (define-public python2-paramiko
573 (package-with-python2 python-paramiko))
574
575
576 (define-public python-httplib2
577 (package
578 (name "python-httplib2")
579 (version "0.9.2")
580 (source
581 (origin
582 (method url-fetch)
583 (uri (pypi-uri "httplib2" version))
584 (sha256
585 (base32
586 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
587 (build-system python-build-system)
588 (home-page "https://github.com/jcgregorio/httplib2")
589 (synopsis "Comprehensive HTTP client library")
590 (description
591 "A comprehensive HTTP client library supporting many features left out of
592 other HTTP libraries.")
593 (license license:expat)))
594
595 (define-public python2-httplib2
596 (package-with-python2 python-httplib2))
597
598 (define-public python-ecdsa
599 (package
600 (name "python-ecdsa")
601 (version "0.13")
602 (source
603 (origin
604 (method url-fetch)
605 (uri (string-append
606 "https://pypi.python.org/packages/source/e/ecdsa/ecdsa-"
607 version
608 ".tar.gz"))
609 (sha256
610 (base32
611 "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4"))))
612 (build-system python-build-system)
613 (inputs
614 `(("openssl" ,openssl)))
615 (home-page
616 "https://github.com/warner/python-ecdsa")
617 (synopsis
618 "ECDSA cryptographic signature library (pure python)")
619 (description
620 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
621 Curve Digital Signature Algorithm), implemented purely in Python. With this
622 library, you can quickly create keypairs (signing key and verifying key), sign
623 messages, and verify the signatures. The keys and signatures are very short,
624 making them easy to handle and incorporate into other protocols.")
625 (license license:expat)))
626
627 (define-public python2-ecdsa
628 (package-with-python2 python-ecdsa))
629
630 (define-public python-ccm
631 (package
632 (name "python-ccm")
633 (version "2.1.6")
634 (source
635 (origin
636 (method url-fetch)
637 (uri (pypi-uri "ccm" version))
638 (sha256
639 (base32
640 "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
641 (build-system python-build-system)
642 (propagated-inputs
643 `(("python-pyyaml" ,python-pyyaml)
644 ;; Not listed in setup.py, but used in ccmlib/node.py for full
645 ;; functionality
646 ("python-psutil" ,python-psutil)
647 ("python-six" ,python-six)))
648 (home-page "https://github.com/pcmanus/ccm")
649 (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
650 localhost")
651 (description "Cassandra Cluster Manager is a development tool for testing
652 local Cassandra clusters. It creates, launches and removes Cassandra clusters
653 on localhost.")
654 (license license:asl2.0)))
655
656 (define-public python2-ccm
657 (package-with-python2 python-ccm))
658
659 (define-public python-pytz
660 (package
661 (name "python-pytz")
662 (version "2017.2")
663 (source
664 (origin
665 (method url-fetch)
666 (uri (pypi-uri "pytz" version ".zip"))
667 (sha256
668 (base32
669 "12cmd3j46d2gcw08bspvp6s9icfcvx88zjz52n1bli9dyvl5dh7m"))))
670 (build-system python-build-system)
671 (native-inputs
672 `(("unzip" ,unzip)))
673 (home-page "http://pythonhosted.org/pytz")
674 (synopsis "Python timezone library")
675 (description "This library brings the Olson tz database into Python. It
676 allows accurate and cross platform timezone calculations using Python 2.4 or
677 higher. It also solves the issue of ambiguous times at the end of daylight
678 saving time. Almost all of the Olson timezones are supported.")
679 (license license:expat)))
680
681 (define-public python2-pytz
682 (package-with-python2 python-pytz))
683
684 (define-public python-clyent
685 (package
686 (name "python-clyent")
687 (version "1.2.1")
688 (source
689 (origin
690 (method url-fetch)
691 (uri (pypi-uri "clyent" version))
692 (sha256
693 (base32
694 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
695 (build-system python-build-system)
696 (native-inputs
697 `(("python-mock" ,python-mock)))
698 (home-page "https://github.com/binstar/clyent")
699 (synopsis "Command line client library")
700 (description "Clyent is a Python command line utiliy library. It is used
701 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
702 (license license:bsd-3)))
703
704 (define-public python2-clyent
705 (package-with-python2 python-clyent))
706
707 (define-public python-babel
708 (package
709 (name "python-babel")
710 (version "2.3.4")
711 (source
712 (origin
713 (method url-fetch)
714 (uri (pypi-uri "Babel" version))
715 (sha256
716 (base32
717 "0x98qqqw35xllpcama013a9788ly84z8dm1w2wwfpxh2710c8df5"))))
718 (build-system python-build-system)
719 (propagated-inputs
720 `(("python-pytz" ,python-pytz)))
721 (arguments `(#:tests? #f)) ; no test target
722 (home-page "http://babel.pocoo.org/")
723 (synopsis
724 "Tools for internationalizing Python applications")
725 (description
726 "Babel is composed of two major parts:
727 - tools to build and work with gettext message catalogs
728 - a Python interface to the CLDR (Common Locale Data Repository), providing
729 access to various locale display names, localized number and date formatting,
730 etc. ")
731 (license license:bsd-3)))
732
733 (define-public python2-babel
734 (package-with-python2 python-babel))
735
736 (define-public python2-backport-ssl-match-hostname
737 (package
738 (name "python2-backport-ssl-match-hostname")
739 (version "3.5.0.1")
740 (source
741 (origin
742 (method url-fetch)
743 (uri (string-append
744 "https://pypi.python.org/packages/source/b/"
745 "backports.ssl_match_hostname/backports.ssl_match_hostname-"
746 version ".tar.gz"))
747 (sha256
748 (base32
749 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
750 (build-system python-build-system)
751 (arguments
752 `(#:python ,python-2
753 #:tests? #f)) ; no test target
754 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
755 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
756 (description
757 "This backport brings the ssl.match_hostname() function to users of
758 earlier versions of Python. The function checks the hostname in the
759 certificate returned by the server to which a connection has been established,
760 and verifies that it matches the intended target hostname.")
761 (license license:psfl)))
762
763 (define-public python-hdf4
764 (package
765 (name "python-hdf4")
766 (version "0.9")
767 (source
768 (origin
769 (method url-fetch)
770 (uri (pypi-uri name version))
771 (sha256
772 (base32
773 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
774 (build-system python-build-system)
775 (native-inputs `(("nose" ,python-nose)))
776 (propagated-inputs `(("numpy" ,python-numpy)))
777 (inputs
778 `(("hdf4" ,hdf4)
779 ("libjpeg" ,libjpeg)
780 ("zlib" ,zlib)))
781 (arguments
782 `(#:phases
783 (modify-phases %standard-phases
784 (replace 'check
785 (lambda _
786 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
787 ;; on to import numpy. Somehow this works on their CI system.
788 ;; Let's just manage PYTHONPATH here instead.
789 (substitute* "runexamples.sh"
790 (("export PYTHONPATH=.*") ""))
791 (setenv "PYTHONPATH"
792 (string-append (getcwd) ":"
793 (getenv "PYTHONPATH")))
794 (and (zero? (system* "./runexamples.sh"))
795 (zero? (system* "nosetests" "-v"))))))))
796 (home-page "https://github.com/fhs/python-hdf4")
797 (synopsis "Python interface to the NCSA HDF4 library")
798 (description
799 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
800 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
801 NetCDF files can also be read and modified. Python-HDF4 is a fork of
802 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
803 (license license:expat)))
804
805 (define-public python2-hdf4
806 (package-with-python2 python-hdf4))
807
808 (define-public python-h5py
809 (package
810 (name "python-h5py")
811 (version "2.7.0")
812 (source
813 (origin
814 (method url-fetch)
815 (uri (pypi-uri "h5py" version))
816 (sha256
817 (base32
818 "0433sdv6xc9p7v1xs1gvbxp7p152ywi3nplgjb258q9fvw9469br"))))
819 (build-system python-build-system)
820 (arguments
821 `(#:tests? #f ; no test target
822 #:phases
823 (modify-phases %standard-phases
824 (add-after 'unpack 'fix-hdf5-paths
825 (lambda* (#:key inputs #:allow-other-keys)
826 (let ((prefix (assoc-ref inputs "hdf5")))
827 (substitute* "setup_build.py"
828 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
829 (string-append "['" prefix "/lib" "']"))
830 (("'/opt/local/include', '/usr/local/include'")
831 (string-append "'" prefix "/include" "'")))
832 (substitute* "setup_configure.py"
833 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
834 (string-append "['" prefix "/lib" "']")))
835 #t))))))
836 (propagated-inputs
837 `(("python-six" ,python-six)
838 ("python-numpy" ,python-numpy)))
839 (inputs
840 `(("hdf5" ,hdf5)))
841 (native-inputs
842 `(("python-cython" ,python-cython)
843 ("python-pkgconfig" ,python-pkgconfig)))
844 (home-page "http://www.h5py.org/")
845 (synopsis "Read and write HDF5 files from Python")
846 (description
847 "The h5py package provides both a high- and low-level interface to the
848 HDF5 library from Python. The low-level interface is intended to be a
849 complete wrapping of the HDF5 API, while the high-level component supports
850 access to HDF5 files, datasets and groups using established Python and NumPy
851 concepts.")
852 (license license:bsd-3)))
853
854 (define-public python2-h5py
855 (package-with-python2 python-h5py))
856
857 (define-public python-netcdf4
858 (package
859 (name "python-netcdf4")
860 (version "1.2.9")
861 (source
862 (origin
863 (method url-fetch)
864 (uri (pypi-uri "netCDF4" version))
865 (sha256
866 (base32
867 "1h6jq338amlbk0ilzvjyl7cck80i0bah9a5spn9in71vy2qxm7i5"))))
868 (build-system python-build-system)
869 (native-inputs
870 `(("python-cython" ,python-cython)))
871 (propagated-inputs
872 `(("python-numpy" ,python-numpy)))
873 (inputs
874 `(("netcdf" ,netcdf)
875 ("hdf4" ,hdf4)
876 ("hdf5" ,hdf5)))
877 (arguments
878 '(#:phases
879 (modify-phases %standard-phases
880 (replace 'check
881 (lambda _
882 (setenv "NO_NET" "1") ; disable opendap tests
883 (with-directory-excursion "test"
884 (setenv "PYTHONPATH" ; find and add the library we just built
885 (string-append
886 (car (find-files "../build" "lib.*"
887 #:directories? #:t
888 #:fail-on-error? #:t))
889 ":" (getenv "PYTHONPATH")))
890 (zero? (system* "python" "run_all.py"))))))))
891 (home-page
892 "https://github.com/Unidata/netcdf4-python")
893 (synopsis "Python/numpy interface to the netCDF library")
894 (description "Netcdf4-python is a Python interface to the netCDF C
895 library. netCDF version 4 has many features not found in earlier
896 versions of the library and is implemented on top of HDF5. This module
897 can read and write files in both the new netCDF 4 and the old netCDF 3
898 format, and can create files that are readable by HDF5 clients. The
899 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
900 to users of that module.")
901 ;; The software is mainly ISC, but includes some files covered
902 ;; by the Expat license.
903 (license (list license:isc license:expat))))
904
905 (define-public python2-netcdf4
906 (package-with-python2 python-netcdf4))
907
908 (define-public python-lockfile
909 (package
910 (name "python-lockfile")
911 (version "0.12.2")
912 (source
913 (origin
914 (method url-fetch)
915 (uri (string-append "https://pypi.python.org/packages/source/l/lockfile/"
916 "lockfile-" version ".tar.gz"))
917 (sha256
918 (base32
919 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
920 (build-system python-build-system)
921 (arguments '(#:test-target "check"))
922 (native-inputs
923 `(("python-pbr" ,python-pbr)))
924 (home-page "https://launchpad.net/pylockfile")
925 (synopsis "Platform-independent file locking module")
926 (description
927 "The lockfile package exports a LockFile class which provides a simple
928 API for locking files.")
929 (license license:expat)))
930
931 (define-public python2-lockfile
932 (package-with-python2 python-lockfile))
933
934 (define-public python-mock
935 (package
936 (name "python-mock")
937 (version "1.0.1")
938 (source
939 (origin
940 (method url-fetch)
941 (uri (pypi-uri "mock" version))
942 (sha256
943 (base32
944 "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq"))))
945 (build-system python-build-system)
946 (arguments '(#:test-target "check"))
947 (home-page "https://github.com/testing-cabal/mock")
948 (synopsis "Python mocking and patching library for testing")
949 (description
950 "Mock is a library for testing in Python. It allows you to replace parts
951 of your system under test with mock objects and make assertions about how they
952 have been used.")
953 (license license:expat)))
954
955 (define-public python2-mock
956 (package-with-python2 python-mock))
957
958 ;;; Some packages (notably, certbot and python-acme) rely on this newer version
959 ;;; of python-mock. However, a large number of packages fail to build with
960 ;;; mock@2, so we add a new variable for now. Also, there may be a dependency
961 ;;; cycle between mock and six, so we avoid creating python2-mock@2 for now.
962 (define-public python-mock-2
963 (package
964 (inherit python-mock)
965 (version "2.0.0")
966 (source
967 (origin
968 (method url-fetch)
969 (uri (pypi-uri "mock" version))
970 (sha256
971 (base32
972 "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i"))))
973 (propagated-inputs
974 `(("python-pbr" ,python-pbr-minimal)
975 ,@(package-propagated-inputs python-mock)))))
976
977 (define-public python-setuptools
978 (package
979 (name "python-setuptools")
980 (version "31.0.0")
981 (source
982 (origin
983 (method url-fetch)
984 (uri (pypi-uri "setuptools" version))
985 (sha256
986 (base32
987 "0ypybh4hx3bv4vhg2dc74xpj1g56ggnaffm87k4abhwjwq6wq608"))
988 (modules '((guix build utils)))
989 (snippet
990 '(begin
991 ;; Remove included binaries which are used to build self-extracting
992 ;; installers for Windows.
993 ;; TODO: Find some way to build them ourself so we can include them.
994 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
995 #t))))
996 (build-system python-build-system)
997 ;; FIXME: Tests require pytest, which itself relies on setuptools.
998 ;; One could bootstrap with an internal untested setuptools.
999 (arguments
1000 `(#:tests? #f))
1001 (home-page "https://pypi.python.org/pypi/setuptools")
1002 (synopsis
1003 "Library designed to facilitate packaging Python projects")
1004 (description
1005 "Setuptools is a fully-featured, stable library designed to facilitate
1006 packaging Python projects, where packaging includes:
1007 Python package and module definitions,
1008 distribution package metadata,
1009 test hooks,
1010 project installation,
1011 platform-specific details,
1012 Python 3 support.")
1013 ;; TODO: setuptools now bundles the following libraries:
1014 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1015 (license (list license:psfl ; setuptools itself
1016 license:expat ; six, appdirs, pyparsing
1017 license:asl2.0 ; packaging is dual ASL2/BSD-2
1018 license:bsd-2))))
1019
1020 (define-public python2-setuptools
1021 (package-with-python2 python-setuptools))
1022
1023 (define-public python-uniseg
1024 (package
1025 (name "python-uniseg")
1026 (version "0.7.1")
1027 (source
1028 (origin
1029 (method url-fetch)
1030 (uri (string-append "https://bitbucket.org/emptypage/uniseg-python/"
1031 "get/rel-" version ".tar.gz"))
1032 (file-name (string-append name "-" version ".tar.gz"))
1033 (sha256
1034 (base32
1035 "1df4gddnj2a0v8z35wb2ra5vvh1f1qyxs8fgd25c8g64031mna6x"))))
1036 (build-system python-build-system)
1037 (arguments
1038 '(#:tests? #f)) ; The test suite requires network access.
1039 (home-page
1040 "https://bitbucket.org/emptypage/uniseg-python")
1041 (synopsis
1042 "Python library to determine Unicode text segmentations")
1043 (description
1044 "Uniseg is a Python package used to determine Unicode text segmentations.
1045 Supported segmentations include:
1046 @enumerate
1047 @item @dfn{Code point} (any value in the Unicode codespace)
1048 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1049 multiple Unicode code points, e.g. \"G\" + acute-accent)
1050 @item Word break
1051 @item Sentence break
1052 @item Line break
1053 @end enumerate")
1054 (license license:expat)))
1055
1056 (define-public python2-uniseg
1057 (package-with-python2 python-uniseg))
1058
1059 ;;; Pycrypto is abandoned upstream:
1060 ;;;
1061 ;;; https://github.com/dlitz/pycrypto/issues/173
1062 ;;;
1063 ;;; TODO Remove this package from GNU Guix.
1064 (define-public python-pycrypto
1065 (package
1066 (name "python-pycrypto")
1067 (version "2.6.1")
1068 (source
1069 (origin
1070 (method url-fetch)
1071 (uri (pypi-uri "pycrypto" version))
1072 (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"))
1073 (sha256
1074 (base32
1075 "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
1076 (build-system python-build-system)
1077 (inputs
1078 `(("python" ,python)
1079 ("gmp" ,gmp)))
1080 (arguments
1081 `(#:phases
1082 (alist-cons-before
1083 'build 'set-build-env
1084 ;; pycrypto runs an autoconf configure script behind the scenes
1085 (lambda _
1086 (setenv "CONFIG_SHELL" (which "bash")))
1087 %standard-phases)))
1088 (home-page "http://www.pycrypto.org/")
1089 (synopsis "Cryptographic modules for Python")
1090 (description
1091 "Pycrypto is a collection of both secure hash functions (such as SHA256
1092 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
1093 etc.). The package is structured to make adding new modules easy.")
1094 (license license:public-domain)))
1095
1096 (define-public python2-pycrypto
1097 (let ((pycrypto (package-with-python2 python-pycrypto)))
1098 (package (inherit pycrypto)
1099 (inputs
1100 `(("python" ,python-2)
1101 ,@(alist-delete
1102 "python"
1103 (package-inputs pycrypto)))))))
1104
1105 (define-public python-eventlet
1106 (package
1107 (name "python-eventlet")
1108 (version "0.20.1")
1109 (source
1110 (origin
1111 (method url-fetch)
1112 (uri (pypi-uri "eventlet" version))
1113 (sha256
1114 (base32
1115 "0f3q55mq4n021wb7qa53pz3ix6i2py64sap66vsaqm2scjw83m9s"))))
1116 (build-system python-build-system)
1117 (propagated-inputs
1118 `(("python-greenlet" ,python-greenlet)))
1119 (arguments
1120 ;; TODO: Requires unpackaged 'enum-compat'.
1121 '(#:tests? #f))
1122 (home-page "http://eventlet.net")
1123 (synopsis "Concurrent networking library for Python")
1124 (description
1125 "Eventlet is a concurrent networking library for Python that
1126 allows you to change how you run your code, not how you write it.
1127 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1128 Coroutines ensure that the developer uses a blocking style of programming
1129 that is similar to threading, but provide the benefits of non-blocking I/O.
1130 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1131 from the Python interpreter, or as a small part of a larger application.")
1132 (license license:expat)))
1133
1134 (define-public python2-eventlet
1135 (let ((base (package-with-python2
1136 (strip-python2-variant python-eventlet))))
1137 (package (inherit base)
1138 (propagated-inputs
1139 `(("python2-enum34" ,python2-enum34)
1140 ,@(package-propagated-inputs base))))))
1141
1142 (define-public python-keyring
1143 (package
1144 (name "python-keyring")
1145 (version "8.7")
1146 (source
1147 (origin
1148 (method url-fetch)
1149 (uri (pypi-uri "keyring" version))
1150 (sha256
1151 (base32
1152 "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
1153 (build-system python-build-system)
1154 (native-inputs
1155 `(("python-setuptools-scm" ,python-setuptools-scm)))
1156 (propagated-inputs
1157 `(("python-pycrypto" ,python-pycrypto)))
1158 (arguments
1159 `(#:tests? #f)) ;TODO: tests require pytest
1160 (home-page "https://github.com/jaraco/keyring")
1161 (synopsis "Store and access your passwords safely")
1162 (description
1163 "The Python keyring lib provides a easy way to access the system keyring
1164 service from python. It can be used in any application that needs safe
1165 password storage.")
1166 ;; "MIT" and PSF dual license
1167 (license license:x11)))
1168
1169 (define-public python2-keyring
1170 (package-with-python2 python-keyring))
1171
1172 (define-public python-six
1173 (package
1174 (name "python-six")
1175 (version "1.10.0")
1176 (source
1177 (origin
1178 (method url-fetch)
1179 (uri (pypi-uri "six" version))
1180 (sha256
1181 (base32
1182 "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh"))))
1183 (build-system python-build-system)
1184 (native-inputs
1185 `(("python-py" ,python-py)
1186 ("python-pytest" ,python-pytest)))
1187 (home-page "http://pypi.python.org/pypi/six/")
1188 (synopsis "Python 2 and 3 compatibility utilities")
1189 (description
1190 "Six is a Python 2 and 3 compatibility library. It provides utility
1191 functions for smoothing over the differences between the Python versions with
1192 the goal of writing Python code that is compatible on both Python versions.
1193 Six supports every Python version since 2.5. It is contained in only one
1194 Python file, so it can be easily copied into your project.")
1195 (license license:x11)))
1196
1197 (define-public python2-six
1198 (package-with-python2 python-six))
1199
1200 (define-public python-dateutil
1201 (package
1202 (name "python-dateutil")
1203 (version "2.6.0")
1204 (source
1205 (origin
1206 (method url-fetch)
1207 (uri (pypi-uri "python-dateutil" version))
1208 (sha256
1209 (base32
1210 "1lhq0hxjc3cfha101q02ld5ijlpfyjn2w1yh7wvpiy367pgzi8k2"))))
1211 (build-system python-build-system)
1212 (propagated-inputs
1213 `(("python-six" ,python-six)))
1214 (home-page "https://dateutil.readthedocs.io/en/stable/")
1215 (synopsis "Extensions to the standard datetime module")
1216 (description
1217 "The dateutil module provides powerful extensions to the standard
1218 datetime module, available in Python 2.3+.")
1219 (license license:bsd-3)))
1220
1221 (define-public python2-dateutil
1222 (package-with-python2 python-dateutil))
1223
1224 (define-public python-parsedatetime
1225 (package
1226 (name "python-parsedatetime")
1227 (version "2.4")
1228 (source
1229 (origin
1230 (method url-fetch)
1231 (uri (pypi-uri "parsedatetime" version))
1232 (sha256
1233 (base32
1234 "0jxqkjks7z9dn222cqgvskp4wr6d92aglinxq7pd2w4mzdc7r09x"))))
1235 (build-system python-build-system)
1236 (native-inputs
1237 `(("python-nose" ,python-nose)
1238 ("python-pyicu" ,python-pyicu)
1239 ("python-pytest" ,python-pytest)
1240 ("python-pytest-runner" ,python-pytest-runner)))
1241 (propagated-inputs
1242 `(("python-future" ,python-future)))
1243 (home-page "https://github.com/bear/parsedatetime/")
1244 (synopsis
1245 "Parse human-readable date/time text")
1246 (description
1247 "Parse human-readable date/time text.")
1248 (license license:asl2.0)))
1249
1250 (define-public python2-parsedatetime
1251 (package-with-python2 python-parsedatetime))
1252
1253 (define-public python-schedule
1254 (package
1255 (name "python-schedule")
1256 (version "0.4.3")
1257 (source
1258 (origin
1259 (method url-fetch)
1260 (uri (pypi-uri "schedule" version))
1261 (sha256
1262 (base32
1263 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1264 (build-system python-build-system)
1265 (native-inputs
1266 `(("python-pytest" ,python-pytest)
1267 ("python-mock" ,python-mock)))
1268 (home-page "https://github.com/dbader/schedule")
1269 (synopsis "Schedule periodic function calls in Python")
1270 (description
1271 "Schedule is an in-process scheduler for periodic jobs that uses the
1272 builder pattern for configuration. Schedule lets you run Python functions (or
1273 any other callable) periodically at pre-determined intervals using a simple,
1274 human-friendly syntax.")
1275 (license license:expat)))
1276
1277 (define-public python2-schedule
1278 (package-with-python2 python-schedule))
1279
1280 (define-public python-pandas
1281 (package
1282 (name "python-pandas")
1283 (version "0.19.2")
1284 (source
1285 (origin
1286 (method url-fetch)
1287 (uri (pypi-uri "pandas" version))
1288 (sha256
1289 (base32 "0540cnbwy2hc4hv2sxfs8i47xi91qzvzxfn80dl785ibiicly3vg"))
1290 (patches
1291 (search-patches "python-pandas-skip-failing-tests.patch"))))
1292 (build-system python-build-system)
1293 (propagated-inputs
1294 `(("python-numpy" ,python-numpy)
1295 ("python-pytz" ,python-pytz)
1296 ("python-dateutil" ,python-dateutil)))
1297 (native-inputs
1298 `(("python-nose" ,python-nose)
1299 ("python-cython" ,python-cython)))
1300 (home-page "http://pandas.pydata.org")
1301 (synopsis "Data structures for data analysis, time series, and statistics")
1302 (description
1303 "Pandas is a Python package providing fast, flexible, and expressive data
1304 structures designed to make working with structured (tabular,
1305 multidimensional, potentially heterogeneous) and time series data both easy
1306 and intuitive. It aims to be the fundamental high-level building block for
1307 doing practical, real world data analysis in Python.")
1308 (license license:bsd-3)))
1309
1310 (define-public python2-pandas
1311 (package-with-python2 python-pandas))
1312
1313 (define-public python-tzlocal
1314 (package
1315 (name "python-tzlocal")
1316 (version "1.2.2")
1317 (source
1318 (origin
1319 (method url-fetch)
1320 (uri (pypi-uri "tzlocal" version))
1321 (sha256
1322 (base32
1323 "0paj7vlsb0np8b5sp4bv64wxv7qk2piyp7xg29pkhdjwsbls9fnb"))))
1324 (build-system python-build-system)
1325 (propagated-inputs
1326 `(("python-pytz" ,python-pytz)))
1327 (home-page "https://github.com/regebro/tzlocal")
1328 (synopsis
1329 "Local timezone information for Python")
1330 (description
1331 "Tzlocal returns a tzinfo object with the local timezone information.
1332 This module attempts to fix a glaring hole in pytz, that there is no way to
1333 get the local timezone information, unless you know the zoneinfo name, and
1334 under several distributions that's hard or impossible to figure out.")
1335 (license license:cc0)))
1336
1337 (define-public python2-pysqlite
1338 (package
1339 (name "python2-pysqlite")
1340 (version "2.8.3")
1341 (source
1342 (origin
1343 (method url-fetch)
1344 (uri (pypi-uri "pysqlite" version))
1345 (sha256
1346 (base32
1347 "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
1348 (build-system python-build-system)
1349 (inputs
1350 `(("sqlite" ,sqlite)))
1351 (arguments
1352 `(#:python ,python-2 ; incompatible with Python 3
1353 #:tests? #f)) ; no test target
1354 (home-page "https://github.com/ghaering/pysqlite")
1355 (synopsis "SQLite bindings for Python")
1356 (description
1357 "Pysqlite provides SQLite bindings for Python that comply to the
1358 Database API 2.0T.")
1359 (license license:zlib)))
1360
1361
1362 (define-public python2-mechanize
1363 (package
1364 (name "python2-mechanize")
1365 (version "0.2.5")
1366 (source
1367 (origin
1368 (method url-fetch)
1369 (uri (string-append "https://pypi.python.org/packages/source/m/mechanize/mechanize-"
1370 version ".tar.gz"))
1371 (sha256
1372 (base32
1373 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1374 (build-system python-build-system)
1375 (arguments
1376 `(#:python ,python-2 ; apparently incompatible with Python 3
1377 #:tests? #f))
1378 ;; test fails with message
1379 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1380 ;; (python-3.3.2) or
1381 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1382 ;; (python-2.7.5).
1383 ;; The source code is from March 2011 and probably not up-to-date
1384 ;; with respect to python unit tests.
1385 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1386 (synopsis
1387 "Stateful programmatic web browsing in Python")
1388 (description
1389 "Mechanize implements stateful programmatic web browsing in Python,
1390 after Andy Lester’s Perl module WWW::Mechanize.")
1391 (license (license:non-copyleft
1392 "file://COPYING"
1393 "See COPYING in the distribution."))))
1394
1395
1396 (define-public python-simplejson
1397 (package
1398 (name "python-simplejson")
1399 (version "3.10.0")
1400 (source
1401 (origin
1402 (method url-fetch)
1403 (uri (pypi-uri "simplejson" version))
1404 (sha256
1405 (base32
1406 "1qhwsykjlb85igb4cfl6v6gkprzbbg8gyqdd7zscc8w3x0ifcfwm"))))
1407 (build-system python-build-system)
1408 (home-page "http://simplejson.readthedocs.org/en/latest/")
1409 (synopsis
1410 "Json library for Python")
1411 (description
1412 "JSON (JavaScript Object Notation) is a subset of JavaScript
1413 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1414 format.
1415
1416 Simplejson exposes an API familiar to users of the standard library marshal
1417 and pickle modules. It is the externally maintained version of the json
1418 library contained in Python 2.6, but maintains compatibility with Python 2.5
1419 and (currently) has significant performance advantages, even without using
1420 the optional C extension for speedups. Simplejson is also supported on
1421 Python 3.3+.")
1422 (license license:x11)))
1423
1424 (define-public python2-simplejson
1425 (package-with-python2 python-simplejson))
1426
1427
1428 (define-public python-pyicu
1429 (package
1430 (name "python-pyicu")
1431 (version "1.9.5")
1432 (source
1433 (origin
1434 (method url-fetch)
1435 (uri (pypi-uri "PyICU" version))
1436 (sha256
1437 (base32
1438 "16rmxy9y0qhqqna2v49i7nzwm09as699rbyvh4raw7w602w55c3k"))))
1439 (build-system python-build-system)
1440 (arguments
1441 '(#:phases
1442 (modify-phases %standard-phases
1443 (add-before 'check 'delete-failing-test
1444 (lambda _
1445 ;; XXX: These tests require locales that are unavailable
1446 ;; in the build environment.
1447 (delete-file "test/test_DateTimeParserGenerator.py")
1448 #t)))))
1449 (inputs
1450 `(("icu4c" ,icu4c)))
1451 (home-page "http://pyicu.osafoundation.org/")
1452 (synopsis "Python extension wrapping the ICU C++ API")
1453 (description
1454 "PyICU is a python extension wrapping the ICU C++ API.")
1455 (license license:x11)))
1456
1457 (define-public python2-pyicu
1458 (package-with-python2 python-pyicu))
1459
1460 (define-public python2-dogtail
1461 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1462 ;; spaces in indentation" with Python 3.
1463 (package
1464 (name "python2-dogtail")
1465 (version "0.9.9")
1466 (source (origin
1467 (method url-fetch)
1468 (uri (pypi-uri "dogtail" version))
1469 (sha256
1470 (base32
1471 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1472 (build-system python-build-system)
1473 (arguments `(#:python ,python-2
1474 #:tests? #f)) ; invalid command "test"
1475 ;; Currently no offical homepage.
1476 (home-page "https://pypi.python.org/pypi/dogtail/")
1477 (synopsis "GUI test tool and automation framework written in Python")
1478 (description
1479 "Dogtail is a GUI test tool and automation framework written in Python.
1480 It uses Accessibility (a11y) technologies to communicate with desktop
1481 applications. dogtail scripts are written in Python and executed like any
1482 other Python program.")
1483 (license license:gpl2+)))
1484
1485 (define-public python2-empy
1486 (package
1487 (name "python2-empy")
1488 (version "3.3")
1489 (source (origin
1490 (method url-fetch)
1491 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1492 version ".tar.gz"))
1493 (sha256
1494 (base32
1495 "01g8mmkfnvjdmlhsihwyx56lrg7r5m5d2fg6mnxsvy6g0dnl69f6"))))
1496 (build-system python-build-system)
1497 (arguments
1498 `(#:python ,python-2
1499 #:phases (alist-replace
1500 'check
1501 (lambda _
1502 (zero? (system* "./test.sh")))
1503 %standard-phases)))
1504 (home-page "http://www.alcyone.com/software/empy/")
1505 (synopsis "Templating system for Python")
1506 (description
1507 "EmPy is a system for embedding Python expressions and statements in
1508 template text; it takes an EmPy source file, processes it, and produces
1509 output. This is accomplished via expansions, which are special signals to the
1510 EmPy system and are set off by a special prefix (by default the at sign, @@).
1511 EmPy can expand arbitrary Python expressions and statements in this way, as
1512 well as a variety of special forms. Textual data not explicitly delimited in
1513 this way is sent unaffected to the output, allowing Python to be used in
1514 effect as a markup language. Also supported are callbacks via hooks,
1515 recording and playback via diversions, and dynamic, chainable filters. The
1516 system is highly configurable via command line options and embedded
1517 commands.")
1518 (license license:lgpl2.1+)))
1519
1520 (define-public python2-element-tree
1521 (package
1522 (name "python2-element-tree")
1523 (version "1.2.6")
1524 (source (origin
1525 (method url-fetch)
1526 (uri (string-append
1527 "http://effbot.org/media/downloads/elementtree-"
1528 version "-20050316.tar.gz"))
1529 (sha256
1530 (base32
1531 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1532 (build-system python-build-system)
1533 (arguments
1534 `(#:python ,python-2 ; seems to be part of Python 3
1535 #:tests? #f)) ; no 'test' sub-command
1536 (synopsis "Toolkit for XML processing in Python")
1537 (description
1538 "ElementTree is a Python library supporting lightweight XML processing.")
1539 (home-page "http://effbot.org/zone/element-index.htm")
1540 (license (license:x11-style
1541 "http://docs.python.org/2/license.html"
1542 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1543
1544 (define-public python2-pybugz
1545 (package
1546 (name "python2-pybugz")
1547 (version "0.6.11")
1548 (source (origin
1549 (method url-fetch)
1550 (uri (string-append
1551 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1552 version ".tar.gz"))
1553 (sha256
1554 (base32
1555 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1556 (patches (search-patches "pybugz-stty.patch"
1557 "pybugz-encode-error.patch"))))
1558 (build-system python-build-system)
1559 (arguments
1560 `(#:python ,python-2 ; SyntaxError with Python 3
1561 #:tests? #f)) ; no 'test' sub-command
1562 (propagated-inputs
1563 `(("element-tree" ,python2-element-tree)))
1564 (synopsis "Python and command-line interface to Bugzilla")
1565 (description
1566 "PyBugz is a Python library and command-line tool to query the Bugzilla
1567 bug tracking system. It is meant as an aid to speed up interaction with the
1568 bug tracker.")
1569 (home-page "http://www.liquidx.net/pybugz/")
1570 (license license:gpl2)))
1571
1572 (define-public python-enum34
1573 (package
1574 (name "python-enum34")
1575 (version "1.1.6")
1576 (source
1577 (origin
1578 (method url-fetch)
1579 (uri (pypi-uri "enum34" version))
1580 (sha256
1581 (base32
1582 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1583 (build-system python-build-system)
1584 (home-page "https://pypi.python.org/pypi/enum34")
1585 (synopsis "Backported Python 3.4 Enum")
1586 (description
1587 "Enum34 is the new Python stdlib enum module available in Python 3.4
1588 backported for previous versions of Python from 2.4 to 3.3.")
1589 (license license:bsd-3)))
1590
1591 (define-public python2-enum34
1592 (package-with-python2 python-enum34))
1593
1594 (define-public python-parse-type
1595 (package
1596 (name "python-parse-type")
1597 (version "0.3.4")
1598 (source
1599 (origin
1600 (method url-fetch)
1601 (uri (string-append "https://pypi.python.org/packages/source/p/"
1602 "parse_type/parse_type-" version ".tar.gz"))
1603 (sha256
1604 (base32
1605 "0iv1c34npr4iynwpgv1vkjx9rjd18a85ir8c01gc5f7wp8iv7l1x"))))
1606 (build-system python-build-system)
1607 (arguments
1608 `(#:phases
1609 (modify-phases %standard-phases
1610 (add-after 'unpack 'patch-tests
1611 (lambda _
1612 (substitute* "tests/test_parse_type_parse.py"
1613 ;; Newer Python versions don't have the problem this test tests.
1614 (("self[.]assertRaises[(]parse.TooManyFields, p.parse, ''[)]")
1615 ""))
1616 #t)))))
1617 (propagated-inputs
1618 `(("python-six" ,python-six)
1619 ("python-parse" ,python-parse)))
1620 (native-inputs
1621 `(("python-pytest" ,python-pytest)
1622 ("python-pytest-runner" ,python-pytest-runner)))
1623 (home-page "https://github.com/jenisys/parse_type")
1624 (synopsis "Extended parse module")
1625 (description
1626 "Parse_type extends the python parse module.")
1627 (properties
1628 `((python2-variant . ,(delay python2-parse-type))))
1629 (license license:bsd-3)))
1630
1631 (define-public python2-parse-type
1632 (let ((base (package-with-python2
1633 (strip-python2-variant python-parse-type))))
1634 (package (inherit base)
1635 (propagated-inputs
1636 `(("python2-enum34" ,python2-enum34)
1637 ,@(package-propagated-inputs base))))))
1638
1639 (define-public python-parse
1640 (package
1641 (name "python-parse")
1642 (version "1.6.6")
1643 (source
1644 (origin
1645 (method url-fetch)
1646 (uri (pypi-uri "parse" version))
1647 (sha256
1648 (base32
1649 "0y31i3mwgv35qn0kzzjn9q8jqfdqmbi6sr6yfvn8rq4lqjm5lhvi"))
1650 (patches (search-patches "python-parse-too-many-fields.patch"))))
1651 (build-system python-build-system)
1652 (arguments
1653 `(#:phases
1654 (modify-phases %standard-phases
1655 (replace 'check
1656 (lambda _ (zero? (system* "python" "test_parse.py")))))))
1657 (home-page "https://github.com/r1chardj0n3s/parse")
1658 (synopsis "Parse strings")
1659 (description
1660 "Parse strings using a specification based on the Python format()
1661 syntax.")
1662 (license license:x11)))
1663
1664 (define-public python-polib
1665 (package
1666 (name "python-polib")
1667 (version "1.0.8")
1668 (source (origin
1669 (method url-fetch)
1670 (uri (pypi-uri "polib" version))
1671 (sha256
1672 (base32
1673 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1674 (build-system python-build-system)
1675 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1676 (synopsis "Manipulate, create and modify gettext files")
1677 (description "Polib can manipulate any gettext format (po, pot and mo)
1678 files. It can be used to create po files from scratch or to modify
1679 existing ones.")
1680 (license license:expat)))
1681
1682 (define-public python2-polib
1683 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1684 (package
1685 (inherit base)
1686 (arguments `(,@(package-arguments base)
1687 ;; Tests don't work with python2.
1688 #:tests? #f)))))
1689
1690 (define-public scons
1691 (package
1692 (name "scons")
1693 (version "2.5.1")
1694 (source (origin
1695 (method url-fetch)
1696 (uri (string-append "mirror://sourceforge/scons/scons/" version
1697 "/scons-" version ".tar.gz"))
1698 (sha256
1699 (base32
1700 "1wji1z9jdkhnmm99apx6fhld9cs52rr56aigniyrcsmlwy52298b"))))
1701 (build-system python-build-system)
1702 (arguments
1703 ;; With Python 3.x, fails to build with a syntax error.
1704 `(#:python ,python-2
1705 #:use-setuptools? #f ; still relies on distutils
1706 #:tests? #f)) ; no 'python setup.py test' command
1707 (home-page "http://scons.org/")
1708 (synopsis "Software construction tool written in Python")
1709 (description
1710 "SCons is a software construction tool. Think of SCons as an improved,
1711 cross-platform substitute for the classic Make utility with integrated
1712 functionality similar to autoconf/automake and compiler caches such as ccache.
1713 In short, SCons is an easier, more reliable and faster way to build
1714 software.")
1715 (license license:x11)))
1716
1717 (define-public python-extras
1718 (package
1719 (name "python-extras")
1720 (version "0.0.3")
1721 (source
1722 (origin
1723 (method url-fetch)
1724 (uri (string-append
1725 "https://pypi.python.org/packages/source/e/extras/extras-"
1726 version ".tar.gz"))
1727 (sha256
1728 (base32
1729 "1h7zx4dfyclalg0fqnfjijpn0f793a9mx8sy3b27gd31nr6dhq3s"))))
1730 (build-system python-build-system)
1731 (arguments
1732 ;; error in setup.cfg: command 'test' has no such option 'buffer'
1733 '(#:tests? #f))
1734 (home-page "https://github.com/testing-cabal/extras")
1735 (synopsis "Useful extensions to the Python standard library")
1736 (description
1737 "Extras is a set of extensions to the Python standard library.")
1738 (license license:expat)))
1739
1740 (define-public python2-extras
1741 (package-with-python2 python-extras))
1742
1743 (define-public python-mimeparse
1744 (package
1745 (name "python-mimeparse")
1746 (version "0.1.4")
1747 (source
1748 (origin
1749 (method url-fetch)
1750 (uri (string-append
1751 "https://pypi.python.org/packages/source/p/python-mimeparse/python-mimeparse-"
1752 version ".tar.gz"))
1753 (sha256
1754 (base32
1755 "1hyxg09kaj02ri0rmwjqi86wk4nd1akvv7n0dx77azz76wga4s9w"))))
1756 (build-system python-build-system)
1757 (arguments
1758 '(#:tests? #f)) ; no setup.py test command
1759 (home-page
1760 "https://github.com/dbtsai/python-mimeparse")
1761 (synopsis "Python library for parsing MIME types")
1762 (description
1763 "Mimeparse provides basic functions for parsing MIME type names and
1764 matching them against a list of media-ranges.")
1765 (license license:expat)))
1766
1767 (define-public python2-mimeparse
1768 (package-with-python2 python-mimeparse))
1769
1770 (define-public python-nose
1771 (package
1772 (name "python-nose")
1773 (version "1.3.7")
1774 (source
1775 (origin
1776 (method url-fetch)
1777 (uri (pypi-uri "nose" version))
1778 (sha256
1779 (base32
1780 "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
1781 (build-system python-build-system)
1782 (arguments
1783 '(#:tests? #f)) ; FIXME: test suite fails
1784 (home-page "http://readthedocs.org/docs/nose/")
1785 (synopsis "Python testing library")
1786 (description
1787 "Nose extends the unittest library to make testing easier.")
1788 (license license:lgpl2.0+)))
1789
1790 (define-public python2-nose
1791 (package-with-python2 python-nose))
1792
1793 (define-public python-nose2
1794 (package
1795 (name "python-nose2")
1796 (version "0.6.5")
1797 (source
1798 (origin
1799 (method url-fetch)
1800 (uri (pypi-uri "nose2" version))
1801 (sha256
1802 (base32
1803 "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
1804 (build-system python-build-system)
1805 (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
1806 (propagated-inputs
1807 `(("python-cov-core" ,python-cov-core)
1808 ("python-pytest-cov" ,python-pytest-cov)
1809 ("python-six" ,python-six)))
1810 (home-page "https://github.com/nose-devs/nose2")
1811 (synopsis "Next generation of nicer testing for Python")
1812 (description
1813 "Nose2 is the next generation of nicer testing for Python, based on the
1814 plugins branch of unittest2. Nose2 aims to improve on nose by providing a
1815 better plugin api, being easier for users to configure, and simplifying internal
1816 interfaces and processes.")
1817 (license license:bsd-2)))
1818
1819 (define-public python2-nose2
1820 (package-with-python2 python-nose2))
1821
1822 (define-public python-unittest2
1823 (package
1824 (name "python-unittest2")
1825 (version "0.5.1")
1826 (source
1827 (origin
1828 (method url-fetch)
1829 (uri (string-append
1830 "https://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-"
1831 version ".tar.gz"))
1832 (sha256
1833 (base32
1834 "00yl6lskygcrddx5zspkhr0ibgvpknl4678kkm6s626539grq93q"))))
1835 (build-system python-build-system)
1836 (home-page "http://pypi.python.org/pypi/unittest2")
1837 (synopsis "Python unit testing library")
1838 (description
1839 "Unittest2 is a replacement for the unittest module in the Python
1840 standard library.")
1841 (license license:psfl)))
1842
1843 (define-public python2-unittest2
1844 (package (inherit python-unittest2)
1845 (name "python2-unittest2")
1846 (version "0.5.1")
1847 (source
1848 (origin
1849 (method url-fetch)
1850 (uri (string-append
1851 "https://pypi.python.org/packages/source/u/unittest2/unittest2-"
1852 version ".tar.gz"))
1853 (sha256
1854 (base32
1855 "0wbs4i4x3x7klr3v35ss6p9mcqz883i1xgcpkhvl7n2lyv6yhpda"))))
1856 (arguments
1857 `(#:python ,python-2
1858 #:tests? #f)))) ; no setup.py test command
1859
1860 (define-public python-pafy
1861 (package
1862 (name "python-pafy")
1863 (version "0.5.3.1")
1864 (source
1865 (origin
1866 (method url-fetch)
1867 (uri (pypi-uri "pafy" version))
1868 (sha256
1869 (base32
1870 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
1871 (build-system python-build-system)
1872 (arguments
1873 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
1874 (propagated-inputs
1875 ;; Youtube-dl is a python package which is imported in the file
1876 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
1877 `(("youtube-dl" ,youtube-dl)))
1878 (home-page "https://np1.github.io/pafy/")
1879 (synopsis "Retrieve YouTube content and metadata")
1880 (description
1881 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
1882 (license license:lgpl3+)))
1883
1884 (define-public python-py
1885 (package
1886 (name "python-py")
1887 (version "1.4.32")
1888 (source
1889 (origin
1890 (method url-fetch)
1891 (uri (pypi-uri "py" version))
1892 (sha256
1893 (base32
1894 "19s1pql9pq85h1qzsdwgyb8a3k1qgkvh33b02m8kfqhizz8rzf64"))))
1895 (build-system python-build-system)
1896 (arguments
1897 ;; FIXME: "ImportError: 'test' module incorrectly imported from
1898 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
1899 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
1900 ;; Is this module globally installed?"
1901 '(#:tests? #f))
1902 (home-page "http://pylib.readthedocs.org/")
1903 (synopsis "Python library for parsing, I/O, instrospection, and logging")
1904 (description
1905 "Py is a Python library for file name parsing, .ini file parsing, I/O,
1906 code introspection, and logging.")
1907 (license license:expat)))
1908
1909 (define-public python2-py
1910 (package-with-python2 python-py))
1911
1912 (define-public python-pytest
1913 (package
1914 (name "python-pytest")
1915 (version "2.7.3")
1916 (source
1917 (origin
1918 (method url-fetch)
1919 (uri (string-append
1920 "https://pypi.python.org/packages/source/p/pytest/pytest-"
1921 version ".tar.gz"))
1922 (sha256
1923 (base32
1924 "1z4yi986f9n0p8qmzmn21m21m8j1x78hk3505f89baqm6pdw7afm"))
1925 (modules '((guix build utils)))
1926 (snippet
1927 ;; One of the tests involves the /usr directory, so it fails.
1928 '(substitute* "testing/test_argcomplete.py"
1929 (("def test_remove_dir_prefix\\(self\\):")
1930 "@pytest.mark.xfail\n def test_remove_dir_prefix(self):")))))
1931 (build-system python-build-system)
1932 (propagated-inputs
1933 `(("python-py" ,python-py)))
1934 (native-inputs
1935 `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
1936 ("bash" ,bash)
1937 ("python-nose" ,python-nose)
1938 ("python-mock" ,python-mock)))
1939 (home-page "http://pytest.org")
1940 (synopsis "Python testing library")
1941 (description
1942 "Pytest is a testing tool that provides auto-discovery of test modules
1943 and functions, detailed info on failing assert statements, modular fixtures,
1944 and many external plugins.")
1945 (license license:expat)))
1946
1947 (define-public python2-pytest
1948 (package-with-python2 python-pytest))
1949
1950 ;; Some packages require a newer pytest.
1951 (define-public python-pytest-3.0
1952 (package
1953 (inherit python-pytest)
1954 (name "python-pytest")
1955 (version "3.0.7")
1956 (source (origin
1957 (method url-fetch)
1958 (uri (pypi-uri "pytest" version))
1959 (sha256
1960 (base32
1961 "1asc4b2nd2a4f0g3r12y97rslq5wliji7b73wwkvdrm5s7mrc1mp"))))
1962 (arguments
1963 `(#:phases
1964 (modify-phases %standard-phases
1965 (add-before 'check 'disable-invalid-test
1966 (lambda _
1967 (substitute* "testing/test_argcomplete.py"
1968 (("def test_remove_dir_prefix" line)
1969 (string-append "@pytest.mark.skip"
1970 "(reason=\"Assumes that /usr exists.\")\n "
1971 line)))
1972 #t)))))
1973 (native-inputs
1974 `(("python-hypothesis" ,python-hypothesis)
1975 ,@(package-native-inputs python-pytest)))
1976 (properties `((python2-variant . ,(delay python2-pytest-3.0))))))
1977
1978 (define-public python2-pytest-3.0
1979 (let ((base (package-with-python2
1980 (strip-python2-variant python-pytest-3.0))))
1981 (package (inherit base)
1982 (native-inputs
1983 `(("python2-enum34" ,python2-enum34)
1984 ,@(package-native-inputs base))))))
1985
1986 (define-public python-pytest-cov
1987 (package
1988 (name "python-pytest-cov")
1989 (version "2.4.0")
1990 (source
1991 (origin
1992 (method url-fetch)
1993 (uri (pypi-uri "pytest-cov" version))
1994 (sha256
1995 (base32
1996 "03c2qc42r4bczyw93gd7n0qi1h1jfhw7fnbhi33c3vp1hs81gm2k"))))
1997 (build-system python-build-system)
1998 (arguments
1999 `(#:phases
2000 (modify-phases %standard-phases
2001 (replace 'check
2002 (lambda _
2003 ;; options taken from tox.ini
2004 ;; TODO: make "--restructuredtext" tests pass. They currently fail
2005 ;; with "Duplicate implicit target name"
2006 (zero? (system* "python" "./setup.py" "check"
2007 "--strict" "--metadata")))))))
2008 (propagated-inputs
2009 `(("python-coverage" ,python-coverage)
2010 ("python-pytest" ,python-pytest)))
2011 (home-page "https://github.com/pytest-dev/pytest-cov")
2012 (synopsis "Pytest plugin for measuring coverage")
2013 (description
2014 "Pytest-cov produces coverage reports. It supports centralised testing and
2015 distributed testing in both @code{load} and @code{each} modes. It also
2016 supports coverage of subprocesses.")
2017 (license license:expat)))
2018
2019 (define-public python2-pytest-cov
2020 (package-with-python2 python-pytest-cov))
2021
2022 (define-public python-pytest-runner
2023 (package
2024 (name "python-pytest-runner")
2025 (version "2.11.1")
2026 (source
2027 (origin
2028 (method url-fetch)
2029 (uri (pypi-uri "pytest-runner" version))
2030 (sha256
2031 (base32
2032 "1cw978kqqcq916b9gfns1qjqvg33c5ail5jhw9054dsynkm32flq"))))
2033 (build-system python-build-system)
2034 (arguments
2035 `(#:phases
2036 (modify-phases %standard-phases
2037 ;; The fancy way of setting the version with setuptools_scm does not
2038 ;; seem to work here.
2039 (add-after 'unpack 'set-version
2040 (lambda _
2041 (substitute* "docs/conf.py"
2042 (("version = setuptools_scm\\.get_version\\(root='\\.\\.')")
2043 (string-append "version = \"" ,version "\"")))
2044 #t)))))
2045 (native-inputs
2046 `(("python-pytest" ,python-pytest)
2047 ("python-setuptools-scm" ,python-setuptools-scm)))
2048 (home-page "https://github.com/pytest-dev/pytest-runner")
2049 (synopsis "Invoke py.test as a distutils command")
2050 (description
2051 "This package provides a @command{pytest-runner} command that
2052 @file{setup.py} files can use to run tests.")
2053 (license license:expat)))
2054
2055 (define-public python2-pytest-runner
2056 (package-with-python2 python-pytest-runner))
2057
2058 (define-public python-pytest-mock
2059 (package
2060 (name "python-pytest-mock")
2061 (version "1.2")
2062 (source
2063 (origin
2064 (method url-fetch)
2065 (uri (pypi-uri "pytest-mock" version ".zip"))
2066 (sha256
2067 (base32
2068 "03zxar5drzm7ksqyrwypjaza3cri6wqvpr6iam92djvg6znp32gp"))))
2069 (build-system python-build-system)
2070 (native-inputs
2071 `(("unzip" ,unzip)))
2072 (propagated-inputs
2073 `(("python-pytest" ,python-pytest)))
2074 (home-page "https://github.com/pytest-dev/pytest-mock/")
2075 (synopsis "Thin-wrapper around the mock package for easier use with py.test")
2076 (description
2077 "This plugin installs a @code{mocker} fixture which is a thin-wrapper
2078 around the patching API provided by the @code{mock} package, but with the
2079 benefit of not having to worry about undoing patches at the end of a test.
2080 The mocker fixture has the same API as @code{mock.patch}, supporting the
2081 same arguments.")
2082 (properties `((python2-variant . ,(delay python2-pytest-mock))))
2083 (license license:expat)))
2084
2085 (define-public python2-pytest-mock
2086 (let ((base (package-with-python2
2087 (strip-python2-variant python-pytest-mock))))
2088 (package (inherit base)
2089 (propagated-inputs
2090 `(("python2-mock" ,python2-mock)
2091 ,@(package-propagated-inputs base))))))
2092
2093 (define-public python-pytest-xdist
2094 (package
2095 (name "python-pytest-xdist")
2096 (version "1.14")
2097 (source
2098 (origin
2099 (method url-fetch)
2100 (uri (pypi-uri "pytest-xdist" version ".zip"))
2101 (sha256
2102 (base32
2103 "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))
2104 (modules '((guix build utils)))
2105 (snippet
2106 '(begin
2107 ;; Remove pre-compiled .pyc files from source.
2108 (for-each delete-file-recursively
2109 (find-files "." "__pycache__" #:directories? #t))
2110 (for-each delete-file (find-files "." "\\.pyc$"))
2111 #t))))
2112 (build-system python-build-system)
2113 (arguments
2114 '(#:tests? #f)) ;FIXME: Some tests are failing.
2115 ;; #:phases
2116 ;; (modify-phases %standard-phases
2117 ;; (delete 'check)
2118 ;; (add-after 'install 'check
2119 ;; (lambda* (#:key inputs outputs #:allow-other-keys)
2120 ;; (add-installed-pythonpath inputs outputs)
2121 ;; (zero? (system* "py.test" "-v")))))
2122 (native-inputs
2123 `(("unzip" ,unzip)
2124 ("python-setuptools-scm" ,python-setuptools-scm)))
2125 (propagated-inputs
2126 `(("python-execnet" ,python-execnet)
2127 ("python-pytest" ,python-pytest)
2128 ("python-py" ,python-py)))
2129 (home-page
2130 "https://github.com/pytest-dev/pytest-xdist")
2131 (synopsis
2132 "Plugin for py.test with distributed testing and loop-on-failing modes")
2133 (description
2134 "The pytest-xdist plugin extends py.test with some unique test execution
2135 modes: parallelization, running tests in boxed subprocesses, the ability
2136 to run tests repeatedly when failed, and the ability to run tests on multiple
2137 Python interpreters or platforms. It uses rsync to copy the existing
2138 program code to a remote location, executes there, and then syncs the
2139 result back.")
2140 (license license:expat)))
2141
2142 (define-public python2-pytest-xdist
2143 (package-with-python2 python-pytest-xdist))
2144
2145 (define-public python-scripttest
2146 (package
2147 (name "python-scripttest")
2148 (version "1.3")
2149 (source
2150 (origin
2151 (method url-fetch)
2152 (uri (string-append
2153 "https://pypi.python.org/packages/source/s/scripttest/scripttest-"
2154 version ".tar.gz"))
2155 (sha256
2156 (base32
2157 "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
2158 (build-system python-build-system)
2159 (native-inputs
2160 `(("python-pytest" ,python-pytest)))
2161 (home-page "http://pythonpaste.org/scripttest/")
2162 (synopsis "Python library to test command-line scripts")
2163 (description "Scripttest is a Python helper library for testing
2164 interactive command-line applications. With it you can run a script in a
2165 subprocess and see the output as well as any file modifications.")
2166 (license license:expat)))
2167
2168 (define-public python2-scripttest
2169 (package-with-python2 python-scripttest))
2170
2171 (define-public python-testtools
2172 (package
2173 (name "python-testtools")
2174 (version "1.4.0")
2175 (source
2176 (origin
2177 (method url-fetch)
2178 (uri (pypi-uri "testtools" version))
2179 (sha256
2180 (base32
2181 "1vw8yljnd75d396hhw6s2hrf4cclzy845ifd5am0lxsl235z3i8c"))))
2182 (build-system python-build-system)
2183 (arguments
2184 `(#:phases
2185 (modify-phases %standard-phases
2186 (add-after 'unpack 'fix-module-imports
2187 (lambda _
2188 (substitute* "setup.py"
2189 (("'unittest2>=0.8.0',") ""))
2190 (substitute* '("testtools/testcase.py"
2191 "testtools/testsuite.py"
2192 "testtools/run.py"
2193 "testtools/tests/test_run.py"
2194 "testtools/tests/test_testsuite.py"
2195 "testtools/tests/test_deferredruntest.py")
2196 ;; unittest2 is a backport of Python2.7 features to Python 2.4.
2197 (("import unittest2 as unittest") "import unittest")
2198 (("import unittest2") "import unittest as unittest2")
2199 (("from unittest2 import") "from unittest import"))
2200 (substitute* "testtools/tests/test_testresult.py"
2201 ;; NUL in source code is not allowed (raises ValueError).
2202 (("\\x00\\x04") "\\x04"))
2203 #t)))))
2204 (propagated-inputs
2205 `(("python-mimeparse" ,python-mimeparse)
2206 ("python-extras" ,python-extras)))
2207 (home-page "https://github.com/testing-cabal/testtools")
2208 (synopsis
2209 "Extensions to the Python standard library unit testing framework")
2210 (description
2211 "Testtools extends the Python standard library unit testing framework to
2212 provide matchers, more debugging information, and cross-Python
2213 compatibility.")
2214 (license license:psfl)))
2215
2216 (define-public python2-testtools
2217 (package-with-python2 python-testtools))
2218
2219 (define-public python-testscenarios
2220 (package
2221 (name "python-testscenarios")
2222 (version "0.4")
2223 (source
2224 (origin
2225 (method url-fetch)
2226 (uri (string-append
2227 "https://pypi.python.org/packages/source/t/testscenarios/testscenarios-"
2228 version ".tar.gz"))
2229 (sha256
2230 (base32
2231 "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg"))))
2232 (build-system python-build-system)
2233 (propagated-inputs
2234 `(("python-testtools" ,python-testtools)))
2235 (home-page "https://launchpad.net/testscenarios")
2236 (synopsis "Pyunit extension for dependency injection")
2237 (description
2238 "Testscenarios provides clean dependency injection for Python unittest
2239 style tests.")
2240 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2241
2242 (define-public python2-testscenarios
2243 (package-with-python2 python-testscenarios))
2244
2245 (define-public python-testresources
2246 (package
2247 (name "python-testresources")
2248 (version "0.2.7")
2249 (source
2250 (origin
2251 (method url-fetch)
2252 (uri (string-append
2253 "https://pypi.python.org/packages/source/t/testresources/testresources-"
2254 version ".tar.gz"))
2255 (sha256
2256 (base32
2257 "0cbj3plbllyz42c4b5xxgwaa7mml54lakslrn4kkhinxhdri22md"))))
2258 (build-system python-build-system)
2259 (home-page "https://launchpad.net/testresources")
2260 (synopsis
2261 "Pyunit extension for managing test resources")
2262 (description
2263 "Testresources is an extension to Python's unittest to allow declarative
2264 use of resources by test cases.")
2265 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2266
2267 (define-public python2-testresources
2268 (package-with-python2 python-testresources))
2269
2270 (define-public python-subunit
2271 (package
2272 (name "python-subunit")
2273 (version "0.0.21")
2274 (source
2275 (origin
2276 (method url-fetch)
2277 (uri (string-append
2278 "https://pypi.python.org/packages/source/p/python-subunit/python-subunit-"
2279 version ".tar.gz"))
2280 (sha256
2281 (base32
2282 "1nkw9wfbvizmpajbj3in8ns07g7lwkiv8hip14jjlwk3cacls6jv"))))
2283 (build-system python-build-system)
2284 (propagated-inputs
2285 `(("python-extras" ,python-extras)
2286 ("python-mimeparse" ,python-mimeparse)))
2287 (native-inputs
2288 `(("python-testscenarios" ,python-testscenarios)))
2289 (home-page "http://launchpad.net/subunit")
2290 (synopsis "Python implementation of the subunit protocol")
2291 (description
2292 "Python-subunit is a Python implementation of the subunit test streaming
2293 protocol.")
2294 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2295
2296 (define-public python2-subunit
2297 (package-with-python2 python-subunit))
2298
2299 ;; Recent versions of python-fixtures and python-testrepository need
2300 ;; python-pbr for packaging, which itself needs these two packages for
2301 ;; testing.
2302 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2303 ;; same source, just without any test dependencies and with tests disabled.
2304 ;; python-pbr-minmal is then used to package python-fixtures and
2305 ;; python-testrepository.
2306 ;; Strictly speaking we currently could remove the test-requirements from the
2307 ;; normal python-pbr package (and save this package) since test are disabled
2308 ;; there anyway. But this may change in future.
2309 (define python-pbr-minimal
2310 (package
2311 (name "python-pbr-minimal")
2312 (version "3.0.1")
2313 (source
2314 (origin
2315 (method url-fetch)
2316 (uri (pypi-uri "pbr" version))
2317 (sha256
2318 (base32
2319 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2320 (build-system python-build-system)
2321 (arguments
2322 `(#:tests? #f))
2323 (home-page "http://docs.openstack.org/developer/pbr/")
2324 (synopsis "Minimal build of python-pbr used for bootstrapping")
2325 (description
2326 "Used only for bootstrapping python2-pbr, you should not need this.")
2327 (license license:asl2.0)))
2328
2329 (define python2-pbr-minimal
2330 (package-with-python2 python-pbr-minimal))
2331
2332 (define-public python-pbr
2333 (package
2334 (inherit python-pbr-minimal)
2335 (name "python-pbr")
2336 (arguments
2337 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2338 (propagated-inputs
2339 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2340 (native-inputs
2341 `(("python-fixtures" ,python-fixtures)
2342 ;; discover, coverage, hacking, subunit
2343 ("python-mock" ,python-mock)
2344 ("python-six" ,python-six)
2345 ("python-sphinx" ,python-sphinx)
2346 ("python-testrepository" ,python-testrepository)
2347 ("python-testresources" ,python-testresources)
2348 ("python-testscenarios" ,python-testscenarios)
2349 ("python-testtools" ,python-testtools)
2350 ("python-virtualenv" ,python-virtualenv)))
2351 (synopsis "Enhance the default behavior of Python’s setuptools")
2352 (description
2353 "Python Build Reasonableness (PBR) is a library that injects some useful
2354 and sensible default behaviors into your setuptools run. It will set
2355 versions, process requirements files and generate AUTHORS and ChangeLog file
2356 from git information.
2357 ")))
2358
2359 (define-public python2-pbr
2360 (package-with-python2 python-pbr))
2361
2362 (define-public python-fixtures
2363 (package
2364 (name "python-fixtures")
2365 (version "1.4.0")
2366 (source
2367 (origin
2368 (method url-fetch)
2369 (uri (pypi-uri "fixtures" version))
2370 (sha256
2371 (base32
2372 "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
2373 (build-system python-build-system)
2374 (arguments
2375 '(#:phases
2376 (modify-phases %standard-phases
2377 (replace 'check
2378 (lambda _
2379 (zero? (system* "python" "-m" "testtools.run"
2380 "fixtures.test_suite")))))))
2381 (propagated-inputs
2382 `(("python-six" ,python-six)))
2383 (native-inputs
2384 `(("python-mock" ,python-mock)
2385 ("python-pbr-minimal" ,python-pbr-minimal)
2386 ("python-testtools" ,python-testtools)))
2387 (home-page "https://launchpad.net/python-fixtures")
2388 (synopsis "Python test fixture library")
2389 (description
2390 "Fixtures provides a way to create reusable state, useful when writing
2391 Python tests.")
2392 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2393
2394 (define-public python2-fixtures
2395 (package-with-python2 python-fixtures))
2396
2397 (define-public python-testrepository
2398 (package
2399 (name "python-testrepository")
2400 (version "0.0.20")
2401 (source
2402 (origin
2403 (method url-fetch)
2404 (uri (string-append
2405 "https://pypi.python.org/packages/source/t/testrepository/testrepository-"
2406 version ".tar.gz"))
2407 (sha256
2408 (base32
2409 "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
2410 (build-system python-build-system)
2411 (arguments
2412 ;; FIXME: Many tests are failing.
2413 '(#:tests? #f))
2414 (propagated-inputs
2415 `(("python-fixtures" ,python-fixtures)
2416 ("python-subunit" ,python-subunit)
2417 ("python-testtools" ,python-testtools)))
2418 (native-inputs
2419 `(("python-pbr-minimal" ,python-pbr-minimal) ;; same as for building fixture
2420 ("python-mimeparse" ,python-mimeparse)))
2421 (home-page "https://launchpad.net/testrepository")
2422 (synopsis "Database for Python test results")
2423 (description "Testrepository provides a database of test results which can
2424 be used as part of a developer's workflow to check things such as what tests
2425 have failed since the last commit or what tests are currently failing.")
2426 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2427
2428 (define-public python2-testrepository
2429 (package-with-python2 python-testrepository))
2430
2431 (define-public python-coverage
2432 (package
2433 (name "python-coverage")
2434 (version "4.1")
2435 (source
2436 (origin
2437 (method url-fetch)
2438 (uri (pypi-uri "coverage" version))
2439 (sha256
2440 (base32
2441 "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1"))))
2442 (build-system python-build-system)
2443 (arguments
2444 ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
2445 '(#:tests? #f))
2446 (home-page "http://nedbatchelder.com/code/coverage")
2447 (synopsis "Code coverage measurement for Python")
2448 (description
2449 "Coverage measures code coverage, typically during test execution. It
2450 uses the code analysis tools and tracing hooks provided in the Python standard
2451 library to determine which lines are executable, and which have been
2452 executed.")
2453 (license license:bsd-3)))
2454
2455 (define-public python2-coverage
2456 (package-with-python2 python-coverage))
2457
2458 (define-public python-cov-core
2459 (package
2460 (name "python-cov-core")
2461 (version "1.15.0")
2462 (source
2463 (origin
2464 (method url-fetch)
2465 (uri (pypi-uri "cov-core" version))
2466 (sha256
2467 (base32
2468 "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
2469 (build-system python-build-system)
2470 (propagated-inputs
2471 `(("python-coverage" ,python-coverage)))
2472 (home-page "https://github.com/schlamar/cov-core")
2473 (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
2474 (description
2475 "This is a library package for use by @code{pytest-cov}, @code{nose-cov}
2476 and @code{nose2-cov}. It is useful for developing coverage plugins for these
2477 testing frameworks.")
2478 (license license:expat)))
2479
2480 (define-public python2-cov-core
2481 (package-with-python2 python-cov-core))
2482
2483 (define-public python-discover
2484 (package
2485 (name "python-discover")
2486 (version "0.4.0")
2487 (source
2488 (origin
2489 (method url-fetch)
2490 (uri (string-append
2491 "https://pypi.python.org/packages/source/d/discover/discover-"
2492 version ".tar.gz"))
2493 (sha256
2494 (base32
2495 "0y8d0zwiqar51kxj8lzmkvwc3b8kazb04gk5zcb4nzg5k68zmhq5"))))
2496 (build-system python-build-system)
2497 (home-page "http://pypi.python.org/pypi/discover/")
2498 (synopsis
2499 "Python test discovery for unittest")
2500 (description
2501 "Discover provides test discovery for unittest, a feature that has been
2502 backported from Python 2.7 for Python 2.4+.")
2503 (license license:bsd-3)))
2504
2505 (define-public python2-discover
2506 (package-with-python2 python-discover))
2507
2508 (define-public behave
2509 (package
2510 (name "behave")
2511 (version "1.2.5")
2512 (source (origin
2513 (method url-fetch)
2514 (uri (pypi-uri "behave" version ".tar.bz2"))
2515 (sha256
2516 (base32
2517 "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c"))))
2518 (build-system python-build-system)
2519 (propagated-inputs
2520 `(("python-six" ,python-six)
2521 ("python-parse" ,python-parse)
2522 ("python-parse-type" ,python-parse-type)))
2523 (arguments `(#:tests? #f)) ;TODO: tests require nose>=1.3 and
2524 ;PyHamcrest>=1.8
2525 (home-page "https://github.com/behave/behave")
2526 (synopsis "Python behavior-driven development")
2527 (description
2528 "Behave is a tool for behavior-driven development in python.
2529 Behavior-driven development (or BDD) is an agile software development
2530 technique that encourages collaboration between developers, QA and
2531 non-technical or business participants in a software project. Behave uses
2532 tests written in a natural language style, backed up by Python code.")
2533 (license license:x11)))
2534
2535 (define-public python-exif-read
2536 (package
2537 (name "python-exif-read")
2538 (version "2.1.2")
2539 (source (origin
2540 (method url-fetch)
2541 (uri (pypi-uri "ExifRead" version))
2542 (sha256
2543 (base32
2544 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2545 (build-system python-build-system)
2546 (arguments `(#:tests? #f)) ; no tests
2547 (home-page "https://github.com/ianare/exif-py")
2548 (synopsis "Python library to extract EXIF data from image files")
2549 (description
2550 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2551 files.")
2552 (license license:bsd-3)))
2553
2554 (define-public python2-exif-read
2555 (package-with-python2 python-exif-read))
2556
2557 (define-public python-pyld
2558 (package
2559 (name "python-pyld")
2560 (version "0.7.1")
2561 (source (origin
2562 (method url-fetch)
2563 (uri (pypi-uri "PyLD" version))
2564 (sha256
2565 (base32
2566 "1m0fs6897vxfkf7awah5i66i7b7smm5fnywf1w50fpzyfbfhr156"))))
2567 (build-system python-build-system)
2568 (arguments `(#:tests? #f)) ; no tests
2569 (home-page "https://github.com/digitalbazaar/pyld")
2570 (synopsis "Python implementation of the JSON-LD specification")
2571 (description
2572 "PyLD is an implementation of the JSON-LD specification.")
2573 (license license:bsd-3)))
2574
2575 (define-public python2-pyld
2576 (package-with-python2 python-pyld))
2577
2578 (define-public python-certifi
2579 (package
2580 (name "python-certifi")
2581 (version "2017.1.23")
2582 (source (origin
2583 (method url-fetch)
2584 (uri (pypi-uri "certifi" version))
2585 (sha256
2586 (base32
2587 "1klrzl3hgvcf2mjk00g0k3kk1p2z27vzwnxivwar4vhjmjvpz1w1"))))
2588 (build-system python-build-system)
2589 (home-page "https://certifi.io/")
2590 (synopsis "Python CA certificate bundle")
2591 (description
2592 "Certifi is a Python library that contains a CA certificate bundle, which
2593 is used by the Requests library to verify HTTPS requests.")
2594 (license license:asl2.0)))
2595
2596 (define-public python2-certifi
2597 (package-with-python2 python-certifi))
2598
2599 (define-public python-click
2600 (package
2601 (name "python-click")
2602 (version "6.7")
2603 (source
2604 (origin
2605 (method url-fetch)
2606 (uri (pypi-uri "click" version))
2607 (sha256
2608 (base32
2609 "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi"))))
2610 (build-system python-build-system)
2611 (arguments
2612 `(#:phases
2613 (modify-phases %standard-phases
2614 (add-after 'unpack 'fix-paths
2615 (lambda* (#:key inputs #:allow-other-keys)
2616 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2617 "cross-libc" "libc"))))
2618 (substitute* "click/_unicodefun.py"
2619 (("'locale'")
2620 (string-append "'" glibc "/bin/locale'"))))
2621 #t))
2622 (replace 'check
2623 (lambda _
2624 (zero? (system* "make" "test")))))))
2625 (native-inputs
2626 `(("python-pytest" ,python-pytest)))
2627 (home-page "http://click.pocoo.org")
2628 (synopsis "Command line library for Python")
2629 (description
2630 "Click is a Python package for creating command line interfaces in a
2631 composable way with as little code as necessary. Its name stands for
2632 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2633 with sensible defaults out of the box.")
2634 (license license:bsd-3)))
2635
2636 (define-public python2-click
2637 (package-with-python2 python-click))
2638
2639 (define-public python-wheel
2640 (package
2641 (name "python-wheel")
2642 (version "0.30.0a0")
2643 (source
2644 (origin
2645 (method url-fetch)
2646 (uri (pypi-uri "wheel" version))
2647 (sha256
2648 (base32
2649 "1nm6mn8isny0hr86rhbfrpfj867c0phf001xgsd69xfp9ady1wwq"))))
2650 (build-system python-build-system)
2651 (native-inputs
2652 `(("python-jsonschema" ,python-jsonschema)
2653 ("python-pytest-cov" ,python-pytest-cov)))
2654 (home-page "https://bitbucket.org/pypa/wheel/")
2655 (synopsis "Format for built Python packages")
2656 (description
2657 "A wheel is a ZIP-format archive with a specially formatted filename and
2658 the @code{.whl} extension. It is designed to contain all the files for a PEP
2659 376 compatible install in a way that is very close to the on-disk format. Many
2660 packages will be properly installed with only the @code{Unpack} step and the
2661 unpacked archive preserves enough information to @code{Spread} (copy data and
2662 scripts to their final locations) at any later time. Wheel files can be
2663 installed with a newer @code{pip} or with wheel's own command line utility.")
2664 (license license:expat)
2665 (properties `((python2-variant . ,(delay python2-wheel))))))
2666
2667 (define-public python2-wheel
2668 (let ((wheel (package-with-python2
2669 (strip-python2-variant python-wheel))))
2670 (package (inherit wheel)
2671 (native-inputs `(("python2-functools32" ,python2-functools32)
2672 ,@(package-native-inputs wheel))))))
2673
2674
2675 (define-public python-requests
2676 (package
2677 (name "python-requests")
2678 (version "2.13.0")
2679 (source (origin
2680 (method url-fetch)
2681 (uri (pypi-uri "requests" version))
2682 (sha256
2683 (base32
2684 "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp"))))
2685 ;; TODO: unbundle urllib3 and chardet.
2686 (build-system python-build-system)
2687 (arguments
2688 ;; FIXME: Some tests require network access.
2689 '(#:tests? #f))
2690 (home-page "http://python-requests.org/")
2691 (synopsis "Python HTTP library")
2692 (description
2693 "Requests is a Python HTTP client library. It aims to be easier to use
2694 than Python’s urllib2 library.")
2695 (license license:asl2.0)))
2696
2697 ;; Some software requires an older version of Requests, notably Docker
2698 ;; Compose.
2699 (define-public python-requests-2.7
2700 (package (inherit python-requests)
2701 (version "2.7.0")
2702 (source (origin
2703 (method url-fetch)
2704 (uri (pypi-uri "requests" version))
2705 (sha256
2706 (base32
2707 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
2708
2709 (define-public python2-requests
2710 (package-with-python2 python-requests))
2711
2712 (define-public python-vcversioner
2713 (package
2714 (name "python-vcversioner")
2715 (version "2.16.0.0")
2716 (source
2717 (origin
2718 (method url-fetch)
2719 (uri (pypi-uri "vcversioner" version))
2720 (sha256
2721 (base32
2722 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2723 (build-system python-build-system)
2724 (synopsis "Python library for version number discovery")
2725 (description "Vcversioner is a Python library that inspects tagging
2726 information in a variety of version control systems in order to discover
2727 version numbers.")
2728 (home-page "https://github.com/habnabit/vcversioner")
2729 (license license:isc)))
2730
2731 (define-public python2-vcversioner
2732 (package-with-python2 python-vcversioner))
2733
2734 (define-public python-jsonschema
2735 (package
2736 (name "python-jsonschema")
2737 (version "2.5.1")
2738 (source (origin
2739 (method url-fetch)
2740 (uri
2741 (string-append
2742 "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-"
2743 version ".tar.gz"))
2744 (sha256
2745 (base32
2746 "0hddbqjm4jq63y8jf44nswina1crjs16l9snb6m3vvgyg31klrrn"))))
2747 (build-system python-build-system)
2748 (arguments
2749 '(#:phases
2750 (modify-phases %standard-phases
2751 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
2752 (native-inputs
2753 `(("python-nose" ,python-nose)
2754 ("python-vcversioner" ,python-vcversioner)))
2755 (home-page "https://github.com/Julian/jsonschema")
2756 (synopsis "Implementation of JSON Schema for Python")
2757 (description
2758 "Jsonschema is an implementation of JSON Schema for Python.")
2759 (license license:expat)
2760 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2761
2762 (define-public python2-jsonschema
2763 (let ((jsonschema (package-with-python2
2764 (strip-python2-variant python-jsonschema))))
2765 (package (inherit jsonschema)
2766 (native-inputs
2767 `(("python2-mock" ,python2-mock)
2768 ,@(package-native-inputs jsonschema)))
2769 (propagated-inputs
2770 `(("python2-functools32" ,python2-functools32))))))
2771
2772 (define-public python-schema
2773 (package
2774 (name "python-schema")
2775 (version "0.6.6")
2776 (source
2777 (origin
2778 (method url-fetch)
2779 (uri (pypi-uri "schema" version))
2780 (sha256
2781 (base32
2782 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2783 (build-system python-build-system)
2784 (native-inputs
2785 `(("python-pytest" ,python-pytest)))
2786 (home-page "https://github.com/keleshev/schema")
2787 (synopsis "Simple data validation library")
2788 (description
2789 "@code{python-schema} is a library for validating Python data
2790 structures, such as those obtained from config-files, forms, external
2791 services or command-line parsing, converted from JSON/YAML (or
2792 something else) to Python data-types.")
2793 (license license:psfl)))
2794
2795 (define-public python2-schema
2796 (package-with-python2 python-schema))
2797
2798 (define-public python-schema-0.5
2799 (package (inherit python-schema)
2800 (version "0.5.0")
2801 (source
2802 (origin
2803 (method url-fetch)
2804 (uri (pypi-uri "schema" version))
2805 (sha256
2806 (base32
2807 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2808
2809 (define-public python2-schema-0.5
2810 (package-with-python2 python-schema-0.5))
2811
2812 (define-public python-kitchen
2813 (package
2814 (name "python-kitchen")
2815 (version "1.2.4")
2816 (source
2817 (origin
2818 (method url-fetch)
2819 (uri (pypi-uri "kitchen" version))
2820 (sha256
2821 (base32
2822 "0ggv3p4x8jvmmzhp0xm00h6pvh1g0gmycw71rjwagnrj8n23vxrq"))))
2823 (build-system python-build-system)
2824 (propagated-inputs
2825 `(("python-chardet" ,python-chardet)))
2826 (home-page "https://github.com/fedora-infra/kitchen")
2827 (synopsis "Python API for snippets")
2828 (description "@code{kitchen} module provides a python API for all sorts of
2829 little useful snippets of code that everybody ends up writing for their projects
2830 but never seem big enough to build an independent release. Use kitchen and stop
2831 cutting and pasting that code over and over.")
2832 (license (list license:lgpl2.1+
2833 ;; subprocess.py, test_subprocess.py,
2834 ;; kitchen/pycompat25/defaultdict.py:
2835 license:psfl))))
2836
2837 (define-public python2-kitchen
2838 (package-with-python2 python-kitchen))
2839
2840 (define-public python-unidecode
2841 (package
2842 (name "python-unidecode")
2843 (version "0.04.20")
2844 (source (origin
2845 (method url-fetch)
2846 (uri (pypi-uri "Unidecode" version))
2847 (sha256
2848 (base32
2849 "1q00i8gpsq3d9r0q8wk4b290fxl0kqlsdk7iadvli45in6s1hi7d"))))
2850 (build-system python-build-system)
2851 (home-page "https://pypi.python.org/pypi/Unidecode")
2852 (synopsis "ASCII transliterations of Unicode text")
2853 (description
2854 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2855 useful when integrating with legacy code that doesn't support Unicode, or for
2856 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2857 machine identifiers from human-readable Unicode strings that should still be
2858 somewhat intelligeble.")
2859 (license license:gpl2+)))
2860
2861 (define-public python2-unidecode
2862 (package-with-python2 python-unidecode))
2863
2864 (define-public python-pyjwt
2865 (package
2866 (name "python-pyjwt")
2867 (version "1.5.3")
2868 (source
2869 (origin
2870 (method url-fetch)
2871 (uri (pypi-uri "PyJWT" version))
2872 (sha256
2873 (base32
2874 "1rxsg14i33vm2i6lz0my628108c81k43v10n4h3p0gx62xdyf2sh"))
2875 (modules '((guix build utils)))
2876 (snippet
2877 '(begin
2878 (for-each delete-file-recursively
2879 (find-files "." "\\.pyc$"))
2880 #t))))
2881 (build-system python-build-system)
2882 (native-inputs
2883 `(("python-pytest" ,python-pytest-3.0)
2884 ("python-pytest-cov" ,python-pytest-cov)
2885 ("python-pytest-runner" ,python-pytest-runner)))
2886 (home-page "https://github.com/progrium/pyjwt")
2887 (synopsis "JSON Web Token implementation in Python")
2888 (description
2889 "PyJWT is a JSON Web Token implementation written in Python.")
2890 (license license:expat)))
2891
2892 (define-public python2-pyjwt
2893 (package-with-python2 python-pyjwt))
2894
2895 (define-public python-pykka
2896 (package
2897 (name "python-pykka")
2898 (version "1.2.1")
2899 (source
2900 (origin
2901 (method url-fetch)
2902 (uri (pypi-uri "Pykka" version))
2903 (sha256
2904 (base32
2905 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2906 (build-system python-build-system)
2907 (native-inputs
2908 `(("python-mock" ,python-mock)
2909 ("python-nose" ,python-nose)
2910 ("python-gevent" ,python-gevent)
2911 ("python-eventlet" ,python-eventlet)))
2912 (home-page "https://www.pykka.org/")
2913 (synopsis "Pykka is a Python implementation of the actor model")
2914 (description
2915 "Pykka is a Python implementation of the actor model.
2916 The actor model introduces some simple rules to control the sharing
2917 of state and cooperation between execution units, which makes it
2918 easier to build concurrent applications.")
2919 (license license:asl2.0)))
2920
2921 (define-public python2-pykka
2922 (package-with-python2 python-pykka))
2923
2924 (define-public python-oauthlib
2925 (package
2926 (name "python-oauthlib")
2927 (version "1.0.3")
2928 (source (origin
2929 (method url-fetch)
2930 (uri (pypi-uri "oauthlib" version))
2931 (sha256
2932 (base32
2933 "1bfrj70vdjxjw74khbyh6f0dksv7p5rh2346jnlrffyacd3gwjzg"))))
2934 (build-system python-build-system)
2935 (native-inputs
2936 `(("python-nose" ,python-nose)
2937 ("python-mock" ,python-mock)
2938 ("python-cryptography" ,python-cryptography)
2939 ("python-pyjwt" ,python-pyjwt)
2940 ("python-blinker" ,python-blinker)))
2941 (home-page "https://github.com/idan/oauthlib")
2942 (synopsis "OAuth implementation for Python")
2943 (description
2944 "Oauthlib is a generic, spec-compliant, thorough implementation of the
2945 OAuth request-signing logic.")
2946 (license license:bsd-3)
2947 (properties `((python2-variant . ,(delay python2-oauthlib))))))
2948
2949 (define-public python2-oauthlib
2950 (let ((base (package-with-python2 (strip-python2-variant python-oauthlib))))
2951 (package
2952 (inherit base)
2953 (native-inputs `(("python2-unittest2" ,python2-unittest2)
2954 ,@(package-native-inputs base))))))
2955
2956 (define-public python-itsdangerous
2957 (package
2958 (name "python-itsdangerous")
2959 (version "0.24")
2960 (source
2961 (origin
2962 (method url-fetch)
2963 (uri (string-append
2964 "https://pypi.python.org/packages/source/i/itsdangerous/itsdangerous-"
2965 version ".tar.gz"))
2966 (sha256
2967 (base32
2968 "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb"))))
2969 (build-system python-build-system)
2970 (home-page "https://github.com/mitsuhiko/itsdangerous")
2971 (synopsis "Python library for passing data to/from untrusted environments")
2972 (description
2973 "Itsdangerous provides various helpers to pass trusted data to untrusted
2974 environments and back.")
2975 (license license:bsd-3)))
2976
2977 (define-public python2-itsdangerous
2978 (package-with-python2 python-itsdangerous))
2979
2980 (define-public python-pyyaml
2981 (package
2982 (name "python-pyyaml")
2983 (version "3.12")
2984 (source
2985 (origin
2986 (method url-fetch)
2987 (uri (pypi-uri "PyYAML" version))
2988 (sha256
2989 (base32
2990 "1aqjl8dk9amd4zr99n8v2qxzgmr2hdvqfma4zh7a41rj6336c9sr"))))
2991 (build-system python-build-system)
2992 (inputs
2993 `(("libyaml" ,libyaml)))
2994 (home-page "http://pyyaml.org/wiki/PyYAML")
2995 (synopsis "YAML parser and emitter for Python")
2996 (description
2997 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2998 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2999 API, and sensible error messages. PyYAML supports standard YAML tags and
3000 provides Python-specific tags that allow to represent an arbitrary Python
3001 object.")
3002 (license license:expat)))
3003
3004 (define-public python2-pyyaml
3005 (package-with-python2 python-pyyaml))
3006
3007 (define-public python-virtualenv
3008 (package
3009 (name "python-virtualenv")
3010 (version "15.0.3")
3011 (source
3012 (origin
3013 (method url-fetch)
3014 (uri (pypi-uri "virtualenv" version))
3015 (sha256
3016 (base32
3017 "07cbajzk8l05k5zhlw0b9wbf2is65bl9v6zrn2a0iyn57w6pd73d"))))
3018 (build-system python-build-system)
3019 (arguments
3020 `(#:phases
3021 (modify-phases %standard-phases
3022 (replace 'check
3023 (lambda _
3024 ;; Disable failing test. See upstream bug report
3025 ;; https://github.com/pypa/virtualenv/issues/957
3026 (substitute* "tests/test_virtualenv.py"
3027 (("skipif.*") "skipif(True, reason=\"Guix\")\n"))
3028 (zero? (system* "py.test")))))))
3029 (native-inputs
3030 `(("python-mock" ,python-mock)
3031 ("python-pytest" ,python-pytest)))
3032 (home-page "https://virtualenv.pypa.io/")
3033 (synopsis "Virtual Python environment builder")
3034 (description
3035 "Virtualenv is a tool to create isolated Python environments.")
3036 (license license:expat)))
3037
3038 (define-public python2-virtualenv
3039 (package-with-python2 python-virtualenv))
3040
3041 (define-public python-markupsafe
3042 (package
3043 (name "python-markupsafe")
3044 (version "0.23")
3045 (source
3046 (origin
3047 (method url-fetch)
3048 (uri (string-append
3049 "https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-"
3050 version ".tar.gz"))
3051 (sha256
3052 (base32
3053 "1hvip33wva3fnmvfp9x5klqri7hpl1hkgqmjbss18nmrb7zimv54"))))
3054 (build-system python-build-system)
3055 (home-page "https://github.com/mitsuhiko/markupsafe")
3056 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3057 (description
3058 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3059 for Python.")
3060 (license license:bsd-3)))
3061
3062 (define-public python2-markupsafe
3063 (package-with-python2 python-markupsafe))
3064
3065 (define-public python-jinja2
3066 (package
3067 (name "python-jinja2")
3068 (version "2.9.6")
3069 (source
3070 (origin
3071 (method url-fetch)
3072 (uri (pypi-uri "Jinja2" version))
3073 (sha256
3074 (base32
3075 "1zzrkywhziqffrzks14kzixz7nd4yh2vc0fb04a68vfd2ai03anx"))))
3076 (build-system python-build-system)
3077 (arguments
3078 `(#:phases
3079 (modify-phases %standard-phases
3080 ;; These files cannot be built with Python < 3.6. See
3081 ;; https://github.com/pallets/jinja/issues/655
3082 ;; FIXME: Remove this when the "python" package is upgraded.
3083 (add-after 'unpack 'delete-incompatible-files
3084 (lambda _
3085 (for-each delete-file
3086 '("jinja2/asyncsupport.py"
3087 "jinja2/asyncfilters.py"))
3088 #t)))))
3089 (propagated-inputs
3090 `(("python-markupsafe" ,python-markupsafe)))
3091 (home-page "http://jinja.pocoo.org/")
3092 (synopsis "Python template engine")
3093 (description
3094 "Jinja2 is a small but fast and easy to use stand-alone template engine
3095 written in pure Python.")
3096 (license license:bsd-3)))
3097
3098 (define-public python2-jinja2
3099 (package-with-python2 python-jinja2))
3100
3101 (define-public python-pystache
3102 (package
3103 (name "python-pystache")
3104 (version "0.5.4")
3105 (source (origin
3106 (method url-fetch)
3107 (uri (pypi-uri "pystache" version))
3108 (sha256
3109 (base32
3110 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3111 (build-system python-build-system)
3112 (arguments
3113 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3114 (home-page "http://defunkt.io/pystache/")
3115 (synopsis "Python logic-less template engine")
3116 (description
3117 "Pystache is a Python implementation of the framework agnostic,
3118 logic-free templating system Mustache.")
3119 (license license:expat)
3120 (properties `((python2-variant . ,(delay python2-pystache))))))
3121
3122 (define-public python2-pystache
3123 (package (inherit (package-with-python2
3124 (strip-python2-variant python-pystache)))
3125 (arguments
3126 `(#:python ,python-2
3127 #:phases
3128 (modify-phases %standard-phases
3129 (replace 'check
3130 (lambda _
3131 (zero? (system* "python" "test_pystache.py")))))))))
3132
3133 (define-public python-joblib
3134 (package
3135 (name "python-joblib")
3136 (version "0.10.3")
3137 (source (origin
3138 (method url-fetch)
3139 (uri (pypi-uri "joblib" version))
3140 (sha256
3141 (base32
3142 "0787k919zlfmgymprz5bzv0v1df5bbirlf3awrghmjgvkrd9dci9"))
3143 (modules '((guix build utils)))
3144 (snippet
3145 '(begin
3146 ;; Remove pre-compiled .pyc files from source.
3147 (for-each delete-file-recursively
3148 (find-files "." "__pycache__" #:directories? #t))
3149 (for-each delete-file (find-files "." "\\.pyc$"))
3150 #t))))
3151 (build-system python-build-system)
3152 (arguments
3153 `(#:phases
3154 (modify-phases %standard-phases
3155 (add-before 'check 'disable-failing-tests
3156 (lambda _
3157 ;; This numpydoc tests fails for unknown reasons
3158 (delete-file "doc/sphinxext/numpydoc/tests/test_docscrape.py")
3159 ;; This numpydoc test depends on matplotlib, which is not a
3160 ;; required input.
3161 (delete-file "doc/sphinxext/numpydoc/tests/test_plot_directive.py")
3162 ;; These tests fail to execute sys.executable
3163 (substitute* "joblib/test/test_parallel.py"
3164 (("import nose" line)
3165 (string-append "from nose.plugins.skip import SkipTest\n" line))
3166 (("def test_nested_parallel_warnings" line)
3167 (string-append "@SkipTest\n" line))
3168 (("def test_parallel_with_interactively_defined_functions" line)
3169 (string-append "@SkipTest\n" line)))
3170 #t)))))
3171 ;; Provide nose to enable tests command
3172 (native-inputs
3173 `(("python-nose" ,python-nose)
3174 ("python-sphinx" ,python-sphinx)
3175 ("python-docutils" ,python-docutils)
3176 ("python-numpydoc" ,python-numpydoc)))
3177 (home-page "http://pythonhosted.org/joblib/")
3178 (synopsis "Using Python functions as pipeline jobs")
3179 (description
3180 "Joblib is a set of tools to provide lightweight pipelining in Python.
3181 In particular, joblib offers: transparent disk-caching of the output values
3182 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3183 logging and tracing of the execution.")
3184 (license license:bsd-3)))
3185
3186 (define-public python2-joblib
3187 (package-with-python2 python-joblib))
3188
3189 (define-public python-docutils
3190 (package
3191 (name "python-docutils")
3192 (version "0.13.1")
3193 (source
3194 (origin
3195 (method url-fetch)
3196 (uri (pypi-uri "docutils" version))
3197 (sha256
3198 (base32
3199 "1gkma47i609jfs7dssxn4y9vsz06qi0l5q41nws0zgkpnrghz33i"))))
3200 (build-system python-build-system)
3201 (arguments
3202 '(#:tests? #f)) ; no setup.py test command
3203 (home-page "http://docutils.sourceforge.net/")
3204 (synopsis "Python Documentation Utilities")
3205 (description
3206 "Docutils is a modular system for processing documentation into useful
3207 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3208 reStructuredText.")
3209 ;; Most of the source code is public domain, but some source files are
3210 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3211 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3212
3213 (define-public python2-docutils
3214 (package-with-python2 python-docutils))
3215
3216 (define-public python-pygments
3217 (package
3218 (name "python-pygments")
3219 (version "2.2.0")
3220 (source
3221 (origin
3222 (method url-fetch)
3223 (uri (pypi-uri "Pygments" version))
3224 (sha256
3225 (base32
3226 "1k78qdvir1yb1c634nkv6rbga8wv4289xarghmsbbvzhvr311bnv"))))
3227 (build-system python-build-system)
3228 (arguments
3229 ;; FIXME: Tests require sphinx, which depends on this.
3230 '(#:tests? #f))
3231 (home-page "http://pygments.org/")
3232 (synopsis "Syntax highlighting")
3233 (description
3234 "Pygments is a syntax highlighting package written in Python.")
3235 (license license:bsd-2)))
3236
3237 (define-public python2-pygments
3238 (package-with-python2 python-pygments))
3239
3240 (define-public python-sphinxcontrib-websupport
3241 (package
3242 (name "python-sphinxcontrib-websupport")
3243 (version "1.0.1")
3244 (source (origin
3245 (method url-fetch)
3246 (uri (pypi-uri "sphinxcontrib-websupport" version))
3247 (sha256
3248 (base32
3249 "1f9f0wjpi9nhikbyaz6d19s7qvzdf1nq2g5dsh640fma4q9rd1bs"))))
3250 (build-system python-build-system)
3251 (propagated-inputs
3252 `(("python-mock" ,python-mock)
3253 ("python-pytest" ,python-pytest)
3254 ("python-xapian-bindings" ,python-xapian-bindings)))
3255 ;; Needed for running the test suite
3256 (native-inputs
3257 `(("python-six" ,python-six)
3258 ("python-jinja2" ,python-jinja2)
3259 ("python-docutils" ,python-docutils)
3260 ("python-sphinx" ,python-sphinx)
3261 ("python-sqlalchemy" ,python-sqlalchemy)
3262 ("python-whoosh" ,python-whoosh)))
3263 (home-page "http://sphinx-doc.org/")
3264 (synopsis "Sphinx API for web applications")
3265 (description "This package provides a Python API to easily integrate
3266 Sphinx documentation into your web application. It provides tools to
3267 integrate Sphinx documents in web templates and to handle searches.")
3268 (license license:bsd-3)))
3269
3270 (define-public python-sphinx
3271 (package
3272 (name "python-sphinx")
3273 (version "1.5.1")
3274 (source
3275 (origin
3276 (method url-fetch)
3277 (uri (pypi-uri "Sphinx" version))
3278 (sha256
3279 (base32
3280 "1i8p9idnli4gr0y4x67yakbdk5w6a0xjzhrg6bg51y9d1fi7fslf"))))
3281 (build-system python-build-system)
3282 (arguments
3283 `(#:phases
3284 (modify-phases %standard-phases
3285 (replace 'check
3286 (lambda _
3287 ;; Requires Internet access.
3288 (delete-file "tests/test_build_linkcheck.py")
3289 (zero? (system* "make" "test")))))))
3290 (propagated-inputs
3291 `(("python-imagesize" ,python-imagesize)
3292 ("python-sphinx-alabaster-theme"
3293 ,python-sphinx-alabaster-theme)
3294 ("python-babel" ,python-babel)
3295 ("python-snowballstemmer" ,python-snowballstemmer)
3296 ("python-docutils" ,python-docutils)
3297 ("python-jinja2" ,python-jinja2)
3298 ("python-pygments" ,python-pygments)
3299 ("python-requests" ,python-requests)
3300 ("python-six" ,python-six)))
3301 (native-inputs
3302 `(("graphviz" ,graphviz)
3303 ("python-html5lib" ,python-html5lib)
3304 ("python-mock" ,python-mock)
3305 ("python-nose" ,python-nose)))
3306 (home-page "http://sphinx-doc.org/")
3307 (synopsis "Python documentation generator")
3308 (description "Sphinx is a tool that makes it easy to create documentation
3309 for Python projects or other documents consisting of multiple reStructuredText
3310 sources.")
3311 (license license:bsd-3)
3312 (properties `((python2-variant . ,(delay python2-sphinx))))))
3313
3314 (define-public python-sphinx-1.6
3315 (package (inherit python-sphinx)
3316 (name "python-sphinx")
3317 (version "1.6.3")
3318 (source (origin
3319 (method url-fetch)
3320 (uri (pypi-uri "Sphinx" version))
3321 (sha256
3322 (base32
3323 "1rj6f3i8hmrx2qlkshi5kp5xcy98dlynwlyl05yvflj5f66dp2xg"))))
3324 (arguments
3325 `(#:phases
3326 (modify-phases %standard-phases
3327 (replace 'check
3328 (lambda _
3329 ;; Requires Internet access.
3330 (delete-file "tests/test_build_linkcheck.py")
3331 (substitute* "tests/test_build_latex.py"
3332 (("@pytest.mark.sphinx\\('latex', testroot='images'\\)")
3333 "@pytest.mark.skip()"))
3334 (zero? (system* "make" "test")))))))
3335 (propagated-inputs
3336 `(("python-sphinxcontrib-websupport" ,python-sphinxcontrib-websupport)
3337 ,@(package-propagated-inputs python-sphinx)))
3338 (native-inputs
3339 `(("python-pytest" ,python-pytest-3.0)
3340 ("imagemagick" ,imagemagick) ; for "convert"
3341 ,@(package-native-inputs python-sphinx)))
3342 (properties '())))
3343
3344 (define-public python-sphinx-1.5.3
3345 (package
3346 (inherit python-sphinx)
3347 (name "python-sphinx")
3348 (version "1.5.3")
3349 (source
3350 (origin
3351 (method url-fetch)
3352 (uri (pypi-uri "Sphinx" version))
3353 (sha256
3354 (base32
3355 "0kw1axswbvaavr8ggyf4qr6hnisnrzlbkkcdada69vk1x9xjassg"))))
3356 (native-inputs
3357 `(("python-pytest" ,python-pytest-3.0)
3358 ,@(package-native-inputs python-sphinx)))))
3359
3360 (define-public python2-sphinx
3361 (let ((base (package-with-python2 (strip-python2-variant python-sphinx))))
3362 (package
3363 (inherit base)
3364 (native-inputs `(("python2-mock" ,python2-mock)
3365 ("python2-enum34" ,python2-enum34)
3366 ,@(package-native-inputs base)))
3367 (propagated-inputs `(("python2-pytz" ,python2-pytz)
3368 ,@(package-propagated-inputs base))))))
3369
3370 (define-public python-sphinx-rtd-theme
3371 (package
3372 (name "python-sphinx-rtd-theme")
3373 (version "0.2.4")
3374 (source
3375 (origin
3376 (method url-fetch)
3377 (uri (pypi-uri "sphinx_rtd_theme" version))
3378 (sha256
3379 (base32
3380 "05rlhjzdyapr2w74jjs7mrm8hi69qskcr5vya9f9drpsys7lpxrd"))))
3381 (build-system python-build-system)
3382 (arguments '(#:tests? #f)) ; No tests.
3383 (propagated-inputs
3384 `(("python-sphinx" ,python-sphinx)))
3385 (home-page "https://github.com/snide/sphinx_rtd_theme/")
3386 (synopsis "ReadTheDocs.org theme for Sphinx")
3387 (description "A theme for Sphinx used by ReadTheDocs.org.")
3388 (license license:expat)))
3389
3390 (define-public python2-sphinx-rtd-theme
3391 (package-with-python2 python-sphinx-rtd-theme))
3392
3393 (define-public python-rst.linker
3394 (package
3395 (name "python-rst.linker")
3396 (version "1.7")
3397 (source
3398 (origin
3399 (method url-fetch)
3400 (uri (pypi-uri "rst.linker" version))
3401 (sha256
3402 (base32
3403 "0bh4lnj2p1nh0wf5pgxgfbrp27xhb1rinahkb5j7s3qprq6qn0sr"))))
3404 (build-system python-build-system)
3405 (propagated-inputs
3406 `(("python-dateutil" ,python-dateutil)
3407 ("python-six" ,python-six)))
3408 (native-inputs
3409 `(("python-setuptools-scm" ,python-setuptools-scm)))
3410 ;; Test would require path.py, which would introduce a cyclic dependence.
3411 (arguments `(#:tests? #f))
3412 ;; Note: As of version 1.7 the documentation is not worth building.
3413 (home-page "https://github.com/jaraco/rst.linker")
3414 (synopsis "Sphinx plugin to add links and timestamps")
3415 (description "rst.linker allows to automatically replace text by a
3416 reStructuredText external reference or timestamps. It's primary purpose is to
3417 augment the changelog, but it can be used for other documents, too.")
3418 (license license:expat)))
3419
3420 (define-public python2-rst.linker
3421 (package-with-python2 python-rst.linker))
3422
3423 (define-public python-feedgenerator
3424 (package
3425 (name "python-feedgenerator")
3426 (version "1.9")
3427 (source
3428 (origin
3429 (method url-fetch)
3430 (uri (pypi-uri "feedgenerator" version))
3431 (sha256
3432 (base32
3433 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3434 (modules '((guix build utils)))
3435 (snippet
3436 '(begin
3437 ;; Remove pre-compiled .pyc files from source.
3438 (for-each delete-file-recursively
3439 (find-files "." "__pycache__" #:directories? #t))
3440 (for-each delete-file (find-files "." "\\.pyc$"))
3441 #t))))
3442 (build-system python-build-system)
3443 (propagated-inputs
3444 `(("python-pytz" ,python-pytz)
3445 ("python-six" ,python-six)))
3446 (home-page "https://github.com/getpelican/feedgenerator")
3447 (synopsis
3448 "Standalone version of Django's Atom/RSS feed generator")
3449 (description
3450 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3451 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3452 (license license:bsd-3)))
3453
3454 (define-public python2-feedgenerator
3455 (package-with-python2 python-feedgenerator))
3456
3457 (define-public python-blinker
3458 (package
3459 (name "python-blinker")
3460 (version "1.4")
3461 (source
3462 (origin
3463 (method url-fetch)
3464 (uri (pypi-uri "blinker" version))
3465 (sha256
3466 (base32
3467 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3468 (build-system python-build-system)
3469 (home-page "http://pythonhosted.org/blinker/")
3470 (synopsis "Fast, simple object-to-object and broadcast signaling")
3471 (description
3472 "Blinker provides a fast dispatching system that allows any number of
3473 interested parties to subscribe to events, or \"signals\".")
3474 (license license:expat)))
3475
3476 (define-public python2-blinker
3477 (package-with-python2 python-blinker))
3478
3479 (define-public pelican
3480 (package
3481 (name "pelican")
3482 (version "3.6.3")
3483 (source
3484 (origin
3485 (method url-fetch)
3486 (uri (pypi-uri "pelican" version))
3487 (sha256
3488 (base32
3489 "1hn94rb4q3zmcq16in055xikal4dba5hfx3zznq7warllcgc9f8k"))))
3490 (build-system python-build-system)
3491 (propagated-inputs
3492 `(("python-feedgenerator" ,python-feedgenerator)
3493 ("python-jinja2" ,python-jinja2)
3494 ("python-pygments" ,python-pygments)
3495 ("python-docutils" ,python-docutils)
3496 ("python-pytz" ,python-pytz)
3497 ("python-blinker" ,python-blinker)
3498 ("python-unidecode" ,python-unidecode)
3499 ("python-six" ,python-six)
3500 ("python-dateutil" ,python-dateutil)))
3501 (home-page "http://getpelican.com/")
3502 (arguments
3503 `(;; XXX Requires a lot more packages to do unit tests :P
3504 #:tests? #f
3505 #:phases (modify-phases %standard-phases
3506 (add-before
3507 'install 'adjust-requires
3508 ;; Since feedgenerator is installed from git, it doesn't
3509 ;; conform to the version requirements.
3510 ;;
3511 ;; We *do have* "feedgenerator >= 1.6", but strip off the
3512 ;; version requirement so setuptools doesn't get confused.
3513 (lambda _
3514 (substitute* "setup.py"
3515 (("['\"]feedgenerator.*?['\"]")
3516 "'feedgenerator'")))))))
3517 (synopsis "Python-based static site publishing system")
3518 (description
3519 "Pelican is a tool to generate a static blog from reStructuredText,
3520 Markdown input files, and more. Pelican uses Jinja2 for templating
3521 and is very extensible.")
3522 (license license:agpl3+)))
3523
3524 (define-public python-scikit-learn
3525 (package
3526 (name "python-scikit-learn")
3527 (version "0.19.0")
3528 (source
3529 (origin
3530 (method url-fetch)
3531 (uri (string-append
3532 "https://github.com/scikit-learn/scikit-learn/archive/"
3533 version ".tar.gz"))
3534 (file-name (string-append name "-" version ".tar.gz"))
3535 (sha256
3536 (base32
3537 "0g7q4ri75mj93wpa9bp83a3jmrf3dm5va9h7k4zkbcxr6bgqka15"))))
3538 (build-system python-build-system)
3539 (arguments
3540 `(#:phases
3541 (modify-phases %standard-phases
3542 (delete 'check)
3543 (add-after 'install 'check
3544 ;; Running tests from the source directory requires
3545 ;; an "inplace" build with paths relative to CWD.
3546 ;; http://scikit-learn.org/stable/developers/advanced_installation.html#testing
3547 ;; Use the installed version instead.
3548 (lambda* (#:key inputs outputs #:allow-other-keys)
3549 (add-installed-pythonpath inputs outputs)
3550 ;; some tests require access to "$HOME"
3551 (setenv "HOME" "/tmp")
3552 ;; Step out of the source directory just to be sure.
3553 (chdir "..")
3554 (zero? (system* "nosetests" "-v" "sklearn")))))))
3555 (inputs
3556 `(("openblas" ,openblas)))
3557 (native-inputs
3558 `(("python-nose" ,python-nose)
3559 ("python-cython" ,python-cython)))
3560 (propagated-inputs
3561 `(("python-numpy" ,python-numpy)
3562 ("python-scipy" ,python-scipy)))
3563 (home-page "http://scikit-learn.org/")
3564 (synopsis "Machine Learning in Python")
3565 (description
3566 "Scikit-learn provides simple and efficient tools for data
3567 mining and data analysis.")
3568 (license license:bsd-3)))
3569
3570 (define-public python2-scikit-learn
3571 (package-with-python2 python-scikit-learn))
3572
3573 (define-public python-scikit-image
3574 (package
3575 (name "python-scikit-image")
3576 (version "0.11.3")
3577 (source
3578 (origin
3579 (method url-fetch)
3580 (uri (string-append
3581 "https://pypi.python.org/packages/source/s/scikit-image/scikit-image-"
3582 version ".tar.gz"))
3583 (sha256
3584 (base32 "0jz416fqvpahqyffw8plmszzfj669w8wvf3y9clnr5lr6a7md3kn"))))
3585 (build-system python-build-system)
3586 (arguments
3587 ;; TODO: Some tests require running X11 server. Disable them?
3588 '(#:tests? #f))
3589 ;; See DEPENDS.txt for the list of build and run time requiremnts
3590 (propagated-inputs
3591 `(("python-matplotlib" ,python-matplotlib)
3592 ("python-networkx" ,python-networkx)
3593 ("python-scipy" ,python-scipy)
3594 ("python-pillow" ,python-pillow)))
3595 (native-inputs
3596 `(("python-numpy" ,python-numpy)
3597 ("python-cython" ,python-cython)
3598 ("python-six" ,python-six)))
3599 (home-page "http://scikit-image.org/")
3600 (synopsis "Image processing in Python")
3601 (description
3602 "Scikit-image is a collection of algorithms for image processing.")
3603 (license license:bsd-3)))
3604
3605 (define-public python2-scikit-image
3606 (package-with-python2 python-scikit-image))
3607
3608 (define-public python-redis
3609 (package
3610 (name "python-redis")
3611 (version "2.10.5")
3612 (source
3613 (origin
3614 (method url-fetch)
3615 (uri (pypi-uri "redis" version))
3616 (sha256
3617 (base32 "0csmrkxb29x7xs9b51zplwkkq2hwnbh9jns1g85dykn5rxmaxysx"))))
3618 (build-system python-build-system)
3619 ;; Tests require a running Redis server
3620 (arguments '(#:tests? #f))
3621 ;; As long as we are not running test, we do not need this input :-)
3622 ;;(native-inputs
3623 ;; `(("python-pytest" ,python-pytest)))
3624 (home-page "https://github.com/andymccurdy/redis-py")
3625 (synopsis "Redis Python client")
3626 (description
3627 "This package provides a Python interface to the Redis key-value store.")
3628 (license license:expat)))
3629
3630 (define-public python2-redis
3631 (package-with-python2 python-redis))
3632
3633 (define-public python-rq
3634 (package
3635 (name "python-rq")
3636 (version "0.7.1")
3637 (source
3638 (origin
3639 (method url-fetch)
3640 (uri (pypi-uri "rq" version))
3641 (sha256
3642 (base32 "0gaq5pnh0zy46r8jvygi0ifbvz3pq6i7xla78ijcgjw0x77qzsdh"))))
3643 (build-system python-build-system)
3644 (propagated-inputs
3645 `(("python-click" ,python-click)
3646 ("python-redis" ,python-redis)))
3647 (home-page "http://python-rq.org/")
3648 (synopsis "Simple job queues for Python")
3649 (description
3650 "RQ (Redis Queue) is a simple Python library for queueing jobs and
3651 processing them in the background with workers. It is backed by Redis and it
3652 is designed to have a low barrier to entry.")
3653 (license license:bsd-2)))
3654
3655 (define-public python2-rq
3656 (package-with-python2 python-rq))
3657
3658 (define-public python-cython
3659 (package
3660 (name "python-cython")
3661 (version "0.26")
3662 (source
3663 (origin
3664 (method url-fetch)
3665 (uri (pypi-uri "Cython" version))
3666 (sha256
3667 (base32
3668 "0riciynnr0r68cvg6r3gbhi9x7h44pdwb7926m6n5vfs5p1f492c"))))
3669 (build-system python-build-system)
3670 ;; we need the full python package and not just the python-wrapper
3671 ;; because we need libpython3.3m.so
3672 (inputs
3673 `(("python" ,python)))
3674 (arguments
3675 `(#:phases
3676 (modify-phases %standard-phases
3677 (add-before 'check 'set-HOME
3678 ;; some tests require access to "$HOME/.cython"
3679 (lambda _ (setenv "HOME" "/tmp") #t))
3680 (replace 'check
3681 (lambda _ (zero? (system* "python" "runtests.py" "-vv")))))))
3682 (home-page "http://cython.org/")
3683 (synopsis "C extensions for Python")
3684 (description "Cython is an optimising static compiler for both the Python
3685 programming language and the extended Cython programming language. It makes
3686 writing C extensions for Python as easy as Python itself.")
3687 (license license:asl2.0)
3688 (properties `((python2-variant . ,(delay python2-cython))))))
3689
3690 (define-public python2-cython
3691 (package (inherit (package-with-python2
3692 (strip-python2-variant python-cython)))
3693 (name "python2-cython")
3694 (inputs
3695 `(("python-2" ,python-2))))) ; this is not automatically changed
3696
3697 ;; The RPython toolchain currently does not support Python 3.
3698 (define-public python2-rpython
3699 (package
3700 (name "python2-rpython")
3701 (version "0.1.4")
3702 (source
3703 (origin
3704 (method url-fetch)
3705 (uri (pypi-uri "rpython" version))
3706 (sha256
3707 (base32
3708 "07pps06fq4c4wmi5ii0sgh9zgwniz5y7frqhm28g3a154l163fxc"))))
3709 (build-system python-build-system)
3710 (arguments `(#:python ,python-2))
3711 (native-inputs
3712 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
3713 (home-page "https://rpython.readthedocs.org")
3714 (synopsis "Framework for implementing interpreters and virtual machines")
3715 (description "RPython is a translation and support framework for
3716 producing implementations of dynamic languages, emphasizing a clean separation
3717 between language specification and implementation aspects.")
3718 (license license:expat)))
3719
3720 (define-public python-numpy
3721 (package
3722 (name "python-numpy")
3723 (version "1.12.0")
3724 (source
3725 (origin
3726 (method url-fetch)
3727 (uri (string-append
3728 "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
3729 (file-name (string-append name "-" version ".tar.gz"))
3730 (sha256
3731 (base32
3732 "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d"))))
3733 (build-system python-build-system)
3734 (inputs
3735 `(("openblas" ,openblas)
3736 ("lapack" ,lapack)))
3737 (native-inputs
3738 `(("python-cython" ,python-cython)
3739 ("python-nose" ,python-nose)
3740 ("gfortran" ,gfortran)))
3741 (arguments
3742 `(#:phases
3743 (modify-phases %standard-phases
3744 (add-before 'build 'set-environment-variables
3745 (lambda* (#:key inputs #:allow-other-keys)
3746 (call-with-output-file "site.cfg"
3747 (lambda (port)
3748 (format port
3749 "[openblas]
3750 libraries = openblas
3751 library_dirs = ~a/lib
3752 include_dirs = ~a/include
3753
3754 # backslash-n to make emacs happy
3755 \n[lapack]
3756 lapack_libs = lapack
3757 library_dirs = ~a/lib
3758 include_dirs = ~a/include
3759 "
3760 (assoc-ref inputs "openblas")
3761 (assoc-ref inputs "openblas")
3762 (assoc-ref inputs "lapack")
3763 (assoc-ref inputs "lapack"))))
3764 ;; Use "gcc" executable, not "cc".
3765 (substitute* "numpy/distutils/system_info.py"
3766 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
3767 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
3768 #t))
3769 ;; Tests can only be run after the library has been installed and not
3770 ;; within the source directory.
3771 (delete 'check)
3772 (add-after 'install 'check
3773 (lambda* (#:key outputs inputs #:allow-other-keys)
3774 ;; Make installed package available for running the tests
3775 (add-installed-pythonpath inputs outputs)
3776 (with-directory-excursion "/tmp"
3777 (zero? (system* "python" "-c"
3778 "import numpy; numpy.test(verbose=2)"))))))))
3779 (home-page "http://www.numpy.org/")
3780 (synopsis "Fundamental package for scientific computing with Python")
3781 (description "NumPy is the fundamental package for scientific computing
3782 with Python. It contains among other things: a powerful N-dimensional array
3783 object, sophisticated (broadcasting) functions, tools for integrating C/C++
3784 and Fortran code, useful linear algebra, Fourier transform, and random number
3785 capabilities.")
3786 (license license:bsd-3)))
3787
3788 (define-public python2-numpy
3789 (package-with-python2 python-numpy))
3790
3791 (define-public python-munch
3792 (package
3793 (name "python-munch")
3794 (version "2.0.4")
3795 (source
3796 (origin
3797 (method url-fetch)
3798 (uri (pypi-uri "munch" version))
3799 (sha256
3800 (base32
3801 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
3802 (build-system python-build-system)
3803 (home-page "https://github.com/Infinidat/munch")
3804 (synopsis "Dot-accessible dictionary")
3805 (description "Munch is a dot-accessible dictionary similar to JavaScript
3806 objects.")
3807 (license license:expat)))
3808
3809 (define-public python2-munch
3810 (package-with-python2 python-munch))
3811
3812 (define-public python-colormath
3813 (package
3814 (name "python-colormath")
3815 (version "2.1.1")
3816 (source
3817 (origin
3818 (method url-fetch)
3819 (uri (pypi-uri "colormath" version))
3820 (sha256
3821 (base32
3822 "01wp5xwm0a89wdm1dc9rr1ij90idzdiiipxdj1yslhqzkhnjnfh0"))))
3823 (build-system python-build-system)
3824 (propagated-inputs
3825 `(("python-networkx" ,python-networkx)
3826 ("python-numpy" ,python-numpy)))
3827 (home-page "https://github.com/gtaylor/python-colormath")
3828 (synopsis "Color math and conversion library")
3829 (description
3830 "This is a Python library for color math and conversions.")
3831 (license license:bsd-3)))
3832
3833 (define-public python2-colormath
3834 (package-with-python2 python-colormath))
3835
3836 (define-public python-spectra
3837 (package
3838 (name "python-spectra")
3839 (version "0.0.8")
3840 (source
3841 (origin
3842 (method url-fetch)
3843 (uri (pypi-uri "spectra" version))
3844 (sha256
3845 (base32
3846 "0n87kzhpkml2s2q91rdkl8wz2kkv5b0bkrgww45lxa5vq34qh6w5"))))
3847 (build-system python-build-system)
3848 (arguments
3849 `(#:phases
3850 (modify-phases %standard-phases
3851 (replace 'check
3852 (lambda _
3853 (zero? (system* "nosetests" "-v")))))))
3854 (propagated-inputs
3855 `(("python-colormath" ,python-colormath)))
3856 (native-inputs
3857 `(("python-nose" ,python-nose)))
3858 (home-page "http://github.com/jsvine/spectra")
3859 (synopsis "Color scales and color conversion")
3860 (description
3861 "This package provides a Python library intended to make color math,
3862 color scales, and color space conversion easy. It has support for:
3863
3864 @enumerate
3865 @item Color scales
3866 @item Color ranges
3867 @item Color blending
3868 @item Brightening/darkening colors
3869 @item Saturating/desaturating colors
3870 @item Conversion to/from multiple color spaces.
3871 @end enumerate\n")
3872 (license license:expat)))
3873
3874 (define-public python2-spectra
3875 (package-with-python2 python-spectra))
3876
3877 (define-public python2-fastlmm
3878 (package
3879 (name "python2-fastlmm")
3880 (version "0.2.21")
3881 (source
3882 (origin
3883 (method url-fetch)
3884 (uri (pypi-uri "fastlmm" version ".zip"))
3885 (sha256
3886 (base32
3887 "1q8c34rpmwkfy3r4d5172pzdkpfryj561897z9r3x22gq7813x1m"))))
3888 (build-system python-build-system)
3889 (arguments
3890 `(#:python ,python-2)) ; only Python 2.7 is supported
3891 (propagated-inputs
3892 `(("python2-numpy" ,python2-numpy)
3893 ("python2-scipy" ,python2-scipy)
3894 ("python2-matplotlib" ,python2-matplotlib)
3895 ("python2-pandas" ,python2-pandas)
3896 ("python2-scikit-learn" ,python2-scikit-learn)
3897 ("python2-pysnptools" ,python2-pysnptools)))
3898 (native-inputs
3899 `(("unzip" ,unzip)
3900 ("python2-cython" ,python2-cython)
3901 ("python2-mock" ,python2-mock)
3902 ("python2-nose" ,python2-nose)))
3903 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
3904 (synopsis "Perform genome-wide association studies on large data sets")
3905 (description
3906 "FaST-LMM, which stands for Factored Spectrally Transformed Linear Mixed
3907 Models, is a program for performing both single-SNP and SNP-set genome-wide
3908 association studies (GWAS) on extremely large data sets.")
3909 (license license:asl2.0)))
3910
3911 (define-public python-numpy-documentation
3912 (package
3913 (name "python-numpy-documentation")
3914 (version (package-version python-numpy))
3915 (source (package-source python-numpy))
3916 (build-system python-build-system)
3917 (native-inputs
3918 `(("python-matplotlib" ,python-matplotlib)
3919 ("python-numpy" ,python-numpy)
3920 ("pkg-config" ,pkg-config)
3921 ("python-sphinx" ,python-sphinx)
3922 ("python-numpydoc" ,python-numpydoc)
3923 ("texlive" ,(texlive-union (list texlive-fonts-amsfonts
3924 texlive-fonts-ec
3925 texlive-generic-ifxetex
3926 texlive-generic-pdftex
3927 texlive-latex-amsfonts
3928 texlive-latex-capt-of
3929 texlive-latex-cmap
3930 texlive-latex-environ
3931 texlive-latex-eqparbox
3932 texlive-latex-etoolbox
3933 texlive-latex-expdlist
3934 texlive-latex-fancyhdr
3935 texlive-latex-fancyvrb
3936 texlive-latex-fncychap
3937 texlive-latex-float
3938 texlive-latex-framed
3939 texlive-latex-geometry
3940 texlive-latex-graphics
3941 texlive-latex-hyperref
3942 texlive-latex-mdwtools
3943 texlive-latex-multirow
3944 texlive-latex-oberdiek
3945 texlive-latex-parskip
3946 texlive-latex-preview
3947 texlive-latex-tabulary
3948 texlive-latex-threeparttable
3949 texlive-latex-titlesec
3950 texlive-latex-trimspaces
3951 texlive-latex-ucs
3952 texlive-latex-upquote
3953 texlive-latex-url
3954 texlive-latex-varwidth
3955 texlive-latex-wrapfig)))
3956 ("texinfo" ,texinfo)
3957 ("perl" ,perl)
3958 ("scipy-sphinx-theme"
3959 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
3960 (method git-fetch)
3961 (uri (git-reference
3962 (url "https://github.com/scipy/scipy-sphinx-theme.git")
3963 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
3964 (sha256
3965 (base32
3966 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
3967 ,@(package-native-inputs python-numpy)))
3968 (arguments
3969 `(#:tests? #f ; we're only generating the documentation
3970 #:phases
3971 (modify-phases %standard-phases
3972 (delete 'build)
3973 (replace 'install
3974 (lambda* (#:key inputs outputs #:allow-other-keys)
3975 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
3976 (doc (string-append
3977 data "/doc/" ,name "-"
3978 ,(package-version python-numpy)))
3979 (info-reader (string-append data "/info"))
3980 (html (string-append doc "/html"))
3981 (scipy-sphinx-theme "scipy-sphinx-theme")
3982 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
3983 (pyver ,(string-append "PYVER=")))
3984
3985 ;; FIXME: this is needed to for texlive-union to generate
3986 ;; fonts, which are not found.
3987 (setenv "HOME" "/tmp")
3988
3989 (with-directory-excursion "doc"
3990 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
3991 (mkdir-p html)
3992 (system* "make" "html" pyver)
3993 (system* "make" "latex" "PAPER=a4" pyver)
3994 (system* "make" "-C" "build/latex"
3995 "all-pdf" "PAPER=a4" pyver)
3996 ;; FIXME: Generation of the info file fails.
3997 ;; (system* "make" "info" pyver)
3998 ;; (mkdir-p info)
3999 ;; (copy-file "build/texinfo/numpy.info"
4000 ;; (string-append info "/numpy.info"))
4001 (for-each (lambda (file)
4002 (copy-file (string-append "build/latex" file)
4003 (string-append doc file)))
4004 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4005 (with-directory-excursion "build/html"
4006 (for-each (lambda (file)
4007 (let* ((dir (dirname file))
4008 (tgt-dir (string-append html "/" dir)))
4009 (unless (equal? "." dir)
4010 (mkdir-p tgt-dir))
4011 (install-file file html)))
4012 (find-files "." ".*")))))
4013 #t)))))
4014 (home-page (package-home-page python-numpy))
4015 (synopsis "Documentation for the python-numpy package")
4016 (description (package-description python-numpy))
4017 (license (package-license python-numpy))))
4018
4019 (define-public python2-numpy-documentation
4020 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4021 (package
4022 (inherit numpy-documentation)
4023 (native-inputs `(("python2-functools32" ,python2-functools32)
4024 ,@(package-native-inputs numpy-documentation))))))
4025
4026 (define-public python-pygit2
4027 (package
4028 (name "python-pygit2")
4029 (version "0.26.0")
4030 (source
4031 (origin
4032 (method url-fetch)
4033 (uri (pypi-uri "pygit2" version))
4034 (sha256
4035 (base32
4036 "1cbc488ra3kg7r3qky17ms0szi3cda2d96qfkv1l9djsy9hnvw57"))
4037 (patches
4038 (search-patches "python-pygit2-disable-network-tests.patch"))))
4039 (build-system python-build-system)
4040 (propagated-inputs
4041 `(("python-six" ,python-six)
4042 ("python-cffi" ,python-cffi)
4043 ("libgit2" ,libgit2)
4044 ("python-tox" ,python-tox)))
4045 (home-page "https://github.com/libgit2/pygit2")
4046 (synopsis "Python bindings for libgit2")
4047 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4048 library, libgit2 implements Git plumbing.")
4049 ;; GPL2.0 only, with linking exception.
4050 (license license:gpl2)))
4051
4052 (define-public python2-pygit2
4053 (package-with-python2 python-pygit2))
4054
4055 (define-public python-pyparsing
4056 (package
4057 (name "python-pyparsing")
4058 (version "2.2.0")
4059 (source
4060 (origin
4061 (method url-fetch)
4062 (uri (string-append "mirror://sourceforge/pyparsing/pyparsing"
4063 "/pyparsing-" version
4064 "/pyparsing-" version ".tar.gz"))
4065 (sha256
4066 (base32
4067 "016b9gh606aa44sq92jslm89bg874ia0yyiyb643fa6dgbsbqch8"))))
4068 (build-system python-build-system)
4069 (outputs '("out" "doc"))
4070 (arguments
4071 `(#:tests? #f ; no test target
4072 #:phases
4073 (modify-phases %standard-phases
4074 (add-after 'install 'install-doc
4075 (lambda* (#:key outputs #:allow-other-keys)
4076 (let* ((doc (string-append (assoc-ref outputs "doc")
4077 "/share/doc/" ,name "-" ,version))
4078 (html-doc (string-append doc "/html"))
4079 (examples (string-append doc "/examples")))
4080 (mkdir-p html-doc)
4081 (mkdir-p examples)
4082 (for-each
4083 (lambda (dir tgt)
4084 (map (lambda (file)
4085 (install-file file tgt))
4086 (find-files dir ".*")))
4087 (list "docs" "htmldoc" "examples")
4088 (list doc html-doc examples))
4089 #t))))))
4090 (home-page "http://pyparsing.wikispaces.com")
4091 (synopsis "Python parsing class library")
4092 (description
4093 "The pyparsing module is an alternative approach to creating and
4094 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4095 of regular expressions. The pyparsing module provides a library of classes
4096 that client code uses to construct the grammar directly in Python code.")
4097 (license license:expat)))
4098
4099 (define-public python2-pyparsing
4100 (package-with-python2 python-pyparsing))
4101
4102 (define-public python-numpydoc
4103 (package
4104 (name "python-numpydoc")
4105 (version "0.5")
4106 (source
4107 (origin
4108 (method url-fetch)
4109 (uri (string-append
4110 "https://pypi.python.org/packages/source/n/numpydoc/numpydoc-"
4111 version ".tar.gz"))
4112 (sha256
4113 (base32
4114 "0d4dnifaxkll50jx6czj05y8cb4ny60njd2wz299sj2jxfy51w4k"))
4115 (modules '((guix build utils)))
4116 (snippet
4117 '(begin
4118 ;; Drop a test requiring matplotlib, which we cannot add as an
4119 ;; input since it would create a circular dependency: Extend the
4120 ;; test for Python 3, where it is already dropped, to Python 2.
4121 (substitute* "numpydoc/tests/test_plot_directive.py"
4122 (("3") "2"))))))
4123 (build-system python-build-system)
4124 (propagated-inputs
4125 `(("python-sphinx" ,python-sphinx)))
4126 (native-inputs
4127 `(("python-nose" ,python-nose)))
4128 (home-page "https://pypi.python.org/pypi/numpydoc")
4129 (synopsis
4130 "Numpy's Sphinx extensions")
4131 (description
4132 "Sphinx extension to support docstrings in Numpy format.")
4133 (license license:bsd-2)))
4134
4135 (define-public python2-numpydoc
4136 (package-with-python2 python-numpydoc))
4137
4138 (define-public python-numexpr
4139 (package
4140 (name "python-numexpr")
4141 (version "2.6.1")
4142 (source
4143 (origin
4144 (method url-fetch)
4145 (uri (pypi-uri "numexpr" version))
4146 (sha256
4147 (base32
4148 "01lsja72m32z0i5p8rwxbfyzk4mplh72k2a140nwh8vv4wpyfbnv"))))
4149 (build-system python-build-system)
4150 (arguments `(#:tests? #f)) ; no tests included
4151 (propagated-inputs
4152 `(("python-numpy" ,python-numpy)))
4153 (home-page "https://github.com/pydata/numexpr")
4154 (synopsis "Fast numerical expression evaluator for NumPy")
4155 (description
4156 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4157 expressions that operate on arrays are accelerated and use less memory than
4158 doing the same calculation in Python. In addition, its multi-threaded
4159 capabilities can make use of all your cores, which may accelerate
4160 computations, most specially if they are not memory-bounded (e.g. those using
4161 transcendental functions).")
4162 (license license:expat)))
4163
4164 (define-public python2-numexpr
4165 (package-with-python2 python-numexpr))
4166
4167 (define-public python-cycler
4168 (package
4169 (name "python-cycler")
4170 (version "0.10.0")
4171 (source (origin
4172 (method url-fetch)
4173 (uri (pypi-uri "cycler" version))
4174 (sha256
4175 (base32
4176 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4177 (build-system python-build-system)
4178 (arguments
4179 ;; XXX: The current version requires 'coveralls' which we don't have.
4180 ;; Enable this for the next release which uses 'python-pytest'.
4181 '(#:tests? #f))
4182 (propagated-inputs
4183 `(("python-six" ,python-six)))
4184 (home-page "http://matplotlib.org/cycler/")
4185 (synopsis "Composable keyword argument iterator")
4186 (description
4187 "When using @code{matplotlib} and plotting more than one line, it is
4188 common to want to be able to want to be able to cycle over one or more artist
4189 styles; but the plotting logic can quickly become involved.
4190 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4191 @code{Cycler} class was developed.")
4192 (license license:bsd-3)))
4193
4194 (define-public python2-cycler
4195 (package-with-python2 python-cycler))
4196
4197 (define-public python-colorspacious
4198 (package
4199 (name "python-colorspacious")
4200 (version "1.1.0")
4201 (source
4202 (origin
4203 (method url-fetch)
4204 (uri (string-append "https://github.com/njsmith/colorspacious/archive/v"
4205 version ".tar.gz"))
4206 (file-name (string-append name "-" version))
4207 (sha256
4208 (base32 "1vflh5jm32qb0skza2i8pjacv09w6gq84fqpp2nj77s0rbmzgr4k"))))
4209 (build-system python-build-system)
4210 (propagated-inputs
4211 `(("python-numpy" ,python-numpy)))
4212 (native-inputs
4213 `(("python-nose" ,python-nose)))
4214 (arguments
4215 `(#:phases
4216 (modify-phases %standard-phases
4217 (replace 'check
4218 (lambda _
4219 (zero? (system* "nosetests" "--all-modules" "-v" "colorspacious")))))))
4220 (home-page "https://github.com/njsmith/colorspacious")
4221 (synopsis "Python library for colorspace conversions")
4222 (description "@code{colorspacious} is a Python library that lets you
4223 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4224 (license license:expat)))
4225
4226 (define-public python2-colorspacious
4227 (package-with-python2 python-colorspacious))
4228
4229 (define-public python-matplotlib
4230 (package
4231 (name "python-matplotlib")
4232 (version "2.0.2")
4233 (source
4234 (origin
4235 (method url-fetch)
4236 (uri (pypi-uri "matplotlib" version))
4237 (sha256
4238 (base32
4239 "1w8z2a1l7s72p1byfz7g03wqhygqxi8w82619dqb3a1lm97w9yqg"))))
4240 (build-system python-build-system)
4241 (propagated-inputs ; the following packages are all needed at run time
4242 `(("python-cycler" ,python-cycler)
4243 ("python-pyparsing" ,python-pyparsing)
4244 ("python-pygobject" ,python-pygobject)
4245 ("gobject-introspection" ,gobject-introspection)
4246 ("python-tkinter" ,python "tk")
4247 ("python-dateutil" ,python-dateutil)
4248 ("python-numpy" ,python-numpy)
4249 ("python-pillow" ,python-pillow)
4250 ("python-pytz" ,python-pytz)
4251 ("python-six" ,python-six)
4252 ;; The 'gtk+' package (and 'gdk-pixbuf', 'atk' and 'pango' propagated
4253 ;; from 'gtk+') provides the required 'typelib' files used by
4254 ;; 'gobject-introspection'. The location of these files is set with the
4255 ;; help of the environment variable GI_TYPELIB_PATH. At build time this
4256 ;; is done automatically by a 'native-search-path' procedure. However,
4257 ;; at run-time the user must set this variable as follows:
4258 ;;
4259 ;; export GI_TYPELIB_PATH=~/.guix-profile/lib/girepository-1.0
4260 ("gtk+" ,gtk+)
4261 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4262 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4263 ;; object. For this reason we need to import both libraries.
4264 ;; https://pythonhosted.org/cairocffi/cffi_api.html#converting-pycairo
4265 ("python-pycairo" ,python-pycairo)
4266 ("python-cairocffi" ,python-cairocffi)))
4267 (inputs
4268 `(("libpng" ,libpng)
4269 ("imagemagick" ,imagemagick)
4270 ("freetype" ,freetype)
4271 ("cairo" ,cairo)
4272 ("glib" ,glib)
4273 ;; FIXME: Add backends when available.
4274 ;("python-wxpython" ,python-wxpython)
4275 ("python-pyqt" ,python-pyqt)
4276 ("tcl" ,tcl)
4277 ("tk" ,tk)))
4278 (native-inputs
4279 `(("pkg-config" ,pkg-config)
4280 ("python-nose" ,python-nose)
4281 ("python-mock" ,python-mock)))
4282 (arguments
4283 `(#:phases
4284 (modify-phases %standard-phases
4285 (add-before 'build 'configure-environment
4286 (lambda* (#:key outputs inputs #:allow-other-keys)
4287 (let ((cairo (assoc-ref inputs "cairo"))
4288 (gtk+ (assoc-ref inputs "gtk+")))
4289 ;; Setting these directories in the 'basedirlist' of 'setup.cfg'
4290 ;; has not effect.
4291 (setenv "LD_LIBRARY_PATH"
4292 (string-append cairo "/lib:" gtk+ "/lib"))
4293 (setenv "HOME" (getcwd))
4294 (call-with-output-file "setup.cfg"
4295 (lambda (port)
4296 (format port "[directories]~%
4297 basedirlist = ~a,~a~%
4298 [rc_options]~%
4299 backend = TkAgg~%"
4300 (assoc-ref inputs "tcl")
4301 (assoc-ref inputs "tk")))))
4302 #t)))))
4303 (home-page "http://matplotlib.org")
4304 (synopsis "2D plotting library for Python")
4305 (description
4306 "Matplotlib is a Python 2D plotting library which produces publication
4307 quality figures in a variety of hardcopy formats and interactive environments
4308 across platforms. Matplotlib can be used in Python scripts, the python and
4309 ipython shell, web application servers, and six graphical user interface
4310 toolkits.")
4311 (license license:psfl)
4312 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4313
4314 (define-public python2-matplotlib
4315 (let ((matplotlib (package-with-python2
4316 (strip-python2-variant python-matplotlib))))
4317 (package (inherit matplotlib)
4318 ;; Make sure to use special packages for Python 2 instead
4319 ;; of those automatically rewritten by package-with-python2.
4320 (propagated-inputs
4321 `(("python2-pycairo" ,python2-pycairo)
4322 ("python2-functools32" ,python2-functools32)
4323 ("python2-pygobject-2" ,python2-pygobject-2)
4324 ("python2-subprocess32" ,python2-subprocess32)
4325 ("python2-tkinter" ,python-2 "tk")
4326 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4327 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4328
4329 (define-public python-matplotlib-documentation
4330 (package
4331 (name "python-matplotlib-documentation")
4332 (version (package-version python-matplotlib))
4333 (source (package-source python-matplotlib))
4334 (build-system python-build-system)
4335 (native-inputs
4336 `(("python-matplotlib" ,python-matplotlib)
4337 ("python-colorspacious" ,python-colorspacious)
4338 ("python-sphinx" ,python-sphinx)
4339 ("python-numpydoc" ,python-numpydoc)
4340 ("python-ipython" ,python-ipython)
4341 ("python-mock" ,python-mock)
4342 ("graphviz" ,graphviz)
4343 ("texlive" ,texlive)
4344 ("texinfo" ,texinfo)
4345 ,@(package-native-inputs python-matplotlib)))
4346 (arguments
4347 `(#:tests? #f ; we're only generating documentation
4348 #:phases
4349 (modify-phases %standard-phases
4350 (replace 'build
4351 (lambda _
4352 (chdir "doc")
4353 ;; Produce pdf in 'A4' format.
4354 (substitute* "conf.py"
4355 (("latex_paper_size = 'letter'") "")
4356 ;; latex_paper_size is deprecated -> set paper size using
4357 ;; latex_elements
4358 (("latex_elements\\['pointsize'\\] = '11pt'" match)
4359 ;; insert at a point where latex_elements{} is defined:
4360 (string-append match "\nlatex_elements['papersize'] = 'a4paper'")))
4361 (zero? (system* "python" "make.py" "html" "latex" "texinfo"))))
4362 (replace 'install
4363 (lambda* (#:key inputs outputs #:allow-other-keys)
4364 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4365 (doc (string-append data "/doc/python-matplotlib-" ,version))
4366 (info (string-append data "/info"))
4367 (html (string-append doc "/html")))
4368 (mkdir-p html)
4369 (mkdir-p info)
4370 (copy-recursively "build/html" html)
4371 (symlink (string-append html "/_images")
4372 (string-append info "/matplotlib-figures"))
4373 (with-directory-excursion "build/texinfo"
4374 (substitute* "matplotlib.texi"
4375 (("@image\\{([^,]*)" all file)
4376 (string-append "@image{matplotlib-figures/" file)))
4377 (symlink (string-append html "/_images")
4378 "./matplotlib-figures")
4379 (system* "makeinfo" "--no-split"
4380 "-o" "matplotlib.info" "matplotlib.texi"))
4381 (copy-file "build/texinfo/matplotlib.info"
4382 (string-append info "/matplotlib.info"))
4383 (copy-file "build/latex/Matplotlib.pdf"
4384 (string-append doc "/Matplotlib.pdf")))
4385 #t)))))
4386 (home-page (package-home-page python-matplotlib))
4387 (synopsis "Documentation for the python-matplotlib package")
4388 (description (package-description python-matplotlib))
4389 (license (package-license python-matplotlib))))
4390
4391 (define-public python2-matplotlib-documentation
4392 (package-with-python2 python-matplotlib-documentation))
4393
4394 (define-public python2-pysnptools
4395 (package
4396 (name "python2-pysnptools")
4397 (version "0.3.9")
4398 (source
4399 (origin
4400 (method url-fetch)
4401 (uri (pypi-uri "pysnptools" version ".zip"))
4402 (sha256
4403 (base32
4404 "1wybggjzz8zw7aav4pjsg2h22xp17a1lghrprza1pxwlm7wf96y2"))))
4405 (build-system python-build-system)
4406 (arguments
4407 `(#:python ,python-2)) ; only Python 2.7 is supported
4408 (propagated-inputs
4409 `(("python2-numpy" ,python2-numpy)
4410 ("python2-scipy" ,python2-scipy)
4411 ("python2-pandas" ,python2-pandas)))
4412 (native-inputs
4413 `(("python2-cython" ,python2-cython)))
4414 (native-inputs
4415 `(("unzip" ,unzip)))
4416 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/")
4417 (synopsis "Library for reading and manipulating genetic data")
4418 (description
4419 "PySnpTools is a library for reading and manipulating genetic data. It
4420 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4421 those files. It can also efficiently manipulate ranges of integers using set
4422 operators such as union, intersection, and difference.")
4423 (license license:asl2.0)))
4424
4425 (define-public python-rpy2
4426 (package
4427 (name "python-rpy2")
4428 (version "2.9.0")
4429 (source
4430 (origin
4431 (method url-fetch)
4432 (uri (pypi-uri "rpy2" version))
4433 (sha256
4434 (base32
4435 "0bqihjrdqwj5r1h86shvfb1p5hfr4a6klv1v54bzfr9r144w3rni"))))
4436 (build-system python-build-system)
4437 (arguments
4438 '(#:modules ((ice-9 ftw)
4439 (srfi srfi-1)
4440 (srfi srfi-26)
4441 (guix build utils)
4442 (guix build python-build-system))
4443 #:phases
4444 (modify-phases %standard-phases
4445 ;; Without this phase the test loader cannot find the directories, in
4446 ;; which it is supposed to look for test files.
4447 (add-after 'unpack 'fix-tests
4448 (lambda* (#:key outputs #:allow-other-keys)
4449 (substitute* "rpy/tests.py"
4450 (("loader.discover\\(")
4451 "loader.discover(rpy_root + '/' +"))
4452 #t))
4453 (replace 'check
4454 (lambda* (#:key outputs inputs #:allow-other-keys)
4455 (let ((cwd (getcwd)))
4456 (setenv "PYTHONPATH"
4457 (string-append cwd "/build/"
4458 (find (cut string-prefix? "lib" <>)
4459 (scandir (string-append cwd "/build")))
4460 ":"
4461 (getenv "PYTHONPATH"))))
4462 (zero? (system* "python" "-m" "rpy2.tests" "-v")))))))
4463 (propagated-inputs
4464 `(("python-six" ,python-six)
4465 ("python-jinja2" ,python-jinja2)
4466 ("python-pytz" ,python-pytz)))
4467 (inputs
4468 `(("readline" ,readline)
4469 ("icu4c" ,icu4c)
4470 ("pcre" ,pcre)
4471 ("r-minimal" ,r-minimal)
4472 ("r-survival" ,r-survival)
4473 ("r-ggplot2" ,r-ggplot2)
4474 ("r-rsqlite" ,r-rsqlite)
4475 ("r-dplyr" ,r-dplyr)
4476 ("r-dbplyr" ,r-dbplyr)
4477 ("python-numpy" ,python-numpy)))
4478 (native-inputs
4479 `(("zlib" ,zlib)))
4480 (home-page "http://rpy.sourceforge.net/")
4481 (synopsis "Python interface to the R language")
4482 (description "rpy2 is a redesign and rewrite of rpy. It is providing a
4483 low-level interface to R from Python, a proposed high-level interface,
4484 including wrappers to graphical libraries, as well as R-like structures and
4485 functions.")
4486 ;; Any of these licenses can be picked for the R interface. The whole
4487 ;; project is released under GPLv2+ according to the license declaration
4488 ;; in "setup.py".
4489 (license (list license:mpl2.0 license:gpl2+ license:lgpl2.1+))))
4490
4491 (define-public python-scipy
4492 (package
4493 (name "python-scipy")
4494 (version "0.19.1")
4495 (source
4496 (origin
4497 (method url-fetch)
4498 (uri (pypi-uri "scipy" version))
4499 (sha256
4500 (base32
4501 "1rl411bvla6q7qfdb47fpdnyjhfgzl6smpha33n9ar1klykjr6m1"))))
4502 (build-system python-build-system)
4503 (propagated-inputs
4504 `(("python-numpy" ,python-numpy)
4505 ("python-matplotlib" ,python-matplotlib)
4506 ("python-pyparsing" ,python-pyparsing)))
4507 (inputs
4508 `(("lapack" ,lapack)
4509 ("openblas" ,openblas)))
4510 (native-inputs
4511 `(("python-cython" ,python-cython)
4512 ("python-nose" ,python-nose)
4513 ("python-sphinx" ,python-sphinx)
4514 ("python-numpydoc" ,python-numpydoc)
4515 ("gfortran" ,gfortran)
4516 ("perl" ,perl)))
4517 (outputs '("out" "doc"))
4518 (arguments
4519 `(#:phases
4520 (modify-phases %standard-phases
4521 (add-before 'build 'configure-openblas
4522 (lambda* (#:key inputs #:allow-other-keys)
4523 (call-with-output-file "site.cfg"
4524 (lambda (port)
4525 (format port
4526 "[blas]
4527 libraries = openblas
4528 library_dirs = ~a/lib
4529 include_dirs = ~a/include
4530
4531 # backslash-n to make emacs happy
4532 \n[atlas]
4533 library_dirs = ~a/lib
4534 atlas_libs = openblas
4535 "
4536 (assoc-ref inputs "openblas")
4537 (assoc-ref inputs "openblas")
4538 (assoc-ref inputs "openblas"))))
4539 #t))
4540 (add-after 'install 'install-doc
4541 (lambda* (#:key inputs outputs #:allow-other-keys)
4542 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4543 (doc (string-append data "/doc/" ,name "-" ,version))
4544 (html (string-append doc "/html"))
4545 (pyver ,(string-append "PYVER=")))
4546 ;; Make installed package available for building the
4547 ;; documentation
4548 (add-installed-pythonpath inputs outputs)
4549 (with-directory-excursion "doc"
4550 ;; Fix generation of images for mathematical expressions.
4551 (substitute* (find-files "source" "conf\\.py")
4552 (("pngmath_use_preview = True")
4553 "pngmath_use_preview = False"))
4554 (mkdir-p html)
4555 (system* "make" "html" pyver)
4556 (with-directory-excursion "build/html"
4557 (for-each (lambda (file)
4558 (let* ((dir (dirname file))
4559 (tgt-dir (string-append html "/" dir)))
4560 (install-file file html)))
4561 (find-files "." ".*")))))
4562 #t))
4563 (add-after 'unpack 'fix-tests
4564 (lambda _
4565 (substitute* "scipy/integrate/tests/test_quadpack.py"
4566 (("libm.so") "libm.so.6"))
4567 #t))
4568 ;; Tests can only be run after the library has been installed and not
4569 ;; within the source directory.
4570 (delete 'check)
4571 (add-after 'install 'check
4572 (lambda* (#:key inputs outputs #:allow-other-keys)
4573 (add-installed-pythonpath inputs outputs)
4574 (with-directory-excursion "/tmp"
4575 (zero? (system* "python" "-c"
4576 "import scipy; scipy.test('full')")))
4577 #t)))))
4578 (home-page "http://www.scipy.org/")
4579 (synopsis "The Scipy library provides efficient numerical routines")
4580 (description "The SciPy library is one of the core packages that make up
4581 the SciPy stack. It provides many user-friendly and efficient numerical
4582 routines such as routines for numerical integration and optimization.")
4583 (properties `((python2-variant . ,(delay python2-scipy))))
4584 (license license:bsd-3)))
4585
4586 (define-public python2-scipy
4587 (package-with-python2
4588 (strip-python2-variant python-scipy)))
4589
4590 (define-public python-sockjs-tornado
4591 (package
4592 (name "python-sockjs-tornado")
4593 (version "1.0.3")
4594 (source
4595 (origin
4596 (method url-fetch)
4597 (uri (pypi-uri "sockjs-tornado" version))
4598 (sha256
4599 (base32
4600 "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
4601 (build-system python-build-system)
4602 (arguments
4603 `(;; There are no tests, and running the test phase requires missing
4604 ;; dependencies
4605 #:tests? #f))
4606 (propagated-inputs
4607 `(("python-tornado" ,python-tornado)))
4608 (home-page "http://github.com/mrjoes/sockjs-tornado/")
4609 (synopsis
4610 "SockJS python server implementation on top of Tornado framework")
4611 (description
4612 "SockJS-tornado provides the server side counterpart to a SockJS client
4613 library, through the Tornado framework.
4614
4615 SockJS provides a low latency, full duplex, cross-domain communication channel
4616 between a web browser and web server.")
4617 (license license:expat)))
4618
4619 (define-public python2-sockjs-tornado
4620 (package-with-python2 python-sockjs-tornado))
4621
4622 (define-public python-socksipy-branch
4623 (package
4624 (name "python-socksipy-branch")
4625 (version "1.01")
4626 (source
4627 (origin
4628 (method url-fetch)
4629 (uri (pypi-uri "SocksiPy-branch" version))
4630 (sha256
4631 (base32
4632 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4633 (build-system python-build-system)
4634 (arguments
4635 `(#:tests? #f)) ; There are no tests
4636 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4637 (synopsis "Python SOCKS module")
4638 (description
4639 "SocksiPy - A Python SOCKS client module. It provides a
4640 socket-like interface that supports connections to any TCP
4641 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4642 The original version was developed by Dan Haim, this is a
4643 branch created by Mario Vilas to address some open issues,
4644 as the original project seems to have been abandoned circa 2007.")
4645 (license license:bsd-3)))
4646
4647 (define-public python2-socksipy-branch
4648 (package-with-python2 python-socksipy-branch))
4649
4650 (define-public python-sqlalchemy
4651 (package
4652 (name "python-sqlalchemy")
4653 (version "1.0.12")
4654 (source
4655 (origin
4656 (method url-fetch)
4657 (uri (string-append "https://pypi.python.org/packages/source/S/"
4658 "SQLAlchemy/SQLAlchemy-" version ".tar.gz"))
4659 (sha256
4660 (base32
4661 "1l8qclhd0s90w3pvwhi5mjxdwr5j7gw7cjka2fx6f2vqmq7f4yb6"))))
4662 (build-system python-build-system)
4663 (native-inputs
4664 `(("python-cython" ,python-cython) ;for c extensions
4665 ("python-pytest" ,python-pytest)
4666 ("python-mock" ,python-mock))) ;for tests
4667 (arguments
4668 `(#:phases (alist-replace
4669 'check
4670 (lambda _ (zero? (system* "py.test")))
4671 %standard-phases)))
4672 (home-page "http://www.sqlalchemy.org")
4673 (synopsis "Database abstraction library")
4674 (description
4675 "SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
4676 gives application developers the full power and flexibility of SQL. It
4677 provides a full suite of well known enterprise-level persistence patterns,
4678 designed for efficient and high-performing database access, adapted into a
4679 simple and Pythonic domain language.")
4680 (license license:x11)))
4681
4682 (define-public python2-sqlalchemy
4683 (package-with-python2 python-sqlalchemy))
4684
4685 (define-public python-pycodestyle
4686 (package
4687 (name "python-pycodestyle")
4688 (version "2.3.1")
4689 (source
4690 (origin
4691 (method url-fetch)
4692 (uri (pypi-uri "pycodestyle" version))
4693 (sha256
4694 (base32
4695 "0rk78b66p57ala26mdldl9lafr48blv5s659sah9q50qnfjmc8k8"))))
4696 (build-system python-build-system)
4697 (home-page "https://pycodestyle.readthedocs.io/")
4698 (synopsis "Python style guide checker")
4699 (description "@code{pycodestyle} (formerly pep8) is a tool to check
4700 Python code against some of the style conventions in
4701 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
4702 (license license:expat)))
4703
4704 (define-public python2-pycodestyle
4705 (package-with-python2 python-pycodestyle))
4706
4707 (define-public python-orderedmultidict
4708 (package
4709 (name "python-orderedmultidict")
4710 (version "0.7.11")
4711 (source
4712 (origin
4713 (method url-fetch)
4714 (uri (pypi-uri "orderedmultidict" version))
4715 (sha256
4716 (base32
4717 "0dls862ibm7qbq4fnvwx0xn1v9hwyzywbff8xjjdr42dd75208yw"))))
4718 (build-system python-build-system)
4719 (arguments
4720 `(#:phases
4721 (modify-phases %standard-phases
4722 (add-after 'unpack 'fix-tests
4723 (lambda _
4724 ;; The package uses nosetest for running the tests.
4725 ;; Adding this initfile allows to run the test suite
4726 ;; without requiring nosetest.
4727 (zero? (system* "touch" "tests/__init__.py")))))))
4728 (propagated-inputs
4729 `(("python-six" ,python-six)))
4730 (native-inputs
4731 `(("python-pycodestyle" ,python-pycodestyle)))
4732 (home-page "https://github.com/gruns/orderedmultidict")
4733 (synopsis "Python Ordered Multivalue Dictionary - omdict")
4734 (description "This package contains a library for ordered multivalue
4735 dictionaries. A multivalue dictionary is a dictionary that can store
4736 multiple values for the same key. An ordered multivalue dictionary is a
4737 multivalue dictionary that retains the order of insertions and deletions.")
4738 (license license:unlicense)))
4739
4740 (define-public python2-orderedmultidict
4741 (package-with-python2 python-orderedmultidict))
4742
4743 (define-public python-furl
4744 (package
4745 (name "python-furl")
4746 (version "0.5.6")
4747 (source
4748 (origin
4749 (method url-fetch)
4750 (uri (pypi-uri "furl" version))
4751 (sha256
4752 (base32
4753 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
4754 (build-system python-build-system)
4755 (propagated-inputs
4756 `(("python-six" ,python-six)
4757 ("python-orderedmultidict" ,python-orderedmultidict)))
4758 (native-inputs
4759 `(("python-pycodestyle" ,python-pycodestyle)))
4760 (home-page "https://github.com/gruns/furl")
4761 (synopsis "URL manipulation in Python")
4762 (description "Furl provides an easy-to-use alternative to the
4763 @code{urllib} and @code{urlparse} modules for manipulating URLs.")
4764 (license license:unlicense)))
4765
4766 (define-public python2-furl
4767 (package-with-python2 python-furl))
4768
4769 (define-public python-flaky
4770 (package
4771 (name "python-flaky")
4772 (version "3.4.0")
4773 (source (origin
4774 (method url-fetch)
4775 (uri (pypi-uri "flaky" version))
4776 (sha256
4777 (base32
4778 "18pkmf79rfkfpy1d2rrx3v55nxj762ilyk9rvd6s6dccxw58imsa"))))
4779 (build-system python-build-system)
4780 (arguments
4781 ;; TODO: Tests require 'coveralls' and 'genty' which are not in Guix yet.
4782 '(#:tests? #f))
4783 (home-page "https://github.com/box/flaky")
4784 (synopsis "Automatically rerun flaky tests")
4785 (description
4786 "Flaky is a plugin for @code{nose} or @code{py.test} that automatically
4787 reruns flaky tests.
4788
4789 Ideally, tests reliably pass or fail, but sometimes test fixtures must rely
4790 on components that aren't 100% reliable. With flaky, instead of removing
4791 those tests or marking them to @code{@@skip}, they can be automatically
4792 retried.")
4793 (license license:asl2.0)))
4794
4795 (define-public python2-flaky
4796 (package-with-python2 python-flaky))
4797
4798 (define-public python-flask-babel
4799 (package
4800 (name "python-flask-babel")
4801 (version "0.11.1")
4802 (source
4803 (origin
4804 (method url-fetch)
4805 (uri (pypi-uri "Flask-Babel" version))
4806 (sha256
4807 (base32
4808 "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj"))))
4809 (build-system python-build-system)
4810 (propagated-inputs
4811 `(("python-flask" ,python-flask)
4812 ("python-babel" ,python-babel)
4813 ("python-jinja2" ,python-jinja2)
4814 ("python-pytz" ,python-pytz)))
4815 (home-page "https://github.com/python-babel/flask-babel")
4816 (synopsis "Add i18n/l10n support to Flask applications")
4817 (description "This package implements internationalization and localization
4818 support for Flask. This is based on the Python babel module as well as pytz -
4819 both of which are installed automatically if you install this library.")
4820 (license license:bsd-3)))
4821
4822 (define-public python2-flask-babel
4823 (package-with-python2 python-flask-babel))
4824
4825 (define-public python-sqlalchemy-utils
4826 (package
4827 (name "python-sqlalchemy-utils")
4828 (version "0.32.13")
4829 (source
4830 (origin
4831 (method url-fetch)
4832 (uri (pypi-uri "SQLAlchemy-Utils" version))
4833 (sha256
4834 (base32
4835 "0vsib7gidjamzsz6w4s5pdhxzxsrkghjnm4sqwk94igjrl3i5ixj"))))
4836 (build-system python-build-system)
4837 (arguments
4838 '(#:tests? #f)) ; FIXME: Many tests require a running database server.
4839 ;; #:phases
4840 ;; (modify-phases %standard-phases
4841 ;; (replace 'check
4842 ;; (lambda _
4843 ;; (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
4844 (propagated-inputs
4845 `(("python-six" ,python-six)
4846 ("python-sqlalchemy" ,python-sqlalchemy)))
4847 (native-inputs
4848 `(("python-dateutil" ,python-dateutil)
4849 ("python-flexmock" ,python-flexmock)
4850 ("python-psycopg2" ,python-psycopg2)
4851 ("python-pytest" ,python-pytest)
4852 ("python-pytz" ,python-pytz)))
4853 (home-page "https://github.com/kvesteri/sqlalchemy-utils")
4854 (synopsis "Various utility functions for SQLAlchemy")
4855 (description
4856 "SQLAlchemy-utils provides various utility functions and custom data types
4857 for SQLAlchemy. SQLAlchemy is an SQL database abstraction library for Python.
4858
4859 You might also want to install the following optional dependencies:
4860 @enumerate
4861 @item @code{python-passlib}
4862 @item @code{python-babel}
4863 @item @code{python-cryptography}
4864 @item @code{python-pytz}
4865 @item @code{python-psycopg2}
4866 @item @code{python-furl}
4867 @item @code{python-flask-babel}
4868 @end enumerate
4869 ")
4870 (license license:bsd-3)))
4871
4872 (define-public python2-sqlalchemy-utils
4873 (package-with-python2 python-sqlalchemy-utils))
4874
4875 (define-public python-alembic
4876 (package
4877 (name "python-alembic")
4878 (version "0.8.10")
4879 (source
4880 (origin
4881 (method url-fetch)
4882 (uri (pypi-uri "alembic" version))
4883 (sha256
4884 (base32
4885 "06br9sfqypnjlal6fsbnky3zb0askwcn3diz8k3kwa0qcblm0fqf"))))
4886 (build-system python-build-system)
4887 (native-inputs
4888 `(("python-mock" ,python-mock)
4889 ("python-pytest-cov" ,python-pytest-cov)))
4890 (propagated-inputs
4891 `(("python-sqlalchemy" ,python-sqlalchemy)
4892 ("python-mako" ,python-mako)
4893 ("python-editor" ,python-editor)))
4894 (home-page "http://bitbucket.org/zzzeek/alembic")
4895 (synopsis
4896 "Database migration tool for SQLAlchemy")
4897 (description
4898 "Alembic is a lightweight database migration tool for usage with the
4899 SQLAlchemy Database Toolkit for Python.")
4900 (license license:expat)))
4901
4902 (define-public python2-alembic
4903 (package-with-python2 python-alembic))
4904
4905 (define-public python-autopep8
4906 (package
4907 (name "python-autopep8")
4908 (version "1.2.4")
4909 (source
4910 (origin
4911 (method url-fetch)
4912 (uri (pypi-uri "autopep8" version))
4913 (sha256
4914 (base32
4915 "18parm383lfn42a00wklv3qf20p4v277f1x3cn58x019dqk1xqrq"))))
4916 (build-system python-build-system)
4917 (propagated-inputs
4918 `(("python-pep8" ,python-pep8)))
4919 (home-page "https://github.com/hhatto/autopep8")
4920 (synopsis "Format Python code according to the PEP 8 style guide")
4921 (description
4922 "@code{autopep8} automatically formats Python code to conform to
4923 the PEP 8 style guide. It uses the pycodestyle utility to determine
4924 what parts of the code needs to be formatted. @code{autopep8} is
4925 capable of fixing most of the formatting issues that can be reported
4926 by pycodestyle.")
4927 (license (license:non-copyleft
4928 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
4929
4930 (define-public python2-autopep8
4931 (package-with-python2 python-autopep8))
4932
4933 (define-public python-distutils-extra
4934 (package
4935 (name "python-distutils-extra")
4936 (version "2.38")
4937 (source
4938 (origin
4939 (method url-fetch)
4940 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
4941 version "/+download/python-distutils-extra-"
4942 version ".tar.gz"))
4943 (sha256
4944 (base32
4945 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
4946 (build-system python-build-system)
4947 (home-page "https://launchpad.net/python-distutils-extra/")
4948 (synopsis "Enhancements to Python's distutils")
4949 (description
4950 "The python-distutils-extra module enables you to easily integrate
4951 gettext support, themed icons, and scrollkeeper-based documentation into
4952 Python's distutils.")
4953 (license license:gpl2)))
4954
4955 (define-public python2-distutils-extra
4956 (package-with-python2 python-distutils-extra))
4957
4958 (define-public python2-elib.intl
4959 (package
4960 (name "python2-elib.intl")
4961 (version "0.0.3")
4962 (source
4963 (origin
4964 ;; This project doesn't tag releases or publish tarballs, so we take
4965 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
4966 (method git-fetch)
4967 (uri (git-reference
4968 (url "https://github.com/dieterv/elib.intl.git")
4969 (commit "d09997cfef")))
4970 (sha256
4971 (base32
4972 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
4973 (build-system python-build-system)
4974 (arguments
4975 ;; incompatible with Python 3 (exception syntax)
4976 `(#:python ,python-2
4977 #:tests? #f))
4978 (home-page "https://github.com/dieterv/elib.intl")
4979 (synopsis "Enhanced internationalization for Python")
4980 (description
4981 "The elib.intl module provides enhanced internationalization (I18N)
4982 services for your Python modules and applications.")
4983 (license license:lgpl3+)))
4984
4985 (define-public python-pillow
4986 (package
4987 (name "python-pillow")
4988 (version "3.3.3")
4989 (source
4990 (origin
4991 (method url-fetch)
4992 (uri (pypi-uri "Pillow" version))
4993 (patches (search-patches "python-pillow-freetype-2.7-test-failure.patch"))
4994 (sha256
4995 (base32
4996 "0xkv0p1d73gz0a1qaasf0ai4262g8f334j07vd60bjrxs2wr3nmj"))))
4997 (build-system python-build-system)
4998 (native-inputs
4999 `(("python-nose" ,python-nose)))
5000 (inputs
5001 `(("freetype" ,freetype)
5002 ("lcms" ,lcms)
5003 ("zlib" ,zlib)
5004 ("libjpeg" ,libjpeg)
5005 ("openjpeg" ,openjpeg)
5006 ("libtiff" ,libtiff)
5007 ("libwebp" ,libwebp)))
5008 (arguments
5009 `(#:phases (modify-phases %standard-phases
5010 (add-after
5011 'install 'check-installed
5012 (lambda* (#:key outputs inputs #:allow-other-keys)
5013 (begin
5014 (setenv "HOME" (getcwd))
5015 ;; Make installed package available for running the
5016 ;; tests
5017 (add-installed-pythonpath inputs outputs)
5018 (and (zero? (system* "python" "selftest.py"
5019 "--installed"))
5020 (zero? (system* "python" "test-installed.py"))))))
5021 (delete 'check))))
5022 (home-page "https://pypi.python.org/pypi/Pillow")
5023 (synopsis "Fork of the Python Imaging Library")
5024 (description
5025 "The Python Imaging Library adds image processing capabilities to your
5026 Python interpreter. This library provides extensive file format support, an
5027 efficient internal representation, and fairly powerful image processing
5028 capabilities. The core image library is designed for fast access to data
5029 stored in a few basic pixel formats. It should provide a solid foundation for
5030 a general image processing tool.")
5031 (license (license:x11-style
5032 "http://www.pythonware.com/products/pil/license.htm"
5033 "The PIL Software License"))))
5034
5035 (define-public python2-pillow
5036 (package-with-python2 python-pillow))
5037
5038 (define-public python-pycparser
5039 (package
5040 (name "python-pycparser")
5041 (version "2.17")
5042 (source
5043 (origin
5044 (method url-fetch)
5045 (uri (pypi-uri "pycparser" version))
5046 (sha256
5047 (base32
5048 "1dkkjri0miidqb1zcqhqljfa34fcy9k5akasgwsv6k622zlk3b0a"))))
5049 (outputs '("out" "doc"))
5050 (build-system python-build-system)
5051 (native-inputs
5052 `(("pkg-config" ,pkg-config)))
5053 (arguments
5054 `(#:phases
5055 (modify-phases %standard-phases
5056 (replace 'check
5057 (lambda _
5058 (with-directory-excursion "tests"
5059 (zero? (system* "python" "all_tests.py")))))
5060 (add-after 'install 'install-doc
5061 (lambda* (#:key outputs #:allow-other-keys)
5062 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5063 (doc (string-append data "/doc/" ,name "-" ,version))
5064 (examples (string-append doc "/examples")))
5065 (mkdir-p examples)
5066 (for-each (lambda (file)
5067 (copy-file (string-append "." file)
5068 (string-append doc file)))
5069 '("/README.rst" "/CHANGES" "/LICENSE"))
5070 (copy-recursively "examples" examples)))))))
5071 (home-page "https://github.com/eliben/pycparser")
5072 (synopsis "C parser in Python")
5073 (description
5074 "Pycparser is a complete parser of the C language, written in pure Python
5075 using the PLY parsing library. It parses C code into an AST and can serve as
5076 a front-end for C compilers or analysis tools.")
5077 (license license:bsd-3)))
5078
5079 (define-public python2-pycparser
5080 (package-with-python2 python-pycparser))
5081
5082 (define-public python-cffi
5083 (package
5084 (name "python-cffi")
5085 (version "1.10.0")
5086 (source
5087 (origin
5088 (method url-fetch)
5089 (uri (pypi-uri "cffi" version))
5090 (sha256
5091 (base32 "1mffyilq4qycm8gs4wkgb18rnqil8a9blqq77chdlshzxc8jkc5k"))))
5092 (build-system python-build-system)
5093 (outputs '("out" "doc"))
5094 (inputs
5095 `(("libffi" ,libffi)))
5096 (propagated-inputs ; required at run-time
5097 `(("python-pycparser" ,python-pycparser)))
5098 (native-inputs
5099 `(("pkg-config" ,pkg-config)
5100 ("python-sphinx" ,python-sphinx)
5101 ("python-pytest" ,python-pytest)))
5102 (arguments
5103 `(#:modules ((ice-9 ftw)
5104 (srfi srfi-26)
5105 (guix build utils)
5106 (guix build python-build-system))
5107 #:phases
5108 (modify-phases %standard-phases
5109 (replace 'check
5110 (lambda _
5111 (setenv "PYTHONPATH"
5112 (string-append
5113 (getenv "PYTHONPATH")
5114 ":" (getcwd) "/build/"
5115 (car (scandir "build" (cut string-prefix? "lib." <>)))))
5116
5117 ;; XXX The "normal" approach of setting CC and friends does
5118 ;; not work here. Is this the correct way of doing things?
5119 (substitute* "testing/embedding/test_basic.py"
5120 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
5121 (string-append "c = distutils.ccompiler.new_compiler();"
5122 "c.set_executables(compiler='gcc',"
5123 "compiler_so='gcc',linker_exe='gcc',"
5124 "linker_so='gcc -shared')")))
5125 (substitute* "testing/cffi0/test_ownlib.py"
5126 (("'cc testownlib") "'gcc testownlib"))
5127 (zero? (system* "py.test" "-v" "c/" "testing/"))))
5128 (add-after 'install 'install-doc
5129 (lambda* (#:key outputs #:allow-other-keys)
5130 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5131 (doc (string-append data "/doc/" ,name "-" ,version))
5132 (html (string-append doc "/html")))
5133 (with-directory-excursion "doc"
5134 (system* "make" "html")
5135 (mkdir-p html)
5136 (copy-recursively "build/html" html))
5137 (copy-file "LICENSE" (string-append doc "/LICENSE"))
5138 #t))))))
5139 (home-page "http://cffi.readthedocs.org")
5140 (synopsis "Foreign function interface for Python")
5141 (description
5142 "Foreign Function Interface for Python calling C code.")
5143 (license license:expat)))
5144
5145 (define-public python2-cffi
5146 (package-with-python2 python-cffi))
5147
5148 (define-public python-xcffib
5149 (package
5150 (name "python-xcffib")
5151 (version "0.5.1")
5152 (source
5153 (origin
5154 (method url-fetch)
5155 (uri (pypi-uri "xcffib" version))
5156 (sha256
5157 (base32
5158 "09gbnmr5vn58mm8xi3fmd7fz6743cks6c46dphnxzwax6zsxmy60"))))
5159 (build-system python-build-system)
5160 (inputs
5161 `(("libxcb" ,libxcb)))
5162 (propagated-inputs
5163 `(("python-cffi" ,python-cffi) ; used at run time
5164 ("python-six" ,python-six)))
5165 (arguments
5166 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5167 #:tests? #f
5168 #:phases
5169 (modify-phases %standard-phases
5170 (add-after 'unpack 'fix-libxcb-path
5171 (lambda* (#:key inputs #:allow-other-keys)
5172 (let ((libxcb (assoc-ref inputs "libxcb")))
5173 (substitute* '("xcffib/__init__.py")
5174 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5175 #t)))
5176 (add-after 'install 'install-doc
5177 (lambda* (#:key outputs #:allow-other-keys)
5178 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5179 "/doc/" ,name "-" ,version)))
5180 (mkdir-p doc)
5181 (copy-file "README.md"
5182 (string-append doc "/README.md"))
5183 #t))))))
5184 (home-page "https://github.com/tych0/xcffib")
5185 (synopsis "XCB Python bindings")
5186 (description
5187 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5188 support for Python 3 and PyPy. It is based on cffi.")
5189 (license license:expat)))
5190
5191 (define-public python2-xcffib
5192 (package-with-python2 python-xcffib))
5193
5194 (define-public python-cairocffi
5195 (package
5196 (name "python-cairocffi")
5197 (version "0.8.0")
5198 (source
5199 (origin
5200 (method url-fetch)
5201 ;; The archive on pypi is missing the 'utils' directory!
5202 (uri (string-append "https://github.com/Kozea/cairocffi/archive/v"
5203 version ".tar.gz"))
5204 (file-name (string-append name "-" version ".tar.gz"))
5205 (sha256
5206 (base32
5207 "1rk2dvy3fxrga6bvvxc2fi5lbaynm5h4a0w0aaxyn3bc77rszjg9"))))
5208 (build-system python-build-system)
5209 (outputs '("out" "doc"))
5210 (inputs
5211 `(("gdk-pixbuf" ,gdk-pixbuf)
5212 ("cairo" ,cairo)))
5213 (native-inputs
5214 `(("pkg-config" ,pkg-config)
5215 ("python-sphinx" ,python-sphinx)
5216 ("python-docutils" ,python-docutils)))
5217 (propagated-inputs
5218 `(("python-xcffib" ,python-xcffib))) ; used at run time
5219 (arguments
5220 `(;; FIXME: Tests cannot find 'libcairo.so.2'.
5221 #:tests? #f
5222 #:phases
5223 (modify-phases %standard-phases
5224 (add-after 'install 'install-doc
5225 (lambda* (#:key inputs outputs #:allow-other-keys)
5226 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5227 (doc (string-append data "/doc/" ,name "-" ,version))
5228 (html (string-append doc "/html")))
5229 (setenv "LD_LIBRARY_PATH"
5230 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5231 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5232 (setenv "LANG" "en_US.UTF-8")
5233 (mkdir-p html)
5234 (for-each (lambda (file)
5235 (copy-file (string-append "." file)
5236 (string-append doc file)))
5237 '("/README.rst" "/CHANGES" "/LICENSE"))
5238 (system* "python" "setup.py" "build_sphinx")
5239 (copy-recursively "docs/_build/html" html)
5240 #t))))))
5241 (home-page "https://github.com/Kozea/cairocffi")
5242 (synopsis "Python bindings and object-oriented API for Cairo")
5243 (description
5244 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5245 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5246 graphics library with support for multiple backends including image buffers,
5247 PNG, PostScript, PDF, and SVG file output.")
5248 (license license:bsd-3)))
5249
5250 (define-public python2-cairocffi
5251 (package-with-python2 python-cairocffi))
5252
5253 (define-public python-decorator
5254 (package
5255 (name "python-decorator")
5256 (version "4.0.10")
5257 (source
5258 (origin
5259 (method url-fetch)
5260 (uri (pypi-uri "decorator" version))
5261 (sha256
5262 (base32 "0w7hg59hlpq74jpyja4yfryap0ccjvchgpkfp20rhj9krgnrhvlw"))))
5263 (build-system python-build-system)
5264 (arguments '(#:tests? #f)) ; no test target
5265 (home-page "https://pypi.python.org/pypi/decorator/")
5266 (synopsis "Python module to simplify usage of decorators")
5267 (description
5268 "The aim of the decorator module is to simplify the usage of decorators
5269 for the average programmer, and to popularize decorators usage giving examples
5270 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5271 etc. The core of this module is a decorator factory.")
5272 (license license:expat)))
5273
5274 (define-public python2-decorator
5275 (package-with-python2 python-decorator))
5276
5277 (define-public python-drmaa
5278 (package
5279 (name "python-drmaa")
5280 (version "0.7.7")
5281 (source
5282 (origin
5283 (method url-fetch)
5284 (uri (pypi-uri "drmaa" version))
5285 (sha256
5286 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5287 (build-system python-build-system)
5288 ;; The test suite requires libdrmaa which is provided by the cluster
5289 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5290 ;; should be set to the path of the libdrmaa library.
5291 (arguments '(#:tests? #f))
5292 (native-inputs
5293 `(("python-nose" ,python-nose)))
5294 (home-page "https://pypi.python.org/pypi/drmaa")
5295 (synopsis "Python bindings for the DRMAA library")
5296 (description
5297 "A Python package for Distributed Resource Management (DRM) job
5298 submission and control. This package is an implementation of the DRMAA 1.0
5299 Python language binding specification.")
5300 (license license:bsd-3)))
5301
5302 (define-public python2-drmaa
5303 (package-with-python2 python-drmaa))
5304
5305 (define-public python-grako
5306 (package
5307 (name "python-grako")
5308 (version "3.99.9")
5309 (source
5310 (origin
5311 (method url-fetch)
5312 (uri
5313 (pypi-uri "grako" version ".zip"))
5314 (sha256
5315 (base32
5316 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5317 (build-system python-build-system)
5318 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5319 (native-inputs
5320 `(("unzip" ,unzip)
5321 ("python-pytest" ,python-pytest-3.0)
5322 ("python-pytest-runner" ,python-pytest-runner)))
5323 (home-page "https://bitbucket.org/neogeny/grako")
5324 (synopsis "EBNF parser generator")
5325 (description
5326 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5327 memoizing PEG/Packrat parser in Python.")
5328 (license license:bsd-3)))
5329
5330 (define-public python2-grako
5331 (package-with-python2 python-grako))
5332
5333 (define-public python-gridmap
5334 (package
5335 (name "python-gridmap")
5336 (version "0.13.0")
5337 (source
5338 (origin
5339 (method url-fetch)
5340 (uri (string-append
5341 "https://github.com/pygridtools/gridmap/archive/v"
5342 version ".tar.gz"))
5343 (file-name (string-append name "-" version ".tar.gz"))
5344 (sha256
5345 (base32 "1gzjg2k6f14i1msm2b0ax8d9ds1hvk6qd5nlaivg8m4cxqp4cp1x"))))
5346 (build-system python-build-system)
5347 (arguments
5348 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5349 (propagated-inputs
5350 `(("python-psutil" ,python-psutil)
5351 ("python-drmaa" ,python-drmaa)
5352 ("python-pyzmq" ,python-pyzmq)))
5353 (home-page "https://github.com/pygridtools/gridmap")
5354 (synopsis "Create jobs on a cluster directly from Python")
5355 (description
5356 "Gridmap is a Python package to allow you to easily create jobs on the
5357 cluster directly from Python. You can directly map Python functions onto the
5358 cluster without needing to write any wrapper code yourself.")
5359 (license license:gpl3+)))
5360
5361 (define-public python2-gridmap
5362 (package-with-python2 python-gridmap))
5363
5364 (define-public python-honcho
5365 (package
5366 (name "python-honcho")
5367 (version "1.0.1")
5368 (source
5369 (origin
5370 (method url-fetch)
5371 (uri (string-append
5372 "https://github.com/nickstenning/honcho/archive/v"
5373 version ".tar.gz"))
5374 (file-name (string-append name "-" version ".tar.gz"))
5375 (sha256
5376 (base32 "0zizn61n5z5hq421hkypk9pw8s6fpxw30f4hsg7k4ivwzy3gjw9j"))))
5377 (build-system python-build-system)
5378 (native-inputs
5379 `(("python-pytest" ,python-pytest-3.0)
5380 ("python-mock" ,python-mock)
5381 ("python-tox" ,python-tox)
5382 ("which" ,which))) ;for tests
5383 (propagated-inputs
5384 `(("python-jinja2" ,python-jinja2)))
5385 (arguments
5386 `(#:phases
5387 (modify-phases %standard-phases
5388 (delete 'check)
5389 (add-after 'install 'check
5390 (lambda* (#:key outputs inputs #:allow-other-keys)
5391 ;; fix honcho path in testsuite
5392 (substitute* "tests/conftest.py"
5393 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5394 "/bin/honcho" "'")))
5395 ;; It's easier to run tests after install.
5396 ;; Make installed package available for running the tests
5397 (add-installed-pythonpath inputs outputs)
5398 (zero? (system* "py.test" "-v")))))))
5399 (home-page "https://github.com/nickstenning/honcho")
5400 (synopsis "Manage Procfile-based applications")
5401 (description
5402 "A Procfile is a file which describes how to run an application
5403 consisting of serveral processes. honcho starts all listed processes.
5404 The output of all running processes is collected by honcho and
5405 displayed.")
5406 (license license:expat)))
5407
5408 (define-public python2-honcho
5409 (package-with-python2 python-honcho))
5410
5411 (define-public python-pexpect
5412 (package
5413 (name "python-pexpect")
5414 (version "4.2.1")
5415 (source
5416 (origin
5417 (method url-fetch)
5418 (uri (pypi-uri "pexpect" version))
5419 (sha256
5420 (base32 "14ls7k99pwvl21zqv65kzrhccv50j89m5ij1hf0slmsvlxjj84rx"))))
5421 (build-system python-build-system)
5422 (arguments
5423 `(#:phases
5424 (modify-phases %standard-phases
5425 (add-before 'check 'prepare-tests
5426 (lambda _
5427 (substitute* (find-files "tests")
5428 (("/bin/ls") (which "ls"))
5429 (("/bin/echo") (which "echo"))
5430 (("/bin/which") (which "which"))
5431 ;; Many tests try to use the /bin directory which
5432 ;; is not present in the build environment.
5433 ;; Use one that's non-empty and unlikely to change.
5434 (("/bin'") "/dev'"))
5435 ;; XXX: Socket connection test gets "Connection reset by peer".
5436 ;; Why does it not work? Delete for now.
5437 (delete-file "tests/test_socket.py")
5438 #t))
5439 (replace 'check (lambda _ (zero? (system* "nosetests" "-v")))))))
5440 (native-inputs
5441 `(("python-nose" ,python-nose)
5442 ("python-pytest" ,python-pytest-3.0)
5443 ("man-db" ,man-db)
5444 ("which" ,which)
5445 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5446 (propagated-inputs
5447 `(("python-ptyprocess" ,python-ptyprocess)))
5448 (home-page "http://pexpect.readthedocs.org/")
5449 (synopsis "Controlling interactive console applications")
5450 (description
5451 "Pexpect is a pure Python module for spawning child applications;
5452 controlling them; and responding to expected patterns in their output.
5453 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5454 child application and control it as if a human were typing commands.")
5455 (license license:isc)))
5456
5457 (define-public python2-pexpect
5458 (package-with-python2 python-pexpect))
5459
5460 (define-public python-setuptools-scm
5461 (package
5462 (name "python-setuptools-scm")
5463 (version "1.15.0")
5464 (source (origin
5465 (method url-fetch)
5466 (uri (pypi-uri "setuptools_scm" version))
5467 (sha256
5468 (base32
5469 "0bwyc5markib0i7i2qlyhdzxhiywzxbkfiapldma8m91m82jvwfs"))))
5470 (build-system python-build-system)
5471 (home-page "https://github.com/pypa/setuptools_scm/")
5472 (synopsis "Manage Python package versions in SCM metadata")
5473 (description
5474 "Setuptools_scm handles managing your Python package versions in
5475 @dfn{software configuration management} (SCM) metadata instead of declaring
5476 them as the version argument or in a SCM managed file.")
5477 (license license:expat)))
5478
5479 (define-public python2-setuptools-scm
5480 (package-with-python2 python-setuptools-scm))
5481
5482 (define-public python-pathpy
5483 (package
5484 (name "python-pathpy")
5485 (version "8.1.1")
5486 (source
5487 (origin
5488 (method url-fetch)
5489 (uri (string-append "https://pypi.python.org/packages/source/p/"
5490 "path.py/path.py-" version ".tar.gz"))
5491 (sha256
5492 (base32 "1p8s1l2vfkqhqxdhqlj0g1jjw4f1as2frr35sjcpjjpd5a89y41f"))))
5493 (outputs '("out" "doc"))
5494 (build-system python-build-system)
5495 (propagated-inputs
5496 `(("python-appdirs" ,python-appdirs)))
5497 (native-inputs
5498 `(("python-setuptools-scm" ,python-setuptools-scm)
5499 ("python-sphinx" ,python-sphinx)
5500 ("python-rst.linker" ,python-rst.linker)
5501 ("python-pytest" ,python-pytest)
5502 ("python-pytest-runner" ,python-pytest-runner)))
5503 (arguments
5504 `(#:phases
5505 (modify-phases %standard-phases
5506 (add-after 'build 'build-doc
5507 (lambda _
5508 (setenv "LANG" "en_US.UTF-8")
5509 (zero? (system* "python" "setup.py" "build_sphinx"))))
5510 (add-after 'install 'install-doc
5511 (lambda* (#:key outputs #:allow-other-keys)
5512 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5513 (doc (string-append data "/doc/" ,name "-" ,version))
5514 (html (string-append doc "/html")))
5515 (mkdir-p html)
5516 (for-each (lambda (file)
5517 (copy-file file (string-append doc "/" file)))
5518 '("README.rst" "CHANGES.rst"))
5519 (copy-recursively "build/sphinx/html" html)))))))
5520 (home-page "https://github.com/jaraco/path.py")
5521 (synopsis "Python module wrapper for built-in os.path")
5522 (description
5523 "@code{path.py} implements path objects as first-class entities, allowing
5524 common operations on files to be invoked on those path objects directly.")
5525 (license license:expat)))
5526
5527 (define-public python2-pathpy
5528 (package-with-python2 python-pathpy))
5529
5530 (define-public python-pickleshare
5531 (package
5532 (name "python-pickleshare")
5533 (version "0.5")
5534 (source
5535 (origin
5536 (method url-fetch)
5537 (uri (string-append "https://pypi.python.org/packages/source/p/"
5538 "pickleshare/pickleshare-" version ".tar.gz"))
5539 (sha256
5540 (base32 "11ljr90j3p6qswdrbl7p4cjb2i93f6vn0vx9anzpshsx0d2mggn0"))))
5541 (build-system python-build-system)
5542 (propagated-inputs
5543 `(("python-pathpy" ,python-pathpy)))
5544 (home-page "https://github.com/vivainio/pickleshare")
5545 (synopsis "Tiny key value database with concurrency support")
5546 (description
5547 "PickleShare is a small ‘shelve’-like datastore with concurrency support.
5548 Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike
5549 shelve, many processes can access the database simultaneously. Changing a
5550 value in database is immediately visible to other processes accessing the same
5551 database. Concurrency is possible because the values are stored in separate
5552 files. Hence the “database” is a directory where all files are governed by
5553 PickleShare.")
5554 (license license:expat)))
5555
5556 (define-public python2-pickleshare
5557 (package-with-python2 python-pickleshare))
5558
5559 (define-public python-simplegeneric
5560 (package
5561 (name "python-simplegeneric")
5562 (version "0.8.1")
5563 (source
5564 (origin
5565 (method url-fetch)
5566 (uri (string-append "https://pypi.python.org/packages/source/s/"
5567 "simplegeneric/simplegeneric-" version ".zip"))
5568 (sha256
5569 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
5570 (build-system python-build-system)
5571 (native-inputs
5572 `(("unzip" ,unzip)))
5573 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
5574 (synopsis "Python module for simple generic functions")
5575 (description
5576 "The simplegeneric module lets you define simple single-dispatch generic
5577 functions, akin to Python’s built-in generic functions like @code{len()},
5578 @code{iter()} and so on. However, instead of using specially-named methods,
5579 these generic functions use simple lookup tables, akin to those used by
5580 e.g. @code{pickle.dump()} and other generic functions found in the Python
5581 standard library.")
5582 (license license:zpl2.1)))
5583
5584 (define-public python2-simplegeneric
5585 (package-with-python2 python-simplegeneric))
5586
5587 (define-public python-ipython-genutils
5588 ;; TODO: This package is retired, check if can be removed, see description.
5589 (package
5590 (name "python-ipython-genutils")
5591 (version "0.1.0")
5592 (source
5593 (origin
5594 (method url-fetch)
5595 (uri (string-append "https://pypi.python.org/packages/source/i/"
5596 "ipython_genutils/ipython_genutils-"
5597 version ".tar.gz"))
5598 (sha256
5599 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
5600 (build-system python-build-system)
5601 (arguments `(#:tests? #f)) ; no tests
5602 (home-page "http://ipython.org")
5603 (synopsis "Vestigial utilities from IPython")
5604 (description
5605 "This package provides retired utilities from IPython. No packages
5606 outside IPython/Jupyter should depend on it.
5607
5608 This package shouldn't exist. It contains some common utilities shared by
5609 Jupyter and IPython projects during The Big Split. As soon as possible, those
5610 packages will remove their dependency on this, and this package will go
5611 away.")
5612 (license license:bsd-3)))
5613
5614 (define-public python2-ipython-genutils
5615 (package-with-python2 python-ipython-genutils))
5616
5617 (define-public python-traitlets
5618 (package
5619 (name "python-traitlets")
5620 (version "4.2.0")
5621 (source
5622 (origin
5623 (method url-fetch)
5624 (uri (pypi-uri "traitlets" version))
5625 (sha256
5626 (base32
5627 "1afy08sa5n9gnkvh3da49c16zkyv598vchv0p1hp7zzjy8895hz4"))))
5628 (build-system python-build-system)
5629 (arguments
5630 `(#:phases
5631 (modify-phases %standard-phases
5632 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
5633 (propagated-inputs
5634 `(("python-ipython-genutils" ,python-ipython-genutils)
5635 ("python-decorator" ,python-decorator)))
5636 (native-inputs
5637 `(("python-mock" ,python-mock)
5638 ("python-nose" ,python-nose)))
5639 (home-page "http://ipython.org")
5640 (synopsis "Configuration system for Python applications")
5641 (description
5642 "Traitlets is a framework that lets Python classes have attributes with
5643 type checking, dynamically calculated default values, and ‘on change’
5644 callbacks. The package also includes a mechanism to use traitlets for
5645 configuration, loading values from files or from command line arguments. This
5646 is a distinct layer on top of traitlets, so you can use traitlets in your code
5647 without using the configuration machinery.")
5648 (license license:bsd-3)))
5649
5650 (define-public python2-traitlets
5651 (package-with-python2 python-traitlets))
5652
5653 (define-public python-jupyter-core
5654 (package
5655 (name "python-jupyter-core")
5656 (version "4.2.1")
5657 (source
5658 (origin
5659 (method url-fetch)
5660 (uri (string-append (pypi-uri "jupyter_core" version)))
5661 (sha256
5662 (base32
5663 "1cy7inv218dgh4m1fbzbsiqpz733ylgjrj62jxqpfzs3r2cm7ic9"))))
5664 (build-system python-build-system)
5665 ;; FIXME: not sure how to run the tests
5666 (arguments `(#:tests? #f))
5667 (propagated-inputs
5668 `(("python-traitlets" ,python-traitlets)))
5669 (home-page "http://jupyter.org/")
5670 (synopsis "Jupyter base package")
5671 (description
5672 "Jupyter core is the base package on which Jupyter projects rely.")
5673 (license license:bsd-3)))
5674
5675 (define-public python2-jupyter-core
5676 (package-with-python2 python-jupyter-core))
5677
5678 (define-public python-jupyter-client
5679 (package
5680 (name "python-jupyter-client")
5681 (version "4.4.0")
5682 (source
5683 (origin
5684 (method url-fetch)
5685 (uri (pypi-uri "jupyter_client" version))
5686 (sha256
5687 (base32
5688 "1vjjrpjw7k5sh982pbjnslv7byfbfazjw9g92jvs7dz5qbx556n9"))))
5689 (build-system python-build-system)
5690 ;; Tests fail because of missing native python kernel which I assume is
5691 ;; provided by the ipython package, which we cannot use because it would
5692 ;; cause a dependency cycle.
5693 (arguments `(#:tests? #f))
5694 (propagated-inputs
5695 `(("python-pyzmq" ,python-pyzmq)
5696 ("python-traitlets" ,python-traitlets)
5697 ("python-jupyter-core" ,python-jupyter-core)))
5698 (home-page "http://jupyter.org/")
5699 (synopsis "Jupyter protocol implementation and client libraries")
5700 (description
5701 "The @code{jupyter_client} package contains the reference implementation
5702 of the Jupyter protocol. It also provides client and kernel management APIs
5703 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
5704 installing @code{kernelspec}s for use with Jupyter frontends.")
5705 (license license:bsd-3)))
5706
5707 (define-public python2-jupyter-client
5708 (package-with-python2 python-jupyter-client))
5709
5710 (define-public python-ipykernel
5711 (package
5712 (name "python-ipykernel")
5713 (version "4.5.2")
5714 (source
5715 (origin
5716 (method url-fetch)
5717 (uri (pypi-uri "ipykernel" version))
5718 (sha256
5719 (base32 "0qllv0k6zzv1r1cj1x2ygxmlrrqhbslzj8rc6r6fg3kc1rgz4m2s"))))
5720 (build-system python-build-system)
5721 ;; The tests load a submodule of IPython. However, IPython itself depends
5722 ;; on ipykernel.
5723 (arguments `(#:tests? #f))
5724 (propagated-inputs
5725 ;; imported at runtime during connect
5726 `(("python-jupyter-client" ,python-jupyter-client)))
5727 (home-page "http://ipython.org")
5728 (synopsis "IPython Kernel for Jupyter")
5729 (description
5730 "This package provides the IPython kernel for Jupyter.")
5731 (license license:bsd-3)))
5732
5733 (define-public python2-ipykernel
5734 (package-with-python2 python-ipykernel))
5735
5736 (define-public python-testpath
5737 (package
5738 (name "python-testpath")
5739 (version "0.2")
5740 (source
5741 (origin
5742 (method url-fetch)
5743 (uri (string-append "https://github.com/jupyter/testpath/archive/"
5744 version ".tar.gz"))
5745 (file-name (string-append name "-" version ".tar.gz"))
5746 (sha256
5747 (base32
5748 "04kh3fgvmqz6cfcw79q70qwjz7ib7lxm27cc548iy2rpr33qqf55"))))
5749 (build-system python-build-system)
5750 (arguments
5751 `(#:tests? #f ; this package does not even have a setup.py
5752 #:modules ((guix build python-build-system)
5753 (guix build utils)
5754 (srfi srfi-1))
5755 #:imported-modules (,@%python-build-system-modules
5756 (srfi srfi-1))
5757 #:phases
5758 (modify-phases %standard-phases
5759 (delete 'install)
5760 (replace 'build
5761 (lambda* (#:key inputs outputs #:allow-other-keys)
5762 (let* ((version (last
5763 (string-split (assoc-ref inputs "python") #\-)))
5764 (x.y (string-join (take (string-split version #\.) 2)
5765 "."))
5766 (dir (string-append
5767 (assoc-ref outputs "out")
5768 "/lib/python" x.y "/site-packages/testpath")))
5769 (mkdir-p dir)
5770 (copy-recursively "testpath" dir))
5771 #t)))))
5772 (home-page "https://github.com/takluyver/testpath")
5773 (synopsis "Test utilities for code working with files and commands")
5774 (description
5775 "Testpath is a collection of utilities for Python code working with files
5776 and commands. It contains functions to check things on the filesystem, and
5777 tools for mocking system commands and recording calls to those.")
5778 (license license:expat)))
5779
5780 (define-public python2-testpath
5781 (package-with-python2 python-testpath))
5782
5783 (define-public python-ipython
5784 (package
5785 (name "python-ipython")
5786 (version "5.2.2")
5787 (source
5788 (origin
5789 (method url-fetch)
5790 (uri (pypi-uri "ipython" version ".tar.gz"))
5791 (sha256
5792 (base32 "1qhjwa9cyz1np7rhv3p4ip13lkgbqsad62l24xkwiq1ic2gwiqbf"))))
5793 (build-system python-build-system)
5794 (outputs '("out" "doc"))
5795 (propagated-inputs
5796 `(("python-pyzmq" ,python-pyzmq)
5797 ("python-prompt-toolkit" ,python-prompt-toolkit)
5798 ("python-terminado" ,python-terminado)
5799 ("python-matplotlib" ,python-matplotlib)
5800 ("python-numpy" ,python-numpy)
5801 ("python-numpydoc" ,python-numpydoc)
5802 ("python-jinja2" ,python-jinja2)
5803 ("python-mistune" ,python-mistune)
5804 ("python-pexpect" ,python-pexpect)
5805 ("python-pickleshare" ,python-pickleshare)
5806 ("python-simplegeneric" ,python-simplegeneric)
5807 ("python-jsonschema" ,python-jsonschema)
5808 ("python-traitlets" ,python-traitlets)
5809 ("python-ipykernel" ,python-ipykernel)
5810 ("python-nbformat" ,python-nbformat)
5811 ("python-pygments" ,python-pygments)))
5812 (inputs
5813 `(("readline" ,readline)
5814 ("which" ,which)))
5815 (native-inputs
5816 `(("graphviz" ,graphviz)
5817 ("pkg-config" ,pkg-config)
5818 ("python-requests" ,python-requests) ;; for tests
5819 ("python-testpath" ,python-testpath)
5820 ("python-nose" ,python-nose)
5821 ("python-sphinx" ,python-sphinx)
5822 ("python-shpinx-rtd-theme" ,python-sphinx-rtd-theme)
5823 ;; FIXME: It's possible that a smaller union would work just as well.
5824 ("texlive" ,(texlive-union (list texlive-fonts-amsfonts
5825 texlive-fonts-ec
5826 texlive-generic-ifxetex
5827 texlive-generic-pdftex
5828 texlive-latex-amsfonts
5829 texlive-latex-capt-of
5830 texlive-latex-cmap
5831 texlive-latex-environ
5832 texlive-latex-eqparbox
5833 texlive-latex-etoolbox
5834 texlive-latex-expdlist
5835 texlive-latex-fancyhdr
5836 texlive-latex-fancyvrb
5837 texlive-latex-fncychap
5838 texlive-latex-float
5839 texlive-latex-framed
5840 texlive-latex-geometry
5841 texlive-latex-graphics
5842 texlive-latex-hyperref
5843 texlive-latex-mdwtools
5844 texlive-latex-multirow
5845 texlive-latex-oberdiek
5846 texlive-latex-parskip
5847 texlive-latex-preview
5848 texlive-latex-tabulary
5849 texlive-latex-threeparttable
5850 texlive-latex-titlesec
5851 texlive-latex-trimspaces
5852 texlive-latex-ucs
5853 texlive-latex-upquote
5854 texlive-latex-url
5855 texlive-latex-varwidth
5856 texlive-latex-wrapfig)))
5857 ("texinfo" ,texinfo)))
5858 (arguments
5859 `(#:phases
5860 (modify-phases %standard-phases
5861 (add-after
5862 'install 'install-doc
5863 (lambda* (#:key inputs outputs #:allow-other-keys)
5864 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5865 (doc (string-append data "/doc/" ,name "-" ,version))
5866 (html (string-append doc "/html"))
5867 (man1 (string-append data "/man/man1"))
5868 (info (string-append data "/info"))
5869 (examples (string-append doc "/examples"))
5870 (python-arg (string-append "PYTHON=" (which "python"))))
5871 (setenv "LANG" "en_US.utf8")
5872 ;; Make installed package available for running the tests
5873 (add-installed-pythonpath inputs outputs)
5874 (with-directory-excursion "docs"
5875 ;; FIXME: pdf fails to build
5876 ;;(system* "make" "pdf" "PAPER=a4")
5877 (system* "make" python-arg "html")
5878 (system* "make" python-arg "info"))
5879 (copy-recursively "docs/man" man1)
5880 (copy-recursively "examples" examples)
5881 (copy-recursively "docs/build/html" html)
5882 ;; (copy-file "docs/build/latex/ipython.pdf"
5883 ;; (string-append doc "/ipython.pdf"))
5884 (mkdir-p info)
5885 (copy-file "docs/build/texinfo/ipython.info"
5886 (string-append info "/ipython.info"))
5887 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))))
5888 ;; Tests can only be run after the library has been installed and not
5889 ;; within the source directory.
5890 (delete 'check)
5891 (add-after
5892 'install 'check
5893 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5894 (if tests?
5895 (with-directory-excursion "/tmp"
5896 ;; Make installed package available for running the tests
5897 (add-installed-pythonpath inputs outputs)
5898 (setenv "HOME" "/tmp/") ;; required by a test
5899 (zero? (system* (string-append (assoc-ref outputs "out")
5900 "/bin/iptest"))))
5901 #t)))
5902 (add-before
5903 'install 'fix-tests
5904 (lambda* (#:key inputs #:allow-other-keys)
5905 (substitute* "./IPython/utils/_process_posix.py"
5906 (("/usr/bin/env', 'which") (which "which")))
5907 (substitute* "./IPython/core/tests/test_inputtransformer.py"
5908 (("#!/usr/bin/env python")
5909 (string-append "#!" (which "python"))))
5910 ;; Disable 1 failing test
5911 (substitute* "./IPython/core/tests/test_magic.py"
5912 (("def test_dirops\\(\\):" all)
5913 (string-append "@dec.skipif(True)\n" all))))))))
5914 (home-page "http://ipython.org")
5915 (synopsis "IPython is a tool for interactive computing in Python")
5916 (description
5917 "IPython provides a rich architecture for interactive computing with:
5918 Powerful interactive shells, a browser-based notebook, support for interactive
5919 data visualization, embeddable interpreters and tools for parallel
5920 computing.")
5921 (license license:bsd-3)
5922 (properties `((python2-variant . ,(delay python2-ipython))))))
5923
5924 (define-public python2-ipython
5925 (let ((ipython (package-with-python2 (strip-python2-variant python-ipython))))
5926 (package
5927 (inherit ipython)
5928 ;; FIXME: add pyreadline once available.
5929 (propagated-inputs
5930 `(("python2-backports-shutil-get-terminal-size"
5931 ,python2-backports-shutil-get-terminal-size)
5932 ("python2-pathlib2" ,python2-pathlib2)
5933 ,@(package-propagated-inputs ipython)))
5934 (native-inputs
5935 `(("python2-mock" ,python2-mock)
5936 ,@(package-native-inputs ipython))))))
5937
5938 (define-public python-isodate
5939 (package
5940 (name "python-isodate")
5941 (version "0.5.4")
5942 (source
5943 (origin
5944 (method url-fetch)
5945 (uri (pypi-uri "isodate" version))
5946 (sha256
5947 (base32
5948 "0cafaiwixgpxwh9dsd28qb0dbzsj6xpxjdkyk30ns91ps10mq422"))))
5949 (build-system python-build-system)
5950 (home-page
5951 "http://cheeseshop.python.org/pypi/isodate")
5952 (synopsis
5953 "Python date parser and formatter")
5954 (description
5955 "Python-isodate is a python module for parsing and formatting
5956 ISO 8601 dates, time and duration.")
5957 (license license:bsd-3)))
5958
5959 (define-public python2-isodate
5960 (package-with-python2 python-isodate))
5961
5962 (define-public python-html5lib
5963 (package
5964 (name "python-html5lib")
5965 (version "1.0b10")
5966 (source
5967 (origin
5968 (method url-fetch)
5969 (uri (pypi-uri "html5lib" version))
5970 (sha256
5971 (base32
5972 "1yd068a5c00wd0ajq0hqimv7fd82lhrw0w3s01vbhy9bbd6xapqd"))))
5973 (build-system python-build-system)
5974 (propagated-inputs
5975 `(("python-six" ,python-six)
5976 ("python-webencodings" ,python-webencodings)))
5977 (arguments
5978 `(#:test-target "check"))
5979 (home-page
5980 "https://github.com/html5lib/html5lib-python")
5981 (synopsis
5982 "Python HTML parser based on the WHATWG HTML specifcation")
5983 (description
5984 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
5985 and written in Python.")
5986 (license license:expat)))
5987
5988 (define-public python2-html5lib
5989 (package-with-python2 python-html5lib))
5990
5991 ;; Needed for python-bleach, a dependency of python-notebook
5992 (define-public python-html5lib-0.9
5993 (package
5994 (inherit python-html5lib)
5995 (version "0.999")
5996 (source
5997 (origin
5998 (method url-fetch)
5999 (uri (pypi-uri "html5lib" version))
6000 (sha256
6001 (base32
6002 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
6003
6004 (define-public python2-html5lib-0.9
6005 (package-with-python2 python-html5lib-0.9))
6006
6007 (define-public python-html5-parser
6008 (package
6009 (name "python-html5-parser")
6010 (version "0.4.4")
6011 (source (origin
6012 (method url-fetch)
6013 (uri (pypi-uri "html5-parser" version))
6014 (sha256
6015 (base32
6016 "1d8sxhl41ffh7qlk7wlsy17xw6slzx5v1yna9s72wx5qrpaa3wxr"))))
6017 (build-system python-build-system)
6018 (native-inputs
6019 `(("pkg-config" ,pkg-config)))
6020 (inputs
6021 `(("libxml2" ,libxml2)))
6022 (propagated-inputs
6023 `(("python-lxml" ,python-lxml)
6024 ("python-beautifulsoup4" ,python-beautifulsoup4)))
6025 (home-page "https://html5-parser.readthedocs.io")
6026 (synopsis "Fast C-based HTML5 parsing for Python")
6027 (description "This package provides a fast implementation of the HTML5
6028 parsing spec for Python. Parsing is done in C using a variant of the gumbo
6029 parser. The gumbo parse tree is then transformed into an lxml tree, also in
6030 C, yielding parse times that can be a thirtieth of the html5lib parse times.")
6031 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
6032 ;; indicate ASL2.0, including the LICENSE file for the whole project.
6033 (license (list license:asl2.0 license:gpl3))))
6034
6035 (define-public python2-html5-parser
6036 (package-with-python2 python-html5-parser))
6037
6038 (define-public python-webencodings
6039 (package
6040 (name "python-webencodings")
6041 (version "0.5")
6042 (source (origin
6043 (method url-fetch)
6044 (uri (pypi-uri "webencodings" version))
6045 (sha256
6046 (base32
6047 "015rw7662lkpb9aqiqah2hbizk6w531badqwjpz41rr47glmxid5"))))
6048 (build-system python-build-system)
6049 (arguments
6050 '(#:phases
6051 (modify-phases %standard-phases
6052 (replace 'check
6053 (lambda _
6054 (zero? (system* "py.test" "-v" "webencodings/tests.py")))))))
6055 (native-inputs
6056 `(("python-pytest" ,python-pytest)))
6057 (home-page "https://github.com/SimonSapin/python-webencodings")
6058 (synopsis "Character encoding aliases for legacy web content")
6059 (description
6060 "In order to be compatible with legacy web content when interpreting
6061 something like @code{Content-Type: text/html; charset=latin1}, tools need
6062 to use a particular set of aliases for encoding labels as well as some
6063 overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
6064 the web are actually aliases for @code{windows-1252}, and an @code{UTF-8}
6065 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
6066 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
6067 defines all such details so that implementations do not have to
6068 reverse-engineer each other.
6069
6070 This module implements the Encoding standard and has encoding labels and
6071 BOM detection, but the actual implementation for encoders and decoders
6072 is Python’s.")
6073 (license license:bsd-3)))
6074
6075 (define-public python2-webencodings
6076 (package-with-python2 python-webencodings))
6077
6078 (define-public python-urwid
6079 (package
6080 (name "python-urwid")
6081 (version "1.3.1")
6082 (source
6083 (origin
6084 (method url-fetch)
6085 (uri (pypi-uri "urwid" version))
6086 (sha256
6087 (base32
6088 "18cnd1wdjcas08x5qwa5ayw6jsfcn33w4d9f7q3s29fy6qzc1kng"))))
6089 (build-system python-build-system)
6090 (arguments
6091 `(#:phases
6092 (modify-phases %standard-phases
6093 ;; Disable failing test. Bug filed upstream:
6094 ;; https://github.com/wardi/urwid/issues/164
6095 ;; TODO: check again for python-urwid > 1.3.1 or python > 3.4.3.
6096 (add-after 'unpack 'disable-failing-test
6097 (lambda _
6098 (substitute* "urwid/tests/test_event_loops.py"
6099 (("test_remove_watch_file")
6100 "disable_remove_watch_file")))))))
6101 (home-page "http://urwid.org")
6102 (synopsis "Console user interface library for Python")
6103 (description
6104 "Urwid is a curses-based UI/widget library for Python. It includes many
6105 features useful for text console applications.")
6106 (license license:lgpl2.1+)))
6107
6108 (define-public python2-urwid
6109 (let ((python2-urwid (package-with-python2 python-urwid)))
6110 (package
6111 (inherit python2-urwid)
6112 (arguments
6113 (append
6114 `(;; Explicitly using Python 2 is necessary due the argument list being
6115 ;; built from only the 'delete-test_vterm.py' phase and python-urwid's
6116 ;; package arguments, which by default assumes the use of Python 3.
6117 #:python ,python-2
6118 #:phases
6119 (modify-phases %standard-phases
6120 ;; Disable the vterm tests because of non-deterministic failures
6121 ;; with Python 2. See https://github.com/urwid/urwid/issues/230.
6122 (add-after 'unpack 'delete-test_vterm.py
6123 (delete-file "urwid/tests/test_vterm.py"))))
6124 (package-arguments python-urwid))))))
6125
6126 (define-public python-openid
6127 (package
6128 (name "python-openid")
6129 (version "3.0.10")
6130 (source
6131 (origin
6132 (method url-fetch)
6133 (uri (pypi-uri "python3-openid" version))
6134 (sha256
6135 (base32
6136 "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758"))))
6137 (build-system python-build-system)
6138 (arguments
6139 `(#:phases
6140 (modify-phases %standard-phases
6141 (replace 'check
6142 (lambda _
6143 (zero? (system* "./admin/runtests")))))))
6144 (properties `((python2-variant . ,(delay python2-openid))))
6145 (propagated-inputs
6146 `(("python-defusedxml" ,python-defusedxml)))
6147 (native-inputs
6148 `(("python-psycopg2" ,python-psycopg2)
6149 ("python-django" ,python-django)))
6150 (home-page "https://github.com/necaris/python3-openid")
6151 (synopsis "OpenID support for servers and consumers")
6152 (description "This library provides OpenID authentication for Python, both
6153 for clients and servers.")
6154 (license license:asl2.0)))
6155
6156 (define-public python2-openid
6157 (package
6158 (name "python2-openid")
6159 (version "2.2.5")
6160 (source
6161 (origin
6162 (method url-fetch)
6163 (uri (pypi-uri "python-openid" version))
6164 (sha256
6165 (base32
6166 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
6167 (build-system python-build-system)
6168 (arguments
6169 ;; Python 3 support is in `python3-openid`, a separate package.
6170 `(#:python ,python-2))
6171 (home-page "https://github.com/openid/python-openid")
6172 (synopsis "OpenID support for servers and consumers")
6173 (description "This library provides OpenID authentication for Python, both
6174 for clients and servers.")
6175 (license license:asl2.0)))
6176
6177 (define-public python-urwidtrees
6178 (package
6179 (name "python-urwidtrees")
6180 (version "1.0.2")
6181 (source
6182 (origin
6183 (method url-fetch)
6184 ;; package author intends on distributing via github rather than pypi:
6185 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6186 (uri (string-append "https://github.com/pazz/urwidtrees/archive/"
6187 version ".tar.gz"))
6188 (file-name (string-append name "-" version ".tar.gz"))
6189 (sha256
6190 (base32
6191 "0d30lyd3s2a97rhqfax5w9ssqds2z6aydqx3c6j2c2lk3cb4ngvh"))))
6192 (build-system python-build-system)
6193 (arguments
6194 '(#:tests? #f)) ; no tests
6195 (propagated-inputs `(("python-urwid" ,python-urwid)))
6196 (home-page "https://github.com/pazz/urwidtrees")
6197 (synopsis "Tree widgets for urwid")
6198 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6199 toolkit. Use it to build trees of widgets.")
6200 (license license:gpl3+)))
6201
6202 (define-public python2-urwidtrees
6203 (package-with-python2 python-urwidtrees))
6204
6205 (define-public python-dbus
6206 (package
6207 (name "python-dbus")
6208 (version "1.2.0")
6209 (source
6210 (origin
6211 (method url-fetch)
6212 (uri (string-append
6213 "https://dbus.freedesktop.org/releases/dbus-python/dbus-python-"
6214 version ".tar.gz"))
6215 (sha256
6216 (base32 "1py62qir966lvdkngg0v8k1khsqxwk5m4s8nflpk1agk5f5nqb71"))))
6217 (build-system gnu-build-system)
6218 (arguments
6219 '(#:phases
6220 (modify-phases %standard-phases
6221 (add-before
6222 'check 'pre-check
6223 (lambda _
6224 ;; XXX: For the missing '/etc/machine-id'.
6225 (substitute* "test/run-test.sh"
6226 (("DBUS_FATAL_WARNINGS=1")
6227 "DBUS_FATAL_WARNINGS=0"))
6228 #t)))))
6229 (native-inputs
6230 `(("pkg-config" ,pkg-config)))
6231 (inputs
6232 `(("python" ,python)
6233 ("dbus-glib" ,dbus-glib)))
6234 (synopsis "Python bindings for D-bus")
6235 (description "python-dbus provides bindings for libdbus, the reference
6236 implementation of D-Bus.")
6237 (home-page "http://www.freedesktop.org/wiki/Software/DBusBindings/")
6238 (license license:expat)))
6239
6240 (define-public python2-dbus
6241 (package (inherit python-dbus)
6242 (name "python2-dbus")
6243 (inputs `(("python" ,python-2)
6244 ,@(alist-delete "python"
6245 (package-inputs python-dbus)
6246 equal?)))
6247 ;; FIXME: on Python 2, the test_utf8 fails with:
6248 ;; "ValueError: unichr() arg not in range(0x10000) (narrow Python build)"
6249 (arguments `(#:tests? #f))))
6250
6251 (define-public python-apsw
6252 (package
6253 (name "python-apsw")
6254 (version "3.9.2-r1")
6255 (source
6256 (origin
6257 (method url-fetch)
6258 (uri (pypi-uri "apsw" version))
6259 (sha256
6260 (base32
6261 "0w4jb0wpx785qw42r3h4fh7gl5w2968q48i7gygybsfxck8nzffs"))))
6262 (build-system python-build-system)
6263 (inputs
6264 `(("sqlite" ,sqlite)))
6265 (arguments
6266 `(#:phases
6267 (modify-phases %standard-phases
6268 (replace 'build
6269 (lambda _
6270 (zero?
6271 (system* "python" "setup.py" "build" "--enable-all-extensions"))))
6272 (add-after 'build 'build-test-helper
6273 (lambda _
6274 (zero?
6275 (system
6276 (string-append "gcc -fPIC -shared -o ./testextension.sqlext "
6277 "-I. -Isqlite3 src/testextension.c") ))))
6278 (delete 'check)
6279 (add-after 'install 'check
6280 (lambda* (#:key inputs outputs #:allow-other-keys)
6281 (add-installed-pythonpath inputs outputs)
6282 (zero? (system* "python" "setup.py" "test")))))))
6283 (home-page "https://github.com/rogerbinns/apsw/")
6284 (synopsis "Another Python SQLite Wrapper")
6285 (description "APSW is a Python wrapper for the SQLite
6286 embedded relational database engine. In contrast to other wrappers such as
6287 pysqlite it focuses on being a minimal layer over SQLite attempting just to
6288 translate the complete SQLite API into Python.")
6289 (license license:zlib)))
6290
6291 (define-public python2-apsw
6292 (package-with-python2 python-apsw))
6293
6294 (define-public python-lxml
6295 (package
6296 (name "python-lxml")
6297 (version "3.8.0")
6298 (source
6299 (origin
6300 (method url-fetch)
6301 (uri (pypi-uri "lxml" version))
6302 (sha256
6303 (base32
6304 "15nvf6n285n282682qyw3wihsncb0x5amdhyi4b83bfa2nz74vvk"))))
6305 (build-system python-build-system)
6306 (inputs
6307 `(("libxml2" ,libxml2)
6308 ("libxslt" ,libxslt)))
6309 (home-page "http://lxml.de/")
6310 (synopsis
6311 "Python XML processing library")
6312 (description
6313 "The lxml XML toolkit is a Pythonic binding for the C libraries
6314 libxml2 and libxslt.")
6315 (license license:bsd-3))) ; and a few more, see LICENSES.txt
6316
6317 (define-public python2-lxml
6318 (package-with-python2 python-lxml))
6319
6320 ;; beautifulsoup4 has a totally different namespace than 3.x,
6321 ;; and pypi seems to put it under its own name, so I guess we should too
6322 (define-public python-beautifulsoup4
6323 (package
6324 (name "python-beautifulsoup4")
6325 (version "4.5.3")
6326 (source
6327 (origin
6328 (method url-fetch)
6329 (uri (pypi-uri "beautifulsoup4" version))
6330 (sha256
6331 (base32
6332 "0glaw1vyxnbp03fni7h5496n6iib0n5iim4gax1n0ngscs9s075j"))))
6333 (build-system python-build-system)
6334 (arguments
6335 `(#:phases
6336 (modify-phases %standard-phases
6337 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6338 ;; must use this conversion script when building with Python 3. The
6339 ;; conversion script also runs the tests.
6340 ;; For more information, see the file 'convert-py3k' in the source
6341 ;; distribution.
6342 (replace 'check
6343 (lambda _ (zero? (system* "./convert-py3k")))))))
6344 (home-page
6345 "http://www.crummy.com/software/BeautifulSoup/bs4/")
6346 (synopsis
6347 "Python screen-scraping library")
6348 (description
6349 "Beautiful Soup is a Python library designed for rapidly setting up
6350 screen-scraping projects. It offers Pythonic idioms for navigating,
6351 searching, and modifying a parse tree, providing a toolkit for
6352 dissecting a document and extracting what you need. It automatically
6353 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6354 (license license:expat)
6355 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6356
6357 (define-public python2-beautifulsoup4
6358 (package
6359 (inherit (package-with-python2
6360 (strip-python2-variant python-beautifulsoup4)))
6361 (arguments `(#:python ,python-2))))
6362
6363 (define-public python-cssutils
6364 (package
6365 (name "python-cssutils")
6366 (version "1.0.1")
6367 (source
6368 (origin
6369 (method url-fetch)
6370 (uri (pypi-uri "cssutils" version))
6371 (sha256
6372 (base32
6373 "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq"))))
6374 (build-system python-build-system)
6375 (native-inputs
6376 `(("unzip" ,unzip))) ; for unpacking the source
6377 (arguments
6378 `(#:tests? #f)) ;tests require python-pbr < 1.7.0
6379 (home-page "http://cthedot.de/cssutils/")
6380 (synopsis
6381 "CSS Cascading Style Sheets library for Python")
6382 (description
6383 "Cssutils is a Python package for parsing and building CSS
6384 Cascading Style Sheets. Currently it provides a DOM only and no rendering
6385 options.")
6386 (license license:lgpl3+)))
6387
6388 (define-public python2-cssutils
6389 (package-with-python2 python-cssutils))
6390
6391 (define-public python-cssselect
6392 (package
6393 (name "python-cssselect")
6394 (version "0.9.2")
6395 (source
6396 (origin
6397 (method url-fetch)
6398 (uri (pypi-uri "cssselect" version))
6399 (sha256
6400 (base32
6401 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
6402 (build-system python-build-system)
6403 (arguments
6404 ;; tests fail with message
6405 ;; AttributeError: 'module' object has no attribute 'tests'
6406 `(#:tests? #f))
6407 (home-page
6408 "https://pythonhosted.org/cssselect/")
6409 (synopsis
6410 "CSS3 selector parser and translator to XPath 1.0")
6411 (description
6412 "Cssselect ia a Python module that parses CSS3 Selectors and translates
6413 them to XPath 1.0 expressions. Such expressions can be used in lxml or
6414 another XPath engine to find the matching elements in an XML or HTML document.")
6415 (license license:bsd-3)))
6416
6417 (define-public python2-cssselect
6418 (package-with-python2 python-cssselect))
6419
6420 (define-public python-openid-cla
6421 (package
6422 (name "python-openid-cla")
6423 (version "1.2")
6424 (source
6425 (origin
6426 (method url-fetch)
6427 (uri (pypi-uri "python-openid-cla" version))
6428 (sha256
6429 (base32
6430 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6431 (build-system python-build-system)
6432 (arguments '(#:tests? #f)) ; No tests.
6433 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6434 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6435 (description "@code{openid-cla} is an implementation of the OpenID
6436 contributor license agreement extension for python-openid.")
6437 (license license:bsd-3)))
6438
6439 (define-public python2-openid-cla
6440 (package-with-python2 python-openid-cla))
6441
6442 (define-public python-openid-teams
6443 (package
6444 (name "python-openid-teams")
6445 (version "1.1")
6446 (source
6447 (origin
6448 (method url-fetch)
6449 (uri (pypi-uri "python-openid-teams" version))
6450 (sha256
6451 (base32
6452 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6453 (build-system python-build-system)
6454 (arguments '(#:tests? #f)) ; No tests.
6455 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6456 (synopsis "Implementation of the OpenID teams extension for python-openid")
6457 (description
6458 "@code{openid-teams} is an implementation of the OpenID
6459 teams extension for python-openid.")
6460 (license license:bsd-3)))
6461
6462 (define-public python2-openid-teams
6463 (package-with-python2 python-openid-teams))
6464
6465 (define-public python-netifaces
6466 (package
6467 (name "python-netifaces")
6468 (version "0.10.4")
6469 (source
6470 (origin
6471 (method url-fetch)
6472 (uri (string-append
6473 "https://pypi.python.org/packages/source/n/netifaces/netifaces-"
6474 version
6475 ".tar.gz"))
6476 (sha256
6477 (base32
6478 "1plw237a4zib4z8s62g0mrs8gm3kjfrp5sxh6bbk9nl3rdls2mln"))))
6479 (build-system python-build-system)
6480 (home-page
6481 "https://bitbucket.org/al45tair/netifaces")
6482 (synopsis
6483 "Python module for portable network interface information")
6484 (description
6485 "Netifaces is a Python module providing information on network
6486 interfaces in an easy and portable manner.")
6487 (license license:expat)))
6488
6489 (define-public python2-netifaces
6490 (package-with-python2 python-netifaces))
6491
6492 (define-public python-networkx
6493 (package
6494 (name "python-networkx")
6495 (version "1.11")
6496 (source
6497 (origin
6498 (method url-fetch)
6499 (uri (pypi-uri "networkx" version))
6500 (sha256
6501 (base32 "1f74s56xb4ggixiq0vxyfxsfk8p20c7a099lpcf60izv1php03hd"))))
6502 (build-system python-build-system)
6503 ;; python-decorator is needed at runtime
6504 (propagated-inputs
6505 `(("python-decorator" ,python-decorator)))
6506 (native-inputs
6507 `(("python-nose" ,python-nose)))
6508 (home-page "http://networkx.github.io/")
6509 (synopsis "Python module for creating and manipulating graphs and networks")
6510 (description
6511 "NetworkX is a Python package for the creation, manipulation, and study
6512 of the structure, dynamics, and functions of complex networks.")
6513 (license license:bsd-3)))
6514
6515 (define-public python2-networkx
6516 (package-with-python2 python-networkx))
6517
6518 (define-public snakemake
6519 (package
6520 (name "snakemake")
6521 (version "3.13.3")
6522 (source
6523 (origin
6524 (method url-fetch)
6525 (uri (pypi-uri "snakemake" version))
6526 (sha256
6527 (base32 "1nixb944r4hlskwkzc4wjs34b40xpxpw9gmhhm5p09gvmm22ap5d"))))
6528 (build-system python-build-system)
6529 (arguments
6530 ;; TODO: Package missing test dependencies.
6531 '(#:tests? #f
6532 #:phases
6533 (modify-phases %standard-phases
6534 ;; For cluster execution Snakemake will call Python. Since there is
6535 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
6536 ;; this by calling the snakemake wrapper instead.
6537 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
6538 (lambda* (#:key outputs #:allow-other-keys)
6539 (substitute* "snakemake/executors.py"
6540 (("\\{sys.executable\\} -m snakemake")
6541 (string-append (assoc-ref outputs "out")
6542 "/bin/snakemake")))
6543 #t)))))
6544 (propagated-inputs
6545 `(("python-wrapt" ,python-wrapt)
6546 ("python-requests" ,python-requests)))
6547 (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home")
6548 (synopsis "Python-based execution environment for make-like workflows")
6549 (description
6550 "Snakemake aims to reduce the complexity of creating workflows by
6551 providing a clean and modern domain specific specification language (DSL) in
6552 Python style, together with a fast and comfortable execution environment.")
6553 (license license:expat)))
6554
6555 (define-public python-seaborn
6556 (package
6557 (name "python-seaborn")
6558 (version "0.7.1")
6559 (source
6560 (origin
6561 (method url-fetch)
6562 (uri (pypi-uri "seaborn" version))
6563 (sha256
6564 (base32 "0pawrqc3mxpwd5g9pvi9gba02637bh5c8ldpp8izfwpfn52469zs"))))
6565 (build-system python-build-system)
6566 (arguments
6567 '(#:tests? #f)) ; Tests requires a running X11 server.
6568 (propagated-inputs
6569 `(("python-pandas" ,python-pandas)
6570 ("python-matplotlib" ,python-matplotlib)
6571 ("python-scipy" ,python-scipy)))
6572 (home-page "http://stanford.edu/~mwaskom/software/seaborn/")
6573 (synopsis "Statistical data visualization")
6574 (description
6575 "Seaborn is a library for making attractive and informative statistical
6576 graphics in Python. It is built on top of matplotlib and tightly integrated
6577 with the PyData stack, including support for numpy and pandas data structures
6578 and statistical routines from scipy and statsmodels.")
6579 (license license:bsd-3)
6580 (properties `((python2-variant . ,(delay python2-seaborn))))))
6581
6582 (define-public python2-seaborn
6583 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
6584 (package
6585 (inherit base)
6586 (propagated-inputs `(("python2-pytz" ,python2-pytz)
6587 ,@(package-propagated-inputs base))))))
6588
6589 (define-public python-mpmath
6590 (package
6591 (name "python-mpmath")
6592 (version "0.19")
6593 (source (origin
6594 (method url-fetch)
6595 (uri (string-append "http://mpmath.org/files/mpmath-"
6596 version ".tar.gz"))
6597 (sha256
6598 (base32
6599 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
6600 (build-system python-build-system)
6601 (arguments
6602 '(#:phases
6603 (modify-phases %standard-phases
6604 (replace 'check
6605 (lambda _
6606 (zero?
6607 (system* "python" "mpmath/tests/runtests.py" "-local")))))))
6608 (home-page "http://mpmath.org")
6609 (synopsis "Arbitrary-precision floating-point arithmetic in python")
6610 (description
6611 "@code{mpmath} can be used as an arbitrary-precision substitute for
6612 Python's float/complex types and math/cmath modules, but also does much
6613 more advanced mathematics.")
6614 (license license:bsd-3)))
6615
6616 (define-public python2-mpmath
6617 (package-with-python2 python-mpmath))
6618
6619 (define-public python-sympy
6620 (package
6621 (name "python-sympy")
6622 (version "1.0")
6623 (source
6624 (origin
6625 (method url-fetch)
6626 (uri (string-append
6627 "https://github.com/sympy/sympy/releases/download/sympy-"
6628 version "/sympy-" version ".tar.gz"))
6629 (sha256
6630 (base32 "1bpzjwr9hrr7w88v4vgnj9lr6vxcldc94si13n8xpr1rv08d5b1y"))))
6631 (build-system python-build-system)
6632 (propagated-inputs
6633 `(("python-mpmath" ,python-mpmath)))
6634 (home-page "http://www.sympy.org/")
6635 (synopsis "Python library for symbolic mathematics")
6636 (description
6637 "SymPy is a Python library for symbolic mathematics. It aims to become a
6638 full-featured computer algebra system (CAS) while keeping the code as simple
6639 as possible in order to be comprehensible and easily extensible.")
6640 (license license:bsd-3)))
6641
6642 (define-public python2-sympy
6643 (package-with-python2 python-sympy))
6644
6645 (define-public python-q
6646 (package
6647 (name "python-q")
6648 (version "2.6")
6649 (source
6650 (origin
6651 (method url-fetch)
6652 (uri (pypi-uri "q" version))
6653 (sha256
6654 (base32
6655 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
6656 (build-system python-build-system)
6657 (home-page "https://github.com/zestyping/q")
6658 (synopsis "Quick-and-dirty debugging output for tired programmers")
6659 (description
6660 "q is a Python module for \"print\" style of debugging Python code. It
6661 provides convenient short API for print out of values, tracebacks, and
6662 falling into the Python interpreter.")
6663 (license license:asl2.0)))
6664
6665 (define-public python2-q
6666 (package-with-python2 python-q))
6667
6668 (define-public python-testlib
6669 (package
6670 (name "python-testlib")
6671 (version "0.6.5")
6672 (source
6673 (origin
6674 (method url-fetch)
6675 (uri (string-append
6676 "https://pypi.python.org/packages/source/t/testlib/testlib-"
6677 version ".zip"))
6678 (sha256
6679 (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
6680 (build-system python-build-system)
6681 (native-inputs
6682 `(("unzip" ,unzip))) ; for unpacking the source
6683 (synopsis "Python micro test suite harness")
6684 (description "A micro unittest suite harness for Python.")
6685 (home-page "https://github.com/trentm/testlib")
6686 (license license:expat)))
6687
6688 (define-public python2-testlib
6689 (package-with-python2 python-testlib))
6690
6691 (define-public python2-xlib
6692 (package
6693 (name "python2-xlib")
6694 (version "0.14")
6695 (source (origin
6696 (method url-fetch)
6697 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
6698 "/" version "/"
6699 "python-xlib-" version ".tar.gz"))
6700 (sha256
6701 (base32
6702 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
6703 (build-system python-build-system)
6704 (arguments
6705 `(#:python ,python-2 ;Python 2 only
6706 #:tests? #f)) ;no tests
6707 (home-page "http://python-xlib.sourceforge.net/")
6708 (synopsis "Python X11 client library")
6709 (description
6710 "The Python X Library is intended to be a fully functional X client
6711 library for Python programs. It is useful to implement low-level X clients.
6712 It is written entirely in Python.")
6713 (license license:gpl2+)))
6714
6715 (define-public python-singledispatch
6716 (package
6717 (name "python-singledispatch")
6718 (version "3.4.0.3")
6719 (source
6720 (origin
6721 (method url-fetch)
6722 (uri (pypi-uri "singledispatch" version))
6723 (sha256
6724 (base32
6725 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
6726 (build-system python-build-system)
6727 (native-inputs
6728 `(("python-six" ,python-six))) ; required for conversion, not at run-time
6729 (home-page
6730 "http://docs.python.org/3/library/functools.html#functools.singledispatch")
6731 (synopsis "Backport of singledispatch feature from Python 3.4")
6732 (description
6733 "This library brings functools.singledispatch from Python 3.4 to Python
6734 2.6-3.3.")
6735 (license license:expat)))
6736
6737 (define-public python2-singledispatch
6738 (package-with-python2 python-singledispatch))
6739
6740 (define-public python-tornado
6741 (package
6742 (name "python-tornado")
6743 (version "4.5.1")
6744 (source
6745 (origin
6746 (method url-fetch)
6747 (uri (pypi-uri "tornado" version))
6748 (sha256
6749 (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
6750 (build-system python-build-system)
6751 (arguments
6752 '(;; FIXME: Two tests error out with:
6753 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
6754 ;; #:phases
6755 ;; (modify-phases %standard-phases
6756 ;; (replace 'check
6757 ;; (lambda _
6758 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
6759 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
6760 ;; (zero? (system* "python" "-m" "tornado.test")))))
6761 #:tests? #f))
6762 (native-inputs
6763 `(("python-certifi" ,python-certifi)))
6764 (propagated-inputs
6765 `(("python-backports-abc" ,python-backports-abc)))
6766 (home-page "http://www.tornadoweb.org/")
6767 (synopsis "Python web framework and asynchronous networking library")
6768 (description
6769 "Tornado is a Python web framework and asynchronous networking library,
6770 originally developed at FriendFeed. By using non-blocking network I/O,
6771 Tornado can scale to tens of thousands of open connections, making it ideal
6772 for long polling, WebSockets, and other applications that require a long-lived
6773 connection to each user.")
6774 (license license:asl2.0)
6775 (properties `((python2-variant . ,(delay python2-tornado))))))
6776
6777 (define-public python2-tornado
6778 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
6779 (package (inherit tornado)
6780 (propagated-inputs
6781 `(("python2-backport-ssl-match-hostname"
6782 ,python2-backport-ssl-match-hostname)
6783 ("python2-singledispatch" ,python2-singledispatch)
6784 ,@(package-propagated-inputs tornado))))))
6785
6786 (define-public python-tornado-http-auth
6787 (package
6788 (name "python-tornado-http-auth")
6789 (version "1.1.0")
6790 (source
6791 (origin
6792 (method url-fetch)
6793 (uri (pypi-uri "tornado-http-auth" version))
6794 (sha256
6795 (base32
6796 "0znrgqd7k2s4ia474xizi6h3061zj4sn5n6cq76bkwl3wwshifn5"))))
6797 (build-system python-build-system)
6798 (propagated-inputs
6799 `(("python-tornado" ,python-tornado)))
6800 (home-page
6801 "https://github.com/gvalkov/tornado-http-auth")
6802 (synopsis
6803 "Digest and basic authentication module for Tornado")
6804 (description
6805 "Provides support for adding authentication to services using the Tornado
6806 web framework, either via the basic or digest authentication schemes.")
6807 (license license:asl2.0)))
6808
6809 ;; the python- version can be removed with python-3.5
6810 (define-public python-backports-abc
6811 (package
6812 (name "python-backports-abc")
6813 (version "0.5")
6814 (source
6815 (origin
6816 (method url-fetch)
6817 (uri (pypi-uri "backports_abc" version))
6818 (sha256
6819 (base32
6820 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
6821 (build-system python-build-system)
6822 (home-page "https://github.com/cython/backports_abc")
6823 (synopsis "Backport of additions to the 'collections.abc' module")
6824 (description
6825 "Python-backports-abc provides a backport of additions to the
6826 'collections.abc' module in Python-3.5.")
6827 (license license:psfl)))
6828
6829 (define-public python2-backports-abc
6830 (package-with-python2 python-backports-abc))
6831
6832 (define-public python-backports-csv
6833 (package
6834 (name "python-backports-csv")
6835 (version "1.0.5")
6836 (source
6837 (origin
6838 (method url-fetch)
6839 (uri (pypi-uri "backports.csv" version))
6840 (sha256
6841 (base32
6842 "1imzbrradkfn8s2m1qcimyn74dn1mz2p3j381jljn166rf2i6hlc"))))
6843 (build-system python-build-system)
6844 (home-page "https://github.com/ryanhiebert/backports.csv")
6845 (synopsis "Backport of Python 3's csv module for Python 2")
6846 (description
6847 "Provides a backport of Python 3's @code{csv} module for parsing
6848 comma separated values. The API of the @code{csv} module in Python 2
6849 is drastically different from the @code{csv} module in Python 3.
6850 This is due, for the most part, to the difference between str in
6851 Python 2 and Python 3.")
6852 (license license:psfl)))
6853
6854 (define-public python2-backports-csv
6855 (package-with-python2 python-backports-csv))
6856
6857 (define-public python2-backports-shutil-get-terminal-size
6858 (package
6859 (name "python2-backports-shutil-get-terminal-size")
6860 (version "1.0.0")
6861 (source
6862 (origin
6863 (method url-fetch)
6864 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
6865 (sha256
6866 (base32
6867 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
6868 (build-system python-build-system)
6869 (arguments
6870 `(#:python ,python-2
6871 #:phases
6872 (modify-phases %standard-phases
6873 (replace 'check
6874 (lambda _
6875 (zero? (system* "py.test" "-v")))))))
6876 (native-inputs
6877 `(("python2-pytest" ,python2-pytest)))
6878 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
6879 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
6880 (description
6881 "This package provides a backport of the @code{get_terminal_size
6882 function} from Python 3.3's @code{shutil}.
6883 Unlike the original version it is written in pure Python rather than C,
6884 so it might be a tiny bit slower.")
6885 (license license:expat)))
6886
6887 (define-public python-waf
6888 (package
6889 (name "python-waf")
6890 (version "1.9.8")
6891 (source (origin
6892 (method url-fetch)
6893 (uri (string-append "https://waf.io/"
6894 "waf-" version ".tar.bz2"))
6895 (sha256
6896 (base32
6897 "0wl4cnmp06lfxqjxaan58bqxn27smhydz0sg5prrfbl3bsw4gv6q"))))
6898 (build-system python-build-system)
6899 (arguments
6900 '(#:phases
6901 (modify-phases %standard-phases
6902 (replace 'build
6903 (lambda _
6904 (zero? (system* "python" "waf-light" "configure" "build"))))
6905 (replace 'check
6906 (lambda _
6907 (zero? (system* "python" "waf" "--version"))))
6908 (replace 'install
6909 (lambda _
6910 (copy-file "waf" %output))))))
6911 (home-page "https://waf.io/")
6912 (synopsis "Python-based build system")
6913 (description
6914 "Waf is a Python-based framework for configuring, compiling and installing
6915 applications.")
6916 (license license:bsd-3)))
6917
6918 (define-public python2-waf
6919 (package-with-python2 python-waf))
6920
6921 (define-public python-pyzmq
6922 (package
6923 (name "python-pyzmq")
6924 (version "15.1.0")
6925 (source
6926 (origin
6927 (method url-fetch)
6928 (uri (pypi-uri "pyzmq" version))
6929 (sha256
6930 (base32 "13fhwnlvsvxv72kfhqbpn6qi7msh8mc8377mpabv32skk2cjfnxx"))))
6931 (build-system python-build-system)
6932 (arguments
6933 `(#:configure-flags
6934 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
6935 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
6936 ;; --inplace' for 'python setup.py test' to work.
6937 #:tests? #f))
6938 (inputs
6939 `(("zeromq" ,zeromq)))
6940 (native-inputs
6941 `(("pkg-config" ,pkg-config)
6942 ("python-nose" ,python-nose)))
6943 (home-page "https://github.com/zeromq/pyzmq")
6944 (synopsis "Python bindings for 0MQ")
6945 (description
6946 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
6947 (license license:bsd-4)))
6948
6949 (define-public python2-pyzmq
6950 (package-with-python2 python-pyzmq))
6951
6952 (define-public python-pep8
6953 (package
6954 (name "python-pep8")
6955 (version "1.7.0")
6956 (source
6957 (origin
6958 (method url-fetch)
6959 (uri (pypi-uri "pep8" version))
6960 (sha256
6961 (base32
6962 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))))
6963 (build-system python-build-system)
6964 (home-page "http://pep8.readthedocs.org/")
6965 (synopsis "Python style guide checker")
6966 (description
6967 "This tools checks Python code against some of the style conventions in
6968 PEP 8.")
6969 (license license:expat)))
6970
6971 (define-public python2-pep8
6972 (package-with-python2 python-pep8))
6973
6974 (define-public python-pyflakes
6975 (package
6976 (name "python-pyflakes")
6977 (version "1.0.0")
6978 (source
6979 (origin
6980 (method url-fetch)
6981 (uri (pypi-uri "pyflakes" version))
6982 (sha256
6983 (base32
6984 "0qs2sgqszq7wcplis8509wk2ygqcrwzbs1ghfj3svvivq2j377pk"))))
6985 (build-system python-build-system)
6986 (home-page
6987 "https://github.com/pyflakes/pyflakes")
6988 (synopsis "Passive checker of Python programs")
6989 (description
6990 "Pyflakes statically checks Python source code for common errors.")
6991 (license license:expat)))
6992
6993 (define-public python2-pyflakes
6994 (package-with-python2 python-pyflakes))
6995
6996 (define-public python-mccabe
6997 (package
6998 (name "python-mccabe")
6999 (version "0.4.0")
7000 (source
7001 (origin
7002 (method url-fetch)
7003 (uri (pypi-uri "mccabe" version))
7004 (sha256
7005 (base32
7006 "0yr08a36h8lqlif10l4xcikbbig7q8f41gqywir7rrvnv3mi4aws"))))
7007 (build-system python-build-system)
7008 (native-inputs
7009 `(("python-pytest" ,python-pytest)
7010 ("python-pytest-runner" ,python-pytest-runner)))
7011 (home-page "https://github.com/flintwork/mccabe")
7012 (synopsis "McCabe checker, plugin for flake8")
7013 (description
7014 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7015 complexity of Python source code.")
7016 (license license:expat)))
7017
7018 (define-public python2-mccabe
7019 (package-with-python2 python-mccabe))
7020
7021 (define-public python-mccabe-0.2.1
7022 (package (inherit python-mccabe)
7023 (version "0.2.1")
7024 (source
7025 (origin
7026 (method url-fetch)
7027 (uri (pypi-uri "mccabe" version))
7028 (sha256
7029 (base32
7030 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7031
7032 (define-public python2-mccabe-0.2.1
7033 (package-with-python2 python-mccabe-0.2.1))
7034
7035 ;; Flake8 2.4.1 requires an older version of pep8.
7036 ;; This should be removed ASAP.
7037 (define-public python-pep8-1.5.7
7038 (package (inherit python-pep8)
7039 (version "1.5.7")
7040 (source
7041 (origin
7042 (method url-fetch)
7043 (uri (string-append
7044 "https://pypi.python.org/packages/source/p/pep8/pep8-"
7045 version
7046 ".tar.gz"))
7047 (sha256
7048 (base32
7049 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7050 (arguments
7051 ;; XXX Tests not compatible with Python 3.5.
7052 '(#:tests? #f))))
7053
7054 (define-public python2-pep8-1.5.7
7055 (package-with-python2 python-pep8-1.5.7))
7056
7057 ;; Flake8 2.4.1 requires an older version of pyflakes.
7058 ;; This should be removed ASAP.
7059 (define-public python-pyflakes-0.8.1
7060 (package (inherit python-pyflakes)
7061 (version "0.8.1")
7062 (source
7063 (origin
7064 (method url-fetch)
7065 (uri (string-append
7066 "https://pypi.python.org/packages/source/p/pyflakes/pyflakes-"
7067 version
7068 ".tar.gz"))
7069 (sha256
7070 (base32
7071 "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
7072 (arguments
7073 ;; XXX Tests not compatible with Python 3.5.
7074 '(#:tests? #f))))
7075
7076 (define-public python2-pyflakes-0.8.1
7077 (package-with-python2 python-pyflakes-0.8.1))
7078
7079 (define-public python-flake8
7080 (package
7081 (name "python-flake8")
7082 (version "2.5.4")
7083 (source
7084 (origin
7085 (method url-fetch)
7086 (uri (pypi-uri "flake8" version))
7087 (sha256
7088 (base32
7089 "0bs9cz4fr99r2rwig1b8jwaadl1nan7kgpdzqwj0bwbckwbmh7nc"))
7090 (modules '((guix build utils)))
7091 (snippet
7092 '(begin
7093 ;; Remove pre-compiled .pyc files from source.
7094 (for-each delete-file-recursively
7095 (find-files "." "__pycache__" #:directories? #t))
7096 (for-each delete-file (find-files "." "\\.pyc$"))
7097 #t))))
7098 (build-system python-build-system)
7099 (propagated-inputs
7100 `(("python-pep8" ,python-pep8)
7101 ("python-pyflakes" ,python-pyflakes)
7102 ("python-mccabe" ,python-mccabe)))
7103 (native-inputs
7104 `(("python-mock" ,python-mock) ; TODO: only required for < 3.3
7105 ("python-nose" ,python-nose)))
7106 (home-page "https://gitlab.com/pycqa/flake8")
7107 (synopsis
7108 "The modular source code checker: pep8, pyflakes and co")
7109 (description
7110 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7111 (license license:expat)))
7112
7113 (define-public python2-flake8
7114 (package-with-python2 python-flake8))
7115
7116 (define-public python-flake8-polyfill
7117 (package
7118 (name "python-flake8-polyfill")
7119 (version "1.0.1")
7120 (source
7121 (origin
7122 (method url-fetch)
7123 (uri (pypi-uri "flake8-polyfill" version))
7124 (sha256
7125 (base32
7126 "02gn2wxvh9vnf7m7dld7ca4l60mg5c370hv3swwppkngwaqmcw67"))))
7127 (build-system python-build-system)
7128 (arguments
7129 '(#:phases
7130 (modify-phases %standard-phases
7131 (replace 'check
7132 (lambda _
7133 (setenv "PYTHONPATH"
7134 (string-append (getcwd) "/build/lib:"
7135 (getenv "PYTHONPATH")))
7136 (zero? (system* "py.test" "-v")))))))
7137 (native-inputs
7138 `(("python-flake8" ,python-flake8)
7139 ("python-mock" ,python-mock)
7140 ("python-pycodestyle" ,python-pycodestyle)
7141 ("python-pytest" ,python-pytest)))
7142 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7143 (synopsis "Polyfill package for Flake8 plugins")
7144 (description
7145 "This package that provides some compatibility helpers for Flake8
7146 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7147 (license license:expat)))
7148
7149 (define-public python2-flake8-polyfill
7150 (package-with-python2 python-flake8-polyfill))
7151
7152 (define-public python-mistune
7153 (package
7154 (name "python-mistune")
7155 (version "0.7.3")
7156 (source
7157 (origin
7158 (method url-fetch)
7159 (uri (pypi-uri "mistune" version))
7160 (sha256
7161 (base32
7162 "04xpk1zvslhq3xpnf01g3ag0dy9wfv4z28p093r8k49vvxlyil11"))))
7163 (build-system python-build-system)
7164 (native-inputs
7165 `(("python-nose" ,python-nose)
7166 ("python-cython" ,python-cython)))
7167 (home-page "https://github.com/lepture/mistune")
7168 (synopsis "Markdown parser in pure Python")
7169 (description "This package provides a fast markdown parser in pure
7170 Python.")
7171 (license license:bsd-3)))
7172
7173 (define-public python2-mistune
7174 (package-with-python2 python-mistune))
7175
7176 (define-public python-markdown
7177 (package
7178 (name "python-markdown")
7179 (version "2.6.8")
7180 (source
7181 (origin
7182 (method url-fetch)
7183 (uri (pypi-uri "Markdown" version))
7184 (sha256
7185 (base32
7186 "0cqfhr1km2s5d8jm6hbwgkrrj9hvkjf2gab3s2axlrw1clgaij0a"))))
7187 (build-system python-build-system)
7188 (arguments
7189 `(#:phases
7190 (modify-phases %standard-phases
7191 (replace 'check
7192 (lambda _
7193 (zero? (system* "python" "run-tests.py")))))))
7194 (native-inputs
7195 `(("python-nose" ,python-nose)
7196 ("python-pyyaml" ,python-pyyaml)))
7197 (home-page "https://pythonhosted.org/Markdown/")
7198 (synopsis "Python implementation of Markdown")
7199 (description
7200 "This package provides a Python implementation of John Gruber's
7201 Markdown. The library features international input, various Markdown
7202 extensions, and several HTML output formats. A command line wrapper
7203 markdown_py is also provided to convert Markdown files to HTML.")
7204 (license license:bsd-3)))
7205
7206 (define-public python2-markdown
7207 (package-with-python2 python-markdown))
7208
7209 (define-public python-ptyprocess
7210 (package
7211 (name "python-ptyprocess")
7212 (version "0.5.1")
7213 (source
7214 (origin
7215 (method url-fetch)
7216 (uri (string-append
7217 "https://pypi.python.org/packages/source/p/ptyprocess/ptyprocess-"
7218 version ".tar.gz"))
7219 (sha256
7220 (base32
7221 "19l1xrjn4l9gjz01s3vg92gn2dd9d8mw1v86ppkzlnr9m5iwwc05"))))
7222 (build-system python-build-system)
7223 (native-inputs
7224 `(("python-nose" ,python-nose)))
7225 (arguments
7226 `(#:phases
7227 (modify-phases %standard-phases
7228 (replace 'check
7229 (lambda _
7230 (zero? (system* "nosetests")))))))
7231 (home-page "https://github.com/pexpect/ptyprocess")
7232 (synopsis "Run a subprocess in a pseudo terminal")
7233 (description
7234 "This package provides a Python library used to launch a subprocess in a
7235 pseudo terminal (pty), and interact with both the process and its pty.")
7236 (license license:isc)))
7237
7238 (define-public python2-ptyprocess
7239 (package-with-python2 python-ptyprocess))
7240
7241 (define-public python-cram
7242 (package
7243 (name "python-cram")
7244 (version "0.7")
7245 (home-page "https://bitheap.org/cram/")
7246 (source (origin
7247 (method url-fetch)
7248 (uri (list (string-append home-page "cram-"
7249 version ".tar.gz")
7250 (pypi-uri "cram" version)))
7251 (sha256
7252 (base32
7253 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7254 (arguments
7255 '(#:phases
7256 (modify-phases %standard-phases
7257 (add-after 'unpack 'patch-source
7258 (lambda _
7259 (substitute* (find-files "cram" ".*\\.py$")
7260 ;; Replace default shell path.
7261 (("/bin/sh") (which "sh")))
7262 (substitute* (find-files "tests" ".*\\.t$")
7263 (("md5") "md5sum")
7264 (("/bin/bash") (which "bash"))
7265 (("/bin/sh") (which "sh")))
7266 (substitute* "cram/_test.py"
7267 ;; This hack works around a bug triggered by substituting
7268 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7269 ;; "cram -h", which breaks the output at 80 characters. This
7270 ;; causes the line showing the default shell to break into two
7271 ;; lines, but the test expects a single line...
7272 (("env\\['COLUMNS'\\] = '80'")
7273 "env['COLUMNS'] = '160'"))
7274 #t))
7275 (delete 'check)
7276 (add-after 'install 'check
7277 ;; The test phase uses the built library and executable.
7278 ;; It's easier to run it after install since the build
7279 ;; directory contains version-specific PATH.
7280 (lambda* (#:key inputs outputs #:allow-other-keys)
7281 (add-installed-pythonpath inputs outputs)
7282 (setenv "PATH" (string-append (getenv "PATH") ":"
7283 (assoc-ref outputs "out") "/bin"))
7284 (zero? (system* "make" "test")))))))
7285 (build-system python-build-system)
7286 (native-inputs
7287 `(("python-coverage" ,python-coverage)
7288 ("which" ,which)))
7289 (synopsis "Simple testing framework for command line applications")
7290 (description
7291 "Cram is a functional testing framework for command line applications.
7292 Cram tests look like snippets of interactive shell sessions. Cram runs each
7293 command and compares the command output in the test with the command’s actual
7294 output.")
7295 (license license:gpl2+)))
7296
7297 (define-public python2-cram
7298 (package-with-python2 python-cram))
7299
7300 (define-public python-terminado
7301 (package
7302 (name "python-terminado")
7303 (version "0.6")
7304 (source
7305 (origin
7306 (method url-fetch)
7307 (uri (pypi-uri "terminado" version))
7308 (sha256
7309 (base32
7310 "09h1kwi86g5mrk14s4pgbhshd602zry29lnpxamcqz864kva22rc"))))
7311 (build-system python-build-system)
7312 (propagated-inputs
7313 `(("python-tornado" ,python-tornado)
7314 ("python-ptyprocess" ,python-ptyprocess)))
7315 (native-inputs
7316 `(("python-nose" ,python-nose)))
7317 (arguments
7318 `(#:phases
7319 (modify-phases %standard-phases
7320 (replace 'check
7321 (lambda _
7322 (zero? (system* "nosetests")))))))
7323 (home-page "https://github.com/takluyver/terminado")
7324 (synopsis "Terminals served to term.js using Tornado websockets")
7325 (description "This package provides a Tornado websocket backend for the
7326 term.js Javascript terminal emulator library.")
7327 (license license:bsd-2)
7328 (properties `((python2-variant . ,(delay python2-terminado))))))
7329
7330 (define-public python2-terminado
7331 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
7332 (package (inherit terminado)
7333 (propagated-inputs
7334 `(("python2-backport-ssl-match-hostname"
7335 ,python2-backport-ssl-match-hostname)
7336 ,@(package-propagated-inputs terminado))))))
7337
7338 (define-public python-straight-plugin
7339 (package
7340 (name "python-straight-plugin")
7341 (version "1.4.1")
7342 (source
7343 (origin
7344 (method url-fetch)
7345 (uri (pypi-uri "straight.plugin" version))
7346 (sha256
7347 (base32
7348 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7349 (build-system python-build-system)
7350 (home-page "https://github.com/ironfroggy/straight.plugin")
7351 (synopsis "Simple namespaced plugin facility")
7352 (description "Straight Plugin provides a type of plugin you can create from
7353 almost any existing Python modules, and an easy way for outside developers to
7354 add functionality and customization to your projects with their own plugins.")
7355 (license license:expat)))
7356
7357 (define-public python2-straight-plugin
7358 (package-with-python2 python-straight-plugin))
7359
7360 (define-public python-fonttools
7361 (package
7362 (name "python-fonttools")
7363 (version "2.5")
7364 (source (origin
7365 (method url-fetch)
7366 (uri (string-append
7367 "https://pypi.python.org/packages/source/F/FontTools/"
7368 "fonttools-" version ".tar.gz"))
7369 (sha256
7370 (base32
7371 "08ay3x4ijarwhl60gqx2i9jzq6pxs20p4snc2d1q5jagh4rn39lb"))))
7372 (build-system python-build-system)
7373 (arguments
7374 '(#:test-target "check"
7375 #:phases
7376 (modify-phases %standard-phases
7377 (add-after 'unpack 'patch-setuppy
7378 ;; Remove the undocumented "extra_path" argument, which adds an
7379 ;; intervening directories between site-packages and the package
7380 ;; directory.
7381 (lambda _
7382 (substitute* "setup.py"
7383 (("^[ \t]*extra_path *= *'FontTools',") ""))
7384 #t)))))
7385 (home-page "https://github.com/behdad/fonttools")
7386 (synopsis "Tools to manipulate font files")
7387 (description
7388 "FontTools/TTX is a library to manipulate font files from Python. It
7389 supports reading and writing of TrueType/OpenType fonts, reading and writing
7390 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7391 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7392 from an XML-based format.")
7393 (license (license:non-copyleft
7394 "file://LICENSE.txt"
7395 "See LICENSE.txt in the distribution."))))
7396
7397 (define-public python2-fonttools
7398 (package-with-python2 python-fonttools))
7399
7400 (define-public python-ly
7401 (package
7402 (name "python-ly")
7403 (version "0.9.4")
7404 (source
7405 (origin
7406 (method url-fetch)
7407 (uri (string-append "https://pypi.python.org/packages/57/4f/"
7408 "889579244947368f28eda66b782331b1e75f83fd72e63f9ece93cd7a18f9"
7409 "/python-ly-" version ".tar.gz"))
7410 (sha256
7411 (base32
7412 "0g6n288l83sfwavxh1aryi0aqvsr3sp7v6f903mckwqa4scpky62"))))
7413 (build-system python-build-system)
7414 (arguments
7415 ;; FIXME: Some tests need network access.
7416 '(#:tests? #f))
7417 (synopsis "Tool and library for manipulating LilyPond files")
7418 (description "This package provides a Python library to parse, manipulate
7419 or create documents in LilyPond format. A command line program ly is also
7420 provided that can be used to do various manipulations with LilyPond files.")
7421 (home-page "https://pypi.python.org/pypi/python-ly")
7422 (license license:gpl2+)))
7423
7424 (define-public python-appdirs
7425 (package
7426 (name "python-appdirs")
7427 (version "1.4.3")
7428 (source
7429 (origin
7430 (method url-fetch)
7431 (uri (pypi-uri "appdirs" version))
7432 (sha256
7433 (base32
7434 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7435 (build-system python-build-system)
7436 (home-page "https://github.com/ActiveState/appdirs")
7437 (synopsis
7438 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7439 (description
7440 "This module provides a portable way of finding out where user data
7441 should be stored on various operating systems.")
7442 (license license:expat)))
7443
7444 (define-public python2-appdirs
7445 (package-with-python2 python-appdirs))
7446
7447 (define-public python-llfuse
7448 (package
7449 (name "python-llfuse")
7450 (version "1.2")
7451 (source (origin
7452 (method url-fetch)
7453 (uri (string-append
7454 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
7455 "llfuse-" version ".tar.bz2"))
7456 (sha256
7457 (base32
7458 "11hms1x68bf1bqbqy7w3wpffqsd3jkgricmzrc1hrnwkswfzzlr4"))))
7459 (build-system python-build-system)
7460 (inputs
7461 `(("fuse" ,fuse)
7462 ("attr" ,attr)))
7463 (native-inputs
7464 `(("pkg-config" ,pkg-config)))
7465 (synopsis "Python bindings for FUSE")
7466 (description
7467 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7468 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7469 (license license:lgpl2.0+)
7470 (properties `((python2-variant . ,(delay python2-llfuse))))))
7471
7472 (define-public python2-llfuse
7473 (package (inherit (package-with-python2
7474 (strip-python2-variant python-llfuse)))
7475 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7476
7477 ;; For attic-0.16
7478 (define-public python-llfuse-0.41
7479 (package (inherit python-llfuse)
7480 (version "0.41.1")
7481 (source (origin
7482 (method url-fetch)
7483 (uri (string-append
7484 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
7485 "llfuse-" version ".tar.bz2"))
7486 (sha256
7487 (base32
7488 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
7489 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
7490 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
7491 (license (list license:expat license:lgpl2.0+))))
7492
7493 (define-public python-msgpack
7494 (package
7495 (name "python-msgpack")
7496 (version "0.4.8")
7497 (source (origin
7498 (method url-fetch)
7499 (uri (pypi-uri "msgpack-python" version))
7500 (sha256
7501 (base32
7502 "11pqk5braa6wndpnr1dhg64js82vjgxnm0lzy73rwl831zgijaqs"))))
7503 (build-system python-build-system)
7504 (synopsis "MessagePack (de)serializer")
7505 (description "MessagePack is a fast, compact binary serialization format,
7506 suitable for similar data to JSON. This package provides CPython bindings for
7507 reading and writing MessagePack data.")
7508 (home-page "https://pypi.python.org/pypi/msgpack-python/")
7509 (license license:asl2.0)))
7510
7511 (define-public python2-msgpack
7512 (package-with-python2 python-msgpack))
7513
7514 (define-public python-netaddr
7515 (package
7516 (name "python-netaddr")
7517 (version "0.7.19")
7518 (source
7519 (origin
7520 (method url-fetch)
7521 (uri (string-append
7522 "https://pypi.python.org/packages/source/n/netaddr/netaddr-"
7523 version
7524 ".tar.gz"))
7525 (sha256
7526 (base32
7527 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
7528 (build-system python-build-system)
7529 (arguments `(#:tests? #f)) ;; No tests.
7530 (home-page "https://github.com/drkjam/netaddr/")
7531 (synopsis "Pythonic manipulation of network addresses")
7532 (description
7533 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7534 and MAC network addresses.")
7535 (license license:bsd-3)))
7536
7537 (define-public python2-netaddr
7538 (package-with-python2 python-netaddr))
7539
7540 (define-public python-wrapt
7541 (package
7542 (name "python-wrapt")
7543 (version "1.10.8")
7544 (source
7545 (origin
7546 (method url-fetch)
7547 (uri (pypi-uri "wrapt" version))
7548 (sha256
7549 (base32
7550 "0wrcm1mydvfivbkzz0h81ygzdchnscshi6xvy5n3r21r9s0px8af"))))
7551 (build-system python-build-system)
7552 (arguments
7553 ;; Tests are not included in the tarball, they are only available in the
7554 ;; git repository.
7555 `(#:tests? #f))
7556 (home-page "https://github.com/GrahamDumpleton/wrapt")
7557 (synopsis "Module for decorators, wrappers and monkey patching")
7558 (description
7559 "The aim of the wrapt module is to provide a transparent object proxy for
7560 Python, which can be used as the basis for the construction of function
7561 wrappers and decorator functions.")
7562 (license license:bsd-2)))
7563
7564 (define-public python2-wrapt
7565 (package-with-python2 python-wrapt))
7566
7567 (define-public python-iso8601
7568 (package
7569 (name "python-iso8601")
7570 (version "0.1.11")
7571 (source
7572 (origin
7573 (method url-fetch)
7574 (uri (pypi-uri "iso8601" version))
7575 (sha256
7576 (base32
7577 "0c7gh3lsdjds262h0v1sqc66l7hqgfwbakn96qrhdbl0i3vm5yz8"))))
7578 (build-system python-build-system)
7579 (native-inputs
7580 `(("python-pytest" ,python-pytest)))
7581 (home-page "https://bitbucket.org/micktwomey/pyiso8601")
7582 (synopsis "Module to parse ISO 8601 dates")
7583 (description
7584 "This module parses the most common forms of ISO 8601 date strings (e.g.
7585 @code{2007-01-14T20:34:22+00:00}) into @code{datetime} objects.")
7586 (license license:expat)))
7587
7588 (define-public python2-iso8601
7589 (package-with-python2 python-iso8601))
7590
7591 (define-public python-monotonic
7592 (package
7593 (name "python-monotonic")
7594 (version "0.3")
7595 (source
7596 (origin
7597 (method url-fetch)
7598 (uri (string-append
7599 "https://pypi.python.org/packages/source/m/monotonic/monotonic-"
7600 version
7601 ".tar.gz"))
7602 (sha256
7603 (base32
7604 "0yz0bcbwx8r2c01czzfpbrxddynxyk9k95jj8h6sgcb7xmfvl998"))))
7605 (build-system python-build-system)
7606 (home-page "https://github.com/atdt/monotonic")
7607 (synopsis "Implementation of time.monotonic() for Python 2 & < 3.3")
7608 (description
7609 "This module provides a monotonic() function which returns the value (in
7610 fractional seconds) of a clock which never goes backwards.")
7611 (license license:asl2.0)))
7612
7613 (define-public python2-monotonic
7614 (package-with-python2 python-monotonic))
7615
7616 (define-public python-webob
7617 (package
7618 (name "python-webob")
7619 (version "1.5.1")
7620 (source
7621 (origin
7622 (method url-fetch)
7623 (uri (pypi-uri "WebOb" version))
7624 (sha256
7625 (base32
7626 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
7627 (build-system python-build-system)
7628 (native-inputs
7629 `(("python-nose" ,python-nose)))
7630 (home-page "http://webob.org/")
7631 (synopsis "WSGI request and response object")
7632 (description
7633 "WebOb provides wrappers around the WSGI request environment, and an
7634 object to help create WSGI responses.")
7635 (license license:expat)))
7636
7637 (define-public python2-webob
7638 (package-with-python2 python-webob))
7639
7640 (define-public python-xlrd
7641 (package
7642 (name "python-xlrd")
7643 (version "1.0.0")
7644 (source (origin
7645 (method url-fetch)
7646 (uri (pypi-uri "xlrd" version))
7647 (sha256
7648 (base32
7649 "0s8hjiz01vbhy85xalrz0qlsmd9ypf36zjqrf97hh984spapvy0g"))))
7650 (build-system python-build-system)
7651 (arguments
7652 `(#:phases
7653 (modify-phases %standard-phases
7654 ;; Current test in setup.py does not work as of 1.0.0, so use nose to
7655 ;; run tests instead for now.
7656 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
7657 (native-inputs `(("python-nose" ,python-nose)))
7658 (home-page "http://www.python-excel.org/")
7659 (synopsis "Library for extracting data from Excel files")
7660 (description "This packages provides a library to extract data from
7661 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
7662 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
7663 Unicode-aware. It is not intended as an end-user tool.")
7664 (license license:bsd-3)))
7665
7666 (define-public python2-xlrd
7667 (package-with-python2 python-xlrd))
7668
7669 (define-public python-prettytable
7670 (package
7671 (name "python-prettytable")
7672 (version "0.7.2")
7673 (source
7674 (origin
7675 (method url-fetch)
7676 (uri (string-append
7677 "https://pypi.python.org/packages/source/P/PrettyTable/"
7678 "prettytable-" version ".tar.bz2"))
7679 (sha256
7680 (base32
7681 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
7682 (build-system python-build-system)
7683 (home-page "http://code.google.com/p/prettytable/")
7684 (synopsis "Display tabular data in an ASCII table format")
7685 (description
7686 "A library designed to represent tabular data in visually appealing ASCII
7687 tables. PrettyTable allows for selection of which columns are to be printed,
7688 independent alignment of columns (left or right justified or centred) and
7689 printing of sub-tables by specifying a row range.")
7690 (license license:bsd-3)))
7691
7692 (define-public python2-prettytable
7693 (package-with-python2 python-prettytable))
7694
7695 (define-public python-tables
7696 (package
7697 (name "python-tables")
7698 (version "3.2.2")
7699 (source
7700 (origin
7701 (method url-fetch)
7702 (uri (pypi-uri "tables" version))
7703 (sha256
7704 (base32
7705 "117s6w7s3yxafpmf3zz3svana7xfrsviw01va1xp7h8ylx8v6r1m"))
7706 (modules '((guix build utils)))
7707 (snippet
7708 '(begin
7709 ;; Remove pre-compiled .pyc files from source.
7710 (for-each delete-file-recursively
7711 (find-files "." "__pycache__" #:directories? #t))
7712 (for-each delete-file (find-files "." "\\.pyc$"))
7713 #t))))
7714 (build-system python-build-system)
7715 (arguments
7716 `(;; FIXME: python-build-system does not pass configure-flags to "build"
7717 ;; or "check", so we must override the build and check phases.
7718 #:phases
7719 (modify-phases %standard-phases
7720 (add-after 'unpack 'use-gcc
7721 (lambda _
7722 (substitute* "setup.py"
7723 (("compiler = new_compiler\\(\\)" line)
7724 (string-append line
7725 "\ncompiler.set_executables(compiler='gcc',"
7726 "compiler_so='gcc',"
7727 "linker_exe='gcc',"
7728 "linker_so='gcc -shared')")))
7729 #t))
7730 (replace 'build
7731 (lambda* (#:key inputs #:allow-other-keys)
7732 (zero? (system* "python" "setup.py" "build"
7733 (string-append "--hdf5="
7734 (assoc-ref inputs "hdf5"))))))
7735 (replace 'check
7736 (lambda* (#:key inputs #:allow-other-keys)
7737 (zero? (system* "python" "setup.py" "check"
7738 (string-append "--hdf5="
7739 (assoc-ref inputs "hdf5")))))))))
7740 (propagated-inputs
7741 `(("python-numexpr" ,python-numexpr)
7742 ("python-numpy" ,python-numpy)))
7743 (native-inputs
7744 `(("python-cython" ,python-cython)
7745 ("pkg-config" ,pkg-config)))
7746 (inputs
7747 `(("hdf5" ,hdf5)
7748 ("bzip2" ,bzip2)
7749 ("zlib" ,zlib)))
7750 (home-page "http://www.pytables.org/")
7751 (synopsis "Hierarchical datasets for Python")
7752 (description "PyTables is a package for managing hierarchical datasets and
7753 designed to efficiently cope with extremely large amounts of data.")
7754 (license license:bsd-3)))
7755
7756 (define-public python2-tables
7757 (package-with-python2 python-tables))
7758
7759 (define-public python-pyasn1
7760 (package
7761 (name "python-pyasn1")
7762 (version "0.2.3")
7763 (source
7764 (origin
7765 (method url-fetch)
7766 (uri (pypi-uri "pyasn1" version))
7767 (sha256
7768 (base32
7769 "1b86yx23c1x74clai05a5ma8c8nfmhlx3j1mxq0ff657i2ylx33k"))))
7770 (build-system python-build-system)
7771 (home-page "http://pyasn1.sourceforge.net/")
7772 (synopsis "ASN.1 types and codecs")
7773 (description
7774 "This is an implementation of ASN.1 types and codecs in Python. It is
7775 suitable for a wide range of protocols based on the ASN.1 specification.")
7776 (license license:bsd-2)))
7777
7778 (define-public python2-pyasn1
7779 (package-with-python2 python-pyasn1))
7780
7781 (define-public python-pyasn1-modules
7782 (package
7783 (name "python-pyasn1-modules")
7784 (version "0.0.8")
7785 (source
7786 (origin
7787 (method url-fetch)
7788 (uri (pypi-uri "pyasn1-modules" version))
7789 (sha256
7790 (base32
7791 "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh"))))
7792 (build-system python-build-system)
7793 (propagated-inputs
7794 `(("python-pyasn1" ,python-pyasn1)))
7795 (home-page "https://sourceforge.net/projects/pyasn1/")
7796 (synopsis "ASN.1 codec implementations")
7797 (description
7798 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
7799 implementations of ASN.1-based codecs and protocols.")
7800 (license license:bsd-3)))
7801
7802 (define-public python2-pyasn1-modules
7803 (package-with-python2 python-pyasn1-modules))
7804
7805 (define-public python-ipaddress
7806 (package
7807 (name "python-ipaddress")
7808 (version "1.0.18")
7809 (source (origin
7810 (method url-fetch)
7811 (uri (pypi-uri "ipaddress" version))
7812 (sha256
7813 (base32
7814 "1q8klj9d84cmxgz66073x1j35cplr3r77vx1znhxiwl5w74391ax"))))
7815 (build-system python-build-system)
7816 (home-page "https://github.com/phihag/ipaddress")
7817 (synopsis "IP address manipulation library")
7818 (description
7819 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
7820 in Python. This library is used to create, poke at, and manipulate IPv4 and
7821 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
7822 module to older versions of Python.")
7823 (license license:psfl)))
7824
7825 (define-public python2-ipaddress
7826 (package-with-python2 python-ipaddress))
7827
7828 (define-public python2-ipaddr
7829 (package
7830 (name "python2-ipaddr")
7831 (version "2.1.11")
7832 (source
7833 (origin
7834 (method url-fetch)
7835 (uri (pypi-uri "ipaddr" version))
7836 (sha256
7837 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
7838 (build-system python-build-system)
7839 (arguments
7840 `(#:python ,python-2 ;version 2 only
7841 #:phases
7842 (modify-phases %standard-phases
7843 (replace 'check
7844 (lambda* _
7845 (zero? (system* "python" "ipaddr_test.py")))))))
7846 (home-page "https://github.com/google/ipaddr-py")
7847 (synopsis "IP address manipulation library")
7848 (description
7849 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
7850 IPv6 addresses and networks.
7851
7852 For new implementations you may prefer to use the standard module
7853 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
7854 versions of Python.")
7855 (license license:asl2.0)))
7856
7857 (define-public python-idna
7858 (package
7859 (name "python-idna")
7860 (version "2.5")
7861 (source
7862 (origin
7863 (method url-fetch)
7864 (uri (pypi-uri "idna" version))
7865 (sha256
7866 (base32
7867 "1ara12a7k2zc69msa0arrvw00gn61a6i6by01xb3lkkc0h4cxd9w"))))
7868 (build-system python-build-system)
7869 (home-page "https://github.com/kjd/idna")
7870 (synopsis "Internationalized domain names in applications")
7871 (description
7872 "This is a library to support the Internationalised Domain Names in
7873 Applications (IDNA) protocol as specified in RFC 5891. This version of the
7874 protocol is often referred to as “IDNA2008” and can produce different results
7875 from the earlier standard from 2003. The library is also intended to act as a
7876 suitable drop-in replacement for the “encodings.idna” module that comes with
7877 the Python standard library but currently only supports the older 2003
7878 specification.")
7879 (license license:bsd-4)))
7880
7881 (define-public python2-idna
7882 (package-with-python2 python-idna))
7883
7884 (define-public python-pretend
7885 (package
7886 (name "python-pretend")
7887 (version "1.0.8")
7888 (source
7889 (origin
7890 (method url-fetch)
7891 (uri (string-append "https://pypi.python.org/packages/source/p/"
7892 "pretend/pretend-" version ".tar.gz"))
7893 (sha256
7894 (base32
7895 "0r5r7ygz9m6d2bklflbl84cqhjkc2q12xgis8268ygjh30g2q3wk"))))
7896 (build-system python-build-system)
7897 (home-page "https://github.com/alex/pretend")
7898 (synopsis "Library for stubbing in Python")
7899 (description
7900 "Pretend is a library to make stubbing with Python easier. Stubbing is a
7901 technique for writing tests. You may hear the term mixed up with mocks,
7902 fakes, or doubles. Basically, a stub is an object that returns pre-canned
7903 responses, rather than doing any computation.")
7904 (license license:bsd-3)))
7905
7906 (define-public python2-pretend
7907 (package-with-python2 python-pretend))
7908
7909 (define-public python-cryptography-vectors
7910 (package
7911 (name "python-cryptography-vectors")
7912 (version "2.0.3")
7913 (source
7914 (origin
7915 (method url-fetch)
7916 (uri (pypi-uri "cryptography_vectors" version))
7917 (sha256
7918 (base32
7919 "1qa117fs1yd50zn2cfxh7d9l999ds0z4h83m9m7j4fk6ffm33f5y"))))
7920 (build-system python-build-system)
7921 (home-page "https://github.com/pyca/cryptography")
7922 (synopsis "Test vectors for the cryptography package")
7923 (description
7924 "This package contains test vectors for the cryptography package.")
7925 ;; Distributed under either BSD-3 or ASL2.0
7926 (license (list license:bsd-3 license:asl2.0))))
7927
7928 (define-public python2-cryptography-vectors
7929 (package-with-python2 python-cryptography-vectors))
7930
7931 (define-public python-cryptography
7932 (package
7933 (name "python-cryptography")
7934 (version "2.0.3")
7935 (source
7936 (origin
7937 (method url-fetch)
7938 (uri (pypi-uri "cryptography" version))
7939 (sha256
7940 (base32
7941 "0fnck37zyvbzmccbp7w3jy27jgmij1992j5wyy3gxhw6a11b4jyh"))))
7942 (build-system python-build-system)
7943 (inputs
7944 `(("openssl" ,openssl)))
7945 (propagated-inputs
7946 `(("python-asn1crypto" ,python-asn1crypto)
7947 ("python-cffi" ,python-cffi)
7948 ("python-six" ,python-six)
7949 ("python-idna" ,python-idna)
7950 ("python-iso8601" ,python-iso8601)))
7951 (native-inputs
7952 `(("python-cryptography-vectors" ,python-cryptography-vectors)
7953 ("python-hypothesis" ,python-hypothesis)
7954 ("python-pretend" ,python-pretend)
7955 ("python-pytz" ,python-pytz)
7956 ("python-pytest" ,python-pytest-3.0)))
7957 (home-page "https://github.com/pyca/cryptography")
7958 (synopsis "Cryptographic recipes and primitives for Python")
7959 (description
7960 "cryptography is a package which provides cryptographic recipes and
7961 primitives to Python developers. It aims to be the “cryptographic standard
7962 library” for Python. The package includes both high level recipes, and low
7963 level interfaces to common cryptographic algorithms such as symmetric ciphers,
7964 message digests and key derivation functions.")
7965 ;; Distributed under either BSD-3 or ASL2.0
7966 (license (list license:bsd-3 license:asl2.0))
7967 (properties `((python2-variant . ,(delay python2-cryptography))))))
7968
7969 (define-public python2-cryptography
7970 (let ((crypto (package-with-python2
7971 (strip-python2-variant python-cryptography))))
7972 (package (inherit crypto)
7973 (propagated-inputs
7974 `(("python2-ipaddress" ,python2-ipaddress)
7975 ("python2-backport-ssl-match-hostname"
7976 ,python2-backport-ssl-match-hostname)
7977 ("python2-enum34" ,python2-enum34)
7978 ,@(package-propagated-inputs crypto))))))
7979
7980 (define-public python-pyopenssl
7981 (package
7982 (name "python-pyopenssl")
7983 (version "17.3.0")
7984 (source
7985 (origin
7986 (method url-fetch)
7987 (uri (pypi-uri "pyOpenSSL" version))
7988 (sha256
7989 (base32
7990 "0xkc1wfnpg6abzllivg3ylhc63npjdy1v81f4kc08bm8cj80nqr9"))))
7991 (build-system python-build-system)
7992 (arguments
7993 '(#:phases
7994 (modify-phases %standard-phases
7995 (delete 'check)
7996 (add-after 'install 'check
7997 (lambda* (#:key inputs outputs #:allow-other-keys)
7998 (add-installed-pythonpath inputs outputs)
7999 (zero? (system* "py.test" "-v" "-k"
8000 (string-append
8001 ;; This test tries to look up certificates from
8002 ;; the compiled-in default path in OpenSSL, which
8003 ;; does not exist in the build environment.
8004 "not test_fallback_default_verify_paths "
8005 ;; This test attempts to make a connection to
8006 ;; an external web service.
8007 "and not test_set_default_verify_paths"))))))))
8008 (propagated-inputs
8009 `(("python-cryptography" ,python-cryptography)
8010 ("python-six" ,python-six)))
8011 (inputs
8012 `(("openssl" ,openssl)))
8013 (native-inputs
8014 `(("python-flaky" ,python-flaky)
8015 ("python-pretend" ,python-pretend)
8016 ("python-pytest" ,python-pytest-3.0)))
8017 (home-page "https://github.com/pyca/pyopenssl")
8018 (synopsis "Python wrapper module around the OpenSSL library")
8019 (description
8020 "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
8021 library.")
8022 (license license:asl2.0)))
8023
8024 (define-public python2-pyopenssl
8025 (package-with-python2 python-pyopenssl))
8026
8027 (define-public python-pip
8028 (package
8029 (name "python-pip")
8030 (version "9.0.1")
8031 (source
8032 (origin
8033 (method url-fetch)
8034 (uri (pypi-uri "pip" version))
8035 (sha256
8036 (base32
8037 "03clr9c1dih5n9c00c592zzvf6r1ffimywkaq9agcqdllzhl7wh9"))))
8038 (build-system python-build-system)
8039 (arguments
8040 '(#:tests? #f)) ; there are no tests in the pypi archive.
8041 (home-page "https://pip.pypa.io/")
8042 (synopsis "Package manager for Python software")
8043 (description
8044 "Pip is a package manager for Python software, that finds packages on the
8045 Python Package Index (PyPI).")
8046 (license license:expat)))
8047
8048 (define-public python2-pip
8049 (package-with-python2 python-pip))
8050
8051 (define-public python-tlsh
8052 (package
8053 (name "python-tlsh")
8054 (version "3.4.4")
8055 (home-page "https://github.com/trendmicro/tlsh")
8056 (source (origin
8057 (method url-fetch)
8058 (uri (string-append "https://github.com/trendmicro/tlsh/archive/v"
8059 version ".tar.gz"))
8060 (sha256
8061 (base32
8062 "00bhzjqrlh7v538kbkbn8lgx976j1138al3sdhklaizqjvpwyk4r"))
8063 (file-name (string-append name "-" version ".tar.gz"))))
8064 (build-system cmake-build-system)
8065 (arguments
8066 '(#:out-of-source? #f
8067 #:phases (modify-phases %standard-phases
8068 (replace
8069 'install
8070 (lambda* (#:key outputs #:allow-other-keys)
8071 ;; Build and install the Python bindings. The underlying
8072 ;; C++ library is apparently not meant to be installed.
8073 (let ((out (assoc-ref outputs "out")))
8074 (with-directory-excursion "py_ext"
8075 (and (system* "python" "setup.py" "build")
8076 (system* "python" "setup.py" "install"
8077 (string-append "--prefix=" out))))))))))
8078 (inputs `(("python" ,python-wrapper))) ;for the bindings
8079 (synopsis "Fuzzy matching library for Python")
8080 (description
8081 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8082 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8083 value which can be used for similarity comparisons. Similar objects have
8084 similar hash values, which allows for the detection of similar objects by
8085 comparing their hash values. The byte stream should have a sufficient amount
8086 of complexity; for example, a byte stream of identical bytes will not generate
8087 a hash value.")
8088 (license license:asl2.0)))
8089
8090 (define-public python2-tlsh
8091 (package
8092 (inherit python-tlsh)
8093 (name "python2-tlsh")
8094 (inputs `(("python" ,python-2)))))
8095
8096 (define-public python-termcolor
8097 (package
8098 (name "python-termcolor")
8099 (version "1.1.0")
8100 (source
8101 (origin
8102 (method url-fetch)
8103 (uri (pypi-uri "termcolor" version))
8104 (sha256
8105 (base32
8106 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8107 (build-system python-build-system)
8108 (arguments
8109 ;; There are no tests.
8110 `(#:tests? #f))
8111 (home-page "http://pypi.python.org/pypi/termcolor")
8112 (synopsis "ANSII Color formatting for terminal output")
8113 (description
8114 "This package provides ANSII Color formatting for output in terminals.")
8115 (license license:expat)))
8116
8117 (define-public python2-termcolor
8118 (package-with-python2 python-termcolor))
8119
8120 (define-public python-libarchive-c
8121 (package
8122 (name "python-libarchive-c")
8123 (version "2.2")
8124 (source (origin
8125 (method url-fetch)
8126 (uri (pypi-uri "libarchive-c" version))
8127 (sha256
8128 (base32
8129 "0z4r7v3dhd6b3120mav05ff08srih176r2rg5k8kn7mjd9pslm2x"))))
8130 (build-system python-build-system)
8131 (arguments
8132 '(#:phases (modify-phases %standard-phases
8133 (add-before
8134 'build 'reference-libarchive
8135 (lambda* (#:key inputs #:allow-other-keys)
8136 ;; Retain the absolute file name of libarchive.so.
8137 (let ((libarchive (assoc-ref inputs "libarchive")))
8138 (substitute* "libarchive/ffi.py"
8139 (("find_library\\('archive'\\)")
8140 (string-append "'" libarchive
8141 "/lib/libarchive.so'")))))))))
8142 (inputs
8143 `(("libarchive" ,libarchive)))
8144 (home-page "https://github.com/Changaco/python-libarchive-c")
8145 (synopsis "Python interface to libarchive")
8146 (description
8147 "This package provides Python bindings to libarchive, a C library to
8148 access possibly compressed archives in many different formats. It uses
8149 Python's @code{ctypes} foreign function interface (FFI).")
8150 (license license:lgpl2.0+)))
8151
8152 (define-public python2-libarchive-c
8153 (package-with-python2 python-libarchive-c))
8154
8155 (define-public python-file
8156 (package
8157 (inherit file)
8158 (name "python-file")
8159 (build-system python-build-system)
8160 (arguments
8161 '(#:tests? #f ;no tests
8162 #:configure-flags '("--single-version-externally-managed" "--root=/")
8163 #:phases (modify-phases %standard-phases
8164 (add-before 'build 'change-directory
8165 (lambda _
8166 (chdir "python")
8167 #t))
8168 (add-before 'build 'set-library-file-name
8169 (lambda* (#:key inputs #:allow-other-keys)
8170 (let ((file (assoc-ref inputs "file")))
8171 (substitute* "magic.py"
8172 (("find_library\\('magic'\\)")
8173 (string-append "'" file "/lib/libmagic.so'")))
8174 #t))))))
8175 (inputs `(("file" ,file)))
8176 (self-native-input? #f)
8177 (synopsis "Python bindings to the libmagic file type guesser. Note that
8178 this module and the python-magic module both provide a \"magic.py\" file;
8179 these two modules, which are different and were developed separately, both
8180 serve the same purpose: provide Python bindings for libmagic.")))
8181
8182 (define-public python2-file
8183 (package-with-python2 python-file))
8184
8185 (define-public python-debian
8186 (package
8187 (name "python-debian")
8188 (version "0.1.28")
8189 (source
8190 (origin
8191 (method url-fetch)
8192 (uri (pypi-uri name version))
8193 (sha256
8194 (base32
8195 "0i15f0xzx679sd0ldq2sls9pnnps9fv6vhqvnv9dzf4qhma42i0y"))))
8196 (build-system python-build-system)
8197 (propagated-inputs
8198 `(("python-six" ,python-six)))
8199 (home-page "http://packages.debian.org/sid/python-debian")
8200 (synopsis "Debian package related modules")
8201 (description
8202 ;; XXX: Use @enumerate instead of @itemize to work around
8203 ;; <http://bugs.gnu.org/21772>.
8204 "This package provides Python modules that abstract many formats of
8205 Debian-related files, such as:
8206
8207 @enumerate
8208 @item Debtags information;
8209 @item @file{debian/changelog} files;
8210 @item packages files, pdiffs;
8211 @item control files of single or multiple RFC822-style paragraphs---e.g.
8212 @file{debian/control}, @file{.changes}, @file{.dsc};
8213 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8214 contained files and meta-information.
8215 @end enumerate\n")
8216
8217 ;; Modules are either GPLv2+ or GPLv3+.
8218 (license license:gpl3+)))
8219
8220 (define-public python2-debian
8221 (package-with-python2 python-debian))
8222
8223 (define-public python-nbformat
8224 (package
8225 (name "python-nbformat")
8226 (version "4.3.0")
8227 (source
8228 (origin
8229 (method url-fetch)
8230 (uri (pypi-uri "nbformat" version))
8231 (sha256
8232 (base32
8233 "12s7j4qja8b5bs1kyw5dzmrqbjxxj8wk52cyasbiqbv7fblcrssz"))))
8234 (build-system python-build-system)
8235 (arguments `(#:tests? #f)) ; no test target
8236 (propagated-inputs
8237 `(("python-ipython-genutils" ,python-ipython-genutils)
8238 ("python-jsonschema" ,python-jsonschema)
8239 ("python-jupyter-core" ,python-jupyter-core)
8240 ("python-traitlets" ,python-traitlets)))
8241 (home-page "http://jupyter.org")
8242 (synopsis "Jupyter Notebook format")
8243 (description "This package provides the reference implementation of the
8244 Jupyter Notebook format and Python APIs for working with notebooks.")
8245 (license license:bsd-3)))
8246
8247 (define-public python2-nbformat
8248 (package-with-python2 python-nbformat))
8249
8250 (define-public python-bleach
8251 (package
8252 (name "python-bleach")
8253 (version "1.4.3")
8254 (source
8255 (origin
8256 (method url-fetch)
8257 (uri (pypi-uri "bleach" version))
8258 (sha256
8259 (base32
8260 "0jvg3jxrvnx7xmm9gj262v60ib452xlnwlb0navyp7jsvcd0d4qj"))))
8261 (build-system python-build-system)
8262 (propagated-inputs
8263 `(("python-html5lib" ,python-html5lib-0.9)
8264 ("python-six" ,python-six)))
8265 (native-inputs
8266 `(("python-nose" ,python-nose)))
8267 (home-page "https://github.com/jsocol/bleach")
8268 (synopsis "Whitelist-based HTML-sanitizing tool")
8269 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8270 (license license:asl2.0)))
8271
8272 (define-public python2-bleach
8273 (package-with-python2 python-bleach))
8274
8275 (define-public python-entrypoints
8276 (package
8277 (name "python-entrypoints")
8278 (version "0.2.2")
8279 (source
8280 (origin
8281 (method url-fetch)
8282 (uri (string-append "https://github.com/takluyver/entrypoints/archive/"
8283 version ".tar.gz"))
8284 (file-name (string-append name "-" version ".tar.gz"))
8285 (sha256
8286 (base32
8287 "0azqlkh3j0za080lsf5crnhaxx3c93k9dpv5ihkhf5cppgw5sjz5"))))
8288 (build-system python-build-system)
8289 ;; The package does not come with a setup.py file, so we have to generate
8290 ;; one ourselves.
8291 (arguments
8292 `(#:tests? #f
8293 #:phases
8294 (modify-phases %standard-phases
8295 (add-after 'unpack 'create-setup.py
8296 (lambda _
8297 (call-with-output-file "setup.py"
8298 (lambda (port)
8299 (format port "\
8300 from setuptools import setup
8301 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8302 " ,version))))))))
8303 (home-page "https://github.com/takluyver/entrypoints")
8304 (synopsis "Discover and load entry points from installed Python packages")
8305 (description "Entry points are a way for Python packages to advertise
8306 objects with some common interface. The most common examples are
8307 @code{console_scripts} entry points, which define shell commands by
8308 identifying a Python function to run. The @code{entrypoints} module contains
8309 functions to find and load entry points.")
8310 (license license:expat)))
8311
8312 (define-public python2-entrypoints
8313 (package-with-python2 python-entrypoints))
8314
8315 (define-public python-nbconvert
8316 (package
8317 (name "python-nbconvert")
8318 (version "5.0.0b1")
8319 (source
8320 (origin
8321 (method url-fetch)
8322 (uri (pypi-uri "nbconvert" version))
8323 (sha256
8324 (base32
8325 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8326 (build-system python-build-system)
8327 (arguments
8328 `(;; The "bdist_egg" target is disabled by default, causing the installation
8329 ;; to fail.
8330 #:configure-flags (list "bdist_egg")
8331 ;; FIXME: 5 failures, 40 errors.
8332 #:tests? #f))
8333 ;; #:phases
8334 ;; (modify-phases %standard-phases
8335 ;; (replace 'check
8336 ;; (lambda _
8337 ;; (zero? (system* "py.test" "-v")))))
8338 (native-inputs
8339 `(("python-pytest" ,python-pytest)))
8340 (propagated-inputs
8341 `(("python-bleach" ,python-bleach)
8342 ("python-entrypoints" ,python-entrypoints)
8343 ("python-jinja2" ,python-jinja2)
8344 ("python-jupyter-core" ,python-jupyter-core)
8345 ("python-mistune" ,python-mistune)
8346 ("python-nbformat" ,python-nbformat)
8347 ("python-pygments" ,python-pygments)
8348 ("python-traitlets" ,python-traitlets)))
8349 (home-page "http://jupyter.org")
8350 (synopsis "Converting Jupyter Notebooks")
8351 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8352 notebooks to various other formats via Jinja templates. It allows you to
8353 convert an @code{.ipynb} notebook file into various static formats including:
8354
8355 @enumerate
8356 @item HTML
8357 @item LaTeX
8358 @item PDF
8359 @item Reveal JS
8360 @item Markdown (md)
8361 @item ReStructured Text (rst)
8362 @item executable script
8363 @end enumerate\n")
8364 (license license:bsd-3)))
8365
8366 (define-public python2-nbconvert
8367 (package-with-python2 python-nbconvert))
8368
8369 (define-public python-notebook
8370 (package
8371 (name "python-notebook")
8372 (version "4.2.3")
8373 (source (origin
8374 (method url-fetch)
8375 (uri (pypi-uri "notebook" version))
8376 (sha256
8377 (base32
8378 "0laq5c2f21frq6xcdckgq7raqhznbjb0qs0357g612z87wyn1a9r"))))
8379 (build-system python-build-system)
8380 (arguments
8381 `(#:phases
8382 (modify-phases %standard-phases
8383 (replace 'check
8384 (lambda _
8385 ;; HOME must be set for tests
8386 (setenv "HOME" "/tmp")
8387 (zero? (system* "nosetests")))))))
8388 (propagated-inputs
8389 `(("python-jupyter-core" ,python-jupyter-core)
8390 ("python-nbformat" ,python-nbformat)
8391 ("python-nbconvert" ,python-nbconvert)
8392 ("python-ipython" ,python-ipython)))
8393 (native-inputs
8394 `(("python-nose" ,python-nose)
8395 ("python-sphinx" ,python-sphinx)
8396 ("python-requests" ,python-requests)))
8397 (home-page "http://jupyter.org/")
8398 (synopsis "Web-based notebook environment for interactive computing")
8399 (description
8400 "The Jupyter HTML notebook is a web-based notebook environment for
8401 interactive computing.")
8402 (properties `((python2-variant . ,(delay python2-notebook))))
8403 (license license:bsd-3)))
8404
8405 (define-public python2-notebook
8406 (let ((base (package-with-python2
8407 (strip-python2-variant python-notebook))))
8408 (package (inherit base)
8409 (native-inputs
8410 `(("python2-mock" ,python2-mock)
8411 ,@(package-native-inputs base)))
8412 (arguments
8413 (substitute-keyword-arguments (package-arguments base)
8414 ((#:phases phases)
8415 `(modify-phases ,phases
8416 (add-before 'check 'disable-test-case
8417 ;; The test requires network access to localhost. Curiously it
8418 ;; fails with Python 2 only. Simply make the test-case return
8419 ;; immediately.
8420 (lambda _
8421 (substitute*
8422 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8423 (("formats = self.nbconvert_api") "return #")))))))))))
8424
8425 (define-public python-widgetsnbextension
8426 (package
8427 (name "python-widgetsnbextension")
8428 (version "1.2.6")
8429 (source
8430 (origin
8431 (method url-fetch)
8432 (uri (pypi-uri "widgetsnbextension" version))
8433 (sha256
8434 (base32
8435 "0lff2mrwrgsa1mxmwx3phl9xvy0jqfpg6khbmxy53jbq56rwy666"))))
8436 (build-system python-build-system)
8437 (propagated-inputs
8438 `(("python-notebook" ,python-notebook)))
8439 (native-inputs
8440 `(("python-certifi" ,python-certifi)
8441 ("python-nose" ,python-nose)))
8442 (home-page "http://ipython.org")
8443 (synopsis "IPython HTML widgets for Jupyter")
8444 (description "This package provides interactive HTML widgets for Jupyter
8445 notebooks.")
8446 (license license:bsd-3)))
8447
8448 (define-public python2-widgetsnbextension
8449 (package-with-python2 python-widgetsnbextension))
8450
8451 (define-public python-ipywidgets
8452 (package
8453 (name "python-ipywidgets")
8454 (version "5.2.2")
8455 (source
8456 (origin
8457 (method url-fetch)
8458 (uri (pypi-uri "ipywidgets" version))
8459 (sha256
8460 (base32
8461 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
8462 (build-system python-build-system)
8463 ;; FIXME: it's not clear how to run the tests.
8464 (arguments `(#:tests? #f))
8465 (propagated-inputs
8466 `(("python-ipykernel" ,python-ipykernel)
8467 ("python-ipython" ,python-ipython)
8468 ("python-traitlets" ,python-traitlets)
8469 ("python-widgetsnbextension" ,python-widgetsnbextension)))
8470 (home-page "http://ipython.org")
8471 (synopsis "IPython HTML widgets for Jupyter")
8472 (description "Ipywidgets are interactive HTML widgets for Jupyter
8473 notebooks and the IPython kernel. Notebooks come alive when interactive
8474 widgets are used. Users gain control of their data and can visualize changes
8475 in the data.")
8476 (license license:bsd-3)))
8477
8478 (define-public python2-ipywidgets
8479 (package-with-python2 python-ipywidgets))
8480
8481 (define-public python-jupyter-console
8482 (package
8483 (name "python-jupyter-console")
8484 (version "5.0.0")
8485 (source
8486 (origin
8487 (method url-fetch)
8488 (uri (pypi-uri "jupyter_console" version))
8489 (sha256
8490 (base32
8491 "04acmkwsi99rcg3vb54c6n492zv35s92h2ahabc0w6wj976cipvx"))))
8492 (build-system python-build-system)
8493 ;; FIXME: it's not clear how to run the tests.
8494 (arguments `(#:tests? #f))
8495 (propagated-inputs
8496 `(("python-ipykernel" ,python-ipykernel)
8497 ("python-ipython" ,python-ipython)
8498 ("python-jupyter-client" ,python-jupyter-client)
8499 ("python-prompt-toolkit" ,python-prompt-toolkit)
8500 ("python-pygments" ,python-pygments)))
8501 (home-page "https://jupyter.org")
8502 (synopsis "Jupyter terminal console")
8503 (description "This package provides a terminal-based console frontend for
8504 Jupyter kernels. It also allows for console-based interaction with non-Python
8505 Jupyter kernels such as IJulia and IRKernel.")
8506 (license license:bsd-3)))
8507
8508 (define-public python2-jupyter-console
8509 (package-with-python2 python-jupyter-console))
8510
8511 (define-public jupyter
8512 (package
8513 (name "jupyter")
8514 (version "1.0.0")
8515 (source
8516 (origin
8517 (method url-fetch)
8518 (uri (pypi-uri "jupyter" version))
8519 (sha256
8520 (base32
8521 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
8522 (build-system python-build-system)
8523 ;; FIXME: it's not clear how to run the tests.
8524 (arguments `(#:tests? #f))
8525 (propagated-inputs
8526 `(("python-ipykernel" ,python-ipykernel)
8527 ("python-ipywidgets" ,python-ipywidgets)
8528 ("python-jupyter-console" ,python-jupyter-console)
8529 ("python-nbconvert" ,python-nbconvert)
8530 ("python-notebook" ,python-notebook)))
8531 (home-page "http://jupyter.org")
8532 (synopsis "Web application for interactive documents")
8533 (description
8534 "The Jupyter Notebook is a web application that allows you to create and
8535 share documents that contain live code, equations, visualizations and
8536 explanatory text. Uses include: data cleaning and transformation, numerical
8537 simulation, statistical modeling, machine learning and much more.")
8538 (license license:bsd-3)))
8539
8540 (define-public python-chardet
8541 (package
8542 (name "python-chardet")
8543 (version "2.3.0")
8544 (source
8545 (origin
8546 (method url-fetch)
8547 (uri (string-append
8548 "https://pypi.python.org/packages/source/c/chardet/chardet-"
8549 version
8550 ".tar.gz"))
8551 (sha256
8552 (base32
8553 "1ak87ikcw34fivcgiz2xvi938dmclh078az65l9x3rmgljrkhgp5"))))
8554 (build-system python-build-system)
8555 (home-page "https://github.com/chardet/chardet")
8556 (synopsis "Universal encoding detector for Python 2 and 3")
8557 (description
8558 "This package provides @code{chardet}, a Python module that can
8559 automatically detect a wide range of file encodings.")
8560 (license license:lgpl2.1+)))
8561
8562 (define-public python2-chardet
8563 (package-with-python2 python-chardet))
8564
8565 (define-public python-docopt
8566 (package
8567 (name "python-docopt")
8568 (version "0.6.2")
8569 (source
8570 (origin
8571 (method url-fetch)
8572 ;; The release on PyPI does not include tests.
8573 (uri (string-append
8574 "https://github.com/docopt/docopt/archive/"
8575 version ".tar.gz"))
8576 (file-name (string-append name "-" version ".tar.gz"))
8577 (sha256
8578 (base32
8579 "16bf890xbdz3m30rsv2qacklh2rdn1zrfspfnwzx9g7vwz8yw4r1"))))
8580 (build-system python-build-system)
8581 (native-inputs
8582 `(("python-pytest" ,python-pytest)))
8583 (arguments
8584 `(#:phases (alist-replace
8585 'check
8586 (lambda _ (zero? (system* "py.test")))
8587 %standard-phases)))
8588 (home-page "http://docopt.org")
8589 (synopsis "Command-line interface description language for Python")
8590 (description "This library allows the user to define a command-line
8591 interface from a program's help message rather than specifying it
8592 programatically with command-line parsers like @code{getopt} and
8593 @code{argparse}.")
8594 (license license:expat)))
8595
8596 (define-public python2-docopt
8597 (package-with-python2 python-docopt))
8598
8599 (define-public python-zope-event
8600 (package
8601 (name "python-zope-event")
8602 (version "4.1.0")
8603 (source
8604 (origin
8605 (method url-fetch)
8606 (uri (string-append "https://pypi.python.org/packages/source/z"
8607 "/zope.event/zope.event-" version ".tar.gz"))
8608 (sha256
8609 (base32
8610 "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
8611 (build-system python-build-system)
8612 (home-page "http://pypi.python.org/pypi/zope.event")
8613 (synopsis "Event publishing system for Python")
8614 (description "Zope.event provides an event publishing API, intended for
8615 use by applications which are unaware of any subscribers to their events. It
8616 is a simple event-dispatching system on which more sophisticated event
8617 dispatching systems can be built.")
8618 (license license:zpl2.1)))
8619
8620 (define-public python2-zope-event
8621 (package-with-python2 python-zope-event))
8622
8623 (define-public python-zope-interface
8624 (package
8625 (name "python-zope-interface")
8626 (version "4.1.3")
8627 (source
8628 (origin
8629 (method url-fetch)
8630 (uri (string-append "https://pypi.python.org/packages/source/z"
8631 "/zope.interface/zope.interface-" version ".tar.gz"))
8632 (sha256
8633 (base32
8634 "0ks8h73b2g4bkad821qbv0wzjppdrwys33i7ka45ik3wxjg1l8if"))))
8635 (build-system python-build-system)
8636 (native-inputs
8637 `(("python-zope-event" ,python-zope-event)))
8638 (home-page "https://github.com/zopefoundation/zope.interface")
8639 (synopsis "Python implementation of the \"design by contract\"
8640 methodology")
8641 (description "Zope.interface provides an implementation of \"object
8642 interfaces\" for Python. Interfaces are a mechanism for labeling objects as
8643 conforming to a given API or contract.")
8644 (license license:zpl2.1)))
8645
8646 (define-public python2-zope-interface
8647 (package-with-python2 python-zope-interface))
8648
8649 (define-public python-zope-exceptions
8650 (package
8651 (name "python-zope-exceptions")
8652 (version "4.0.8")
8653 (source
8654 (origin
8655 (method url-fetch)
8656 (uri (string-append "https://pypi.python.org/packages/source/z"
8657 "/zope.exceptions/zope.exceptions-"
8658 version ".tar.gz"))
8659 (sha256
8660 (base32
8661 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
8662 (build-system python-build-system)
8663 (arguments
8664 '(#:tests? #f)) ; circular dependency with zope.testrunner
8665 (propagated-inputs
8666 `(("python-zope-interface" ,python-zope-interface)))
8667 (home-page "http://cheeseshop.python.org/pypi/zope.exceptions")
8668 (synopsis "Zope exceptions")
8669 (description "Zope.exceptions provides general-purpose exception types
8670 that have uses outside of the Zope framework.")
8671 (license license:zpl2.1)))
8672
8673 (define-public python2-zope-exceptions
8674 (package-with-python2 python-zope-exceptions))
8675
8676 (define-public python-zope-testing
8677 (package
8678 (name "python-zope-testing")
8679 (version "4.5.0")
8680 (source
8681 (origin
8682 (method url-fetch)
8683 (uri (string-append "https://pypi.python.org/packages/source/z"
8684 "/zope.testing/zope.testing-" version ".tar.gz"))
8685 (sha256
8686 (base32
8687 "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))
8688 (modules '((guix build utils)))
8689 (snippet
8690 '(begin
8691 ;; Remove pre-compiled .pyc files backup files from source.
8692 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
8693 #t))))
8694 (build-system python-build-system)
8695 (native-inputs
8696 `(("python-zope-exceptions" ,python-zope-exceptions)))
8697 (propagated-inputs
8698 `(("python-zope-interface" ,python-zope-interface)))
8699 (home-page "http://pypi.python.org/pypi/zope.testing")
8700 (synopsis "Zope testing helpers")
8701 (description "Zope.testing provides a number of testing utilities for HTML
8702 forms, HTTP servers, regular expressions, and more.")
8703 (license license:zpl2.1)))
8704
8705 (define-public python2-zope-testing
8706 (package-with-python2 python-zope-testing))
8707
8708 (define-public python-zope-testrunner
8709 (package
8710 (name "python-zope-testrunner")
8711 (version "4.4.9")
8712 (source
8713 (origin
8714 (method url-fetch)
8715 (uri (string-append "https://pypi.python.org/packages/source/z"
8716 "/zope.testrunner/zope.testrunner-"
8717 version ".zip"))
8718 (sha256
8719 (base32
8720 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
8721 (build-system python-build-system)
8722 (arguments
8723 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8724 (native-inputs
8725 `(("python-six" ,python-six)
8726 ;("python-zope-interface" ,python-zope-interface)
8727 ("python-zope-exceptions" ,python-zope-exceptions)
8728 ("python-zope-testing" ,python-zope-testing)
8729 ("unzip" ,unzip)))
8730 (propagated-inputs
8731 `(("python-zope-interface" ,python-zope-interface)))
8732 (home-page "http://pypi.python.org/pypi/zope.testrunner")
8733 (synopsis "Zope testrunner script")
8734 (description "Zope.testrunner provides a script for running Python
8735 tests.")
8736 (license license:zpl2.1)))
8737
8738 (define-public python2-zope-testrunner
8739 (let ((base (package-with-python2 python-zope-testrunner)))
8740 (package
8741 (inherit base)
8742 (native-inputs
8743 (append (package-native-inputs base)
8744 `(("python2-subunit" ,python2-subunit)
8745 ("python2-mimeparse" ,python2-mimeparse)))))))
8746
8747 (define-public python-zope-i18nmessageid
8748 (package
8749 (name "python-zope-i18nmessageid")
8750 (version "4.0.3")
8751 (source
8752 (origin
8753 (method url-fetch)
8754 (uri (string-append
8755 "https://pypi.python.org/packages/source/z"
8756 "/zope.i18nmessageid/zope.i18nmessageid-"
8757 version ".tar.gz"))
8758 (sha256
8759 (base32
8760 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
8761 (build-system python-build-system)
8762 (home-page "http://pypi.python.org/pypi/zope.i18nmessageid")
8763 (synopsis "Message identifiers for internationalization")
8764 (description "Zope.i18nmessageid provides facilities for declaring
8765 internationalized messages within program source text.")
8766 (license license:zpl2.1)))
8767
8768 (define-public python2-zope-i18nmessageid
8769 (package-with-python2 python-zope-i18nmessageid))
8770
8771 (define-public python-zope-schema
8772 (package
8773 (name "python-zope-schema")
8774 (version "4.4.2")
8775 (source
8776 (origin
8777 (method url-fetch)
8778 (uri (string-append "https://pypi.python.org/packages/source/z"
8779 "/zope.schema/zope.schema-" version ".tar.gz"))
8780 (sha256
8781 (base32
8782 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
8783 (build-system python-build-system)
8784 (arguments
8785 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
8786 (propagated-inputs
8787 `(("python-zope-event" ,python-zope-event)
8788 ("python-zope-exceptions", python-zope-exceptions)
8789 ("python-zope-interface" ,python-zope-interface)))
8790 (native-inputs
8791 `(("python-zope-testing" ,python-zope-testing)
8792 ("python-coverage" ,python-coverage)
8793 ("python-nose" ,python-nose)))
8794 (home-page "http://pypi.python.org/pypi/zope.schema")
8795 (synopsis "Zope data schemas")
8796 (description "Zope.scheme provides extensions to zope.interface for
8797 defining data schemas.")
8798 (license license:zpl2.1)))
8799
8800 (define-public python2-zope-schema
8801 (package-with-python2 python-zope-schema))
8802
8803 (define-public python-zope-configuration
8804 (package
8805 (name "python-zope-configuration")
8806 (version "4.0.3")
8807 (source (origin
8808 (method url-fetch)
8809 (uri (string-append "https://pypi.python.org/packages/source/z"
8810 "/zope.configuration/zope.configuration-"
8811 version ".tar.gz"))
8812 (sha256
8813 (base32
8814 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
8815 (build-system python-build-system)
8816 (arguments
8817 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8818 (propagated-inputs
8819 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8820 ("python-zope-schema" ,python-zope-schema)))
8821 (home-page "http://pypi.python.org/pypi/zope.configuration")
8822 (synopsis "Zope Configuration Markup Language")
8823 (description "Zope.configuration implements ZCML, the Zope Configuration
8824 Markup Language.")
8825 (license license:zpl2.1)))
8826
8827 (define-public python2-zope-configuration
8828 (package-with-python2 python-zope-configuration))
8829
8830 (define-public python-zope-proxy
8831 (package
8832 (name "python-zope-proxy")
8833 (version "4.1.6")
8834 (source
8835 (origin
8836 (method url-fetch)
8837 (uri (string-append "https://pypi.python.org/packages/source/z"
8838 "/zope.proxy/zope.proxy-" version ".tar.gz"))
8839 (sha256
8840 (base32
8841 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
8842 (build-system python-build-system)
8843 (arguments
8844 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8845 (propagated-inputs
8846 `(("python-zope-interface" ,python-zope-interface)))
8847 (home-page "http://pypi.python.org/pypi/zope.proxy")
8848 (synopsis "Generic, transparent proxies")
8849 (description "Zope.proxy provides generic, transparent proxies for Python.
8850 Proxies are special objects which serve as mostly-transparent wrappers around
8851 another object, intervening in the apparent behavior of the wrapped object
8852 only when necessary to apply the policy (e.g., access checking, location
8853 brokering, etc.) for which the proxy is responsible.")
8854 (license license:zpl2.1)))
8855
8856 (define-public python2-zope-proxy
8857 (package-with-python2 python-zope-proxy))
8858
8859 (define-public python-zope-location
8860 (package
8861 (name "python-zope-location")
8862 (version "4.0.3")
8863 (source
8864 (origin
8865 (method url-fetch)
8866 (uri (string-append "https://pypi.python.org/packages/source/z"
8867 "/zope.location/zope.location-" version ".tar.gz"))
8868 (sha256
8869 (base32
8870 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
8871 (build-system python-build-system)
8872 (arguments
8873 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8874 (propagated-inputs
8875 `(("python-zope-proxy" ,python-zope-proxy)
8876 ("python-zope-schema" ,python-zope-schema)))
8877 (home-page "http://pypi.python.org/pypi/zope.location/")
8878 (synopsis "Zope location library")
8879 (description "Zope.location implements the concept of \"locations\" in
8880 Zope3, which are are special objects that have a structural location.")
8881 (license license:zpl2.1)))
8882
8883 (define-public python2-zope-location
8884 (package-with-python2 python-zope-location))
8885
8886 (define-public python-zope-security
8887 (package
8888 (name "python-zope-security")
8889 (version "4.0.3")
8890 (source
8891 (origin
8892 (method url-fetch)
8893 (uri (string-append "https://pypi.python.org/packages/source/z"
8894 "/zope.security/zope.security-" version ".tar.gz"))
8895 (sha256
8896 (base32
8897 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
8898 (build-system python-build-system)
8899 (arguments
8900 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
8901 (propagated-inputs
8902 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8903 ("python-zope-proxy" ,python-zope-proxy)
8904 ("python-zope-schema" ,python-zope-schema)))
8905 (native-inputs
8906 `(("python-six" ,python-six)
8907 ("python-zope-component" ,python-zope-component)
8908 ("python-zope-configuration" ,python-zope-configuration)
8909 ("python-zope-location" ,python-zope-location)
8910 ("python-zope-testrunner" ,python-zope-testrunner)
8911 ("python-zope-testing" ,python-zope-testing)))
8912 (home-page "http://pypi.python.org/pypi/zope.security")
8913 (synopsis "Zope security framework")
8914 (description "Zope.security provides a generic mechanism to implement
8915 security policies on Python objects.")
8916 (license license:zpl2.1)))
8917
8918 (define-public python2-zope-security
8919 (let ((zope-security (package-with-python2 python-zope-security)))
8920 (package (inherit zope-security)
8921 (propagated-inputs
8922 `(("python2-zope-testrunner" ,python2-zope-testrunner)
8923 ,@(alist-delete
8924 "python-zope-testrunner"
8925 (package-propagated-inputs zope-security)))))))
8926
8927 (define-public python-zope-component
8928 (package
8929 (name "python-zope-component")
8930 (version "4.3.0")
8931 (source
8932 (origin
8933 (method url-fetch)
8934 (uri (pypi-uri "zope.component" version))
8935 (sha256
8936 (base32
8937 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
8938 (build-system python-build-system)
8939 (arguments
8940 ;; Skip tests due to circular dependency with python-zope-security.
8941 '(#:tests? #f))
8942 (native-inputs
8943 `(("python-zope-testing" ,python-zope-testing)))
8944 (propagated-inputs
8945 `(("python-zope-event" ,python-zope-event)
8946 ("python-zope-interface" ,python-zope-interface)
8947 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8948 ("python-zope-configuration" ,python-zope-configuration)))
8949 (home-page "https://github.com/zopefoundation/zope.component")
8950 (synopsis "Zope Component Architecture")
8951 (description "Zope.component represents the core of the Zope Component
8952 Architecture. Together with the zope.interface package, it provides
8953 facilities for defining, registering and looking up components.")
8954 (license license:zpl2.1)))
8955
8956 (define-public python2-zope-component
8957 (package-with-python2 python-zope-component))
8958
8959 (define-public python-pythondialog
8960 (package
8961 (name "python-pythondialog")
8962 (version "3.4.0")
8963 (source
8964 (origin
8965 (method url-fetch)
8966 (uri (pypi-uri "pythondialog" version))
8967 (sha256
8968 (base32
8969 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
8970 (build-system python-build-system)
8971 (arguments
8972 `(#:phases
8973 (modify-phases %standard-phases
8974 (add-after 'unpack 'patch-path
8975 (lambda* (#:key inputs #:allow-other-keys)
8976 (let* ((dialog (assoc-ref inputs "dialog")))
8977 ;; Since this library really wants to grovel the search path, we
8978 ;; must hardcode dialog's store path into it.
8979 (substitute* "dialog.py"
8980 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
8981 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
8982 #t))))
8983 #:tests? #f)) ; no test suite
8984 (propagated-inputs
8985 `(("dialog" ,dialog)))
8986 (home-page "http://pythondialog.sourceforge.net/")
8987 (synopsis "Python interface to the UNIX dialog utility")
8988 (description "A Python wrapper for the dialog utility. Its purpose is to
8989 provide an easy to use, pythonic and comprehensive Python interface to dialog.
8990 This allows one to make simple text-mode user interfaces on Unix-like systems")
8991 (license license:lgpl2.1)
8992 (properties `((python2-variant . ,(delay python2-pythondialog))))))
8993
8994 (define-public python2-pythondialog
8995 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
8996 (package
8997 (inherit base)
8998 (version (package-version python-pythondialog))
8999 (source (origin
9000 (method url-fetch)
9001 (uri (pypi-uri "python2-pythondialog" version))
9002 (sha256
9003 (base32
9004 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9005
9006 (define-public python-pyrfc3339
9007 (package
9008 (name "python-pyrfc3339")
9009 (version "1.0")
9010 (source
9011 (origin
9012 (method url-fetch)
9013 (uri (pypi-uri "pyRFC3339" version))
9014 (sha256
9015 (base32
9016 "0dgm4l9y8jiax5cp6yxjd2i27cq8h33sh81n1wfbmnmqb32cdywd"))))
9017 (build-system python-build-system)
9018 (propagated-inputs
9019 `(("python-pytz" ,python-pytz)))
9020 (native-inputs
9021 `(("python-nose" ,python-nose)))
9022 (home-page "https://github.com/kurtraschke/pyRFC3339")
9023 (synopsis "Python timestamp library")
9024 (description "Python library for generating and parsing RFC 3339-compliant
9025 timestamps.")
9026 (license license:expat)))
9027
9028 (define-public python2-pyrfc3339
9029 (package-with-python2 python-pyrfc3339))
9030
9031 (define-public python-werkzeug
9032 (package
9033 (name "python-werkzeug")
9034 (version "0.11.15")
9035 (source
9036 (origin
9037 (method url-fetch)
9038 (uri (pypi-uri "Werkzeug" version))
9039 (sha256
9040 (base32
9041 "1h5wycw8yj7q0grqsjnsqflmrlsdagvl2j4dsgdncci6mjc7fpa5"))))
9042 (build-system python-build-system)
9043 (native-inputs
9044 `(("python-pytest" ,python-pytest)))
9045 (home-page "http://werkzeug.pocoo.org/")
9046 (synopsis "Utilities for WSGI applications")
9047 (description "One of the most advanced WSGI utility modules. It includes a
9048 powerful debugger, full-featured request and response objects, HTTP utilities to
9049 handle entity tags, cache control headers, HTTP dates, cookie handling, file
9050 uploads, a powerful URL routing system and a bunch of community-contributed
9051 addon modules.")
9052 (license license:x11)))
9053
9054 (define-public python2-werkzeug
9055 (package-with-python2 python-werkzeug))
9056
9057 (define-public python-configobj
9058 (package
9059 (name "python-configobj")
9060 (version "5.0.6")
9061 (source (origin
9062 (method url-fetch)
9063 (uri (string-append
9064 "https://pypi.python.org/packages/source/c/configobj/"
9065 "configobj-" version ".tar.gz"))
9066 (sha256
9067 (base32
9068 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9069 ;; Patch setup.py so it looks for python-setuptools, which is
9070 ;; required to parse the keyword 'install_requires' in setup.py.
9071 (patches (search-patches "python-configobj-setuptools.patch"))))
9072 (build-system python-build-system)
9073 (propagated-inputs
9074 `(("python-six" ,python-six)))
9075 (synopsis "Config file reading, writing and validation")
9076 (description "ConfigObj is a simple but powerful config file reader and
9077 writer: an ini file round tripper. Its main feature is that it is very easy to
9078 use, with a straightforward programmer’s interface and a simple syntax for
9079 config files.")
9080 (home-page "https://github.com/DiffSK/configobj")
9081 (license license:bsd-3)))
9082
9083 (define-public python2-configobj
9084 (package-with-python2 python-configobj))
9085
9086 (define-public python-configargparse
9087 (package
9088 (name "python-configargparse")
9089 (version "0.10.0")
9090 (source (origin
9091 (method url-fetch)
9092 (uri (string-append
9093 "https://pypi.python.org/packages/source/C/ConfigArgParse/"
9094 "ConfigArgParse-" version ".tar.gz"))
9095 (sha256
9096 (base32
9097 "19wh919gbdbzxzpagg52q3lm62yicm95ddlcx77dyjc1slyshl1v"))))
9098 (build-system python-build-system)
9099 (arguments
9100 ;; FIXME: Bug in test suite filed upstream:
9101 ;; https://github.com/bw2/ConfigArgParse/issues/32
9102 '(#:tests? #f))
9103 (synopsis "Replacement for argparse")
9104 (description "A drop-in replacement for argparse that allows options to also
9105 be set via config files and/or environment variables.")
9106 (home-page "https://github.com/bw2/ConfigArgParse")
9107 (license license:expat)))
9108
9109 (define-public python2-configargparse
9110 (package-with-python2 python-configargparse))
9111
9112 (define-public python-ndg-httpsclient
9113 (package
9114 (name "python-ndg-httpsclient")
9115 (version "0.4.2")
9116 (source (origin
9117 (method url-fetch)
9118 (uri (pypi-uri "ndg_httpsclient" version))
9119 (sha256
9120 (base32
9121 "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))
9122 (build-system python-build-system)
9123 (arguments
9124 '(;; The tests appear to require networking.
9125 #:tests? #f))
9126 (propagated-inputs
9127 `(("python-pyopenssl" ,python-pyopenssl)))
9128 (synopsis "HTTPS support for Python's httplib and urllib2")
9129 (description "This is a HTTPS client implementation for httplib and urllib2
9130 based on PyOpenSSL. PyOpenSSL provides a more fully featured SSL implementation
9131 over the default provided with Python and importantly enables full verification
9132 of the SSL peer.")
9133 (home-page "https://github.com/cedadev/ndg_httpsclient/")
9134 (license license:bsd-3)))
9135
9136 ;; python2-openssl requires special care, so package-with-python2 is
9137 ;; insufficient.
9138 (define-public python2-ndg-httpsclient
9139 (package (inherit python-ndg-httpsclient)
9140 (name "python2-ndg-httpsclient")
9141 (arguments `(#:python ,python-2))
9142 (propagated-inputs
9143 `(("python2-pyopenssl" ,python2-pyopenssl)))))
9144
9145 (define-public python-contextlib2
9146 (package
9147 (name "python-contextlib2")
9148 (version "0.4.0")
9149 (source
9150 (origin
9151 (method url-fetch)
9152 (uri (pypi-uri "contextlib2" version))
9153 (sha256
9154 (base32
9155 "0cmp131dlh0d0zvw0aza1zd13glvngzk8lb4avks0hm7yxwdr9am"))))
9156 (build-system python-build-system)
9157 (arguments
9158 `(#:phases
9159 (modify-phases %standard-phases
9160 (replace 'check
9161 (lambda _ (zero?
9162 (system*
9163 "python" "test_contextlib2.py" "-v")))))))
9164 (home-page "http://contextlib2.readthedocs.org/")
9165 (synopsis "Tools for decorators and context managers")
9166 (description "This module is primarily a backport of the Python
9167 3.2 contextlib to earlier Python versions. Like contextlib, it
9168 provides utilities for common tasks involving decorators and context
9169 managers. It also contains additional features that are not part of
9170 the standard library.")
9171 (license license:psfl)))
9172
9173 (define-public python2-contextlib2
9174 (package-with-python2 python-contextlib2))
9175
9176 (define-public python-texttable
9177 (package
9178 (name "python-texttable")
9179 (version "0.8.7")
9180 (source
9181 (origin
9182 (method url-fetch)
9183 (uri (pypi-uri "texttable" version))
9184 (sha256
9185 (base32
9186 "1liiiydgkg37i46a418aw19fyf6z3ds51wdwwpyjbs12x0phhf4a"))))
9187 (build-system python-build-system)
9188 (arguments '(#:tests? #f)) ; no tests
9189 (home-page "https://github.com/foutaise/texttable/")
9190 (synopsis "Python module for creating simple ASCII tables")
9191 (description "Texttable is a Python module for creating simple ASCII
9192 tables.")
9193 (license license:lgpl2.1+)))
9194
9195 (define-public python2-texttable
9196 (package-with-python2 python-texttable))
9197
9198 (define-public python-websocket-client
9199 (package
9200 (name "python-websocket-client")
9201 (version "0.37.0")
9202 (source
9203 (origin
9204 (method url-fetch)
9205 (uri (pypi-uri "websocket_client" version))
9206 (sha256
9207 (base32
9208 "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7"))))
9209 (build-system python-build-system)
9210 (propagated-inputs
9211 `(("python-six" ,python-six)))
9212 (home-page "https://github.com/liris/websocket-client")
9213 (synopsis "WebSocket client for Python")
9214 (description "The Websocket-client module provides the low level APIs for
9215 WebSocket usage in Python programs.")
9216 (license license:lgpl2.1+)))
9217
9218 (define-public python2-websocket-client
9219 (package-with-python2 python-websocket-client))
9220
9221 (define-public python-atomicwrites
9222 (package
9223 (name "python-atomicwrites")
9224 (version "1.1.5")
9225 (source (origin
9226 (method url-fetch)
9227 (uri (pypi-uri "atomicwrites" version))
9228 (sha256
9229 (base32
9230 "11bm90fwm2avvf4f3ib8g925w7jr4m11vcsinn1bi6ns4bm32214"))))
9231 (build-system python-build-system)
9232 (synopsis "Atomic file writes in Python")
9233 (description "Library for atomic file writes using platform dependent tools
9234 for atomic file system operations.")
9235 (home-page "https://github.com/untitaker/python-atomicwrites")
9236 (license license:expat)))
9237
9238 (define-public python2-atomicwrites
9239 (package-with-python2 python-atomicwrites))
9240
9241 (define-public python-requests-toolbelt
9242 (package
9243 (name "python-requests-toolbelt")
9244 (version "0.6.2")
9245 (source (origin
9246 (method url-fetch)
9247 (uri (string-append
9248 "https://pypi.python.org/packages/"
9249 "e1/a4/a94c037bc72ad70441aff1403d3243510d2542ddca7759faaeffeb11aefe/"
9250 "requests-toolbelt-" version ".tar.gz"))
9251 (sha256
9252 (base32
9253 "15q9nrgp85nqlr4kdz1zvj8z2npafi2sr12y7fqgxbkq28j1aci6"))))
9254 (build-system python-build-system)
9255 (native-inputs
9256 `(("python-betamax" ,python-betamax)
9257 ("python-mock" ,python-mock)
9258 ("python-pytest" ,python-pytest)))
9259 (propagated-inputs
9260 `(("python-requests" ,python-requests)))
9261 (synopsis "Extensions to python-requests")
9262 (description "This is a toolbelt of useful classes and functions to be used
9263 with python-requests.")
9264 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
9265 (license license:asl2.0)))
9266
9267 (define-public python-click-threading
9268 (package
9269 (name "python-click-threading")
9270 (version "0.4.3")
9271 (source (origin
9272 (method url-fetch)
9273 (uri (pypi-uri "click-threading" version))
9274 (sha256
9275 (base32
9276 "0xs4bg2ws0zgyiplk312l049hi23c2zqf1g771rjhh5vr2msk4cg"))))
9277 (build-system python-build-system)
9278 (propagated-inputs
9279 `(("python-click" ,python-click)))
9280 (synopsis "Utilities for multithreading in Click")
9281 (description "This package provides utilities for multithreading in Click
9282 applications.")
9283 (home-page "https://github.com/click-contrib/click-threading")
9284 (license license:expat)))
9285
9286 (define-public python-click-log
9287 (package
9288 (name "python-click-log")
9289 (version "0.2.0")
9290 (source (origin
9291 (method url-fetch)
9292 (uri (pypi-uri "click-log" version))
9293 (sha256
9294 (base32
9295 "1bjrfxji1yv4fj0g78ri2yfgn2wbivn8g69fxfinxvxpmighhshp"))))
9296 (build-system python-build-system)
9297 (propagated-inputs
9298 `(("python-click" ,python-click)))
9299 (synopsis "Logging for click applications")
9300 (description "This package provides a Python library for logging Click
9301 applications.")
9302 (home-page "https://github.com/click-contrib/click-log")
9303 (license license:expat)))
9304
9305 (define-public python-apipkg
9306 (package
9307 (name "python-apipkg")
9308 (version "1.4")
9309 (source (origin
9310 (method url-fetch)
9311 (uri (pypi-uri "apipkg" version))
9312 (sha256
9313 (base32
9314 "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
9315 (build-system python-build-system)
9316 (native-inputs
9317 `(("python-pytest" ,python-pytest)))
9318 (synopsis "Namespace control and lazy-import mechanism")
9319 (description "With apipkg you can control the exported namespace of a Python
9320 package and greatly reduce the number of imports for your users. It is a small
9321 pure Python module that works on virtually all Python versions.")
9322 (home-page "https://bitbucket.org/hpk42/apipkg")
9323 (license license:expat)))
9324
9325 (define-public python2-apipkg
9326 (package-with-python2 python-apipkg))
9327
9328 (define-public python-execnet
9329 (package
9330 (name "python-execnet")
9331 (version "1.4.1")
9332 (source (origin
9333 (method url-fetch)
9334 (uri (pypi-uri "execnet" version))
9335 (sha256
9336 (base32
9337 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9338 (build-system python-build-system)
9339 (arguments
9340 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9341 ;; The two test failures are caused by the lack of an `ssh` executable.
9342 ;; The test suite can be run with pytest after the 'install' phase.
9343 #:tests? #f))
9344 (native-inputs
9345 `(("python-pytest" ,python-pytest)
9346 ("python-setuptools-scm" ,python-setuptools-scm)))
9347 (propagated-inputs
9348 `(("python-apipkg" ,python-apipkg)))
9349 (synopsis "Rapid multi-Python deployment")
9350 (description "Execnet provides a share-nothing model with
9351 channel-send/receive communication for distributing execution across many
9352 Python interpreters across version, platform and network barriers. It has a
9353 minimal and fast API targeting the following uses:
9354 @enumerate
9355 @item distribute tasks to (many) local or remote CPUs
9356 @item write and deploy hybrid multi-process applications
9357 @item write scripts to administer multiple environments
9358 @end enumerate")
9359 (home-page "http://codespeak.net/execnet/")
9360 (license license:expat)))
9361
9362 (define-public python2-execnet
9363 (package-with-python2 python-execnet))
9364
9365 (define-public python-trollius-redis
9366 (package
9367 (name "python-trollius-redis")
9368 (version "0.1.4")
9369 (source
9370 (origin
9371 (method url-fetch)
9372 (uri (pypi-uri "trollius_redis" version))
9373 (sha256
9374 (base32
9375 "0k3vypszmgmaipgw9xscvgm79h2zd6p6ci8gdp5sxl6g5kbqr9fy"))))
9376 (build-system python-build-system)
9377 ;; TODO: Tests require packaging 'hiredis'.
9378 (arguments '(#:tests? #f))
9379 (home-page "https://github.com/benjolitz/trollius-redis")
9380 (synopsis "Port of asyncio-redis to trollius")
9381 (description "@code{trollius-redis} is a Redis client for Python
9382 trollius. It is an asynchronious IO (PEP 3156) implementation of the
9383 Redis protocol.")
9384 (license license:bsd-2)))
9385
9386 (define-public python2-trollius-redis
9387 (package-with-python2 python-trollius-redis))
9388
9389 ;;; The software provided by this package was integrated into pytest 2.8.
9390 (define-public python-pytest-cache
9391 (package
9392 (name "python-pytest-cache")
9393 (version "1.0")
9394 (source (origin
9395 (method url-fetch)
9396 (uri (pypi-uri "pytest-cache" version))
9397 (sha256
9398 (base32
9399 "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
9400 (build-system python-build-system)
9401 (propagated-inputs
9402 `(("python-apipkg" ,python-apipkg)
9403 ("python-execnet" ,python-execnet)
9404 ("python-py" ,python-py)
9405 ("python-pytest" ,python-pytest)))
9406 (synopsis "Py.test plugin with mechanisms for caching across test runs")
9407 (description "The pytest-cache plugin provides tools to rerun failures from
9408 the last py.test invocation.")
9409 (home-page "https://bitbucket.org/hpk42/pytest-cache/")
9410 (license license:expat)))
9411
9412 (define-public python2-pytest-cache
9413 (package-with-python2 python-pytest-cache))
9414
9415 (define-public python-pytest-localserver
9416 (package
9417 (name "python-pytest-localserver")
9418 (version "0.3.5")
9419 (source (origin
9420 (method url-fetch)
9421 (uri (pypi-uri "pytest-localserver" version))
9422 (sha256
9423 (base32
9424 "0dvqspjr6va55zwmnnc2mmpqc7mm65kxig9ya44x1z8aadzxpa4p"))))
9425 (build-system python-build-system)
9426 (arguments
9427 `(#:phases (modify-phases %standard-phases
9428 (replace 'check
9429 (lambda _
9430 (zero? (system* "py.test" "--genscript=runtests.py"))
9431 (zero? (system* "py.test")))))))
9432 (native-inputs
9433 `(("python-pytest" ,python-pytest)
9434 ("python-requests" ,python-requests)
9435 ("python-six" ,python-six)))
9436 (propagated-inputs
9437 `(("python-werkzeug" ,python-werkzeug)))
9438 (synopsis "Py.test plugin to test server connections locally")
9439 (description "Pytest-localserver is a plugin for the pytest testing
9440 framework which enables you to test server connections locally.")
9441 (home-page "https://pypi.python.org/pypi/pytest-localserver")
9442 (license license:expat)))
9443
9444 (define-public python-wsgi-intercept
9445 (package
9446 (name "python-wsgi-intercept")
9447 (version "1.2.2")
9448 (source (origin
9449 (method url-fetch)
9450 (uri (string-append
9451 "https://pypi.python.org/packages/"
9452 "38/76/ebcbc24d0cb77db34520a3ca6ed1bd43ace17d182bbd8dd7d976f1c176fb/"
9453 "wsgi_intercept-" version ".tar.gz"))
9454 (sha256
9455 (base32
9456 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
9457 (build-system python-build-system)
9458 (propagated-inputs
9459 `(("python-six" ,python-six)))
9460 (native-inputs
9461 `(("python-pytest" ,python-pytest)
9462 ("python-httplib2" ,python-httplib2)
9463 ("python-requests" ,python-requests)
9464 ("python-urllib3" ,python-urllib3)))
9465 (synopsis "Puts a WSGI application in place of a real URI for testing")
9466 (description "Wsgi_intercept installs a WSGI application in place of a real
9467 URI for testing. Testing a WSGI application normally involves starting a
9468 server at a local host and port, then pointing your test code to that address.
9469 Instead, this library lets you intercept calls to any specific host/port
9470 combination and redirect them into a WSGI application importable by your test
9471 program. Thus, you can avoid spawning multiple processes or threads to test
9472 your Web app.")
9473 (home-page "https://github.com/cdent/wsgi-intercept")
9474 (license license:expat)))
9475
9476 (define-public python-pytest-xprocess
9477 (package
9478 (name "python-pytest-xprocess")
9479 (version "0.9.1")
9480 (source (origin
9481 (method url-fetch)
9482 (uri (pypi-uri "pytest-xprocess" version))
9483 (sha256
9484 (base32
9485 "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
9486 (build-system python-build-system)
9487 (propagated-inputs
9488 `(("python-pytest" ,python-pytest)
9489 ("python-pytest-cache" ,python-pytest-cache)
9490 ("python-psutil" ,python-psutil)))
9491 (synopsis "Pytest plugin to manage external processes across test runs")
9492 (description "Pytest-xprocess is an experimental py.test plugin for managing
9493 processes across test runs.")
9494 (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess")
9495 (license license:expat)))
9496
9497 (define-public python-icalendar
9498 (package
9499 (name "python-icalendar")
9500 (version "3.11.7")
9501 (source (origin
9502 (method url-fetch)
9503 (uri (pypi-uri "icalendar" version))
9504 (sha256
9505 (base32
9506 "0ahf1i98wjizhld2qd7v2vmvzsmdw08mmins82bf3fpbnp2sxbgc"))))
9507 (build-system python-build-system)
9508 (propagated-inputs
9509 `(("python-dateutil" ,python-dateutil)
9510 ("python-pytz" ,python-pytz)))
9511 (synopsis "Python library for parsing iCalendar files")
9512 (description "The icalendar package is a parser/generator of iCalendar
9513 files for use with Python.")
9514 (home-page "https://github.com/collective/icalendar")
9515 (license license:bsd-2)))
9516
9517 (define-public python-sphinxcontrib-newsfeed
9518 (package
9519 (name "python-sphinxcontrib-newsfeed")
9520 (version "0.1.4")
9521 (source (origin
9522 (method url-fetch)
9523 (uri (pypi-uri "sphinxcontrib-newsfeed" version))
9524 (sha256
9525 (base32
9526 "1d7gam3mn8v4in4p16yn3v10vps7nnaz6ilw99j4klij39dqd37p"))))
9527 (arguments '(#:tests? #f)) ; No tests.
9528 (build-system python-build-system)
9529 (propagated-inputs
9530 `(("python-sphinx" ,python-sphinx)))
9531 (synopsis "News Feed extension for Sphinx")
9532 (description "Sphinxcontrib-newsfeed is an extension for adding a simple
9533 Blog, News or Announcements section to a Sphinx website.")
9534 (home-page "https://bitbucket.org/prometheus/sphinxcontrib-newsfeed")
9535 (license license:bsd-2)))
9536
9537 (define-public python-args
9538 (package
9539 (name "python-args")
9540 (version "0.1.0")
9541 (source (origin
9542 (method url-fetch)
9543 (uri (pypi-uri "args" version))
9544 (sha256
9545 (base32
9546 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9547 (build-system python-build-system)
9548 (home-page "https://github.com/kennethreitz/args")
9549 (synopsis "Command-line argument parser")
9550 (description
9551 "This library provides a Python module to parse command-line arguments.")
9552 (license license:bsd-3)))
9553
9554 (define-public python2-args
9555 (package-with-python2 python-args))
9556
9557 (define-public python-clint
9558 (package
9559 (name "python-clint")
9560 (version "0.5.1")
9561 (source (origin
9562 (method url-fetch)
9563 (uri (pypi-uri "clint" version))
9564 (sha256
9565 (base32
9566 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9567 (build-system python-build-system)
9568 (arguments
9569 '(#:phases
9570 (modify-phases %standard-phases
9571 (replace 'check
9572 (lambda _
9573 (zero? (system* "py.test" "-v")))))))
9574 (native-inputs
9575 `(("python-pytest" ,python-pytest)))
9576 (propagated-inputs
9577 `(("python-args" ,python-args)))
9578 (home-page "https://github.com/kennethreitz/clint")
9579 (synopsis "Command-line interface tools")
9580 (description
9581 "Clint is a Python module filled with a set of tools for developing
9582 command-line applications, including tools for colored and indented
9583 output, progress bar display, and pipes.")
9584 (license license:isc)))
9585
9586 (define-public python2-clint
9587 (package-with-python2 python-clint))
9588
9589 (define-public python-astor
9590 (package
9591 (name "python-astor")
9592 (version "0.5")
9593 (source (origin
9594 (method url-fetch)
9595 (uri (pypi-uri "astor" version))
9596 (sha256
9597 (base32
9598 "1fdafq5hkis1fxqlmhw0sn44zp2ar46nxhbc22cvwg7hsd8z5gsa"))))
9599 (build-system python-build-system)
9600 (home-page "https://github.com/berkerpeksag/astor")
9601 (synopsis "Read and write Python ASTs")
9602 (description
9603 "Astor is designed to allow easy manipulation of Python source via the
9604 Abstract Syntax Tree.")
9605 (license license:bsd-3)))
9606
9607 (define-public python2-astor
9608 (package-with-python2 python-astor))
9609
9610 (define-public python-rply
9611 (package
9612 (name "python-rply")
9613 (version "0.7.4")
9614 (source (origin
9615 (method url-fetch)
9616 (uri (pypi-uri "rply" version))
9617 (sha256
9618 (base32
9619 "12rp1d9ba7nvd5rhaxi6xzx1rm67r1k1ylsrkzhpwnphqpb06cvj"))))
9620 (build-system python-build-system)
9621 (propagated-inputs
9622 `(("python-appdirs" ,python-appdirs)))
9623 (home-page "https://github.com/alex/rply")
9624 (synopsis "Parser generator for Python")
9625 (description
9626 "This package provides a pure Python based parser generator, that also
9627 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9628 with a new public API, and RPython support.")
9629 (license license:bsd-3)))
9630
9631 (define-public python2-rply
9632 (package-with-python2 python-rply))
9633
9634 (define-public python-hy
9635 (package
9636 (name "python-hy")
9637 (version "0.11.1")
9638 (source (origin
9639 (method url-fetch)
9640 (uri (pypi-uri "hy" version))
9641 (sha256
9642 (base32
9643 "1msqv747iz12r73mz4qvsmlwkddwjvrahlrk7ysrcz07h7dsscxs"))))
9644 (build-system python-build-system)
9645 (arguments
9646 '(#:phases
9647 (modify-phases %standard-phases
9648 (replace 'check
9649 (lambda _
9650 ;; Tests require write access to HOME.
9651 (setenv "HOME" "/tmp")
9652 (zero? (system* "nosetests")))))))
9653 (native-inputs
9654 `(("python-coverage" ,python-coverage)
9655 ("python-nose" ,python-nose)))
9656 (propagated-inputs
9657 `(("python-astor" ,python-astor)
9658 ("python-clint" ,python-clint)
9659 ("python-rply" ,python-rply)))
9660 (home-page "http://hylang.org/")
9661 (synopsis "Lisp frontend to Python")
9662 (description
9663 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9664 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9665 Python at your fingertips, in Lisp form.")
9666 (license license:expat)))
9667
9668 (define-public python2-hy
9669 (package-with-python2 python-hy))
9670
9671 (define-public python-rauth
9672 (package
9673 (name "python-rauth")
9674 (version "0.7.3")
9675 (source
9676 (origin
9677 (method url-fetch)
9678 (uri (pypi-uri "rauth" version))
9679 (sha256
9680 (base32
9681 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
9682 (build-system python-build-system)
9683 (arguments
9684 `(#:test-target "check"))
9685 (propagated-inputs
9686 `(("python-requests" ,python-requests)))
9687 (home-page "https://github.com/litl/rauth")
9688 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
9689 (description
9690 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
9691 provides service wrappers for convenient connection initialization and
9692 authenticated session objects providing things like keep-alive.")
9693 (license license:expat)
9694 (properties `((python2-variant . ,(delay python2-rauth))))))
9695
9696 (define-public python2-rauth
9697 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
9698 (package
9699 (inherit base)
9700 (native-inputs `(("python2-unittest2" ,python2-unittest2)
9701 ,@(package-native-inputs base))))))
9702
9703 (define-public python2-functools32
9704 (package
9705 (name "python2-functools32")
9706 (version "3.2.3-2")
9707 (source
9708 (origin
9709 (method url-fetch)
9710 (uri (pypi-uri "functools32" version))
9711 (sha256
9712 (base32
9713 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9714 (build-system python-build-system)
9715 (arguments
9716 `(#:python ,python-2
9717 #:tests? #f)) ; no test target
9718 (home-page "https://github.com/MiCHiLU/python-functools32")
9719 (synopsis
9720 "Backport of the functools module from Python 3.2.3")
9721 (description
9722 "This package is a backport of the @code{functools} module from Python
9723 3.2.3 for use with older versions of Python and PyPy.")
9724 (license license:expat)))
9725
9726 (define-public python2-subprocess32
9727 (package
9728 (name "python2-subprocess32")
9729 (version "3.2.7")
9730 (source (origin
9731 (method url-fetch)
9732 (uri (pypi-uri "subprocess32" version))
9733 (sha256
9734 (base32
9735 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9736 (patches
9737 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9738 (build-system python-build-system)
9739 (arguments
9740 `(#:python ,python-2
9741 #:phases
9742 (modify-phases %standard-phases
9743 (add-after 'unpack 'patch-/bin/sh
9744 (lambda _
9745 (substitute* '("subprocess32.py"
9746 "test_subprocess32.py")
9747 (("/bin/sh") (which "sh")))
9748 #t))
9749 (delete 'check)
9750 (add-after 'install 'check
9751 (lambda* (#:key inputs outputs #:allow-other-keys)
9752 ;; For some reason this package fails to import
9753 ;; _posixsubprocess.so when PYTHONPATH is set to the build
9754 ;; directory. Running tests after install is easier.
9755 (add-installed-pythonpath inputs outputs)
9756 (zero? (system* "python" "test_subprocess32.py")))))))
9757 (home-page "https://github.com/google/python-subprocess32")
9758 (synopsis "Backport of the subprocess module from Python 3.2")
9759 (description
9760 "This is a backport of the @code{subprocess} standard library module
9761 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9762 new features. On POSIX systems it is guaranteed to be reliable when used
9763 in threaded applications. It includes timeout support from Python 3.3 but
9764 otherwise matches 3.2’s API.")
9765 (license license:psfl)))
9766
9767 (define-public python2-futures
9768 (package
9769 (name "python2-futures")
9770 (version "3.0.5")
9771 (source
9772 (origin
9773 (method url-fetch)
9774 (uri (pypi-uri "futures" version))
9775 (sha256
9776 (base32
9777 "1pw1z4329xvlabdpwqa6b7v2fxf7hl64m4cgr22ckbym8m8m4hh5"))))
9778 (build-system python-build-system)
9779 (arguments `(#:python ,python-2))
9780 (home-page "https://github.com/agronholm/pythonfutures")
9781 (synopsis
9782 "Backport of the concurrent.futures package from Python 3.2")
9783 (description
9784 "The concurrent.futures module provides a high-level interface for
9785 asynchronously executing callables. This package backports the
9786 concurrent.futures package from Python 3.2")
9787 (license license:bsd-3)))
9788
9789 (define-public python-promise
9790 (package
9791 (name "python-promise")
9792 (version "0.4.2")
9793 (source
9794 (origin
9795 (method url-fetch)
9796 (uri (pypi-uri "promise" version))
9797 (sha256
9798 (base32
9799 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9800 (build-system python-build-system)
9801 ;; Tests wants python-futures, which is a python2 only program, and
9802 ;; can't be found by python-promise at test time.
9803 (arguments `(#:tests? #f))
9804 (home-page "https://github.com/syrusakbary/promise")
9805 (synopsis "Promises/A+ implementation for Python")
9806 (description
9807 "Promises/A+ implementation for Python")
9808 (properties `((python2-variant . ,(delay python2-promise))))
9809 (license license:expat)))
9810
9811 (define-public python2-promise
9812 (let ((promise (package-with-python2
9813 (strip-python2-variant python-promise))))
9814 (package (inherit promise)
9815 (arguments (substitute-keyword-arguments (package-arguments promise)
9816 ((#:tests? _) #t)))
9817 (native-inputs
9818 `(("python2-futures" ,python2-futures)
9819 ("python2-pytest" ,python2-pytest)
9820 ,@(package-native-inputs promise))))))
9821
9822 (define-public python-urllib3
9823 (package
9824 (name "python-urllib3")
9825 (version "1.18.1")
9826 (source
9827 (origin
9828 (method url-fetch)
9829 (uri (pypi-uri "urllib3" version))
9830 (sha256
9831 (base32
9832 "1wb8aqnq53vzh2amrv8kc66f3h6fx217y0q62y6n30a64p2yqmam"))))
9833 (build-system python-build-system)
9834 (arguments `(#:tests? #f))
9835 (native-inputs
9836 `(;; some packages for tests
9837 ("python-nose" ,python-nose)
9838 ("python-mock" ,python-mock)
9839 ("python-tornado" ,python-tornado)))
9840 (propagated-inputs
9841 `(;; extra packages for https security
9842 ("python-certifi" ,python-certifi)
9843 ("python-ndg-httpsclient" ,python-ndg-httpsclient)
9844 ("python-pyasn1" ,python-pyasn1)
9845 ("python-pyopenssl" ,python-pyopenssl)))
9846 (home-page "https://urllib3.readthedocs.org/")
9847 (synopsis "HTTP library with thread-safe connection pooling")
9848 (description
9849 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9850 can reuse the same socket connection for multiple requests, it can POST files,
9851 supports url redirection and retries, and also gzip and deflate decoding.")
9852 (license license:expat)))
9853
9854 (define-public python2-urllib3
9855 (package-with-python2 python-urllib3))
9856
9857 (define-public python-colorama
9858 (package
9859 (name "python-colorama")
9860 (version "0.3.7")
9861 (source
9862 (origin
9863 (method url-fetch)
9864 (uri (pypi-uri "colorama" version))
9865 (sha256
9866 (base32
9867 "0avqkn6362v7k2kg3afb35g4sfdvixjgy890clip4q174p9whhz0"))))
9868 (build-system python-build-system)
9869 (synopsis "Colored terminal text rendering for Python")
9870 (description "Colorama is a Python library for rendering colored terminal
9871 text.")
9872 (home-page "https://pypi.python.org/pypi/colorama")
9873 (license license:bsd-3)))
9874
9875 (define-public python2-colorama
9876 (package-with-python2 python-colorama))
9877
9878 (define-public python-rsa
9879 (package
9880 (name "python-rsa")
9881 (version "3.4.2")
9882 (source
9883 (origin
9884 (method url-fetch)
9885 (uri (pypi-uri "rsa" version))
9886 (sha256
9887 (base32
9888 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9889 (build-system python-build-system)
9890 (propagated-inputs
9891 `(("python-pyasn1" ,python-pyasn1)))
9892 (synopsis "Pure-Python RSA implementation")
9893 (description "Python-RSA is a pure-Python RSA implementation. It supports
9894 encryption and decryption, signing and verifying signatures, and key
9895 generation according to PKCS#1 version 1.5. It can be used as a Python
9896 library as well as on the command line.")
9897 (home-page "http://stuvel.eu/rsa")
9898 (license license:asl2.0)))
9899
9900 (define-public python2-rsa
9901 (package-with-python2 python-rsa))
9902
9903 (define-public python-pluggy
9904 (package
9905 (name "python-pluggy")
9906 (version "0.3.1")
9907 (source
9908 (origin
9909 (method url-fetch)
9910 (uri (pypi-uri "pluggy" version))
9911 (sha256
9912 (base32
9913 "18qfzfm40bgx672lkg8q9x5hdh76n7vax99aank7vh2nw21wg70m"))))
9914 (build-system python-build-system)
9915 (synopsis "Plugin and hook calling mechanism for Python")
9916 (description "Pluggy is an extraction of the plugin manager as used by
9917 Pytest but stripped of Pytest specific details.")
9918 (home-page "https://pypi.python.org/pypi/pluggy")
9919 (license license:expat)))
9920
9921 (define-public python2-pluggy
9922 (package-with-python2 python-pluggy))
9923
9924 (define-public python-tox
9925 (package
9926 (name "python-tox")
9927 (version "2.8.0")
9928 (source
9929 (origin
9930 (method url-fetch)
9931 (uri (pypi-uri "tox" version))
9932 (sha256
9933 (base32
9934 "00lrql2cfzhb712v70inac6mrgdv8s8fmvz7qpggkk623hkm2pgc"))))
9935 (build-system python-build-system)
9936 (arguments
9937 ;; FIXME: Tests require pytest-timeout, which itself requires
9938 ;; pytest>=2.8.0 for installation.
9939 '(#:tests? #f))
9940 (propagated-inputs
9941 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9942 ("python-py" ,python-py)
9943 ("python-virtualenv" ,python-virtualenv)))
9944 (native-inputs
9945 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9946 ("python-pytest" ,python-pytest) ; >= 2.3.5
9947 ("python-setuptools-scm" ,python-setuptools-scm)))
9948 (home-page "http://tox.testrun.org/")
9949 (synopsis "Virtualenv-based automation of test activities")
9950 (description "Tox is a generic virtualenv management and test command line
9951 tool. It can be used to check that a package installs correctly with
9952 different Python versions and interpreters, or run tests in each type of
9953 supported environment, or act as a frontend to continuous integration
9954 servers.")
9955 (license license:expat)))
9956
9957 (define-public python2-tox
9958 (package-with-python2 python-tox))
9959
9960 (define-public python-jmespath
9961 (package
9962 (name "python-jmespath")
9963 (version "0.9.0")
9964 (source
9965 (origin
9966 (method url-fetch)
9967 (uri (pypi-uri "jmespath" version))
9968 (sha256
9969 (base32
9970 "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8"))))
9971 (build-system python-build-system)
9972 (native-inputs
9973 `(("python-nose" ,python-nose)))
9974 (synopsis "JSON Matching Expressions")
9975 (description "JMESPath (pronounced “james path”) is a Python library that
9976 allows one to declaratively specify how to extract elements from a JSON
9977 document.")
9978 (home-page "https://github.com/jmespath/jmespath.py")
9979 (license license:expat)))
9980
9981 (define-public python2-jmespath
9982 (package-with-python2 python-jmespath))
9983
9984 (define-public python-botocore
9985 (package
9986 (name "python-botocore")
9987 (version "1.7.9")
9988 (source
9989 (origin
9990 (method url-fetch)
9991 (uri (pypi-uri "botocore" version))
9992 (sha256
9993 (base32
9994 "02b1bw25r1wdjs5yppb1h9igf11wj092biriv2yg8hzp5r0wrkmg"))))
9995 (build-system python-build-system)
9996 (arguments
9997 ;; FIXME: Many tests are failing.
9998 '(#:tests? #f))
9999 (propagated-inputs
10000 `(("python-dateutil" ,python-dateutil)
10001 ("python-docutils" ,python-docutils)
10002 ("python-jmespath" ,python-jmespath)))
10003 (native-inputs
10004 `(("python-mock" ,python-mock)
10005 ("python-nose" ,python-nose)
10006 ("behave" ,behave)
10007 ("python-tox" ,python-tox)
10008 ("python-wheel" ,python-wheel)))
10009 (home-page "https://github.com/boto/botocore")
10010 (synopsis "Low-level interface to AWS")
10011 (description "Botocore is a Python library that provides a low-level
10012 interface to the Amazon Web Services (AWS) API.")
10013 (license license:asl2.0)))
10014
10015 (define-public python2-botocore
10016 (package-with-python2 python-botocore))
10017
10018 (define-public awscli
10019 (package
10020 (name "awscli")
10021 (version "1.11.151")
10022 (source
10023 (origin
10024 (method url-fetch)
10025 (uri (pypi-uri name version))
10026 (sha256
10027 (base32
10028 "0h6rirbfy0f9cxm7ikll0kr720dircfmxf2vslmhn4n325831wsp"))))
10029 (build-system python-build-system)
10030 (propagated-inputs
10031 `(("python-colorama" ,python-colorama)
10032 ("python-botocore" ,python-botocore)
10033 ("python-s3transfer" ,python-s3transfer)
10034 ("python-docutils" ,python-docutils)
10035 ("python-pyyaml" ,python-pyyaml)
10036 ("python-rsa" ,python-rsa)))
10037 (arguments
10038 ;; FIXME: The 'pypi' release does not contain tests.
10039 '(#:tests? #f))
10040 (home-page "https://aws.amazon.com/cli/")
10041 (synopsis "Command line client for AWS")
10042 (description "AWS CLI provides a unified command line interface to the
10043 Amazon Web Services (AWS) API.")
10044 (license license:asl2.0)))
10045
10046 (define-public python-hypothesis
10047 (package
10048 (name "python-hypothesis")
10049 (version "3.1.0")
10050 (source (origin
10051 (method url-fetch)
10052 (uri (pypi-uri "hypothesis" version))
10053 (sha256
10054 (base32
10055 "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
10056 (build-system python-build-system)
10057 (native-inputs
10058 `(("python-flake8" ,python-flake8)
10059 ("python-pytest" ,python-pytest)))
10060 (synopsis "Library for property based testing")
10061 (description "Hypothesis is a library for testing your Python code against a
10062 much larger range of examples than you would ever want to write by hand. It’s
10063 based on the Haskell library, Quickcheck, and is designed to integrate
10064 seamlessly into your existing Python unit testing work flow.")
10065 (home-page "https://github.com/DRMacIver/hypothesis")
10066 (license license:mpl2.0)
10067 (properties `((python2-variant . ,(delay python2-hypothesis))))))
10068
10069 (define-public python2-hypothesis
10070 (let ((hypothesis (package-with-python2
10071 (strip-python2-variant python-hypothesis))))
10072 (package (inherit hypothesis)
10073 (native-inputs
10074 `(("python2-enum34" ,python2-enum34)
10075 ,@(package-native-inputs hypothesis))))))
10076
10077 (define-public python-pytest-subtesthack
10078 (package
10079 (name "python-pytest-subtesthack")
10080 (version "0.1.1")
10081 (source (origin
10082 (method url-fetch)
10083 (uri (pypi-uri "pytest-subtesthack" version))
10084 (sha256
10085 (base32
10086 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
10087 (build-system python-build-system)
10088 (propagated-inputs
10089 `(("python-pytest" ,python-pytest)))
10090 (synopsis "Set-up and tear-down fixtures for unit tests")
10091 (description "This plugin allows you to set up and tear down fixtures within
10092 unit test functions that use @code{py.test}. This is useful for using
10093 @command{hypothesis} inside py.test, as @command{hypothesis} will call the test
10094 function multiple times, without setting up or tearing down fixture state as is
10095 normally the case.")
10096 (home-page "https://github.com/untitaker/pytest-subtesthack/")
10097 (license license:unlicense)))
10098
10099 (define-public python2-pytest-subtesthack
10100 (package-with-python2 python-pytest-subtesthack))
10101
10102 (define-public python-xdo
10103 (package
10104 (name "python-xdo")
10105 (version "0.3")
10106 (source (origin
10107 (method url-fetch)
10108 (uri (string-append
10109 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10110 "python-xdo_" version ".orig.tar.gz"))
10111 (sha256
10112 (base32
10113 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10114 (build-system python-build-system)
10115 (arguments
10116 '(#:phases
10117 (modify-phases %standard-phases
10118 (add-before 'install 'patch-libxdo-path
10119 ;; Hardcode the path of dynamically loaded libxdo library.
10120 (lambda* (#:key inputs #:allow-other-keys)
10121 (let ((libxdo (string-append
10122 (assoc-ref inputs "xdotool")
10123 "/lib/libxdo.so")))
10124 (substitute* "xdo/_xdo.py"
10125 (("find_library\\(\"xdo\"\\)")
10126 (simple-format #f "\"~a\"" libxdo)))
10127 #t))))
10128 #:tests? #f)) ; no tests provided
10129 (propagated-inputs
10130 `(("python-six" ,python-six)))
10131 (inputs
10132 `(("xdotool" ,xdotool)
10133 ("libX11" ,libx11)))
10134 (home-page "https://tracker.debian.org/pkg/python-xdo")
10135 (synopsis "Python library for simulating X11 keyboard/mouse input")
10136 (description "Provides bindings to libxdo for manipulating X11 via simulated
10137 input. (Note that this is mostly a legacy library; you may wish to look at
10138 python-xdo for newer bindings.)")
10139 (license license:bsd-3)))
10140
10141 (define-public python2-xdo
10142 (package-with-python2 python-xdo))
10143
10144 (define-public python-wtforms
10145 (package
10146 (name "python-wtforms")
10147 (version "2.1")
10148 (source
10149 (origin
10150 (method url-fetch)
10151 (uri (pypi-uri "WTForms" version ".zip"))
10152 (sha256
10153 (base32
10154 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
10155 (build-system python-build-system)
10156 (arguments
10157 '(#:phases
10158 (modify-phases %standard-phases
10159 (add-after 'unpack 'remove-django-test
10160 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
10161 (lambda _
10162 (substitute*
10163 "tests/runtests.py"
10164 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
10165 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
10166 #t)))))
10167 (native-inputs
10168 `(("unzip" ,unzip)))
10169 (home-page "http://wtforms.simplecodes.com/")
10170 (synopsis
10171 "Form validation and rendering library for Python web development")
10172 (description
10173 "WTForms is a flexible forms validation and rendering library
10174 for Python web development. It is very similar to the web form API
10175 available in Django, but is a standalone package.")
10176 (license license:bsd-3)))
10177
10178 (define-public python2-wtforms
10179 (package-with-python2 python-wtforms))
10180
10181 (define-public python-mako
10182 (package
10183 (name "python-mako")
10184 (version "1.0.6")
10185 (source
10186 (origin
10187 (method url-fetch)
10188 (uri (pypi-uri "Mako" version))
10189 (sha256
10190 (base32
10191 "03dyxgjknp4ffsv7vwfd28l5bbpzi0ylp20543wpg3iahyyrwma8"))))
10192 (build-system python-build-system)
10193 (propagated-inputs
10194 `(("python-markupsafe" ,python-markupsafe)))
10195 (native-inputs
10196 `(("python-mock" ,python-mock)
10197 ("python-nose" ,python-nose)
10198 ("python-pytest" ,python-pytest)))
10199 (home-page "http://www.makotemplates.org/")
10200 (synopsis "Templating language for Python")
10201 (description "Mako is a templating language for Python that compiles
10202 templates into Python modules.")
10203 (license license:expat)))
10204
10205 (define-public python2-mako
10206 (package-with-python2 python-mako))
10207
10208 (define-public python-waitress
10209 (package
10210 (name "python-waitress")
10211 (version "0.8.10")
10212 (source
10213 (origin
10214 (method url-fetch)
10215 (uri (pypi-uri "waitress" version))
10216 (sha256
10217 (base32
10218 "017n9ra6vvmq9d5sfhdzyzr1mg15x2hj2dhm4pdlw98c1ypw2h3w"))))
10219 (build-system python-build-system)
10220 (home-page "https://github.com/Pylons/waitress")
10221 (synopsis "Waitress WSGI server")
10222 (description "Waitress is meant to be a production-quality pure-Python WSGI
10223 server with very acceptable performance.")
10224 (license license:zpl2.1)))
10225
10226 (define-public python2-waitress
10227 (package-with-python2 python-waitress))
10228
10229 (define-public python-wsgiproxy2
10230 (package
10231 (name "python-wsgiproxy2")
10232 (version "0.4.2")
10233 (source
10234 (origin
10235 (method url-fetch)
10236 (uri (pypi-uri "WSGIProxy2" version ".zip"))
10237 (sha256
10238 (base32
10239 "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4"))))
10240 (build-system python-build-system)
10241 (arguments
10242 '(;; Wsgiproxy2's test suite requires Restkit, which does not yet fully
10243 ;; support Python 3:
10244 ;; https://github.com/benoitc/restkit/issues/140
10245 #:tests? #f))
10246 (native-inputs
10247 `(("unzip" ,unzip)
10248 ("python-nose" ,python-nose)
10249 ("python-coverage" ,python-coverage)))
10250 (propagated-inputs
10251 `(("python-six" ,python-six)
10252 ("python-webob" ,python-webob)))
10253 (home-page
10254 "https://github.com/gawel/WSGIProxy2/")
10255 (synopsis "WSGI Proxy with various http client backends")
10256 (description "WSGI turns HTTP requests into WSGI function calls.
10257 WSGIProxy turns WSGI function calls into HTTP requests.
10258 It also includes code to sign requests and pass private data,
10259 and to spawn subprocesses to handle requests.")
10260 (license license:expat)))
10261
10262 (define-public python2-wsgiproxy2
10263 (package-with-python2 python-wsgiproxy2))
10264
10265 (define-public python-pastedeploy
10266 (package
10267 (name "python-pastedeploy")
10268 (version "1.5.2")
10269 (source
10270 (origin
10271 (method url-fetch)
10272 (uri (pypi-uri "PasteDeploy" version))
10273 (sha256
10274 (base32
10275 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
10276 (build-system python-build-system)
10277 (native-inputs
10278 `(("python-nose" ,python-nose)))
10279 (home-page "http://pythonpaste.org/deploy/")
10280 (synopsis
10281 "Load, configure, and compose WSGI applications and servers")
10282 (description
10283 "This tool provides code to load WSGI applications and servers from URIs;
10284 these URIs can refer to Python Eggs for INI-style configuration files. Paste
10285 Script provides commands to serve applications based on this configuration
10286 file.")
10287 (license license:expat)))
10288
10289 (define-public python2-pastedeploy
10290 (package-with-python2 python-pastedeploy))
10291
10292 (define-public python-paste
10293 (package
10294 (name "python-paste")
10295 (version "2.0.3")
10296 (source
10297 (origin
10298 (method url-fetch)
10299 (uri (pypi-uri "Paste" version))
10300 (sha256
10301 (base32
10302 "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3"))
10303 (patches (search-patches "python-paste-remove-website-test.patch"
10304 "python-paste-remove-timing-test.patch"))))
10305 (build-system python-build-system)
10306 (native-inputs
10307 `(("python-nose" ,python-nose)))
10308 (propagated-inputs
10309 `(("python-six" ,python-six)))
10310 (home-page "http://pythonpaste.org")
10311 (synopsis
10312 "Python web development tools, focusing on WSGI")
10313 (description
10314 "Paste provides a variety of web development tools and middleware which
10315 can be nested together to build web applications. Paste's design closely
10316 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
10317 (license license:expat)))
10318
10319 (define-public python2-paste
10320 (package-with-python2 python-paste))
10321
10322 (define-public python-pastescript
10323 (package
10324 (name "python-pastescript")
10325 (version "2.0.2")
10326 (source
10327 (origin
10328 (method url-fetch)
10329 (uri (pypi-uri "PasteScript" version))
10330 (sha256
10331 (base32
10332 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
10333 (build-system python-build-system)
10334 (native-inputs
10335 `(("python-nose" ,python-nose)))
10336 (propagated-inputs
10337 `(("python-paste" ,python-paste)
10338 ("python-pastedeploy" ,python-pastedeploy)))
10339 (home-page "http://pythonpaste.org/script/")
10340 (arguments
10341 '(;; Unfortunately, this requires the latest unittest2,
10342 ;; but that requires traceback2 which requires linecache2 which requires
10343 ;; unittest2. So we're skipping tests for now.
10344 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
10345 ;; so in theory we could get around this situation somehow.)
10346 #:tests? #f))
10347 (synopsis
10348 "Pluggable command line tool for serving web applications and more")
10349 (description
10350 "PasteScript is a plugin-friendly command line tool which provides a
10351 variety of features, from launching web applications to bootstrapping project
10352 layouts.")
10353 (license license:expat)))
10354
10355 (define-public python2-pastescript
10356 (package-with-python2 python-pastescript))
10357
10358 (define-public python-pyquery
10359 (package
10360 (name "python-pyquery")
10361 (version "1.2.17")
10362 (source
10363 (origin
10364 (method url-fetch)
10365 (uri (pypi-uri "pyquery" version))
10366 (sha256
10367 (base32
10368 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10369 (build-system python-build-system)
10370 (native-inputs
10371 `(("python-webob" ,python-webob)
10372 ("python-webtest" ,python-webtest)))
10373 (propagated-inputs
10374 `(("python-lxml" ,python-lxml)
10375 ("python-cssselect" ,python-cssselect)))
10376 (home-page "https://github.com/gawel/pyquery")
10377 (synopsis "Make jQuery-like queries on xml documents")
10378 (description "pyquery allows you to make jQuery queries on xml documents.
10379 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10380 fast xml and html manipulation.")
10381 (license license:bsd-3)))
10382
10383 (define-public python2-pyquery
10384 (package-with-python2 python-pyquery))
10385
10386 (define-public python-webtest
10387 (package
10388 (name "python-webtest")
10389 (version "2.0.20")
10390 (source
10391 (origin
10392 (method url-fetch)
10393 (uri (pypi-uri "WebTest" version))
10394 (sha256
10395 (base32
10396 "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv"))))
10397 (build-system python-build-system)
10398 (arguments
10399 `(;; Unfortunately we have to disable tests!
10400 ;; This release of WebTest is pinned to python-nose < 1.3,
10401 ;; but older versions of python-nose are plagued with the following
10402 ;; bug(s), which rears its ugly head during test execution:
10403 ;; https://github.com/nose-devs/nose/issues/759
10404 ;; https://github.com/nose-devs/nose/pull/811
10405 #:tests? #f))
10406 ;; Commented out code is no good, but in this case, once tests
10407 ;; are ready to be enabled again, we should put the following
10408 ;; in place:
10409 ;; (native-inputs
10410 ;; `(("python-nose" ,python-nose) ; technially < 1.3,
10411 ;; ; but see above comment
10412 ;; ("python-coverage" ,python-coverage)
10413 ;; ("python-mock" ,python-mock)
10414 ;; ("python-pastedeploy" ,python-pastedeploy)
10415 ;; ("python-wsgiproxy2" ,python-wsgiproxy2)
10416 ;; ("python-pyquery" ,python-pyquery)))
10417 (propagated-inputs
10418 `(("python-waitress" ,python-waitress)
10419 ("python-webob" ,python-webob)
10420 ("python-six" ,python-six)
10421 ("python-beautifulsoup4" ,python-beautifulsoup4)))
10422 (home-page "http://webtest.pythonpaste.org/")
10423 (synopsis "Helper to test WSGI applications")
10424 (description "Webtest allows you to test your Python web applications
10425 without starting an HTTP server. It supports anything that supports the
10426 minimum of WSGI.")
10427 (license license:expat)))
10428
10429 (define-public python2-webtest
10430 (package-with-python2 python-webtest))
10431
10432 (define-public python-anyjson
10433 (package
10434 (name "python-anyjson")
10435 (version "0.3.3")
10436 (source
10437 (origin
10438 (method url-fetch)
10439 (uri (pypi-uri "anyjson" version))
10440 (sha256
10441 (base32
10442 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10443 (build-system python-build-system)
10444 (arguments
10445 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10446 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10447 ;; whatever) so this transformation needs to be done before the tests
10448 ;; can be run. Maybe we could add a build step to transform beforehand
10449 ;; but it could be annoying/difficult.
10450 ;; We can enable tests for the Python 2 version, though, and do below.
10451 #:tests? #f))
10452 (home-page "http://bitbucket.org/runeh/anyjson/")
10453 (synopsis
10454 "Wraps best available JSON implementation in a common interface")
10455 (description
10456 "Anyjson loads whichever is the fastest JSON module installed
10457 and provides a uniform API regardless of which JSON implementation is used.")
10458 (license license:bsd-3)
10459 (properties `((python2-variant . ,(delay python2-anyjson))))))
10460
10461 (define-public python2-anyjson
10462 (let ((anyjson (package-with-python2
10463 (strip-python2-variant python-anyjson))))
10464 (package
10465 (inherit anyjson)
10466 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10467 #:tests? #t
10468 ,@(package-arguments anyjson)))
10469 (native-inputs `(("python2-nose" ,python2-nose))))))
10470
10471 (define-public python-amqp
10472 (package
10473 (name "python-amqp")
10474 (version "1.4.9")
10475 (source
10476 (origin
10477 (method url-fetch)
10478 (uri (pypi-uri "amqp" version))
10479 (sha256
10480 (base32
10481 "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid"))))
10482 (build-system python-build-system)
10483 (native-inputs
10484 `(("python-nose" ,python-nose)
10485 ("python-mock" ,python-mock)))
10486 (home-page "https://github.com/celery/py-amqp")
10487 (synopsis
10488 "Low-level AMQP client for Python (fork of amqplib)")
10489 (description
10490 "This is a fork of amqplib which was originally written by Barry Pederson.
10491 It is maintained by the Celery project, and used by kombu as a pure python
10492 alternative when librabbitmq is not available.")
10493 (license license:lgpl2.1+)
10494 (properties `((python2-variant . ,(delay python2-amqp))))))
10495
10496 (define-public python2-amqp
10497 (let ((amqp (package-with-python2
10498 (strip-python2-variant python-amqp))))
10499 (package
10500 (inherit amqp)
10501 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10502 ;; unmaintained. Weirdly, does not do this on the python 3
10503 ;; version?
10504 #:tests? #f
10505 ,@(package-arguments amqp))))))
10506
10507 (define-public python-kombu
10508 (package
10509 (name "python-kombu")
10510 (version "3.0.37")
10511 (source
10512 (origin
10513 (method url-fetch)
10514 (uri (pypi-uri "kombu" version))
10515 (sha256
10516 (base32
10517 "0l16chb314gpq2v7fh94a22c30lcv6w3ylmhsa60bldlcq6a0r70"))))
10518 (build-system python-build-system)
10519 (native-inputs
10520 `(("python-mock" ,python-mock)
10521 ("python-nose" ,python-nose)))
10522 (propagated-inputs
10523 `(("python-anyjson" ,python-anyjson)
10524 ("python-amqp" ,python-amqp)
10525 ("python-redis" ,python-redis)))
10526 (home-page "http://kombu.readthedocs.org")
10527 (synopsis "Message passing library for Python")
10528 (description "The aim of Kombu is to make messaging in Python as easy as
10529 possible by providing an idiomatic high-level interface for the AMQ protocol,
10530 and also provide proven and tested solutions to common messaging problems.
10531 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10532 message orientation, queuing, routing, reliability and security, for which the
10533 RabbitMQ messaging server is the most popular implementation.")
10534 (license license:bsd-3)
10535 (properties `((python2-variant . ,(delay python2-kombu))))))
10536
10537 (define-public python2-kombu
10538 (let ((kombu (package-with-python2
10539 (strip-python2-variant python-kombu))))
10540 (package
10541 (inherit kombu)
10542 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10543 ;; It works fine on the python3 variant.
10544 #:tests? #f
10545 ,@(package-arguments kombu)))
10546 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10547 ,@(package-native-inputs kombu))))))
10548
10549 (define-public python-billiard
10550 (package
10551 (name "python-billiard")
10552 (version "3.3.0.23")
10553 (source
10554 (origin
10555 (method url-fetch)
10556 (uri (pypi-uri "billiard" version))
10557 (sha256
10558 (base32
10559 "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"))))
10560 (build-system python-build-system)
10561 (native-inputs
10562 `(("python-nose" ,python-nose)))
10563 (home-page "https://github.com/celery/billiard")
10564 (synopsis
10565 "Python multiprocessing fork with improvements and bugfixes")
10566 (description
10567 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10568 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10569 pyprocessing package. This standalone variant is intended to be compatible with
10570 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10571 (license license:bsd-3)
10572 (properties `((python2-variant . ,(delay python2-billiard))))))
10573
10574 (define-public python2-billiard
10575 (let ((billiard (package-with-python2
10576 (strip-python2-variant python-billiard))))
10577 (package
10578 (inherit billiard)
10579 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10580 ("python2-mock" ,python2-mock)
10581 ,@(package-native-inputs billiard))))))
10582
10583 (define-public python-celery
10584 (package
10585 (name "python-celery")
10586 (version "3.1.24")
10587 (source
10588 (origin
10589 (method url-fetch)
10590 (uri (pypi-uri "celery" version))
10591 (sha256
10592 (base32
10593 "0yh2prhdnx2dgkb67a5drj12hh2zvzx5f611p7mqqg01ydghif4r"))))
10594 (build-system python-build-system)
10595 (arguments
10596 `(#:phases
10597 (modify-phases %standard-phases
10598 ;; These tests break with Python 3.5:
10599 ;; https://github.com/celery/celery/issues/2897#issuecomment-253066295
10600 (replace 'check
10601 (lambda _
10602 (zero?
10603 (system* "nosetests" "--exclude=^test_safe_to_remove.*")))))))
10604 (native-inputs
10605 `(("python-nose" ,python-nose)))
10606 (propagated-inputs
10607 `(("python-pytz" ,python-pytz)
10608 ("python-billiard" ,python-billiard)
10609 ("python-kombu" ,python-kombu)))
10610 (home-page "http://celeryproject.org")
10611 (synopsis "Distributed Task Queue")
10612 (description "Celery is an asynchronous task queue/job queue based on
10613 distributed message passing. It is focused on real-time operation, but
10614 supports scheduling as well. The execution units, called tasks, are executed
10615 concurrently on a single or more worker servers using multiprocessing,
10616 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10617 synchronously (wait until ready).")
10618 (license license:bsd-3)
10619 (properties `((python2-variant . ,(delay python2-celery))))))
10620
10621 (define-public python2-celery
10622 (let ((celery (package-with-python2
10623 (strip-python2-variant python-celery))))
10624 (package
10625 (inherit celery)
10626 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10627 ("python2-mock" ,python2-mock)
10628 ,@(package-native-inputs celery))))))
10629
10630 (define-public python-translitcodec
10631 (package
10632 (name "python-translitcodec")
10633 (version "0.4.0")
10634 (source
10635 (origin
10636 (method url-fetch)
10637 (uri (pypi-uri "translitcodec" version))
10638 (sha256
10639 (base32
10640 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10641 (build-system python-build-system)
10642 (arguments
10643 `(#:tests? #f)) ; no tests provided
10644 (home-page
10645 "https://github.com/claudep/translitcodec")
10646 (synopsis
10647 "Unicode to 8-bit charset transliteration codec")
10648 (description
10649 "This package contains codecs for transliterating ISO 10646 texts into
10650 best-effort representations using smaller coded character sets (ASCII,
10651 ISO 8859, etc.).")
10652 (license license:expat)))
10653
10654 (define-public python2-translitcodec
10655 (package-with-python2 python-translitcodec))
10656
10657 (define-public python-editor
10658 (package
10659 (name "python-editor")
10660 (version "0.5")
10661 (source
10662 (origin
10663 (method url-fetch)
10664 (uri (pypi-uri "python-editor" version))
10665 (sha256
10666 (base32
10667 "1ypnpgvzpkbwsg4rdvy4sy51j28b5xq9v8pnkwxncn07vqz06p7n"))))
10668 (build-system python-build-system)
10669 (home-page
10670 "https://github.com/fmoo/python-editor")
10671 (synopsis
10672 "Programmatically open an editor, capture the result")
10673 (description
10674 "python-editor is a library that provides the editor module for
10675 programmatically interfacing with your system's $EDITOR.")
10676 (license license:asl2.0)))
10677
10678 (define-public python2-editor
10679 (package-with-python2 python-editor))
10680
10681 (define-public python-sphinxcontrib-programoutput
10682 (package
10683 (name "python-sphinxcontrib-programoutput")
10684 (version "0.10")
10685 (source (origin
10686 (method url-fetch)
10687 (uri (pypi-uri "sphinxcontrib-programoutput" version))
10688 (sha256
10689 (base32
10690 "153hhnlbx4688zj9wd64819ps5znc2jlyp5crkgzvn5hxgy99vpx"))))
10691 (build-system python-build-system)
10692 (arguments
10693 ;; FIXME: Many tests are failing and the upstream is gone.
10694 '(#:tests? #f))
10695 (propagated-inputs
10696 `(("python-sphinx" ,python-sphinx)))
10697 (synopsis "Sphinx extension to include program output")
10698 (description "A Sphinx extension to literally insert the output of arbitrary
10699 commands into documents, helping you to keep your command examples up to date.")
10700 (home-page "https://github.com/lunaryorn/sphinxcontrib-programoutput")
10701 (license license:bsd-2)))
10702
10703 (define-public python2-sphinxcontrib-programoutput
10704 (package-with-python2 python-sphinxcontrib-programoutput))
10705
10706 (define-public python-sphinx-repoze-autointerface
10707 (package
10708 (name "python-sphinx-repoze-autointerface")
10709 (version "0.8")
10710 (source (origin
10711 (method url-fetch)
10712 (uri (pypi-uri "repoze.sphinx.autointerface" version))
10713 (sha256
10714 (base32
10715 "08ycivzf7bh4a1zcyp31hbyqs1b2c9r26raa3vxjwwmbfqr3iw4f"))))
10716 (build-system python-build-system)
10717 (arguments '(#:tests? #f)) ; No tests.
10718 (propagated-inputs
10719 `(("python-sphinx" ,python-sphinx)
10720 ("python-zope-interface" ,python-zope-interface)))
10721 (synopsis "Auto-generate Sphinx API docs from Zope interfaces")
10722 (description "This package defines an extension for the Sphinx documentation
10723 system. The extension allows generation of API documentation by
10724 introspection of @code{zope.interface} instances in code.")
10725 (home-page "https://github.com/repoze/repoze.sphinx.autointerface")
10726 (license license:repoze)))
10727
10728 (define-public python2-sphinx-repoze-autointerface
10729 (package-with-python2 python-sphinx-repoze-autointerface))
10730
10731 (define-public python-psycopg2
10732 (package
10733 (name "python-psycopg2")
10734 (version "2.6.2")
10735 (source
10736 (origin
10737 (method url-fetch)
10738 (uri (pypi-uri "psycopg2" version))
10739 (sha256
10740 (base32
10741 "0p60z2gwfcal30y2w8gprflchp1kcg9qblc5rn782p4wxl90wjbh"))))
10742 (build-system python-build-system)
10743 (arguments
10744 ;; Tests would require a postgresql database "psycopg2_test"
10745 ;; and a running postgresql database management service.
10746 `(#:tests? #f)) ; TODO re-enable after providing a test-db.
10747 (inputs
10748 `(("postgresql" ,postgresql))) ; libpq
10749 (home-page "http://initd.org/psycopg/")
10750 (synopsis "Python PostgreSQL adapter")
10751 (description
10752 "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API 2.0. ")
10753 (license license:lgpl3+)))
10754
10755 (define-public python2-psycopg2
10756 (package-with-python2 python-psycopg2))
10757
10758 (define-public python-vobject
10759 (package
10760 (name "python-vobject")
10761 (version "0.9.5")
10762 (source (origin
10763 (method url-fetch)
10764 (uri (pypi-uri "vobject" version))
10765 (sha256
10766 (base32
10767 "0hqjgf3ay1m5w1c0k00g5yfpdz1zni5qnr5rh9b8fg9hjvhwlmhg"))))
10768 (build-system python-build-system)
10769 (arguments
10770 '(;; The test suite relies on some non-portable Windows interfaces.
10771 #:tests? #f))
10772 (propagated-inputs
10773 `(("python-dateutil" ,python-dateutil)
10774 ("python-pyicu" ,python-pyicu)))
10775 (synopsis "Parse and generate vCard and vCalendar files")
10776 (description "Vobject is intended to be a full featured Python package for
10777 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10778 are supported and well tested. vCard 3.0 files are supported, and all data
10779 should be imported, but only a few components are understood in a sophisticated
10780 way.")
10781 (home-page "http://eventable.github.io/vobject/")
10782 (license license:asl2.0)))
10783
10784 (define-public python2-vobject
10785 (package-with-python2 python-vobject))
10786
10787 (define-public python-munkres
10788 (package
10789 (name "python-munkres")
10790 (version "1.0.8")
10791 (source (origin
10792 (method url-fetch)
10793 (uri (pypi-uri "munkres" version))
10794 (sha256
10795 (base32
10796 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10797 (build-system python-build-system)
10798 (arguments
10799 '(#:tests? #f)) ; no test suite
10800 (home-page "http://software.clapper.org/munkres/")
10801 (synopsis "Implementation of the Munkres algorithm")
10802 (description "The Munkres module provides an implementation of the Munkres
10803 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10804 useful for solving the Assignment Problem.")
10805 (license license:bsd-3)))
10806
10807 (define-public python2-munkres
10808 (package-with-python2 python-munkres))
10809
10810 (define-public python-flask
10811 (package
10812 (name "python-flask")
10813 (version "0.11.1")
10814 (source (origin
10815 (method url-fetch)
10816 (uri (pypi-uri "Flask" version))
10817 (sha256
10818 (base32
10819 "03kbfll4sj3v5z7r31c7bhfpi11r1np076d4p1k2kg4yzcmkywdl"))))
10820 (build-system python-build-system)
10821 (propagated-inputs
10822 `(("python-itsdangerous" ,python-itsdangerous)
10823 ("python-jinja2" ,python-jinja2)
10824 ("python-click" ,python-click)
10825 ("python-werkzeug" ,python-werkzeug)))
10826 (home-page "https://github.com/mitsuhiko/flask/")
10827 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
10828 (description "Flask is a micro web framework based on the Werkzeug toolkit
10829 and Jinja2 template engine. It is called a micro framework because it does not
10830 presume or force a developer to use a particular tool or library.")
10831 (license license:bsd-3)))
10832
10833 (define-public python2-flask
10834 (package-with-python2 python-flask))
10835
10836 (define-public python-flask-wtf
10837 (package
10838 (name "python-flask-wtf")
10839 (version "0.13.1")
10840 (source
10841 (origin
10842 (method url-fetch)
10843 (uri (pypi-uri "Flask-WTF" version))
10844 (sha256
10845 (base32
10846 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
10847 (build-system python-build-system)
10848 (arguments
10849 '(#:phases
10850 (modify-phases %standard-phases
10851 (add-before 'check 'drop-failing-test
10852 (lambda _
10853 ;; FIXME: This file tries resolving an external server, which
10854 ;; fails. Try to patch out the offending section instead of
10855 ;; deleting the whole thing.
10856 (delete-file "tests/test_recaptcha.py")
10857 #t)))))
10858 (propagated-inputs
10859 `(("python-flask-babel" ,python-flask-babel)
10860 ("python-babel" ,python-babel)
10861 ("python-wtforms" ,python-wtforms)))
10862 (native-inputs
10863 `(("python-nose" ,python-nose)))
10864 (home-page "https://github.com/lepture/flask-wtf")
10865 (synopsis "Simple integration of Flask and WTForms")
10866 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
10867 upload, and reCAPTCHA.")
10868 (license license:bsd-3)))
10869
10870 (define-public python2-flask-wtf
10871 (package-with-python2 python-flask-wtf))
10872
10873 (define-public python-flask-multistatic
10874 (package
10875 (name "python-flask-multistatic")
10876 (version "1.0")
10877 (source
10878 (origin
10879 (method url-fetch)
10880 (uri (pypi-uri "flask-multistatic" version))
10881 (sha256
10882 (base32
10883 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
10884 (build-system python-build-system)
10885 (propagated-inputs
10886 `(("python-flask" ,python-flask)))
10887 (home-page "https://pagure.io/flask-multistatic")
10888 (synopsis "Flask plugin to allow overriding static files")
10889 (description "@code{flask-multistatic} is a flask plugin that adds support
10890 for overriding static files.")
10891 (license license:gpl3+)))
10892
10893 (define-public python2-flask-multistatic
10894 (package-with-python2 python-flask-multistatic))
10895
10896 (define-public python-cookies
10897 (package
10898 (name "python-cookies")
10899 (version "2.2.1")
10900 (source (origin
10901 (method url-fetch)
10902 (uri (pypi-uri "cookies" version))
10903 (sha256
10904 (base32
10905 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
10906 (build-system python-build-system)
10907 (arguments
10908 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
10909 #:tests? #f))
10910 (native-inputs
10911 `(("python-pytest" ,python2-pytest)))
10912 (synopsis "HTTP cookie parser and renderer")
10913 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
10914 Python.")
10915 (home-page "https://gitlab.com/sashahart/cookies")
10916 (license license:expat)))
10917
10918 (define-public python2-cookies
10919 (package-with-python2 python-cookies))
10920
10921 (define-public python-responses
10922 (package
10923 (name "python-responses")
10924 (version "0.5.1")
10925 (source (origin
10926 (method url-fetch)
10927 (uri (pypi-uri "responses" version))
10928 (sha256
10929 (base32
10930 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
10931 (build-system python-build-system)
10932 (arguments
10933 `(;; Test suite is not distributed:
10934 ;; https://github.com/getsentry/responses/issues/38
10935 #:tests? #f))
10936 (native-inputs
10937 `(("python-mock" ,python-mock)))
10938 (propagated-inputs
10939 `(("python-requests" ,python-requests)
10940 ("python-cookies" ,python-cookies)
10941 ("python-six" ,python-six)))
10942 (home-page "https://github.com/getsentry/responses")
10943 (synopsis "Utility for mocking out the `requests` Python library")
10944 (description "A utility library for mocking out the `requests` Python
10945 library.")
10946 (license license:asl2.0)))
10947
10948 (define-public python2-responses
10949 (package-with-python2 python-responses))
10950
10951 (define-public python-whoosh
10952 (package
10953 (name "python-whoosh")
10954 (version "2.7.4")
10955 (source
10956 (origin
10957 (method url-fetch)
10958 (uri (pypi-uri "Whoosh" version))
10959 (sha256
10960 (base32
10961 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10962 (build-system python-build-system)
10963 (native-inputs
10964 `(("python-pytest" ,python-pytest)))
10965 (home-page "http://bitbucket.org/mchaput/whoosh")
10966 (synopsis "Full text indexing, search, and spell checking library")
10967 (description
10968 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10969 checking library.")
10970 (license license:bsd-2)))
10971
10972 (define-public python2-whoosh
10973 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10974 (package (inherit whoosh)
10975 (propagated-inputs
10976 `(("python2-backport-ssl-match-hostname"
10977 ,python2-backport-ssl-match-hostname)
10978 ,@(package-propagated-inputs whoosh))))))
10979
10980 (define-public python-pathlib
10981 (package
10982 (name "python-pathlib")
10983 (version "1.0.1")
10984 (source (origin
10985 (method url-fetch)
10986 (uri (pypi-uri "pathlib" version))
10987 (sha256
10988 (base32
10989 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10990 (build-system python-build-system)
10991 ;; The tests depend on the internal "test" module, which does not provide
10992 ;; a stable interface.
10993 (arguments `(#:tests? #f))
10994 (home-page "https://pathlib.readthedocs.org/")
10995 (synopsis "Object-oriented file system paths")
10996 (description "Pathlib offers a set of classes to handle file system paths.
10997 It offers the following advantages over using string objects:
10998
10999 @enumerate
11000 @item No more cumbersome use of os and os.path functions. Everything can
11001 be done easily through operators, attribute accesses, and method calls.
11002 @item Embodies the semantics of different path types. For example,
11003 comparing Windows paths ignores casing.
11004 @item Well-defined semantics, eliminating any inconsistencies or
11005 ambiguities (forward vs. backward slashes, etc.).
11006 @end enumerate
11007
11008 Note: In Python 3.4, pathlib is now part of the standard library. For other
11009 Python versions please consider python-pathlib2 instead, which tracks the
11010 standard library module. This module (python-pathlib) isn't maintained
11011 anymore.")
11012 (license license:expat)))
11013
11014 (define-public python2-pathlib
11015 (package-with-python2 python-pathlib))
11016
11017 (define-public python2-pathlib2
11018 (package
11019 (name "python2-pathlib2")
11020 (version "2.1.0")
11021 (source (origin
11022 (method url-fetch)
11023 (uri (pypi-uri "pathlib2" version))
11024 (sha256
11025 (base32
11026 "0p050msg5c8d0kadv702jnfshaxrb0il765cpkgnhn6mq5hakcyy"))))
11027 (build-system python-build-system)
11028 ;; We only need the the Python 2 variant, since for Python 3 our minimum
11029 ;; version is 3.4 which already includes this package as part of the
11030 ;; standard library.
11031 (arguments
11032 `(#:python ,python-2))
11033 (native-inputs
11034 `(("python2-six" ,python2-six)))
11035 (home-page "http://pypi.python.org/pypi/pathlib2/")
11036 (synopsis "Object-oriented file system paths - backport of standard
11037 pathlib module")
11038 (description "The goal of pathlib2 is to provide a backport of standard
11039 pathlib module which tracks the standard library module, so all the newest
11040 features of the standard pathlib can be used also on older Python versions.
11041
11042 Pathlib offers a set of classes to handle file system paths. It offers the
11043 following advantages over using string objects:
11044
11045 @enumerate
11046 @item No more cumbersome use of os and os.path functions. Everything can
11047 be done easily through operators, attribute accesses, and method calls.
11048 @item Embodies the semantics of different path types. For example,
11049 comparing Windows paths ignores casing.
11050 @item Well-defined semantics, eliminating any inconsistencies or
11051 ambiguities (forward vs. backward slashes, etc.).
11052 @end enumerate")
11053 (license license:expat)))
11054
11055 (define-public python-jellyfish
11056 (package
11057 (name "python-jellyfish")
11058 (version "0.5.6")
11059 (source (origin
11060 (method url-fetch)
11061 (uri (pypi-uri "jellyfish" version))
11062 (sha256
11063 (base32
11064 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
11065 (build-system python-build-system)
11066 (native-inputs
11067 `(("python-pytest" ,python-pytest)))
11068 (home-page "https://github.com/jamesturk/jellyfish")
11069 (synopsis "Approximate and phonetic matching of strings")
11070 (description "Jellyfish uses a variety of string comparison and phonetic
11071 encoding algorithms to do fuzzy string matching.")
11072 (license license:bsd-2)
11073 (properties `((python2-variant . ,(delay python2-jellyfish))))))
11074
11075 (define-public python2-jellyfish
11076 (let ((jellyfish (package-with-python2
11077 (strip-python2-variant python-jellyfish))))
11078 (package (inherit jellyfish)
11079 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
11080 ,@(package-native-inputs jellyfish))))))
11081
11082 (define-public python2-unicodecsv
11083 (package
11084 (name "python2-unicodecsv")
11085 (version "0.14.1")
11086 (source (origin
11087 (method url-fetch)
11088 ;; The test suite is not included in the PyPi release.
11089 ;; https://github.com/jdunck/python-unicodecsv/issues/19
11090 (uri (string-append "https://github.com/jdunck/python-unicodecsv/"
11091 "archive/" version ".tar.gz"))
11092 (file-name (string-append name "-" version ".tar.gz"))
11093 (sha256
11094 (base32
11095 "087nqanfcyp6mlfbbr5lva5f3w6iz1bybls9xlrb8icmc474wh4w"))))
11096 (build-system python-build-system)
11097 (arguments
11098 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
11099 #:python ,python-2))
11100 (native-inputs
11101 `(("python2-unittest2" ,python2-unittest2)))
11102 (home-page "https://github.com/jdunck/python-unicodecsv")
11103 (synopsis "Unicode CSV module for Python 2")
11104 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
11105 module, adding support for Unicode strings.")
11106 (license license:bsd-2)))
11107
11108 (define-public python-rarfile
11109 (package
11110 (name "python-rarfile")
11111 (version "2.8")
11112 (source (origin
11113 (method url-fetch)
11114 (uri (pypi-uri "rarfile" version))
11115 (sha256
11116 (base32
11117 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
11118 (build-system python-build-system)
11119 (arguments
11120 '(#:phases
11121 (modify-phases %standard-phases
11122 (replace 'check
11123 ;; Many tests fail, but the installation proceeds.
11124 (lambda _ (zero? (system* "make" "-C" "test" "test")))))))
11125 (native-inputs
11126 `(("which" ,which))) ; required for tests
11127 (propagated-inputs
11128 `(("libarchive" ,libarchive)))
11129 (home-page "https://github.com/markokr/rarfile")
11130 (synopsis "RAR archive reader for Python")
11131 (description "This is Python module for RAR archive reading. The interface
11132 is made as zipfile like as possible.")
11133 (license license:isc)))
11134
11135 (define-public python2-rarfile
11136 (package-with-python2 python-rarfile))
11137
11138 (define-public python-magic
11139 (package
11140 (name "python-magic")
11141 (version "0.4.3")
11142 (source
11143 (origin
11144 (method url-fetch)
11145 (uri (string-append "https://github.com/ahupp/python-magic/archive/"
11146 version ".tar.gz"))
11147 (sha256
11148 (base32
11149 "17bgy92i7sb021f2s4mw1dcvpm6p1mi9jihridwy1pyn8mzvpjgk"))
11150 (file-name (string-append name "-" version "-checkout"))))
11151 (build-system python-build-system)
11152 (arguments
11153 ;; The tests are unreliable, so don't run them. The tests fail
11154 ;; under Python3 because they were written for Python2 and
11155 ;; contain import statements that do not work in Python3. One of
11156 ;; the tests fails under Python2 because its assertions are
11157 ;; overly stringent; it relies on comparing output strings which
11158 ;; are brittle and can change depending on the version of
11159 ;; libmagic being used and the system on which the test is
11160 ;; running. In my case, under GuixSD 0.10.0, only one test
11161 ;; failed, and it seems to have failed only because the version
11162 ;; of libmagic that is packaged in Guix outputs a slightly
11163 ;; different (but not wrong) string than the one that the test
11164 ;; expected.
11165 '(#:tests? #f
11166 #:phases (modify-phases %standard-phases
11167 ;; Replace a specific method call with a hard-coded
11168 ;; path to the necessary libmagic.so file in the
11169 ;; store. If we don't do this, then the method call
11170 ;; will fail to find the libmagic.so file, which in
11171 ;; turn will cause any application using
11172 ;; python-magic to fail.
11173 (add-before 'build 'hard-code-path-to-libmagic
11174 (lambda* (#:key inputs #:allow-other-keys)
11175 (let ((file (assoc-ref inputs "file")))
11176 (substitute* "magic.py"
11177 (("ctypes.util.find_library\\('magic'\\)")
11178 (string-append "'" file "/lib/libmagic.so'")))
11179 #t)))
11180 (add-before 'install 'disable-egg-compression
11181 (lambda _
11182 (let ((port (open-file "setup.cfg" "a")))
11183 (display "\n[easy_install]\nzip_ok = 0\n"
11184 port)
11185 (close-port port)
11186 #t))))))
11187 (inputs
11188 ;; python-magic needs to be able to find libmagic.so.
11189 `(("file" ,file)))
11190 (home-page "https://github.com/ahupp/python-magic")
11191 (synopsis "File type identification using libmagic")
11192 (description
11193 "This module uses ctypes to access the libmagic file type
11194 identification library. It makes use of the local magic database and
11195 supports both textual and MIME-type output. Note that this module and
11196 the python-file module both provide a \"magic.py\" file; these two
11197 modules, which are different and were developed separately, both serve
11198 the same purpose: to provide Python bindings for libmagic.")
11199 (license license:expat)))
11200
11201 (define-public python2-magic
11202 (package-with-python2 python-magic))
11203
11204 (define-public python2-s3cmd
11205 (package
11206 (name "python2-s3cmd")
11207 (version "1.6.1")
11208 (source
11209 (origin
11210 (method url-fetch)
11211 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
11212 "s3cmd-" version ".tar.gz"))
11213 (sha256
11214 (base32
11215 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
11216 (build-system python-build-system)
11217 (arguments
11218 ;; s3cmd is written for python2 only and contains no tests.
11219 `(#:python ,python-2
11220 #:tests? #f))
11221 (propagated-inputs
11222 `(("python2-dateutil" ,python2-dateutil)
11223 ;; The python-file package also provides a magic.py module.
11224 ;; This is an unfortunate state of affairs; however, s3cmd
11225 ;; fails to install if it cannot find specifically the
11226 ;; python-magic package. Thus we include it, instead of using
11227 ;; python-file. Ironically, s3cmd sometimes works better
11228 ;; without libmagic bindings at all:
11229 ;; https://github.com/s3tools/s3cmd/issues/198
11230 ("python2-magic" ,python2-magic)))
11231 (home-page "http://s3tools.org/s3cmd")
11232 (synopsis "Command line tool for S3-compatible storage services")
11233 (description
11234 "S3cmd is a command line tool for uploading, retrieving and managing data
11235 in storage services that are compatible with the Amazon Simple Storage
11236 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
11237 GnuPG encryption, and more. It also supports management of Amazon's
11238 CloudFront content delivery network.")
11239 (license license:gpl2+)))
11240
11241 (define-public python-pkgconfig
11242 (package
11243 (name "python-pkgconfig")
11244 (version "1.1.0")
11245 (source
11246 (origin
11247 (method url-fetch)
11248 (uri (pypi-uri "pkgconfig" version))
11249 (sha256
11250 (base32
11251 "1pw0kmvc57sjmaxi6c54fqsnihqj6hvhc9y1vaz36axafzqam7bh"))))
11252 (build-system python-build-system)
11253 (native-inputs
11254 `(("python-nose" ,python-nose)))
11255 (inputs
11256 `(("pkg-config" ,pkg-config)))
11257 (arguments
11258 `(;; Tests fail with "ValueError: _type_ 'v' not supported" on Python 3,
11259 ;; and on Python 2 they need the dl module deprecated since Python 2.6.
11260 #:tests? #f
11261 ;; Hard-code the path to pkg-config.
11262 #:phases
11263 (modify-phases %standard-phases
11264 (add-before
11265 'build 'patch
11266 (lambda _
11267 (substitute* "pkgconfig/pkgconfig.py"
11268 (("cmd = 'pkg-config")
11269 (string-append "cmd = '" (which "pkg-config"))))
11270 #t)))))
11271 (home-page "https://github.com/matze/pkgconfig")
11272 (synopsis "Python interface for pkg-config")
11273 (description "This module provides a Python interface to pkg-config. It
11274 can be used to find all pkg-config packages, check if a package exists,
11275 check if a package meets certain version requirements, query CFLAGS and
11276 LDFLAGS and parse the output to build extensions with setup.py.")
11277 (license license:expat)))
11278
11279 (define-public python2-pkgconfig
11280 (package-with-python2 python-pkgconfig))
11281
11282 (define-public python-bz2file
11283 (package
11284 (name "python-bz2file")
11285 (version "0.98")
11286 (source
11287 (origin
11288 (method url-fetch)
11289 (uri (pypi-uri "bz2file" version))
11290 (sha256
11291 (base32
11292 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
11293 (build-system python-build-system)
11294 (arguments
11295 `(#:tests? #f)) ; Tests use deprecated python modules.
11296 (home-page "https://github.com/nvawda/bz2file")
11297 (synopsis "Read and write bzip2-compressed files")
11298 (description
11299 "Bz2file is a Python library for reading and writing bzip2-compressed
11300 files. It contains a drop-in replacement for the I/O interface in the
11301 standard library's @code{bz2} module, including features from the latest
11302 development version of CPython that are not available in older releases.")
11303 (license license:asl2.0)
11304 (properties `((python2-variant . ,(delay python2-bz2file))))))
11305
11306 (define-public python2-bz2file
11307 (let ((base (package-with-python2
11308 (strip-python2-variant python-bz2file))))
11309 (package
11310 (inherit base)
11311 (arguments
11312 `(#:python ,python-2
11313 #:phases
11314 (modify-phases %standard-phases
11315 ;; 'python setup.py test' does not work as of 0.98.
11316 ;; There is only the one test file, so we run it directly.
11317 (replace 'check
11318 (lambda _ (zero? (system* "python"
11319 "test_bz2file.py"))))))))))
11320
11321 (define-public python-future
11322 (package
11323 (name "python-future")
11324 (version "0.16.0")
11325 (source
11326 (origin
11327 (method url-fetch)
11328 (uri (pypi-uri "future" version))
11329 (sha256
11330 (base32
11331 "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773"))))
11332 (build-system python-build-system)
11333 ;; Many tests connect to the network or are otherwise flawed.
11334 ;; https://github.com/PythonCharmers/python-future/issues/210
11335 (arguments
11336 `(#:tests? #f))
11337 (home-page "http://python-future.org")
11338 (synopsis "Single-source support for Python 3 and 2")
11339 (description
11340 "@code{python-future} is the missing compatibility layer between Python 2 and
11341 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11342 to support both Python 2 and Python 3 with minimal overhead.")
11343 (license license:expat)))
11344
11345 (define-public python2-future
11346 (package-with-python2 python-future))
11347
11348 (define-public python-cysignals
11349 (package
11350 (name "python-cysignals")
11351 (version "1.1.0")
11352 (source
11353 (origin
11354 (method url-fetch)
11355 (uri (pypi-uri "cysignals" version ".tar.bz2"))
11356 (sha256
11357 (base32
11358 "14cbyd9znlz6cxy1s3g6v6dv5jj45hn27pywkidd9b1zanaysqc6"))))
11359 (build-system python-build-system)
11360 (native-inputs
11361 `(("python-cython" ,python-cython)
11362 ("python-sphinx" ,python-sphinx)))
11363 (inputs
11364 `(("pari-gp" ,pari-gp)))
11365 (arguments
11366 `(#:modules ((guix build python-build-system)
11367 ((guix build gnu-build-system) #:prefix gnu:)
11368 (guix build utils))
11369 ;; FIXME: Tests are executed after installation and currently fail
11370 ;; when not installing into standard locations; the author is working
11371 ;; on a fix.
11372 #:tests? #f
11373 #:phases
11374 (modify-phases %standard-phases
11375 (add-before
11376 'build 'configure
11377 (assoc-ref gnu:%standard-phases 'configure)))))
11378 (home-page
11379 "https://github.com/sagemath/cysignals")
11380 (synopsis
11381 "Handling of interrupts and signals for Cython")
11382 (description
11383 "The cysignals package provides mechanisms to handle interrupts (and
11384 other signals and errors) in Cython code, using two related approaches,
11385 for mixed Cython/Python code or external C libraries and pure Cython code,
11386 respectively.")
11387 (license license:lgpl3+)))
11388
11389 (define-public python2-cysignals
11390 (package-with-python2 python-cysignals))
11391
11392 (define-public python2-shedskin
11393 (package
11394 (name "python2-shedskin")
11395 (version "0.9.4")
11396 (source
11397 (origin
11398 (method url-fetch)
11399 (uri (string-append "https://github.com/shedskin/shedskin/"
11400 "releases/download/v" version
11401 "/shedskin-" version ".tgz"))
11402 (sha256
11403 (base32
11404 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11405 (build-system python-build-system)
11406 (arguments
11407 `(#:python ,python-2
11408 #:phases (modify-phases %standard-phases
11409 (add-after 'unpack 'fix-resulting-include-libs
11410 (lambda* (#:key inputs #:allow-other-keys)
11411 (let ((libgc (assoc-ref inputs "libgc"))
11412 (pcre (assoc-ref inputs "pcre")))
11413 (substitute* "shedskin/makefile.py"
11414 (("variable == 'CCFLAGS':[ ]*")
11415 (string-append "variable == 'CCFLAGS':\n"
11416 " line += ' -I " pcre "/include"
11417 " -I " libgc "/include'"))
11418 (("variable == 'LFLAGS':[ ]*")
11419 (string-append "variable == 'LFLAGS':\n"
11420 " line += ' -L" pcre "/lib"
11421 " -L " libgc "/lib'")))
11422 #t))))))
11423 (inputs `(("pcre" ,pcre)
11424 ("libgc" ,libgc)))
11425 (home-page "https://shedskin.github.io/")
11426 (synopsis "Experimental Python-2 to C++ Compiler")
11427 (description (string-append "This is an experimental compiler for a subset of
11428 Python. It generates C++ code and a Makefile."))
11429 (license (list license:gpl3 license:bsd-3 license:expat))))
11430
11431 (define-public python2-rope
11432 (package
11433 (name "python2-rope")
11434 (version "0.10.3")
11435 (source
11436 (origin
11437 (method url-fetch)
11438 (uri (pypi-uri "rope" version))
11439 (sha256
11440 (base32
11441 "18k5znhpwvrfck3yp0jmhd5j8r0f0s8bk1zh5yhs2cfgmfhbwigb"))))
11442 (arguments
11443 ;; Rope is currently python-2 only.
11444 ;; https://github.com/python-rope/rope/issues/57
11445 `(#:python ,python-2))
11446 (build-system python-build-system)
11447 (native-inputs
11448 `(("python2-unittest2" ,python2-unittest2)))
11449 (home-page "https://github.com/python-rope/rope")
11450 (synopsis "Refactoring library for Python")
11451 (description "Rope is a refactoring library for Python. It facilitates
11452 the renaming, moving and extracting of attributes, functions, modules, fields
11453 and parameters in Python 2 source code. These refactorings can also be applied
11454 to occurrences in strings and comments.")
11455 (license license:gpl2)))
11456
11457 (define-public python-py3status
11458 (package
11459 (name "python-py3status")
11460 (version "3.1")
11461 (source
11462 (origin
11463 (method url-fetch)
11464 (uri (pypi-uri "py3status" version))
11465 (sha256
11466 (base32
11467 "0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
11468 (build-system python-build-system)
11469 (arguments
11470 '(#:tests? #f)) ; TODO: Requires many libraries not in Guix.
11471 (home-page "https://github.com/ultrabug/py3status")
11472 (synopsis "Extensible i3status wrapper written in Python")
11473 (description "py3status is an i3status wrapper which extends i3status
11474 functionality in a modular way, allowing you to extend your panel with your
11475 own code, responding to click events and updating clock every second.")
11476 (license license:bsd-3)))
11477
11478 (define-public python-tblib
11479 (package
11480 (name "python-tblib")
11481 (version "1.3.0")
11482 (source (origin
11483 (method url-fetch)
11484 (uri (pypi-uri "tblib" version))
11485 (sha256 (base32
11486 "02iahfkfa927hb4jq2bak36ldihwapzacfiq5lyxg8llwn98a1yi"))))
11487 (build-system python-build-system)
11488 (arguments
11489 `(#:phases
11490 (modify-phases %standard-phases
11491 (replace 'check
11492 (lambda _
11493 ;; Upstream runs tests after installation and the package itself
11494 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11495 ;; found.
11496 (setenv "PYTHONPATH"
11497 (string-append (getcwd) "/build/lib:"
11498 (getenv "PYTHONPATH")))
11499 (zero? (system* "py.test" "-vv" "tests" "README.rst")))))))
11500 (native-inputs
11501 `(("python-pytest" ,python-pytest)
11502 ("python-six" ,python-six)))
11503 (home-page "https://github.com/ionelmc/python-tblib")
11504 (synopsis "Traceback serialization library")
11505 (description
11506 "Traceback serialization allows you to:
11507
11508 @enumerate
11509 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11510 different processes. This allows better error handling when running code over
11511 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11512
11513 @item Parse traceback strings and raise with the parsed tracebacks.
11514 @end enumerate\n")
11515 (license license:bsd-3)))
11516
11517 (define-public python2-tblib
11518 (package-with-python2 python-tblib))
11519
11520 (define-public python-sqlparse
11521 (package
11522 (name "python-sqlparse")
11523 (version "0.1.19")
11524 (source (origin
11525 (method url-fetch)
11526 (uri (pypi-uri "sqlparse" version))
11527 (sha256
11528 (base32
11529 "1s2fvaxgh9kqzrd6iwy5h7i61ckn05plx9np13zby93z3hdbx5nq"))))
11530 (build-system python-build-system)
11531 (arguments
11532 `(#:phases
11533 (modify-phases %standard-phases
11534 (replace 'check
11535 (lambda* _
11536 ;; setup.py-integrated 2to3 only affects the build files, but
11537 ;; py.test is using the source files. So we need to convert them
11538 ;; manually.
11539 (when (zero? (system* "python3"))
11540 (system* "2to3" "--no-diff" "-wn" "sqlparse" "tests"))
11541 (zero? (system* "py.test")))))))
11542 (native-inputs
11543 `(("python-pytest" ,python-pytest)))
11544 (home-page "https://github.com/andialbrecht/sqlparse")
11545 (synopsis "Non-validating SQL parser")
11546 (description "Sqlparse is a non-validating SQL parser for Python. It
11547 provides support for parsing, splitting and formatting SQL statements.")
11548 (license license:bsd-3)))
11549
11550 (define-public python2-sqlparse
11551 (package-with-python2 python-sqlparse))
11552
11553 (define-public python-greenlet
11554 (package
11555 (name "python-greenlet")
11556 (version "0.4.11")
11557 (source (origin
11558 (method url-fetch)
11559 (uri (pypi-uri "greenlet" version))
11560 (sha256
11561 (base32
11562 "1xhik26j4f3kc4qw9xmj0c567rb5h1zryb4ijwqnqwwjvfhbv59h"))))
11563 (build-system python-build-system)
11564 (home-page "https://greenlet.readthedocs.io/")
11565 (synopsis "Lightweight in-process concurrent programming")
11566 (description
11567 "Greenlet package is a spin-off of Stackless, a version of CPython
11568 that supports micro-threads called \"tasklets\". Tasklets run
11569 pseudo-concurrently (typically in a single or a few OS-level threads) and
11570 are synchronized with data exchanges on \"channels\".")
11571 (license (list license:psfl license:expat))))
11572
11573 (define-public python2-greenlet
11574 (package-with-python2 python-greenlet))
11575
11576 (define-public python-gevent
11577 (package
11578 (name "python-gevent")
11579 (version "1.1.1")
11580 (source (origin
11581 (method url-fetch)
11582 (uri (pypi-uri "gevent" version))
11583 (sha256
11584 (base32
11585 "1smf3kvidpdiyi2c81alal74p2zm0clrm6xbyy6y1k9a3f2vkrbf"))
11586 (modules '((guix build utils)))
11587 (snippet
11588 '(begin
11589 ;; unbunding libev and c-ares
11590 (for-each delete-file-recursively '("libev" "c-ares"))
11591 ;; fixing testsuite
11592 (call-with-output-file "greentest/__init__.py" noop)
11593 (substitute* "greentest/testrunner.py"
11594 (("import util") "from . import util")
11595 (("from util import log") "from .util import log"))))))
11596 (build-system python-build-system)
11597 (propagated-inputs
11598 `(("python-greenlet" ,python-greenlet)))
11599 (native-inputs
11600 `(("python-six" ,python-six)))
11601 (inputs
11602 `(("c-ares" ,c-ares)
11603 ("libev" ,libev)))
11604 (home-page "http://www.gevent.org/")
11605 (synopsis "Coroutine-based network library")
11606 (description
11607 "gevent is a coroutine-based Python networking library that uses greenlet
11608 to provide a high-level synchronous API on top of the libev event loop.")
11609 (license license:expat)))
11610
11611 (define-public python2-gevent
11612 (package-with-python2 python-gevent))
11613
11614 (define-public python-geventhttpclient
11615 (package
11616 (name "python-geventhttpclient")
11617 (version "1.3.1")
11618 (source (origin
11619 (method url-fetch)
11620 (uri (pypi-uri "geventhttpclient" version))
11621 (sha256
11622 (base32
11623 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
11624 (modules '((guix build utils)))
11625 (snippet
11626 '(begin
11627 ;; Delete pre-compiled files.
11628 (for-each delete-file (find-files "src/geventhttpclient"
11629 ".*\\.pyc"))
11630 #t))))
11631 (build-system python-build-system)
11632 (arguments
11633 '(#:phases
11634 (modify-phases %standard-phases
11635 (add-after 'unpack 'delete-network-tests
11636 (lambda _
11637 (delete-file "src/geventhttpclient/tests/test_client.py")
11638 #t))
11639 (delete 'check)
11640 (add-after 'install 'check
11641 (lambda* (#:key inputs outputs #:allow-other-keys)
11642 (add-installed-pythonpath inputs outputs)
11643 (zero? (system* "py.test" "src/geventhttpclient/tests" "-v")))))))
11644 (native-inputs
11645 `(("python-pytest" ,python-pytest)))
11646 (propagated-inputs
11647 `(("python-certifi" ,python-certifi)
11648 ("python-gevent" ,python-gevent)
11649 ("python-six" ,python-six)))
11650 (home-page "https://github.com/gwik/geventhttpclient")
11651 (synopsis "HTTP client library for gevent")
11652 (description "@code{python-geventhttpclient} is a high performance,
11653 concurrent HTTP client library for python using @code{gevent}.")
11654 (license license:expat)))
11655
11656 (define-public python2-geventhttpclient
11657 (package-with-python2 python-geventhttpclient))
11658
11659 (define-public python-fastimport
11660 (package
11661 (name "python-fastimport")
11662 (version "0.9.6")
11663 (source
11664 (origin
11665 (method url-fetch)
11666 (uri (pypi-uri "fastimport" version))
11667 (sha256
11668 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11669 (build-system python-build-system)
11670 (home-page "https://github.com/jelmer/python-fastimport")
11671 (synopsis "VCS fastimport parser and generator in Python")
11672 (description "This package provides a parser for and generator of the Git
11673 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11674 format.")
11675 (license license:gpl2+)))
11676
11677 (define-public python2-fastimport
11678 (package-with-python2 python-fastimport))
11679
11680 (define-public python-twisted
11681 (package
11682 (name "python-twisted")
11683 (version "16.2.0")
11684 (source (origin
11685 (method url-fetch)
11686 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11687 (sha256
11688 (base32
11689 "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450"))))
11690 (build-system python-build-system)
11691 (arguments
11692 '(#:tests? #f)) ; FIXME: Some tests are failing.
11693 ;; #:phases
11694 ;; (modify-phases %standard-phases
11695 ;; (replace 'check
11696 ;; (lambda _
11697 ;; (zero? (system* "./bin/trial" "twisted")))))
11698 (propagated-inputs
11699 `(("python-zope-interface" ,python-zope-interface)))
11700 (home-page "https://twistedmatrix.com/")
11701 (synopsis "Asynchronous networking framework written in Python")
11702 (description
11703 "Twisted is an extensible framework for Python programming, with special
11704 focus on event-based network programming and multiprotocol integration.")
11705 (license license:expat)))
11706
11707 (define-public python2-twisted
11708 (package-with-python2 python-twisted))
11709
11710 (define-public python-pika
11711 (package
11712 (name "python-pika")
11713 (version "0.10.0")
11714 (source
11715 (origin
11716 (method url-fetch)
11717 (uri (pypi-uri "pika" version))
11718 (sha256
11719 (base32
11720 "0nb4h08di432lv7dy2v9kpwgk0w92f24sqc2hw2s9vwr5b8v8xvj"))))
11721 (build-system python-build-system)
11722 (native-inputs
11723 `(("python-pyev" ,python-pyev)
11724 ("python-tornado" ,python-tornado)
11725 ("python-twisted" ,python-twisted)))
11726 (home-page "https://pika.readthedocs.org")
11727 (synopsis "Pure Python AMQP Client Library")
11728 (description
11729 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11730 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11731 network support library.")
11732 (license license:bsd-3)))
11733
11734 (define-public python2-pika
11735 (package-with-python2 python-pika))
11736
11737 (define-public python-ply
11738 (package
11739 (name "python-ply")
11740 (version "3.9")
11741 (source
11742 (origin
11743 (method url-fetch)
11744 (uri (pypi-uri "ply" version))
11745 (sha256
11746 (base32
11747 "0gpl0yli3w03ipyqfrp3w5nf0iawhsq65anf5wwm2wf5p502jzhd"))))
11748 (build-system python-build-system)
11749 (home-page "http://www.dabeaz.com/ply/")
11750 (synopsis "Python Lex & Yacc")
11751 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11752 It uses LR parsing and does extensive error checking.")
11753 (license license:bsd-3)))
11754
11755 (define-public python2-ply
11756 (package-with-python2 python-ply))
11757
11758 (define-public python-tabulate
11759 (package
11760 (name "python-tabulate")
11761 (version "0.7.7")
11762 (source (origin
11763 (method url-fetch)
11764 (uri (pypi-uri "tabulate" version))
11765 (sha256
11766 (base32
11767 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11768 (build-system python-build-system)
11769 (arguments
11770 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11771 ;; and the latest release is not tagged in the upstream repository.
11772 '(#:tests? #f))
11773 (home-page "https://bitbucket.org/astanin/python-tabulate")
11774 (synopsis "Pretty-print tabular data")
11775 (description
11776 "Tabulate is a library and command-line utility to pretty-print tabular
11777 data in Python.")
11778 (license license:expat)))
11779
11780 (define-public python2-tabulate
11781 (package-with-python2 python-tabulate))
11782
11783 (define-public python-kazoo
11784 (package
11785 (name "python-kazoo")
11786 (version "2.2.1")
11787 (source
11788 (origin
11789 (method url-fetch)
11790 (uri (pypi-uri "kazoo" version))
11791 (sha256
11792 (base32
11793 "10pb864if9qi2pq9lfb9m8f7z7ss6rml80gf1d9h64lap5crjnjj"))))
11794 (build-system python-build-system)
11795 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11796 (propagated-inputs
11797 `(("python-six" ,python-six)))
11798 (home-page "https://kazoo.readthedocs.org")
11799 (synopsis "High-level Zookeeper client library")
11800 (description
11801 "Kazoo is a Python client library for the Apache Zookeeper distributed
11802 application service. It is designed to be easy to use and to avoid common
11803 programming errors.")
11804 (license license:asl2.0)))
11805
11806 (define-public python2-kazoo
11807 (package-with-python2 python-kazoo))
11808
11809 (define-public python-pykafka
11810 (package
11811 (name "python-pykafka")
11812 (version "2.4.0")
11813 (source (origin
11814 (method url-fetch)
11815 (uri (string-append
11816 "https://pypi.python.org/packages/8b/3e/"
11817 "384eeff406b06315738b62483fd2126c6e4f544167116b17cc04ea7d2a59/"
11818 "pykafka-" version ".tar.gz"))
11819 (sha256
11820 (base32
11821 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11822 (build-system python-build-system)
11823 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11824 (propagated-inputs
11825 `(("python-gevent" ,python-gevent)
11826 ("python-kazoo" ,python-kazoo)
11827 ("python-tabulate" ,python-tabulate)))
11828 (inputs
11829 `(("librdkafka" ,librdkafka)))
11830 (home-page "https://pykafka.readthedocs.io/")
11831 (synopsis "Apache Kafka client for Python")
11832 (description
11833 "PyKafka is a client for the Apache Kafka distributed messaging system.
11834 It includes Python implementations of Kafka producers and consumers, which
11835 are optionally backed by a C extension built on librdkafka.")
11836 (license license:asl2.0)))
11837
11838 (define-public python2-pykafka
11839 (package-with-python2 python-pykafka))
11840
11841 (define-public python-wcwidth
11842 (package
11843 (name "python-wcwidth")
11844 (version "0.1.7")
11845 (source
11846 (origin
11847 (method url-fetch)
11848 (uri (pypi-uri "wcwidth" version))
11849 (sha256
11850 (base32
11851 "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"))))
11852 (build-system python-build-system)
11853 (home-page "https://github.com/jquast/wcwidth")
11854 (synopsis "Measure number of terminal column cells of wide-character codes")
11855 (description "Wcwidth measures the number of terminal column cells of
11856 wide-character codes. It is useful for those implementing a terminal emulator,
11857 or programs that carefully produce output to be interpreted by one. It is a
11858 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11859 specified in POSIX.1-2001 and POSIX.1-2008.")
11860 (license license:expat)))
11861
11862 (define-public python2-wcwidth
11863 (package-with-python2 python-wcwidth))
11864
11865 (define-public python2-jsonrpclib
11866 (package
11867 (name "python2-jsonrpclib")
11868 (version "0.1.7")
11869 (source (origin
11870 (method url-fetch)
11871 (uri (string-append
11872 "https://pypi.python.org/packages/source/j/jsonrpclib/"
11873 "jsonrpclib-" version ".tar.gz"))
11874 (sha256
11875 (base32
11876 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11877 (build-system python-build-system)
11878 (arguments
11879 `(#:tests? #f
11880 #:python ,python-2))
11881 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11882 (synopsis "Implementation of JSON-RPC specification for Python")
11883 (description
11884 "This library is an implementation of the JSON-RPC specification.
11885 It supports both the original 1.0 specification, as well as the
11886 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11887 etc.")
11888 (license license:asl2.0)))
11889
11890 (define-public python-chai
11891 (package
11892 (name "python-chai")
11893 (version "1.1.1")
11894 (source (origin
11895 (method url-fetch)
11896 (uri (pypi-uri "chai" version))
11897 (sha256
11898 (base32
11899 "016kf3irrclpkpvcm7q0gmkfibq7jgy30a9v73pp42bq9h9a32bl"))))
11900 (build-system python-build-system)
11901 (home-page "https://github.com/agoragames/chai")
11902 (synopsis "Mocking framework for Python")
11903 (description
11904 "Chai provides an api for mocking, stubbing and spying your python
11905 objects, patterned after the Mocha library for Ruby.")
11906 (license license:bsd-3)))
11907
11908 (define-public python2-chai
11909 (package-with-python2 python-chai))
11910
11911 (define-public python-arrow
11912 (package
11913 (name "python-arrow")
11914 (version "0.8.0")
11915 (source (origin
11916 (method url-fetch)
11917 (uri (pypi-uri "arrow" version))
11918 (sha256
11919 (base32
11920 "1bz7hkdgpqcjs866y58z8jywpy7al0f4rxdr00bh2l5qddyw245j"))))
11921 (build-system python-build-system)
11922 (native-inputs
11923 `(;; For testing
11924 ("python-chai" ,python-chai)
11925 ("python-simplejson" ,python-simplejson)))
11926 (propagated-inputs
11927 `(("python-dateutil" ,python-dateutil)))
11928 (home-page "https://github.com/crsmithdev/arrow/")
11929 (synopsis "Dates and times for Python")
11930 (description
11931 "Arrow is a Python library to creating, manipulating, formatting and
11932 converting dates, times, and timestamps. It implements and updates the
11933 datetime type.")
11934 (license license:asl2.0)))
11935
11936 (define-public python2-arrow
11937 (package-with-python2 python-arrow))
11938
11939 (define-public python-inflection
11940 (package
11941 (name "python-inflection")
11942 (version "0.3.1")
11943 (source
11944 (origin (method url-fetch)
11945 (uri (pypi-uri "inflection" version))
11946 (sha256
11947 (base32
11948 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11949 (build-system python-build-system)
11950 (native-inputs
11951 `(("python-pytest" ,python-pytest)))
11952 (home-page "https://github.com/jpvanhal/inflection")
11953 (synopsis "Python string transformation library")
11954 (description
11955 "Inflection is a string transformation library. It singularizes
11956 and pluralizes English words, and transforms strings from CamelCase to
11957 underscored string.")
11958 (license license:expat)))
11959
11960 (define-public python2-inflection
11961 (package-with-python2 python-inflection))
11962
11963 (define-public python-pylev
11964 (package
11965 (name "python-pylev")
11966 (version "1.3.0")
11967 (source (origin
11968 (method url-fetch)
11969 (uri (pypi-uri "pylev" version))
11970 (sha256
11971 (base32
11972 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11973 (build-system python-build-system)
11974 (home-page "https://github.com/toastdriven/pylev")
11975 (synopsis "Levenshtein distance implementation in Python")
11976 (description "Pure Python Levenshtein implementation, based off the
11977 Wikipedia code samples at
11978 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11979 (license license:bsd-3)))
11980
11981 (define-public python2-pylev
11982 (package-with-python2 python-pylev))
11983
11984 (define-public python-cleo
11985 (package
11986 (name "python-cleo")
11987 (version "0.6.1")
11988 (source (origin
11989 (method url-fetch)
11990 (uri (pypi-uri "cleo" version))
11991 (sha256
11992 (base32
11993 "0q1cf0szr0d54am4pypzwdnm74zpladdsinad94c2fz5i06fdpf7"))))
11994 (build-system python-build-system)
11995 (native-inputs
11996 `(;; For testing
11997 ("python-mock" ,python-mock)
11998 ("python-pytest-mock" ,python-pytest-mock)
11999 ("python-pytest" ,python-pytest)))
12000 (propagated-inputs
12001 `(("python-backpack" ,python-backpack)
12002 ("python-pastel" ,python-pastel)
12003 ("python-pylev" ,python-pylev)))
12004 (home-page "https://github.com/sdispater/cleo")
12005 (synopsis "Command-line arguments library for Python")
12006 (description
12007 "Cleo allows you to create command-line commands with signature in
12008 docstring and colored output.")
12009 (license license:expat)))
12010
12011 (define-public python2-cleo
12012 (package-with-python2 python-cleo))
12013
12014 (define-public python-lazy-object-proxy
12015 (package
12016 (name "python-lazy-object-proxy")
12017 (version "1.2.2")
12018 (source (origin
12019 (method url-fetch)
12020 (uri (pypi-uri "lazy-object-proxy" version))
12021 (sha256
12022 (base32
12023 "0s22aqqkdscyh8sjspyyax7qa1aiz8p4midrnyf39717fhfczm6x"))))
12024 (build-system python-build-system)
12025 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
12026 (synopsis "Lazy object proxy for python")
12027 (description
12028 "Lazy object proxy is an object that wraps a callable but defers the call
12029 until the object is actually required, and caches the result of said call.")
12030 (license license:bsd-2)))
12031
12032 (define-public python2-lazy-object-proxy
12033 (package-with-python2 python-lazy-object-proxy))
12034
12035 (define-public python-dnspython
12036 (package
12037 (name "python-dnspython")
12038 (version "1.15.0")
12039 (source (origin
12040 (method url-fetch)
12041 (uri (string-append "http://www.dnspython.org/kits/"
12042 version "/dnspython-" version ".tar.gz"))
12043 (sha256
12044 (base32
12045 "0jr4v2pd90i6l1xxbss2m05psbjaxvyvvvpq44wycijpfgjqln8i"))))
12046 (build-system python-build-system)
12047 (arguments '(#:tests? #f)) ; XXX: requires internet access
12048 (home-page "http://www.dnspython.org")
12049 (synopsis "DNS toolkit for Python")
12050 (description
12051 "dnspython is a DNS toolkit for Python. It supports almost all record
12052 types. It can be used for queries, zone transfers, and dynamic updates.
12053 It supports TSIG authenticated messages and EDNS0.")
12054 (license license:expat)))
12055
12056 (define-public python2-dnspython
12057 (package-with-python2 python-dnspython))
12058
12059 (define-public python-email-validator
12060 (package
12061 (name "python-email-validator")
12062 (version "1.0.2")
12063 (source
12064 (origin (method url-fetch)
12065 (uri (pypi-uri "email_validator" version))
12066 (sha256
12067 (base32
12068 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
12069 (build-system python-build-system)
12070 (arguments
12071 '(#:phases
12072 (modify-phases %standard-phases
12073 (add-before 'build 'use-dnspython
12074 (lambda _
12075 (substitute* "setup.py"
12076 (("dnspython3") "dnspython"))
12077 #t)))))
12078 (propagated-inputs
12079 `(("python-dnspython" ,python-dnspython)
12080 ("python-idna" ,python-idna)))
12081 (home-page "https://github.com/JoshData/python-email-validator")
12082 (synopsis "Email address validation library for Python")
12083 (description
12084 "This library validates email address syntax and deliverability.")
12085 (license license:cc0)))
12086
12087 (define-public python2-email-validator
12088 (package-with-python2 python-email-validator))
12089
12090 (define-public python-ukpostcodeparser
12091 (package
12092 (name "python-ukpostcodeparser")
12093 (version "1.0.3")
12094 (source (origin
12095 (method url-fetch)
12096 (uri (pypi-uri "UkPostcodeParser" version))
12097 (sha256
12098 (base32
12099 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12100 (build-system python-build-system)
12101 (home-page "https://github.com/hamstah/ukpostcodeparser")
12102 (synopsis "UK Postcode parser for Python")
12103 (description
12104 "This library provides the @code{parse_uk_postcode} function for
12105 parsing UK postcodes.")
12106 (license license:expat)))
12107
12108 (define-public python2-ukpostcodeparser
12109 (package-with-python2 python-ukpostcodeparser))
12110
12111 (define-public python-faker
12112 (package
12113 (name "python-faker")
12114 (version "0.7.9")
12115 (source (origin
12116 (method url-fetch)
12117 (uri (pypi-uri "Faker" version))
12118 (sha256
12119 (base32
12120 "1fh2p2yz0fsdr4fqwxgddwbvfb6qn6vp8yx0qwqzra27yq5d1wsm"))
12121 (patches
12122 (search-patches "python-faker-fix-build-32bit.patch"))
12123 (modules '((guix build utils)))
12124 (snippet
12125 '(begin
12126 (for-each delete-file (find-files "." "\\.pyc$"))
12127 #t))))
12128 (build-system python-build-system)
12129 (arguments
12130 '(#:phases
12131 (modify-phases %standard-phases
12132 (replace 'check
12133 (lambda _
12134 (zero? (system* "python" "-m" "unittest" "-v" "tests")))))))
12135 (native-inputs
12136 `(;; For testing
12137 ("python-email-validator" ,python-email-validator)
12138 ("python-mock" ,python-mock)
12139 ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
12140 (propagated-inputs
12141 `(("python-dateutil" ,python-dateutil)
12142 ("python-six" ,python-six)))
12143 (home-page "https://github.com/joke2k/faker")
12144 (synopsis "Python package that generates fake data")
12145 (description
12146 "Faker is a Python package that generates fake data such as names,
12147 addresses, and phone numbers.")
12148 (license license:expat)
12149 (properties `((python2-variant . ,(delay python2-faker))))))
12150
12151 (define-public python2-faker
12152 (let ((base (package-with-python2 (strip-python2-variant
12153 python-faker))))
12154 (package
12155 (inherit base)
12156 (propagated-inputs
12157 `(("python2-ipaddress" ,python2-ipaddress)
12158 ,@(package-propagated-inputs base))))))
12159
12160 (define-public python-pyaml
12161 (package
12162 (name "python-pyaml")
12163 (version "17.7.2")
12164 (source (origin
12165 (method url-fetch)
12166 (uri (pypi-uri "pyaml" version))
12167 (sha256
12168 (base32
12169 "132grrw0ajq4nrappi3ldbkb952k7yn9b6c7csi2rmvzm1g6ppp2"))))
12170 (build-system python-build-system)
12171 (native-inputs
12172 `(("python-unidecode" ,python-unidecode)))
12173 (propagated-inputs
12174 `(("python-pyyaml" ,python-pyyaml)))
12175 (home-page "https://github.com/mk-fg/pretty-yaml")
12176 (synopsis "YAML pretty-print library for Python")
12177 (description
12178 "pyaml is a PyYAML based python module to produce pretty and readable
12179 YAML-serialized data.")
12180 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/"))))
12181
12182 (define-public python2-pyaml
12183 (package-with-python2 python-pyaml))
12184
12185 (define-public python-backpack
12186 (package
12187 (name "python-backpack")
12188 (version "0.1")
12189 (source
12190 (origin
12191 (method url-fetch)
12192 (uri (pypi-uri "backpack" version))
12193 (sha256
12194 (base32
12195 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12196 (build-system python-build-system)
12197 (native-inputs
12198 `(("python-pytest" ,python-pytest)
12199 ("python-nose" ,python-nose)))
12200 (propagated-inputs
12201 `(("python-simplejson" ,python-simplejson)))
12202 (home-page "https://github.com/sdispater/backpack")
12203 (synopsis "Utilities for working with Python collections")
12204 (description "Backpack provides some useful utilities for working with
12205 collections of data.")
12206 (license license:expat)))
12207
12208 (define-public python2-backpack
12209 (package-with-python2 python-backpack))
12210
12211 (define-public python-flexmock
12212 (package
12213 (name "python-flexmock")
12214 (version "0.10.2")
12215 (source (origin
12216 (method url-fetch)
12217 (uri (pypi-uri "flexmock" version))
12218 (sha256
12219 (base32
12220 "0arc6njvs6i9v9hgvzk5m50296g7zy5m9d7pyb43vdsdgxrci5gy"))))
12221 (build-system python-build-system)
12222 (home-page "https://flexmock.readthedocs.org")
12223 (synopsis "Testing library for Python")
12224 (description
12225 "flexmock is a testing library for Python that makes it easy to create
12226 mocks, stubs and fakes.")
12227 (license license:bsd-3)))
12228
12229 (define-public python2-flexmock
12230 (package-with-python2 python-flexmock))
12231
12232 (define-public python-prompt-toolkit
12233 (package
12234 (name "python-prompt-toolkit")
12235 (version "1.0.9")
12236 (source
12237 (origin
12238 (method url-fetch)
12239 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12240 (sha256
12241 (base32
12242 "172r15k9kwdw2lnajvpz1632dd16nqz1kcal1p0lq5ywdarj6rfd"))))
12243 (build-system python-build-system)
12244 (arguments
12245 '(#:tests? #f)) ; The test suite uses some Windows-specific data types.
12246 (propagated-inputs
12247 `(("python-wcwidth" ,python-wcwidth)
12248 ("python-six" ,python-six)
12249 ("python-pygments" ,python-pygments)))
12250 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
12251 (synopsis "Library for building command line interfaces in Python")
12252 (description
12253 "Prompt-Toolkit is a library for building interactive command line
12254 interfaces in Python. It's like GNU Readline but it also features syntax
12255 highlighting while typing, out-of-the-box multi-line input editing, advanced
12256 code completion, incremental search, support for Chinese double-width
12257 characters, mouse support, and auto suggestions.")
12258 (license license:bsd-3)))
12259
12260 (define-public python2-prompt-toolkit
12261 (package-with-python2 python-prompt-toolkit))
12262
12263 (define-public python-jedi
12264 (package
12265 (name "python-jedi")
12266 (version "0.9.0")
12267 (source
12268 (origin
12269 (method url-fetch)
12270 (uri (pypi-uri "jedi" version))
12271 (sha256
12272 (base32
12273 "0c8x962ynpx001fdvp07m2q5jk4igkxbj3rmnydavphvlgxijk1v"))))
12274 (build-system python-build-system)
12275 (arguments
12276 ;; FIXME: One test fails (use "py.test" instead of 'setup.py test').
12277 '(#:tests? #f))
12278 (native-inputs
12279 `(("python-pytest" ,python-pytest)))
12280 (home-page "https://github.com/davidhalter/jedi")
12281 (synopsis
12282 "Autocompletion for Python that can be used for text editors")
12283 (description
12284 "Jedi is an autocompletion tool for Python that can be used for text editors.")
12285 (license license:expat)))
12286
12287 (define-public python2-jedi
12288 (package-with-python2 python-jedi))
12289
12290 (define-public ptpython
12291 (package
12292 (name "ptpython")
12293 (version "0.34")
12294 (source (origin
12295 (method url-fetch)
12296 (uri (pypi-uri "ptpython" version))
12297 (sha256
12298 (base32
12299 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12300 (build-system python-build-system)
12301 (arguments
12302 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12303 (propagated-inputs
12304 `(("python-docopt" ,python-docopt)
12305 ("python-jedi" ,python-jedi)
12306 ("python-prompt-toolkit" ,python-prompt-toolkit)
12307 ("python-pygments" ,python-pygments)))
12308 (home-page "https://github.com/jonathanslenders/ptpython")
12309 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12310 (description
12311 "ptpython is a Python read-eval-print loop with IDE-like features.
12312 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12313 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12314 etc.")
12315 (license license:bsd-3)
12316 (properties `((python2-variant . ,(delay ptpython-2))))))
12317
12318 (define-public ptpython-2
12319 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12320 (package
12321 (inherit base)
12322 (name "ptpython2"))))
12323
12324 (define-public python-requests-oauthlib
12325 (package
12326 (name "python-requests-oauthlib")
12327 (version "0.6.2")
12328 (source
12329 (origin
12330 (method url-fetch)
12331 (uri (pypi-uri "requests-oauthlib" version))
12332 (sha256
12333 (base32
12334 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
12335 (build-system python-build-system)
12336 (arguments
12337 `(#:phases
12338 (modify-phases %standard-phases
12339 ;; removes tests that require network access
12340 (add-before 'check 'pre-check
12341 (lambda _
12342 (delete-file "tests/test_core.py")
12343 #t)))))
12344 (native-inputs
12345 `(("python-requests-mock" ,python-requests-mock)
12346 ("python-mock" ,python-mock)))
12347 (propagated-inputs
12348 `(("python-oauthlib" ,python-oauthlib)
12349 ("python-requests" ,python-requests)))
12350 (home-page
12351 "https://github.com/requests/requests-oauthlib")
12352 (synopsis
12353 "OAuthlib authentication support for Requests")
12354 (description
12355 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
12356 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
12357 (license license:isc)))
12358
12359 (define-public python2-requests-oauthlib
12360 (package-with-python2 python-requests-oauthlib))
12361
12362 (define-public python-stem
12363 (package
12364 (name "python-stem")
12365 (version "1.5.4")
12366 (source
12367 (origin
12368 (method url-fetch)
12369 (uri (pypi-uri "stem" version))
12370 (sha256
12371 (base32
12372 "1j7pnblrn0yr6jmxvsq6y0ihmxmj5x50jl2n2606w67f6wq16j9n"))))
12373 (build-system python-build-system)
12374 (arguments
12375 `(#:phases
12376 (modify-phases %standard-phases
12377 (replace 'check
12378 (lambda _
12379 (zero? (system* "./run_tests.py" "--unit")))))))
12380 (native-inputs
12381 `(("python-mock" ,python-mock)
12382 ("python-pep8" ,python-pep8)
12383 ("python-pyflakes" ,python-pyflakes)))
12384 (home-page "https://stem.torproject.org/")
12385 (synopsis
12386 "Python controller library that allows applications to interact with Tor")
12387 (description
12388 "Stem is a Python controller library for Tor. With it you can use Tor's
12389 control protocol to script against the Tor process and read descriptor data
12390 relays publish about themselves.")
12391 (license license:lgpl3)))
12392
12393 (define-public python2-stem
12394 (package-with-python2 python-stem))
12395
12396 (define-public python-pyserial
12397 (package
12398 (name "python-pyserial")
12399 (version "3.1.1")
12400 (source
12401 (origin
12402 (method url-fetch)
12403 (uri (pypi-uri "pyserial" version))
12404 (sha256
12405 (base32
12406 "0k1nfdrxxkdlv4zgaqsdv8li0pj3gbh2pyxw8q2bsg6f9490amyn"))))
12407 (build-system python-build-system)
12408 (arguments
12409 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12410 ;; #:phases
12411 ;; (modify-phases %standard-phases
12412 ;; (replace 'check
12413 ;; (lambda _
12414 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12415 (home-page
12416 "https://github.com/pyserial/pyserial")
12417 (synopsis "Python Serial Port Bindings")
12418 (description "@code{pyserial} provide serial port bindings for Python. It
12419 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12420 and/or Xon/Xoff. The port is accessed in RAW mode.")
12421 (license license:bsd-3)))
12422
12423 (define-public python2-pyserial
12424 (package-with-python2 python-pyserial))
12425
12426 (define-public python-kivy
12427 (package
12428 (name "python-kivy")
12429 (version "1.9.1")
12430 (source
12431 (origin
12432 (method url-fetch)
12433 (uri (pypi-uri "kivy" version))
12434 (file-name (string-append name "-" version ".tar.gz"))
12435 (sha256
12436 (base32
12437 "0zk3g1j1z0lzcm9d0k1lprrs95zr8n8k5pdg3p5qlsn26jz4bg19"))))
12438 (build-system python-build-system)
12439 (arguments
12440 `(#:tests? #f ; Tests require many optional packages
12441 #:phases
12442 (modify-phases %standard-phases
12443 (replace 'build (lambda _ (zero? (system* "make" "force"))))
12444 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12445 (lambda* (#:key inputs #:allow-other-keys)
12446 (setenv "KIVY_SDL2_PATH"
12447 (string-append (assoc-ref inputs "sdl-union")
12448 "/include/SDL2"))
12449 #t)))))
12450 (native-inputs
12451 `(("pkg-config" ,pkg-config)
12452 ("python-cython" ,python-cython)))
12453 (inputs
12454 `(("gstreamer" ,gstreamer)
12455 ("mesa" ,mesa)
12456 ("sdl-union"
12457 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12458 (home-page "http://kivy.org")
12459 (synopsis
12460 "Multitouch application framework")
12461 (description
12462 "A software library for rapid development of
12463 hardware-accelerated multitouch applications.")
12464 (license license:expat)))
12465
12466 (define-public python2-kivy
12467 (package-with-python2 python-kivy))
12468
12469 (define-public python-kivy-next
12470 (let ((commit "a988c5e7a47da56263ff39514264a3de516ef2fe")
12471 (revision "1"))
12472 (package (inherit python-kivy)
12473 (name "python-kivy-next")
12474 (version (string-append "1.9.1-" revision "."
12475 (string-take commit 7)))
12476 (source
12477 (origin
12478 (method git-fetch)
12479 (uri (git-reference
12480 (url "https://github.com/kivy/kivy")
12481 (commit commit)))
12482 (file-name (string-append name "-" version "-checkout"))
12483 (sha256
12484 (base32
12485 "0jk92b4a8l7blkvkgkjihk171s0dfnq582cckff5srwc8kal5m0p")))))))
12486
12487 (define-public python2-kivy-next
12488 (package-with-python2 python-kivy-next))
12489
12490 (define-public python-binaryornot
12491 (package
12492 (name "python-binaryornot")
12493 (version "0.4.0")
12494 (source (origin
12495 (method url-fetch)
12496 (uri (pypi-uri "binaryornot" version))
12497 (sha256
12498 (base32
12499 "1j4f51dxic39mdwf6alj7gd769wy6mhk916v031wjali51xkh3xb"))))
12500 (build-system python-build-system)
12501 (propagated-inputs
12502 `(("python-chardet" ,python-chardet)
12503 ("python-hypothesis" ,python-hypothesis)))
12504 (home-page "https://github.com/audreyr/binaryornot")
12505 (synopsis "Package to check if a file is binary or text")
12506 (description "Ultra-lightweight pure Python package to check if a file is
12507 binary or text.")
12508 (license license:bsd-3)
12509 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12510
12511 (define-public python2-binaryornot
12512 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12513 (package (inherit base)
12514 (propagated-inputs
12515 `(("python2-enum34" ,python2-enum34)
12516 ,@(package-propagated-inputs base))))))
12517
12518 (define-public python-nltk
12519 (package
12520 (name "python-nltk")
12521 (version "3.2.1")
12522 (source (origin
12523 (method url-fetch)
12524 (uri (pypi-uri "nltk" version))
12525 (sha256
12526 (base32
12527 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12528 (build-system python-build-system)
12529 (arguments
12530 '(;; The tests require some extra resources to be downloaded.
12531 ;; TODO Try packaging these resources.
12532 #:tests? #f))
12533 (home-page "http://nltk.org/")
12534 (synopsis "Natural Language Toolkit")
12535 (description "It provides interfaces to over 50 corpora and lexical
12536 resources such as WordNet, along with a suite of text processing libraries
12537 for classification, tokenization, stemming, tagging, parsing, and semantic
12538 reasoning, wrappers for natural language processing libraries.")
12539 (license license:asl2.0)))
12540
12541 (define-public python2-nltk
12542 (package-with-python2 python-nltk))
12543
12544 (define-public python-pymongo
12545 (package
12546 (name "python-pymongo")
12547 (version "3.3.0")
12548 (source (origin
12549 (method url-fetch)
12550 (uri (pypi-uri "pymongo" version))
12551 (sha256
12552 (base32
12553 "07mra6w86wjqy4lx5fvimidjhhfzd562gfjn8grsnbv2q8pk0i9x"))))
12554 (build-system python-build-system)
12555 (propagated-inputs
12556 `(("python-certifi" ,python-certifi)))
12557 (home-page "https://github.com/mongodb/mongo-python-driver")
12558 (synopsis "Python driver for MongoDB")
12559 (description "Python driver for MongoDB.")
12560 (license license:asl2.0)))
12561
12562 (define-public python2-pymongo
12563 (package-with-python2 python-pymongo))
12564
12565 (define-public python-sh
12566 (package
12567 (name "python-sh")
12568 (version "1.11")
12569 (source (origin
12570 (method url-fetch)
12571 (uri (pypi-uri "sh" version))
12572 (sha256
12573 (base32
12574 "192r0mpv6dmkysjzhc43ddffiwb5g7c76bgr1mb1z2xz9awbj3sr"))))
12575 (build-system python-build-system)
12576 (arguments
12577 `(#:tests? #f)) ; no tests
12578 (home-page "https://github.com/amoffat/sh")
12579 (synopsis "Python subprocess interface")
12580 (description "Abstracts process invocation by providing a function
12581 interface for programs.")
12582 (license license:expat)))
12583
12584 (define-public python2-sh
12585 (package-with-python2 python-sh))
12586
12587 (define-public python-consul
12588 (package
12589 (name "python-consul")
12590 (version "0.6.1")
12591 (source
12592 (origin
12593 (method url-fetch)
12594 (uri (pypi-uri "python-consul" version))
12595 (sha256
12596 (base32
12597 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12598 (build-system python-build-system)
12599 (native-inputs
12600 `(("python-pytest" ,python-pytest)))
12601 (propagated-inputs
12602 `(("python-requests" ,python-requests)
12603 ("python-six" ,python-six)))
12604 (home-page "https://github.com/cablehead/python-consul")
12605 (synopsis "Python client for Consul")
12606 (description
12607 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12608 discovery, monitoring and configuration.")
12609 (license license:expat)))
12610
12611 (define-public python2-consul
12612 (package-with-python2 python-consul))
12613
12614 (define-public python-schematics
12615 (package
12616 (name "python-schematics")
12617 (version "1.1.1")
12618 (source
12619 (origin
12620 (method url-fetch)
12621 (uri (string-append
12622 "https://github.com/schematics/schematics/archive/v" version ".tar.gz"))
12623 (file-name (string-append name "-" version ".tar.gz"))
12624 (sha256
12625 (base32
12626 "19v1i69bf3bzarfxmbv0v6ivpcn758x3shvbiy9l2hy0lvqwnp6l"))))
12627 (build-system python-build-system)
12628 (propagated-inputs
12629 `(("python-six" ,python-six)))
12630 (arguments
12631 `(#:tests? #f)) ; requires a bunch of not very nice packages with fixed
12632 ; version requirements (eg python-coveralls)
12633 (home-page "https://github.com/schematics/schematics")
12634 (synopsis "Python Data Structures for Humans")
12635 (description "Python Data Structures for Humans.")
12636 (license license:bsd-3)))
12637
12638 (define-public python2-schematics
12639 (package-with-python2 python-schematics))
12640
12641 (define-public python-publicsuffix
12642 (package
12643 (name "python-publicsuffix")
12644 (version "1.1.0")
12645 (source (origin
12646 (method url-fetch)
12647 (uri (pypi-uri "publicsuffix" version))
12648 (sha256
12649 (base32
12650 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
12651 (build-system python-build-system)
12652 (arguments
12653 `(#:tests? #f)) ; tests use the internet
12654 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
12655 (synopsis "Get suffix for a domain name")
12656 (description "Get a public suffix for a domain name using the Public Suffix
12657 List.")
12658 (license license:expat)))
12659
12660 (define-public python2-publicsuffix
12661 (package-with-python2 python-publicsuffix))
12662
12663 (define-public python-publicsuffix2
12664 (package
12665 (name "python-publicsuffix2")
12666 (version "2.20160818")
12667 (source
12668 (origin
12669 (method url-fetch)
12670 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
12671 (sha256
12672 (base32
12673 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
12674 (build-system python-build-system)
12675 (arguments
12676 '(#:tests? #f)) ; The test suite requires network access.
12677 (home-page "https://github.com/pombredanne/python-publicsuffix2")
12678 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
12679 (description "Get a public suffix for a domain name using the Public Suffix
12680 List. Forked from and using the same API as the publicsuffix package.")
12681 (license (list license:expat license:mpl2.0))))
12682
12683 (define-public python2-publicsuffix2
12684 (package-with-python2 python-publicsuffix2))
12685
12686 (define-public python-url
12687 (package
12688 (name "python-url")
12689 (version "0.2.0")
12690 (source (origin
12691 (method url-fetch)
12692 (uri (pypi-uri "url" version))
12693 (sha256
12694 (base32
12695 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
12696 (build-system python-build-system)
12697 (propagated-inputs
12698 `(("python-publicsuffix" ,python-publicsuffix)))
12699 (native-inputs
12700 `(("python-coverage" ,python-coverage)
12701 ("python-nose" ,python-nose)))
12702 (arguments
12703 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
12704 (home-page "https://github.com/seomoz/url-py")
12705 (synopsis "URL Parsing")
12706 (description "Library for parsing urls.")
12707 (license license:expat)
12708 (properties `((python2-variant . ,(delay python2-url))))))
12709
12710 (define-public python2-url
12711 (let ((base (package-with-python2 (strip-python2-variant python-url))))
12712 (package (inherit base)
12713 (propagated-inputs
12714 `(("python2-publicsuffix" ,python2-publicsuffix))))))
12715
12716 (define-public python-freezegun
12717 (package
12718 (name "python-freezegun")
12719 (version "0.3.8")
12720 (source
12721 (origin
12722 (method url-fetch)
12723 (uri (pypi-uri "freezegun" version))
12724 (sha256
12725 (base32
12726 "1sf38d3ibv1jhhvr52x7dhrsiyqk1hm165dfv8w8wh0fhmgxg151"))))
12727 (build-system python-build-system)
12728 (native-inputs
12729 `(("python-mock" ,python-mock)
12730 ("python-nose" ,python-nose)
12731 ("python-coverage" ,python-coverage)))
12732 (propagated-inputs
12733 `(("python-six" ,python-six)
12734 ("python-dateutil" ,python-dateutil)))
12735 (arguments
12736 `(#:phases (modify-phases %standard-phases
12737 ;; The tests are normally executed via `make test`, but the PyPi
12738 ;; package does not include the Makefile.
12739 (replace 'check
12740 (lambda _
12741 (zero? (system* "nosetests" "./tests/")))))))
12742 (home-page "https://github.com/spulec/freezegun")
12743 (synopsis "Test utility for mocking the datetime module")
12744 (description
12745 "FreezeGun is a library that allows your python tests to travel through
12746 time by mocking the datetime module.")
12747 (license license:asl2.0)))
12748
12749 (define-public python2-freezegun
12750 (package-with-python2 python-freezegun))
12751
12752
12753 (define-public python-odfpy
12754 (package
12755 (name "python-odfpy")
12756 (version "1.3.3")
12757 (source (origin
12758 (method url-fetch)
12759 (uri (pypi-uri "odfpy" version))
12760 (sha256
12761 (base32
12762 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12763 (arguments
12764 `(#:modules ((srfi srfi-1)
12765 (guix build python-build-system)
12766 (guix build utils))
12767 #:phases
12768 (modify-phases %standard-phases
12769 (replace 'check
12770 ;; The test runner invokes python2 and python3 for test*.py.
12771 ;; To avoid having both in inputs, we replicate it here.
12772 (lambda _
12773 (every (lambda (test-file)
12774 (zero? (system* "python" test-file)))
12775 (find-files "tests" "^test.*\\.py$")))))))
12776 (build-system python-build-system)
12777 (home-page "https://github.com/eea/odfpy")
12778 (synopsis "Python API and tools to manipulate OpenDocument files")
12779 (description "Collection of libraries and utility programs written in
12780 Python to manipulate OpenDocument 1.2 files.")
12781 (license
12782 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12783 ;; number of files with other licenses.
12784 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12785
12786 (define-public python2-odfpy
12787 (package-with-python2 python-odfpy))
12788
12789 (define-public python-cachecontrol
12790 (package
12791 (name "python-cachecontrol")
12792 (version "0.11.6")
12793 (source
12794 (origin
12795 (method url-fetch)
12796 ;; Pypi does not have tests.
12797 (uri (string-append
12798 "https://github.com/ionrock/cachecontrol/archive/v"
12799 version ".tar.gz"))
12800 (file-name (string-append name "-" version ".tar.gz"))
12801 (sha256
12802 (base32
12803 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
12804 (build-system python-build-system)
12805 (arguments
12806 `(#:phases
12807 (modify-phases %standard-phases
12808 (replace 'check
12809 (lambda _
12810 ;; Drop test that requires internet access.
12811 (delete-file "tests/test_regressions.py")
12812 (setenv "PYTHONPATH"
12813 (string-append (getcwd) "/build/lib:"
12814 (getenv "PYTHONPATH")))
12815 (zero? (system* "py.test" "-vv")))))))
12816 (native-inputs
12817 `(("python-pytest" ,python-pytest)
12818 ("python-redis" ,python-redis)
12819 ("python-webtest" ,python-webtest)
12820 ("python-mock" ,python-mock)))
12821 (propagated-inputs
12822 `(("python-requests" ,python-requests)
12823 ("python-lockfile" ,python-lockfile)))
12824 (home-page "https://github.com/ionrock/cachecontrol")
12825 (synopsis "The httplib2 caching algorithms for use with requests")
12826 (description "CacheControl is a port of the caching algorithms in
12827 @code{httplib2} for use with @code{requests} session objects.")
12828 (license license:asl2.0)))
12829
12830 (define-public python2-cachecontrol
12831 (package-with-python2 python-cachecontrol))
12832
12833 (define-public python-lit
12834 (package
12835 (name "python-lit")
12836 (version "0.5.0")
12837 (source
12838 (origin
12839 (method url-fetch)
12840 (uri (pypi-uri "lit" version))
12841 (sha256
12842 (base32
12843 "135m2b9cwih85g66rjggavck328z7lj37srgpq3jxszbg0g2b91y"))))
12844 (build-system python-build-system)
12845 (home-page "http://llvm.org/")
12846 (synopsis "LLVM Software Testing Tool")
12847 (description "@code{lit} is a portable tool for executing LLVM and Clang
12848 style test suites, summarizing their results, and providing indication of
12849 failures.")
12850 (license license:ncsa)))
12851
12852 (define-public python2-lit
12853 (package-with-python2 python-lit))
12854
12855 (define-public python-pytest-pep8
12856 (package
12857 (name "python-pytest-pep8")
12858 (version "1.0.6")
12859 (source (origin
12860 (method url-fetch)
12861 (uri (pypi-uri "pytest-pep8" version))
12862 (sha256
12863 (base32
12864 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
12865 (build-system python-build-system)
12866 (arguments
12867 `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
12868 (native-inputs
12869 `(("python-pytest" ,python-pytest)))
12870 (propagated-inputs
12871 `(("python-pep8" ,python-pep8)))
12872 (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
12873 (synopsis "Py.test plugin to check PEP8 requirements")
12874 (description "Pytest plugin for checking PEP8 compliance.")
12875 (license license:expat)))
12876
12877 (define-public python2-pytest-pep8
12878 (package-with-python2 python-pytest-pep8))
12879
12880 (define-public python-pytest-flakes
12881 (package
12882 (name "python-pytest-flakes")
12883 (version "1.0.1")
12884 (source (origin
12885 (method url-fetch)
12886 (uri (pypi-uri "pytest-flakes" version))
12887 (sha256
12888 (base32
12889 "0flag3n33kbhyjrhzmq990rvg4yb8hhhl0i48q9hw0ll89jp28lw"))))
12890 (build-system python-build-system)
12891 (arguments
12892 `(#:phases
12893 (modify-phases %standard-phases
12894 (delete 'check)
12895 (add-after 'install 'check
12896 (lambda* (#:key outputs inputs #:allow-other-keys)
12897 ;; It's easier to run tests after install.
12898 ;; Make installed package available for running the tests
12899 (add-installed-pythonpath inputs outputs)
12900 (zero? (system* "py.test" "-vv")))))))
12901 (native-inputs
12902 `(("python-coverage" ,python-coverage)
12903 ("python-pytest" ,python-pytest)
12904 ("python-pytest-cache" ,python-pytest-cache)
12905 ("python-pytest-pep8" ,python-pytest-pep8)))
12906 (propagated-inputs
12907 `(("python-pyflakes" ,python-pyflakes)))
12908 (home-page "https://github.com/fschulze/pytest-flakes")
12909 (synopsis "Py.test plugin to check source code with pyflakes")
12910 (description "Pytest plugin for checking Python source code with pyflakes.")
12911 (license license:expat)))
12912
12913 (define-public python2-pytest-flakes
12914 (package-with-python2 python-pytest-flakes))
12915
12916 (define-public python-natsort
12917 (package
12918 (name "python-natsort")
12919 (version "5.0.2")
12920 (source (origin
12921 (method url-fetch)
12922 (uri (pypi-uri "natsort" version))
12923 (sha256
12924 (base32
12925 "0bh6j0l8iapjnsgg3bs6q075cnzjl6zw1vlgqyv3qrygm2cxypkn"))))
12926 (build-system python-build-system)
12927 (arguments
12928 `(#:phases
12929 (modify-phases %standard-phases
12930 (add-before 'check 'set-cachedir
12931 ;; Tests require write access to $HOME by default
12932 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
12933 (native-inputs
12934 `(("python-hypothesis" ,python-hypothesis)
12935 ("python-pytest-cache" ,python-pytest-cache)
12936 ("python-pytest-cov" ,python-pytest-cov)
12937 ("python-pytest-flakes" ,python-pytest-flakes)
12938 ("python-pytest-pep8" ,python-pytest-pep8)))
12939 (propagated-inputs ; TODO: Add python-fastnumbers.
12940 `(("python-pyicu" ,python-pyicu)))
12941 (home-page "https://github.com/SethMMorton/natsort")
12942 (synopsis "Natural sorting for python and shell")
12943 (description
12944 "Natsort lets you apply natural sorting on lists instead of
12945 lexicographical. If you use the built-in @code{sorted} method in python
12946 on a list such as @code{['a20', 'a9', 'a1', 'a4', 'a10']}, it would be
12947 returned as @code{['a1', 'a10', 'a20', 'a4', 'a9']}. Natsort provides a
12948 function @code{natsorted} that identifies numbers and sorts them separately
12949 from strings. It can also sort version numbers, real numbers, mixed types
12950 and more, and comes with a shell command @command{natsort} that exposes this
12951 functionality in the command line.")
12952 (license license:expat)
12953 (properties `((python2-variant . ,(delay python2-natsort))))))
12954
12955 (define-public python2-natsort
12956 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12957 (package (inherit base)
12958 (native-inputs
12959 `(("python2-pathlib" ,python2-pathlib)
12960 ("python2-mock" ,python2-mock)
12961 ("python2-enum34" ,python2-enum34)
12962 ,@(package-native-inputs base))))))
12963
12964 (define-public python-glances
12965 (package
12966 (name "python-glances")
12967 (version "2.7.1")
12968 (source
12969 (origin
12970 (method url-fetch)
12971 (uri (pypi-uri "Glances" version))
12972 (sha256
12973 (base32
12974 "11jbq40g8alsbirnd4kiagznqg270247i0m8qhi48ldf2i5xppxg"))))
12975 (build-system python-build-system)
12976 (propagated-inputs
12977 `(("python-psutil" ,python-psutil)))
12978 (home-page
12979 "https://github.com/nicolargo/glances")
12980 (synopsis
12981 "A cross-platform curses-based monitoring tool")
12982 (description
12983 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12984 Glances uses the PsUtil library to get information from your system. It monitors
12985 CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12986 (license license:lgpl3+)))
12987
12988 (define-public python2-glances
12989 (package-with-python2 python-glances))
12990
12991 (define-public python-graphql-core
12992 (package
12993 (name "python-graphql-core")
12994 (version "0.5.3")
12995 (source
12996 (origin
12997 (method url-fetch)
12998 (uri (pypi-uri "graphql-core" version))
12999 (sha256
13000 (base32
13001 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
13002 (build-system python-build-system)
13003 (arguments
13004 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
13005 #:phases
13006 (modify-phases %standard-phases
13007 (add-after 'unpack 'patch-hardcoded-version
13008 (lambda _ (substitute*
13009 "setup.py"
13010 (("'gevent==1.1rc1'") "'gevent'"))
13011 #t)))))
13012 (native-inputs
13013 `(("python-gevent" ,python-gevent)
13014 ("python-mock" ,python-mock)
13015 ("python-pytest-mock" ,python-pytest-mock)))
13016 (propagated-inputs
13017 `(("python-promise" ,python-promise)
13018 ("python-six" ,python-six)))
13019 (home-page "https://github.com/graphql-python/graphql-core")
13020 (synopsis "GraphQL implementation for Python")
13021 (description
13022 "GraphQL implementation for Python. GraphQL is a data query language and
13023 runtime designed and used to request and deliver data to mobile and web apps.
13024 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
13025 to Python.")
13026 (license license:expat)))
13027
13028 (define-public python2-graphql-core
13029 (package-with-python2 python-graphql-core))
13030
13031 (define-public python-graphql-relay
13032 (package
13033 (name "python-graphql-relay")
13034 (version "0.4.5")
13035 (source
13036 (origin
13037 (method url-fetch)
13038 (uri (pypi-uri "graphql-relay" version))
13039 (sha256
13040 (base32
13041 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
13042 (build-system python-build-system)
13043 (native-inputs
13044 `(("python-pytest" ,python-pytest)))
13045 (propagated-inputs
13046 `(("python-graphql-core" ,python-graphql-core)
13047 ("python-promise" ,python-promise)
13048 ("python-six" ,python-six)))
13049 (home-page "https://github.com/graphql-python/graphql-relay-py")
13050 (synopsis "Relay implementation for Python")
13051 (description
13052 "This is a library to allow the easy creation of Relay-compliant servers
13053 using the GraphQL Python reference implementation of a GraphQL server. It
13054 should be noted that the code is a exact port of the original
13055 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
13056 from Facebook.")
13057 (license license:expat)))
13058
13059 (define-public python2-graphql-relay
13060 (package-with-python2 python-graphql-relay))
13061
13062 (define-public python-graphene
13063 (package
13064 (name "python-graphene")
13065 (version "0.10.2")
13066 (source
13067 (origin
13068 (method url-fetch)
13069 (uri (pypi-uri "graphene" version))
13070 (sha256
13071 (base32
13072 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
13073 (build-system python-build-system)
13074 (native-inputs
13075 `(("python-django-filter" ,python-django-filter)
13076 ("python-mock" ,python-mock)
13077 ("python-psycopg2" ,python-psycopg2)
13078 ("python-pytest-django" ,python-pytest-django)
13079 ("python-sqlalchemy-utils" ,python-sqlalchemy-utils)))
13080 (propagated-inputs
13081 `(("python-graphql-core" ,python-graphql-core)
13082 ("python-graphql-relay" ,python-graphql-relay)
13083 ("python-iso8601" ,python-iso8601)
13084 ("python-promise" ,python-promise)
13085 ("python-six" ,python-six)))
13086 (home-page "http://graphene-python.org/")
13087 (synopsis "GraphQL Framework for Python")
13088 (description
13089 "Graphene is a Python library for building GraphQL schemas/types.
13090 A GraphQL schema describes your data model, and provides a GraphQL server
13091 with an associated set of resolve methods that know how to fetch data.")
13092 (properties `((python2-variant . ,(delay python2-graphene))))
13093 (license license:expat)))
13094
13095 (define-public python2-graphene
13096 (let ((base (package-with-python2
13097 (strip-python2-variant python-graphene))))
13098 (package (inherit base)
13099 (native-inputs
13100 `(("python2-sqlalchemy" ,python2-sqlalchemy)
13101 ,@(package-native-inputs base))))))
13102
13103 (define-public python-nautilus
13104 (package
13105 (name "python-nautilus")
13106 (version "0.4.9")
13107 (source
13108 (origin
13109 (method url-fetch)
13110 (uri (pypi-uri "nautilus" version))
13111 (sha256
13112 (base32
13113 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
13114 (build-system python-build-system)
13115 (arguments `(#:tests? #f)) ; fails to import test modules
13116 (propagated-inputs
13117 `(("python-bcrypt" ,python-bcrypt)
13118 ("python-click" ,python-click)
13119 ("python-consul" ,python-consul)
13120 ("python-graphene" ,python-graphene)
13121 ("python-jinja2" ,python-jinja2)
13122 ("python-peewee" ,python-peewee)
13123 ("python-pika" ,python-pika)
13124 ("python-tornado" ,python-tornado)
13125 ("python-wtforms" ,python-wtforms)))
13126 (native-inputs
13127 `(("python-nose2" ,python-nose2)))
13128 (home-page "https://github.com/AlecAivazis/nautilus")
13129 (synopsis "Library for creating microservice applications")
13130 (description
13131 "Nautilus is a framework for flux based microservices that looks to
13132 provide extendible implementations of common aspects of a cloud so that you can
13133 focus on building massively scalable web applications.")
13134 (license license:expat)))
13135
13136 (define-public python-snowballstemmer
13137 (package
13138 (name "python-snowballstemmer")
13139 (version "1.2.1")
13140 (source (origin
13141 (method url-fetch)
13142 (uri (pypi-uri "snowballstemmer" version))
13143 (sha256
13144 (base32
13145 "0a0idq4y5frv7qsg2x62jd7rd272749xk4x99misf5rcifk2d7wi"))))
13146 (build-system python-build-system)
13147 (arguments
13148 `(;; No tests exist
13149 #:tests? #f))
13150 (home-page "https://github.com/shibukawa/snowball_py")
13151 (synopsis "Snowball stemming library collection for Python")
13152 (description "This package provides 16 word stemmer algorithms generated
13153 from Snowball algorithms. It includes the 15 original ones plus the Poerter
13154 English stemmer.")
13155 (license license:bsd-3)))
13156
13157 (define-public python2-snowballstemmer
13158 (package-with-python2 python-snowballstemmer))
13159
13160 (define-public python-sphinx-cloud-sptheme
13161 (package
13162 (name "python-sphinx-cloud-sptheme")
13163 (version "1.8.0")
13164 (source (origin
13165 (method url-fetch)
13166 (uri (pypi-uri "cloud_sptheme" version))
13167 (sha256
13168 (base32
13169 "1dniqb6a39yh786f86c4jn666rwnyi1jvzn4616zhcchb7sfdshd"))))
13170 (build-system python-build-system)
13171 ;; FIXME: The 'pypi' release archive does not contain tests.
13172 (arguments '(#:tests? #f))
13173 (native-inputs
13174 `(("python-sphinx" ,python-sphinx)))
13175 (home-page "https://bitbucket.org/ecollins/cloud_sptheme")
13176 (synopsis "'Cloud' theme for Sphinx documenter")
13177 (description "This package contains the \"Cloud\" theme for Sphinx and some
13178 related extensions.")
13179 (license license:bsd-3)))
13180
13181 (define-public python2-sphinx-cloud-sptheme
13182 (package-with-python2 python-sphinx-cloud-sptheme))
13183
13184 (define-public python-sphinx-alabaster-theme
13185 (package
13186 (name "python-sphinx-alabaster-theme")
13187 (version "0.7.9")
13188 (source (origin
13189 (method url-fetch)
13190 (uri (pypi-uri "alabaster" version))
13191 (sha256
13192 (base32
13193 "027anxzcb951gjlcc43y3rbn9qrw36d16vj9wd2smv5410xx9bs7"))))
13194 (build-system python-build-system)
13195 (propagated-inputs
13196 `(("python-pygments" ,python-pygments)))
13197 (home-page "https://alabaster.readthedocs.io/")
13198 (synopsis "Configurable sidebar-enabled Sphinx theme")
13199 (description "Alabaster is a visually (c)lean, responsive, configurable
13200 theme for the Sphinx documentation system. It's the default theme of Sphinx.")
13201 (license license:bsd-3)))
13202
13203 (define-public python2-sphinx-alabaster-theme
13204 (package-with-python2 python-sphinx-alabaster-theme))
13205
13206 (define-public python-betamax
13207 (package
13208 (name "python-betamax")
13209 (version "0.8.0")
13210 (source
13211 (origin
13212 (method url-fetch)
13213 (uri (pypi-uri "betamax" version))
13214 (sha256
13215 (base32
13216 "18f8v5gng3j773jlbbzx4rg1i4y2zw3m2l1zpmbvp8bh5a2q1i42"))))
13217 (build-system python-build-system)
13218 (arguments
13219 '(;; Many tests fail because they require networking.
13220 #:tests? #f))
13221 (propagated-inputs
13222 `(("python-requests" ,python-requests)))
13223 (home-page "https://github.com/sigmavirus24/betamax")
13224 (synopsis "Record HTTP interactions with python-requests")
13225 (description "Betamax will record your test suite's HTTP interactions and
13226 replay them during future tests. It is designed to work with python-requests.")
13227 (license license:expat)))
13228
13229 (define-public python2-betamax
13230 (package-with-python2 python-betamax))
13231
13232 (define-public python-betamax-matchers
13233 (package
13234 (name "python-betamax-matchers")
13235 (version "0.4.0")
13236 (source
13237 (origin
13238 (method url-fetch)
13239 (uri (pypi-uri "betamax-matchers" version))
13240 (sha256
13241 (base32
13242 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
13243 (build-system python-build-system)
13244 (propagated-inputs
13245 `(("python-betamax" ,python-betamax)
13246 ("python-requests-toolbelt" ,python-requests-toolbelt)))
13247 (home-page "https://github.com/sigmavirus24/betamax_matchers")
13248 (synopsis "VCR imitation for python-requests")
13249 (description "@code{betamax-matchers} provides a set of Matchers for
13250 Betamax.")
13251 (license license:asl2.0)))
13252
13253 (define-public python2-betamax-matchers
13254 (package-with-python2 python-betamax-matchers))
13255
13256 (define-public python-s3transfer
13257 (package
13258 (name "python-s3transfer")
13259 (version "0.1.11")
13260 (source (origin
13261 (method url-fetch)
13262 (uri (pypi-uri "s3transfer" version))
13263 (sha256
13264 (base32
13265 "0yfrfnf404cxzn3iswibqjxklsl0b1lwgqiml6pwiqj79a7zbwbn"))))
13266 (build-system python-build-system)
13267 (arguments
13268 `(#:phases
13269 (modify-phases %standard-phases
13270 (replace 'check
13271 (lambda _
13272 ;; 7 of the 'integration' tests require network access or login
13273 ;; credentials.
13274 (zero? (system* "nosetests" "--exclude=integration")))))))
13275 (native-inputs
13276 `(("python-docutils" ,python-docutils)
13277 ("python-mock" ,python-mock)
13278 ("python-nose" ,python-nose)))
13279 (propagated-inputs
13280 `(("python-botocore" ,python-botocore)))
13281 (synopsis "Amazon S3 Transfer Manager")
13282 (description "S3transfer is a Python library for managing Amazon S3
13283 transfers.")
13284 (home-page "https://github.com/boto/s3transfer")
13285 (license license:asl2.0)
13286 (properties `((python2-variant . ,(delay python2-s3transfer))))))
13287
13288 (define-public python2-s3transfer
13289 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
13290 (package
13291 (inherit base)
13292 (native-inputs
13293 `(("python2-futures" ,python2-futures)
13294 ,@(package-native-inputs base))))))
13295
13296 (define-public python-setproctitle
13297 (package
13298 (name "python-setproctitle")
13299 (version "1.1.10")
13300 (source
13301 (origin
13302 (method url-fetch)
13303 (uri (pypi-uri "setproctitle" version))
13304 (sha256
13305 (base32
13306 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
13307 (build-system python-build-system)
13308 (arguments
13309 '(#:phases
13310 (modify-phases %standard-phases
13311 (add-before 'check 'patch-Makefile
13312 ;; Stricly this is only required for the python2 variant.
13313 ;; But adding a phase in an inherited package seems to be
13314 ;; cumbersum. So we patch even for python3.
13315 (lambda _
13316 (let ((nose (assoc-ref %build-inputs "python2-nose")))
13317 (when nose
13318 (substitute* "Makefile"
13319 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
13320 (string-append nose "/bin/nosetests "))))
13321 #t)))
13322 (replace 'check
13323 (lambda _
13324 (setenv "PYTHON" (or (which "python3") (which "python")))
13325 (setenv "PYCONFIG" (or (which "python3-config")
13326 (which "python-config")))
13327 (setenv "CC" "gcc")
13328 ;; No need to extend PYTHONPATH to find the built package, since
13329 ;; the Makefile will build anyway
13330 (zero? (system* "make" "check")))))))
13331 (native-inputs
13332 `(("procps" ,procps))) ; required for tests
13333 (home-page
13334 "https://github.com/dvarrazzo/py-setproctitle")
13335 (synopsis
13336 "Setproctitle implementation for Python to customize the process title")
13337 (description "The library allows a process to change its title (as displayed
13338 by system tools such as ps and top).
13339
13340 Changing the title is mostly useful in multi-process systems, for
13341 example when a master process is forked: changing the children's title
13342 allows to identify the task each process is busy with. The technique
13343 is used by PostgreSQL and the OpenSSH Server for example.")
13344 (license license:bsd-3)
13345 (properties `((python2-variant . ,(delay python2-setproctitle))))))
13346
13347 (define-public python2-setproctitle
13348 (let ((base (package-with-python2
13349 (strip-python2-variant python-setproctitle))))
13350 (package
13351 (inherit base)
13352 (native-inputs `(("python2-nose" ,python2-nose)
13353 ,@(package-native-inputs base))))))
13354
13355 (define-public python-validictory
13356 (package
13357 (name "python-validictory")
13358 (version "1.0.1")
13359 (source
13360 (origin
13361 (method url-fetch)
13362 (uri (pypi-uri "validictory" version))
13363 (sha256
13364 (base32
13365 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
13366 (build-system python-build-system)
13367 (arguments
13368 '(#:phases
13369 (modify-phases %standard-phases
13370 (add-after 'unpack 'bootstrap
13371 ;; Move the tests out of the package directory to avoid
13372 ;; packaging them.
13373 (lambda* _
13374 (rename-file "validictory/tests" "tests")
13375 (delete-file "tests/__init__.py")))
13376 (replace 'check
13377 (lambda _
13378 ;; Extend PYTHONPATH so the built package will be found.
13379 (setenv "PYTHONPATH"
13380 (string-append (getcwd) "/build/lib:"
13381 (getenv "PYTHONPATH")))
13382 (zero? (system* "py.test" "-vv" )))))))
13383 (native-inputs
13384 `(("python-pytest" ,python-pytest)))
13385 (home-page
13386 "https://github.com/jamesturk/validictory")
13387 (synopsis "General purpose Python data validator")
13388 (description "It allows validation of arbitrary Python data structures.
13389
13390 The schema format is based on the JSON Schema
13391 proposal (http://json-schema.org), so combined with json the library is also
13392 useful as a validator for JSON data.")
13393 (license license:expat)))
13394
13395 (define-public python2-validictory
13396 (package-with-python2 python-validictory))
13397
13398 (define-public python-aniso8601
13399 (package
13400 (name "python-aniso8601")
13401 (version "1.1.0")
13402 (source
13403 (origin
13404 (method url-fetch)
13405 (uri (pypi-uri "aniso8601" version))
13406 (sha256
13407 (base32
13408 "1k5mjg9iqbjfslb5prrsfz7dhlvi6s35p1jxq8dm87w1b7dn5i2g"))))
13409 (build-system python-build-system)
13410 (propagated-inputs
13411 `(("python-dateutil" ,python-dateutil)))
13412 (home-page
13413 "https://bitbucket.org/nielsenb/aniso8601")
13414 (synopsis
13415 "Python library for parsing ISO 8601 strings")
13416 (description
13417 "This package contains a library for parsing ISO 8601 datetime strings.")
13418 (license license:bsd-3)))
13419
13420 (define-public python-flask-restful
13421 (package
13422 (name "python-flask-restful")
13423 (version "0.3.5")
13424 (source
13425 (origin
13426 (method url-fetch)
13427 (uri (pypi-uri "Flask-RESTful" version))
13428 (sha256
13429 (base32
13430 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
13431 (build-system python-build-system)
13432 (propagated-inputs
13433 `(("python-aniso8601" ,python-aniso8601)
13434 ("python-flask" ,python-flask)
13435 ("python-pycrypto" ,python-pycrypto)
13436 ("python-pytz" ,python-pytz)))
13437 (native-inputs
13438 `(;; Optional dependency of Flask. Tests need it.
13439 ("python-blinker" ,python-blinker)
13440 ("python-mock" ,python-mock) ; For tests
13441 ("python-nose" ,python-nose) ; For tests
13442 ("python-sphinx" ,python-sphinx)))
13443 (home-page
13444 "https://www.github.com/flask-restful/flask-restful/")
13445 (synopsis
13446 "Flask module for creating REST APIs")
13447 (description
13448 "This package contains a Flask module for creating REST APIs.")
13449 (license license:bsd-3)))
13450
13451 (define-public python-flask-basicauth
13452 (package
13453 (name "python-flask-basicauth")
13454 (version "0.2.0")
13455 (source
13456 (origin
13457 (method url-fetch)
13458 (uri (pypi-uri "Flask-BasicAuth" version))
13459 (sha256
13460 (base32
13461 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
13462 (build-system python-build-system)
13463 (propagated-inputs
13464 `(("python-flask" ,python-flask)))
13465 (home-page
13466 "https://github.com/jpvanhal/flask-basicauth")
13467 (synopsis
13468 "HTTP basic access authentication for Flask")
13469 (description
13470 "This package provides HTTP basic access authentication for Flask.")
13471 (license license:bsd-3)))
13472
13473 (define-public python-flask-sqlalchemy
13474 (package
13475 (name "python-flask-sqlalchemy")
13476 (version "2.1")
13477 (source
13478 (origin
13479 (method url-fetch)
13480 (uri (pypi-uri "Flask-SQLAlchemy" version))
13481 (sha256
13482 (base32
13483 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
13484 (build-system python-build-system)
13485 (propagated-inputs
13486 `(("python-flask" ,python-flask)
13487 ("python-sqlalchemy" ,python-sqlalchemy)))
13488 (home-page
13489 "https://github.com/mitsuhiko/flask-sqlalchemy")
13490 (synopsis
13491 "Module adding SQLAlchemy support to your Flask application")
13492 (description
13493 "This package adds SQLAlchemy support to your Flask application.")
13494 (license license:bsd-3)))
13495
13496 (define-public python-pyev
13497 (package
13498 (name "python-pyev")
13499 (version "0.9.0")
13500 (source
13501 (origin
13502 (method url-fetch)
13503 (uri (pypi-uri "pyev" version))
13504 (sha256
13505 (base32
13506 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13507 (build-system python-build-system)
13508 (arguments
13509 `(#:tests? #f ; no test suite
13510 #:phases
13511 (modify-phases %standard-phases
13512 (add-after 'unpack 'patch
13513 (lambda* (#:key inputs #:allow-other-keys)
13514 (let ((libev (string-append (assoc-ref inputs "libev")
13515 "/lib/libev.so.4")))
13516 (substitute* "setup.py"
13517 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13518 (string-append "libev_dll_name = \"" libev "\"")))))))))
13519 (inputs
13520 `(("libev" ,libev)))
13521 (home-page "http://pythonhosted.org/pyev/")
13522 (synopsis "Python libev interface")
13523 (description "Pyev provides a Python interface to libev.")
13524 (license license:gpl3)))
13525
13526 (define-public python2-pyev
13527 (package-with-python2 python-pyev))
13528
13529 (define-public python-imagesize
13530 (package
13531 (name "python-imagesize")
13532 (version "0.7.1")
13533 (source
13534 (origin
13535 (method url-fetch)
13536 (uri (pypi-uri "imagesize" version))
13537 (sha256
13538 (base32
13539 "0qk07k0z4241lkzzjji7z4da04pcvg7bfc4xz1934zlqhwmwdcha"))))
13540 (build-system python-build-system)
13541 (arguments
13542 '(;; Test files are not distributed on PyPi:
13543 ;; https://github.com/shibukawa/imagesize_py/issues/7
13544 #:tests? #f))
13545 (home-page "https://github.com/shibukawa/imagesize_py")
13546 (synopsis "Gets image size of files in variaous formats in Python")
13547 (description
13548 "This package allows determination of image size from
13549 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13550 (license license:expat)))
13551
13552 (define-public python2-imagesize
13553 (package-with-python2 python-imagesize))
13554
13555 (define-public python-axolotl-curve25519
13556 (package
13557 (name "python-axolotl-curve25519")
13558 (version "0.1")
13559 (source
13560 (origin
13561 (method git-fetch)
13562 (uri (git-reference
13563 (url "https://github.com/tgalal/python-axolotl-curve25519")
13564 (commit "e4a9c4de0eae27223200579c58d1f8f6d20637e2")))
13565 (file-name (string-append name "-" version "-checkout"))
13566 (sha256
13567 (base32
13568 "0agap5q0hmvf6cwzjqc05kw53pjgf6942pcivpazksmg1vk400ra"))))
13569 (build-system python-build-system)
13570 (arguments
13571 `(;; Prevent creation of the egg. This works around
13572 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
13573 #:configure-flags '("--root=/")))
13574 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
13575 (synopsis "Python wrapper for curve25519 library")
13576 (description "This is a python wrapper for the curve25519 library
13577 with ed25519 signatures. The C code was pulled from
13578 libaxolotl-android. At the moment this wrapper is meant for use by
13579 python-axolotl.")
13580 (license (list license:gpl3 ; Most files
13581 license:bsd-3)))) ; curve/curve25519-donna.c
13582
13583 (define-public python2-axolotl-curve25519
13584 (package-with-python2 python-axolotl-curve25519))
13585
13586 (define-public python-axolotl
13587 (package
13588 (name "python-axolotl")
13589 (version "0.1.35")
13590 (source
13591 (origin
13592 (method url-fetch)
13593 (uri (string-append
13594 "https://github.com/tgalal/python-axolotl/archive/"
13595 version ".tar.gz"))
13596 (file-name (string-append name "-" version ".tar.gz"))
13597 (sha256
13598 (base32 "1z8d89p7v40p4bwywjm9h4z28fdvra79ddw06azlkrfjbl7dxmz8"))))
13599 (build-system python-build-system)
13600 (arguments
13601 `(#:phases
13602 (modify-phases %standard-phases
13603 ;; Don't install tests
13604 (add-before 'install 'remove-tests
13605 (lambda _
13606 (for-each delete-file-recursively
13607 '("axolotl/tests" "build/lib/axolotl/tests"))
13608 #t)))))
13609 (propagated-inputs
13610 `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
13611 ("python-dateutil" ,python-dateutil)
13612 ("python-protobuf" ,python-protobuf)
13613 ("python-pycrypto" ,python-pycrypto)))
13614 (home-page "https://github.com/tgalal/python-axolotl")
13615 (synopsis "Python port of libaxolotl-android")
13616 (description "This is a python port of libaxolotl-android. This
13617 is a ratcheting forward secrecy protocol that works in synchronous and
13618 asynchronous messaging environments.")
13619 (license license:gpl3)))
13620
13621 (define-public python2-axolotl
13622 (package-with-python2 python-axolotl))
13623
13624 (define-public python-termstyle
13625 (package
13626 (name "python-termstyle")
13627 (version "0.1.11")
13628 (source
13629 (origin
13630 (method url-fetch)
13631 (uri (pypi-uri "termstyle" version))
13632 (sha256
13633 (base32
13634 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13635 (build-system python-build-system)
13636 (arguments
13637 '(#:phases
13638 (modify-phases %standard-phases
13639 (replace 'check
13640 (lambda _
13641 (zero? (system* "python" "test3.py")))))))
13642 (home-page "https://github.com/gfxmonk/termstyle")
13643 (synopsis "Console text coloring for Python")
13644 (description "This package provides console text coloring for Python.")
13645 (license license:bsd-3)))
13646
13647 (define-public python-rednose
13648 (package
13649 (name "python-rednose")
13650 (version "1.2.1")
13651 (source
13652 (origin
13653 (method url-fetch)
13654 (uri (pypi-uri "rednose" version))
13655 (sha256
13656 (base32
13657 "0b0bsna217lr1nykyhl5fgjly15zhdvqd4prg4wy1zrgfv7al6m0"))))
13658 (build-system python-build-system)
13659 (arguments
13660 `(#:phases
13661 (modify-phases %standard-phases
13662 (add-after 'unpack 'fix-deps
13663 (lambda _
13664 ;; See <https://github.com/JBKahn/rednose/issues/12>
13665 (substitute* "setup.py"
13666 (("python-termstyle") "termstyle"))
13667 #t)))))
13668 (propagated-inputs
13669 `(("python-colorama" ,python-colorama)
13670 ("python-termstyle" ,python-termstyle)))
13671 (native-inputs
13672 `(("python-six" ,python-six)
13673 ("python-nose" ,python-nose)))
13674 (home-page "https://github.com/JBKahn/rednose")
13675 (synopsis "Colored output for Python nosetests")
13676 (description "This package provides colored output for the
13677 @command{nosetests} command of the Python Nose unit test framework.")
13678 (license license:bsd-3)))
13679
13680 (define-public python2-rednose
13681 (package-with-python2 python-rednose))
13682
13683 (define-public python-flask-restplus
13684 (package
13685 (name "python-flask-restplus")
13686 (version "0.9.2")
13687 (source
13688 (origin
13689 (method url-fetch)
13690 (uri (pypi-uri "flask-restplus" version))
13691 (sha256
13692 (base32
13693 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
13694 (build-system python-build-system)
13695 (arguments
13696 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
13697 ;; #:phases
13698 ;; (modify-phases %standard-phases
13699 ;; (replace 'check
13700 ;; (lambda _
13701 ;; (zero? (system* "nosetests")))))))
13702 (propagated-inputs
13703 `(("python-aniso8601" ,python-aniso8601)
13704 ("python-flask" ,python-flask)
13705 ("python-jsonschema" ,python-jsonschema)
13706 ("python-pytz" ,python-pytz)
13707 ("python-six" ,python-six)))
13708 (native-inputs
13709 `(("python-tzlocal" ,python-tzlocal)
13710 ("python-blinker" ,python-blinker)
13711 ("python-nose" ,python-nose)
13712 ("python-rednose" ,python-rednose)))
13713 (home-page "https://github.com/noirbizarre/flask-restplus")
13714 (synopsis "Framework for documented API development with Flask")
13715 (description "This package provides a framework for API development with
13716 the Flask web framework in Python. It is similar to package
13717 @code{python-flask-restful} but supports the @code{python-swagger}
13718 documentation builder.")
13719 (license license:expat)))
13720
13721 (define-public python-sadisplay
13722 (package
13723 (name "python-sadisplay")
13724 (version "0.4.6")
13725 (source
13726 (origin
13727 (method url-fetch)
13728 (uri (pypi-uri "sadisplay" version))
13729 (sha256
13730 (base32
13731 "0zqad2fl7q26p090qmqgmxbm6iwgf9zij1w8da1g3wdgjj72ql05"))))
13732 (build-system python-build-system)
13733 (propagated-inputs
13734 `(("python-sqlalchemy" ,python-sqlalchemy)))
13735 (native-inputs
13736 `(("python-nose" ,python-nose)))
13737 (home-page "https://bitbucket.org/estin/sadisplay")
13738 (synopsis "SQLAlchemy schema displayer")
13739 (description "This package provides a program to build Entity
13740 Relationship diagrams from a SQLAlchemy model (or directly from the
13741 database).")
13742 (license license:bsd-3)))
13743
13744 (define-public python2-sadisplay
13745 (package-with-python2 python-sadisplay))
13746
13747 (define-public python-flask-restful-swagger
13748 (package
13749 (name "python-flask-restful-swagger")
13750 (version "0.19")
13751 (source
13752 (origin
13753 (method url-fetch)
13754 (uri (pypi-uri "flask-restful-swagger" version))
13755 (sha256
13756 (base32
13757 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
13758 (build-system python-build-system)
13759 (propagated-inputs
13760 `(("python-flask-restful" ,python-flask-restful)))
13761 (home-page "https://github.com/rantav/flask-restful-swagger")
13762 (synopsis "Extract Swagger specs from Flask-Restful projects")
13763 (description "This package lets you extract Swagger API documentation
13764 specs from your Flask-Restful projects.")
13765 (license license:expat)))
13766
13767 (define-public python2-flask-restful-swagger
13768 (package-with-python2 python-flask-restful-swagger))
13769
13770 (define-public python-argcomplete
13771 (package
13772 (name "python-argcomplete")
13773 (version "1.7.0")
13774 (source
13775 (origin
13776 (method url-fetch)
13777 (uri (pypi-uri "argcomplete" version))
13778 (sha256
13779 (base32
13780 "11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x"))))
13781 (build-system python-build-system)
13782 (native-inputs
13783 `(("python-pexpect" ,python-pexpect)
13784 ("tcsh" ,tcsh)
13785 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13786 (home-page "https://github.com/kislyuk/argcomplete")
13787 (synopsis "Shell tab completion for Python argparse")
13788 (description "argcomplete provides extensible command line tab completion
13789 of arguments and options for Python scripts using @code{argparse}. It's
13790 particularly useful for programs with many options or sub-parsers that can
13791 dynamically suggest completions; for example, when browsing resources over the
13792 network.")
13793 (license license:asl2.0)))
13794
13795 (define-public python2-argcomplete
13796 (package-with-python2 python-argcomplete))
13797
13798 (define-public python-xopen
13799 (package
13800 (name "python-xopen")
13801 (version "0.1.1")
13802 (source
13803 (origin
13804 (method url-fetch)
13805 (uri (pypi-uri "xopen" version))
13806 (sha256
13807 (base32
13808 "1wx6mylzcsyhjl19ycb83qq6iqpmr927lz62njfsar6ldsj0qcni"))
13809 (file-name (string-append name "-" version ".tar.gz"))))
13810 (build-system python-build-system)
13811 (home-page "https://github.com/marcelm/xopen/")
13812 (synopsis "Open compressed files transparently")
13813 (description "This module provides an @code{xopen} function that works like
13814 Python's built-in @code{open} function, but can also deal with compressed files.
13815 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13816 recognized by their file extensions. The focus is on being as efficient as
13817 possible on all supported Python versions.")
13818 (license license:expat)))
13819
13820 (define-public python2-xopen
13821 (package-with-python2 python-xopen))
13822
13823 (define-public python2-cheetah
13824 (package
13825 (name "python2-cheetah")
13826 (version "2.4.4")
13827 (source
13828 (origin
13829 (method url-fetch)
13830 (uri (pypi-uri "Cheetah" version))
13831 (sha256
13832 (base32
13833 "0l5mm4lnysjkzpjr95q5ydm9xc8bv43fxmr79ypybrf1y0lq4c5y"))))
13834 (build-system python-build-system)
13835 (arguments
13836 `(#:python ,python-2))
13837 (propagated-inputs
13838 `(("python2-markdown" ,python2-markdown)))
13839 (home-page "https://pythonhosted.org/Cheetah/")
13840 (synopsis "Template engine")
13841 (description "Cheetah is a text-based template engine and Python code
13842 generator.
13843
13844 Cheetah can be used as a standalone templating utility or referenced as
13845 a library from other Python applications. It has many potential uses,
13846 but web developers looking for a viable alternative to ASP, JSP, PHP and
13847 PSP are expected to be its principle user group.
13848
13849 Features:
13850 @enumerate
13851 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13852 text-based format.
13853 @item Cleanly separates content, graphic design, and program code.
13854 @item Blends the power and flexibility of Python with a simple template language
13855 that non-programmers can understand.
13856 @item Gives template writers full access to any Python data structure, module,
13857 function, object, or method in their templates.
13858 @item Makes code reuse easy by providing an object-orientated interface to
13859 templates that is accessible from Python code or other Cheetah templates.
13860 One template can subclass another and selectively reimplement sections of it.
13861 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13862 improve the performance of a dynamic website.
13863 @item Compiles templates into optimized, yet readable, Python code.
13864 @end enumerate")
13865 (license (license:x11-style "file://LICENSE"))))
13866
13867 (define-public python-dulwich
13868 (package
13869 (name "python-dulwich")
13870 (version "0.16.3")
13871 (source
13872 (origin
13873 (method url-fetch)
13874 (uri (list (string-append "https://www.dulwich.io/releases/"
13875 "dulwich-" version ".tar.gz")
13876 (pypi-uri "dulwich" version)))
13877 (sha256
13878 (base32 "0fl47vzfgc3w3rmhn8naii905cjqcp0vc68iyvymxp7567hh6als"))))
13879 (build-system python-build-system)
13880 (arguments
13881 `(#:phases
13882 (modify-phases %standard-phases
13883 (add-before 'check 'fix-tests
13884 (lambda* (#:key inputs #:allow-other-keys)
13885 ;; The tests use Popen with a custom environment which doesn't
13886 ;; include PATH.
13887 (substitute* "dulwich/tests/compat/utils.py"
13888 (("'git'") (string-append "'"
13889 (which "git")
13890 "'")))
13891 (substitute* '("dulwich/tests/test_repository.py"
13892 "dulwich/tests/test_hooks.py")
13893 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13894 (setenv "TEST_RUNNER" "unittest")
13895 (setenv "PYTHONHASHSEED" "random")
13896 #t)))))
13897 (propagated-inputs
13898 `(("python-fastimport" ,python-fastimport)))
13899 (native-inputs
13900 `(("python-mock" ,python-mock)
13901 ("python-geventhttpclient" ,python-geventhttpclient)
13902 ("git" ,git)))
13903 (home-page "https://www.dulwich.io/")
13904 (synopsis "Git implementation in Python")
13905 (description "Dulwich is an implementation of the Git file formats and
13906 protocols written in pure Python.")
13907 ;; Can be used with either license.
13908 (license (list license:asl2.0 license:gpl2+))))
13909
13910 (define-public python2-dulwich
13911 (package-with-python2 python-dulwich))
13912
13913 (define-public python-pbkdf2
13914 (package
13915 (name "python-pbkdf2")
13916 (version "1.3")
13917 (source
13918 (origin
13919 (method url-fetch)
13920 (uri (pypi-uri "pbkdf2" version))
13921 (sha256
13922 (base32
13923 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13924 (build-system python-build-system)
13925 (arguments
13926 '(#:phases
13927 (modify-phases %standard-phases
13928 (replace 'check
13929 (lambda _
13930 (setenv "PYTHONPATH"
13931 (string-append (getcwd) "/build/lib:"
13932 (getenv "PYTHONPATH")))
13933 (zero? (system* "python" "test/test_pbkdf2.py")))))))
13934 (propagated-inputs
13935 `(("python-pycrypto" ,python-pycrypto))) ; optional
13936 (home-page "http://www.dlitz.net/software/python-pbkdf2/")
13937 (synopsis "Password-based key derivation")
13938 (description "This module implements the password-based key derivation
13939 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13940
13941 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13942 is part of the RSA Public Key Cryptography Standards series. The provided
13943 implementation takes a password or a passphrase and a salt value (and
13944 optionally a iteration count, a digest module, and a MAC module) and provides
13945 a file-like object from which an arbitrarly-sized key can be read.")
13946 (license license:expat)))
13947
13948 (define-public python2-pbkdf2
13949 (package-with-python2 python-pbkdf2))
13950
13951 (define-public python-qrcode
13952 (package
13953 (name "python-qrcode")
13954 (version "5.3")
13955 (source
13956 (origin
13957 (method url-fetch)
13958 (uri (pypi-uri "qrcode" version))
13959 (sha256
13960 (base32
13961 "0kljfrfq0c2rmxf8am57333ia41kd0snbm2rnqbdy816hgpcq5a1"))))
13962 (build-system python-build-system)
13963 (arguments
13964 ;; FIXME: Tests require packaging 'pymaging'.
13965 '(#:tests? #f))
13966 (propagated-inputs
13967 `(("python-lxml" ,python-lxml) ; for SVG output
13968 ("python-pillow" ,python-pillow) ; for PNG output
13969 ("python-six" ,python-six)))
13970 (home-page "https://github.com/lincolnloop/python-qrcode")
13971 (synopsis "QR Code image generator")
13972 (description "This package provides a pure Python QR Code generator
13973 module. It uses the Python Imaging Library (PIL) to allow for the generation
13974 of QR Codes.
13975
13976 In addition this package provides a command line tool to generate QR codes and
13977 either write these QR codes to a file or do the output as ascii art at the
13978 console.")
13979 (license license:bsd-3)))
13980
13981 (define-public python2-qrcode
13982 (package-with-python2 python-qrcode))
13983
13984 ;; SlowAES isn't compatible with Python 3.
13985 (define-public python2-slowaes
13986 (package
13987 (name "python2-slowaes")
13988 (version "0.1a1")
13989 (source
13990 (origin
13991 (method url-fetch)
13992 (uri (pypi-uri "slowaes" version))
13993 (sha256
13994 (base32
13995 "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
13996 (build-system python-build-system)
13997 (arguments `(#:python ,python-2))
13998 (home-page "http://code.google.com/p/slowaes/")
13999 (synopsis "Implementation of AES in Python")
14000 (description "This package contains an implementation of AES in Python.
14001 This implementation is slow (hence the project name) but still useful when
14002 faster ones are not available.")
14003 (license license:asl2.0)))
14004
14005 (define-public python-rst2ansi
14006 (package
14007 (name "python-rst2ansi")
14008 (version "0.1.5")
14009 (source
14010 (origin
14011 (method url-fetch)
14012 (uri (pypi-uri "rst2ansi" version))
14013 (sha256
14014 (base32
14015 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
14016 (build-system python-build-system)
14017 (propagated-inputs
14018 `(("python-docutils" ,python-docutils)))
14019 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
14020 (synopsis "Convert RST to ANSI-decorated console output")
14021 (description
14022 "Python module dedicated to rendering RST (reStructuredText) documents
14023 to ansi-escaped strings suitable for display in a terminal.")
14024 (license license:expat)))
14025
14026 (define-public python-ansi2html
14027 (package
14028 (name "python-ansi2html")
14029 (version "1.2.0")
14030 (source
14031 (origin
14032 (method url-fetch)
14033 (uri (pypi-uri "ansi2html" version))
14034 (sha256
14035 (base32
14036 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
14037 (build-system python-build-system)
14038 (native-inputs
14039 `(("python-mock" ,python-mock)
14040 ("python-nose" ,python-nose)))
14041 (propagated-inputs
14042 `(("python-six" ,python-six)))
14043 (home-page "http://github.com/ralphbean/ansi2html")
14044 (synopsis "Convert ANSI-decorated console output to HTML")
14045 (description
14046 "@command{ansi2html} is a Python library and command line utility for
14047 convering text with ANSI color codes to HTML or LaTeX.")
14048 (license license:gpl3+)))
14049
14050 (define-public python2-ansi2html
14051 (package-with-python2 python-ansi2html))
14052
14053 (define-public python-ddt
14054 (package
14055 (name "python-ddt")
14056 (version "1.1.1")
14057 (source
14058 (origin
14059 (method url-fetch)
14060 (uri (pypi-uri "ddt" version))
14061 (sha256
14062 (base32
14063 "1c00ikkxr7lha97c81k938bzhgd4pbwamkjn0h4nkhr3xk00zp6n"))))
14064 (build-system python-build-system)
14065 (native-inputs
14066 `(("python-mock" ,python-mock)
14067 ("python-nose" ,python-nose)))
14068 (propagated-inputs
14069 `(("python-six" ,python-six)
14070 ("python-pyyaml" ,python-pyyaml)))
14071 (home-page "https://github.com/txels/ddt")
14072 (synopsis "Data-Driven Tests")
14073 (description
14074 "DDT (Data-Driven Tests) allows you to multiply one test case by running
14075 it with different test data, and make it appear as multiple test cases.")
14076 (license license:expat)))
14077
14078 (define-public python2-ddt
14079 (package-with-python2 python-ddt))
14080
14081 (define-public python-pycosat
14082 (package
14083 (name "python-pycosat")
14084 (version "0.6.1")
14085 (source
14086 (origin
14087 (method url-fetch)
14088 (uri (pypi-uri "pycosat" version))
14089 (sha256
14090 (base32
14091 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
14092 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
14093 (build-system python-build-system)
14094 (home-page "https://github.com/ContinuumIO/pycosat")
14095 (synopsis "Bindings to picosat (a SAT solver)")
14096 (description
14097 "This package provides efficient Python bindings to @code{picosat} on
14098 the C level. When importing pycosat, the @code{picosat} solver becomes part
14099 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
14100 Problem} (SAT) solver.")
14101 (license license:expat)))
14102
14103 (define-public python2-pycosat
14104 (package-with-python2 python-pycosat))
14105
14106 (define-public python2-ruamel.ordereddict
14107 (package
14108 (name "python2-ruamel.ordereddict")
14109 (version "0.4.9")
14110 (source
14111 (origin
14112 (method url-fetch)
14113 (uri (pypi-uri "ruamel.ordereddict" version))
14114 (sha256
14115 (base32
14116 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
14117 (build-system python-build-system)
14118 (arguments
14119 `(#:python ,python-2
14120 #:phases
14121 (modify-phases %standard-phases
14122 (delete 'check)
14123 (add-after 'install 'check
14124 (lambda* (#:key inputs outputs #:allow-other-keys)
14125 (add-installed-pythonpath inputs outputs)
14126 (zero? (system* "python" "test/testordereddict.py")))))))
14127 (home-page "https://bitbucket.org/ruamel/ordereddict")
14128 (synopsis "Version of dict that keeps keys in insertion order")
14129 (description
14130 "This is an implementation of an ordered dictionary with @dfn{Key
14131 Insertion Order} (KIO: updates of values do not affect the position of the
14132 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
14133 removed and put at the back). The standard library module @code{OrderedDict},
14134 implemented later, implements a subset of @code{ordereddict} functionality.
14135 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
14136 Order} (KSO, no sorting function can be specified, but a transform can be
14137 specified to apply on the key before comparison (e.g. @code{string.lower})).")
14138 (license license:expat)))
14139
14140 (define-public python-pypeg2
14141 (package
14142 (name "python-pypeg2")
14143 (version "2.15.2")
14144 (source
14145 (origin
14146 (method url-fetch)
14147 (uri (pypi-uri "pyPEG2" version))
14148 (sha256
14149 (base32
14150 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
14151 (build-system python-build-system)
14152 (propagated-inputs `(("python-lxml" ,python-lxml)))
14153 (arguments
14154 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
14155 '(#:tests? #f))
14156 (home-page "https://fdik.org/pyPEG/")
14157 (synopsis "Parsering Expression Grammars in Python")
14158 (description "PyPEG is an intrinsic parser interpreter framework for
14159 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
14160 parse many formal languages.")
14161 (license license:gpl2)))
14162
14163 (define-public python2-cliapp
14164 (package
14165 (name "python2-cliapp")
14166 (version "1.20170823")
14167 (source
14168 (origin
14169 (method url-fetch)
14170 (uri (string-append
14171 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
14172 version ".tar.gz"))
14173 (sha256
14174 (base32
14175 "1i9gik0xrj6jmi95s5w988jl1y265baz5xm5pbqdyvsh8h9ln6yq"))))
14176 (build-system python-build-system)
14177 (arguments
14178 `(#:python ,python-2
14179 #:phases
14180 (modify-phases %standard-phases
14181 ;; check phase needs to be run before the build phase. If not,
14182 ;; coverage-test-runner looks for tests for the built source files,
14183 ;; and fails.
14184 (delete 'check)
14185 (add-before 'build 'check
14186 (lambda _
14187 ;; Disable python3 tests
14188 (substitute* "check"
14189 (("python3") "# python3"))
14190 (zero? (system* "./check")))))))
14191 (native-inputs
14192 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14193 ("python2-pep8" ,python2-pep8)))
14194 (propagated-inputs
14195 `(("python2-pyaml" ,python2-pyaml)))
14196 (home-page "https://liw.fi/cliapp/")
14197 (synopsis "Python framework for command line programs")
14198 (description "@code{python2-cliapp} is a python framework for
14199 command line programs. It contains the typical stuff such programs
14200 need to do, such as parsing the command line for options, and
14201 iterating over input files.")
14202 (license license:gpl2+)))
14203
14204 (define-public python2-ttystatus
14205 (package
14206 (name "python2-ttystatus")
14207 (version "0.35")
14208 (source
14209 (origin
14210 (method url-fetch)
14211 (uri (string-append
14212 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
14213 version ".tar.gz"))
14214 (sha256
14215 (base32
14216 "0vivqbw7ddhsq1zj3g9cvvv4f0phl0pis2smsnwcr2szz2fk3hl6"))))
14217 (build-system python-build-system)
14218 (native-inputs
14219 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
14220 ("python2-pep8" ,python2-pep8)))
14221 (arguments
14222 `(#:python ,python-2
14223 #:phases
14224 (modify-phases %standard-phases
14225 ;; check phase needs to be run before the build phase. If not,
14226 ;; coverage-test-runner looks for tests for the built source files,
14227 ;; and fails.
14228 (delete 'check)
14229 (add-before 'build 'check
14230 (lambda _
14231 (zero? (system* "make" "check")))))))
14232 (home-page "https://liw.fi/ttystatus/")
14233 (synopsis "Python library for showing progress reporting and
14234 status updates on terminals")
14235 (description "@code{python2-ttystatus} is a python library for
14236 showing progress reporting and status updates on terminals, for
14237 command line programs. Output is automatically adapted to the width
14238 of the terminal: truncated if it does not fit, and resized if the
14239 terminal size changes.")
14240 (license license:gpl3+)))
14241
14242 (define-public python2-tracing
14243 (package
14244 (name "python2-tracing")
14245 (version "0.10")
14246 (source
14247 (origin
14248 (method url-fetch)
14249 (uri (string-append
14250 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
14251 version ".tar.gz"))
14252 (sha256
14253 (base32
14254 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
14255 (build-system python-build-system)
14256 (arguments
14257 `(#:python ,python-2))
14258 (home-page "https://liw.fi/tracing/")
14259 (synopsis "Python debug logging helper")
14260 (description "@code{python2-tracing} is a python library for
14261 logging debug messages. It provides a way to turn debugging messages
14262 on and off, based on the filename they occur in. It is much faster
14263 than using @code{logging.Filter} to accomplish the same thing, which
14264 matters when code is run in production mode. The actual logging still
14265 happens using the @code{logging} library.")
14266 (license license:gpl3+)))
14267
14268 (define-public python2-larch
14269 (package
14270 (name "python2-larch")
14271 (version "1.20151025")
14272 (source
14273 (origin
14274 (method url-fetch)
14275 (uri (string-append
14276 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
14277 version ".tar.gz"))
14278 (patches (search-patches
14279 "python2-larch-coverage-4.0a6-compatibility.patch"))
14280 (sha256
14281 (base32
14282 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
14283 (build-system python-build-system)
14284 (arguments
14285 `(#:python ,python-2
14286 #:phases
14287 (modify-phases %standard-phases
14288 ;; check phase needs to be run before the build phase. If not,
14289 ;; coverage-test-runner looks for tests for the built source files,
14290 ;; and fails.
14291 (delete 'check)
14292 (add-before 'build 'check
14293 (lambda _
14294 (zero? (system* "make" "check")))))))
14295 (native-inputs
14296 `(("cmdtest" ,cmdtest)
14297 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
14298 (propagated-inputs
14299 `(("python2-tracing" ,python2-tracing)))
14300 (home-page "https://liw.fi/larch/")
14301 (synopsis "Python copy-on-write B-tree library")
14302 (description "@code{python2-larch} is an implementation of
14303 particular kind of B-tree, based on research by Ohad Rodeh. See
14304 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
14305 on the data structure.
14306
14307 The distinctive feature of this B-tree is that a node is never
14308 (conceptually) modified. Instead, all updates are done by
14309 copy-on-write. This makes it easy to clone a tree, and modify only the
14310 clone, while other processes access the original tree.")
14311 (license license:gpl3+)))
14312
14313 (define-public python-htmlmin
14314 (package
14315 (name "python-htmlmin")
14316 (version "0.1.10")
14317 (source
14318 (origin
14319 (method url-fetch)
14320 (uri (pypi-uri "htmlmin" version))
14321 (sha256
14322 (base32
14323 "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
14324 (arguments
14325 `(#:tests? #f)) ;htmlmin has no tests
14326 (build-system python-build-system)
14327 (home-page "https://htmlmin.readthedocs.org/en/latest/")
14328 (synopsis "HTML minifier")
14329 (description "@code{htmlmin} is an HTML minifier that just works.
14330 It comes with safe defaults and easily configurable options.")
14331 (license license:bsd-3)))
14332
14333 (define-public python2-htmlmin
14334 (package-with-python2 python-htmlmin))
14335
14336 (define-public python-flask-htmlmin
14337 (package
14338 (name "python-flask-htmlmin")
14339 (version "1.2")
14340 (source
14341 (origin
14342 (method url-fetch)
14343 (uri (pypi-uri "Flask-HTMLmin" version))
14344 (sha256
14345 (base32
14346 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
14347 (propagated-inputs
14348 `(("python-flask" ,python-flask)
14349 ("python-htmlmin" ,python-htmlmin)))
14350 (build-system python-build-system)
14351 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
14352 (synopsis "HTML response minifier for Flask")
14353 (description
14354 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
14355 (license license:bsd-3)))
14356
14357 (define-public python2-flask-htmlmin
14358 (package-with-python2 python-flask-htmlmin))
14359
14360 (define-public python-flask-login
14361 (package
14362 (name "python-flask-login")
14363 (version "0.4.0")
14364 (source
14365 (origin
14366 (method url-fetch)
14367 (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
14368 version ".tar.gz"))
14369 (file-name (string-append name "-" version ".tar.gz"))
14370 (sha256
14371 (base32
14372 "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
14373 (arguments
14374 ;; Tests fail PEP8 compliance. See:
14375 ;; https://github.com/maxcountryman/flask-login/issues/340
14376 `(#:tests? #f))
14377 (build-system python-build-system)
14378 (home-page "https://github.com/maxcountryman/flask-login")
14379 (synopsis "User session management for Flask")
14380 (description
14381 "@code{Flask-Login} provides user session management for Flask. It
14382 handles the common tasks of logging in, logging out, and remembering your
14383 users' sessions over extended periods of time.")
14384 (license license:expat)))
14385
14386 (define-public python2-flask-login
14387 (package-with-python2 python-flask-login))
14388
14389 (define-public python-astroid
14390 (package
14391 (name "python-astroid")
14392 (version "1.5.3")
14393 (source
14394 (origin
14395 (method url-fetch)
14396 (uri (string-append
14397 "https://github.com/PyCQA/astroid/archive/astroid-"
14398 version ".tar.gz"))
14399 (sha256
14400 (base32
14401 "0isn5p7f9n48hmksgbrj7dkm9dyglnayzn5jngk37qywg8a74ngn"))))
14402 (build-system python-build-system)
14403 (propagated-inputs
14404 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
14405 ("python-six" ,python-six)
14406 ("python-wrapt" ,python-wrapt)))
14407 (arguments
14408 `(#:phases
14409 (modify-phases %standard-phases
14410 (replace 'check
14411 (lambda _
14412 (zero? (system* "python" "-m" "unittest" "discover"
14413 "-p" "unittest*.py")))))))
14414 (home-page "https://github.com/PyCQA/astroid")
14415 (synopsis "Common base representation of python source code for pylint and
14416 other projects")
14417 (description "@code{python-astroid} provides a common base representation
14418 of python source code for projects such as pychecker, pyreverse, pylint, etc.
14419
14420 It provides a compatible representation which comes from the _ast module. It
14421 rebuilds the tree generated by the builtin _ast module by recursively walking
14422 down the AST and building an extended ast. The new node classes have
14423 additional methods and attributes for different usages. They include some
14424 support for static inference and local name scopes. Furthermore, astroid
14425 builds partial trees by inspecting living objects.")
14426 (license license:lgpl2.1+)
14427 (properties `((python2-variant . ,(delay python2-astroid))))))
14428
14429 (define-public python2-astroid
14430 (let ((base (package-with-python2
14431 (strip-python2-variant python-astroid))))
14432 (package (inherit base)
14433 (propagated-inputs
14434 `(("python2-backports-functools-lru-cache"
14435 ,python2-backports-functools-lru-cache)
14436 ("python2-enum34" ,python2-enum34)
14437 ("python2-singledispatch" ,python2-singledispatch)
14438 ,@(package-propagated-inputs base))))))
14439
14440 (define-public python-isort
14441 (package
14442 (name "python-isort")
14443 (version "4.2.5")
14444 (source
14445 (origin
14446 (method url-fetch)
14447 (uri (string-append
14448 "https://github.com/timothycrosley/isort/archive/"
14449 version ".tar.gz"))
14450 (file-name (string-append name "-" version ".tar.gz"))
14451 (sha256
14452 (base32
14453 "0zsrgkb0krn5476yncy5dd56k7dk34zqb4bnlvwy44ixgilyjmfh"))))
14454 (build-system python-build-system)
14455 (native-inputs
14456 `(("python-mock" ,python-mock)
14457 ("python-pytest" ,python-pytest)))
14458 (home-page "https://github.com/timothycrosley/isort")
14459 (synopsis "Python utility/library to sort python imports")
14460 (description "@code{python-isort} is a python utility/library to sort
14461 imports alphabetically, and automatically separated into sections. It
14462 provides a command line utility, a python library and plugins for various
14463 editors.")
14464 (license license:expat)))
14465
14466 (define-public python2-isort
14467 (package-with-python2 python-isort))
14468
14469 (define-public python2-backports-functools-lru-cache
14470 (package
14471 (name "python2-backports-functools-lru-cache")
14472 (version "1.3")
14473 (source
14474 (origin
14475 (method url-fetch)
14476 ;; only the pypi tarballs contain the necessary metadata
14477 (uri (pypi-uri "backports.functools_lru_cache" version))
14478 (sha256
14479 (base32
14480 "158ysf2hb0q4p4695abfiym9x1ywg0dgh8a3apd7gqaaxjy22jj4"))))
14481 (build-system python-build-system)
14482 (native-inputs
14483 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14484 (arguments
14485 `(#:python ,python-2))
14486 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14487 (synopsis "Backport of functools.lru_cache from Python 3.3")
14488 (description "@code{python2-backports-functools-lru-cache} is a backport
14489 of @code{functools.lru_cache} from python 3.3.")
14490 (license license:expat)))
14491
14492 (define-public python-configparser
14493 (package
14494 (name "python-configparser")
14495 (version "3.5.0")
14496 (source
14497 (origin
14498 (method url-fetch)
14499 (uri (string-append
14500 "https://bitbucket.org/ambv/configparser/get/"
14501 version ".tar.bz2"))
14502 (file-name (string-append name "-" version ".tar.gz"))
14503 (sha256
14504 (base32
14505 "0waq40as14abwzbb321hfz4vr1fi363nscy32ga14qvfygrg96wa"))))
14506 (build-system python-build-system)
14507 (home-page "http://docs.python.org/py3k/library/configparser.html")
14508 (synopsis "Backport of configparser from python 3.5")
14509 (description "@code{python-configparser} is a backport of
14510 @code{configparser} from Python 3.5 so that it can be used directly
14511 in other versions.")
14512 (license license:expat)))
14513
14514 (define-public python2-configparser
14515 (package-with-python2 python-configparser))
14516
14517 (define-public python2-coverage-test-runner
14518 (package
14519 (name "python2-coverage-test-runner")
14520 (version "1.11")
14521 (source
14522 (origin
14523 (method url-fetch)
14524 (uri (string-append
14525 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/"
14526 "coverage-test-runner/snapshot/coverage-test-runner-"
14527 version ".tar.gz"))
14528 (sha256
14529 (base32
14530 "0y1m7z3dl63kmhcmydl1mwg0hacnf6ghrx9dah17j9iasssfa3g7"))))
14531 (build-system python-build-system)
14532 (arguments
14533 `(#:python ,python-2
14534 #:phases
14535 (modify-phases %standard-phases
14536 (replace 'check
14537 (lambda _
14538 (zero? (system* "./testrun")))))))
14539 (propagated-inputs
14540 `(("python2-coverage" ,python2-coverage)))
14541 (home-page "https://liw.fi/coverage-test-runner/")
14542 (synopsis "Python module for running unit tests")
14543 (description "@code{CoverageTestRunner} is a python module for running
14544 unit tests and failing them if the unit test module does not exercise all
14545 statements in the module it tests.")
14546 (license license:gpl3+)))
14547
14548 (define-public python-pylint
14549 (package
14550 (name "python-pylint")
14551 (version "1.7.2")
14552 (source
14553 (origin
14554 (method url-fetch)
14555 (uri (string-append
14556 "https://github.com/PyCQA/pylint/archive/pylint-"
14557 version ".tar.gz"))
14558 (sha256
14559 (base32
14560 "0mzn1czhf1mgr2wiqfihb274sja02h899b85kywdpivppa9nwrmp"))))
14561 (build-system python-build-system)
14562 (native-inputs
14563 `(("python-pytest" ,python-pytest)
14564 ("python-pytest-runner" ,python-pytest-runner)
14565 ("python-tox" ,python-tox)))
14566 (propagated-inputs
14567 `(("python-astroid" ,python-astroid)
14568 ("python-isort" ,python-isort)
14569 ("python-mccabe" ,python-mccabe)
14570 ("python-six" ,python-six)))
14571 (arguments
14572 `(#:phases
14573 (modify-phases %standard-phases
14574 (replace 'check
14575 (lambda _
14576 ;; Somehow, tests for python2-pylint
14577 ;; fail if run from the build directory
14578 (let ((work "/tmp/work"))
14579 (mkdir-p work)
14580 (setenv "PYTHONPATH"
14581 (string-append (getenv "PYTHONPATH") ":" work))
14582 (copy-recursively "." work)
14583 (with-directory-excursion "/tmp"
14584 (zero? (system* "python" "-m" "unittest" "discover"
14585 "-s" (string-append work "/pylint/test")
14586 "-p" "*test_*.py")))))))))
14587 (home-page "https://github.com/PyCQA/pylint")
14588 (synopsis "Python source code analyzer which looks for coding standard
14589 errors")
14590 (description "Pylint is a Python source code analyzer which looks
14591 for programming errors, helps enforcing a coding standard and sniffs
14592 for some code smells (as defined in Martin Fowler's Refactoring book).
14593
14594 Pylint has many rules enabled by default, way too much to silence them
14595 all on a minimally sized program. It's highly configurable and handle
14596 pragmas to control it from within your code. Additionally, it is
14597 possible to write plugins to add your own checks.")
14598 (properties `((python2-variant . ,(delay python2-pylint))))
14599 (license license:gpl2+)))
14600
14601 (define-public python2-pylint
14602 (let ((pylint (package-with-python2
14603 (strip-python2-variant python-pylint))))
14604 (package (inherit pylint)
14605 (propagated-inputs
14606 `(("python2-backports-functools-lru-cache"
14607 ,python2-backports-functools-lru-cache)
14608 ("python2-configparser" ,python2-configparser)
14609 ,@(package-propagated-inputs pylint))))))
14610
14611 (define-public python-paramunittest
14612 (package
14613 (name "python-paramunittest")
14614 (version "0.2")
14615 (source
14616 (origin
14617 (method url-fetch)
14618 (uri (pypi-uri "ParamUnittest" version))
14619 (sha256
14620 (base32
14621 "0kp793hws5xv1wvycxq7jw2pwy36f35k39jg8hx5qikij5a0jid1"))))
14622 (build-system python-build-system)
14623 (home-page
14624 "https://github.com/rik0/ParamUnittest")
14625 (synopsis
14626 "Simple extension to have parametrized unit tests")
14627 (description
14628 "This package allows to create parametrized unit-tests that work with the standard
14629 unittest package. A parametrized test case is automatically converted to multiple test
14630 cases. Since they are TestCase subclasses, they work with other test suites that
14631 recognize TestCases.")
14632 (license license:bsd-2)))
14633
14634 (define-public python2-python-paramunittest
14635 (package-with-python2 python-paramunittest))
14636
14637 (define-public python-mando
14638 (package
14639 (name "python-mando")
14640 (version "0.5")
14641 (source
14642 (origin
14643 (method url-fetch)
14644 (uri (pypi-uri "mando" version))
14645 (sha256
14646 (base32
14647 "0q05h66439gqdmlk4jqm6xrwrzfdgs4mwk70barxhr2y83qbbdc0"))))
14648 (build-system python-build-system)
14649 (propagated-inputs
14650 `(("python-rst2ansi" ,python-rst2ansi)))
14651 (native-inputs
14652 `(("python-sphinx" ,python-sphinx-1.5.3)
14653 ("python-paramunittest" ,python-paramunittest)))
14654 (home-page "https://mando.readthedocs.org/")
14655 (synopsis
14656 "Wrapper around argparse, allowing creation of complete CLI applications")
14657 (description
14658 "This package is a wrapper around argparse, allowing you to write complete CLI
14659 applications in seconds while maintaining all the flexibility.")
14660 (license license:expat)))
14661
14662 (define-public python2-mando
14663 (package-with-python2 python-mando))
14664
14665 (define-public python-mando-0.3.1
14666 ;; python-radon (version 1.5.0) has a requirement
14667 ;; for mando<0.4,>=0.3
14668 (package
14669 (inherit python-mando)
14670 (name "python-mando")
14671 (version "0.3.1")
14672 (source
14673 (origin
14674 (method url-fetch)
14675 (uri (string-append "https://github.com/rubik/mando/archive/v"
14676 version
14677 ".tar.gz"))
14678 (sha256
14679 (base32
14680 "17jlkdpqw22z1nyml5ybslilqkzmnk0dxxjml8bfghav1l5hbwd2"))))))
14681
14682 (define-public python-fudge
14683 (package
14684 (name "python-fudge")
14685 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14686 ;; package, which is currently the only use of this package.
14687 (version "0.9.6")
14688 (source
14689 (origin
14690 (method url-fetch)
14691 (uri (pypi-uri "fudge" version))
14692 (sha256
14693 (base32
14694 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14695 (build-system python-build-system)
14696 (arguments
14697 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14698 (home-page "https://github.com/fudge-py/fudge")
14699 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14700 (description
14701 "Fudge is a Python module for using fake objects (mocks and stubs) to
14702 test real ones.
14703
14704 In readable Python code, you declare the methods available on your fake object
14705 and how they should be called. Then you inject that into your application and
14706 start testing. This declarative approach means you don’t have to record and
14707 playback actions and you don’t have to inspect your fakes after running code.
14708 If the fake object was used incorrectly then you’ll see an informative
14709 exception message with a traceback that points to the culprit.")
14710 (license license:expat)))
14711
14712 (define-public python2-fudge
14713 (package-with-python2 python-fudge))
14714
14715 (define-public python-oauth2client
14716 (package
14717 (name "python-oauth2client")
14718 (version "4.0.0")
14719 (source
14720 (origin
14721 (method url-fetch)
14722 (uri (pypi-uri "oauth2client" version))
14723 (sha256
14724 (base32
14725 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
14726 (build-system python-build-system)
14727 (arguments
14728 `(#:tests? #f))
14729 (propagated-inputs
14730 `(("python-httplib2" ,python-httplib2)
14731 ("python-pyasn1" ,python-pyasn1)
14732 ("python-pyasn1-modules" ,python-pyasn1-modules)
14733 ("python-rsa" ,python-rsa)
14734 ("python-six" ,python-six)))
14735 (home-page "http://github.com/google/oauth2client/")
14736 (synopsis "OAuth 2.0 client library")
14737 (description "@code{python-oauth2client} provides an OAuth 2.0 client
14738 library for Python")
14739 (license license:asl2.0)))
14740
14741 (define-public python-flask-oidc
14742 (package
14743 (name "python-flask-oidc")
14744 (version "1.1.1")
14745 (source
14746 (origin
14747 (method url-fetch)
14748 (uri (pypi-uri "flask-oidc" version))
14749 (sha256
14750 (base32
14751 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
14752 (build-system python-build-system)
14753 (propagated-inputs
14754 `(("python-flask" ,python-flask)
14755 ("python-itsdangerous" ,python-itsdangerous)
14756 ("python-oauth2client" ,python-oauth2client)
14757 ("python-six" ,python-six)))
14758 (native-inputs
14759 `(("python-nose" ,python-nose)
14760 ("python-mock" ,python-mock)))
14761 (home-page "https://github.com/puiterwijk/flask-oidc")
14762 (synopsis "OpenID Connect extension for Flask")
14763 (description "@code{python-flask-oidc} provides an OpenID Connect extension
14764 for Flask.")
14765 (license license:bsd-2)))
14766
14767 (define-public python-mwclient
14768 (package
14769 (name "python-mwclient")
14770 (version "0.8.4")
14771 (source
14772 (origin
14773 (method url-fetch)
14774 ;; The PyPI version wouldn't contain tests.
14775 (uri (string-append "https://github.com/mwclient/mwclient/archive/"
14776 "v" version ".tar.gz"))
14777 (sha256
14778 (base32
14779 "1jj0yhilkjir00719fc7w133x7hdyhkxhk6xblla4asig45klsfv"))))
14780 (build-system python-build-system)
14781 (propagated-inputs
14782 `(("python-requests" ,python-requests)
14783 ("python-requests-oauthlib"
14784 ,python-requests-oauthlib)
14785 ("python-six" ,python-six)))
14786 (native-inputs
14787 `(("python-mock" ,python-mock)
14788 ("python-pytest" ,python-pytest)
14789 ("python-pytest-pep8" ,python-pytest-pep8)
14790 ("python-pytest-cache" ,python-pytest-cache)
14791 ("python-pytest-cov" ,python-pytest-cov)
14792 ("python-responses" ,python-responses)))
14793 (home-page "https://github.com/btongminh/mwclient")
14794 (synopsis "MediaWiki API client")
14795 (description "This package provides a MediaWiki API client.")
14796 (license license:expat)))
14797
14798 (define-public python2-mwclient
14799 (package-with-python2 python-mwclient))
14800
14801 (define-public python-pytest-warnings
14802 (package
14803 (name "python-pytest-warnings")
14804 (version "0.2.0")
14805 (source
14806 (origin
14807 (method url-fetch)
14808 (uri (pypi-uri "pytest-warnings" version))
14809 (sha256
14810 (base32
14811 "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
14812 (build-system python-build-system)
14813 (propagated-inputs
14814 `(("pytest" ,python-pytest-3.0)))
14815 (home-page "https://github.com/fschulze/pytest-warnings")
14816 (synopsis "Pytest plugin to list Python warnings in pytest report")
14817 (description
14818 "Python-pytest-warnings is a pytest plugin to list Python warnings in
14819 pytest report.")
14820 (license license:expat)))
14821
14822 (define-public python2-pytest-warnings
14823 (package-with-python2 python-pytest-warnings))
14824
14825 (define-public python-pytest-capturelog
14826 (package
14827 (name "python-pytest-capturelog")
14828 (version "0.7")
14829 (source
14830 (origin
14831 (method url-fetch)
14832 (uri (pypi-uri "pytest-capturelog" version ".tar.gz"))
14833 (sha256
14834 (base32
14835 "038049nyjl7di59ycnxvc9nydivc5m8np3hqq84j2iirkccdbs5n"))))
14836 (build-system python-build-system)
14837 (propagated-inputs
14838 `(("pytest" ,python-pytest-3.0)))
14839 (home-page "http://bitbucket.org/memedough/pytest-capturelog/overview")
14840 (synopsis "Pytest plugin to catch log messages")
14841 (description
14842 "Python-pytest-catchlog is a pytest plugin to catch log messages.")
14843 (license license:expat)))
14844
14845 (define-public python2-pytest-capturelog
14846 (package-with-python2 python-pytest-capturelog))
14847
14848 (define-public python-pytest-catchlog
14849 (package
14850 (name "python-pytest-catchlog")
14851 (version "1.2.2")
14852 (source
14853 (origin
14854 (method url-fetch)
14855 (uri (pypi-uri "pytest-catchlog" version ".zip"))
14856 (sha256
14857 (base32
14858 "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
14859 (build-system python-build-system)
14860 (native-inputs
14861 `(("unzip" ,unzip)))
14862 (propagated-inputs
14863 `(("pytest" ,python-pytest-3.0)))
14864 (home-page "https://github.com/eisensheng/pytest-catchlog")
14865 (synopsis "Pytest plugin to catch log messages")
14866 (description
14867 "Python-pytest-catchlog is a pytest plugin to catch log messages. This is
14868 a fork of pytest-capturelog.")
14869 (license license:expat)))
14870
14871 (define-public python2-pytest-catchlog
14872 (package-with-python2 python-pytest-catchlog))
14873
14874 (define-public python-utils
14875 (package
14876 (name "python-utils")
14877 (version "2.1.0")
14878 (source (origin
14879 (method url-fetch)
14880 (uri (pypi-uri "python-utils" version))
14881 (sha256
14882 (base32
14883 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14884 (build-system python-build-system)
14885 (native-inputs
14886 `(("pytest-runner" ,python-pytest-runner)
14887 ("pytest" ,python-pytest)
14888 ("six" ,python-six)))
14889 (home-page "https://github.com/WoLpH/python-utils")
14890 (synopsis "Convenient utilities not included with the standard Python install")
14891 (description
14892 "Python Utils is a collection of small Python functions and classes which
14893 make common patterns shorter and easier.")
14894 (license license:bsd-2)))
14895
14896 (define-public python2-utils
14897 (package-with-python2 python-utils))
14898
14899 (define-public python-webassets
14900 (package
14901 (name "python-webassets")
14902 (version "0.12.1")
14903 (source
14904 (origin
14905 (method url-fetch)
14906 (uri (pypi-uri "webassets" version))
14907 (sha256
14908 (base32
14909 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
14910 (build-system python-build-system)
14911 (native-inputs
14912 `(("python-jinja2" ,python-jinja2)
14913 ("python-mock" ,python-mock)
14914 ("python-nose" ,python-nose)
14915 ("python-pytest" ,python-pytest)))
14916 (home-page "https://github.com/miracle2k/webassets")
14917 (synopsis "Media asset management")
14918 (description "Merges, minifies and compresses Javascript and CSS files,
14919 supporting a variety of different filters, including YUI, jsmin, jspacker or
14920 CSS tidy. Also supports URL rewriting in CSS files.")
14921 (license license:bsd-2)))
14922
14923 (define-public python-sphinx-me
14924 (package
14925 (name "python-sphinx-me")
14926 (version "0.3")
14927 (source
14928 (origin
14929 (method url-fetch)
14930 (uri (pypi-uri "sphinx-me" version))
14931 (sha256
14932 (base32
14933 "06jzgp213zihnvpcy2y5jy3ykid3apc2ncp2pg6a2g05lhiziglq"))))
14934 (build-system python-build-system)
14935 (home-page "https://github.com/stephenmcd/sphinx-me")
14936 (synopsis "Create a Sphinx documentation shell")
14937 (description
14938 "Create a Sphinx documentation shell for your project and include the
14939 README file as the documentation index. It handles extracting the required
14940 meta data such as the project name, author and version from your project for
14941 use in your Sphinx docs.")
14942 (license license:bsd-2)))
14943
14944 (define-public python2-sphinx-me
14945 (package-with-python2 python-sphinx-me))
14946
14947 (define-public python-cssmin
14948 (package
14949 (name "python-cssmin")
14950 (version "0.2.0")
14951 (source
14952 (origin
14953 (method url-fetch)
14954 (uri (pypi-uri "cssmin" version))
14955 (sha256
14956 (base32
14957 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
14958 (build-system python-build-system)
14959 (home-page "https://github.com/zacharyvoase/cssmin")
14960 (synopsis "Python port of the YUI CSS Compressor")
14961 (description "Python port of the YUI CSS Compressor.")
14962 (license (list license:expat license:bsd-3))))
14963
14964 (define-public python2-cssmin
14965 (package-with-python2 python-cssmin))
14966
14967 (define-public python-diff-match-patch
14968 (package
14969 (name "python-diff-match-patch")
14970 (version "20121119")
14971 (source
14972 (origin
14973 (method url-fetch)
14974 (uri (pypi-uri "diff-match-patch" version))
14975 (sha256
14976 (base32
14977 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14978 (build-system python-build-system)
14979 (home-page "https://code.google.com/p/google-diff-match-patch")
14980 (synopsis "Synchronize plain text")
14981 (description "Diff Match and Patch libraries offer robust algorithms to
14982 perform the operations required for synchronizing plain text.")
14983 (license license:asl2.0)))
14984
14985 (define-public python2-diff-match-patch
14986 (package-with-python2 python-diff-match-patch))
14987
14988 (define-public python-dirsync
14989 (package
14990 (name "python-dirsync")
14991 (version "2.2.2")
14992 (source
14993 (origin
14994 (method url-fetch)
14995 (uri (pypi-uri "dirsync" version ".zip"))
14996 (sha256
14997 (base32
14998 "1hcdvmkwd5512zbxpin0k7bx5bkgzy3swjx7d0kj1y45af6r75v2"))))
14999 (build-system python-build-system)
15000 (native-inputs
15001 `(("unzip" ,unzip)))
15002 (propagated-inputs
15003 `(("six" ,python-six)))
15004 (home-page "https://bitbucket.org/tkhyn/dirsync")
15005 (synopsis "Advanced directory tree synchronisation tool")
15006 (description "Advanced directory tree synchronisation tool.")
15007 (license license:expat)))
15008
15009 (define-public python2-dirsync
15010 (package-with-python2 python-dirsync))
15011
15012 (define-public python-nosexcover
15013 (package
15014 (name "python-nosexcover")
15015 (version "1.0.11")
15016 (source (origin
15017 (method url-fetch)
15018 (uri (pypi-uri "nosexcover" version))
15019 (sha256
15020 (base32
15021 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
15022 (build-system python-build-system)
15023 (propagated-inputs
15024 `(("python-coverage" ,python-coverage)
15025 ("python-nose" ,python-nose)))
15026 (home-page "http://github.com/cmheisel/nose-xcover")
15027 (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
15028 (description "Nose-xcover is a companion to the built-in
15029 @code{nose.plugins.cover}. This plugin will write out an XML coverage report
15030 to a file named coverage.xml.
15031
15032 It will honor all the options you pass to the Nose coverage plugin,
15033 especially -cover-package.")
15034 (license license:expat)))
15035
15036 (define-public python2-nosexcover
15037 (package-with-python2 python-nosexcover))
15038
15039 (define-public python-elasticsearch
15040 (package
15041 (name "python-elasticsearch")
15042 (version "1.0.0")
15043 (source
15044 (origin
15045 (method url-fetch)
15046 (uri (pypi-uri "elasticsearch" version))
15047 (sha256
15048 (base32
15049 "1sdw1r05cw7ihnmng8ra9v968fj7bq6sji8i1dikymsnkcpgc69g"))))
15050 (build-system python-build-system)
15051 (native-inputs
15052 `(("python-mock" ,python-mock)
15053 ("python-nosexcover" ,python-nosexcover)
15054 ("python-pyaml" ,python-pyaml)
15055 ("python-requests" ,python-requests)))
15056 (propagated-inputs
15057 `(("urllib3" ,python-urllib3)))
15058 (arguments
15059 ;; tests require the test_elasticsearch module but it is not distributed.
15060 `(#:tests? #f))
15061 (home-page "https://github.com/elastic/elasticsearch-py")
15062 (synopsis "Low-level client for Elasticsearch")
15063 (description "Official low-level client for Elasticsearch. Its goal is to
15064 provide common ground for all Elasticsearch-related code in Python; because of
15065 this it tries to be opinion-free and very extendable.")
15066 (license license:expat)))
15067
15068 (define-public python2-elasticsearch
15069 (package-with-python2 python-elasticsearch))
15070
15071 (define-public python-levenshtein
15072 (package
15073 (name "python-levenshtein")
15074 (version "0.12.0")
15075 (source
15076 (origin
15077 (method url-fetch)
15078 (uri (pypi-uri "python-Levenshtein" version))
15079 (sha256
15080 (base32
15081 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
15082 (build-system python-build-system)
15083 (home-page "https://github.com/ztane/python-Levenshtein")
15084 (synopsis "Fast computation of Levenshtein distance and string similarity")
15085 (description
15086 "The Levenshtein Python C extension module contains functions for fast computation of
15087 @enumerate
15088 @item Levenshtein (edit) distance, and edit operations
15089 @item string similarity
15090 @item approximate median strings, and generally string averaging
15091 @item string sequence and set similarity
15092 @end enumerate
15093 It supports both normal and Unicode strings.")
15094 (license license:gpl2+)))
15095
15096 (define-public python2-levenshtein
15097 (package-with-python2 python-levenshtein))
15098
15099 (define-public python-scandir
15100 (package
15101 (name "python-scandir")
15102 (version "1.4")
15103 (source
15104 (origin
15105 (method url-fetch)
15106 (uri (pypi-uri "scandir" version))
15107 (sha256
15108 (base32 "0yjrgp0mxp3d8bjkq2m1ac2ys8n76wykksvgyjrnil9gr3fx7a5d"))))
15109 (build-system python-build-system)
15110 (home-page "https://github.com/benhoyt/scandir")
15111 (synopsis "Directory iteration function")
15112 (description
15113 "Directory iteration function like os.listdir(), except that instead of
15114 returning a list of bare filenames, it yields DirEntry objects that include
15115 file type and stat information along with the name. Using scandir() increases
15116 the speed of os.walk() by 2-20 times (depending on the platform and file
15117 system) by avoiding unnecessary calls to os.stat() in most cases.")
15118 (license license:bsd-3)))
15119
15120 (define-public python2-scandir
15121 (package-with-python2 python-scandir))
15122
15123 (define-public python2-stemming
15124 (package
15125 (name "python2-stemming")
15126 (version "1.0.1")
15127 (source
15128 (origin
15129 (method url-fetch)
15130 (uri (pypi-uri "stemming" version))
15131 (sha256
15132 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
15133 (build-system python-build-system)
15134 (arguments
15135 `(#:python ,python-2))
15136 (home-page "https://bitbucket.org/mchaput/stemming/overview")
15137 (synopsis "Python implementations of various stemming algorithms")
15138 (description
15139 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
15140 stemming algorithms for English. These implementations are straightforward and
15141 efficient, unlike some Python versions of the same algorithms available on the
15142 Web. This package is an extraction of the stemming code included in the Whoosh
15143 search engine.")
15144 (license license:public-domain)))
15145
15146 (define-public python-factory-boy
15147 (package
15148 (name "python-factory-boy")
15149 (version "2.8.1")
15150 (source
15151 (origin
15152 (method url-fetch)
15153 (uri (pypi-uri "factory_boy" version))
15154 (sha256
15155 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
15156 (build-system python-build-system)
15157 (arguments
15158 ;; Tests are not included in the tarball.
15159 `(#:tests? #f))
15160 (propagated-inputs
15161 `(("faker" ,python-faker)))
15162 (home-page "https://github.com/benhoyt/scandir")
15163 (synopsis "Versatile test fixtures replacement")
15164 (description
15165 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
15166
15167 As a fixtures replacement tool, it aims to replace static, hard to maintain
15168 fixtures with easy-to-use factories for complex object.
15169
15170 Instead of building an exhaustive test setup with every possible combination
15171 of corner cases, factory_boy allows you to use objects customized for the
15172 current test, while only declaring the test-specific fields")
15173 (license license:expat)))
15174
15175 (define-public python2-factory-boy
15176 (package-with-python2 python-factory-boy))
15177
15178 (define-public python-translate-toolkit
15179 (package
15180 (name "python-translate-toolkit")
15181 (version "2.1.0")
15182 (source
15183 (origin
15184 (method url-fetch)
15185 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
15186 (sha256
15187 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
15188 (build-system python-build-system)
15189 (native-inputs
15190 `(("python-pytest" ,python-pytest)
15191 ("python-sphinx" ,python-sphinx)))
15192 (propagated-inputs
15193 `(("python-babel" ,python-babel)
15194 ("python-beautifulsoup4" ,python-beautifulsoup4)
15195 ("python-chardet" ,python-chardet)
15196 ("python-diff-match-patch" ,python-diff-match-patch)
15197 ("python-levenshtein" ,python-levenshtein)
15198 ("python-lxml" ,python-lxml)
15199 ("python-six" ,python-six)
15200 ("python-vobject" ,python-vobject)
15201 ("python-pyyaml" ,python-pyyaml)))
15202 (arguments
15203 ;; TODO: tests are not run, because they end with
15204 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
15205 ;; 'parse_funcs'
15206 ;; during test setup.
15207 `(#:tests? #f))
15208 (home-page "http://toolkit.translatehouse.org")
15209 (synopsis "Tools and API for translation and localization engineering")
15210 (description
15211 "Tools and API for translation and localization engineering. It contains
15212 several utilities, as well as an API for building localization tools.")
15213 (license license:gpl2+)))
15214
15215 (define-public python2-translate-toolkit
15216 (package-with-python2 python-translate-toolkit))
15217
15218 (define-public python-mysqlclient
15219 (package
15220 (name "python-mysqlclient")
15221 (version "1.3.10")
15222 (source
15223 (origin
15224 (method url-fetch)
15225 (uri (pypi-uri "mysqlclient" version))
15226 (sha256
15227 (base32
15228 "0qkj570x4rbsblji6frvsvp2v1ap32dqzj1lq62zp9515ffsyaj5"))))
15229 (build-system python-build-system)
15230 (native-inputs
15231 `(("mariadb" ,mariadb)
15232 ("nose" ,python-nose)
15233 ("mock" ,python-mock)
15234 ("py.test" ,python-pytest)))
15235 (inputs
15236 `(("mysql" ,mysql)
15237 ("libz" ,zlib)
15238 ("openssl" ,openssl)))
15239 (home-page "https://github.com/PyMySQL/mysqlclient-python")
15240 (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
15241 (description "MySQLdb is an interface to the popular MySQL database server
15242 for Python. The design goals are:
15243 @enumerate
15244 @item Compliance with Python database API version 2.0 [PEP-0249],
15245 @item Thread-safety,
15246 @item Thread-friendliness (threads will not block each other).
15247 @end enumerate")
15248 (license license:gpl2)))
15249
15250 (define-public python2-mysqlclient
15251 (package-with-python2 python-mysqlclient))
15252
15253 (define-public python-hiredis
15254 (package
15255 (name "python-hiredis")
15256 (version "0.2.0")
15257 (source
15258 (origin
15259 (method url-fetch)
15260 (uri (pypi-uri "hiredis" version))
15261 (sha256
15262 (base32
15263 "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
15264 (build-system python-build-system)
15265 (arguments
15266 ;; no tests
15267 `(#:tests? #f))
15268 (home-page "https://github.com/redis/hiredis-py")
15269 (synopsis "Python extension that wraps protocol parsing code in hiredis")
15270 (description "Python-hiredis is a python extension that wraps protocol
15271 parsing code in hiredis. It primarily speeds up parsing of multi bulk replies.")
15272 (license license:bsd-3)))
15273
15274 (define-public python2-hiredis
15275 (package-with-python2 python-hiredis))
15276
15277 (define-public python-fakeredis
15278 (package
15279 (name "python-fakeredis")
15280 (version "0.8.2")
15281 (source
15282 (origin
15283 (method url-fetch)
15284 (uri (pypi-uri "fakeredis" version))
15285 (sha256
15286 (base32
15287 "0zncahj3byyasyfx9i7k991ph0n0lq8v3a21pqri5qxn9564bk9r"))))
15288 (build-system python-build-system)
15289 (arguments
15290 ;; no tests
15291 `(#:tests? #f))
15292 (home-page "https://github.com/jamesls/fakeredis")
15293 (synopsis "Fake implementation of redis API for testing purposes")
15294 (description "Fakeredis is a pure python implementation of the redis-py
15295 python client that simulates talking to a redis server. This was created for a
15296 single purpose: to write unittests. Setting up redis is not hard, but many time
15297 you want to write unittests that do not talk to an external server (such as
15298 redis). This module now allows tests to simply use this module as a reasonable
15299 substitute for redis.")
15300 (license license:bsd-3)))
15301
15302 (define-public python2-fakeredis
15303 (package-with-python2 python-fakeredis))
15304
15305 (define-public python-behave-web-api
15306 (package
15307 (name "python-behave-web-api")
15308 (version "1.0.6")
15309 (source
15310 (origin
15311 (method url-fetch)
15312 (uri (pypi-uri "behave-web-api" version))
15313 (sha256
15314 (base32
15315 "03kpq2xsy1gab3jy0dccbxlsg7vwfy4lagss0qldwmx3xz6b3i19"))))
15316 (build-system python-build-system)
15317 (arguments
15318 `(#:phases
15319 (modify-phases %standard-phases
15320 (add-after 'unpack 'fix-dependencies
15321 (lambda _
15322 (substitute* "setup.py"
15323 (("'wheel'") "") ; We don't use it.
15324 (("'ordereddict==1.1'") ""))))))) ; Python >= 2.7 has it built-in.
15325 (propagated-inputs
15326 `(("behave" ,behave)
15327 ("python-requests" ,python-requests)))
15328 (home-page "https://github.com/jefersondaniel/behave-web-api")
15329 (synopsis "Provides testing for JSON APIs with Behave for Python")
15330 (description "This package provides testing utility modules for testing
15331 JSON APIs with Behave.")
15332 (license license:expat)))
15333
15334 (define-public python2-behave-web-api
15335 (package-with-python2 python-behave-web-api))
15336
15337 (define-public python-flask-script
15338 (package
15339 (name "python-flask-script")
15340 (version "2.0.5")
15341 (source
15342 (origin
15343 (method url-fetch)
15344 (uri (pypi-uri "Flask-Script" version))
15345 (sha256
15346 (base32
15347 "0zqh2yq8zk7m9b4xw1ryqmrljkdigfb3hk5155a3b5hkfnn6xxyf"))))
15348 (build-system python-build-system)
15349 (propagated-inputs
15350 `(("python-flask" ,python-flask)
15351 ("python-argcomplete" ,python-argcomplete)
15352 ("python-werkzeug" ,python-werkzeug)))
15353 (native-inputs
15354 `(("python-pytest" ,python-pytest)))
15355 (home-page
15356 "http://github.com/smurfix/flask-script")
15357 (synopsis "Scripting support for Flask")
15358 (description "The Flask-Script extension provides support for writing
15359 external scripts in Flask. This includes running a development server,
15360 a customised Python shell, scripts to set up your database, cronjobs,
15361 and other command-line tasks that belong outside the web application
15362 itself.")
15363 (license license:bsd-3)))
15364
15365 (define-public python2-flask-script
15366 (package-with-python2 python-flask-script))
15367
15368 (define-public python-flask-migrate
15369 (package
15370 (name "python-flask-migrate")
15371 (version "2.0.3")
15372 (source
15373 (origin
15374 (method url-fetch)
15375 (uri (pypi-uri "Flask-Migrate" version))
15376 (sha256
15377 (base32
15378 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
15379 (build-system python-build-system)
15380 (propagated-inputs
15381 `(("python-flask" ,python-flask)
15382 ("python-alembic" ,python-alembic)
15383 ("python-sqlalchemy" ,python-sqlalchemy)
15384 ("python-flask-script" ,python-flask-script)
15385 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
15386 (home-page "http://github.com/miguelgrinberg/flask-migrate/")
15387 (synopsis "SQLAlchemy database migrations for Flask programs using
15388 Alembic")
15389 (description "This package contains SQLAlchemy database migration tools
15390 for Flask programs that are using @code{python-alembic}.")
15391 (license license:expat)))
15392
15393 (define-public python2-flask-migrate
15394 (package-with-python2 python-flask-migrate))
15395
15396 (define-public python-packaging
15397 (package
15398 (name "python-packaging")
15399 (version "16.8")
15400 (source
15401 (origin
15402 (method url-fetch)
15403 (uri (pypi-uri "packaging" version))
15404 (sha256
15405 (base32
15406 "17k1xbjshackwvbsnxqixbph8rbqhz4bf4g3al5xyzhavxgq6l2x"))))
15407 (build-system python-build-system)
15408 (native-inputs
15409 `(("python-pretend" ,python-pretend)
15410 ("python-pytest" ,python-pytest)))
15411 (propagated-inputs
15412 `(("python-pyparsing" ,python-pyparsing)
15413 ("python-six" ,python-six)))
15414 (home-page "https://github.com/pypa/packaging")
15415 (synopsis "Core utilities for Python packages")
15416 (description "Packaging is a Python module for dealing with Python packages.
15417 It offers an interface for working with package versions, names, and dependency
15418 information.")
15419 ;; From 'LICENSE': This software is made available under the terms of
15420 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
15421 ;; Contributions to this software is made under the terms of *both* these
15422 ;; licenses.
15423 (license (list license:asl2.0 license:bsd-2))))
15424
15425 (define-public python2-packaging
15426 (package-with-python2 python-packaging))
15427
15428 (define-public python-sql
15429 (package
15430 (name "python-sql")
15431 (version "0.9")
15432 (source
15433 (origin
15434 (method url-fetch)
15435 (uri (pypi-uri "python-sql" version))
15436 (sha256
15437 (base32
15438 "0p6kaqj02vz0habmdx37zjk6hjxdfm8aw737zs059vvpr70ird87"))))
15439 (build-system python-build-system)
15440 (home-page "https://python-sql.tryton.org/")
15441 (synopsis "Library to write SQL queries in a pythonic way")
15442 (description "@code{python-sql} is a library to write SQL queries, that
15443 transforms idiomatic python function calls to well-formed SQL queries.")
15444 (license license:bsd-3)))
15445
15446 (define-public python2-sql
15447 (package-with-python2 python-sql))
15448
15449 (define-public python-genshi
15450 (package
15451 (name "python-genshi")
15452 (version "0.7")
15453 (source
15454 (origin
15455 (method url-fetch)
15456 (uri (string-append
15457 "https://ftp.edgewall.org/pub/genshi/Genshi-"
15458 version ".tar.gz"))
15459 (patches
15460 (search-patches
15461 ;; The first 4 patches are in the master branch upstream.
15462 ;; See this as a reference https://genshi.edgewall.org/ticket/582
15463 ;; The last 2 are NOT in any branch.
15464 ;; They were sent as attachments to a ticket opened at
15465 ;; https://genshi.edgewall.org/ticket/602#no1
15466 "python-genshi-stripping-of-unsafe-script-tags.patch"
15467 "python-genshi-disable-speedups-on-python-3.3.patch"
15468 "python-genshi-isstring-helper.patch"
15469 "python-genshi-add-support-for-python-3.4-AST.patch"
15470 "python-genshi-fix-tests-on-python-3.5.patch"
15471 "python-genshi-buildable-on-python-2.7.patch"))
15472 (sha256
15473 (base32
15474 "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
15475 (build-system python-build-system)
15476 (home-page "https://genshi.edgewall.org/")
15477 (synopsis "Toolkit for generation of output for the web")
15478 (description "Genshi is a Python library that provides an integrated set
15479 of components for parsing, generating, and processing HTML, XML or other
15480 textual content for output generation on the web.")
15481 (license license:bsd-3)))
15482
15483 ;; The linter here claims that patch file names should start with the package
15484 ;; name. But, in this case the patches are inherited from python-genshi with
15485 ;; the "python-genshi-" prefix instead of "python2-genshi-".
15486 (define-public python2-genshi
15487 (package-with-python2 python-genshi))
15488
15489 (define-public python-relatorio
15490 (package
15491 (name "python-relatorio")
15492 (version "0.6.4")
15493 (source
15494 (origin
15495 (method url-fetch)
15496 (uri (pypi-uri "relatorio" version))
15497 (sha256
15498 (base32
15499 "0lincq79mzgazwd9gh41dybjh9c3n87r83pl8nk3j79aihyfk84z"))))
15500 (build-system python-build-system)
15501 (propagated-inputs
15502 `(("python-lxml" ,python-lxml)
15503 ("python-genshi" ,python-genshi)))
15504 (home-page "https://relatorio.tryton.org/")
15505 (synopsis "Templating library able to output ODT and PDF files")
15506 (description "Relatorio is a templating library which provides a way to
15507 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
15508 for more filetypes can be easily added by creating plugins for them.")
15509 (license license:gpl3+)))
15510
15511 (define-public python2-relatorio
15512 (package-with-python2 python-relatorio))
15513
15514 (define-public python-radon
15515 (package
15516 (name "python-radon")
15517 (version "1.5.0")
15518 (source
15519 (origin
15520 (method url-fetch)
15521 (uri (pypi-uri "radon" version))
15522 (sha256
15523 (base32
15524 "1h6jv36am0i827182a04ki6291lyx4kp957xfr5njgprj4nd0qsl"))))
15525 (build-system python-build-system)
15526 (propagated-inputs
15527 `(("python-colorama" ,python-colorama)
15528 ("python-flake8-polyfill" ,python-flake8-polyfill)
15529 ("python-mando" ,python-mando-0.3.1)))
15530 (native-inputs
15531 `(("python-flake8" ,python-flake8)
15532 ("python-tox" ,python-tox)
15533 ("python-pytest" ,python-pytest)
15534 ("python-paramunittest" ,python-paramunittest)))
15535 (home-page "https://radon.readthedocs.org/")
15536 (synopsis "Code Metrics in Python")
15537 (description "Radon is a Python tool which computes various code metrics.
15538 Supported metrics are:
15539 @itemize @bullet
15540 @item raw metrics: SLOC, comment lines, blank lines, &c.
15541 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
15542 @item Halstead metrics (all of them)
15543 @item the Maintainability Index (a Visual Studio metric)
15544 @end itemize")
15545 (license license:expat)))
15546
15547 (define-public python2-radon
15548 (package-with-python2 python-radon))
15549
15550 (define-public python-sure
15551 (package
15552 (name "python-sure")
15553 (version "1.4.6")
15554 (source
15555 (origin
15556 (method url-fetch)
15557 (uri (pypi-uri "sure" version))
15558 (sha256
15559 (base32
15560 "1iyqsy2d6radi88g1qf0lziy5b39h5cpb3g5jiqyb4xi46ig3x1z"))))
15561 (build-system python-build-system)
15562 (propagated-inputs
15563 `(("python-mock" ,python-mock)
15564 ("python-six" ,python-six)))
15565 (native-inputs
15566 `(("python-nose" ,python-nose)))
15567 (home-page "https://github.com/gabrielfalcao/sure")
15568 (synopsis "Automated testing library in python for python")
15569 (description
15570 "Sure is a python library that leverages a DSL for writing assertions.
15571 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
15572 (license license:gpl3+)))
15573
15574 (define-public python2-sure
15575 (package-with-python2 python-sure))
15576
15577 (define-public python2-couleur
15578 ;; This package does not seem to support python3 at all, hence,
15579 ;; only the python2 variant definition is provided.
15580 (package
15581 (name "python2-couleur")
15582 (version "0.6.2")
15583 (source
15584 (origin
15585 (method url-fetch)
15586 (uri (pypi-uri "couleur" version))
15587 (sha256
15588 (base32
15589 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
15590 (build-system python-build-system)
15591 (arguments
15592 `(#:python ,python-2))
15593 (home-page "https://github.com/gabrielfalcao/couleur")
15594 (synopsis
15595 "ANSI terminal tool for python, colored shell and other handy fancy features")
15596 (description
15597 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
15598 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
15599 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
15600 ;; https://github.com/gabrielfalcao/couleur/issues/11
15601 (license license:lgpl3+)))
15602
15603 (define-public python-misaka
15604 (package
15605 (name "python-misaka")
15606 (version "2.1.0")
15607 (source
15608 (origin
15609 (method url-fetch)
15610 (uri (pypi-uri "misaka" version))
15611 (sha256
15612 (base32
15613 "1yqrq3a5rracirmvk52n28nn6ckdaz897gnigv89a9gmyn87sqw7"))))
15614 (build-system python-build-system)
15615 (arguments
15616 `(;; Line 37 of setup.py calls self.run_command('develop')
15617 ;; in the 'check' phase. This command seems to be trying
15618 ;; to write to
15619 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
15620 ;; for which it does not have the permission to write.
15621 #:tests? #f))
15622 (propagated-inputs
15623 `(("python-cffi" ,python-cffi)))
15624 (home-page "https://github.com/FSX/misaka")
15625 (synopsis "Python binding for Hoedown")
15626 (description
15627 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
15628 library written in C. It features a fast HTML renderer and functionality to make custom
15629 renderers (e.g. man pages or LaTeX).")
15630 (license license:expat)))
15631
15632 (define-public python2-misaka
15633 (package-with-python2 python-misaka))
15634
15635 (define-public python2-steadymark
15636 ;; This is forced into being a python2 only variant
15637 ;; due to its dependence on couleur that has no support
15638 ;; for python3
15639 (package
15640 (name "python2-steadymark")
15641 (version "0.7.3")
15642 (source
15643 (origin
15644 (method url-fetch)
15645 (uri (pypi-uri "steadymark" version))
15646 (sha256
15647 (base32
15648 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
15649 (build-system python-build-system)
15650 (native-inputs
15651 `(("python-couleur" ,python2-couleur)
15652 ("python-sure" ,python2-sure)
15653 ("python-misaka" ,python2-misaka)))
15654 (arguments
15655 `(#:python ,python-2
15656 #:phases
15657 (modify-phases %standard-phases
15658 (add-before 'build 'patch-setup-py
15659 (lambda _
15660 ;; Update requirements from dependency==version
15661 ;; to dependency>=version
15662 (substitute* "setup.py"
15663 (("==") ">="))
15664 #t)))))
15665 (home-page "https://github.com/gabrielfalcao/steadymark")
15666 (synopsis "Markdown-based test runner for python")
15667 (description
15668 "@code{Steadymark} allows documentation to be written in github-flavoured
15669 markdown. The documentation may contain snippets of code surrounded by python
15670 code blocks and @code{Steadymark} will find these snippets and run them, making
15671 sure that there are no old malfunctional examples in the documentation examples.")
15672 (license license:expat)))
15673
15674 (define-public python-nose-randomly
15675 (package
15676 (name "python-nose-randomly")
15677 (version "1.2.5")
15678 (source
15679 (origin
15680 (method url-fetch)
15681 (uri (pypi-uri "nose-randomly" version))
15682 (sha256
15683 (base32
15684 "1cw9dlr1zh3w4i438kin7z0rm8092ki52hayisyc43h9pcplq7rn"))))
15685 (build-system python-build-system)
15686 (native-inputs
15687 `(("python-nose" ,python-nose)
15688 ("python-numpy" ,python-numpy)))
15689 (home-page "https://github.com/adamchainz/nose-randomly")
15690 (synopsis
15691 "Nose plugin to randomly order tests and control random.seed")
15692 (description
15693 "This is a @code{Nose} plugin to randomly order tests which can be quite
15694 powerful in discovering hidden flaws in the tests themselves, while helping to
15695 reduce inter-test dependencies. It also helps in controlling @code{random.seed},
15696 by resetting it to a repeatable number for each test, enabling the tests to
15697 create data based on random numbers and yet remain repeatable.")
15698 (license license:bsd-3)))
15699
15700 (define-public python2-nose-randomly
15701 (package-with-python2 python-nose-randomly))
15702
15703 (define-public python-jsonpointer
15704 (package
15705 (name "python-jsonpointer")
15706 (version "1.10")
15707 (source
15708 (origin
15709 (method url-fetch)
15710 (uri (pypi-uri "jsonpointer" version))
15711 (sha256
15712 (base32
15713 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15714 (build-system python-build-system)
15715 (home-page "https://github.com/stefankoegl/python-json-pointer")
15716 (synopsis "Identify specific nodes in a JSON document")
15717 (description "@code{jsonpointer} allows you to access specific nodes
15718 by path in a JSON document (see RFC 6901).")
15719 (license license:bsd-3)))
15720
15721 (define-public python2-jsonpointer
15722 (package-with-python2 python-jsonpointer))
15723
15724 (define-public python-jsonpatch
15725 (package
15726 (name "python-jsonpatch")
15727 (version "1.16")
15728 (source
15729 (origin
15730 (method url-fetch)
15731 ;; pypi version lacks tests.js
15732 (uri (string-append "https://github.com/stefankoegl/python-json-patch/"
15733 "archive/v" version ".tar.gz"))
15734 (file-name (string-append name "-" version ".tar.gz"))
15735 (sha256
15736 (base32
15737 "085ykisl8v7mv9h7hvhdy3l2fjzs4214gx32r5k6nx4f76hbv6y5"))))
15738 (build-system python-build-system)
15739 (native-inputs
15740 `(("python-jsonpointer" ,python-jsonpointer)))
15741 (home-page "https://github.com/stefankoegl/python-json-patch")
15742 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
15743 (description "@code{jsonpatch} is a library and program that allows
15744 applying JSON Patches according to RFC 6902.")
15745 (license license:bsd-3)))
15746
15747 (define-public python2-jsonpatch
15748 (package-with-python2 python-jsonpatch))
15749
15750 (define-public python-jsonpatch-0.4
15751 (package (inherit python-jsonpatch)
15752 (name "python-jsonpatch")
15753 (version "0.4")
15754 (source
15755 (origin
15756 (method url-fetch)
15757 (uri (string-append "https://github.com/stefankoegl/python-json-patch/"
15758 "archive/v" version ".tar.gz"))
15759 (file-name (string-append name "-" version ".tar.gz"))
15760 (sha256
15761 (base32
15762 "0j0cd9z9zyp8kppp464jxrfgrnbgkzl1yi10i5gsv8yz6d95929d"))))))
15763
15764 (define-public python2-jsonpatch-0.4
15765 (package-with-python2 python-jsonpatch-0.4))
15766
15767 (define-public python-rfc3987
15768 (package
15769 (name "python-rfc3987")
15770 (version "1.3.7")
15771 (source
15772 (origin
15773 (method url-fetch)
15774 (uri (pypi-uri "rfc3987" version))
15775 (sha256
15776 (base32
15777 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15778 (build-system python-build-system)
15779 (home-page "http://pypi.python.org/pypi/rfc3987")
15780 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15781 (description "@code{rfc3987} provides routines for parsing and
15782 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15783 (license license:gpl3+)))
15784
15785 (define-public python2-rfc3987
15786 (package-with-python2 python-rfc3987))
15787
15788 (define-public python-validate-email
15789 (package
15790 (name "python-validate-email")
15791 (version "1.3")
15792 (source
15793 (origin
15794 (method url-fetch)
15795 (uri (pypi-uri "validate_email" version))
15796 (sha256
15797 (base32
15798 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15799 (build-system python-build-system)
15800 (home-page "http://github.com/syrusakbary/validate_email")
15801 (synopsis "Verifies if an email address is valid and really exists")
15802 (description "@code{validate_email} can be used to verify if an email
15803 address is valid and really exists.")
15804 (license license:lgpl3+)))
15805
15806 (define-public python2-validate-email
15807 (package-with-python2 python-validate-email))
15808
15809 (define-public python-flex
15810 (package
15811 (name "python-flex")
15812 (version "6.10.0")
15813 (source
15814 (origin
15815 (method url-fetch)
15816 (uri (pypi-uri "flex" version))
15817 (sha256
15818 (base32
15819 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15820 (build-system python-build-system)
15821 (propagated-inputs
15822 `(("python-click" ,python-click)
15823 ("python-iso8601" ,python-iso8601)
15824 ("python-jsonpointer" ,python-jsonpointer)
15825 ("python-pyyaml" ,python-pyyaml)
15826 ("python-requests" ,python-requests)
15827 ("python-rfc3987" ,python-rfc3987)
15828 ("python-six" ,python-six)
15829 ("python-validate-email" ,python-validate-email)))
15830 (home-page "https://github.com/pipermerriam/flex")
15831 (synopsis "Validates Swagger schemata")
15832 (description "@code{flex} can be used to validate Swagger schemata.")
15833 (license license:bsd-3)))
15834
15835 (define-public python2-flex
15836 (package-with-python2 python-flex))
15837
15838 (define-public python-marshmallow
15839 (package
15840 (name "python-marshmallow")
15841 (version "3.0.0b3")
15842 (source
15843 (origin
15844 (method url-fetch)
15845 (uri (pypi-uri "marshmallow" version))
15846 (sha256
15847 (base32
15848 "07mcrij1yvk85lvgx44wwr9pc80xryghvlgayb057g1cazcypysd"))))
15849 (build-system python-build-system)
15850 (propagated-inputs
15851 `(("python-dateutil" ,python-dateutil)
15852 ("python-simplejson" ,python-simplejson)))
15853 (native-inputs
15854 `(("python-pytest-3.0" ,python-pytest-3.0)
15855 ("python-pytz" ,python-pytz)))
15856 (home-page "https://github.com/marshmallow-code/marshmallow")
15857 (synopsis "Convert complex datatypes to and from native
15858 Python datatypes.")
15859 (description "@code{marshmallow} provides a library for converting
15860 complex datatypes to and from native Python datatypes.")
15861 (license license:expat)))
15862
15863 (define-public python2-marshmallow
15864 (package-with-python2 python-marshmallow))
15865
15866 (define-public python-bottle
15867 (package
15868 (name "python-bottle")
15869 (version "0.12.13")
15870 (source
15871 (origin
15872 (method url-fetch)
15873 (uri (pypi-uri "bottle" version))
15874 (sha256
15875 (base32
15876 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
15877 (build-system python-build-system)
15878 (home-page "http://bottlepy.org/")
15879 (synopsis "WSGI framework for small web-applications.")
15880 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
15881 (license license:expat)))
15882
15883 (define-public python2-bottle
15884 (package-with-python2 python-bottle))
15885
15886 (define-public python-apispec
15887 (package
15888 (name "python-apispec")
15889 (version "0.22.0")
15890 (source
15891 (origin
15892 (method url-fetch)
15893 (uri (pypi-uri "apispec" version))
15894 (sha256
15895 (base32
15896 "0y3jxmgp2d24am3hxl40f5rw9abb0r8037sagax3dv64h4n1azwq"))))
15897 (build-system python-build-system)
15898 (propagated-inputs
15899 `(("python-pyyaml" ,python-pyyaml)))
15900 (native-inputs
15901 `(("python-pytest-3.0" ,python-pytest-3.0)
15902 ("python-flask" ,python-flask)
15903 ("python-marshmallow" ,python-marshmallow)
15904 ("python-tornado" ,python-tornado)
15905 ("python-bottle" ,python-bottle)
15906 ("python-mock" ,python-mock)))
15907 (home-page "https://github.com/marshmallow-code/apispec")
15908 (synopsis "Swagger 2.0 API specification generator")
15909 (description "@code{python-apispec} is a pluggable API specification
15910 generator. Currently supports the OpenAPI specification (f.k.a.
15911 Swagger 2.0).")
15912 (license license:expat)))
15913
15914 (define-public python2-apispec
15915 (package-with-python2 python-apispec))
15916
15917 (define-public python-flasgger
15918 (package
15919 (name "python-flasgger")
15920 (version "0.6.3")
15921 (source
15922 (origin
15923 (method url-fetch)
15924 (uri (string-append "https://github.com/rochacbruno/flasgger/archive/"
15925 version ".tar.gz"))
15926 (file-name (string-append name "-" version ".tar.gz"))
15927 (sha256
15928 (base32
15929 "1gqzlm0rb55fdpsy5ipkganlx9cnpi454fqyycr03jm22zql14ay"))))
15930 (build-system python-build-system)
15931 (arguments
15932 `(#:phases
15933 (modify-phases %standard-phases
15934 (replace 'check
15935 (lambda* (#:key inputs outputs #:allow-other-keys)
15936 (substitute* "Makefile"
15937 (("flake8 flasgger --ignore=F403")
15938 "flake8 flasgger --ignore=E731,F403"))
15939 (setenv "PYTHONPATH" (string-append (getcwd)
15940 ":"
15941 (getenv "PYTHONPATH")))
15942 (zero? (system* "py.test")))))))
15943 (propagated-inputs
15944 `(("python-flask" ,python-flask)
15945 ("python-pyyaml" ,python-pyyaml)
15946 ("python-jsonschema" ,python-jsonschema)
15947 ("python-mistune" ,python-mistune)
15948 ("python-six" ,python-six)))
15949 (native-inputs
15950 `(("python-decorator" ,python-decorator)
15951 ("python-flake8" ,python-flake8)
15952 ("python-flask-restful" ,python-flask-restful)
15953 ("python-flex" ,python-flex)
15954 ("python-pytest-3.0" ,python-pytest-3.0)
15955 ("python-pytest-cov" ,python-pytest-cov)
15956 ("python-marshmallow" ,python-marshmallow)
15957 ("python-apispec" ,python-apispec)))
15958 (home-page "https://github.com/rochacbruno/flasgger/")
15959 (synopsis "Extract Swagger specs from your Flask project")
15960 (description "@code{python-flasgger} allows extracting Swagger specs
15961 from your Flask project. It is a fork of Flask-Swagger.")
15962 (license license:expat)))
15963
15964 (define-public python2-flasgger
15965 (package-with-python2 python-flasgger))
15966
15967 (define-public python-swagger-spec-validator
15968 (package
15969 (name "python-swagger-spec-validator")
15970 (version "2.1.0")
15971 (source
15972 (origin
15973 (method url-fetch)
15974 (uri (pypi-uri "swagger-spec-validator" version))
15975 (sha256
15976 (base32
15977 "13hkpn2lycwr0468yqhjb3kwszqf7hjwlq61w7vdxq1caz31k4nw"))))
15978 (build-system python-build-system)
15979 (propagated-inputs
15980 `(("python-jsonschema" ,python-jsonschema)
15981 ("python-six" ,python-six)))
15982 (home-page
15983 "http://github.com/Yelp/swagger_spec_validator")
15984 (synopsis "Validation of Swagger specifications")
15985 (description "@code{swagger_spec_validator} provides a library for
15986 validating Swagger API specifications.")
15987 (license license:asl2.0)))
15988
15989 (define-public python2-swagger-spec-validator
15990 (package-with-python2 python-swagger-spec-validator))
15991
15992 (define-public python-apache-libcloud
15993 (package
15994 (name "python-apache-libcloud")
15995 (version "2.0.0")
15996 (source
15997 (origin
15998 (method url-fetch)
15999 (uri (pypi-uri "apache-libcloud" version))
16000 (sha256
16001 (base32
16002 "1a71z02ckcxld72k4qgmdnkjan52c4wczncs3p2mp5yafh7dsan7"))))
16003 (build-system python-build-system)
16004 (arguments
16005 `(#:phases
16006 (modify-phases %standard-phases
16007 (add-after 'unpack 'patch-ssh
16008 (lambda* (#:key inputs #:allow-other-keys)
16009 (substitute* "libcloud/compute/ssh.py"
16010 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
16011 "/bin/ssh" "'")))
16012 #t))
16013 (add-after 'unpack 'patch-tests
16014 (lambda _
16015 (substitute* "./libcloud/test/test_file_fixtures.py"
16016 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
16017 (("def _ascii") "def _raw_data(self, method, url, body, headers):
16018 return (httplib.OK,
16019 \"1234abcd\",
16020 {\"test\": \"value\"},
16021 httplib.responses[httplib.OK])
16022 def _ascii"))
16023 (substitute* "libcloud/test/compute/test_ssh_client.py"
16024 (("class ShellOutSSHClientTests")
16025 "@unittest.skip(\"Guix container doesn't have ssh service\")
16026 class ShellOutSSHClientTests")
16027 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
16028 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
16029 (("'.xF0', '.x90', '.x8D', '.x88'")
16030 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
16031 #t)))))
16032 (inputs
16033 `(("openssh" ,openssh)))
16034 (propagated-inputs
16035 `(("python-paramiko" ,python-paramiko)
16036 ("python-requests" ,python-requests)))
16037 (native-inputs
16038 `(("python-lockfile" ,python-lockfile)
16039 ("python-mock" ,python-mock)
16040 ("python-requests-mock" ,python-requests-mock)))
16041 (home-page "https://libcloud.apache.org/")
16042 (synopsis "Unified Cloud API")
16043 (description "@code{libcloud} is a Python library for interacting with
16044 many of the popular cloud service providers using a unified API.")
16045 (license license:asl2.0)))
16046
16047 (define-public python2-apache-libcloud
16048 (package-with-python2 python-apache-libcloud))
16049
16050 (define-public python-smmap2
16051 (package
16052 (name "python-smmap2")
16053 (version "2.0.3")
16054 (source
16055 (origin
16056 (method url-fetch)
16057 (uri (pypi-uri "smmap2" version))
16058 (sha256
16059 (base32
16060 "1hvn28p3zvxa98sbi9lrqvv2ps4q284j4jq9a619zw0m7yv0sly7"))))
16061 (build-system python-build-system)
16062 (native-inputs
16063 `(("python-nosexcover" ,python-nosexcover)))
16064 (home-page "https://github.com/Byron/smmap")
16065 (synopsis "Python sliding window memory map manager")
16066 (description "@code{smmap2} is a pure Python implementation of a sliding
16067 window memory map manager.")
16068 (license license:bsd-3)))
16069
16070 (define-public python2-smmap2
16071 (package-with-python2 python-smmap2))
16072
16073 (define-public python-regex
16074 (package
16075 (name "python-regex")
16076 (version "2017.06.07")
16077 (source (origin
16078 (method url-fetch)
16079 (uri (pypi-uri "regex" version))
16080 (sha256
16081 (base32
16082 "06r6b7yigikbj3a72whl85r2b64pj1r0ypmw9yalmkm0wnxq8mz4"))))
16083 (build-system python-build-system)
16084 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
16085 (synopsis "Alternative regular expression module")
16086 (description "This regular expression implementation is backwards-
16087 compatible with the standard @code{re} module, but offers additional
16088 functionality like full case-folding for case-insensitive matches in Unicode.")
16089 (license license:psfl)))
16090
16091 (define-public python2-regex
16092 (package-with-python2 python-regex))
16093
16094 (define-public python2-pyopengl
16095 (package
16096 (name "python2-pyopengl")
16097 (version "3.1.0")
16098 (source
16099 (origin
16100 (method url-fetch)
16101 (uri (pypi-uri "PyOpenGL" version))
16102 (sha256
16103 (base32
16104 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
16105 (arguments
16106 `(#:python ,python-2))
16107 (build-system python-build-system)
16108 (home-page "http://pyopengl.sourceforge.net")
16109 (synopsis "Standard OpenGL bindings for Python")
16110 (description
16111 "PyOpenGL is the most common cross platform Python binding to OpenGL and
16112 related APIs. The binding is created using the standard @code{ctypes}
16113 library.")
16114 (license license:bsd-3)))
16115
16116 (define-public python-rencode
16117 (package
16118 (name "python-rencode")
16119 (version "1.0.3")
16120 (source
16121 (origin
16122 (method url-fetch)
16123 (uri (pypi-uri "rencode" version))
16124 (sha256
16125 (base32
16126 "08if5yax1xn5yfp8p3765ccjmfcv9di7i4m5jckgnwvdsgznwkbj"))))
16127 (build-system python-build-system)
16128 (native-inputs `(("pkg-config" ,pkg-config)
16129 ("python-cython", python-cython)))
16130 (home-page "https://github.com/aresch/rencode")
16131 (synopsis "Serialization of heterogeneous data structures")
16132 (description
16133 "The @code{rencode} module is a data structure serialization library,
16134 similar to @code{bencode} from the BitTorrent project. For complex,
16135 heterogeneous data structures with many small elements, r-encoding stake up
16136 significantly less space than b-encodings. This version of rencode is a
16137 complete rewrite in Cython to attempt to increase the performance over the
16138 pure Python module.")
16139 (license license:bsd-3)))
16140
16141 (define-public python2-rencode
16142 (package-with-python2 python-rencode))
16143
16144 (define-public python-xenon
16145 (package
16146 (name "python-xenon")
16147 (version "0.5.1")
16148 (source
16149 (origin
16150 (method url-fetch)
16151 (uri (pypi-uri "xenon" version))
16152 (sha256
16153 (base32
16154 "14kby2y48vp3sgwxqlm5d5789yibqwb1qli5fwcmdqg3iayrbklc"))))
16155 (build-system python-build-system)
16156 (native-inputs
16157 `(("python-pyyaml" ,python-pyyaml)
16158 ("python-radon" ,python-radon)
16159 ("python-requests" ,python-requests)
16160 ("python-flake8" ,python-flake8)
16161 ("python-tox" ,python-tox)))
16162 (arguments
16163 `(#:phases
16164 (modify-phases %standard-phases
16165 (add-before 'build 'patch-test-requirements
16166 (lambda* (#:key inputs #:allow-other-keys)
16167 ;; Update requirements from dependency==version to
16168 ;; dependency>=version.
16169 (substitute* "requirements.txt"
16170 (("==") ">=")
16171 ((",<1.5.0") ""))
16172 ;; Remove httpretty dependency for tests.
16173 (substitute* "setup.py"
16174 (("httpretty") ""))
16175 #t)))))
16176 (home-page "https://xenon.readthedocs.org/")
16177 (synopsis "Monitor code metrics for Python on your CI server")
16178 (description
16179 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
16180 Ideally, @code{xenon} is run every time code is committed. Through command
16181 line options, various thresholds can be set for the complexity of code. It
16182 will fail (i.e. it will exit with a non-zero exit code) when any of these
16183 requirements is not met.")
16184 (license license:expat)))
16185
16186 (define-public python2-xenon
16187 (package-with-python2 python-xenon))
16188
16189 (define-public python-flask-principal
16190 (package
16191 (name "python-flask-principal")
16192 (version "0.4.0")
16193 (source
16194 (origin
16195 (method url-fetch)
16196 (uri (pypi-uri "Flask-Principal" version))
16197 (sha256
16198 (base32
16199 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
16200 (build-system python-build-system)
16201 (propagated-inputs
16202 `(("python-blinker" ,python-blinker)))
16203 (native-inputs
16204 `(("python-flask" ,python-flask)
16205 ("python-nose" ,python-nose)))
16206 (home-page "http://packages.python.org/Flask-Principal/")
16207 (synopsis "Identity management for Flask")
16208 (description "@code{flask_principal} is a identity management library for
16209 Flask. It supports managing both authentication and authorization data in a
16210 thread-local variable.")
16211 (license license:expat)))
16212
16213 (define-public python2-flask-principal
16214 (package-with-python2 python-flask-principal))
16215
16216 (define-public python-flask-httpauth
16217 (package
16218 (name "python-flask-httpauth")
16219 (version "3.2.3")
16220 (source
16221 (origin
16222 (method url-fetch)
16223 (uri (pypi-uri "Flask-HTTPAuth" version))
16224 (sha256
16225 (base32
16226 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
16227 (build-system python-build-system)
16228 (native-inputs
16229 `(("python-flask" ,python-flask)))
16230 (home-page "http://github.com/miguelgrinberg/flask-httpauth/")
16231 (synopsis "Basic and Digest HTTP authentication for Flask routes")
16232 (description "@code{flask_httpauth} provides Basic and Digest HTTP
16233 authentication for Flask routes.")
16234 (license license:expat)))
16235
16236 (define-public python2-flask-httpauth
16237 (package-with-python2 python-flask-httpauth))
16238
16239 (define-public python-pysocks
16240 (package
16241 (name "python-pysocks")
16242 (version "1.6.7")
16243 (source
16244 (origin
16245 (method url-fetch)
16246 (uri (pypi-uri "PySocks" version))
16247 (sha256
16248 (base32
16249 "1krkiss578zqwcg4c8iqz1hwscwhsvy2djp3xyvps5gsgvr2j0yh"))))
16250 (build-system python-build-system)
16251 (arguments `(#:tests? #f))
16252 (home-page "https://github.com/Anorov/PySocks")
16253 (synopsis "SOCKS client module")
16254 (description "@code{pysocks} is an updated and semi-actively maintained
16255 version of @code{SocksiPy} with bug fixes and extra features.")
16256 (license license:bsd-3)))
16257
16258 (define-public python2-pysocks
16259 (package-with-python2 python-pysocks))
16260
16261 (define-public python-pyaes
16262 (package
16263 (name "python-pyaes")
16264 (version "1.6.0")
16265 (source
16266 (origin
16267 (method url-fetch)
16268 (uri (pypi-uri "pyaes" version))
16269 (sha256
16270 (base32
16271 "0bp9bjqy1n6ij1zb86wz9lqa1dhla8qr1d7w2kxyn7jbj56sbmcw"))))
16272 (build-system python-build-system)
16273 (home-page "https://github.com/ricmoo/pyaes")
16274 (synopsis "Implementation of AES in Python")
16275 (description "This package contains a pure-Python implementation of the
16276 AES block cipher algorithm and the common modes of operation (CBC, CFB, CTR,
16277 ECB and OFB).")
16278 (license license:expat)))
16279
16280 (define-public python2-pyaes
16281 (package-with-python2 python-pyaes))
16282
16283 (define-public python-uritemplate
16284 (package
16285 (name "python-uritemplate")
16286 (version "3.0.0")
16287 (source
16288 (origin
16289 (method url-fetch)
16290 (uri (pypi-uri "uritemplate" version))
16291 (sha256
16292 (base32
16293 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
16294 (build-system python-build-system)
16295 (home-page "https://uritemplate.readthedocs.org")
16296 (synopsis "Library to deal with URI Templates")
16297 (description "@code{uritemplate} provides Python library to deal with URI
16298 Templates.")
16299 (license license:bsd-2)))
16300
16301 (define-public python2-uritemplate
16302 (package-with-python2 python-uritemplate))