Merge branch 'master' into core-updates
[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 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 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 ;;;
44 ;;; This file is part of GNU Guix.
45 ;;;
46 ;;; GNU Guix is free software; you can redistribute it and/or modify it
47 ;;; under the terms of the GNU General Public License as published by
48 ;;; the Free Software Foundation; either version 3 of the License, or (at
49 ;;; your option) any later version.
50 ;;;
51 ;;; GNU Guix is distributed in the hope that it will be useful, but
52 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
53 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
54 ;;; GNU General Public License for more details.
55 ;;;
56 ;;; You should have received a copy of the GNU General Public License
57 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
58
59 (define-module (gnu packages python)
60 #:use-module ((guix licenses) #:prefix license:)
61 #:use-module (gnu packages)
62 #:use-module (gnu packages algebra)
63 #:use-module (gnu packages adns)
64 #:use-module (gnu packages attr)
65 #:use-module (gnu packages backup)
66 #:use-module (gnu packages bash)
67 #:use-module (gnu packages compression)
68 #:use-module (gnu packages crypto)
69 #:use-module (gnu packages databases)
70 #:use-module (gnu packages django)
71 #:use-module (gnu packages file)
72 #:use-module (gnu packages fontutils)
73 #:use-module (gnu packages gcc)
74 #:use-module (gnu packages ghostscript)
75 #:use-module (gnu packages gl)
76 #:use-module (gnu packages glib)
77 #:use-module (gnu packages graphviz)
78 #:use-module (gnu packages gstreamer)
79 #:use-module (gnu packages gtk)
80 #:use-module (gnu packages icu4c)
81 #:use-module (gnu packages image)
82 #:use-module (gnu packages imagemagick)
83 #:use-module (gnu packages libevent)
84 #:use-module (gnu packages libffi)
85 #:use-module (gnu packages linux)
86 #:use-module (gnu packages man)
87 #:use-module (gnu packages maths)
88 #:use-module (gnu packages multiprecision)
89 #:use-module (gnu packages networking)
90 #:use-module (gnu packages ncurses)
91 #:use-module (gnu packages openstack)
92 #:use-module (gnu packages password-utils)
93 #:use-module (gnu packages pcre)
94 #:use-module (gnu packages perl)
95 #:use-module (gnu packages pkg-config)
96 #:use-module (gnu packages protobuf)
97 #:use-module (gnu packages qt)
98 #:use-module (gnu packages readline)
99 #:use-module (gnu packages sdl)
100 #:use-module (gnu packages shells)
101 #:use-module (gnu packages ssh)
102 #:use-module (gnu packages statistics)
103 #:use-module (gnu packages tex)
104 #:use-module (gnu packages texinfo)
105 #:use-module (gnu packages tls)
106 #:use-module (gnu packages version-control)
107 #:use-module (gnu packages video)
108 #:use-module (gnu packages web)
109 #:use-module (gnu packages base)
110 #:use-module (gnu packages xml)
111 #:use-module (gnu packages xorg)
112 #:use-module (gnu packages xdisorg)
113 #:use-module (gnu packages zip)
114 #:use-module (gnu packages tcl)
115 #:use-module (gnu packages bdw-gc)
116 #:use-module (guix packages)
117 #:use-module (guix download)
118 #:use-module (guix git-download)
119 #:use-module (guix utils)
120 #:use-module (guix build-system gnu)
121 #:use-module (guix build-system cmake)
122 #:use-module (guix build-system python)
123 #:use-module (guix build-system trivial)
124 #:use-module (srfi srfi-1))
125
126 (define-public python-2.7
127 (package
128 (name "python")
129 (version "2.7.13")
130 (source
131 (origin
132 (method url-fetch)
133 (uri (string-append "https://www.python.org/ftp/python/"
134 version "/Python-" version ".tar.xz"))
135 (sha256
136 (base32
137 "0cgpk3zk0fgpji59pb4zy9nzljr70qzgv1vpz5hq5xw2d2c47m9m"))
138 (patches (search-patches "python-2.7-search-paths.patch"
139 "python-2-deterministic-build-info.patch"
140 "python-2.7-site-prefixes.patch"
141 "python-2.7-source-date-epoch.patch"
142 "python-2.7-getentropy-on-old-kernels.patch"))
143 (modules '((guix build utils)))
144 ;; suboptimal to delete failing tests here, but if we delete them in the
145 ;; arguments then we need to make sure to strip out that phase when it
146 ;; gets inherited by python and python-minimal.
147 (snippet
148 '(begin
149 (for-each delete-file
150 '("Lib/test/test_compileall.py"
151 "Lib/test/test_ctypes.py" ; fails on mips64el
152 "Lib/test/test_distutils.py"
153 "Lib/test/test_import.py"
154 "Lib/test/test_shutil.py"
155 "Lib/test/test_socket.py"
156 "Lib/test/test_subprocess.py"))
157 #t))))
158 (outputs '("out"
159 "tk")) ;tkinter; adds 50 MiB to the closure
160 (build-system gnu-build-system)
161 (arguments
162 `(;; 356 tests OK.
163 ;; 6 tests failed:
164 ;; test_compileall test_distutils test_import test_shutil test_socket
165 ;; test_subprocess
166 ;; 39 tests skipped:
167 ;; test_aepack test_al test_applesingle test_bsddb test_bsddb185
168 ;; test_bsddb3 test_cd test_cl test_codecmaps_cn test_codecmaps_hk
169 ;; test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_curses
170 ;; test_dl test_gdb test_gl test_imageop test_imgfile test_ioctl
171 ;; test_kqueue test_linuxaudiodev test_macos test_macostools
172 ;; test_msilib test_ossaudiodev test_scriptpackages test_smtpnet
173 ;; test_socketserver test_startfile test_sunaudiodev test_timeout
174 ;; test_tk test_ttk_guionly test_urllib2net test_urllibnet
175 ;; test_winreg test_winsound test_zipfile64
176 ;; 4 skips unexpected on linux2:
177 ;; test_bsddb test_bsddb3 test_gdb test_ioctl
178 #:test-target "test"
179 #:configure-flags
180 (list "--enable-shared" ;allow embedding
181 "--with-system-ffi" ;build ctypes
182 "--with-ensurepip=install" ;install pip and setuptools
183 "--enable-unicode=ucs4"
184 (string-append "LDFLAGS=-Wl,-rpath="
185 (assoc-ref %outputs "out") "/lib"))
186
187 #:modules ((ice-9 ftw) (ice-9 match)
188 (guix build utils) (guix build gnu-build-system))
189 #:phases
190 (modify-phases %standard-phases
191 (add-before
192 'configure 'patch-lib-shells
193 (lambda _
194 ;; Filter for existing files, since some may not exist in all
195 ;; versions of python that are built with this recipe.
196 (substitute* (filter file-exists?
197 '("Lib/subprocess.py"
198 "Lib/popen2.py"
199 "Lib/distutils/tests/test_spawn.py"
200 "Lib/test/test_subprocess.py"))
201 (("/bin/sh") (which "sh")))
202
203 ;; Use zero as the timestamp in .pyc files so that builds are
204 ;; deterministic. TODO: Remove it when this variable is set in
205 ;; gnu-build-system.scm.
206 (setenv "SOURCE_DATE_EPOCH" "1")
207 #t))
208 (add-before 'configure 'do-not-record-configure-flags
209 (lambda* (#:key configure-flags #:allow-other-keys)
210 ;; Remove configure flags from the installed '_sysconfigdata.py'
211 ;; and 'Makefile' so we don't end up keeping references to the
212 ;; build tools.
213 ;;
214 ;; Preserve at least '--with-system-ffi' since otherwise the
215 ;; thing tries to build libffi, fails, and we end up with a
216 ;; Python that lacks ctypes.
217 (substitute* "configure"
218 (("^CONFIG_ARGS=.*$")
219 (format #f "CONFIG_ARGS='~a'\n"
220 (if (member "--with-system-ffi" configure-flags)
221 "--with-system-ffi"
222 ""))))
223 #t))
224 (add-before
225 'check 'pre-check
226 (lambda _
227 ;; 'Lib/test/test_site.py' needs a valid $HOME
228 (setenv "HOME" (getcwd))
229 #t))
230 (add-after
231 'unpack 'set-source-file-times-to-1980
232 ;; XXX One of the tests uses a ZIP library to pack up some of the
233 ;; source tree, and fails with "ZIP does not support timestamps
234 ;; before 1980". Work around this by setting the file times in the
235 ;; source tree to sometime in early 1980.
236 (lambda _
237 (let ((circa-1980 (* 10 366 24 60 60)))
238 (ftw "." (lambda (file stat flag)
239 (utime file circa-1980 circa-1980)
240 #t))
241 #t)))
242 (add-after 'install 'remove-tests
243 ;; Remove 25 MiB of unneeded unit tests. Keep test_support.*
244 ;; because these files are used by some libraries out there.
245 (lambda* (#:key outputs #:allow-other-keys)
246 (let ((out (assoc-ref outputs "out")))
247 (match (scandir (string-append out "/lib")
248 (lambda (name)
249 (string-prefix? "python" name)))
250 ((pythonX.Y)
251 (let ((testdir (string-append out "/lib/" pythonX.Y
252 "/test")))
253 (with-directory-excursion testdir
254 (for-each delete-file-recursively
255 (scandir testdir
256 (match-lambda
257 ((or "." "..") #f)
258 (file
259 (not
260 (string-prefix? "test_support."
261 file))))))
262 (call-with-output-file "__init__.py" (const #t))
263 #t)))))))
264 (add-before 'strip 'make-libraries-writable
265 (lambda* (#:key outputs #:allow-other-keys)
266 ;; Make .so files writable so they can be stripped.
267 (let ((out (assoc-ref outputs "out")))
268 (for-each (lambda (file)
269 (chmod file #o755))
270 (find-files (string-append out "/lib")
271 "\\.so"))
272 #t)))
273 (add-after 'install 'move-tk-inter
274 (lambda* (#:key outputs #:allow-other-keys)
275 ;; When Tkinter support is built move it to a separate output so
276 ;; that the main output doesn't contain a reference to Tcl/Tk.
277 (let ((out (assoc-ref outputs "out"))
278 (tk (assoc-ref outputs "tk")))
279 (when tk
280 (match (find-files out "tkinter.*\\.so")
281 ((tkinter.so)
282 ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
283 ;; want it under TK/lib/pythonX.Y/site-packages.
284 (let* ((len (string-length out))
285 (target (string-append
286 tk "/"
287 (string-drop
288 (dirname (dirname tkinter.so))
289 len)
290 "/site-packages")))
291 (install-file tkinter.so target)
292 (delete-file tkinter.so)))))
293 #t))))))
294 (inputs
295 `(("bzip2" ,bzip2)
296 ("gdbm" ,gdbm)
297 ("libffi" ,libffi) ; for ctypes
298 ("sqlite" ,sqlite) ; for sqlite extension
299 ("openssl" ,openssl)
300 ("readline" ,readline)
301 ("zlib" ,zlib)
302 ("tcl" ,tcl)
303 ("tk" ,tk))) ; for tkinter
304 (native-inputs
305 `(("pkg-config" ,pkg-config)))
306 (native-search-paths
307 (list (search-path-specification
308 (variable "PYTHONPATH")
309 (files '("lib/python2.7/site-packages")))))
310 (home-page "https://www.python.org")
311 (synopsis "High-level, dynamically-typed programming language")
312 (description
313 "Python is a remarkably powerful dynamic programming language that
314 is used in a wide variety of application domains. Some of its key
315 distinguishing features include: clear, readable syntax; strong
316 introspection capabilities; intuitive object orientation; natural
317 expression of procedural code; full modularity, supporting hierarchical
318 packages; exception-based error handling; and very high level dynamic
319 data types.")
320 (license license:psfl)))
321
322 ;; Current 2.x version.
323 (define-public python-2 python-2.7)
324
325 (define-public python-3.5
326 (package (inherit python-2)
327 (version "3.5.3")
328 (source (origin
329 (method url-fetch)
330 (uri (string-append "https://www.python.org/ftp/python/"
331 version "/Python-" version ".tar.xz"))
332 (patches (search-patches
333 "python-fix-tests.patch"
334 "python-3.5-fix-tests.patch"
335 "python-3.5-getentropy-on-old-kernels.patch"
336 "python-3-deterministic-build-info.patch"
337 "python-3-search-paths.patch"))
338 (patch-flags '("-p0"))
339 (sha256
340 (base32
341 "1c6v1n9nz4mlx9mw1125fxpmbrgniqdbbx9hnqx44maqazb2mzpf"))
342 (snippet
343 '(begin
344 (for-each delete-file
345 '("Lib/ctypes/test/test_win32.py" ; fails on aarch64
346 "Lib/test/test_fcntl.py"))
347 #t))))
348 (arguments (substitute-keyword-arguments (package-arguments python-2)
349 ((#:tests? _) #t)))
350 (native-search-paths
351 (list (search-path-specification
352 (variable "PYTHONPATH")
353 (files (list (string-append "lib/python"
354 (version-major+minor version)
355 "/site-packages"))))))))
356
357 ;; Current 3.x version.
358 (define-public python-3 python-3.5)
359
360 ;; Current major version.
361 (define-public python python-3)
362
363 ;; Minimal variants of Python, mostly used to break the cycle between Tk and
364 ;; Python (Tk -> libxcb -> Python.)
365
366 (define-public python2-minimal
367 (package (inherit python-2)
368 (name "python-minimal")
369 (outputs '("out"))
370
371 ;; Keep zlib, which is used by 'pip' (via the 'zipimport' module), which
372 ;; is invoked upon 'make install'. 'pip' also expects 'ctypes' and thus
373 ;; libffi.
374 (inputs `(("libffi" ,libffi)
375 ("zlib" ,zlib)))))
376
377 (define-public python-minimal
378 (package (inherit python)
379 (name "python-minimal")
380 (outputs '("out"))
381
382 ;; Build fails due to missing ctypes without libffi.
383 ;; OpenSSL is a mandatory dependency of Python 3.x, for urllib;
384 ;; zlib is required by 'zipimport', used by pip.
385 (inputs `(("libffi" ,libffi)
386 ("openssl" ,openssl)
387 ("zlib" ,zlib)))))
388
389 (define* (wrap-python3 python
390 #:optional
391 (name (string-append (package-name python) "-wrapper")))
392 (package (inherit python)
393 (name name)
394 (source #f)
395 (build-system trivial-build-system)
396 (outputs '("out"))
397 (inputs `(("bash" ,bash)))
398 (propagated-inputs `(("python" ,python)))
399 (arguments
400 `(#:modules ((guix build utils))
401 #:builder
402 (begin
403 (use-modules (guix build utils))
404 (let ((bin (string-append (assoc-ref %outputs "out") "/bin"))
405 (python (string-append (assoc-ref %build-inputs "python") "/bin/")))
406 (mkdir-p bin)
407 (for-each
408 (lambda (old new)
409 (symlink (string-append python old)
410 (string-append bin "/" new)))
411 `("python3" ,"pydoc3" ,"idle3" ,"pip3")
412 `("python" ,"pydoc" ,"idle" ,"pip"))
413 ;; python-config outputs search paths based upon its location,
414 ;; use a bash wrapper to avoid changing its outputs.
415 (let ((bash (string-append (assoc-ref %build-inputs "bash")
416 "/bin/bash"))
417 (old (string-append python "python3-config"))
418 (new (string-append bin "/python-config")))
419 (with-output-to-file new
420 (lambda ()
421 (format #t "#!~a~%" bash)
422 (format #t "exec \"~a\" \"$@\"~%" old)
423 (chmod new #o755)
424 #t)))))))
425 (synopsis "Wrapper for the Python 3 commands")
426 (description
427 "This package provides wrappers for the commands of Python@tie{}3.x such
428 that they can be invoked under their usual name---e.g., @command{python}
429 instead of @command{python3}.")))
430
431 (define-public python-wrapper (wrap-python3 python))
432 (define-public python-minimal-wrapper (wrap-python3 python-minimal))
433
434 (define-public python-psutil
435 (package
436 (name "python-psutil")
437 (version "4.3.0")
438 (source
439 (origin
440 (method url-fetch)
441 (uri (pypi-uri "psutil" version))
442 (sha256
443 (base32
444 "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6"))))
445 (build-system python-build-system)
446 (arguments
447 ;; FIXME: some tests does not return and times out.
448 '(#:tests? #f))
449 (home-page "https://www.github.com/giampaolo/psutil")
450 (synopsis "Library for retrieving information on running processes")
451 (description
452 "psutil (Python system and process utilities) is a library for retrieving
453 information on running processes and system utilization (CPU, memory, disks,
454 network) in Python. It is useful mainly for system monitoring, profiling and
455 limiting process resources and management of running processes. It implements
456 many functionalities offered by command line tools such as: ps, top, lsof,
457 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
458 pidof, tty, taskset, pmap.")
459 (license license:bsd-3)))
460
461 (define-public python2-psutil
462 (package-with-python2 python-psutil))
463
464 (define-public python-passlib
465 (package
466 (name "python-passlib")
467 (version "1.7.1")
468 (source
469 (origin
470 (method url-fetch)
471 (uri (pypi-uri "passlib" version))
472 (sha256
473 (base32
474 "1q2khqpj9rlcgdmkypjdq1kswvhjf72bq0zk2cv669cc2dj8z51x"))))
475 (build-system python-build-system)
476 (native-inputs
477 `(("python-nose" ,python-nose)))
478 (propagated-inputs
479 `(("python-py-bcrypt" ,python-py-bcrypt)))
480 (arguments
481 `(#:phases
482 (alist-cons-before
483 'check 'set-PYTHON_EGG_CACHE
484 ;; some tests require access to "$HOME/.cython"
485 (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp"))
486 %standard-phases)))
487 (home-page "https://bitbucket.org/ecollins/passlib")
488 (synopsis
489 "Comprehensive password hashing framework")
490 (description
491 "Passlib is a password hashing library for Python 2 & 3, which provides
492 cross-platform implementations of over 30 password hashing algorithms, as well
493 as a framework for managing existing password hashes. It's designed to be
494 useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
495 to providing full-strength password hashing for multi-user application.")
496 (license license:bsd-3)))
497
498 (define-public python2-passlib
499 (package-with-python2 python-passlib))
500
501 (define-public python-py-bcrypt
502 (package
503 (name "python-py-bcrypt")
504 (version "0.4")
505 (source
506 (origin
507 (method url-fetch)
508 (uri (string-append
509 "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-"
510 version
511 ".tar.gz"))
512 (sha256
513 (base32
514 "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
515 (build-system python-build-system)
516 (home-page "https://code.google.com/p/py-bcrypt")
517 (synopsis
518 "Bcrypt password hashing and key derivation")
519 (description
520 "A python wrapper of OpenBSD's Blowfish password hashing code. This
521 system hashes passwords using a version of Bruce Schneier's Blowfish block
522 cipher with modifications designed to raise the cost of off-line password
523 cracking and frustrate fast hardware implementation. The computation cost of
524 the algorithm is parametised, so it can be increased as computers get faster.
525 The intent is to make a compromise of a password database less likely to
526 result in an attacker gaining knowledge of the plaintext passwords (e.g. using
527 John the Ripper).")
528 ;; "sha2.c" is under BSD-3;
529 ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
530 ;; the rest is under ISC.
531 (license (list license:isc license:bsd-3 license:bsd-4))))
532
533 (define-public python2-py-bcrypt
534 (package-with-python2 python-py-bcrypt))
535
536
537 (define-public python-paramiko
538 (package
539 (name "python-paramiko")
540 (version "2.1.2")
541 (source
542 (origin
543 (method url-fetch)
544 (uri (pypi-uri "paramiko" version))
545 (sha256
546 (base32
547 "04734n0wy3hxk6rij4fr29in5jmr70nxpc7pqi2ksbjysfz4kbjz"))))
548 (build-system python-build-system)
549 (arguments
550 '(#:phases
551 (modify-phases %standard-phases
552 (replace 'check
553 (lambda _
554 (zero? (system* "python" "test.py")))))))
555 (propagated-inputs
556 `(("python-pyasn1" ,python-pyasn1)
557 ("python-cryptography" ,python-cryptography)))
558 (home-page "http://www.paramiko.org/")
559 (synopsis "SSHv2 protocol library")
560 (description "Paramiko is a python implementation of the SSHv2 protocol,
561 providing both client and server functionality. While it leverages a Python C
562 extension for low level cryptography (PyCrypto), Paramiko itself is a pure
563 Python interface around SSH networking concepts.")
564 (license license:lgpl2.1+)))
565
566 (define-public python2-paramiko
567 (package-with-python2 python-paramiko))
568
569
570 (define-public python-httplib2
571 (package
572 (name "python-httplib2")
573 (version "0.9.2")
574 (source
575 (origin
576 (method url-fetch)
577 (uri (pypi-uri "httplib2" version))
578 (sha256
579 (base32
580 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
581 (build-system python-build-system)
582 (home-page "https://github.com/jcgregorio/httplib2")
583 (synopsis "Comprehensive HTTP client library")
584 (description
585 "A comprehensive HTTP client library supporting many features left out of
586 other HTTP libraries.")
587 (license license:expat)))
588
589 (define-public python2-httplib2
590 (package-with-python2 python-httplib2))
591
592 (define-public python-ecdsa
593 (package
594 (name "python-ecdsa")
595 (version "0.13")
596 (source
597 (origin
598 (method url-fetch)
599 (uri (string-append
600 "https://pypi.python.org/packages/source/e/ecdsa/ecdsa-"
601 version
602 ".tar.gz"))
603 (sha256
604 (base32
605 "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4"))))
606 (build-system python-build-system)
607 (inputs
608 `(("openssl" ,openssl)))
609 (home-page
610 "https://github.com/warner/python-ecdsa")
611 (synopsis
612 "ECDSA cryptographic signature library (pure python)")
613 (description
614 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
615 Curve Digital Signature Algorithm), implemented purely in Python. With this
616 library, you can quickly create keypairs (signing key and verifying key), sign
617 messages, and verify the signatures. The keys and signatures are very short,
618 making them easy to handle and incorporate into other protocols.")
619 (license license:expat)))
620
621 (define-public python2-ecdsa
622 (package-with-python2 python-ecdsa))
623
624 (define-public python-ccm
625 (package
626 (name "python-ccm")
627 (version "2.1.6")
628 (source
629 (origin
630 (method url-fetch)
631 (uri (pypi-uri "ccm" version))
632 (sha256
633 (base32
634 "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
635 (build-system python-build-system)
636 (propagated-inputs
637 `(("python-pyyaml" ,python-pyyaml)
638 ;; Not listed in setup.py, but used in ccmlib/node.py for full
639 ;; functionality
640 ("python-psutil" ,python-psutil)
641 ("python-six" ,python-six)))
642 (home-page "https://github.com/pcmanus/ccm")
643 (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
644 localhost")
645 (description "Cassandra Cluster Manager is a development tool for testing
646 local Cassandra clusters. It creates, launches and removes Cassandra clusters
647 on localhost.")
648 (license license:asl2.0)))
649
650 (define-public python2-ccm
651 (package-with-python2 python-ccm))
652
653 (define-public python-pytz
654 (package
655 (name "python-pytz")
656 (version "2016.10")
657 (source
658 (origin
659 (method url-fetch)
660 (uri (pypi-uri "pytz" version ".tar.bz2"))
661 (sha256
662 (base32
663 "0az099cyp6p5xbsvfcdacj4hvxncbwm2ayn3h55mcp07zb2b45kh"))))
664 (build-system python-build-system)
665 (arguments `(#:tests? #f)) ; no test target
666 (home-page "http://pythonhosted.org/pytz")
667 (synopsis "Python timezone library")
668 (description
669 "This library allows accurate and cross platform timezone calculations
670 using Python 2.4 or higher and provides access to the Olson timezone database.")
671 (license license:expat)))
672
673 (define-public python2-pytz
674 (package-with-python2 python-pytz))
675
676
677 (define-public python-babel
678 (package
679 (name "python-babel")
680 (version "2.3.4")
681 (source
682 (origin
683 (method url-fetch)
684 (uri (pypi-uri "Babel" version))
685 (sha256
686 (base32
687 "0x98qqqw35xllpcama013a9788ly84z8dm1w2wwfpxh2710c8df5"))))
688 (build-system python-build-system)
689 (propagated-inputs
690 `(("python-pytz" ,python-pytz)))
691 (arguments `(#:tests? #f)) ; no test target
692 (home-page "http://babel.pocoo.org/")
693 (synopsis
694 "Tools for internationalizing Python applications")
695 (description
696 "Babel is composed of two major parts:
697 - tools to build and work with gettext message catalogs
698 - a Python interface to the CLDR (Common Locale Data Repository), providing
699 access to various locale display names, localized number and date formatting,
700 etc. ")
701 (license license:bsd-3)))
702
703 (define-public python2-babel
704 (package-with-python2 python-babel))
705
706 (define-public python2-backport-ssl-match-hostname
707 (package
708 (name "python2-backport-ssl-match-hostname")
709 (version "3.5.0.1")
710 (source
711 (origin
712 (method url-fetch)
713 (uri (string-append
714 "https://pypi.python.org/packages/source/b/"
715 "backports.ssl_match_hostname/backports.ssl_match_hostname-"
716 version ".tar.gz"))
717 (sha256
718 (base32
719 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
720 (build-system python-build-system)
721 (arguments
722 `(#:python ,python-2
723 #:tests? #f)) ; no test target
724 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
725 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
726 (description
727 "This backport brings the ssl.match_hostname() function to users of
728 earlier versions of Python. The function checks the hostname in the
729 certificate returned by the server to which a connection has been established,
730 and verifies that it matches the intended target hostname.")
731 (license license:psfl)))
732
733 (define-public python-hdf4
734 (package
735 (name "python-hdf4")
736 (version "0.9")
737 (source
738 (origin
739 (method url-fetch)
740 (uri (pypi-uri name version))
741 (sha256
742 (base32
743 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
744 (build-system python-build-system)
745 (native-inputs `(("nose" ,python-nose)))
746 (propagated-inputs `(("numpy" ,python-numpy)))
747 (inputs
748 `(("hdf4" ,hdf4)
749 ("libjpeg" ,libjpeg)
750 ("zlib" ,zlib)))
751 (arguments
752 `(#:phases
753 (modify-phases %standard-phases
754 (replace 'check
755 (lambda _
756 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
757 ;; on to import numpy. Somehow this works on their CI system.
758 ;; Let's just manage PYTHONPATH here instead.
759 (substitute* "runexamples.sh"
760 (("export PYTHONPATH=.*") ""))
761 (setenv "PYTHONPATH"
762 (string-append (getcwd) ":"
763 (getenv "PYTHONPATH")))
764 (and (zero? (system* "./runexamples.sh"))
765 (zero? (system* "nosetests" "-v"))))))))
766 (home-page "https://github.com/fhs/python-hdf4")
767 (synopsis "Python interface to the NCSA HDF4 library")
768 (description
769 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
770 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
771 NetCDF files can also be read and modified. Python-HDF4 is a fork of
772 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
773 (license license:expat)))
774
775 (define-public python2-hdf4
776 (package-with-python2 python-hdf4))
777
778 (define-public python-h5py
779 (package
780 (name "python-h5py")
781 (version "2.6.0")
782 (source
783 (origin
784 (method url-fetch)
785 (uri (pypi-uri "h5py" version))
786 (sha256
787 (base32
788 "0df46dg7i7xfking9lp221bfm8dbl974yvlrbi1w7r6m61ac7bxj"))))
789 (build-system python-build-system)
790 (arguments
791 `(#:tests? #f ; no test target
792 #:phases
793 (modify-phases %standard-phases
794 (add-after 'unpack 'fix-hdf5-paths
795 (lambda* (#:key inputs #:allow-other-keys)
796 (let ((prefix (assoc-ref inputs "hdf5")))
797 (substitute* "setup_build.py"
798 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
799 (string-append "['" prefix "/lib" "']"))
800 (("'/opt/local/include', '/usr/local/include'")
801 (string-append "'" prefix "/include" "'")))
802 (substitute* "setup_configure.py"
803 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
804 (string-append "['" prefix "/lib" "']")))
805 #t))))))
806 (propagated-inputs
807 `(("python-six" ,python-six)
808 ("python-numpy" ,python-numpy)))
809 (inputs
810 `(("hdf5" ,hdf5)))
811 (native-inputs
812 `(("python-cython" ,python-cython)
813 ("python-pkgconfig" ,python-pkgconfig)))
814 (home-page "http://www.h5py.org/")
815 (synopsis "Read and write HDF5 files from Python")
816 (description
817 "The h5py package provides both a high- and low-level interface to the
818 HDF5 library from Python. The low-level interface is intended to be a
819 complete wrapping of the HDF5 API, while the high-level component supports
820 access to HDF5 files, datasets and groups using established Python and NumPy
821 concepts.")
822 (license license:bsd-3)))
823
824 (define-public python2-h5py
825 (package-with-python2 python-h5py))
826
827 (define-public python-netcdf4
828 (package
829 (name "python-netcdf4")
830 (version "1.2.7")
831 (source
832 (origin
833 (method url-fetch)
834 (uri (pypi-uri "netCDF4" version))
835 (sha256
836 (base32
837 "1fllizmnpw0zkzzm4j9pgamarlzfn3kmv9zrm0w65q1y31h9ni0c"))))
838 (build-system python-build-system)
839 (native-inputs
840 `(("python-cython" ,python-cython)))
841 (propagated-inputs
842 `(("python-numpy" ,python-numpy)))
843 (inputs
844 `(("netcdf" ,netcdf)
845 ("hdf4" ,hdf4)
846 ("hdf5" ,hdf5)))
847 (arguments
848 '(#:phases
849 (modify-phases %standard-phases
850 (replace 'check
851 (lambda _
852 (setenv "NO_NET" "1") ; disable opendap tests
853 (with-directory-excursion "test"
854 (setenv "PYTHONPATH" ; find and add the library we just built
855 (string-append
856 (car (find-files "../build" "lib.*"
857 #:directories? #:t
858 #:fail-on-error? #:t))
859 ":" (getenv "PYTHONPATH")))
860 (zero? (system* "python" "run_all.py"))))))))
861 (home-page
862 "https://github.com/Unidata/netcdf4-python")
863 (synopsis "Python/numpy interface to the netCDF library")
864 (description "Netcdf4-python is a Python interface to the netCDF C
865 library. netCDF version 4 has many features not found in earlier
866 versions of the library and is implemented on top of HDF5. This module
867 can read and write files in both the new netCDF 4 and the old netCDF 3
868 format, and can create files that are readable by HDF5 clients. The
869 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
870 to users of that module.")
871 ;; The software is mainly ISC, but includes some files covered
872 ;; by the Expat license.
873 (license (list license:isc license:expat))))
874
875 (define-public python2-netcdf4
876 (package-with-python2 python-netcdf4))
877
878 (define-public python-lockfile
879 (package
880 (name "python-lockfile")
881 (version "0.12.2")
882 (source
883 (origin
884 (method url-fetch)
885 (uri (string-append "https://pypi.python.org/packages/source/l/lockfile/"
886 "lockfile-" version ".tar.gz"))
887 (sha256
888 (base32
889 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
890 (build-system python-build-system)
891 (arguments '(#:test-target "check"))
892 (native-inputs
893 `(("python-pbr" ,python-pbr)))
894 (home-page "https://launchpad.net/pylockfile")
895 (synopsis "Platform-independent file locking module")
896 (description
897 "The lockfile package exports a LockFile class which provides a simple
898 API for locking files.")
899 (license license:expat)))
900
901 (define-public python2-lockfile
902 (package-with-python2 python-lockfile))
903
904 (define-public python-mock
905 (package
906 (name "python-mock")
907 (version "1.0.1")
908 (source
909 (origin
910 (method url-fetch)
911 (uri (pypi-uri "mock" version))
912 (sha256
913 (base32
914 "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq"))))
915 (build-system python-build-system)
916 (arguments '(#:test-target "check"))
917 (home-page "https://github.com/testing-cabal/mock")
918 (synopsis "Python mocking and patching library for testing")
919 (description
920 "Mock is a library for testing in Python. It allows you to replace parts
921 of your system under test with mock objects and make assertions about how they
922 have been used.")
923 (license license:expat)))
924
925 (define-public python2-mock
926 (package-with-python2 python-mock))
927
928 ;;; Some packages (notably, certbot and python-acme) rely on this newer version
929 ;;; of python-mock. However, a large number of packages fail to build with
930 ;;; mock@2, so we add a new variable for now. Also, there may be a dependency
931 ;;; cycle between mock and six, so we avoid creating python2-mock@2 for now.
932 (define-public python-mock-2
933 (package
934 (inherit python-mock)
935 (version "2.0.0")
936 (source
937 (origin
938 (method url-fetch)
939 (uri (pypi-uri "mock" version))
940 (sha256
941 (base32
942 "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i"))))
943 (propagated-inputs
944 `(("python-pbr" ,python-pbr-minimal)
945 ,@(package-propagated-inputs python-mock)))))
946
947 (define-public python-setuptools
948 (package
949 (name "python-setuptools")
950 (version "31.0.0")
951 (source
952 (origin
953 (method url-fetch)
954 (uri (pypi-uri "setuptools" version))
955 (sha256
956 (base32
957 "0ypybh4hx3bv4vhg2dc74xpj1g56ggnaffm87k4abhwjwq6wq608"))
958 (modules '((guix build utils)))
959 (snippet
960 '(begin
961 ;; Remove included binaries which are used to build self-extracting
962 ;; installers for Windows.
963 ;; TODO: Find some way to build them ourself so we can include them.
964 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
965 #t))))
966 (build-system python-build-system)
967 ;; FIXME: Tests require pytest, which itself relies on setuptools.
968 ;; One could bootstrap with an internal untested setuptools.
969 (arguments
970 `(#:tests? #f))
971 (home-page "https://pypi.python.org/pypi/setuptools")
972 (synopsis
973 "Library designed to facilitate packaging Python projects")
974 (description
975 "Setuptools is a fully-featured, stable library designed to facilitate
976 packaging Python projects, where packaging includes:
977 Python package and module definitions,
978 distribution package metadata,
979 test hooks,
980 project installation,
981 platform-specific details,
982 Python 3 support.")
983 ;; TODO: setuptools now bundles the following libraries:
984 ;; packaging, pyparsing, six and appdirs. How to unbundle?
985 (license (list license:psfl ; setuptools itself
986 license:expat ; six, appdirs, pyparsing
987 license:asl2.0 ; packaging is dual ASL2/BSD-2
988 license:bsd-2))))
989
990 (define-public python2-setuptools
991 (package-with-python2 python-setuptools))
992
993 ;;; Pycrypto is abandoned upstream:
994 ;;;
995 ;;; https://github.com/dlitz/pycrypto/issues/173
996 ;;;
997 ;;; TODO Remove this package from GNU Guix.
998 (define-public python-pycrypto
999 (package
1000 (name "python-pycrypto")
1001 (version "2.6.1")
1002 (source
1003 (origin
1004 (method url-fetch)
1005 (uri (pypi-uri "pycrypto" version))
1006 (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"))
1007 (sha256
1008 (base32
1009 "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
1010 (build-system python-build-system)
1011 (inputs
1012 `(("python" ,python)
1013 ("gmp" ,gmp)))
1014 (arguments
1015 `(#:phases
1016 (alist-cons-before
1017 'build 'set-build-env
1018 ;; pycrypto runs an autoconf configure script behind the scenes
1019 (lambda _
1020 (setenv "CONFIG_SHELL" (which "bash")))
1021 %standard-phases)))
1022 (home-page "http://www.pycrypto.org/")
1023 (synopsis "Cryptographic modules for Python")
1024 (description
1025 "Pycrypto is a collection of both secure hash functions (such as SHA256
1026 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
1027 etc.). The package is structured to make adding new modules easy.")
1028 (license license:public-domain)))
1029
1030 (define-public python2-pycrypto
1031 (let ((pycrypto (package-with-python2 python-pycrypto)))
1032 (package (inherit pycrypto)
1033 (inputs
1034 `(("python" ,python-2)
1035 ,@(alist-delete
1036 "python"
1037 (package-inputs pycrypto)))))))
1038
1039 (define-public python-eventlet
1040 (package
1041 (name "python-eventlet")
1042 (version "0.20.1")
1043 (source
1044 (origin
1045 (method url-fetch)
1046 (uri (pypi-uri "eventlet" version))
1047 (sha256
1048 (base32
1049 "0f3q55mq4n021wb7qa53pz3ix6i2py64sap66vsaqm2scjw83m9s"))))
1050 (build-system python-build-system)
1051 (propagated-inputs
1052 `(("python-greenlet" ,python-greenlet)))
1053 (home-page "http://eventlet.net")
1054 (synopsis "Concurrent networking library for Python")
1055 (description
1056 "Eventlet is a concurrent networking library for Python that
1057 allows you to change how you run your code, not how you write it.
1058 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1059 Coroutines ensure that the developer uses a blocking style of programming
1060 that is similar to threading, but provide the benefits of non-blocking I/O.
1061 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1062 from the Python interpreter, or as a small part of a larger application.")
1063 (license license:expat)))
1064
1065 (define-public python2-eventlet
1066 (let ((base (package-with-python2
1067 (strip-python2-variant python-eventlet))))
1068 (package (inherit base)
1069 (propagated-inputs
1070 `(("python2-enum34" ,python2-enum34)
1071 ,@(package-propagated-inputs base))))))
1072
1073 (define-public python-keyring
1074 (package
1075 (name "python-keyring")
1076 (version "8.7")
1077 (source
1078 (origin
1079 (method url-fetch)
1080 (uri (pypi-uri "keyring" version))
1081 (sha256
1082 (base32
1083 "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
1084 (build-system python-build-system)
1085 (native-inputs
1086 `(("python-setuptools-scm" ,python-setuptools-scm)))
1087 (propagated-inputs
1088 `(("python-pycrypto" ,python-pycrypto)))
1089 (arguments
1090 `(#:tests? #f)) ;TODO: tests require pytest
1091 (home-page "https://github.com/jaraco/keyring")
1092 (synopsis "Store and access your passwords safely")
1093 (description
1094 "The Python keyring lib provides a easy way to access the system keyring
1095 service from python. It can be used in any application that needs safe
1096 password storage.")
1097 ;; "MIT" and PSF dual license
1098 (license license:x11)))
1099
1100 (define-public python2-keyring
1101 (package-with-python2 python-keyring))
1102
1103 (define-public python-six
1104 (package
1105 (name "python-six")
1106 (version "1.10.0")
1107 (source
1108 (origin
1109 (method url-fetch)
1110 (uri (pypi-uri "six" version))
1111 (sha256
1112 (base32
1113 "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh"))))
1114 (build-system python-build-system)
1115 (native-inputs
1116 `(("python-py" ,python-py)
1117 ("python-pytest" ,python-pytest)))
1118 (home-page "http://pypi.python.org/pypi/six/")
1119 (synopsis "Python 2 and 3 compatibility utilities")
1120 (description
1121 "Six is a Python 2 and 3 compatibility library. It provides utility
1122 functions for smoothing over the differences between the Python versions with
1123 the goal of writing Python code that is compatible on both Python versions.
1124 Six supports every Python version since 2.5. It is contained in only one
1125 Python file, so it can be easily copied into your project.")
1126 (license license:x11)))
1127
1128 (define-public python2-six
1129 (package-with-python2 python-six))
1130
1131 (define-public python-dateutil
1132 (package
1133 (name "python-dateutil")
1134 (version "2.6.0")
1135 (source
1136 (origin
1137 (method url-fetch)
1138 (uri (pypi-uri "python-dateutil" version))
1139 (sha256
1140 (base32
1141 "1lhq0hxjc3cfha101q02ld5ijlpfyjn2w1yh7wvpiy367pgzi8k2"))))
1142 (build-system python-build-system)
1143 (propagated-inputs
1144 `(("python-six" ,python-six)))
1145 (home-page "https://dateutil.readthedocs.io/en/stable/")
1146 (synopsis "Extensions to the standard datetime module")
1147 (description
1148 "The dateutil module provides powerful extensions to the standard
1149 datetime module, available in Python 2.3+.")
1150 (license license:bsd-3)))
1151
1152 (define-public python2-dateutil
1153 (package-with-python2 python-dateutil))
1154
1155 (define-public python-parsedatetime
1156 (package
1157 (name "python-parsedatetime")
1158 (version "2.3")
1159 (source
1160 (origin
1161 (method url-fetch)
1162 (uri (pypi-uri "parsedatetime" version))
1163 (sha256
1164 (base32
1165 "1vkrmd398s11h1zn3zaqqsiqhj9lwy1ikcg6irx2lrgjzjg3rjll"))))
1166 (build-system python-build-system)
1167 (native-inputs
1168 `(("python-nose" ,python-nose)
1169 ("python-pyicu" ,python-pyicu)
1170 ("python-pytest" ,python-pytest)
1171 ("python-pytest-runner" ,python-pytest-runner)))
1172 (propagated-inputs
1173 `(("python-future" ,python-future)))
1174 (home-page "https://github.com/bear/parsedatetime/")
1175 (synopsis
1176 "Parse human-readable date/time text")
1177 (description
1178 "Parse human-readable date/time text.")
1179 (license license:asl2.0)))
1180
1181 (define-public python2-parsedatetime
1182 (package-with-python2 python-parsedatetime))
1183
1184 (define-public python-pandas
1185 (package
1186 (name "python-pandas")
1187 (version "0.19.2")
1188 (source
1189 (origin
1190 (method url-fetch)
1191 (uri (pypi-uri "pandas" version))
1192 (sha256
1193 (base32 "0540cnbwy2hc4hv2sxfs8i47xi91qzvzxfn80dl785ibiicly3vg"))
1194 (patches
1195 (search-patches "python-pandas-skip-failing-tests.patch"))))
1196 (build-system python-build-system)
1197 (propagated-inputs
1198 `(("python-numpy" ,python-numpy)
1199 ("python-pytz" ,python-pytz)
1200 ("python-dateutil" ,python-dateutil)))
1201 (native-inputs
1202 `(("python-nose" ,python-nose)
1203 ("python-cython" ,python-cython)))
1204 (home-page "http://pandas.pydata.org")
1205 (synopsis "Data structures for data analysis, time series, and statistics")
1206 (description
1207 "Pandas is a Python package providing fast, flexible, and expressive data
1208 structures designed to make working with structured (tabular,
1209 multidimensional, potentially heterogeneous) and time series data both easy
1210 and intuitive. It aims to be the fundamental high-level building block for
1211 doing practical, real world data analysis in Python.")
1212 (license license:bsd-3)))
1213
1214 (define-public python2-pandas
1215 (package-with-python2 python-pandas))
1216
1217 (define-public python-tzlocal
1218 (package
1219 (name "python-tzlocal")
1220 (version "1.2.2")
1221 (source
1222 (origin
1223 (method url-fetch)
1224 (uri (pypi-uri "tzlocal" version))
1225 (sha256
1226 (base32
1227 "0paj7vlsb0np8b5sp4bv64wxv7qk2piyp7xg29pkhdjwsbls9fnb"))))
1228 (build-system python-build-system)
1229 (propagated-inputs
1230 `(("python-pytz" ,python-pytz)))
1231 (home-page "https://github.com/regebro/tzlocal")
1232 (synopsis
1233 "Local timezone information for Python")
1234 (description
1235 "Tzlocal returns a tzinfo object with the local timezone information.
1236 This module attempts to fix a glaring hole in pytz, that there is no way to
1237 get the local timezone information, unless you know the zoneinfo name, and
1238 under several distributions that's hard or impossible to figure out.")
1239 (license license:cc0)))
1240
1241 (define-public python2-pysqlite
1242 (package
1243 (name "python2-pysqlite")
1244 (version "2.8.3")
1245 (source
1246 (origin
1247 (method url-fetch)
1248 (uri (pypi-uri "pysqlite" version))
1249 (sha256
1250 (base32
1251 "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
1252 (build-system python-build-system)
1253 (inputs
1254 `(("sqlite" ,sqlite)))
1255 (arguments
1256 `(#:python ,python-2 ; incompatible with Python 3
1257 #:tests? #f)) ; no test target
1258 (home-page "https://github.com/ghaering/pysqlite")
1259 (synopsis "SQLite bindings for Python")
1260 (description
1261 "Pysqlite provides SQLite bindings for Python that comply to the
1262 Database API 2.0T.")
1263 (license license:zlib)))
1264
1265
1266 (define-public python2-mechanize
1267 (package
1268 (name "python2-mechanize")
1269 (version "0.2.5")
1270 (source
1271 (origin
1272 (method url-fetch)
1273 (uri (string-append "https://pypi.python.org/packages/source/m/mechanize/mechanize-"
1274 version ".tar.gz"))
1275 (sha256
1276 (base32
1277 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1278 (build-system python-build-system)
1279 (arguments
1280 `(#:python ,python-2 ; apparently incompatible with Python 3
1281 #:tests? #f))
1282 ;; test fails with message
1283 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1284 ;; (python-3.3.2) or
1285 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1286 ;; (python-2.7.5).
1287 ;; The source code is from March 2011 and probably not up-to-date
1288 ;; with respect to python unit tests.
1289 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1290 (synopsis
1291 "Stateful programmatic web browsing in Python")
1292 (description
1293 "Mechanize implements stateful programmatic web browsing in Python,
1294 after Andy Lester’s Perl module WWW::Mechanize.")
1295 (license (license:non-copyleft
1296 "file://COPYING"
1297 "See COPYING in the distribution."))))
1298
1299
1300 (define-public python-simplejson
1301 (package
1302 (name "python-simplejson")
1303 (version "3.10.0")
1304 (source
1305 (origin
1306 (method url-fetch)
1307 (uri (pypi-uri "simplejson" version))
1308 (sha256
1309 (base32
1310 "1qhwsykjlb85igb4cfl6v6gkprzbbg8gyqdd7zscc8w3x0ifcfwm"))))
1311 (build-system python-build-system)
1312 (home-page "http://simplejson.readthedocs.org/en/latest/")
1313 (synopsis
1314 "Json library for Python")
1315 (description
1316 "JSON (JavaScript Object Notation) is a subset of JavaScript
1317 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1318 format.
1319
1320 Simplejson exposes an API familiar to users of the standard library marshal
1321 and pickle modules. It is the externally maintained version of the json
1322 library contained in Python 2.6, but maintains compatibility with Python 2.5
1323 and (currently) has significant performance advantages, even without using
1324 the optional C extension for speedups. Simplejson is also supported on
1325 Python 3.3+.")
1326 (license license:x11)))
1327
1328 (define-public python2-simplejson
1329 (package-with-python2 python-simplejson))
1330
1331
1332 (define-public python-pyicu
1333 (package
1334 (name "python-pyicu")
1335 (version "1.9.5")
1336 (source
1337 (origin
1338 (method url-fetch)
1339 (uri (pypi-uri "PyICU" version))
1340 (sha256
1341 (base32
1342 "16rmxy9y0qhqqna2v49i7nzwm09as699rbyvh4raw7w602w55c3k"))))
1343 (build-system python-build-system)
1344 (arguments
1345 '(#:phases
1346 (modify-phases %standard-phases
1347 (add-before 'check 'delete-failing-test
1348 (lambda _
1349 ;; XXX: These tests require locales that are unavailable
1350 ;; in the build environment.
1351 (delete-file "test/test_DateTimeParserGenerator.py")
1352 #t)))))
1353 (inputs
1354 `(("icu4c" ,icu4c)))
1355 (home-page "http://pyicu.osafoundation.org/")
1356 (synopsis "Python extension wrapping the ICU C++ API")
1357 (description
1358 "PyICU is a python extension wrapping the ICU C++ API.")
1359 (license license:x11)))
1360
1361 (define-public python2-pyicu
1362 (package-with-python2 python-pyicu))
1363
1364 (define-public python2-dogtail
1365 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1366 ;; spaces in indentation" with Python 3.
1367 (package
1368 (name "python2-dogtail")
1369 (version "0.9.9")
1370 (source (origin
1371 (method url-fetch)
1372 (uri (pypi-uri "dogtail" version))
1373 (sha256
1374 (base32
1375 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1376 (build-system python-build-system)
1377 (arguments `(#:python ,python-2
1378 #:tests? #f)) ; invalid command "test"
1379 ;; Currently no offical homepage.
1380 (home-page "https://pypi.python.org/pypi/dogtail/")
1381 (synopsis "GUI test tool and automation framework written in Python")
1382 (description
1383 "Dogtail is a GUI test tool and automation framework written in Python.
1384 It uses Accessibility (a11y) technologies to communicate with desktop
1385 applications. dogtail scripts are written in Python and executed like any
1386 other Python program.")
1387 (license license:gpl2+)))
1388
1389 (define-public python2-empy
1390 (package
1391 (name "python2-empy")
1392 (version "3.3")
1393 (source (origin
1394 (method url-fetch)
1395 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1396 version ".tar.gz"))
1397 (sha256
1398 (base32
1399 "01g8mmkfnvjdmlhsihwyx56lrg7r5m5d2fg6mnxsvy6g0dnl69f6"))))
1400 (build-system python-build-system)
1401 (arguments
1402 `(#:python ,python-2
1403 #:phases (alist-replace
1404 'check
1405 (lambda _
1406 (zero? (system* "./test.sh")))
1407 %standard-phases)))
1408 (home-page "http://www.alcyone.com/software/empy/")
1409 (synopsis "Templating system for Python")
1410 (description
1411 "EmPy is a system for embedding Python expressions and statements in
1412 template text; it takes an EmPy source file, processes it, and produces
1413 output. This is accomplished via expansions, which are special signals to the
1414 EmPy system and are set off by a special prefix (by default the at sign, @@).
1415 EmPy can expand arbitrary Python expressions and statements in this way, as
1416 well as a variety of special forms. Textual data not explicitly delimited in
1417 this way is sent unaffected to the output, allowing Python to be used in
1418 effect as a markup language. Also supported are callbacks via hooks,
1419 recording and playback via diversions, and dynamic, chainable filters. The
1420 system is highly configurable via command line options and embedded
1421 commands.")
1422 (license license:lgpl2.1+)))
1423
1424 (define-public python2-element-tree
1425 (package
1426 (name "python2-element-tree")
1427 (version "1.2.6")
1428 (source (origin
1429 (method url-fetch)
1430 (uri (string-append
1431 "http://effbot.org/media/downloads/elementtree-"
1432 version "-20050316.tar.gz"))
1433 (sha256
1434 (base32
1435 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1436 (build-system python-build-system)
1437 (arguments
1438 `(#:python ,python-2 ; seems to be part of Python 3
1439 #:tests? #f)) ; no 'test' sub-command
1440 (synopsis "Toolkit for XML processing in Python")
1441 (description
1442 "ElementTree is a Python library supporting lightweight XML processing.")
1443 (home-page "http://effbot.org/zone/element-index.htm")
1444 (license (license:x11-style
1445 "http://docs.python.org/2/license.html"
1446 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1447
1448 (define-public python2-pybugz
1449 (package
1450 (name "python2-pybugz")
1451 (version "0.6.11")
1452 (source (origin
1453 (method url-fetch)
1454 (uri (string-append
1455 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1456 version ".tar.gz"))
1457 (sha256
1458 (base32
1459 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1460 (patches (search-patches "pybugz-stty.patch"
1461 "pybugz-encode-error.patch"))))
1462 (build-system python-build-system)
1463 (arguments
1464 `(#:python ,python-2 ; SyntaxError with Python 3
1465 #:tests? #f)) ; no 'test' sub-command
1466 (propagated-inputs
1467 `(("element-tree" ,python2-element-tree)))
1468 (synopsis "Python and command-line interface to Bugzilla")
1469 (description
1470 "PyBugz is a Python library and command-line tool to query the Bugzilla
1471 bug tracking system. It is meant as an aid to speed up interaction with the
1472 bug tracker.")
1473 (home-page "http://www.liquidx.net/pybugz/")
1474 (license license:gpl2)))
1475
1476 (define-public python-enum34
1477 (package
1478 (name "python-enum34")
1479 (version "1.1.6")
1480 (source
1481 (origin
1482 (method url-fetch)
1483 (uri (pypi-uri "enum34" version))
1484 (sha256
1485 (base32
1486 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1487 (build-system python-build-system)
1488 (home-page "https://pypi.python.org/pypi/enum34")
1489 (synopsis "Backported Python 3.4 Enum")
1490 (description
1491 "Enum34 is the new Python stdlib enum module available in Python 3.4
1492 backported for previous versions of Python from 2.4 to 3.3.")
1493 (license license:bsd-3)))
1494
1495 (define-public python2-enum34
1496 (package-with-python2 python-enum34))
1497
1498 (define-public python-parse-type
1499 (package
1500 (name "python-parse-type")
1501 (version "0.3.4")
1502 (source
1503 (origin
1504 (method url-fetch)
1505 (uri (string-append "https://pypi.python.org/packages/source/p/"
1506 "parse_type/parse_type-" version ".tar.gz"))
1507 (sha256
1508 (base32
1509 "0iv1c34npr4iynwpgv1vkjx9rjd18a85ir8c01gc5f7wp8iv7l1x"))))
1510 (build-system python-build-system)
1511 (arguments
1512 `(#:phases
1513 (modify-phases %standard-phases
1514 (add-after 'unpack 'patch-tests
1515 (lambda _
1516 (substitute* "tests/test_parse_type_parse.py"
1517 ;; Newer Python versions don't have the problem this test tests.
1518 (("self[.]assertRaises[(]parse.TooManyFields, p.parse, ''[)]")
1519 ""))
1520 #t)))))
1521 (propagated-inputs
1522 `(("python-six" ,python-six)
1523 ("python-parse" ,python-parse)))
1524 (native-inputs
1525 `(("python-pytest" ,python-pytest)
1526 ("python-pytest-runner" ,python-pytest-runner)))
1527 (home-page "https://github.com/jenisys/parse_type")
1528 (synopsis "Extended parse module")
1529 (description
1530 "Parse_type extends the python parse module.")
1531 (properties
1532 `((python2-variant . ,(delay python2-parse-type))))
1533 (license license:bsd-3)))
1534
1535 (define-public python2-parse-type
1536 (let ((base (package-with-python2
1537 (strip-python2-variant python-parse-type))))
1538 (package (inherit base)
1539 (propagated-inputs
1540 `(("python2-enum34" ,python2-enum34)
1541 ,@(package-propagated-inputs base))))))
1542
1543 (define-public python-parse
1544 (package
1545 (name "python-parse")
1546 (version "1.6.6")
1547 (source
1548 (origin
1549 (method url-fetch)
1550 (uri (pypi-uri "parse" version))
1551 (sha256
1552 (base32
1553 "0y31i3mwgv35qn0kzzjn9q8jqfdqmbi6sr6yfvn8rq4lqjm5lhvi"))
1554 (patches (search-patches "python-parse-too-many-fields.patch"))))
1555 (build-system python-build-system)
1556 (arguments
1557 `(#:phases
1558 (modify-phases %standard-phases
1559 (replace 'check
1560 (lambda _ (zero? (system* "python" "test_parse.py")))))))
1561 (home-page "https://github.com/r1chardj0n3s/parse")
1562 (synopsis "Parse strings")
1563 (description
1564 "Parse strings using a specification based on the Python format()
1565 syntax.")
1566 (license license:x11)))
1567
1568 (define-public python-polib
1569 (package
1570 (name "python-polib")
1571 (version "1.0.8")
1572 (source (origin
1573 (method url-fetch)
1574 (uri (pypi-uri "polib" version))
1575 (sha256
1576 (base32
1577 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1578 (build-system python-build-system)
1579 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1580 (synopsis "Manipulate, create and modify gettext files")
1581 (description "Polib can manipulate any gettext format (po, pot and mo)
1582 files. It can be used to create po files from scratch or to modify
1583 existing ones.")
1584 (license license:expat)))
1585
1586 (define-public python2-polib
1587 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1588 (package
1589 (inherit base)
1590 (arguments `(,@(package-arguments base)
1591 ;; Tests don't work with python2.
1592 #:tests? #f)))))
1593
1594 (define-public scons
1595 (package
1596 (name "scons")
1597 (version "2.5.1")
1598 (source (origin
1599 (method url-fetch)
1600 (uri (string-append "mirror://sourceforge/scons/scons/" version
1601 "/scons-" version ".tar.gz"))
1602 (sha256
1603 (base32
1604 "1wji1z9jdkhnmm99apx6fhld9cs52rr56aigniyrcsmlwy52298b"))))
1605 (build-system python-build-system)
1606 (arguments
1607 ;; With Python 3.x, fails to build with a syntax error.
1608 `(#:python ,python-2
1609 #:use-setuptools? #f ; still relies on distutils
1610 #:tests? #f)) ; no 'python setup.py test' command
1611 (home-page "http://scons.org/")
1612 (synopsis "Software construction tool written in Python")
1613 (description
1614 "SCons is a software construction tool. Think of SCons as an improved,
1615 cross-platform substitute for the classic Make utility with integrated
1616 functionality similar to autoconf/automake and compiler caches such as ccache.
1617 In short, SCons is an easier, more reliable and faster way to build
1618 software.")
1619 (license license:x11)))
1620
1621 (define-public python-extras
1622 (package
1623 (name "python-extras")
1624 (version "0.0.3")
1625 (source
1626 (origin
1627 (method url-fetch)
1628 (uri (string-append
1629 "https://pypi.python.org/packages/source/e/extras/extras-"
1630 version ".tar.gz"))
1631 (sha256
1632 (base32
1633 "1h7zx4dfyclalg0fqnfjijpn0f793a9mx8sy3b27gd31nr6dhq3s"))))
1634 (build-system python-build-system)
1635 (arguments
1636 ;; error in setup.cfg: command 'test' has no such option 'buffer'
1637 '(#:tests? #f))
1638 (home-page "https://github.com/testing-cabal/extras")
1639 (synopsis "Useful extensions to the Python standard library")
1640 (description
1641 "Extras is a set of extensions to the Python standard library.")
1642 (license license:expat)))
1643
1644 (define-public python2-extras
1645 (package-with-python2 python-extras))
1646
1647 (define-public python-mimeparse
1648 (package
1649 (name "python-mimeparse")
1650 (version "0.1.4")
1651 (source
1652 (origin
1653 (method url-fetch)
1654 (uri (string-append
1655 "https://pypi.python.org/packages/source/p/python-mimeparse/python-mimeparse-"
1656 version ".tar.gz"))
1657 (sha256
1658 (base32
1659 "1hyxg09kaj02ri0rmwjqi86wk4nd1akvv7n0dx77azz76wga4s9w"))))
1660 (build-system python-build-system)
1661 (arguments
1662 '(#:tests? #f)) ; no setup.py test command
1663 (home-page
1664 "https://github.com/dbtsai/python-mimeparse")
1665 (synopsis "Python library for parsing MIME types")
1666 (description
1667 "Mimeparse provides basic functions for parsing MIME type names and
1668 matching them against a list of media-ranges.")
1669 (license license:expat)))
1670
1671 (define-public python2-mimeparse
1672 (package-with-python2 python-mimeparse))
1673
1674 (define-public python-nose
1675 (package
1676 (name "python-nose")
1677 (version "1.3.7")
1678 (source
1679 (origin
1680 (method url-fetch)
1681 (uri (pypi-uri "nose" version))
1682 (sha256
1683 (base32
1684 "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
1685 (build-system python-build-system)
1686 (arguments
1687 '(#:tests? #f)) ; FIXME: test suite fails
1688 (home-page "http://readthedocs.org/docs/nose/")
1689 (synopsis "Python testing library")
1690 (description
1691 "Nose extends the unittest library to make testing easier.")
1692 (license license:lgpl2.0+)))
1693
1694 (define-public python2-nose
1695 (package-with-python2 python-nose))
1696
1697 (define-public python-nose2
1698 (package
1699 (name "python-nose2")
1700 (version "0.6.5")
1701 (source
1702 (origin
1703 (method url-fetch)
1704 (uri (pypi-uri "nose2" version))
1705 (sha256
1706 (base32
1707 "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
1708 (build-system python-build-system)
1709 (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
1710 (propagated-inputs
1711 `(("python-cov-core" ,python-cov-core)
1712 ("python-pytest-cov" ,python-pytest-cov)
1713 ("python-six" ,python-six)))
1714 (home-page "https://github.com/nose-devs/nose2")
1715 (synopsis "Next generation of nicer testing for Python")
1716 (description
1717 "Nose2 is the next generation of nicer testing for Python, based on the
1718 plugins branch of unittest2. Nose2 aims to improve on nose by providing a
1719 better plugin api, being easier for users to configure, and simplifying internal
1720 interfaces and processes.")
1721 (license license:bsd-2)))
1722
1723 (define-public python2-nose2
1724 (package-with-python2 python-nose2))
1725
1726 (define-public python-unittest2
1727 (package
1728 (name "python-unittest2")
1729 (version "0.5.1")
1730 (source
1731 (origin
1732 (method url-fetch)
1733 (uri (string-append
1734 "https://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-"
1735 version ".tar.gz"))
1736 (sha256
1737 (base32
1738 "00yl6lskygcrddx5zspkhr0ibgvpknl4678kkm6s626539grq93q"))))
1739 (build-system python-build-system)
1740 (home-page "http://pypi.python.org/pypi/unittest2")
1741 (synopsis "Python unit testing library")
1742 (description
1743 "Unittest2 is a replacement for the unittest module in the Python
1744 standard library.")
1745 (license license:psfl)))
1746
1747 (define-public python2-unittest2
1748 (package (inherit python-unittest2)
1749 (name "python2-unittest2")
1750 (version "0.5.1")
1751 (source
1752 (origin
1753 (method url-fetch)
1754 (uri (string-append
1755 "https://pypi.python.org/packages/source/u/unittest2/unittest2-"
1756 version ".tar.gz"))
1757 (sha256
1758 (base32
1759 "0wbs4i4x3x7klr3v35ss6p9mcqz883i1xgcpkhvl7n2lyv6yhpda"))))
1760 (arguments
1761 `(#:python ,python-2
1762 #:tests? #f)))) ; no setup.py test command
1763
1764 (define-public python-pafy
1765 (package
1766 (name "python-pafy")
1767 (version "0.5.3.1")
1768 (source
1769 (origin
1770 (method url-fetch)
1771 (uri (pypi-uri "pafy" version))
1772 (sha256
1773 (base32
1774 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
1775 (build-system python-build-system)
1776 (arguments
1777 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
1778 (propagated-inputs
1779 ;; Youtube-dl is a python package which is imported in the file
1780 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
1781 `(("youtube-dl" ,youtube-dl)))
1782 (home-page "https://np1.github.io/pafy/")
1783 (synopsis "Retrieve YouTube content and metadata")
1784 (description
1785 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
1786 (license license:lgpl3+)))
1787
1788 (define-public python-py
1789 (package
1790 (name "python-py")
1791 (version "1.4.32")
1792 (source
1793 (origin
1794 (method url-fetch)
1795 (uri (pypi-uri "py" version))
1796 (sha256
1797 (base32
1798 "19s1pql9pq85h1qzsdwgyb8a3k1qgkvh33b02m8kfqhizz8rzf64"))))
1799 (build-system python-build-system)
1800 (arguments
1801 ;; FIXME: "ImportError: 'test' module incorrectly imported from
1802 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
1803 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
1804 ;; Is this module globally installed?"
1805 '(#:tests? #f))
1806 (home-page "http://pylib.readthedocs.org/")
1807 (synopsis "Python library for parsing, I/O, instrospection, and logging")
1808 (description
1809 "Py is a Python library for file name parsing, .ini file parsing, I/O,
1810 code introspection, and logging.")
1811 (license license:expat)))
1812
1813 (define-public python2-py
1814 (package-with-python2 python-py))
1815
1816 (define-public python-pytest
1817 (package
1818 (name "python-pytest")
1819 (version "2.7.3")
1820 (source
1821 (origin
1822 (method url-fetch)
1823 (uri (string-append
1824 "https://pypi.python.org/packages/source/p/pytest/pytest-"
1825 version ".tar.gz"))
1826 (sha256
1827 (base32
1828 "1z4yi986f9n0p8qmzmn21m21m8j1x78hk3505f89baqm6pdw7afm"))
1829 (modules '((guix build utils)))
1830 (snippet
1831 ;; One of the tests involves the /usr directory, so it fails.
1832 '(substitute* "testing/test_argcomplete.py"
1833 (("def test_remove_dir_prefix\\(self\\):")
1834 "@pytest.mark.xfail\n def test_remove_dir_prefix(self):")))))
1835 (build-system python-build-system)
1836 (propagated-inputs
1837 `(("python-py" ,python-py)))
1838 (native-inputs
1839 `(("python-nose" ,python-nose)
1840 ("python-mock" ,python-mock)))
1841 (home-page "http://pytest.org")
1842 (synopsis "Python testing library")
1843 (description
1844 "Pytest is a testing tool that provides auto-discovery of test modules
1845 and functions, detailed info on failing assert statements, modular fixtures,
1846 and many external plugins.")
1847 (license license:expat)))
1848
1849 (define-public python2-pytest
1850 (package-with-python2 python-pytest))
1851
1852 ;; Some packages require a newer pytest.
1853 (define-public python-pytest-3.0
1854 (package
1855 (inherit python-pytest)
1856 (name "python-pytest")
1857 (version "3.0.7")
1858 (source (origin
1859 (method url-fetch)
1860 (uri (pypi-uri "pytest" version))
1861 (sha256
1862 (base32
1863 "1asc4b2nd2a4f0g3r12y97rslq5wliji7b73wwkvdrm5s7mrc1mp"))))
1864 (arguments
1865 `(#:phases
1866 (modify-phases %standard-phases
1867 (add-before 'check 'disable-invalid-test
1868 (lambda _
1869 (substitute* "testing/test_argcomplete.py"
1870 (("def test_remove_dir_prefix" line)
1871 (string-append "@pytest.mark.skip"
1872 "(reason=\"Assumes that /usr exists.\")\n "
1873 line)))
1874 #t)))))
1875 (native-inputs
1876 `(("python-nose" ,python-nose)
1877 ("python-mock" ,python-mock)
1878 ("python-hypothesis" ,python-hypothesis)))
1879 (properties `((python2-variant . ,(delay python2-pytest-3.0))))))
1880
1881 (define-public python2-pytest-3.0
1882 (let ((base (package-with-python2
1883 (strip-python2-variant python-pytest-3.0))))
1884 (package (inherit base)
1885 (native-inputs
1886 `(("python2-enum34" ,python2-enum34)
1887 ,@(package-native-inputs base))))))
1888
1889 (define-public python-pytest-cov
1890 (package
1891 (name "python-pytest-cov")
1892 (version "2.4.0")
1893 (source
1894 (origin
1895 (method url-fetch)
1896 (uri (pypi-uri "pytest-cov" version))
1897 (sha256
1898 (base32
1899 "03c2qc42r4bczyw93gd7n0qi1h1jfhw7fnbhi33c3vp1hs81gm2k"))))
1900 (build-system python-build-system)
1901 (arguments
1902 `(#:phases
1903 (modify-phases %standard-phases
1904 (replace 'check
1905 (lambda _
1906 ;; options taken from tox.ini
1907 ;; TODO: make "--restructuredtext" tests pass. They currently fail
1908 ;; with "Duplicate implicit target name"
1909 (zero? (system* "python" "./setup.py" "check"
1910 "--strict" "--metadata")))))))
1911 (propagated-inputs
1912 `(("python-coverage" ,python-coverage)
1913 ("python-pytest" ,python-pytest)))
1914 (home-page "https://github.com/pytest-dev/pytest-cov")
1915 (synopsis "Pytest plugin for measuring coverage")
1916 (description
1917 "Pytest-cov produces coverage reports. It supports centralised testing and
1918 distributed testing in both @code{load} and @code{each} modes. It also
1919 supports coverage of subprocesses.")
1920 (license license:expat)))
1921
1922 (define-public python2-pytest-cov
1923 (package-with-python2 python-pytest-cov))
1924
1925 (define-public python-pytest-runner
1926 (package
1927 (name "python-pytest-runner")
1928 (version "2.11.1")
1929 (source
1930 (origin
1931 (method url-fetch)
1932 (uri (pypi-uri "pytest-runner" version))
1933 (sha256
1934 (base32
1935 "1cw978kqqcq916b9gfns1qjqvg33c5ail5jhw9054dsynkm32flq"))))
1936 (build-system python-build-system)
1937 (arguments
1938 `(#:phases
1939 (modify-phases %standard-phases
1940 ;; The fancy way of setting the version with setuptools_scm does not
1941 ;; seem to work here.
1942 (add-after 'unpack 'set-version
1943 (lambda _
1944 (substitute* "docs/conf.py"
1945 (("version = setuptools_scm\\.get_version\\(root='\\.\\.')")
1946 (string-append "version = \"" ,version "\"")))
1947 #t)))))
1948 (native-inputs
1949 `(("python-pytest" ,python-pytest)
1950 ("python-setuptools-scm" ,python-setuptools-scm)))
1951 (home-page "https://github.com/pytest-dev/pytest-runner")
1952 (synopsis "Invoke py.test as a distutils command")
1953 (description
1954 "This package provides a @command{pytest-runner} command that
1955 @file{setup.py} files can use to run tests.")
1956 (license license:expat)))
1957
1958 (define-public python2-pytest-runner
1959 (package-with-python2 python-pytest-runner))
1960
1961 (define-public python-pytest-mock
1962 (package
1963 (name "python-pytest-mock")
1964 (version "1.2")
1965 (source
1966 (origin
1967 (method url-fetch)
1968 (uri (pypi-uri "pytest-mock" version ".zip"))
1969 (sha256
1970 (base32
1971 "03zxar5drzm7ksqyrwypjaza3cri6wqvpr6iam92djvg6znp32gp"))))
1972 (build-system python-build-system)
1973 (native-inputs
1974 `(("unzip" ,unzip)))
1975 (propagated-inputs
1976 `(("python-pytest" ,python-pytest)))
1977 (home-page "https://github.com/pytest-dev/pytest-mock/")
1978 (synopsis "Thin-wrapper around the mock package for easier use with py.test")
1979 (description
1980 "This plugin installs a @code{mocker} fixture which is a thin-wrapper
1981 around the patching API provided by the @code{mock} package, but with the
1982 benefit of not having to worry about undoing patches at the end of a test.
1983 The mocker fixture has the same API as @code{mock.patch}, supporting the
1984 same arguments.")
1985 (properties `((python2-variant . ,(delay python2-pytest-mock))))
1986 (license license:expat)))
1987
1988 (define-public python2-pytest-mock
1989 (let ((base (package-with-python2
1990 (strip-python2-variant python-pytest-mock))))
1991 (package (inherit base)
1992 (propagated-inputs
1993 `(("python2-mock" ,python2-mock)
1994 ,@(package-propagated-inputs base))))))
1995
1996 (define-public python-pytest-xdist
1997 (package
1998 (name "python-pytest-xdist")
1999 (version "1.14")
2000 (source
2001 (origin
2002 (method url-fetch)
2003 (uri (pypi-uri "pytest-xdist" version ".zip"))
2004 (sha256
2005 (base32
2006 "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))
2007 (modules '((guix build utils)))
2008 (snippet
2009 '(begin
2010 ;; Remove pre-compiled .pyc files from source.
2011 (for-each delete-file-recursively
2012 (find-files "." "__pycache__" #:directories? #t))
2013 (for-each delete-file (find-files "." "\\.pyc$"))
2014 #t))))
2015 (build-system python-build-system)
2016 (arguments
2017 '(#:tests? #f)) ;FIXME: Some tests are failing.
2018 ;; #:phases
2019 ;; (modify-phases %standard-phases
2020 ;; (delete 'check)
2021 ;; (add-after 'install 'check
2022 ;; (lambda* (#:key inputs outputs #:allow-other-keys)
2023 ;; (add-installed-pythonpath inputs outputs)
2024 ;; (zero? (system* "py.test" "-v")))))
2025 (native-inputs
2026 `(("unzip" ,unzip)
2027 ("python-setuptools-scm" ,python-setuptools-scm)))
2028 (propagated-inputs
2029 `(("python-execnet" ,python-execnet)
2030 ("python-pytest" ,python-pytest)
2031 ("python-py" ,python-py)))
2032 (home-page
2033 "https://github.com/pytest-dev/pytest-xdist")
2034 (synopsis
2035 "Plugin for py.test with distributed testing and loop-on-failing modes")
2036 (description
2037 "The pytest-xdist plugin extends py.test with some unique test execution
2038 modes: parallelization, running tests in boxed subprocesses, the ability
2039 to run tests repeatedly when failed, and the ability to run tests on multiple
2040 Python interpreters or platforms. It uses rsync to copy the existing
2041 program code to a remote location, executes there, and then syncs the
2042 result back.")
2043 (license license:expat)))
2044
2045 (define-public python2-pytest-xdist
2046 (package-with-python2 python-pytest-xdist))
2047
2048 (define-public python-scripttest
2049 (package
2050 (name "python-scripttest")
2051 (version "1.3")
2052 (source
2053 (origin
2054 (method url-fetch)
2055 (uri (string-append
2056 "https://pypi.python.org/packages/source/s/scripttest/scripttest-"
2057 version ".tar.gz"))
2058 (sha256
2059 (base32
2060 "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
2061 (build-system python-build-system)
2062 (native-inputs
2063 `(("python-pytest" ,python-pytest)))
2064 (home-page "http://pythonpaste.org/scripttest/")
2065 (synopsis "Python library to test command-line scripts")
2066 (description "Scripttest is a Python helper library for testing
2067 interactive command-line applications. With it you can run a script in a
2068 subprocess and see the output as well as any file modifications.")
2069 (license license:expat)))
2070
2071 (define-public python2-scripttest
2072 (package-with-python2 python-scripttest))
2073
2074 (define-public python-testtools
2075 (package
2076 (name "python-testtools")
2077 (version "1.4.0")
2078 (source
2079 (origin
2080 (method url-fetch)
2081 (uri (pypi-uri "testtools" version))
2082 (sha256
2083 (base32
2084 "1vw8yljnd75d396hhw6s2hrf4cclzy845ifd5am0lxsl235z3i8c"))))
2085 (build-system python-build-system)
2086 (arguments
2087 `(#:phases
2088 (modify-phases %standard-phases
2089 (add-after 'unpack 'fix-module-imports
2090 (lambda _
2091 (substitute* "setup.py"
2092 (("'unittest2>=0.8.0',") ""))
2093 (substitute* '("testtools/testcase.py"
2094 "testtools/testsuite.py"
2095 "testtools/run.py"
2096 "testtools/tests/test_run.py"
2097 "testtools/tests/test_testsuite.py"
2098 "testtools/tests/test_deferredruntest.py")
2099 ;; unittest2 is a backport of Python2.7 features to Python 2.4.
2100 (("import unittest2 as unittest") "import unittest")
2101 (("import unittest2") "import unittest as unittest2")
2102 (("from unittest2 import") "from unittest import"))
2103 (substitute* "testtools/tests/test_testresult.py"
2104 ;; NUL in source code is not allowed (raises ValueError).
2105 (("\\x00\\x04") "\\x04"))
2106 #t)))))
2107 (propagated-inputs
2108 `(("python-mimeparse" ,python-mimeparse)
2109 ("python-extras" ,python-extras)))
2110 (home-page "https://github.com/testing-cabal/testtools")
2111 (synopsis
2112 "Extensions to the Python standard library unit testing framework")
2113 (description
2114 "Testtools extends the Python standard library unit testing framework to
2115 provide matchers, more debugging information, and cross-Python
2116 compatibility.")
2117 (license license:psfl)))
2118
2119 (define-public python2-testtools
2120 (package-with-python2 python-testtools))
2121
2122 (define-public python-testscenarios
2123 (package
2124 (name "python-testscenarios")
2125 (version "0.4")
2126 (source
2127 (origin
2128 (method url-fetch)
2129 (uri (string-append
2130 "https://pypi.python.org/packages/source/t/testscenarios/testscenarios-"
2131 version ".tar.gz"))
2132 (sha256
2133 (base32
2134 "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg"))))
2135 (build-system python-build-system)
2136 (propagated-inputs
2137 `(("python-testtools" ,python-testtools)))
2138 (home-page "https://launchpad.net/testscenarios")
2139 (synopsis "Pyunit extension for dependency injection")
2140 (description
2141 "Testscenarios provides clean dependency injection for Python unittest
2142 style tests.")
2143 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2144
2145 (define-public python2-testscenarios
2146 (package-with-python2 python-testscenarios))
2147
2148 (define-public python-testresources
2149 (package
2150 (name "python-testresources")
2151 (version "0.2.7")
2152 (source
2153 (origin
2154 (method url-fetch)
2155 (uri (string-append
2156 "https://pypi.python.org/packages/source/t/testresources/testresources-"
2157 version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "0cbj3plbllyz42c4b5xxgwaa7mml54lakslrn4kkhinxhdri22md"))))
2161 (build-system python-build-system)
2162 (home-page "https://launchpad.net/testresources")
2163 (synopsis
2164 "Pyunit extension for managing test resources")
2165 (description
2166 "Testresources is an extension to Python's unittest to allow declarative
2167 use of resources by test cases.")
2168 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2169
2170 (define-public python2-testresources
2171 (package-with-python2 python-testresources))
2172
2173 (define-public python-subunit
2174 (package
2175 (name "python-subunit")
2176 (version "0.0.21")
2177 (source
2178 (origin
2179 (method url-fetch)
2180 (uri (string-append
2181 "https://pypi.python.org/packages/source/p/python-subunit/python-subunit-"
2182 version ".tar.gz"))
2183 (sha256
2184 (base32
2185 "1nkw9wfbvizmpajbj3in8ns07g7lwkiv8hip14jjlwk3cacls6jv"))))
2186 (build-system python-build-system)
2187 (propagated-inputs
2188 `(("python-extras" ,python-extras)
2189 ("python-mimeparse" ,python-mimeparse)))
2190 (native-inputs
2191 `(("python-testscenarios" ,python-testscenarios)))
2192 (home-page "http://launchpad.net/subunit")
2193 (synopsis "Python implementation of the subunit protocol")
2194 (description
2195 "Python-subunit is a Python implementation of the subunit test streaming
2196 protocol.")
2197 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2198
2199 (define-public python2-subunit
2200 (package-with-python2 python-subunit))
2201
2202 ;; Recent versions of python-fixtures and python-testrepository need
2203 ;; python-pbr for packaging, which itself needs these two packages for
2204 ;; testing.
2205 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2206 ;; same source, just without any test dependencies and with tests disabled.
2207 ;; python-pbr-minmal is then used to package python-fixtures and
2208 ;; python-testrepository.
2209 ;; Strictly speaking we currently could remove the test-requirements from the
2210 ;; normal python-pbr package (and save this package) since test are disabled
2211 ;; there anyway. But this may change in future.
2212 (define python-pbr-minimal
2213 (package
2214 (name "python-pbr-minimal")
2215 (version "1.10.0")
2216 (source
2217 (origin
2218 (method url-fetch)
2219 (uri (pypi-uri "pbr" version))
2220 (sha256
2221 (base32
2222 "177kd9kbv1hvf2ban7l3x9ymzbi1md4hkaymwbgnz7ihf312hr0q"))
2223 (patches (search-patches "python-pbr-fix-man-page-support.patch"))))
2224 (build-system python-build-system)
2225 (arguments
2226 `(#:tests? #f))
2227 (home-page "http://docs.openstack.org/developer/pbr/")
2228 (synopsis "Minimal build of python-pbr used for bootstrapping")
2229 (description
2230 "Used only for bootstrapping python2-pbr, you should not need this.")
2231 (license license:asl2.0)))
2232
2233 (define python2-pbr-minimal
2234 (package-with-python2 python-pbr-minimal))
2235
2236 (define-public python-pbr
2237 (package
2238 (inherit python-pbr-minimal)
2239 (name "python-pbr")
2240 (arguments
2241 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2242 (propagated-inputs
2243 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2244 (native-inputs
2245 `(("python-fixtures" ,python-fixtures)
2246 ;; discover, coverage, hacking, subunit
2247 ("python-mock" ,python-mock)
2248 ("python-six" ,python-six)
2249 ("python-sphinx" ,python-sphinx)
2250 ("python-testrepository" ,python-testrepository)
2251 ("python-testresources" ,python-testresources)
2252 ("python-testscenarios" ,python-testscenarios)
2253 ("python-testtools" ,python-testtools)
2254 ("python-virtualenv" ,python-virtualenv)))
2255 (synopsis "Enhance the default behavior of Python’s setuptools")
2256 (description
2257 "Python Build Reasonableness (PBR) is a library that injects some useful
2258 and sensible default behaviors into your setuptools run. It will set
2259 versions, process requirements files and generate AUTHORS and ChangeLog file
2260 from git information.
2261 ")))
2262
2263 (define-public python2-pbr
2264 (package-with-python2 python-pbr))
2265
2266 (define-public python-fixtures
2267 (package
2268 (name "python-fixtures")
2269 (version "1.4.0")
2270 (source
2271 (origin
2272 (method url-fetch)
2273 (uri (pypi-uri "fixtures" version))
2274 (sha256
2275 (base32
2276 "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
2277 (build-system python-build-system)
2278 (arguments
2279 '(#:phases
2280 (modify-phases %standard-phases
2281 (replace 'check
2282 (lambda _
2283 (zero? (system* "python" "-m" "testtools.run"
2284 "fixtures.test_suite")))))))
2285 (propagated-inputs
2286 `(("python-six" ,python-six)))
2287 (native-inputs
2288 `(("python-mock" ,python-mock)
2289 ("python-pbr-minimal" ,python-pbr-minimal)
2290 ("python-testtools" ,python-testtools)))
2291 (home-page "https://launchpad.net/python-fixtures")
2292 (synopsis "Python test fixture library")
2293 (description
2294 "Fixtures provides a way to create reusable state, useful when writing
2295 Python tests.")
2296 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2297
2298 (define-public python2-fixtures
2299 (package-with-python2 python-fixtures))
2300
2301 (define-public python-testrepository
2302 (package
2303 (name "python-testrepository")
2304 (version "0.0.20")
2305 (source
2306 (origin
2307 (method url-fetch)
2308 (uri (string-append
2309 "https://pypi.python.org/packages/source/t/testrepository/testrepository-"
2310 version ".tar.gz"))
2311 (sha256
2312 (base32
2313 "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
2314 (build-system python-build-system)
2315 (arguments
2316 ;; FIXME: Many tests are failing.
2317 '(#:tests? #f))
2318 (propagated-inputs
2319 `(("python-fixtures" ,python-fixtures)
2320 ("python-subunit" ,python-subunit)
2321 ("python-testtools" ,python-testtools)))
2322 (native-inputs
2323 `(("python-pbr-minimal" ,python-pbr-minimal) ;; same as for building fixture
2324 ("python-mimeparse" ,python-mimeparse)))
2325 (home-page "https://launchpad.net/testrepository")
2326 (synopsis "Database for Python test results")
2327 (description "Testrepository provides a database of test results which can
2328 be used as part of a developer's workflow to check things such as what tests
2329 have failed since the last commit or what tests are currently failing.")
2330 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2331
2332 (define-public python2-testrepository
2333 (package-with-python2 python-testrepository))
2334
2335 (define-public python-coverage
2336 (package
2337 (name "python-coverage")
2338 (version "4.1")
2339 (source
2340 (origin
2341 (method url-fetch)
2342 (uri (pypi-uri "coverage" version))
2343 (sha256
2344 (base32
2345 "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1"))))
2346 (build-system python-build-system)
2347 (arguments
2348 ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
2349 '(#:tests? #f))
2350 (home-page "http://nedbatchelder.com/code/coverage")
2351 (synopsis "Code coverage measurement for Python")
2352 (description
2353 "Coverage measures code coverage, typically during test execution. It
2354 uses the code analysis tools and tracing hooks provided in the Python standard
2355 library to determine which lines are executable, and which have been
2356 executed.")
2357 (license license:bsd-3)))
2358
2359 (define-public python2-coverage
2360 (package-with-python2 python-coverage))
2361
2362 (define-public python-cov-core
2363 (package
2364 (name "python-cov-core")
2365 (version "1.15.0")
2366 (source
2367 (origin
2368 (method url-fetch)
2369 (uri (pypi-uri "cov-core" version))
2370 (sha256
2371 (base32
2372 "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
2373 (build-system python-build-system)
2374 (propagated-inputs
2375 `(("python-coverage" ,python-coverage)))
2376 (home-page "https://github.com/schlamar/cov-core")
2377 (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
2378 (description
2379 "This is a library package for use by @code{pytest-cov}, @code{nose-cov}
2380 and @code{nose2-cov}. It is useful for developing coverage plugins for these
2381 testing frameworks.")
2382 (license license:expat)))
2383
2384 (define-public python2-cov-core
2385 (package-with-python2 python-cov-core))
2386
2387 (define-public python-discover
2388 (package
2389 (name "python-discover")
2390 (version "0.4.0")
2391 (source
2392 (origin
2393 (method url-fetch)
2394 (uri (string-append
2395 "https://pypi.python.org/packages/source/d/discover/discover-"
2396 version ".tar.gz"))
2397 (sha256
2398 (base32
2399 "0y8d0zwiqar51kxj8lzmkvwc3b8kazb04gk5zcb4nzg5k68zmhq5"))))
2400 (build-system python-build-system)
2401 (home-page "http://pypi.python.org/pypi/discover/")
2402 (synopsis
2403 "Python test discovery for unittest")
2404 (description
2405 "Discover provides test discovery for unittest, a feature that has been
2406 backported from Python 2.7 for Python 2.4+.")
2407 (license license:bsd-3)))
2408
2409 (define-public python2-discover
2410 (package-with-python2 python-discover))
2411
2412 (define-public behave
2413 (package
2414 (name "behave")
2415 (version "1.2.5")
2416 (source (origin
2417 (method url-fetch)
2418 (uri (pypi-uri "behave" version ".tar.bz2"))
2419 (sha256
2420 (base32
2421 "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c"))))
2422 (build-system python-build-system)
2423 (propagated-inputs
2424 `(("python-six" ,python-six)
2425 ("python-parse" ,python-parse)
2426 ("python-parse-type" ,python-parse-type)))
2427 (arguments `(#:tests? #f)) ;TODO: tests require nose>=1.3 and
2428 ;PyHamcrest>=1.8
2429 (home-page "https://github.com/behave/behave")
2430 (synopsis "Python behavior-driven development")
2431 (description
2432 "Behave is a tool for behavior-driven development in python.
2433 Behavior-driven development (or BDD) is an agile software development
2434 technique that encourages collaboration between developers, QA and
2435 non-technical or business participants in a software project. Behave uses
2436 tests written in a natural language style, backed up by Python code.")
2437 (license license:x11)))
2438
2439 (define-public python-exif-read
2440 (package
2441 (name "python-exif-read")
2442 (version "2.1.2")
2443 (source (origin
2444 (method url-fetch)
2445 (uri (pypi-uri "ExifRead" version))
2446 (sha256
2447 (base32
2448 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2449 (build-system python-build-system)
2450 (arguments `(#:tests? #f)) ; no tests
2451 (home-page "https://github.com/ianare/exif-py")
2452 (synopsis "Python library to extract EXIF data from image files")
2453 (description
2454 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2455 files.")
2456 (license license:bsd-3)))
2457
2458 (define-public python2-exif-read
2459 (package-with-python2 python-exif-read))
2460
2461 (define-public python-pyld
2462 (package
2463 (name "python-pyld")
2464 (version "0.7.1")
2465 (source (origin
2466 (method url-fetch)
2467 (uri (pypi-uri "PyLD" version))
2468 (sha256
2469 (base32
2470 "1m0fs6897vxfkf7awah5i66i7b7smm5fnywf1w50fpzyfbfhr156"))))
2471 (build-system python-build-system)
2472 (arguments `(#:tests? #f)) ; no tests
2473 (home-page "https://github.com/digitalbazaar/pyld")
2474 (synopsis "Python implementation of the JSON-LD specification")
2475 (description
2476 "PyLD is an implementation of the JSON-LD specification.")
2477 (license license:bsd-3)))
2478
2479 (define-public python2-pyld
2480 (package-with-python2 python-pyld))
2481
2482 (define-public python-certifi
2483 (package
2484 (name "python-certifi")
2485 (version "2017.1.23")
2486 (source (origin
2487 (method url-fetch)
2488 (uri (pypi-uri "certifi" version))
2489 (sha256
2490 (base32
2491 "1klrzl3hgvcf2mjk00g0k3kk1p2z27vzwnxivwar4vhjmjvpz1w1"))))
2492 (build-system python-build-system)
2493 (home-page "https://certifi.io/")
2494 (synopsis "Python CA certificate bundle")
2495 (description
2496 "Certifi is a Python library that contains a CA certificate bundle, which
2497 is used by the Requests library to verify HTTPS requests.")
2498 (license license:asl2.0)))
2499
2500 (define-public python2-certifi
2501 (package-with-python2 python-certifi))
2502
2503 (define-public python-click
2504 (package
2505 (name "python-click")
2506 (version "6.7")
2507 (source
2508 (origin
2509 (method url-fetch)
2510 (uri (pypi-uri "click" version))
2511 (sha256
2512 (base32
2513 "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi"))))
2514 (build-system python-build-system)
2515 (arguments
2516 `(#:phases
2517 (modify-phases %standard-phases
2518 (add-after 'unpack 'fix-paths
2519 (lambda* (#:key inputs #:allow-other-keys)
2520 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2521 "cross-libc" "libc"))))
2522 (substitute* "click/_unicodefun.py"
2523 (("'locale'")
2524 (string-append "'" glibc "/bin/locale'"))))
2525 #t))
2526 (replace 'check
2527 (lambda _
2528 (zero? (system* "make" "test")))))))
2529 (native-inputs
2530 `(("python-pytest" ,python-pytest)))
2531 (home-page "http://click.pocoo.org")
2532 (synopsis "Command line library for Python")
2533 (description
2534 "Click is a Python package for creating command line interfaces in a
2535 composable way with as little code as necessary. Its name stands for
2536 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2537 with sensible defaults out of the box.")
2538 (license license:bsd-3)))
2539
2540 (define-public python2-click
2541 (package-with-python2 python-click))
2542
2543 (define-public python-wheel
2544 (package
2545 (name "python-wheel")
2546 (version "0.30.0a0")
2547 (source
2548 (origin
2549 (method url-fetch)
2550 (uri (pypi-uri "wheel" version))
2551 (sha256
2552 (base32
2553 "1nm6mn8isny0hr86rhbfrpfj867c0phf001xgsd69xfp9ady1wwq"))))
2554 (build-system python-build-system)
2555 (native-inputs
2556 `(("python-jsonschema" ,python-jsonschema)
2557 ("python-pytest-cov" ,python-pytest-cov)))
2558 (home-page "https://bitbucket.org/pypa/wheel/")
2559 (synopsis "Format for built Python packages")
2560 (description
2561 "A wheel is a ZIP-format archive with a specially formatted filename and
2562 the @code{.whl} extension. It is designed to contain all the files for a PEP
2563 376 compatible install in a way that is very close to the on-disk format. Many
2564 packages will be properly installed with only the @code{Unpack} step and the
2565 unpacked archive preserves enough information to @code{Spread} (copy data and
2566 scripts to their final locations) at any later time. Wheel files can be
2567 installed with a newer @code{pip} or with wheel's own command line utility.")
2568 (license license:expat)
2569 (properties `((python2-variant . ,(delay python2-wheel))))))
2570
2571 (define-public python2-wheel
2572 (let ((wheel (package-with-python2
2573 (strip-python2-variant python-wheel))))
2574 (package (inherit wheel)
2575 (native-inputs `(("python2-functools32" ,python2-functools32)
2576 ,@(package-native-inputs wheel))))))
2577
2578
2579 (define-public python-requests
2580 (package
2581 (name "python-requests")
2582 (version "2.13.0")
2583 (source (origin
2584 (method url-fetch)
2585 (uri (pypi-uri "requests" version))
2586 (sha256
2587 (base32
2588 "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp"))))
2589 ;; TODO: unbundle urllib3 and chardet.
2590 (build-system python-build-system)
2591 (arguments
2592 ;; FIXME: Some tests require network access.
2593 '(#:tests? #f))
2594 (home-page "http://python-requests.org/")
2595 (synopsis "Python HTTP library")
2596 (description
2597 "Requests is a Python HTTP client library. It aims to be easier to use
2598 than Python’s urllib2 library.")
2599 (license license:asl2.0)))
2600
2601 ;; Some software requires an older version of Requests, notably Docker
2602 ;; Compose.
2603 (define-public python-requests-2.7
2604 (package (inherit python-requests)
2605 (version "2.7.0")
2606 (source (origin
2607 (method url-fetch)
2608 (uri (pypi-uri "requests" version))
2609 (sha256
2610 (base32
2611 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
2612
2613 (define-public python2-requests
2614 (package-with-python2 python-requests))
2615
2616 (define-public python-vcversioner
2617 (package
2618 (name "python-vcversioner")
2619 (version "2.16.0.0")
2620 (source
2621 (origin
2622 (method url-fetch)
2623 (uri (pypi-uri "vcversioner" version))
2624 (sha256
2625 (base32
2626 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2627 (build-system python-build-system)
2628 (synopsis "Python library for version number discovery")
2629 (description "Vcversioner is a Python library that inspects tagging
2630 information in a variety of version control systems in order to discover
2631 version numbers.")
2632 (home-page "https://github.com/habnabit/vcversioner")
2633 (license license:isc)))
2634
2635 (define-public python2-vcversioner
2636 (package-with-python2 python-vcversioner))
2637
2638 (define-public python-jsonschema
2639 (package
2640 (name "python-jsonschema")
2641 (version "2.5.1")
2642 (source (origin
2643 (method url-fetch)
2644 (uri
2645 (string-append
2646 "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-"
2647 version ".tar.gz"))
2648 (sha256
2649 (base32
2650 "0hddbqjm4jq63y8jf44nswina1crjs16l9snb6m3vvgyg31klrrn"))))
2651 (build-system python-build-system)
2652 (arguments
2653 '(#:phases
2654 (modify-phases %standard-phases
2655 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
2656 (native-inputs
2657 `(("python-nose" ,python-nose)
2658 ("python-vcversioner" ,python-vcversioner)))
2659 (home-page "https://github.com/Julian/jsonschema")
2660 (synopsis "Implementation of JSON Schema for Python")
2661 (description
2662 "Jsonschema is an implementation of JSON Schema for Python.")
2663 (license license:expat)
2664 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2665
2666 (define-public python2-jsonschema
2667 (let ((jsonschema (package-with-python2
2668 (strip-python2-variant python-jsonschema))))
2669 (package (inherit jsonschema)
2670 (native-inputs
2671 `(("python2-mock" ,python2-mock)
2672 ,@(package-native-inputs jsonschema)))
2673 (propagated-inputs
2674 `(("python2-functools32" ,python2-functools32))))))
2675
2676 (define-public python-kitchen
2677 (package
2678 (name "python-kitchen")
2679 (version "1.2.4")
2680 (source
2681 (origin
2682 (method url-fetch)
2683 (uri (pypi-uri "kitchen" version))
2684 (sha256
2685 (base32
2686 "0ggv3p4x8jvmmzhp0xm00h6pvh1g0gmycw71rjwagnrj8n23vxrq"))))
2687 (build-system python-build-system)
2688 (propagated-inputs
2689 `(("python-chardet" ,python-chardet)))
2690 (home-page "https://github.com/fedora-infra/kitchen")
2691 (synopsis "Python API for snippets")
2692 (description "@code{kitchen} module provides a python API for all sorts of
2693 little useful snippets of code that everybody ends up writing for their projects
2694 but never seem big enough to build an independent release. Use kitchen and stop
2695 cutting and pasting that code over and over.")
2696 (license (list license:lgpl2.1+
2697 ;; subprocess.py, test_subprocess.py,
2698 ;; kitchen/pycompat25/defaultdict.py:
2699 license:psfl))))
2700
2701 (define-public python2-kitchen
2702 (package-with-python2 python-kitchen))
2703
2704 (define-public python-unidecode
2705 (package
2706 (name "python-unidecode")
2707 (version "0.04.20")
2708 (source (origin
2709 (method url-fetch)
2710 (uri (pypi-uri "Unidecode" version))
2711 (sha256
2712 (base32
2713 "1q00i8gpsq3d9r0q8wk4b290fxl0kqlsdk7iadvli45in6s1hi7d"))))
2714 (build-system python-build-system)
2715 (home-page "https://pypi.python.org/pypi/Unidecode")
2716 (synopsis "ASCII transliterations of Unicode text")
2717 (description
2718 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2719 useful when integrating with legacy code that doesn't support Unicode, or for
2720 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2721 machine identifiers from human-readable Unicode strings that should still be
2722 somewhat intelligeble.")
2723 (license license:gpl2+)))
2724
2725 (define-public python2-unidecode
2726 (package-with-python2 python-unidecode))
2727
2728 (define-public python-pyjwt
2729 (package
2730 (name "python-pyjwt")
2731 (version "1.4.0")
2732 (source
2733 (origin
2734 (method url-fetch)
2735 (uri (pypi-uri "PyJWT" version))
2736 (sha256
2737 (base32
2738 "1556v2jppd8mjkkj66pxb5rcazm35jq81r233mdl8hfmz9n3icp1"))))
2739 (build-system python-build-system)
2740 (native-inputs
2741 `(("python-pytest" ,python-pytest)
2742 ("python-pytest-cov" ,python-pytest-cov)
2743 ("python-pytest-runner" ,python-pytest-runner)))
2744 (home-page "https://github.com/progrium/pyjwt")
2745 (synopsis "JSON Web Token implementation in Python")
2746 (description
2747 "PyJWT is a JSON Web Token implementation written in Python.")
2748 (license license:expat)))
2749
2750 (define-public python2-pyjwt
2751 (package-with-python2 python-pyjwt))
2752
2753 (define-public python-pykka
2754 (package
2755 (name "python-pykka")
2756 (version "1.2.1")
2757 (source
2758 (origin
2759 (method url-fetch)
2760 (uri (pypi-uri "Pykka" version))
2761 (sha256
2762 (base32
2763 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2764 (build-system python-build-system)
2765 (native-inputs
2766 `(("python-mock" ,python-mock)
2767 ("python-nose" ,python-nose)
2768 ("python-gevent" ,python-gevent)
2769 ("python-eventlet" ,python-eventlet)))
2770 (home-page "https://www.pykka.org/")
2771 (synopsis "Pykka is a Python implementation of the actor model")
2772 (description
2773 "Pykka is a Python implementation of the actor model.
2774 The actor model introduces some simple rules to control the sharing
2775 of state and cooperation between execution units, which makes it
2776 easier to build concurrent applications.")
2777 (license license:asl2.0)))
2778
2779 (define-public python2-pykka
2780 (package-with-python2 python-pykka))
2781
2782 (define-public python-oauthlib
2783 (package
2784 (name "python-oauthlib")
2785 (version "1.0.3")
2786 (source (origin
2787 (method url-fetch)
2788 (uri (pypi-uri "oauthlib" version))
2789 (sha256
2790 (base32
2791 "1bfrj70vdjxjw74khbyh6f0dksv7p5rh2346jnlrffyacd3gwjzg"))))
2792 (build-system python-build-system)
2793 (native-inputs
2794 `(("python-nose" ,python-nose)
2795 ("python-mock" ,python-mock)
2796 ("python-cryptography" ,python-cryptography)
2797 ("python-pyjwt" ,python-pyjwt)
2798 ("python-blinker" ,python-blinker)))
2799 (home-page "https://github.com/idan/oauthlib")
2800 (synopsis "OAuth implementation for Python")
2801 (description
2802 "Oauthlib is a generic, spec-compliant, thorough implementation of the
2803 OAuth request-signing logic.")
2804 (license license:bsd-3)
2805 (properties `((python2-variant . ,(delay python2-oauthlib))))))
2806
2807 (define-public python2-oauthlib
2808 (let ((base (package-with-python2 (strip-python2-variant python-oauthlib))))
2809 (package
2810 (inherit base)
2811 (native-inputs `(("python2-unittest2" ,python2-unittest2)
2812 ,@(package-native-inputs base))))))
2813
2814 (define-public python-itsdangerous
2815 (package
2816 (name "python-itsdangerous")
2817 (version "0.24")
2818 (source
2819 (origin
2820 (method url-fetch)
2821 (uri (string-append
2822 "https://pypi.python.org/packages/source/i/itsdangerous/itsdangerous-"
2823 version ".tar.gz"))
2824 (sha256
2825 (base32
2826 "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb"))))
2827 (build-system python-build-system)
2828 (home-page "https://github.com/mitsuhiko/itsdangerous")
2829 (synopsis "Python library for passing data to/from untrusted environments")
2830 (description
2831 "Itsdangerous provides various helpers to pass trusted data to untrusted
2832 environments and back.")
2833 (license license:bsd-3)))
2834
2835 (define-public python2-itsdangerous
2836 (package-with-python2 python-itsdangerous))
2837
2838 (define-public python-pyyaml
2839 (package
2840 (name "python-pyyaml")
2841 (version "3.12")
2842 (source
2843 (origin
2844 (method url-fetch)
2845 (uri (pypi-uri "PyYAML" version))
2846 (sha256
2847 (base32
2848 "1aqjl8dk9amd4zr99n8v2qxzgmr2hdvqfma4zh7a41rj6336c9sr"))))
2849 (build-system python-build-system)
2850 (inputs
2851 `(("libyaml" ,libyaml)))
2852 (home-page "http://pyyaml.org/wiki/PyYAML")
2853 (synopsis "YAML parser and emitter for Python")
2854 (description
2855 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2856 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2857 API, and sensible error messages. PyYAML supports standard YAML tags and
2858 provides Python-specific tags that allow to represent an arbitrary Python
2859 object.")
2860 (license license:expat)))
2861
2862 (define-public python2-pyyaml
2863 (package-with-python2 python-pyyaml))
2864
2865 (define-public python-virtualenv
2866 (package
2867 (name "python-virtualenv")
2868 (version "15.0.3")
2869 (source
2870 (origin
2871 (method url-fetch)
2872 (uri (pypi-uri "virtualenv" version))
2873 (sha256
2874 (base32
2875 "07cbajzk8l05k5zhlw0b9wbf2is65bl9v6zrn2a0iyn57w6pd73d"))))
2876 (build-system python-build-system)
2877 (arguments
2878 `(#:phases
2879 (modify-phases %standard-phases
2880 (replace 'check
2881 (lambda _
2882 ;; Disable failing test. See upstream bug report
2883 ;; https://github.com/pypa/virtualenv/issues/957
2884 (substitute* "tests/test_virtualenv.py"
2885 (("skipif.*") "skipif(True, reason=\"Guix\")\n"))
2886 (zero? (system* "py.test")))))))
2887 (native-inputs
2888 `(("python-mock" ,python-mock)
2889 ("python-pytest" ,python-pytest)))
2890 (home-page "https://virtualenv.pypa.io/")
2891 (synopsis "Virtual Python environment builder")
2892 (description
2893 "Virtualenv is a tool to create isolated Python environments.")
2894 (license license:expat)))
2895
2896 (define-public python2-virtualenv
2897 (package-with-python2 python-virtualenv))
2898
2899 (define-public python-markupsafe
2900 (package
2901 (name "python-markupsafe")
2902 (version "0.23")
2903 (source
2904 (origin
2905 (method url-fetch)
2906 (uri (string-append
2907 "https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-"
2908 version ".tar.gz"))
2909 (sha256
2910 (base32
2911 "1hvip33wva3fnmvfp9x5klqri7hpl1hkgqmjbss18nmrb7zimv54"))))
2912 (build-system python-build-system)
2913 (home-page "https://github.com/mitsuhiko/markupsafe")
2914 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
2915 (description
2916 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
2917 for Python.")
2918 (license license:bsd-3)))
2919
2920 (define-public python2-markupsafe
2921 (package-with-python2 python-markupsafe))
2922
2923 (define-public python-jinja2
2924 (package
2925 (name "python-jinja2")
2926 (version "2.8")
2927 (source
2928 (origin
2929 (method url-fetch)
2930 (uri (pypi-uri "Jinja2" version))
2931 (sha256
2932 (base32
2933 "1x0v41lp5m1pjix3l46zx02b7lqp2hflgpnxwkywxynvi3zz47xw"))))
2934 (build-system python-build-system)
2935 (propagated-inputs
2936 `(("python-markupsafe" ,python-markupsafe)))
2937 (home-page "http://jinja.pocoo.org/")
2938 (synopsis "Python template engine")
2939 (description
2940 "Jinja2 is a small but fast and easy to use stand-alone template engine
2941 written in pure Python.")
2942 (license license:bsd-3)))
2943
2944 (define-public python2-jinja2
2945 (package-with-python2 python-jinja2))
2946
2947 (define-public python-pystache
2948 (package
2949 (name "python-pystache")
2950 (version "0.5.4")
2951 (source (origin
2952 (method url-fetch)
2953 (uri (pypi-uri "pystache" version))
2954 (sha256
2955 (base32
2956 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
2957 (build-system python-build-system)
2958 (arguments
2959 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
2960 (home-page "http://defunkt.io/pystache/")
2961 (synopsis "Python logic-less template engine")
2962 (description
2963 "Pystache is a Python implementation of the framework agnostic,
2964 logic-free templating system Mustache.")
2965 (license license:expat)
2966 (properties `((python2-variant . ,(delay python2-pystache))))))
2967
2968 (define-public python2-pystache
2969 (package (inherit (package-with-python2
2970 (strip-python2-variant python-pystache)))
2971 (arguments
2972 `(#:python ,python-2
2973 #:phases
2974 (modify-phases %standard-phases
2975 (replace 'check
2976 (lambda _
2977 (zero? (system* "python" "test_pystache.py")))))))))
2978
2979 (define-public python-joblib
2980 (package
2981 (name "python-joblib")
2982 (version "0.10.3")
2983 (source (origin
2984 (method url-fetch)
2985 (uri (pypi-uri "joblib" version))
2986 (sha256
2987 (base32
2988 "0787k919zlfmgymprz5bzv0v1df5bbirlf3awrghmjgvkrd9dci9"))
2989 (modules '((guix build utils)))
2990 (snippet
2991 '(begin
2992 ;; Remove pre-compiled .pyc files from source.
2993 (for-each delete-file-recursively
2994 (find-files "." "__pycache__" #:directories? #t))
2995 (for-each delete-file (find-files "." "\\.pyc$"))
2996 #t))))
2997 (build-system python-build-system)
2998 (arguments
2999 `(#:phases
3000 (modify-phases %standard-phases
3001 (add-before 'check 'disable-failing-tests
3002 (lambda _
3003 ;; This numpydoc tests fails for unknown reasons
3004 (delete-file "doc/sphinxext/numpydoc/tests/test_docscrape.py")
3005 ;; This numpydoc test depends on matplotlib, which is not a
3006 ;; required input.
3007 (delete-file "doc/sphinxext/numpydoc/tests/test_plot_directive.py")
3008 ;; These tests fail to execute sys.executable
3009 (substitute* "joblib/test/test_parallel.py"
3010 (("import nose" line)
3011 (string-append "from nose.plugins.skip import SkipTest\n" line))
3012 (("def test_nested_parallel_warnings" line)
3013 (string-append "@SkipTest\n" line))
3014 (("def test_parallel_with_interactively_defined_functions" line)
3015 (string-append "@SkipTest\n" line)))
3016 #t)))))
3017 ;; Provide nose to enable tests command
3018 (native-inputs
3019 `(("python-nose" ,python-nose)
3020 ("python-sphinx" ,python-sphinx)
3021 ("python-docutils" ,python-docutils)
3022 ("python-numpydoc" ,python-numpydoc)))
3023 (home-page "http://pythonhosted.org/joblib/")
3024 (synopsis "Using Python functions as pipeline jobs")
3025 (description
3026 "Joblib is a set of tools to provide lightweight pipelining in Python.
3027 In particular, joblib offers: transparent disk-caching of the output values
3028 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3029 logging and tracing of the execution.")
3030 (license license:bsd-3)))
3031
3032 (define-public python2-joblib
3033 (package-with-python2 python-joblib))
3034
3035 (define-public python-docutils
3036 (package
3037 (name "python-docutils")
3038 (version "0.13.1")
3039 (source
3040 (origin
3041 (method url-fetch)
3042 (uri (pypi-uri "docutils" version))
3043 (sha256
3044 (base32
3045 "1gkma47i609jfs7dssxn4y9vsz06qi0l5q41nws0zgkpnrghz33i"))))
3046 (build-system python-build-system)
3047 (arguments
3048 '(#:tests? #f)) ; no setup.py test command
3049 (home-page "http://docutils.sourceforge.net/")
3050 (synopsis "Python Documentation Utilities")
3051 (description
3052 "Docutils is a modular system for processing documentation into useful
3053 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3054 reStructuredText.")
3055 ;; Most of the source code is public domain, but some source files are
3056 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3057 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3058
3059 (define-public python2-docutils
3060 (package-with-python2 python-docutils))
3061
3062 (define-public python-pygments
3063 (package
3064 (name "python-pygments")
3065 (version "2.1.3")
3066 (source
3067 (origin
3068 (method url-fetch)
3069 (uri (pypi-uri "Pygments" version))
3070 (sha256
3071 (base32
3072 "10axnp2wpjnq9g8wg53fx0c70dfxqrz498jyz8mrdx9a3flwir48"))))
3073 (build-system python-build-system)
3074 (arguments
3075 ;; FIXME: Tests require sphinx, which depends on this.
3076 '(#:tests? #f))
3077 (home-page "http://pygments.org/")
3078 (synopsis "Syntax highlighting")
3079 (description
3080 "Pygments is a syntax highlighting package written in Python.")
3081 (license license:bsd-2)))
3082
3083 (define-public python2-pygments
3084 (package-with-python2 python-pygments))
3085
3086 (define-public python-sphinx
3087 (package
3088 (name "python-sphinx")
3089 (version "1.5.1")
3090 (source
3091 (origin
3092 (method url-fetch)
3093 (uri (pypi-uri "Sphinx" version))
3094 (sha256
3095 (base32
3096 "1i8p9idnli4gr0y4x67yakbdk5w6a0xjzhrg6bg51y9d1fi7fslf"))))
3097 (build-system python-build-system)
3098 (arguments
3099 `(#:phases
3100 (modify-phases %standard-phases
3101 (replace 'check
3102 (lambda _
3103 ;; Requires Internet access.
3104 (delete-file "tests/test_build_linkcheck.py")
3105 (zero? (system* "make" "test")))))))
3106 (propagated-inputs
3107 `(("python-imagesize" ,python-imagesize)
3108 ("python-sphinx-alabaster-theme"
3109 ,python-sphinx-alabaster-theme)
3110 ("python-babel" ,python-babel)
3111 ("python-snowballstemmer" ,python-snowballstemmer)
3112 ("python-docutils" ,python-docutils)
3113 ("python-jinja2" ,python-jinja2)
3114 ("python-pygments" ,python-pygments)
3115 ("python-requests" ,python-requests)
3116 ("python-six" ,python-six)))
3117 (native-inputs
3118 `(("graphviz" ,graphviz)
3119 ("python-html5lib" ,python-html5lib)
3120 ("python-mock" ,python-mock)
3121 ("python-nose" ,python-nose)))
3122 (home-page "http://sphinx-doc.org/")
3123 (synopsis "Python documentation generator")
3124 (description "Sphinx is a tool that makes it easy to create documentation
3125 for Python projects or other documents consisting of multiple reStructuredText
3126 sources.")
3127 (license license:bsd-3)
3128 (properties `((python2-variant . ,(delay python2-sphinx))))))
3129
3130 (define-public python-sphinx-1.5.3
3131 (package
3132 (inherit python-sphinx)
3133 (name "python-sphinx")
3134 (version "1.5.3")
3135 (source
3136 (origin
3137 (method url-fetch)
3138 (uri (pypi-uri "Sphinx" version))
3139 (sha256
3140 (base32
3141 "0kw1axswbvaavr8ggyf4qr6hnisnrzlbkkcdada69vk1x9xjassg"))))
3142 (native-inputs
3143 `(("python-pytest" ,python-pytest-3.0)
3144 ,@(package-native-inputs python-sphinx)))))
3145
3146 (define-public python2-sphinx
3147 (let ((base (package-with-python2 (strip-python2-variant python-sphinx))))
3148 (package
3149 (inherit base)
3150 (native-inputs `(("python2-mock" ,python2-mock)
3151 ("python2-enum34" ,python2-enum34)
3152 ,@(package-native-inputs base)))
3153 (propagated-inputs `(("python2-pytz" ,python2-pytz)
3154 ,@(package-propagated-inputs base))))))
3155
3156 (define-public python-sphinx-rtd-theme
3157 (package
3158 (name "python-sphinx-rtd-theme")
3159 (version "0.2.4")
3160 (source
3161 (origin
3162 (method url-fetch)
3163 (uri (pypi-uri "sphinx_rtd_theme" version))
3164 (sha256
3165 (base32
3166 "05rlhjzdyapr2w74jjs7mrm8hi69qskcr5vya9f9drpsys7lpxrd"))))
3167 (build-system python-build-system)
3168 (arguments '(#:tests? #f)) ; No tests.
3169 (propagated-inputs
3170 `(("python-sphinx" ,python-sphinx)))
3171 (home-page "https://github.com/snide/sphinx_rtd_theme/")
3172 (synopsis "ReadTheDocs.org theme for Sphinx")
3173 (description "A theme for Sphinx used by ReadTheDocs.org.")
3174 (license license:expat)))
3175
3176 (define-public python2-sphinx-rtd-theme
3177 (package-with-python2 python-sphinx-rtd-theme))
3178
3179 (define-public python-rst.linker
3180 (package
3181 (name "python-rst.linker")
3182 (version "1.7")
3183 (source
3184 (origin
3185 (method url-fetch)
3186 (uri (pypi-uri "rst.linker" version))
3187 (sha256
3188 (base32
3189 "0bh4lnj2p1nh0wf5pgxgfbrp27xhb1rinahkb5j7s3qprq6qn0sr"))))
3190 (build-system python-build-system)
3191 (propagated-inputs
3192 `(("python-dateutil" ,python-dateutil)
3193 ("python-six" ,python-six)))
3194 (native-inputs
3195 `(("python-setuptools-scm" ,python-setuptools-scm)))
3196 ;; Test would require path.py, which would introduce a cyclic dependence.
3197 (arguments `(#:tests? #f))
3198 ;; Note: As of version 1.7 the documentation is not worth building.
3199 (home-page "https://github.com/jaraco/rst.linker")
3200 (synopsis "Sphinx plugin to add links and timestamps")
3201 (description "rst.linker allows to automatically replace text by a
3202 reStructuredText external reference or timestamps. It's primary purpose is to
3203 augment the changelog, but it can be used for other documents, too.")
3204 (license license:expat)))
3205
3206 (define-public python2-rst.linker
3207 (package-with-python2 python-rst.linker))
3208
3209 (define-public python-feedgenerator
3210 (package
3211 (name "python-feedgenerator")
3212 (version "1.9")
3213 (source
3214 (origin
3215 (method url-fetch)
3216 (uri (pypi-uri "feedgenerator" version))
3217 (sha256
3218 (base32
3219 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3220 (modules '((guix build utils)))
3221 (snippet
3222 '(begin
3223 ;; Remove pre-compiled .pyc files from source.
3224 (for-each delete-file-recursively
3225 (find-files "." "__pycache__" #:directories? #t))
3226 (for-each delete-file (find-files "." "\\.pyc$"))
3227 #t))))
3228 (build-system python-build-system)
3229 (propagated-inputs
3230 `(("python-pytz" ,python-pytz)
3231 ("python-six" ,python-six)))
3232 (home-page "https://github.com/getpelican/feedgenerator")
3233 (synopsis
3234 "Standalone version of Django's Atom/RSS feed generator")
3235 (description
3236 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3237 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3238 (license license:bsd-3)))
3239
3240 (define-public python2-feedgenerator
3241 (package-with-python2 python-feedgenerator))
3242
3243 (define-public python-blinker
3244 (package
3245 (name "python-blinker")
3246 (version "1.4")
3247 (source
3248 (origin
3249 (method url-fetch)
3250 (uri (pypi-uri "blinker" version))
3251 (sha256
3252 (base32
3253 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3254 (build-system python-build-system)
3255 (home-page "http://pythonhosted.org/blinker/")
3256 (synopsis "Fast, simple object-to-object and broadcast signaling")
3257 (description
3258 "Blinker provides a fast dispatching system that allows any number of
3259 interested parties to subscribe to events, or \"signals\".")
3260 (license license:expat)))
3261
3262 (define-public python2-blinker
3263 (package-with-python2 python-blinker))
3264
3265 (define-public pelican
3266 (package
3267 (name "pelican")
3268 (version "3.6.3")
3269 (source
3270 (origin
3271 (method url-fetch)
3272 (uri (pypi-uri "pelican" version))
3273 (sha256
3274 (base32
3275 "1hn94rb4q3zmcq16in055xikal4dba5hfx3zznq7warllcgc9f8k"))))
3276 (build-system python-build-system)
3277 (propagated-inputs
3278 `(("python-feedgenerator" ,python-feedgenerator)
3279 ("python-jinja2" ,python-jinja2)
3280 ("python-pygments" ,python-pygments)
3281 ("python-docutils" ,python-docutils)
3282 ("python-pytz" ,python-pytz)
3283 ("python-blinker" ,python-blinker)
3284 ("python-unidecode" ,python-unidecode)
3285 ("python-six" ,python-six)
3286 ("python-dateutil" ,python-dateutil)))
3287 (home-page "http://getpelican.com/")
3288 (arguments
3289 `(;; XXX Requires a lot more packages to do unit tests :P
3290 #:tests? #f
3291 #:phases (modify-phases %standard-phases
3292 (add-before
3293 'install 'adjust-requires
3294 ;; Since feedgenerator is installed from git, it doesn't
3295 ;; conform to the version requirements.
3296 ;;
3297 ;; We *do have* "feedgenerator >= 1.6", but strip off the
3298 ;; version requirement so setuptools doesn't get confused.
3299 (lambda _
3300 (substitute* "setup.py"
3301 (("['\"]feedgenerator.*?['\"]")
3302 "'feedgenerator'")))))))
3303 (synopsis "Python-based static site publishing system")
3304 (description
3305 "Pelican is a tool to generate a static blog from reStructuredText,
3306 Markdown input files, and more. Pelican uses Jinja2 for templating
3307 and is very extensible.")
3308 (license license:agpl3+)))
3309
3310 (define-public python-scikit-learn
3311 (package
3312 (name "python-scikit-learn")
3313 (version "0.18.1")
3314 (source
3315 (origin
3316 (method url-fetch)
3317 (uri (string-append
3318 "https://github.com/scikit-learn/scikit-learn/archive/"
3319 version ".tar.gz"))
3320 (file-name (string-append name "-" version ".tar.gz"))
3321 (sha256
3322 (base32
3323 "1hwswckdmd27f7k1jvwdc0m4mqrgxl2s245yq1scq34v124bjqgq"))))
3324 (build-system python-build-system)
3325 (arguments
3326 `(#:phases
3327 (modify-phases %standard-phases
3328 (delete 'check)
3329 (add-after 'install 'check
3330 ;; Running tests from the source directory requires
3331 ;; an "inplace" build with paths relative to CWD.
3332 ;; http://scikit-learn.org/stable/developers/advanced_installation.html#testing
3333 ;; Use the installed version instead.
3334 (lambda* (#:key inputs outputs #:allow-other-keys)
3335 (add-installed-pythonpath inputs outputs)
3336 ;; some tests require access to "$HOME"
3337 (setenv "HOME" "/tmp")
3338 ;; Step out of the source directory just to be sure.
3339 (chdir "..")
3340 (zero? (system* "nosetests" "-v" "sklearn")))))))
3341 (inputs
3342 `(("openblas" ,openblas)))
3343 (native-inputs
3344 `(("python-nose" ,python-nose)
3345 ("python-cython" ,python-cython)))
3346 (propagated-inputs
3347 `(("python-numpy" ,python-numpy)
3348 ("python-scipy" ,python-scipy)))
3349 (home-page "http://scikit-learn.org/")
3350 (synopsis "Machine Learning in Python")
3351 (description
3352 "Scikit-learn provides simple and efficient tools for data
3353 mining and data analysis.")
3354 (license license:bsd-3)))
3355
3356 (define-public python2-scikit-learn
3357 (package-with-python2 python-scikit-learn))
3358
3359 (define-public python-scikit-image
3360 (package
3361 (name "python-scikit-image")
3362 (version "0.11.3")
3363 (source
3364 (origin
3365 (method url-fetch)
3366 (uri (string-append
3367 "https://pypi.python.org/packages/source/s/scikit-image/scikit-image-"
3368 version ".tar.gz"))
3369 (sha256
3370 (base32 "0jz416fqvpahqyffw8plmszzfj669w8wvf3y9clnr5lr6a7md3kn"))))
3371 (build-system python-build-system)
3372 (arguments
3373 ;; TODO: Some tests require running X11 server. Disable them?
3374 '(#:tests? #f))
3375 ;; See DEPENDS.txt for the list of build and run time requiremnts
3376 (propagated-inputs
3377 `(("python-matplotlib" ,python-matplotlib)
3378 ("python-networkx" ,python-networkx)
3379 ("python-scipy" ,python-scipy)
3380 ("python-pillow" ,python-pillow)))
3381 (native-inputs
3382 `(("python-numpy" ,python-numpy)
3383 ("python-cython" ,python-cython)
3384 ("python-six" ,python-six)))
3385 (home-page "http://scikit-image.org/")
3386 (synopsis "Image processing in Python")
3387 (description
3388 "Scikit-image is a collection of algorithms for image processing.")
3389 (license license:bsd-3)))
3390
3391 (define-public python2-scikit-image
3392 (package-with-python2 python-scikit-image))
3393
3394 (define-public python-redis
3395 (package
3396 (name "python-redis")
3397 (version "2.10.5")
3398 (source
3399 (origin
3400 (method url-fetch)
3401 (uri (pypi-uri "redis" version))
3402 (sha256
3403 (base32 "0csmrkxb29x7xs9b51zplwkkq2hwnbh9jns1g85dykn5rxmaxysx"))))
3404 (build-system python-build-system)
3405 ;; Tests require a running Redis server
3406 (arguments '(#:tests? #f))
3407 ;; As long as we are not running test, we do not need this input :-)
3408 ;;(native-inputs
3409 ;; `(("python-pytest" ,python-pytest)))
3410 (home-page "https://github.com/andymccurdy/redis-py")
3411 (synopsis "Redis Python client")
3412 (description
3413 "This package provides a Python interface to the Redis key-value store.")
3414 (license license:expat)))
3415
3416 (define-public python2-redis
3417 (package-with-python2 python-redis))
3418
3419 (define-public python-rq
3420 (package
3421 (name "python-rq")
3422 (version "0.7.1")
3423 (source
3424 (origin
3425 (method url-fetch)
3426 (uri (pypi-uri "rq" version))
3427 (sha256
3428 (base32 "0gaq5pnh0zy46r8jvygi0ifbvz3pq6i7xla78ijcgjw0x77qzsdh"))))
3429 (build-system python-build-system)
3430 (propagated-inputs
3431 `(("python-click" ,python-click)
3432 ("python-redis" ,python-redis)))
3433 (home-page "http://python-rq.org/")
3434 (synopsis "Simple job queues for Python")
3435 (description
3436 "RQ (Redis Queue) is a simple Python library for queueing jobs and
3437 processing them in the background with workers. It is backed by Redis and it
3438 is designed to have a low barrier to entry.")
3439 (license license:bsd-2)))
3440
3441 (define-public python2-rq
3442 (package-with-python2 python-rq))
3443
3444 (define-public python-cython
3445 (package
3446 (name "python-cython")
3447 (version "0.25.2")
3448 (source
3449 (origin
3450 (method url-fetch)
3451 (uri (pypi-uri "Cython" version))
3452 (patches (search-patches "python-cython-fix-tests-32bit.patch"))
3453 (sha256
3454 (base32
3455 "01h3lrf6d98j07iakifi81qjszh6faa37ibx7ylva1vsqbwx2hgi"))))
3456 (build-system python-build-system)
3457 ;; we need the full python package and not just the python-wrapper
3458 ;; because we need libpython3.3m.so
3459 (inputs
3460 `(("python" ,python)))
3461 (arguments
3462 `(#:phases
3463 (modify-phases %standard-phases
3464 (add-before 'check 'set-HOME
3465 ;; some tests require access to "$HOME/.cython"
3466 (lambda _ (setenv "HOME" "/tmp")))
3467 (replace 'check
3468 (lambda _ (zero? (system* "python" "runtests.py" "-vv")))))))
3469 (home-page "http://cython.org/")
3470 (synopsis "C extensions for Python")
3471 (description "Cython is an optimising static compiler for both the Python
3472 programming language and the extended Cython programming language. It makes
3473 writing C extensions for Python as easy as Python itself.")
3474 (license license:asl2.0)
3475 (properties `((python2-variant . ,(delay python2-cython))))))
3476
3477 (define-public python2-cython
3478 (package (inherit (package-with-python2
3479 (strip-python2-variant python-cython)))
3480 (name "python2-cython")
3481 (inputs
3482 `(("python-2" ,python-2))))) ; this is not automatically changed
3483
3484 ;; The RPython toolchain currently does not support Python 3.
3485 (define-public python2-rpython
3486 (package
3487 (name "python2-rpython")
3488 (version "0.1.4")
3489 (source
3490 (origin
3491 (method url-fetch)
3492 (uri (pypi-uri "rpython" version))
3493 (sha256
3494 (base32
3495 "07pps06fq4c4wmi5ii0sgh9zgwniz5y7frqhm28g3a154l163fxc"))))
3496 (build-system python-build-system)
3497 (arguments `(#:python ,python-2))
3498 (native-inputs
3499 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
3500 (home-page "https://rpython.readthedocs.org")
3501 (synopsis "Framework for implementing interpreters and virtual machines")
3502 (description "RPython is a translation and support framework for
3503 producing implementations of dynamic languages, emphasizing a clean separation
3504 between language specification and implementation aspects.")
3505 (license license:expat)))
3506
3507 (define-public python-numpy
3508 (package
3509 (name "python-numpy")
3510 (version "1.12.0")
3511 (source
3512 (origin
3513 (method url-fetch)
3514 (uri (string-append
3515 "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
3516 (file-name (string-append name "-" version ".tar.gz"))
3517 (sha256
3518 (base32
3519 "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d"))))
3520 (build-system python-build-system)
3521 (inputs
3522 `(("openblas" ,openblas)
3523 ("lapack" ,lapack)))
3524 (native-inputs
3525 `(("python-cython" ,python-cython)
3526 ("python-nose" ,python-nose)
3527 ("gfortran" ,gfortran)))
3528 (arguments
3529 `(#:phases
3530 (modify-phases %standard-phases
3531 (add-before 'build 'set-environment-variables
3532 (lambda* (#:key inputs #:allow-other-keys)
3533 (call-with-output-file "site.cfg"
3534 (lambda (port)
3535 (format port
3536 "[openblas]
3537 libraries = openblas
3538 library_dirs = ~a/lib
3539 include_dirs = ~a/include
3540
3541 # backslash-n to make emacs happy
3542 \n[lapack]
3543 lapack_libs = lapack
3544 library_dirs = ~a/lib
3545 include_dirs = ~a/include
3546 "
3547 (assoc-ref inputs "openblas")
3548 (assoc-ref inputs "openblas")
3549 (assoc-ref inputs "lapack")
3550 (assoc-ref inputs "lapack"))))
3551 ;; Use "gcc" executable, not "cc".
3552 (substitute* "numpy/distutils/system_info.py"
3553 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
3554 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
3555 #t))
3556 ;; Tests can only be run after the library has been installed and not
3557 ;; within the source directory.
3558 (delete 'check)
3559 (add-after 'install 'check
3560 (lambda* (#:key outputs inputs #:allow-other-keys)
3561 ;; Make installed package available for running the tests
3562 (add-installed-pythonpath inputs outputs)
3563 (with-directory-excursion "/tmp"
3564 (zero? (system* "python" "-c"
3565 "import numpy; numpy.test(verbose=2)"))))))))
3566 (home-page "http://www.numpy.org/")
3567 (synopsis "Fundamental package for scientific computing with Python")
3568 (description "NumPy is the fundamental package for scientific computing
3569 with Python. It contains among other things: a powerful N-dimensional array
3570 object, sophisticated (broadcasting) functions, tools for integrating C/C++
3571 and Fortran code, useful linear algebra, Fourier transform, and random number
3572 capabilities.")
3573 (license license:bsd-3)))
3574
3575 (define-public python2-numpy
3576 (package-with-python2 python-numpy))
3577
3578 (define-public python-munch
3579 (package
3580 (name "python-munch")
3581 (version "2.0.4")
3582 (source
3583 (origin
3584 (method url-fetch)
3585 (uri (pypi-uri "munch" version))
3586 (sha256
3587 (base32
3588 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
3589 (build-system python-build-system)
3590 (home-page "https://github.com/Infinidat/munch")
3591 (synopsis "Dot-accessible dictionary")
3592 (description "Munch is a dot-accessible dictionary similar to JavaScript
3593 objects.")
3594 (license license:expat)))
3595
3596 (define-public python2-munch
3597 (package-with-python2 python-munch))
3598
3599 (define-public python2-fastlmm
3600 (package
3601 (name "python2-fastlmm")
3602 (version "0.2.21")
3603 (source
3604 (origin
3605 (method url-fetch)
3606 (uri (pypi-uri "fastlmm" version ".zip"))
3607 (sha256
3608 (base32
3609 "1q8c34rpmwkfy3r4d5172pzdkpfryj561897z9r3x22gq7813x1m"))))
3610 (build-system python-build-system)
3611 (arguments
3612 `(#:python ,python-2)) ; only Python 2.7 is supported
3613 (propagated-inputs
3614 `(("python2-numpy" ,python2-numpy)
3615 ("python2-scipy" ,python2-scipy)
3616 ("python2-matplotlib" ,python2-matplotlib)
3617 ("python2-pandas" ,python2-pandas)
3618 ("python2-scikit-learn" ,python2-scikit-learn)
3619 ("python2-pysnptools" ,python2-pysnptools)))
3620 (native-inputs
3621 `(("unzip" ,unzip)
3622 ("python2-cython" ,python2-cython)
3623 ("python2-mock" ,python2-mock)
3624 ("python2-nose" ,python2-nose)))
3625 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
3626 (synopsis "Perform genome-wide association studies on large data sets")
3627 (description
3628 "FaST-LMM, which stands for Factored Spectrally Transformed Linear Mixed
3629 Models, is a program for performing both single-SNP and SNP-set genome-wide
3630 association studies (GWAS) on extremely large data sets.")
3631 (license license:asl2.0)))
3632
3633 (define-public python-numpy-documentation
3634 (package
3635 (name "python-numpy-documentation")
3636 (version (package-version python-numpy))
3637 (source (package-source python-numpy))
3638 (build-system python-build-system)
3639 (native-inputs
3640 `(("python-matplotlib" ,python-matplotlib)
3641 ("python-numpy" ,python-numpy)
3642 ("pkg-config" ,pkg-config)
3643 ("python-sphinx" ,python-sphinx)
3644 ("python-numpydoc" ,python-numpydoc)
3645 ("texlive" ,texlive)
3646 ("texinfo" ,texinfo)
3647 ("perl" ,perl)
3648 ("scipy-sphinx-theme"
3649 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
3650 (method git-fetch)
3651 (uri (git-reference
3652 (url "https://github.com/scipy/scipy-sphinx-theme.git")
3653 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
3654 (sha256
3655 (base32
3656 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
3657 ,@(package-native-inputs python-numpy)))
3658 (arguments
3659 `(#:tests? #f ; we're only generating the documentation
3660 #:phases
3661 (modify-phases %standard-phases
3662 (delete 'build)
3663 (replace 'install
3664 (lambda* (#:key inputs outputs #:allow-other-keys)
3665 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
3666 (doc (string-append
3667 data "/doc/" ,name "-"
3668 ,(package-version python-numpy)))
3669 (info-reader (string-append data "/info"))
3670 (html (string-append doc "/html"))
3671 (scipy-sphinx-theme "scipy-sphinx-theme")
3672 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
3673 (pyver ,(string-append "PYVER=")))
3674 (with-directory-excursion "doc"
3675 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
3676 (mkdir-p html)
3677 (system* "make" "html" pyver)
3678 (system* "make" "latex" "PAPER=a4" pyver)
3679 (system* "make" "-C" "build/latex"
3680 "all-pdf" "PAPER=a4" pyver)
3681 ;; FIXME: Generation of the info file fails.
3682 ;; (system* "make" "info" pyver)
3683 ;; (mkdir-p info)
3684 ;; (copy-file "build/texinfo/numpy.info"
3685 ;; (string-append info "/numpy.info"))
3686 (for-each (lambda (file)
3687 (copy-file (string-append "build/latex" file)
3688 (string-append doc file)))
3689 '("/numpy-ref.pdf" "/numpy-user.pdf"))
3690 (with-directory-excursion "build/html"
3691 (for-each (lambda (file)
3692 (let* ((dir (dirname file))
3693 (tgt-dir (string-append html "/" dir)))
3694 (unless (equal? "." dir)
3695 (mkdir-p tgt-dir))
3696 (install-file file html)))
3697 (find-files "." ".*")))))
3698 #t)))))
3699 (home-page (package-home-page python-numpy))
3700 (synopsis "Documentation for the python-numpy package")
3701 (description (package-description python-numpy))
3702 (license (package-license python-numpy))))
3703
3704 (define-public python2-numpy-documentation
3705 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
3706 (package
3707 (inherit numpy-documentation)
3708 (native-inputs `(("python2-functools32" ,python2-functools32)
3709 ,@(package-native-inputs numpy-documentation))))))
3710
3711 (define-public python-pygit2
3712 (package
3713 (name "python-pygit2")
3714 (version "0.25.0")
3715 (source
3716 (origin
3717 (method url-fetch)
3718 (uri (pypi-uri "pygit2" version))
3719 (sha256
3720 (base32
3721 "0wf5rp0fvrw7j3j18dvwjq6xqlbm611wd55aphrfpps0v1gxh3ny"))
3722 (patches
3723 (search-patches "python-pygit2-disable-network-tests.patch"))))
3724 (build-system python-build-system)
3725 (propagated-inputs
3726 `(("python-six" ,python-six)
3727 ("python-cffi" ,python-cffi)
3728 ("libgit2" ,libgit2)
3729 ("python-tox" ,python-tox)))
3730 (home-page "https://github.com/libgit2/pygit2")
3731 (synopsis "Python bindings for libgit2")
3732 (description "Pygit2 is a set of Python bindings to the libgit2 shared
3733 library, libgit2 implements Git plumbing.")
3734 ;; GPL2.0 only, with linking exception.
3735 (license license:gpl2)))
3736
3737 (define-public python2-pygit2
3738 (package-with-python2 python-pygit2))
3739
3740 (define-public python-pyparsing
3741 (package
3742 (name "python-pyparsing")
3743 (version "2.0.3")
3744 (source
3745 (origin
3746 (method url-fetch)
3747 (uri (string-append "mirror://sourceforge/pyparsing/pyparsing"
3748 "/pyparsing-" version
3749 "/pyparsing-" version ".tar.gz"))
3750 (sha256
3751 (base32
3752 "0kw4py7gn45j93q8r7bzajfrjdc3xlsn2yzln41lf9zmrghjkrq6"))))
3753 (build-system python-build-system)
3754 (outputs '("out" "doc"))
3755 (arguments
3756 `(#:tests? #f ; no test target
3757 #:modules ((guix build python-build-system)
3758 (guix build utils))
3759 #:phases
3760 (alist-cons-after
3761 'install 'install-doc
3762 (lambda* (#:key outputs #:allow-other-keys)
3763 (let* ((doc (string-append (assoc-ref outputs "doc")
3764 "/share/doc/" ,name "-" ,version))
3765 (html-doc (string-append doc "/html"))
3766 (examples (string-append doc "/examples")))
3767 (mkdir-p html-doc)
3768 (mkdir-p examples)
3769 (for-each
3770 (lambda (dir tgt)
3771 (map (lambda (file)
3772 (install-file file tgt))
3773 (find-files dir ".*")))
3774 (list "docs" "htmldoc" "examples")
3775 (list doc html-doc examples))))
3776 %standard-phases)))
3777 (home-page "http://pyparsing.wikispaces.com")
3778 (synopsis "Python parsing class library")
3779 (description
3780 "The pyparsing module is an alternative approach to creating and
3781 executing simple grammars, vs. the traditional lex/yacc approach, or the use
3782 of regular expressions. The pyparsing module provides a library of classes
3783 that client code uses to construct the grammar directly in Python code.")
3784 (license license:expat)))
3785
3786 (define-public python2-pyparsing
3787 (package-with-python2 python-pyparsing))
3788
3789 (define-public python-numpydoc
3790 (package
3791 (name "python-numpydoc")
3792 (version "0.5")
3793 (source
3794 (origin
3795 (method url-fetch)
3796 (uri (string-append
3797 "https://pypi.python.org/packages/source/n/numpydoc/numpydoc-"
3798 version ".tar.gz"))
3799 (sha256
3800 (base32
3801 "0d4dnifaxkll50jx6czj05y8cb4ny60njd2wz299sj2jxfy51w4k"))
3802 (modules '((guix build utils)))
3803 (snippet
3804 '(begin
3805 ;; Drop a test requiring matplotlib, which we cannot add as an
3806 ;; input since it would create a circular dependency: Extend the
3807 ;; test for Python 3, where it is already dropped, to Python 2.
3808 (substitute* "numpydoc/tests/test_plot_directive.py"
3809 (("3") "2"))))))
3810 (build-system python-build-system)
3811 (propagated-inputs
3812 `(("python-sphinx" ,python-sphinx)))
3813 (native-inputs
3814 `(("python-nose" ,python-nose)))
3815 (home-page "https://pypi.python.org/pypi/numpydoc")
3816 (synopsis
3817 "Numpy's Sphinx extensions")
3818 (description
3819 "Sphinx extension to support docstrings in Numpy format.")
3820 (license license:bsd-2)))
3821
3822 (define-public python2-numpydoc
3823 (package-with-python2 python-numpydoc))
3824
3825 (define-public python-numexpr
3826 (package
3827 (name "python-numexpr")
3828 (version "2.6.1")
3829 (source
3830 (origin
3831 (method url-fetch)
3832 (uri (pypi-uri "numexpr" version))
3833 (sha256
3834 (base32
3835 "01lsja72m32z0i5p8rwxbfyzk4mplh72k2a140nwh8vv4wpyfbnv"))))
3836 (build-system python-build-system)
3837 (arguments `(#:tests? #f)) ; no tests included
3838 (propagated-inputs
3839 `(("python-numpy" ,python-numpy)))
3840 (home-page "https://github.com/pydata/numexpr")
3841 (synopsis "Fast numerical expression evaluator for NumPy")
3842 (description
3843 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
3844 expressions that operate on arrays are accelerated and use less memory than
3845 doing the same calculation in Python. In addition, its multi-threaded
3846 capabilities can make use of all your cores, which may accelerate
3847 computations, most specially if they are not memory-bounded (e.g. those using
3848 transcendental functions).")
3849 (license license:expat)))
3850
3851 (define-public python2-numexpr
3852 (package-with-python2 python-numexpr))
3853
3854 (define-public python-cycler
3855 (package
3856 (name "python-cycler")
3857 (version "0.10.0")
3858 (source (origin
3859 (method url-fetch)
3860 (uri (pypi-uri "cycler" version))
3861 (sha256
3862 (base32
3863 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
3864 (build-system python-build-system)
3865 (arguments
3866 ;; XXX: The current version requires 'coveralls' which we don't have.
3867 ;; Enable this for the next release which uses 'python-pytest'.
3868 '(#:tests? #f))
3869 (propagated-inputs
3870 `(("python-six" ,python-six)))
3871 (home-page "http://matplotlib.org/cycler/")
3872 (synopsis "Composable keyword argument iterator")
3873 (description
3874 "When using @code{matplotlib} and plotting more than one line, it is
3875 common to want to be able to want to be able to cycle over one or more artist
3876 styles; but the plotting logic can quickly become involved.
3877 To address this and enable easy cycling over arbitrary @code{kwargs}, the
3878 @code{Cycler} class was developed.")
3879 (license license:bsd-3)))
3880
3881 (define-public python2-cycler
3882 (package-with-python2 python-cycler))
3883
3884 (define-public python-colorspacious
3885 (package
3886 (name "python-colorspacious")
3887 (version "1.1.0")
3888 (source
3889 (origin
3890 (method url-fetch)
3891 (uri (string-append "https://github.com/njsmith/colorspacious/archive/v"
3892 version ".tar.gz"))
3893 (file-name (string-append name "-" version))
3894 (sha256
3895 (base32 "1vflh5jm32qb0skza2i8pjacv09w6gq84fqpp2nj77s0rbmzgr4k"))))
3896 (build-system python-build-system)
3897 (propagated-inputs
3898 `(("python-numpy" ,python-numpy)))
3899 (native-inputs
3900 `(("python-nose" ,python-nose)))
3901 (arguments
3902 `(#:phases
3903 (modify-phases %standard-phases
3904 (replace 'check
3905 (lambda _
3906 (zero? (system* "nosetests" "--all-modules" "-v" "colorspacious")))))))
3907 (home-page "https://github.com/njsmith/colorspacious")
3908 (synopsis "Python library for colorspace conversions")
3909 (description "@code{colorspacious} is a Python library that lets you
3910 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
3911 (license license:expat)))
3912
3913 (define-public python2-colorspacious
3914 (package-with-python2 python-colorspacious))
3915
3916 (define-public python-matplotlib
3917 (package
3918 (name "python-matplotlib")
3919 (version "2.0.0")
3920 (source
3921 (origin
3922 (method url-fetch)
3923 (uri (string-append
3924 "https://github.com/matplotlib/matplotlib/archive/v" version ".tar.gz"))
3925 (file-name (string-append name "-" version ".tar.gz"))
3926 (sha256
3927 (base32
3928 "0w3k5m5qb3wsd7yhvmg042xddvligklvcq2visk2c5wnph3hhsln"))))
3929 (build-system python-build-system)
3930 (propagated-inputs ; the following packages are all needed at run time
3931 `(("python-cycler" ,python-cycler)
3932 ("python-pyparsing" ,python-pyparsing)
3933 ("python-pygobject" ,python-pygobject)
3934 ("gobject-introspection" ,gobject-introspection)
3935 ("python-tkinter" ,python "tk")
3936 ("python-dateutil" ,python-dateutil)
3937 ("python-numpy" ,python-numpy)
3938 ("python-pillow" ,python-pillow)
3939 ("python-pytz" ,python-pytz)
3940 ("python-six" ,python-six)
3941 ;; The 'gtk+' package (and 'gdk-pixbuf', 'atk' and 'pango' propagated
3942 ;; from 'gtk+') provides the required 'typelib' files used by
3943 ;; 'gobject-introspection'. The location of these files is set with the
3944 ;; help of the environment variable GI_TYPELIB_PATH. At build time this
3945 ;; is done automatically by a 'native-search-path' procedure. However,
3946 ;; at run-time the user must set this variable as follows:
3947 ;;
3948 ;; export GI_TYPELIB_PATH=~/.guix-profile/lib/girepository-1.0
3949 ("gtk+" ,gtk+)
3950 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
3951 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
3952 ;; object. For this reason we need to import both libraries.
3953 ;; https://pythonhosted.org/cairocffi/cffi_api.html#converting-pycairo
3954 ("python-pycairo" ,python-pycairo)
3955 ("python-cairocffi" ,python-cairocffi)))
3956 (inputs
3957 `(("libpng" ,libpng)
3958 ("imagemagick" ,imagemagick)
3959 ("freetype" ,freetype)
3960 ("cairo" ,cairo)
3961 ("glib" ,glib)
3962 ;; FIXME: Add backends when available.
3963 ;("python-wxpython" ,python-wxpython)
3964 ("python-pyqt" ,python-pyqt)
3965 ("tcl" ,tcl)
3966 ("tk" ,tk)))
3967 (native-inputs
3968 `(("pkg-config" ,pkg-config)
3969 ("python-nose" ,python-nose)
3970 ("python-mock" ,python-mock)))
3971 (arguments
3972 `(#:phases
3973 (modify-phases %standard-phases
3974 (add-before 'build 'configure-environment
3975 (lambda* (#:key outputs inputs #:allow-other-keys)
3976 (let ((cairo (assoc-ref inputs "cairo"))
3977 (gtk+ (assoc-ref inputs "gtk+")))
3978 ;; Setting these directories in the 'basedirlist' of 'setup.cfg'
3979 ;; has not effect.
3980 (setenv "LD_LIBRARY_PATH"
3981 (string-append cairo "/lib:" gtk+ "/lib"))
3982 (setenv "HOME" (getcwd))
3983 (call-with-output-file "setup.cfg"
3984 (lambda (port)
3985 (format port "[directories]~%
3986 basedirlist = ~a,~a~%
3987 [rc_options]~%
3988 backend = TkAgg~%"
3989 (assoc-ref inputs "tcl")
3990 (assoc-ref inputs "tk")))))
3991 #t)))))
3992 (home-page "http://matplotlib.org")
3993 (synopsis "2D plotting library for Python")
3994 (description
3995 "Matplotlib is a Python 2D plotting library which produces publication
3996 quality figures in a variety of hardcopy formats and interactive environments
3997 across platforms. Matplotlib can be used in Python scripts, the python and
3998 ipython shell, web application servers, and six graphical user interface
3999 toolkits.")
4000 (license license:psfl)
4001 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4002
4003 (define-public python2-matplotlib
4004 (let ((matplotlib (package-with-python2
4005 (strip-python2-variant python-matplotlib))))
4006 (package (inherit matplotlib)
4007 ;; Make sure to use special packages for Python 2 instead
4008 ;; of those automatically rewritten by package-with-python2.
4009 (propagated-inputs
4010 `(("python2-pycairo" ,python2-pycairo)
4011 ("python2-functools32" ,python2-functools32)
4012 ("python2-pygobject-2" ,python2-pygobject-2)
4013 ("python2-subprocess32" ,python2-subprocess32)
4014 ("python2-tkinter" ,python-2 "tk")
4015 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4016 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4017
4018 (define-public python-matplotlib-documentation
4019 (package
4020 (name "python-matplotlib-documentation")
4021 (version (package-version python-matplotlib))
4022 (source (package-source python-matplotlib))
4023 (build-system python-build-system)
4024 (native-inputs
4025 `(("python-matplotlib" ,python-matplotlib)
4026 ("python-colorspacious" ,python-colorspacious)
4027 ("python-sphinx" ,python-sphinx)
4028 ("python-numpydoc" ,python-numpydoc)
4029 ("python-ipython" ,python-ipython)
4030 ("python-mock" ,python-mock)
4031 ("graphviz" ,graphviz)
4032 ("texlive" ,texlive)
4033 ("texinfo" ,texinfo)
4034 ,@(package-native-inputs python-matplotlib)))
4035 (arguments
4036 `(#:tests? #f ; we're only generating documentation
4037 #:phases
4038 (modify-phases %standard-phases
4039 (replace 'build
4040 (lambda _
4041 (chdir "doc")
4042 ;; Produce pdf in 'A4' format.
4043 (substitute* "conf.py"
4044 (("latex_paper_size = 'letter'") "")
4045 ;; latex_paper_size is deprecated -> set paper size using
4046 ;; latex_elements
4047 (("latex_elements\\['pointsize'\\] = '11pt'" match)
4048 ;; insert at a point where latex_elements{} is defined:
4049 (string-append match "\nlatex_elements['papersize'] = 'a4paper'")))
4050 (zero? (system* "python" "make.py" "html" "latex" "texinfo"))))
4051 (replace 'install
4052 (lambda* (#:key inputs outputs #:allow-other-keys)
4053 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4054 (doc (string-append data "/doc/python-matplotlib-" ,version))
4055 (info (string-append data "/info"))
4056 (html (string-append doc "/html")))
4057 (mkdir-p html)
4058 (mkdir-p info)
4059 (copy-recursively "build/html" html)
4060 (symlink (string-append html "/_images")
4061 (string-append info "/matplotlib-figures"))
4062 (with-directory-excursion "build/texinfo"
4063 (substitute* "matplotlib.texi"
4064 (("@image\\{([^,]*)" all file)
4065 (string-append "@image{matplotlib-figures/" file)))
4066 (symlink (string-append html "/_images")
4067 "./matplotlib-figures")
4068 (system* "makeinfo" "--no-split"
4069 "-o" "matplotlib.info" "matplotlib.texi"))
4070 (copy-file "build/texinfo/matplotlib.info"
4071 (string-append info "/matplotlib.info"))
4072 (copy-file "build/latex/Matplotlib.pdf"
4073 (string-append doc "/Matplotlib.pdf")))
4074 #t)))))
4075 (home-page (package-home-page python-matplotlib))
4076 (synopsis "Documentation for the python-matplotlib package")
4077 (description (package-description python-matplotlib))
4078 (license (package-license python-matplotlib))))
4079
4080 (define-public python2-matplotlib-documentation
4081 (package-with-python2 python-matplotlib-documentation))
4082
4083 (define-public python2-pysnptools
4084 (package
4085 (name "python2-pysnptools")
4086 (version "0.3.9")
4087 (source
4088 (origin
4089 (method url-fetch)
4090 (uri (pypi-uri "pysnptools" version ".zip"))
4091 (sha256
4092 (base32
4093 "1wybggjzz8zw7aav4pjsg2h22xp17a1lghrprza1pxwlm7wf96y2"))))
4094 (build-system python-build-system)
4095 (arguments
4096 `(#:python ,python-2)) ; only Python 2.7 is supported
4097 (propagated-inputs
4098 `(("python2-numpy" ,python2-numpy)
4099 ("python2-scipy" ,python2-scipy)
4100 ("python2-pandas" ,python2-pandas)))
4101 (native-inputs
4102 `(("python2-cython" ,python2-cython)))
4103 (native-inputs
4104 `(("unzip" ,unzip)))
4105 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/")
4106 (synopsis "Library for reading and manipulating genetic data")
4107 (description
4108 "PySnpTools is a library for reading and manipulating genetic data. It
4109 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4110 those files. It can also efficiently manipulate ranges of integers using set
4111 operators such as union, intersection, and difference.")
4112 (license license:asl2.0)))
4113
4114 (define-public python-rpy2
4115 (package
4116 (name "python-rpy2")
4117 (version "2.7.6")
4118 (source
4119 (origin
4120 (method url-fetch)
4121 (uri (pypi-uri "rpy2" version))
4122 (sha256
4123 (base32
4124 "0nhan2qvrw7b7gg5zddwa22kybdv3x1g26vkd7q8lvnkgzrs4dga"))))
4125 (build-system python-build-system)
4126 (arguments
4127 '(#:phases
4128 (modify-phases %standard-phases
4129 (delete 'check)
4130 (add-after 'install 'check
4131 (lambda* (#:key outputs inputs #:allow-other-keys)
4132 ;; It's easier to run tests after install.
4133 ;; Make installed package available for running the tests
4134 (add-installed-pythonpath inputs outputs)
4135 (zero? (system* "python" "-m" "rpy2.tests" "-v")))))))
4136 (propagated-inputs
4137 `(("python-six" ,python-six)))
4138 (inputs
4139 `(("readline" ,readline)
4140 ("icu4c" ,icu4c)
4141 ("pcre" ,pcre)
4142 ("r-minimal" ,r-minimal)
4143 ("r-survival" ,r-survival)))
4144 (native-inputs
4145 `(("zlib" ,zlib)))
4146 (home-page "http://rpy.sourceforge.net/")
4147 (synopsis "Python interface to the R language")
4148 (description "rpy2 is a redesign and rewrite of rpy. It is providing a
4149 low-level interface to R from Python, a proposed high-level interface,
4150 including wrappers to graphical libraries, as well as R-like structures and
4151 functions.")
4152 (license license:gpl3+)))
4153
4154 (define-public python2-rpy2
4155 (let ((rpy2 (package-with-python2 python-rpy2)))
4156 (package (inherit rpy2)
4157 (propagated-inputs
4158 `(("python2-singledispatch" ,python2-singledispatch)
4159 ,@(package-propagated-inputs rpy2))))))
4160
4161 (define-public python-scipy
4162 (package
4163 (name "python-scipy")
4164 (version "0.18.1")
4165 (source
4166 (origin
4167 (method url-fetch)
4168 (uri (string-append "https://github.com/scipy/scipy/archive/v"
4169 version ".tar.gz"))
4170 (file-name (string-append name "-" version ".tar.gz"))
4171 (sha256
4172 (base32
4173 "17slsrfawjp7if6qrlx03zhgp05350ginxx8ddpw9zqx43x905sn"))))
4174 (build-system python-build-system)
4175 (propagated-inputs
4176 `(("python-numpy" ,python-numpy)
4177 ("python-matplotlib" ,python-matplotlib)
4178 ("python-pyparsing" ,python-pyparsing)))
4179 (inputs
4180 `(("lapack" ,lapack)
4181 ("openblas" ,openblas)))
4182 (native-inputs
4183 `(("python-cython" ,python-cython)
4184 ("python-nose" ,python-nose)
4185 ("python-sphinx" ,python-sphinx)
4186 ("python-numpydoc" ,python-numpydoc)
4187 ("gfortran" ,gfortran)
4188 ("perl" ,perl)))
4189 (outputs '("out" "doc"))
4190 (arguments
4191 `(#:phases
4192 (modify-phases %standard-phases
4193 (add-before 'build 'configure-openblas
4194 (lambda* (#:key inputs #:allow-other-keys)
4195 (call-with-output-file "site.cfg"
4196 (lambda (port)
4197 (format port
4198 "[blas]
4199 libraries = openblas
4200 library_dirs = ~a/lib
4201 include_dirs = ~a/include
4202
4203 # backslash-n to make emacs happy
4204 \n[atlas]
4205 library_dirs = ~a/lib
4206 atlas_libs = openblas
4207 "
4208 (assoc-ref inputs "openblas")
4209 (assoc-ref inputs "openblas")
4210 (assoc-ref inputs "openblas"))))
4211 #t))
4212 (add-after 'install 'install-doc
4213 (lambda* (#:key inputs outputs #:allow-other-keys)
4214 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4215 (doc (string-append data "/doc/" ,name "-" ,version))
4216 (html (string-append doc "/html"))
4217 (pyver ,(string-append "PYVER=")))
4218 ;; Make installed package available for building the
4219 ;; documentation
4220 (add-installed-pythonpath inputs outputs)
4221 (with-directory-excursion "doc"
4222 ;; Fix generation of images for mathematical expressions.
4223 (substitute* (find-files "source" "conf\\.py")
4224 (("pngmath_use_preview = True")
4225 "pngmath_use_preview = False"))
4226 (mkdir-p html)
4227 (system* "make" "html" pyver)
4228 (with-directory-excursion "build/html"
4229 (for-each (lambda (file)
4230 (let* ((dir (dirname file))
4231 (tgt-dir (string-append html "/" dir)))
4232 (install-file file html)))
4233 (find-files "." ".*")))))
4234 #t))
4235 (add-after 'unpack 'fix-tests
4236 (lambda _
4237 (substitute* "scipy/integrate/tests/test_quadpack.py"
4238 (("libm.so") "libm.so.6"))
4239 #t))
4240 ;; Tests can only be run after the library has been installed and not
4241 ;; within the source directory.
4242 (delete 'check)
4243 (add-after 'install 'check
4244 (lambda* (#:key inputs outputs #:allow-other-keys)
4245 (add-installed-pythonpath inputs outputs)
4246 (with-directory-excursion "/tmp"
4247 (zero? (system* "python" "-c"
4248 "import scipy; scipy.test('full')")))
4249 #t)))))
4250 (home-page "http://www.scipy.org/")
4251 (synopsis "The Scipy library provides efficient numerical routines")
4252 (description "The SciPy library is one of the core packages that make up
4253 the SciPy stack. It provides many user-friendly and efficient numerical
4254 routines such as routines for numerical integration and optimization.")
4255 (properties `((python2-variant . ,(delay python2-scipy))))
4256 (license license:bsd-3)))
4257
4258 (define-public python2-scipy
4259 (package-with-python2
4260 (strip-python2-variant python-scipy)))
4261
4262 (define-public python-sockjs-tornado
4263 (package
4264 (name "python-sockjs-tornado")
4265 (version "1.0.3")
4266 (source
4267 (origin
4268 (method url-fetch)
4269 (uri (pypi-uri "sockjs-tornado" version))
4270 (sha256
4271 (base32
4272 "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
4273 (build-system python-build-system)
4274 (arguments
4275 `(;; There are no tests, and running the test phase requires missing
4276 ;; dependencies
4277 #:tests? #f))
4278 (propagated-inputs
4279 `(("python-tornado" ,python-tornado)))
4280 (home-page "http://github.com/mrjoes/sockjs-tornado/")
4281 (synopsis
4282 "SockJS python server implementation on top of Tornado framework")
4283 (description
4284 "SockJS-tornado provides the server side counterpart to a SockJS client
4285 library, through the Tornado framework.
4286
4287 SockJS provides a low latency, full duplex, cross-domain communication channel
4288 between a web browser and web server.")
4289 (license license:expat)))
4290
4291 (define-public python2-sockjs-tornado
4292 (package-with-python2 python-sockjs-tornado))
4293
4294 (define-public python-socksipy-branch
4295 (package
4296 (name "python-socksipy-branch")
4297 (version "1.01")
4298 (source
4299 (origin
4300 (method url-fetch)
4301 (uri (pypi-uri "SocksiPy-branch" version))
4302 (sha256
4303 (base32
4304 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4305 (build-system python-build-system)
4306 (arguments
4307 `(#:tests? #f)) ; There are no tests
4308 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4309 (synopsis "Python SOCKS module")
4310 (description
4311 "SocksiPy - A Python SOCKS client module. It provides a
4312 socket-like interface that supports connections to any TCP
4313 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4314 The original version was developed by Dan Haim, this is a
4315 branch created by Mario Vilas to address some open issues,
4316 as the original project seems to have been abandoned circa 2007.")
4317 (license license:bsd-3)))
4318
4319 (define-public python2-socksipy-branch
4320 (package-with-python2 python-socksipy-branch))
4321
4322 (define-public python-sqlalchemy
4323 (package
4324 (name "python-sqlalchemy")
4325 (version "1.0.12")
4326 (source
4327 (origin
4328 (method url-fetch)
4329 (uri (string-append "https://pypi.python.org/packages/source/S/"
4330 "SQLAlchemy/SQLAlchemy-" version ".tar.gz"))
4331 (sha256
4332 (base32
4333 "1l8qclhd0s90w3pvwhi5mjxdwr5j7gw7cjka2fx6f2vqmq7f4yb6"))))
4334 (build-system python-build-system)
4335 (native-inputs
4336 `(("python-cython" ,python-cython) ;for c extensions
4337 ("python-pytest" ,python-pytest)
4338 ("python-mock" ,python-mock))) ;for tests
4339 (arguments
4340 `(#:phases (alist-replace
4341 'check
4342 (lambda _ (zero? (system* "py.test")))
4343 %standard-phases)))
4344 (home-page "http://www.sqlalchemy.org")
4345 (synopsis "Database abstraction library")
4346 (description
4347 "SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
4348 gives application developers the full power and flexibility of SQL. It
4349 provides a full suite of well known enterprise-level persistence patterns,
4350 designed for efficient and high-performing database access, adapted into a
4351 simple and Pythonic domain language.")
4352 (license license:x11)))
4353
4354 (define-public python2-sqlalchemy
4355 (package-with-python2 python-sqlalchemy))
4356
4357 (define-public python-pycodestyle
4358 (package
4359 (name "python-pycodestyle")
4360 (version "2.0.0")
4361 (source
4362 (origin
4363 (method url-fetch)
4364 (uri (pypi-uri "pycodestyle" version))
4365 (sha256
4366 (base32
4367 "1rz2v8506mdjdyxcnv9ygiw6v0d4dqx8z5sjyjm0w2v32h5l5w1p"))))
4368 (build-system python-build-system)
4369 (home-page "https://pycodestyle.readthedocs.io/")
4370 (synopsis "Python style guide checker")
4371 (description "@code{pycodestyle} (formerly pep8) is a tool to check
4372 Python code against some of the style conventions in
4373 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
4374 (license license:expat)))
4375
4376 (define-public python2-pycodestyle
4377 (package-with-python2 python-pycodestyle))
4378
4379 (define-public python-orderedmultidict
4380 (package
4381 (name "python-orderedmultidict")
4382 (version "0.7.11")
4383 (source
4384 (origin
4385 (method url-fetch)
4386 (uri (pypi-uri "orderedmultidict" version))
4387 (sha256
4388 (base32
4389 "0dls862ibm7qbq4fnvwx0xn1v9hwyzywbff8xjjdr42dd75208yw"))))
4390 (build-system python-build-system)
4391 (arguments
4392 `(#:phases
4393 (modify-phases %standard-phases
4394 (add-after 'unpack 'fix-tests
4395 (lambda _
4396 ;; The package uses nosetest for running the tests.
4397 ;; Adding this initfile allows to run the test suite
4398 ;; without requiring nosetest.
4399 (zero? (system* "touch" "tests/__init__.py")))))))
4400 (propagated-inputs
4401 `(("python-six" ,python-six)))
4402 (native-inputs
4403 `(("python-pycodestyle" ,python-pycodestyle)))
4404 (home-page "https://github.com/gruns/orderedmultidict")
4405 (synopsis "Python Ordered Multivalue Dictionary - omdict")
4406 (description "This package contains a library for ordered multivalue
4407 dictionaries. A multivalue dictionary is a dictionary that can store
4408 multiple values for the same key. An ordered multivalue dictionary is a
4409 multivalue dictionary that retains the order of insertions and deletions.")
4410 (license license:unlicense)))
4411
4412 (define-public python2-orderedmultidict
4413 (package-with-python2 python-orderedmultidict))
4414
4415 (define-public python-furl
4416 (package
4417 (name "python-furl")
4418 (version "0.5.6")
4419 (source
4420 (origin
4421 (method url-fetch)
4422 (uri (pypi-uri "furl" version))
4423 (sha256
4424 (base32
4425 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
4426 (build-system python-build-system)
4427 (propagated-inputs
4428 `(("python-six" ,python-six)
4429 ("python-orderedmultidict" ,python-orderedmultidict)))
4430 (native-inputs
4431 `(("python-pycodestyle" ,python-pycodestyle)))
4432 (home-page "https://github.com/gruns/furl")
4433 (synopsis "URL manipulation in Python")
4434 (description "Furl provides an easy-to-use alternative to the
4435 @code{urllib} and @code{urlparse} modules for manipulating URLs.")
4436 (license license:unlicense)))
4437
4438 (define-public python2-furl
4439 (package-with-python2 python-furl))
4440
4441 (define-public python-flask-babel
4442 (package
4443 (name "python-flask-babel")
4444 (version "0.11.1")
4445 (source
4446 (origin
4447 (method url-fetch)
4448 (uri (pypi-uri "Flask-Babel" version))
4449 (sha256
4450 (base32
4451 "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj"))))
4452 (build-system python-build-system)
4453 (propagated-inputs
4454 `(("python-flask" ,python-flask)
4455 ("python-babel" ,python-babel)
4456 ("python-jinja2" ,python-jinja2)
4457 ("python-pytz" ,python-pytz)))
4458 (home-page "https://github.com/python-babel/flask-babel")
4459 (synopsis "Add i18n/l10n support to Flask applications")
4460 (description "This package implements internationalization and localization
4461 support for Flask. This is based on the Python babel module as well as pytz -
4462 both of which are installed automatically if you install this library.")
4463 (license license:bsd-3)))
4464
4465 (define-public python2-flask-babel
4466 (package-with-python2 python-flask-babel))
4467
4468 (define-public python-sqlalchemy-utils
4469 (package
4470 (name "python-sqlalchemy-utils")
4471 (version "0.32.13")
4472 (source
4473 (origin
4474 (method url-fetch)
4475 (uri (pypi-uri "SQLAlchemy-Utils" version))
4476 (sha256
4477 (base32
4478 "0vsib7gidjamzsz6w4s5pdhxzxsrkghjnm4sqwk94igjrl3i5ixj"))))
4479 (build-system python-build-system)
4480 (arguments
4481 '(#:tests? #f)) ; FIXME: Many tests require a running database server.
4482 ;; #:phases
4483 ;; (modify-phases %standard-phases
4484 ;; (replace 'check
4485 ;; (lambda _
4486 ;; (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
4487 (propagated-inputs
4488 `(("python-six" ,python-six)
4489 ("python-sqlalchemy" ,python-sqlalchemy)))
4490 (native-inputs
4491 `(("python-dateutil" ,python-dateutil)
4492 ("python-flexmock" ,python-flexmock)
4493 ("python-psycopg2" ,python-psycopg2)
4494 ("python-pytest" ,python-pytest)
4495 ("python-pytz" ,python-pytz)))
4496 (home-page "https://github.com/kvesteri/sqlalchemy-utils")
4497 (synopsis "Various utility functions for SQLAlchemy")
4498 (description
4499 "SQLAlchemy-utils provides various utility functions and custom data types
4500 for SQLAlchemy. SQLAlchemy is an SQL database abstraction library for Python.
4501
4502 You might also want to install the following optional dependencies:
4503 @enumerate
4504 @item @code{python-passlib}
4505 @item @code{python-babel}
4506 @item @code{python-cryptography}
4507 @item @code{python-pytz}
4508 @item @code{python-psycopg2}
4509 @item @code{python-furl}
4510 @item @code{python-flask-babel}
4511 @end enumerate
4512 ")
4513 (license license:bsd-3)))
4514
4515 (define-public python2-sqlalchemy-utils
4516 (package-with-python2 python-sqlalchemy-utils))
4517
4518 (define-public python-alembic
4519 (package
4520 (name "python-alembic")
4521 (version "0.8.10")
4522 (source
4523 (origin
4524 (method url-fetch)
4525 (uri (pypi-uri "alembic" version))
4526 (sha256
4527 (base32
4528 "06br9sfqypnjlal6fsbnky3zb0askwcn3diz8k3kwa0qcblm0fqf"))))
4529 (build-system python-build-system)
4530 (native-inputs
4531 `(("python-mock" ,python-mock)
4532 ("python-pytest-cov" ,python-pytest-cov)))
4533 (propagated-inputs
4534 `(("python-sqlalchemy" ,python-sqlalchemy)
4535 ("python-mako" ,python-mako)
4536 ("python-editor" ,python-editor)))
4537 (home-page "http://bitbucket.org/zzzeek/alembic")
4538 (synopsis
4539 "Database migration tool for SQLAlchemy")
4540 (description
4541 "Alembic is a lightweight database migration tool for usage with the
4542 SQLAlchemy Database Toolkit for Python.")
4543 (license license:expat)))
4544
4545 (define-public python2-alembic
4546 (package-with-python2 python-alembic))
4547
4548 (define-public python-autopep8
4549 (package
4550 (name "python-autopep8")
4551 (version "1.2.4")
4552 (source
4553 (origin
4554 (method url-fetch)
4555 (uri (pypi-uri "autopep8" version))
4556 (sha256
4557 (base32
4558 "18parm383lfn42a00wklv3qf20p4v277f1x3cn58x019dqk1xqrq"))))
4559 (build-system python-build-system)
4560 (propagated-inputs
4561 `(("python-pep8" ,python-pep8)))
4562 (home-page "https://github.com/hhatto/autopep8")
4563 (synopsis "Format Python code according to the PEP 8 style guide")
4564 (description
4565 "@code{autopep8} automatically formats Python code to conform to
4566 the PEP 8 style guide. It uses the pycodestyle utility to determine
4567 what parts of the code needs to be formatted. @code{autopep8} is
4568 capable of fixing most of the formatting issues that can be reported
4569 by pycodestyle.")
4570 (license (license:non-copyleft
4571 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
4572
4573 (define-public python2-autopep8
4574 (package-with-python2 python-autopep8))
4575
4576 (define-public python-distutils-extra
4577 (package
4578 (name "python-distutils-extra")
4579 (version "2.38")
4580 (source
4581 (origin
4582 (method url-fetch)
4583 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
4584 version "/+download/python-distutils-extra-"
4585 version ".tar.gz"))
4586 (sha256
4587 (base32
4588 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
4589 (build-system python-build-system)
4590 (home-page "https://launchpad.net/python-distutils-extra/")
4591 (synopsis "Enhancements to Python's distutils")
4592 (description
4593 "The python-distutils-extra module enables you to easily integrate
4594 gettext support, themed icons, and scrollkeeper-based documentation into
4595 Python's distutils.")
4596 (license license:gpl2)))
4597
4598 (define-public python2-distutils-extra
4599 (package-with-python2 python-distutils-extra))
4600
4601 (define-public python2-elib.intl
4602 (package
4603 (name "python2-elib.intl")
4604 (version "0.0.3")
4605 (source
4606 (origin
4607 ;; This project doesn't tag releases or publish tarballs, so we take
4608 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
4609 (method git-fetch)
4610 (uri (git-reference
4611 (url "https://github.com/dieterv/elib.intl.git")
4612 (commit "d09997cfef")))
4613 (sha256
4614 (base32
4615 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
4616 (build-system python-build-system)
4617 (arguments
4618 ;; incompatible with Python 3 (exception syntax)
4619 `(#:python ,python-2
4620 #:tests? #f))
4621 (home-page "https://github.com/dieterv/elib.intl")
4622 (synopsis "Enhanced internationalization for Python")
4623 (description
4624 "The elib.intl module provides enhanced internationalization (I18N)
4625 services for your Python modules and applications.")
4626 (license license:lgpl3+)))
4627
4628 (define-public python-pillow
4629 (package
4630 (name "python-pillow")
4631 (version "3.3.3")
4632 (source
4633 (origin
4634 (method url-fetch)
4635 (uri (pypi-uri "Pillow" version))
4636 (patches (search-patches "python-pillow-freetype-2.7-test-failure.patch"))
4637 (sha256
4638 (base32
4639 "0xkv0p1d73gz0a1qaasf0ai4262g8f334j07vd60bjrxs2wr3nmj"))))
4640 (build-system python-build-system)
4641 (native-inputs
4642 `(("python-nose" ,python-nose)))
4643 (inputs
4644 `(("freetype" ,freetype)
4645 ("lcms" ,lcms)
4646 ("zlib" ,zlib)
4647 ("libjpeg" ,libjpeg)
4648 ("openjpeg" ,openjpeg)
4649 ("libtiff" ,libtiff)
4650 ("libwebp" ,libwebp)))
4651 (arguments
4652 `(#:phases (modify-phases %standard-phases
4653 (add-after
4654 'install 'check-installed
4655 (lambda* (#:key outputs inputs #:allow-other-keys)
4656 (begin
4657 (setenv "HOME" (getcwd))
4658 ;; Make installed package available for running the
4659 ;; tests
4660 (add-installed-pythonpath inputs outputs)
4661 (and (zero? (system* "python" "selftest.py"
4662 "--installed"))
4663 (zero? (system* "python" "test-installed.py"))))))
4664 (delete 'check))))
4665 (home-page "https://pypi.python.org/pypi/Pillow")
4666 (synopsis "Fork of the Python Imaging Library")
4667 (description
4668 "The Python Imaging Library adds image processing capabilities to your
4669 Python interpreter. This library provides extensive file format support, an
4670 efficient internal representation, and fairly powerful image processing
4671 capabilities. The core image library is designed for fast access to data
4672 stored in a few basic pixel formats. It should provide a solid foundation for
4673 a general image processing tool.")
4674 (license (license:x11-style
4675 "http://www.pythonware.com/products/pil/license.htm"
4676 "The PIL Software License"))))
4677
4678 (define-public python2-pillow
4679 (package-with-python2 python-pillow))
4680
4681 (define-public python-pycparser
4682 (package
4683 (name "python-pycparser")
4684 (version "2.17")
4685 (source
4686 (origin
4687 (method url-fetch)
4688 (uri (pypi-uri "pycparser" version))
4689 (sha256
4690 (base32
4691 "1dkkjri0miidqb1zcqhqljfa34fcy9k5akasgwsv6k622zlk3b0a"))))
4692 (outputs '("out" "doc"))
4693 (build-system python-build-system)
4694 (native-inputs
4695 `(("pkg-config" ,pkg-config)))
4696 (arguments
4697 `(#:phases
4698 (modify-phases %standard-phases
4699 (replace 'check
4700 (lambda _
4701 (with-directory-excursion "tests"
4702 (zero? (system* "python" "all_tests.py")))))
4703 (add-after 'install 'install-doc
4704 (lambda* (#:key outputs #:allow-other-keys)
4705 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4706 (doc (string-append data "/doc/" ,name "-" ,version))
4707 (examples (string-append doc "/examples")))
4708 (mkdir-p examples)
4709 (for-each (lambda (file)
4710 (copy-file (string-append "." file)
4711 (string-append doc file)))
4712 '("/README.rst" "/CHANGES" "/LICENSE"))
4713 (copy-recursively "examples" examples)))))))
4714 (home-page "https://github.com/eliben/pycparser")
4715 (synopsis "C parser in Python")
4716 (description
4717 "Pycparser is a complete parser of the C language, written in pure Python
4718 using the PLY parsing library. It parses C code into an AST and can serve as
4719 a front-end for C compilers or analysis tools.")
4720 (license license:bsd-3)))
4721
4722 (define-public python2-pycparser
4723 (package-with-python2 python-pycparser))
4724
4725 (define-public python-cffi
4726 (package
4727 (name "python-cffi")
4728 (version "1.4.2")
4729 (source
4730 (origin
4731 (method url-fetch)
4732 (uri (pypi-uri "cffi" version))
4733 (sha256
4734 (base32 "161rj52rzi3880lij17d6i9kvgkiwjilrqjs8405k8sf6ryif7cg"))))
4735 (build-system python-build-system)
4736 (outputs '("out" "doc"))
4737 (inputs
4738 `(("libffi" ,libffi)))
4739 (propagated-inputs ; required at run-time
4740 `(("python-pycparser" ,python-pycparser)))
4741 (native-inputs
4742 `(("pkg-config" ,pkg-config)
4743 ("python-sphinx" ,python-sphinx)
4744 ("python-pytest" ,python-pytest)))
4745 (arguments
4746 `(#:phases
4747 (alist-cons-after
4748 'install 'install-doc
4749 (lambda* (#:key outputs #:allow-other-keys)
4750 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4751 (doc (string-append data "/doc/" ,name "-" ,version))
4752 (html (string-append doc "/html")))
4753 (with-directory-excursion "doc"
4754 (system* "make" "html")
4755 (mkdir-p html)
4756 (copy-recursively "build/html" html))
4757 (copy-file "LICENSE" (string-append doc "/LICENSE"))))
4758 %standard-phases)))
4759 (home-page "http://cffi.readthedocs.org")
4760 (synopsis "Foreign function interface for Python")
4761 (description
4762 "Foreign Function Interface for Python calling C code.")
4763 (license license:expat)))
4764
4765 (define-public python2-cffi
4766 (package-with-python2 python-cffi))
4767
4768 (define-public python-xcffib
4769 (package
4770 (name "python-xcffib")
4771 (version "0.5.1")
4772 (source
4773 (origin
4774 (method url-fetch)
4775 (uri (pypi-uri "xcffib" version))
4776 (sha256
4777 (base32
4778 "09gbnmr5vn58mm8xi3fmd7fz6743cks6c46dphnxzwax6zsxmy60"))))
4779 (build-system python-build-system)
4780 (inputs
4781 `(("libxcb" ,libxcb)))
4782 (propagated-inputs
4783 `(("python-cffi" ,python-cffi) ; used at run time
4784 ("python-six" ,python-six)))
4785 (arguments
4786 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
4787 #:tests? #f
4788 #:phases
4789 (modify-phases %standard-phases
4790 (add-after 'unpack 'fix-libxcb-path
4791 (lambda* (#:key inputs #:allow-other-keys)
4792 (let ((libxcb (assoc-ref inputs "libxcb")))
4793 (substitute* '("xcffib/__init__.py")
4794 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
4795 #t)))
4796 (add-after 'install 'install-doc
4797 (lambda* (#:key outputs #:allow-other-keys)
4798 (let ((doc (string-append (assoc-ref outputs "out") "/share"
4799 "/doc/" ,name "-" ,version)))
4800 (mkdir-p doc)
4801 (copy-file "README.md"
4802 (string-append doc "/README.md"))
4803 #t))))))
4804 (home-page "https://github.com/tych0/xcffib")
4805 (synopsis "XCB Python bindings")
4806 (description
4807 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
4808 support for Python 3 and PyPy. It is based on cffi.")
4809 (license license:expat)))
4810
4811 (define-public python2-xcffib
4812 (package-with-python2 python-xcffib))
4813
4814 (define-public python-cairocffi
4815 (package
4816 (name "python-cairocffi")
4817 (version "0.8.0")
4818 (source
4819 (origin
4820 (method url-fetch)
4821 ;; The archive on pypi is missing the 'utils' directory!
4822 (uri (string-append "https://github.com/Kozea/cairocffi/archive/v"
4823 version ".tar.gz"))
4824 (file-name (string-append name "-" version ".tar.gz"))
4825 (sha256
4826 (base32
4827 "1rk2dvy3fxrga6bvvxc2fi5lbaynm5h4a0w0aaxyn3bc77rszjg9"))))
4828 (build-system python-build-system)
4829 (outputs '("out" "doc"))
4830 (inputs
4831 `(("gdk-pixbuf" ,gdk-pixbuf)
4832 ("cairo" ,cairo)))
4833 (native-inputs
4834 `(("pkg-config" ,pkg-config)
4835 ("python-sphinx" ,python-sphinx)
4836 ("python-docutils" ,python-docutils)))
4837 (propagated-inputs
4838 `(("python-xcffib" ,python-xcffib))) ; used at run time
4839 (arguments
4840 `(;; FIXME: Tests cannot find 'libcairo.so.2'.
4841 #:tests? #f
4842 #:phases
4843 (modify-phases %standard-phases
4844 (add-after 'install 'install-doc
4845 (lambda* (#:key inputs outputs #:allow-other-keys)
4846 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4847 (doc (string-append data "/doc/" ,name "-" ,version))
4848 (html (string-append doc "/html")))
4849 (setenv "LD_LIBRARY_PATH"
4850 (string-append (assoc-ref inputs "cairo") "/lib" ":"
4851 (assoc-ref inputs "gdk-pixbuf") "/lib"))
4852 (setenv "LANG" "en_US.UTF-8")
4853 (mkdir-p html)
4854 (for-each (lambda (file)
4855 (copy-file (string-append "." file)
4856 (string-append doc file)))
4857 '("/README.rst" "/CHANGES" "/LICENSE"))
4858 (system* "python" "setup.py" "build_sphinx")
4859 (copy-recursively "docs/_build/html" html)
4860 #t))))))
4861 (home-page "https://github.com/Kozea/cairocffi")
4862 (synopsis "Python bindings and object-oriented API for Cairo")
4863 (description
4864 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
4865 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
4866 graphics library with support for multiple backends including image buffers,
4867 PNG, PostScript, PDF, and SVG file output.")
4868 (license license:bsd-3)))
4869
4870 (define-public python2-cairocffi
4871 (package-with-python2 python-cairocffi))
4872
4873 (define-public python-decorator
4874 (package
4875 (name "python-decorator")
4876 (version "4.0.10")
4877 (source
4878 (origin
4879 (method url-fetch)
4880 (uri (pypi-uri "decorator" version))
4881 (sha256
4882 (base32 "0w7hg59hlpq74jpyja4yfryap0ccjvchgpkfp20rhj9krgnrhvlw"))))
4883 (build-system python-build-system)
4884 (arguments '(#:tests? #f)) ; no test target
4885 (home-page "https://pypi.python.org/pypi/decorator/")
4886 (synopsis "Python module to simplify usage of decorators")
4887 (description
4888 "The aim of the decorator module is to simplify the usage of decorators
4889 for the average programmer, and to popularize decorators usage giving examples
4890 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
4891 etc. The core of this module is a decorator factory.")
4892 (license license:expat)))
4893
4894 (define-public python2-decorator
4895 (package-with-python2 python-decorator))
4896
4897 (define-public python-drmaa
4898 (package
4899 (name "python-drmaa")
4900 (version "0.7.7")
4901 (source
4902 (origin
4903 (method url-fetch)
4904 (uri (string-append
4905 "https://pypi.python.org/packages/source/d/drmaa/drmaa-"
4906 version ".tar.gz"))
4907 (sha256
4908 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
4909 (build-system python-build-system)
4910 ;; The test suite requires libdrmaa which is provided by the cluster
4911 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
4912 ;; should be set to the path of the libdrmaa library.
4913 (arguments '(#:tests? #f))
4914 (native-inputs
4915 `(("python-nose" ,python-nose)))
4916 (home-page "https://pypi.python.org/pypi/drmaa")
4917 (synopsis "Python bindings for the DRMAA library")
4918 (description
4919 "A Python package for Distributed Resource Management (DRM) job
4920 submission and control. This package is an implementation of the DRMAA 1.0
4921 Python language binding specification.")
4922 (license license:bsd-3)))
4923
4924 (define-public python2-drmaa
4925 (package-with-python2 python-drmaa))
4926
4927 (define-public python-gridmap
4928 (package
4929 (name "python-gridmap")
4930 (version "0.13.0")
4931 (source
4932 (origin
4933 (method url-fetch)
4934 (uri (string-append
4935 "https://github.com/pygridtools/gridmap/archive/v"
4936 version ".tar.gz"))
4937 (file-name (string-append name "-" version ".tar.gz"))
4938 (sha256
4939 (base32 "1gzjg2k6f14i1msm2b0ax8d9ds1hvk6qd5nlaivg8m4cxqp4cp1x"))))
4940 (build-system python-build-system)
4941 (arguments
4942 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
4943 (propagated-inputs
4944 `(("python-psutil" ,python-psutil)
4945 ("python-drmaa" ,python-drmaa)
4946 ("python-pyzmq" ,python-pyzmq)))
4947 (home-page "https://github.com/pygridtools/gridmap")
4948 (synopsis "Create jobs on a cluster directly from Python")
4949 (description
4950 "Gridmap is a Python package to allow you to easily create jobs on the
4951 cluster directly from Python. You can directly map Python functions onto the
4952 cluster without needing to write any wrapper code yourself.")
4953 (license license:gpl3+)))
4954
4955 (define-public python2-gridmap
4956 (package-with-python2 python-gridmap))
4957
4958 (define-public python-pexpect
4959 (package
4960 (name "python-pexpect")
4961 (version "4.2.1")
4962 (source
4963 (origin
4964 (method url-fetch)
4965 (uri (pypi-uri "pexpect" version))
4966 (sha256
4967 (base32 "14ls7k99pwvl21zqv65kzrhccv50j89m5ij1hf0slmsvlxjj84rx"))))
4968 (build-system python-build-system)
4969 (arguments
4970 `(#:phases
4971 (modify-phases %standard-phases
4972 (add-before 'check 'prepare-tests
4973 (lambda _
4974 (substitute* (find-files "tests")
4975 (("/bin/ls") (which "ls"))
4976 (("/bin/echo") (which "echo"))
4977 (("/bin/which") (which "which"))
4978 ;; Many tests try to use the /bin directory which
4979 ;; is not present in the build environment.
4980 ;; Use one that's non-empty and unlikely to change.
4981 (("/bin'") "/dev'"))
4982 ;; XXX: Socket connection test gets "Connection reset by peer".
4983 ;; Why does it not work? Delete for now.
4984 (delete-file "tests/test_socket.py")
4985 #t))
4986 (replace 'check (lambda _ (zero? (system* "nosetests" "-v")))))))
4987 (native-inputs
4988 `(("python-nose" ,python-nose)
4989 ("python-pytest" ,python-pytest-3.0)
4990 ("man-db" ,man-db)
4991 ("which" ,which)))
4992 (propagated-inputs
4993 `(("python-ptyprocess" ,python-ptyprocess)))
4994 (home-page "http://pexpect.readthedocs.org/")
4995 (synopsis "Controlling interactive console applications")
4996 (description
4997 "Pexpect is a pure Python module for spawning child applications;
4998 controlling them; and responding to expected patterns in their output.
4999 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5000 child application and control it as if a human were typing commands.")
5001 (license license:isc)))
5002
5003 (define-public python2-pexpect
5004 (package-with-python2 python-pexpect))
5005
5006 (define-public python-setuptools-scm
5007 (package
5008 (name "python-setuptools-scm")
5009 (version "1.15.0")
5010 (source (origin
5011 (method url-fetch)
5012 (uri (pypi-uri "setuptools_scm" version))
5013 (sha256
5014 (base32
5015 "0bwyc5markib0i7i2qlyhdzxhiywzxbkfiapldma8m91m82jvwfs"))))
5016 (build-system python-build-system)
5017 (home-page "https://github.com/pypa/setuptools_scm/")
5018 (synopsis "Manage Python package versions in SCM metadata")
5019 (description
5020 "Setuptools_scm handles managing your Python package versions in
5021 @dfn{software configuration management} (SCM) metadata instead of declaring
5022 them as the version argument or in a SCM managed file.")
5023 (license license:expat)))
5024
5025 (define-public python2-setuptools-scm
5026 (package-with-python2 python-setuptools-scm))
5027
5028 (define-public python-pathpy
5029 (package
5030 (name "python-pathpy")
5031 (version "8.1.1")
5032 (source
5033 (origin
5034 (method url-fetch)
5035 (uri (string-append "https://pypi.python.org/packages/source/p/"
5036 "path.py/path.py-" version ".tar.gz"))
5037 (sha256
5038 (base32 "1p8s1l2vfkqhqxdhqlj0g1jjw4f1as2frr35sjcpjjpd5a89y41f"))))
5039 (outputs '("out" "doc"))
5040 (build-system python-build-system)
5041 (propagated-inputs
5042 `(("python-appdirs" ,python-appdirs)))
5043 (native-inputs
5044 `(("python-setuptools-scm" ,python-setuptools-scm)
5045 ("python-sphinx" ,python-sphinx)
5046 ("python-rst.linker" ,python-rst.linker)
5047 ("python-pytest" ,python-pytest)
5048 ("python-pytest-runner" ,python-pytest-runner)))
5049 (arguments
5050 `(#:phases
5051 (modify-phases %standard-phases
5052 (add-after 'build 'build-doc
5053 (lambda _
5054 (setenv "LANG" "en_US.UTF-8")
5055 (zero? (system* "python" "setup.py" "build_sphinx"))))
5056 (add-after 'install 'install-doc
5057 (lambda* (#:key outputs #:allow-other-keys)
5058 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5059 (doc (string-append data "/doc/" ,name "-" ,version))
5060 (html (string-append doc "/html")))
5061 (mkdir-p html)
5062 (for-each (lambda (file)
5063 (copy-file file (string-append doc "/" file)))
5064 '("README.rst" "CHANGES.rst"))
5065 (copy-recursively "build/sphinx/html" html)))))))
5066 (home-page "https://github.com/jaraco/path.py")
5067 (synopsis "Python module wrapper for built-in os.path")
5068 (description
5069 "@code{path.py} implements path objects as first-class entities, allowing
5070 common operations on files to be invoked on those path objects directly.")
5071 (license license:expat)))
5072
5073 (define-public python2-pathpy
5074 (package-with-python2 python-pathpy))
5075
5076 (define-public python-pickleshare
5077 (package
5078 (name "python-pickleshare")
5079 (version "0.5")
5080 (source
5081 (origin
5082 (method url-fetch)
5083 (uri (string-append "https://pypi.python.org/packages/source/p/"
5084 "pickleshare/pickleshare-" version ".tar.gz"))
5085 (sha256
5086 (base32 "11ljr90j3p6qswdrbl7p4cjb2i93f6vn0vx9anzpshsx0d2mggn0"))))
5087 (build-system python-build-system)
5088 (propagated-inputs
5089 `(("python-pathpy" ,python-pathpy)))
5090 (home-page "https://github.com/vivainio/pickleshare")
5091 (synopsis "Tiny key value database with concurrency support")
5092 (description
5093 "PickleShare is a small ‘shelve’-like datastore with concurrency support.
5094 Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike
5095 shelve, many processes can access the database simultaneously. Changing a
5096 value in database is immediately visible to other processes accessing the same
5097 database. Concurrency is possible because the values are stored in separate
5098 files. Hence the “database” is a directory where all files are governed by
5099 PickleShare.")
5100 (license license:expat)))
5101
5102 (define-public python2-pickleshare
5103 (package-with-python2 python-pickleshare))
5104
5105 (define-public python-simplegeneric
5106 (package
5107 (name "python-simplegeneric")
5108 (version "0.8.1")
5109 (source
5110 (origin
5111 (method url-fetch)
5112 (uri (string-append "https://pypi.python.org/packages/source/s/"
5113 "simplegeneric/simplegeneric-" version ".zip"))
5114 (sha256
5115 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
5116 (build-system python-build-system)
5117 (native-inputs
5118 `(("unzip" ,unzip)))
5119 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
5120 (synopsis "Python module for simple generic functions")
5121 (description
5122 "The simplegeneric module lets you define simple single-dispatch generic
5123 functions, akin to Python’s built-in generic functions like @code{len()},
5124 @code{iter()} and so on. However, instead of using specially-named methods,
5125 these generic functions use simple lookup tables, akin to those used by
5126 e.g. @code{pickle.dump()} and other generic functions found in the Python
5127 standard library.")
5128 (license license:zpl2.1)))
5129
5130 (define-public python2-simplegeneric
5131 (package-with-python2 python-simplegeneric))
5132
5133 (define-public python-ipython-genutils
5134 ;; TODO: This package is retired, check if can be removed, see description.
5135 (package
5136 (name "python-ipython-genutils")
5137 (version "0.1.0")
5138 (source
5139 (origin
5140 (method url-fetch)
5141 (uri (string-append "https://pypi.python.org/packages/source/i/"
5142 "ipython_genutils/ipython_genutils-"
5143 version ".tar.gz"))
5144 (sha256
5145 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
5146 (build-system python-build-system)
5147 (arguments `(#:tests? #f)) ; no tests
5148 (home-page "http://ipython.org")
5149 (synopsis "Vestigial utilities from IPython")
5150 (description
5151 "This package provides retired utilities from IPython. No packages
5152 outside IPython/Jupyter should depend on it.
5153
5154 This package shouldn't exist. It contains some common utilities shared by
5155 Jupyter and IPython projects during The Big Split. As soon as possible, those
5156 packages will remove their dependency on this, and this package will go
5157 away.")
5158 (license license:bsd-3)))
5159
5160 (define-public python2-ipython-genutils
5161 (package-with-python2 python-ipython-genutils))
5162
5163 (define-public python-traitlets
5164 (package
5165 (name "python-traitlets")
5166 (version "4.2.0")
5167 (source
5168 (origin
5169 (method url-fetch)
5170 (uri (pypi-uri "traitlets" version))
5171 (sha256
5172 (base32
5173 "1afy08sa5n9gnkvh3da49c16zkyv598vchv0p1hp7zzjy8895hz4"))))
5174 (build-system python-build-system)
5175 (arguments
5176 `(#:phases
5177 (modify-phases %standard-phases
5178 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
5179 (propagated-inputs
5180 `(("python-ipython-genutils" ,python-ipython-genutils)
5181 ("python-decorator" ,python-decorator)))
5182 (native-inputs
5183 `(("python-mock" ,python-mock)
5184 ("python-nose" ,python-nose)))
5185 (home-page "http://ipython.org")
5186 (synopsis "Configuration system for Python applications")
5187 (description
5188 "Traitlets is a framework that lets Python classes have attributes with
5189 type checking, dynamically calculated default values, and ‘on change’
5190 callbacks. The package also includes a mechanism to use traitlets for
5191 configuration, loading values from files or from command line arguments. This
5192 is a distinct layer on top of traitlets, so you can use traitlets in your code
5193 without using the configuration machinery.")
5194 (license license:bsd-3)))
5195
5196 (define-public python2-traitlets
5197 (package-with-python2 python-traitlets))
5198
5199 (define-public python-jupyter-core
5200 (package
5201 (name "python-jupyter-core")
5202 (version "4.2.1")
5203 (source
5204 (origin
5205 (method url-fetch)
5206 (uri (string-append (pypi-uri "jupyter_core" version)))
5207 (sha256
5208 (base32
5209 "1cy7inv218dgh4m1fbzbsiqpz733ylgjrj62jxqpfzs3r2cm7ic9"))))
5210 (build-system python-build-system)
5211 ;; FIXME: not sure how to run the tests
5212 (arguments `(#:tests? #f))
5213 (propagated-inputs
5214 `(("python-traitlets" ,python-traitlets)))
5215 (home-page "http://jupyter.org/")
5216 (synopsis "Jupyter base package")
5217 (description
5218 "Jupyter core is the base package on which Jupyter projects rely.")
5219 (license license:bsd-3)))
5220
5221 (define-public python2-jupyter-core
5222 (package-with-python2 python-jupyter-core))
5223
5224 (define-public python-jupyter-client
5225 (package
5226 (name "python-jupyter-client")
5227 (version "4.4.0")
5228 (source
5229 (origin
5230 (method url-fetch)
5231 (uri (pypi-uri "jupyter_client" version))
5232 (sha256
5233 (base32
5234 "1vjjrpjw7k5sh982pbjnslv7byfbfazjw9g92jvs7dz5qbx556n9"))))
5235 (build-system python-build-system)
5236 ;; Tests fail because of missing native python kernel which I assume is
5237 ;; provided by the ipython package, which we cannot use because it would
5238 ;; cause a dependency cycle.
5239 (arguments `(#:tests? #f))
5240 (propagated-inputs
5241 `(("python-pyzmq" ,python-pyzmq)
5242 ("python-traitlets" ,python-traitlets)
5243 ("python-jupyter-core" ,python-jupyter-core)))
5244 (home-page "http://jupyter.org/")
5245 (synopsis "Jupyter protocol implementation and client libraries")
5246 (description
5247 "The @code{jupyter_client} package contains the reference implementation
5248 of the Jupyter protocol. It also provides client and kernel management APIs
5249 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
5250 installing @code{kernelspec}s for use with Jupyter frontends.")
5251 (license license:bsd-3)))
5252
5253 (define-public python2-jupyter-client
5254 (package-with-python2 python-jupyter-client))
5255
5256 (define-public python-ipykernel
5257 (package
5258 (name "python-ipykernel")
5259 (version "4.5.2")
5260 (source
5261 (origin
5262 (method url-fetch)
5263 (uri (pypi-uri "ipykernel" version))
5264 (sha256
5265 (base32 "0qllv0k6zzv1r1cj1x2ygxmlrrqhbslzj8rc6r6fg3kc1rgz4m2s"))))
5266 (build-system python-build-system)
5267 ;; The tests load a submodule of IPython. However, IPython itself depends
5268 ;; on ipykernel.
5269 (arguments `(#:tests? #f))
5270 (propagated-inputs
5271 ;; imported at runtime during connect
5272 `(("python-jupyter-client" ,python-jupyter-client)))
5273 (home-page "http://ipython.org")
5274 (synopsis "IPython Kernel for Jupyter")
5275 (description
5276 "This package provides the IPython kernel for Jupyter.")
5277 (license license:bsd-3)))
5278
5279 (define-public python2-ipykernel
5280 (package-with-python2 python-ipykernel))
5281
5282 (define-public python-testpath
5283 (package
5284 (name "python-testpath")
5285 (version "0.2")
5286 (source
5287 (origin
5288 (method url-fetch)
5289 (uri (string-append "https://github.com/jupyter/testpath/archive/"
5290 version ".tar.gz"))
5291 (file-name (string-append name "-" version ".tar.gz"))
5292 (sha256
5293 (base32
5294 "04kh3fgvmqz6cfcw79q70qwjz7ib7lxm27cc548iy2rpr33qqf55"))))
5295 (build-system python-build-system)
5296 (arguments
5297 `(#:tests? #f ; this package does not even have a setup.py
5298 #:modules ((guix build python-build-system)
5299 (guix build utils)
5300 (srfi srfi-1))
5301 #:imported-modules (,@%python-build-system-modules
5302 (srfi srfi-1))
5303 #:phases
5304 (modify-phases %standard-phases
5305 (delete 'install)
5306 (replace 'build
5307 (lambda* (#:key inputs outputs #:allow-other-keys)
5308 (let* ((version (last
5309 (string-split (assoc-ref inputs "python") #\-)))
5310 (x.y (string-join (take (string-split version #\.) 2)
5311 "."))
5312 (dir (string-append
5313 (assoc-ref outputs "out")
5314 "/lib/python" x.y "/site-packages/testpath")))
5315 (mkdir-p dir)
5316 (copy-recursively "testpath" dir))
5317 #t)))))
5318 (home-page "https://github.com/takluyver/testpath")
5319 (synopsis "Test utilities for code working with files and commands")
5320 (description
5321 "Testpath is a collection of utilities for Python code working with files
5322 and commands. It contains functions to check things on the filesystem, and
5323 tools for mocking system commands and recording calls to those.")
5324 (license license:expat)))
5325
5326 (define-public python2-testpath
5327 (package-with-python2 python-testpath))
5328
5329 (define-public python-ipython
5330 (package
5331 (name "python-ipython")
5332 (version "5.2.2")
5333 (source
5334 (origin
5335 (method url-fetch)
5336 (uri (pypi-uri "ipython" version ".tar.gz"))
5337 (sha256
5338 (base32 "1qhjwa9cyz1np7rhv3p4ip13lkgbqsad62l24xkwiq1ic2gwiqbf"))))
5339 (build-system python-build-system)
5340 (outputs '("out" "doc"))
5341 (propagated-inputs
5342 `(("python-pyzmq" ,python-pyzmq)
5343 ("python-prompt-toolkit" ,python-prompt-toolkit)
5344 ("python-terminado" ,python-terminado)
5345 ("python-matplotlib" ,python-matplotlib)
5346 ("python-numpy" ,python-numpy)
5347 ("python-numpydoc" ,python-numpydoc)
5348 ("python-jinja2" ,python-jinja2)
5349 ("python-mistune" ,python-mistune)
5350 ("python-pexpect" ,python-pexpect)
5351 ("python-pickleshare" ,python-pickleshare)
5352 ("python-simplegeneric" ,python-simplegeneric)
5353 ("python-jsonschema" ,python-jsonschema)
5354 ("python-traitlets" ,python-traitlets)
5355 ("python-ipykernel" ,python-ipykernel)
5356 ("python-nbformat" ,python-nbformat)
5357 ("python-pygments" ,python-pygments)))
5358 (inputs
5359 `(("readline" ,readline)
5360 ("which" ,which)))
5361 (native-inputs
5362 `(("graphviz" ,graphviz)
5363 ("pkg-config" ,pkg-config)
5364 ("python-requests" ,python-requests) ;; for tests
5365 ("python-testpath" ,python-testpath)
5366 ("python-nose" ,python-nose)
5367 ("python-sphinx" ,python-sphinx)
5368 ("python-shpinx-rtd-theme" ,python-sphinx-rtd-theme)
5369 ("texlive" ,texlive)
5370 ("texinfo" ,texinfo)))
5371 (arguments
5372 `(#:phases
5373 (modify-phases %standard-phases
5374 (add-after
5375 'install 'install-doc
5376 (lambda* (#:key inputs outputs #:allow-other-keys)
5377 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5378 (doc (string-append data "/doc/" ,name "-" ,version))
5379 (html (string-append doc "/html"))
5380 (man1 (string-append data "/man/man1"))
5381 (info (string-append data "/info"))
5382 (examples (string-append doc "/examples"))
5383 (python-arg (string-append "PYTHON=" (which "python"))))
5384 (setenv "LANG" "en_US.utf8")
5385 ;; Make installed package available for running the tests
5386 (add-installed-pythonpath inputs outputs)
5387 (with-directory-excursion "docs"
5388 ;; FIXME: pdf fails to build
5389 ;;(system* "make" "pdf" "PAPER=a4")
5390 (system* "make" python-arg "html")
5391 (system* "make" python-arg "info"))
5392 (copy-recursively "docs/man" man1)
5393 (copy-recursively "examples" examples)
5394 (copy-recursively "docs/build/html" html)
5395 ;; (copy-file "docs/build/latex/ipython.pdf"
5396 ;; (string-append doc "/ipython.pdf"))
5397 (mkdir-p info)
5398 (copy-file "docs/build/texinfo/ipython.info"
5399 (string-append info "/ipython.info"))
5400 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))))
5401 ;; Tests can only be run after the library has been installed and not
5402 ;; within the source directory.
5403 (delete 'check)
5404 (add-after
5405 'install 'check
5406 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5407 (if tests?
5408 (with-directory-excursion "/tmp"
5409 ;; Make installed package available for running the tests
5410 (add-installed-pythonpath inputs outputs)
5411 (setenv "HOME" "/tmp/") ;; required by a test
5412 (zero? (system* (string-append (assoc-ref outputs "out")
5413 "/bin/iptest"))))
5414 #t)))
5415 (add-before
5416 'install 'fix-tests
5417 (lambda* (#:key inputs #:allow-other-keys)
5418 (substitute* "./IPython/utils/_process_posix.py"
5419 (("/usr/bin/env', 'which") (which "which")))
5420 (substitute* "./IPython/core/tests/test_inputtransformer.py"
5421 (("#!/usr/bin/env python")
5422 (string-append "#!" (which "python"))))
5423 ;; Disable 1 failing test
5424 (substitute* "./IPython/core/tests/test_magic.py"
5425 (("def test_dirops\\(\\):" all)
5426 (string-append "@dec.skipif(True)\n" all))))))))
5427 (home-page "http://ipython.org")
5428 (synopsis "IPython is a tool for interactive computing in Python")
5429 (description
5430 "IPython provides a rich architecture for interactive computing with:
5431 Powerful interactive shells, a browser-based notebook, support for interactive
5432 data visualization, embeddable interpreters and tools for parallel
5433 computing.")
5434 (license license:bsd-3)
5435 (properties `((python2-variant . ,(delay python2-ipython))))))
5436
5437 (define-public python2-ipython
5438 (let ((ipython (package-with-python2 (strip-python2-variant python-ipython))))
5439 (package
5440 (inherit ipython)
5441 ;; FIXME: add pyreadline once available.
5442 (propagated-inputs
5443 `(("python2-backports-shutil-get-terminal-size"
5444 ,python2-backports-shutil-get-terminal-size)
5445 ("python2-pathlib2" ,python2-pathlib2)
5446 ,@(package-propagated-inputs ipython)))
5447 (native-inputs
5448 `(("python2-mock" ,python2-mock)
5449 ,@(package-native-inputs ipython))))))
5450
5451 (define-public python-isodate
5452 (package
5453 (name "python-isodate")
5454 (version "0.5.4")
5455 (source
5456 (origin
5457 (method url-fetch)
5458 (uri (pypi-uri "isodate" version))
5459 (sha256
5460 (base32
5461 "0cafaiwixgpxwh9dsd28qb0dbzsj6xpxjdkyk30ns91ps10mq422"))))
5462 (build-system python-build-system)
5463 (home-page
5464 "http://cheeseshop.python.org/pypi/isodate")
5465 (synopsis
5466 "Python date parser and formatter")
5467 (description
5468 "Python-isodate is a python module for parsing and formatting
5469 ISO 8601 dates, time and duration.")
5470 (license license:bsd-3)))
5471
5472 (define-public python2-isodate
5473 (package-with-python2 python-isodate))
5474
5475 (define-public python-html5lib
5476 (package
5477 (name "python-html5lib")
5478 (version "1.0b10")
5479 (source
5480 (origin
5481 (method url-fetch)
5482 (uri (pypi-uri "html5lib" version))
5483 (sha256
5484 (base32
5485 "1yd068a5c00wd0ajq0hqimv7fd82lhrw0w3s01vbhy9bbd6xapqd"))))
5486 (build-system python-build-system)
5487 (propagated-inputs
5488 `(("python-six" ,python-six)
5489 ("python-webencodings" ,python-webencodings)))
5490 (arguments
5491 `(#:test-target "check"))
5492 (home-page
5493 "https://github.com/html5lib/html5lib-python")
5494 (synopsis
5495 "Python HTML parser based on the WHATWG HTML specifcation")
5496 (description
5497 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
5498 and written in Python.")
5499 (license license:expat)))
5500
5501 (define-public python2-html5lib
5502 (package-with-python2 python-html5lib))
5503
5504 ;; Needed for python-bleach, a dependency of python-notebook
5505 (define-public python-html5lib-0.9
5506 (package
5507 (inherit python-html5lib)
5508 (version "0.999")
5509 (source
5510 (origin
5511 (method url-fetch)
5512 (uri (pypi-uri "html5lib" version))
5513 (sha256
5514 (base32
5515 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
5516
5517 (define-public python2-html5lib-0.9
5518 (package-with-python2 python-html5lib-0.9))
5519
5520 (define-public python-webencodings
5521 (package
5522 (name "python-webencodings")
5523 (version "0.5")
5524 (source (origin
5525 (method url-fetch)
5526 (uri (pypi-uri "webencodings" version))
5527 (sha256
5528 (base32
5529 "015rw7662lkpb9aqiqah2hbizk6w531badqwjpz41rr47glmxid5"))))
5530 (build-system python-build-system)
5531 (arguments
5532 '(#:phases
5533 (modify-phases %standard-phases
5534 (replace 'check
5535 (lambda _
5536 (zero? (system* "py.test" "-v" "webencodings/tests.py")))))))
5537 (native-inputs
5538 `(("python-pytest" ,python-pytest)))
5539 (home-page "https://github.com/SimonSapin/python-webencodings")
5540 (synopsis "Character encoding aliases for legacy web content")
5541 (description
5542 "In order to be compatible with legacy web content when interpreting
5543 something like @code{Content-Type: text/html; charset=latin1}, tools need
5544 to use a particular set of aliases for encoding labels as well as some
5545 overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
5546 the web are actually aliases for @code{windows-1252}, and an @code{UTF-8}
5547 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
5548 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
5549 defines all such details so that implementations do not have to
5550 reverse-engineer each other.
5551
5552 This module implements the Encoding standard and has encoding labels and
5553 BOM detection, but the actual implementation for encoders and decoders
5554 is Python’s.")
5555 (license license:bsd-3)))
5556
5557 (define-public python2-webencodings
5558 (package-with-python2 python-webencodings))
5559
5560 (define-public python-urwid
5561 (package
5562 (name "python-urwid")
5563 (version "1.3.1")
5564 (source
5565 (origin
5566 (method url-fetch)
5567 (uri (pypi-uri "urwid" version))
5568 (sha256
5569 (base32
5570 "18cnd1wdjcas08x5qwa5ayw6jsfcn33w4d9f7q3s29fy6qzc1kng"))))
5571 (build-system python-build-system)
5572 (arguments
5573 `(#:phases
5574 (modify-phases %standard-phases
5575 ;; Disable failing test. Bug filed upstream:
5576 ;; https://github.com/wardi/urwid/issues/164
5577 ;; TODO: check again for python-urwid > 1.3.1 or python > 3.4.3.
5578 (add-after 'unpack 'disable-failing-test
5579 (lambda _
5580 (substitute* "urwid/tests/test_event_loops.py"
5581 (("test_remove_watch_file")
5582 "disable_remove_watch_file")))))))
5583 (home-page "http://urwid.org")
5584 (synopsis "Console user interface library for Python")
5585 (description
5586 "Urwid is a curses-based UI/widget library for Python. It includes many
5587 features useful for text console applications.")
5588 (license license:lgpl2.1+)))
5589
5590 (define-public python2-urwid
5591 (let ((python2-urwid (package-with-python2 python-urwid)))
5592 (package
5593 (inherit python2-urwid)
5594 (arguments
5595 (append
5596 '(#:phases
5597 (modify-phases %standard-phases
5598 ;; Disable the vterm tests because of non-deterministic failures
5599 ;; with Python 2. See https://github.com/urwid/urwid/issues/230.
5600 (add-after 'unpack 'delete-test_vterm.py
5601 (delete-file "urwid/tests/test_vterm.py"))))
5602 (package-arguments python-urwid))))))
5603
5604 (define-public python-openid
5605 (package
5606 (name "python-openid")
5607 (version "3.0.10")
5608 (source
5609 (origin
5610 (method url-fetch)
5611 (uri (pypi-uri "python3-openid" version))
5612 (sha256
5613 (base32
5614 "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758"))))
5615 (build-system python-build-system)
5616 (arguments
5617 `(#:phases
5618 (modify-phases %standard-phases
5619 (replace 'check
5620 (lambda _
5621 (zero? (system* "./admin/runtests")))))))
5622 (properties `((python2-variant . ,(delay python2-openid))))
5623 (propagated-inputs
5624 `(("python-defusedxml" ,python-defusedxml)))
5625 (native-inputs
5626 `(("python-psycopg2" ,python-psycopg2)
5627 ("python-django" ,python-django)))
5628 (home-page "https://github.com/necaris/python3-openid")
5629 (synopsis "OpenID support for servers and consumers")
5630 (description "This library provides OpenID authentication for Python, both
5631 for clients and servers.")
5632 (license license:asl2.0)))
5633
5634 (define-public python2-openid
5635 (package
5636 (name "python2-openid")
5637 (version "2.2.5")
5638 (source
5639 (origin
5640 (method url-fetch)
5641 (uri (pypi-uri "python-openid" version))
5642 (sha256
5643 (base32
5644 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
5645 (build-system python-build-system)
5646 (arguments
5647 ;; Python 3 support is in `python3-openid`, a separate package.
5648 `(#:python ,python-2))
5649 (home-page "https://github.com/openid/python-openid")
5650 (synopsis "OpenID support for servers and consumers")
5651 (description "This library provides OpenID authentication for Python, both
5652 for clients and servers.")
5653 (license license:asl2.0)))
5654
5655 (define-public python-urwidtrees
5656 (package
5657 (name "python-urwidtrees")
5658 (version "1.0.2")
5659 (source
5660 (origin
5661 (method url-fetch)
5662 ;; package author intends on distributing via github rather than pypi:
5663 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
5664 (uri (string-append "https://github.com/pazz/urwidtrees/archive/"
5665 version ".tar.gz"))
5666 (file-name (string-append name "-" version ".tar.gz"))
5667 (sha256
5668 (base32
5669 "0d30lyd3s2a97rhqfax5w9ssqds2z6aydqx3c6j2c2lk3cb4ngvh"))))
5670 (build-system python-build-system)
5671 (arguments
5672 '(#:tests? #f)) ; no tests
5673 (propagated-inputs `(("python-urwid" ,python-urwid)))
5674 (home-page "https://github.com/pazz/urwidtrees")
5675 (synopsis "Tree widgets for urwid")
5676 (description "Urwidtrees is a Widget Container API for the @code{urwid}
5677 toolkit. Use it to build trees of widgets.")
5678 (license license:gpl3+)))
5679
5680 (define-public python2-urwidtrees
5681 (package-with-python2 python-urwidtrees))
5682
5683 (define-public python-dbus
5684 (package
5685 (name "python-dbus")
5686 (version "1.2.0")
5687 (source
5688 (origin
5689 (method url-fetch)
5690 (uri (string-append
5691 "https://dbus.freedesktop.org/releases/dbus-python/dbus-python-"
5692 version ".tar.gz"))
5693 (sha256
5694 (base32 "1py62qir966lvdkngg0v8k1khsqxwk5m4s8nflpk1agk5f5nqb71"))))
5695 (build-system gnu-build-system)
5696 (arguments
5697 '(#:phases
5698 (modify-phases %standard-phases
5699 (add-before
5700 'check 'pre-check
5701 (lambda _
5702 ;; XXX: For the missing '/etc/machine-id'.
5703 (substitute* "test/run-test.sh"
5704 (("DBUS_FATAL_WARNINGS=1")
5705 "DBUS_FATAL_WARNINGS=0"))
5706 #t)))))
5707 (native-inputs
5708 `(("pkg-config" ,pkg-config)))
5709 (inputs
5710 `(("python" ,python)
5711 ("dbus-glib" ,dbus-glib)))
5712 (synopsis "Python bindings for D-bus")
5713 (description "python-dbus provides bindings for libdbus, the reference
5714 implementation of D-Bus.")
5715 (home-page "http://www.freedesktop.org/wiki/Software/DBusBindings/")
5716 (license license:expat)))
5717
5718 (define-public python2-dbus
5719 (package (inherit python-dbus)
5720 (name "python2-dbus")
5721 (inputs `(("python" ,python-2)
5722 ,@(alist-delete "python"
5723 (package-inputs python-dbus)
5724 equal?)))
5725 ;; FIXME: on Python 2, the test_utf8 fails with:
5726 ;; "ValueError: unichr() arg not in range(0x10000) (narrow Python build)"
5727 (arguments `(#:tests? #f))))
5728
5729 (define-public python-apsw
5730 (package
5731 (name "python-apsw")
5732 (version "3.9.2-r1")
5733 (source
5734 (origin
5735 (method url-fetch)
5736 (uri (pypi-uri "apsw" version))
5737 (sha256
5738 (base32
5739 "0w4jb0wpx785qw42r3h4fh7gl5w2968q48i7gygybsfxck8nzffs"))))
5740 (build-system python-build-system)
5741 (inputs
5742 `(("sqlite" ,sqlite)))
5743 (arguments
5744 `(#:phases
5745 (modify-phases %standard-phases
5746 (delete 'check)
5747 (add-after 'install 'check
5748 (lambda* (#:key inputs outputs #:allow-other-keys)
5749 (add-installed-pythonpath inputs outputs)
5750 (zero? (system* "python" "setup.py" "test")))))))
5751 (home-page "https://github.com/rogerbinns/apsw/")
5752 (synopsis "Another Python SQLite Wrapper")
5753 (description "APSW is a Python wrapper for the SQLite
5754 embedded relational database engine. In contrast to other wrappers such as
5755 pysqlite it focuses on being a minimal layer over SQLite attempting just to
5756 translate the complete SQLite API into Python.")
5757 (license license:zlib)))
5758
5759 (define-public python2-apsw
5760 (package-with-python2 python-apsw))
5761
5762 (define-public python-lxml
5763 (package
5764 (name "python-lxml")
5765 (version "3.6.0")
5766 (source
5767 (origin
5768 (method url-fetch)
5769 (uri (pypi-uri "lxml" version))
5770 (sha256
5771 (base32
5772 "1pvbmiy2m7jwv493kilbghhj2pkh8wy1na3ji350vhzhlwlclx4w"))))
5773 (build-system python-build-system)
5774 (inputs
5775 `(("libxml2" ,libxml2)
5776 ("libxslt" ,libxslt)))
5777 (home-page "http://lxml.de/")
5778 (synopsis
5779 "Python XML processing library")
5780 (description
5781 "The lxml XML toolkit is a Pythonic binding for the C libraries
5782 libxml2 and libxslt.")
5783 (license license:bsd-3))) ; and a few more, see LICENSES.txt
5784
5785 (define-public python2-lxml
5786 (package-with-python2 python-lxml))
5787
5788 ;; beautifulsoup4 has a totally different namespace than 3.x,
5789 ;; and pypi seems to put it under its own name, so I guess we should too
5790 (define-public python-beautifulsoup4
5791 (package
5792 (name "python-beautifulsoup4")
5793 (version "4.5.3")
5794 (source
5795 (origin
5796 (method url-fetch)
5797 (uri (pypi-uri "beautifulsoup4" version))
5798 (sha256
5799 (base32
5800 "0glaw1vyxnbp03fni7h5496n6iib0n5iim4gax1n0ngscs9s075j"))))
5801 (build-system python-build-system)
5802 (arguments
5803 `(#:phases
5804 (modify-phases %standard-phases
5805 ;; The Python 2 source is the definitive source of beautifulsoup4. We
5806 ;; must use this conversion script when building with Python 3. The
5807 ;; conversion script also runs the tests.
5808 ;; For more information, see the file 'convert-py3k' in the source
5809 ;; distribution.
5810 (replace 'check
5811 (lambda _ (zero? (system* "./convert-py3k")))))))
5812 (home-page
5813 "http://www.crummy.com/software/BeautifulSoup/bs4/")
5814 (synopsis
5815 "Python screen-scraping library")
5816 (description
5817 "Beautiful Soup is a Python library designed for rapidly setting up
5818 screen-scraping projects. It offers Pythonic idioms for navigating,
5819 searching, and modifying a parse tree, providing a toolkit for
5820 dissecting a document and extracting what you need. It automatically
5821 converts incoming documents to Unicode and outgoing documents to UTF-8.")
5822 (license license:expat)
5823 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
5824
5825 (define-public python2-beautifulsoup4
5826 (package
5827 (inherit (package-with-python2
5828 (strip-python2-variant python-beautifulsoup4)))
5829 (arguments `(#:python ,python-2))))
5830
5831 (define-public python-cssutils
5832 (package
5833 (name "python-cssutils")
5834 (version "1.0.1")
5835 (source
5836 (origin
5837 (method url-fetch)
5838 (uri (pypi-uri "cssutils" version))
5839 (sha256
5840 (base32
5841 "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq"))))
5842 (build-system python-build-system)
5843 (native-inputs
5844 `(("unzip" ,unzip))) ; for unpacking the source
5845 (arguments
5846 `(#:tests? #f)) ;tests require python-pbr < 1.7.0
5847 (home-page "http://cthedot.de/cssutils/")
5848 (synopsis
5849 "CSS Cascading Style Sheets library for Python")
5850 (description
5851 "Cssutils is a Python package for parsing and building CSS
5852 Cascading Style Sheets. Currently it provides a DOM only and no rendering
5853 options.")
5854 (license license:lgpl3+)))
5855
5856 (define-public python2-cssutils
5857 (package-with-python2 python-cssutils))
5858
5859 (define-public python-cssselect
5860 (package
5861 (name "python-cssselect")
5862 (version "0.9.2")
5863 (source
5864 (origin
5865 (method url-fetch)
5866 (uri (pypi-uri "cssselect" version))
5867 (sha256
5868 (base32
5869 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
5870 (build-system python-build-system)
5871 (arguments
5872 ;; tests fail with message
5873 ;; AttributeError: 'module' object has no attribute 'tests'
5874 `(#:tests? #f))
5875 (home-page
5876 "https://pythonhosted.org/cssselect/")
5877 (synopsis
5878 "CSS3 selector parser and translator to XPath 1.0")
5879 (description
5880 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5881 them to XPath 1.0 expressions. Such expressions can be used in lxml or
5882 another XPath engine to find the matching elements in an XML or HTML document.")
5883 (license license:bsd-3)))
5884
5885 (define-public python2-cssselect
5886 (package-with-python2 python-cssselect))
5887
5888 (define-public python-openid-cla
5889 (package
5890 (name "python-openid-cla")
5891 (version "1.2")
5892 (source
5893 (origin
5894 (method url-fetch)
5895 (uri (pypi-uri "python-openid-cla" version))
5896 (sha256
5897 (base32
5898 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5899 (build-system python-build-system)
5900 (arguments '(#:tests? #f)) ; No tests.
5901 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5902 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5903 (description "@code{openid-cla} is an implementation of the OpenID
5904 contributor license agreement extension for python-openid.")
5905 (license license:bsd-3)))
5906
5907 (define-public python2-openid-cla
5908 (package-with-python2 python-openid-cla))
5909
5910 (define-public python-openid-teams
5911 (package
5912 (name "python-openid-teams")
5913 (version "1.1")
5914 (source
5915 (origin
5916 (method url-fetch)
5917 (uri (pypi-uri "python-openid-teams" version))
5918 (sha256
5919 (base32
5920 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5921 (build-system python-build-system)
5922 (arguments '(#:tests? #f)) ; No tests.
5923 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5924 (synopsis "Implementation of the OpenID teams extension for python-openid")
5925 (description
5926 "@code{openid-teams} is an implementation of the OpenID
5927 teams extension for python-openid.")
5928 (license license:bsd-3)))
5929
5930 (define-public python2-openid-teams
5931 (package-with-python2 python-openid-teams))
5932
5933 (define-public python-netifaces
5934 (package
5935 (name "python-netifaces")
5936 (version "0.10.4")
5937 (source
5938 (origin
5939 (method url-fetch)
5940 (uri (string-append
5941 "https://pypi.python.org/packages/source/n/netifaces/netifaces-"
5942 version
5943 ".tar.gz"))
5944 (sha256
5945 (base32
5946 "1plw237a4zib4z8s62g0mrs8gm3kjfrp5sxh6bbk9nl3rdls2mln"))))
5947 (build-system python-build-system)
5948 (home-page
5949 "https://bitbucket.org/al45tair/netifaces")
5950 (synopsis
5951 "Python module for portable network interface information")
5952 (description
5953 "Netifaces is a Python module providing information on network
5954 interfaces in an easy and portable manner.")
5955 (license license:expat)))
5956
5957 (define-public python2-netifaces
5958 (package-with-python2 python-netifaces))
5959
5960 (define-public python-networkx
5961 (package
5962 (name "python-networkx")
5963 (version "1.11")
5964 (source
5965 (origin
5966 (method url-fetch)
5967 (uri (pypi-uri "networkx" version))
5968 (sha256
5969 (base32 "1f74s56xb4ggixiq0vxyfxsfk8p20c7a099lpcf60izv1php03hd"))))
5970 (build-system python-build-system)
5971 ;; python-decorator is needed at runtime
5972 (propagated-inputs
5973 `(("python-decorator" ,python-decorator)))
5974 (native-inputs
5975 `(("python-nose" ,python-nose)))
5976 (home-page "http://networkx.github.io/")
5977 (synopsis "Python module for creating and manipulating graphs and networks")
5978 (description
5979 "NetworkX is a Python package for the creation, manipulation, and study
5980 of the structure, dynamics, and functions of complex networks.")
5981 (license license:bsd-3)))
5982
5983 (define-public python2-networkx
5984 (package-with-python2 python-networkx))
5985
5986 (define-public snakemake
5987 (package
5988 (name "snakemake")
5989 (version "3.11.2")
5990 (source
5991 (origin
5992 (method url-fetch)
5993 (uri (pypi-uri "snakemake" version))
5994 (sha256
5995 (base32 "0qcp7y9csvanyzh08jppryhd5di8r1z7p0d4wkfg5591pj3bb8zp"))))
5996 (build-system python-build-system)
5997 (arguments
5998 ;; TODO: Package missing test dependencies.
5999 '(#:tests? #f))
6000 (propagated-inputs
6001 `(("python-wrapt" ,python-wrapt)
6002 ("python-requests" ,python-requests)))
6003 (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home")
6004 (synopsis "Python-based execution environment for make-like workflows")
6005 (description
6006 "Snakemake aims to reduce the complexity of creating workflows by
6007 providing a clean and modern domain specific specification language (DSL) in
6008 Python style, together with a fast and comfortable execution environment.")
6009 (license license:expat)))
6010
6011 (define-public python-seaborn
6012 (package
6013 (name "python-seaborn")
6014 (version "0.7.1")
6015 (source
6016 (origin
6017 (method url-fetch)
6018 (uri (pypi-uri "seaborn" version))
6019 (sha256
6020 (base32 "0pawrqc3mxpwd5g9pvi9gba02637bh5c8ldpp8izfwpfn52469zs"))))
6021 (build-system python-build-system)
6022 (arguments
6023 '(#:tests? #f)) ; Tests requires a running X11 server.
6024 (propagated-inputs
6025 `(("python-pandas" ,python-pandas)
6026 ("python-matplotlib" ,python-matplotlib)
6027 ("python-scipy" ,python-scipy)))
6028 (home-page "http://stanford.edu/~mwaskom/software/seaborn/")
6029 (synopsis "Statistical data visualization")
6030 (description
6031 "Seaborn is a library for making attractive and informative statistical
6032 graphics in Python. It is built on top of matplotlib and tightly integrated
6033 with the PyData stack, including support for numpy and pandas data structures
6034 and statistical routines from scipy and statsmodels.")
6035 (license license:bsd-3)
6036 (properties `((python2-variant . ,(delay python2-seaborn))))))
6037
6038 (define-public python2-seaborn
6039 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
6040 (package
6041 (inherit base)
6042 (propagated-inputs `(("python2-pytz" ,python2-pytz)
6043 ,@(package-propagated-inputs base))))))
6044
6045 (define-public python-mpmath
6046 (package
6047 (name "python-mpmath")
6048 (version "0.19")
6049 (source (origin
6050 (method url-fetch)
6051 (uri (string-append "http://mpmath.org/files/mpmath-"
6052 version ".tar.gz"))
6053 (sha256
6054 (base32
6055 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
6056 (build-system python-build-system)
6057 (arguments
6058 '(#:phases
6059 (modify-phases %standard-phases
6060 (replace 'check
6061 (lambda _
6062 (zero?
6063 (system* "python" "mpmath/tests/runtests.py" "-local")))))))
6064 (home-page "http://mpmath.org")
6065 (synopsis "Arbitrary-precision floating-point arithmetic in python")
6066 (description
6067 "@code{mpmath} can be used as an arbitrary-precision substitute for
6068 Python's float/complex types and math/cmath modules, but also does much
6069 more advanced mathematics.")
6070 (license license:bsd-3)))
6071
6072 (define-public python2-mpmath
6073 (package-with-python2 python-mpmath))
6074
6075 (define-public python-sympy
6076 (package
6077 (name "python-sympy")
6078 (version "1.0")
6079 (source
6080 (origin
6081 (method url-fetch)
6082 (uri (string-append
6083 "https://github.com/sympy/sympy/releases/download/sympy-"
6084 version "/sympy-" version ".tar.gz"))
6085 (sha256
6086 (base32 "1bpzjwr9hrr7w88v4vgnj9lr6vxcldc94si13n8xpr1rv08d5b1y"))))
6087 (build-system python-build-system)
6088 (propagated-inputs
6089 `(("python-mpmath" ,python-mpmath)))
6090 (home-page "http://www.sympy.org/")
6091 (synopsis "Python library for symbolic mathematics")
6092 (description
6093 "SymPy is a Python library for symbolic mathematics. It aims to become a
6094 full-featured computer algebra system (CAS) while keeping the code as simple
6095 as possible in order to be comprehensible and easily extensible.")
6096 (license license:bsd-3)))
6097
6098 (define-public python2-sympy
6099 (package-with-python2 python-sympy))
6100
6101 (define-public python-q
6102 (package
6103 (name "python-q")
6104 (version "2.6")
6105 (source
6106 (origin
6107 (method url-fetch)
6108 (uri (pypi-uri "q" version))
6109 (sha256
6110 (base32
6111 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
6112 (build-system python-build-system)
6113 (home-page "https://github.com/zestyping/q")
6114 (synopsis "Quick-and-dirty debugging output for tired programmers")
6115 (description
6116 "q is a Python module for \"print\" style of debugging Python code. It
6117 provides convenient short API for print out of values, tracebacks, and
6118 falling into the Python interpreter.")
6119 (license license:asl2.0)))
6120
6121 (define-public python2-q
6122 (package-with-python2 python-q))
6123
6124 (define-public python-testlib
6125 (package
6126 (name "python-testlib")
6127 (version "0.6.5")
6128 (source
6129 (origin
6130 (method url-fetch)
6131 (uri (string-append
6132 "https://pypi.python.org/packages/source/t/testlib/testlib-"
6133 version ".zip"))
6134 (sha256
6135 (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
6136 (build-system python-build-system)
6137 (native-inputs
6138 `(("unzip" ,unzip))) ; for unpacking the source
6139 (synopsis "Python micro test suite harness")
6140 (description "A micro unittest suite harness for Python.")
6141 (home-page "https://github.com/trentm/testlib")
6142 (license license:expat)))
6143
6144 (define-public python2-testlib
6145 (package-with-python2 python-testlib))
6146
6147 (define-public python2-xlib
6148 (package
6149 (name "python2-xlib")
6150 (version "0.14")
6151 (source (origin
6152 (method url-fetch)
6153 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
6154 "/" version "/"
6155 "python-xlib-" version ".tar.gz"))
6156 (sha256
6157 (base32
6158 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
6159 (build-system python-build-system)
6160 (arguments
6161 `(#:python ,python-2 ;Python 2 only
6162 #:tests? #f)) ;no tests
6163 (home-page "http://python-xlib.sourceforge.net/")
6164 (synopsis "Python X11 client library")
6165 (description
6166 "The Python X Library is intended to be a fully functional X client
6167 library for Python programs. It is useful to implement low-level X clients.
6168 It is written entirely in Python.")
6169 (license license:gpl2+)))
6170
6171 (define-public python-singledispatch
6172 (package
6173 (name "python-singledispatch")
6174 (version "3.4.0.3")
6175 (source
6176 (origin
6177 (method url-fetch)
6178 (uri (pypi-uri "singledispatch" version))
6179 (sha256
6180 (base32
6181 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
6182 (build-system python-build-system)
6183 (native-inputs
6184 `(("python-six" ,python-six))) ; required for conversion, not at run-time
6185 (home-page
6186 "http://docs.python.org/3/library/functools.html#functools.singledispatch")
6187 (synopsis "Backport of singledispatch feature from Python 3.4")
6188 (description
6189 "This library brings functools.singledispatch from Python 3.4 to Python
6190 2.6-3.3.")
6191 (license license:expat)))
6192
6193 (define-public python2-singledispatch
6194 (package-with-python2 python-singledispatch))
6195
6196 (define-public python-tornado
6197 (package
6198 (name "python-tornado")
6199 (version "4.5.1")
6200 (source
6201 (origin
6202 (method url-fetch)
6203 (uri (pypi-uri "tornado" version))
6204 (sha256
6205 (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
6206 (build-system python-build-system)
6207 (arguments
6208 '(;; FIXME: Two tests error out with:
6209 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
6210 ;; #:phases
6211 ;; (modify-phases %standard-phases
6212 ;; (replace 'check
6213 ;; (lambda _
6214 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
6215 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
6216 ;; (zero? (system* "python" "-m" "tornado.test")))))
6217 #:tests? #f))
6218 (native-inputs
6219 `(("python-certifi" ,python-certifi)))
6220 (propagated-inputs
6221 `(("python-backports-abc" ,python-backports-abc)))
6222 (home-page "http://www.tornadoweb.org/")
6223 (synopsis "Python web framework and asynchronous networking library")
6224 (description
6225 "Tornado is a Python web framework and asynchronous networking library,
6226 originally developed at FriendFeed. By using non-blocking network I/O,
6227 Tornado can scale to tens of thousands of open connections, making it ideal
6228 for long polling, WebSockets, and other applications that require a long-lived
6229 connection to each user.")
6230 (license license:asl2.0)
6231 (properties `((python2-variant . ,(delay python2-tornado))))))
6232
6233 (define-public python2-tornado
6234 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
6235 (package (inherit tornado)
6236 (propagated-inputs
6237 `(("python2-backport-ssl-match-hostname"
6238 ,python2-backport-ssl-match-hostname)
6239 ("python2-singledispatch" ,python2-singledispatch)
6240 ,@(package-propagated-inputs tornado))))))
6241
6242 ;; the python- version can be removed with python-3.5
6243 (define-public python-backports-abc
6244 (package
6245 (name "python-backports-abc")
6246 (version "0.5")
6247 (source
6248 (origin
6249 (method url-fetch)
6250 (uri (pypi-uri "backports_abc" version))
6251 (sha256
6252 (base32
6253 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
6254 (build-system python-build-system)
6255 (home-page "https://github.com/cython/backports_abc")
6256 (synopsis "Backport of additions to the 'collections.abc' module")
6257 (description
6258 "Python-backports-abc provides a backport of additions to the
6259 'collections.abc' module in Python-3.5.")
6260 (license license:psfl)))
6261
6262 (define-public python2-backports-abc
6263 (package-with-python2 python-backports-abc))
6264
6265 (define-public python2-backports-shutil-get-terminal-size
6266 (package
6267 (name "python2-backports-shutil-get-terminal-size")
6268 (version "1.0.0")
6269 (source
6270 (origin
6271 (method url-fetch)
6272 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
6273 (sha256
6274 (base32
6275 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
6276 (build-system python-build-system)
6277 (arguments
6278 `(#:python ,python-2
6279 #:phases
6280 (modify-phases %standard-phases
6281 (replace 'check
6282 (lambda _
6283 (zero? (system* "py.test" "-v")))))))
6284 (native-inputs
6285 `(("python2-pytest" ,python2-pytest)))
6286 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
6287 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
6288 (description
6289 "This package provides a backport of the @code{get_terminal_size
6290 function} from Python 3.3's @code{shutil}.
6291 Unlike the original version it is written in pure Python rather than C,
6292 so it might be a tiny bit slower.")
6293 (license license:expat)))
6294
6295 (define-public python-waf
6296 (package
6297 (name "python-waf")
6298 (version "1.9.8")
6299 (source (origin
6300 (method url-fetch)
6301 (uri (string-append "https://waf.io/"
6302 "waf-" version ".tar.bz2"))
6303 (sha256
6304 (base32
6305 "0wl4cnmp06lfxqjxaan58bqxn27smhydz0sg5prrfbl3bsw4gv6q"))))
6306 (build-system python-build-system)
6307 (arguments
6308 '(#:phases
6309 (modify-phases %standard-phases
6310 (replace 'build
6311 (lambda _
6312 (zero? (system* "python" "waf-light" "configure" "build"))))
6313 (replace 'check
6314 (lambda _
6315 (zero? (system* "python" "waf" "--version"))))
6316 (replace 'install
6317 (lambda _
6318 (copy-file "waf" %output))))))
6319 (home-page "https://waf.io/")
6320 (synopsis "Python-based build system")
6321 (description
6322 "Waf is a Python-based framework for configuring, compiling and installing
6323 applications.")
6324 (license license:bsd-3)))
6325
6326 (define-public python2-waf
6327 (package-with-python2 python-waf))
6328
6329 (define-public python-pyzmq
6330 (package
6331 (name "python-pyzmq")
6332 (version "15.1.0")
6333 (source
6334 (origin
6335 (method url-fetch)
6336 (uri (pypi-uri "pyzmq" version))
6337 (sha256
6338 (base32 "13fhwnlvsvxv72kfhqbpn6qi7msh8mc8377mpabv32skk2cjfnxx"))))
6339 (build-system python-build-system)
6340 (arguments
6341 `(#:configure-flags
6342 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
6343 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
6344 ;; --inplace' for 'python setup.py test' to work.
6345 #:tests? #f))
6346 (inputs
6347 `(("zeromq" ,zeromq)))
6348 (native-inputs
6349 `(("pkg-config" ,pkg-config)
6350 ("python-nose" ,python-nose)))
6351 (home-page "https://github.com/zeromq/pyzmq")
6352 (synopsis "Python bindings for 0MQ")
6353 (description
6354 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
6355 (license license:bsd-4)))
6356
6357 (define-public python2-pyzmq
6358 (package-with-python2 python-pyzmq))
6359
6360 (define-public python-pep8
6361 (package
6362 (name "python-pep8")
6363 (version "1.7.0")
6364 (source
6365 (origin
6366 (method url-fetch)
6367 (uri (pypi-uri "pep8" version))
6368 (sha256
6369 (base32
6370 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))))
6371 (build-system python-build-system)
6372 (home-page "http://pep8.readthedocs.org/")
6373 (synopsis "Python style guide checker")
6374 (description
6375 "This tools checks Python code against some of the style conventions in
6376 PEP 8.")
6377 (license license:expat)))
6378
6379 (define-public python2-pep8
6380 (package-with-python2 python-pep8))
6381
6382 (define-public python-pyflakes
6383 (package
6384 (name "python-pyflakes")
6385 (version "1.0.0")
6386 (source
6387 (origin
6388 (method url-fetch)
6389 (uri (pypi-uri "pyflakes" version))
6390 (sha256
6391 (base32
6392 "0qs2sgqszq7wcplis8509wk2ygqcrwzbs1ghfj3svvivq2j377pk"))))
6393 (build-system python-build-system)
6394 (home-page
6395 "https://github.com/pyflakes/pyflakes")
6396 (synopsis "Passive checker of Python programs")
6397 (description
6398 "Pyflakes statically checks Python source code for common errors.")
6399 (license license:expat)))
6400
6401 (define-public python2-pyflakes
6402 (package-with-python2 python-pyflakes))
6403
6404 (define-public python-mccabe
6405 (package
6406 (name "python-mccabe")
6407 (version "0.4.0")
6408 (source
6409 (origin
6410 (method url-fetch)
6411 (uri (pypi-uri "mccabe" version))
6412 (sha256
6413 (base32
6414 "0yr08a36h8lqlif10l4xcikbbig7q8f41gqywir7rrvnv3mi4aws"))))
6415 (build-system python-build-system)
6416 (native-inputs
6417 `(("python-pytest" ,python-pytest)
6418 ("python-pytest-runner" ,python-pytest-runner)))
6419 (home-page "https://github.com/flintwork/mccabe")
6420 (synopsis "McCabe checker, plugin for flake8")
6421 (description
6422 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
6423 complexity of Python source code.")
6424 (license license:expat)))
6425
6426 (define-public python2-mccabe
6427 (package-with-python2 python-mccabe))
6428
6429 (define-public python-mccabe-0.2.1
6430 (package (inherit python-mccabe)
6431 (version "0.2.1")
6432 (source
6433 (origin
6434 (method url-fetch)
6435 (uri (pypi-uri "mccabe" version))
6436 (sha256
6437 (base32
6438 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
6439
6440 (define-public python2-mccabe-0.2.1
6441 (package-with-python2 python-mccabe-0.2.1))
6442
6443 ;; Flake8 2.4.1 requires an older version of pep8.
6444 ;; This should be removed ASAP.
6445 (define-public python-pep8-1.5.7
6446 (package (inherit python-pep8)
6447 (version "1.5.7")
6448 (source
6449 (origin
6450 (method url-fetch)
6451 (uri (string-append
6452 "https://pypi.python.org/packages/source/p/pep8/pep8-"
6453 version
6454 ".tar.gz"))
6455 (sha256
6456 (base32
6457 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
6458 (arguments
6459 ;; XXX Tests not compatible with Python 3.5.
6460 '(#:tests? #f))))
6461
6462 (define-public python2-pep8-1.5.7
6463 (package-with-python2 python-pep8-1.5.7))
6464
6465 ;; Flake8 2.4.1 requires an older version of pyflakes.
6466 ;; This should be removed ASAP.
6467 (define-public python-pyflakes-0.8.1
6468 (package (inherit python-pyflakes)
6469 (version "0.8.1")
6470 (source
6471 (origin
6472 (method url-fetch)
6473 (uri (string-append
6474 "https://pypi.python.org/packages/source/p/pyflakes/pyflakes-"
6475 version
6476 ".tar.gz"))
6477 (sha256
6478 (base32
6479 "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
6480 (arguments
6481 ;; XXX Tests not compatible with Python 3.5.
6482 '(#:tests? #f))))
6483
6484 (define-public python2-pyflakes-0.8.1
6485 (package-with-python2 python-pyflakes-0.8.1))
6486
6487 (define-public python-flake8
6488 (package
6489 (name "python-flake8")
6490 (version "2.5.4")
6491 (source
6492 (origin
6493 (method url-fetch)
6494 (uri (pypi-uri "flake8" version))
6495 (sha256
6496 (base32
6497 "0bs9cz4fr99r2rwig1b8jwaadl1nan7kgpdzqwj0bwbckwbmh7nc"))
6498 (modules '((guix build utils)))
6499 (snippet
6500 '(begin
6501 ;; Remove pre-compiled .pyc files from source.
6502 (for-each delete-file-recursively
6503 (find-files "." "__pycache__" #:directories? #t))
6504 (for-each delete-file (find-files "." "\\.pyc$"))
6505 #t))))
6506 (build-system python-build-system)
6507 (propagated-inputs
6508 `(("python-pep8" ,python-pep8)
6509 ("python-pyflakes" ,python-pyflakes)
6510 ("python-mccabe" ,python-mccabe)))
6511 (native-inputs
6512 `(("python-mock" ,python-mock) ; TODO: only required for < 3.3
6513 ("python-nose" ,python-nose)))
6514 (home-page "https://gitlab.com/pycqa/flake8")
6515 (synopsis
6516 "The modular source code checker: pep8, pyflakes and co")
6517 (description
6518 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
6519 (license license:expat)))
6520
6521 (define-public python2-flake8
6522 (package-with-python2 python-flake8))
6523
6524 ;; This will only be needed by the python-hacking package and will not be
6525 ;; necessary once python-hacking > 0.10.2 is released.
6526 (define-public python-flake8-2.2.4
6527 (package (inherit python-flake8)
6528 (propagated-inputs
6529 `(("python-pep8" ,python-pep8-1.5.7)
6530 ("python-pyflakes" ,python-pyflakes-0.8.1)
6531 ("python-mccabe" ,python-mccabe-0.2.1)))
6532 (native-inputs
6533 `(("python-mock" ,python-mock)
6534 ("python-nose" ,python-nose)))
6535 (version "2.2.4")
6536 (source
6537 (origin
6538 (method url-fetch)
6539 (uri (pypi-uri "flake8" version))
6540 (sha256
6541 (base32
6542 "1r9wsry4va45h1rck5hxd3vzsg2q3y6lnl6pym1bxvz8ry19jwx8"))
6543 (modules '((guix build utils)))
6544 (snippet
6545 '(begin
6546 ;; Remove pre-compiled .pyc files from source.
6547 (for-each delete-file-recursively
6548 (find-files "." "__pycache__" #:directories? #t))
6549 (for-each delete-file (find-files "." "\\.pyc$"))
6550 #t))))
6551 (arguments
6552 ;; XXX Fails with Python 3.5.
6553 '(#:tests? #f))))
6554
6555 (define-public python2-flake8-2.2.4
6556 (package-with-python2 python-flake8-2.2.4))
6557
6558 (define-public python-flake8-polyfill
6559 (package
6560 (name "python-flake8-polyfill")
6561 (version "1.0.1")
6562 (source
6563 (origin
6564 (method url-fetch)
6565 (uri (pypi-uri "flake8-polyfill" version))
6566 (sha256
6567 (base32
6568 "02gn2wxvh9vnf7m7dld7ca4l60mg5c370hv3swwppkngwaqmcw67"))))
6569 (build-system python-build-system)
6570 (arguments
6571 '(#:phases
6572 (modify-phases %standard-phases
6573 (replace 'check
6574 (lambda _
6575 (setenv "PYTHONPATH"
6576 (string-append (getcwd) "/build/lib:"
6577 (getenv "PYTHONPATH")))
6578 (zero? (system* "py.test" "-v")))))))
6579 (native-inputs
6580 `(("python-flake8" ,python-flake8)
6581 ("python-mock" ,python-mock)
6582 ("python-pycodestyle" ,python-pycodestyle)
6583 ("python-pytest" ,python-pytest)))
6584 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
6585 (synopsis "Polyfill package for Flake8 plugins")
6586 (description
6587 "This package that provides some compatibility helpers for Flake8
6588 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
6589 (license license:expat)))
6590
6591 (define-public python2-flake8-polyfill
6592 (package-with-python2 python-flake8-polyfill))
6593
6594 (define-public python-mistune
6595 (package
6596 (name "python-mistune")
6597 (version "0.7.3")
6598 (source
6599 (origin
6600 (method url-fetch)
6601 (uri (pypi-uri "mistune" version))
6602 (sha256
6603 (base32
6604 "04xpk1zvslhq3xpnf01g3ag0dy9wfv4z28p093r8k49vvxlyil11"))))
6605 (build-system python-build-system)
6606 (native-inputs
6607 `(("python-nose" ,python-nose)
6608 ("python-cython" ,python-cython)))
6609 (home-page "https://github.com/lepture/mistune")
6610 (synopsis "Markdown parser in pure Python")
6611 (description "This package provides a fast markdown parser in pure
6612 Python.")
6613 (license license:bsd-3)))
6614
6615 (define-public python2-mistune
6616 (package-with-python2 python-mistune))
6617
6618 (define-public python-markdown
6619 (package
6620 (name "python-markdown")
6621 (version "2.6.8")
6622 (source
6623 (origin
6624 (method url-fetch)
6625 (uri (pypi-uri "Markdown" version))
6626 (sha256
6627 (base32
6628 "0cqfhr1km2s5d8jm6hbwgkrrj9hvkjf2gab3s2axlrw1clgaij0a"))))
6629 (build-system python-build-system)
6630 (arguments
6631 `(#:phases
6632 (modify-phases %standard-phases
6633 (replace 'check
6634 (lambda _
6635 (zero? (system* "python" "run-tests.py")))))))
6636 (native-inputs
6637 `(("python-nose" ,python-nose)
6638 ("python-pyyaml" ,python-pyyaml)))
6639 (home-page "https://pythonhosted.org/Markdown/")
6640 (synopsis "Python implementation of Markdown")
6641 (description
6642 "This package provides a Python implementation of John Gruber's
6643 Markdown. The library features international input, various Markdown
6644 extensions, and several HTML output formats. A command line wrapper
6645 markdown_py is also provided to convert Markdown files to HTML.")
6646 (license license:bsd-3)))
6647
6648 (define-public python2-markdown
6649 (package-with-python2 python-markdown))
6650
6651 (define-public python-ptyprocess
6652 (package
6653 (name "python-ptyprocess")
6654 (version "0.5.1")
6655 (source
6656 (origin
6657 (method url-fetch)
6658 (uri (string-append
6659 "https://pypi.python.org/packages/source/p/ptyprocess/ptyprocess-"
6660 version ".tar.gz"))
6661 (sha256
6662 (base32
6663 "19l1xrjn4l9gjz01s3vg92gn2dd9d8mw1v86ppkzlnr9m5iwwc05"))))
6664 (build-system python-build-system)
6665 (native-inputs
6666 `(("python-nose" ,python-nose)))
6667 (arguments
6668 `(#:phases
6669 (modify-phases %standard-phases
6670 (replace 'check
6671 (lambda _
6672 (zero? (system* "nosetests")))))))
6673 (home-page "https://github.com/pexpect/ptyprocess")
6674 (synopsis "Run a subprocess in a pseudo terminal")
6675 (description
6676 "This package provides a Python library used to launch a subprocess in a
6677 pseudo terminal (pty), and interact with both the process and its pty.")
6678 (license license:isc)))
6679
6680 (define-public python2-ptyprocess
6681 (package-with-python2 python-ptyprocess))
6682
6683 (define-public python-cram
6684 (package
6685 (name "python-cram")
6686 (version "0.7")
6687 (home-page "https://bitheap.org/cram/")
6688 (source (origin
6689 (method url-fetch)
6690 (uri (list (string-append home-page "cram-"
6691 version ".tar.gz")
6692 (pypi-uri "cram" version)))
6693 (sha256
6694 (base32
6695 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
6696 (arguments
6697 '(#:phases
6698 (modify-phases %standard-phases
6699 (add-after 'unpack 'patch-source
6700 (lambda _
6701 (substitute* (find-files "cram" ".*\\.py$")
6702 ;; Replace default shell path.
6703 (("/bin/sh") (which "sh")))
6704 (substitute* (find-files "tests" ".*\\.t$")
6705 (("md5") "md5sum")
6706 (("/bin/bash") (which "bash"))
6707 (("/bin/sh") (which "sh")))
6708 (substitute* "cram/_test.py"
6709 ;; This hack works around a bug triggered by substituting
6710 ;; the /bin/sh paths. "tests/usage.t" compares the output of
6711 ;; "cram -h", which breaks the output at 80 characters. This
6712 ;; causes the line showing the default shell to break into two
6713 ;; lines, but the test expects a single line...
6714 (("env\\['COLUMNS'\\] = '80'")
6715 "env['COLUMNS'] = '160'"))
6716 #t))
6717 (delete 'check)
6718 (add-after 'install 'check
6719 ;; The test phase uses the built library and executable.
6720 ;; It's easier to run it after install since the build
6721 ;; directory contains version-specific PATH.
6722 (lambda* (#:key inputs outputs #:allow-other-keys)
6723 (add-installed-pythonpath inputs outputs)
6724 (setenv "PATH" (string-append (getenv "PATH") ":"
6725 (assoc-ref outputs "out") "/bin"))
6726 (zero? (system* "make" "test")))))))
6727 (build-system python-build-system)
6728 (native-inputs
6729 `(("python-coverage" ,python-coverage)
6730 ("which" ,which)))
6731 (synopsis "Simple testing framework for command line applications")
6732 (description
6733 "Cram is a functional testing framework for command line applications.
6734 Cram tests look like snippets of interactive shell sessions. Cram runs each
6735 command and compares the command output in the test with the command’s actual
6736 output.")
6737 (license license:gpl2+)))
6738
6739 (define-public python2-cram
6740 (package-with-python2 python-cram))
6741
6742 (define-public python-terminado
6743 (package
6744 (name "python-terminado")
6745 (version "0.6")
6746 (source
6747 (origin
6748 (method url-fetch)
6749 (uri (pypi-uri "terminado" version))
6750 (sha256
6751 (base32
6752 "09h1kwi86g5mrk14s4pgbhshd602zry29lnpxamcqz864kva22rc"))))
6753 (build-system python-build-system)
6754 (propagated-inputs
6755 `(("python-tornado" ,python-tornado)
6756 ("python-ptyprocess" ,python-ptyprocess)))
6757 (native-inputs
6758 `(("python-nose" ,python-nose)))
6759 (arguments
6760 `(#:phases
6761 (modify-phases %standard-phases
6762 (replace 'check
6763 (lambda _
6764 (zero? (system* "nosetests")))))))
6765 (home-page "https://github.com/takluyver/terminado")
6766 (synopsis "Terminals served to term.js using Tornado websockets")
6767 (description "This package provides a Tornado websocket backend for the
6768 term.js Javascript terminal emulator library.")
6769 (license license:bsd-2)
6770 (properties `((python2-variant . ,(delay python2-terminado))))))
6771
6772 (define-public python2-terminado
6773 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
6774 (package (inherit terminado)
6775 (propagated-inputs
6776 `(("python2-backport-ssl-match-hostname"
6777 ,python2-backport-ssl-match-hostname)
6778 ,@(package-propagated-inputs terminado))))))
6779
6780 (define-public python-straight-plugin
6781 (package
6782 (name "python-straight-plugin")
6783 (version "1.4.1")
6784 (source
6785 (origin
6786 (method url-fetch)
6787 (uri (pypi-uri "straight.plugin" version))
6788 (sha256
6789 (base32
6790 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
6791 (build-system python-build-system)
6792 (home-page "https://github.com/ironfroggy/straight.plugin")
6793 (synopsis "Simple namespaced plugin facility")
6794 (description "Straight Plugin provides a type of plugin you can create from
6795 almost any existing Python modules, and an easy way for outside developers to
6796 add functionality and customization to your projects with their own plugins.")
6797 (license license:expat)))
6798
6799 (define-public python2-straight-plugin
6800 (package-with-python2 python-straight-plugin))
6801
6802 (define-public python-fonttools
6803 (package
6804 (name "python-fonttools")
6805 (version "2.5")
6806 (source (origin
6807 (method url-fetch)
6808 (uri (string-append
6809 "https://pypi.python.org/packages/source/F/FontTools/"
6810 "fonttools-" version ".tar.gz"))
6811 (sha256
6812 (base32
6813 "08ay3x4ijarwhl60gqx2i9jzq6pxs20p4snc2d1q5jagh4rn39lb"))))
6814 (build-system python-build-system)
6815 (arguments
6816 '(#:test-target "check"
6817 #:phases
6818 (modify-phases %standard-phases
6819 (add-after 'unpack 'patch-setuppy
6820 ;; Remove the undocumented "extra_path" argument, which adds an
6821 ;; intervening directories between site-packages and the package
6822 ;; directory.
6823 (lambda _
6824 (substitute* "setup.py"
6825 (("^[ \t]*extra_path *= *'FontTools',") ""))
6826 #t)))))
6827 (home-page "https://github.com/behdad/fonttools")
6828 (synopsis "Tools to manipulate font files")
6829 (description
6830 "FontTools/TTX is a library to manipulate font files from Python. It
6831 supports reading and writing of TrueType/OpenType fonts, reading and writing
6832 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
6833 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
6834 from an XML-based format.")
6835 (license (license:non-copyleft
6836 "file://LICENSE.txt"
6837 "See LICENSE.txt in the distribution."))))
6838
6839 (define-public python2-fonttools
6840 (package-with-python2 python-fonttools))
6841
6842 (define-public python-ly
6843 (package
6844 (name "python-ly")
6845 (version "0.9.4")
6846 (source
6847 (origin
6848 (method url-fetch)
6849 (uri (string-append "https://pypi.python.org/packages/57/4f/"
6850 "889579244947368f28eda66b782331b1e75f83fd72e63f9ece93cd7a18f9"
6851 "/python-ly-" version ".tar.gz"))
6852 (sha256
6853 (base32
6854 "0g6n288l83sfwavxh1aryi0aqvsr3sp7v6f903mckwqa4scpky62"))))
6855 (build-system python-build-system)
6856 (arguments
6857 ;; FIXME: Some tests need network access.
6858 '(#:tests? #f))
6859 (synopsis "Tool and library for manipulating LilyPond files")
6860 (description "This package provides a Python library to parse, manipulate
6861 or create documents in LilyPond format. A command line program ly is also
6862 provided that can be used to do various manipulations with LilyPond files.")
6863 (home-page "https://pypi.python.org/pypi/python-ly")
6864 (license license:gpl2+)))
6865
6866 (define-public python-appdirs
6867 (package
6868 (name "python-appdirs")
6869 (version "1.4.3")
6870 (source
6871 (origin
6872 (method url-fetch)
6873 (uri (pypi-uri "appdirs" version))
6874 (sha256
6875 (base32
6876 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
6877 (build-system python-build-system)
6878 (home-page "https://github.com/ActiveState/appdirs")
6879 (synopsis
6880 "Determine platform-specific dirs, e.g. a \"user data dir\"")
6881 (description
6882 "This module provides a portable way of finding out where user data
6883 should be stored on various operating systems.")
6884 (license license:expat)))
6885
6886 (define-public python2-appdirs
6887 (package-with-python2 python-appdirs))
6888
6889 (define-public python-llfuse
6890 (package
6891 (name "python-llfuse")
6892 (version "1.2")
6893 (source (origin
6894 (method url-fetch)
6895 (uri (string-append
6896 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
6897 "llfuse-" version ".tar.bz2"))
6898 (sha256
6899 (base32
6900 "11hms1x68bf1bqbqy7w3wpffqsd3jkgricmzrc1hrnwkswfzzlr4"))))
6901 (build-system python-build-system)
6902 (inputs
6903 `(("fuse" ,fuse)
6904 ("attr" ,attr)))
6905 (native-inputs
6906 `(("pkg-config" ,pkg-config)))
6907 (synopsis "Python bindings for FUSE")
6908 (description
6909 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
6910 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
6911 (license license:lgpl2.0+)
6912 (properties `((python2-variant . ,(delay python2-llfuse))))))
6913
6914 (define-public python2-llfuse
6915 (package (inherit (package-with-python2
6916 (strip-python2-variant python-llfuse)))
6917 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
6918
6919 ;; For attic-0.16
6920 (define-public python-llfuse-0.41
6921 (package (inherit python-llfuse)
6922 (version "0.41.1")
6923 (source (origin
6924 (method url-fetch)
6925 (uri (string-append
6926 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
6927 "llfuse-" version ".tar.bz2"))
6928 (sha256
6929 (base32
6930 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
6931 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
6932 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
6933 (license (list license:expat license:lgpl2.0+))))
6934
6935 (define-public python-msgpack
6936 (package
6937 (name "python-msgpack")
6938 (version "0.4.8")
6939 (source (origin
6940 (method url-fetch)
6941 (uri (pypi-uri "msgpack-python" version))
6942 (sha256
6943 (base32
6944 "11pqk5braa6wndpnr1dhg64js82vjgxnm0lzy73rwl831zgijaqs"))))
6945 (build-system python-build-system)
6946 (synopsis "MessagePack (de)serializer")
6947 (description "MessagePack is a fast, compact binary serialization format,
6948 suitable for similar data to JSON. This package provides CPython bindings for
6949 reading and writing MessagePack data.")
6950 (home-page "https://pypi.python.org/pypi/msgpack-python/")
6951 (license license:asl2.0)))
6952
6953 (define-public python2-msgpack
6954 (package-with-python2 python-msgpack))
6955
6956 (define-public python-netaddr
6957 (package
6958 (name "python-netaddr")
6959 (version "0.7.18")
6960 (source
6961 (origin
6962 (method url-fetch)
6963 (uri (string-append
6964 "https://pypi.python.org/packages/source/n/netaddr/netaddr-"
6965 version
6966 ".tar.gz"))
6967 (sha256
6968 (base32
6969 "06dxjlbcicq7q3vqy8agq11ra01kvvd47j4mk6dmghjsyzyckxd1"))))
6970 (build-system python-build-system)
6971 (arguments `(#:tests? #f)) ;; No tests.
6972 (home-page "https://github.com/drkjam/netaddr/")
6973 (synopsis "Pythonic manipulation of network addresses")
6974 (description
6975 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6976 and MAC network addresses.")
6977 (license license:bsd-3)))
6978
6979 (define-public python2-netaddr
6980 (package-with-python2 python-netaddr))
6981
6982 (define-public python-wrapt
6983 (package
6984 (name "python-wrapt")
6985 (version "1.10.8")
6986 (source
6987 (origin
6988 (method url-fetch)
6989 (uri (pypi-uri "wrapt" version))
6990 (sha256
6991 (base32
6992 "0wrcm1mydvfivbkzz0h81ygzdchnscshi6xvy5n3r21r9s0px8af"))))
6993 (build-system python-build-system)
6994 (arguments
6995 ;; Tests are not included in the tarball, they are only available in the
6996 ;; git repository.
6997 `(#:tests? #f))
6998 (home-page "https://github.com/GrahamDumpleton/wrapt")
6999 (synopsis "Module for decorators, wrappers and monkey patching")
7000 (description
7001 "The aim of the wrapt module is to provide a transparent object proxy for
7002 Python, which can be used as the basis for the construction of function
7003 wrappers and decorator functions.")
7004 (license license:bsd-2)))
7005
7006 (define-public python2-wrapt
7007 (package-with-python2 python-wrapt))
7008
7009 (define-public python-iso8601
7010 (package
7011 (name "python-iso8601")
7012 (version "0.1.11")
7013 (source
7014 (origin
7015 (method url-fetch)
7016 (uri (pypi-uri "iso8601" version))
7017 (sha256
7018 (base32
7019 "0c7gh3lsdjds262h0v1sqc66l7hqgfwbakn96qrhdbl0i3vm5yz8"))))
7020 (build-system python-build-system)
7021 (native-inputs
7022 `(("python-pytest" ,python-pytest)))
7023 (home-page "https://bitbucket.org/micktwomey/pyiso8601")
7024 (synopsis "Module to parse ISO 8601 dates")
7025 (description
7026 "This module parses the most common forms of ISO 8601 date strings (e.g.
7027 @code{2007-01-14T20:34:22+00:00}) into @code{datetime} objects.")
7028 (license license:expat)))
7029
7030 (define-public python2-iso8601
7031 (package-with-python2 python-iso8601))
7032
7033 (define-public python-monotonic
7034 (package
7035 (name "python-monotonic")
7036 (version "0.3")
7037 (source
7038 (origin
7039 (method url-fetch)
7040 (uri (string-append
7041 "https://pypi.python.org/packages/source/m/monotonic/monotonic-"
7042 version
7043 ".tar.gz"))
7044 (sha256
7045 (base32
7046 "0yz0bcbwx8r2c01czzfpbrxddynxyk9k95jj8h6sgcb7xmfvl998"))))
7047 (build-system python-build-system)
7048 (home-page "https://github.com/atdt/monotonic")
7049 (synopsis "Implementation of time.monotonic() for Python 2 & < 3.3")
7050 (description
7051 "This module provides a monotonic() function which returns the value (in
7052 fractional seconds) of a clock which never goes backwards.")
7053 (license license:asl2.0)))
7054
7055 (define-public python2-monotonic
7056 (package-with-python2 python-monotonic))
7057
7058 (define-public python-webob
7059 (package
7060 (name "python-webob")
7061 (version "1.5.1")
7062 (source
7063 (origin
7064 (method url-fetch)
7065 (uri (pypi-uri "WebOb" version))
7066 (sha256
7067 (base32
7068 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
7069 (build-system python-build-system)
7070 (native-inputs
7071 `(("python-nose" ,python-nose)))
7072 (home-page "http://webob.org/")
7073 (synopsis "WSGI request and response object")
7074 (description
7075 "WebOb provides wrappers around the WSGI request environment, and an
7076 object to help create WSGI responses.")
7077 (license license:expat)))
7078
7079 (define-public python2-webob
7080 (package-with-python2 python-webob))
7081
7082 (define-public python-xlrd
7083 (package
7084 (name "python-xlrd")
7085 (version "1.0.0")
7086 (source (origin
7087 (method url-fetch)
7088 (uri (pypi-uri "xlrd" version))
7089 (sha256
7090 (base32
7091 "0s8hjiz01vbhy85xalrz0qlsmd9ypf36zjqrf97hh984spapvy0g"))))
7092 (build-system python-build-system)
7093 (arguments
7094 `(#:phases
7095 (modify-phases %standard-phases
7096 ;; Current test in setup.py does not work as of 1.0.0, so use nose to
7097 ;; run tests instead for now.
7098 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
7099 (native-inputs `(("python-nose" ,python-nose)))
7100 (home-page "http://www.python-excel.org/")
7101 (synopsis "Library for extracting data from Excel files")
7102 (description "This packages provides a library to extract data from
7103 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
7104 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
7105 Unicode-aware. It is not intended as an end-user tool.")
7106 (license license:bsd-3)))
7107
7108 (define-public python2-xlrd
7109 (package-with-python2 python-xlrd))
7110
7111 (define-public python-prettytable
7112 (package
7113 (name "python-prettytable")
7114 (version "0.7.2")
7115 (source
7116 (origin
7117 (method url-fetch)
7118 (uri (string-append
7119 "https://pypi.python.org/packages/source/P/PrettyTable/"
7120 "prettytable-" version ".tar.bz2"))
7121 (sha256
7122 (base32
7123 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
7124 (build-system python-build-system)
7125 (home-page "http://code.google.com/p/prettytable/")
7126 (synopsis "Display tabular data in an ASCII table format")
7127 (description
7128 "A library designed to represent tabular data in visually appealing ASCII
7129 tables. PrettyTable allows for selection of which columns are to be printed,
7130 independent alignment of columns (left or right justified or centred) and
7131 printing of sub-tables by specifying a row range.")
7132 (license license:bsd-3)))
7133
7134 (define-public python2-prettytable
7135 (package-with-python2 python-prettytable))
7136
7137 (define-public python-tables
7138 (package
7139 (name "python-tables")
7140 (version "3.2.2")
7141 (source
7142 (origin
7143 (method url-fetch)
7144 (uri (pypi-uri "tables" version))
7145 (sha256
7146 (base32
7147 "117s6w7s3yxafpmf3zz3svana7xfrsviw01va1xp7h8ylx8v6r1m"))
7148 (modules '((guix build utils)))
7149 (snippet
7150 '(begin
7151 ;; Remove pre-compiled .pyc files from source.
7152 (for-each delete-file-recursively
7153 (find-files "." "__pycache__" #:directories? #t))
7154 (for-each delete-file (find-files "." "\\.pyc$"))
7155 #t))))
7156 (build-system python-build-system)
7157 (arguments
7158 `(;; FIXME: python-build-system does not pass configure-flags to "build"
7159 ;; or "check", so we must override the build and check phases.
7160 #:phases
7161 (modify-phases %standard-phases
7162 (add-after 'unpack 'use-gcc
7163 (lambda _
7164 (substitute* "setup.py"
7165 (("compiler = new_compiler\\(\\)" line)
7166 (string-append line
7167 "\ncompiler.set_executables(compiler='gcc',"
7168 "compiler_so='gcc',"
7169 "linker_exe='gcc',"
7170 "linker_so='gcc -shared')")))
7171 #t))
7172 (replace 'build
7173 (lambda* (#:key inputs #:allow-other-keys)
7174 (zero? (system* "python" "setup.py" "build"
7175 (string-append "--hdf5="
7176 (assoc-ref inputs "hdf5"))))))
7177 (replace 'check
7178 (lambda* (#:key inputs #:allow-other-keys)
7179 (zero? (system* "python" "setup.py" "check"
7180 (string-append "--hdf5="
7181 (assoc-ref inputs "hdf5")))))))))
7182 (propagated-inputs
7183 `(("python-numexpr" ,python-numexpr)
7184 ("python-numpy" ,python-numpy)))
7185 (native-inputs
7186 `(("python-cython" ,python-cython)
7187 ("pkg-config" ,pkg-config)))
7188 (inputs
7189 `(("hdf5" ,hdf5)
7190 ("bzip2" ,bzip2)
7191 ("zlib" ,zlib)))
7192 (home-page "http://www.pytables.org/")
7193 (synopsis "Hierarchical datasets for Python")
7194 (description "PyTables is a package for managing hierarchical datasets and
7195 designed to efficiently cope with extremely large amounts of data.")
7196 (license license:bsd-3)))
7197
7198 (define-public python2-tables
7199 (package-with-python2 python-tables))
7200
7201 (define-public python-pyasn1
7202 (package
7203 (name "python-pyasn1")
7204 (version "0.2.3")
7205 (source
7206 (origin
7207 (method url-fetch)
7208 (uri (pypi-uri "pyasn1" version))
7209 (sha256
7210 (base32
7211 "1b86yx23c1x74clai05a5ma8c8nfmhlx3j1mxq0ff657i2ylx33k"))))
7212 (build-system python-build-system)
7213 (home-page "http://pyasn1.sourceforge.net/")
7214 (synopsis "ASN.1 types and codecs")
7215 (description
7216 "This is an implementation of ASN.1 types and codecs in Python. It is
7217 suitable for a wide range of protocols based on the ASN.1 specification.")
7218 (license license:bsd-2)))
7219
7220 (define-public python2-pyasn1
7221 (package-with-python2 python-pyasn1))
7222
7223 (define-public python-pyasn1-modules
7224 (package
7225 (name "python-pyasn1-modules")
7226 (version "0.0.8")
7227 (source
7228 (origin
7229 (method url-fetch)
7230 (uri (pypi-uri "pyasn1-modules" version))
7231 (sha256
7232 (base32
7233 "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh"))))
7234 (build-system python-build-system)
7235 (propagated-inputs
7236 `(("python-pyasn1" ,python-pyasn1)))
7237 (home-page "https://sourceforge.net/projects/pyasn1/")
7238 (synopsis "ASN.1 codec implementations")
7239 (description
7240 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
7241 implementations of ASN.1-based codecs and protocols.")
7242 (license license:bsd-3)))
7243
7244 (define-public python2-pyasn1-modules
7245 (package-with-python2 python-pyasn1-modules))
7246
7247 (define-public python-ipaddress
7248 (package
7249 (name "python-ipaddress")
7250 (version "1.0.18")
7251 (source (origin
7252 (method url-fetch)
7253 (uri (pypi-uri "ipaddress" version))
7254 (sha256
7255 (base32
7256 "1q8klj9d84cmxgz66073x1j35cplr3r77vx1znhxiwl5w74391ax"))))
7257 (build-system python-build-system)
7258 (home-page "https://github.com/phihag/ipaddress")
7259 (synopsis "IP address manipulation library")
7260 (description
7261 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
7262 in Python. This library is used to create, poke at, and manipulate IPv4 and
7263 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
7264 module to older versions of Python.")
7265 (license license:psfl)))
7266
7267 (define-public python2-ipaddress
7268 (package-with-python2 python-ipaddress))
7269
7270 (define-public python2-ipaddr
7271 (package
7272 (name "python2-ipaddr")
7273 (version "2.1.11")
7274 (source
7275 (origin
7276 (method url-fetch)
7277 (uri (pypi-uri "ipaddr" version))
7278 (sha256
7279 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
7280 (build-system python-build-system)
7281 (arguments
7282 `(#:python ,python-2 ;version 2 only
7283 #:phases
7284 (modify-phases %standard-phases
7285 (replace 'check
7286 (lambda* _
7287 (zero? (system* "python" "ipaddr_test.py")))))))
7288 (home-page "https://github.com/google/ipaddr-py")
7289 (synopsis "IP address manipulation library")
7290 (description
7291 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
7292 IPv6 addresses and networks.
7293
7294 For new implementations you may prefer to use the standard module
7295 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
7296 versions of Python.")
7297 (license license:asl2.0)))
7298
7299 (define-public python-idna
7300 (package
7301 (name "python-idna")
7302 (version "2.5")
7303 (source
7304 (origin
7305 (method url-fetch)
7306 (uri (pypi-uri "idna" version))
7307 (sha256
7308 (base32
7309 "1ara12a7k2zc69msa0arrvw00gn61a6i6by01xb3lkkc0h4cxd9w"))))
7310 (build-system python-build-system)
7311 (home-page "https://github.com/kjd/idna")
7312 (synopsis "Internationalized domain names in applications")
7313 (description
7314 "This is a library to support the Internationalised Domain Names in
7315 Applications (IDNA) protocol as specified in RFC 5891. This version of the
7316 protocol is often referred to as “IDNA2008” and can produce different results
7317 from the earlier standard from 2003. The library is also intended to act as a
7318 suitable drop-in replacement for the “encodings.idna” module that comes with
7319 the Python standard library but currently only supports the older 2003
7320 specification.")
7321 (license license:bsd-4)))
7322
7323 (define-public python2-idna
7324 (package-with-python2 python-idna))
7325
7326 (define-public python-pretend
7327 (package
7328 (name "python-pretend")
7329 (version "1.0.8")
7330 (source
7331 (origin
7332 (method url-fetch)
7333 (uri (string-append "https://pypi.python.org/packages/source/p/"
7334 "pretend/pretend-" version ".tar.gz"))
7335 (sha256
7336 (base32
7337 "0r5r7ygz9m6d2bklflbl84cqhjkc2q12xgis8268ygjh30g2q3wk"))))
7338 (build-system python-build-system)
7339 (home-page "https://github.com/alex/pretend")
7340 (synopsis "Library for stubbing in Python")
7341 (description
7342 "Pretend is a library to make stubbing with Python easier. Stubbing is a
7343 technique for writing tests. You may hear the term mixed up with mocks,
7344 fakes, or doubles. Basically, a stub is an object that returns pre-canned
7345 responses, rather than doing any computation.")
7346 (license license:bsd-3)))
7347
7348 (define-public python2-pretend
7349 (package-with-python2 python-pretend))
7350
7351 (define-public python-cryptography-vectors
7352 (package
7353 (name "python-cryptography-vectors")
7354 (version "1.8.2")
7355 (source
7356 (origin
7357 (method url-fetch)
7358 (uri (pypi-uri "cryptography_vectors" version))
7359 (sha256
7360 (base32
7361 "0hzvq0bfy21bc35p8z7zdxpv3hbvi7adg4axc1b5yd3hk16a1nh0"))))
7362 (build-system python-build-system)
7363 (home-page "https://github.com/pyca/cryptography")
7364 (synopsis "Test vectors for the cryptography package")
7365 (description
7366 "This package contains test vectors for the cryptography package.")
7367 ;; Distributed under either BSD-3 or ASL2.0
7368 (license (list license:bsd-3 license:asl2.0))))
7369
7370 (define-public python2-cryptography-vectors
7371 (package-with-python2 python-cryptography-vectors))
7372
7373 (define-public python-cryptography
7374 (package
7375 (name "python-cryptography")
7376 (version "1.8.2")
7377 (source
7378 (origin
7379 (method url-fetch)
7380 (uri (pypi-uri "cryptography" version))
7381 (sha256
7382 (base32
7383 "1nmy4fw3zy7rlvarkhn33g9905rwpy9z7k5kv8j80f0s6ynfp24f"))))
7384 (build-system python-build-system)
7385 (inputs
7386 `(("openssl" ,openssl)))
7387 (propagated-inputs
7388 `(("python-asn1crypto" ,python-asn1crypto)
7389 ("python-cffi" ,python-cffi)
7390 ("python-six" ,python-six)
7391 ("python-idna" ,python-idna)
7392 ;; Packaging is used to check the version of python-cffi in
7393 ;; 'src/cryptography/hazmat/primitives/ciphers/base.py'. We should be
7394 ;; able to remove this dependency in the next release of cryptography:
7395 ;; python-cryptography:
7396 ;; https://github.com/pyca/cryptography/commit/0417d00d9ff1e19bc3ab67d39bdd18e1674768c1
7397 ("python-packaging" ,python-packaging)
7398 ("python-iso8601" ,python-iso8601)))
7399 (native-inputs
7400 `(("python-cryptography-vectors" ,python-cryptography-vectors)
7401 ("python-hypothesis" ,python-hypothesis)
7402 ("python-pretend" ,python-pretend)
7403 ("python-pytz" ,python-pytz)
7404 ("python-pytest" ,python-pytest-3.0)))
7405 (home-page "https://github.com/pyca/cryptography")
7406 (synopsis "Cryptographic recipes and primitives for Python")
7407 (description
7408 "cryptography is a package which provides cryptographic recipes and
7409 primitives to Python developers. It aims to be the “cryptographic standard
7410 library” for Python. The package includes both high level recipes, and low
7411 level interfaces to common cryptographic algorithms such as symmetric ciphers,
7412 message digests and key derivation functions.")
7413 ;; Distributed under either BSD-3 or ASL2.0
7414 (license (list license:bsd-3 license:asl2.0))
7415 (properties `((python2-variant . ,(delay python2-cryptography))))))
7416
7417 (define-public python2-cryptography
7418 (let ((crypto (package-with-python2
7419 (strip-python2-variant python-cryptography))))
7420 (package (inherit crypto)
7421 (propagated-inputs
7422 `(("python2-ipaddress" ,python2-ipaddress)
7423 ("python2-backport-ssl-match-hostname"
7424 ,python2-backport-ssl-match-hostname)
7425 ("python2-enum34" ,python2-enum34)
7426 ,@(package-propagated-inputs crypto))))))
7427
7428 (define-public python-pyopenssl
7429 (package
7430 (name "python-pyopenssl")
7431 (version "17.0.0")
7432 (source
7433 (origin
7434 (method url-fetch)
7435 (uri (pypi-uri "pyOpenSSL" version))
7436 (sha256
7437 (base32
7438 "1pdg1gpmkzj8yasg6cmkhcivxcdp4c12nif88y4qvsxq5ffzxas8"))
7439 (patches
7440 (search-patches "python-pyopenssl-skip-network-test.patch"))))
7441 (build-system python-build-system)
7442 (arguments
7443 '(#:phases
7444 (modify-phases %standard-phases
7445 (delete 'check)
7446 (add-after 'install 'check
7447 (lambda* (#:key inputs outputs #:allow-other-keys)
7448 (add-installed-pythonpath inputs outputs)
7449 (zero? (system* "py.test" "-v")))))))
7450 (propagated-inputs
7451 `(("python-cryptography" ,python-cryptography)
7452 ("python-six" ,python-six)))
7453 (inputs
7454 `(("openssl" ,openssl)))
7455 (native-inputs
7456 `(("python-pytest" ,python-pytest-3.0)))
7457 (home-page "https://github.com/pyca/pyopenssl")
7458 (synopsis "Python wrapper module around the OpenSSL library")
7459 (description
7460 "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
7461 library.")
7462 (license license:asl2.0)))
7463
7464 (define-public python2-pyopenssl
7465 (package-with-python2 python-pyopenssl))
7466
7467 (define-public python-pip
7468 (package
7469 (name "python-pip")
7470 (version "9.0.1")
7471 (source
7472 (origin
7473 (method url-fetch)
7474 (uri (pypi-uri "pip" version))
7475 (sha256
7476 (base32
7477 "03clr9c1dih5n9c00c592zzvf6r1ffimywkaq9agcqdllzhl7wh9"))))
7478 (build-system python-build-system)
7479 (arguments
7480 '(#:tests? #f)) ; there are no tests in the pypi archive.
7481 (home-page "https://pip.pypa.io/")
7482 (synopsis "Package manager for Python software")
7483 (description
7484 "Pip is a package manager for Python software, that finds packages on the
7485 Python Package Index (PyPI).")
7486 (license license:expat)))
7487
7488 (define-public python2-pip
7489 (package-with-python2 python-pip))
7490
7491 (define-public python-tlsh
7492 (package
7493 (name "python-tlsh")
7494 (version "3.4.4")
7495 (home-page "https://github.com/trendmicro/tlsh")
7496 (source (origin
7497 (method url-fetch)
7498 (uri (string-append "https://github.com/trendmicro/tlsh/archive/v"
7499 version ".tar.gz"))
7500 (sha256
7501 (base32
7502 "00bhzjqrlh7v538kbkbn8lgx976j1138al3sdhklaizqjvpwyk4r"))
7503 (file-name (string-append name "-" version ".tar.gz"))))
7504 (build-system cmake-build-system)
7505 (arguments
7506 '(#:out-of-source? #f
7507 #:phases (modify-phases %standard-phases
7508 (replace
7509 'install
7510 (lambda* (#:key outputs #:allow-other-keys)
7511 ;; Build and install the Python bindings. The underlying
7512 ;; C++ library is apparently not meant to be installed.
7513 (let ((out (assoc-ref outputs "out")))
7514 (with-directory-excursion "py_ext"
7515 (and (system* "python" "setup.py" "build")
7516 (system* "python" "setup.py" "install"
7517 (string-append "--prefix=" out))))))))))
7518 (inputs `(("python" ,python-wrapper))) ;for the bindings
7519 (synopsis "Fuzzy matching library for Python")
7520 (description
7521 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
7522 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
7523 value which can be used for similarity comparisons. Similar objects have
7524 similar hash values, which allows for the detection of similar objects by
7525 comparing their hash values. The byte stream should have a sufficient amount
7526 of complexity; for example, a byte stream of identical bytes will not generate
7527 a hash value.")
7528 (license license:asl2.0)))
7529
7530 (define-public python2-tlsh
7531 (package
7532 (inherit python-tlsh)
7533 (name "python2-tlsh")
7534 (inputs `(("python" ,python-2)))))
7535
7536 (define-public python-termcolor
7537 (package
7538 (name "python-termcolor")
7539 (version "1.1.0")
7540 (source
7541 (origin
7542 (method url-fetch)
7543 (uri (pypi-uri "termcolor" version))
7544 (sha256
7545 (base32
7546 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
7547 (build-system python-build-system)
7548 (arguments
7549 ;; There are no tests.
7550 `(#:tests? #f))
7551 (home-page "http://pypi.python.org/pypi/termcolor")
7552 (synopsis "ANSII Color formatting for terminal output")
7553 (description
7554 "This package provides ANSII Color formatting for output in terminals.")
7555 (license license:expat)))
7556
7557 (define-public python2-termcolor
7558 (package-with-python2 python-termcolor))
7559
7560 (define-public python-libarchive-c
7561 (package
7562 (name "python-libarchive-c")
7563 (version "2.2")
7564 (source (origin
7565 (method url-fetch)
7566 (uri (pypi-uri "libarchive-c" version))
7567 (sha256
7568 (base32
7569 "0z4r7v3dhd6b3120mav05ff08srih176r2rg5k8kn7mjd9pslm2x"))))
7570 (build-system python-build-system)
7571 (arguments
7572 '(#:phases (modify-phases %standard-phases
7573 (add-before
7574 'build 'reference-libarchive
7575 (lambda* (#:key inputs #:allow-other-keys)
7576 ;; Retain the absolute file name of libarchive.so.
7577 (let ((libarchive (assoc-ref inputs "libarchive")))
7578 (substitute* "libarchive/ffi.py"
7579 (("find_library\\('archive'\\)")
7580 (string-append "'" libarchive
7581 "/lib/libarchive.so'")))))))))
7582 (inputs
7583 `(("libarchive" ,libarchive)))
7584 (home-page "https://github.com/Changaco/python-libarchive-c")
7585 (synopsis "Python interface to libarchive")
7586 (description
7587 "This package provides Python bindings to libarchive, a C library to
7588 access possibly compressed archives in many different formats. It uses
7589 Python's @code{ctypes} foreign function interface (FFI).")
7590 (license license:lgpl2.0+)))
7591
7592 (define-public python2-libarchive-c
7593 (package-with-python2 python-libarchive-c))
7594
7595 (define-public python-file
7596 (package
7597 (inherit file)
7598 (name "python-file")
7599 (build-system python-build-system)
7600 (arguments
7601 '(#:tests? #f ;no tests
7602 #:configure-flags '("--single-version-externally-managed" "--root=/")
7603 #:phases (modify-phases %standard-phases
7604 (add-before 'build 'change-directory
7605 (lambda _
7606 (chdir "python")
7607 #t))
7608 (add-before 'build 'set-library-file-name
7609 (lambda* (#:key inputs #:allow-other-keys)
7610 (let ((file (assoc-ref inputs "file")))
7611 (substitute* "magic.py"
7612 (("find_library\\('magic'\\)")
7613 (string-append "'" file "/lib/libmagic.so'")))
7614 #t))))))
7615 (inputs `(("file" ,file)))
7616 (self-native-input? #f)
7617 (synopsis "Python bindings to the libmagic file type guesser. Note that
7618 this module and the python-magic module both provide a \"magic.py\" file;
7619 these two modules, which are different and were developed separately, both
7620 serve the same purpose: provide Python bindings for libmagic.")))
7621
7622 (define-public python2-file
7623 (package-with-python2 python-file))
7624
7625 (define-public python-debian
7626 (package
7627 (name "python-debian")
7628 (version "0.1.28")
7629 (source
7630 (origin
7631 (method url-fetch)
7632 (uri (pypi-uri name version))
7633 (sha256
7634 (base32
7635 "0i15f0xzx679sd0ldq2sls9pnnps9fv6vhqvnv9dzf4qhma42i0y"))))
7636 (build-system python-build-system)
7637 (propagated-inputs
7638 `(("python-six" ,python-six)))
7639 (home-page "http://packages.debian.org/sid/python-debian")
7640 (synopsis "Debian package related modules")
7641 (description
7642 ;; XXX: Use @enumerate instead of @itemize to work around
7643 ;; <http://bugs.gnu.org/21772>.
7644 "This package provides Python modules that abstract many formats of
7645 Debian-related files, such as:
7646
7647 @enumerate
7648 @item Debtags information;
7649 @item @file{debian/changelog} files;
7650 @item packages files, pdiffs;
7651 @item control files of single or multiple RFC822-style paragraphs---e.g.
7652 @file{debian/control}, @file{.changes}, @file{.dsc};
7653 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
7654 contained files and meta-information.
7655 @end enumerate\n")
7656
7657 ;; Modules are either GPLv2+ or GPLv3+.
7658 (license license:gpl3+)))
7659
7660 (define-public python2-debian
7661 (package-with-python2 python-debian))
7662
7663 (define-public python-nbformat
7664 (package
7665 (name "python-nbformat")
7666 (version "4.1.0")
7667 (source
7668 (origin
7669 (method url-fetch)
7670 (uri (pypi-uri "nbformat" version))
7671 (sha256
7672 (base32
7673 "0mq8iki3d4mnx7wy05phss7x98mds4fqydin8lcagidp1knw1xnv"))))
7674 (build-system python-build-system)
7675 (arguments `(#:tests? #f)) ; no test target
7676 (propagated-inputs
7677 `(("python-ipython-genutils" ,python-ipython-genutils)
7678 ("python-jsonschema" ,python-jsonschema)
7679 ("python-jupyter-core" ,python-jupyter-core)
7680 ("python-traitlets" ,python-traitlets)))
7681 (home-page "http://jupyter.org")
7682 (synopsis "Jupyter Notebook format")
7683 (description "This package provides the reference implementation of the
7684 Jupyter Notebook format and Python APIs for working with notebooks.")
7685 (license license:bsd-3)))
7686
7687 (define-public python2-nbformat
7688 (package-with-python2 python-nbformat))
7689
7690 (define-public python-bleach
7691 (package
7692 (name "python-bleach")
7693 (version "1.4.3")
7694 (source
7695 (origin
7696 (method url-fetch)
7697 (uri (pypi-uri "bleach" version))
7698 (sha256
7699 (base32
7700 "0jvg3jxrvnx7xmm9gj262v60ib452xlnwlb0navyp7jsvcd0d4qj"))))
7701 (build-system python-build-system)
7702 (propagated-inputs
7703 `(("python-html5lib" ,python-html5lib-0.9)
7704 ("python-six" ,python-six)))
7705 (native-inputs
7706 `(("python-nose" ,python-nose)))
7707 (home-page "https://github.com/jsocol/bleach")
7708 (synopsis "Whitelist-based HTML-sanitizing tool")
7709 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
7710 (license license:asl2.0)))
7711
7712 (define-public python2-bleach
7713 (package-with-python2 python-bleach))
7714
7715 (define-public python-entrypoints
7716 (package
7717 (name "python-entrypoints")
7718 (version "0.2.2")
7719 (source
7720 (origin
7721 (method url-fetch)
7722 (uri (string-append "https://github.com/takluyver/entrypoints/archive/"
7723 version ".tar.gz"))
7724 (file-name (string-append name "-" version ".tar.gz"))
7725 (sha256
7726 (base32
7727 "0azqlkh3j0za080lsf5crnhaxx3c93k9dpv5ihkhf5cppgw5sjz5"))))
7728 (build-system python-build-system)
7729 ;; The package does not come with a setup.py file, so we have to generate
7730 ;; one ourselves.
7731 (arguments
7732 `(#:tests? #f
7733 #:phases
7734 (modify-phases %standard-phases
7735 (add-after 'unpack 'create-setup.py
7736 (lambda _
7737 (call-with-output-file "setup.py"
7738 (lambda (port)
7739 (format port "\
7740 from setuptools import setup
7741 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
7742 " ,version))))))))
7743 (home-page "https://github.com/takluyver/entrypoints")
7744 (synopsis "Discover and load entry points from installed Python packages")
7745 (description "Entry points are a way for Python packages to advertise
7746 objects with some common interface. The most common examples are
7747 @code{console_scripts} entry points, which define shell commands by
7748 identifying a Python function to run. The @code{entrypoints} module contains
7749 functions to find and load entry points.")
7750 (license license:expat)))
7751
7752 (define-public python2-entrypoints
7753 (package-with-python2 python-entrypoints))
7754
7755 (define-public python-nbconvert
7756 (package
7757 (name "python-nbconvert")
7758 (version "5.0.0b1")
7759 (source
7760 (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "nbconvert" version))
7763 (sha256
7764 (base32
7765 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
7766 (build-system python-build-system)
7767 (arguments
7768 `(;; The "bdist_egg" target is disabled by default, causing the installation
7769 ;; to fail.
7770 #:configure-flags (list "bdist_egg")
7771 ;; FIXME: 5 failures, 40 errors.
7772 #:tests? #f))
7773 ;; #:phases
7774 ;; (modify-phases %standard-phases
7775 ;; (replace 'check
7776 ;; (lambda _
7777 ;; (zero? (system* "py.test" "-v")))))
7778 (native-inputs
7779 `(("python-pytest" ,python-pytest)))
7780 (propagated-inputs
7781 `(("python-bleach" ,python-bleach)
7782 ("python-entrypoints" ,python-entrypoints)
7783 ("python-jinja2" ,python-jinja2)
7784 ("python-jupyter-core" ,python-jupyter-core)
7785 ("python-mistune" ,python-mistune)
7786 ("python-nbformat" ,python-nbformat)
7787 ("python-pygments" ,python-pygments)
7788 ("python-traitlets" ,python-traitlets)))
7789 (home-page "http://jupyter.org")
7790 (synopsis "Converting Jupyter Notebooks")
7791 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
7792 notebooks to various other formats via Jinja templates. It allows you to
7793 convert an @code{.ipynb} notebook file into various static formats including:
7794
7795 @enumerate
7796 @item HTML
7797 @item LaTeX
7798 @item PDF
7799 @item Reveal JS
7800 @item Markdown (md)
7801 @item ReStructured Text (rst)
7802 @item executable script
7803 @end enumerate\n")
7804 (license license:bsd-3)))
7805
7806 (define-public python2-nbconvert
7807 (package-with-python2 python-nbconvert))
7808
7809 (define-public python-notebook
7810 (package
7811 (name "python-notebook")
7812 (version "4.2.3")
7813 (source (origin
7814 (method url-fetch)
7815 (uri (pypi-uri "notebook" version))
7816 (sha256
7817 (base32
7818 "0laq5c2f21frq6xcdckgq7raqhznbjb0qs0357g612z87wyn1a9r"))))
7819 (build-system python-build-system)
7820 (arguments
7821 `(#:phases
7822 (modify-phases %standard-phases
7823 (replace 'check
7824 (lambda _
7825 ;; HOME must be set for tests
7826 (setenv "HOME" "/tmp")
7827 (zero? (system* "nosetests")))))))
7828 (propagated-inputs
7829 `(("python-jupyter-core" ,python-jupyter-core)
7830 ("python-nbformat" ,python-nbformat)
7831 ("python-nbconvert" ,python-nbconvert)
7832 ("python-ipython" ,python-ipython)))
7833 (native-inputs
7834 `(("python-nose" ,python-nose)
7835 ("python-sphinx" ,python-sphinx)
7836 ("python-requests" ,python-requests)))
7837 (home-page "http://jupyter.org/")
7838 (synopsis "Web-based notebook environment for interactive computing")
7839 (description
7840 "The Jupyter HTML notebook is a web-based notebook environment for
7841 interactive computing.")
7842 (properties `((python2-variant . ,(delay python2-notebook))))
7843 (license license:bsd-3)))
7844
7845 (define-public python2-notebook
7846 (let ((base (package-with-python2
7847 (strip-python2-variant python-notebook))))
7848 (package (inherit base)
7849 (native-inputs
7850 `(("python2-mock" ,python2-mock)
7851 ,@(package-native-inputs base)))
7852 (arguments
7853 (substitute-keyword-arguments (package-arguments base)
7854 ((#:phases phases)
7855 `(modify-phases ,phases
7856 (add-before 'check 'disable-test-case
7857 ;; The test requires network access to localhost. Curiously it
7858 ;; fails with Python 2 only. Simply make the test-case return
7859 ;; immediately.
7860 (lambda _
7861 (substitute*
7862 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
7863 (("formats = self.nbconvert_api") "return #")))))))))))
7864
7865 (define-public python-widgetsnbextension
7866 (package
7867 (name "python-widgetsnbextension")
7868 (version "1.2.6")
7869 (source
7870 (origin
7871 (method url-fetch)
7872 (uri (pypi-uri "widgetsnbextension" version))
7873 (sha256
7874 (base32
7875 "0lff2mrwrgsa1mxmwx3phl9xvy0jqfpg6khbmxy53jbq56rwy666"))))
7876 (build-system python-build-system)
7877 (propagated-inputs
7878 `(("python-notebook" ,python-notebook)))
7879 (native-inputs
7880 `(("python-certifi" ,python-certifi)
7881 ("python-nose" ,python-nose)))
7882 (home-page "http://ipython.org")
7883 (synopsis "IPython HTML widgets for Jupyter")
7884 (description "This package provides interactive HTML widgets for Jupyter
7885 notebooks.")
7886 (license license:bsd-3)))
7887
7888 (define-public python2-widgetsnbextension
7889 (package-with-python2 python-widgetsnbextension))
7890
7891 (define-public python-ipywidgets
7892 (package
7893 (name "python-ipywidgets")
7894 (version "5.2.2")
7895 (source
7896 (origin
7897 (method url-fetch)
7898 (uri (pypi-uri "ipywidgets" version))
7899 (sha256
7900 (base32
7901 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
7902 (build-system python-build-system)
7903 ;; FIXME: it's not clear how to run the tests.
7904 (arguments `(#:tests? #f))
7905 (propagated-inputs
7906 `(("python-ipykernel" ,python-ipykernel)
7907 ("python-ipython" ,python-ipython)
7908 ("python-traitlets" ,python-traitlets)
7909 ("python-widgetsnbextension" ,python-widgetsnbextension)))
7910 (home-page "http://ipython.org")
7911 (synopsis "IPython HTML widgets for Jupyter")
7912 (description "Ipywidgets are interactive HTML widgets for Jupyter
7913 notebooks and the IPython kernel. Notebooks come alive when interactive
7914 widgets are used. Users gain control of their data and can visualize changes
7915 in the data.")
7916 (license license:bsd-3)))
7917
7918 (define-public python2-ipywidgets
7919 (package-with-python2 python-ipywidgets))
7920
7921 (define-public python-jupyter-console
7922 (package
7923 (name "python-jupyter-console")
7924 (version "5.0.0")
7925 (source
7926 (origin
7927 (method url-fetch)
7928 (uri (pypi-uri "jupyter_console" version))
7929 (sha256
7930 (base32
7931 "04acmkwsi99rcg3vb54c6n492zv35s92h2ahabc0w6wj976cipvx"))))
7932 (build-system python-build-system)
7933 ;; FIXME: it's not clear how to run the tests.
7934 (arguments `(#:tests? #f))
7935 (propagated-inputs
7936 `(("python-ipykernel" ,python-ipykernel)
7937 ("python-ipython" ,python-ipython)
7938 ("python-jupyter-client" ,python-jupyter-client)
7939 ("python-prompt-toolkit" ,python-prompt-toolkit)
7940 ("python-pygments" ,python-pygments)))
7941 (home-page "https://jupyter.org")
7942 (synopsis "Jupyter terminal console")
7943 (description "This package provides a terminal-based console frontend for
7944 Jupyter kernels. It also allows for console-based interaction with non-Python
7945 Jupyter kernels such as IJulia and IRKernel.")
7946 (license license:bsd-3)))
7947
7948 (define-public python2-jupyter-console
7949 (package-with-python2 python-jupyter-console))
7950
7951 (define-public jupyter
7952 (package
7953 (name "jupyter")
7954 (version "1.0.0")
7955 (source
7956 (origin
7957 (method url-fetch)
7958 (uri (pypi-uri "jupyter" version))
7959 (sha256
7960 (base32
7961 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
7962 (build-system python-build-system)
7963 ;; FIXME: it's not clear how to run the tests.
7964 (arguments `(#:tests? #f))
7965 (propagated-inputs
7966 `(("python-ipykernel" ,python-ipykernel)
7967 ("python-ipywidgets" ,python-ipywidgets)
7968 ("python-jupyter-console" ,python-jupyter-console)
7969 ("python-nbconvert" ,python-nbconvert)
7970 ("python-notebook" ,python-notebook)))
7971 (home-page "http://jupyter.org")
7972 (synopsis "Web application for interactive documents")
7973 (description
7974 "The Jupyter Notebook is a web application that allows you to create and
7975 share documents that contain live code, equations, visualizations and
7976 explanatory text. Uses include: data cleaning and transformation, numerical
7977 simulation, statistical modeling, machine learning and much more.")
7978 (license license:bsd-3)))
7979
7980 (define-public python-chardet
7981 (package
7982 (name "python-chardet")
7983 (version "2.3.0")
7984 (source
7985 (origin
7986 (method url-fetch)
7987 (uri (string-append
7988 "https://pypi.python.org/packages/source/c/chardet/chardet-"
7989 version
7990 ".tar.gz"))
7991 (sha256
7992 (base32
7993 "1ak87ikcw34fivcgiz2xvi938dmclh078az65l9x3rmgljrkhgp5"))))
7994 (build-system python-build-system)
7995 (home-page "https://github.com/chardet/chardet")
7996 (synopsis "Universal encoding detector for Python 2 and 3")
7997 (description
7998 "This package provides @code{chardet}, a Python module that can
7999 automatically detect a wide range of file encodings.")
8000 (license license:lgpl2.1+)))
8001
8002 (define-public python2-chardet
8003 (package-with-python2 python-chardet))
8004
8005 (define-public python-docopt
8006 (package
8007 (name "python-docopt")
8008 (version "0.6.2")
8009 (source
8010 (origin
8011 (method url-fetch)
8012 ;; The release on PyPI does not include tests.
8013 (uri (string-append
8014 "https://github.com/docopt/docopt/archive/"
8015 version ".tar.gz"))
8016 (file-name (string-append name "-" version ".tar.gz"))
8017 (sha256
8018 (base32
8019 "16bf890xbdz3m30rsv2qacklh2rdn1zrfspfnwzx9g7vwz8yw4r1"))))
8020 (build-system python-build-system)
8021 (native-inputs
8022 `(("python-pytest" ,python-pytest)))
8023 (arguments
8024 `(#:phases (alist-replace
8025 'check
8026 (lambda _ (zero? (system* "py.test")))
8027 %standard-phases)))
8028 (home-page "http://docopt.org")
8029 (synopsis "Command-line interface description language for Python")
8030 (description "This library allows the user to define a command-line
8031 interface from a program's help message rather than specifying it
8032 programatically with command-line parsers like @code{getopt} and
8033 @code{argparse}.")
8034 (license license:expat)))
8035
8036 (define-public python2-docopt
8037 (package-with-python2 python-docopt))
8038
8039 (define-public python-zope-event
8040 (package
8041 (name "python-zope-event")
8042 (version "4.1.0")
8043 (source
8044 (origin
8045 (method url-fetch)
8046 (uri (string-append "https://pypi.python.org/packages/source/z"
8047 "/zope.event/zope.event-" version ".tar.gz"))
8048 (sha256
8049 (base32
8050 "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
8051 (build-system python-build-system)
8052 (home-page "http://pypi.python.org/pypi/zope.event")
8053 (synopsis "Event publishing system for Python")
8054 (description "Zope.event provides an event publishing API, intended for
8055 use by applications which are unaware of any subscribers to their events. It
8056 is a simple event-dispatching system on which more sophisticated event
8057 dispatching systems can be built.")
8058 (license license:zpl2.1)))
8059
8060 (define-public python2-zope-event
8061 (package-with-python2 python-zope-event))
8062
8063 (define-public python-zope-interface
8064 (package
8065 (name "python-zope-interface")
8066 (version "4.1.3")
8067 (source
8068 (origin
8069 (method url-fetch)
8070 (uri (string-append "https://pypi.python.org/packages/source/z"
8071 "/zope.interface/zope.interface-" version ".tar.gz"))
8072 (sha256
8073 (base32
8074 "0ks8h73b2g4bkad821qbv0wzjppdrwys33i7ka45ik3wxjg1l8if"))))
8075 (build-system python-build-system)
8076 (native-inputs
8077 `(("python-zope-event" ,python-zope-event)))
8078 (home-page "https://github.com/zopefoundation/zope.interface")
8079 (synopsis "Python implementation of the \"design by contract\"
8080 methodology")
8081 (description "Zope.interface provides an implementation of \"object
8082 interfaces\" for Python. Interfaces are a mechanism for labeling objects as
8083 conforming to a given API or contract.")
8084 (license license:zpl2.1)))
8085
8086 (define-public python2-zope-interface
8087 (package-with-python2 python-zope-interface))
8088
8089 (define-public python-zope-exceptions
8090 (package
8091 (name "python-zope-exceptions")
8092 (version "4.0.8")
8093 (source
8094 (origin
8095 (method url-fetch)
8096 (uri (string-append "https://pypi.python.org/packages/source/z"
8097 "/zope.exceptions/zope.exceptions-"
8098 version ".tar.gz"))
8099 (sha256
8100 (base32
8101 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
8102 (build-system python-build-system)
8103 (arguments
8104 '(#:tests? #f)) ; circular dependency with zope.testrunner
8105 (propagated-inputs
8106 `(("python-zope-interface" ,python-zope-interface)))
8107 (home-page "http://cheeseshop.python.org/pypi/zope.exceptions")
8108 (synopsis "Zope exceptions")
8109 (description "Zope.exceptions provides general-purpose exception types
8110 that have uses outside of the Zope framework.")
8111 (license license:zpl2.1)))
8112
8113 (define-public python2-zope-exceptions
8114 (package-with-python2 python-zope-exceptions))
8115
8116 (define-public python-zope-testing
8117 (package
8118 (name "python-zope-testing")
8119 (version "4.5.0")
8120 (source
8121 (origin
8122 (method url-fetch)
8123 (uri (string-append "https://pypi.python.org/packages/source/z"
8124 "/zope.testing/zope.testing-" version ".tar.gz"))
8125 (sha256
8126 (base32
8127 "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))
8128 (modules '((guix build utils)))
8129 (snippet
8130 '(begin
8131 ;; Remove pre-compiled .pyc files backup files from source.
8132 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
8133 #t))))
8134 (build-system python-build-system)
8135 (native-inputs
8136 `(("python-zope-exceptions" ,python-zope-exceptions)))
8137 (propagated-inputs
8138 `(("python-zope-interface" ,python-zope-interface)))
8139 (home-page "http://pypi.python.org/pypi/zope.testing")
8140 (synopsis "Zope testing helpers")
8141 (description "Zope.testing provides a number of testing utilities for HTML
8142 forms, HTTP servers, regular expressions, and more.")
8143 (license license:zpl2.1)))
8144
8145 (define-public python2-zope-testing
8146 (package-with-python2 python-zope-testing))
8147
8148 (define-public python-zope-testrunner
8149 (package
8150 (name "python-zope-testrunner")
8151 (version "4.4.9")
8152 (source
8153 (origin
8154 (method url-fetch)
8155 (uri (string-append "https://pypi.python.org/packages/source/z"
8156 "/zope.testrunner/zope.testrunner-"
8157 version ".zip"))
8158 (sha256
8159 (base32
8160 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
8161 (build-system python-build-system)
8162 (arguments
8163 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8164 (native-inputs
8165 `(("python-six" ,python-six)
8166 ;("python-zope-interface" ,python-zope-interface)
8167 ("python-zope-exceptions" ,python-zope-exceptions)
8168 ("python-zope-testing" ,python-zope-testing)
8169 ("unzip" ,unzip)))
8170 (propagated-inputs
8171 `(("python-zope-interface" ,python-zope-interface)))
8172 (home-page "http://pypi.python.org/pypi/zope.testrunner")
8173 (synopsis "Zope testrunner script")
8174 (description "Zope.testrunner provides a script for running Python
8175 tests.")
8176 (license license:zpl2.1)))
8177
8178 (define-public python2-zope-testrunner
8179 (let ((base (package-with-python2 python-zope-testrunner)))
8180 (package
8181 (inherit base)
8182 (native-inputs
8183 (append (package-native-inputs base)
8184 `(("python2-subunit" ,python2-subunit)
8185 ("python2-mimeparse" ,python2-mimeparse)))))))
8186
8187 (define-public python-zope-i18nmessageid
8188 (package
8189 (name "python-zope-i18nmessageid")
8190 (version "4.0.3")
8191 (source
8192 (origin
8193 (method url-fetch)
8194 (uri (string-append
8195 "https://pypi.python.org/packages/source/z"
8196 "/zope.i18nmessageid/zope.i18nmessageid-"
8197 version ".tar.gz"))
8198 (sha256
8199 (base32
8200 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
8201 (build-system python-build-system)
8202 (home-page "http://pypi.python.org/pypi/zope.i18nmessageid")
8203 (synopsis "Message identifiers for internationalization")
8204 (description "Zope.i18nmessageid provides facilities for declaring
8205 internationalized messages within program source text.")
8206 (license license:zpl2.1)))
8207
8208 (define-public python2-zope-i18nmessageid
8209 (package-with-python2 python-zope-i18nmessageid))
8210
8211 (define-public python-zope-schema
8212 (package
8213 (name "python-zope-schema")
8214 (version "4.4.2")
8215 (source
8216 (origin
8217 (method url-fetch)
8218 (uri (string-append "https://pypi.python.org/packages/source/z"
8219 "/zope.schema/zope.schema-" version ".tar.gz"))
8220 (sha256
8221 (base32
8222 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
8223 (build-system python-build-system)
8224 (arguments
8225 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
8226 (propagated-inputs
8227 `(("python-zope-event" ,python-zope-event)
8228 ("python-zope-exceptions", python-zope-exceptions)
8229 ("python-zope-interface" ,python-zope-interface)))
8230 (native-inputs
8231 `(("python-zope-testing" ,python-zope-testing)
8232 ("python-coverage" ,python-coverage)
8233 ("python-nose" ,python-nose)))
8234 (home-page "http://pypi.python.org/pypi/zope.schema")
8235 (synopsis "Zope data schemas")
8236 (description "Zope.scheme provides extensions to zope.interface for
8237 defining data schemas.")
8238 (license license:zpl2.1)))
8239
8240 (define-public python2-zope-schema
8241 (package-with-python2 python-zope-schema))
8242
8243 (define-public python-zope-configuration
8244 (package
8245 (name "python-zope-configuration")
8246 (version "4.0.3")
8247 (source (origin
8248 (method url-fetch)
8249 (uri (string-append "https://pypi.python.org/packages/source/z"
8250 "/zope.configuration/zope.configuration-"
8251 version ".tar.gz"))
8252 (sha256
8253 (base32
8254 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
8255 (build-system python-build-system)
8256 (arguments
8257 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8258 (propagated-inputs
8259 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8260 ("python-zope-schema" ,python-zope-schema)))
8261 (home-page "http://pypi.python.org/pypi/zope.configuration")
8262 (synopsis "Zope Configuration Markup Language")
8263 (description "Zope.configuration implements ZCML, the Zope Configuration
8264 Markup Language.")
8265 (license license:zpl2.1)))
8266
8267 (define-public python2-zope-configuration
8268 (package-with-python2 python-zope-configuration))
8269
8270 (define-public python-zope-proxy
8271 (package
8272 (name "python-zope-proxy")
8273 (version "4.1.6")
8274 (source
8275 (origin
8276 (method url-fetch)
8277 (uri (string-append "https://pypi.python.org/packages/source/z"
8278 "/zope.proxy/zope.proxy-" version ".tar.gz"))
8279 (sha256
8280 (base32
8281 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
8282 (build-system python-build-system)
8283 (arguments
8284 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8285 (propagated-inputs
8286 `(("python-zope-interface" ,python-zope-interface)))
8287 (home-page "http://pypi.python.org/pypi/zope.proxy")
8288 (synopsis "Generic, transparent proxies")
8289 (description "Zope.proxy provides generic, transparent proxies for Python.
8290 Proxies are special objects which serve as mostly-transparent wrappers around
8291 another object, intervening in the apparent behavior of the wrapped object
8292 only when necessary to apply the policy (e.g., access checking, location
8293 brokering, etc.) for which the proxy is responsible.")
8294 (license license:zpl2.1)))
8295
8296 (define-public python2-zope-proxy
8297 (package-with-python2 python-zope-proxy))
8298
8299 (define-public python-zope-location
8300 (package
8301 (name "python-zope-location")
8302 (version "4.0.3")
8303 (source
8304 (origin
8305 (method url-fetch)
8306 (uri (string-append "https://pypi.python.org/packages/source/z"
8307 "/zope.location/zope.location-" version ".tar.gz"))
8308 (sha256
8309 (base32
8310 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
8311 (build-system python-build-system)
8312 (arguments
8313 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8314 (propagated-inputs
8315 `(("python-zope-proxy" ,python-zope-proxy)
8316 ("python-zope-schema" ,python-zope-schema)))
8317 (home-page "http://pypi.python.org/pypi/zope.location/")
8318 (synopsis "Zope location library")
8319 (description "Zope.location implements the concept of \"locations\" in
8320 Zope3, which are are special objects that have a structural location.")
8321 (license license:zpl2.1)))
8322
8323 (define-public python2-zope-location
8324 (package-with-python2 python-zope-location))
8325
8326 (define-public python-zope-security
8327 (package
8328 (name "python-zope-security")
8329 (version "4.0.3")
8330 (source
8331 (origin
8332 (method url-fetch)
8333 (uri (string-append "https://pypi.python.org/packages/source/z"
8334 "/zope.security/zope.security-" version ".tar.gz"))
8335 (sha256
8336 (base32
8337 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
8338 (build-system python-build-system)
8339 (arguments
8340 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
8341 (propagated-inputs
8342 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8343 ("python-zope-proxy" ,python-zope-proxy)
8344 ("python-zope-schema" ,python-zope-schema)))
8345 (native-inputs
8346 `(("python-six" ,python-six)
8347 ("python-zope-component" ,python-zope-component)
8348 ("python-zope-configuration" ,python-zope-configuration)
8349 ("python-zope-location" ,python-zope-location)
8350 ("python-zope-testrunner" ,python-zope-testrunner)
8351 ("python-zope-testing" ,python-zope-testing)))
8352 (home-page "http://pypi.python.org/pypi/zope.security")
8353 (synopsis "Zope security framework")
8354 (description "Zope.security provides a generic mechanism to implement
8355 security policies on Python objects.")
8356 (license license:zpl2.1)))
8357
8358 (define-public python2-zope-security
8359 (let ((zope-security (package-with-python2 python-zope-security)))
8360 (package (inherit zope-security)
8361 (propagated-inputs
8362 `(("python2-zope-testrunner" ,python2-zope-testrunner)
8363 ,@(alist-delete
8364 "python-zope-testrunner"
8365 (package-propagated-inputs zope-security)))))))
8366
8367 (define-public python-zope-component
8368 (package
8369 (name "python-zope-component")
8370 (version "4.3.0")
8371 (source
8372 (origin
8373 (method url-fetch)
8374 (uri (pypi-uri "zope.component" version))
8375 (sha256
8376 (base32
8377 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
8378 (build-system python-build-system)
8379 (arguments
8380 ;; Skip tests due to circular dependency with python-zope-security.
8381 '(#:tests? #f))
8382 (native-inputs
8383 `(("python-zope-testing" ,python-zope-testing)))
8384 (propagated-inputs
8385 `(("python-zope-event" ,python-zope-event)
8386 ("python-zope-interface" ,python-zope-interface)
8387 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8388 ("python-zope-configuration" ,python-zope-configuration)))
8389 (home-page "https://github.com/zopefoundation/zope.component")
8390 (synopsis "Zope Component Architecture")
8391 (description "Zope.component represents the core of the Zope Component
8392 Architecture. Together with the zope.interface package, it provides
8393 facilities for defining, registering and looking up components.")
8394 (license license:zpl2.1)))
8395
8396 (define-public python2-zope-component
8397 (package-with-python2 python-zope-component))
8398
8399 (define-public python-pythondialog
8400 (package
8401 (name "python-pythondialog")
8402 (version "3.4.0")
8403 (source
8404 (origin
8405 (method url-fetch)
8406 (uri (pypi-uri "pythondialog" version))
8407 (sha256
8408 (base32
8409 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
8410 (build-system python-build-system)
8411 (arguments
8412 `(#:phases
8413 (modify-phases %standard-phases
8414 (add-after 'unpack 'patch-path
8415 (lambda* (#:key inputs #:allow-other-keys)
8416 (let* ((dialog (assoc-ref inputs "dialog")))
8417 ;; Since this library really wants to grovel the search path, we
8418 ;; must hardcode dialog's store path into it.
8419 (substitute* "dialog.py"
8420 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
8421 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
8422 #t))))
8423 #:tests? #f)) ; no test suite
8424 (propagated-inputs
8425 `(("dialog" ,dialog)))
8426 (home-page "http://pythondialog.sourceforge.net/")
8427 (synopsis "Python interface to the UNIX dialog utility")
8428 (description "A Python wrapper for the dialog utility. Its purpose is to
8429 provide an easy to use, pythonic and comprehensive Python interface to dialog.
8430 This allows one to make simple text-mode user interfaces on Unix-like systems")
8431 (license license:lgpl2.1)
8432 (properties `((python2-variant . ,(delay python2-pythondialog))))))
8433
8434 (define-public python2-pythondialog
8435 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
8436 (package
8437 (inherit base)
8438 (version (package-version python-pythondialog))
8439 (source (origin
8440 (method url-fetch)
8441 (uri (pypi-uri "python2-pythondialog" version))
8442 (sha256
8443 (base32
8444 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
8445
8446 (define-public python-pyrfc3339
8447 (package
8448 (name "python-pyrfc3339")
8449 (version "1.0")
8450 (source
8451 (origin
8452 (method url-fetch)
8453 (uri (pypi-uri "pyRFC3339" version))
8454 (sha256
8455 (base32
8456 "0dgm4l9y8jiax5cp6yxjd2i27cq8h33sh81n1wfbmnmqb32cdywd"))))
8457 (build-system python-build-system)
8458 (propagated-inputs
8459 `(("python-pytz" ,python-pytz)))
8460 (native-inputs
8461 `(("python-nose" ,python-nose)))
8462 (home-page "https://github.com/kurtraschke/pyRFC3339")
8463 (synopsis "Python timestamp library")
8464 (description "Python library for generating and parsing RFC 3339-compliant
8465 timestamps.")
8466 (license license:expat)))
8467
8468 (define-public python2-pyrfc3339
8469 (package-with-python2 python-pyrfc3339))
8470
8471 (define-public python-werkzeug
8472 (package
8473 (name "python-werkzeug")
8474 (version "0.11.15")
8475 (source
8476 (origin
8477 (method url-fetch)
8478 (uri (pypi-uri "Werkzeug" version))
8479 (sha256
8480 (base32
8481 "1h5wycw8yj7q0grqsjnsqflmrlsdagvl2j4dsgdncci6mjc7fpa5"))))
8482 (build-system python-build-system)
8483 (native-inputs
8484 `(("python-pytest" ,python-pytest)))
8485 (home-page "http://werkzeug.pocoo.org/")
8486 (synopsis "Utilities for WSGI applications")
8487 (description "One of the most advanced WSGI utility modules. It includes a
8488 powerful debugger, full-featured request and response objects, HTTP utilities to
8489 handle entity tags, cache control headers, HTTP dates, cookie handling, file
8490 uploads, a powerful URL routing system and a bunch of community-contributed
8491 addon modules.")
8492 (license license:x11)))
8493
8494 (define-public python2-werkzeug
8495 (package-with-python2 python-werkzeug))
8496
8497 (define-public python-configobj
8498 (package
8499 (name "python-configobj")
8500 (version "5.0.6")
8501 (source (origin
8502 (method url-fetch)
8503 (uri (string-append
8504 "https://pypi.python.org/packages/source/c/configobj/"
8505 "configobj-" version ".tar.gz"))
8506 (sha256
8507 (base32
8508 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
8509 ;; Patch setup.py so it looks for python-setuptools, which is
8510 ;; required to parse the keyword 'install_requires' in setup.py.
8511 (patches (search-patches "python-configobj-setuptools.patch"))))
8512 (build-system python-build-system)
8513 (propagated-inputs
8514 `(("python-six" ,python-six)))
8515 (synopsis "Config file reading, writing and validation")
8516 (description "ConfigObj is a simple but powerful config file reader and
8517 writer: an ini file round tripper. Its main feature is that it is very easy to
8518 use, with a straightforward programmer’s interface and a simple syntax for
8519 config files.")
8520 (home-page "https://github.com/DiffSK/configobj")
8521 (license license:bsd-3)))
8522
8523 (define-public python2-configobj
8524 (package-with-python2 python-configobj))
8525
8526 (define-public python-configargparse
8527 (package
8528 (name "python-configargparse")
8529 (version "0.10.0")
8530 (source (origin
8531 (method url-fetch)
8532 (uri (string-append
8533 "https://pypi.python.org/packages/source/C/ConfigArgParse/"
8534 "ConfigArgParse-" version ".tar.gz"))
8535 (sha256
8536 (base32
8537 "19wh919gbdbzxzpagg52q3lm62yicm95ddlcx77dyjc1slyshl1v"))))
8538 (build-system python-build-system)
8539 (arguments
8540 ;; FIXME: Bug in test suite filed upstream:
8541 ;; https://github.com/bw2/ConfigArgParse/issues/32
8542 '(#:tests? #f))
8543 (synopsis "Replacement for argparse")
8544 (description "A drop-in replacement for argparse that allows options to also
8545 be set via config files and/or environment variables.")
8546 (home-page "https://github.com/bw2/ConfigArgParse")
8547 (license license:expat)))
8548
8549 (define-public python2-configargparse
8550 (package-with-python2 python-configargparse))
8551
8552 (define-public python-ndg-httpsclient
8553 (package
8554 (name "python-ndg-httpsclient")
8555 (version "0.4.2")
8556 (source (origin
8557 (method url-fetch)
8558 (uri (pypi-uri "ndg_httpsclient" version))
8559 (sha256
8560 (base32
8561 "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))
8562 (build-system python-build-system)
8563 (arguments
8564 '(;; The tests appear to require networking.
8565 #:tests? #f))
8566 (propagated-inputs
8567 `(("python-pyopenssl" ,python-pyopenssl)))
8568 (synopsis "HTTPS support for Python's httplib and urllib2")
8569 (description "This is a HTTPS client implementation for httplib and urllib2
8570 based on PyOpenSSL. PyOpenSSL provides a more fully featured SSL implementation
8571 over the default provided with Python and importantly enables full verification
8572 of the SSL peer.")
8573 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8574 (license license:bsd-3)))
8575
8576 ;; python2-openssl requires special care, so package-with-python2 is
8577 ;; insufficient.
8578 (define-public python2-ndg-httpsclient
8579 (package (inherit python-ndg-httpsclient)
8580 (name "python2-ndg-httpsclient")
8581 (arguments `(#:python ,python-2))
8582 (propagated-inputs
8583 `(("python2-pyopenssl" ,python2-pyopenssl)))))
8584
8585 (define-public python-contextlib2
8586 (package
8587 (name "python-contextlib2")
8588 (version "0.4.0")
8589 (source
8590 (origin
8591 (method url-fetch)
8592 (uri (pypi-uri "contextlib2" version))
8593 (sha256
8594 (base32
8595 "0cmp131dlh0d0zvw0aza1zd13glvngzk8lb4avks0hm7yxwdr9am"))))
8596 (build-system python-build-system)
8597 (arguments
8598 `(#:phases
8599 (modify-phases %standard-phases
8600 (replace 'check
8601 (lambda _ (zero?
8602 (system*
8603 "python" "test_contextlib2.py" "-v")))))))
8604 (home-page "http://contextlib2.readthedocs.org/")
8605 (synopsis "Tools for decorators and context managers")
8606 (description "This module is primarily a backport of the Python
8607 3.2 contextlib to earlier Python versions. Like contextlib, it
8608 provides utilities for common tasks involving decorators and context
8609 managers. It also contains additional features that are not part of
8610 the standard library.")
8611 (license license:psfl)))
8612
8613 (define-public python2-contextlib2
8614 (package-with-python2 python-contextlib2))
8615
8616 (define-public python-texttable
8617 (package
8618 (name "python-texttable")
8619 (version "0.8.7")
8620 (source
8621 (origin
8622 (method url-fetch)
8623 (uri (pypi-uri "texttable" version))
8624 (sha256
8625 (base32
8626 "1liiiydgkg37i46a418aw19fyf6z3ds51wdwwpyjbs12x0phhf4a"))))
8627 (build-system python-build-system)
8628 (arguments '(#:tests? #f)) ; no tests
8629 (home-page "https://github.com/foutaise/texttable/")
8630 (synopsis "Python module for creating simple ASCII tables")
8631 (description "Texttable is a Python module for creating simple ASCII
8632 tables.")
8633 (license license:lgpl2.1+)))
8634
8635 (define-public python2-texttable
8636 (package-with-python2 python-texttable))
8637
8638 (define-public python-websocket-client
8639 (package
8640 (name "python-websocket-client")
8641 (version "0.37.0")
8642 (source
8643 (origin
8644 (method url-fetch)
8645 (uri (pypi-uri "websocket_client" version))
8646 (sha256
8647 (base32
8648 "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7"))))
8649 (build-system python-build-system)
8650 (propagated-inputs
8651 `(("python-six" ,python-six)))
8652 (home-page "https://github.com/liris/websocket-client")
8653 (synopsis "WebSocket client for Python")
8654 (description "The Websocket-client module provides the low level APIs for
8655 WebSocket usage in Python programs.")
8656 (license license:lgpl2.1+)))
8657
8658 (define-public python2-websocket-client
8659 (package-with-python2 python-websocket-client))
8660
8661 (define-public python-atomicwrites
8662 (package
8663 (name "python-atomicwrites")
8664 (version "1.1.5")
8665 (source (origin
8666 (method url-fetch)
8667 (uri (pypi-uri "atomicwrites" version))
8668 (sha256
8669 (base32
8670 "11bm90fwm2avvf4f3ib8g925w7jr4m11vcsinn1bi6ns4bm32214"))))
8671 (build-system python-build-system)
8672 (synopsis "Atomic file writes in Python")
8673 (description "Library for atomic file writes using platform dependent tools
8674 for atomic file system operations.")
8675 (home-page "https://github.com/untitaker/python-atomicwrites")
8676 (license license:expat)))
8677
8678 (define-public python2-atomicwrites
8679 (package-with-python2 python-atomicwrites))
8680
8681 (define-public python-requests-toolbelt
8682 (package
8683 (name "python-requests-toolbelt")
8684 (version "0.6.2")
8685 (source (origin
8686 (method url-fetch)
8687 (uri (string-append
8688 "https://pypi.python.org/packages/"
8689 "e1/a4/a94c037bc72ad70441aff1403d3243510d2542ddca7759faaeffeb11aefe/"
8690 "requests-toolbelt-" version ".tar.gz"))
8691 (sha256
8692 (base32
8693 "15q9nrgp85nqlr4kdz1zvj8z2npafi2sr12y7fqgxbkq28j1aci6"))))
8694 (build-system python-build-system)
8695 (native-inputs
8696 `(("python-betamax" ,python-betamax)
8697 ("python-mock" ,python-mock)
8698 ("python-pytest" ,python-pytest)))
8699 (propagated-inputs
8700 `(("python-requests" ,python-requests)))
8701 (synopsis "Extensions to python-requests")
8702 (description "This is a toolbelt of useful classes and functions to be used
8703 with python-requests.")
8704 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
8705 (license license:asl2.0)))
8706
8707 (define-public python-click-threading
8708 (package
8709 (name "python-click-threading")
8710 (version "0.2.0")
8711 (source (origin
8712 (method url-fetch)
8713 (uri (string-append
8714 "https://pypi.python.org/packages/"
8715 "fe/b7/e7f609d18a2a351cb71616adcf54df1acd82f83cb9b5936935a4d20e2c23/"
8716 "click-threading-" version ".tar.gz"))
8717 (sha256
8718 (base32
8719 "18bcqikxwb3drb8rf60cclxkxw52521b38ax3byah6j8cn8y9p4j"))))
8720 (build-system python-build-system)
8721 (propagated-inputs
8722 `(("python-click" ,python-click)))
8723 (synopsis "Utilities for multithreading in Click")
8724 (description "This package provides utilities for multithreading in Click
8725 applications.")
8726 (home-page "https://github.com/click-contrib/click-threading")
8727 (license license:expat)))
8728
8729 (define-public python-click-log
8730 (package
8731 (name "python-click-log")
8732 (version "0.1.8")
8733 (source (origin
8734 (method url-fetch)
8735 (uri (pypi-uri "click-log" version))
8736 (sha256
8737 (base32
8738 "14ikfjfgnzf21mjniq9lfk2igzykgzfvwwrk85nw2b9fq44109sp"))))
8739 (build-system python-build-system)
8740 (propagated-inputs
8741 `(("python-click" ,python-click)))
8742 (synopsis "Logging for click applications")
8743 (description "This package provides a Python library for logging Click
8744 applications.")
8745 (home-page "https://github.com/click-contrib/click-log")
8746 (license license:expat)))
8747
8748 (define-public python-apipkg
8749 (package
8750 (name "python-apipkg")
8751 (version "1.4")
8752 (source (origin
8753 (method url-fetch)
8754 (uri (pypi-uri "apipkg" version))
8755 (sha256
8756 (base32
8757 "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
8758 (build-system python-build-system)
8759 (native-inputs
8760 `(("python-pytest" ,python-pytest)))
8761 (synopsis "Namespace control and lazy-import mechanism")
8762 (description "With apipkg you can control the exported namespace of a Python
8763 package and greatly reduce the number of imports for your users. It is a small
8764 pure Python module that works on virtually all Python versions.")
8765 (home-page "https://bitbucket.org/hpk42/apipkg")
8766 (license license:expat)))
8767
8768 (define-public python2-apipkg
8769 (package-with-python2 python-apipkg))
8770
8771 (define-public python-execnet
8772 (package
8773 (name "python-execnet")
8774 (version "1.4.1")
8775 (source (origin
8776 (method url-fetch)
8777 (uri (pypi-uri "execnet" version))
8778 (sha256
8779 (base32
8780 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
8781 (build-system python-build-system)
8782 (arguments
8783 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
8784 ;; The two test failures are caused by the lack of an `ssh` executable.
8785 ;; The test suite can be run with pytest after the 'install' phase.
8786 #:tests? #f))
8787 (native-inputs
8788 `(("python-pytest" ,python-pytest)
8789 ("python-setuptools-scm" ,python-setuptools-scm)))
8790 (propagated-inputs
8791 `(("python-apipkg" ,python-apipkg)))
8792 (synopsis "Rapid multi-Python deployment")
8793 (description "Execnet provides a share-nothing model with
8794 channel-send/receive communication for distributing execution across many
8795 Python interpreters across version, platform and network barriers. It has a
8796 minimal and fast API targeting the following uses:
8797 @enumerate
8798 @item distribute tasks to (many) local or remote CPUs
8799 @item write and deploy hybrid multi-process applications
8800 @item write scripts to administer multiple environments
8801 @end enumerate")
8802 (home-page "http://codespeak.net/execnet/")
8803 (license license:expat)))
8804
8805 (define-public python2-execnet
8806 (package-with-python2 python-execnet))
8807
8808 (define-public python-trollius-redis
8809 (package
8810 (name "python-trollius-redis")
8811 (version "0.1.4")
8812 (source
8813 (origin
8814 (method url-fetch)
8815 (uri (pypi-uri "trollius_redis" version))
8816 (sha256
8817 (base32
8818 "0k3vypszmgmaipgw9xscvgm79h2zd6p6ci8gdp5sxl6g5kbqr9fy"))))
8819 (build-system python-build-system)
8820 ;; TODO: Tests require packaging 'hiredis'.
8821 (arguments '(#:tests? #f))
8822 (home-page "https://github.com/benjolitz/trollius-redis")
8823 (synopsis "Port of asyncio-redis to trollius")
8824 (description "@code{trollius-redis} is a Redis client for Python
8825 trollius. It is an asynchronious IO (PEP 3156) implementation of the
8826 Redis protocol.")
8827 (license license:bsd-2)))
8828
8829 (define-public python2-trollius-redis
8830 (package-with-python2 python-trollius-redis))
8831
8832 ;;; The software provided by this package was integrated into pytest 2.8.
8833 (define-public python-pytest-cache
8834 (package
8835 (name "python-pytest-cache")
8836 (version "1.0")
8837 (source (origin
8838 (method url-fetch)
8839 (uri (pypi-uri "pytest-cache" version))
8840 (sha256
8841 (base32
8842 "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
8843 (build-system python-build-system)
8844 (propagated-inputs
8845 `(("python-apipkg" ,python-apipkg)
8846 ("python-execnet" ,python-execnet)
8847 ("python-py" ,python-py)
8848 ("python-pytest" ,python-pytest)))
8849 (synopsis "Py.test plugin with mechanisms for caching across test runs")
8850 (description "The pytest-cache plugin provides tools to rerun failures from
8851 the last py.test invocation.")
8852 (home-page "https://bitbucket.org/hpk42/pytest-cache/")
8853 (license license:expat)))
8854
8855 (define-public python2-pytest-cache
8856 (package-with-python2 python-pytest-cache))
8857
8858 (define-public python-pytest-localserver
8859 (package
8860 (name "python-pytest-localserver")
8861 (version "0.3.5")
8862 (source (origin
8863 (method url-fetch)
8864 (uri (pypi-uri "pytest-localserver" version))
8865 (sha256
8866 (base32
8867 "0dvqspjr6va55zwmnnc2mmpqc7mm65kxig9ya44x1z8aadzxpa4p"))))
8868 (build-system python-build-system)
8869 (arguments
8870 `(#:phases (modify-phases %standard-phases
8871 (replace 'check
8872 (lambda _
8873 (zero? (system* "py.test" "--genscript=runtests.py"))
8874 (zero? (system* "py.test")))))))
8875 (native-inputs
8876 `(("python-pytest" ,python-pytest)
8877 ("python-requests" ,python-requests)
8878 ("python-six" ,python-six)))
8879 (propagated-inputs
8880 `(("python-werkzeug" ,python-werkzeug)))
8881 (synopsis "Py.test plugin to test server connections locally")
8882 (description "Pytest-localserver is a plugin for the pytest testing
8883 framework which enables you to test server connections locally.")
8884 (home-page "https://pypi.python.org/pypi/pytest-localserver")
8885 (license license:expat)))
8886
8887 (define-public python-wsgi-intercept
8888 (package
8889 (name "python-wsgi-intercept")
8890 (version "1.2.2")
8891 (source (origin
8892 (method url-fetch)
8893 (uri (string-append
8894 "https://pypi.python.org/packages/"
8895 "38/76/ebcbc24d0cb77db34520a3ca6ed1bd43ace17d182bbd8dd7d976f1c176fb/"
8896 "wsgi_intercept-" version ".tar.gz"))
8897 (sha256
8898 (base32
8899 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
8900 (build-system python-build-system)
8901 (propagated-inputs
8902 `(("python-six" ,python-six)))
8903 (native-inputs
8904 `(("python-pytest" ,python-pytest)
8905 ("python-httplib2" ,python-httplib2)
8906 ("python-requests" ,python-requests)
8907 ("python-urllib3" ,python-urllib3)))
8908 (synopsis "Puts a WSGI application in place of a real URI for testing")
8909 (description "Wsgi_intercept installs a WSGI application in place of a real
8910 URI for testing. Testing a WSGI application normally involves starting a
8911 server at a local host and port, then pointing your test code to that address.
8912 Instead, this library lets you intercept calls to any specific host/port
8913 combination and redirect them into a WSGI application importable by your test
8914 program. Thus, you can avoid spawning multiple processes or threads to test
8915 your Web app.")
8916 (home-page "https://github.com/cdent/wsgi-intercept")
8917 (license license:expat)))
8918
8919 (define-public python-pytest-xprocess
8920 (package
8921 (name "python-pytest-xprocess")
8922 (version "0.9.1")
8923 (source (origin
8924 (method url-fetch)
8925 (uri (pypi-uri "pytest-xprocess" version))
8926 (sha256
8927 (base32
8928 "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
8929 (build-system python-build-system)
8930 (propagated-inputs
8931 `(("python-pytest" ,python-pytest)
8932 ("python-pytest-cache" ,python-pytest-cache)
8933 ("python-psutil" ,python-psutil)))
8934 (synopsis "Pytest plugin to manage external processes across test runs")
8935 (description "Pytest-xprocess is an experimental py.test plugin for managing
8936 processes across test runs.")
8937 (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess")
8938 (license license:expat)))
8939
8940 (define-public python-icalendar
8941 (package
8942 (name "python-icalendar")
8943 (version "3.11.4")
8944 (source (origin
8945 (method url-fetch)
8946 (uri (pypi-uri "icalendar" version))
8947 (sha256
8948 (base32
8949 "0ix3xxykz8hs8mx4f2063djawmd888y3vsl75fbvbfqvg67v35jn"))))
8950 (build-system python-build-system)
8951 (propagated-inputs
8952 `(("python-dateutil" ,python-dateutil)
8953 ("python-pytz" ,python-pytz)))
8954 (synopsis "Python library for parsing iCalendar files")
8955 (description "The icalendar package is a parser/generator of iCalendar
8956 files for use with Python.")
8957 (home-page "https://github.com/collective/icalendar")
8958 (license license:bsd-2)))
8959
8960 (define-public python-sphinxcontrib-newsfeed
8961 (package
8962 (name "python-sphinxcontrib-newsfeed")
8963 (version "0.1.4")
8964 (source (origin
8965 (method url-fetch)
8966 (uri (pypi-uri "sphinxcontrib-newsfeed" version))
8967 (sha256
8968 (base32
8969 "1d7gam3mn8v4in4p16yn3v10vps7nnaz6ilw99j4klij39dqd37p"))))
8970 (arguments '(#:tests? #f)) ; No tests.
8971 (build-system python-build-system)
8972 (propagated-inputs
8973 `(("python-sphinx" ,python-sphinx)))
8974 (synopsis "News Feed extension for Sphinx")
8975 (description "Sphinxcontrib-newsfeed is an extension for adding a simple
8976 Blog, News or Announcements section to a Sphinx website.")
8977 (home-page "https://bitbucket.org/prometheus/sphinxcontrib-newsfeed")
8978 (license license:bsd-2)))
8979
8980 (define-public python-args
8981 (package
8982 (name "python-args")
8983 (version "0.1.0")
8984 (source (origin
8985 (method url-fetch)
8986 (uri (pypi-uri "args" version))
8987 (sha256
8988 (base32
8989 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
8990 (build-system python-build-system)
8991 (home-page "https://github.com/kennethreitz/args")
8992 (synopsis "Command-line argument parser")
8993 (description
8994 "This library provides a Python module to parse command-line arguments.")
8995 (license license:bsd-3)))
8996
8997 (define-public python2-args
8998 (package-with-python2 python-args))
8999
9000 (define-public python-clint
9001 (package
9002 (name "python-clint")
9003 (version "0.5.1")
9004 (source (origin
9005 (method url-fetch)
9006 (uri (pypi-uri "clint" version))
9007 (sha256
9008 (base32
9009 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9010 (build-system python-build-system)
9011 (arguments
9012 '(#:phases
9013 (modify-phases %standard-phases
9014 (replace 'check
9015 (lambda _
9016 (zero? (system* "py.test" "-v")))))))
9017 (native-inputs
9018 `(("python-pytest" ,python-pytest)))
9019 (propagated-inputs
9020 `(("python-args" ,python-args)))
9021 (home-page "https://github.com/kennethreitz/clint")
9022 (synopsis "Command-line interface tools")
9023 (description
9024 "Clint is a Python module filled with a set of tools for developing
9025 command-line applications, including tools for colored and indented
9026 output, progress bar display, and pipes.")
9027 (license license:isc)))
9028
9029 (define-public python2-clint
9030 (package-with-python2 python-clint))
9031
9032 (define-public python-astor
9033 (package
9034 (name "python-astor")
9035 (version "0.5")
9036 (source (origin
9037 (method url-fetch)
9038 (uri (pypi-uri "astor" version))
9039 (sha256
9040 (base32
9041 "1fdafq5hkis1fxqlmhw0sn44zp2ar46nxhbc22cvwg7hsd8z5gsa"))))
9042 (build-system python-build-system)
9043 (home-page "https://github.com/berkerpeksag/astor")
9044 (synopsis "Read and write Python ASTs")
9045 (description
9046 "Astor is designed to allow easy manipulation of Python source via the
9047 Abstract Syntax Tree.")
9048 (license license:bsd-3)))
9049
9050 (define-public python2-astor
9051 (package-with-python2 python-astor))
9052
9053 (define-public python-rply
9054 (package
9055 (name "python-rply")
9056 (version "0.7.4")
9057 (source (origin
9058 (method url-fetch)
9059 (uri (pypi-uri "rply" version))
9060 (sha256
9061 (base32
9062 "12rp1d9ba7nvd5rhaxi6xzx1rm67r1k1ylsrkzhpwnphqpb06cvj"))))
9063 (build-system python-build-system)
9064 (propagated-inputs
9065 `(("python-appdirs" ,python-appdirs)))
9066 (home-page "https://github.com/alex/rply")
9067 (synopsis "Parser generator for Python")
9068 (description
9069 "This package provides a pure Python based parser generator, that also
9070 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9071 with a new public API, and RPython support.")
9072 (license license:bsd-3)))
9073
9074 (define-public python2-rply
9075 (package-with-python2 python-rply))
9076
9077 (define-public python-hy
9078 (package
9079 (name "python-hy")
9080 (version "0.11.1")
9081 (source (origin
9082 (method url-fetch)
9083 (uri (pypi-uri "hy" version))
9084 (sha256
9085 (base32
9086 "1msqv747iz12r73mz4qvsmlwkddwjvrahlrk7ysrcz07h7dsscxs"))))
9087 (build-system python-build-system)
9088 (arguments
9089 '(#:phases
9090 (modify-phases %standard-phases
9091 (replace 'check
9092 (lambda _
9093 ;; Tests require write access to HOME.
9094 (setenv "HOME" "/tmp")
9095 (zero? (system* "nosetests")))))))
9096 (native-inputs
9097 `(("python-coverage" ,python-coverage)
9098 ("python-nose" ,python-nose)))
9099 (propagated-inputs
9100 `(("python-astor" ,python-astor)
9101 ("python-clint" ,python-clint)
9102 ("python-rply" ,python-rply)))
9103 (home-page "http://hylang.org/")
9104 (synopsis "Lisp frontend to Python")
9105 (description
9106 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9107 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9108 Python at your fingertips, in Lisp form.")
9109 (license license:expat)))
9110
9111 (define-public python2-hy
9112 (package-with-python2 python-hy))
9113
9114 (define-public python-rauth
9115 (package
9116 (name "python-rauth")
9117 (version "0.7.3")
9118 (source
9119 (origin
9120 (method url-fetch)
9121 (uri (pypi-uri "rauth" version))
9122 (sha256
9123 (base32
9124 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
9125 (build-system python-build-system)
9126 (arguments
9127 `(#:test-target "check"))
9128 (propagated-inputs
9129 `(("python-requests" ,python-requests)))
9130 (home-page "https://github.com/litl/rauth")
9131 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
9132 (description
9133 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
9134 provides service wrappers for convenient connection initialization and
9135 authenticated session objects providing things like keep-alive.")
9136 (license license:expat)
9137 (properties `((python2-variant . ,(delay python2-rauth))))))
9138
9139 (define-public python2-rauth
9140 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
9141 (package
9142 (inherit base)
9143 (native-inputs `(("python2-unittest2" ,python2-unittest2)
9144 ,@(package-native-inputs base))))))
9145
9146 (define-public python2-functools32
9147 (package
9148 (name "python2-functools32")
9149 (version "3.2.3-2")
9150 (source
9151 (origin
9152 (method url-fetch)
9153 (uri (pypi-uri "functools32" version))
9154 (sha256
9155 (base32
9156 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9157 (build-system python-build-system)
9158 (arguments
9159 `(#:python ,python-2
9160 #:tests? #f)) ; no test target
9161 (home-page "https://github.com/MiCHiLU/python-functools32")
9162 (synopsis
9163 "Backport of the functools module from Python 3.2.3")
9164 (description
9165 "This package is a backport of the @code{functools} module from Python
9166 3.2.3 for use with older versions of Python and PyPy.")
9167 (license license:expat)))
9168
9169 (define-public python2-subprocess32
9170 (package
9171 (name "python2-subprocess32")
9172 (version "3.2.7")
9173 (source (origin
9174 (method url-fetch)
9175 (uri (pypi-uri "subprocess32" version))
9176 (sha256
9177 (base32
9178 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9179 (patches
9180 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9181 (build-system python-build-system)
9182 (arguments
9183 `(#:python ,python-2
9184 #:phases
9185 (modify-phases %standard-phases
9186 (add-after 'unpack 'patch-/bin/sh
9187 (lambda _
9188 (substitute* '("subprocess32.py"
9189 "test_subprocess32.py")
9190 (("/bin/sh") (which "sh")))
9191 #t))
9192 (delete 'check)
9193 (add-after 'install 'check
9194 (lambda* (#:key inputs outputs #:allow-other-keys)
9195 ;; For some reason this package fails to import
9196 ;; _posixsubprocess.so when PYTHONPATH is set to the build
9197 ;; directory. Running tests after install is easier.
9198 (add-installed-pythonpath inputs outputs)
9199 (zero? (system* "python" "test_subprocess32.py")))))))
9200 (home-page "https://github.com/google/python-subprocess32")
9201 (synopsis "Backport of the subprocess module from Python 3.2")
9202 (description
9203 "This is a backport of the @code{subprocess} standard library module
9204 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9205 new features. On POSIX systems it is guaranteed to be reliable when used
9206 in threaded applications. It includes timeout support from Python 3.3 but
9207 otherwise matches 3.2’s API.")
9208 (license license:psfl)))
9209
9210 (define-public python2-futures
9211 (package
9212 (name "python2-futures")
9213 (version "3.0.5")
9214 (source
9215 (origin
9216 (method url-fetch)
9217 (uri (pypi-uri "futures" version))
9218 (sha256
9219 (base32
9220 "1pw1z4329xvlabdpwqa6b7v2fxf7hl64m4cgr22ckbym8m8m4hh5"))))
9221 (build-system python-build-system)
9222 (arguments `(#:python ,python-2))
9223 (home-page "https://github.com/agronholm/pythonfutures")
9224 (synopsis
9225 "Backport of the concurrent.futures package from Python 3.2")
9226 (description
9227 "The concurrent.futures module provides a high-level interface for
9228 asynchronously executing callables. This package backports the
9229 concurrent.futures package from Python 3.2")
9230 (license license:bsd-3)))
9231
9232 (define-public python-promise
9233 (package
9234 (name "python-promise")
9235 (version "0.4.2")
9236 (source
9237 (origin
9238 (method url-fetch)
9239 (uri (pypi-uri "promise" version))
9240 (sha256
9241 (base32
9242 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9243 (build-system python-build-system)
9244 ;; Tests wants python-futures, which is a python2 only program, and
9245 ;; can't be found by python-promise at test time.
9246 (arguments `(#:tests? #f))
9247 (home-page "https://github.com/syrusakbary/promise")
9248 (synopsis "Promises/A+ implementation for Python")
9249 (description
9250 "Promises/A+ implementation for Python")
9251 (properties `((python2-variant . ,(delay python2-promise))))
9252 (license license:expat)))
9253
9254 (define-public python2-promise
9255 (let ((promise (package-with-python2
9256 (strip-python2-variant python-promise))))
9257 (package (inherit promise)
9258 (arguments (substitute-keyword-arguments (package-arguments promise)
9259 ((#:tests? _) #t)))
9260 (native-inputs
9261 `(("python2-futures" ,python2-futures)
9262 ("python2-pytest" ,python2-pytest)
9263 ,@(package-native-inputs promise))))))
9264
9265 (define-public python-urllib3
9266 (package
9267 (name "python-urllib3")
9268 (version "1.18.1")
9269 (source
9270 (origin
9271 (method url-fetch)
9272 (uri (pypi-uri "urllib3" version))
9273 (sha256
9274 (base32
9275 "1wb8aqnq53vzh2amrv8kc66f3h6fx217y0q62y6n30a64p2yqmam"))))
9276 (build-system python-build-system)
9277 (arguments `(#:tests? #f))
9278 (native-inputs
9279 `(;; some packages for tests
9280 ("python-nose" ,python-nose)
9281 ("python-mock" ,python-mock)
9282 ("python-tornado" ,python-tornado)))
9283 (propagated-inputs
9284 `(;; extra packages for https security
9285 ("python-certifi" ,python-certifi)
9286 ("python-ndg-httpsclient" ,python-ndg-httpsclient)
9287 ("python-pyasn1" ,python-pyasn1)
9288 ("python-pyopenssl" ,python-pyopenssl)))
9289 (home-page "https://urllib3.readthedocs.org/")
9290 (synopsis "HTTP library with thread-safe connection pooling")
9291 (description
9292 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9293 can reuse the same socket connection for multiple requests, it can POST files,
9294 supports url redirection and retries, and also gzip and deflate decoding.")
9295 (license license:expat)))
9296
9297 (define-public python2-urllib3
9298 (package-with-python2 python-urllib3))
9299
9300 (define-public python-colorama
9301 (package
9302 (name "python-colorama")
9303 (version "0.3.7")
9304 (source
9305 (origin
9306 (method url-fetch)
9307 (uri (pypi-uri "colorama" version))
9308 (sha256
9309 (base32
9310 "0avqkn6362v7k2kg3afb35g4sfdvixjgy890clip4q174p9whhz0"))))
9311 (build-system python-build-system)
9312 (synopsis "Colored terminal text rendering for Python")
9313 (description "Colorama is a Python library for rendering colored terminal
9314 text.")
9315 (home-page "https://pypi.python.org/pypi/colorama")
9316 (license license:bsd-3)))
9317
9318 (define-public python2-colorama
9319 (package-with-python2 python-colorama))
9320
9321 (define-public python-rsa
9322 (package
9323 (name "python-rsa")
9324 (version "3.4.2")
9325 (source
9326 (origin
9327 (method url-fetch)
9328 (uri (pypi-uri "rsa" version))
9329 (sha256
9330 (base32
9331 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9332 (build-system python-build-system)
9333 (propagated-inputs
9334 `(("python-pyasn1" ,python-pyasn1)))
9335 (synopsis "Pure-Python RSA implementation")
9336 (description "Python-RSA is a pure-Python RSA implementation. It supports
9337 encryption and decryption, signing and verifying signatures, and key
9338 generation according to PKCS#1 version 1.5. It can be used as a Python
9339 library as well as on the command line.")
9340 (home-page "http://stuvel.eu/rsa")
9341 (license license:asl2.0)))
9342
9343 (define-public python2-rsa
9344 (package-with-python2 python-rsa))
9345
9346 (define-public python-pluggy
9347 (package
9348 (name "python-pluggy")
9349 (version "0.3.1")
9350 (source
9351 (origin
9352 (method url-fetch)
9353 (uri (pypi-uri "pluggy" version))
9354 (sha256
9355 (base32
9356 "18qfzfm40bgx672lkg8q9x5hdh76n7vax99aank7vh2nw21wg70m"))))
9357 (build-system python-build-system)
9358 (synopsis "Plugin and hook calling mechanism for Python")
9359 (description "Pluggy is an extraction of the plugin manager as used by
9360 Pytest but stripped of Pytest specific details.")
9361 (home-page "https://pypi.python.org/pypi/pluggy")
9362 (license license:expat)))
9363
9364 (define-public python2-pluggy
9365 (package-with-python2 python-pluggy))
9366
9367 (define-public python-tox
9368 (package
9369 (name "python-tox")
9370 (version "2.3.1")
9371 (source
9372 (origin
9373 (method url-fetch)
9374 (uri (pypi-uri "tox" version))
9375 (sha256
9376 (base32
9377 "1vj73ar4rimq3fwy5r2z3jv4g9qbh8rmpmncsc00g0k310acqzxz"))))
9378 (build-system python-build-system)
9379 (arguments
9380 ;; FIXME: Tests require pytest-timeout, which itself requires
9381 ;; pytest>=2.8.0 for installation.
9382 '(#:tests? #f))
9383 (propagated-inputs
9384 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9385 ("python-py" ,python-py)
9386 ("python-virtualenv" ,python-virtualenv)))
9387 (native-inputs
9388 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9389 ("python-pytest" ,python-pytest))) ; >= 2.3.5
9390 (home-page "http://tox.testrun.org/")
9391 (synopsis "Virtualenv-based automation of test activities")
9392 (description "Tox is a generic virtualenv management and test command line
9393 tool. It can be used to check that a package installs correctly with
9394 different Python versions and interpreters, or run tests in each type of
9395 supported environment, or act as a frontend to continuous integration
9396 servers.")
9397 (license license:expat)))
9398
9399 (define-public python2-tox
9400 (package-with-python2 python-tox))
9401
9402 (define-public python-jmespath
9403 (package
9404 (name "python-jmespath")
9405 (version "0.9.0")
9406 (source
9407 (origin
9408 (method url-fetch)
9409 (uri (pypi-uri "jmespath" version))
9410 (sha256
9411 (base32
9412 "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8"))))
9413 (build-system python-build-system)
9414 (native-inputs
9415 `(("python-nose" ,python-nose)))
9416 (synopsis "JSON Matching Expressions")
9417 (description "JMESPath (pronounced “james path”) is a Python library that
9418 allows one to declaratively specify how to extract elements from a JSON
9419 document.")
9420 (home-page "https://github.com/jmespath/jmespath.py")
9421 (license license:expat)))
9422
9423 (define-public python2-jmespath
9424 (package-with-python2 python-jmespath))
9425
9426 (define-public python-botocore
9427 (package
9428 (name "python-botocore")
9429 (version "1.5.26")
9430 (source
9431 (origin
9432 (method url-fetch)
9433 (uri (pypi-uri "botocore" version))
9434 (sha256
9435 (base32
9436 "1b7l48hr88galrrc5q6k21z3sdadzxc87ppzs7k9fz4p1w8bfnvb"))))
9437 (build-system python-build-system)
9438 (arguments
9439 ;; FIXME: Many tests are failing.
9440 '(#:tests? #f))
9441 (propagated-inputs
9442 `(("python-dateutil" ,python-dateutil)
9443 ("python-docutils" ,python-docutils)
9444 ("python-jmespath" ,python-jmespath)))
9445 (native-inputs
9446 `(("python-mock" ,python-mock)
9447 ("python-nose" ,python-nose)
9448 ("behave" ,behave)
9449 ("python-tox" ,python-tox)
9450 ("python-wheel" ,python-wheel)))
9451 (home-page "https://github.com/boto/botocore")
9452 (synopsis "Low-level interface to AWS")
9453 (description "Botocore is a Python library that provides a low-level
9454 interface to the Amazon Web Services (AWS) API.")
9455 (license license:asl2.0)))
9456
9457 (define-public python2-botocore
9458 (package-with-python2 python-botocore))
9459
9460 (define-public awscli
9461 (package
9462 (name "awscli")
9463 (version "1.11.63")
9464 (source
9465 (origin
9466 (method url-fetch)
9467 (uri (pypi-uri name version))
9468 (sha256
9469 (base32
9470 "1r8aqv8w27k76lcsfk83w6qw9lz8gk2ibzwacp5wjhpp2gik911m"))))
9471 (build-system python-build-system)
9472 (propagated-inputs
9473 `(("python-colorama" ,python-colorama)
9474 ("python-botocore" ,python-botocore)
9475 ("python-s3transfer" ,python-s3transfer)
9476 ("python-docutils" ,python-docutils)
9477 ("python-pyyaml" ,python-pyyaml)
9478 ("python-rsa" ,python-rsa)))
9479 (arguments
9480 ;; FIXME: The 'pypi' release does not contain tests.
9481 '(#:tests? #f))
9482 (home-page "https://aws.amazon.com/cli/")
9483 (synopsis "Command line client for AWS")
9484 (description "AWS CLI provides a unified command line interface to the
9485 Amazon Web Services (AWS) API.")
9486 (license license:asl2.0)))
9487
9488 (define-public python-hypothesis
9489 (package
9490 (name "python-hypothesis")
9491 (version "3.1.0")
9492 (source (origin
9493 (method url-fetch)
9494 (uri (pypi-uri "hypothesis" version))
9495 (sha256
9496 (base32
9497 "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
9498 (build-system python-build-system)
9499 (native-inputs
9500 `(("python-flake8" ,python-flake8)
9501 ("python-pytest" ,python-pytest)))
9502 (synopsis "Library for property based testing")
9503 (description "Hypothesis is a library for testing your Python code against a
9504 much larger range of examples than you would ever want to write by hand. It’s
9505 based on the Haskell library, Quickcheck, and is designed to integrate
9506 seamlessly into your existing Python unit testing work flow.")
9507 (home-page "https://github.com/DRMacIver/hypothesis")
9508 (license license:mpl2.0)
9509 (properties `((python2-variant . ,(delay python2-hypothesis))))))
9510
9511 (define-public python2-hypothesis
9512 (let ((hypothesis (package-with-python2
9513 (strip-python2-variant python-hypothesis))))
9514 (package (inherit hypothesis)
9515 (native-inputs
9516 `(("python2-enum34" ,python2-enum34)
9517 ,@(package-native-inputs hypothesis))))))
9518
9519 (define-public python-pytest-subtesthack
9520 (package
9521 (name "python-pytest-subtesthack")
9522 (version "0.1.1")
9523 (source (origin
9524 (method url-fetch)
9525 (uri (pypi-uri "pytest-subtesthack" version))
9526 (sha256
9527 (base32
9528 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
9529 (build-system python-build-system)
9530 (propagated-inputs
9531 `(("python-pytest" ,python-pytest)))
9532 (synopsis "Set-up and tear-down fixtures for unit tests")
9533 (description "This plugin allows you to set up and tear down fixtures within
9534 unit test functions that use @code{py.test}. This is useful for using
9535 @command{hypothesis} inside py.test, as @command{hypothesis} will call the test
9536 function multiple times, without setting up or tearing down fixture state as is
9537 normally the case.")
9538 (home-page "https://github.com/untitaker/pytest-subtesthack/")
9539 (license license:unlicense)))
9540
9541 (define-public python2-pytest-subtesthack
9542 (package-with-python2 python-pytest-subtesthack))
9543
9544 (define-public python-xdo
9545 (package
9546 (name "python-xdo")
9547 (version "0.3")
9548 (source (origin
9549 (method url-fetch)
9550 (uri (string-append
9551 "http://http.debian.net/debian/pool/main/p/python-xdo/"
9552 "python-xdo_" version ".orig.tar.gz"))
9553 (sha256
9554 (base32
9555 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
9556 (build-system python-build-system)
9557 (arguments
9558 '(#:phases
9559 (modify-phases %standard-phases
9560 (add-before 'install 'patch-libxdo-path
9561 ;; Hardcode the path of dynamically loaded libxdo library.
9562 (lambda* (#:key inputs #:allow-other-keys)
9563 (let ((libxdo (string-append
9564 (assoc-ref inputs "xdotool")
9565 "/lib/libxdo.so")))
9566 (substitute* "xdo/_xdo.py"
9567 (("find_library\\(\"xdo\"\\)")
9568 (simple-format #f "\"~a\"" libxdo)))
9569 #t))))
9570 #:tests? #f)) ; no tests provided
9571 (propagated-inputs
9572 `(("python-six" ,python-six)))
9573 (inputs
9574 `(("xdotool" ,xdotool)
9575 ("libX11" ,libx11)))
9576 (home-page "https://tracker.debian.org/pkg/python-xdo")
9577 (synopsis "Python library for simulating X11 keyboard/mouse input")
9578 (description "Provides bindings to libxdo for manipulating X11 via simulated
9579 input. (Note that this is mostly a legacy library; you may wish to look at
9580 python-xdo for newer bindings.)")
9581 (license license:bsd-3)))
9582
9583 (define-public python2-xdo
9584 (package-with-python2 python-xdo))
9585
9586 (define-public python-wtforms
9587 (package
9588 (name "python-wtforms")
9589 (version "2.1")
9590 (source
9591 (origin
9592 (method url-fetch)
9593 (uri (pypi-uri "WTForms" version ".zip"))
9594 (sha256
9595 (base32
9596 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
9597 (build-system python-build-system)
9598 (arguments
9599 '(#:phases
9600 (modify-phases %standard-phases
9601 (add-after 'unpack 'remove-django-test
9602 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
9603 (lambda _
9604 (substitute*
9605 "tests/runtests.py"
9606 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
9607 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
9608 #t)))))
9609 (native-inputs
9610 `(("unzip" ,unzip)))
9611 (home-page "http://wtforms.simplecodes.com/")
9612 (synopsis
9613 "Form validation and rendering library for Python web development")
9614 (description
9615 "WTForms is a flexible forms validation and rendering library
9616 for Python web development. It is very similar to the web form API
9617 available in Django, but is a standalone package.")
9618 (license license:bsd-3)))
9619
9620 (define-public python2-wtforms
9621 (package-with-python2 python-wtforms))
9622
9623 (define-public python-mako
9624 (package
9625 (name "python-mako")
9626 (version "1.0.6")
9627 (source
9628 (origin
9629 (method url-fetch)
9630 (uri (pypi-uri "Mako" version))
9631 (sha256
9632 (base32
9633 "03dyxgjknp4ffsv7vwfd28l5bbpzi0ylp20543wpg3iahyyrwma8"))))
9634 (build-system python-build-system)
9635 (propagated-inputs
9636 `(("python-markupsafe" ,python-markupsafe)))
9637 (native-inputs
9638 `(("python-mock" ,python-mock)
9639 ("python-nose" ,python-nose)
9640 ("python-pytest" ,python-pytest)))
9641 (home-page "http://www.makotemplates.org/")
9642 (synopsis "Templating language for Python")
9643 (description "Mako is a templating language for Python that compiles
9644 templates into Python modules.")
9645 (license license:expat)))
9646
9647 (define-public python2-mako
9648 (package-with-python2 python-mako))
9649
9650 (define-public python-waitress
9651 (package
9652 (name "python-waitress")
9653 (version "0.8.10")
9654 (source
9655 (origin
9656 (method url-fetch)
9657 (uri (pypi-uri "waitress" version))
9658 (sha256
9659 (base32
9660 "017n9ra6vvmq9d5sfhdzyzr1mg15x2hj2dhm4pdlw98c1ypw2h3w"))))
9661 (build-system python-build-system)
9662 (home-page "https://github.com/Pylons/waitress")
9663 (synopsis "Waitress WSGI server")
9664 (description "Waitress is meant to be a production-quality pure-Python WSGI
9665 server with very acceptable performance.")
9666 (license license:zpl2.1)))
9667
9668 (define-public python2-waitress
9669 (package-with-python2 python-waitress))
9670
9671 (define-public python-wsgiproxy2
9672 (package
9673 (name "python-wsgiproxy2")
9674 (version "0.4.2")
9675 (source
9676 (origin
9677 (method url-fetch)
9678 (uri (pypi-uri "WSGIProxy2" version ".zip"))
9679 (sha256
9680 (base32
9681 "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4"))))
9682 (build-system python-build-system)
9683 (arguments
9684 '(;; Wsgiproxy2's test suite requires Restkit, which does not yet fully
9685 ;; support Python 3:
9686 ;; https://github.com/benoitc/restkit/issues/140
9687 #:tests? #f))
9688 (native-inputs
9689 `(("unzip" ,unzip)
9690 ("python-nose" ,python-nose)
9691 ("python-coverage" ,python-coverage)))
9692 (propagated-inputs
9693 `(("python-six" ,python-six)
9694 ("python-webob" ,python-webob)))
9695 (home-page
9696 "https://github.com/gawel/WSGIProxy2/")
9697 (synopsis "WSGI Proxy with various http client backends")
9698 (description "WSGI turns HTTP requests into WSGI function calls.
9699 WSGIProxy turns WSGI function calls into HTTP requests.
9700 It also includes code to sign requests and pass private data,
9701 and to spawn subprocesses to handle requests.")
9702 (license license:expat)))
9703
9704 (define-public python2-wsgiproxy2
9705 (package-with-python2 python-wsgiproxy2))
9706
9707 (define-public python-pastedeploy
9708 (package
9709 (name "python-pastedeploy")
9710 (version "1.5.2")
9711 (source
9712 (origin
9713 (method url-fetch)
9714 (uri (pypi-uri "PasteDeploy" version))
9715 (sha256
9716 (base32
9717 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
9718 (build-system python-build-system)
9719 (native-inputs
9720 `(("python-nose" ,python-nose)))
9721 (home-page "http://pythonpaste.org/deploy/")
9722 (synopsis
9723 "Load, configure, and compose WSGI applications and servers")
9724 (description
9725 "This tool provides code to load WSGI applications and servers from URIs;
9726 these URIs can refer to Python Eggs for INI-style configuration files. Paste
9727 Script provides commands to serve applications based on this configuration
9728 file.")
9729 (license license:expat)))
9730
9731 (define-public python2-pastedeploy
9732 (package-with-python2 python-pastedeploy))
9733
9734 (define-public python-paste
9735 (package
9736 (name "python-paste")
9737 (version "2.0.3")
9738 (source
9739 (origin
9740 (method url-fetch)
9741 (uri (pypi-uri "Paste" version))
9742 (sha256
9743 (base32
9744 "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3"))
9745 (patches (search-patches "python-paste-remove-website-test.patch"
9746 "python-paste-remove-timing-test.patch"))))
9747 (build-system python-build-system)
9748 (native-inputs
9749 `(("python-nose" ,python-nose)))
9750 (propagated-inputs
9751 `(("python-six" ,python-six)))
9752 (home-page "http://pythonpaste.org")
9753 (synopsis
9754 "Python web development tools, focusing on WSGI")
9755 (description
9756 "Paste provides a variety of web development tools and middleware which
9757 can be nested together to build web applications. Paste's design closely
9758 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
9759 (license license:expat)))
9760
9761 (define-public python2-paste
9762 (package-with-python2 python-paste))
9763
9764 (define-public python-pastescript
9765 (package
9766 (name "python-pastescript")
9767 (version "2.0.2")
9768 (source
9769 (origin
9770 (method url-fetch)
9771 (uri (pypi-uri "PasteScript" version))
9772 (sha256
9773 (base32
9774 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
9775 (build-system python-build-system)
9776 (native-inputs
9777 `(("python-nose" ,python-nose)))
9778 (propagated-inputs
9779 `(("python-paste" ,python-paste)
9780 ("python-pastedeploy" ,python-pastedeploy)))
9781 (home-page "http://pythonpaste.org/script/")
9782 (arguments
9783 '(;; Unfortunately, this requires the latest unittest2,
9784 ;; but that requires traceback2 which requires linecache2 which requires
9785 ;; unittest2. So we're skipping tests for now.
9786 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
9787 ;; so in theory we could get around this situation somehow.)
9788 #:tests? #f))
9789 (synopsis
9790 "Pluggable command line tool for serving web applications and more")
9791 (description
9792 "PasteScript is a plugin-friendly command line tool which provides a
9793 variety of features, from launching web applications to bootstrapping project
9794 layouts.")
9795 (license license:expat)))
9796
9797 (define-public python2-pastescript
9798 (package-with-python2 python-pastescript))
9799
9800 (define-public python-pyquery
9801 (package
9802 (name "python-pyquery")
9803 (version "1.2.17")
9804 (source
9805 (origin
9806 (method url-fetch)
9807 (uri (pypi-uri "pyquery" version))
9808 (sha256
9809 (base32
9810 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
9811 (build-system python-build-system)
9812 (native-inputs
9813 `(("python-webob" ,python-webob)
9814 ("python-webtest" ,python-webtest)))
9815 (propagated-inputs
9816 `(("python-lxml" ,python-lxml)
9817 ("python-cssselect" ,python-cssselect)))
9818 (home-page "https://github.com/gawel/pyquery")
9819 (synopsis "Make jQuery-like queries on xml documents")
9820 (description "pyquery allows you to make jQuery queries on xml documents.
9821 The API is as much as possible the similar to jQuery. pyquery uses lxml for
9822 fast xml and html manipulation.")
9823 (license license:bsd-3)))
9824
9825 (define-public python2-pyquery
9826 (package-with-python2 python-pyquery))
9827
9828 (define-public python-webtest
9829 (package
9830 (name "python-webtest")
9831 (version "2.0.20")
9832 (source
9833 (origin
9834 (method url-fetch)
9835 (uri (pypi-uri "WebTest" version))
9836 (sha256
9837 (base32
9838 "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv"))))
9839 (build-system python-build-system)
9840 (arguments
9841 `(;; Unfortunately we have to disable tests!
9842 ;; This release of WebTest is pinned to python-nose < 1.3,
9843 ;; but older versions of python-nose are plagued with the following
9844 ;; bug(s), which rears its ugly head during test execution:
9845 ;; https://github.com/nose-devs/nose/issues/759
9846 ;; https://github.com/nose-devs/nose/pull/811
9847 #:tests? #f))
9848 ;; Commented out code is no good, but in this case, once tests
9849 ;; are ready to be enabled again, we should put the following
9850 ;; in place:
9851 ;; (native-inputs
9852 ;; `(("python-nose" ,python-nose) ; technially < 1.3,
9853 ;; ; but see above comment
9854 ;; ("python-coverage" ,python-coverage)
9855 ;; ("python-mock" ,python-mock)
9856 ;; ("python-pastedeploy" ,python-pastedeploy)
9857 ;; ("python-wsgiproxy2" ,python-wsgiproxy2)
9858 ;; ("python-pyquery" ,python-pyquery)))
9859 (propagated-inputs
9860 `(("python-waitress" ,python-waitress)
9861 ("python-webob" ,python-webob)
9862 ("python-six" ,python-six)
9863 ("python-beautifulsoup4" ,python-beautifulsoup4)))
9864 (home-page "http://webtest.pythonpaste.org/")
9865 (synopsis "Helper to test WSGI applications")
9866 (description "Webtest allows you to test your Python web applications
9867 without starting an HTTP server. It supports anything that supports the
9868 minimum of WSGI.")
9869 (license license:expat)))
9870
9871 (define-public python2-webtest
9872 (package-with-python2 python-webtest))
9873
9874 (define-public python-anyjson
9875 (package
9876 (name "python-anyjson")
9877 (version "0.3.3")
9878 (source
9879 (origin
9880 (method url-fetch)
9881 (uri (pypi-uri "anyjson" version))
9882 (sha256
9883 (base32
9884 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
9885 (build-system python-build-system)
9886 (arguments
9887 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
9888 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
9889 ;; whatever) so this transformation needs to be done before the tests
9890 ;; can be run. Maybe we could add a build step to transform beforehand
9891 ;; but it could be annoying/difficult.
9892 ;; We can enable tests for the Python 2 version, though, and do below.
9893 #:tests? #f))
9894 (home-page "http://bitbucket.org/runeh/anyjson/")
9895 (synopsis
9896 "Wraps best available JSON implementation in a common interface")
9897 (description
9898 "Anyjson loads whichever is the fastest JSON module installed
9899 and provides a uniform API regardless of which JSON implementation is used.")
9900 (license license:bsd-3)
9901 (properties `((python2-variant . ,(delay python2-anyjson))))))
9902
9903 (define-public python2-anyjson
9904 (let ((anyjson (package-with-python2
9905 (strip-python2-variant python-anyjson))))
9906 (package
9907 (inherit anyjson)
9908 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
9909 #:tests? #t
9910 ,@(package-arguments anyjson)))
9911 (native-inputs `(("python2-nose" ,python2-nose))))))
9912
9913 (define-public python-amqp
9914 (package
9915 (name "python-amqp")
9916 (version "1.4.9")
9917 (source
9918 (origin
9919 (method url-fetch)
9920 (uri (pypi-uri "amqp" version))
9921 (sha256
9922 (base32
9923 "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid"))))
9924 (build-system python-build-system)
9925 (native-inputs
9926 `(("python-nose" ,python-nose)
9927 ("python-mock" ,python-mock)))
9928 (home-page "https://github.com/celery/py-amqp")
9929 (synopsis
9930 "Low-level AMQP client for Python (fork of amqplib)")
9931 (description
9932 "This is a fork of amqplib which was originally written by Barry Pederson.
9933 It is maintained by the Celery project, and used by kombu as a pure python
9934 alternative when librabbitmq is not available.")
9935 (license license:lgpl2.1+)
9936 (properties `((python2-variant . ,(delay python2-amqp))))))
9937
9938 (define-public python2-amqp
9939 (let ((amqp (package-with-python2
9940 (strip-python2-variant python-amqp))))
9941 (package
9942 (inherit amqp)
9943 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
9944 ;; unmaintained. Weirdly, does not do this on the python 3
9945 ;; version?
9946 #:tests? #f
9947 ,@(package-arguments amqp))))))
9948
9949 (define-public python-kombu
9950 (package
9951 (name "python-kombu")
9952 (version "3.0.37")
9953 (source
9954 (origin
9955 (method url-fetch)
9956 (uri (pypi-uri "kombu" version))
9957 (sha256
9958 (base32
9959 "0l16chb314gpq2v7fh94a22c30lcv6w3ylmhsa60bldlcq6a0r70"))))
9960 (build-system python-build-system)
9961 (native-inputs
9962 `(("python-mock" ,python-mock)
9963 ("python-nose" ,python-nose)))
9964 (propagated-inputs
9965 `(("python-anyjson" ,python-anyjson)
9966 ("python-amqp" ,python-amqp)
9967 ("python-redis" ,python-redis)))
9968 (home-page "http://kombu.readthedocs.org")
9969 (synopsis "Message passing library for Python")
9970 (description "The aim of Kombu is to make messaging in Python as easy as
9971 possible by providing an idiomatic high-level interface for the AMQ protocol,
9972 and also provide proven and tested solutions to common messaging problems.
9973 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
9974 message orientation, queuing, routing, reliability and security, for which the
9975 RabbitMQ messaging server is the most popular implementation.")
9976 (license license:bsd-3)
9977 (properties `((python2-variant . ,(delay python2-kombu))))))
9978
9979 (define-public python2-kombu
9980 (let ((kombu (package-with-python2
9981 (strip-python2-variant python-kombu))))
9982 (package
9983 (inherit kombu)
9984 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
9985 ;; It works fine on the python3 variant.
9986 #:tests? #f
9987 ,@(package-arguments kombu)))
9988 (native-inputs `(("python2-unittest2" ,python2-unittest2)
9989 ,@(package-native-inputs kombu))))))
9990
9991 (define-public python-billiard
9992 (package
9993 (name "python-billiard")
9994 (version "3.3.0.23")
9995 (source
9996 (origin
9997 (method url-fetch)
9998 (uri (pypi-uri "billiard" version))
9999 (sha256
10000 (base32
10001 "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"))))
10002 (build-system python-build-system)
10003 (native-inputs
10004 `(("python-nose" ,python-nose)))
10005 (home-page "https://github.com/celery/billiard")
10006 (synopsis
10007 "Python multiprocessing fork with improvements and bugfixes")
10008 (description
10009 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10010 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10011 pyprocessing package. This standalone variant is intended to be compatible with
10012 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10013 (license license:bsd-3)
10014 (properties `((python2-variant . ,(delay python2-billiard))))))
10015
10016 (define-public python2-billiard
10017 (let ((billiard (package-with-python2
10018 (strip-python2-variant python-billiard))))
10019 (package
10020 (inherit billiard)
10021 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10022 ("python2-mock" ,python2-mock)
10023 ,@(package-native-inputs billiard))))))
10024
10025 (define-public python-celery
10026 (package
10027 (name "python-celery")
10028 (version "3.1.24")
10029 (source
10030 (origin
10031 (method url-fetch)
10032 (uri (pypi-uri "celery" version))
10033 (sha256
10034 (base32
10035 "0yh2prhdnx2dgkb67a5drj12hh2zvzx5f611p7mqqg01ydghif4r"))))
10036 (build-system python-build-system)
10037 (arguments
10038 `(#:phases
10039 (modify-phases %standard-phases
10040 ;; These tests break with Python 3.5:
10041 ;; https://github.com/celery/celery/issues/2897#issuecomment-253066295
10042 (replace 'check
10043 (lambda _
10044 (zero?
10045 (system* "nosetests" "--exclude=^test_safe_to_remove.*")))))))
10046 (native-inputs
10047 `(("python-nose" ,python-nose)))
10048 (propagated-inputs
10049 `(("python-pytz" ,python-pytz)
10050 ("python-billiard" ,python-billiard)
10051 ("python-kombu" ,python-kombu)))
10052 (home-page "http://celeryproject.org")
10053 (synopsis "Distributed Task Queue")
10054 (description "Celery is an asynchronous task queue/job queue based on
10055 distributed message passing. It is focused on real-time operation, but
10056 supports scheduling as well. The execution units, called tasks, are executed
10057 concurrently on a single or more worker servers using multiprocessing,
10058 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10059 synchronously (wait until ready).")
10060 (license license:bsd-3)
10061 (properties `((python2-variant . ,(delay python2-celery))))))
10062
10063 (define-public python2-celery
10064 (let ((celery (package-with-python2
10065 (strip-python2-variant python-celery))))
10066 (package
10067 (inherit celery)
10068 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10069 ("python2-mock" ,python2-mock)
10070 ,@(package-native-inputs celery))))))
10071
10072 (define-public python-translitcodec
10073 (package
10074 (name "python-translitcodec")
10075 (version "0.4.0")
10076 (source
10077 (origin
10078 (method url-fetch)
10079 (uri (pypi-uri "translitcodec" version))
10080 (sha256
10081 (base32
10082 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10083 (build-system python-build-system)
10084 (arguments
10085 `(#:tests? #f)) ; no tests provided
10086 (home-page
10087 "https://github.com/claudep/translitcodec")
10088 (synopsis
10089 "Unicode to 8-bit charset transliteration codec")
10090 (description
10091 "This package contains codecs for transliterating ISO 10646 texts into
10092 best-effort representations using smaller coded character sets (ASCII,
10093 ISO 8859, etc.).")
10094 (license license:expat)))
10095
10096 (define-public python2-translitcodec
10097 (package-with-python2 python-translitcodec))
10098
10099 (define-public python-editor
10100 (package
10101 (name "python-editor")
10102 (version "0.5")
10103 (source
10104 (origin
10105 (method url-fetch)
10106 (uri (pypi-uri "python-editor" version))
10107 (sha256
10108 (base32
10109 "1ypnpgvzpkbwsg4rdvy4sy51j28b5xq9v8pnkwxncn07vqz06p7n"))))
10110 (build-system python-build-system)
10111 (home-page
10112 "https://github.com/fmoo/python-editor")
10113 (synopsis
10114 "Programmatically open an editor, capture the result")
10115 (description
10116 "python-editor is a library that provides the editor module for
10117 programmatically interfacing with your system's $EDITOR.")
10118 (license license:asl2.0)))
10119
10120 (define-public python2-editor
10121 (package-with-python2 python-editor))
10122
10123 (define-public python-sphinxcontrib-programoutput
10124 (package
10125 (name "python-sphinxcontrib-programoutput")
10126 (version "0.10")
10127 (source (origin
10128 (method url-fetch)
10129 (uri (pypi-uri "sphinxcontrib-programoutput" version))
10130 (sha256
10131 (base32
10132 "153hhnlbx4688zj9wd64819ps5znc2jlyp5crkgzvn5hxgy99vpx"))))
10133 (build-system python-build-system)
10134 (arguments
10135 ;; FIXME: Many tests are failing and the upstream is gone.
10136 '(#:tests? #f))
10137 (propagated-inputs
10138 `(("python-sphinx" ,python-sphinx)))
10139 (synopsis "Sphinx extension to include program output")
10140 (description "A Sphinx extension to literally insert the output of arbitrary
10141 commands into documents, helping you to keep your command examples up to date.")
10142 (home-page "https://github.com/lunaryorn/sphinxcontrib-programoutput")
10143 (license license:bsd-2)))
10144
10145 (define-public python2-sphinxcontrib-programoutput
10146 (package-with-python2 python-sphinxcontrib-programoutput))
10147
10148 (define-public python-sphinx-repoze-autointerface
10149 (package
10150 (name "python-sphinx-repoze-autointerface")
10151 (version "0.8")
10152 (source (origin
10153 (method url-fetch)
10154 (uri (pypi-uri "repoze.sphinx.autointerface" version))
10155 (sha256
10156 (base32
10157 "08ycivzf7bh4a1zcyp31hbyqs1b2c9r26raa3vxjwwmbfqr3iw4f"))))
10158 (build-system python-build-system)
10159 (arguments '(#:tests? #f)) ; No tests.
10160 (propagated-inputs
10161 `(("python-sphinx" ,python-sphinx)
10162 ("python-zope-interface" ,python-zope-interface)))
10163 (synopsis "Auto-generate Sphinx API docs from Zope interfaces")
10164 (description "This package defines an extension for the Sphinx documentation
10165 system. The extension allows generation of API documentation by
10166 introspection of @code{zope.interface} instances in code.")
10167 (home-page "https://github.com/repoze/repoze.sphinx.autointerface")
10168 (license license:repoze)))
10169
10170 (define-public python2-sphinx-repoze-autointerface
10171 (package-with-python2 python-sphinx-repoze-autointerface))
10172
10173 (define-public python-psycopg2
10174 (package
10175 (name "python-psycopg2")
10176 (version "2.6.2")
10177 (source
10178 (origin
10179 (method url-fetch)
10180 (uri (pypi-uri "psycopg2" version))
10181 (sha256
10182 (base32
10183 "0p60z2gwfcal30y2w8gprflchp1kcg9qblc5rn782p4wxl90wjbh"))))
10184 (build-system python-build-system)
10185 (arguments
10186 ;; Tests would require a postgresql database "psycopg2_test"
10187 ;; and a running postgresql database management service.
10188 `(#:tests? #f)) ; TODO re-enable after providing a test-db.
10189 (inputs
10190 `(("postgresql" ,postgresql))) ; libpq
10191 (home-page "http://initd.org/psycopg/")
10192 (synopsis "Python PostgreSQL adapter")
10193 (description
10194 "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API 2.0. ")
10195 (license license:lgpl3+)))
10196
10197 (define-public python2-psycopg2
10198 (package-with-python2 python-psycopg2))
10199
10200 (define-public python-vobject
10201 (package
10202 (name "python-vobject")
10203 (version "0.9.2")
10204 (source (origin
10205 (method url-fetch)
10206 (uri (pypi-uri "vobject" version))
10207 (sha256
10208 (base32
10209 "1qfnwlx8qwkgr6nf5wvl6ff1r3kll53dh3z6nyp173nmlhhhqccb"))))
10210 (build-system python-build-system)
10211 (arguments
10212 '(;; The test suite relies on some non-portable Windows interfaces.
10213 #:tests? #f))
10214 (propagated-inputs
10215 `(("python-dateutil" ,python-dateutil)
10216 ("python-pyicu" ,python-pyicu)))
10217 (synopsis "Parse and generate vCard and vCalendar files")
10218 (description "Vobject is intended to be a full featured Python package for
10219 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10220 are supported and well tested. vCard 3.0 files are supported, and all data
10221 should be imported, but only a few components are understood in a sophisticated
10222 way.")
10223 (home-page "http://eventable.github.io/vobject/")
10224 (license license:asl2.0)))
10225
10226 (define-public python2-vobject
10227 (package-with-python2 python-vobject))
10228
10229 (define-public python-munkres
10230 (package
10231 (name "python-munkres")
10232 (version "1.0.8")
10233 (source (origin
10234 (method url-fetch)
10235 (uri (pypi-uri "munkres" version))
10236 (sha256
10237 (base32
10238 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10239 (build-system python-build-system)
10240 (arguments
10241 '(#:tests? #f)) ; no test suite
10242 (home-page "http://software.clapper.org/munkres/")
10243 (synopsis "Implementation of the Munkres algorithm")
10244 (description "The Munkres module provides an implementation of the Munkres
10245 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10246 useful for solving the Assignment Problem.")
10247 (license license:bsd-3)))
10248
10249 (define-public python2-munkres
10250 (package-with-python2 python-munkres))
10251
10252 (define-public python-flask
10253 (package
10254 (name "python-flask")
10255 (version "0.11.1")
10256 (source (origin
10257 (method url-fetch)
10258 (uri (pypi-uri "Flask" version))
10259 (sha256
10260 (base32
10261 "03kbfll4sj3v5z7r31c7bhfpi11r1np076d4p1k2kg4yzcmkywdl"))))
10262 (build-system python-build-system)
10263 (propagated-inputs
10264 `(("python-itsdangerous" ,python-itsdangerous)
10265 ("python-jinja2" ,python-jinja2)
10266 ("python-click" ,python-click)
10267 ("python-werkzeug" ,python-werkzeug)))
10268 (home-page "https://github.com/mitsuhiko/flask/")
10269 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
10270 (description "Flask is a micro web framework based on the Werkzeug toolkit
10271 and Jinja2 template engine. It is called a micro framework because it does not
10272 presume or force a developer to use a particular tool or library.")
10273 (license license:bsd-3)))
10274
10275 (define-public python2-flask
10276 (package-with-python2 python-flask))
10277
10278 (define-public python-flask-wtf
10279 (package
10280 (name "python-flask-wtf")
10281 (version "0.13.1")
10282 (source
10283 (origin
10284 (method url-fetch)
10285 (uri (pypi-uri "Flask-WTF" version))
10286 (sha256
10287 (base32
10288 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
10289 (build-system python-build-system)
10290 (arguments
10291 '(#:phases
10292 (modify-phases %standard-phases
10293 (add-before 'check 'drop-failing-test
10294 (lambda _
10295 ;; FIXME: This file tries resolving an external server, which
10296 ;; fails. Try to patch out the offending section instead of
10297 ;; deleting the whole thing.
10298 (delete-file "tests/test_recaptcha.py")
10299 #t)))))
10300 (propagated-inputs
10301 `(("python-flask-babel" ,python-flask-babel)
10302 ("python-babel" ,python-babel)
10303 ("python-wtforms" ,python-wtforms)))
10304 (native-inputs
10305 `(("python-nose" ,python-nose)))
10306 (home-page "https://github.com/lepture/flask-wtf")
10307 (synopsis "Simple integration of Flask and WTForms")
10308 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
10309 upload, and reCAPTCHA.")
10310 (license license:bsd-3)))
10311
10312 (define-public python2-flask-wtf
10313 (package-with-python2 python-flask-wtf))
10314
10315 (define-public python-flask-multistatic
10316 (package
10317 (name "python-flask-multistatic")
10318 (version "1.0")
10319 (source
10320 (origin
10321 (method url-fetch)
10322 (uri (pypi-uri "flask-multistatic" version))
10323 (sha256
10324 (base32
10325 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
10326 (build-system python-build-system)
10327 (propagated-inputs
10328 `(("python-flask" ,python-flask)))
10329 (home-page "https://pagure.io/flask-multistatic")
10330 (synopsis "Flask plugin to allow overriding static files")
10331 (description "@code{flask-multistatic} is a flask plugin that adds support
10332 for overriding static files.")
10333 (license license:gpl3+)))
10334
10335 (define-public python2-flask-multistatic
10336 (package-with-python2 python-flask-multistatic))
10337
10338 (define-public python-cookies
10339 (package
10340 (name "python-cookies")
10341 (version "2.2.1")
10342 (source (origin
10343 (method url-fetch)
10344 (uri (pypi-uri "cookies" version))
10345 (sha256
10346 (base32
10347 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
10348 (build-system python-build-system)
10349 (arguments
10350 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
10351 #:tests? #f))
10352 (native-inputs
10353 `(("python-pytest" ,python2-pytest)))
10354 (synopsis "HTTP cookie parser and renderer")
10355 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
10356 Python.")
10357 (home-page "https://gitlab.com/sashahart/cookies")
10358 (license license:expat)))
10359
10360 (define-public python2-cookies
10361 (package-with-python2 python-cookies))
10362
10363 (define-public python-responses
10364 (package
10365 (name "python-responses")
10366 (version "0.5.1")
10367 (source (origin
10368 (method url-fetch)
10369 (uri (pypi-uri "responses" version))
10370 (sha256
10371 (base32
10372 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
10373 (build-system python-build-system)
10374 (arguments
10375 `(;; Test suite is not distributed:
10376 ;; https://github.com/getsentry/responses/issues/38
10377 #:tests? #f))
10378 (native-inputs
10379 `(("python-mock" ,python-mock)))
10380 (propagated-inputs
10381 `(("python-requests" ,python-requests)
10382 ("python-cookies" ,python-cookies)
10383 ("python-six" ,python-six)))
10384 (home-page "https://github.com/getsentry/responses")
10385 (synopsis "Utility for mocking out the `requests` Python library")
10386 (description "A utility library for mocking out the `requests` Python
10387 library.")
10388 (license license:asl2.0)))
10389
10390 (define-public python2-responses
10391 (package-with-python2 python-responses))
10392
10393 (define-public python-whoosh
10394 (package
10395 (name "python-whoosh")
10396 (version "2.7.4")
10397 (source
10398 (origin
10399 (method url-fetch)
10400 (uri (pypi-uri "Whoosh" version))
10401 (sha256
10402 (base32
10403 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10404 (build-system python-build-system)
10405 (native-inputs
10406 `(("python-pytest" ,python-pytest)))
10407 (home-page "http://bitbucket.org/mchaput/whoosh")
10408 (synopsis "Full text indexing, search, and spell checking library")
10409 (description
10410 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10411 checking library.")
10412 (license license:bsd-2)))
10413
10414 (define-public python2-whoosh
10415 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10416 (package (inherit whoosh)
10417 (propagated-inputs
10418 `(("python2-backport-ssl-match-hostname"
10419 ,python2-backport-ssl-match-hostname)
10420 ,@(package-propagated-inputs whoosh))))))
10421
10422 (define-public python-pathlib
10423 (package
10424 (name "python-pathlib")
10425 (version "1.0.1")
10426 (source (origin
10427 (method url-fetch)
10428 (uri (pypi-uri "pathlib" version))
10429 (sha256
10430 (base32
10431 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10432 (build-system python-build-system)
10433 ;; The tests depend on the internal "test" module, which does not provide
10434 ;; a stable interface.
10435 (arguments `(#:tests? #f))
10436 (home-page "https://pathlib.readthedocs.org/")
10437 (synopsis "Object-oriented file system paths")
10438 (description "Pathlib offers a set of classes to handle file system paths.
10439 It offers the following advantages over using string objects:
10440
10441 @enumerate
10442 @item No more cumbersome use of os and os.path functions. Everything can
10443 be done easily through operators, attribute accesses, and method calls.
10444 @item Embodies the semantics of different path types. For example,
10445 comparing Windows paths ignores casing.
10446 @item Well-defined semantics, eliminating any inconsistencies or
10447 ambiguities (forward vs. backward slashes, etc.).
10448 @end enumerate
10449
10450 Note: In Python 3.4, pathlib is now part of the standard library. For other
10451 Python versions please consider python-pathlib2 instead, which tracks the
10452 standard library module. This module (python-pathlib) isn't maintained
10453 anymore.")
10454 (license license:expat)))
10455
10456 (define-public python2-pathlib
10457 (package-with-python2 python-pathlib))
10458
10459 (define-public python2-pathlib2
10460 (package
10461 (name "python2-pathlib2")
10462 (version "2.1.0")
10463 (source (origin
10464 (method url-fetch)
10465 (uri (pypi-uri "pathlib2" version))
10466 (sha256
10467 (base32
10468 "0p050msg5c8d0kadv702jnfshaxrb0il765cpkgnhn6mq5hakcyy"))))
10469 (build-system python-build-system)
10470 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10471 ;; version is 3.4 which already includes this package as part of the
10472 ;; standard library.
10473 (arguments
10474 `(#:python ,python-2))
10475 (native-inputs
10476 `(("python2-six" ,python2-six)))
10477 (home-page "http://pypi.python.org/pypi/pathlib2/")
10478 (synopsis "Object-oriented file system paths - backport of standard
10479 pathlib module")
10480 (description "The goal of pathlib2 is to provide a backport of standard
10481 pathlib module which tracks the standard library module, so all the newest
10482 features of the standard pathlib can be used also on older Python versions.
10483
10484 Pathlib offers a set of classes to handle file system paths. It offers the
10485 following advantages over using string objects:
10486
10487 @enumerate
10488 @item No more cumbersome use of os and os.path functions. Everything can
10489 be done easily through operators, attribute accesses, and method calls.
10490 @item Embodies the semantics of different path types. For example,
10491 comparing Windows paths ignores casing.
10492 @item Well-defined semantics, eliminating any inconsistencies or
10493 ambiguities (forward vs. backward slashes, etc.).
10494 @end enumerate")
10495 (license license:expat)))
10496
10497 (define-public python-jellyfish
10498 (package
10499 (name "python-jellyfish")
10500 (version "0.5.6")
10501 (source (origin
10502 (method url-fetch)
10503 (uri (pypi-uri "jellyfish" version))
10504 (sha256
10505 (base32
10506 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10507 (build-system python-build-system)
10508 (native-inputs
10509 `(("python-pytest" ,python-pytest)))
10510 (home-page "https://github.com/jamesturk/jellyfish")
10511 (synopsis "Approximate and phonetic matching of strings")
10512 (description "Jellyfish uses a variety of string comparison and phonetic
10513 encoding algorithms to do fuzzy string matching.")
10514 (license license:bsd-2)
10515 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10516
10517 (define-public python2-jellyfish
10518 (let ((jellyfish (package-with-python2
10519 (strip-python2-variant python-jellyfish))))
10520 (package (inherit jellyfish)
10521 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10522 ,@(package-native-inputs jellyfish))))))
10523
10524 (define-public python2-unicodecsv
10525 (package
10526 (name "python2-unicodecsv")
10527 (version "0.14.1")
10528 (source (origin
10529 (method url-fetch)
10530 ;; The test suite is not included in the PyPi release.
10531 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10532 (uri (string-append "https://github.com/jdunck/python-unicodecsv/"
10533 "archive/" version ".tar.gz"))
10534 (file-name (string-append name "-" version ".tar.gz"))
10535 (sha256
10536 (base32
10537 "087nqanfcyp6mlfbbr5lva5f3w6iz1bybls9xlrb8icmc474wh4w"))))
10538 (build-system python-build-system)
10539 (arguments
10540 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10541 #:python ,python-2))
10542 (native-inputs
10543 `(("python2-unittest2" ,python2-unittest2)))
10544 (home-page "https://github.com/jdunck/python-unicodecsv")
10545 (synopsis "Unicode CSV module for Python 2")
10546 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10547 module, adding support for Unicode strings.")
10548 (license license:bsd-2)))
10549
10550 (define-public python-rarfile
10551 (package
10552 (name "python-rarfile")
10553 (version "2.8")
10554 (source (origin
10555 (method url-fetch)
10556 (uri (pypi-uri "rarfile" version))
10557 (sha256
10558 (base32
10559 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10560 (build-system python-build-system)
10561 (arguments
10562 '(#:phases
10563 (modify-phases %standard-phases
10564 (replace 'check
10565 ;; Many tests fail, but the installation proceeds.
10566 (lambda _ (zero? (system* "make" "-C" "test" "test")))))))
10567 (native-inputs
10568 `(("which" ,which))) ; required for tests
10569 (propagated-inputs
10570 `(("libarchive" ,libarchive)))
10571 (home-page "https://github.com/markokr/rarfile")
10572 (synopsis "RAR archive reader for Python")
10573 (description "This is Python module for RAR archive reading. The interface
10574 is made as zipfile like as possible.")
10575 (license license:isc)))
10576
10577 (define-public python2-rarfile
10578 (package-with-python2 python-rarfile))
10579
10580 (define-public python-magic
10581 (package
10582 (name "python-magic")
10583 (version "0.4.3")
10584 (source
10585 (origin
10586 (method url-fetch)
10587 (uri (string-append "https://github.com/ahupp/python-magic/archive/"
10588 version ".tar.gz"))
10589 (sha256
10590 (base32
10591 "17bgy92i7sb021f2s4mw1dcvpm6p1mi9jihridwy1pyn8mzvpjgk"))
10592 (file-name (string-append name "-" version "-checkout"))))
10593 (build-system python-build-system)
10594 (arguments
10595 ;; The tests are unreliable, so don't run them. The tests fail
10596 ;; under Python3 because they were written for Python2 and
10597 ;; contain import statements that do not work in Python3. One of
10598 ;; the tests fails under Python2 because its assertions are
10599 ;; overly stringent; it relies on comparing output strings which
10600 ;; are brittle and can change depending on the version of
10601 ;; libmagic being used and the system on which the test is
10602 ;; running. In my case, under GuixSD 0.10.0, only one test
10603 ;; failed, and it seems to have failed only because the version
10604 ;; of libmagic that is packaged in Guix outputs a slightly
10605 ;; different (but not wrong) string than the one that the test
10606 ;; expected.
10607 '(#:tests? #f
10608 #:phases (modify-phases %standard-phases
10609 ;; Replace a specific method call with a hard-coded
10610 ;; path to the necessary libmagic.so file in the
10611 ;; store. If we don't do this, then the method call
10612 ;; will fail to find the libmagic.so file, which in
10613 ;; turn will cause any application using
10614 ;; python-magic to fail.
10615 (add-before 'build 'hard-code-path-to-libmagic
10616 (lambda* (#:key inputs #:allow-other-keys)
10617 (let ((file (assoc-ref inputs "file")))
10618 (substitute* "magic.py"
10619 (("ctypes.util.find_library\\('magic'\\)")
10620 (string-append "'" file "/lib/libmagic.so'")))
10621 #t)))
10622 (add-before 'install 'disable-egg-compression
10623 (lambda _
10624 (let ((port (open-file "setup.cfg" "a")))
10625 (display "\n[easy_install]\nzip_ok = 0\n"
10626 port)
10627 (close-port port)
10628 #t))))))
10629 (inputs
10630 ;; python-magic needs to be able to find libmagic.so.
10631 `(("file" ,file)))
10632 (home-page "https://github.com/ahupp/python-magic")
10633 (synopsis "File type identification using libmagic")
10634 (description
10635 "This module uses ctypes to access the libmagic file type
10636 identification library. It makes use of the local magic database and
10637 supports both textual and MIME-type output. Note that this module and
10638 the python-file module both provide a \"magic.py\" file; these two
10639 modules, which are different and were developed separately, both serve
10640 the same purpose: to provide Python bindings for libmagic.")
10641 (license license:expat)))
10642
10643 (define-public python2-magic
10644 (package-with-python2 python-magic))
10645
10646 (define-public python2-s3cmd
10647 (package
10648 (name "python2-s3cmd")
10649 (version "1.6.1")
10650 (source
10651 (origin
10652 (method url-fetch)
10653 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10654 "s3cmd-" version ".tar.gz"))
10655 (sha256
10656 (base32
10657 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10658 (build-system python-build-system)
10659 (arguments
10660 ;; s3cmd is written for python2 only and contains no tests.
10661 `(#:python ,python-2
10662 #:tests? #f))
10663 (propagated-inputs
10664 `(("python2-dateutil" ,python2-dateutil)
10665 ;; The python-file package also provides a magic.py module.
10666 ;; This is an unfortunate state of affairs; however, s3cmd
10667 ;; fails to install if it cannot find specifically the
10668 ;; python-magic package. Thus we include it, instead of using
10669 ;; python-file. Ironically, s3cmd sometimes works better
10670 ;; without libmagic bindings at all:
10671 ;; https://github.com/s3tools/s3cmd/issues/198
10672 ("python2-magic" ,python2-magic)))
10673 (home-page "http://s3tools.org/s3cmd")
10674 (synopsis "Command line tool for S3-compatible storage services")
10675 (description
10676 "S3cmd is a command line tool for uploading, retrieving and managing data
10677 in storage services that are compatible with the Amazon Simple Storage
10678 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10679 GnuPG encryption, and more. It also supports management of Amazon's
10680 CloudFront content delivery network.")
10681 (license license:gpl2+)))
10682
10683 (define-public python-pkgconfig
10684 (package
10685 (name "python-pkgconfig")
10686 (version "1.1.0")
10687 (source
10688 (origin
10689 (method url-fetch)
10690 (uri (pypi-uri "pkgconfig" version))
10691 (sha256
10692 (base32
10693 "1pw0kmvc57sjmaxi6c54fqsnihqj6hvhc9y1vaz36axafzqam7bh"))))
10694 (build-system python-build-system)
10695 (native-inputs
10696 `(("python-nose" ,python-nose)))
10697 (inputs
10698 `(("pkg-config" ,pkg-config)))
10699 (arguments
10700 `(;; Tests fail with "ValueError: _type_ 'v' not supported" on Python 3,
10701 ;; and on Python 2 they need the dl module deprecated since Python 2.6.
10702 #:tests? #f
10703 ;; Hard-code the path to pkg-config.
10704 #:phases
10705 (modify-phases %standard-phases
10706 (add-before
10707 'build 'patch
10708 (lambda _
10709 (substitute* "pkgconfig/pkgconfig.py"
10710 (("cmd = 'pkg-config")
10711 (string-append "cmd = '" (which "pkg-config"))))
10712 #t)))))
10713 (home-page "https://github.com/matze/pkgconfig")
10714 (synopsis "Python interface for pkg-config")
10715 (description "This module provides a Python interface to pkg-config. It
10716 can be used to find all pkg-config packages, check if a package exists,
10717 check if a package meets certain version requirements, query CFLAGS and
10718 LDFLAGS and parse the output to build extensions with setup.py.")
10719 (license license:expat)))
10720
10721 (define-public python2-pkgconfig
10722 (package-with-python2 python-pkgconfig))
10723
10724 (define-public python-bz2file
10725 (package
10726 (name "python-bz2file")
10727 (version "0.98")
10728 (source
10729 (origin
10730 (method url-fetch)
10731 (uri (pypi-uri "bz2file" version))
10732 (sha256
10733 (base32
10734 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10735 (build-system python-build-system)
10736 (arguments
10737 `(#:tests? #f)) ; Tests use deprecated python modules.
10738 (home-page "https://github.com/nvawda/bz2file")
10739 (synopsis "Read and write bzip2-compressed files")
10740 (description
10741 "Bz2file is a Python library for reading and writing bzip2-compressed
10742 files. It contains a drop-in replacement for the I/O interface in the
10743 standard library's @code{bz2} module, including features from the latest
10744 development version of CPython that are not available in older releases.")
10745 (license license:asl2.0)
10746 (properties `((python2-variant . ,(delay python2-bz2file))))))
10747
10748 (define-public python2-bz2file
10749 (let ((base (package-with-python2
10750 (strip-python2-variant python-bz2file))))
10751 (package
10752 (inherit base)
10753 (arguments
10754 `(#:python ,python-2
10755 #:phases
10756 (modify-phases %standard-phases
10757 ;; 'python setup.py test' does not work as of 0.98.
10758 ;; There is only the one test file, so we run it directly.
10759 (replace 'check
10760 (lambda _ (zero? (system* "python"
10761 "test_bz2file.py"))))))))))
10762
10763 (define-public python-future
10764 (package
10765 (name "python-future")
10766 (version "0.16.0")
10767 (source
10768 (origin
10769 (method url-fetch)
10770 (uri (pypi-uri "future" version))
10771 (sha256
10772 (base32
10773 "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773"))))
10774 (build-system python-build-system)
10775 ;; Many tests connect to the network or are otherwise flawed.
10776 ;; https://github.com/PythonCharmers/python-future/issues/210
10777 (arguments
10778 `(#:tests? #f))
10779 (home-page "http://python-future.org")
10780 (synopsis "Single-source support for Python 3 and 2")
10781 (description
10782 "@code{python-future} is the missing compatibility layer between Python 2 and
10783 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10784 to support both Python 2 and Python 3 with minimal overhead.")
10785 (license license:expat)))
10786
10787 (define-public python2-future
10788 (package-with-python2 python-future))
10789
10790 (define-public python-cysignals
10791 (package
10792 (name "python-cysignals")
10793 (version "1.1.0")
10794 (source
10795 (origin
10796 (method url-fetch)
10797 (uri (pypi-uri "cysignals" version ".tar.bz2"))
10798 (sha256
10799 (base32
10800 "14cbyd9znlz6cxy1s3g6v6dv5jj45hn27pywkidd9b1zanaysqc6"))))
10801 (build-system python-build-system)
10802 (native-inputs
10803 `(("python-cython" ,python-cython)
10804 ("python-sphinx" ,python-sphinx)))
10805 (inputs
10806 `(("pari-gp" ,pari-gp)))
10807 (arguments
10808 `(#:modules ((guix build python-build-system)
10809 ((guix build gnu-build-system) #:prefix gnu:)
10810 (guix build utils))
10811 ;; FIXME: Tests are executed after installation and currently fail
10812 ;; when not installing into standard locations; the author is working
10813 ;; on a fix.
10814 #:tests? #f
10815 #:phases
10816 (modify-phases %standard-phases
10817 (add-before
10818 'build 'configure
10819 (assoc-ref gnu:%standard-phases 'configure)))))
10820 (home-page
10821 "https://github.com/sagemath/cysignals")
10822 (synopsis
10823 "Handling of interrupts and signals for Cython")
10824 (description
10825 "The cysignals package provides mechanisms to handle interrupts (and
10826 other signals and errors) in Cython code, using two related approaches,
10827 for mixed Cython/Python code or external C libraries and pure Cython code,
10828 respectively.")
10829 (license license:lgpl3+)))
10830
10831 (define-public python2-cysignals
10832 (package-with-python2 python-cysignals))
10833
10834 (define-public python2-shedskin
10835 (package
10836 (name "python2-shedskin")
10837 (version "0.9.4")
10838 (source
10839 (origin
10840 (method url-fetch)
10841 (uri (string-append "https://github.com/shedskin/shedskin/"
10842 "releases/download/v" version
10843 "/shedskin-" version ".tgz"))
10844 (sha256
10845 (base32
10846 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
10847 (build-system python-build-system)
10848 (arguments
10849 `(#:python ,python-2
10850 #:phases (modify-phases %standard-phases
10851 (add-after 'unpack 'fix-resulting-include-libs
10852 (lambda* (#:key inputs #:allow-other-keys)
10853 (let ((libgc (assoc-ref inputs "libgc"))
10854 (pcre (assoc-ref inputs "pcre")))
10855 (substitute* "shedskin/makefile.py"
10856 (("variable == 'CCFLAGS':[ ]*")
10857 (string-append "variable == 'CCFLAGS':\n"
10858 " line += ' -I " pcre "/include"
10859 " -I " libgc "/include'"))
10860 (("variable == 'LFLAGS':[ ]*")
10861 (string-append "variable == 'LFLAGS':\n"
10862 " line += ' -L" pcre "/lib"
10863 " -L " libgc "/lib'")))
10864 #t))))))
10865 (inputs `(("pcre" ,pcre)
10866 ("libgc" ,libgc)))
10867 (home-page "https://shedskin.github.io/")
10868 (synopsis "Experimental Python-2 to C++ Compiler")
10869 (description (string-append "This is an experimental compiler for a subset of
10870 Python. It generates C++ code and a Makefile."))
10871 (license (list license:gpl3 license:bsd-3 license:expat))))
10872
10873 (define-public python2-rope
10874 (package
10875 (name "python2-rope")
10876 (version "0.10.3")
10877 (source
10878 (origin
10879 (method url-fetch)
10880 (uri (pypi-uri "rope" version))
10881 (sha256
10882 (base32
10883 "18k5znhpwvrfck3yp0jmhd5j8r0f0s8bk1zh5yhs2cfgmfhbwigb"))))
10884 (arguments
10885 ;; Rope is currently python-2 only.
10886 ;; https://github.com/python-rope/rope/issues/57
10887 `(#:python ,python-2))
10888 (build-system python-build-system)
10889 (native-inputs
10890 `(("python2-unittest2" ,python2-unittest2)))
10891 (home-page "https://github.com/python-rope/rope")
10892 (synopsis "Refactoring library for Python")
10893 (description "Rope is a refactoring library for Python. It facilitates
10894 the renaming, moving and extracting of attributes, functions, modules, fields
10895 and parameters in Python 2 source code. These refactorings can also be applied
10896 to occurrences in strings and comments.")
10897 (license license:gpl2)))
10898
10899 (define-public python-py3status
10900 (package
10901 (name "python-py3status")
10902 (version "3.1")
10903 (source
10904 (origin
10905 (method url-fetch)
10906 (uri (pypi-uri "py3status" version))
10907 (sha256
10908 (base32
10909 "0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
10910 (build-system python-build-system)
10911 (arguments
10912 '(#:tests? #f)) ; TODO: Requires many libraries not in Guix.
10913 (home-page "https://github.com/ultrabug/py3status")
10914 (synopsis "Extensible i3status wrapper written in Python")
10915 (description "py3status is an i3status wrapper which extends i3status
10916 functionality in a modular way, allowing you to extend your panel with your
10917 own code, responding to click events and updating clock every second.")
10918 (license license:bsd-3)))
10919
10920 (define-public python-tblib
10921 (package
10922 (name "python-tblib")
10923 (version "1.3.0")
10924 (source (origin
10925 (method url-fetch)
10926 (uri (pypi-uri "tblib" version))
10927 (sha256 (base32
10928 "02iahfkfa927hb4jq2bak36ldihwapzacfiq5lyxg8llwn98a1yi"))))
10929 (build-system python-build-system)
10930 (arguments
10931 `(#:phases
10932 (modify-phases %standard-phases
10933 (replace 'check
10934 (lambda _
10935 ;; Upstream runs tests after installation and the package itself
10936 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
10937 ;; found.
10938 (setenv "PYTHONPATH"
10939 (string-append (getcwd) "/build/lib:"
10940 (getenv "PYTHONPATH")))
10941 (zero? (system* "py.test" "-vv" "tests" "README.rst")))))))
10942 (native-inputs
10943 `(("python-pytest" ,python-pytest)
10944 ("python-six" ,python-six)))
10945 (home-page "https://github.com/ionelmc/python-tblib")
10946 (synopsis "Traceback serialization library")
10947 (description
10948 "Traceback serialization allows you to:
10949
10950 @enumerate
10951 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
10952 different processes. This allows better error handling when running code over
10953 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
10954
10955 @item Parse traceback strings and raise with the parsed tracebacks.
10956 @end enumerate\n")
10957 (license license:bsd-3)))
10958
10959 (define-public python2-tblib
10960 (package-with-python2 python-tblib))
10961
10962 (define-public python-sqlparse
10963 (package
10964 (name "python-sqlparse")
10965 (version "0.1.19")
10966 (source (origin
10967 (method url-fetch)
10968 (uri (pypi-uri "sqlparse" version))
10969 (sha256
10970 (base32
10971 "1s2fvaxgh9kqzrd6iwy5h7i61ckn05plx9np13zby93z3hdbx5nq"))))
10972 (build-system python-build-system)
10973 (arguments
10974 `(#:phases
10975 (modify-phases %standard-phases
10976 (replace 'check
10977 (lambda* _
10978 ;; setup.py-integrated 2to3 only affects the build files, but
10979 ;; py.test is using the source files. So we need to convert them
10980 ;; manually.
10981 (when (zero? (system* "python3"))
10982 (system* "2to3" "--no-diff" "-wn" "sqlparse" "tests"))
10983 (zero? (system* "py.test")))))))
10984 (native-inputs
10985 `(("python-pytest" ,python-pytest)))
10986 (home-page "https://github.com/andialbrecht/sqlparse")
10987 (synopsis "Non-validating SQL parser")
10988 (description "Sqlparse is a non-validating SQL parser for Python. It
10989 provides support for parsing, splitting and formatting SQL statements.")
10990 (license license:bsd-3)))
10991
10992 (define-public python2-sqlparse
10993 (package-with-python2 python-sqlparse))
10994
10995 (define-public python-greenlet
10996 (package
10997 (name "python-greenlet")
10998 (version "0.4.11")
10999 (source (origin
11000 (method url-fetch)
11001 (uri (pypi-uri "greenlet" version))
11002 (sha256
11003 (base32
11004 "1xhik26j4f3kc4qw9xmj0c567rb5h1zryb4ijwqnqwwjvfhbv59h"))))
11005 (build-system python-build-system)
11006 (home-page "https://greenlet.readthedocs.io/")
11007 (synopsis "Lightweight in-process concurrent programming")
11008 (description
11009 "Greenlet package is a spin-off of Stackless, a version of CPython
11010 that supports micro-threads called \"tasklets\". Tasklets run
11011 pseudo-concurrently (typically in a single or a few OS-level threads) and
11012 are synchronized with data exchanges on \"channels\".")
11013 (license (list license:psfl license:expat))))
11014
11015 (define-public python2-greenlet
11016 (package-with-python2 python-greenlet))
11017
11018 (define-public python-gevent
11019 (package
11020 (name "python-gevent")
11021 (version "1.1.1")
11022 (source (origin
11023 (method url-fetch)
11024 (uri (pypi-uri "gevent" version))
11025 (sha256
11026 (base32
11027 "1smf3kvidpdiyi2c81alal74p2zm0clrm6xbyy6y1k9a3f2vkrbf"))
11028 (modules '((guix build utils)))
11029 (snippet
11030 '(begin
11031 ;; unbunding libev and c-ares
11032 (for-each delete-file-recursively '("libev" "c-ares"))
11033 ;; fixing testsuite
11034 (call-with-output-file "greentest/__init__.py" noop)
11035 (substitute* "greentest/testrunner.py"
11036 (("import util") "from . import util")
11037 (("from util import log") "from .util import log"))))))
11038 (build-system python-build-system)
11039 (propagated-inputs
11040 `(("python-greenlet" ,python-greenlet)))
11041 (native-inputs
11042 `(("python-six" ,python-six)))
11043 (inputs
11044 `(("c-ares" ,c-ares)
11045 ("libev" ,libev)))
11046 (home-page "http://www.gevent.org/")
11047 (synopsis "Coroutine-based network library")
11048 (description
11049 "gevent is a coroutine-based Python networking library that uses greenlet
11050 to provide a high-level synchronous API on top of the libev event loop.")
11051 (license license:expat)))
11052
11053 (define-public python2-gevent
11054 (package-with-python2 python-gevent))
11055
11056 (define-public python-geventhttpclient
11057 (package
11058 (name "python-geventhttpclient")
11059 (version "1.3.1")
11060 (source (origin
11061 (method url-fetch)
11062 (uri (pypi-uri "geventhttpclient" version))
11063 (sha256
11064 (base32
11065 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
11066 (modules '((guix build utils)))
11067 (snippet
11068 '(begin
11069 ;; Delete pre-compiled files.
11070 (for-each delete-file (find-files "src/geventhttpclient"
11071 ".*\\.pyc"))
11072 #t))))
11073 (build-system python-build-system)
11074 (arguments
11075 '(#:phases
11076 (modify-phases %standard-phases
11077 (add-after 'unpack 'delete-network-tests
11078 (lambda _
11079 (delete-file "src/geventhttpclient/tests/test_client.py")
11080 #t))
11081 (delete 'check)
11082 (add-after 'install 'check
11083 (lambda* (#:key inputs outputs #:allow-other-keys)
11084 (add-installed-pythonpath inputs outputs)
11085 (zero? (system* "py.test" "src/geventhttpclient/tests" "-v")))))))
11086 (native-inputs
11087 `(("python-pytest" ,python-pytest)))
11088 (propagated-inputs
11089 `(("python-certifi" ,python-certifi)
11090 ("python-gevent" ,python-gevent)
11091 ("python-six" ,python-six)))
11092 (home-page "https://github.com/gwik/geventhttpclient")
11093 (synopsis "HTTP client library for gevent")
11094 (description "@code{python-geventhttpclient} is a high performance,
11095 concurrent HTTP client library for python using @code{gevent}.")
11096 (license license:expat)))
11097
11098 (define-public python2-geventhttpclient
11099 (package-with-python2 python-geventhttpclient))
11100
11101 (define-public python-fastimport
11102 (package
11103 (name "python-fastimport")
11104 (version "0.9.6")
11105 (source
11106 (origin
11107 (method url-fetch)
11108 (uri (pypi-uri "fastimport" version))
11109 (sha256
11110 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11111 (build-system python-build-system)
11112 (home-page "https://github.com/jelmer/python-fastimport")
11113 (synopsis "VCS fastimport parser and generator in Python")
11114 (description "This package provides a parser for and generator of the Git
11115 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11116 format.")
11117 (license license:gpl2+)))
11118
11119 (define-public python2-fastimport
11120 (package-with-python2 python-fastimport))
11121
11122 (define-public python-twisted
11123 (package
11124 (name "python-twisted")
11125 (version "16.2.0")
11126 (source (origin
11127 (method url-fetch)
11128 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11129 (sha256
11130 (base32
11131 "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450"))))
11132 (build-system python-build-system)
11133 (arguments
11134 '(#:tests? #f)) ; FIXME: Some tests are failing.
11135 ;; #:phases
11136 ;; (modify-phases %standard-phases
11137 ;; (replace 'check
11138 ;; (lambda _
11139 ;; (zero? (system* "./bin/trial" "twisted")))))
11140 (propagated-inputs
11141 `(("python-zope-interface" ,python-zope-interface)))
11142 (home-page "https://twistedmatrix.com/")
11143 (synopsis "Asynchronous networking framework written in Python")
11144 (description
11145 "Twisted is an extensible framework for Python programming, with special
11146 focus on event-based network programming and multiprotocol integration.")
11147 (license license:expat)))
11148
11149 (define-public python2-twisted
11150 (package-with-python2 python-twisted))
11151
11152 (define-public python-pika
11153 (package
11154 (name "python-pika")
11155 (version "0.10.0")
11156 (source
11157 (origin
11158 (method url-fetch)
11159 (uri (pypi-uri "pika" version))
11160 (sha256
11161 (base32
11162 "0nb4h08di432lv7dy2v9kpwgk0w92f24sqc2hw2s9vwr5b8v8xvj"))))
11163 (build-system python-build-system)
11164 (native-inputs
11165 `(("python-pyev" ,python-pyev)
11166 ("python-tornado" ,python-tornado)
11167 ("python-twisted" ,python-twisted)))
11168 (home-page "https://pika.readthedocs.org")
11169 (synopsis "Pure Python AMQP Client Library")
11170 (description
11171 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11172 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11173 network support library.")
11174 (license license:bsd-3)))
11175
11176 (define-public python2-pika
11177 (package-with-python2 python-pika))
11178
11179 (define-public python-ply
11180 (package
11181 (name "python-ply")
11182 (version "3.9")
11183 (source
11184 (origin
11185 (method url-fetch)
11186 (uri (pypi-uri "ply" version))
11187 (sha256
11188 (base32
11189 "0gpl0yli3w03ipyqfrp3w5nf0iawhsq65anf5wwm2wf5p502jzhd"))))
11190 (build-system python-build-system)
11191 (home-page "http://www.dabeaz.com/ply/")
11192 (synopsis "Python Lex & Yacc")
11193 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11194 It uses LR parsing and does extensive error checking.")
11195 (license license:bsd-3)))
11196
11197 (define-public python2-ply
11198 (package-with-python2 python-ply))
11199
11200 (define-public python-tabulate
11201 (package
11202 (name "python-tabulate")
11203 (version "0.7.7")
11204 (source (origin
11205 (method url-fetch)
11206 (uri (pypi-uri "tabulate" version))
11207 (sha256
11208 (base32
11209 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11210 (build-system python-build-system)
11211 (arguments
11212 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11213 ;; and the latest release is not tagged in the upstream repository.
11214 '(#:tests? #f))
11215 (home-page "https://bitbucket.org/astanin/python-tabulate")
11216 (synopsis "Pretty-print tabular data")
11217 (description
11218 "Tabulate is a library and command-line utility to pretty-print tabular
11219 data in Python.")
11220 (license license:expat)))
11221
11222 (define-public python2-tabulate
11223 (package-with-python2 python-tabulate))
11224
11225 (define-public python-kazoo
11226 (package
11227 (name "python-kazoo")
11228 (version "2.2.1")
11229 (source
11230 (origin
11231 (method url-fetch)
11232 (uri (pypi-uri "kazoo" version))
11233 (sha256
11234 (base32
11235 "10pb864if9qi2pq9lfb9m8f7z7ss6rml80gf1d9h64lap5crjnjj"))))
11236 (build-system python-build-system)
11237 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11238 (propagated-inputs
11239 `(("python-six" ,python-six)))
11240 (home-page "https://kazoo.readthedocs.org")
11241 (synopsis "High-level Zookeeper client library")
11242 (description
11243 "Kazoo is a Python client library for the Apache Zookeeper distributed
11244 application service. It is designed to be easy to use and to avoid common
11245 programming errors.")
11246 (license license:asl2.0)))
11247
11248 (define-public python2-kazoo
11249 (package-with-python2 python-kazoo))
11250
11251 (define-public python-pykafka
11252 (package
11253 (name "python-pykafka")
11254 (version "2.4.0")
11255 (source (origin
11256 (method url-fetch)
11257 (uri (string-append
11258 "https://pypi.python.org/packages/8b/3e/"
11259 "384eeff406b06315738b62483fd2126c6e4f544167116b17cc04ea7d2a59/"
11260 "pykafka-" version ".tar.gz"))
11261 (sha256
11262 (base32
11263 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11264 (build-system python-build-system)
11265 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11266 (propagated-inputs
11267 `(("python-gevent" ,python-gevent)
11268 ("python-kazoo" ,python-kazoo)
11269 ("python-tabulate" ,python-tabulate)))
11270 (inputs
11271 `(("librdkafka" ,librdkafka)))
11272 (home-page "https://pykafka.readthedocs.io/")
11273 (synopsis "Apache Kafka client for Python")
11274 (description
11275 "PyKafka is a client for the Apache Kafka distributed messaging system.
11276 It includes Python implementations of Kafka producers and consumers, which
11277 are optionally backed by a C extension built on librdkafka.")
11278 (license license:asl2.0)))
11279
11280 (define-public python2-pykafka
11281 (package-with-python2 python-pykafka))
11282
11283 (define-public python-wcwidth
11284 (package
11285 (name "python-wcwidth")
11286 (version "0.1.7")
11287 (source
11288 (origin
11289 (method url-fetch)
11290 (uri (pypi-uri "wcwidth" version))
11291 (sha256
11292 (base32
11293 "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"))))
11294 (build-system python-build-system)
11295 (home-page "https://github.com/jquast/wcwidth")
11296 (synopsis "Measure number of terminal column cells of wide-character codes")
11297 (description "Wcwidth measures the number of terminal column cells of
11298 wide-character codes. It is useful for those implementing a terminal emulator,
11299 or programs that carefully produce output to be interpreted by one. It is a
11300 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11301 specified in POSIX.1-2001 and POSIX.1-2008.")
11302 (license license:expat)))
11303
11304 (define-public python2-wcwidth
11305 (package-with-python2 python-wcwidth))
11306
11307 (define-public python2-jsonrpclib
11308 (package
11309 (name "python2-jsonrpclib")
11310 (version "0.1.7")
11311 (source (origin
11312 (method url-fetch)
11313 (uri (string-append
11314 "https://pypi.python.org/packages/source/j/jsonrpclib/"
11315 "jsonrpclib-" version ".tar.gz"))
11316 (sha256
11317 (base32
11318 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11319 (build-system python-build-system)
11320 (arguments
11321 `(#:tests? #f
11322 #:python ,python-2))
11323 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11324 (synopsis "Implementation of JSON-RPC specification for Python")
11325 (description
11326 "This library is an implementation of the JSON-RPC specification.
11327 It supports both the original 1.0 specification, as well as the
11328 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11329 etc.")
11330 (license license:asl2.0)))
11331
11332 (define-public python-chai
11333 (package
11334 (name "python-chai")
11335 (version "1.1.1")
11336 (source (origin
11337 (method url-fetch)
11338 (uri (pypi-uri "chai" version))
11339 (sha256
11340 (base32
11341 "016kf3irrclpkpvcm7q0gmkfibq7jgy30a9v73pp42bq9h9a32bl"))))
11342 (build-system python-build-system)
11343 (home-page "https://github.com/agoragames/chai")
11344 (synopsis "Mocking framework for Python")
11345 (description
11346 "Chai provides an api for mocking, stubbing and spying your python
11347 objects, patterned after the Mocha library for Ruby.")
11348 (license license:bsd-3)))
11349
11350 (define-public python2-chai
11351 (package-with-python2 python-chai))
11352
11353 (define-public python-arrow
11354 (package
11355 (name "python-arrow")
11356 (version "0.8.0")
11357 (source (origin
11358 (method url-fetch)
11359 (uri (pypi-uri "arrow" version))
11360 (sha256
11361 (base32
11362 "1bz7hkdgpqcjs866y58z8jywpy7al0f4rxdr00bh2l5qddyw245j"))))
11363 (build-system python-build-system)
11364 (native-inputs
11365 `(;; For testing
11366 ("python-chai" ,python-chai)
11367 ("python-simplejson" ,python-simplejson)))
11368 (propagated-inputs
11369 `(("python-dateutil" ,python-dateutil)))
11370 (home-page "https://github.com/crsmithdev/arrow/")
11371 (synopsis "Dates and times for Python")
11372 (description
11373 "Arrow is a Python library to creating, manipulating, formatting and
11374 converting dates, times, and timestamps. It implements and updates the
11375 datetime type.")
11376 (license license:asl2.0)))
11377
11378 (define-public python2-arrow
11379 (package-with-python2 python-arrow))
11380
11381 (define-public python-inflection
11382 (package
11383 (name "python-inflection")
11384 (version "0.3.1")
11385 (source
11386 (origin (method url-fetch)
11387 (uri (pypi-uri "inflection" version))
11388 (sha256
11389 (base32
11390 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11391 (build-system python-build-system)
11392 (native-inputs
11393 `(("python-pytest" ,python-pytest)))
11394 (home-page "https://github.com/jpvanhal/inflection")
11395 (synopsis "Python string transformation library")
11396 (description
11397 "Inflection is a string transformation library. It singularizes
11398 and pluralizes English words, and transforms strings from CamelCase to
11399 underscored string.")
11400 (license license:expat)))
11401
11402 (define-public python2-inflection
11403 (package-with-python2 python-inflection))
11404
11405 (define-public python-pylev
11406 (package
11407 (name "python-pylev")
11408 (version "1.3.0")
11409 (source (origin
11410 (method url-fetch)
11411 (uri (pypi-uri "pylev" version))
11412 (sha256
11413 (base32
11414 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11415 (build-system python-build-system)
11416 (home-page "https://github.com/toastdriven/pylev")
11417 (synopsis "Levenshtein distance implementation in Python")
11418 (description "Pure Python Levenshtein implementation, based off the
11419 Wikipedia code samples at
11420 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11421 (license license:bsd-3)))
11422
11423 (define-public python2-pylev
11424 (package-with-python2 python-pylev))
11425
11426 (define-public python-cleo
11427 (package
11428 (name "python-cleo")
11429 (version "0.4.1")
11430 (source (origin
11431 (method url-fetch)
11432 (uri (pypi-uri "cleo" version))
11433 (sha256
11434 (base32
11435 "1k2dcl6mqpn5bljyl6w42rqyd9mb3y9kh2mg7m2x3kfjwvg0rpva"))))
11436 (build-system python-build-system)
11437 (native-inputs
11438 `(;; For testing
11439 ("python-mock" ,python-mock)
11440 ("python-pytest" ,python-pytest)))
11441 (propagated-inputs
11442 `(("python-psutil" ,python-psutil)
11443 ("python-pylev" ,python-pylev)))
11444 (home-page "https://github.com/sdispater/cleo")
11445 (synopsis "Command-line arguments library for Python")
11446 (description
11447 "Cleo allows you to create command-line commands with signature in
11448 docstring and colored output.")
11449 (license license:expat)))
11450
11451 (define-public python2-cleo
11452 (package-with-python2 python-cleo))
11453
11454 (define-public python-lazy-object-proxy
11455 (package
11456 (name "python-lazy-object-proxy")
11457 (version "1.2.2")
11458 (source (origin
11459 (method url-fetch)
11460 (uri (pypi-uri "lazy-object-proxy" version))
11461 (sha256
11462 (base32
11463 "0s22aqqkdscyh8sjspyyax7qa1aiz8p4midrnyf39717fhfczm6x"))))
11464 (build-system python-build-system)
11465 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11466 (synopsis "Lazy object proxy for python")
11467 (description
11468 "Lazy object proxy is an object that wraps a callable but defers the call
11469 until the object is actually required, and caches the result of said call.")
11470 (license license:bsd-2)))
11471
11472 (define-public python2-lazy-object-proxy
11473 (package-with-python2 python-lazy-object-proxy))
11474
11475 (define-public python-dnspython
11476 (package
11477 (name "python-dnspython")
11478 (version "1.15.0")
11479 (source (origin
11480 (method url-fetch)
11481 (uri (string-append "http://www.dnspython.org/kits/"
11482 version "/dnspython-" version ".tar.gz"))
11483 (sha256
11484 (base32
11485 "0jr4v2pd90i6l1xxbss2m05psbjaxvyvvvpq44wycijpfgjqln8i"))))
11486 (build-system python-build-system)
11487 (arguments '(#:tests? #f)) ; XXX: requires internet access
11488 (home-page "http://www.dnspython.org")
11489 (synopsis "DNS toolkit for Python")
11490 (description
11491 "dnspython is a DNS toolkit for Python. It supports almost all record
11492 types. It can be used for queries, zone transfers, and dynamic updates.
11493 It supports TSIG authenticated messages and EDNS0.")
11494 (license license:expat)))
11495
11496 (define-public python2-dnspython
11497 (package-with-python2 python-dnspython))
11498
11499 (define-public python-email-validator
11500 (package
11501 (name "python-email-validator")
11502 (version "1.0.2")
11503 (source
11504 (origin (method url-fetch)
11505 (uri (pypi-uri "email_validator" version))
11506 (sha256
11507 (base32
11508 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11509 (build-system python-build-system)
11510 (arguments
11511 '(#:phases
11512 (modify-phases %standard-phases
11513 (add-before 'build 'use-dnspython
11514 (lambda _
11515 (substitute* "setup.py"
11516 (("dnspython3") "dnspython"))
11517 #t)))))
11518 (propagated-inputs
11519 `(("python-dnspython" ,python-dnspython)
11520 ("python-idna" ,python-idna)))
11521 (home-page "https://github.com/JoshData/python-email-validator")
11522 (synopsis "Email address validation library for Python")
11523 (description
11524 "This library validates email address syntax and deliverability.")
11525 (license license:cc0)))
11526
11527 (define-public python2-email-validator
11528 (package-with-python2 python-email-validator))
11529
11530 (define-public python-ukpostcodeparser
11531 (package
11532 (name "python-ukpostcodeparser")
11533 (version "1.0.3")
11534 (source (origin
11535 (method url-fetch)
11536 (uri (pypi-uri "UkPostcodeParser" version))
11537 (sha256
11538 (base32
11539 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
11540 (build-system python-build-system)
11541 (home-page "https://github.com/hamstah/ukpostcodeparser")
11542 (synopsis "UK Postcode parser for Python")
11543 (description
11544 "This library provides the @code{parse_uk_postcode} function for
11545 parsing UK postcodes.")
11546 (license license:expat)))
11547
11548 (define-public python2-ukpostcodeparser
11549 (package-with-python2 python-ukpostcodeparser))
11550
11551 (define-public python-faker
11552 (package
11553 (name "python-faker")
11554 (version "0.7.9")
11555 (source (origin
11556 (method url-fetch)
11557 (uri (pypi-uri "Faker" version))
11558 (sha256
11559 (base32
11560 "1fh2p2yz0fsdr4fqwxgddwbvfb6qn6vp8yx0qwqzra27yq5d1wsm"))
11561 (patches
11562 (search-patches "python-faker-fix-build-32bit.patch"))
11563 (modules '((guix build utils)))
11564 (snippet
11565 '(begin
11566 (for-each delete-file (find-files "." "\\.pyc$"))
11567 #t))))
11568 (build-system python-build-system)
11569 (arguments
11570 '(#:phases
11571 (modify-phases %standard-phases
11572 (replace 'check
11573 (lambda _
11574 (zero? (system* "python" "-m" "unittest" "-v" "tests")))))))
11575 (native-inputs
11576 `(;; For testing
11577 ("python-email-validator" ,python-email-validator)
11578 ("python-mock" ,python-mock)
11579 ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
11580 (propagated-inputs
11581 `(("python-dateutil" ,python-dateutil)
11582 ("python-six" ,python-six)))
11583 (home-page "https://github.com/joke2k/faker")
11584 (synopsis "Python package that generates fake data")
11585 (description
11586 "Faker is a Python package that generates fake data such as names,
11587 addresses, and phone numbers.")
11588 (license license:expat)
11589 (properties `((python2-variant . ,(delay python2-faker))))))
11590
11591 (define-public python2-faker
11592 (let ((base (package-with-python2 (strip-python2-variant
11593 python-faker))))
11594 (package
11595 (inherit base)
11596 (propagated-inputs
11597 `(("python2-ipaddress" ,python2-ipaddress)
11598 ,@(package-propagated-inputs base))))))
11599
11600 (define-public python-fake-factory
11601 (package
11602 (name "python-fake-factory")
11603 (version "0.7.2")
11604 (source (origin
11605 (method url-fetch)
11606 (uri (pypi-uri "fake-factory" version))
11607 (sha256
11608 (base32
11609 "0vs0dkmg0dlaxf8w6q2i3k0i03gmp56ablldv7ci9x3nbadkn71g"))
11610 (patches
11611 (search-patches
11612 "python-fake-factory-fix-build-32bit.patch"))))
11613 (build-system python-build-system)
11614 (arguments
11615 '(#:phases
11616 (modify-phases %standard-phases
11617 (replace 'check
11618 (lambda _
11619 (zero? (system* "python" "-m" "unittest" "-v" "faker.tests")))))))
11620 (native-inputs
11621 `(;; For testing
11622 ("python-email-validator" ,python-email-validator)
11623 ("python-mock" ,python-mock)
11624 ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
11625 (propagated-inputs
11626 `(("python-dateutil" ,python-dateutil)
11627 ("python-six" ,python-six)))
11628 (home-page "https://github.com/joke2k/faker")
11629 (synopsis "Python package that generates fake data")
11630 (description
11631 "Faker is a Python package that generates fake data such as names,
11632 addresses, and phone numbers.")
11633 (license license:expat)
11634 (properties `((python2-variant . ,(delay python2-fake-factory))
11635 (superseded . ,python-faker)))))
11636
11637 (define-public python2-fake-factory
11638 (let ((base (package-with-python2 (strip-python2-variant
11639 python-fake-factory))))
11640 (package
11641 (inherit base)
11642 (properties `((superseded . ,python2-faker)))
11643 (propagated-inputs
11644 `(("python2-ipaddress" ,python2-ipaddress)
11645 ,@(package-propagated-inputs base))))))
11646
11647 (define-public python-pyaml
11648 (package
11649 (name "python-pyaml")
11650 (version "15.8.2")
11651 (source (origin
11652 (method url-fetch)
11653 (uri (pypi-uri "pyaml" version))
11654 (sha256
11655 (base32
11656 "1f5m28vkh4ksq3d80d8mmd2z8wxvc3mgy2pmrv2751dm2xgznm4w"))))
11657 (build-system python-build-system)
11658 (native-inputs
11659 `(("python-unidecode" ,python-unidecode)))
11660 (propagated-inputs
11661 `(("python-pyyaml" ,python-pyyaml)))
11662 (home-page "https://github.com/mk-fg/pretty-yaml")
11663 (synopsis "YAML pretty-print library for Python")
11664 (description
11665 "pyaml is a PyYAML based python module to produce pretty and readable
11666 YAML-serialized data.")
11667 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/"))))
11668
11669 (define-public python2-pyaml
11670 (package-with-python2 python-pyaml))
11671
11672 (define-public python-flexmock
11673 (package
11674 (name "python-flexmock")
11675 (version "0.10.2")
11676 (source (origin
11677 (method url-fetch)
11678 (uri (pypi-uri "flexmock" version))
11679 (sha256
11680 (base32
11681 "0arc6njvs6i9v9hgvzk5m50296g7zy5m9d7pyb43vdsdgxrci5gy"))))
11682 (build-system python-build-system)
11683 (home-page "https://flexmock.readthedocs.org")
11684 (synopsis "Testing library for Python")
11685 (description
11686 "flexmock is a testing library for Python that makes it easy to create
11687 mocks, stubs and fakes.")
11688 (license license:bsd-3)))
11689
11690 (define-public python2-flexmock
11691 (package-with-python2 python-flexmock))
11692
11693 (define-public python-orator
11694 (package
11695 (name "python-orator")
11696 (version "0.8.2")
11697 (source (origin
11698 (method url-fetch)
11699 (uri (pypi-uri "orator" version))
11700 (sha256
11701 (base32
11702 "1li49irsqha17nrda4nsb48biyy0rarp9pphf0jpqwm5zr8hv569"))))
11703 (build-system python-build-system)
11704 (arguments '(#:tests? #f)) ; no tests
11705 (propagated-inputs
11706 `(("python-arrow" ,python-arrow)
11707 ("python-blinker" ,python-blinker)
11708 ("python-cleo" ,python-cleo)
11709 ("python-faker" ,python-faker)
11710 ("python-inflection" ,python-inflection)
11711 ("python-lazy-object-proxy" ,python-lazy-object-proxy)
11712 ("python-pyaml" ,python-pyaml)
11713 ("python-simplejson" ,python-simplejson)
11714 ("python-wrapt" ,python-wrapt)))
11715 (home-page "https://orator-orm.com/")
11716 (synopsis "ActiveRecord ORM for Python")
11717 (description
11718 "Orator provides a simple ActiveRecord-like Object Relational Mapping
11719 implementation for Python.")
11720 (license license:expat)
11721 (properties `((python2-variant . ,(delay python2-orator))))))
11722
11723 (define-public python2-orator
11724 (let ((base (package-with-python2 (strip-python2-variant python-orator))))
11725 (package
11726 (inherit base)
11727 (propagated-inputs
11728 `(("python2-ipaddress" ,python2-ipaddress)
11729 ,@(package-propagated-inputs base))))))
11730
11731 (define-public python-prompt-toolkit
11732 (package
11733 (name "python-prompt-toolkit")
11734 (version "1.0.9")
11735 (source
11736 (origin
11737 (method url-fetch)
11738 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11739 (sha256
11740 (base32
11741 "172r15k9kwdw2lnajvpz1632dd16nqz1kcal1p0lq5ywdarj6rfd"))))
11742 (build-system python-build-system)
11743 (arguments
11744 '(#:tests? #f)) ; The test suite uses some Windows-specific data types.
11745 (propagated-inputs
11746 `(("python-wcwidth" ,python-wcwidth)
11747 ("python-six" ,python-six)
11748 ("python-pygments" ,python-pygments)))
11749 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
11750 (synopsis "Library for building command line interfaces in Python")
11751 (description
11752 "Prompt-Toolkit is a library for building interactive command line
11753 interfaces in Python. It's like GNU Readline but it also features syntax
11754 highlighting while typing, out-of-the-box multi-line input editing, advanced
11755 code completion, incremental search, support for Chinese double-width
11756 characters, mouse support, and auto suggestions.")
11757 (license license:bsd-3)))
11758
11759 (define-public python2-prompt-toolkit
11760 (package-with-python2 python-prompt-toolkit))
11761
11762 (define-public python-jedi
11763 (package
11764 (name "python-jedi")
11765 (version "0.9.0")
11766 (source
11767 (origin
11768 (method url-fetch)
11769 (uri (pypi-uri "jedi" version))
11770 (sha256
11771 (base32
11772 "0c8x962ynpx001fdvp07m2q5jk4igkxbj3rmnydavphvlgxijk1v"))))
11773 (build-system python-build-system)
11774 (arguments
11775 ;; FIXME: One test fails (use "py.test" instead of 'setup.py test').
11776 '(#:tests? #f))
11777 (native-inputs
11778 `(("python-pytest" ,python-pytest)))
11779 (home-page "https://github.com/davidhalter/jedi")
11780 (synopsis
11781 "Autocompletion for Python that can be used for text editors")
11782 (description
11783 "Jedi is an autocompletion tool for Python that can be used for text editors.")
11784 (license license:expat)))
11785
11786 (define-public python2-jedi
11787 (package-with-python2 python-jedi))
11788
11789 (define-public ptpython
11790 (package
11791 (name "ptpython")
11792 (version "0.34")
11793 (source (origin
11794 (method url-fetch)
11795 (uri (pypi-uri "ptpython" version))
11796 (sha256
11797 (base32
11798 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
11799 (build-system python-build-system)
11800 (arguments
11801 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
11802 (propagated-inputs
11803 `(("python-docopt" ,python-docopt)
11804 ("python-jedi" ,python-jedi)
11805 ("python-prompt-toolkit" ,python-prompt-toolkit)
11806 ("python-pygments" ,python-pygments)))
11807 (home-page "https://github.com/jonathanslenders/ptpython")
11808 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
11809 (description
11810 "ptpython is a Python read-eval-print loop with IDE-like features.
11811 It supports syntax highlighting, multiline editing, autocompletion, mouse,
11812 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
11813 etc.")
11814 (license license:bsd-3)
11815 (properties `((python2-variant . ,(delay ptpython-2))))))
11816
11817 (define-public ptpython-2
11818 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
11819 (package
11820 (inherit base)
11821 (name "ptpython2"))))
11822
11823 (define-public python-requests-oauthlib
11824 (package
11825 (name "python-requests-oauthlib")
11826 (version "0.6.2")
11827 (source
11828 (origin
11829 (method url-fetch)
11830 (uri (pypi-uri "requests-oauthlib" version))
11831 (sha256
11832 (base32
11833 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
11834 (build-system python-build-system)
11835 (arguments
11836 `(#:phases
11837 (modify-phases %standard-phases
11838 ;; removes tests that require network access
11839 (add-before 'check 'pre-check
11840 (lambda _
11841 (delete-file "tests/test_core.py")
11842 #t)))))
11843 (native-inputs
11844 `(("python-requests-mock" ,python-requests-mock)
11845 ("python-mock" ,python-mock)))
11846 (propagated-inputs
11847 `(("python-oauthlib" ,python-oauthlib)
11848 ("python-requests" ,python-requests)))
11849 (home-page
11850 "https://github.com/requests/requests-oauthlib")
11851 (synopsis
11852 "OAuthlib authentication support for Requests")
11853 (description
11854 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
11855 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
11856 (license license:isc)))
11857
11858 (define-public python2-requests-oauthlib
11859 (package-with-python2 python-requests-oauthlib))
11860
11861 (define-public python-stem
11862 (package
11863 (name "python-stem")
11864 (version "1.5.4")
11865 (source
11866 (origin
11867 (method url-fetch)
11868 (uri (pypi-uri "stem" version))
11869 (sha256
11870 (base32
11871 "1j7pnblrn0yr6jmxvsq6y0ihmxmj5x50jl2n2606w67f6wq16j9n"))))
11872 (build-system python-build-system)
11873 (arguments
11874 `(#:phases
11875 (modify-phases %standard-phases
11876 (replace 'check
11877 (lambda _
11878 (zero? (system* "./run_tests.py" "--unit")))))))
11879 (native-inputs
11880 `(("python-mock" ,python-mock)
11881 ("python-pep8" ,python-pep8)
11882 ("python-pyflakes" ,python-pyflakes)))
11883 (home-page "https://stem.torproject.org/")
11884 (synopsis
11885 "Python controller library that allows applications to interact with Tor")
11886 (description
11887 "Stem is a Python controller library for Tor. With it you can use Tor's
11888 control protocol to script against the Tor process and read descriptor data
11889 relays publish about themselves.")
11890 (license license:lgpl3)))
11891
11892 (define-public python2-stem
11893 (package-with-python2 python-stem))
11894
11895 (define-public python-pyserial
11896 (package
11897 (name "python-pyserial")
11898 (version "3.1.1")
11899 (source
11900 (origin
11901 (method url-fetch)
11902 (uri (pypi-uri "pyserial" version))
11903 (sha256
11904 (base32
11905 "0k1nfdrxxkdlv4zgaqsdv8li0pj3gbh2pyxw8q2bsg6f9490amyn"))))
11906 (build-system python-build-system)
11907 (arguments
11908 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
11909 ;; #:phases
11910 ;; (modify-phases %standard-phases
11911 ;; (replace 'check
11912 ;; (lambda _
11913 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
11914 (home-page
11915 "https://github.com/pyserial/pyserial")
11916 (synopsis "Python Serial Port Bindings")
11917 (description "@code{pyserial} provide serial port bindings for Python. It
11918 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
11919 and/or Xon/Xoff. The port is accessed in RAW mode.")
11920 (license license:bsd-3)))
11921
11922 (define-public python2-pyserial
11923 (package-with-python2 python-pyserial))
11924
11925 (define-public python-kivy
11926 (package
11927 (name "python-kivy")
11928 (version "1.9.1")
11929 (source
11930 (origin
11931 (method url-fetch)
11932 (uri (pypi-uri "kivy" version))
11933 (file-name (string-append name "-" version ".tar.gz"))
11934 (sha256
11935 (base32
11936 "0zk3g1j1z0lzcm9d0k1lprrs95zr8n8k5pdg3p5qlsn26jz4bg19"))))
11937 (build-system python-build-system)
11938 (arguments
11939 `(#:tests? #f ; Tests require many optional packages
11940 #:phases
11941 (modify-phases %standard-phases
11942 (replace 'build (lambda _ (zero? (system* "make" "force"))))
11943 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
11944 (lambda* (#:key inputs #:allow-other-keys)
11945 (setenv "KIVY_SDL2_PATH"
11946 (string-append (assoc-ref inputs "sdl-union")
11947 "/include/SDL2"))
11948 #t)))))
11949 (native-inputs
11950 `(("pkg-config" ,pkg-config)
11951 ("python-cython" ,python-cython)))
11952 (inputs
11953 `(("gstreamer" ,gstreamer)
11954 ("mesa" ,mesa)
11955 ("sdl-union"
11956 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
11957 (home-page "http://kivy.org")
11958 (synopsis
11959 "Multitouch application framework")
11960 (description
11961 "A software library for rapid development of
11962 hardware-accelerated multitouch applications.")
11963 (license license:expat)))
11964
11965 (define-public python2-kivy
11966 (package-with-python2 python-kivy))
11967
11968 (define-public python-kivy-next
11969 (let ((commit "a988c5e7a47da56263ff39514264a3de516ef2fe")
11970 (revision "1"))
11971 (package (inherit python-kivy)
11972 (name "python-kivy-next")
11973 (version (string-append "1.9.1-" revision "."
11974 (string-take commit 7)))
11975 (source
11976 (origin
11977 (method git-fetch)
11978 (uri (git-reference
11979 (url "https://github.com/kivy/kivy")
11980 (commit commit)))
11981 (file-name (string-append name "-" version "-checkout"))
11982 (sha256
11983 (base32
11984 "0jk92b4a8l7blkvkgkjihk171s0dfnq582cckff5srwc8kal5m0p")))))))
11985
11986 (define-public python2-kivy-next
11987 (package-with-python2 python-kivy-next))
11988
11989 (define-public python-binaryornot
11990 (package
11991 (name "python-binaryornot")
11992 (version "0.4.0")
11993 (source (origin
11994 (method url-fetch)
11995 (uri (pypi-uri "binaryornot" version))
11996 (sha256
11997 (base32
11998 "1j4f51dxic39mdwf6alj7gd769wy6mhk916v031wjali51xkh3xb"))))
11999 (build-system python-build-system)
12000 (propagated-inputs
12001 `(("python-chardet" ,python-chardet)
12002 ("python-hypothesis" ,python-hypothesis)))
12003 (home-page "https://github.com/audreyr/binaryornot")
12004 (synopsis "Package to check if a file is binary or text")
12005 (description "Ultra-lightweight pure Python package to check if a file is
12006 binary or text.")
12007 (license license:bsd-3)
12008 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12009
12010 (define-public python2-binaryornot
12011 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12012 (package (inherit base)
12013 (propagated-inputs
12014 `(("python2-enum34" ,python2-enum34)
12015 ,@(package-propagated-inputs base))))))
12016
12017 (define-public python-nltk
12018 (package
12019 (name "python-nltk")
12020 (version "3.2.1")
12021 (source (origin
12022 (method url-fetch)
12023 (uri (pypi-uri "nltk" version))
12024 (sha256
12025 (base32
12026 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12027 (build-system python-build-system)
12028 (arguments
12029 '(;; The tests require some extra resources to be downloaded.
12030 ;; TODO Try packaging these resources.
12031 #:tests? #f))
12032 (home-page "http://nltk.org/")
12033 (synopsis "Natural Language Toolkit")
12034 (description "It provides interfaces to over 50 corpora and lexical
12035 resources such as WordNet, along with a suite of text processing libraries
12036 for classification, tokenization, stemming, tagging, parsing, and semantic
12037 reasoning, wrappers for natural language processing libraries.")
12038 (license license:asl2.0)))
12039
12040 (define-public python2-nltk
12041 (package-with-python2 python-nltk))
12042
12043 (define-public python-pymongo
12044 (package
12045 (name "python-pymongo")
12046 (version "3.3.0")
12047 (source (origin
12048 (method url-fetch)
12049 (uri (pypi-uri "pymongo" version))
12050 (sha256
12051 (base32
12052 "07mra6w86wjqy4lx5fvimidjhhfzd562gfjn8grsnbv2q8pk0i9x"))))
12053 (build-system python-build-system)
12054 (propagated-inputs
12055 `(("python-certifi" ,python-certifi)))
12056 (home-page "https://github.com/mongodb/mongo-python-driver")
12057 (synopsis "Python driver for MongoDB")
12058 (description "Python driver for MongoDB.")
12059 (license license:asl2.0)))
12060
12061 (define-public python2-pymongo
12062 (package-with-python2 python-pymongo))
12063
12064 (define-public python-sh
12065 (package
12066 (name "python-sh")
12067 (version "1.11")
12068 (source (origin
12069 (method url-fetch)
12070 (uri (pypi-uri "sh" version))
12071 (sha256
12072 (base32
12073 "192r0mpv6dmkysjzhc43ddffiwb5g7c76bgr1mb1z2xz9awbj3sr"))))
12074 (build-system python-build-system)
12075 (arguments
12076 `(#:tests? #f)) ; no tests
12077 (home-page "https://github.com/amoffat/sh")
12078 (synopsis "Python subprocess interface")
12079 (description "Abstracts process invocation by providing a function
12080 interface for programs.")
12081 (license license:expat)))
12082
12083 (define-public python2-sh
12084 (package-with-python2 python-sh))
12085
12086 (define-public python-consul
12087 (package
12088 (name "python-consul")
12089 (version "0.6.1")
12090 (source
12091 (origin
12092 (method url-fetch)
12093 (uri (pypi-uri "python-consul" version))
12094 (sha256
12095 (base32
12096 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12097 (build-system python-build-system)
12098 (native-inputs
12099 `(("python-pytest" ,python-pytest)))
12100 (propagated-inputs
12101 `(("python-requests" ,python-requests)
12102 ("python-six" ,python-six)))
12103 (home-page "https://github.com/cablehead/python-consul")
12104 (synopsis "Python client for Consul")
12105 (description
12106 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12107 discovery, monitoring and configuration.")
12108 (license license:expat)))
12109
12110 (define-public python2-consul
12111 (package-with-python2 python-consul))
12112
12113 (define-public python-schematics
12114 (package
12115 (name "python-schematics")
12116 (version "1.1.1")
12117 (source
12118 (origin
12119 (method url-fetch)
12120 (uri (string-append
12121 "https://github.com/schematics/schematics/archive/v" version ".tar.gz"))
12122 (file-name (string-append name "-" version ".tar.gz"))
12123 (sha256
12124 (base32
12125 "19v1i69bf3bzarfxmbv0v6ivpcn758x3shvbiy9l2hy0lvqwnp6l"))))
12126 (build-system python-build-system)
12127 (propagated-inputs
12128 `(("python-six" ,python-six)))
12129 (arguments
12130 `(#:tests? #f)) ; requires a bunch of not very nice packages with fixed
12131 ; version requirements (eg python-coveralls)
12132 (home-page "https://github.com/schematics/schematics")
12133 (synopsis "Python Data Structures for Humans")
12134 (description "Python Data Structures for Humans.")
12135 (license license:bsd-3)))
12136
12137 (define-public python2-schematics
12138 (package-with-python2 python-schematics))
12139
12140 (define-public python-publicsuffix
12141 (package
12142 (name "python-publicsuffix")
12143 (version "1.1.0")
12144 (source (origin
12145 (method url-fetch)
12146 (uri (pypi-uri "publicsuffix" version))
12147 (sha256
12148 (base32
12149 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
12150 (build-system python-build-system)
12151 (arguments
12152 `(#:tests? #f)) ; tests use the internet
12153 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
12154 (synopsis "Get suffix for a domain name")
12155 (description "Get a public suffix for a domain name using the Public Suffix
12156 List.")
12157 (license license:expat)))
12158
12159 (define-public python2-publicsuffix
12160 (package-with-python2 python-publicsuffix))
12161
12162 (define-public python-publicsuffix2
12163 (package
12164 (name "python-publicsuffix2")
12165 (version "2.20160818")
12166 (source
12167 (origin
12168 (method url-fetch)
12169 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
12170 (sha256
12171 (base32
12172 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
12173 (build-system python-build-system)
12174 (arguments
12175 '(#:tests? #f)) ; The test suite requires network access.
12176 (home-page "https://github.com/pombredanne/python-publicsuffix2")
12177 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
12178 (description "Get a public suffix for a domain name using the Public Suffix
12179 List. Forked from and using the same API as the publicsuffix package.")
12180 (license (list license:expat license:mpl2.0))))
12181
12182 (define-public python2-publicsuffix2
12183 (package-with-python2 python-publicsuffix2))
12184
12185 (define-public python-url
12186 (package
12187 (name "python-url")
12188 (version "0.2.0")
12189 (source (origin
12190 (method url-fetch)
12191 (uri (pypi-uri "url" version))
12192 (sha256
12193 (base32
12194 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
12195 (build-system python-build-system)
12196 (propagated-inputs
12197 `(("python-publicsuffix" ,python-publicsuffix)))
12198 (native-inputs
12199 `(("python-coverage" ,python-coverage)
12200 ("python-nose" ,python-nose)))
12201 (arguments
12202 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
12203 (home-page "https://github.com/seomoz/url-py")
12204 (synopsis "URL Parsing")
12205 (description "Library for parsing urls.")
12206 (license license:expat)
12207 (properties `((python2-variant . ,(delay python2-url))))))
12208
12209 (define-public python2-url
12210 (let ((base (package-with-python2 (strip-python2-variant python-url))))
12211 (package (inherit base)
12212 (propagated-inputs
12213 `(("python2-publicsuffix" ,python2-publicsuffix))))))
12214
12215 (define-public python-freezegun
12216 (package
12217 (name "python-freezegun")
12218 (version "0.3.8")
12219 (source
12220 (origin
12221 (method url-fetch)
12222 (uri (pypi-uri "freezegun" version))
12223 (sha256
12224 (base32
12225 "1sf38d3ibv1jhhvr52x7dhrsiyqk1hm165dfv8w8wh0fhmgxg151"))))
12226 (build-system python-build-system)
12227 (native-inputs
12228 `(("python-mock" ,python-mock)
12229 ("python-nose" ,python-nose)
12230 ("python-coverage" ,python-coverage)))
12231 (propagated-inputs
12232 `(("python-six" ,python-six)
12233 ("python-dateutil" ,python-dateutil)))
12234 (arguments
12235 `(#:phases (modify-phases %standard-phases
12236 ;; The tests are normally executed via `make test`, but the PyPi
12237 ;; package does not include the Makefile.
12238 (replace 'check
12239 (lambda _
12240 (zero? (system* "nosetests" "./tests/")))))))
12241 (home-page "https://github.com/spulec/freezegun")
12242 (synopsis "Test utility for mocking the datetime module")
12243 (description
12244 "FreezeGun is a library that allows your python tests to travel through
12245 time by mocking the datetime module.")
12246 (license license:asl2.0)))
12247
12248 (define-public python2-freezegun
12249 (package-with-python2 python-freezegun))
12250
12251
12252 (define-public python-odfpy
12253 (package
12254 (name "python-odfpy")
12255 (version "1.3.3")
12256 (source (origin
12257 (method url-fetch)
12258 (uri (pypi-uri "odfpy" version))
12259 (sha256
12260 (base32
12261 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12262 (arguments
12263 `(#:modules ((srfi srfi-1)
12264 (guix build python-build-system)
12265 (guix build utils))
12266 #:phases
12267 (modify-phases %standard-phases
12268 (replace 'check
12269 ;; The test runner invokes python2 and python3 for test*.py.
12270 ;; To avoid having both in inputs, we replicate it here.
12271 (lambda _
12272 (every (lambda (test-file)
12273 (zero? (system* "python" test-file)))
12274 (find-files "tests" "^test.*\\.py$")))))))
12275 (build-system python-build-system)
12276 (home-page "https://github.com/eea/odfpy")
12277 (synopsis "Python API and tools to manipulate OpenDocument files")
12278 (description "Collection of libraries and utility programs written in
12279 Python to manipulate OpenDocument 1.2 files.")
12280 (license
12281 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12282 ;; number of files with other licenses.
12283 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12284
12285 (define-public python2-odfpy
12286 (package-with-python2 python-odfpy))
12287
12288 (define-public python-cachecontrol
12289 (package
12290 (name "python-cachecontrol")
12291 (version "0.11.6")
12292 (source
12293 (origin
12294 (method url-fetch)
12295 ;; Pypi does not have tests.
12296 (uri (string-append
12297 "https://github.com/ionrock/cachecontrol/archive/v"
12298 version ".tar.gz"))
12299 (file-name (string-append name "-" version ".tar.gz"))
12300 (sha256
12301 (base32
12302 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
12303 (build-system python-build-system)
12304 (arguments
12305 `(#:phases
12306 (modify-phases %standard-phases
12307 (replace 'check
12308 (lambda _
12309 ;; Drop test that requires internet access.
12310 (delete-file "tests/test_regressions.py")
12311 (setenv "PYTHONPATH"
12312 (string-append (getcwd) "/build/lib:"
12313 (getenv "PYTHONPATH")))
12314 (zero? (system* "py.test" "-vv")))))))
12315 (native-inputs
12316 `(("python-pytest" ,python-pytest)
12317 ("python-redis" ,python-redis)
12318 ("python-webtest" ,python-webtest)
12319 ("python-mock" ,python-mock)))
12320 (propagated-inputs
12321 `(("python-requests" ,python-requests)
12322 ("python-lockfile" ,python-lockfile)))
12323 (home-page "https://github.com/ionrock/cachecontrol")
12324 (synopsis "The httplib2 caching algorithms for use with requests")
12325 (description "CacheControl is a port of the caching algorithms in
12326 @code{httplib2} for use with @code{requests} session objects.")
12327 (license license:asl2.0)))
12328
12329 (define-public python2-cachecontrol
12330 (package-with-python2 python-cachecontrol))
12331
12332 (define-public python-lit
12333 (package
12334 (name "python-lit")
12335 (version "0.5.0")
12336 (source
12337 (origin
12338 (method url-fetch)
12339 (uri (pypi-uri "lit" version))
12340 (sha256
12341 (base32
12342 "135m2b9cwih85g66rjggavck328z7lj37srgpq3jxszbg0g2b91y"))))
12343 (build-system python-build-system)
12344 (home-page "http://llvm.org/")
12345 (synopsis "LLVM Software Testing Tool")
12346 (description "@code{lit} is a portable tool for executing LLVM and Clang
12347 style test suites, summarizing their results, and providing indication of
12348 failures.")
12349 (license license:ncsa)))
12350
12351 (define-public python2-lit
12352 (package-with-python2 python-lit))
12353
12354 (define-public python-pytest-pep8
12355 (package
12356 (name "python-pytest-pep8")
12357 (version "1.0.6")
12358 (source (origin
12359 (method url-fetch)
12360 (uri (pypi-uri "pytest-pep8" version))
12361 (sha256
12362 (base32
12363 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
12364 (build-system python-build-system)
12365 (arguments
12366 `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
12367 (native-inputs
12368 `(("python-pytest" ,python-pytest)))
12369 (propagated-inputs
12370 `(("python-pep8" ,python-pep8)))
12371 (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
12372 (synopsis "Py.test plugin to check PEP8 requirements")
12373 (description "Pytest plugin for checking PEP8 compliance.")
12374 (license license:expat)))
12375
12376 (define-public python2-pytest-pep8
12377 (package-with-python2 python-pytest-pep8))
12378
12379 (define-public python-pytest-flakes
12380 (package
12381 (name "python-pytest-flakes")
12382 (version "1.0.1")
12383 (source (origin
12384 (method url-fetch)
12385 (uri (pypi-uri "pytest-flakes" version))
12386 (sha256
12387 (base32
12388 "0flag3n33kbhyjrhzmq990rvg4yb8hhhl0i48q9hw0ll89jp28lw"))))
12389 (build-system python-build-system)
12390 (arguments
12391 `(#:phases
12392 (modify-phases %standard-phases
12393 (delete 'check)
12394 (add-after 'install 'check
12395 (lambda* (#:key outputs inputs #:allow-other-keys)
12396 ;; It's easier to run tests after install.
12397 ;; Make installed package available for running the tests
12398 (add-installed-pythonpath inputs outputs)
12399 (zero? (system* "py.test" "-vv")))))))
12400 (native-inputs
12401 `(("python-coverage" ,python-coverage)
12402 ("python-pytest" ,python-pytest)
12403 ("python-pytest-cache" ,python-pytest-cache)
12404 ("python-pytest-pep8" ,python-pytest-pep8)))
12405 (propagated-inputs
12406 `(("python-pyflakes" ,python-pyflakes)))
12407 (home-page "https://github.com/fschulze/pytest-flakes")
12408 (synopsis "Py.test plugin to check source code with pyflakes")
12409 (description "Pytest plugin for checking Python source code with pyflakes.")
12410 (license license:expat)))
12411
12412 (define-public python2-pytest-flakes
12413 (package-with-python2 python-pytest-flakes))
12414
12415 (define-public python-natsort
12416 (package
12417 (name "python-natsort")
12418 (version "5.0.2")
12419 (source (origin
12420 (method url-fetch)
12421 (uri (pypi-uri "natsort" version))
12422 (sha256
12423 (base32
12424 "0bh6j0l8iapjnsgg3bs6q075cnzjl6zw1vlgqyv3qrygm2cxypkn"))))
12425 (build-system python-build-system)
12426 (arguments
12427 `(#:phases
12428 (modify-phases %standard-phases
12429 (add-before 'check 'set-cachedir
12430 ;; Tests require write access to $HOME by default
12431 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
12432 (native-inputs
12433 `(("python-hypothesis" ,python-hypothesis)
12434 ("python-pytest-cache" ,python-pytest-cache)
12435 ("python-pytest-cov" ,python-pytest-cov)
12436 ("python-pytest-flakes" ,python-pytest-flakes)
12437 ("python-pytest-pep8" ,python-pytest-pep8)))
12438 (propagated-inputs ; TODO: Add python-fastnumbers.
12439 `(("python-pyicu" ,python-pyicu)))
12440 (home-page "https://github.com/SethMMorton/natsort")
12441 (synopsis "Natural sorting for python and shell")
12442 (description
12443 "Natsort lets you apply natural sorting on lists instead of
12444 lexicographical. If you use the built-in @code{sorted} method in python
12445 on a list such as @code{['a20', 'a9', 'a1', 'a4', 'a10']}, it would be
12446 returned as @code{['a1', 'a10', 'a20', 'a4', 'a9']}. Natsort provides a
12447 function @code{natsorted} that identifies numbers and sorts them separately
12448 from strings. It can also sort version numbers, real numbers, mixed types
12449 and more, and comes with a shell command @command{natsort} that exposes this
12450 functionality in the command line.")
12451 (license license:expat)
12452 (properties `((python2-variant . ,(delay python2-natsort))))))
12453
12454 (define-public python2-natsort
12455 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12456 (package (inherit base)
12457 (native-inputs
12458 `(("python2-pathlib" ,python2-pathlib)
12459 ("python2-mock" ,python2-mock)
12460 ("python2-enum34" ,python2-enum34)
12461 ,@(package-native-inputs base))))))
12462
12463 (define-public python-glances
12464 (package
12465 (name "python-glances")
12466 (version "2.7.1")
12467 (source
12468 (origin
12469 (method url-fetch)
12470 (uri (pypi-uri "Glances" version))
12471 (sha256
12472 (base32
12473 "11jbq40g8alsbirnd4kiagznqg270247i0m8qhi48ldf2i5xppxg"))))
12474 (build-system python-build-system)
12475 (propagated-inputs
12476 `(("python-psutil" ,python-psutil)))
12477 (home-page
12478 "https://github.com/nicolargo/glances")
12479 (synopsis
12480 "A cross-platform curses-based monitoring tool")
12481 (description
12482 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12483 Glances uses the PsUtil library to get information from your system. It monitors
12484 CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12485 (license license:lgpl3+)))
12486
12487 (define-public python2-glances
12488 (package-with-python2 python-glances))
12489
12490 (define-public python-graphql-core
12491 (package
12492 (name "python-graphql-core")
12493 (version "0.5.3")
12494 (source
12495 (origin
12496 (method url-fetch)
12497 (uri (pypi-uri "graphql-core" version))
12498 (sha256
12499 (base32
12500 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12501 (build-system python-build-system)
12502 (arguments
12503 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12504 #:phases
12505 (modify-phases %standard-phases
12506 (add-after 'unpack 'patch-hardcoded-version
12507 (lambda _ (substitute*
12508 "setup.py"
12509 (("'gevent==1.1rc1'") "'gevent'"))
12510 #t)))))
12511 (native-inputs
12512 `(("python-gevent" ,python-gevent)
12513 ("python-mock" ,python-mock)
12514 ("python-pytest-mock" ,python-pytest-mock)))
12515 (propagated-inputs
12516 `(("python-promise" ,python-promise)
12517 ("python-six" ,python-six)))
12518 (home-page "https://github.com/graphql-python/graphql-core")
12519 (synopsis "GraphQL implementation for Python")
12520 (description
12521 "GraphQL implementation for Python. GraphQL is a data query language and
12522 runtime designed and used to request and deliver data to mobile and web apps.
12523 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12524 to Python.")
12525 (license license:expat)))
12526
12527 (define-public python2-graphql-core
12528 (package-with-python2 python-graphql-core))
12529
12530 (define-public python-graphql-relay
12531 (package
12532 (name "python-graphql-relay")
12533 (version "0.4.5")
12534 (source
12535 (origin
12536 (method url-fetch)
12537 (uri (pypi-uri "graphql-relay" version))
12538 (sha256
12539 (base32
12540 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12541 (build-system python-build-system)
12542 (native-inputs
12543 `(("python-pytest" ,python-pytest)))
12544 (propagated-inputs
12545 `(("python-graphql-core" ,python-graphql-core)
12546 ("python-promise" ,python-promise)
12547 ("python-six" ,python-six)))
12548 (home-page "https://github.com/graphql-python/graphql-relay-py")
12549 (synopsis "Relay implementation for Python")
12550 (description
12551 "This is a library to allow the easy creation of Relay-compliant servers
12552 using the GraphQL Python reference implementation of a GraphQL server. It
12553 should be noted that the code is a exact port of the original
12554 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12555 from Facebook.")
12556 (license license:expat)))
12557
12558 (define-public python2-graphql-relay
12559 (package-with-python2 python-graphql-relay))
12560
12561 (define-public python-graphene
12562 (package
12563 (name "python-graphene")
12564 (version "0.10.2")
12565 (source
12566 (origin
12567 (method url-fetch)
12568 (uri (pypi-uri "graphene" version))
12569 (sha256
12570 (base32
12571 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12572 (build-system python-build-system)
12573 (native-inputs
12574 `(("python-django-filter" ,python-django-filter)
12575 ("python-mock" ,python-mock)
12576 ("python-psycopg2" ,python-psycopg2)
12577 ("python-pytest-django" ,python-pytest-django)
12578 ("python-sqlalchemy-utils" ,python-sqlalchemy-utils)))
12579 (propagated-inputs
12580 `(("python-graphql-core" ,python-graphql-core)
12581 ("python-graphql-relay" ,python-graphql-relay)
12582 ("python-iso8601" ,python-iso8601)
12583 ("python-promise" ,python-promise)
12584 ("python-six" ,python-six)))
12585 (home-page "http://graphene-python.org/")
12586 (synopsis "GraphQL Framework for Python")
12587 (description
12588 "Graphene is a Python library for building GraphQL schemas/types.
12589 A GraphQL schema describes your data model, and provides a GraphQL server
12590 with an associated set of resolve methods that know how to fetch data.")
12591 (properties `((python2-variant . ,(delay python2-graphene))))
12592 (license license:expat)))
12593
12594 (define-public python2-graphene
12595 (let ((base (package-with-python2
12596 (strip-python2-variant python-graphene))))
12597 (package (inherit base)
12598 (native-inputs
12599 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12600 ,@(package-native-inputs base))))))
12601
12602 (define-public python-nautilus
12603 (package
12604 (name "python-nautilus")
12605 (version "0.4.9")
12606 (source
12607 (origin
12608 (method url-fetch)
12609 (uri (pypi-uri "nautilus" version))
12610 (sha256
12611 (base32
12612 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12613 (build-system python-build-system)
12614 (arguments `(#:tests? #f)) ; fails to import test modules
12615 (propagated-inputs
12616 `(("python-bcrypt" ,python-bcrypt)
12617 ("python-click" ,python-click)
12618 ("python-consul" ,python-consul)
12619 ("python-graphene" ,python-graphene)
12620 ("python-jinja2" ,python-jinja2)
12621 ("python-peewee" ,python-peewee)
12622 ("python-pika" ,python-pika)
12623 ("python-tornado" ,python-tornado)
12624 ("python-wtforms" ,python-wtforms)))
12625 (native-inputs
12626 `(("python-nose2" ,python-nose2)))
12627 (home-page "https://github.com/AlecAivazis/nautilus")
12628 (synopsis "Library for creating microservice applications")
12629 (description
12630 "Nautilus is a framework for flux based microservices that looks to
12631 provide extendible implementations of common aspects of a cloud so that you can
12632 focus on building massively scalable web applications.")
12633 (license license:expat)))
12634
12635 (define-public python-snowballstemmer
12636 (package
12637 (name "python-snowballstemmer")
12638 (version "1.2.1")
12639 (source (origin
12640 (method url-fetch)
12641 (uri (pypi-uri "snowballstemmer" version))
12642 (sha256
12643 (base32
12644 "0a0idq4y5frv7qsg2x62jd7rd272749xk4x99misf5rcifk2d7wi"))))
12645 (build-system python-build-system)
12646 (arguments
12647 `(;; No tests exist
12648 #:tests? #f))
12649 (home-page "https://github.com/shibukawa/snowball_py")
12650 (synopsis "Snowball stemming library collection for Python")
12651 (description "This package provides 16 word stemmer algorithms generated
12652 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12653 English stemmer.")
12654 (license license:bsd-3)))
12655
12656 (define-public python2-snowballstemmer
12657 (package-with-python2 python-snowballstemmer))
12658
12659 (define-public python-sphinx-cloud-sptheme
12660 (package
12661 (name "python-sphinx-cloud-sptheme")
12662 (version "1.8.0")
12663 (source (origin
12664 (method url-fetch)
12665 (uri (pypi-uri "cloud_sptheme" version))
12666 (sha256
12667 (base32
12668 "1dniqb6a39yh786f86c4jn666rwnyi1jvzn4616zhcchb7sfdshd"))))
12669 (build-system python-build-system)
12670 ;; FIXME: The 'pypi' release archive does not contain tests.
12671 (arguments '(#:tests? #f))
12672 (native-inputs
12673 `(("python-sphinx" ,python-sphinx)))
12674 (home-page "https://bitbucket.org/ecollins/cloud_sptheme")
12675 (synopsis "'Cloud' theme for Sphinx documenter")
12676 (description "This package contains the \"Cloud\" theme for Sphinx and some
12677 related extensions.")
12678 (license license:bsd-3)))
12679
12680 (define-public python2-sphinx-cloud-sptheme
12681 (package-with-python2 python-sphinx-cloud-sptheme))
12682
12683 (define-public python-sphinx-alabaster-theme
12684 (package
12685 (name "python-sphinx-alabaster-theme")
12686 (version "0.7.9")
12687 (source (origin
12688 (method url-fetch)
12689 (uri (pypi-uri "alabaster" version))
12690 (sha256
12691 (base32
12692 "027anxzcb951gjlcc43y3rbn9qrw36d16vj9wd2smv5410xx9bs7"))))
12693 (build-system python-build-system)
12694 (propagated-inputs
12695 `(("python-pygments" ,python-pygments)))
12696 (home-page "https://alabaster.readthedocs.io/")
12697 (synopsis "Configurable sidebar-enabled Sphinx theme")
12698 (description "Alabaster is a visually (c)lean, responsive, configurable
12699 theme for the Sphinx documentation system. It's the default theme of Sphinx.")
12700 (license license:bsd-3)))
12701
12702 (define-public python2-sphinx-alabaster-theme
12703 (package-with-python2 python-sphinx-alabaster-theme))
12704
12705 (define-public python-betamax
12706 (package
12707 (name "python-betamax")
12708 (version "0.8.0")
12709 (source
12710 (origin
12711 (method url-fetch)
12712 (uri (pypi-uri "betamax" version))
12713 (sha256
12714 (base32
12715 "18f8v5gng3j773jlbbzx4rg1i4y2zw3m2l1zpmbvp8bh5a2q1i42"))))
12716 (build-system python-build-system)
12717 (arguments
12718 '(;; Many tests fail because they require networking.
12719 #:tests? #f))
12720 (propagated-inputs
12721 `(("python-requests" ,python-requests)))
12722 (home-page "https://github.com/sigmavirus24/betamax")
12723 (synopsis "Record HTTP interactions with python-requests")
12724 (description "Betamax will record your test suite's HTTP interactions and
12725 replay them during future tests. It is designed to work with python-requests.")
12726 (license license:expat)))
12727
12728 (define-public python2-betamax
12729 (package-with-python2 python-betamax))
12730
12731 (define-public python-s3transfer
12732 (package
12733 (name "python-s3transfer")
12734 (version "0.1.10")
12735 (source (origin
12736 (method url-fetch)
12737 (uri (pypi-uri "s3transfer" version))
12738 (sha256
12739 (base32
12740 "1h8g9bknvxflxkpbnxyfxmk8pvgykbbk9ljdvhqh6z4vjc2926ms"))))
12741 (build-system python-build-system)
12742 (arguments
12743 `(#:phases
12744 (modify-phases %standard-phases
12745 (replace 'check
12746 (lambda _
12747 ;; 7 of the 'integration' tests require network access or login
12748 ;; credentials.
12749 (zero? (system* "nosetests" "--exclude=integration")))))))
12750 (native-inputs
12751 `(("python-docutils" ,python-docutils)
12752 ("python-mock" ,python-mock)
12753 ("python-nose" ,python-nose)))
12754 (propagated-inputs
12755 `(("python-botocore" ,python-botocore)))
12756 (synopsis "Amazon S3 Transfer Manager")
12757 (description "S3transfer is a Python library for managing Amazon S3
12758 transfers.")
12759 (home-page "https://github.com/boto/s3transfer")
12760 (license license:asl2.0)
12761 (properties `((python2-variant . ,(delay python2-s3transfer))))))
12762
12763 (define-public python2-s3transfer
12764 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
12765 (package
12766 (inherit base)
12767 (native-inputs
12768 `(("python2-futures" ,python2-futures)
12769 ,@(package-native-inputs base))))))
12770
12771 (define-public python-setproctitle
12772 (package
12773 (name "python-setproctitle")
12774 (version "1.1.10")
12775 (source
12776 (origin
12777 (method url-fetch)
12778 (uri (pypi-uri "setproctitle" version))
12779 (sha256
12780 (base32
12781 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12782 (build-system python-build-system)
12783 (arguments
12784 '(#:phases
12785 (modify-phases %standard-phases
12786 (add-before 'check 'patch-Makefile
12787 ;; Stricly this is only required for the python2 variant.
12788 ;; But adding a phase in an inherited package seems to be
12789 ;; cumbersum. So we patch even for python3.
12790 (lambda _
12791 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12792 (when nose
12793 (substitute* "Makefile"
12794 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12795 (string-append nose "/bin/nosetests "))))
12796 #t)))
12797 (replace 'check
12798 (lambda _
12799 (setenv "PYTHON" (or (which "python3") (which "python")))
12800 (setenv "PYCONFIG" (or (which "python3-config")
12801 (which "python-config")))
12802 (setenv "CC" "gcc")
12803 ;; No need to extend PYTHONPATH to find the built package, since
12804 ;; the Makefile will build anyway
12805 (zero? (system* "make" "check")))))))
12806 (native-inputs
12807 `(("procps" ,procps))) ; required for tests
12808 (home-page
12809 "https://github.com/dvarrazzo/py-setproctitle")
12810 (synopsis
12811 "Setproctitle implementation for Python to customize the process title")
12812 (description "The library allows a process to change its title (as displayed
12813 by system tools such as ps and top).
12814
12815 Changing the title is mostly useful in multi-process systems, for
12816 example when a master process is forked: changing the children's title
12817 allows to identify the task each process is busy with. The technique
12818 is used by PostgreSQL and the OpenSSH Server for example.")
12819 (license license:bsd-3)
12820 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12821
12822 (define-public python2-setproctitle
12823 (let ((base (package-with-python2
12824 (strip-python2-variant python-setproctitle))))
12825 (package
12826 (inherit base)
12827 (native-inputs `(("python2-nose" ,python2-nose)
12828 ,@(package-native-inputs base))))))
12829
12830 (define-public python-validictory
12831 (package
12832 (name "python-validictory")
12833 (version "1.0.1")
12834 (source
12835 (origin
12836 (method url-fetch)
12837 (uri (pypi-uri "validictory" version))
12838 (sha256
12839 (base32
12840 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12841 (build-system python-build-system)
12842 (arguments
12843 '(#:phases
12844 (modify-phases %standard-phases
12845 (add-after 'unpack 'bootstrap
12846 ;; Move the tests out of the package directory to avoid
12847 ;; packaging them.
12848 (lambda* _
12849 (rename-file "validictory/tests" "tests")
12850 (delete-file "tests/__init__.py")))
12851 (replace 'check
12852 (lambda _
12853 ;; Extend PYTHONPATH so the built package will be found.
12854 (setenv "PYTHONPATH"
12855 (string-append (getcwd) "/build/lib:"
12856 (getenv "PYTHONPATH")))
12857 (zero? (system* "py.test" "-vv" )))))))
12858 (native-inputs
12859 `(("python-pytest" ,python-pytest)))
12860 (home-page
12861 "https://github.com/jamesturk/validictory")
12862 (synopsis "General purpose Python data validator")
12863 (description "It allows validation of arbitrary Python data structures.
12864
12865 The schema format is based on the JSON Schema
12866 proposal (http://json-schema.org), so combined with json the library is also
12867 useful as a validator for JSON data.")
12868 (license license:expat)))
12869
12870 (define-public python2-validictory
12871 (package-with-python2 python-validictory))
12872
12873 (define-public python-aniso8601
12874 (package
12875 (name "python-aniso8601")
12876 (version "1.1.0")
12877 (source
12878 (origin
12879 (method url-fetch)
12880 (uri (pypi-uri "aniso8601" version))
12881 (sha256
12882 (base32
12883 "1k5mjg9iqbjfslb5prrsfz7dhlvi6s35p1jxq8dm87w1b7dn5i2g"))))
12884 (build-system python-build-system)
12885 (propagated-inputs
12886 `(("python-dateutil" ,python-dateutil)))
12887 (home-page
12888 "https://bitbucket.org/nielsenb/aniso8601")
12889 (synopsis
12890 "Python library for parsing ISO 8601 strings")
12891 (description
12892 "This package contains a library for parsing ISO 8601 datetime strings.")
12893 (license license:bsd-3)))
12894
12895 (define-public python-flask-restful
12896 (package
12897 (name "python-flask-restful")
12898 (version "0.3.5")
12899 (source
12900 (origin
12901 (method url-fetch)
12902 (uri (pypi-uri "Flask-RESTful" version))
12903 (sha256
12904 (base32
12905 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
12906 (build-system python-build-system)
12907 (propagated-inputs
12908 `(("python-aniso8601" ,python-aniso8601)
12909 ("python-flask" ,python-flask)
12910 ("python-pycrypto" ,python-pycrypto)
12911 ("python-pytz" ,python-pytz)))
12912 (native-inputs
12913 `(;; Optional dependency of Flask. Tests need it.
12914 ("python-blinker" ,python-blinker)
12915 ("python-mock" ,python-mock) ; For tests
12916 ("python-nose" ,python-nose) ; For tests
12917 ("python-sphinx" ,python-sphinx)))
12918 (home-page
12919 "https://www.github.com/flask-restful/flask-restful/")
12920 (synopsis
12921 "Flask module for creating REST APIs")
12922 (description
12923 "This package contains a Flask module for creating REST APIs.")
12924 (license license:bsd-3)))
12925
12926 (define-public python-flask-basicauth
12927 (package
12928 (name "python-flask-basicauth")
12929 (version "0.2.0")
12930 (source
12931 (origin
12932 (method url-fetch)
12933 (uri (pypi-uri "Flask-BasicAuth" version))
12934 (sha256
12935 (base32
12936 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
12937 (build-system python-build-system)
12938 (propagated-inputs
12939 `(("python-flask" ,python-flask)))
12940 (home-page
12941 "https://github.com/jpvanhal/flask-basicauth")
12942 (synopsis
12943 "HTTP basic access authentication for Flask")
12944 (description
12945 "This package provides HTTP basic access authentication for Flask.")
12946 (license license:bsd-3)))
12947
12948 (define-public python-flask-sqlalchemy
12949 (package
12950 (name "python-flask-sqlalchemy")
12951 (version "2.1")
12952 (source
12953 (origin
12954 (method url-fetch)
12955 (uri (pypi-uri "Flask-SQLAlchemy" version))
12956 (sha256
12957 (base32
12958 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
12959 (build-system python-build-system)
12960 (propagated-inputs
12961 `(("python-flask" ,python-flask)
12962 ("python-sqlalchemy" ,python-sqlalchemy)))
12963 (home-page
12964 "https://github.com/mitsuhiko/flask-sqlalchemy")
12965 (synopsis
12966 "Module adding SQLAlchemy support to your Flask application")
12967 (description
12968 "This package adds SQLAlchemy support to your Flask application.")
12969 (license license:bsd-3)))
12970
12971 (define-public python-pyev
12972 (package
12973 (name "python-pyev")
12974 (version "0.9.0")
12975 (source
12976 (origin
12977 (method url-fetch)
12978 (uri (pypi-uri "pyev" version))
12979 (sha256
12980 (base32
12981 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
12982 (build-system python-build-system)
12983 (arguments
12984 `(#:tests? #f ; no test suite
12985 #:phases
12986 (modify-phases %standard-phases
12987 (add-after 'unpack 'patch
12988 (lambda* (#:key inputs #:allow-other-keys)
12989 (let ((libev (string-append (assoc-ref inputs "libev")
12990 "/lib/libev.so.4")))
12991 (substitute* "setup.py"
12992 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
12993 (string-append "libev_dll_name = \"" libev "\"")))))))))
12994 (inputs
12995 `(("libev" ,libev)))
12996 (home-page "http://pythonhosted.org/pyev/")
12997 (synopsis "Python libev interface")
12998 (description "Pyev provides a Python interface to libev.")
12999 (license license:gpl3)))
13000
13001 (define-public python2-pyev
13002 (package-with-python2 python-pyev))
13003
13004 (define-public python-imagesize
13005 (package
13006 (name "python-imagesize")
13007 (version "0.7.1")
13008 (source
13009 (origin
13010 (method url-fetch)
13011 (uri (pypi-uri "imagesize" version))
13012 (sha256
13013 (base32
13014 "0qk07k0z4241lkzzjji7z4da04pcvg7bfc4xz1934zlqhwmwdcha"))))
13015 (build-system python-build-system)
13016 (arguments
13017 '(;; Test files are not distributed on PyPi:
13018 ;; https://github.com/shibukawa/imagesize_py/issues/7
13019 #:tests? #f))
13020 (home-page "https://github.com/shibukawa/imagesize_py")
13021 (synopsis "Gets image size of files in variaous formats in Python")
13022 (description
13023 "This package allows determination of image size from
13024 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13025 (license license:expat)))
13026
13027 (define-public python2-imagesize
13028 (package-with-python2 python-imagesize))
13029
13030 (define-public python-axolotl-curve25519
13031 (package
13032 (name "python-axolotl-curve25519")
13033 (version "0.1")
13034 (source
13035 (origin
13036 (method git-fetch)
13037 (uri (git-reference
13038 (url "git://github.com/tgalal/python-axolotl-curve25519")
13039 (commit "e4a9c4de0eae27223200579c58d1f8f6d20637e2")))
13040 (file-name (string-append name "-" version "-checkout"))
13041 (sha256
13042 (base32
13043 "0agap5q0hmvf6cwzjqc05kw53pjgf6942pcivpazksmg1vk400ra"))))
13044 (build-system python-build-system)
13045 (arguments
13046 `(;; Prevent creation of the egg. This works around
13047 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
13048 #:configure-flags '("--root=/")))
13049 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
13050 (synopsis "Python wrapper for curve25519 library")
13051 (description "This is a python wrapper for the curve25519 library
13052 with ed25519 signatures. The C code was pulled from
13053 libaxolotl-android. At the moment this wrapper is meant for use by
13054 python-axolotl.")
13055 (license (list license:gpl3 ; Most files
13056 license:bsd-3)))) ; curve/curve25519-donna.c
13057
13058 (define-public python2-axolotl-curve25519
13059 (package-with-python2 python-axolotl-curve25519))
13060
13061 (define-public python-axolotl
13062 (package
13063 (name "python-axolotl")
13064 (version "0.1.35")
13065 (source
13066 (origin
13067 (method url-fetch)
13068 (uri (string-append
13069 "https://github.com/tgalal/python-axolotl/archive/"
13070 version ".tar.gz"))
13071 (file-name (string-append name "-" version ".tar.gz"))
13072 (sha256
13073 (base32 "1z8d89p7v40p4bwywjm9h4z28fdvra79ddw06azlkrfjbl7dxmz8"))))
13074 (build-system python-build-system)
13075 (arguments
13076 `(#:phases
13077 (modify-phases %standard-phases
13078 ;; Don't install tests
13079 (add-before 'install 'remove-tests
13080 (lambda _
13081 (for-each delete-file-recursively
13082 '("axolotl/tests" "build/lib/axolotl/tests"))
13083 #t)))))
13084 (propagated-inputs
13085 `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
13086 ("python-dateutil" ,python-dateutil)
13087 ("python-protobuf" ,python-protobuf)
13088 ("python-pycrypto" ,python-pycrypto)))
13089 (home-page "https://github.com/tgalal/python-axolotl")
13090 (synopsis "Python port of libaxolotl-android")
13091 (description "This is a python port of libaxolotl-android. This
13092 is a ratcheting forward secrecy protocol that works in synchronous and
13093 asynchronous messaging environments.")
13094 (license license:gpl3)))
13095
13096 (define-public python2-axolotl
13097 (package-with-python2 python-axolotl))
13098
13099 (define-public python-termstyle
13100 (package
13101 (name "python-termstyle")
13102 (version "0.1.11")
13103 (source
13104 (origin
13105 (method url-fetch)
13106 (uri (pypi-uri "termstyle" version))
13107 (sha256
13108 (base32
13109 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13110 (build-system python-build-system)
13111 (arguments
13112 '(#:phases
13113 (modify-phases %standard-phases
13114 (replace 'check
13115 (lambda _
13116 (zero? (system* "python" "test3.py")))))))
13117 (home-page "https://github.com/gfxmonk/termstyle")
13118 (synopsis "Console text coloring for Python")
13119 (description "This package provides console text coloring for Python.")
13120 (license license:bsd-3)))
13121
13122 (define-public python-rednose
13123 (package
13124 (name "python-rednose")
13125 (version "1.2.1")
13126 (source
13127 (origin
13128 (method url-fetch)
13129 (uri (pypi-uri "rednose" version))
13130 (sha256
13131 (base32
13132 "0b0bsna217lr1nykyhl5fgjly15zhdvqd4prg4wy1zrgfv7al6m0"))))
13133 (build-system python-build-system)
13134 (arguments
13135 `(#:phases
13136 (modify-phases %standard-phases
13137 (add-after 'unpack 'fix-deps
13138 (lambda _
13139 ;; See <https://github.com/JBKahn/rednose/issues/12>
13140 (substitute* "setup.py"
13141 (("python-termstyle") "termstyle"))
13142 #t)))))
13143 (propagated-inputs
13144 `(("python-colorama" ,python-colorama)
13145 ("python-termstyle" ,python-termstyle)))
13146 (native-inputs
13147 `(("python-six" ,python-six)
13148 ("python-nose" ,python-nose)))
13149 (home-page "https://github.com/JBKahn/rednose")
13150 (synopsis "Colored output for Python nosetests")
13151 (description "This package provides colored output for the
13152 @command{nosetests} command of the Python Nose unit test framework.")
13153 (license license:bsd-3)))
13154
13155 (define-public python2-rednose
13156 (package-with-python2 python-rednose))
13157
13158 (define-public python-flask-restplus
13159 (package
13160 (name "python-flask-restplus")
13161 (version "0.9.2")
13162 (source
13163 (origin
13164 (method url-fetch)
13165 (uri (pypi-uri "flask-restplus" version))
13166 (sha256
13167 (base32
13168 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
13169 (build-system python-build-system)
13170 (arguments
13171 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
13172 ;; #:phases
13173 ;; (modify-phases %standard-phases
13174 ;; (replace 'check
13175 ;; (lambda _
13176 ;; (zero? (system* "nosetests")))))))
13177 (propagated-inputs
13178 `(("python-aniso8601" ,python-aniso8601)
13179 ("python-flask" ,python-flask)
13180 ("python-jsonschema" ,python-jsonschema)
13181 ("python-pytz" ,python-pytz)
13182 ("python-six" ,python-six)))
13183 (native-inputs
13184 `(("python-tzlocal" ,python-tzlocal)
13185 ("python-blinker" ,python-blinker)
13186 ("python-nose" ,python-nose)
13187 ("python-rednose" ,python-rednose)))
13188 (home-page "https://github.com/noirbizarre/flask-restplus")
13189 (synopsis "Framework for documented API development with Flask")
13190 (description "This package provides a framework for API development with
13191 the Flask web framework in Python. It is similar to package
13192 @code{python-flask-restful} but supports the @code{python-swagger}
13193 documentation builder.")
13194 (license license:expat)))
13195
13196 (define-public python-sadisplay
13197 (package
13198 (name "python-sadisplay")
13199 (version "0.4.6")
13200 (source
13201 (origin
13202 (method url-fetch)
13203 (uri (pypi-uri "sadisplay" version))
13204 (sha256
13205 (base32
13206 "0zqad2fl7q26p090qmqgmxbm6iwgf9zij1w8da1g3wdgjj72ql05"))))
13207 (build-system python-build-system)
13208 (propagated-inputs
13209 `(("python-sqlalchemy" ,python-sqlalchemy)))
13210 (native-inputs
13211 `(("python-nose" ,python-nose)))
13212 (home-page "https://bitbucket.org/estin/sadisplay")
13213 (synopsis "SQLAlchemy schema displayer")
13214 (description "This package provides a program to build Entity
13215 Relationship diagrams from a SQLAlchemy model (or directly from the
13216 database).")
13217 (license license:bsd-3)))
13218
13219 (define-public python2-sadisplay
13220 (package-with-python2 python-sadisplay))
13221
13222 (define-public python-flask-restful-swagger
13223 (package
13224 (name "python-flask-restful-swagger")
13225 (version "0.19")
13226 (source
13227 (origin
13228 (method url-fetch)
13229 (uri (pypi-uri "flask-restful-swagger" version))
13230 (sha256
13231 (base32
13232 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
13233 (build-system python-build-system)
13234 (propagated-inputs
13235 `(("python-flask-restful" ,python-flask-restful)))
13236 (home-page "https://github.com/rantav/flask-restful-swagger")
13237 (synopsis "Extract Swagger specs from Flask-Restful projects")
13238 (description "This package lets you extract Swagger API documentation
13239 specs from your Flask-Restful projects.")
13240 (license license:expat)))
13241
13242 (define-public python2-flask-restful-swagger
13243 (package-with-python2 python-flask-restful-swagger))
13244
13245 (define-public python-argcomplete
13246 (package
13247 (name "python-argcomplete")
13248 (version "1.7.0")
13249 (source
13250 (origin
13251 (method url-fetch)
13252 (uri (pypi-uri "argcomplete" version))
13253 (sha256
13254 (base32
13255 "11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x"))))
13256 (build-system python-build-system)
13257 (native-inputs
13258 `(("python-pexpect" ,python-pexpect)
13259 ("tcsh" ,tcsh)))
13260 (home-page "https://github.com/kislyuk/argcomplete")
13261 (synopsis "Shell tab completion for Python argparse")
13262 (description "argcomplete provides extensible command line tab completion
13263 of arguments and options for Python scripts using @code{argparse}. It's
13264 particularly useful for programs with many options or sub-parsers that can
13265 dynamically suggest completions; for example, when browsing resources over the
13266 network.")
13267 (license license:asl2.0)))
13268
13269 (define-public python2-argcomplete
13270 (package-with-python2 python-argcomplete))
13271
13272 (define-public python-xopen
13273 (package
13274 (name "python-xopen")
13275 (version "0.1.1")
13276 (source
13277 (origin
13278 (method url-fetch)
13279 (uri (pypi-uri "xopen" version))
13280 (sha256
13281 (base32
13282 "1wx6mylzcsyhjl19ycb83qq6iqpmr927lz62njfsar6ldsj0qcni"))
13283 (file-name (string-append name "-" version ".tar.gz"))))
13284 (build-system python-build-system)
13285 (home-page "https://github.com/marcelm/xopen/")
13286 (synopsis "Open compressed files transparently")
13287 (description "This module provides an @code{xopen} function that works like
13288 Python's built-in @code{open} function, but can also deal with compressed files.
13289 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13290 recognized by their file extensions. The focus is on being as efficient as
13291 possible on all supported Python versions.")
13292 (license license:expat)))
13293
13294 (define-public python2-xopen
13295 (package-with-python2 python-xopen))
13296
13297 (define-public python2-cheetah
13298 (package
13299 (name "python2-cheetah")
13300 (version "2.4.4")
13301 (source
13302 (origin
13303 (method url-fetch)
13304 (uri (pypi-uri "Cheetah" version))
13305 (sha256
13306 (base32
13307 "0l5mm4lnysjkzpjr95q5ydm9xc8bv43fxmr79ypybrf1y0lq4c5y"))))
13308 (build-system python-build-system)
13309 (arguments
13310 `(#:python ,python-2))
13311 (propagated-inputs
13312 `(("python2-markdown" ,python2-markdown)))
13313 (home-page "https://pythonhosted.org/Cheetah/")
13314 (synopsis "Template engine")
13315 (description "Cheetah is a text-based template engine and Python code
13316 generator.
13317
13318 Cheetah can be used as a standalone templating utility or referenced as
13319 a library from other Python applications. It has many potential uses,
13320 but web developers looking for a viable alternative to ASP, JSP, PHP and
13321 PSP are expected to be its principle user group.
13322
13323 Features:
13324 @enumerate
13325 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13326 text-based format.
13327 @item Cleanly separates content, graphic design, and program code.
13328 @item Blends the power and flexibility of Python with a simple template language
13329 that non-programmers can understand.
13330 @item Gives template writers full access to any Python data structure, module,
13331 function, object, or method in their templates.
13332 @item Makes code reuse easy by providing an object-orientated interface to
13333 templates that is accessible from Python code or other Cheetah templates.
13334 One template can subclass another and selectively reimplement sections of it.
13335 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13336 improve the performance of a dynamic website.
13337 @item Compiles templates into optimized, yet readable, Python code.
13338 @end enumerate")
13339 (license (license:x11-style "file://LICENSE"))))
13340
13341 (define-public python-dulwich
13342 (package
13343 (name "python-dulwich")
13344 (version "0.16.3")
13345 (source
13346 (origin
13347 (method url-fetch)
13348 (uri (list (string-append "https://www.dulwich.io/releases/"
13349 "dulwich-" version ".tar.gz")
13350 (pypi-uri "dulwich" version)))
13351 (sha256
13352 (base32 "0fl47vzfgc3w3rmhn8naii905cjqcp0vc68iyvymxp7567hh6als"))))
13353 (build-system python-build-system)
13354 (arguments
13355 `(#:phases
13356 (modify-phases %standard-phases
13357 (add-before 'check 'fix-tests
13358 (lambda* (#:key inputs #:allow-other-keys)
13359 ;; The tests use Popen with a custom environment which doesn't
13360 ;; include PATH.
13361 (substitute* "dulwich/tests/compat/utils.py"
13362 (("'git'") (string-append "'"
13363 (which "git")
13364 "'")))
13365 (substitute* '("dulwich/tests/test_repository.py"
13366 "dulwich/tests/test_hooks.py")
13367 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13368 (setenv "TEST_RUNNER" "unittest")
13369 (setenv "PYTHONHASHSEED" "random")
13370 #t)))))
13371 (propagated-inputs
13372 `(("python-fastimport" ,python-fastimport)))
13373 (native-inputs
13374 `(("python-mock" ,python-mock)
13375 ("python-geventhttpclient" ,python-geventhttpclient)
13376 ("git" ,git)))
13377 (home-page "https://www.dulwich.io/")
13378 (synopsis "Git implementation in Python")
13379 (description "Dulwich is an implementation of the Git file formats and
13380 protocols written in pure Python.")
13381 ;; Can be used with either license.
13382 (license (list license:asl2.0 license:gpl2+))))
13383
13384 (define-public python2-dulwich
13385 (package-with-python2 python-dulwich))
13386
13387 (define-public python-pbkdf2
13388 (package
13389 (name "python-pbkdf2")
13390 (version "1.3")
13391 (source
13392 (origin
13393 (method url-fetch)
13394 (uri (pypi-uri "pbkdf2" version))
13395 (sha256
13396 (base32
13397 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13398 (build-system python-build-system)
13399 (arguments
13400 '(#:phases
13401 (modify-phases %standard-phases
13402 (replace 'check
13403 (lambda _
13404 (setenv "PYTHONPATH"
13405 (string-append (getcwd) "/build/lib:"
13406 (getenv "PYTHONPATH")))
13407 (zero? (system* "python" "test/test_pbkdf2.py")))))))
13408 (propagated-inputs
13409 `(("python-pycrypto" ,python-pycrypto))) ; optional
13410 (home-page "http://www.dlitz.net/software/python-pbkdf2/")
13411 (synopsis "Password-based key derivation")
13412 (description "This module implements the password-based key derivation
13413 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13414
13415 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13416 is part of the RSA Public Key Cryptography Standards series. The provided
13417 implementation takes a password or a passphrase and a salt value (and
13418 optionally a iteration count, a digest module, and a MAC module) and provides
13419 a file-like object from which an arbitrarly-sized key can be read.")
13420 (license license:expat)))
13421
13422 (define-public python2-pbkdf2
13423 (package-with-python2 python-pbkdf2))
13424
13425 (define-public python-qrcode
13426 (package
13427 (name "python-qrcode")
13428 (version "5.3")
13429 (source
13430 (origin
13431 (method url-fetch)
13432 (uri (pypi-uri "qrcode" version))
13433 (sha256
13434 (base32
13435 "0kljfrfq0c2rmxf8am57333ia41kd0snbm2rnqbdy816hgpcq5a1"))))
13436 (build-system python-build-system)
13437 (arguments
13438 ;; FIXME: Tests require packaging 'pymaging'.
13439 '(#:tests? #f))
13440 (propagated-inputs
13441 `(("python-lxml" ,python-lxml) ; for SVG output
13442 ("python-pillow" ,python-pillow) ; for PNG output
13443 ("python-six" ,python-six)))
13444 (home-page "https://github.com/lincolnloop/python-qrcode")
13445 (synopsis "QR Code image generator")
13446 (description "This package provides a pure Python QR Code generator
13447 module. It uses the Python Imaging Library (PIL) to allow for the generation
13448 of QR Codes.
13449
13450 In addition this package provides a command line tool to generate QR codes and
13451 either write these QR codes to a file or do the output as ascii art at the
13452 console.")
13453 (license license:bsd-3)))
13454
13455 (define-public python2-qrcode
13456 (package-with-python2 python-qrcode))
13457
13458 ;; SlowAES isn't compatible with Python 3.
13459 (define-public python2-slowaes
13460 (package
13461 (name "python2-slowaes")
13462 (version "0.1a1")
13463 (source
13464 (origin
13465 (method url-fetch)
13466 (uri (pypi-uri "slowaes" version))
13467 (sha256
13468 (base32
13469 "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
13470 (build-system python-build-system)
13471 (arguments `(#:python ,python-2))
13472 (home-page "http://code.google.com/p/slowaes/")
13473 (synopsis "Implementation of AES in Python")
13474 (description "This package contains an implementation of AES in Python.
13475 This implementation is slow (hence the project name) but still useful when
13476 faster ones are not available.")
13477 (license license:asl2.0)))
13478
13479 (define-public python-rst2ansi
13480 (package
13481 (name "python-rst2ansi")
13482 (version "0.1.5")
13483 (source
13484 (origin
13485 (method url-fetch)
13486 (uri (pypi-uri "rst2ansi" version))
13487 (sha256
13488 (base32
13489 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13490 (build-system python-build-system)
13491 (propagated-inputs
13492 `(("python-docutils" ,python-docutils)))
13493 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13494 (synopsis "Convert RST to ANSI-decorated console output")
13495 (description
13496 "Python module dedicated to rendering RST (reStructuredText) documents
13497 to ansi-escaped strings suitable for display in a terminal.")
13498 (license license:expat)))
13499
13500 (define-public python-ansi2html
13501 (package
13502 (name "python-ansi2html")
13503 (version "1.2.0")
13504 (source
13505 (origin
13506 (method url-fetch)
13507 (uri (pypi-uri "ansi2html" version))
13508 (sha256
13509 (base32
13510 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13511 (build-system python-build-system)
13512 (native-inputs
13513 `(("python-mock" ,python-mock)
13514 ("python-nose" ,python-nose)))
13515 (propagated-inputs
13516 `(("python-six" ,python-six)))
13517 (home-page "http://github.com/ralphbean/ansi2html")
13518 (synopsis "Convert ANSI-decorated console output to HTML")
13519 (description
13520 "@command{ansi2html} is a Python library and command line utility for
13521 convering text with ANSI color codes to HTML or LaTeX.")
13522 (license license:gpl3+)))
13523
13524 (define-public python2-ansi2html
13525 (package-with-python2 python-ansi2html))
13526
13527 (define-public python-ddt
13528 (package
13529 (name "python-ddt")
13530 (version "1.1.1")
13531 (source
13532 (origin
13533 (method url-fetch)
13534 (uri (pypi-uri "ddt" version))
13535 (sha256
13536 (base32
13537 "1c00ikkxr7lha97c81k938bzhgd4pbwamkjn0h4nkhr3xk00zp6n"))))
13538 (build-system python-build-system)
13539 (native-inputs
13540 `(("python-mock" ,python-mock)
13541 ("python-nose" ,python-nose)))
13542 (propagated-inputs
13543 `(("python-six" ,python-six)
13544 ("python-pyyaml" ,python-pyyaml)))
13545 (home-page "https://github.com/txels/ddt")
13546 (synopsis "Data-Driven Tests")
13547 (description
13548 "DDT (Data-Driven Tests) allows you to multiply one test case by running
13549 it with different test data, and make it appear as multiple test cases.")
13550 (license license:expat)))
13551
13552 (define-public python2-ddt
13553 (package-with-python2 python-ddt))
13554
13555 (define-public python-pycosat
13556 (package
13557 (name "python-pycosat")
13558 (version "0.6.1")
13559 (source
13560 (origin
13561 (method url-fetch)
13562 (uri (pypi-uri "pycosat" version))
13563 (sha256
13564 (base32
13565 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13566 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13567 (build-system python-build-system)
13568 (home-page "https://github.com/ContinuumIO/pycosat")
13569 (synopsis "Bindings to picosat (a SAT solver)")
13570 (description
13571 "This package provides efficient Python bindings to @code{picosat} on
13572 the C level. When importing pycosat, the @code{picosat} solver becomes part
13573 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13574 Problem} (SAT) solver.")
13575 (license license:expat)))
13576
13577 (define-public python2-pycosat
13578 (package-with-python2 python-pycosat))
13579
13580 (define-public python2-ruamel.ordereddict
13581 (package
13582 (name "python2-ruamel.ordereddict")
13583 (version "0.4.9")
13584 (source
13585 (origin
13586 (method url-fetch)
13587 (uri (pypi-uri "ruamel.ordereddict" version))
13588 (sha256
13589 (base32
13590 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13591 (build-system python-build-system)
13592 (arguments
13593 `(#:python ,python-2
13594 #:phases
13595 (modify-phases %standard-phases
13596 (delete 'check)
13597 (add-after 'install 'check
13598 (lambda* (#:key inputs outputs #:allow-other-keys)
13599 (add-installed-pythonpath inputs outputs)
13600 (zero? (system* "python" "test/testordereddict.py")))))))
13601 (home-page "https://bitbucket.org/ruamel/ordereddict")
13602 (synopsis "Version of dict that keeps keys in insertion order")
13603 (description
13604 "This is an implementation of an ordered dictionary with @dfn{Key
13605 Insertion Order} (KIO: updates of values do not affect the position of the
13606 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13607 removed and put at the back). The standard library module @code{OrderedDict},
13608 implemented later, implements a subset of @code{ordereddict} functionality.
13609 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13610 Order} (KSO, no sorting function can be specified, but a transform can be
13611 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13612 (license license:expat)))
13613
13614 (define-public python-pypeg2
13615 (package
13616 (name "python-pypeg2")
13617 (version "2.15.2")
13618 (source
13619 (origin
13620 (method url-fetch)
13621 (uri (pypi-uri "pyPEG2" version))
13622 (sha256
13623 (base32
13624 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13625 (build-system python-build-system)
13626 (propagated-inputs `(("python-lxml" ,python-lxml)))
13627 (arguments
13628 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13629 '(#:tests? #f))
13630 (home-page "https://fdik.org/pyPEG/")
13631 (synopsis "Parsering Expression Grammars in Python")
13632 (description "PyPEG is an intrinsic parser interpreter framework for
13633 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13634 parse many formal languages.")
13635 (license license:gpl2)))
13636
13637 (define-public python2-cliapp
13638 (package
13639 (name "python2-cliapp")
13640 (version "1.20160724")
13641 (source
13642 (origin
13643 (method url-fetch)
13644 (uri (string-append
13645 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13646 version ".tar.gz"))
13647 (sha256
13648 (base32
13649 "025cyi75vxyghbm4hav8dz4fzwksshddavy9g9fwr440awcvw74f"))))
13650 (build-system python-build-system)
13651 (arguments
13652 `(#:python ,python-2))
13653 (propagated-inputs
13654 `(("python2-pyaml" ,python2-pyaml)))
13655 (home-page "https://liw.fi/cliapp/")
13656 (synopsis "Python framework for command line programs")
13657 (description "@code{python2-cliapp} is a python framework for
13658 command line programs. It contains the typical stuff such programs
13659 need to do, such as parsing the command line for options, and
13660 iterating over input files.")
13661 (license license:gpl2+)))
13662
13663 (define-public python2-ttystatus
13664 (package
13665 (name "python2-ttystatus")
13666 (version "0.32")
13667 (source
13668 (origin
13669 (method url-fetch)
13670 (uri (string-append
13671 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13672 version ".tar.gz"))
13673 (sha256
13674 (base32
13675 "0b5g889jj23r2w1hi300cdldx6jvspanp0ybf5n1qvdvl150aamf"))))
13676 (build-system python-build-system)
13677 (arguments
13678 `(#:python ,python-2))
13679 (home-page "https://liw.fi/ttystatus/")
13680 (synopsis "Python library for showing progress reporting and
13681 status updates on terminals")
13682 (description "@code{python2-ttystatus} is a python library for
13683 showing progress reporting and status updates on terminals, for
13684 command line programs. Output is automatically adapted to the width
13685 of the terminal: truncated if it does not fit, and resized if the
13686 terminal size changes.")
13687 (license license:gpl3+)))
13688
13689 (define-public python2-tracing
13690 (package
13691 (name "python2-tracing")
13692 (version "0.10")
13693 (source
13694 (origin
13695 (method url-fetch)
13696 (uri (string-append
13697 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13698 version ".tar.gz"))
13699 (sha256
13700 (base32
13701 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13702 (build-system python-build-system)
13703 (arguments
13704 `(#:python ,python-2))
13705 (home-page "https://liw.fi/tracing/")
13706 (synopsis "Python debug logging helper")
13707 (description "@code{python2-tracing} is a python library for
13708 logging debug messages. It provides a way to turn debugging messages
13709 on and off, based on the filename they occur in. It is much faster
13710 than using @code{logging.Filter} to accomplish the same thing, which
13711 matters when code is run in production mode. The actual logging still
13712 happens using the @code{logging} library.")
13713 (license license:gpl3+)))
13714
13715 (define-public python2-larch
13716 (package
13717 (name "python2-larch")
13718 (version "1.20151025")
13719 (source
13720 (origin
13721 (method url-fetch)
13722 (uri (string-append
13723 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13724 version ".tar.gz"))
13725 (sha256
13726 (base32
13727 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13728 (build-system python-build-system)
13729 (arguments
13730 `(#:python ,python-2))
13731 (propagated-inputs
13732 `(("python2-tracing" ,python2-tracing)))
13733 (home-page "https://liw.fi/larch/")
13734 (synopsis "Python copy-on-write B-tree library")
13735 (description "@code{python2-larch} is an implementation of
13736 particular kind of B-tree, based on research by Ohad Rodeh. See
13737 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13738 on the data structure.
13739
13740 The distinctive feature of this B-tree is that a node is never
13741 (conceptually) modified. Instead, all updates are done by
13742 copy-on-write. This makes it easy to clone a tree, and modify only the
13743 clone, while other processes access the original tree.")
13744 (license license:gpl3+)))
13745
13746 (define-public python-htmlmin
13747 (package
13748 (name "python-htmlmin")
13749 (version "0.1.10")
13750 (source
13751 (origin
13752 (method url-fetch)
13753 (uri (pypi-uri "htmlmin" version))
13754 (sha256
13755 (base32
13756 "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
13757 (arguments
13758 `(#:tests? #f)) ;htmlmin has no tests
13759 (build-system python-build-system)
13760 (home-page "https://htmlmin.readthedocs.org/en/latest/")
13761 (synopsis "HTML minifier")
13762 (description "@code{htmlmin} is an HTML minifier that just works.
13763 It comes with safe defaults and easily configurable options.")
13764 (license license:bsd-3)))
13765
13766 (define-public python2-htmlmin
13767 (package-with-python2 python-htmlmin))
13768
13769 (define-public python-flask-htmlmin
13770 (package
13771 (name "python-flask-htmlmin")
13772 (version "1.2")
13773 (source
13774 (origin
13775 (method url-fetch)
13776 (uri (pypi-uri "Flask-HTMLmin" version))
13777 (sha256
13778 (base32
13779 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
13780 (propagated-inputs
13781 `(("python-flask" ,python-flask)
13782 ("python-htmlmin" ,python-htmlmin)))
13783 (build-system python-build-system)
13784 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
13785 (synopsis "HTML response minifier for Flask")
13786 (description
13787 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
13788 (license license:bsd-3)))
13789
13790 (define-public python2-flask-htmlmin
13791 (package-with-python2 python-flask-htmlmin))
13792
13793 (define-public python-flask-login
13794 (package
13795 (name "python-flask-login")
13796 (version "0.4.0")
13797 (source
13798 (origin
13799 (method url-fetch)
13800 (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
13801 version ".tar.gz"))
13802 (file-name (string-append name "-" version ".tar.gz"))
13803 (sha256
13804 (base32
13805 "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
13806 (arguments
13807 ;; Tests fail PEP8 compliance. See:
13808 ;; https://github.com/maxcountryman/flask-login/issues/340
13809 `(#:tests? #f))
13810 (build-system python-build-system)
13811 (home-page "https://github.com/maxcountryman/flask-login")
13812 (synopsis "User session management for Flask")
13813 (description
13814 "@code{Flask-Login} provides user session management for Flask. It
13815 handles the common tasks of logging in, logging out, and remembering your
13816 users' sessions over extended periods of time.")
13817 (license license:expat)))
13818
13819 (define-public python2-flask-login
13820 (package-with-python2 python-flask-login))
13821
13822 (define-public python-astroid
13823 (package
13824 (name "python-astroid")
13825 (version "1.4.9")
13826 (source
13827 (origin
13828 (method url-fetch)
13829 (uri (string-append
13830 "https://github.com/PyCQA/astroid/archive/astroid-"
13831 version ".tar.gz"))
13832 (sha256
13833 (base32
13834 "0j0wgy54d13a470vm4b9rdjk99n1hmdxpf34x9k3pbmi9w9b566z"))))
13835 (build-system python-build-system)
13836 (propagated-inputs
13837 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13838 ("python-six" ,python-six)
13839 ("python-wrapt" ,python-wrapt)))
13840 (arguments
13841 `(#:phases
13842 (modify-phases %standard-phases
13843 (replace 'check
13844 (lambda _
13845 (zero? (system* "python" "-m" "unittest" "discover"
13846 "-p" "unittest*.py")))))))
13847 (home-page "https://github.com/PyCQA/astroid")
13848 (synopsis "Common base representation of python source code for pylint and
13849 other projects")
13850 (description "@code{python-astroid} provides a common base representation
13851 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13852
13853 It provides a compatible representation which comes from the _ast module. It
13854 rebuilds the tree generated by the builtin _ast module by recursively walking
13855 down the AST and building an extended ast. The new node classes have
13856 additional methods and attributes for different usages. They include some
13857 support for static inference and local name scopes. Furthermore, astroid
13858 builds partial trees by inspecting living objects.")
13859 (license license:lgpl2.1+)))
13860
13861 (define-public python2-astroid
13862 (package-with-python2 python-astroid))
13863
13864 (define-public python-isort
13865 (package
13866 (name "python-isort")
13867 (version "4.2.5")
13868 (source
13869 (origin
13870 (method url-fetch)
13871 (uri (string-append
13872 "https://github.com/timothycrosley/isort/archive/"
13873 version ".tar.gz"))
13874 (file-name (string-append name "-" version ".tar.gz"))
13875 (sha256
13876 (base32
13877 "0zsrgkb0krn5476yncy5dd56k7dk34zqb4bnlvwy44ixgilyjmfh"))))
13878 (build-system python-build-system)
13879 (native-inputs
13880 `(("python-mock" ,python-mock)
13881 ("python-pytest" ,python-pytest)))
13882 (home-page "https://github.com/timothycrosley/isort")
13883 (synopsis "Python utility/library to sort python imports")
13884 (description "@code{python-isort} is a python utility/library to sort
13885 imports alphabetically, and automatically separated into sections. It
13886 provides a command line utility, a python library and plugins for various
13887 editors.")
13888 (license license:expat)))
13889
13890 (define-public python2-isort
13891 (package-with-python2 python-isort))
13892
13893 (define-public python2-backports-functools-lru-cache
13894 (package
13895 (name "python2-backports-functools-lru-cache")
13896 (version "1.3")
13897 (source
13898 (origin
13899 (method url-fetch)
13900 ;; only the pypi tarballs contain the necessary metadata
13901 (uri (pypi-uri "backports.functools_lru_cache" version))
13902 (sha256
13903 (base32
13904 "158ysf2hb0q4p4695abfiym9x1ywg0dgh8a3apd7gqaaxjy22jj4"))))
13905 (build-system python-build-system)
13906 (native-inputs
13907 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
13908 (arguments
13909 `(#:python ,python-2))
13910 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
13911 (synopsis "Backport of functools.lru_cache from Python 3.3")
13912 (description "@code{python2-backports-functools-lru-cache} is a backport
13913 of @code{functools.lru_cache} from python 3.3.")
13914 (license license:expat)))
13915
13916 (define-public python-configparser
13917 (package
13918 (name "python-configparser")
13919 (version "3.5.0")
13920 (source
13921 (origin
13922 (method url-fetch)
13923 (uri (string-append
13924 "https://bitbucket.org/ambv/configparser/get/"
13925 version ".tar.bz2"))
13926 (file-name (string-append name "-" version ".tar.gz"))
13927 (sha256
13928 (base32
13929 "0waq40as14abwzbb321hfz4vr1fi363nscy32ga14qvfygrg96wa"))))
13930 (build-system python-build-system)
13931 (home-page "http://docs.python.org/py3k/library/configparser.html")
13932 (synopsis "Backport of configparser from python 3.5")
13933 (description "@code{python-configparser} is a backport of
13934 @code{configparser} from Python 3.5 so that it can be used directly
13935 in other versions.")
13936 (license license:expat)))
13937
13938 (define-public python2-configparser
13939 (package-with-python2 python-configparser))
13940
13941 (define-public python2-coverage-test-runner
13942 (package
13943 (name "python2-coverage-test-runner")
13944 (version "1.11")
13945 (source
13946 (origin
13947 (method url-fetch)
13948 (uri (string-append
13949 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/"
13950 "coverage-test-runner/snapshot/coverage-test-runner-"
13951 version ".tar.gz"))
13952 (sha256
13953 (base32
13954 "0y1m7z3dl63kmhcmydl1mwg0hacnf6ghrx9dah17j9iasssfa3g7"))))
13955 (build-system python-build-system)
13956 (arguments
13957 `(#:python ,python-2
13958 #:phases
13959 (modify-phases %standard-phases
13960 (replace 'check
13961 (lambda _
13962 (zero? (system* "./testrun")))))))
13963 (propagated-inputs
13964 `(("python2-coverage" ,python2-coverage)))
13965 (home-page "https://liw.fi/coverage-test-runner/")
13966 (synopsis "Python module for running unit tests")
13967 (description "@code{CoverageTestRunner} is a python module for running
13968 unit tests and failing them if the unit test module does not exercise all
13969 statements in the module it tests.")
13970 (license license:gpl3+)))
13971
13972 (define-public python-pylint
13973 (package
13974 (name "python-pylint")
13975 (version "1.6.5")
13976 (source
13977 (origin
13978 (method url-fetch)
13979 (uri (string-append
13980 "https://github.com/PyCQA/pylint/archive/pylint-"
13981 version ".tar.gz"))
13982 (sha256
13983 (base32
13984 "08pmgflmq2zrzrn9nkfadzwa5vybz46wvwxhrsd2mjlcgsh4rzbm"))))
13985 (build-system python-build-system)
13986 (native-inputs
13987 `(("python-tox" ,python-tox)))
13988 (propagated-inputs
13989 `(("python-astroid" ,python-astroid)
13990 ("python-isort" ,python-isort)
13991 ("python-mccabe" ,python-mccabe)
13992 ("python-six" ,python-six)))
13993 (arguments
13994 `(#:phases
13995 (modify-phases %standard-phases
13996 (replace 'check
13997 (lambda _
13998 ;; Somehow, tests for python2-pylint
13999 ;; fail if run from the build directory
14000 (let ((work "/tmp/work"))
14001 (mkdir-p work)
14002 (setenv "PYTHONPATH"
14003 (string-append (getenv "PYTHONPATH") ":" work))
14004 (copy-recursively "." work)
14005 (with-directory-excursion "/tmp"
14006 (zero? (system* "python" "-m" "unittest" "discover"
14007 "-s" (string-append work "/pylint/test")
14008 "-p" "*test_*.py")))))))))
14009 (home-page "https://github.com/PyCQA/pylint")
14010 (synopsis "Python source code analyzer which looks for coding standard
14011 errors")
14012 (description "Pylint is a Python source code analyzer which looks
14013 for programming errors, helps enforcing a coding standard and sniffs
14014 for some code smells (as defined in Martin Fowler's Refactoring book).
14015
14016 Pylint has many rules enabled by default, way too much to silence them
14017 all on a minimally sized program. It's highly configurable and handle
14018 pragmas to control it from within your code. Additionally, it is
14019 possible to write plugins to add your own checks.")
14020 (license license:gpl2+)))
14021
14022 (define-public python2-pylint
14023 (let ((pylint (package-with-python2 python-pylint)))
14024 (package (inherit pylint)
14025 (propagated-inputs
14026 `(("python2-backports-functools-lru-cache"
14027 ,python2-backports-functools-lru-cache)
14028 ("python2-configparser" ,python2-configparser)
14029 ,@(package-propagated-inputs pylint))))))
14030
14031 (define-public python-paramunittest
14032 (package
14033 (name "python-paramunittest")
14034 (version "0.2")
14035 (source
14036 (origin
14037 (method url-fetch)
14038 (uri (pypi-uri "ParamUnittest" version))
14039 (sha256
14040 (base32
14041 "0kp793hws5xv1wvycxq7jw2pwy36f35k39jg8hx5qikij5a0jid1"))))
14042 (build-system python-build-system)
14043 (home-page
14044 "https://github.com/rik0/ParamUnittest")
14045 (synopsis
14046 "Simple extension to have parametrized unit tests")
14047 (description
14048 "This package allows to create parametrized unit-tests that work with the standard
14049 unittest package. A parametrized test case is automatically converted to multiple test
14050 cases. Since they are TestCase subclasses, they work with other test suites that
14051 recognize TestCases.")
14052 (license license:bsd-2)))
14053
14054 (define-public python2-python-paramunittest
14055 (package-with-python2 python-paramunittest))
14056
14057 (define-public python-mando
14058 (package
14059 (name "python-mando")
14060 (version "0.5")
14061 (source
14062 (origin
14063 (method url-fetch)
14064 (uri (pypi-uri "mando" version))
14065 (sha256
14066 (base32
14067 "0q05h66439gqdmlk4jqm6xrwrzfdgs4mwk70barxhr2y83qbbdc0"))))
14068 (build-system python-build-system)
14069 (propagated-inputs
14070 `(("python-rst2ansi" ,python-rst2ansi)))
14071 (native-inputs
14072 `(("python-sphinx" ,python-sphinx-1.5.3)
14073 ("python-paramunittest" ,python-paramunittest)))
14074 (home-page "https://mando.readthedocs.org/")
14075 (synopsis
14076 "Wrapper around argparse, allowing creation of complete CLI applications")
14077 (description
14078 "This package is a wrapper around argparse, allowing you to write complete CLI
14079 applications in seconds while maintaining all the flexibility.")
14080 (license license:expat)))
14081
14082 (define-public python2-mando
14083 (package-with-python2 python-mando))
14084
14085 (define-public python-mando-0.3.1
14086 ;; python-radon (version 1.5.0) has a requirement
14087 ;; for mando<0.4,>=0.3
14088 (package
14089 (inherit python-mando)
14090 (name "python-mando")
14091 (version "0.3.1")
14092 (source
14093 (origin
14094 (method url-fetch)
14095 (uri (string-append "https://github.com/rubik/mando/archive/v"
14096 version
14097 ".tar.gz"))
14098 (sha256
14099 (base32
14100 "17jlkdpqw22z1nyml5ybslilqkzmnk0dxxjml8bfghav1l5hbwd2"))))))
14101
14102 (define-public python-fudge
14103 (package
14104 (name "python-fudge")
14105 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14106 ;; package, which is currently the only use of this package.
14107 (version "0.9.6")
14108 (source
14109 (origin
14110 (method url-fetch)
14111 (uri (pypi-uri "fudge" version))
14112 (sha256
14113 (base32
14114 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14115 (build-system python-build-system)
14116 (arguments
14117 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14118 (home-page "https://github.com/fudge-py/fudge")
14119 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14120 (description
14121 "Fudge is a Python module for using fake objects (mocks and stubs) to
14122 test real ones.
14123
14124 In readable Python code, you declare the methods available on your fake object
14125 and how they should be called. Then you inject that into your application and
14126 start testing. This declarative approach means you don’t have to record and
14127 playback actions and you don’t have to inspect your fakes after running code.
14128 If the fake object was used incorrectly then you’ll see an informative
14129 exception message with a traceback that points to the culprit.")
14130 (license license:expat)))
14131
14132 (define-public python2-fudge
14133 (package-with-python2 python-fudge))
14134
14135 (define-public python-oauth2client
14136 (package
14137 (name "python-oauth2client")
14138 (version "4.0.0")
14139 (source
14140 (origin
14141 (method url-fetch)
14142 (uri (pypi-uri "oauth2client" version))
14143 (sha256
14144 (base32
14145 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
14146 (build-system python-build-system)
14147 (arguments
14148 `(#:tests? #f))
14149 (propagated-inputs
14150 `(("python-httplib2" ,python-httplib2)
14151 ("python-pyasn1" ,python-pyasn1)
14152 ("python-pyasn1-modules" ,python-pyasn1-modules)
14153 ("python-rsa" ,python-rsa)
14154 ("python-six" ,python-six)))
14155 (home-page "http://github.com/google/oauth2client/")
14156 (synopsis "OAuth 2.0 client library")
14157 (description "@code{python-oauth2client} provides an OAuth 2.0 client
14158 library for Python")
14159 (license license:asl2.0)))
14160
14161 (define-public python-flask-oidc
14162 (package
14163 (name "python-flask-oidc")
14164 (version "1.1.1")
14165 (source
14166 (origin
14167 (method url-fetch)
14168 (uri (pypi-uri "flask-oidc" version))
14169 (sha256
14170 (base32
14171 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
14172 (build-system python-build-system)
14173 (propagated-inputs
14174 `(("python-flask" ,python-flask)
14175 ("python-itsdangerous" ,python-itsdangerous)
14176 ("python-oauth2client" ,python-oauth2client)
14177 ("python-six" ,python-six)))
14178 (native-inputs
14179 `(("python-nose" ,python-nose)
14180 ("python-mock" ,python-mock)))
14181 (home-page "https://github.com/puiterwijk/flask-oidc")
14182 (synopsis "OpenID Connect extension for Flask")
14183 (description "@code{python-flask-oidc} provides an OpenID Connect extension
14184 for Flask.")
14185 (license license:bsd-2)))
14186
14187 (define-public python-mwclient
14188 (package
14189 (name "python-mwclient")
14190 (version "0.8.4")
14191 (source
14192 (origin
14193 (method url-fetch)
14194 ;; The PyPI version wouldn't contain tests.
14195 (uri (string-append "https://github.com/mwclient/mwclient/archive/"
14196 "v" version ".tar.gz"))
14197 (sha256
14198 (base32
14199 "1jj0yhilkjir00719fc7w133x7hdyhkxhk6xblla4asig45klsfv"))))
14200 (build-system python-build-system)
14201 (propagated-inputs
14202 `(("python-requests" ,python-requests)
14203 ("python-requests-oauthlib"
14204 ,python-requests-oauthlib)
14205 ("python-six" ,python-six)))
14206 (native-inputs
14207 `(("python-mock" ,python-mock)
14208 ("python-pytest" ,python-pytest)
14209 ("python-pytest-pep8" ,python-pytest-pep8)
14210 ("python-pytest-cache" ,python-pytest-cache)
14211 ("python-pytest-cov" ,python-pytest-cov)
14212 ("python-responses" ,python-responses)))
14213 (home-page "https://github.com/btongminh/mwclient")
14214 (synopsis "MediaWiki API client")
14215 (description "This package provides a MediaWiki API client.")
14216 (license license:expat)))
14217
14218 (define-public python2-mwclient
14219 (package-with-python2 python-mwclient))
14220
14221 (define-public python-pytest-warnings
14222 (package
14223 (name "python-pytest-warnings")
14224 (version "0.2.0")
14225 (source
14226 (origin
14227 (method url-fetch)
14228 (uri (pypi-uri "pytest-warnings" version))
14229 (sha256
14230 (base32
14231 "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
14232 (build-system python-build-system)
14233 (propagated-inputs
14234 `(("pytest" ,python-pytest-3.0)))
14235 (home-page "https://github.com/fschulze/pytest-warnings")
14236 (synopsis "Pytest plugin to list Python warnings in pytest report")
14237 (description
14238 "Python-pytest-warnings is a pytest plugin to list Python warnings in
14239 pytest report.")
14240 (license license:expat)))
14241
14242 (define-public python2-pytest-warnings
14243 (package-with-python2 python-pytest-warnings))
14244
14245 (define-public python-pytest-catchlog
14246 (package
14247 (name "python-pytest-catchlog")
14248 (version "1.2.2")
14249 (source
14250 (origin
14251 (method url-fetch)
14252 (uri (pypi-uri "pytest-catchlog" version ".zip"))
14253 (sha256
14254 (base32
14255 "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
14256 (build-system python-build-system)
14257 (native-inputs
14258 `(("unzip" ,unzip)))
14259 (propagated-inputs
14260 `(("pytest" ,python-pytest-3.0)))
14261 (home-page "https://github.com/eisensheng/pytest-catchlog")
14262 (synopsis "Pytest plugin to catch log messages")
14263 (description
14264 "Python-pytest-catchlog is a pytest plugin to catch log messages. This is
14265 a fork of pytest-capturelog.")
14266 (license license:expat)))
14267
14268 (define-public python2-pytest-catchlog
14269 (package-with-python2 python-pytest-catchlog))
14270
14271 (define-public python-utils
14272 (package
14273 (name "python-utils")
14274 (version "2.1.0")
14275 (source (origin
14276 (method url-fetch)
14277 (uri (pypi-uri "python-utils" version))
14278 (sha256
14279 (base32
14280 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14281 (build-system python-build-system)
14282 (native-inputs
14283 `(("pytest-runner" ,python-pytest-runner)
14284 ("pytest" ,python-pytest)
14285 ("six" ,python-six)))
14286 (home-page "https://github.com/WoLpH/python-utils")
14287 (synopsis "Convenient utilities not included with the standard Python install")
14288 (description
14289 "Python Utils is a collection of small Python functions and classes which
14290 make common patterns shorter and easier.")
14291 (license license:bsd-2)))
14292
14293 (define-public python2-utils
14294 (package-with-python2 python-utils))
14295
14296 (define-public python-webassets
14297 (package
14298 (name "python-webassets")
14299 (version "0.12.1")
14300 (source
14301 (origin
14302 (method url-fetch)
14303 (uri (pypi-uri "webassets" version))
14304 (sha256
14305 (base32
14306 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
14307 (build-system python-build-system)
14308 (native-inputs
14309 `(("python-jinja2" ,python-jinja2)
14310 ("python-mock" ,python-mock)
14311 ("python-nose" ,python-nose)
14312 ("python-pytest" ,python-pytest)))
14313 (home-page "https://github.com/miracle2k/webassets")
14314 (synopsis "Media asset management")
14315 (description "Merges, minifies and compresses Javascript and CSS files,
14316 supporting a variety of different filters, including YUI, jsmin, jspacker or
14317 CSS tidy. Also supports URL rewriting in CSS files.")
14318 (license license:bsd-2)))
14319
14320 (define-public python-sphinx-me
14321 (package
14322 (name "python-sphinx-me")
14323 (version "0.3")
14324 (source
14325 (origin
14326 (method url-fetch)
14327 (uri (pypi-uri "sphinx-me" version))
14328 (sha256
14329 (base32
14330 "06jzgp213zihnvpcy2y5jy3ykid3apc2ncp2pg6a2g05lhiziglq"))))
14331 (build-system python-build-system)
14332 (home-page "https://github.com/stephenmcd/sphinx-me")
14333 (synopsis "Create a Sphinx documentation shell")
14334 (description
14335 "Create a Sphinx documentation shell for your project and include the
14336 README file as the documentation index. It handles extracting the required
14337 meta data such as the project name, author and version from your project for
14338 use in your Sphinx docs.")
14339 (license license:bsd-2)))
14340
14341 (define-public python2-sphinx-me
14342 (package-with-python2 python-sphinx-me))
14343
14344 (define-public python-cssmin
14345 (package
14346 (name "python-cssmin")
14347 (version "0.2.0")
14348 (source
14349 (origin
14350 (method url-fetch)
14351 (uri (pypi-uri "cssmin" version))
14352 (sha256
14353 (base32
14354 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
14355 (build-system python-build-system)
14356 (home-page "https://github.com/zacharyvoase/cssmin")
14357 (synopsis "Python port of the YUI CSS Compressor")
14358 (description "Python port of the YUI CSS Compressor.")
14359 (license (list license:expat license:bsd-3))))
14360
14361 (define-public python2-cssmin
14362 (package-with-python2 python-cssmin))
14363
14364 (define-public python-diff-match-patch
14365 (package
14366 (name "python-diff-match-patch")
14367 (version "20121119")
14368 (source
14369 (origin
14370 (method url-fetch)
14371 (uri (pypi-uri "diff-match-patch" version))
14372 (sha256
14373 (base32
14374 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14375 (build-system python-build-system)
14376 (home-page "https://code.google.com/p/google-diff-match-patch")
14377 (synopsis "Synchronize plain text")
14378 (description "Diff Match and Patch libraries offer robust algorithms to
14379 perform the operations required for synchronizing plain text.")
14380 (license license:asl2.0)))
14381
14382 (define-public python2-diff-match-patch
14383 (package-with-python2 python-diff-match-patch))
14384
14385 (define-public python-dirsync
14386 (package
14387 (name "python-dirsync")
14388 (version "2.2.2")
14389 (source
14390 (origin
14391 (method url-fetch)
14392 (uri (pypi-uri "dirsync" version ".zip"))
14393 (sha256
14394 (base32
14395 "1hcdvmkwd5512zbxpin0k7bx5bkgzy3swjx7d0kj1y45af6r75v2"))))
14396 (build-system python-build-system)
14397 (native-inputs
14398 `(("unzip" ,unzip)))
14399 (propagated-inputs
14400 `(("six" ,python-six)))
14401 (home-page "https://bitbucket.org/tkhyn/dirsync")
14402 (synopsis "Advanced directory tree synchronisation tool")
14403 (description "Advanced directory tree synchronisation tool.")
14404 (license license:expat)))
14405
14406 (define-public python2-dirsync
14407 (package-with-python2 python-dirsync))
14408
14409 (define-public python-nosexcover
14410 (package
14411 (name "python-nosexcover")
14412 (version "1.0.11")
14413 (source (origin
14414 (method url-fetch)
14415 (uri (pypi-uri "nosexcover" version))
14416 (sha256
14417 (base32
14418 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
14419 (build-system python-build-system)
14420 (propagated-inputs
14421 `(("python-coverage" ,python-coverage)
14422 ("python-nose" ,python-nose)))
14423 (home-page "http://github.com/cmheisel/nose-xcover")
14424 (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
14425 (description "Nose-xcover is a companion to the built-in
14426 @code{nose.plugins.cover}. This plugin will write out an XML coverage report
14427 to a file named coverage.xml.
14428
14429 It will honor all the options you pass to the Nose coverage plugin,
14430 especially -cover-package.")
14431 (license license:expat)))
14432
14433 (define-public python2-nosexcover
14434 (package-with-python2 python-nosexcover))
14435
14436 (define-public python-elasticsearch
14437 (package
14438 (name "python-elasticsearch")
14439 (version "1.0.0")
14440 (source
14441 (origin
14442 (method url-fetch)
14443 (uri (pypi-uri "elasticsearch" version))
14444 (sha256
14445 (base32
14446 "1sdw1r05cw7ihnmng8ra9v968fj7bq6sji8i1dikymsnkcpgc69g"))))
14447 (build-system python-build-system)
14448 (native-inputs
14449 `(("python-mock" ,python-mock)
14450 ("python-nosexcover" ,python-nosexcover)
14451 ("python-pyaml" ,python-pyaml)
14452 ("python-requests" ,python-requests)))
14453 (propagated-inputs
14454 `(("urllib3" ,python-urllib3)))
14455 (arguments
14456 ;; tests require the test_elasticsearch module but it is not distributed.
14457 `(#:tests? #f))
14458 (home-page "https://github.com/elastic/elasticsearch-py")
14459 (synopsis "Low-level client for Elasticsearch")
14460 (description "Official low-level client for Elasticsearch. Its goal is to
14461 provide common ground for all Elasticsearch-related code in Python; because of
14462 this it tries to be opinion-free and very extendable.")
14463 (license license:expat)))
14464
14465 (define-public python2-elasticsearch
14466 (package-with-python2 python-elasticsearch))
14467
14468 (define-public python-levenshtein
14469 (package
14470 (name "python-levenshtein")
14471 (version "0.12.0")
14472 (source
14473 (origin
14474 (method url-fetch)
14475 (uri (pypi-uri "python-Levenshtein" version))
14476 (sha256
14477 (base32
14478 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14479 (build-system python-build-system)
14480 (home-page "https://github.com/ztane/python-Levenshtein")
14481 (synopsis "Fast computation of Levenshtein distance and string similarity")
14482 (description
14483 "The Levenshtein Python C extension module contains functions for fast computation of
14484 @enumerate
14485 @item Levenshtein (edit) distance, and edit operations
14486 @item string similarity
14487 @item approximate median strings, and generally string averaging
14488 @item string sequence and set similarity
14489 @end enumerate
14490 It supports both normal and Unicode strings.")
14491 (license license:gpl2+)))
14492
14493 (define-public python2-levenshtein
14494 (package-with-python2 python-levenshtein))
14495
14496 (define-public python-scandir
14497 (package
14498 (name "python-scandir")
14499 (version "1.4")
14500 (source
14501 (origin
14502 (method url-fetch)
14503 (uri (pypi-uri "scandir" version))
14504 (sha256
14505 (base32 "0yjrgp0mxp3d8bjkq2m1ac2ys8n76wykksvgyjrnil9gr3fx7a5d"))))
14506 (build-system python-build-system)
14507 (home-page "https://github.com/benhoyt/scandir")
14508 (synopsis "Directory iteration function")
14509 (description
14510 "Directory iteration function like os.listdir(), except that instead of
14511 returning a list of bare filenames, it yields DirEntry objects that include
14512 file type and stat information along with the name. Using scandir() increases
14513 the speed of os.walk() by 2-20 times (depending on the platform and file
14514 system) by avoiding unnecessary calls to os.stat() in most cases.")
14515 (license license:bsd-3)))
14516
14517 (define-public python2-scandir
14518 (package-with-python2 python-scandir))
14519
14520 (define-public python2-stemming
14521 (package
14522 (name "python2-stemming")
14523 (version "1.0.1")
14524 (source
14525 (origin
14526 (method url-fetch)
14527 (uri (pypi-uri "stemming" version))
14528 (sha256
14529 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14530 (build-system python-build-system)
14531 (arguments
14532 `(#:python ,python-2))
14533 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14534 (synopsis "Python implementations of various stemming algorithms")
14535 (description
14536 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14537 stemming algorithms for English. These implementations are straightforward and
14538 efficient, unlike some Python versions of the same algorithms available on the
14539 Web. This package is an extraction of the stemming code included in the Whoosh
14540 search engine.")
14541 (license license:public-domain)))
14542
14543 (define-public python-factory-boy
14544 (package
14545 (name "python-factory-boy")
14546 (version "2.8.1")
14547 (source
14548 (origin
14549 (method url-fetch)
14550 (uri (pypi-uri "factory_boy" version))
14551 (sha256
14552 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14553 (build-system python-build-system)
14554 (arguments
14555 ;; Tests are not included in the tarball.
14556 `(#:tests? #f))
14557 (propagated-inputs
14558 `(("faker" ,python-faker)))
14559 (home-page "https://github.com/benhoyt/scandir")
14560 (synopsis "Versatile test fixtures replacement")
14561 (description
14562 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14563
14564 As a fixtures replacement tool, it aims to replace static, hard to maintain
14565 fixtures with easy-to-use factories for complex object.
14566
14567 Instead of building an exhaustive test setup with every possible combination
14568 of corner cases, factory_boy allows you to use objects customized for the
14569 current test, while only declaring the test-specific fields")
14570 (license license:expat)))
14571
14572 (define-public python2-factory-boy
14573 (package-with-python2 python-factory-boy))
14574
14575 (define-public python-translate-toolkit
14576 (package
14577 (name "python-translate-toolkit")
14578 (version "2.1.0")
14579 (source
14580 (origin
14581 (method url-fetch)
14582 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14583 (sha256
14584 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14585 (build-system python-build-system)
14586 (native-inputs
14587 `(("python-pytest" ,python-pytest)
14588 ("python-sphinx" ,python-sphinx)))
14589 (propagated-inputs
14590 `(("python-babel" ,python-babel)
14591 ("python-beautifulsoup4" ,python-beautifulsoup4)
14592 ("python-chardet" ,python-chardet)
14593 ("python-diff-match-patch" ,python-diff-match-patch)
14594 ("python-levenshtein" ,python-levenshtein)
14595 ("python-lxml" ,python-lxml)
14596 ("python-six" ,python-six)
14597 ("python-vobject" ,python-vobject)
14598 ("python-pyyaml" ,python-pyyaml)))
14599 (arguments
14600 ;; TODO: tests are not run, because they end with
14601 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14602 ;; 'parse_funcs'
14603 ;; during test setup.
14604 `(#:tests? #f))
14605 (home-page "http://toolkit.translatehouse.org")
14606 (synopsis "Tools and API for translation and localization engineering")
14607 (description
14608 "Tools and API for translation and localization engineering. It contains
14609 several utilities, as well as an API for building localization tools.")
14610 (license license:gpl2+)))
14611
14612 (define-public python2-translate-toolkit
14613 (package-with-python2 python-translate-toolkit))
14614
14615 (define-public python-mysqlclient
14616 (package
14617 (name "python-mysqlclient")
14618 (version "1.3.10")
14619 (source
14620 (origin
14621 (method url-fetch)
14622 (uri (pypi-uri "mysqlclient" version))
14623 (sha256
14624 (base32
14625 "0qkj570x4rbsblji6frvsvp2v1ap32dqzj1lq62zp9515ffsyaj5"))))
14626 (build-system python-build-system)
14627 (native-inputs
14628 `(("mariadb" ,mariadb)
14629 ("nose" ,python-nose)
14630 ("mock" ,python-mock)
14631 ("py.test" ,python-pytest)))
14632 (inputs
14633 `(("mysql" ,mysql)
14634 ("libz" ,zlib)
14635 ("openssl" ,openssl)))
14636 (home-page "https://github.com/PyMySQL/mysqlclient-python")
14637 (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
14638 (description "MySQLdb is an interface to the popular MySQL database server
14639 for Python. The design goals are:
14640 @enumerate
14641 @item Compliance with Python database API version 2.0 [PEP-0249],
14642 @item Thread-safety,
14643 @item Thread-friendliness (threads will not block each other).
14644 @end enumerate")
14645 (license license:gpl2)))
14646
14647 (define-public python2-mysqlclient
14648 (package-with-python2 python-mysqlclient))
14649
14650 (define-public python-hiredis
14651 (package
14652 (name "python-hiredis")
14653 (version "0.2.0")
14654 (source
14655 (origin
14656 (method url-fetch)
14657 (uri (pypi-uri "hiredis" version))
14658 (sha256
14659 (base32
14660 "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
14661 (build-system python-build-system)
14662 (arguments
14663 ;; no tests
14664 `(#:tests? #f))
14665 (home-page "https://github.com/redis/hiredis-py")
14666 (synopsis "Python extension that wraps protocol parsing code in hiredis")
14667 (description "Python-hiredis is a python extension that wraps protocol
14668 parsing code in hiredis. It primarily speeds up parsing of multi bulk replies.")
14669 (license license:bsd-3)))
14670
14671 (define-public python2-hiredis
14672 (package-with-python2 python-hiredis))
14673
14674 (define-public python-fakeredis
14675 (package
14676 (name "python-fakeredis")
14677 (version "0.8.2")
14678 (source
14679 (origin
14680 (method url-fetch)
14681 (uri (pypi-uri "fakeredis" version))
14682 (sha256
14683 (base32
14684 "0zncahj3byyasyfx9i7k991ph0n0lq8v3a21pqri5qxn9564bk9r"))))
14685 (build-system python-build-system)
14686 (arguments
14687 ;; no tests
14688 `(#:tests? #f))
14689 (home-page "https://github.com/jamesls/fakeredis")
14690 (synopsis "Fake implementation of redis API for testing purposes")
14691 (description "Fakeredis is a pure python implementation of the redis-py
14692 python client that simulates talking to a redis server. This was created for a
14693 single purpose: to write unittests. Setting up redis is not hard, but many time
14694 you want to write unittests that do not talk to an external server (such as
14695 redis). This module now allows tests to simply use this module as a reasonable
14696 substitute for redis.")
14697 (license license:bsd-3)))
14698
14699 (define-public python2-fakeredis
14700 (package-with-python2 python-fakeredis))
14701
14702 (define-public python-behave-web-api
14703 (package
14704 (name "python-behave-web-api")
14705 (version "1.0.6")
14706 (source
14707 (origin
14708 (method url-fetch)
14709 (uri (pypi-uri "behave-web-api" version))
14710 (sha256
14711 (base32
14712 "03kpq2xsy1gab3jy0dccbxlsg7vwfy4lagss0qldwmx3xz6b3i19"))))
14713 (build-system python-build-system)
14714 (arguments
14715 `(#:phases
14716 (modify-phases %standard-phases
14717 (add-after 'unpack 'fix-dependencies
14718 (lambda _
14719 (substitute* "setup.py"
14720 (("'wheel'") "") ; We don't use it.
14721 (("'ordereddict==1.1'") ""))))))) ; Python >= 2.7 has it built-in.
14722 (propagated-inputs
14723 `(("behave" ,behave)
14724 ("python-requests" ,python-requests)))
14725 (home-page "https://github.com/jefersondaniel/behave-web-api")
14726 (synopsis "Provides testing for JSON APIs with Behave for Python")
14727 (description "This package provides testing utility modules for testing
14728 JSON APIs with Behave.")
14729 (license license:expat)))
14730
14731 (define-public python2-behave-web-api
14732 (package-with-python2 python-behave-web-api))
14733
14734 (define-public python-flask-script
14735 (package
14736 (name "python-flask-script")
14737 (version "2.0.5")
14738 (source
14739 (origin
14740 (method url-fetch)
14741 (uri (pypi-uri "Flask-Script" version))
14742 (sha256
14743 (base32
14744 "0zqh2yq8zk7m9b4xw1ryqmrljkdigfb3hk5155a3b5hkfnn6xxyf"))))
14745 (build-system python-build-system)
14746 (propagated-inputs
14747 `(("python-flask" ,python-flask)
14748 ("python-argcomplete" ,python-argcomplete)
14749 ("python-werkzeug" ,python-werkzeug)))
14750 (native-inputs
14751 `(("python-pytest" ,python-pytest)))
14752 (home-page
14753 "http://github.com/smurfix/flask-script")
14754 (synopsis "Scripting support for Flask")
14755 (description "The Flask-Script extension provides support for writing
14756 external scripts in Flask. This includes running a development server,
14757 a customised Python shell, scripts to set up your database, cronjobs,
14758 and other command-line tasks that belong outside the web application
14759 itself.")
14760 (license license:bsd-3)))
14761
14762 (define-public python2-flask-script
14763 (package-with-python2 python-flask-script))
14764
14765 (define-public python-flask-migrate
14766 (package
14767 (name "python-flask-migrate")
14768 (version "2.0.3")
14769 (source
14770 (origin
14771 (method url-fetch)
14772 (uri (pypi-uri "Flask-Migrate" version))
14773 (sha256
14774 (base32
14775 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
14776 (build-system python-build-system)
14777 (propagated-inputs
14778 `(("python-flask" ,python-flask)
14779 ("python-alembic" ,python-alembic)
14780 ("python-sqlalchemy" ,python-sqlalchemy)
14781 ("python-flask-script" ,python-flask-script)
14782 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
14783 (home-page "http://github.com/miguelgrinberg/flask-migrate/")
14784 (synopsis "SQLAlchemy database migrations for Flask programs using
14785 Alembic")
14786 (description "This package contains SQLAlchemy database migration tools
14787 for Flask programs that are using @code{python-alembic}.")
14788 (license license:expat)))
14789
14790 (define-public python2-flask-migrate
14791 (package-with-python2 python-flask-migrate))
14792
14793 (define-public python-packaging
14794 (package
14795 (name "python-packaging")
14796 (version "16.8")
14797 (source
14798 (origin
14799 (method url-fetch)
14800 (uri (pypi-uri "packaging" version))
14801 (sha256
14802 (base32
14803 "17k1xbjshackwvbsnxqixbph8rbqhz4bf4g3al5xyzhavxgq6l2x"))))
14804 (build-system python-build-system)
14805 (native-inputs
14806 `(("python-pretend" ,python-pretend)
14807 ("python-pytest" ,python-pytest)))
14808 (propagated-inputs
14809 `(("python-pyparsing" ,python-pyparsing)
14810 ("python-six" ,python-six)))
14811 (home-page "https://github.com/pypa/packaging")
14812 (synopsis "Core utilities for Python packages")
14813 (description "Packaging is a Python module for dealing with Python packages.
14814 It offers an interface for working with package versions, names, and dependency
14815 information.")
14816 ;; From 'LICENSE': This software is made available under the terms of
14817 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14818 ;; Contributions to this software is made under the terms of *both* these
14819 ;; licenses.
14820 (license (list license:asl2.0 license:bsd-2))))
14821
14822 (define-public python2-packaging
14823 (package-with-python2 python-packaging))
14824
14825 (define-public python-sql
14826 (package
14827 (name "python-sql")
14828 (version "0.9")
14829 (source
14830 (origin
14831 (method url-fetch)
14832 (uri (pypi-uri "python-sql" version))
14833 (sha256
14834 (base32
14835 "0p6kaqj02vz0habmdx37zjk6hjxdfm8aw737zs059vvpr70ird87"))))
14836 (build-system python-build-system)
14837 (home-page "https://python-sql.tryton.org/")
14838 (synopsis "Library to write SQL queries in a pythonic way")
14839 (description "@code{python-sql} is a library to write SQL queries, that
14840 transforms idiomatic python function calls to well-formed SQL queries.")
14841 (license license:bsd-3)))
14842
14843 (define-public python2-sql
14844 (package-with-python2 python-sql))
14845
14846 (define-public python-genshi
14847 (package
14848 (name "python-genshi")
14849 (version "0.7")
14850 (source
14851 (origin
14852 (method url-fetch)
14853 (uri (string-append
14854 "https://ftp.edgewall.org/pub/genshi/Genshi-"
14855 version ".tar.gz"))
14856 (patches
14857 (search-patches
14858 ;; The first 4 patches are in the master branch upstream.
14859 ;; See this as a reference https://genshi.edgewall.org/ticket/582
14860 ;; The last 2 are NOT in any branch.
14861 ;; They were sent as attachments to a ticket opened at
14862 ;; https://genshi.edgewall.org/ticket/602#no1
14863 "python-genshi-stripping-of-unsafe-script-tags.patch"
14864 "python-genshi-disable-speedups-on-python-3.3.patch"
14865 "python-genshi-isstring-helper.patch"
14866 "python-genshi-add-support-for-python-3.4-AST.patch"
14867 "python-genshi-fix-tests-on-python-3.5.patch"
14868 "python-genshi-buildable-on-python-2.7.patch"))
14869 (sha256
14870 (base32
14871 "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
14872 (build-system python-build-system)
14873 (home-page "https://genshi.edgewall.org/")
14874 (synopsis "Toolkit for generation of output for the web")
14875 (description "Genshi is a Python library that provides an integrated set
14876 of components for parsing, generating, and processing HTML, XML or other
14877 textual content for output generation on the web.")
14878 (license license:bsd-3)))
14879
14880 ;; The linter here claims that patch file names should start with the package
14881 ;; name. But, in this case the patches are inherited from python-genshi with
14882 ;; the "python-genshi-" prefix instead of "python2-genshi-".
14883 (define-public python2-genshi
14884 (package-with-python2 python-genshi))
14885
14886 (define-public python-relatorio
14887 (package
14888 (name "python-relatorio")
14889 (version "0.6.4")
14890 (source
14891 (origin
14892 (method url-fetch)
14893 (uri (pypi-uri "relatorio" version))
14894 (sha256
14895 (base32
14896 "0lincq79mzgazwd9gh41dybjh9c3n87r83pl8nk3j79aihyfk84z"))))
14897 (build-system python-build-system)
14898 (propagated-inputs
14899 `(("python-lxml" ,python-lxml)
14900 ("python-genshi" ,python-genshi)))
14901 (home-page "https://relatorio.tryton.org/")
14902 (synopsis "Templating library able to output ODT and PDF files")
14903 (description "Relatorio is a templating library which provides a way to
14904 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14905 for more filetypes can be easily added by creating plugins for them.")
14906 (license license:gpl3+)))
14907
14908 (define-public python2-relatorio
14909 (package-with-python2 python-relatorio))
14910
14911 (define-public python-radon
14912 (package
14913 (name "python-radon")
14914 (version "1.5.0")
14915 (source
14916 (origin
14917 (method url-fetch)
14918 (uri (pypi-uri "radon" version))
14919 (sha256
14920 (base32
14921 "1h6jv36am0i827182a04ki6291lyx4kp957xfr5njgprj4nd0qsl"))))
14922 (build-system python-build-system)
14923 (propagated-inputs
14924 `(("python-colorama" ,python-colorama)
14925 ("python-flake8-polyfill" ,python-flake8-polyfill)
14926 ("python-mando" ,python-mando-0.3.1)))
14927 (native-inputs
14928 `(("python-flake8" ,python-flake8)
14929 ("python-tox" ,python-tox)
14930 ("python-pytest" ,python-pytest)
14931 ("python-paramunittest" ,python-paramunittest)))
14932 (home-page "https://radon.readthedocs.org/")
14933 (synopsis "Code Metrics in Python")
14934 (description "Radon is a Python tool which computes various code metrics.
14935 Supported metrics are:
14936 @itemize @bullet
14937 @item raw metrics: SLOC, comment lines, blank lines, &c.
14938 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14939 @item Halstead metrics (all of them)
14940 @item the Maintainability Index (a Visual Studio metric)
14941 @end itemize")
14942 (license license:expat)))
14943
14944 (define-public python2-radon
14945 (package-with-python2 python-radon))
14946
14947 (define-public python-sure
14948 (package
14949 (name "python-sure")
14950 (version "1.4.6")
14951 (source
14952 (origin
14953 (method url-fetch)
14954 (uri (pypi-uri "sure" version))
14955 (sha256
14956 (base32
14957 "1iyqsy2d6radi88g1qf0lziy5b39h5cpb3g5jiqyb4xi46ig3x1z"))))
14958 (build-system python-build-system)
14959 (propagated-inputs
14960 `(("python-mock" ,python-mock)
14961 ("python-six" ,python-six)))
14962 (native-inputs
14963 `(("python-nose" ,python-nose)))
14964 (home-page "https://github.com/gabrielfalcao/sure")
14965 (synopsis "Automated testing library in python for python")
14966 (description
14967 "Sure is a python library that leverages a DSL for writing assertions.
14968 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14969 (license license:gpl3+)))
14970
14971 (define-public python2-sure
14972 (package-with-python2 python-sure))
14973
14974 (define-public python2-couleur
14975 ;; This package does not seem to support python3 at all, hence,
14976 ;; only the python2 variant definition is provided.
14977 (package
14978 (name "python2-couleur")
14979 (version "0.6.2")
14980 (source
14981 (origin
14982 (method url-fetch)
14983 (uri (pypi-uri "couleur" version))
14984 (sha256
14985 (base32
14986 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14987 (build-system python-build-system)
14988 (arguments
14989 `(#:python ,python-2))
14990 (home-page "https://github.com/gabrielfalcao/couleur")
14991 (synopsis
14992 "ANSI terminal tool for python, colored shell and other handy fancy features")
14993 (description
14994 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14995 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14996 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14997 ;; https://github.com/gabrielfalcao/couleur/issues/11
14998 (license license:lgpl3+)))
14999
15000 (define-public python-misaka
15001 (package
15002 (name "python-misaka")
15003 (version "2.1.0")
15004 (source
15005 (origin
15006 (method url-fetch)
15007 (uri (pypi-uri "misaka" version))
15008 (sha256
15009 (base32
15010 "1yqrq3a5rracirmvk52n28nn6ckdaz897gnigv89a9gmyn87sqw7"))))
15011 (build-system python-build-system)
15012 (arguments
15013 `(;; Line 37 of setup.py calls self.run_command('develop')
15014 ;; in the 'check' phase. This command seems to be trying
15015 ;; to write to
15016 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
15017 ;; for which it does not have the permission to write.
15018 #:tests? #f))
15019 (propagated-inputs
15020 `(("python-cffi" ,python-cffi)))
15021 (home-page "https://github.com/FSX/misaka")
15022 (synopsis "Python binding for Hoedown")
15023 (description
15024 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
15025 library written in C. It features a fast HTML renderer and functionality to make custom
15026 renderers (e.g. man pages or LaTeX).")
15027 (license license:expat)))
15028
15029 (define-public python2-misaka
15030 (package-with-python2 python-misaka))
15031
15032 (define-public python2-steadymark
15033 ;; This is forced into being a python2 only variant
15034 ;; due to its dependence on couleur that has no support
15035 ;; for python3
15036 (package
15037 (name "python2-steadymark")
15038 (version "0.7.3")
15039 (source
15040 (origin
15041 (method url-fetch)
15042 (uri (pypi-uri "steadymark" version))
15043 (sha256
15044 (base32
15045 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
15046 (build-system python-build-system)
15047 (native-inputs
15048 `(("python-couleur" ,python2-couleur)
15049 ("python-sure" ,python2-sure)
15050 ("python-misaka" ,python2-misaka)))
15051 (arguments
15052 `(#:python ,python-2
15053 #:phases
15054 (modify-phases %standard-phases
15055 (add-before 'build 'patch-setup-py
15056 (lambda _
15057 ;; Update requirements from dependency==version
15058 ;; to dependency>=version
15059 (substitute* "setup.py"
15060 (("==") ">="))
15061 #t)))))
15062 (home-page "https://github.com/gabrielfalcao/steadymark")
15063 (synopsis "Markdown-based test runner for python")
15064 (description
15065 "@code{Steadymark} allows documentation to be written in github-flavoured
15066 markdown. The documentation may contain snippets of code surrounded by python
15067 code blocks and @code{Steadymark} will find these snippets and run them, making
15068 sure that there are no old malfunctional examples in the documentation examples.")
15069 (license license:expat)))
15070
15071 (define-public python-nose-randomly
15072 (package
15073 (name "python-nose-randomly")
15074 (version "1.2.5")
15075 (source
15076 (origin
15077 (method url-fetch)
15078 (uri (pypi-uri "nose-randomly" version))
15079 (sha256
15080 (base32
15081 "1cw9dlr1zh3w4i438kin7z0rm8092ki52hayisyc43h9pcplq7rn"))))
15082 (build-system python-build-system)
15083 (native-inputs
15084 `(("python-nose" ,python-nose)
15085 ("python-numpy" ,python-numpy)))
15086 (home-page "https://github.com/adamchainz/nose-randomly")
15087 (synopsis
15088 "Nose plugin to randomly order tests and control random.seed")
15089 (description
15090 "This is a @code{Nose} plugin to randomly order tests which can be quite
15091 powerful in discovering hidden flaws in the tests themselves, while helping to
15092 reduce inter-test dependencies. It also helps in controlling @code{random.seed},
15093 by resetting it to a repeatable number for each test, enabling the tests to
15094 create data based on random numbers and yet remain repeatable.")
15095 (license license:bsd-3)))
15096
15097 (define-public python2-nose-randomly
15098 (package-with-python2 python-nose-randomly))
15099
15100 (define-public python-jsonpointer
15101 (package
15102 (name "python-jsonpointer")
15103 (version "1.10")
15104 (source
15105 (origin
15106 (method url-fetch)
15107 (uri (pypi-uri "jsonpointer" version))
15108 (sha256
15109 (base32
15110 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15111 (build-system python-build-system)
15112 (home-page "https://github.com/stefankoegl/python-json-pointer")
15113 (synopsis "Identify specific nodes in a JSON document")
15114 (description "@code{jsonpointer} allows you to access specific nodes
15115 by path in a JSON document (see RFC 6901).")
15116 (license license:bsd-3)))
15117
15118 (define-public python2-jsonpointer
15119 (package-with-python2 python-jsonpointer))
15120
15121 (define-public python-rfc3987
15122 (package
15123 (name "python-rfc3987")
15124 (version "1.3.7")
15125 (source
15126 (origin
15127 (method url-fetch)
15128 (uri (pypi-uri "rfc3987" version))
15129 (sha256
15130 (base32
15131 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15132 (build-system python-build-system)
15133 (home-page "http://pypi.python.org/pypi/rfc3987")
15134 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15135 (description "@code{rfc3987} provides routines for parsing and
15136 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15137 (license license:gpl3+)))
15138
15139 (define-public python2-rfc3987
15140 (package-with-python2 python-rfc3987))
15141
15142 (define-public python-validate-email
15143 (package
15144 (name "python-validate-email")
15145 (version "1.3")
15146 (source
15147 (origin
15148 (method url-fetch)
15149 (uri (pypi-uri "validate_email" version))
15150 (sha256
15151 (base32
15152 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15153 (build-system python-build-system)
15154 (home-page "http://github.com/syrusakbary/validate_email")
15155 (synopsis "Verifies if an email address is valid and really exists")
15156 (description "@code{validate_email} can be used to verify if an email
15157 address is valid and really exists.")
15158 (license license:lgpl3+)))
15159
15160 (define-public python2-validate-email
15161 (package-with-python2 python-validate-email))
15162
15163 (define-public python-flex
15164 (package
15165 (name "python-flex")
15166 (version "6.10.0")
15167 (source
15168 (origin
15169 (method url-fetch)
15170 (uri (pypi-uri "flex" version))
15171 (sha256
15172 (base32
15173 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15174 (build-system python-build-system)
15175 (propagated-inputs
15176 `(("python-click" ,python-click)
15177 ("python-iso8601" ,python-iso8601)
15178 ("python-jsonpointer" ,python-jsonpointer)
15179 ("python-pyyaml" ,python-pyyaml)
15180 ("python-requests" ,python-requests)
15181 ("python-rfc3987" ,python-rfc3987)
15182 ("python-six" ,python-six)
15183 ("python-validate-email" ,python-validate-email)))
15184 (home-page "https://github.com/pipermerriam/flex")
15185 (synopsis "Validates Swagger schemata")
15186 (description "@code{flex} can be used to validate Swagger schemata.")
15187 (license license:bsd-3)))
15188
15189 (define-public python2-flex
15190 (package-with-python2 python-flex))
15191
15192 (define-public python-marshmallow
15193 (package
15194 (name "python-marshmallow")
15195 (version "3.0.0b2")
15196 (source
15197 (origin
15198 (method url-fetch)
15199 (uri (pypi-uri "marshmallow" version))
15200 (sha256
15201 (base32
15202 "11bnpvfdbczr74177p295zbkdrax2cahvbj5bqhhlprgz2xxi5d9"))))
15203 (build-system python-build-system)
15204 (propagated-inputs
15205 `(("python-dateutil" ,python-dateutil)
15206 ("python-simplejson" ,python-simplejson)))
15207 (native-inputs
15208 `(("python-pytest-3.0" ,python-pytest-3.0)
15209 ("python-pytz" ,python-pytz)))
15210 (home-page "https://github.com/marshmallow-code/marshmallow")
15211 (synopsis "Convert complex datatypes to and from native
15212 Python datatypes.")
15213 (description "@code{marshmallow} provides a library for converting
15214 complex datatypes to and from native Python datatypes.")
15215 (license license:expat)))
15216
15217 (define-public python2-marshmallow
15218 (package-with-python2 python-marshmallow))
15219
15220 (define-public python-bottle
15221 (package
15222 (name "python-bottle")
15223 (version "0.12.13")
15224 (source
15225 (origin
15226 (method url-fetch)
15227 (uri (pypi-uri "bottle" version))
15228 (sha256
15229 (base32
15230 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
15231 (build-system python-build-system)
15232 (home-page "http://bottlepy.org/")
15233 (synopsis "WSGI framework for small web-applications.")
15234 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
15235 (license license:expat)))
15236
15237 (define-public python2-bottle
15238 (package-with-python2 python-bottle))
15239
15240 (define-public python-apispec
15241 (package
15242 (name "python-apispec")
15243 (version "0.22.0")
15244 (source
15245 (origin
15246 (method url-fetch)
15247 (uri (pypi-uri "apispec" version))
15248 (sha256
15249 (base32
15250 "0y3jxmgp2d24am3hxl40f5rw9abb0r8037sagax3dv64h4n1azwq"))))
15251 (build-system python-build-system)
15252 (propagated-inputs
15253 `(("python-pyyaml" ,python-pyyaml)))
15254 (native-inputs
15255 `(("python-pytest-3.0" ,python-pytest-3.0)
15256 ("python-flask" ,python-flask)
15257 ("python-marshmallow" ,python-marshmallow)
15258 ("python-tornado" ,python-tornado)
15259 ("python-bottle" ,python-bottle)
15260 ("python-mock" ,python-mock)))
15261 (home-page "https://github.com/marshmallow-code/apispec")
15262 (synopsis "Swagger 2.0 API specification generator")
15263 (description "@code{python-apispec} is a pluggable API specification
15264 generator. Currently supports the OpenAPI specification (f.k.a.
15265 Swagger 2.0).")
15266 (license license:expat)))
15267
15268 (define-public python2-apispec
15269 (package-with-python2 python-apispec))
15270
15271 (define-public python-flasgger
15272 (package
15273 (name "python-flasgger")
15274 (version "0.6.3")
15275 (source
15276 (origin
15277 (method url-fetch)
15278 (uri (string-append "https://github.com/rochacbruno/flasgger/archive/"
15279 version ".tar.gz"))
15280 (file-name (string-append name "-" version ".tar.gz"))
15281 (sha256
15282 (base32
15283 "1gqzlm0rb55fdpsy5ipkganlx9cnpi454fqyycr03jm22zql14ay"))))
15284 (build-system python-build-system)
15285 (arguments
15286 `(#:phases
15287 (modify-phases %standard-phases
15288 (replace 'check
15289 (lambda* (#:key inputs outputs #:allow-other-keys)
15290 (substitute* "Makefile"
15291 (("flake8 flasgger --ignore=F403")
15292 "flake8 flasgger --ignore=E731,F403"))
15293 (setenv "PYTHONPATH" (string-append (getcwd)
15294 ":"
15295 (getenv "PYTHONPATH")))
15296 (zero? (system* "py.test")))))))
15297 (propagated-inputs
15298 `(("python-flask" ,python-flask)
15299 ("python-pyyaml" ,python-pyyaml)
15300 ("python-jsonschema" ,python-jsonschema)
15301 ("python-mistune" ,python-mistune)
15302 ("python-six" ,python-six)))
15303 (native-inputs
15304 `(("python-decorator" ,python-decorator)
15305 ("python-flake8" ,python-flake8)
15306 ("python-flask-restful" ,python-flask-restful)
15307 ("python-flex" ,python-flex)
15308 ("python-pytest-3.0" ,python-pytest-3.0)
15309 ("python-pytest-cov" ,python-pytest-cov)
15310 ("python-marshmallow" ,python-marshmallow)
15311 ("python-apispec" ,python-apispec)))
15312 (home-page "https://github.com/rochacbruno/flasgger/")
15313 (synopsis "Extract Swagger specs from your Flask project")
15314 (description "@code{python-flasgger} allows extracting Swagger specs
15315 from your Flask project. It is a fork of Flask-Swagger.")
15316 (license license:expat)))
15317
15318 (define-public python2-flasgger
15319 (package-with-python2 python-flasgger))
15320
15321 (define-public python-swagger-spec-validator
15322 (package
15323 (name "python-swagger-spec-validator")
15324 (version "2.1.0")
15325 (source
15326 (origin
15327 (method url-fetch)
15328 (uri (pypi-uri "swagger-spec-validator" version))
15329 (sha256
15330 (base32
15331 "13hkpn2lycwr0468yqhjb3kwszqf7hjwlq61w7vdxq1caz31k4nw"))))
15332 (build-system python-build-system)
15333 (propagated-inputs
15334 `(("python-jsonschema" ,python-jsonschema)
15335 ("python-six" ,python-six)))
15336 (home-page
15337 "http://github.com/Yelp/swagger_spec_validator")
15338 (synopsis "Validation of Swagger specifications")
15339 (description "@code{swagger_spec_validator} provides a library for
15340 validating Swagger API specifications.")
15341 (license license:asl2.0)))
15342
15343 (define-public python2-swagger-spec-validator
15344 (package-with-python2 python-swagger-spec-validator))
15345
15346 (define-public python-apache-libcloud
15347 (package
15348 (name "python-apache-libcloud")
15349 (version "2.0.0")
15350 (source
15351 (origin
15352 (method url-fetch)
15353 (uri (pypi-uri "apache-libcloud" version))
15354 (sha256
15355 (base32
15356 "1a71z02ckcxld72k4qgmdnkjan52c4wczncs3p2mp5yafh7dsan7"))))
15357 (build-system python-build-system)
15358 (arguments
15359 `(#:phases
15360 (modify-phases %standard-phases
15361 (add-after 'unpack 'patch-ssh
15362 (lambda* (#:key inputs #:allow-other-keys)
15363 (substitute* "libcloud/compute/ssh.py"
15364 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15365 "/bin/ssh" "'")))
15366 #t))
15367 (add-after 'unpack 'patch-tests
15368 (lambda _
15369 (substitute* "./libcloud/test/test_file_fixtures.py"
15370 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15371 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15372 return (httplib.OK,
15373 \"1234abcd\",
15374 {\"test\": \"value\"},
15375 httplib.responses[httplib.OK])
15376 def _ascii"))
15377 (substitute* "libcloud/test/compute/test_ssh_client.py"
15378 (("class ShellOutSSHClientTests")
15379 "@unittest.skip(\"Guix container doesn't have ssh service\")
15380 class ShellOutSSHClientTests")
15381 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15382 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15383 (("'.xF0', '.x90', '.x8D', '.x88'")
15384 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15385 #t)))))
15386 (inputs
15387 `(("openssh" ,openssh)))
15388 (propagated-inputs
15389 `(("python-paramiko" ,python-paramiko)
15390 ("python-requests" ,python-requests)))
15391 (native-inputs
15392 `(("python-lockfile" ,python-lockfile)
15393 ("python-mock" ,python-mock)
15394 ("python-requests-mock" ,python-requests-mock)))
15395 (home-page "https://libcloud.apache.org/")
15396 (synopsis "Unified Cloud API")
15397 (description "@code{libcloud} is a Python library for interacting with
15398 many of the popular cloud service providers using a unified API.")
15399 (license license:asl2.0)))
15400
15401 (define-public python2-apache-libcloud
15402 (package-with-python2 python-apache-libcloud))
15403
15404 (define-public python-smmap2
15405 (package
15406 (name "python-smmap2")
15407 (version "2.0.3")
15408 (source
15409 (origin
15410 (method url-fetch)
15411 (uri (pypi-uri "smmap2" version))
15412 (sha256
15413 (base32
15414 "1hvn28p3zvxa98sbi9lrqvv2ps4q284j4jq9a619zw0m7yv0sly7"))))
15415 (build-system python-build-system)
15416 (native-inputs
15417 `(("python-nosexcover" ,python-nosexcover)))
15418 (home-page "https://github.com/Byron/smmap")
15419 (synopsis "Python sliding window memory map manager")
15420 (description "@code{smmap2} is a pure Python implementation of a sliding
15421 window memory map manager.")
15422 (license license:bsd-3)))
15423
15424 (define-public python2-smmap2
15425 (package-with-python2 python-smmap2))