Merge branch 'staging'
[jackhill/guix/guix.git] / gnu / packages / python.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016 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 statistics)
102 #:use-module (gnu packages tex)
103 #:use-module (gnu packages texinfo)
104 #:use-module (gnu packages tls)
105 #:use-module (gnu packages version-control)
106 #:use-module (gnu packages video)
107 #:use-module (gnu packages web)
108 #:use-module (gnu packages base)
109 #:use-module (gnu packages xml)
110 #:use-module (gnu packages xorg)
111 #:use-module (gnu packages xdisorg)
112 #:use-module (gnu packages zip)
113 #:use-module (gnu packages tcl)
114 #:use-module (gnu packages bdw-gc)
115 #:use-module (guix packages)
116 #:use-module (guix download)
117 #:use-module (guix git-download)
118 #:use-module (guix utils)
119 #:use-module (guix build-system gnu)
120 #:use-module (guix build-system cmake)
121 #:use-module (guix build-system python)
122 #:use-module (guix build-system trivial)
123 #:use-module (srfi srfi-1))
124
125 (define-public python-2.7
126 (package
127 (name "python")
128 (version "2.7.13")
129 (source
130 (origin
131 (method url-fetch)
132 (uri (string-append "https://www.python.org/ftp/python/"
133 version "/Python-" version ".tar.xz"))
134 (sha256
135 (base32
136 "0cgpk3zk0fgpji59pb4zy9nzljr70qzgv1vpz5hq5xw2d2c47m9m"))
137 (patches (search-patches "python-2.7-search-paths.patch"
138 "python-2-deterministic-build-info.patch"
139 "python-2.7-site-prefixes.patch"
140 "python-2.7-source-date-epoch.patch"
141 "python-2.7-getentropy-on-old-kernels.patch"))
142 (modules '((guix build utils)))
143 ;; suboptimal to delete failing tests here, but if we delete them in the
144 ;; arguments then we need to make sure to strip out that phase when it
145 ;; gets inherited by python and python-minimal.
146 (snippet
147 '(begin
148 (for-each delete-file
149 '("Lib/test/test_compileall.py"
150 "Lib/test/test_ctypes.py" ; fails on mips64el
151 "Lib/test/test_distutils.py"
152 "Lib/test/test_import.py"
153 "Lib/test/test_shutil.py"
154 "Lib/test/test_socket.py"
155 "Lib/test/test_subprocess.py"))
156 #t))))
157 (outputs '("out"
158 "tk")) ;tkinter; adds 50 MiB to the closure
159 (build-system gnu-build-system)
160 (arguments
161 `(;; 356 tests OK.
162 ;; 6 tests failed:
163 ;; test_compileall test_distutils test_import test_shutil test_socket
164 ;; test_subprocess
165 ;; 39 tests skipped:
166 ;; test_aepack test_al test_applesingle test_bsddb test_bsddb185
167 ;; test_bsddb3 test_cd test_cl test_codecmaps_cn test_codecmaps_hk
168 ;; test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_curses
169 ;; test_dl test_gdb test_gl test_imageop test_imgfile test_ioctl
170 ;; test_kqueue test_linuxaudiodev test_macos test_macostools
171 ;; test_msilib test_ossaudiodev test_scriptpackages test_smtpnet
172 ;; test_socketserver test_startfile test_sunaudiodev test_timeout
173 ;; test_tk test_ttk_guionly test_urllib2net test_urllibnet
174 ;; test_winreg test_winsound test_zipfile64
175 ;; 4 skips unexpected on linux2:
176 ;; test_bsddb test_bsddb3 test_gdb test_ioctl
177 #:test-target "test"
178 #:configure-flags
179 (list "--enable-shared" ;allow embedding
180 "--with-system-ffi" ;build ctypes
181 "--with-ensurepip=install" ;install pip and setuptools
182 "--enable-unicode=ucs4"
183 (string-append "LDFLAGS=-Wl,-rpath="
184 (assoc-ref %outputs "out") "/lib"))
185
186 #:modules ((ice-9 ftw) (ice-9 match)
187 (guix build utils) (guix build gnu-build-system))
188 #:phases
189 (modify-phases %standard-phases
190 (add-before
191 'configure 'patch-lib-shells
192 (lambda _
193 ;; Filter for existing files, since some may not exist in all
194 ;; versions of python that are built with this recipe.
195 (substitute* (filter file-exists?
196 '("Lib/subprocess.py"
197 "Lib/popen2.py"
198 "Lib/distutils/tests/test_spawn.py"
199 "Lib/test/test_subprocess.py"))
200 (("/bin/sh") (which "sh")))
201
202 ;; Use zero as the timestamp in .pyc files so that builds are
203 ;; deterministic. TODO: Remove it when this variable is set in
204 ;; gnu-build-system.scm.
205 (setenv "SOURCE_DATE_EPOCH" "1")
206 #t))
207 (add-before 'configure 'do-not-record-configure-flags
208 (lambda* (#:key configure-flags #:allow-other-keys)
209 ;; Remove configure flags from the installed '_sysconfigdata.py'
210 ;; and 'Makefile' so we don't end up keeping references to the
211 ;; build tools.
212 ;;
213 ;; Preserve at least '--with-system-ffi' since otherwise the
214 ;; thing tries to build libffi, fails, and we end up with a
215 ;; Python that lacks ctypes.
216 (substitute* "configure"
217 (("^CONFIG_ARGS=.*$")
218 (format #f "CONFIG_ARGS='~a'\n"
219 (if (member "--with-system-ffi" configure-flags)
220 "--with-system-ffi"
221 ""))))
222 #t))
223 (add-before
224 'check 'pre-check
225 (lambda _
226 ;; 'Lib/test/test_site.py' needs a valid $HOME
227 (setenv "HOME" (getcwd))
228 #t))
229 (add-after
230 'unpack 'set-source-file-times-to-1980
231 ;; XXX One of the tests uses a ZIP library to pack up some of the
232 ;; source tree, and fails with "ZIP does not support timestamps
233 ;; before 1980". Work around this by setting the file times in the
234 ;; source tree to sometime in early 1980.
235 (lambda _
236 (let ((circa-1980 (* 10 366 24 60 60)))
237 (ftw "." (lambda (file stat flag)
238 (utime file circa-1980 circa-1980)
239 #t))
240 #t)))
241 (add-after 'install 'remove-tests
242 ;; Remove 25 MiB of unneeded unit tests. Keep test_support.*
243 ;; because these files are used by some libraries out there.
244 (lambda* (#:key outputs #:allow-other-keys)
245 (let ((out (assoc-ref outputs "out")))
246 (match (scandir (string-append out "/lib")
247 (lambda (name)
248 (string-prefix? "python" name)))
249 ((pythonX.Y)
250 (let ((testdir (string-append out "/lib/" pythonX.Y
251 "/test")))
252 (with-directory-excursion testdir
253 (for-each delete-file-recursively
254 (scandir testdir
255 (match-lambda
256 ((or "." "..") #f)
257 (file
258 (not
259 (string-prefix? "test_support."
260 file))))))
261 (call-with-output-file "__init__.py" (const #t))
262 #t)))))))
263 (add-before 'strip 'make-libraries-writable
264 (lambda* (#:key outputs #:allow-other-keys)
265 ;; Make .so files writable so they can be stripped.
266 (let ((out (assoc-ref outputs "out")))
267 (for-each (lambda (file)
268 (chmod file #o755))
269 (find-files (string-append out "/lib")
270 "\\.so"))
271 #t)))
272 (add-after 'install 'move-tk-inter
273 (lambda* (#:key outputs #:allow-other-keys)
274 ;; When Tkinter support is built move it to a separate output so
275 ;; that the main output doesn't contain a reference to Tcl/Tk.
276 (let ((out (assoc-ref outputs "out"))
277 (tk (assoc-ref outputs "tk")))
278 (when tk
279 (match (find-files out "tkinter.*\\.so")
280 ((tkinter.so)
281 ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
282 ;; want it under TK/lib/pythonX.Y/site-packages.
283 (let* ((len (string-length out))
284 (target (string-append
285 tk "/"
286 (string-drop
287 (dirname (dirname tkinter.so))
288 len)
289 "/site-packages")))
290 (install-file tkinter.so target)
291 (delete-file tkinter.so)))))
292 #t))))))
293 (inputs
294 `(("bzip2" ,bzip2)
295 ("gdbm" ,gdbm)
296 ("libffi" ,libffi) ; for ctypes
297 ("sqlite" ,sqlite) ; for sqlite extension
298 ("openssl" ,openssl)
299 ("readline" ,readline)
300 ("zlib" ,zlib)
301 ("tcl" ,tcl)
302 ("tk" ,tk))) ; for tkinter
303 (native-inputs
304 `(("pkg-config" ,pkg-config)))
305 (native-search-paths
306 (list (search-path-specification
307 (variable "PYTHONPATH")
308 (files '("lib/python2.7/site-packages")))))
309 (home-page "https://www.python.org")
310 (synopsis "High-level, dynamically-typed programming language")
311 (description
312 "Python is a remarkably powerful dynamic programming language that
313 is used in a wide variety of application domains. Some of its key
314 distinguishing features include: clear, readable syntax; strong
315 introspection capabilities; intuitive object orientation; natural
316 expression of procedural code; full modularity, supporting hierarchical
317 packages; exception-based error handling; and very high level dynamic
318 data types.")
319 (license license:psfl)))
320
321 ;; Current 2.x version.
322 (define-public python-2 python-2.7)
323
324 (define-public python-3.5
325 (package (inherit python-2)
326 (version "3.5.3")
327 (source (origin
328 (method url-fetch)
329 (uri (string-append "https://www.python.org/ftp/python/"
330 version "/Python-" version ".tar.xz"))
331 (patches (search-patches
332 "python-fix-tests.patch"
333 "python-3.5-fix-tests.patch"
334 "python-3.5-getentropy-on-old-kernels.patch"
335 "python-3-deterministic-build-info.patch"
336 "python-3-search-paths.patch"))
337 (patch-flags '("-p0"))
338 (sha256
339 (base32
340 "1c6v1n9nz4mlx9mw1125fxpmbrgniqdbbx9hnqx44maqazb2mzpf"))
341 (snippet
342 '(delete-file
343 "Lib/ctypes/test/test_win32.py")))) ; fails on aarch64
344 (arguments (substitute-keyword-arguments (package-arguments python-2)
345 ((#:tests? _) #t)))
346 (native-search-paths
347 (list (search-path-specification
348 (variable "PYTHONPATH")
349 (files (list (string-append "lib/python"
350 (version-major+minor version)
351 "/site-packages"))))))))
352
353 ;; Current 3.x version.
354 (define-public python-3 python-3.5)
355
356 ;; Current major version.
357 (define-public python python-3)
358
359 ;; Minimal variants of Python, mostly used to break the cycle between Tk and
360 ;; Python (Tk -> libxcb -> Python.)
361
362 (define-public python2-minimal
363 (package (inherit python-2)
364 (name "python-minimal")
365 (outputs '("out"))
366
367 ;; Keep zlib, which is used by 'pip' (via the 'zipimport' module), which
368 ;; is invoked upon 'make install'. 'pip' also expects 'ctypes' and thus
369 ;; libffi.
370 (inputs `(("libffi" ,libffi)
371 ("zlib" ,zlib)))))
372
373 (define-public python-minimal
374 (package (inherit python)
375 (name "python-minimal")
376 (outputs '("out"))
377
378 ;; Build fails due to missing ctypes without libffi.
379 ;; OpenSSL is a mandatory dependency of Python 3.x, for urllib;
380 ;; zlib is required by 'zipimport', used by pip.
381 (inputs `(("libffi" ,libffi)
382 ("openssl" ,openssl)
383 ("zlib" ,zlib)))))
384
385 (define* (wrap-python3 python
386 #:optional
387 (name (string-append (package-name python) "-wrapper")))
388 (package (inherit python)
389 (name name)
390 (source #f)
391 (build-system trivial-build-system)
392 (outputs '("out"))
393 (inputs `(("bash" ,bash)))
394 (propagated-inputs `(("python" ,python)))
395 (arguments
396 `(#:modules ((guix build utils))
397 #:builder
398 (begin
399 (use-modules (guix build utils))
400 (let ((bin (string-append (assoc-ref %outputs "out") "/bin"))
401 (python (string-append (assoc-ref %build-inputs "python") "/bin/")))
402 (mkdir-p bin)
403 (for-each
404 (lambda (old new)
405 (symlink (string-append python old)
406 (string-append bin "/" new)))
407 `("python3" ,"pydoc3" ,"idle3" ,"pip3")
408 `("python" ,"pydoc" ,"idle" ,"pip"))
409 ;; python-config outputs search paths based upon its location,
410 ;; use a bash wrapper to avoid changing its outputs.
411 (let ((bash (string-append (assoc-ref %build-inputs "bash")
412 "/bin/bash"))
413 (old (string-append python "python3-config"))
414 (new (string-append bin "/python-config")))
415 (with-output-to-file new
416 (lambda ()
417 (format #t "#!~a~%" bash)
418 (format #t "exec \"~a\" \"$@\"~%" old)
419 (chmod new #o755)
420 #t)))))))
421 (synopsis "Wrapper for the Python 3 commands")
422 (description
423 "This package provides wrappers for the commands of Python@tie{}3.x such
424 that they can be invoked under their usual name---e.g., @command{python}
425 instead of @command{python3}.")))
426
427 (define-public python-wrapper (wrap-python3 python))
428 (define-public python-minimal-wrapper (wrap-python3 python-minimal))
429
430 (define-public python-psutil
431 (package
432 (name "python-psutil")
433 (version "4.3.0")
434 (source
435 (origin
436 (method url-fetch)
437 (uri (pypi-uri "psutil" version))
438 (sha256
439 (base32
440 "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6"))))
441 (build-system python-build-system)
442 (arguments
443 ;; FIXME: some tests does not return and times out.
444 '(#:tests? #f))
445 (home-page "https://www.github.com/giampaolo/psutil")
446 (synopsis "Library for retrieving information on running processes")
447 (description
448 "psutil (Python system and process utilities) is a library for retrieving
449 information on running processes and system utilization (CPU, memory, disks,
450 network) in Python. It is useful mainly for system monitoring, profiling and
451 limiting process resources and management of running processes. It implements
452 many functionalities offered by command line tools such as: ps, top, lsof,
453 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
454 pidof, tty, taskset, pmap.")
455 (license license:bsd-3)))
456
457 (define-public python2-psutil
458 (package-with-python2 python-psutil))
459
460 (define-public python-passlib
461 (package
462 (name "python-passlib")
463 (version "1.7.1")
464 (source
465 (origin
466 (method url-fetch)
467 (uri (pypi-uri "passlib" version))
468 (sha256
469 (base32
470 "1q2khqpj9rlcgdmkypjdq1kswvhjf72bq0zk2cv669cc2dj8z51x"))))
471 (build-system python-build-system)
472 (native-inputs
473 `(("python-nose" ,python-nose)))
474 (propagated-inputs
475 `(("python-py-bcrypt" ,python-py-bcrypt)))
476 (arguments
477 `(#:phases
478 (alist-cons-before
479 'check 'set-PYTHON_EGG_CACHE
480 ;; some tests require access to "$HOME/.cython"
481 (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp"))
482 %standard-phases)))
483 (home-page "https://bitbucket.org/ecollins/passlib")
484 (synopsis
485 "Comprehensive password hashing framework")
486 (description
487 "Passlib is a password hashing library for Python 2 & 3, which provides
488 cross-platform implementations of over 30 password hashing algorithms, as well
489 as a framework for managing existing password hashes. It's designed to be
490 useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
491 to providing full-strength password hashing for multi-user application.")
492 (license license:bsd-3)))
493
494 (define-public python2-passlib
495 (package-with-python2 python-passlib))
496
497 (define-public python-py-bcrypt
498 (package
499 (name "python-py-bcrypt")
500 (version "0.4")
501 (source
502 (origin
503 (method url-fetch)
504 (uri (string-append
505 "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-"
506 version
507 ".tar.gz"))
508 (sha256
509 (base32
510 "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
511 (build-system python-build-system)
512 (home-page "https://code.google.com/p/py-bcrypt")
513 (synopsis
514 "Bcrypt password hashing and key derivation")
515 (description
516 "A python wrapper of OpenBSD's Blowfish password hashing code. This
517 system hashes passwords using a version of Bruce Schneier's Blowfish block
518 cipher with modifications designed to raise the cost of off-line password
519 cracking and frustrate fast hardware implementation. The computation cost of
520 the algorithm is parametised, so it can be increased as computers get faster.
521 The intent is to make a compromise of a password database less likely to
522 result in an attacker gaining knowledge of the plaintext passwords (e.g. using
523 John the Ripper).")
524 ;; "sha2.c" is under BSD-3;
525 ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
526 ;; the rest is under ISC.
527 (license (list license:isc license:bsd-3 license:bsd-4))))
528
529 (define-public python2-py-bcrypt
530 (package-with-python2 python-py-bcrypt))
531
532
533 (define-public python-paramiko
534 (package
535 (name "python-paramiko")
536 (version "1.17.4")
537 (source
538 (origin
539 (method url-fetch)
540 (uri (pypi-uri "paramiko" version))
541 (sha256
542 (base32
543 "1rs2qcmskcmq66q6g5al08wa41l9am0fad5r719m8wf91msyylqw"))))
544 (build-system python-build-system)
545 (arguments
546 '(;; FIXME: One test fails with "EOFError not raised by connect".
547 #:tests? #f))
548 ;; #:phases
549 ;; (modify-phases %standard-phases
550 ;; (replace 'check
551 ;; (lambda _
552 ;; (zero? (system* "python" "test.py")))))))
553 (propagated-inputs
554 `(("python-pycrypto" ,python-pycrypto)
555 ("python-ecdsa" ,python-ecdsa)))
556 (home-page "http://www.paramiko.org/")
557 (synopsis "SSHv2 protocol library")
558 (description "Paramiko is a python implementation of the SSHv2 protocol,
559 providing both client and server functionality. While it leverages a Python C
560 extension for low level cryptography (PyCrypto), Paramiko itself is a pure
561 Python interface around SSH networking concepts.")
562 (license license:lgpl2.1+)))
563
564 (define-public python2-paramiko
565 (package-with-python2 python-paramiko))
566
567
568 (define-public python-httplib2
569 (package
570 (name "python-httplib2")
571 (version "0.9.2")
572 (source
573 (origin
574 (method url-fetch)
575 (uri (pypi-uri "httplib2" version))
576 (sha256
577 (base32
578 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
579 (build-system python-build-system)
580 (home-page "https://github.com/jcgregorio/httplib2")
581 (synopsis "Comprehensive HTTP client library")
582 (description
583 "A comprehensive HTTP client library supporting many features left out of
584 other HTTP libraries.")
585 (license license:expat)))
586
587 (define-public python2-httplib2
588 (package-with-python2 python-httplib2))
589
590 (define-public python-ecdsa
591 (package
592 (name "python-ecdsa")
593 (version "0.13")
594 (source
595 (origin
596 (method url-fetch)
597 (uri (string-append
598 "https://pypi.python.org/packages/source/e/ecdsa/ecdsa-"
599 version
600 ".tar.gz"))
601 (sha256
602 (base32
603 "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4"))))
604 (build-system python-build-system)
605 (inputs
606 `(("openssl" ,openssl)))
607 (home-page
608 "https://github.com/warner/python-ecdsa")
609 (synopsis
610 "ECDSA cryptographic signature library (pure python)")
611 (description
612 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
613 Curve Digital Signature Algorithm), implemented purely in Python. With this
614 library, you can quickly create keypairs (signing key and verifying key), sign
615 messages, and verify the signatures. The keys and signatures are very short,
616 making them easy to handle and incorporate into other protocols.")
617 (license license:expat)))
618
619 (define-public python2-ecdsa
620 (package-with-python2 python-ecdsa))
621
622 (define-public python-ccm
623 (package
624 (name "python-ccm")
625 (version "2.1.6")
626 (source
627 (origin
628 (method url-fetch)
629 (uri (pypi-uri "ccm" version))
630 (sha256
631 (base32
632 "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
633 (build-system python-build-system)
634 (propagated-inputs
635 `(("python-pyyaml" ,python-pyyaml)
636 ;; Not listed in setup.py, but used in ccmlib/node.py for full
637 ;; functionality
638 ("python-psutil" ,python-psutil)
639 ("python-six" ,python-six)))
640 (home-page "https://github.com/pcmanus/ccm")
641 (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
642 localhost")
643 (description "Cassandra Cluster Manager is a development tool for testing
644 local Cassandra clusters. It creates, launches and removes Cassandra clusters
645 on localhost.")
646 (license license:asl2.0)))
647
648 (define-public python2-ccm
649 (package-with-python2 python-ccm))
650
651 (define-public python-pytz
652 (package
653 (name "python-pytz")
654 (version "2016.10")
655 (source
656 (origin
657 (method url-fetch)
658 (uri (pypi-uri "pytz" version ".tar.bz2"))
659 (sha256
660 (base32
661 "0az099cyp6p5xbsvfcdacj4hvxncbwm2ayn3h55mcp07zb2b45kh"))))
662 (build-system python-build-system)
663 (arguments `(#:tests? #f)) ; no test target
664 (home-page "http://pythonhosted.org/pytz")
665 (synopsis "Python timezone library")
666 (description
667 "This library allows accurate and cross platform timezone calculations
668 using Python 2.4 or higher and provides access to the Olson timezone database.")
669 (license license:expat)))
670
671 (define-public python2-pytz
672 (package-with-python2 python-pytz))
673
674
675 (define-public python-babel
676 (package
677 (name "python-babel")
678 (version "2.3.4")
679 (source
680 (origin
681 (method url-fetch)
682 (uri (pypi-uri "Babel" version))
683 (sha256
684 (base32
685 "0x98qqqw35xllpcama013a9788ly84z8dm1w2wwfpxh2710c8df5"))))
686 (build-system python-build-system)
687 (propagated-inputs
688 `(("python-pytz" ,python-pytz)))
689 (arguments `(#:tests? #f)) ; no test target
690 (home-page "http://babel.pocoo.org/")
691 (synopsis
692 "Tools for internationalizing Python applications")
693 (description
694 "Babel is composed of two major parts:
695 - tools to build and work with gettext message catalogs
696 - a Python interface to the CLDR (Common Locale Data Repository), providing
697 access to various locale display names, localized number and date formatting,
698 etc. ")
699 (license license:bsd-3)))
700
701 (define-public python2-babel
702 (package-with-python2 python-babel))
703
704 (define-public python2-backport-ssl-match-hostname
705 (package
706 (name "python2-backport-ssl-match-hostname")
707 (version "3.5.0.1")
708 (source
709 (origin
710 (method url-fetch)
711 (uri (string-append
712 "https://pypi.python.org/packages/source/b/"
713 "backports.ssl_match_hostname/backports.ssl_match_hostname-"
714 version ".tar.gz"))
715 (sha256
716 (base32
717 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
718 (build-system python-build-system)
719 (arguments
720 `(#:python ,python-2
721 #:tests? #f)) ; no test target
722 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
723 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
724 (description
725 "This backport brings the ssl.match_hostname() function to users of
726 earlier versions of Python. The function checks the hostname in the
727 certificate returned by the server to which a connection has been established,
728 and verifies that it matches the intended target hostname.")
729 (license license:psfl)))
730
731 (define-public python-hdf4
732 (package
733 (name "python-hdf4")
734 (version "0.9")
735 (source
736 (origin
737 (method url-fetch)
738 (uri (pypi-uri name version))
739 (sha256
740 (base32
741 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
742 (build-system python-build-system)
743 (native-inputs `(("nose" ,python-nose)))
744 (propagated-inputs `(("numpy" ,python-numpy)))
745 (inputs
746 `(("hdf4" ,hdf4)
747 ("libjpeg" ,libjpeg)
748 ("zlib" ,zlib)))
749 (arguments
750 `(#:phases
751 (modify-phases %standard-phases
752 (replace 'check
753 (lambda _
754 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
755 ;; on to import numpy. Somehow this works on their CI system.
756 ;; Let's just manage PYTHONPATH here instead.
757 (substitute* "runexamples.sh"
758 (("export PYTHONPATH=.*") ""))
759 (setenv "PYTHONPATH"
760 (string-append (getcwd) ":"
761 (getenv "PYTHONPATH")))
762 (and (zero? (system* "./runexamples.sh"))
763 (zero? (system* "nosetests" "-v"))))))))
764 (home-page "https://github.com/fhs/python-hdf4")
765 (synopsis "Python interface to the NCSA HDF4 library")
766 (description
767 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
768 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
769 NetCDF files can also be read and modified. Python-HDF4 is a fork of
770 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
771 (license license:expat)))
772
773 (define-public python2-hdf4
774 (package-with-python2 python-hdf4))
775
776 (define-public python-h5py
777 (package
778 (name "python-h5py")
779 (version "2.6.0")
780 (source
781 (origin
782 (method url-fetch)
783 (uri (pypi-uri "h5py" version))
784 (sha256
785 (base32
786 "0df46dg7i7xfking9lp221bfm8dbl974yvlrbi1w7r6m61ac7bxj"))))
787 (build-system python-build-system)
788 (arguments
789 `(#:tests? #f ; no test target
790 #:phases
791 (modify-phases %standard-phases
792 (add-after 'unpack 'fix-hdf5-paths
793 (lambda* (#:key inputs #:allow-other-keys)
794 (let ((prefix (assoc-ref inputs "hdf5")))
795 (substitute* "setup_build.py"
796 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
797 (string-append "['" prefix "/lib" "']"))
798 (("'/opt/local/include', '/usr/local/include'")
799 (string-append "'" prefix "/include" "'")))
800 (substitute* "setup_configure.py"
801 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
802 (string-append "['" prefix "/lib" "']")))
803 #t))))))
804 (propagated-inputs
805 `(("python-six" ,python-six)
806 ("python-numpy" ,python-numpy)))
807 (inputs
808 `(("hdf5" ,hdf5)))
809 (native-inputs
810 `(("python-cython" ,python-cython)
811 ("python-pkgconfig" ,python-pkgconfig)))
812 (home-page "http://www.h5py.org/")
813 (synopsis "Read and write HDF5 files from Python")
814 (description
815 "The h5py package provides both a high- and low-level interface to the
816 HDF5 library from Python. The low-level interface is intended to be a
817 complete wrapping of the HDF5 API, while the high-level component supports
818 access to HDF5 files, datasets and groups using established Python and NumPy
819 concepts.")
820 (license license:bsd-3)))
821
822 (define-public python2-h5py
823 (package-with-python2 python-h5py))
824
825 (define-public python-netcdf4
826 (package
827 (name "python-netcdf4")
828 (version "1.2.7")
829 (source
830 (origin
831 (method url-fetch)
832 (uri (pypi-uri "netCDF4" version))
833 (sha256
834 (base32
835 "1fllizmnpw0zkzzm4j9pgamarlzfn3kmv9zrm0w65q1y31h9ni0c"))))
836 (build-system python-build-system)
837 (native-inputs
838 `(("python-cython" ,python-cython)))
839 (propagated-inputs
840 `(("python-numpy" ,python-numpy)))
841 (inputs
842 `(("netcdf" ,netcdf)
843 ("hdf4" ,hdf4)
844 ("hdf5" ,hdf5)))
845 (arguments
846 '(#:phases
847 (modify-phases %standard-phases
848 (replace 'check
849 (lambda _
850 (setenv "NO_NET" "1") ; disable opendap tests
851 (with-directory-excursion "test"
852 (setenv "PYTHONPATH" ; find and add the library we just built
853 (string-append
854 (car (find-files "../build" "lib.*"
855 #:directories? #:t
856 #:fail-on-error? #:t))
857 ":" (getenv "PYTHONPATH")))
858 (zero? (system* "python" "run_all.py"))))))))
859 (home-page
860 "https://github.com/Unidata/netcdf4-python")
861 (synopsis "Python/numpy interface to the netCDF library")
862 (description "Netcdf4-python is a Python interface to the netCDF C
863 library. netCDF version 4 has many features not found in earlier
864 versions of the library and is implemented on top of HDF5. This module
865 can read and write files in both the new netCDF 4 and the old netCDF 3
866 format, and can create files that are readable by HDF5 clients. The
867 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
868 to users of that module.")
869 ;; The software is mainly ISC, but includes some files covered
870 ;; by the Expat license.
871 (license (list license:isc license:expat))))
872
873 (define-public python2-netcdf4
874 (package-with-python2 python-netcdf4))
875
876 (define-public python-lockfile
877 (package
878 (name "python-lockfile")
879 (version "0.12.2")
880 (source
881 (origin
882 (method url-fetch)
883 (uri (string-append "https://pypi.python.org/packages/source/l/lockfile/"
884 "lockfile-" version ".tar.gz"))
885 (sha256
886 (base32
887 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
888 (build-system python-build-system)
889 (arguments '(#:test-target "check"))
890 (native-inputs
891 `(("python-pbr" ,python-pbr)))
892 (home-page "https://launchpad.net/pylockfile")
893 (synopsis "Platform-independent file locking module")
894 (description
895 "The lockfile package exports a LockFile class which provides a simple
896 API for locking files.")
897 (license license:expat)))
898
899 (define-public python2-lockfile
900 (package-with-python2 python-lockfile))
901
902 (define-public python-mock
903 (package
904 (name "python-mock")
905 (version "1.0.1")
906 (source
907 (origin
908 (method url-fetch)
909 (uri (pypi-uri "mock" version))
910 (sha256
911 (base32
912 "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq"))))
913 (build-system python-build-system)
914 (arguments '(#:test-target "check"))
915 (home-page "https://github.com/testing-cabal/mock")
916 (synopsis "Python mocking and patching library for testing")
917 (description
918 "Mock is a library for testing in Python. It allows you to replace parts
919 of your system under test with mock objects and make assertions about how they
920 have been used.")
921 (license license:expat)))
922
923 (define-public python2-mock
924 (package-with-python2 python-mock))
925
926
927 (define-public python-setuptools
928 (package
929 (name "python-setuptools")
930 (version "31.0.0")
931 (source
932 (origin
933 (method url-fetch)
934 (uri (pypi-uri "setuptools" version))
935 (sha256
936 (base32
937 "0ypybh4hx3bv4vhg2dc74xpj1g56ggnaffm87k4abhwjwq6wq608"))
938 (modules '((guix build utils)))
939 (snippet
940 '(begin
941 ;; Remove included binaries which are used to build self-extracting
942 ;; installers for Windows.
943 ;; TODO: Find some way to build them ourself so we can include them.
944 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
945 #t))))
946 (build-system python-build-system)
947 ;; FIXME: Tests require pytest, which itself relies on setuptools.
948 ;; One could bootstrap with an internal untested setuptools.
949 (arguments
950 `(#:tests? #f))
951 (home-page "https://pypi.python.org/pypi/setuptools")
952 (synopsis
953 "Library designed to facilitate packaging Python projects")
954 (description
955 "Setuptools is a fully-featured, stable library designed to facilitate
956 packaging Python projects, where packaging includes:
957 Python package and module definitions,
958 distribution package metadata,
959 test hooks,
960 project installation,
961 platform-specific details,
962 Python 3 support.")
963 ;; TODO: setuptools now bundles the following libraries:
964 ;; packaging, pyparsing, six and appdirs. How to unbundle?
965 (license (list license:psfl ; setuptools itself
966 license:expat ; six, appdirs, pyparsing
967 license:asl2.0 ; packaging is dual ASL2/BSD-2
968 license:bsd-2))))
969
970 (define-public python2-setuptools
971 (package-with-python2 python-setuptools))
972
973 ;;; Pycrypto is abandoned upstream:
974 ;;;
975 ;;; https://github.com/dlitz/pycrypto/issues/173
976 ;;;
977 ;;; TODO Remove this package from GNU Guix.
978 (define-public python-pycrypto
979 (package
980 (name "python-pycrypto")
981 (version "2.6.1")
982 (source
983 (origin
984 (method url-fetch)
985 (uri (pypi-uri "pycrypto" version))
986 (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"))
987 (sha256
988 (base32
989 "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
990 (build-system python-build-system)
991 (inputs
992 `(("python" ,python)
993 ("gmp" ,gmp)))
994 (arguments
995 `(#:phases
996 (alist-cons-before
997 'build 'set-build-env
998 ;; pycrypto runs an autoconf configure script behind the scenes
999 (lambda _
1000 (setenv "CONFIG_SHELL" (which "bash")))
1001 %standard-phases)))
1002 (home-page "http://www.pycrypto.org/")
1003 (synopsis "Cryptographic modules for Python")
1004 (description
1005 "Pycrypto is a collection of both secure hash functions (such as SHA256
1006 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
1007 etc.). The package is structured to make adding new modules easy.")
1008 (license license:public-domain)))
1009
1010 (define-public python2-pycrypto
1011 (let ((pycrypto (package-with-python2 python-pycrypto)))
1012 (package (inherit pycrypto)
1013 (inputs
1014 `(("python" ,python-2)
1015 ,@(alist-delete
1016 "python"
1017 (package-inputs pycrypto)))))))
1018
1019 (define-public python-eventlet
1020 (package
1021 (name "python-eventlet")
1022 (version "0.20.1")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "eventlet" version))
1027 (sha256
1028 (base32
1029 "0f3q55mq4n021wb7qa53pz3ix6i2py64sap66vsaqm2scjw83m9s"))))
1030 (build-system python-build-system)
1031 (propagated-inputs
1032 `(("python-greenlet" ,python-greenlet)))
1033 (home-page "http://eventlet.net")
1034 (synopsis "Concurrent networking library for Python")
1035 (description
1036 "Eventlet is a concurrent networking library for Python that
1037 allows you to change how you run your code, not how you write it.
1038 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1039 Coroutines ensure that the developer uses a blocking style of programming
1040 that is similar to threading, but provide the benefits of non-blocking I/O.
1041 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1042 from the Python interpreter, or as a small part of a larger application.")
1043 (license license:expat)))
1044
1045 (define-public python2-eventlet
1046 (let ((base (package-with-python2
1047 (strip-python2-variant python-eventlet))))
1048 (package (inherit base)
1049 (propagated-inputs
1050 `(("python2-enum34" ,python2-enum34)
1051 ,@(package-propagated-inputs base))))))
1052
1053 (define-public python-keyring
1054 (package
1055 (name "python-keyring")
1056 (version "8.7")
1057 (source
1058 (origin
1059 (method url-fetch)
1060 (uri (pypi-uri "keyring" version))
1061 (sha256
1062 (base32
1063 "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
1064 (build-system python-build-system)
1065 (native-inputs
1066 `(("python-setuptools-scm" ,python-setuptools-scm)))
1067 (propagated-inputs
1068 `(("python-pycrypto" ,python-pycrypto)))
1069 (arguments
1070 `(#:tests? #f)) ;TODO: tests require pytest
1071 (home-page "https://github.com/jaraco/keyring")
1072 (synopsis "Store and access your passwords safely")
1073 (description
1074 "The Python keyring lib provides a easy way to access the system keyring
1075 service from python. It can be used in any application that needs safe
1076 password storage.")
1077 ;; "MIT" and PSF dual license
1078 (license license:x11)))
1079
1080 (define-public python2-keyring
1081 (package-with-python2 python-keyring))
1082
1083 (define-public python-six
1084 (package
1085 (name "python-six")
1086 (version "1.10.0")
1087 (source
1088 (origin
1089 (method url-fetch)
1090 (uri (pypi-uri "six" version))
1091 (sha256
1092 (base32
1093 "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh"))))
1094 (build-system python-build-system)
1095 (native-inputs
1096 `(("python-py" ,python-py)
1097 ("python-pytest" ,python-pytest)))
1098 (home-page "http://pypi.python.org/pypi/six/")
1099 (synopsis "Python 2 and 3 compatibility utilities")
1100 (description
1101 "Six is a Python 2 and 3 compatibility library. It provides utility
1102 functions for smoothing over the differences between the Python versions with
1103 the goal of writing Python code that is compatible on both Python versions.
1104 Six supports every Python version since 2.5. It is contained in only one
1105 Python file, so it can be easily copied into your project.")
1106 (license license:x11)))
1107
1108 (define-public python2-six
1109 (package-with-python2 python-six))
1110
1111 (define-public python-dateutil
1112 (package
1113 (name "python-dateutil")
1114 (version "2.6.0")
1115 (source
1116 (origin
1117 (method url-fetch)
1118 (uri (pypi-uri "python-dateutil" version))
1119 (sha256
1120 (base32
1121 "1lhq0hxjc3cfha101q02ld5ijlpfyjn2w1yh7wvpiy367pgzi8k2"))))
1122 (build-system python-build-system)
1123 (propagated-inputs
1124 `(("python-six" ,python-six)))
1125 (home-page "https://dateutil.readthedocs.io/en/stable/")
1126 (synopsis "Extensions to the standard datetime module")
1127 (description
1128 "The dateutil module provides powerful extensions to the standard
1129 datetime module, available in Python 2.3+.")
1130 (license license:bsd-3)))
1131
1132 (define-public python2-dateutil
1133 (package-with-python2 python-dateutil))
1134
1135 (define-public python-parsedatetime
1136 (package
1137 (name "python-parsedatetime")
1138 (version "2.3")
1139 (source
1140 (origin
1141 (method url-fetch)
1142 (uri (pypi-uri "parsedatetime" version))
1143 (sha256
1144 (base32
1145 "1vkrmd398s11h1zn3zaqqsiqhj9lwy1ikcg6irx2lrgjzjg3rjll"))))
1146 (build-system python-build-system)
1147 (native-inputs
1148 `(("python-nose" ,python-nose)
1149 ("python-pyicu" ,python-pyicu)
1150 ("python-pytest" ,python-pytest)
1151 ("python-pytest-runner" ,python-pytest-runner)))
1152 (propagated-inputs
1153 `(("python-future" ,python-future)))
1154 (home-page "https://github.com/bear/parsedatetime/")
1155 (synopsis
1156 "Parse human-readable date/time text")
1157 (description
1158 "Parse human-readable date/time text.")
1159 (license license:asl2.0)))
1160
1161 (define-public python2-parsedatetime
1162 (package-with-python2 python-parsedatetime))
1163
1164 (define-public python-pandas
1165 (package
1166 (name "python-pandas")
1167 (version "0.19.2")
1168 (source
1169 (origin
1170 (method url-fetch)
1171 (uri (pypi-uri "pandas" version))
1172 (sha256
1173 (base32 "0540cnbwy2hc4hv2sxfs8i47xi91qzvzxfn80dl785ibiicly3vg"))
1174 (patches
1175 (search-patches "python-pandas-skip-failing-tests.patch"))))
1176 (build-system python-build-system)
1177 (propagated-inputs
1178 `(("python-numpy" ,python-numpy)
1179 ("python-pytz" ,python-pytz)
1180 ("python-dateutil" ,python-dateutil)))
1181 (native-inputs
1182 `(("python-nose" ,python-nose)
1183 ("python-cython" ,python-cython)))
1184 (home-page "http://pandas.pydata.org")
1185 (synopsis "Data structures for data analysis, time series, and statistics")
1186 (description
1187 "Pandas is a Python package providing fast, flexible, and expressive data
1188 structures designed to make working with structured (tabular,
1189 multidimensional, potentially heterogeneous) and time series data both easy
1190 and intuitive. It aims to be the fundamental high-level building block for
1191 doing practical, real world data analysis in Python.")
1192 (license license:bsd-3)))
1193
1194 (define-public python2-pandas
1195 (package-with-python2 python-pandas))
1196
1197 (define-public python-tzlocal
1198 (package
1199 (name "python-tzlocal")
1200 (version "1.2.2")
1201 (source
1202 (origin
1203 (method url-fetch)
1204 (uri (pypi-uri "tzlocal" version))
1205 (sha256
1206 (base32
1207 "0paj7vlsb0np8b5sp4bv64wxv7qk2piyp7xg29pkhdjwsbls9fnb"))))
1208 (build-system python-build-system)
1209 (propagated-inputs
1210 `(("python-pytz" ,python-pytz)))
1211 (home-page "https://github.com/regebro/tzlocal")
1212 (synopsis
1213 "Local timezone information for Python")
1214 (description
1215 "Tzlocal returns a tzinfo object with the local timezone information.
1216 This module attempts to fix a glaring hole in pytz, that there is no way to
1217 get the local timezone information, unless you know the zoneinfo name, and
1218 under several distributions that's hard or impossible to figure out.")
1219 (license license:cc0)))
1220
1221 (define-public python2-pysqlite
1222 (package
1223 (name "python2-pysqlite")
1224 (version "2.8.3")
1225 (source
1226 (origin
1227 (method url-fetch)
1228 (uri (pypi-uri "pysqlite" version))
1229 (sha256
1230 (base32
1231 "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
1232 (build-system python-build-system)
1233 (inputs
1234 `(("sqlite" ,sqlite)))
1235 (arguments
1236 `(#:python ,python-2 ; incompatible with Python 3
1237 #:tests? #f)) ; no test target
1238 (home-page "https://github.com/ghaering/pysqlite")
1239 (synopsis "SQLite bindings for Python")
1240 (description
1241 "Pysqlite provides SQLite bindings for Python that comply to the
1242 Database API 2.0T.")
1243 (license license:zlib)))
1244
1245
1246 (define-public python2-mechanize
1247 (package
1248 (name "python2-mechanize")
1249 (version "0.2.5")
1250 (source
1251 (origin
1252 (method url-fetch)
1253 (uri (string-append "https://pypi.python.org/packages/source/m/mechanize/mechanize-"
1254 version ".tar.gz"))
1255 (sha256
1256 (base32
1257 "0rj7r166i1dyrq0ihm5rijfmvhs8a04im28lv05c0c3v206v4rrf"))))
1258 (build-system python-build-system)
1259 (arguments
1260 `(#:python ,python-2 ; apparently incompatible with Python 3
1261 #:tests? #f))
1262 ;; test fails with message
1263 ;; AttributeError: 'module' object has no attribute 'test_pullparser'
1264 ;; (python-3.3.2) or
1265 ;; AttributeError: 'module' object has no attribute 'test_urllib2_localnet'
1266 ;; (python-2.7.5).
1267 ;; The source code is from March 2011 and probably not up-to-date
1268 ;; with respect to python unit tests.
1269 (home-page "http://wwwsearch.sourceforge.net/mechanize/")
1270 (synopsis
1271 "Stateful programmatic web browsing in Python")
1272 (description
1273 "Mechanize implements stateful programmatic web browsing in Python,
1274 after Andy Lester’s Perl module WWW::Mechanize.")
1275 (license (license:non-copyleft
1276 "file://COPYING"
1277 "See COPYING in the distribution."))))
1278
1279
1280 (define-public python-simplejson
1281 (package
1282 (name "python-simplejson")
1283 (version "3.10.0")
1284 (source
1285 (origin
1286 (method url-fetch)
1287 (uri (pypi-uri "simplejson" version))
1288 (sha256
1289 (base32
1290 "1qhwsykjlb85igb4cfl6v6gkprzbbg8gyqdd7zscc8w3x0ifcfwm"))))
1291 (build-system python-build-system)
1292 (home-page "http://simplejson.readthedocs.org/en/latest/")
1293 (synopsis
1294 "Json library for Python")
1295 (description
1296 "JSON (JavaScript Object Notation) is a subset of JavaScript
1297 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1298 format.
1299
1300 Simplejson exposes an API familiar to users of the standard library marshal
1301 and pickle modules. It is the externally maintained version of the json
1302 library contained in Python 2.6, but maintains compatibility with Python 2.5
1303 and (currently) has significant performance advantages, even without using
1304 the optional C extension for speedups. Simplejson is also supported on
1305 Python 3.3+.")
1306 (license license:x11)))
1307
1308 (define-public python2-simplejson
1309 (package-with-python2 python-simplejson))
1310
1311
1312 (define-public python-pyicu
1313 (package
1314 (name "python-pyicu")
1315 (version "1.9.5")
1316 (source
1317 (origin
1318 (method url-fetch)
1319 (uri (pypi-uri "PyICU" version))
1320 (sha256
1321 (base32
1322 "16rmxy9y0qhqqna2v49i7nzwm09as699rbyvh4raw7w602w55c3k"))))
1323 (build-system python-build-system)
1324 (arguments
1325 '(#:phases
1326 (modify-phases %standard-phases
1327 (add-before 'check 'delete-failing-test
1328 (lambda _
1329 ;; XXX: These tests require locales that are unavailable
1330 ;; in the build environment.
1331 (delete-file "test/test_DateTimeParserGenerator.py")
1332 #t)))))
1333 (inputs
1334 `(("icu4c" ,icu4c)))
1335 (home-page "http://pyicu.osafoundation.org/")
1336 (synopsis "Python extension wrapping the ICU C++ API")
1337 (description
1338 "PyICU is a python extension wrapping the ICU C++ API.")
1339 (license license:x11)))
1340
1341 (define-public python2-pyicu
1342 (package-with-python2 python-pyicu))
1343
1344 (define-public python2-dogtail
1345 ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and
1346 ;; spaces in indentation" with Python 3.
1347 (package
1348 (name "python2-dogtail")
1349 (version "0.9.9")
1350 (source (origin
1351 (method url-fetch)
1352 (uri (pypi-uri "dogtail" version))
1353 (sha256
1354 (base32
1355 "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x"))))
1356 (build-system python-build-system)
1357 (arguments `(#:python ,python-2
1358 #:tests? #f)) ; invalid command "test"
1359 ;; Currently no offical homepage.
1360 (home-page "https://pypi.python.org/pypi/dogtail/")
1361 (synopsis "GUI test tool and automation framework written in Python")
1362 (description
1363 "Dogtail is a GUI test tool and automation framework written in Python.
1364 It uses Accessibility (a11y) technologies to communicate with desktop
1365 applications. dogtail scripts are written in Python and executed like any
1366 other Python program.")
1367 (license license:gpl2+)))
1368
1369 (define-public python2-empy
1370 (package
1371 (name "python2-empy")
1372 (version "3.3")
1373 (source (origin
1374 (method url-fetch)
1375 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1376 version ".tar.gz"))
1377 (sha256
1378 (base32
1379 "01g8mmkfnvjdmlhsihwyx56lrg7r5m5d2fg6mnxsvy6g0dnl69f6"))))
1380 (build-system python-build-system)
1381 (arguments
1382 `(#:python ,python-2
1383 #:phases (alist-replace
1384 'check
1385 (lambda _
1386 (zero? (system* "./test.sh")))
1387 %standard-phases)))
1388 (home-page "http://www.alcyone.com/software/empy/")
1389 (synopsis "Templating system for Python")
1390 (description
1391 "EmPy is a system for embedding Python expressions and statements in
1392 template text; it takes an EmPy source file, processes it, and produces
1393 output. This is accomplished via expansions, which are special signals to the
1394 EmPy system and are set off by a special prefix (by default the at sign, @@).
1395 EmPy can expand arbitrary Python expressions and statements in this way, as
1396 well as a variety of special forms. Textual data not explicitly delimited in
1397 this way is sent unaffected to the output, allowing Python to be used in
1398 effect as a markup language. Also supported are callbacks via hooks,
1399 recording and playback via diversions, and dynamic, chainable filters. The
1400 system is highly configurable via command line options and embedded
1401 commands.")
1402 (license license:lgpl2.1+)))
1403
1404 (define-public python2-element-tree
1405 (package
1406 (name "python2-element-tree")
1407 (version "1.2.6")
1408 (source (origin
1409 (method url-fetch)
1410 (uri (string-append
1411 "http://effbot.org/media/downloads/elementtree-"
1412 version "-20050316.tar.gz"))
1413 (sha256
1414 (base32
1415 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1416 (build-system python-build-system)
1417 (arguments
1418 `(#:python ,python-2 ; seems to be part of Python 3
1419 #:tests? #f)) ; no 'test' sub-command
1420 (synopsis "Toolkit for XML processing in Python")
1421 (description
1422 "ElementTree is a Python library supporting lightweight XML processing.")
1423 (home-page "http://effbot.org/zone/element-index.htm")
1424 (license (license:x11-style
1425 "http://docs.python.org/2/license.html"
1426 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1427
1428 (define-public python2-pybugz
1429 (package
1430 (name "python2-pybugz")
1431 (version "0.6.11")
1432 (source (origin
1433 (method url-fetch)
1434 (uri (string-append
1435 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1436 version ".tar.gz"))
1437 (sha256
1438 (base32
1439 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1440 (patches (search-patches "pybugz-stty.patch"
1441 "pybugz-encode-error.patch"))))
1442 (build-system python-build-system)
1443 (arguments
1444 `(#:python ,python-2 ; SyntaxError with Python 3
1445 #:tests? #f)) ; no 'test' sub-command
1446 (propagated-inputs
1447 `(("element-tree" ,python2-element-tree)))
1448 (synopsis "Python and command-line interface to Bugzilla")
1449 (description
1450 "PyBugz is a Python library and command-line tool to query the Bugzilla
1451 bug tracking system. It is meant as an aid to speed up interaction with the
1452 bug tracker.")
1453 (home-page "http://www.liquidx.net/pybugz/")
1454 (license license:gpl2)))
1455
1456 (define-public python-enum34
1457 (package
1458 (name "python-enum34")
1459 (version "1.1.6")
1460 (source
1461 (origin
1462 (method url-fetch)
1463 (uri (pypi-uri "enum34" version))
1464 (sha256
1465 (base32
1466 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1467 (build-system python-build-system)
1468 (home-page "https://pypi.python.org/pypi/enum34")
1469 (synopsis "Backported Python 3.4 Enum")
1470 (description
1471 "Enum34 is the new Python stdlib enum module available in Python 3.4
1472 backported for previous versions of Python from 2.4 to 3.3.")
1473 (license license:bsd-3)))
1474
1475 (define-public python2-enum34
1476 (package-with-python2 python-enum34))
1477
1478 (define-public python-parse-type
1479 (package
1480 (name "python-parse-type")
1481 (version "0.3.4")
1482 (source
1483 (origin
1484 (method url-fetch)
1485 (uri (string-append "https://pypi.python.org/packages/source/p/"
1486 "parse_type/parse_type-" version ".tar.gz"))
1487 (sha256
1488 (base32
1489 "0iv1c34npr4iynwpgv1vkjx9rjd18a85ir8c01gc5f7wp8iv7l1x"))))
1490 (build-system python-build-system)
1491 (arguments
1492 `(#:phases
1493 (modify-phases %standard-phases
1494 (add-after 'unpack 'patch-tests
1495 (lambda _
1496 (substitute* "tests/test_parse_type_parse.py"
1497 ;; Newer Python versions don't have the problem this test tests.
1498 (("self[.]assertRaises[(]parse.TooManyFields, p.parse, ''[)]")
1499 ""))
1500 #t)))))
1501 (propagated-inputs
1502 `(("python-six" ,python-six)
1503 ("python-parse" ,python-parse)))
1504 (native-inputs
1505 `(("python-pytest" ,python-pytest)
1506 ("python-pytest-runner" ,python-pytest-runner)))
1507 (home-page "https://github.com/jenisys/parse_type")
1508 (synopsis "Extended parse module")
1509 (description
1510 "Parse_type extends the python parse module.")
1511 (properties
1512 `((python2-variant . ,(delay python2-parse-type))))
1513 (license license:bsd-3)))
1514
1515 (define-public python2-parse-type
1516 (let ((base (package-with-python2
1517 (strip-python2-variant python-parse-type))))
1518 (package (inherit base)
1519 (propagated-inputs
1520 `(("python2-enum34" ,python2-enum34)
1521 ,@(package-propagated-inputs base))))))
1522
1523 (define-public python-parse
1524 (package
1525 (name "python-parse")
1526 (version "1.6.6")
1527 (source
1528 (origin
1529 (method url-fetch)
1530 (uri (pypi-uri "parse" version))
1531 (sha256
1532 (base32
1533 "0y31i3mwgv35qn0kzzjn9q8jqfdqmbi6sr6yfvn8rq4lqjm5lhvi"))
1534 (patches (search-patches "python-parse-too-many-fields.patch"))))
1535 (build-system python-build-system)
1536 (arguments
1537 `(#:phases
1538 (modify-phases %standard-phases
1539 (replace 'check
1540 (lambda _ (zero? (system* "python" "test_parse.py")))))))
1541 (home-page "https://github.com/r1chardj0n3s/parse")
1542 (synopsis "Parse strings")
1543 (description
1544 "Parse strings using a specification based on the Python format()
1545 syntax.")
1546 (license license:x11)))
1547
1548 (define-public python-polib
1549 (package
1550 (name "python-polib")
1551 (version "1.0.8")
1552 (source (origin
1553 (method url-fetch)
1554 (uri (pypi-uri "polib" version))
1555 (sha256
1556 (base32
1557 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
1558 (build-system python-build-system)
1559 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
1560 (synopsis "Manipulate, create and modify gettext files")
1561 (description "Polib can manipulate any gettext format (po, pot and mo)
1562 files. It can be used to create po files from scratch or to modify
1563 existing ones.")
1564 (license license:expat)))
1565
1566 (define-public python2-polib
1567 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
1568 (package
1569 (inherit base)
1570 (arguments `(,@(package-arguments base)
1571 ;; Tests don't work with python2.
1572 #:tests? #f)))))
1573
1574 (define-public scons
1575 (package
1576 (name "scons")
1577 (version "2.5.1")
1578 (source (origin
1579 (method url-fetch)
1580 (uri (string-append "mirror://sourceforge/scons/scons/" version
1581 "/scons-" version ".tar.gz"))
1582 (sha256
1583 (base32
1584 "1wji1z9jdkhnmm99apx6fhld9cs52rr56aigniyrcsmlwy52298b"))))
1585 (build-system python-build-system)
1586 (arguments
1587 ;; With Python 3.x, fails to build with a syntax error.
1588 `(#:python ,python-2
1589 #:use-setuptools? #f ; still relies on distutils
1590 #:tests? #f)) ; no 'python setup.py test' command
1591 (home-page "http://scons.org/")
1592 (synopsis "Software construction tool written in Python")
1593 (description
1594 "SCons is a software construction tool. Think of SCons as an improved,
1595 cross-platform substitute for the classic Make utility with integrated
1596 functionality similar to autoconf/automake and compiler caches such as ccache.
1597 In short, SCons is an easier, more reliable and faster way to build
1598 software.")
1599 (license license:x11)))
1600
1601 (define-public python-extras
1602 (package
1603 (name "python-extras")
1604 (version "0.0.3")
1605 (source
1606 (origin
1607 (method url-fetch)
1608 (uri (string-append
1609 "https://pypi.python.org/packages/source/e/extras/extras-"
1610 version ".tar.gz"))
1611 (sha256
1612 (base32
1613 "1h7zx4dfyclalg0fqnfjijpn0f793a9mx8sy3b27gd31nr6dhq3s"))))
1614 (build-system python-build-system)
1615 (arguments
1616 ;; error in setup.cfg: command 'test' has no such option 'buffer'
1617 '(#:tests? #f))
1618 (home-page "https://github.com/testing-cabal/extras")
1619 (synopsis "Useful extensions to the Python standard library")
1620 (description
1621 "Extras is a set of extensions to the Python standard library.")
1622 (license license:expat)))
1623
1624 (define-public python2-extras
1625 (package-with-python2 python-extras))
1626
1627 (define-public python-mimeparse
1628 (package
1629 (name "python-mimeparse")
1630 (version "0.1.4")
1631 (source
1632 (origin
1633 (method url-fetch)
1634 (uri (string-append
1635 "https://pypi.python.org/packages/source/p/python-mimeparse/python-mimeparse-"
1636 version ".tar.gz"))
1637 (sha256
1638 (base32
1639 "1hyxg09kaj02ri0rmwjqi86wk4nd1akvv7n0dx77azz76wga4s9w"))))
1640 (build-system python-build-system)
1641 (arguments
1642 '(#:tests? #f)) ; no setup.py test command
1643 (home-page
1644 "https://github.com/dbtsai/python-mimeparse")
1645 (synopsis "Python library for parsing MIME types")
1646 (description
1647 "Mimeparse provides basic functions for parsing MIME type names and
1648 matching them against a list of media-ranges.")
1649 (license license:expat)))
1650
1651 (define-public python2-mimeparse
1652 (package-with-python2 python-mimeparse))
1653
1654 (define-public python-nose
1655 (package
1656 (name "python-nose")
1657 (version "1.3.7")
1658 (source
1659 (origin
1660 (method url-fetch)
1661 (uri (pypi-uri "nose" version))
1662 (sha256
1663 (base32
1664 "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
1665 (build-system python-build-system)
1666 (arguments
1667 '(#:tests? #f)) ; FIXME: test suite fails
1668 (home-page "http://readthedocs.org/docs/nose/")
1669 (synopsis "Python testing library")
1670 (description
1671 "Nose extends the unittest library to make testing easier.")
1672 (license license:lgpl2.0+)))
1673
1674 (define-public python2-nose
1675 (package-with-python2 python-nose))
1676
1677 (define-public python-nose2
1678 (package
1679 (name "python-nose2")
1680 (version "0.6.5")
1681 (source
1682 (origin
1683 (method url-fetch)
1684 (uri (pypi-uri "nose2" version))
1685 (sha256
1686 (base32
1687 "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
1688 (build-system python-build-system)
1689 (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
1690 (propagated-inputs
1691 `(("python-cov-core" ,python-cov-core)
1692 ("python-pytest-cov" ,python-pytest-cov)
1693 ("python-six" ,python-six)))
1694 (home-page "https://github.com/nose-devs/nose2")
1695 (synopsis "Next generation of nicer testing for Python")
1696 (description
1697 "Nose2 is the next generation of nicer testing for Python, based on the
1698 plugins branch of unittest2. Nose2 aims to improve on nose by providing a
1699 better plugin api, being easier for users to configure, and simplifying internal
1700 interfaces and processes.")
1701 (license license:bsd-2)))
1702
1703 (define-public python2-nose2
1704 (package-with-python2 python-nose2))
1705
1706 (define-public python-unittest2
1707 (package
1708 (name "python-unittest2")
1709 (version "0.5.1")
1710 (source
1711 (origin
1712 (method url-fetch)
1713 (uri (string-append
1714 "https://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-"
1715 version ".tar.gz"))
1716 (sha256
1717 (base32
1718 "00yl6lskygcrddx5zspkhr0ibgvpknl4678kkm6s626539grq93q"))))
1719 (build-system python-build-system)
1720 (home-page "http://pypi.python.org/pypi/unittest2")
1721 (synopsis "Python unit testing library")
1722 (description
1723 "Unittest2 is a replacement for the unittest module in the Python
1724 standard library.")
1725 (license license:psfl)))
1726
1727 (define-public python2-unittest2
1728 (package (inherit python-unittest2)
1729 (name "python2-unittest2")
1730 (version "0.5.1")
1731 (source
1732 (origin
1733 (method url-fetch)
1734 (uri (string-append
1735 "https://pypi.python.org/packages/source/u/unittest2/unittest2-"
1736 version ".tar.gz"))
1737 (sha256
1738 (base32
1739 "0wbs4i4x3x7klr3v35ss6p9mcqz883i1xgcpkhvl7n2lyv6yhpda"))))
1740 (arguments
1741 `(#:python ,python-2
1742 #:tests? #f)))) ; no setup.py test command
1743
1744 (define-public python-pafy
1745 (package
1746 (name "python-pafy")
1747 (version "0.5.3.1")
1748 (source
1749 (origin
1750 (method url-fetch)
1751 (uri (pypi-uri "pafy" version))
1752 (sha256
1753 (base32
1754 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
1755 (build-system python-build-system)
1756 (arguments
1757 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
1758 (propagated-inputs
1759 ;; Youtube-dl is a python package which is imported in the file
1760 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
1761 `(("youtube-dl" ,youtube-dl)))
1762 (home-page "https://np1.github.io/pafy/")
1763 (synopsis "Retrieve YouTube content and metadata")
1764 (description
1765 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
1766 (license license:lgpl3+)))
1767
1768 (define-public python-py
1769 (package
1770 (name "python-py")
1771 (version "1.4.32")
1772 (source
1773 (origin
1774 (method url-fetch)
1775 (uri (pypi-uri "py" version))
1776 (sha256
1777 (base32
1778 "19s1pql9pq85h1qzsdwgyb8a3k1qgkvh33b02m8kfqhizz8rzf64"))))
1779 (build-system python-build-system)
1780 (arguments
1781 ;; FIXME: "ImportError: 'test' module incorrectly imported from
1782 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
1783 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
1784 ;; Is this module globally installed?"
1785 '(#:tests? #f))
1786 (home-page "http://pylib.readthedocs.org/")
1787 (synopsis "Python library for parsing, I/O, instrospection, and logging")
1788 (description
1789 "Py is a Python library for file name parsing, .ini file parsing, I/O,
1790 code introspection, and logging.")
1791 (license license:expat)))
1792
1793 (define-public python2-py
1794 (package-with-python2 python-py))
1795
1796 (define-public python-pytest
1797 (package
1798 (name "python-pytest")
1799 (version "2.7.3")
1800 (source
1801 (origin
1802 (method url-fetch)
1803 (uri (string-append
1804 "https://pypi.python.org/packages/source/p/pytest/pytest-"
1805 version ".tar.gz"))
1806 (sha256
1807 (base32
1808 "1z4yi986f9n0p8qmzmn21m21m8j1x78hk3505f89baqm6pdw7afm"))
1809 (modules '((guix build utils)))
1810 (snippet
1811 ;; One of the tests involves the /usr directory, so it fails.
1812 '(substitute* "testing/test_argcomplete.py"
1813 (("def test_remove_dir_prefix\\(self\\):")
1814 "@pytest.mark.xfail\n def test_remove_dir_prefix(self):")))))
1815 (build-system python-build-system)
1816 (propagated-inputs
1817 `(("python-py" ,python-py)))
1818 (native-inputs
1819 `(("python-nose" ,python-nose)
1820 ("python-mock" ,python-mock)))
1821 (home-page "http://pytest.org")
1822 (synopsis "Python testing library")
1823 (description
1824 "Pytest is a testing tool that provides auto-discovery of test modules
1825 and functions, detailed info on failing assert statements, modular fixtures,
1826 and many external plugins.")
1827 (license license:expat)))
1828
1829 (define-public python2-pytest
1830 (package-with-python2 python-pytest))
1831
1832 ;; Some packages require a newer pytest.
1833 (define-public python-pytest-3.0
1834 (package
1835 (inherit python-pytest)
1836 (name "python-pytest")
1837 (version "3.0.7")
1838 (source (origin
1839 (method url-fetch)
1840 (uri (pypi-uri "pytest" version))
1841 (sha256
1842 (base32
1843 "1asc4b2nd2a4f0g3r12y97rslq5wliji7b73wwkvdrm5s7mrc1mp"))))
1844 (arguments
1845 `(#:phases
1846 (modify-phases %standard-phases
1847 (add-before 'check 'disable-invalid-test
1848 (lambda _
1849 (substitute* "testing/test_argcomplete.py"
1850 (("def test_remove_dir_prefix" line)
1851 (string-append "@pytest.mark.skip"
1852 "(reason=\"Assumes that /usr exists.\")\n "
1853 line)))
1854 #t)))))
1855 (native-inputs
1856 `(("python-nose" ,python-nose)
1857 ("python-mock" ,python-mock)
1858 ("python-hypothesis" ,python-hypothesis)))
1859 (properties `((python2-variant . ,(delay python2-pytest-3.0))))))
1860
1861 (define-public python2-pytest-3.0
1862 (let ((base (package-with-python2
1863 (strip-python2-variant python-pytest-3.0))))
1864 (package (inherit base)
1865 (native-inputs
1866 `(("python2-enum34" ,python2-enum34)
1867 ,@(package-native-inputs base))))))
1868
1869 (define-public python-pytest-cov
1870 (package
1871 (name "python-pytest-cov")
1872 (version "2.4.0")
1873 (source
1874 (origin
1875 (method url-fetch)
1876 (uri (pypi-uri "pytest-cov" version))
1877 (sha256
1878 (base32
1879 "03c2qc42r4bczyw93gd7n0qi1h1jfhw7fnbhi33c3vp1hs81gm2k"))))
1880 (build-system python-build-system)
1881 (arguments
1882 `(#:phases
1883 (modify-phases %standard-phases
1884 (replace 'check
1885 (lambda _
1886 ;; options taken from tox.ini
1887 ;; TODO: make "--restructuredtext" tests pass. They currently fail
1888 ;; with "Duplicate implicit target name"
1889 (zero? (system* "python" "./setup.py" "check"
1890 "--strict" "--metadata")))))))
1891 (propagated-inputs
1892 `(("python-coverage" ,python-coverage)
1893 ("python-pytest" ,python-pytest)))
1894 (home-page "https://github.com/pytest-dev/pytest-cov")
1895 (synopsis "Pytest plugin for measuring coverage")
1896 (description
1897 "Pytest-cov produces coverage reports. It supports centralised testing and
1898 distributed testing in both @code{load} and @code{each} modes. It also
1899 supports coverage of subprocesses.")
1900 (license license:expat)))
1901
1902 (define-public python2-pytest-cov
1903 (package-with-python2 python-pytest-cov))
1904
1905 (define-public python-pytest-runner
1906 (package
1907 (name "python-pytest-runner")
1908 (version "2.11.1")
1909 (source
1910 (origin
1911 (method url-fetch)
1912 (uri (pypi-uri "pytest-runner" version))
1913 (sha256
1914 (base32
1915 "1cw978kqqcq916b9gfns1qjqvg33c5ail5jhw9054dsynkm32flq"))))
1916 (build-system python-build-system)
1917 (arguments
1918 `(#:phases
1919 (modify-phases %standard-phases
1920 ;; The fancy way of setting the version with setuptools_scm does not
1921 ;; seem to work here.
1922 (add-after 'unpack 'set-version
1923 (lambda _
1924 (substitute* "docs/conf.py"
1925 (("version = setuptools_scm\\.get_version\\(root='\\.\\.')")
1926 (string-append "version = \"" ,version "\"")))
1927 #t)))))
1928 (native-inputs
1929 `(("python-pytest" ,python-pytest)
1930 ("python-setuptools-scm" ,python-setuptools-scm)))
1931 (home-page "https://github.com/pytest-dev/pytest-runner")
1932 (synopsis "Invoke py.test as a distutils command")
1933 (description
1934 "This package provides a @command{pytest-runner} command that
1935 @file{setup.py} files can use to run tests.")
1936 (license license:expat)))
1937
1938 (define-public python2-pytest-runner
1939 (package-with-python2 python-pytest-runner))
1940
1941 (define-public python-pytest-mock
1942 (package
1943 (name "python-pytest-mock")
1944 (version "1.2")
1945 (source
1946 (origin
1947 (method url-fetch)
1948 (uri (pypi-uri "pytest-mock" version ".zip"))
1949 (sha256
1950 (base32
1951 "03zxar5drzm7ksqyrwypjaza3cri6wqvpr6iam92djvg6znp32gp"))))
1952 (build-system python-build-system)
1953 (native-inputs
1954 `(("unzip" ,unzip)))
1955 (propagated-inputs
1956 `(("python-pytest" ,python-pytest)))
1957 (home-page "https://github.com/pytest-dev/pytest-mock/")
1958 (synopsis "Thin-wrapper around the mock package for easier use with py.test")
1959 (description
1960 "This plugin installs a @code{mocker} fixture which is a thin-wrapper
1961 around the patching API provided by the @code{mock} package, but with the
1962 benefit of not having to worry about undoing patches at the end of a test.
1963 The mocker fixture has the same API as @code{mock.patch}, supporting the
1964 same arguments.")
1965 (properties `((python2-variant . ,(delay python2-pytest-mock))))
1966 (license license:expat)))
1967
1968 (define-public python2-pytest-mock
1969 (let ((base (package-with-python2
1970 (strip-python2-variant python-pytest-mock))))
1971 (package (inherit base)
1972 (propagated-inputs
1973 `(("python2-mock" ,python2-mock)
1974 ,@(package-propagated-inputs base))))))
1975
1976 (define-public python-pytest-xdist
1977 (package
1978 (name "python-pytest-xdist")
1979 (version "1.14")
1980 (source
1981 (origin
1982 (method url-fetch)
1983 (uri (pypi-uri "pytest-xdist" version ".zip"))
1984 (sha256
1985 (base32
1986 "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))
1987 (modules '((guix build utils)))
1988 (snippet
1989 '(begin
1990 ;; Remove pre-compiled .pyc files from source.
1991 (for-each delete-file-recursively
1992 (find-files "." "__pycache__" #:directories? #t))
1993 (for-each delete-file (find-files "." "\\.pyc$"))
1994 #t))))
1995 (build-system python-build-system)
1996 (arguments
1997 '(#:tests? #f)) ;FIXME: Some tests are failing.
1998 ;; #:phases
1999 ;; (modify-phases %standard-phases
2000 ;; (delete 'check)
2001 ;; (add-after 'install 'check
2002 ;; (lambda* (#:key inputs outputs #:allow-other-keys)
2003 ;; (add-installed-pythonpath inputs outputs)
2004 ;; (zero? (system* "py.test" "-v")))))
2005 (native-inputs
2006 `(("unzip" ,unzip)
2007 ("python-setuptools-scm" ,python-setuptools-scm)))
2008 (propagated-inputs
2009 `(("python-execnet" ,python-execnet)
2010 ("python-pytest" ,python-pytest)
2011 ("python-py" ,python-py)))
2012 (home-page
2013 "https://github.com/pytest-dev/pytest-xdist")
2014 (synopsis
2015 "Plugin for py.test with distributed testing and loop-on-failing modes")
2016 (description
2017 "The pytest-xdist plugin extends py.test with some unique test execution
2018 modes: parallelization, running tests in boxed subprocesses, the ability
2019 to run tests repeatedly when failed, and the ability to run tests on multiple
2020 Python interpreters or platforms. It uses rsync to copy the existing
2021 program code to a remote location, executes there, and then syncs the
2022 result back.")
2023 (license license:expat)))
2024
2025 (define-public python2-pytest-xdist
2026 (package-with-python2 python-pytest-xdist))
2027
2028 (define-public python-scripttest
2029 (package
2030 (name "python-scripttest")
2031 (version "1.3")
2032 (source
2033 (origin
2034 (method url-fetch)
2035 (uri (string-append
2036 "https://pypi.python.org/packages/source/s/scripttest/scripttest-"
2037 version ".tar.gz"))
2038 (sha256
2039 (base32
2040 "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
2041 (build-system python-build-system)
2042 (native-inputs
2043 `(("python-pytest" ,python-pytest)))
2044 (home-page "http://pythonpaste.org/scripttest/")
2045 (synopsis "Python library to test command-line scripts")
2046 (description "Scripttest is a Python helper library for testing
2047 interactive command-line applications. With it you can run a script in a
2048 subprocess and see the output as well as any file modifications.")
2049 (license license:expat)))
2050
2051 (define-public python2-scripttest
2052 (package-with-python2 python-scripttest))
2053
2054 (define-public python-testtools
2055 (package
2056 (name "python-testtools")
2057 (version "1.4.0")
2058 (source
2059 (origin
2060 (method url-fetch)
2061 (uri (pypi-uri "testtools" version))
2062 (sha256
2063 (base32
2064 "1vw8yljnd75d396hhw6s2hrf4cclzy845ifd5am0lxsl235z3i8c"))))
2065 (build-system python-build-system)
2066 (arguments
2067 `(#:phases
2068 (modify-phases %standard-phases
2069 (add-after 'unpack 'fix-module-imports
2070 (lambda _
2071 (substitute* "setup.py"
2072 (("'unittest2>=0.8.0',") ""))
2073 (substitute* '("testtools/testcase.py"
2074 "testtools/testsuite.py"
2075 "testtools/run.py"
2076 "testtools/tests/test_run.py"
2077 "testtools/tests/test_testsuite.py"
2078 "testtools/tests/test_deferredruntest.py")
2079 ;; unittest2 is a backport of Python2.7 features to Python 2.4.
2080 (("import unittest2 as unittest") "import unittest")
2081 (("import unittest2") "import unittest as unittest2")
2082 (("from unittest2 import") "from unittest import"))
2083 (substitute* "testtools/tests/test_testresult.py"
2084 ;; NUL in source code is not allowed (raises ValueError).
2085 (("\\x00\\x04") "\\x04"))
2086 #t)))))
2087 (propagated-inputs
2088 `(("python-mimeparse" ,python-mimeparse)
2089 ("python-extras" ,python-extras)))
2090 (home-page "https://github.com/testing-cabal/testtools")
2091 (synopsis
2092 "Extensions to the Python standard library unit testing framework")
2093 (description
2094 "Testtools extends the Python standard library unit testing framework to
2095 provide matchers, more debugging information, and cross-Python
2096 compatibility.")
2097 (license license:psfl)))
2098
2099 (define-public python2-testtools
2100 (package-with-python2 python-testtools))
2101
2102 (define-public python-testscenarios
2103 (package
2104 (name "python-testscenarios")
2105 (version "0.4")
2106 (source
2107 (origin
2108 (method url-fetch)
2109 (uri (string-append
2110 "https://pypi.python.org/packages/source/t/testscenarios/testscenarios-"
2111 version ".tar.gz"))
2112 (sha256
2113 (base32
2114 "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg"))))
2115 (build-system python-build-system)
2116 (propagated-inputs
2117 `(("python-testtools" ,python-testtools)))
2118 (home-page "https://launchpad.net/testscenarios")
2119 (synopsis "Pyunit extension for dependency injection")
2120 (description
2121 "Testscenarios provides clean dependency injection for Python unittest
2122 style tests.")
2123 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2124
2125 (define-public python2-testscenarios
2126 (package-with-python2 python-testscenarios))
2127
2128 (define-public python-testresources
2129 (package
2130 (name "python-testresources")
2131 (version "0.2.7")
2132 (source
2133 (origin
2134 (method url-fetch)
2135 (uri (string-append
2136 "https://pypi.python.org/packages/source/t/testresources/testresources-"
2137 version ".tar.gz"))
2138 (sha256
2139 (base32
2140 "0cbj3plbllyz42c4b5xxgwaa7mml54lakslrn4kkhinxhdri22md"))))
2141 (build-system python-build-system)
2142 (home-page "https://launchpad.net/testresources")
2143 (synopsis
2144 "Pyunit extension for managing test resources")
2145 (description
2146 "Testresources is an extension to Python's unittest to allow declarative
2147 use of resources by test cases.")
2148 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2149
2150 (define-public python2-testresources
2151 (package-with-python2 python-testresources))
2152
2153 (define-public python-subunit
2154 (package
2155 (name "python-subunit")
2156 (version "0.0.21")
2157 (source
2158 (origin
2159 (method url-fetch)
2160 (uri (string-append
2161 "https://pypi.python.org/packages/source/p/python-subunit/python-subunit-"
2162 version ".tar.gz"))
2163 (sha256
2164 (base32
2165 "1nkw9wfbvizmpajbj3in8ns07g7lwkiv8hip14jjlwk3cacls6jv"))))
2166 (build-system python-build-system)
2167 (propagated-inputs
2168 `(("python-extras" ,python-extras)
2169 ("python-mimeparse" ,python-mimeparse)))
2170 (native-inputs
2171 `(("python-testscenarios" ,python-testscenarios)))
2172 (home-page "http://launchpad.net/subunit")
2173 (synopsis "Python implementation of the subunit protocol")
2174 (description
2175 "Python-subunit is a Python implementation of the subunit test streaming
2176 protocol.")
2177 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2178
2179 (define-public python2-subunit
2180 (package-with-python2 python-subunit))
2181
2182 ;; Recent versions of python-fixtures and python-testrepository need
2183 ;; python-pbr for packaging, which itself needs these two packages for
2184 ;; testing.
2185 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2186 ;; same source, just without any test dependencies and with tests disabled.
2187 ;; python-pbr-minmal is then used to package python-fixtures and
2188 ;; python-testrepository.
2189 ;; Strictly speaking we currently could remove the test-requirements from the
2190 ;; normal python-pbr package (and save this package) since test are disabled
2191 ;; there anyway. But this may change in future.
2192 (define python-pbr-minimal
2193 (package
2194 (name "python-pbr-minimal")
2195 (version "1.10.0")
2196 (source
2197 (origin
2198 (method url-fetch)
2199 (uri (pypi-uri "pbr" version))
2200 (sha256
2201 (base32
2202 "177kd9kbv1hvf2ban7l3x9ymzbi1md4hkaymwbgnz7ihf312hr0q"))
2203 (patches (search-patches "python-pbr-fix-man-page-support.patch"))))
2204 (build-system python-build-system)
2205 (arguments
2206 `(#:tests? #f))
2207 (home-page "http://docs.openstack.org/developer/pbr/")
2208 (synopsis "Minimal build of python-pbr used for bootstrapping")
2209 (description
2210 "Used only for bootstrapping python2-pbr, you should not need this.")
2211 (license license:asl2.0)))
2212
2213 (define python2-pbr-minimal
2214 (package-with-python2 python-pbr-minimal))
2215
2216 (define-public python-pbr
2217 (package
2218 (inherit python-pbr-minimal)
2219 (name "python-pbr")
2220 (arguments
2221 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2222 (propagated-inputs
2223 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2224 (native-inputs
2225 `(("python-fixtures" ,python-fixtures)
2226 ;; discover, coverage, hacking, subunit
2227 ("python-mock" ,python-mock)
2228 ("python-six" ,python-six)
2229 ("python-sphinx" ,python-sphinx)
2230 ("python-testrepository" ,python-testrepository)
2231 ("python-testresources" ,python-testresources)
2232 ("python-testscenarios" ,python-testscenarios)
2233 ("python-testtools" ,python-testtools)
2234 ("python-virtualenv" ,python-virtualenv)))
2235 (synopsis "Enhance the default behavior of Python’s setuptools")
2236 (description
2237 "Python Build Reasonableness (PBR) is a library that injects some useful
2238 and sensible default behaviors into your setuptools run. It will set
2239 versions, process requirements files and generate AUTHORS and ChangeLog file
2240 from git information.
2241 ")))
2242
2243 (define-public python2-pbr
2244 (package-with-python2 python-pbr))
2245
2246 (define-public python-fixtures
2247 (package
2248 (name "python-fixtures")
2249 (version "1.4.0")
2250 (source
2251 (origin
2252 (method url-fetch)
2253 (uri (pypi-uri "fixtures" version))
2254 (sha256
2255 (base32
2256 "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
2257 (build-system python-build-system)
2258 (arguments
2259 '(#:phases
2260 (modify-phases %standard-phases
2261 (replace 'check
2262 (lambda _
2263 (zero? (system* "python" "-m" "testtools.run"
2264 "fixtures.test_suite")))))))
2265 (propagated-inputs
2266 `(("python-six" ,python-six)))
2267 (native-inputs
2268 `(("python-mock" ,python-mock)
2269 ("python-pbr-minimal" ,python-pbr-minimal)
2270 ("python-testtools" ,python-testtools)))
2271 (home-page "https://launchpad.net/python-fixtures")
2272 (synopsis "Python test fixture library")
2273 (description
2274 "Fixtures provides a way to create reusable state, useful when writing
2275 Python tests.")
2276 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2277
2278 (define-public python2-fixtures
2279 (package-with-python2 python-fixtures))
2280
2281 (define-public python-testrepository
2282 (package
2283 (name "python-testrepository")
2284 (version "0.0.20")
2285 (source
2286 (origin
2287 (method url-fetch)
2288 (uri (string-append
2289 "https://pypi.python.org/packages/source/t/testrepository/testrepository-"
2290 version ".tar.gz"))
2291 (sha256
2292 (base32
2293 "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
2294 (build-system python-build-system)
2295 (arguments
2296 ;; FIXME: Many tests are failing.
2297 '(#:tests? #f))
2298 (propagated-inputs
2299 `(("python-fixtures" ,python-fixtures)
2300 ("python-subunit" ,python-subunit)
2301 ("python-testtools" ,python-testtools)))
2302 (native-inputs
2303 `(("python-pbr-minimal" ,python-pbr-minimal) ;; same as for building fixture
2304 ("python-mimeparse" ,python-mimeparse)))
2305 (home-page "https://launchpad.net/testrepository")
2306 (synopsis "Database for Python test results")
2307 (description "Testrepository provides a database of test results which can
2308 be used as part of a developer's workflow to check things such as what tests
2309 have failed since the last commit or what tests are currently failing.")
2310 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2311
2312 (define-public python2-testrepository
2313 (package-with-python2 python-testrepository))
2314
2315 (define-public python-coverage
2316 (package
2317 (name "python-coverage")
2318 (version "4.1")
2319 (source
2320 (origin
2321 (method url-fetch)
2322 (uri (pypi-uri "coverage" version))
2323 (sha256
2324 (base32
2325 "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1"))))
2326 (build-system python-build-system)
2327 (arguments
2328 ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
2329 '(#:tests? #f))
2330 (home-page "http://nedbatchelder.com/code/coverage")
2331 (synopsis "Code coverage measurement for Python")
2332 (description
2333 "Coverage measures code coverage, typically during test execution. It
2334 uses the code analysis tools and tracing hooks provided in the Python standard
2335 library to determine which lines are executable, and which have been
2336 executed.")
2337 (license license:bsd-3)))
2338
2339 (define-public python2-coverage
2340 (package-with-python2 python-coverage))
2341
2342 (define-public python-cov-core
2343 (package
2344 (name "python-cov-core")
2345 (version "1.15.0")
2346 (source
2347 (origin
2348 (method url-fetch)
2349 (uri (pypi-uri "cov-core" version))
2350 (sha256
2351 (base32
2352 "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
2353 (build-system python-build-system)
2354 (propagated-inputs
2355 `(("python-coverage" ,python-coverage)))
2356 (home-page "https://github.com/schlamar/cov-core")
2357 (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
2358 (description
2359 "This is a library package for use by @code{pytest-cov}, @code{nose-cov}
2360 and @code{nose2-cov}. It is useful for developing coverage plugins for these
2361 testing frameworks.")
2362 (license license:expat)))
2363
2364 (define-public python2-cov-core
2365 (package-with-python2 python-cov-core))
2366
2367 (define-public python-discover
2368 (package
2369 (name "python-discover")
2370 (version "0.4.0")
2371 (source
2372 (origin
2373 (method url-fetch)
2374 (uri (string-append
2375 "https://pypi.python.org/packages/source/d/discover/discover-"
2376 version ".tar.gz"))
2377 (sha256
2378 (base32
2379 "0y8d0zwiqar51kxj8lzmkvwc3b8kazb04gk5zcb4nzg5k68zmhq5"))))
2380 (build-system python-build-system)
2381 (home-page "http://pypi.python.org/pypi/discover/")
2382 (synopsis
2383 "Python test discovery for unittest")
2384 (description
2385 "Discover provides test discovery for unittest, a feature that has been
2386 backported from Python 2.7 for Python 2.4+.")
2387 (license license:bsd-3)))
2388
2389 (define-public python2-discover
2390 (package-with-python2 python-discover))
2391
2392 (define-public behave
2393 (package
2394 (name "behave")
2395 (version "1.2.5")
2396 (source (origin
2397 (method url-fetch)
2398 (uri (pypi-uri "behave" version ".tar.bz2"))
2399 (sha256
2400 (base32
2401 "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c"))))
2402 (build-system python-build-system)
2403 (propagated-inputs
2404 `(("python-six" ,python-six)
2405 ("python-parse" ,python-parse)
2406 ("python-parse-type" ,python-parse-type)))
2407 (arguments `(#:tests? #f)) ;TODO: tests require nose>=1.3 and
2408 ;PyHamcrest>=1.8
2409 (home-page "https://github.com/behave/behave")
2410 (synopsis "Python behavior-driven development")
2411 (description
2412 "Behave is a tool for behavior-driven development in python.
2413 Behavior-driven development (or BDD) is an agile software development
2414 technique that encourages collaboration between developers, QA and
2415 non-technical or business participants in a software project. Behave uses
2416 tests written in a natural language style, backed up by Python code.")
2417 (license license:x11)))
2418
2419 (define-public python-exif-read
2420 (package
2421 (name "python-exif-read")
2422 (version "2.1.2")
2423 (source (origin
2424 (method url-fetch)
2425 (uri (pypi-uri "ExifRead" version))
2426 (sha256
2427 (base32
2428 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2429 (build-system python-build-system)
2430 (arguments `(#:tests? #f)) ; no tests
2431 (home-page "https://github.com/ianare/exif-py")
2432 (synopsis "Python library to extract EXIF data from image files")
2433 (description
2434 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2435 files.")
2436 (license license:bsd-3)))
2437
2438 (define-public python2-exif-read
2439 (package-with-python2 python-exif-read))
2440
2441 (define-public python-pyld
2442 (package
2443 (name "python-pyld")
2444 (version "0.7.1")
2445 (source (origin
2446 (method url-fetch)
2447 (uri (pypi-uri "PyLD" version))
2448 (sha256
2449 (base32
2450 "1m0fs6897vxfkf7awah5i66i7b7smm5fnywf1w50fpzyfbfhr156"))))
2451 (build-system python-build-system)
2452 (arguments `(#:tests? #f)) ; no tests
2453 (home-page "https://github.com/digitalbazaar/pyld")
2454 (synopsis "Python implementation of the JSON-LD specification")
2455 (description
2456 "PyLD is an implementation of the JSON-LD specification.")
2457 (license license:bsd-3)))
2458
2459 (define-public python2-pyld
2460 (package-with-python2 python-pyld))
2461
2462 (define-public python-certifi
2463 (package
2464 (name "python-certifi")
2465 (version "2017.1.23")
2466 (source (origin
2467 (method url-fetch)
2468 (uri (pypi-uri "certifi" version))
2469 (sha256
2470 (base32
2471 "1klrzl3hgvcf2mjk00g0k3kk1p2z27vzwnxivwar4vhjmjvpz1w1"))))
2472 (build-system python-build-system)
2473 (home-page "https://certifi.io/")
2474 (synopsis "Python CA certificate bundle")
2475 (description
2476 "Certifi is a Python library that contains a CA certificate bundle, which
2477 is used by the Requests library to verify HTTPS requests.")
2478 (license license:asl2.0)))
2479
2480 (define-public python2-certifi
2481 (package-with-python2 python-certifi))
2482
2483 (define-public python-click
2484 (package
2485 (name "python-click")
2486 (version "6.7")
2487 (source
2488 (origin
2489 (method url-fetch)
2490 (uri (pypi-uri "click" version))
2491 (sha256
2492 (base32
2493 "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi"))))
2494 (build-system python-build-system)
2495 (arguments
2496 `(#:phases
2497 (modify-phases %standard-phases
2498 (add-after 'unpack 'fix-paths
2499 (lambda* (#:key inputs #:allow-other-keys)
2500 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2501 "cross-libc" "libc"))))
2502 (substitute* "click/_unicodefun.py"
2503 (("'locale'")
2504 (string-append "'" glibc "/bin/locale'"))))
2505 #t))
2506 (replace 'check
2507 (lambda _
2508 (zero? (system* "make" "test")))))))
2509 (native-inputs
2510 `(("python-pytest" ,python-pytest)))
2511 (home-page "http://click.pocoo.org")
2512 (synopsis "Command line library for Python")
2513 (description
2514 "Click is a Python package for creating command line interfaces in a
2515 composable way with as little code as necessary. Its name stands for
2516 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2517 with sensible defaults out of the box.")
2518 (license license:bsd-3)))
2519
2520 (define-public python2-click
2521 (package-with-python2 python-click))
2522
2523 (define-public python-wheel
2524 (package
2525 (name "python-wheel")
2526 (version "0.30.0a0")
2527 (source
2528 (origin
2529 (method url-fetch)
2530 (uri (pypi-uri "wheel" version))
2531 (sha256
2532 (base32
2533 "1nm6mn8isny0hr86rhbfrpfj867c0phf001xgsd69xfp9ady1wwq"))))
2534 (build-system python-build-system)
2535 (native-inputs
2536 `(("python-jsonschema" ,python-jsonschema)
2537 ("python-pytest-cov" ,python-pytest-cov)))
2538 (home-page "https://bitbucket.org/pypa/wheel/")
2539 (synopsis "Format for built Python packages")
2540 (description
2541 "A wheel is a ZIP-format archive with a specially formatted filename and
2542 the @code{.whl} extension. It is designed to contain all the files for a PEP
2543 376 compatible install in a way that is very close to the on-disk format. Many
2544 packages will be properly installed with only the @code{Unpack} step and the
2545 unpacked archive preserves enough information to @code{Spread} (copy data and
2546 scripts to their final locations) at any later time. Wheel files can be
2547 installed with a newer @code{pip} or with wheel's own command line utility.")
2548 (license license:expat)
2549 (properties `((python2-variant . ,(delay python2-wheel))))))
2550
2551 (define-public python2-wheel
2552 (let ((wheel (package-with-python2
2553 (strip-python2-variant python-wheel))))
2554 (package (inherit wheel)
2555 (native-inputs `(("python2-functools32" ,python2-functools32)
2556 ,@(package-native-inputs wheel))))))
2557
2558
2559 (define-public python-requests
2560 (package
2561 (name "python-requests")
2562 (version "2.13.0")
2563 (source (origin
2564 (method url-fetch)
2565 (uri (pypi-uri "requests" version))
2566 (sha256
2567 (base32
2568 "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp"))))
2569 ;; TODO: unbundle urllib3 and chardet.
2570 (build-system python-build-system)
2571 (arguments
2572 ;; FIXME: Some tests require network access.
2573 '(#:tests? #f))
2574 (home-page "http://python-requests.org/")
2575 (synopsis "Python HTTP library")
2576 (description
2577 "Requests is a Python HTTP client library. It aims to be easier to use
2578 than Python’s urllib2 library.")
2579 (license license:asl2.0)))
2580
2581 ;; Some software requires an older version of Requests, notably Docker
2582 ;; Compose.
2583 (define-public python-requests-2.7
2584 (package (inherit python-requests)
2585 (version "2.7.0")
2586 (source (origin
2587 (method url-fetch)
2588 (uri (pypi-uri "requests" version))
2589 (sha256
2590 (base32
2591 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
2592
2593 (define-public python2-requests
2594 (package-with-python2 python-requests))
2595
2596 (define-public python-vcversioner
2597 (package
2598 (name "python-vcversioner")
2599 (version "2.16.0.0")
2600 (source
2601 (origin
2602 (method url-fetch)
2603 (uri (pypi-uri "vcversioner" version))
2604 (sha256
2605 (base32
2606 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2607 (build-system python-build-system)
2608 (synopsis "Python library for version number discovery")
2609 (description "Vcversioner is a Python library that inspects tagging
2610 information in a variety of version control systems in order to discover
2611 version numbers.")
2612 (home-page "https://github.com/habnabit/vcversioner")
2613 (license license:isc)))
2614
2615 (define-public python2-vcversioner
2616 (package-with-python2 python-vcversioner))
2617
2618 (define-public python-jsonschema
2619 (package
2620 (name "python-jsonschema")
2621 (version "2.5.1")
2622 (source (origin
2623 (method url-fetch)
2624 (uri
2625 (string-append
2626 "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-"
2627 version ".tar.gz"))
2628 (sha256
2629 (base32
2630 "0hddbqjm4jq63y8jf44nswina1crjs16l9snb6m3vvgyg31klrrn"))))
2631 (build-system python-build-system)
2632 (arguments
2633 '(#:phases
2634 (modify-phases %standard-phases
2635 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
2636 (native-inputs
2637 `(("python-nose" ,python-nose)
2638 ("python-vcversioner" ,python-vcversioner)))
2639 (home-page "https://github.com/Julian/jsonschema")
2640 (synopsis "Implementation of JSON Schema for Python")
2641 (description
2642 "Jsonschema is an implementation of JSON Schema for Python.")
2643 (license license:expat)
2644 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2645
2646 (define-public python2-jsonschema
2647 (let ((jsonschema (package-with-python2
2648 (strip-python2-variant python-jsonschema))))
2649 (package (inherit jsonschema)
2650 (native-inputs
2651 `(("python2-mock" ,python2-mock)
2652 ,@(package-native-inputs jsonschema)))
2653 (propagated-inputs
2654 `(("python2-functools32" ,python2-functools32))))))
2655
2656 (define-public python-kitchen
2657 (package
2658 (name "python-kitchen")
2659 (version "1.2.4")
2660 (source
2661 (origin
2662 (method url-fetch)
2663 (uri (pypi-uri "kitchen" version))
2664 (sha256
2665 (base32
2666 "0ggv3p4x8jvmmzhp0xm00h6pvh1g0gmycw71rjwagnrj8n23vxrq"))))
2667 (build-system python-build-system)
2668 (propagated-inputs
2669 `(("python-chardet" ,python-chardet)))
2670 (home-page "https://github.com/fedora-infra/kitchen")
2671 (synopsis "Python API for snippets")
2672 (description "@code{kitchen} module provides a python API for all sorts of
2673 little useful snippets of code that everybody ends up writing for their projects
2674 but never seem big enough to build an independent release. Use kitchen and stop
2675 cutting and pasting that code over and over.")
2676 (license (list license:lgpl2.1+
2677 ;; subprocess.py, test_subprocess.py,
2678 ;; kitchen/pycompat25/defaultdict.py:
2679 license:psfl))))
2680
2681 (define-public python2-kitchen
2682 (package-with-python2 python-kitchen))
2683
2684 (define-public python-unidecode
2685 (package
2686 (name "python-unidecode")
2687 (version "0.04.20")
2688 (source (origin
2689 (method url-fetch)
2690 (uri (pypi-uri "Unidecode" version))
2691 (sha256
2692 (base32
2693 "1q00i8gpsq3d9r0q8wk4b290fxl0kqlsdk7iadvli45in6s1hi7d"))))
2694 (build-system python-build-system)
2695 (home-page "https://pypi.python.org/pypi/Unidecode")
2696 (synopsis "ASCII transliterations of Unicode text")
2697 (description
2698 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2699 useful when integrating with legacy code that doesn't support Unicode, or for
2700 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2701 machine identifiers from human-readable Unicode strings that should still be
2702 somewhat intelligeble.")
2703 (license license:gpl2+)))
2704
2705 (define-public python2-unidecode
2706 (package-with-python2 python-unidecode))
2707
2708 (define-public python-pyjwt
2709 (package
2710 (name "python-pyjwt")
2711 (version "1.4.0")
2712 (source
2713 (origin
2714 (method url-fetch)
2715 (uri (pypi-uri "PyJWT" version))
2716 (sha256
2717 (base32
2718 "1556v2jppd8mjkkj66pxb5rcazm35jq81r233mdl8hfmz9n3icp1"))))
2719 (build-system python-build-system)
2720 (native-inputs
2721 `(("python-pytest" ,python-pytest)
2722 ("python-pytest-cov" ,python-pytest-cov)
2723 ("python-pytest-runner" ,python-pytest-runner)))
2724 (home-page "https://github.com/progrium/pyjwt")
2725 (synopsis "JSON Web Token implementation in Python")
2726 (description
2727 "PyJWT is a JSON Web Token implementation written in Python.")
2728 (license license:expat)))
2729
2730 (define-public python2-pyjwt
2731 (package-with-python2 python-pyjwt))
2732
2733 (define-public python-pykka
2734 (package
2735 (name "python-pykka")
2736 (version "1.2.1")
2737 (source
2738 (origin
2739 (method url-fetch)
2740 (uri (pypi-uri "Pykka" version))
2741 (sha256
2742 (base32
2743 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2744 (build-system python-build-system)
2745 (native-inputs
2746 `(("python-mock" ,python-mock)
2747 ("python-nose" ,python-nose)
2748 ("python-gevent" ,python-gevent)
2749 ("python-eventlet" ,python-eventlet)))
2750 (home-page "https://www.pykka.org/")
2751 (synopsis "Pykka is a Python implementation of the actor model")
2752 (description
2753 "Pykka is a Python implementation of the actor model.
2754 The actor model introduces some simple rules to control the sharing
2755 of state and cooperation between execution units, which makes it
2756 easier to build concurrent applications.")
2757 (license license:asl2.0)))
2758
2759 (define-public python2-pykka
2760 (package-with-python2 python-pykka))
2761
2762 (define-public python-oauthlib
2763 (package
2764 (name "python-oauthlib")
2765 (version "1.0.3")
2766 (source (origin
2767 (method url-fetch)
2768 (uri (pypi-uri "oauthlib" version))
2769 (sha256
2770 (base32
2771 "1bfrj70vdjxjw74khbyh6f0dksv7p5rh2346jnlrffyacd3gwjzg"))))
2772 (build-system python-build-system)
2773 (native-inputs
2774 `(("python-nose" ,python-nose)
2775 ("python-mock" ,python-mock)
2776 ("python-cryptography" ,python-cryptography)
2777 ("python-pyjwt" ,python-pyjwt)
2778 ("python-blinker" ,python-blinker)))
2779 (home-page "https://github.com/idan/oauthlib")
2780 (synopsis "OAuth implementation for Python")
2781 (description
2782 "Oauthlib is a generic, spec-compliant, thorough implementation of the
2783 OAuth request-signing logic.")
2784 (license license:bsd-3)
2785 (properties `((python2-variant . ,(delay python2-oauthlib))))))
2786
2787 (define-public python2-oauthlib
2788 (let ((base (package-with-python2 (strip-python2-variant python-oauthlib))))
2789 (package
2790 (inherit base)
2791 (native-inputs `(("python2-unittest2" ,python2-unittest2)
2792 ,@(package-native-inputs base))))))
2793
2794 (define-public python-itsdangerous
2795 (package
2796 (name "python-itsdangerous")
2797 (version "0.24")
2798 (source
2799 (origin
2800 (method url-fetch)
2801 (uri (string-append
2802 "https://pypi.python.org/packages/source/i/itsdangerous/itsdangerous-"
2803 version ".tar.gz"))
2804 (sha256
2805 (base32
2806 "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb"))))
2807 (build-system python-build-system)
2808 (home-page "https://github.com/mitsuhiko/itsdangerous")
2809 (synopsis "Python library for passing data to/from untrusted environments")
2810 (description
2811 "Itsdangerous provides various helpers to pass trusted data to untrusted
2812 environments and back.")
2813 (license license:bsd-3)))
2814
2815 (define-public python2-itsdangerous
2816 (package-with-python2 python-itsdangerous))
2817
2818 (define-public python-pyyaml
2819 (package
2820 (name "python-pyyaml")
2821 (version "3.12")
2822 (source
2823 (origin
2824 (method url-fetch)
2825 (uri (pypi-uri "PyYAML" version))
2826 (sha256
2827 (base32
2828 "1aqjl8dk9amd4zr99n8v2qxzgmr2hdvqfma4zh7a41rj6336c9sr"))))
2829 (build-system python-build-system)
2830 (inputs
2831 `(("libyaml" ,libyaml)))
2832 (home-page "http://pyyaml.org/wiki/PyYAML")
2833 (synopsis "YAML parser and emitter for Python")
2834 (description
2835 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2836 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2837 API, and sensible error messages. PyYAML supports standard YAML tags and
2838 provides Python-specific tags that allow to represent an arbitrary Python
2839 object.")
2840 (license license:expat)))
2841
2842 (define-public python2-pyyaml
2843 (package-with-python2 python-pyyaml))
2844
2845 (define-public python-virtualenv
2846 (package
2847 (name "python-virtualenv")
2848 (version "15.0.3")
2849 (source
2850 (origin
2851 (method url-fetch)
2852 (uri (pypi-uri "virtualenv" version))
2853 (sha256
2854 (base32
2855 "07cbajzk8l05k5zhlw0b9wbf2is65bl9v6zrn2a0iyn57w6pd73d"))))
2856 (build-system python-build-system)
2857 (arguments
2858 `(#:phases
2859 (modify-phases %standard-phases
2860 (replace 'check
2861 (lambda _
2862 ;; Disable failing test. See upstream bug report
2863 ;; https://github.com/pypa/virtualenv/issues/957
2864 (substitute* "tests/test_virtualenv.py"
2865 (("skipif.*") "skipif(True, reason=\"Guix\")\n"))
2866 (zero? (system* "py.test")))))))
2867 (native-inputs
2868 `(("python-mock" ,python-mock)
2869 ("python-pytest" ,python-pytest)))
2870 (home-page "https://virtualenv.pypa.io/")
2871 (synopsis "Virtual Python environment builder")
2872 (description
2873 "Virtualenv is a tool to create isolated Python environments.")
2874 (license license:expat)))
2875
2876 (define-public python2-virtualenv
2877 (package-with-python2 python-virtualenv))
2878
2879 (define-public python-markupsafe
2880 (package
2881 (name "python-markupsafe")
2882 (version "0.23")
2883 (source
2884 (origin
2885 (method url-fetch)
2886 (uri (string-append
2887 "https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-"
2888 version ".tar.gz"))
2889 (sha256
2890 (base32
2891 "1hvip33wva3fnmvfp9x5klqri7hpl1hkgqmjbss18nmrb7zimv54"))))
2892 (build-system python-build-system)
2893 (home-page "https://github.com/mitsuhiko/markupsafe")
2894 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
2895 (description
2896 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
2897 for Python.")
2898 (license license:bsd-3)))
2899
2900 (define-public python2-markupsafe
2901 (package-with-python2 python-markupsafe))
2902
2903 (define-public python-jinja2
2904 (package
2905 (name "python-jinja2")
2906 (version "2.8")
2907 (source
2908 (origin
2909 (method url-fetch)
2910 (uri (pypi-uri "Jinja2" version))
2911 (sha256
2912 (base32
2913 "1x0v41lp5m1pjix3l46zx02b7lqp2hflgpnxwkywxynvi3zz47xw"))))
2914 (build-system python-build-system)
2915 (propagated-inputs
2916 `(("python-markupsafe" ,python-markupsafe)))
2917 (home-page "http://jinja.pocoo.org/")
2918 (synopsis "Python template engine")
2919 (description
2920 "Jinja2 is a small but fast and easy to use stand-alone template engine
2921 written in pure Python.")
2922 (license license:bsd-3)))
2923
2924 (define-public python2-jinja2
2925 (package-with-python2 python-jinja2))
2926
2927 (define-public python-pystache
2928 (package
2929 (name "python-pystache")
2930 (version "0.5.4")
2931 (source (origin
2932 (method url-fetch)
2933 (uri (pypi-uri "pystache" version))
2934 (sha256
2935 (base32
2936 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
2937 (build-system python-build-system)
2938 (arguments
2939 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
2940 (home-page "http://defunkt.io/pystache/")
2941 (synopsis "Python logic-less template engine")
2942 (description
2943 "Pystache is a Python implementation of the framework agnostic,
2944 logic-free templating system Mustache.")
2945 (license license:expat)
2946 (properties `((python2-variant . ,(delay python2-pystache))))))
2947
2948 (define-public python2-pystache
2949 (package (inherit (package-with-python2
2950 (strip-python2-variant python-pystache)))
2951 (arguments
2952 `(#:python ,python-2
2953 #:phases
2954 (modify-phases %standard-phases
2955 (replace 'check
2956 (lambda _
2957 (zero? (system* "python" "test_pystache.py")))))))))
2958
2959 (define-public python-joblib
2960 (package
2961 (name "python-joblib")
2962 (version "0.10.3")
2963 (source (origin
2964 (method url-fetch)
2965 (uri (pypi-uri "joblib" version))
2966 (sha256
2967 (base32
2968 "0787k919zlfmgymprz5bzv0v1df5bbirlf3awrghmjgvkrd9dci9"))
2969 (modules '((guix build utils)))
2970 (snippet
2971 '(begin
2972 ;; Remove pre-compiled .pyc files from source.
2973 (for-each delete-file-recursively
2974 (find-files "." "__pycache__" #:directories? #t))
2975 (for-each delete-file (find-files "." "\\.pyc$"))
2976 #t))))
2977 (build-system python-build-system)
2978 (arguments
2979 `(#:phases
2980 (modify-phases %standard-phases
2981 (add-before 'check 'disable-failing-tests
2982 (lambda _
2983 ;; This numpydoc tests fails for unknown reasons
2984 (delete-file "doc/sphinxext/numpydoc/tests/test_docscrape.py")
2985 ;; This numpydoc test depends on matplotlib, which is not a
2986 ;; required input.
2987 (delete-file "doc/sphinxext/numpydoc/tests/test_plot_directive.py")
2988 ;; These tests fail to execute sys.executable
2989 (substitute* "joblib/test/test_parallel.py"
2990 (("import nose" line)
2991 (string-append "from nose.plugins.skip import SkipTest\n" line))
2992 (("def test_nested_parallel_warnings" line)
2993 (string-append "@SkipTest\n" line))
2994 (("def test_parallel_with_interactively_defined_functions" line)
2995 (string-append "@SkipTest\n" line)))
2996 #t)))))
2997 ;; Provide nose to enable tests command
2998 (native-inputs
2999 `(("python-nose" ,python-nose)
3000 ("python-sphinx" ,python-sphinx)
3001 ("python-docutils" ,python-docutils)
3002 ("python-numpydoc" ,python-numpydoc)))
3003 (home-page "http://pythonhosted.org/joblib/")
3004 (synopsis "Using Python functions as pipeline jobs")
3005 (description
3006 "Joblib is a set of tools to provide lightweight pipelining in Python.
3007 In particular, joblib offers: transparent disk-caching of the output values
3008 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3009 logging and tracing of the execution.")
3010 (license license:bsd-3)))
3011
3012 (define-public python2-joblib
3013 (package-with-python2 python-joblib))
3014
3015 (define-public python-docutils
3016 (package
3017 (name "python-docutils")
3018 (version "0.13.1")
3019 (source
3020 (origin
3021 (method url-fetch)
3022 (uri (pypi-uri "docutils" version))
3023 (sha256
3024 (base32
3025 "1gkma47i609jfs7dssxn4y9vsz06qi0l5q41nws0zgkpnrghz33i"))))
3026 (build-system python-build-system)
3027 (arguments
3028 '(#:tests? #f)) ; no setup.py test command
3029 (home-page "http://docutils.sourceforge.net/")
3030 (synopsis "Python Documentation Utilities")
3031 (description
3032 "Docutils is a modular system for processing documentation into useful
3033 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3034 reStructuredText.")
3035 ;; Most of the source code is public domain, but some source files are
3036 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3037 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3038
3039 (define-public python2-docutils
3040 (package-with-python2 python-docutils))
3041
3042 (define-public python-pygments
3043 (package
3044 (name "python-pygments")
3045 (version "2.1.3")
3046 (source
3047 (origin
3048 (method url-fetch)
3049 (uri (pypi-uri "Pygments" version))
3050 (sha256
3051 (base32
3052 "10axnp2wpjnq9g8wg53fx0c70dfxqrz498jyz8mrdx9a3flwir48"))))
3053 (build-system python-build-system)
3054 (arguments
3055 ;; FIXME: Tests require sphinx, which depends on this.
3056 '(#:tests? #f))
3057 (home-page "http://pygments.org/")
3058 (synopsis "Syntax highlighting")
3059 (description
3060 "Pygments is a syntax highlighting package written in Python.")
3061 (license license:bsd-2)))
3062
3063 (define-public python2-pygments
3064 (package-with-python2 python-pygments))
3065
3066 (define-public python-sphinx
3067 (package
3068 (name "python-sphinx")
3069 (version "1.5.1")
3070 (source
3071 (origin
3072 (method url-fetch)
3073 (uri (pypi-uri "Sphinx" version))
3074 (sha256
3075 (base32
3076 "1i8p9idnli4gr0y4x67yakbdk5w6a0xjzhrg6bg51y9d1fi7fslf"))))
3077 (build-system python-build-system)
3078 (arguments
3079 `(#:phases
3080 (modify-phases %standard-phases
3081 (replace 'check
3082 (lambda _
3083 ;; Requires Internet access.
3084 (delete-file "tests/test_build_linkcheck.py")
3085 (zero? (system* "make" "test")))))))
3086 (propagated-inputs
3087 `(("python-imagesize" ,python-imagesize)
3088 ("python-sphinx-alabaster-theme"
3089 ,python-sphinx-alabaster-theme)
3090 ("python-babel" ,python-babel)
3091 ("python-snowballstemmer" ,python-snowballstemmer)
3092 ("python-docutils" ,python-docutils)
3093 ("python-jinja2" ,python-jinja2)
3094 ("python-pygments" ,python-pygments)
3095 ("python-requests" ,python-requests)
3096 ("python-six" ,python-six)))
3097 (native-inputs
3098 `(("graphviz" ,graphviz)
3099 ("python-html5lib" ,python-html5lib)
3100 ("python-mock" ,python-mock)
3101 ("python-nose" ,python-nose)))
3102 (home-page "http://sphinx-doc.org/")
3103 (synopsis "Python documentation generator")
3104 (description "Sphinx is a tool that makes it easy to create documentation
3105 for Python projects or other documents consisting of multiple reStructuredText
3106 sources.")
3107 (license license:bsd-3)
3108 (properties `((python2-variant . ,(delay python2-sphinx))))))
3109
3110 (define-public python-sphinx-1.5.3
3111 (package
3112 (inherit python-sphinx)
3113 (name "python-sphinx")
3114 (version "1.5.3")
3115 (source
3116 (origin
3117 (method url-fetch)
3118 (uri (pypi-uri "Sphinx" version))
3119 (sha256
3120 (base32
3121 "0kw1axswbvaavr8ggyf4qr6hnisnrzlbkkcdada69vk1x9xjassg"))))
3122 (native-inputs
3123 `(("python-pytest" ,python-pytest-3.0)
3124 ,@(package-native-inputs python-sphinx)))))
3125
3126 (define-public python2-sphinx
3127 (let ((base (package-with-python2 (strip-python2-variant python-sphinx))))
3128 (package
3129 (inherit base)
3130 (native-inputs `(("python2-mock" ,python2-mock)
3131 ("python2-enum34" ,python2-enum34)
3132 ,@(package-native-inputs base)))
3133 (propagated-inputs `(("python2-pytz" ,python2-pytz)
3134 ,@(package-propagated-inputs base))))))
3135
3136 (define-public python-sphinx-rtd-theme
3137 (package
3138 (name "python-sphinx-rtd-theme")
3139 (version "0.1.6")
3140 (source
3141 (origin
3142 (method url-fetch)
3143 (uri (string-append "https://pypi.python.org/packages/source/s/"
3144 "sphinx_rtd_theme/sphinx_rtd_theme-"
3145 version ".tar.gz"))
3146 (sha256
3147 (base32
3148 "19nw3rn7awplcdrz63kg1njqwkbymfg9lwn7l2grhdyhyr2gaa8g"))))
3149 (build-system python-build-system)
3150 (arguments '(#:tests? #f)) ; No tests.
3151 (propagated-inputs
3152 `(("python-sphinx" ,python-sphinx)))
3153 (home-page "https://github.com/snide/sphinx_rtd_theme/")
3154 (synopsis "ReadTheDocs.org theme for Sphinx")
3155 (description "A theme for Sphinx used by ReadTheDocs.org.")
3156 (license license:expat)))
3157
3158 (define-public python2-sphinx-rtd-theme
3159 (package-with-python2 python-sphinx-rtd-theme))
3160
3161 (define-public python-rst.linker
3162 (package
3163 (name "python-rst.linker")
3164 (version "1.7")
3165 (source
3166 (origin
3167 (method url-fetch)
3168 (uri (pypi-uri "rst.linker" version))
3169 (sha256
3170 (base32
3171 "0bh4lnj2p1nh0wf5pgxgfbrp27xhb1rinahkb5j7s3qprq6qn0sr"))))
3172 (build-system python-build-system)
3173 (propagated-inputs
3174 `(("python-dateutil" ,python-dateutil)
3175 ("python-six" ,python-six)))
3176 (native-inputs
3177 `(("python-setuptools-scm" ,python-setuptools-scm)))
3178 ;; Test would require path.py, which would introduce a cyclic dependence.
3179 (arguments `(#:tests? #f))
3180 ;; Note: As of version 1.7 the documentation is not worth building.
3181 (home-page "https://github.com/jaraco/rst.linker")
3182 (synopsis "Sphinx plugin to add links and timestamps")
3183 (description "rst.linker allows to automatically replace text by a
3184 reStructuredText external reference or timestamps. It's primary purpose is to
3185 augment the changelog, but it can be used for other documents, too.")
3186 (license license:expat)))
3187
3188 (define-public python2-rst.linker
3189 (package-with-python2 python-rst.linker))
3190
3191 (define-public python-feedgenerator
3192 (package
3193 (name "python-feedgenerator")
3194 (version "1.9")
3195 (source
3196 (origin
3197 (method url-fetch)
3198 (uri (pypi-uri "feedgenerator" version))
3199 (sha256
3200 (base32
3201 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3202 (modules '((guix build utils)))
3203 (snippet
3204 '(begin
3205 ;; Remove pre-compiled .pyc files from source.
3206 (for-each delete-file-recursively
3207 (find-files "." "__pycache__" #:directories? #t))
3208 (for-each delete-file (find-files "." "\\.pyc$"))
3209 #t))))
3210 (build-system python-build-system)
3211 (propagated-inputs
3212 `(("python-pytz" ,python-pytz)
3213 ("python-six" ,python-six)))
3214 (home-page "https://github.com/getpelican/feedgenerator")
3215 (synopsis
3216 "Standalone version of Django's Atom/RSS feed generator")
3217 (description
3218 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3219 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3220 (license license:bsd-3)))
3221
3222 (define-public python2-feedgenerator
3223 (package-with-python2 python-feedgenerator))
3224
3225 (define-public python-blinker
3226 (package
3227 (name "python-blinker")
3228 (version "1.4")
3229 (source
3230 (origin
3231 (method url-fetch)
3232 (uri (pypi-uri "blinker" version))
3233 (sha256
3234 (base32
3235 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3236 (build-system python-build-system)
3237 (home-page "http://pythonhosted.org/blinker/")
3238 (synopsis "Fast, simple object-to-object and broadcast signaling")
3239 (description
3240 "Blinker provides a fast dispatching system that allows any number of
3241 interested parties to subscribe to events, or \"signals\".")
3242 (license license:expat)))
3243
3244 (define-public python2-blinker
3245 (package-with-python2 python-blinker))
3246
3247 (define-public pelican
3248 (package
3249 (name "pelican")
3250 (version "3.6.3")
3251 (source
3252 (origin
3253 (method url-fetch)
3254 (uri (pypi-uri "pelican" version))
3255 (sha256
3256 (base32
3257 "1hn94rb4q3zmcq16in055xikal4dba5hfx3zznq7warllcgc9f8k"))))
3258 (build-system python-build-system)
3259 (propagated-inputs
3260 `(("python-feedgenerator" ,python-feedgenerator)
3261 ("python-jinja2" ,python-jinja2)
3262 ("python-pygments" ,python-pygments)
3263 ("python-docutils" ,python-docutils)
3264 ("python-pytz" ,python-pytz)
3265 ("python-blinker" ,python-blinker)
3266 ("python-unidecode" ,python-unidecode)
3267 ("python-six" ,python-six)
3268 ("python-dateutil" ,python-dateutil)))
3269 (home-page "http://getpelican.com/")
3270 (arguments
3271 `(;; XXX Requires a lot more packages to do unit tests :P
3272 #:tests? #f
3273 #:phases (modify-phases %standard-phases
3274 (add-before
3275 'install 'adjust-requires
3276 ;; Since feedgenerator is installed from git, it doesn't
3277 ;; conform to the version requirements.
3278 ;;
3279 ;; We *do have* "feedgenerator >= 1.6", but strip off the
3280 ;; version requirement so setuptools doesn't get confused.
3281 (lambda _
3282 (substitute* "setup.py"
3283 (("['\"]feedgenerator.*?['\"]")
3284 "'feedgenerator'")))))))
3285 (synopsis "Python-based static site publishing system")
3286 (description
3287 "Pelican is a tool to generate a static blog from reStructuredText,
3288 Markdown input files, and more. Pelican uses Jinja2 for templating
3289 and is very extensible.")
3290 (license license:agpl3+)))
3291
3292 (define-public python-scikit-learn
3293 (package
3294 (name "python-scikit-learn")
3295 (version "0.18.1")
3296 (source
3297 (origin
3298 (method url-fetch)
3299 (uri (string-append
3300 "https://github.com/scikit-learn/scikit-learn/archive/"
3301 version ".tar.gz"))
3302 (file-name (string-append name "-" version ".tar.gz"))
3303 (sha256
3304 (base32
3305 "1hwswckdmd27f7k1jvwdc0m4mqrgxl2s245yq1scq34v124bjqgq"))))
3306 (build-system python-build-system)
3307 (arguments
3308 `(#:phases
3309 (modify-phases %standard-phases
3310 (delete 'check)
3311 (add-after 'install 'check
3312 ;; Running tests from the source directory requires
3313 ;; an "inplace" build with paths relative to CWD.
3314 ;; http://scikit-learn.org/stable/developers/advanced_installation.html#testing
3315 ;; Use the installed version instead.
3316 (lambda* (#:key inputs outputs #:allow-other-keys)
3317 (add-installed-pythonpath inputs outputs)
3318 ;; some tests require access to "$HOME"
3319 (setenv "HOME" "/tmp")
3320 ;; Step out of the source directory just to be sure.
3321 (chdir "..")
3322 (zero? (system* "nosetests" "-v" "sklearn")))))))
3323 (inputs
3324 `(("openblas" ,openblas)))
3325 (native-inputs
3326 `(("python-nose" ,python-nose)
3327 ("python-cython" ,python-cython)))
3328 (propagated-inputs
3329 `(("python-numpy" ,python-numpy)
3330 ("python-scipy" ,python-scipy)))
3331 (home-page "http://scikit-learn.org/")
3332 (synopsis "Machine Learning in Python")
3333 (description
3334 "Scikit-learn provides simple and efficient tools for data
3335 mining and data analysis.")
3336 (license license:bsd-3)))
3337
3338 (define-public python2-scikit-learn
3339 (package-with-python2 python-scikit-learn))
3340
3341 (define-public python-scikit-image
3342 (package
3343 (name "python-scikit-image")
3344 (version "0.11.3")
3345 (source
3346 (origin
3347 (method url-fetch)
3348 (uri (string-append
3349 "https://pypi.python.org/packages/source/s/scikit-image/scikit-image-"
3350 version ".tar.gz"))
3351 (sha256
3352 (base32 "0jz416fqvpahqyffw8plmszzfj669w8wvf3y9clnr5lr6a7md3kn"))))
3353 (build-system python-build-system)
3354 (arguments
3355 ;; TODO: Some tests require running X11 server. Disable them?
3356 '(#:tests? #f))
3357 ;; See DEPENDS.txt for the list of build and run time requiremnts
3358 (propagated-inputs
3359 `(("python-matplotlib" ,python-matplotlib)
3360 ("python-networkx" ,python-networkx)
3361 ("python-scipy" ,python-scipy)
3362 ("python-pillow" ,python-pillow)))
3363 (native-inputs
3364 `(("python-numpy" ,python-numpy)
3365 ("python-cython" ,python-cython)
3366 ("python-six" ,python-six)))
3367 (home-page "http://scikit-image.org/")
3368 (synopsis "Image processing in Python")
3369 (description
3370 "Scikit-image is a collection of algorithms for image processing.")
3371 (license license:bsd-3)))
3372
3373 (define-public python2-scikit-image
3374 (package-with-python2 python-scikit-image))
3375
3376 (define-public python-redis
3377 (package
3378 (name "python-redis")
3379 (version "2.10.5")
3380 (source
3381 (origin
3382 (method url-fetch)
3383 (uri (pypi-uri "redis" version))
3384 (sha256
3385 (base32 "0csmrkxb29x7xs9b51zplwkkq2hwnbh9jns1g85dykn5rxmaxysx"))))
3386 (build-system python-build-system)
3387 ;; Tests require a running Redis server
3388 (arguments '(#:tests? #f))
3389 ;; As long as we are not running test, we do not need this input :-)
3390 ;;(native-inputs
3391 ;; `(("python-pytest" ,python-pytest)))
3392 (home-page "https://github.com/andymccurdy/redis-py")
3393 (synopsis "Redis Python client")
3394 (description
3395 "This package provides a Python interface to the Redis key-value store.")
3396 (license license:expat)))
3397
3398 (define-public python2-redis
3399 (package-with-python2 python-redis))
3400
3401 (define-public python-rq
3402 (package
3403 (name "python-rq")
3404 (version "0.7.1")
3405 (source
3406 (origin
3407 (method url-fetch)
3408 (uri (pypi-uri "rq" version))
3409 (sha256
3410 (base32 "0gaq5pnh0zy46r8jvygi0ifbvz3pq6i7xla78ijcgjw0x77qzsdh"))))
3411 (build-system python-build-system)
3412 (propagated-inputs
3413 `(("python-click" ,python-click)
3414 ("python-redis" ,python-redis)))
3415 (home-page "http://python-rq.org/")
3416 (synopsis "Simple job queues for Python")
3417 (description
3418 "RQ (Redis Queue) is a simple Python library for queueing jobs and
3419 processing them in the background with workers. It is backed by Redis and it
3420 is designed to have a low barrier to entry.")
3421 (license license:bsd-2)))
3422
3423 (define-public python2-rq
3424 (package-with-python2 python-rq))
3425
3426 (define-public python-cython
3427 (package
3428 (name "python-cython")
3429 (version "0.25.2")
3430 (source
3431 (origin
3432 (method url-fetch)
3433 (uri (pypi-uri "Cython" version))
3434 (patches (search-patches "python-cython-fix-tests-32bit.patch"))
3435 (sha256
3436 (base32
3437 "01h3lrf6d98j07iakifi81qjszh6faa37ibx7ylva1vsqbwx2hgi"))))
3438 (build-system python-build-system)
3439 ;; we need the full python package and not just the python-wrapper
3440 ;; because we need libpython3.3m.so
3441 (inputs
3442 `(("python" ,python)))
3443 (arguments
3444 `(#:phases
3445 (modify-phases %standard-phases
3446 (add-before 'check 'set-HOME
3447 ;; some tests require access to "$HOME/.cython"
3448 (lambda _ (setenv "HOME" "/tmp")))
3449 (replace 'check
3450 (lambda _ (zero? (system* "python" "runtests.py" "-vv")))))))
3451 (home-page "http://cython.org/")
3452 (synopsis "C extensions for Python")
3453 (description "Cython is an optimising static compiler for both the Python
3454 programming language and the extended Cython programming language. It makes
3455 writing C extensions for Python as easy as Python itself.")
3456 (license license:asl2.0)
3457 (properties `((python2-variant . ,(delay python2-cython))))))
3458
3459 (define-public python2-cython
3460 (package (inherit (package-with-python2
3461 (strip-python2-variant python-cython)))
3462 (name "python2-cython")
3463 (inputs
3464 `(("python-2" ,python-2))))) ; this is not automatically changed
3465
3466 ;; The RPython toolchain currently does not support Python 3.
3467 (define-public python2-rpython
3468 (package
3469 (name "python2-rpython")
3470 (version "0.1.4")
3471 (source
3472 (origin
3473 (method url-fetch)
3474 (uri (pypi-uri "rpython" version))
3475 (sha256
3476 (base32
3477 "07pps06fq4c4wmi5ii0sgh9zgwniz5y7frqhm28g3a154l163fxc"))))
3478 (build-system python-build-system)
3479 (arguments `(#:python ,python-2))
3480 (native-inputs
3481 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
3482 (home-page "https://rpython.readthedocs.org")
3483 (synopsis "Framework for implementing interpreters and virtual machines")
3484 (description "RPython is a translation and support framework for
3485 producing implementations of dynamic languages, emphasizing a clean separation
3486 between language specification and implementation aspects.")
3487 (license license:expat)))
3488
3489 (define-public python-numpy
3490 (package
3491 (name "python-numpy")
3492 (version "1.12.0")
3493 (source
3494 (origin
3495 (method url-fetch)
3496 (uri (string-append
3497 "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
3498 (file-name (string-append name "-" version ".tar.gz"))
3499 (sha256
3500 (base32
3501 "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d"))))
3502 (build-system python-build-system)
3503 (inputs
3504 `(("openblas" ,openblas)
3505 ("lapack" ,lapack)))
3506 (native-inputs
3507 `(("python-cython" ,python-cython)
3508 ("python-nose" ,python-nose)
3509 ("gfortran" ,gfortran)))
3510 (arguments
3511 `(#:phases
3512 (modify-phases %standard-phases
3513 (add-before 'build 'set-environment-variables
3514 (lambda* (#:key inputs #:allow-other-keys)
3515 (call-with-output-file "site.cfg"
3516 (lambda (port)
3517 (format port
3518 "[openblas]
3519 libraries = openblas
3520 library_dirs = ~a/lib
3521 include_dirs = ~a/include
3522
3523 # backslash-n to make emacs happy
3524 \n[lapack]
3525 lapack_libs = lapack
3526 library_dirs = ~a/lib
3527 include_dirs = ~a/include
3528 "
3529 (assoc-ref inputs "openblas")
3530 (assoc-ref inputs "openblas")
3531 (assoc-ref inputs "lapack")
3532 (assoc-ref inputs "lapack"))))
3533 ;; Use "gcc" executable, not "cc".
3534 (substitute* "numpy/distutils/system_info.py"
3535 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
3536 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
3537 #t))
3538 ;; Tests can only be run after the library has been installed and not
3539 ;; within the source directory.
3540 (delete 'check)
3541 (add-after 'install 'check
3542 (lambda* (#:key outputs inputs #:allow-other-keys)
3543 ;; Make installed package available for running the tests
3544 (add-installed-pythonpath inputs outputs)
3545 (with-directory-excursion "/tmp"
3546 (zero? (system* "python" "-c"
3547 "import numpy; numpy.test(verbose=2)"))))))))
3548 (home-page "http://www.numpy.org/")
3549 (synopsis "Fundamental package for scientific computing with Python")
3550 (description "NumPy is the fundamental package for scientific computing
3551 with Python. It contains among other things: a powerful N-dimensional array
3552 object, sophisticated (broadcasting) functions, tools for integrating C/C++
3553 and Fortran code, useful linear algebra, Fourier transform, and random number
3554 capabilities.")
3555 (license license:bsd-3)))
3556
3557 (define-public python2-numpy
3558 (package-with-python2 python-numpy))
3559
3560 (define-public python-munch
3561 (package
3562 (name "python-munch")
3563 (version "2.0.4")
3564 (source
3565 (origin
3566 (method url-fetch)
3567 (uri (pypi-uri "munch" version))
3568 (sha256
3569 (base32
3570 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
3571 (build-system python-build-system)
3572 (home-page "https://github.com/Infinidat/munch")
3573 (synopsis "Dot-accessible dictionary")
3574 (description "Munch is a dot-accessible dictionary similar to JavaScript
3575 objects.")
3576 (license license:expat)))
3577
3578 (define-public python2-munch
3579 (package-with-python2 python-munch))
3580
3581 (define-public python2-fastlmm
3582 (package
3583 (name "python2-fastlmm")
3584 (version "0.2.21")
3585 (source
3586 (origin
3587 (method url-fetch)
3588 (uri (pypi-uri "fastlmm" version ".zip"))
3589 (sha256
3590 (base32
3591 "1q8c34rpmwkfy3r4d5172pzdkpfryj561897z9r3x22gq7813x1m"))))
3592 (build-system python-build-system)
3593 (arguments
3594 `(#:python ,python-2)) ; only Python 2.7 is supported
3595 (propagated-inputs
3596 `(("python2-numpy" ,python2-numpy)
3597 ("python2-scipy" ,python2-scipy)
3598 ("python2-matplotlib" ,python2-matplotlib)
3599 ("python2-pandas" ,python2-pandas)
3600 ("python2-scikit-learn" ,python2-scikit-learn)
3601 ("python2-pysnptools" ,python2-pysnptools)))
3602 (native-inputs
3603 `(("unzip" ,unzip)
3604 ("python2-cython" ,python2-cython)
3605 ("python2-mock" ,python2-mock)
3606 ("python2-nose" ,python2-nose)))
3607 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
3608 (synopsis "Perform genome-wide association studies on large data sets")
3609 (description
3610 "FaST-LMM, which stands for Factored Spectrally Transformed Linear Mixed
3611 Models, is a program for performing both single-SNP and SNP-set genome-wide
3612 association studies (GWAS) on extremely large data sets.")
3613 (license license:asl2.0)))
3614
3615 (define-public python-numpy-documentation
3616 (package
3617 (name "python-numpy-documentation")
3618 (version (package-version python-numpy))
3619 (source (package-source python-numpy))
3620 (build-system python-build-system)
3621 (native-inputs
3622 `(("python-matplotlib" ,python-matplotlib)
3623 ("python-numpy" ,python-numpy)
3624 ("pkg-config" ,pkg-config)
3625 ("python-sphinx" ,python-sphinx)
3626 ("python-numpydoc" ,python-numpydoc)
3627 ("texlive" ,texlive)
3628 ("texinfo" ,texinfo)
3629 ("perl" ,perl)
3630 ("scipy-sphinx-theme"
3631 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
3632 (method git-fetch)
3633 (uri (git-reference
3634 (url "https://github.com/scipy/scipy-sphinx-theme.git")
3635 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
3636 (sha256
3637 (base32
3638 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
3639 ,@(package-native-inputs python-numpy)))
3640 (arguments
3641 `(#:tests? #f ; we're only generating the documentation
3642 #:phases
3643 (modify-phases %standard-phases
3644 (delete 'build)
3645 (replace 'install
3646 (lambda* (#:key inputs outputs #:allow-other-keys)
3647 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
3648 (doc (string-append
3649 data "/doc/" ,name "-"
3650 ,(package-version python-numpy)))
3651 (info-reader (string-append data "/info"))
3652 (html (string-append doc "/html"))
3653 (scipy-sphinx-theme "scipy-sphinx-theme")
3654 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
3655 (pyver ,(string-append "PYVER=")))
3656 (with-directory-excursion "doc"
3657 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
3658 (mkdir-p html)
3659 (system* "make" "html" pyver)
3660 (system* "make" "latex" "PAPER=a4" pyver)
3661 (system* "make" "-C" "build/latex"
3662 "all-pdf" "PAPER=a4" pyver)
3663 ;; FIXME: Generation of the info file fails.
3664 ;; (system* "make" "info" pyver)
3665 ;; (mkdir-p info)
3666 ;; (copy-file "build/texinfo/numpy.info"
3667 ;; (string-append info "/numpy.info"))
3668 (for-each (lambda (file)
3669 (copy-file (string-append "build/latex" file)
3670 (string-append doc file)))
3671 '("/numpy-ref.pdf" "/numpy-user.pdf"))
3672 (with-directory-excursion "build/html"
3673 (for-each (lambda (file)
3674 (let* ((dir (dirname file))
3675 (tgt-dir (string-append html "/" dir)))
3676 (unless (equal? "." dir)
3677 (mkdir-p tgt-dir))
3678 (install-file file html)))
3679 (find-files "." ".*")))))
3680 #t)))))
3681 (home-page (package-home-page python-numpy))
3682 (synopsis "Documentation for the python-numpy package")
3683 (description (package-description python-numpy))
3684 (license (package-license python-numpy))))
3685
3686 (define-public python2-numpy-documentation
3687 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
3688 (package
3689 (inherit numpy-documentation)
3690 (native-inputs `(("python2-functools32" ,python2-functools32)
3691 ,@(package-native-inputs numpy-documentation))))))
3692
3693 (define-public python-pygit2
3694 (package
3695 (name "python-pygit2")
3696 (version "0.25.0")
3697 (source
3698 (origin
3699 (method url-fetch)
3700 (uri (pypi-uri "pygit2" version))
3701 (sha256
3702 (base32
3703 "0wf5rp0fvrw7j3j18dvwjq6xqlbm611wd55aphrfpps0v1gxh3ny"))
3704 (patches
3705 (search-patches "python-pygit2-disable-network-tests.patch"))))
3706 (build-system python-build-system)
3707 (propagated-inputs
3708 `(("python-six" ,python-six)
3709 ("python-cffi" ,python-cffi)
3710 ("libgit2" ,libgit2)
3711 ("python-tox" ,python-tox)))
3712 (home-page "https://github.com/libgit2/pygit2")
3713 (synopsis "Python bindings for libgit2")
3714 (description "Pygit2 is a set of Python bindings to the libgit2 shared
3715 library, libgit2 implements Git plumbing.")
3716 ;; GPL2.0 only, with linking exception.
3717 (license license:gpl2)))
3718
3719 (define-public python2-pygit2
3720 (package-with-python2 python-pygit2))
3721
3722 (define-public python-pyparsing
3723 (package
3724 (name "python-pyparsing")
3725 (version "2.0.3")
3726 (source
3727 (origin
3728 (method url-fetch)
3729 (uri (string-append "mirror://sourceforge/pyparsing/pyparsing"
3730 "/pyparsing-" version
3731 "/pyparsing-" version ".tar.gz"))
3732 (sha256
3733 (base32
3734 "0kw4py7gn45j93q8r7bzajfrjdc3xlsn2yzln41lf9zmrghjkrq6"))))
3735 (build-system python-build-system)
3736 (outputs '("out" "doc"))
3737 (arguments
3738 `(#:tests? #f ; no test target
3739 #:modules ((guix build python-build-system)
3740 (guix build utils))
3741 #:phases
3742 (alist-cons-after
3743 'install 'install-doc
3744 (lambda* (#:key outputs #:allow-other-keys)
3745 (let* ((doc (string-append (assoc-ref outputs "doc")
3746 "/share/doc/" ,name "-" ,version))
3747 (html-doc (string-append doc "/html"))
3748 (examples (string-append doc "/examples")))
3749 (mkdir-p html-doc)
3750 (mkdir-p examples)
3751 (for-each
3752 (lambda (dir tgt)
3753 (map (lambda (file)
3754 (install-file file tgt))
3755 (find-files dir ".*")))
3756 (list "docs" "htmldoc" "examples")
3757 (list doc html-doc examples))))
3758 %standard-phases)))
3759 (home-page "http://pyparsing.wikispaces.com")
3760 (synopsis "Python parsing class library")
3761 (description
3762 "The pyparsing module is an alternative approach to creating and
3763 executing simple grammars, vs. the traditional lex/yacc approach, or the use
3764 of regular expressions. The pyparsing module provides a library of classes
3765 that client code uses to construct the grammar directly in Python code.")
3766 (license license:expat)))
3767
3768 (define-public python2-pyparsing
3769 (package-with-python2 python-pyparsing))
3770
3771 (define-public python-numpydoc
3772 (package
3773 (name "python-numpydoc")
3774 (version "0.5")
3775 (source
3776 (origin
3777 (method url-fetch)
3778 (uri (string-append
3779 "https://pypi.python.org/packages/source/n/numpydoc/numpydoc-"
3780 version ".tar.gz"))
3781 (sha256
3782 (base32
3783 "0d4dnifaxkll50jx6czj05y8cb4ny60njd2wz299sj2jxfy51w4k"))
3784 (modules '((guix build utils)))
3785 (snippet
3786 '(begin
3787 ;; Drop a test requiring matplotlib, which we cannot add as an
3788 ;; input since it would create a circular dependency: Extend the
3789 ;; test for Python 3, where it is already dropped, to Python 2.
3790 (substitute* "numpydoc/tests/test_plot_directive.py"
3791 (("3") "2"))))))
3792 (build-system python-build-system)
3793 (propagated-inputs
3794 `(("python-sphinx" ,python-sphinx)))
3795 (native-inputs
3796 `(("python-nose" ,python-nose)))
3797 (home-page "https://pypi.python.org/pypi/numpydoc")
3798 (synopsis
3799 "Numpy's Sphinx extensions")
3800 (description
3801 "Sphinx extension to support docstrings in Numpy format.")
3802 (license license:bsd-2)))
3803
3804 (define-public python2-numpydoc
3805 (package-with-python2 python-numpydoc))
3806
3807 (define-public python-numexpr
3808 (package
3809 (name "python-numexpr")
3810 (version "2.6.1")
3811 (source
3812 (origin
3813 (method url-fetch)
3814 (uri (pypi-uri "numexpr" version))
3815 (sha256
3816 (base32
3817 "01lsja72m32z0i5p8rwxbfyzk4mplh72k2a140nwh8vv4wpyfbnv"))))
3818 (build-system python-build-system)
3819 (arguments `(#:tests? #f)) ; no tests included
3820 (propagated-inputs
3821 `(("python-numpy" ,python-numpy)))
3822 (home-page "https://github.com/pydata/numexpr")
3823 (synopsis "Fast numerical expression evaluator for NumPy")
3824 (description
3825 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
3826 expressions that operate on arrays are accelerated and use less memory than
3827 doing the same calculation in Python. In addition, its multi-threaded
3828 capabilities can make use of all your cores, which may accelerate
3829 computations, most specially if they are not memory-bounded (e.g. those using
3830 transcendental functions).")
3831 (license license:expat)))
3832
3833 (define-public python2-numexpr
3834 (package-with-python2 python-numexpr))
3835
3836 (define-public python-cycler
3837 (package
3838 (name "python-cycler")
3839 (version "0.10.0")
3840 (source (origin
3841 (method url-fetch)
3842 (uri (pypi-uri "cycler" version))
3843 (sha256
3844 (base32
3845 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
3846 (build-system python-build-system)
3847 (arguments
3848 ;; XXX: The current version requires 'coveralls' which we don't have.
3849 ;; Enable this for the next release which uses 'python-pytest'.
3850 '(#:tests? #f))
3851 (propagated-inputs
3852 `(("python-six" ,python-six)))
3853 (home-page "http://matplotlib.org/cycler/")
3854 (synopsis "Composable keyword argument iterator")
3855 (description
3856 "When using @code{matplotlib} and plotting more than one line, it is
3857 common to want to be able to want to be able to cycle over one or more artist
3858 styles; but the plotting logic can quickly become involved.
3859 To address this and enable easy cycling over arbitrary @code{kwargs}, the
3860 @code{Cycler} class was developed.")
3861 (license license:bsd-3)))
3862
3863 (define-public python2-cycler
3864 (package-with-python2 python-cycler))
3865
3866 (define-public python-colorspacious
3867 (package
3868 (name "python-colorspacious")
3869 (version "1.1.0")
3870 (source
3871 (origin
3872 (method url-fetch)
3873 (uri (string-append "https://github.com/njsmith/colorspacious/archive/v"
3874 version ".tar.gz"))
3875 (file-name (string-append name "-" version))
3876 (sha256
3877 (base32 "1vflh5jm32qb0skza2i8pjacv09w6gq84fqpp2nj77s0rbmzgr4k"))))
3878 (build-system python-build-system)
3879 (propagated-inputs
3880 `(("python-numpy" ,python-numpy)))
3881 (native-inputs
3882 `(("python-nose" ,python-nose)))
3883 (arguments
3884 `(#:phases
3885 (modify-phases %standard-phases
3886 (replace 'check
3887 (lambda _
3888 (zero? (system* "nosetests" "--all-modules" "-v" "colorspacious")))))))
3889 (home-page "https://github.com/njsmith/colorspacious")
3890 (synopsis "Python library for colorspace conversions")
3891 (description "@code{colorspacious} is a Python library that lets you
3892 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
3893 (license license:expat)))
3894
3895 (define-public python2-colorspacious
3896 (package-with-python2 python-colorspacious))
3897
3898 (define-public python-matplotlib
3899 (package
3900 (name "python-matplotlib")
3901 (version "2.0.0")
3902 (source
3903 (origin
3904 (method url-fetch)
3905 (uri (string-append
3906 "https://github.com/matplotlib/matplotlib/archive/v" version ".tar.gz"))
3907 (file-name (string-append name "-" version ".tar.gz"))
3908 (sha256
3909 (base32
3910 "0w3k5m5qb3wsd7yhvmg042xddvligklvcq2visk2c5wnph3hhsln"))))
3911 (build-system python-build-system)
3912 (propagated-inputs ; the following packages are all needed at run time
3913 `(("python-cycler" ,python-cycler)
3914 ("python-pyparsing" ,python-pyparsing)
3915 ("python-pygobject" ,python-pygobject)
3916 ("gobject-introspection" ,gobject-introspection)
3917 ("python-tkinter" ,python "tk")
3918 ("python-dateutil" ,python-dateutil)
3919 ("python-numpy" ,python-numpy)
3920 ("python-pillow" ,python-pillow)
3921 ("python-pytz" ,python-pytz)
3922 ("python-six" ,python-six)
3923 ;; The 'gtk+' package (and 'gdk-pixbuf', 'atk' and 'pango' propagated
3924 ;; from 'gtk+') provides the required 'typelib' files used by
3925 ;; 'gobject-introspection'. The location of these files is set with the
3926 ;; help of the environment variable GI_TYPELIB_PATH. At build time this
3927 ;; is done automatically by a 'native-search-path' procedure. However,
3928 ;; at run-time the user must set this variable as follows:
3929 ;;
3930 ;; export GI_TYPELIB_PATH=~/.guix-profile/lib/girepository-1.0
3931 ("gtk+" ,gtk+)
3932 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
3933 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
3934 ;; object. For this reason we need to import both libraries.
3935 ;; https://pythonhosted.org/cairocffi/cffi_api.html#converting-pycairo
3936 ("python-pycairo" ,python-pycairo)
3937 ("python-cairocffi" ,python-cairocffi)))
3938 (inputs
3939 `(("libpng" ,libpng)
3940 ("imagemagick" ,imagemagick)
3941 ("freetype" ,freetype)
3942 ("cairo" ,cairo)
3943 ("glib" ,glib)
3944 ;; FIXME: Add backends when available.
3945 ;("python-wxpython" ,python-wxpython)
3946 ("python-pyqt" ,python-pyqt)
3947 ("tcl" ,tcl)
3948 ("tk" ,tk)))
3949 (native-inputs
3950 `(("pkg-config" ,pkg-config)
3951 ("python-nose" ,python-nose)
3952 ("python-mock" ,python-mock)))
3953 (arguments
3954 `(#:phases
3955 (modify-phases %standard-phases
3956 (add-before 'build 'configure-environment
3957 (lambda* (#:key outputs inputs #:allow-other-keys)
3958 (let ((cairo (assoc-ref inputs "cairo"))
3959 (gtk+ (assoc-ref inputs "gtk+")))
3960 ;; Setting these directories in the 'basedirlist' of 'setup.cfg'
3961 ;; has not effect.
3962 (setenv "LD_LIBRARY_PATH"
3963 (string-append cairo "/lib:" gtk+ "/lib"))
3964 (setenv "HOME" (getcwd))
3965 (call-with-output-file "setup.cfg"
3966 (lambda (port)
3967 (format port "[directories]~%
3968 basedirlist = ~a,~a~%
3969 [rc_options]~%
3970 backend = TkAgg~%"
3971 (assoc-ref inputs "tcl")
3972 (assoc-ref inputs "tk")))))
3973 #t)))))
3974 (home-page "http://matplotlib.org")
3975 (synopsis "2D plotting library for Python")
3976 (description
3977 "Matplotlib is a Python 2D plotting library which produces publication
3978 quality figures in a variety of hardcopy formats and interactive environments
3979 across platforms. Matplotlib can be used in Python scripts, the python and
3980 ipython shell, web application servers, and six graphical user interface
3981 toolkits.")
3982 (license license:psfl)
3983 (properties `((python2-variant . ,(delay python2-matplotlib))))))
3984
3985 (define-public python2-matplotlib
3986 (let ((matplotlib (package-with-python2
3987 (strip-python2-variant python-matplotlib))))
3988 (package (inherit matplotlib)
3989 ;; Make sure to use special packages for Python 2 instead
3990 ;; of those automatically rewritten by package-with-python2.
3991 (propagated-inputs
3992 `(("python2-pycairo" ,python2-pycairo)
3993 ("python2-functools32" ,python2-functools32)
3994 ("python2-pygobject-2" ,python2-pygobject-2)
3995 ("python2-subprocess32" ,python2-subprocess32)
3996 ("python2-tkinter" ,python-2 "tk")
3997 ,@(fold alist-delete (package-propagated-inputs matplotlib)
3998 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
3999
4000 (define-public python-matplotlib-documentation
4001 (package
4002 (name "python-matplotlib-documentation")
4003 (version (package-version python-matplotlib))
4004 (source (package-source python-matplotlib))
4005 (build-system python-build-system)
4006 (native-inputs
4007 `(("python-matplotlib" ,python-matplotlib)
4008 ("python-colorspacious" ,python-colorspacious)
4009 ("python-sphinx" ,python-sphinx)
4010 ("python-numpydoc" ,python-numpydoc)
4011 ("python-ipython" ,python-ipython)
4012 ("python-mock" ,python-mock)
4013 ("graphviz" ,graphviz)
4014 ("texlive" ,texlive)
4015 ("texinfo" ,texinfo)
4016 ,@(package-native-inputs python-matplotlib)))
4017 (arguments
4018 `(#:tests? #f ; we're only generating documentation
4019 #:phases
4020 (modify-phases %standard-phases
4021 (replace 'build
4022 (lambda _
4023 (chdir "doc")
4024 ;; Produce pdf in 'A4' format.
4025 (substitute* "conf.py"
4026 (("latex_paper_size = 'letter'") "")
4027 ;; latex_paper_size is deprecated -> set paper size using
4028 ;; latex_elements
4029 (("latex_elements\\['pointsize'\\] = '11pt'" match)
4030 ;; insert at a point where latex_elements{} is defined:
4031 (string-append match "\nlatex_elements['papersize'] = 'a4paper'")))
4032 (zero? (system* "python" "make.py" "html" "latex" "texinfo"))))
4033 (replace 'install
4034 (lambda* (#:key inputs outputs #:allow-other-keys)
4035 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4036 (doc (string-append data "/doc/python-matplotlib-" ,version))
4037 (info (string-append data "/info"))
4038 (html (string-append doc "/html")))
4039 (mkdir-p html)
4040 (mkdir-p info)
4041 (copy-recursively "build/html" html)
4042 (symlink (string-append html "/_images")
4043 (string-append info "/matplotlib-figures"))
4044 (with-directory-excursion "build/texinfo"
4045 (substitute* "matplotlib.texi"
4046 (("@image\\{([^,]*)" all file)
4047 (string-append "@image{matplotlib-figures/" file)))
4048 (symlink (string-append html "/_images")
4049 "./matplotlib-figures")
4050 (system* "makeinfo" "--no-split"
4051 "-o" "matplotlib.info" "matplotlib.texi"))
4052 (copy-file "build/texinfo/matplotlib.info"
4053 (string-append info "/matplotlib.info"))
4054 (copy-file "build/latex/Matplotlib.pdf"
4055 (string-append doc "/Matplotlib.pdf")))
4056 #t)))))
4057 (home-page (package-home-page python-matplotlib))
4058 (synopsis "Documentation for the python-matplotlib package")
4059 (description (package-description python-matplotlib))
4060 (license (package-license python-matplotlib))))
4061
4062 (define-public python2-matplotlib-documentation
4063 (package-with-python2 python-matplotlib-documentation))
4064
4065 (define-public python2-pysnptools
4066 (package
4067 (name "python2-pysnptools")
4068 (version "0.3.9")
4069 (source
4070 (origin
4071 (method url-fetch)
4072 (uri (pypi-uri "pysnptools" version ".zip"))
4073 (sha256
4074 (base32
4075 "1wybggjzz8zw7aav4pjsg2h22xp17a1lghrprza1pxwlm7wf96y2"))))
4076 (build-system python-build-system)
4077 (arguments
4078 `(#:python ,python-2)) ; only Python 2.7 is supported
4079 (propagated-inputs
4080 `(("python2-numpy" ,python2-numpy)
4081 ("python2-scipy" ,python2-scipy)
4082 ("python2-pandas" ,python2-pandas)))
4083 (native-inputs
4084 `(("python2-cython" ,python2-cython)))
4085 (native-inputs
4086 `(("unzip" ,unzip)))
4087 (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/")
4088 (synopsis "Library for reading and manipulating genetic data")
4089 (description
4090 "PySnpTools is a library for reading and manipulating genetic data. It
4091 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4092 those files. It can also efficiently manipulate ranges of integers using set
4093 operators such as union, intersection, and difference.")
4094 (license license:asl2.0)))
4095
4096 (define-public python-rpy2
4097 (package
4098 (name "python-rpy2")
4099 (version "2.7.6")
4100 (source
4101 (origin
4102 (method url-fetch)
4103 (uri (pypi-uri "rpy2" version))
4104 (sha256
4105 (base32
4106 "0nhan2qvrw7b7gg5zddwa22kybdv3x1g26vkd7q8lvnkgzrs4dga"))))
4107 (build-system python-build-system)
4108 (arguments
4109 '(#:phases
4110 (modify-phases %standard-phases
4111 (delete 'check)
4112 (add-after 'install 'check
4113 (lambda* (#:key outputs inputs #:allow-other-keys)
4114 ;; It's easier to run tests after install.
4115 ;; Make installed package available for running the tests
4116 (add-installed-pythonpath inputs outputs)
4117 (zero? (system* "python" "-m" "rpy2.tests" "-v")))))))
4118 (propagated-inputs
4119 `(("python-six" ,python-six)))
4120 (inputs
4121 `(("readline" ,readline)
4122 ("icu4c" ,icu4c)
4123 ("pcre" ,pcre)
4124 ("r-minimal" ,r-minimal)
4125 ("r-survival" ,r-survival)))
4126 (native-inputs
4127 `(("zlib" ,zlib)))
4128 (home-page "http://rpy.sourceforge.net/")
4129 (synopsis "Python interface to the R language")
4130 (description "rpy2 is a redesign and rewrite of rpy. It is providing a
4131 low-level interface to R from Python, a proposed high-level interface,
4132 including wrappers to graphical libraries, as well as R-like structures and
4133 functions.")
4134 (license license:gpl3+)))
4135
4136 (define-public python2-rpy2
4137 (let ((rpy2 (package-with-python2 python-rpy2)))
4138 (package (inherit rpy2)
4139 (propagated-inputs
4140 `(("python2-singledispatch" ,python2-singledispatch)
4141 ,@(package-propagated-inputs rpy2))))))
4142
4143 (define-public python-scipy
4144 (package
4145 (name "python-scipy")
4146 (version "0.18.1")
4147 (source
4148 (origin
4149 (method url-fetch)
4150 (uri (string-append "https://github.com/scipy/scipy/archive/v"
4151 version ".tar.gz"))
4152 (file-name (string-append name "-" version ".tar.gz"))
4153 (sha256
4154 (base32
4155 "17slsrfawjp7if6qrlx03zhgp05350ginxx8ddpw9zqx43x905sn"))))
4156 (build-system python-build-system)
4157 (propagated-inputs
4158 `(("python-numpy" ,python-numpy)
4159 ("python-matplotlib" ,python-matplotlib)
4160 ("python-pyparsing" ,python-pyparsing)))
4161 (inputs
4162 `(("lapack" ,lapack)
4163 ("openblas" ,openblas)))
4164 (native-inputs
4165 `(("python-cython" ,python-cython)
4166 ("python-nose" ,python-nose)
4167 ("python-sphinx" ,python-sphinx)
4168 ("python-numpydoc" ,python-numpydoc)
4169 ("gfortran" ,gfortran)
4170 ("perl" ,perl)))
4171 (outputs '("out" "doc"))
4172 (arguments
4173 `(#:phases
4174 (modify-phases %standard-phases
4175 (add-before 'build 'configure-openblas
4176 (lambda* (#:key inputs #:allow-other-keys)
4177 (call-with-output-file "site.cfg"
4178 (lambda (port)
4179 (format port
4180 "[blas]
4181 libraries = openblas
4182 library_dirs = ~a/lib
4183 include_dirs = ~a/include
4184
4185 # backslash-n to make emacs happy
4186 \n[atlas]
4187 library_dirs = ~a/lib
4188 atlas_libs = openblas
4189 "
4190 (assoc-ref inputs "openblas")
4191 (assoc-ref inputs "openblas")
4192 (assoc-ref inputs "openblas"))))
4193 #t))
4194 (add-after 'install 'install-doc
4195 (lambda* (#:key inputs outputs #:allow-other-keys)
4196 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4197 (doc (string-append data "/doc/" ,name "-" ,version))
4198 (html (string-append doc "/html"))
4199 (pyver ,(string-append "PYVER=")))
4200 ;; Make installed package available for building the
4201 ;; documentation
4202 (add-installed-pythonpath inputs outputs)
4203 (with-directory-excursion "doc"
4204 ;; Fix generation of images for mathematical expressions.
4205 (substitute* (find-files "source" "conf\\.py")
4206 (("pngmath_use_preview = True")
4207 "pngmath_use_preview = False"))
4208 (mkdir-p html)
4209 (system* "make" "html" pyver)
4210 (with-directory-excursion "build/html"
4211 (for-each (lambda (file)
4212 (let* ((dir (dirname file))
4213 (tgt-dir (string-append html "/" dir)))
4214 (install-file file html)))
4215 (find-files "." ".*")))))
4216 #t))
4217 (add-after 'unpack 'fix-tests
4218 (lambda _
4219 (substitute* "scipy/integrate/tests/test_quadpack.py"
4220 (("libm.so") "libm.so.6"))
4221 #t))
4222 ;; Tests can only be run after the library has been installed and not
4223 ;; within the source directory.
4224 (delete 'check)
4225 (add-after 'install 'check
4226 (lambda* (#:key inputs outputs #:allow-other-keys)
4227 (add-installed-pythonpath inputs outputs)
4228 (with-directory-excursion "/tmp"
4229 (zero? (system* "python" "-c"
4230 "import scipy; scipy.test('full')")))
4231 #t)))))
4232 (home-page "http://www.scipy.org/")
4233 (synopsis "The Scipy library provides efficient numerical routines")
4234 (description "The SciPy library is one of the core packages that make up
4235 the SciPy stack. It provides many user-friendly and efficient numerical
4236 routines such as routines for numerical integration and optimization.")
4237 (properties `((python2-variant . ,(delay python2-scipy))))
4238 (license license:bsd-3)))
4239
4240 (define-public python2-scipy
4241 (package-with-python2
4242 (strip-python2-variant python-scipy)))
4243
4244 (define-public python-sockjs-tornado
4245 (package
4246 (name "python-sockjs-tornado")
4247 (version "1.0.3")
4248 (source
4249 (origin
4250 (method url-fetch)
4251 (uri (pypi-uri "sockjs-tornado" version))
4252 (sha256
4253 (base32
4254 "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
4255 (build-system python-build-system)
4256 (arguments
4257 `(;; There are no tests, and running the test phase requires missing
4258 ;; dependencies
4259 #:tests? #f))
4260 (propagated-inputs
4261 `(("python-tornado" ,python-tornado)))
4262 (home-page "http://github.com/mrjoes/sockjs-tornado/")
4263 (synopsis
4264 "SockJS python server implementation on top of Tornado framework")
4265 (description
4266 "SockJS-tornado provides the server side counterpart to a SockJS client
4267 library, through the Tornado framework.
4268
4269 SockJS provides a low latency, full duplex, cross-domain communication channel
4270 between a web browser and web server.")
4271 (license license:expat)))
4272
4273 (define-public python2-sockjs-tornado
4274 (package-with-python2 python-sockjs-tornado))
4275
4276 (define-public python-socksipy-branch
4277 (package
4278 (name "python-socksipy-branch")
4279 (version "1.01")
4280 (source
4281 (origin
4282 (method url-fetch)
4283 (uri (pypi-uri "SocksiPy-branch" version))
4284 (sha256
4285 (base32
4286 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4287 (build-system python-build-system)
4288 (arguments
4289 `(#:tests? #f)) ; There are no tests
4290 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4291 (synopsis "Python SOCKS module")
4292 (description
4293 "SocksiPy - A Python SOCKS client module. It provides a
4294 socket-like interface that supports connections to any TCP
4295 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4296 The original version was developed by Dan Haim, this is a
4297 branch created by Mario Vilas to address some open issues,
4298 as the original project seems to have been abandoned circa 2007.")
4299 (license license:bsd-3)))
4300
4301 (define-public python2-socksipy-branch
4302 (package-with-python2 python-socksipy-branch))
4303
4304 (define-public python-sqlalchemy
4305 (package
4306 (name "python-sqlalchemy")
4307 (version "1.0.12")
4308 (source
4309 (origin
4310 (method url-fetch)
4311 (uri (string-append "https://pypi.python.org/packages/source/S/"
4312 "SQLAlchemy/SQLAlchemy-" version ".tar.gz"))
4313 (sha256
4314 (base32
4315 "1l8qclhd0s90w3pvwhi5mjxdwr5j7gw7cjka2fx6f2vqmq7f4yb6"))))
4316 (build-system python-build-system)
4317 (native-inputs
4318 `(("python-cython" ,python-cython) ;for c extensions
4319 ("python-pytest" ,python-pytest)
4320 ("python-mock" ,python-mock))) ;for tests
4321 (arguments
4322 `(#:phases (alist-replace
4323 'check
4324 (lambda _ (zero? (system* "py.test")))
4325 %standard-phases)))
4326 (home-page "http://www.sqlalchemy.org")
4327 (synopsis "Database abstraction library")
4328 (description
4329 "SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
4330 gives application developers the full power and flexibility of SQL. It
4331 provides a full suite of well known enterprise-level persistence patterns,
4332 designed for efficient and high-performing database access, adapted into a
4333 simple and Pythonic domain language.")
4334 (license license:x11)))
4335
4336 (define-public python2-sqlalchemy
4337 (package-with-python2 python-sqlalchemy))
4338
4339 (define-public python-pycodestyle
4340 (package
4341 (name "python-pycodestyle")
4342 (version "2.0.0")
4343 (source
4344 (origin
4345 (method url-fetch)
4346 (uri (pypi-uri "pycodestyle" version))
4347 (sha256
4348 (base32
4349 "1rz2v8506mdjdyxcnv9ygiw6v0d4dqx8z5sjyjm0w2v32h5l5w1p"))))
4350 (build-system python-build-system)
4351 (home-page "https://pycodestyle.readthedocs.io/")
4352 (synopsis "Python style guide checker")
4353 (description "@code{pycodestyle} (formerly pep8) is a tool to check
4354 Python code against some of the style conventions in
4355 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
4356 (license license:expat)))
4357
4358 (define-public python2-pycodestyle
4359 (package-with-python2 python-pycodestyle))
4360
4361 (define-public python-orderedmultidict
4362 (package
4363 (name "python-orderedmultidict")
4364 (version "0.7.11")
4365 (source
4366 (origin
4367 (method url-fetch)
4368 (uri (pypi-uri "orderedmultidict" version))
4369 (sha256
4370 (base32
4371 "0dls862ibm7qbq4fnvwx0xn1v9hwyzywbff8xjjdr42dd75208yw"))))
4372 (build-system python-build-system)
4373 (arguments
4374 `(#:phases
4375 (modify-phases %standard-phases
4376 (add-after 'unpack 'fix-tests
4377 (lambda _
4378 ;; The package uses nosetest for running the tests.
4379 ;; Adding this initfile allows to run the test suite
4380 ;; without requiring nosetest.
4381 (zero? (system* "touch" "tests/__init__.py")))))))
4382 (propagated-inputs
4383 `(("python-six" ,python-six)))
4384 (native-inputs
4385 `(("python-pycodestyle" ,python-pycodestyle)))
4386 (home-page "https://github.com/gruns/orderedmultidict")
4387 (synopsis "Python Ordered Multivalue Dictionary - omdict")
4388 (description "This package contains a library for ordered multivalue
4389 dictionaries. A multivalue dictionary is a dictionary that can store
4390 multiple values for the same key. An ordered multivalue dictionary is a
4391 multivalue dictionary that retains the order of insertions and deletions.")
4392 (license license:unlicense)))
4393
4394 (define-public python2-orderedmultidict
4395 (package-with-python2 python-orderedmultidict))
4396
4397 (define-public python-furl
4398 (package
4399 (name "python-furl")
4400 (version "0.5.6")
4401 (source
4402 (origin
4403 (method url-fetch)
4404 (uri (pypi-uri "furl" version))
4405 (sha256
4406 (base32
4407 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
4408 (build-system python-build-system)
4409 (propagated-inputs
4410 `(("python-six" ,python-six)
4411 ("python-orderedmultidict" ,python-orderedmultidict)))
4412 (native-inputs
4413 `(("python-pycodestyle" ,python-pycodestyle)))
4414 (home-page "https://github.com/gruns/furl")
4415 (synopsis "URL manipulation in Python")
4416 (description "Furl provides an easy-to-use alternative to the
4417 @code{urllib} and @code{urlparse} modules for manipulating URLs.")
4418 (license license:unlicense)))
4419
4420 (define-public python2-furl
4421 (package-with-python2 python-furl))
4422
4423 (define-public python-flask-babel
4424 (package
4425 (name "python-flask-babel")
4426 (version "0.11.1")
4427 (source
4428 (origin
4429 (method url-fetch)
4430 (uri (pypi-uri "Flask-Babel" version))
4431 (sha256
4432 (base32
4433 "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj"))))
4434 (build-system python-build-system)
4435 (propagated-inputs
4436 `(("python-flask" ,python-flask)
4437 ("python-babel" ,python-babel)
4438 ("python-jinja2" ,python-jinja2)
4439 ("python-pytz" ,python-pytz)))
4440 (home-page "https://github.com/python-babel/flask-babel")
4441 (synopsis "Add i18n/l10n support to Flask applications")
4442 (description "This package implements internationalization and localization
4443 support for Flask. This is based on the Python babel module as well as pytz -
4444 both of which are installed automatically if you install this library.")
4445 (license license:bsd-3)))
4446
4447 (define-public python2-flask-babel
4448 (package-with-python2 python-flask-babel))
4449
4450 (define-public python-sqlalchemy-utils
4451 (package
4452 (name "python-sqlalchemy-utils")
4453 (version "0.32.13")
4454 (source
4455 (origin
4456 (method url-fetch)
4457 (uri (pypi-uri "SQLAlchemy-Utils" version))
4458 (sha256
4459 (base32
4460 "0vsib7gidjamzsz6w4s5pdhxzxsrkghjnm4sqwk94igjrl3i5ixj"))))
4461 (build-system python-build-system)
4462 (arguments
4463 '(#:tests? #f)) ; FIXME: Many tests require a running database server.
4464 ;; #:phases
4465 ;; (modify-phases %standard-phases
4466 ;; (replace 'check
4467 ;; (lambda _
4468 ;; (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
4469 (propagated-inputs
4470 `(("python-six" ,python-six)
4471 ("python-sqlalchemy" ,python-sqlalchemy)))
4472 (native-inputs
4473 `(("python-dateutil" ,python-dateutil)
4474 ("python-flexmock" ,python-flexmock)
4475 ("python-psycopg2" ,python-psycopg2)
4476 ("python-pytest" ,python-pytest)
4477 ("python-pytz" ,python-pytz)))
4478 (home-page "https://github.com/kvesteri/sqlalchemy-utils")
4479 (synopsis "Various utility functions for SQLAlchemy")
4480 (description
4481 "SQLAlchemy-utils provides various utility functions and custom data types
4482 for SQLAlchemy. SQLAlchemy is an SQL database abstraction library for Python.
4483
4484 You might also want to install the following optional dependencies:
4485 @enumerate
4486 @item @code{python-passlib}
4487 @item @code{python-babel}
4488 @item @code{python-cryptography}
4489 @item @code{python-pytz}
4490 @item @code{python-psycopg2}
4491 @item @code{python-furl}
4492 @item @code{python-flask-babel}
4493 @end enumerate
4494 ")
4495 (license license:bsd-3)))
4496
4497 (define-public python2-sqlalchemy-utils
4498 (package-with-python2 python-sqlalchemy-utils))
4499
4500 (define-public python-alembic
4501 (package
4502 (name "python-alembic")
4503 (version "0.8.10")
4504 (source
4505 (origin
4506 (method url-fetch)
4507 (uri (pypi-uri "alembic" version))
4508 (sha256
4509 (base32
4510 "06br9sfqypnjlal6fsbnky3zb0askwcn3diz8k3kwa0qcblm0fqf"))))
4511 (build-system python-build-system)
4512 (native-inputs
4513 `(("python-mock" ,python-mock)
4514 ("python-pytest-cov" ,python-pytest-cov)))
4515 (propagated-inputs
4516 `(("python-sqlalchemy" ,python-sqlalchemy)
4517 ("python-mako" ,python-mako)
4518 ("python-editor" ,python-editor)))
4519 (home-page "http://bitbucket.org/zzzeek/alembic")
4520 (synopsis
4521 "Database migration tool for SQLAlchemy")
4522 (description
4523 "Alembic is a lightweight database migration tool for usage with the
4524 SQLAlchemy Database Toolkit for Python.")
4525 (license license:expat)))
4526
4527 (define-public python2-alembic
4528 (package-with-python2 python-alembic))
4529
4530 (define-public python-autopep8
4531 (package
4532 (name "python-autopep8")
4533 (version "1.2.4")
4534 (source
4535 (origin
4536 (method url-fetch)
4537 (uri (pypi-uri "autopep8" version))
4538 (sha256
4539 (base32
4540 "18parm383lfn42a00wklv3qf20p4v277f1x3cn58x019dqk1xqrq"))))
4541 (build-system python-build-system)
4542 (propagated-inputs
4543 `(("python-pep8" ,python-pep8)))
4544 (home-page "https://github.com/hhatto/autopep8")
4545 (synopsis "Format Python code according to the PEP 8 style guide")
4546 (description
4547 "@code{autopep8} automatically formats Python code to conform to
4548 the PEP 8 style guide. It uses the pycodestyle utility to determine
4549 what parts of the code needs to be formatted. @code{autopep8} is
4550 capable of fixing most of the formatting issues that can be reported
4551 by pycodestyle.")
4552 (license (license:non-copyleft
4553 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
4554
4555 (define-public python2-autopep8
4556 (package-with-python2 python-autopep8))
4557
4558 (define-public python-distutils-extra
4559 (package
4560 (name "python-distutils-extra")
4561 (version "2.38")
4562 (source
4563 (origin
4564 (method url-fetch)
4565 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
4566 version "/+download/python-distutils-extra-"
4567 version ".tar.gz"))
4568 (sha256
4569 (base32
4570 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
4571 (build-system python-build-system)
4572 (home-page "https://launchpad.net/python-distutils-extra/")
4573 (synopsis "Enhancements to Python's distutils")
4574 (description
4575 "The python-distutils-extra module enables you to easily integrate
4576 gettext support, themed icons, and scrollkeeper-based documentation into
4577 Python's distutils.")
4578 (license license:gpl2)))
4579
4580 (define-public python2-distutils-extra
4581 (package-with-python2 python-distutils-extra))
4582
4583 (define-public python2-elib.intl
4584 (package
4585 (name "python2-elib.intl")
4586 (version "0.0.3")
4587 (source
4588 (origin
4589 ;; This project doesn't tag releases or publish tarballs, so we take
4590 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
4591 (method git-fetch)
4592 (uri (git-reference
4593 (url "https://github.com/dieterv/elib.intl.git")
4594 (commit "d09997cfef")))
4595 (sha256
4596 (base32
4597 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
4598 (build-system python-build-system)
4599 (arguments
4600 ;; incompatible with Python 3 (exception syntax)
4601 `(#:python ,python-2
4602 #:tests? #f))
4603 (home-page "https://github.com/dieterv/elib.intl")
4604 (synopsis "Enhanced internationalization for Python")
4605 (description
4606 "The elib.intl module provides enhanced internationalization (I18N)
4607 services for your Python modules and applications.")
4608 (license license:lgpl3+)))
4609
4610 (define-public python-pillow
4611 (package
4612 (name "python-pillow")
4613 (version "3.3.3")
4614 (source
4615 (origin
4616 (method url-fetch)
4617 (uri (pypi-uri "Pillow" version))
4618 (patches (search-patches "python-pillow-freetype-2.7-test-failure.patch"))
4619 (sha256
4620 (base32
4621 "0xkv0p1d73gz0a1qaasf0ai4262g8f334j07vd60bjrxs2wr3nmj"))))
4622 (build-system python-build-system)
4623 (native-inputs
4624 `(("python-nose" ,python-nose)))
4625 (inputs
4626 `(("freetype" ,freetype)
4627 ("lcms" ,lcms)
4628 ("zlib" ,zlib)
4629 ("libjpeg" ,libjpeg)
4630 ("openjpeg" ,openjpeg)
4631 ("libtiff" ,libtiff)
4632 ("libwebp" ,libwebp)))
4633 (arguments
4634 `(#:phases (modify-phases %standard-phases
4635 (add-after
4636 'install 'check-installed
4637 (lambda* (#:key outputs inputs #:allow-other-keys)
4638 (begin
4639 (setenv "HOME" (getcwd))
4640 ;; Make installed package available for running the
4641 ;; tests
4642 (add-installed-pythonpath inputs outputs)
4643 (and (zero? (system* "python" "selftest.py"
4644 "--installed"))
4645 (zero? (system* "python" "test-installed.py"))))))
4646 (delete 'check))))
4647 (home-page "https://pypi.python.org/pypi/Pillow")
4648 (synopsis "Fork of the Python Imaging Library")
4649 (description
4650 "The Python Imaging Library adds image processing capabilities to your
4651 Python interpreter. This library provides extensive file format support, an
4652 efficient internal representation, and fairly powerful image processing
4653 capabilities. The core image library is designed for fast access to data
4654 stored in a few basic pixel formats. It should provide a solid foundation for
4655 a general image processing tool.")
4656 (license (license:x11-style
4657 "http://www.pythonware.com/products/pil/license.htm"
4658 "The PIL Software License"))))
4659
4660 (define-public python2-pillow
4661 (package-with-python2 python-pillow))
4662
4663 (define-public python-pycparser
4664 (package
4665 (name "python-pycparser")
4666 (version "2.17")
4667 (source
4668 (origin
4669 (method url-fetch)
4670 (uri (pypi-uri "pycparser" version))
4671 (sha256
4672 (base32
4673 "1dkkjri0miidqb1zcqhqljfa34fcy9k5akasgwsv6k622zlk3b0a"))))
4674 (outputs '("out" "doc"))
4675 (build-system python-build-system)
4676 (native-inputs
4677 `(("pkg-config" ,pkg-config)))
4678 (arguments
4679 `(#:phases
4680 (modify-phases %standard-phases
4681 (replace 'check
4682 (lambda _
4683 (with-directory-excursion "tests"
4684 (zero? (system* "python" "all_tests.py")))))
4685 (add-after 'install 'install-doc
4686 (lambda* (#:key outputs #:allow-other-keys)
4687 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4688 (doc (string-append data "/doc/" ,name "-" ,version))
4689 (examples (string-append doc "/examples")))
4690 (mkdir-p examples)
4691 (for-each (lambda (file)
4692 (copy-file (string-append "." file)
4693 (string-append doc file)))
4694 '("/README.rst" "/CHANGES" "/LICENSE"))
4695 (copy-recursively "examples" examples)))))))
4696 (home-page "https://github.com/eliben/pycparser")
4697 (synopsis "C parser in Python")
4698 (description
4699 "Pycparser is a complete parser of the C language, written in pure Python
4700 using the PLY parsing library. It parses C code into an AST and can serve as
4701 a front-end for C compilers or analysis tools.")
4702 (license license:bsd-3)))
4703
4704 (define-public python2-pycparser
4705 (package-with-python2 python-pycparser))
4706
4707 (define-public python-cffi
4708 (package
4709 (name "python-cffi")
4710 (version "1.4.2")
4711 (source
4712 (origin
4713 (method url-fetch)
4714 (uri (pypi-uri "cffi" version))
4715 (sha256
4716 (base32 "161rj52rzi3880lij17d6i9kvgkiwjilrqjs8405k8sf6ryif7cg"))))
4717 (build-system python-build-system)
4718 (outputs '("out" "doc"))
4719 (inputs
4720 `(("libffi" ,libffi)))
4721 (propagated-inputs ; required at run-time
4722 `(("python-pycparser" ,python-pycparser)))
4723 (native-inputs
4724 `(("pkg-config" ,pkg-config)
4725 ("python-sphinx" ,python-sphinx)
4726 ("python-pytest" ,python-pytest)))
4727 (arguments
4728 `(#:phases
4729 (alist-cons-after
4730 'install 'install-doc
4731 (lambda* (#:key outputs #:allow-other-keys)
4732 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4733 (doc (string-append data "/doc/" ,name "-" ,version))
4734 (html (string-append doc "/html")))
4735 (with-directory-excursion "doc"
4736 (system* "make" "html")
4737 (mkdir-p html)
4738 (copy-recursively "build/html" html))
4739 (copy-file "LICENSE" (string-append doc "/LICENSE"))))
4740 %standard-phases)))
4741 (home-page "http://cffi.readthedocs.org")
4742 (synopsis "Foreign function interface for Python")
4743 (description
4744 "Foreign Function Interface for Python calling C code.")
4745 (license license:expat)))
4746
4747 (define-public python2-cffi
4748 (package-with-python2 python-cffi))
4749
4750 (define-public python-xcffib
4751 (package
4752 (name "python-xcffib")
4753 (version "0.5.1")
4754 (source
4755 (origin
4756 (method url-fetch)
4757 (uri (pypi-uri "xcffib" version))
4758 (sha256
4759 (base32
4760 "09gbnmr5vn58mm8xi3fmd7fz6743cks6c46dphnxzwax6zsxmy60"))))
4761 (build-system python-build-system)
4762 (inputs
4763 `(("libxcb" ,libxcb)))
4764 (propagated-inputs
4765 `(("python-cffi" ,python-cffi) ; used at run time
4766 ("python-six" ,python-six)))
4767 (arguments
4768 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
4769 #:tests? #f
4770 #:phases
4771 (modify-phases %standard-phases
4772 (add-after 'unpack 'fix-libxcb-path
4773 (lambda* (#:key inputs #:allow-other-keys)
4774 (let ((libxcb (assoc-ref inputs "libxcb")))
4775 (substitute* '("xcffib/__init__.py")
4776 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
4777 #t)))
4778 (add-after 'install 'install-doc
4779 (lambda* (#:key outputs #:allow-other-keys)
4780 (let ((doc (string-append (assoc-ref outputs "out") "/share"
4781 "/doc/" ,name "-" ,version)))
4782 (mkdir-p doc)
4783 (copy-file "README.md"
4784 (string-append doc "/README.md"))
4785 #t))))))
4786 (home-page "https://github.com/tych0/xcffib")
4787 (synopsis "XCB Python bindings")
4788 (description
4789 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
4790 support for Python 3 and PyPy. It is based on cffi.")
4791 (license license:expat)))
4792
4793 (define-public python2-xcffib
4794 (package-with-python2 python-xcffib))
4795
4796 (define-public python-cairocffi
4797 (package
4798 (name "python-cairocffi")
4799 (version "0.8.0")
4800 (source
4801 (origin
4802 (method url-fetch)
4803 ;; The archive on pypi is missing the 'utils' directory!
4804 (uri (string-append "https://github.com/Kozea/cairocffi/archive/v"
4805 version ".tar.gz"))
4806 (file-name (string-append name "-" version ".tar.gz"))
4807 (sha256
4808 (base32
4809 "1rk2dvy3fxrga6bvvxc2fi5lbaynm5h4a0w0aaxyn3bc77rszjg9"))))
4810 (build-system python-build-system)
4811 (outputs '("out" "doc"))
4812 (inputs
4813 `(("gdk-pixbuf" ,gdk-pixbuf)
4814 ("cairo" ,cairo)))
4815 (native-inputs
4816 `(("pkg-config" ,pkg-config)
4817 ("python-sphinx" ,python-sphinx)
4818 ("python-docutils" ,python-docutils)))
4819 (propagated-inputs
4820 `(("python-xcffib" ,python-xcffib))) ; used at run time
4821 (arguments
4822 `(;; FIXME: Tests cannot find 'libcairo.so.2'.
4823 #:tests? #f
4824 #:phases
4825 (modify-phases %standard-phases
4826 (add-after 'install 'install-doc
4827 (lambda* (#:key inputs outputs #:allow-other-keys)
4828 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
4829 (doc (string-append data "/doc/" ,name "-" ,version))
4830 (html (string-append doc "/html")))
4831 (setenv "LD_LIBRARY_PATH"
4832 (string-append (assoc-ref inputs "cairo") "/lib" ":"
4833 (assoc-ref inputs "gdk-pixbuf") "/lib"))
4834 (setenv "LANG" "en_US.UTF-8")
4835 (mkdir-p html)
4836 (for-each (lambda (file)
4837 (copy-file (string-append "." file)
4838 (string-append doc file)))
4839 '("/README.rst" "/CHANGES" "/LICENSE"))
4840 (system* "python" "setup.py" "build_sphinx")
4841 (copy-recursively "docs/_build/html" html)
4842 #t))))))
4843 (home-page "https://github.com/Kozea/cairocffi")
4844 (synopsis "Python bindings and object-oriented API for Cairo")
4845 (description
4846 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
4847 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
4848 graphics library with support for multiple backends including image buffers,
4849 PNG, PostScript, PDF, and SVG file output.")
4850 (license license:bsd-3)))
4851
4852 (define-public python2-cairocffi
4853 (package-with-python2 python-cairocffi))
4854
4855 (define-public python-decorator
4856 (package
4857 (name "python-decorator")
4858 (version "4.0.10")
4859 (source
4860 (origin
4861 (method url-fetch)
4862 (uri (pypi-uri "decorator" version))
4863 (sha256
4864 (base32 "0w7hg59hlpq74jpyja4yfryap0ccjvchgpkfp20rhj9krgnrhvlw"))))
4865 (build-system python-build-system)
4866 (arguments '(#:tests? #f)) ; no test target
4867 (home-page "https://pypi.python.org/pypi/decorator/")
4868 (synopsis "Python module to simplify usage of decorators")
4869 (description
4870 "The aim of the decorator module is to simplify the usage of decorators
4871 for the average programmer, and to popularize decorators usage giving examples
4872 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
4873 etc. The core of this module is a decorator factory.")
4874 (license license:expat)))
4875
4876 (define-public python2-decorator
4877 (package-with-python2 python-decorator))
4878
4879 (define-public python-drmaa
4880 (package
4881 (name "python-drmaa")
4882 (version "0.7.7")
4883 (source
4884 (origin
4885 (method url-fetch)
4886 (uri (string-append
4887 "https://pypi.python.org/packages/source/d/drmaa/drmaa-"
4888 version ".tar.gz"))
4889 (sha256
4890 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
4891 (build-system python-build-system)
4892 ;; The test suite requires libdrmaa which is provided by the cluster
4893 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
4894 ;; should be set to the path of the libdrmaa library.
4895 (arguments '(#:tests? #f))
4896 (native-inputs
4897 `(("python-nose" ,python-nose)))
4898 (home-page "https://pypi.python.org/pypi/drmaa")
4899 (synopsis "Python bindings for the DRMAA library")
4900 (description
4901 "A Python package for Distributed Resource Management (DRM) job
4902 submission and control. This package is an implementation of the DRMAA 1.0
4903 Python language binding specification.")
4904 (license license:bsd-3)))
4905
4906 (define-public python2-drmaa
4907 (package-with-python2 python-drmaa))
4908
4909 (define-public python-gridmap
4910 (package
4911 (name "python-gridmap")
4912 (version "0.13.0")
4913 (source
4914 (origin
4915 (method url-fetch)
4916 (uri (string-append
4917 "https://github.com/pygridtools/gridmap/archive/v"
4918 version ".tar.gz"))
4919 (file-name (string-append name "-" version ".tar.gz"))
4920 (sha256
4921 (base32 "1gzjg2k6f14i1msm2b0ax8d9ds1hvk6qd5nlaivg8m4cxqp4cp1x"))))
4922 (build-system python-build-system)
4923 (arguments
4924 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
4925 (propagated-inputs
4926 `(("python-psutil" ,python-psutil)
4927 ("python-drmaa" ,python-drmaa)
4928 ("python-pyzmq" ,python-pyzmq)))
4929 (home-page "https://github.com/pygridtools/gridmap")
4930 (synopsis "Create jobs on a cluster directly from Python")
4931 (description
4932 "Gridmap is a Python package to allow you to easily create jobs on the
4933 cluster directly from Python. You can directly map Python functions onto the
4934 cluster without needing to write any wrapper code yourself.")
4935 (license license:gpl3+)))
4936
4937 (define-public python2-gridmap
4938 (package-with-python2 python-gridmap))
4939
4940 (define-public python-pexpect
4941 (package
4942 (name "python-pexpect")
4943 (version "4.2.1")
4944 (source
4945 (origin
4946 (method url-fetch)
4947 (uri (pypi-uri "pexpect" version))
4948 (sha256
4949 (base32 "14ls7k99pwvl21zqv65kzrhccv50j89m5ij1hf0slmsvlxjj84rx"))))
4950 (build-system python-build-system)
4951 (arguments
4952 `(#:phases
4953 (modify-phases %standard-phases
4954 (add-before 'check 'prepare-tests
4955 (lambda _
4956 (substitute* (find-files "tests")
4957 (("/bin/ls") (which "ls"))
4958 (("/bin/echo") (which "echo"))
4959 (("/bin/which") (which "which"))
4960 ;; Many tests try to use the /bin directory which
4961 ;; is not present in the build environment.
4962 ;; Use one that's non-empty and unlikely to change.
4963 (("/bin'") "/dev'"))
4964 ;; XXX: Socket connection test gets "Connection reset by peer".
4965 ;; Why does it not work? Delete for now.
4966 (delete-file "tests/test_socket.py")
4967 #t))
4968 (replace 'check (lambda _ (zero? (system* "nosetests" "-v")))))))
4969 (native-inputs
4970 `(("python-nose" ,python-nose)
4971 ("python-pytest" ,python-pytest-3.0)
4972 ("man-db" ,man-db)
4973 ("which" ,which)))
4974 (propagated-inputs
4975 `(("python-ptyprocess" ,python-ptyprocess)))
4976 (home-page "http://pexpect.readthedocs.org/")
4977 (synopsis "Controlling interactive console applications")
4978 (description
4979 "Pexpect is a pure Python module for spawning child applications;
4980 controlling them; and responding to expected patterns in their output.
4981 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
4982 child application and control it as if a human were typing commands.")
4983 (license license:isc)))
4984
4985 (define-public python2-pexpect
4986 (package-with-python2 python-pexpect))
4987
4988 (define-public python-setuptools-scm
4989 (package
4990 (name "python-setuptools-scm")
4991 (version "1.15.0")
4992 (source (origin
4993 (method url-fetch)
4994 (uri (pypi-uri "setuptools_scm" version))
4995 (sha256
4996 (base32
4997 "0bwyc5markib0i7i2qlyhdzxhiywzxbkfiapldma8m91m82jvwfs"))))
4998 (build-system python-build-system)
4999 (home-page "https://github.com/pypa/setuptools_scm/")
5000 (synopsis "Manage Python package versions in SCM metadata")
5001 (description
5002 "Setuptools_scm handles managing your Python package versions in
5003 @dfn{software configuration management} (SCM) metadata instead of declaring
5004 them as the version argument or in a SCM managed file.")
5005 (license license:expat)))
5006
5007 (define-public python2-setuptools-scm
5008 (package-with-python2 python-setuptools-scm))
5009
5010 (define-public python-pathpy
5011 (package
5012 (name "python-pathpy")
5013 (version "8.1.1")
5014 (source
5015 (origin
5016 (method url-fetch)
5017 (uri (string-append "https://pypi.python.org/packages/source/p/"
5018 "path.py/path.py-" version ".tar.gz"))
5019 (sha256
5020 (base32 "1p8s1l2vfkqhqxdhqlj0g1jjw4f1as2frr35sjcpjjpd5a89y41f"))))
5021 (outputs '("out" "doc"))
5022 (build-system python-build-system)
5023 (propagated-inputs
5024 `(("python-appdirs" ,python-appdirs)))
5025 (native-inputs
5026 `(("python-setuptools-scm" ,python-setuptools-scm)
5027 ("python-sphinx" ,python-sphinx)
5028 ("python-rst.linker" ,python-rst.linker)
5029 ("python-pytest" ,python-pytest)
5030 ("python-pytest-runner" ,python-pytest-runner)))
5031 (arguments
5032 `(#:phases
5033 (modify-phases %standard-phases
5034 (add-after 'build 'build-doc
5035 (lambda _
5036 (setenv "LANG" "en_US.UTF-8")
5037 (zero? (system* "python" "setup.py" "build_sphinx"))))
5038 (add-after 'install 'install-doc
5039 (lambda* (#:key outputs #:allow-other-keys)
5040 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5041 (doc (string-append data "/doc/" ,name "-" ,version))
5042 (html (string-append doc "/html")))
5043 (mkdir-p html)
5044 (for-each (lambda (file)
5045 (copy-file file (string-append doc "/" file)))
5046 '("README.rst" "CHANGES.rst"))
5047 (copy-recursively "build/sphinx/html" html)))))))
5048 (home-page "https://github.com/jaraco/path.py")
5049 (synopsis "Python module wrapper for built-in os.path")
5050 (description
5051 "@code{path.py} implements path objects as first-class entities, allowing
5052 common operations on files to be invoked on those path objects directly.")
5053 (license license:expat)))
5054
5055 (define-public python2-pathpy
5056 (package-with-python2 python-pathpy))
5057
5058 (define-public python-pickleshare
5059 (package
5060 (name "python-pickleshare")
5061 (version "0.5")
5062 (source
5063 (origin
5064 (method url-fetch)
5065 (uri (string-append "https://pypi.python.org/packages/source/p/"
5066 "pickleshare/pickleshare-" version ".tar.gz"))
5067 (sha256
5068 (base32 "11ljr90j3p6qswdrbl7p4cjb2i93f6vn0vx9anzpshsx0d2mggn0"))))
5069 (build-system python-build-system)
5070 (propagated-inputs
5071 `(("python-pathpy" ,python-pathpy)))
5072 (home-page "https://github.com/vivainio/pickleshare")
5073 (synopsis "Tiny key value database with concurrency support")
5074 (description
5075 "PickleShare is a small ‘shelve’-like datastore with concurrency support.
5076 Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike
5077 shelve, many processes can access the database simultaneously. Changing a
5078 value in database is immediately visible to other processes accessing the same
5079 database. Concurrency is possible because the values are stored in separate
5080 files. Hence the “database” is a directory where all files are governed by
5081 PickleShare.")
5082 (license license:expat)))
5083
5084 (define-public python2-pickleshare
5085 (package-with-python2 python-pickleshare))
5086
5087 (define-public python-simplegeneric
5088 (package
5089 (name "python-simplegeneric")
5090 (version "0.8.1")
5091 (source
5092 (origin
5093 (method url-fetch)
5094 (uri (string-append "https://pypi.python.org/packages/source/s/"
5095 "simplegeneric/simplegeneric-" version ".zip"))
5096 (sha256
5097 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
5098 (build-system python-build-system)
5099 (native-inputs
5100 `(("unzip" ,unzip)))
5101 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
5102 (synopsis "Python module for simple generic functions")
5103 (description
5104 "The simplegeneric module lets you define simple single-dispatch generic
5105 functions, akin to Python’s built-in generic functions like @code{len()},
5106 @code{iter()} and so on. However, instead of using specially-named methods,
5107 these generic functions use simple lookup tables, akin to those used by
5108 e.g. @code{pickle.dump()} and other generic functions found in the Python
5109 standard library.")
5110 (license license:zpl2.1)))
5111
5112 (define-public python2-simplegeneric
5113 (package-with-python2 python-simplegeneric))
5114
5115 (define-public python-ipython-genutils
5116 ;; TODO: This package is retired, check if can be removed, see description.
5117 (package
5118 (name "python-ipython-genutils")
5119 (version "0.1.0")
5120 (source
5121 (origin
5122 (method url-fetch)
5123 (uri (string-append "https://pypi.python.org/packages/source/i/"
5124 "ipython_genutils/ipython_genutils-"
5125 version ".tar.gz"))
5126 (sha256
5127 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
5128 (build-system python-build-system)
5129 (arguments `(#:tests? #f)) ; no tests
5130 (home-page "http://ipython.org")
5131 (synopsis "Vestigial utilities from IPython")
5132 (description
5133 "This package provides retired utilities from IPython. No packages
5134 outside IPython/Jupyter should depend on it.
5135
5136 This package shouldn't exist. It contains some common utilities shared by
5137 Jupyter and IPython projects during The Big Split. As soon as possible, those
5138 packages will remove their dependency on this, and this package will go
5139 away.")
5140 (license license:bsd-3)))
5141
5142 (define-public python2-ipython-genutils
5143 (package-with-python2 python-ipython-genutils))
5144
5145 (define-public python-traitlets
5146 (package
5147 (name "python-traitlets")
5148 (version "4.2.0")
5149 (source
5150 (origin
5151 (method url-fetch)
5152 (uri (pypi-uri "traitlets" version))
5153 (sha256
5154 (base32
5155 "1afy08sa5n9gnkvh3da49c16zkyv598vchv0p1hp7zzjy8895hz4"))))
5156 (build-system python-build-system)
5157 (arguments
5158 `(#:phases
5159 (modify-phases %standard-phases
5160 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
5161 (propagated-inputs
5162 `(("python-ipython-genutils" ,python-ipython-genutils)
5163 ("python-decorator" ,python-decorator)))
5164 (native-inputs
5165 `(("python-mock" ,python-mock)
5166 ("python-nose" ,python-nose)))
5167 (home-page "http://ipython.org")
5168 (synopsis "Configuration system for Python applications")
5169 (description
5170 "Traitlets is a framework that lets Python classes have attributes with
5171 type checking, dynamically calculated default values, and ‘on change’
5172 callbacks. The package also includes a mechanism to use traitlets for
5173 configuration, loading values from files or from command line arguments. This
5174 is a distinct layer on top of traitlets, so you can use traitlets in your code
5175 without using the configuration machinery.")
5176 (license license:bsd-3)))
5177
5178 (define-public python2-traitlets
5179 (package-with-python2 python-traitlets))
5180
5181 (define-public python-jupyter-core
5182 (package
5183 (name "python-jupyter-core")
5184 (version "4.2.1")
5185 (source
5186 (origin
5187 (method url-fetch)
5188 (uri (string-append (pypi-uri "jupyter_core" version)))
5189 (sha256
5190 (base32
5191 "1cy7inv218dgh4m1fbzbsiqpz733ylgjrj62jxqpfzs3r2cm7ic9"))))
5192 (build-system python-build-system)
5193 ;; FIXME: not sure how to run the tests
5194 (arguments `(#:tests? #f))
5195 (propagated-inputs
5196 `(("python-traitlets" ,python-traitlets)))
5197 (home-page "http://jupyter.org/")
5198 (synopsis "Jupyter base package")
5199 (description
5200 "Jupyter core is the base package on which Jupyter projects rely.")
5201 (license license:bsd-3)))
5202
5203 (define-public python2-jupyter-core
5204 (package-with-python2 python-jupyter-core))
5205
5206 (define-public python-jupyter-client
5207 (package
5208 (name "python-jupyter-client")
5209 (version "4.4.0")
5210 (source
5211 (origin
5212 (method url-fetch)
5213 (uri (pypi-uri "jupyter_client" version))
5214 (sha256
5215 (base32
5216 "1vjjrpjw7k5sh982pbjnslv7byfbfazjw9g92jvs7dz5qbx556n9"))))
5217 (build-system python-build-system)
5218 ;; Tests fail because of missing native python kernel which I assume is
5219 ;; provided by the ipython package, which we cannot use because it would
5220 ;; cause a dependency cycle.
5221 (arguments `(#:tests? #f))
5222 (propagated-inputs
5223 `(("python-pyzmq" ,python-pyzmq)
5224 ("python-traitlets" ,python-traitlets)
5225 ("python-jupyter-core" ,python-jupyter-core)))
5226 (home-page "http://jupyter.org/")
5227 (synopsis "Jupyter protocol implementation and client libraries")
5228 (description
5229 "The @code{jupyter_client} package contains the reference implementation
5230 of the Jupyter protocol. It also provides client and kernel management APIs
5231 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
5232 installing @code{kernelspec}s for use with Jupyter frontends.")
5233 (license license:bsd-3)))
5234
5235 (define-public python2-jupyter-client
5236 (package-with-python2 python-jupyter-client))
5237
5238 (define-public python-ipykernel
5239 (package
5240 (name "python-ipykernel")
5241 (version "4.5.2")
5242 (source
5243 (origin
5244 (method url-fetch)
5245 (uri (pypi-uri "ipykernel" version))
5246 (sha256
5247 (base32 "0qllv0k6zzv1r1cj1x2ygxmlrrqhbslzj8rc6r6fg3kc1rgz4m2s"))))
5248 (build-system python-build-system)
5249 ;; The tests load a submodule of IPython. However, IPython itself depends
5250 ;; on ipykernel.
5251 (arguments `(#:tests? #f))
5252 (propagated-inputs
5253 ;; imported at runtime during connect
5254 `(("python-jupyter-client" ,python-jupyter-client)))
5255 (home-page "http://ipython.org")
5256 (synopsis "IPython Kernel for Jupyter")
5257 (description
5258 "This package provides the IPython kernel for Jupyter.")
5259 (license license:bsd-3)))
5260
5261 (define-public python2-ipykernel
5262 (package-with-python2 python-ipykernel))
5263
5264 (define-public python-testpath
5265 (package
5266 (name "python-testpath")
5267 (version "0.2")
5268 (source
5269 (origin
5270 (method url-fetch)
5271 (uri (string-append "https://github.com/jupyter/testpath/archive/"
5272 version ".tar.gz"))
5273 (file-name (string-append name "-" version ".tar.gz"))
5274 (sha256
5275 (base32
5276 "04kh3fgvmqz6cfcw79q70qwjz7ib7lxm27cc548iy2rpr33qqf55"))))
5277 (build-system python-build-system)
5278 (arguments
5279 `(#:tests? #f ; this package does not even have a setup.py
5280 #:modules ((guix build python-build-system)
5281 (guix build utils)
5282 (srfi srfi-1))
5283 #:imported-modules (,@%python-build-system-modules
5284 (srfi srfi-1))
5285 #:phases
5286 (modify-phases %standard-phases
5287 (delete 'install)
5288 (replace 'build
5289 (lambda* (#:key inputs outputs #:allow-other-keys)
5290 (let* ((version (last
5291 (string-split (assoc-ref inputs "python") #\-)))
5292 (x.y (string-join (take (string-split version #\.) 2)
5293 "."))
5294 (dir (string-append
5295 (assoc-ref outputs "out")
5296 "/lib/python" x.y "/site-packages/testpath")))
5297 (mkdir-p dir)
5298 (copy-recursively "testpath" dir))
5299 #t)))))
5300 (home-page "https://github.com/takluyver/testpath")
5301 (synopsis "Test utilities for code working with files and commands")
5302 (description
5303 "Testpath is a collection of utilities for Python code working with files
5304 and commands. It contains functions to check things on the filesystem, and
5305 tools for mocking system commands and recording calls to those.")
5306 (license license:expat)))
5307
5308 (define-public python2-testpath
5309 (package-with-python2 python-testpath))
5310
5311 (define-public python-ipython
5312 (package
5313 (name "python-ipython")
5314 (version "5.2.2")
5315 (source
5316 (origin
5317 (method url-fetch)
5318 (uri (pypi-uri "ipython" version ".tar.gz"))
5319 (sha256
5320 (base32 "1qhjwa9cyz1np7rhv3p4ip13lkgbqsad62l24xkwiq1ic2gwiqbf"))))
5321 (build-system python-build-system)
5322 (outputs '("out" "doc"))
5323 (propagated-inputs
5324 `(("python-pyzmq" ,python-pyzmq)
5325 ("python-prompt-toolkit" ,python-prompt-toolkit)
5326 ("python-terminado" ,python-terminado)
5327 ("python-matplotlib" ,python-matplotlib)
5328 ("python-numpy" ,python-numpy)
5329 ("python-numpydoc" ,python-numpydoc)
5330 ("python-jinja2" ,python-jinja2)
5331 ("python-mistune" ,python-mistune)
5332 ("python-pexpect" ,python-pexpect)
5333 ("python-pickleshare" ,python-pickleshare)
5334 ("python-simplegeneric" ,python-simplegeneric)
5335 ("python-jsonschema" ,python-jsonschema)
5336 ("python-traitlets" ,python-traitlets)
5337 ("python-ipykernel" ,python-ipykernel)
5338 ("python-nbformat" ,python-nbformat)
5339 ("python-pygments" ,python-pygments)))
5340 (inputs
5341 `(("readline" ,readline)
5342 ("which" ,which)))
5343 (native-inputs
5344 `(("graphviz" ,graphviz)
5345 ("pkg-config" ,pkg-config)
5346 ("python-requests" ,python-requests) ;; for tests
5347 ("python-testpath" ,python-testpath)
5348 ("python-nose" ,python-nose)
5349 ("python-sphinx" ,python-sphinx)
5350 ("python-shpinx-rtd-theme" ,python-sphinx-rtd-theme)
5351 ("texlive" ,texlive)
5352 ("texinfo" ,texinfo)))
5353 (arguments
5354 `(#:phases
5355 (modify-phases %standard-phases
5356 (add-after
5357 'install 'install-doc
5358 (lambda* (#:key inputs outputs #:allow-other-keys)
5359 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5360 (doc (string-append data "/doc/" ,name "-" ,version))
5361 (html (string-append doc "/html"))
5362 (man1 (string-append data "/man/man1"))
5363 (info (string-append data "/info"))
5364 (examples (string-append doc "/examples"))
5365 (python-arg (string-append "PYTHON=" (which "python"))))
5366 (setenv "LANG" "en_US.utf8")
5367 ;; Make installed package available for running the tests
5368 (add-installed-pythonpath inputs outputs)
5369 (with-directory-excursion "docs"
5370 ;; FIXME: pdf fails to build
5371 ;;(system* "make" "pdf" "PAPER=a4")
5372 (system* "make" python-arg "html")
5373 (system* "make" python-arg "info"))
5374 (copy-recursively "docs/man" man1)
5375 (copy-recursively "examples" examples)
5376 (copy-recursively "docs/build/html" html)
5377 ;; (copy-file "docs/build/latex/ipython.pdf"
5378 ;; (string-append doc "/ipython.pdf"))
5379 (mkdir-p info)
5380 (copy-file "docs/build/texinfo/ipython.info"
5381 (string-append info "/ipython.info"))
5382 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))))
5383 ;; Tests can only be run after the library has been installed and not
5384 ;; within the source directory.
5385 (delete 'check)
5386 (add-after
5387 'install 'check
5388 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5389 (if tests?
5390 (with-directory-excursion "/tmp"
5391 ;; Make installed package available for running the tests
5392 (add-installed-pythonpath inputs outputs)
5393 (setenv "HOME" "/tmp/") ;; required by a test
5394 (zero? (system* (string-append (assoc-ref outputs "out")
5395 "/bin/iptest"))))
5396 #t)))
5397 (add-before
5398 'install 'fix-tests
5399 (lambda* (#:key inputs #:allow-other-keys)
5400 (substitute* "./IPython/utils/_process_posix.py"
5401 (("/usr/bin/env', 'which") (which "which")))
5402 (substitute* "./IPython/core/tests/test_inputtransformer.py"
5403 (("#!/usr/bin/env python")
5404 (string-append "#!" (which "python"))))
5405 ;; Disable 1 failing test
5406 (substitute* "./IPython/core/tests/test_magic.py"
5407 (("def test_dirops\\(\\):" all)
5408 (string-append "@dec.skipif(True)\n" all))))))))
5409 (home-page "http://ipython.org")
5410 (synopsis "IPython is a tool for interactive computing in Python")
5411 (description
5412 "IPython provides a rich architecture for interactive computing with:
5413 Powerful interactive shells, a browser-based notebook, support for interactive
5414 data visualization, embeddable interpreters and tools for parallel
5415 computing.")
5416 (license license:bsd-3)
5417 (properties `((python2-variant . ,(delay python2-ipython))))))
5418
5419 (define-public python2-ipython
5420 (let ((ipython (package-with-python2 (strip-python2-variant python-ipython))))
5421 (package
5422 (inherit ipython)
5423 ;; FIXME: add pyreadline once available.
5424 (propagated-inputs
5425 `(("python2-backports-shutil-get-terminal-size"
5426 ,python2-backports-shutil-get-terminal-size)
5427 ("python2-pathlib2" ,python2-pathlib2)
5428 ,@(package-propagated-inputs ipython)))
5429 (native-inputs
5430 `(("python2-mock" ,python2-mock)
5431 ,@(package-native-inputs ipython))))))
5432
5433 (define-public python-isodate
5434 (package
5435 (name "python-isodate")
5436 (version "0.5.4")
5437 (source
5438 (origin
5439 (method url-fetch)
5440 (uri (pypi-uri "isodate" version))
5441 (sha256
5442 (base32
5443 "0cafaiwixgpxwh9dsd28qb0dbzsj6xpxjdkyk30ns91ps10mq422"))))
5444 (build-system python-build-system)
5445 (home-page
5446 "http://cheeseshop.python.org/pypi/isodate")
5447 (synopsis
5448 "Python date parser and formatter")
5449 (description
5450 "Python-isodate is a python module for parsing and formatting
5451 ISO 8601 dates, time and duration.")
5452 (license license:bsd-3)))
5453
5454 (define-public python2-isodate
5455 (package-with-python2 python-isodate))
5456
5457 (define-public python-html5lib
5458 (package
5459 (name "python-html5lib")
5460 (version "1.0b10")
5461 (source
5462 (origin
5463 (method url-fetch)
5464 (uri (pypi-uri "html5lib" version))
5465 (sha256
5466 (base32
5467 "1yd068a5c00wd0ajq0hqimv7fd82lhrw0w3s01vbhy9bbd6xapqd"))))
5468 (build-system python-build-system)
5469 (propagated-inputs
5470 `(("python-six" ,python-six)
5471 ("python-webencodings" ,python-webencodings)))
5472 (arguments
5473 `(#:test-target "check"))
5474 (home-page
5475 "https://github.com/html5lib/html5lib-python")
5476 (synopsis
5477 "Python HTML parser based on the WHATWG HTML specifcation")
5478 (description
5479 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
5480 and written in Python.")
5481 (license license:expat)))
5482
5483 (define-public python2-html5lib
5484 (package-with-python2 python-html5lib))
5485
5486 ;; Needed for python-bleach, a dependency of python-notebook
5487 (define-public python-html5lib-0.9
5488 (package
5489 (inherit python-html5lib)
5490 (version "0.999")
5491 (source
5492 (origin
5493 (method url-fetch)
5494 (uri (pypi-uri "html5lib" version))
5495 (sha256
5496 (base32
5497 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
5498
5499 (define-public python2-html5lib-0.9
5500 (package-with-python2 python-html5lib-0.9))
5501
5502 (define-public python-webencodings
5503 (package
5504 (name "python-webencodings")
5505 (version "0.5")
5506 (source (origin
5507 (method url-fetch)
5508 (uri (pypi-uri "webencodings" version))
5509 (sha256
5510 (base32
5511 "015rw7662lkpb9aqiqah2hbizk6w531badqwjpz41rr47glmxid5"))))
5512 (build-system python-build-system)
5513 (arguments
5514 '(#:phases
5515 (modify-phases %standard-phases
5516 (replace 'check
5517 (lambda _
5518 (zero? (system* "py.test" "-v" "webencodings/tests.py")))))))
5519 (native-inputs
5520 `(("python-pytest" ,python-pytest)))
5521 (home-page "https://github.com/SimonSapin/python-webencodings")
5522 (synopsis "Character encoding aliases for legacy web content")
5523 (description
5524 "In order to be compatible with legacy web content when interpreting
5525 something like @code{Content-Type: text/html; charset=latin1}, tools need
5526 to use a particular set of aliases for encoding labels as well as some
5527 overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
5528 the web are actually aliases for @code{windows-1252}, and an @code{UTF-8}
5529 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
5530 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
5531 defines all such details so that implementations do not have to
5532 reverse-engineer each other.
5533
5534 This module implements the Encoding standard and has encoding labels and
5535 BOM detection, but the actual implementation for encoders and decoders
5536 is Python’s.")
5537 (license license:bsd-3)))
5538
5539 (define-public python2-webencodings
5540 (package-with-python2 python-webencodings))
5541
5542 (define-public python-urwid
5543 (package
5544 (name "python-urwid")
5545 (version "1.3.1")
5546 (source
5547 (origin
5548 (method url-fetch)
5549 (uri (pypi-uri "urwid" version))
5550 (sha256
5551 (base32
5552 "18cnd1wdjcas08x5qwa5ayw6jsfcn33w4d9f7q3s29fy6qzc1kng"))))
5553 (build-system python-build-system)
5554 (arguments
5555 `(#:phases
5556 (modify-phases %standard-phases
5557 ;; Disable failing test. Bug filed upstream:
5558 ;; https://github.com/wardi/urwid/issues/164
5559 ;; TODO: check again for python-urwid > 1.3.1 or python > 3.4.3.
5560 (add-after 'unpack 'disable-failing-test
5561 (lambda _
5562 (substitute* "urwid/tests/test_event_loops.py"
5563 (("test_remove_watch_file")
5564 "disable_remove_watch_file")))))))
5565 (home-page "http://urwid.org")
5566 (synopsis "Console user interface library for Python")
5567 (description
5568 "Urwid is a curses-based UI/widget library for Python. It includes many
5569 features useful for text console applications.")
5570 (license license:lgpl2.1+)))
5571
5572 (define-public python2-urwid
5573 (let ((python2-urwid (package-with-python2 python-urwid)))
5574 (package
5575 (inherit python2-urwid)
5576 (arguments
5577 (append
5578 '(#:phases
5579 (modify-phases %standard-phases
5580 ;; Disable the vterm tests because of non-deterministic failures
5581 ;; with Python 2. See https://github.com/urwid/urwid/issues/230.
5582 (add-after 'unpack 'delete-test_vterm.py
5583 (delete-file "urwid/tests/test_vterm.py"))))
5584 (package-arguments python-urwid))))))
5585
5586 (define-public python-openid
5587 (package
5588 (name "python-openid")
5589 (version "3.0.10")
5590 (source
5591 (origin
5592 (method url-fetch)
5593 (uri (pypi-uri "python3-openid" version))
5594 (sha256
5595 (base32
5596 "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758"))))
5597 (build-system python-build-system)
5598 (arguments
5599 `(#:phases
5600 (modify-phases %standard-phases
5601 (replace 'check
5602 (lambda _
5603 (zero? (system* "./admin/runtests")))))))
5604 (properties `((python2-variant . ,(delay python2-openid))))
5605 (propagated-inputs
5606 `(("python-defusedxml" ,python-defusedxml)))
5607 (native-inputs
5608 `(("python-psycopg2" ,python-psycopg2)
5609 ("python-django" ,python-django)))
5610 (home-page "https://github.com/necaris/python3-openid")
5611 (synopsis "OpenID support for servers and consumers")
5612 (description "This library provides OpenID authentication for Python, both
5613 for clients and servers.")
5614 (license license:asl2.0)))
5615
5616 (define-public python2-openid
5617 (package
5618 (name "python2-openid")
5619 (version "2.2.5")
5620 (source
5621 (origin
5622 (method url-fetch)
5623 (uri (pypi-uri "python-openid" version))
5624 (sha256
5625 (base32
5626 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
5627 (build-system python-build-system)
5628 (arguments
5629 ;; Python 3 support is in `python3-openid`, a separate package.
5630 `(#:python ,python-2))
5631 (home-page "https://github.com/openid/python-openid")
5632 (synopsis "OpenID support for servers and consumers")
5633 (description "This library provides OpenID authentication for Python, both
5634 for clients and servers.")
5635 (license license:asl2.0)))
5636
5637 (define-public python-urwidtrees
5638 (package
5639 (name "python-urwidtrees")
5640 (version "1.0.2")
5641 (source
5642 (origin
5643 (method url-fetch)
5644 ;; package author intends on distributing via github rather than pypi:
5645 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
5646 (uri (string-append "https://github.com/pazz/urwidtrees/archive/"
5647 version ".tar.gz"))
5648 (file-name (string-append name "-" version ".tar.gz"))
5649 (sha256
5650 (base32
5651 "0d30lyd3s2a97rhqfax5w9ssqds2z6aydqx3c6j2c2lk3cb4ngvh"))))
5652 (build-system python-build-system)
5653 (arguments
5654 '(#:tests? #f)) ; no tests
5655 (propagated-inputs `(("python-urwid" ,python-urwid)))
5656 (home-page "https://github.com/pazz/urwidtrees")
5657 (synopsis "Tree widgets for urwid")
5658 (description "Urwidtrees is a Widget Container API for the @code{urwid}
5659 toolkit. Use it to build trees of widgets.")
5660 (license license:gpl3+)))
5661
5662 (define-public python2-urwidtrees
5663 (package-with-python2 python-urwidtrees))
5664
5665 (define-public python-dbus
5666 (package
5667 (name "python-dbus")
5668 (version "1.2.0")
5669 (source
5670 (origin
5671 (method url-fetch)
5672 (uri (string-append
5673 "https://dbus.freedesktop.org/releases/dbus-python/dbus-python-"
5674 version ".tar.gz"))
5675 (sha256
5676 (base32 "1py62qir966lvdkngg0v8k1khsqxwk5m4s8nflpk1agk5f5nqb71"))))
5677 (build-system gnu-build-system)
5678 (arguments
5679 '(#:phases
5680 (modify-phases %standard-phases
5681 (add-before
5682 'check 'pre-check
5683 (lambda _
5684 ;; XXX: For the missing '/etc/machine-id'.
5685 (substitute* "test/run-test.sh"
5686 (("DBUS_FATAL_WARNINGS=1")
5687 "DBUS_FATAL_WARNINGS=0"))
5688 #t)))))
5689 (native-inputs
5690 `(("pkg-config" ,pkg-config)))
5691 (inputs
5692 `(("python" ,python)
5693 ("dbus-glib" ,dbus-glib)))
5694 (synopsis "Python bindings for D-bus")
5695 (description "python-dbus provides bindings for libdbus, the reference
5696 implementation of D-Bus.")
5697 (home-page "http://www.freedesktop.org/wiki/Software/DBusBindings/")
5698 (license license:expat)))
5699
5700 (define-public python2-dbus
5701 (package (inherit python-dbus)
5702 (name "python2-dbus")
5703 (inputs `(("python" ,python-2)
5704 ,@(alist-delete "python"
5705 (package-inputs python-dbus)
5706 equal?)))
5707 ;; FIXME: on Python 2, the test_utf8 fails with:
5708 ;; "ValueError: unichr() arg not in range(0x10000) (narrow Python build)"
5709 (arguments `(#:tests? #f))))
5710
5711 (define-public python-apsw
5712 (package
5713 (name "python-apsw")
5714 (version "3.9.2-r1")
5715 (source
5716 (origin
5717 (method url-fetch)
5718 (uri (pypi-uri "apsw" version))
5719 (sha256
5720 (base32
5721 "0w4jb0wpx785qw42r3h4fh7gl5w2968q48i7gygybsfxck8nzffs"))))
5722 (build-system python-build-system)
5723 (inputs
5724 `(("sqlite" ,sqlite)))
5725 (arguments
5726 `(#:phases
5727 (modify-phases %standard-phases
5728 (delete 'check)
5729 (add-after 'install 'check
5730 (lambda* (#:key inputs outputs #:allow-other-keys)
5731 (add-installed-pythonpath inputs outputs)
5732 (zero? (system* "python" "setup.py" "test")))))))
5733 (home-page "https://github.com/rogerbinns/apsw/")
5734 (synopsis "Another Python SQLite Wrapper")
5735 (description "APSW is a Python wrapper for the SQLite
5736 embedded relational database engine. In contrast to other wrappers such as
5737 pysqlite it focuses on being a minimal layer over SQLite attempting just to
5738 translate the complete SQLite API into Python.")
5739 (license license:zlib)))
5740
5741 (define-public python2-apsw
5742 (package-with-python2 python-apsw))
5743
5744 (define-public python-lxml
5745 (package
5746 (name "python-lxml")
5747 (version "3.6.0")
5748 (source
5749 (origin
5750 (method url-fetch)
5751 (uri (pypi-uri "lxml" version))
5752 (sha256
5753 (base32
5754 "1pvbmiy2m7jwv493kilbghhj2pkh8wy1na3ji350vhzhlwlclx4w"))))
5755 (build-system python-build-system)
5756 (inputs
5757 `(("libxml2" ,libxml2)
5758 ("libxslt" ,libxslt)))
5759 (home-page "http://lxml.de/")
5760 (synopsis
5761 "Python XML processing library")
5762 (description
5763 "The lxml XML toolkit is a Pythonic binding for the C libraries
5764 libxml2 and libxslt.")
5765 (license license:bsd-3))) ; and a few more, see LICENSES.txt
5766
5767 (define-public python2-lxml
5768 (package-with-python2 python-lxml))
5769
5770 ;; beautifulsoup4 has a totally different namespace than 3.x,
5771 ;; and pypi seems to put it under its own name, so I guess we should too
5772 (define-public python-beautifulsoup4
5773 (package
5774 (name "python-beautifulsoup4")
5775 (version "4.5.3")
5776 (source
5777 (origin
5778 (method url-fetch)
5779 (uri (pypi-uri "beautifulsoup4" version))
5780 (sha256
5781 (base32
5782 "0glaw1vyxnbp03fni7h5496n6iib0n5iim4gax1n0ngscs9s075j"))))
5783 (build-system python-build-system)
5784 (arguments
5785 `(#:phases
5786 (modify-phases %standard-phases
5787 ;; The Python 2 source is the definitive source of beautifulsoup4. We
5788 ;; must use this conversion script when building with Python 3. The
5789 ;; conversion script also runs the tests.
5790 ;; For more information, see the file 'convert-py3k' in the source
5791 ;; distribution.
5792 (replace 'check
5793 (lambda _ (zero? (system* "./convert-py3k")))))))
5794 (home-page
5795 "http://www.crummy.com/software/BeautifulSoup/bs4/")
5796 (synopsis
5797 "Python screen-scraping library")
5798 (description
5799 "Beautiful Soup is a Python library designed for rapidly setting up
5800 screen-scraping projects. It offers Pythonic idioms for navigating,
5801 searching, and modifying a parse tree, providing a toolkit for
5802 dissecting a document and extracting what you need. It automatically
5803 converts incoming documents to Unicode and outgoing documents to UTF-8.")
5804 (license license:expat)
5805 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
5806
5807 (define-public python2-beautifulsoup4
5808 (package
5809 (inherit (package-with-python2
5810 (strip-python2-variant python-beautifulsoup4)))
5811 (arguments `(#:python ,python-2))))
5812
5813 (define-public python-cssutils
5814 (package
5815 (name "python-cssutils")
5816 (version "1.0.1")
5817 (source
5818 (origin
5819 (method url-fetch)
5820 (uri (pypi-uri "cssutils" version))
5821 (sha256
5822 (base32
5823 "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq"))))
5824 (build-system python-build-system)
5825 (native-inputs
5826 `(("unzip" ,unzip))) ; for unpacking the source
5827 (arguments
5828 `(#:tests? #f)) ;tests require python-pbr < 1.7.0
5829 (home-page "http://cthedot.de/cssutils/")
5830 (synopsis
5831 "CSS Cascading Style Sheets library for Python")
5832 (description
5833 "Cssutils is a Python package for parsing and building CSS
5834 Cascading Style Sheets. Currently it provides a DOM only and no rendering
5835 options.")
5836 (license license:lgpl3+)))
5837
5838 (define-public python2-cssutils
5839 (package-with-python2 python-cssutils))
5840
5841 (define-public python-cssselect
5842 (package
5843 (name "python-cssselect")
5844 (version "0.9.2")
5845 (source
5846 (origin
5847 (method url-fetch)
5848 (uri (pypi-uri "cssselect" version))
5849 (sha256
5850 (base32
5851 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
5852 (build-system python-build-system)
5853 (arguments
5854 ;; tests fail with message
5855 ;; AttributeError: 'module' object has no attribute 'tests'
5856 `(#:tests? #f))
5857 (home-page
5858 "https://pythonhosted.org/cssselect/")
5859 (synopsis
5860 "CSS3 selector parser and translator to XPath 1.0")
5861 (description
5862 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5863 them to XPath 1.0 expressions. Such expressions can be used in lxml or
5864 another XPath engine to find the matching elements in an XML or HTML document.")
5865 (license license:bsd-3)))
5866
5867 (define-public python2-cssselect
5868 (package-with-python2 python-cssselect))
5869
5870 (define-public python-openid-cla
5871 (package
5872 (name "python-openid-cla")
5873 (version "1.2")
5874 (source
5875 (origin
5876 (method url-fetch)
5877 (uri (pypi-uri "python-openid-cla" version))
5878 (sha256
5879 (base32
5880 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5881 (build-system python-build-system)
5882 (arguments '(#:tests? #f)) ; No tests.
5883 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5884 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5885 (description "@code{openid-cla} is an implementation of the OpenID
5886 contributor license agreement extension for python-openid.")
5887 (license license:bsd-3)))
5888
5889 (define-public python2-openid-cla
5890 (package-with-python2 python-openid-cla))
5891
5892 (define-public python-openid-teams
5893 (package
5894 (name "python-openid-teams")
5895 (version "1.1")
5896 (source
5897 (origin
5898 (method url-fetch)
5899 (uri (pypi-uri "python-openid-teams" version))
5900 (sha256
5901 (base32
5902 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5903 (build-system python-build-system)
5904 (arguments '(#:tests? #f)) ; No tests.
5905 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5906 (synopsis "Implementation of the OpenID teams extension for python-openid")
5907 (description
5908 "@code{openid-teams} is an implementation of the OpenID
5909 teams extension for python-openid.")
5910 (license license:bsd-3)))
5911
5912 (define-public python2-openid-teams
5913 (package-with-python2 python-openid-teams))
5914
5915 (define-public python-netifaces
5916 (package
5917 (name "python-netifaces")
5918 (version "0.10.4")
5919 (source
5920 (origin
5921 (method url-fetch)
5922 (uri (string-append
5923 "https://pypi.python.org/packages/source/n/netifaces/netifaces-"
5924 version
5925 ".tar.gz"))
5926 (sha256
5927 (base32
5928 "1plw237a4zib4z8s62g0mrs8gm3kjfrp5sxh6bbk9nl3rdls2mln"))))
5929 (build-system python-build-system)
5930 (home-page
5931 "https://bitbucket.org/al45tair/netifaces")
5932 (synopsis
5933 "Python module for portable network interface information")
5934 (description
5935 "Netifaces is a Python module providing information on network
5936 interfaces in an easy and portable manner.")
5937 (license license:expat)))
5938
5939 (define-public python2-netifaces
5940 (package-with-python2 python-netifaces))
5941
5942 (define-public python-networkx
5943 (package
5944 (name "python-networkx")
5945 (version "1.11")
5946 (source
5947 (origin
5948 (method url-fetch)
5949 (uri (pypi-uri "networkx" version))
5950 (sha256
5951 (base32 "1f74s56xb4ggixiq0vxyfxsfk8p20c7a099lpcf60izv1php03hd"))))
5952 (build-system python-build-system)
5953 ;; python-decorator is needed at runtime
5954 (propagated-inputs
5955 `(("python-decorator" ,python-decorator)))
5956 (native-inputs
5957 `(("python-nose" ,python-nose)))
5958 (home-page "http://networkx.github.io/")
5959 (synopsis "Python module for creating and manipulating graphs and networks")
5960 (description
5961 "NetworkX is a Python package for the creation, manipulation, and study
5962 of the structure, dynamics, and functions of complex networks.")
5963 (license license:bsd-3)))
5964
5965 (define-public python2-networkx
5966 (package-with-python2 python-networkx))
5967
5968 (define-public snakemake
5969 (package
5970 (name "snakemake")
5971 (version "3.11.2")
5972 (source
5973 (origin
5974 (method url-fetch)
5975 (uri (pypi-uri "snakemake" version))
5976 (sha256
5977 (base32 "0qcp7y9csvanyzh08jppryhd5di8r1z7p0d4wkfg5591pj3bb8zp"))))
5978 (build-system python-build-system)
5979 (arguments
5980 ;; TODO: Package missing test dependencies.
5981 '(#:tests? #f))
5982 (propagated-inputs
5983 `(("python-wrapt" ,python-wrapt)
5984 ("python-requests" ,python-requests)))
5985 (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home")
5986 (synopsis "Python-based execution environment for make-like workflows")
5987 (description
5988 "Snakemake aims to reduce the complexity of creating workflows by
5989 providing a clean and modern domain specific specification language (DSL) in
5990 Python style, together with a fast and comfortable execution environment.")
5991 (license license:expat)))
5992
5993 (define-public python-seaborn
5994 (package
5995 (name "python-seaborn")
5996 (version "0.7.1")
5997 (source
5998 (origin
5999 (method url-fetch)
6000 (uri (pypi-uri "seaborn" version))
6001 (sha256
6002 (base32 "0pawrqc3mxpwd5g9pvi9gba02637bh5c8ldpp8izfwpfn52469zs"))))
6003 (build-system python-build-system)
6004 (arguments
6005 '(#:tests? #f)) ; Tests requires a running X11 server.
6006 (propagated-inputs
6007 `(("python-pandas" ,python-pandas)
6008 ("python-matplotlib" ,python-matplotlib)
6009 ("python-scipy" ,python-scipy)))
6010 (home-page "http://stanford.edu/~mwaskom/software/seaborn/")
6011 (synopsis "Statistical data visualization")
6012 (description
6013 "Seaborn is a library for making attractive and informative statistical
6014 graphics in Python. It is built on top of matplotlib and tightly integrated
6015 with the PyData stack, including support for numpy and pandas data structures
6016 and statistical routines from scipy and statsmodels.")
6017 (license license:bsd-3)
6018 (properties `((python2-variant . ,(delay python2-seaborn))))))
6019
6020 (define-public python2-seaborn
6021 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
6022 (package
6023 (inherit base)
6024 (propagated-inputs `(("python2-pytz" ,python2-pytz)
6025 ,@(package-propagated-inputs base))))))
6026
6027 (define-public python-mpmath
6028 (package
6029 (name "python-mpmath")
6030 (version "0.19")
6031 (source (origin
6032 (method url-fetch)
6033 (uri (string-append "http://mpmath.org/files/mpmath-"
6034 version ".tar.gz"))
6035 (sha256
6036 (base32
6037 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
6038 (build-system python-build-system)
6039 (arguments
6040 '(#:phases
6041 (modify-phases %standard-phases
6042 (replace 'check
6043 (lambda _
6044 (zero?
6045 (system* "python" "mpmath/tests/runtests.py" "-local")))))))
6046 (home-page "http://mpmath.org")
6047 (synopsis "Arbitrary-precision floating-point arithmetic in python")
6048 (description
6049 "@code{mpmath} can be used as an arbitrary-precision substitute for
6050 Python's float/complex types and math/cmath modules, but also does much
6051 more advanced mathematics.")
6052 (license license:bsd-3)))
6053
6054 (define-public python2-mpmath
6055 (package-with-python2 python-mpmath))
6056
6057 (define-public python-sympy
6058 (package
6059 (name "python-sympy")
6060 (version "1.0")
6061 (source
6062 (origin
6063 (method url-fetch)
6064 (uri (string-append
6065 "https://github.com/sympy/sympy/releases/download/sympy-"
6066 version "/sympy-" version ".tar.gz"))
6067 (sha256
6068 (base32 "1bpzjwr9hrr7w88v4vgnj9lr6vxcldc94si13n8xpr1rv08d5b1y"))))
6069 (build-system python-build-system)
6070 (propagated-inputs
6071 `(("python-mpmath" ,python-mpmath)))
6072 (home-page "http://www.sympy.org/")
6073 (synopsis "Python library for symbolic mathematics")
6074 (description
6075 "SymPy is a Python library for symbolic mathematics. It aims to become a
6076 full-featured computer algebra system (CAS) while keeping the code as simple
6077 as possible in order to be comprehensible and easily extensible.")
6078 (license license:bsd-3)))
6079
6080 (define-public python2-sympy
6081 (package-with-python2 python-sympy))
6082
6083 (define-public python-q
6084 (package
6085 (name "python-q")
6086 (version "2.6")
6087 (source
6088 (origin
6089 (method url-fetch)
6090 (uri (pypi-uri "q" version))
6091 (sha256
6092 (base32
6093 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
6094 (build-system python-build-system)
6095 (home-page "https://github.com/zestyping/q")
6096 (synopsis "Quick-and-dirty debugging output for tired programmers")
6097 (description
6098 "q is a Python module for \"print\" style of debugging Python code. It
6099 provides convenient short API for print out of values, tracebacks, and
6100 falling into the Python interpreter.")
6101 (license license:asl2.0)))
6102
6103 (define-public python2-q
6104 (package-with-python2 python-q))
6105
6106 (define-public python-testlib
6107 (package
6108 (name "python-testlib")
6109 (version "0.6.5")
6110 (source
6111 (origin
6112 (method url-fetch)
6113 (uri (string-append
6114 "https://pypi.python.org/packages/source/t/testlib/testlib-"
6115 version ".zip"))
6116 (sha256
6117 (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
6118 (build-system python-build-system)
6119 (native-inputs
6120 `(("unzip" ,unzip))) ; for unpacking the source
6121 (synopsis "Python micro test suite harness")
6122 (description "A micro unittest suite harness for Python.")
6123 (home-page "https://github.com/trentm/testlib")
6124 (license license:expat)))
6125
6126 (define-public python2-testlib
6127 (package-with-python2 python-testlib))
6128
6129 (define-public python2-xlib
6130 (package
6131 (name "python2-xlib")
6132 (version "0.14")
6133 (source (origin
6134 (method url-fetch)
6135 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
6136 "/" version "/"
6137 "python-xlib-" version ".tar.gz"))
6138 (sha256
6139 (base32
6140 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
6141 (build-system python-build-system)
6142 (arguments
6143 `(#:python ,python-2 ;Python 2 only
6144 #:tests? #f)) ;no tests
6145 (home-page "http://python-xlib.sourceforge.net/")
6146 (synopsis "Python X11 client library")
6147 (description
6148 "The Python X Library is intended to be a fully functional X client
6149 library for Python programs. It is useful to implement low-level X clients.
6150 It is written entirely in Python.")
6151 (license license:gpl2+)))
6152
6153 (define-public python-singledispatch
6154 (package
6155 (name "python-singledispatch")
6156 (version "3.4.0.3")
6157 (source
6158 (origin
6159 (method url-fetch)
6160 (uri (pypi-uri "singledispatch" version))
6161 (sha256
6162 (base32
6163 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
6164 (build-system python-build-system)
6165 (native-inputs
6166 `(("python-six" ,python-six))) ; required for conversion, not at run-time
6167 (home-page
6168 "http://docs.python.org/3/library/functools.html#functools.singledispatch")
6169 (synopsis "Backport of singledispatch feature from Python 3.4")
6170 (description
6171 "This library brings functools.singledispatch from Python 3.4 to Python
6172 2.6-3.3.")
6173 (license license:expat)))
6174
6175 (define-public python2-singledispatch
6176 (package-with-python2 python-singledispatch))
6177
6178 (define-public python-tornado
6179 (package
6180 (name "python-tornado")
6181 (version "4.5.1")
6182 (source
6183 (origin
6184 (method url-fetch)
6185 (uri (pypi-uri "tornado" version))
6186 (sha256
6187 (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
6188 (build-system python-build-system)
6189 (arguments
6190 '(;; FIXME: Two tests error out with:
6191 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
6192 ;; #:phases
6193 ;; (modify-phases %standard-phases
6194 ;; (replace 'check
6195 ;; (lambda _
6196 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
6197 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
6198 ;; (zero? (system* "python" "-m" "tornado.test")))))
6199 #:tests? #f))
6200 (native-inputs
6201 `(("python-certifi" ,python-certifi)))
6202 (propagated-inputs
6203 `(("python-backports-abc" ,python-backports-abc)))
6204 (home-page "http://www.tornadoweb.org/")
6205 (synopsis "Python web framework and asynchronous networking library")
6206 (description
6207 "Tornado is a Python web framework and asynchronous networking library,
6208 originally developed at FriendFeed. By using non-blocking network I/O,
6209 Tornado can scale to tens of thousands of open connections, making it ideal
6210 for long polling, WebSockets, and other applications that require a long-lived
6211 connection to each user.")
6212 (license license:asl2.0)
6213 (properties `((python2-variant . ,(delay python2-tornado))))))
6214
6215 (define-public python2-tornado
6216 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
6217 (package (inherit tornado)
6218 (propagated-inputs
6219 `(("python2-backport-ssl-match-hostname"
6220 ,python2-backport-ssl-match-hostname)
6221 ("python2-singledispatch" ,python2-singledispatch)
6222 ,@(package-propagated-inputs tornado))))))
6223
6224 ;; the python- version can be removed with python-3.5
6225 (define-public python-backports-abc
6226 (package
6227 (name "python-backports-abc")
6228 (version "0.5")
6229 (source
6230 (origin
6231 (method url-fetch)
6232 (uri (pypi-uri "backports_abc" version))
6233 (sha256
6234 (base32
6235 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
6236 (build-system python-build-system)
6237 (home-page "https://github.com/cython/backports_abc")
6238 (synopsis "Backport of additions to the 'collections.abc' module")
6239 (description
6240 "Python-backports-abc provides a backport of additions to the
6241 'collections.abc' module in Python-3.5.")
6242 (license license:psfl)))
6243
6244 (define-public python2-backports-abc
6245 (package-with-python2 python-backports-abc))
6246
6247 (define-public python2-backports-shutil-get-terminal-size
6248 (package
6249 (name "python2-backports-shutil-get-terminal-size")
6250 (version "1.0.0")
6251 (source
6252 (origin
6253 (method url-fetch)
6254 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
6255 (sha256
6256 (base32
6257 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
6258 (build-system python-build-system)
6259 (arguments
6260 `(#:python ,python-2
6261 #:phases
6262 (modify-phases %standard-phases
6263 (replace 'check
6264 (lambda _
6265 (zero? (system* "py.test" "-v")))))))
6266 (native-inputs
6267 `(("python2-pytest" ,python2-pytest)))
6268 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
6269 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
6270 (description
6271 "This package provides a backport of the @code{get_terminal_size
6272 function} from Python 3.3's @code{shutil}.
6273 Unlike the original version it is written in pure Python rather than C,
6274 so it might be a tiny bit slower.")
6275 (license license:expat)))
6276
6277 (define-public python-waf
6278 (package
6279 (name "python-waf")
6280 (version "1.9.8")
6281 (source (origin
6282 (method url-fetch)
6283 (uri (string-append "https://waf.io/"
6284 "waf-" version ".tar.bz2"))
6285 (sha256
6286 (base32
6287 "0wl4cnmp06lfxqjxaan58bqxn27smhydz0sg5prrfbl3bsw4gv6q"))))
6288 (build-system python-build-system)
6289 (arguments
6290 '(#:phases
6291 (modify-phases %standard-phases
6292 (replace 'build
6293 (lambda _
6294 (zero? (system* "python" "waf-light" "configure" "build"))))
6295 (replace 'check
6296 (lambda _
6297 (zero? (system* "python" "waf" "--version"))))
6298 (replace 'install
6299 (lambda _
6300 (copy-file "waf" %output))))))
6301 (home-page "https://waf.io/")
6302 (synopsis "Python-based build system")
6303 (description
6304 "Waf is a Python-based framework for configuring, compiling and installing
6305 applications.")
6306 (license license:bsd-3)))
6307
6308 (define-public python2-waf
6309 (package-with-python2 python-waf))
6310
6311 (define-public python-pyzmq
6312 (package
6313 (name "python-pyzmq")
6314 (version "15.1.0")
6315 (source
6316 (origin
6317 (method url-fetch)
6318 (uri (pypi-uri "pyzmq" version))
6319 (sha256
6320 (base32 "13fhwnlvsvxv72kfhqbpn6qi7msh8mc8377mpabv32skk2cjfnxx"))))
6321 (build-system python-build-system)
6322 (arguments
6323 `(#:configure-flags
6324 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
6325 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
6326 ;; --inplace' for 'python setup.py test' to work.
6327 #:tests? #f))
6328 (inputs
6329 `(("zeromq" ,zeromq)))
6330 (native-inputs
6331 `(("pkg-config" ,pkg-config)
6332 ("python-nose" ,python-nose)))
6333 (home-page "https://github.com/zeromq/pyzmq")
6334 (synopsis "Python bindings for 0MQ")
6335 (description
6336 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
6337 (license license:bsd-4)))
6338
6339 (define-public python2-pyzmq
6340 (package-with-python2 python-pyzmq))
6341
6342 (define-public python-pep8
6343 (package
6344 (name "python-pep8")
6345 (version "1.7.0")
6346 (source
6347 (origin
6348 (method url-fetch)
6349 (uri (pypi-uri "pep8" version))
6350 (sha256
6351 (base32
6352 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))))
6353 (build-system python-build-system)
6354 (home-page "http://pep8.readthedocs.org/")
6355 (synopsis "Python style guide checker")
6356 (description
6357 "This tools checks Python code against some of the style conventions in
6358 PEP 8.")
6359 (license license:expat)))
6360
6361 (define-public python2-pep8
6362 (package-with-python2 python-pep8))
6363
6364 (define-public python-pyflakes
6365 (package
6366 (name "python-pyflakes")
6367 (version "1.0.0")
6368 (source
6369 (origin
6370 (method url-fetch)
6371 (uri (pypi-uri "pyflakes" version))
6372 (sha256
6373 (base32
6374 "0qs2sgqszq7wcplis8509wk2ygqcrwzbs1ghfj3svvivq2j377pk"))))
6375 (build-system python-build-system)
6376 (home-page
6377 "https://github.com/pyflakes/pyflakes")
6378 (synopsis "Passive checker of Python programs")
6379 (description
6380 "Pyflakes statically checks Python source code for common errors.")
6381 (license license:expat)))
6382
6383 (define-public python2-pyflakes
6384 (package-with-python2 python-pyflakes))
6385
6386 (define-public python-mccabe
6387 (package
6388 (name "python-mccabe")
6389 (version "0.4.0")
6390 (source
6391 (origin
6392 (method url-fetch)
6393 (uri (pypi-uri "mccabe" version))
6394 (sha256
6395 (base32
6396 "0yr08a36h8lqlif10l4xcikbbig7q8f41gqywir7rrvnv3mi4aws"))))
6397 (build-system python-build-system)
6398 (native-inputs
6399 `(("python-pytest" ,python-pytest)
6400 ("python-pytest-runner" ,python-pytest-runner)))
6401 (home-page "https://github.com/flintwork/mccabe")
6402 (synopsis "McCabe checker, plugin for flake8")
6403 (description
6404 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
6405 complexity of Python source code.")
6406 (license license:expat)))
6407
6408 (define-public python2-mccabe
6409 (package-with-python2 python-mccabe))
6410
6411 (define-public python-mccabe-0.2.1
6412 (package (inherit python-mccabe)
6413 (version "0.2.1")
6414 (source
6415 (origin
6416 (method url-fetch)
6417 (uri (pypi-uri "mccabe" version))
6418 (sha256
6419 (base32
6420 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
6421
6422 (define-public python2-mccabe-0.2.1
6423 (package-with-python2 python-mccabe-0.2.1))
6424
6425 ;; Flake8 2.4.1 requires an older version of pep8.
6426 ;; This should be removed ASAP.
6427 (define-public python-pep8-1.5.7
6428 (package (inherit python-pep8)
6429 (version "1.5.7")
6430 (source
6431 (origin
6432 (method url-fetch)
6433 (uri (string-append
6434 "https://pypi.python.org/packages/source/p/pep8/pep8-"
6435 version
6436 ".tar.gz"))
6437 (sha256
6438 (base32
6439 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
6440 (arguments
6441 ;; XXX Tests not compatible with Python 3.5.
6442 '(#:tests? #f))))
6443
6444 (define-public python2-pep8-1.5.7
6445 (package-with-python2 python-pep8-1.5.7))
6446
6447 ;; Flake8 2.4.1 requires an older version of pyflakes.
6448 ;; This should be removed ASAP.
6449 (define-public python-pyflakes-0.8.1
6450 (package (inherit python-pyflakes)
6451 (version "0.8.1")
6452 (source
6453 (origin
6454 (method url-fetch)
6455 (uri (string-append
6456 "https://pypi.python.org/packages/source/p/pyflakes/pyflakes-"
6457 version
6458 ".tar.gz"))
6459 (sha256
6460 (base32
6461 "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
6462 (arguments
6463 ;; XXX Tests not compatible with Python 3.5.
6464 '(#:tests? #f))))
6465
6466 (define-public python2-pyflakes-0.8.1
6467 (package-with-python2 python-pyflakes-0.8.1))
6468
6469 (define-public python-flake8
6470 (package
6471 (name "python-flake8")
6472 (version "2.5.4")
6473 (source
6474 (origin
6475 (method url-fetch)
6476 (uri (pypi-uri "flake8" version))
6477 (sha256
6478 (base32
6479 "0bs9cz4fr99r2rwig1b8jwaadl1nan7kgpdzqwj0bwbckwbmh7nc"))
6480 (modules '((guix build utils)))
6481 (snippet
6482 '(begin
6483 ;; Remove pre-compiled .pyc files from source.
6484 (for-each delete-file-recursively
6485 (find-files "." "__pycache__" #:directories? #t))
6486 (for-each delete-file (find-files "." "\\.pyc$"))
6487 #t))))
6488 (build-system python-build-system)
6489 (propagated-inputs
6490 `(("python-pep8" ,python-pep8)
6491 ("python-pyflakes" ,python-pyflakes)
6492 ("python-mccabe" ,python-mccabe)))
6493 (native-inputs
6494 `(("python-mock" ,python-mock) ; TODO: only required for < 3.3
6495 ("python-nose" ,python-nose)))
6496 (home-page "https://gitlab.com/pycqa/flake8")
6497 (synopsis
6498 "The modular source code checker: pep8, pyflakes and co")
6499 (description
6500 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
6501 (license license:expat)))
6502
6503 (define-public python2-flake8
6504 (package-with-python2 python-flake8))
6505
6506 ;; This will only be needed by the python-hacking package and will not be
6507 ;; necessary once python-hacking > 0.10.2 is released.
6508 (define-public python-flake8-2.2.4
6509 (package (inherit python-flake8)
6510 (propagated-inputs
6511 `(("python-pep8" ,python-pep8-1.5.7)
6512 ("python-pyflakes" ,python-pyflakes-0.8.1)
6513 ("python-mccabe" ,python-mccabe-0.2.1)))
6514 (native-inputs
6515 `(("python-mock" ,python-mock)
6516 ("python-nose" ,python-nose)))
6517 (version "2.2.4")
6518 (source
6519 (origin
6520 (method url-fetch)
6521 (uri (pypi-uri "flake8" version))
6522 (sha256
6523 (base32
6524 "1r9wsry4va45h1rck5hxd3vzsg2q3y6lnl6pym1bxvz8ry19jwx8"))
6525 (modules '((guix build utils)))
6526 (snippet
6527 '(begin
6528 ;; Remove pre-compiled .pyc files from source.
6529 (for-each delete-file-recursively
6530 (find-files "." "__pycache__" #:directories? #t))
6531 (for-each delete-file (find-files "." "\\.pyc$"))
6532 #t))))
6533 (arguments
6534 ;; XXX Fails with Python 3.5.
6535 '(#:tests? #f))))
6536
6537 (define-public python2-flake8-2.2.4
6538 (package-with-python2 python-flake8-2.2.4))
6539
6540 (define-public python-flake8-polyfill
6541 (package
6542 (name "python-flake8-polyfill")
6543 (version "1.0.1")
6544 (source
6545 (origin
6546 (method url-fetch)
6547 (uri (pypi-uri "flake8-polyfill" version))
6548 (sha256
6549 (base32
6550 "02gn2wxvh9vnf7m7dld7ca4l60mg5c370hv3swwppkngwaqmcw67"))))
6551 (build-system python-build-system)
6552 (arguments
6553 '(#:phases
6554 (modify-phases %standard-phases
6555 (replace 'check
6556 (lambda _
6557 (setenv "PYTHONPATH"
6558 (string-append (getcwd) "/build/lib:"
6559 (getenv "PYTHONPATH")))
6560 (zero? (system* "py.test" "-v")))))))
6561 (native-inputs
6562 `(("python-flake8" ,python-flake8)
6563 ("python-mock" ,python-mock)
6564 ("python-pycodestyle" ,python-pycodestyle)
6565 ("python-pytest" ,python-pytest)))
6566 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
6567 (synopsis "Polyfill package for Flake8 plugins")
6568 (description
6569 "This package that provides some compatibility helpers for Flake8
6570 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
6571 (license license:expat)))
6572
6573 (define-public python2-flake8-polyfill
6574 (package-with-python2 python-flake8-polyfill))
6575
6576 (define-public python-mistune
6577 (package
6578 (name "python-mistune")
6579 (version "0.7.3")
6580 (source
6581 (origin
6582 (method url-fetch)
6583 (uri (pypi-uri "mistune" version))
6584 (sha256
6585 (base32
6586 "04xpk1zvslhq3xpnf01g3ag0dy9wfv4z28p093r8k49vvxlyil11"))))
6587 (build-system python-build-system)
6588 (native-inputs
6589 `(("python-nose" ,python-nose)
6590 ("python-cython" ,python-cython)))
6591 (home-page "https://github.com/lepture/mistune")
6592 (synopsis "Markdown parser in pure Python")
6593 (description "This package provides a fast markdown parser in pure
6594 Python.")
6595 (license license:bsd-3)))
6596
6597 (define-public python2-mistune
6598 (package-with-python2 python-mistune))
6599
6600 (define-public python-markdown
6601 (package
6602 (name "python-markdown")
6603 (version "2.6.8")
6604 (source
6605 (origin
6606 (method url-fetch)
6607 (uri (pypi-uri "Markdown" version))
6608 (sha256
6609 (base32
6610 "0cqfhr1km2s5d8jm6hbwgkrrj9hvkjf2gab3s2axlrw1clgaij0a"))))
6611 (build-system python-build-system)
6612 (arguments
6613 `(#:phases
6614 (modify-phases %standard-phases
6615 (replace 'check
6616 (lambda _
6617 (zero? (system* "python" "run-tests.py")))))))
6618 (native-inputs
6619 `(("python-nose" ,python-nose)
6620 ("python-pyyaml" ,python-pyyaml)))
6621 (home-page "https://pythonhosted.org/Markdown/")
6622 (synopsis "Python implementation of Markdown")
6623 (description
6624 "This package provides a Python implementation of John Gruber's
6625 Markdown. The library features international input, various Markdown
6626 extensions, and several HTML output formats. A command line wrapper
6627 markdown_py is also provided to convert Markdown files to HTML.")
6628 (license license:bsd-3)))
6629
6630 (define-public python2-markdown
6631 (package-with-python2 python-markdown))
6632
6633 (define-public python-ptyprocess
6634 (package
6635 (name "python-ptyprocess")
6636 (version "0.5.1")
6637 (source
6638 (origin
6639 (method url-fetch)
6640 (uri (string-append
6641 "https://pypi.python.org/packages/source/p/ptyprocess/ptyprocess-"
6642 version ".tar.gz"))
6643 (sha256
6644 (base32
6645 "19l1xrjn4l9gjz01s3vg92gn2dd9d8mw1v86ppkzlnr9m5iwwc05"))))
6646 (build-system python-build-system)
6647 (native-inputs
6648 `(("python-nose" ,python-nose)))
6649 (arguments
6650 `(#:phases
6651 (modify-phases %standard-phases
6652 (replace 'check
6653 (lambda _
6654 (zero? (system* "nosetests")))))))
6655 (home-page "https://github.com/pexpect/ptyprocess")
6656 (synopsis "Run a subprocess in a pseudo terminal")
6657 (description
6658 "This package provides a Python library used to launch a subprocess in a
6659 pseudo terminal (pty), and interact with both the process and its pty.")
6660 (license license:isc)))
6661
6662 (define-public python2-ptyprocess
6663 (package-with-python2 python-ptyprocess))
6664
6665 (define-public python-cram
6666 (package
6667 (name "python-cram")
6668 (version "0.7")
6669 (home-page "https://bitheap.org/cram/")
6670 (source (origin
6671 (method url-fetch)
6672 (uri (list (string-append home-page "cram-"
6673 version ".tar.gz")
6674 (pypi-uri "cram" version)))
6675 (sha256
6676 (base32
6677 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
6678 (arguments
6679 '(#:phases
6680 (modify-phases %standard-phases
6681 (add-after 'unpack 'patch-source
6682 (lambda _
6683 (substitute* (find-files "cram" ".*\\.py$")
6684 ;; Replace default shell path.
6685 (("/bin/sh") (which "sh")))
6686 (substitute* (find-files "tests" ".*\\.t$")
6687 (("md5") "md5sum")
6688 (("/bin/bash") (which "bash"))
6689 (("/bin/sh") (which "sh")))
6690 (substitute* "cram/_test.py"
6691 ;; This hack works around a bug triggered by substituting
6692 ;; the /bin/sh paths. "tests/usage.t" compares the output of
6693 ;; "cram -h", which breaks the output at 80 characters. This
6694 ;; causes the line showing the default shell to break into two
6695 ;; lines, but the test expects a single line...
6696 (("env\\['COLUMNS'\\] = '80'")
6697 "env['COLUMNS'] = '160'"))
6698 #t))
6699 (delete 'check)
6700 (add-after 'install 'check
6701 ;; The test phase uses the built library and executable.
6702 ;; It's easier to run it after install since the build
6703 ;; directory contains version-specific PATH.
6704 (lambda* (#:key inputs outputs #:allow-other-keys)
6705 (add-installed-pythonpath inputs outputs)
6706 (setenv "PATH" (string-append (getenv "PATH") ":"
6707 (assoc-ref outputs "out") "/bin"))
6708 (zero? (system* "make" "test")))))))
6709 (build-system python-build-system)
6710 (native-inputs
6711 `(("python-coverage" ,python-coverage)
6712 ("which" ,which)))
6713 (synopsis "Simple testing framework for command line applications")
6714 (description
6715 "Cram is a functional testing framework for command line applications.
6716 Cram tests look like snippets of interactive shell sessions. Cram runs each
6717 command and compares the command output in the test with the command’s actual
6718 output.")
6719 (license license:gpl2+)))
6720
6721 (define-public python2-cram
6722 (package-with-python2 python-cram))
6723
6724 (define-public python-terminado
6725 (package
6726 (name "python-terminado")
6727 (version "0.6")
6728 (source
6729 (origin
6730 (method url-fetch)
6731 (uri (pypi-uri "terminado" version))
6732 (sha256
6733 (base32
6734 "09h1kwi86g5mrk14s4pgbhshd602zry29lnpxamcqz864kva22rc"))))
6735 (build-system python-build-system)
6736 (propagated-inputs
6737 `(("python-tornado" ,python-tornado)
6738 ("python-ptyprocess" ,python-ptyprocess)))
6739 (native-inputs
6740 `(("python-nose" ,python-nose)))
6741 (arguments
6742 `(#:phases
6743 (modify-phases %standard-phases
6744 (replace 'check
6745 (lambda _
6746 (zero? (system* "nosetests")))))))
6747 (home-page "https://github.com/takluyver/terminado")
6748 (synopsis "Terminals served to term.js using Tornado websockets")
6749 (description "This package provides a Tornado websocket backend for the
6750 term.js Javascript terminal emulator library.")
6751 (license license:bsd-2)
6752 (properties `((python2-variant . ,(delay python2-terminado))))))
6753
6754 (define-public python2-terminado
6755 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
6756 (package (inherit terminado)
6757 (propagated-inputs
6758 `(("python2-backport-ssl-match-hostname"
6759 ,python2-backport-ssl-match-hostname)
6760 ,@(package-propagated-inputs terminado))))))
6761
6762 (define-public python-straight-plugin
6763 (package
6764 (name "python-straight-plugin")
6765 (version "1.4.1")
6766 (source
6767 (origin
6768 (method url-fetch)
6769 (uri (pypi-uri "straight.plugin" version))
6770 (sha256
6771 (base32
6772 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
6773 (build-system python-build-system)
6774 (home-page "https://github.com/ironfroggy/straight.plugin")
6775 (synopsis "Simple namespaced plugin facility")
6776 (description "Straight Plugin provides a type of plugin you can create from
6777 almost any existing Python modules, and an easy way for outside developers to
6778 add functionality and customization to your projects with their own plugins.")
6779 (license license:expat)))
6780
6781 (define-public python2-straight-plugin
6782 (package-with-python2 python-straight-plugin))
6783
6784 (define-public python-fonttools
6785 (package
6786 (name "python-fonttools")
6787 (version "2.5")
6788 (source (origin
6789 (method url-fetch)
6790 (uri (string-append
6791 "https://pypi.python.org/packages/source/F/FontTools/"
6792 "fonttools-" version ".tar.gz"))
6793 (sha256
6794 (base32
6795 "08ay3x4ijarwhl60gqx2i9jzq6pxs20p4snc2d1q5jagh4rn39lb"))))
6796 (build-system python-build-system)
6797 (arguments
6798 '(#:test-target "check"
6799 #:phases
6800 (modify-phases %standard-phases
6801 (add-after 'unpack 'patch-setuppy
6802 ;; Remove the undocumented "extra_path" argument, which adds an
6803 ;; intervening directories between site-packages and the package
6804 ;; directory.
6805 (lambda _
6806 (substitute* "setup.py"
6807 (("^[ \t]*extra_path *= *'FontTools',") ""))
6808 #t)))))
6809 (home-page "https://github.com/behdad/fonttools")
6810 (synopsis "Tools to manipulate font files")
6811 (description
6812 "FontTools/TTX is a library to manipulate font files from Python. It
6813 supports reading and writing of TrueType/OpenType fonts, reading and writing
6814 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
6815 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
6816 from an XML-based format.")
6817 (license (license:non-copyleft
6818 "file://LICENSE.txt"
6819 "See LICENSE.txt in the distribution."))))
6820
6821 (define-public python2-fonttools
6822 (package-with-python2 python-fonttools))
6823
6824 (define-public python-ly
6825 (package
6826 (name "python-ly")
6827 (version "0.9.4")
6828 (source
6829 (origin
6830 (method url-fetch)
6831 (uri (string-append "https://pypi.python.org/packages/57/4f/"
6832 "889579244947368f28eda66b782331b1e75f83fd72e63f9ece93cd7a18f9"
6833 "/python-ly-" version ".tar.gz"))
6834 (sha256
6835 (base32
6836 "0g6n288l83sfwavxh1aryi0aqvsr3sp7v6f903mckwqa4scpky62"))))
6837 (build-system python-build-system)
6838 (arguments
6839 ;; FIXME: Some tests need network access.
6840 '(#:tests? #f))
6841 (synopsis "Tool and library for manipulating LilyPond files")
6842 (description "This package provides a Python library to parse, manipulate
6843 or create documents in LilyPond format. A command line program ly is also
6844 provided that can be used to do various manipulations with LilyPond files.")
6845 (home-page "https://pypi.python.org/pypi/python-ly")
6846 (license license:gpl2+)))
6847
6848 (define-public python-appdirs
6849 (package
6850 (name "python-appdirs")
6851 (version "1.4.3")
6852 (source
6853 (origin
6854 (method url-fetch)
6855 (uri (pypi-uri "appdirs" version))
6856 (sha256
6857 (base32
6858 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
6859 (build-system python-build-system)
6860 (home-page "https://github.com/ActiveState/appdirs")
6861 (synopsis
6862 "Determine platform-specific dirs, e.g. a \"user data dir\"")
6863 (description
6864 "This module provides a portable way of finding out where user data
6865 should be stored on various operating systems.")
6866 (license license:expat)))
6867
6868 (define-public python2-appdirs
6869 (package-with-python2 python-appdirs))
6870
6871 (define-public python-llfuse
6872 (package
6873 (name "python-llfuse")
6874 (version "1.2")
6875 (source (origin
6876 (method url-fetch)
6877 (uri (string-append
6878 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
6879 "llfuse-" version ".tar.bz2"))
6880 (sha256
6881 (base32
6882 "11hms1x68bf1bqbqy7w3wpffqsd3jkgricmzrc1hrnwkswfzzlr4"))))
6883 (build-system python-build-system)
6884 (inputs
6885 `(("fuse" ,fuse)
6886 ("attr" ,attr)))
6887 (native-inputs
6888 `(("pkg-config" ,pkg-config)))
6889 (synopsis "Python bindings for FUSE")
6890 (description
6891 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
6892 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
6893 (license license:lgpl2.0+)
6894 (properties `((python2-variant . ,(delay python2-llfuse))))))
6895
6896 (define-public python2-llfuse
6897 (package (inherit (package-with-python2
6898 (strip-python2-variant python-llfuse)))
6899 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
6900
6901 ;; For attic-0.16
6902 (define-public python-llfuse-0.41
6903 (package (inherit python-llfuse)
6904 (version "0.41.1")
6905 (source (origin
6906 (method url-fetch)
6907 (uri (string-append
6908 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
6909 "llfuse-" version ".tar.bz2"))
6910 (sha256
6911 (base32
6912 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
6913 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
6914 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
6915 (license (list license:expat license:lgpl2.0+))))
6916
6917 (define-public python-msgpack
6918 (package
6919 (name "python-msgpack")
6920 (version "0.4.8")
6921 (source (origin
6922 (method url-fetch)
6923 (uri (pypi-uri "msgpack-python" version))
6924 (sha256
6925 (base32
6926 "11pqk5braa6wndpnr1dhg64js82vjgxnm0lzy73rwl831zgijaqs"))))
6927 (build-system python-build-system)
6928 (synopsis "MessagePack (de)serializer")
6929 (description "MessagePack is a fast, compact binary serialization format,
6930 suitable for similar data to JSON. This package provides CPython bindings for
6931 reading and writing MessagePack data.")
6932 (home-page "https://pypi.python.org/pypi/msgpack-python/")
6933 (license license:asl2.0)))
6934
6935 (define-public python2-msgpack
6936 (package-with-python2 python-msgpack))
6937
6938 (define-public python-netaddr
6939 (package
6940 (name "python-netaddr")
6941 (version "0.7.18")
6942 (source
6943 (origin
6944 (method url-fetch)
6945 (uri (string-append
6946 "https://pypi.python.org/packages/source/n/netaddr/netaddr-"
6947 version
6948 ".tar.gz"))
6949 (sha256
6950 (base32
6951 "06dxjlbcicq7q3vqy8agq11ra01kvvd47j4mk6dmghjsyzyckxd1"))))
6952 (build-system python-build-system)
6953 (arguments `(#:tests? #f)) ;; No tests.
6954 (home-page "https://github.com/drkjam/netaddr/")
6955 (synopsis "Pythonic manipulation of network addresses")
6956 (description
6957 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6958 and MAC network addresses.")
6959 (license license:bsd-3)))
6960
6961 (define-public python2-netaddr
6962 (package-with-python2 python-netaddr))
6963
6964 (define-public python-wrapt
6965 (package
6966 (name "python-wrapt")
6967 (version "1.10.8")
6968 (source
6969 (origin
6970 (method url-fetch)
6971 (uri (pypi-uri "wrapt" version))
6972 (sha256
6973 (base32
6974 "0wrcm1mydvfivbkzz0h81ygzdchnscshi6xvy5n3r21r9s0px8af"))))
6975 (build-system python-build-system)
6976 (arguments
6977 ;; Tests are not included in the tarball, they are only available in the
6978 ;; git repository.
6979 `(#:tests? #f))
6980 (home-page "https://github.com/GrahamDumpleton/wrapt")
6981 (synopsis "Module for decorators, wrappers and monkey patching")
6982 (description
6983 "The aim of the wrapt module is to provide a transparent object proxy for
6984 Python, which can be used as the basis for the construction of function
6985 wrappers and decorator functions.")
6986 (license license:bsd-2)))
6987
6988 (define-public python2-wrapt
6989 (package-with-python2 python-wrapt))
6990
6991 (define-public python-iso8601
6992 (package
6993 (name "python-iso8601")
6994 (version "0.1.11")
6995 (source
6996 (origin
6997 (method url-fetch)
6998 (uri (pypi-uri "iso8601" version))
6999 (sha256
7000 (base32
7001 "0c7gh3lsdjds262h0v1sqc66l7hqgfwbakn96qrhdbl0i3vm5yz8"))))
7002 (build-system python-build-system)
7003 (native-inputs
7004 `(("python-pytest" ,python-pytest)))
7005 (home-page "https://bitbucket.org/micktwomey/pyiso8601")
7006 (synopsis "Module to parse ISO 8601 dates")
7007 (description
7008 "This module parses the most common forms of ISO 8601 date strings (e.g.
7009 @code{2007-01-14T20:34:22+00:00}) into @code{datetime} objects.")
7010 (license license:expat)))
7011
7012 (define-public python2-iso8601
7013 (package-with-python2 python-iso8601))
7014
7015 (define-public python-monotonic
7016 (package
7017 (name "python-monotonic")
7018 (version "0.3")
7019 (source
7020 (origin
7021 (method url-fetch)
7022 (uri (string-append
7023 "https://pypi.python.org/packages/source/m/monotonic/monotonic-"
7024 version
7025 ".tar.gz"))
7026 (sha256
7027 (base32
7028 "0yz0bcbwx8r2c01czzfpbrxddynxyk9k95jj8h6sgcb7xmfvl998"))))
7029 (build-system python-build-system)
7030 (home-page "https://github.com/atdt/monotonic")
7031 (synopsis "Implementation of time.monotonic() for Python 2 & < 3.3")
7032 (description
7033 "This module provides a monotonic() function which returns the value (in
7034 fractional seconds) of a clock which never goes backwards.")
7035 (license license:asl2.0)))
7036
7037 (define-public python2-monotonic
7038 (package-with-python2 python-monotonic))
7039
7040 (define-public python-webob
7041 (package
7042 (name "python-webob")
7043 (version "1.5.1")
7044 (source
7045 (origin
7046 (method url-fetch)
7047 (uri (pypi-uri "WebOb" version))
7048 (sha256
7049 (base32
7050 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
7051 (build-system python-build-system)
7052 (native-inputs
7053 `(("python-nose" ,python-nose)))
7054 (home-page "http://webob.org/")
7055 (synopsis "WSGI request and response object")
7056 (description
7057 "WebOb provides wrappers around the WSGI request environment, and an
7058 object to help create WSGI responses.")
7059 (license license:expat)))
7060
7061 (define-public python2-webob
7062 (package-with-python2 python-webob))
7063
7064 (define-public python-xlrd
7065 (package
7066 (name "python-xlrd")
7067 (version "1.0.0")
7068 (source (origin
7069 (method url-fetch)
7070 (uri (pypi-uri "xlrd" version))
7071 (sha256
7072 (base32
7073 "0s8hjiz01vbhy85xalrz0qlsmd9ypf36zjqrf97hh984spapvy0g"))))
7074 (build-system python-build-system)
7075 (arguments
7076 `(#:phases
7077 (modify-phases %standard-phases
7078 ;; Current test in setup.py does not work as of 1.0.0, so use nose to
7079 ;; run tests instead for now.
7080 (replace 'check (lambda _ (zero? (system* "nosetests")))))))
7081 (native-inputs `(("python-nose" ,python-nose)))
7082 (home-page "http://www.python-excel.org/")
7083 (synopsis "Library for extracting data from Excel files")
7084 (description "This packages provides a library to extract data from
7085 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
7086 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
7087 Unicode-aware. It is not intended as an end-user tool.")
7088 (license license:bsd-3)))
7089
7090 (define-public python2-xlrd
7091 (package-with-python2 python-xlrd))
7092
7093 (define-public python-prettytable
7094 (package
7095 (name "python-prettytable")
7096 (version "0.7.2")
7097 (source
7098 (origin
7099 (method url-fetch)
7100 (uri (string-append
7101 "https://pypi.python.org/packages/source/P/PrettyTable/"
7102 "prettytable-" version ".tar.bz2"))
7103 (sha256
7104 (base32
7105 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
7106 (build-system python-build-system)
7107 (home-page "http://code.google.com/p/prettytable/")
7108 (synopsis "Display tabular data in an ASCII table format")
7109 (description
7110 "A library designed to represent tabular data in visually appealing ASCII
7111 tables. PrettyTable allows for selection of which columns are to be printed,
7112 independent alignment of columns (left or right justified or centred) and
7113 printing of sub-tables by specifying a row range.")
7114 (license license:bsd-3)))
7115
7116 (define-public python2-prettytable
7117 (package-with-python2 python-prettytable))
7118
7119 (define-public python-tables
7120 (package
7121 (name "python-tables")
7122 (version "3.2.2")
7123 (source
7124 (origin
7125 (method url-fetch)
7126 (uri (pypi-uri "tables" version))
7127 (sha256
7128 (base32
7129 "117s6w7s3yxafpmf3zz3svana7xfrsviw01va1xp7h8ylx8v6r1m"))
7130 (modules '((guix build utils)))
7131 (snippet
7132 '(begin
7133 ;; Remove pre-compiled .pyc files from source.
7134 (for-each delete-file-recursively
7135 (find-files "." "__pycache__" #:directories? #t))
7136 (for-each delete-file (find-files "." "\\.pyc$"))
7137 #t))))
7138 (build-system python-build-system)
7139 (arguments
7140 `(;; FIXME: python-build-system does not pass configure-flags to "build"
7141 ;; or "check", so we must override the build and check phases.
7142 #:phases
7143 (modify-phases %standard-phases
7144 (add-after 'unpack 'use-gcc
7145 (lambda _
7146 (substitute* "setup.py"
7147 (("compiler = new_compiler\\(\\)" line)
7148 (string-append line
7149 "\ncompiler.set_executables(compiler='gcc',"
7150 "compiler_so='gcc',"
7151 "linker_exe='gcc',"
7152 "linker_so='gcc -shared')")))
7153 #t))
7154 (replace 'build
7155 (lambda* (#:key inputs #:allow-other-keys)
7156 (zero? (system* "python" "setup.py" "build"
7157 (string-append "--hdf5="
7158 (assoc-ref inputs "hdf5"))))))
7159 (replace 'check
7160 (lambda* (#:key inputs #:allow-other-keys)
7161 (zero? (system* "python" "setup.py" "check"
7162 (string-append "--hdf5="
7163 (assoc-ref inputs "hdf5")))))))))
7164 (propagated-inputs
7165 `(("python-numexpr" ,python-numexpr)
7166 ("python-numpy" ,python-numpy)))
7167 (native-inputs
7168 `(("python-cython" ,python-cython)
7169 ("pkg-config" ,pkg-config)))
7170 (inputs
7171 `(("hdf5" ,hdf5)
7172 ("bzip2" ,bzip2)
7173 ("zlib" ,zlib)))
7174 (home-page "http://www.pytables.org/")
7175 (synopsis "Hierarchical datasets for Python")
7176 (description "PyTables is a package for managing hierarchical datasets and
7177 designed to efficiently cope with extremely large amounts of data.")
7178 (license license:bsd-3)))
7179
7180 (define-public python2-tables
7181 (package-with-python2 python-tables))
7182
7183 (define-public python-pyasn1
7184 (package
7185 (name "python-pyasn1")
7186 (version "0.2.3")
7187 (source
7188 (origin
7189 (method url-fetch)
7190 (uri (pypi-uri "pyasn1" version))
7191 (sha256
7192 (base32
7193 "1b86yx23c1x74clai05a5ma8c8nfmhlx3j1mxq0ff657i2ylx33k"))))
7194 (build-system python-build-system)
7195 (home-page "http://pyasn1.sourceforge.net/")
7196 (synopsis "ASN.1 types and codecs")
7197 (description
7198 "This is an implementation of ASN.1 types and codecs in Python. It is
7199 suitable for a wide range of protocols based on the ASN.1 specification.")
7200 (license license:bsd-2)))
7201
7202 (define-public python2-pyasn1
7203 (package-with-python2 python-pyasn1))
7204
7205 (define-public python-pyasn1-modules
7206 (package
7207 (name "python-pyasn1-modules")
7208 (version "0.0.8")
7209 (source
7210 (origin
7211 (method url-fetch)
7212 (uri (pypi-uri "pyasn1-modules" version))
7213 (sha256
7214 (base32
7215 "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh"))))
7216 (build-system python-build-system)
7217 (propagated-inputs
7218 `(("python-pyasn1" ,python-pyasn1)))
7219 (home-page "https://sourceforge.net/projects/pyasn1/")
7220 (synopsis "ASN.1 codec implementations")
7221 (description
7222 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
7223 implementations of ASN.1-based codecs and protocols.")
7224 (license license:bsd-3)))
7225
7226 (define-public python2-pyasn1-modules
7227 (package-with-python2 python-pyasn1-modules))
7228
7229 (define-public python-ipaddress
7230 (package
7231 (name "python-ipaddress")
7232 (version "1.0.18")
7233 (source (origin
7234 (method url-fetch)
7235 (uri (pypi-uri "ipaddress" version))
7236 (sha256
7237 (base32
7238 "1q8klj9d84cmxgz66073x1j35cplr3r77vx1znhxiwl5w74391ax"))))
7239 (build-system python-build-system)
7240 (home-page "https://github.com/phihag/ipaddress")
7241 (synopsis "IP address manipulation library")
7242 (description
7243 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
7244 in Python. This library is used to create, poke at, and manipulate IPv4 and
7245 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
7246 module to older versions of Python.")
7247 (license license:psfl)))
7248
7249 (define-public python2-ipaddress
7250 (package-with-python2 python-ipaddress))
7251
7252 (define-public python2-ipaddr
7253 (package
7254 (name "python2-ipaddr")
7255 (version "2.1.11")
7256 (source
7257 (origin
7258 (method url-fetch)
7259 (uri (pypi-uri "ipaddr" version))
7260 (sha256
7261 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
7262 (build-system python-build-system)
7263 (arguments
7264 `(#:python ,python-2 ;version 2 only
7265 #:phases
7266 (modify-phases %standard-phases
7267 (replace 'check
7268 (lambda* _
7269 (zero? (system* "python" "ipaddr_test.py")))))))
7270 (home-page "https://github.com/google/ipaddr-py")
7271 (synopsis "IP address manipulation library")
7272 (description
7273 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
7274 IPv6 addresses and networks.
7275
7276 For new implementations you may prefer to use the standard module
7277 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
7278 versions of Python.")
7279 (license license:asl2.0)))
7280
7281 (define-public python-idna
7282 (package
7283 (name "python-idna")
7284 (version "2.5")
7285 (source
7286 (origin
7287 (method url-fetch)
7288 (uri (pypi-uri "idna" version))
7289 (sha256
7290 (base32
7291 "1ara12a7k2zc69msa0arrvw00gn61a6i6by01xb3lkkc0h4cxd9w"))))
7292 (build-system python-build-system)
7293 (home-page "https://github.com/kjd/idna")
7294 (synopsis "Internationalized domain names in applications")
7295 (description
7296 "This is a library to support the Internationalised Domain Names in
7297 Applications (IDNA) protocol as specified in RFC 5891. This version of the
7298 protocol is often referred to as “IDNA2008” and can produce different results
7299 from the earlier standard from 2003. The library is also intended to act as a
7300 suitable drop-in replacement for the “encodings.idna” module that comes with
7301 the Python standard library but currently only supports the older 2003
7302 specification.")
7303 (license license:bsd-4)))
7304
7305 (define-public python2-idna
7306 (package-with-python2 python-idna))
7307
7308 (define-public python-pretend
7309 (package
7310 (name "python-pretend")
7311 (version "1.0.8")
7312 (source
7313 (origin
7314 (method url-fetch)
7315 (uri (string-append "https://pypi.python.org/packages/source/p/"
7316 "pretend/pretend-" version ".tar.gz"))
7317 (sha256
7318 (base32
7319 "0r5r7ygz9m6d2bklflbl84cqhjkc2q12xgis8268ygjh30g2q3wk"))))
7320 (build-system python-build-system)
7321 (home-page "https://github.com/alex/pretend")
7322 (synopsis "Library for stubbing in Python")
7323 (description
7324 "Pretend is a library to make stubbing with Python easier. Stubbing is a
7325 technique for writing tests. You may hear the term mixed up with mocks,
7326 fakes, or doubles. Basically, a stub is an object that returns pre-canned
7327 responses, rather than doing any computation.")
7328 (license license:bsd-3)))
7329
7330 (define-public python2-pretend
7331 (package-with-python2 python-pretend))
7332
7333 (define-public python-cryptography-vectors
7334 (package
7335 (name "python-cryptography-vectors")
7336 (version "1.8.2")
7337 (source
7338 (origin
7339 (method url-fetch)
7340 (uri (pypi-uri "cryptography_vectors" version))
7341 (sha256
7342 (base32
7343 "0hzvq0bfy21bc35p8z7zdxpv3hbvi7adg4axc1b5yd3hk16a1nh0"))))
7344 (build-system python-build-system)
7345 (home-page "https://github.com/pyca/cryptography")
7346 (synopsis "Test vectors for the cryptography package")
7347 (description
7348 "This package contains test vectors for the cryptography package.")
7349 ;; Distributed under either BSD-3 or ASL2.0
7350 (license (list license:bsd-3 license:asl2.0))))
7351
7352 (define-public python2-cryptography-vectors
7353 (package-with-python2 python-cryptography-vectors))
7354
7355 (define-public python-cryptography
7356 (package
7357 (name "python-cryptography")
7358 (version "1.8.2")
7359 (source
7360 (origin
7361 (method url-fetch)
7362 (uri (pypi-uri "cryptography" version))
7363 (sha256
7364 (base32
7365 "1nmy4fw3zy7rlvarkhn33g9905rwpy9z7k5kv8j80f0s6ynfp24f"))))
7366 (build-system python-build-system)
7367 (inputs
7368 `(("openssl" ,openssl)))
7369 (propagated-inputs
7370 `(("python-asn1crypto" ,python-asn1crypto)
7371 ("python-cffi" ,python-cffi)
7372 ("python-six" ,python-six)
7373 ("python-idna" ,python-idna)
7374 ;; Packaging is used to check the version of python-cffi in
7375 ;; 'src/cryptography/hazmat/primitives/ciphers/base.py'. We should be
7376 ;; able to remove this dependency in the next release of cryptography:
7377 ;; python-cryptography:
7378 ;; https://github.com/pyca/cryptography/commit/0417d00d9ff1e19bc3ab67d39bdd18e1674768c1
7379 ("python-packaging" ,python-packaging)
7380 ("python-iso8601" ,python-iso8601)))
7381 (native-inputs
7382 `(("python-cryptography-vectors" ,python-cryptography-vectors)
7383 ("python-hypothesis" ,python-hypothesis)
7384 ("python-pretend" ,python-pretend)
7385 ("python-pytz" ,python-pytz)
7386 ("python-pytest" ,python-pytest-3.0)))
7387 (home-page "https://github.com/pyca/cryptography")
7388 (synopsis "Cryptographic recipes and primitives for Python")
7389 (description
7390 "cryptography is a package which provides cryptographic recipes and
7391 primitives to Python developers. It aims to be the “cryptographic standard
7392 library” for Python. The package includes both high level recipes, and low
7393 level interfaces to common cryptographic algorithms such as symmetric ciphers,
7394 message digests and key derivation functions.")
7395 ;; Distributed under either BSD-3 or ASL2.0
7396 (license (list license:bsd-3 license:asl2.0))
7397 (properties `((python2-variant . ,(delay python2-cryptography))))))
7398
7399 (define-public python2-cryptography
7400 (let ((crypto (package-with-python2
7401 (strip-python2-variant python-cryptography))))
7402 (package (inherit crypto)
7403 (propagated-inputs
7404 `(("python2-ipaddress" ,python2-ipaddress)
7405 ("python2-backport-ssl-match-hostname"
7406 ,python2-backport-ssl-match-hostname)
7407 ("python2-enum34" ,python2-enum34)
7408 ,@(package-propagated-inputs crypto))))))
7409
7410 (define-public python-pyopenssl
7411 (package
7412 (name "python-pyopenssl")
7413 (version "17.0.0")
7414 (source
7415 (origin
7416 (method url-fetch)
7417 (uri (pypi-uri "pyOpenSSL" version))
7418 (sha256
7419 (base32
7420 "1pdg1gpmkzj8yasg6cmkhcivxcdp4c12nif88y4qvsxq5ffzxas8"))
7421 (patches
7422 (search-patches "python-pyopenssl-skip-network-test.patch"))))
7423 (build-system python-build-system)
7424 (arguments
7425 '(#:phases
7426 (modify-phases %standard-phases
7427 (delete 'check)
7428 (add-after 'install 'check
7429 (lambda* (#:key inputs outputs #:allow-other-keys)
7430 (add-installed-pythonpath inputs outputs)
7431 (zero? (system* "py.test" "-v")))))))
7432 (propagated-inputs
7433 `(("python-cryptography" ,python-cryptography)
7434 ("python-six" ,python-six)))
7435 (inputs
7436 `(("openssl" ,openssl)))
7437 (native-inputs
7438 `(("python-pytest" ,python-pytest-3.0)))
7439 (home-page "https://github.com/pyca/pyopenssl")
7440 (synopsis "Python wrapper module around the OpenSSL library")
7441 (description
7442 "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
7443 library.")
7444 (license license:asl2.0)))
7445
7446 (define-public python2-pyopenssl
7447 (package-with-python2 python-pyopenssl))
7448
7449 (define-public python-pip
7450 (package
7451 (name "python-pip")
7452 (version "9.0.1")
7453 (source
7454 (origin
7455 (method url-fetch)
7456 (uri (pypi-uri "pip" version))
7457 (sha256
7458 (base32
7459 "03clr9c1dih5n9c00c592zzvf6r1ffimywkaq9agcqdllzhl7wh9"))))
7460 (build-system python-build-system)
7461 (arguments
7462 '(#:tests? #f)) ; there are no tests in the pypi archive.
7463 (home-page "https://pip.pypa.io/")
7464 (synopsis "Package manager for Python software")
7465 (description
7466 "Pip is a package manager for Python software, that finds packages on the
7467 Python Package Index (PyPI).")
7468 (license license:expat)))
7469
7470 (define-public python2-pip
7471 (package-with-python2 python-pip))
7472
7473 (define-public python-tlsh
7474 (package
7475 (name "python-tlsh")
7476 (version "3.4.4")
7477 (home-page "https://github.com/trendmicro/tlsh")
7478 (source (origin
7479 (method url-fetch)
7480 (uri (string-append "https://github.com/trendmicro/tlsh/archive/v"
7481 version ".tar.gz"))
7482 (sha256
7483 (base32
7484 "00bhzjqrlh7v538kbkbn8lgx976j1138al3sdhklaizqjvpwyk4r"))
7485 (file-name (string-append name "-" version ".tar.gz"))))
7486 (build-system cmake-build-system)
7487 (arguments
7488 '(#:out-of-source? #f
7489 #:phases (modify-phases %standard-phases
7490 (replace
7491 'install
7492 (lambda* (#:key outputs #:allow-other-keys)
7493 ;; Build and install the Python bindings. The underlying
7494 ;; C++ library is apparently not meant to be installed.
7495 (let ((out (assoc-ref outputs "out")))
7496 (with-directory-excursion "py_ext"
7497 (and (system* "python" "setup.py" "build")
7498 (system* "python" "setup.py" "install"
7499 (string-append "--prefix=" out))))))))))
7500 (inputs `(("python" ,python-wrapper))) ;for the bindings
7501 (synopsis "Fuzzy matching library for Python")
7502 (description
7503 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
7504 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
7505 value which can be used for similarity comparisons. Similar objects have
7506 similar hash values, which allows for the detection of similar objects by
7507 comparing their hash values. The byte stream should have a sufficient amount
7508 of complexity; for example, a byte stream of identical bytes will not generate
7509 a hash value.")
7510 (license license:asl2.0)))
7511
7512 (define-public python2-tlsh
7513 (package
7514 (inherit python-tlsh)
7515 (name "python2-tlsh")
7516 (inputs `(("python" ,python-2)))))
7517
7518 (define-public python-termcolor
7519 (package
7520 (name "python-termcolor")
7521 (version "1.1.0")
7522 (source
7523 (origin
7524 (method url-fetch)
7525 (uri (pypi-uri "termcolor" version))
7526 (sha256
7527 (base32
7528 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
7529 (build-system python-build-system)
7530 (arguments
7531 ;; There are no tests.
7532 `(#:tests? #f))
7533 (home-page "http://pypi.python.org/pypi/termcolor")
7534 (synopsis "ANSII Color formatting for terminal output")
7535 (description
7536 "This package provides ANSII Color formatting for output in terminals.")
7537 (license license:expat)))
7538
7539 (define-public python2-termcolor
7540 (package-with-python2 python-termcolor))
7541
7542 (define-public python-libarchive-c
7543 (package
7544 (name "python-libarchive-c")
7545 (version "2.2")
7546 (source (origin
7547 (method url-fetch)
7548 (uri (pypi-uri "libarchive-c" version))
7549 (sha256
7550 (base32
7551 "0z4r7v3dhd6b3120mav05ff08srih176r2rg5k8kn7mjd9pslm2x"))))
7552 (build-system python-build-system)
7553 (arguments
7554 '(#:phases (modify-phases %standard-phases
7555 (add-before
7556 'build 'reference-libarchive
7557 (lambda* (#:key inputs #:allow-other-keys)
7558 ;; Retain the absolute file name of libarchive.so.
7559 (let ((libarchive (assoc-ref inputs "libarchive")))
7560 (substitute* "libarchive/ffi.py"
7561 (("find_library\\('archive'\\)")
7562 (string-append "'" libarchive
7563 "/lib/libarchive.so'")))))))))
7564 (inputs
7565 `(("libarchive" ,libarchive)))
7566 (home-page "https://github.com/Changaco/python-libarchive-c")
7567 (synopsis "Python interface to libarchive")
7568 (description
7569 "This package provides Python bindings to libarchive, a C library to
7570 access possibly compressed archives in many different formats. It uses
7571 Python's @code{ctypes} foreign function interface (FFI).")
7572 (license license:lgpl2.0+)))
7573
7574 (define-public python2-libarchive-c
7575 (package-with-python2 python-libarchive-c))
7576
7577 (define-public python-file
7578 (package
7579 (inherit file)
7580 (name "python-file")
7581 (source (origin
7582 (inherit (package-source file))
7583 ;; This patch should not be applied to python2-file.
7584 (patches (search-patches "python-file-double-encoding-bug.patch"))))
7585 (build-system python-build-system)
7586 (arguments
7587 '(#:tests? #f ;no tests
7588 #:configure-flags '("--single-version-externally-managed" "--root=/")
7589 #:phases (modify-phases %standard-phases
7590 (add-before 'build 'change-directory
7591 (lambda _
7592 (chdir "python")
7593 #t))
7594 (add-before 'build 'set-library-file-name
7595 (lambda* (#:key inputs #:allow-other-keys)
7596 (let ((file (assoc-ref inputs "file")))
7597 (substitute* "magic.py"
7598 (("find_library\\('magic'\\)")
7599 (string-append "'" file "/lib/libmagic.so'")))
7600 #t))))))
7601 (inputs `(("file" ,file)))
7602 (self-native-input? #f)
7603 (synopsis "Python bindings to the libmagic file type guesser. Note that
7604 this module and the python-magic module both provide a \"magic.py\" file;
7605 these two modules, which are different and were developed separately, both
7606 serve the same purpose: provide Python bindings for libmagic.")))
7607
7608 (define-public python2-file
7609 (package-with-python2 python-file))
7610
7611 (define-public python-debian
7612 (package
7613 (name "python-debian")
7614 (version "0.1.28")
7615 (source
7616 (origin
7617 (method url-fetch)
7618 (uri (pypi-uri name version))
7619 (sha256
7620 (base32
7621 "0i15f0xzx679sd0ldq2sls9pnnps9fv6vhqvnv9dzf4qhma42i0y"))))
7622 (build-system python-build-system)
7623 (propagated-inputs
7624 `(("python-six" ,python-six)))
7625 (home-page "http://packages.debian.org/sid/python-debian")
7626 (synopsis "Debian package related modules")
7627 (description
7628 ;; XXX: Use @enumerate instead of @itemize to work around
7629 ;; <http://bugs.gnu.org/21772>.
7630 "This package provides Python modules that abstract many formats of
7631 Debian-related files, such as:
7632
7633 @enumerate
7634 @item Debtags information;
7635 @item @file{debian/changelog} files;
7636 @item packages files, pdiffs;
7637 @item control files of single or multiple RFC822-style paragraphs---e.g.
7638 @file{debian/control}, @file{.changes}, @file{.dsc};
7639 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
7640 contained files and meta-information.
7641 @end enumerate\n")
7642
7643 ;; Modules are either GPLv2+ or GPLv3+.
7644 (license license:gpl3+)))
7645
7646 (define-public python2-debian
7647 (package-with-python2 python-debian))
7648
7649 (define-public python-nbformat
7650 (package
7651 (name "python-nbformat")
7652 (version "4.1.0")
7653 (source
7654 (origin
7655 (method url-fetch)
7656 (uri (pypi-uri "nbformat" version))
7657 (sha256
7658 (base32
7659 "0mq8iki3d4mnx7wy05phss7x98mds4fqydin8lcagidp1knw1xnv"))))
7660 (build-system python-build-system)
7661 (arguments `(#:tests? #f)) ; no test target
7662 (propagated-inputs
7663 `(("python-ipython-genutils" ,python-ipython-genutils)
7664 ("python-jsonschema" ,python-jsonschema)
7665 ("python-jupyter-core" ,python-jupyter-core)
7666 ("python-traitlets" ,python-traitlets)))
7667 (home-page "http://jupyter.org")
7668 (synopsis "Jupyter Notebook format")
7669 (description "This package provides the reference implementation of the
7670 Jupyter Notebook format and Python APIs for working with notebooks.")
7671 (license license:bsd-3)))
7672
7673 (define-public python2-nbformat
7674 (package-with-python2 python-nbformat))
7675
7676 (define-public python-bleach
7677 (package
7678 (name "python-bleach")
7679 (version "1.4.3")
7680 (source
7681 (origin
7682 (method url-fetch)
7683 (uri (pypi-uri "bleach" version))
7684 (sha256
7685 (base32
7686 "0jvg3jxrvnx7xmm9gj262v60ib452xlnwlb0navyp7jsvcd0d4qj"))))
7687 (build-system python-build-system)
7688 (propagated-inputs
7689 `(("python-html5lib" ,python-html5lib-0.9)
7690 ("python-six" ,python-six)))
7691 (native-inputs
7692 `(("python-nose" ,python-nose)))
7693 (home-page "https://github.com/jsocol/bleach")
7694 (synopsis "Whitelist-based HTML-sanitizing tool")
7695 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
7696 (license license:asl2.0)))
7697
7698 (define-public python2-bleach
7699 (package-with-python2 python-bleach))
7700
7701 (define-public python-entrypoints
7702 (package
7703 (name "python-entrypoints")
7704 (version "0.2.2")
7705 (source
7706 (origin
7707 (method url-fetch)
7708 (uri (string-append "https://github.com/takluyver/entrypoints/archive/"
7709 version ".tar.gz"))
7710 (file-name (string-append name "-" version ".tar.gz"))
7711 (sha256
7712 (base32
7713 "0azqlkh3j0za080lsf5crnhaxx3c93k9dpv5ihkhf5cppgw5sjz5"))))
7714 (build-system python-build-system)
7715 ;; The package does not come with a setup.py file, so we have to generate
7716 ;; one ourselves.
7717 (arguments
7718 `(#:tests? #f
7719 #:phases
7720 (modify-phases %standard-phases
7721 (add-after 'unpack 'create-setup.py
7722 (lambda _
7723 (call-with-output-file "setup.py"
7724 (lambda (port)
7725 (format port "\
7726 from setuptools import setup
7727 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
7728 " ,version))))))))
7729 (home-page "https://github.com/takluyver/entrypoints")
7730 (synopsis "Discover and load entry points from installed Python packages")
7731 (description "Entry points are a way for Python packages to advertise
7732 objects with some common interface. The most common examples are
7733 @code{console_scripts} entry points, which define shell commands by
7734 identifying a Python function to run. The @code{entrypoints} module contains
7735 functions to find and load entry points.")
7736 (license license:expat)))
7737
7738 (define-public python2-entrypoints
7739 (package-with-python2 python-entrypoints))
7740
7741 (define-public python-nbconvert
7742 (package
7743 (name "python-nbconvert")
7744 (version "5.0.0b1")
7745 (source
7746 (origin
7747 (method url-fetch)
7748 (uri (pypi-uri "nbconvert" version))
7749 (sha256
7750 (base32
7751 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
7752 (build-system python-build-system)
7753 (arguments
7754 `(;; The "bdist_egg" target is disabled by default, causing the installation
7755 ;; to fail.
7756 #:configure-flags (list "bdist_egg")
7757 ;; FIXME: 5 failures, 40 errors.
7758 #:tests? #f))
7759 ;; #:phases
7760 ;; (modify-phases %standard-phases
7761 ;; (replace 'check
7762 ;; (lambda _
7763 ;; (zero? (system* "py.test" "-v")))))
7764 (native-inputs
7765 `(("python-pytest" ,python-pytest)))
7766 (propagated-inputs
7767 `(("python-bleach" ,python-bleach)
7768 ("python-entrypoints" ,python-entrypoints)
7769 ("python-jinja2" ,python-jinja2)
7770 ("python-jupyter-core" ,python-jupyter-core)
7771 ("python-mistune" ,python-mistune)
7772 ("python-nbformat" ,python-nbformat)
7773 ("python-pygments" ,python-pygments)
7774 ("python-traitlets" ,python-traitlets)))
7775 (home-page "http://jupyter.org")
7776 (synopsis "Converting Jupyter Notebooks")
7777 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
7778 notebooks to various other formats via Jinja templates. It allows you to
7779 convert an @code{.ipynb} notebook file into various static formats including:
7780
7781 @enumerate
7782 @item HTML
7783 @item LaTeX
7784 @item PDF
7785 @item Reveal JS
7786 @item Markdown (md)
7787 @item ReStructured Text (rst)
7788 @item executable script
7789 @end enumerate\n")
7790 (license license:bsd-3)))
7791
7792 (define-public python2-nbconvert
7793 (package-with-python2 python-nbconvert))
7794
7795 (define-public python-notebook
7796 (package
7797 (name "python-notebook")
7798 (version "4.2.3")
7799 (source (origin
7800 (method url-fetch)
7801 (uri (pypi-uri "notebook" version))
7802 (sha256
7803 (base32
7804 "0laq5c2f21frq6xcdckgq7raqhznbjb0qs0357g612z87wyn1a9r"))))
7805 (build-system python-build-system)
7806 (arguments
7807 `(#:phases
7808 (modify-phases %standard-phases
7809 (replace 'check
7810 (lambda _
7811 ;; HOME must be set for tests
7812 (setenv "HOME" "/tmp")
7813 (zero? (system* "nosetests")))))))
7814 (propagated-inputs
7815 `(("python-jupyter-core" ,python-jupyter-core)
7816 ("python-nbformat" ,python-nbformat)
7817 ("python-nbconvert" ,python-nbconvert)
7818 ("python-ipython" ,python-ipython)))
7819 (native-inputs
7820 `(("python-nose" ,python-nose)
7821 ("python-sphinx" ,python-sphinx)
7822 ("python-requests" ,python-requests)))
7823 (home-page "http://jupyter.org/")
7824 (synopsis "Web-based notebook environment for interactive computing")
7825 (description
7826 "The Jupyter HTML notebook is a web-based notebook environment for
7827 interactive computing.")
7828 (properties `((python2-variant . ,(delay python2-notebook))))
7829 (license license:bsd-3)))
7830
7831 (define-public python2-notebook
7832 (let ((base (package-with-python2
7833 (strip-python2-variant python-notebook))))
7834 (package (inherit base)
7835 (native-inputs
7836 `(("python2-mock" ,python2-mock)
7837 ,@(package-native-inputs base)))
7838 (arguments
7839 (substitute-keyword-arguments (package-arguments base)
7840 ((#:phases phases)
7841 `(modify-phases ,phases
7842 (add-before 'check 'disable-test-case
7843 ;; The test requires network access to localhost. Curiously it
7844 ;; fails with Python 2 only. Simply make the test-case return
7845 ;; immediately.
7846 (lambda _
7847 (substitute*
7848 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
7849 (("formats = self.nbconvert_api") "return #")))))))))))
7850
7851 (define-public python-widgetsnbextension
7852 (package
7853 (name "python-widgetsnbextension")
7854 (version "1.2.6")
7855 (source
7856 (origin
7857 (method url-fetch)
7858 (uri (pypi-uri "widgetsnbextension" version))
7859 (sha256
7860 (base32
7861 "0lff2mrwrgsa1mxmwx3phl9xvy0jqfpg6khbmxy53jbq56rwy666"))))
7862 (build-system python-build-system)
7863 (propagated-inputs
7864 `(("python-notebook" ,python-notebook)))
7865 (native-inputs
7866 `(("python-certifi" ,python-certifi)
7867 ("python-nose" ,python-nose)))
7868 (home-page "http://ipython.org")
7869 (synopsis "IPython HTML widgets for Jupyter")
7870 (description "This package provides interactive HTML widgets for Jupyter
7871 notebooks.")
7872 (license license:bsd-3)))
7873
7874 (define-public python2-widgetsnbextension
7875 (package-with-python2 python-widgetsnbextension))
7876
7877 (define-public python-ipywidgets
7878 (package
7879 (name "python-ipywidgets")
7880 (version "5.2.2")
7881 (source
7882 (origin
7883 (method url-fetch)
7884 (uri (pypi-uri "ipywidgets" version))
7885 (sha256
7886 (base32
7887 "1lk0qrr5l9a0z7qkkn30hv5832whxwxymf1l576fmmad0n7hkxms"))))
7888 (build-system python-build-system)
7889 ;; FIXME: it's not clear how to run the tests.
7890 (arguments `(#:tests? #f))
7891 (propagated-inputs
7892 `(("python-ipykernel" ,python-ipykernel)
7893 ("python-ipython" ,python-ipython)
7894 ("python-traitlets" ,python-traitlets)
7895 ("python-widgetsnbextension" ,python-widgetsnbextension)))
7896 (home-page "http://ipython.org")
7897 (synopsis "IPython HTML widgets for Jupyter")
7898 (description "Ipywidgets are interactive HTML widgets for Jupyter
7899 notebooks and the IPython kernel. Notebooks come alive when interactive
7900 widgets are used. Users gain control of their data and can visualize changes
7901 in the data.")
7902 (license license:bsd-3)))
7903
7904 (define-public python2-ipywidgets
7905 (package-with-python2 python-ipywidgets))
7906
7907 (define-public python-jupyter-console
7908 (package
7909 (name "python-jupyter-console")
7910 (version "5.0.0")
7911 (source
7912 (origin
7913 (method url-fetch)
7914 (uri (pypi-uri "jupyter_console" version))
7915 (sha256
7916 (base32
7917 "04acmkwsi99rcg3vb54c6n492zv35s92h2ahabc0w6wj976cipvx"))))
7918 (build-system python-build-system)
7919 ;; FIXME: it's not clear how to run the tests.
7920 (arguments `(#:tests? #f))
7921 (propagated-inputs
7922 `(("python-ipykernel" ,python-ipykernel)
7923 ("python-ipython" ,python-ipython)
7924 ("python-jupyter-client" ,python-jupyter-client)
7925 ("python-prompt-toolkit" ,python-prompt-toolkit)
7926 ("python-pygments" ,python-pygments)))
7927 (home-page "https://jupyter.org")
7928 (synopsis "Jupyter terminal console")
7929 (description "This package provides a terminal-based console frontend for
7930 Jupyter kernels. It also allows for console-based interaction with non-Python
7931 Jupyter kernels such as IJulia and IRKernel.")
7932 (license license:bsd-3)))
7933
7934 (define-public python2-jupyter-console
7935 (package-with-python2 python-jupyter-console))
7936
7937 (define-public jupyter
7938 (package
7939 (name "jupyter")
7940 (version "1.0.0")
7941 (source
7942 (origin
7943 (method url-fetch)
7944 (uri (pypi-uri "jupyter" version))
7945 (sha256
7946 (base32
7947 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
7948 (build-system python-build-system)
7949 ;; FIXME: it's not clear how to run the tests.
7950 (arguments `(#:tests? #f))
7951 (propagated-inputs
7952 `(("python-ipykernel" ,python-ipykernel)
7953 ("python-ipywidgets" ,python-ipywidgets)
7954 ("python-jupyter-console" ,python-jupyter-console)
7955 ("python-nbconvert" ,python-nbconvert)
7956 ("python-notebook" ,python-notebook)))
7957 (home-page "http://jupyter.org")
7958 (synopsis "Web application for interactive documents")
7959 (description
7960 "The Jupyter Notebook is a web application that allows you to create and
7961 share documents that contain live code, equations, visualizations and
7962 explanatory text. Uses include: data cleaning and transformation, numerical
7963 simulation, statistical modeling, machine learning and much more.")
7964 (license license:bsd-3)))
7965
7966 (define-public python-chardet
7967 (package
7968 (name "python-chardet")
7969 (version "2.3.0")
7970 (source
7971 (origin
7972 (method url-fetch)
7973 (uri (string-append
7974 "https://pypi.python.org/packages/source/c/chardet/chardet-"
7975 version
7976 ".tar.gz"))
7977 (sha256
7978 (base32
7979 "1ak87ikcw34fivcgiz2xvi938dmclh078az65l9x3rmgljrkhgp5"))))
7980 (build-system python-build-system)
7981 (home-page "https://github.com/chardet/chardet")
7982 (synopsis "Universal encoding detector for Python 2 and 3")
7983 (description
7984 "This package provides @code{chardet}, a Python module that can
7985 automatically detect a wide range of file encodings.")
7986 (license license:lgpl2.1+)))
7987
7988 (define-public python2-chardet
7989 (package-with-python2 python-chardet))
7990
7991 (define-public python-docopt
7992 (package
7993 (name "python-docopt")
7994 (version "0.6.2")
7995 (source
7996 (origin
7997 (method url-fetch)
7998 ;; The release on PyPI does not include tests.
7999 (uri (string-append
8000 "https://github.com/docopt/docopt/archive/"
8001 version ".tar.gz"))
8002 (file-name (string-append name "-" version ".tar.gz"))
8003 (sha256
8004 (base32
8005 "16bf890xbdz3m30rsv2qacklh2rdn1zrfspfnwzx9g7vwz8yw4r1"))))
8006 (build-system python-build-system)
8007 (native-inputs
8008 `(("python-pytest" ,python-pytest)))
8009 (arguments
8010 `(#:phases (alist-replace
8011 'check
8012 (lambda _ (zero? (system* "py.test")))
8013 %standard-phases)))
8014 (home-page "http://docopt.org")
8015 (synopsis "Command-line interface description language for Python")
8016 (description "This library allows the user to define a command-line
8017 interface from a program's help message rather than specifying it
8018 programatically with command-line parsers like @code{getopt} and
8019 @code{argparse}.")
8020 (license license:expat)))
8021
8022 (define-public python2-docopt
8023 (package-with-python2 python-docopt))
8024
8025 (define-public python-zope-event
8026 (package
8027 (name "python-zope-event")
8028 (version "4.1.0")
8029 (source
8030 (origin
8031 (method url-fetch)
8032 (uri (string-append "https://pypi.python.org/packages/source/z"
8033 "/zope.event/zope.event-" version ".tar.gz"))
8034 (sha256
8035 (base32
8036 "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
8037 (build-system python-build-system)
8038 (home-page "http://pypi.python.org/pypi/zope.event")
8039 (synopsis "Event publishing system for Python")
8040 (description "Zope.event provides an event publishing API, intended for
8041 use by applications which are unaware of any subscribers to their events. It
8042 is a simple event-dispatching system on which more sophisticated event
8043 dispatching systems can be built.")
8044 (license license:zpl2.1)))
8045
8046 (define-public python2-zope-event
8047 (package-with-python2 python-zope-event))
8048
8049 (define-public python-zope-interface
8050 (package
8051 (name "python-zope-interface")
8052 (version "4.1.3")
8053 (source
8054 (origin
8055 (method url-fetch)
8056 (uri (string-append "https://pypi.python.org/packages/source/z"
8057 "/zope.interface/zope.interface-" version ".tar.gz"))
8058 (sha256
8059 (base32
8060 "0ks8h73b2g4bkad821qbv0wzjppdrwys33i7ka45ik3wxjg1l8if"))))
8061 (build-system python-build-system)
8062 (native-inputs
8063 `(("python-zope-event" ,python-zope-event)))
8064 (home-page "https://github.com/zopefoundation/zope.interface")
8065 (synopsis "Python implementation of the \"design by contract\"
8066 methodology")
8067 (description "Zope.interface provides an implementation of \"object
8068 interfaces\" for Python. Interfaces are a mechanism for labeling objects as
8069 conforming to a given API or contract.")
8070 (license license:zpl2.1)))
8071
8072 (define-public python2-zope-interface
8073 (package-with-python2 python-zope-interface))
8074
8075 (define-public python-zope-exceptions
8076 (package
8077 (name "python-zope-exceptions")
8078 (version "4.0.8")
8079 (source
8080 (origin
8081 (method url-fetch)
8082 (uri (string-append "https://pypi.python.org/packages/source/z"
8083 "/zope.exceptions/zope.exceptions-"
8084 version ".tar.gz"))
8085 (sha256
8086 (base32
8087 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
8088 (build-system python-build-system)
8089 (arguments
8090 '(#:tests? #f)) ; circular dependency with zope.testrunner
8091 (propagated-inputs
8092 `(("python-zope-interface" ,python-zope-interface)))
8093 (home-page "http://cheeseshop.python.org/pypi/zope.exceptions")
8094 (synopsis "Zope exceptions")
8095 (description "Zope.exceptions provides general-purpose exception types
8096 that have uses outside of the Zope framework.")
8097 (license license:zpl2.1)))
8098
8099 (define-public python2-zope-exceptions
8100 (package-with-python2 python-zope-exceptions))
8101
8102 (define-public python-zope-testing
8103 (package
8104 (name "python-zope-testing")
8105 (version "4.5.0")
8106 (source
8107 (origin
8108 (method url-fetch)
8109 (uri (string-append "https://pypi.python.org/packages/source/z"
8110 "/zope.testing/zope.testing-" version ".tar.gz"))
8111 (sha256
8112 (base32
8113 "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))
8114 (modules '((guix build utils)))
8115 (snippet
8116 '(begin
8117 ;; Remove pre-compiled .pyc files backup files from source.
8118 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
8119 #t))))
8120 (build-system python-build-system)
8121 (native-inputs
8122 `(("python-zope-exceptions" ,python-zope-exceptions)))
8123 (propagated-inputs
8124 `(("python-zope-interface" ,python-zope-interface)))
8125 (home-page "http://pypi.python.org/pypi/zope.testing")
8126 (synopsis "Zope testing helpers")
8127 (description "Zope.testing provides a number of testing utilities for HTML
8128 forms, HTTP servers, regular expressions, and more.")
8129 (license license:zpl2.1)))
8130
8131 (define-public python2-zope-testing
8132 (package-with-python2 python-zope-testing))
8133
8134 (define-public python-zope-testrunner
8135 (package
8136 (name "python-zope-testrunner")
8137 (version "4.4.9")
8138 (source
8139 (origin
8140 (method url-fetch)
8141 (uri (string-append "https://pypi.python.org/packages/source/z"
8142 "/zope.testrunner/zope.testrunner-"
8143 version ".zip"))
8144 (sha256
8145 (base32
8146 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
8147 (build-system python-build-system)
8148 (arguments
8149 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8150 (native-inputs
8151 `(("python-six" ,python-six)
8152 ;("python-zope-interface" ,python-zope-interface)
8153 ("python-zope-exceptions" ,python-zope-exceptions)
8154 ("python-zope-testing" ,python-zope-testing)
8155 ("unzip" ,unzip)))
8156 (propagated-inputs
8157 `(("python-zope-interface" ,python-zope-interface)))
8158 (home-page "http://pypi.python.org/pypi/zope.testrunner")
8159 (synopsis "Zope testrunner script")
8160 (description "Zope.testrunner provides a script for running Python
8161 tests.")
8162 (license license:zpl2.1)))
8163
8164 (define-public python2-zope-testrunner
8165 (let ((base (package-with-python2 python-zope-testrunner)))
8166 (package
8167 (inherit base)
8168 (native-inputs
8169 (append (package-native-inputs base)
8170 `(("python2-subunit" ,python2-subunit)
8171 ("python2-mimeparse" ,python2-mimeparse)))))))
8172
8173 (define-public python-zope-i18nmessageid
8174 (package
8175 (name "python-zope-i18nmessageid")
8176 (version "4.0.3")
8177 (source
8178 (origin
8179 (method url-fetch)
8180 (uri (string-append
8181 "https://pypi.python.org/packages/source/z"
8182 "/zope.i18nmessageid/zope.i18nmessageid-"
8183 version ".tar.gz"))
8184 (sha256
8185 (base32
8186 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
8187 (build-system python-build-system)
8188 (home-page "http://pypi.python.org/pypi/zope.i18nmessageid")
8189 (synopsis "Message identifiers for internationalization")
8190 (description "Zope.i18nmessageid provides facilities for declaring
8191 internationalized messages within program source text.")
8192 (license license:zpl2.1)))
8193
8194 (define-public python2-zope-i18nmessageid
8195 (package-with-python2 python-zope-i18nmessageid))
8196
8197 (define-public python-zope-schema
8198 (package
8199 (name "python-zope-schema")
8200 (version "4.4.2")
8201 (source
8202 (origin
8203 (method url-fetch)
8204 (uri (string-append "https://pypi.python.org/packages/source/z"
8205 "/zope.schema/zope.schema-" version ".tar.gz"))
8206 (sha256
8207 (base32
8208 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
8209 (build-system python-build-system)
8210 (arguments
8211 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
8212 (propagated-inputs
8213 `(("python-zope-event" ,python-zope-event)
8214 ("python-zope-exceptions", python-zope-exceptions)
8215 ("python-zope-interface" ,python-zope-interface)))
8216 (native-inputs
8217 `(("python-zope-testing" ,python-zope-testing)
8218 ("python-coverage" ,python-coverage)
8219 ("python-nose" ,python-nose)))
8220 (home-page "http://pypi.python.org/pypi/zope.schema")
8221 (synopsis "Zope data schemas")
8222 (description "Zope.scheme provides extensions to zope.interface for
8223 defining data schemas.")
8224 (license license:zpl2.1)))
8225
8226 (define-public python2-zope-schema
8227 (package-with-python2 python-zope-schema))
8228
8229 (define-public python-zope-configuration
8230 (package
8231 (name "python-zope-configuration")
8232 (version "4.0.3")
8233 (source (origin
8234 (method url-fetch)
8235 (uri (string-append "https://pypi.python.org/packages/source/z"
8236 "/zope.configuration/zope.configuration-"
8237 version ".tar.gz"))
8238 (sha256
8239 (base32
8240 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
8241 (build-system python-build-system)
8242 (arguments
8243 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8244 (propagated-inputs
8245 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8246 ("python-zope-schema" ,python-zope-schema)))
8247 (home-page "http://pypi.python.org/pypi/zope.configuration")
8248 (synopsis "Zope Configuration Markup Language")
8249 (description "Zope.configuration implements ZCML, the Zope Configuration
8250 Markup Language.")
8251 (license license:zpl2.1)))
8252
8253 (define-public python2-zope-configuration
8254 (package-with-python2 python-zope-configuration))
8255
8256 (define-public python-zope-proxy
8257 (package
8258 (name "python-zope-proxy")
8259 (version "4.1.6")
8260 (source
8261 (origin
8262 (method url-fetch)
8263 (uri (string-append "https://pypi.python.org/packages/source/z"
8264 "/zope.proxy/zope.proxy-" version ".tar.gz"))
8265 (sha256
8266 (base32
8267 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
8268 (build-system python-build-system)
8269 (arguments
8270 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8271 (propagated-inputs
8272 `(("python-zope-interface" ,python-zope-interface)))
8273 (home-page "http://pypi.python.org/pypi/zope.proxy")
8274 (synopsis "Generic, transparent proxies")
8275 (description "Zope.proxy provides generic, transparent proxies for Python.
8276 Proxies are special objects which serve as mostly-transparent wrappers around
8277 another object, intervening in the apparent behavior of the wrapped object
8278 only when necessary to apply the policy (e.g., access checking, location
8279 brokering, etc.) for which the proxy is responsible.")
8280 (license license:zpl2.1)))
8281
8282 (define-public python2-zope-proxy
8283 (package-with-python2 python-zope-proxy))
8284
8285 (define-public python-zope-location
8286 (package
8287 (name "python-zope-location")
8288 (version "4.0.3")
8289 (source
8290 (origin
8291 (method url-fetch)
8292 (uri (string-append "https://pypi.python.org/packages/source/z"
8293 "/zope.location/zope.location-" version ".tar.gz"))
8294 (sha256
8295 (base32
8296 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
8297 (build-system python-build-system)
8298 (arguments
8299 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
8300 (propagated-inputs
8301 `(("python-zope-proxy" ,python-zope-proxy)
8302 ("python-zope-schema" ,python-zope-schema)))
8303 (home-page "http://pypi.python.org/pypi/zope.location/")
8304 (synopsis "Zope location library")
8305 (description "Zope.location implements the concept of \"locations\" in
8306 Zope3, which are are special objects that have a structural location.")
8307 (license license:zpl2.1)))
8308
8309 (define-public python2-zope-location
8310 (package-with-python2 python-zope-location))
8311
8312 (define-public python-zope-security
8313 (package
8314 (name "python-zope-security")
8315 (version "4.0.3")
8316 (source
8317 (origin
8318 (method url-fetch)
8319 (uri (string-append "https://pypi.python.org/packages/source/z"
8320 "/zope.security/zope.security-" version ".tar.gz"))
8321 (sha256
8322 (base32
8323 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
8324 (build-system python-build-system)
8325 (arguments
8326 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
8327 (propagated-inputs
8328 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8329 ("python-zope-proxy" ,python-zope-proxy)
8330 ("python-zope-schema" ,python-zope-schema)))
8331 (native-inputs
8332 `(("python-six" ,python-six)
8333 ("python-zope-component" ,python-zope-component)
8334 ("python-zope-configuration" ,python-zope-configuration)
8335 ("python-zope-location" ,python-zope-location)
8336 ("python-zope-testrunner" ,python-zope-testrunner)
8337 ("python-zope-testing" ,python-zope-testing)))
8338 (home-page "http://pypi.python.org/pypi/zope.security")
8339 (synopsis "Zope security framework")
8340 (description "Zope.security provides a generic mechanism to implement
8341 security policies on Python objects.")
8342 (license license:zpl2.1)))
8343
8344 (define-public python2-zope-security
8345 (let ((zope-security (package-with-python2 python-zope-security)))
8346 (package (inherit zope-security)
8347 (propagated-inputs
8348 `(("python2-zope-testrunner" ,python2-zope-testrunner)
8349 ,@(alist-delete
8350 "python-zope-testrunner"
8351 (package-propagated-inputs zope-security)))))))
8352
8353 (define-public python-zope-component
8354 (package
8355 (name "python-zope-component")
8356 (version "4.3.0")
8357 (source
8358 (origin
8359 (method url-fetch)
8360 (uri (pypi-uri "zope.component" version))
8361 (sha256
8362 (base32
8363 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
8364 (build-system python-build-system)
8365 (arguments
8366 ;; Skip tests due to circular dependency with python-zope-security.
8367 '(#:tests? #f))
8368 (native-inputs
8369 `(("python-zope-testing" ,python-zope-testing)))
8370 (propagated-inputs
8371 `(("python-zope-event" ,python-zope-event)
8372 ("python-zope-interface" ,python-zope-interface)
8373 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
8374 ("python-zope-configuration" ,python-zope-configuration)))
8375 (home-page "https://github.com/zopefoundation/zope.component")
8376 (synopsis "Zope Component Architecture")
8377 (description "Zope.component represents the core of the Zope Component
8378 Architecture. Together with the zope.interface package, it provides
8379 facilities for defining, registering and looking up components.")
8380 (license license:zpl2.1)))
8381
8382 (define-public python2-zope-component
8383 (package-with-python2 python-zope-component))
8384
8385 (define-public python-pythondialog
8386 (package
8387 (name "python-pythondialog")
8388 (version "3.4.0")
8389 (source
8390 (origin
8391 (method url-fetch)
8392 (uri (pypi-uri "pythondialog" version))
8393 (sha256
8394 (base32
8395 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
8396 (build-system python-build-system)
8397 (arguments
8398 `(#:phases
8399 (modify-phases %standard-phases
8400 (add-after 'unpack 'patch-path
8401 (lambda* (#:key inputs #:allow-other-keys)
8402 (let* ((dialog (assoc-ref inputs "dialog")))
8403 ;; Since this library really wants to grovel the search path, we
8404 ;; must hardcode dialog's store path into it.
8405 (substitute* "dialog.py"
8406 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
8407 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
8408 #t))))
8409 #:tests? #f)) ; no test suite
8410 (propagated-inputs
8411 `(("dialog" ,dialog)))
8412 (home-page "http://pythondialog.sourceforge.net/")
8413 (synopsis "Python interface to the UNIX dialog utility")
8414 (description "A Python wrapper for the dialog utility. Its purpose is to
8415 provide an easy to use, pythonic and comprehensive Python interface to dialog.
8416 This allows one to make simple text-mode user interfaces on Unix-like systems")
8417 (license license:lgpl2.1)
8418 (properties `((python2-variant . ,(delay python2-pythondialog))))))
8419
8420 (define-public python2-pythondialog
8421 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
8422 (package
8423 (inherit base)
8424 (version (package-version python-pythondialog))
8425 (source (origin
8426 (method url-fetch)
8427 (uri (pypi-uri "python2-pythondialog" version))
8428 (sha256
8429 (base32
8430 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
8431
8432 (define-public python-pyrfc3339
8433 (package
8434 (name "python-pyrfc3339")
8435 (version "1.0")
8436 (source
8437 (origin
8438 (method url-fetch)
8439 (uri (pypi-uri "pyRFC3339" version))
8440 (sha256
8441 (base32
8442 "0dgm4l9y8jiax5cp6yxjd2i27cq8h33sh81n1wfbmnmqb32cdywd"))))
8443 (build-system python-build-system)
8444 (propagated-inputs
8445 `(("python-pytz" ,python-pytz)))
8446 (native-inputs
8447 `(("python-nose" ,python-nose)))
8448 (home-page "https://github.com/kurtraschke/pyRFC3339")
8449 (synopsis "Python timestamp library")
8450 (description "Python library for generating and parsing RFC 3339-compliant
8451 timestamps.")
8452 (license license:expat)))
8453
8454 (define-public python2-pyrfc3339
8455 (package-with-python2 python-pyrfc3339))
8456
8457 (define-public python-werkzeug
8458 (package
8459 (name "python-werkzeug")
8460 (version "0.11.15")
8461 (source
8462 (origin
8463 (method url-fetch)
8464 (uri (pypi-uri "Werkzeug" version))
8465 (sha256
8466 (base32
8467 "1h5wycw8yj7q0grqsjnsqflmrlsdagvl2j4dsgdncci6mjc7fpa5"))))
8468 (build-system python-build-system)
8469 (native-inputs
8470 `(("python-pytest" ,python-pytest)))
8471 (home-page "http://werkzeug.pocoo.org/")
8472 (synopsis "Utilities for WSGI applications")
8473 (description "One of the most advanced WSGI utility modules. It includes a
8474 powerful debugger, full-featured request and response objects, HTTP utilities to
8475 handle entity tags, cache control headers, HTTP dates, cookie handling, file
8476 uploads, a powerful URL routing system and a bunch of community-contributed
8477 addon modules.")
8478 (license license:x11)))
8479
8480 (define-public python2-werkzeug
8481 (package-with-python2 python-werkzeug))
8482
8483 (define-public python-configobj
8484 (package
8485 (name "python-configobj")
8486 (version "5.0.6")
8487 (source (origin
8488 (method url-fetch)
8489 (uri (string-append
8490 "https://pypi.python.org/packages/source/c/configobj/"
8491 "configobj-" version ".tar.gz"))
8492 (sha256
8493 (base32
8494 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
8495 ;; Patch setup.py so it looks for python-setuptools, which is
8496 ;; required to parse the keyword 'install_requires' in setup.py.
8497 (patches (search-patches "python-configobj-setuptools.patch"))))
8498 (build-system python-build-system)
8499 (propagated-inputs
8500 `(("python-six" ,python-six)))
8501 (synopsis "Config file reading, writing and validation")
8502 (description "ConfigObj is a simple but powerful config file reader and
8503 writer: an ini file round tripper. Its main feature is that it is very easy to
8504 use, with a straightforward programmer’s interface and a simple syntax for
8505 config files.")
8506 (home-page "https://github.com/DiffSK/configobj")
8507 (license license:bsd-3)))
8508
8509 (define-public python2-configobj
8510 (package-with-python2 python-configobj))
8511
8512 (define-public python-configargparse
8513 (package
8514 (name "python-configargparse")
8515 (version "0.10.0")
8516 (source (origin
8517 (method url-fetch)
8518 (uri (string-append
8519 "https://pypi.python.org/packages/source/C/ConfigArgParse/"
8520 "ConfigArgParse-" version ".tar.gz"))
8521 (sha256
8522 (base32
8523 "19wh919gbdbzxzpagg52q3lm62yicm95ddlcx77dyjc1slyshl1v"))))
8524 (build-system python-build-system)
8525 (arguments
8526 ;; FIXME: Bug in test suite filed upstream:
8527 ;; https://github.com/bw2/ConfigArgParse/issues/32
8528 '(#:tests? #f))
8529 (synopsis "Replacement for argparse")
8530 (description "A drop-in replacement for argparse that allows options to also
8531 be set via config files and/or environment variables.")
8532 (home-page "https://github.com/bw2/ConfigArgParse")
8533 (license license:expat)))
8534
8535 (define-public python2-configargparse
8536 (package-with-python2 python-configargparse))
8537
8538 (define-public python-ndg-httpsclient
8539 (package
8540 (name "python-ndg-httpsclient")
8541 (version "0.4.2")
8542 (source (origin
8543 (method url-fetch)
8544 (uri (pypi-uri "ndg_httpsclient" version))
8545 (sha256
8546 (base32
8547 "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))
8548 (build-system python-build-system)
8549 (arguments
8550 '(;; The tests appear to require networking.
8551 #:tests? #f))
8552 (propagated-inputs
8553 `(("python-pyopenssl" ,python-pyopenssl)))
8554 (synopsis "HTTPS support for Python's httplib and urllib2")
8555 (description "This is a HTTPS client implementation for httplib and urllib2
8556 based on PyOpenSSL. PyOpenSSL provides a more fully featured SSL implementation
8557 over the default provided with Python and importantly enables full verification
8558 of the SSL peer.")
8559 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8560 (license license:bsd-3)))
8561
8562 ;; python2-openssl requires special care, so package-with-python2 is
8563 ;; insufficient.
8564 (define-public python2-ndg-httpsclient
8565 (package (inherit python-ndg-httpsclient)
8566 (name "python2-ndg-httpsclient")
8567 (arguments `(#:python ,python-2))
8568 (propagated-inputs
8569 `(("python2-pyopenssl" ,python2-pyopenssl)))))
8570
8571 (define-public python-contextlib2
8572 (package
8573 (name "python-contextlib2")
8574 (version "0.4.0")
8575 (source
8576 (origin
8577 (method url-fetch)
8578 (uri (pypi-uri "contextlib2" version))
8579 (sha256
8580 (base32
8581 "0cmp131dlh0d0zvw0aza1zd13glvngzk8lb4avks0hm7yxwdr9am"))))
8582 (build-system python-build-system)
8583 (arguments
8584 `(#:phases
8585 (modify-phases %standard-phases
8586 (replace 'check
8587 (lambda _ (zero?
8588 (system*
8589 "python" "test_contextlib2.py" "-v")))))))
8590 (home-page "http://contextlib2.readthedocs.org/")
8591 (synopsis "Tools for decorators and context managers")
8592 (description "This module is primarily a backport of the Python
8593 3.2 contextlib to earlier Python versions. Like contextlib, it
8594 provides utilities for common tasks involving decorators and context
8595 managers. It also contains additional features that are not part of
8596 the standard library.")
8597 (license license:psfl)))
8598
8599 (define-public python2-contextlib2
8600 (package-with-python2 python-contextlib2))
8601
8602 (define-public python-texttable
8603 (package
8604 (name "python-texttable")
8605 (version "0.8.7")
8606 (source
8607 (origin
8608 (method url-fetch)
8609 (uri (pypi-uri "texttable" version))
8610 (sha256
8611 (base32
8612 "1liiiydgkg37i46a418aw19fyf6z3ds51wdwwpyjbs12x0phhf4a"))))
8613 (build-system python-build-system)
8614 (arguments '(#:tests? #f)) ; no tests
8615 (home-page "https://github.com/foutaise/texttable/")
8616 (synopsis "Python module for creating simple ASCII tables")
8617 (description "Texttable is a Python module for creating simple ASCII
8618 tables.")
8619 (license license:lgpl2.1+)))
8620
8621 (define-public python2-texttable
8622 (package-with-python2 python-texttable))
8623
8624 (define-public python-websocket-client
8625 (package
8626 (name "python-websocket-client")
8627 (version "0.37.0")
8628 (source
8629 (origin
8630 (method url-fetch)
8631 (uri (pypi-uri "websocket_client" version))
8632 (sha256
8633 (base32
8634 "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7"))))
8635 (build-system python-build-system)
8636 (propagated-inputs
8637 `(("python-six" ,python-six)))
8638 (home-page "https://github.com/liris/websocket-client")
8639 (synopsis "WebSocket client for Python")
8640 (description "The Websocket-client module provides the low level APIs for
8641 WebSocket usage in Python programs.")
8642 (license license:lgpl2.1+)))
8643
8644 (define-public python2-websocket-client
8645 (package-with-python2 python-websocket-client))
8646
8647 (define-public python-atomicwrites
8648 (package
8649 (name "python-atomicwrites")
8650 (version "1.1.5")
8651 (source (origin
8652 (method url-fetch)
8653 (uri (pypi-uri "atomicwrites" version))
8654 (sha256
8655 (base32
8656 "11bm90fwm2avvf4f3ib8g925w7jr4m11vcsinn1bi6ns4bm32214"))))
8657 (build-system python-build-system)
8658 (synopsis "Atomic file writes in Python")
8659 (description "Library for atomic file writes using platform dependent tools
8660 for atomic file system operations.")
8661 (home-page "https://github.com/untitaker/python-atomicwrites")
8662 (license license:expat)))
8663
8664 (define-public python2-atomicwrites
8665 (package-with-python2 python-atomicwrites))
8666
8667 (define-public python-requests-toolbelt
8668 (package
8669 (name "python-requests-toolbelt")
8670 (version "0.6.2")
8671 (source (origin
8672 (method url-fetch)
8673 (uri (string-append
8674 "https://pypi.python.org/packages/"
8675 "e1/a4/a94c037bc72ad70441aff1403d3243510d2542ddca7759faaeffeb11aefe/"
8676 "requests-toolbelt-" version ".tar.gz"))
8677 (sha256
8678 (base32
8679 "15q9nrgp85nqlr4kdz1zvj8z2npafi2sr12y7fqgxbkq28j1aci6"))))
8680 (build-system python-build-system)
8681 (native-inputs
8682 `(("python-betamax" ,python-betamax)
8683 ("python-mock" ,python-mock)
8684 ("python-pytest" ,python-pytest)))
8685 (propagated-inputs
8686 `(("python-requests" ,python-requests)))
8687 (synopsis "Extensions to python-requests")
8688 (description "This is a toolbelt of useful classes and functions to be used
8689 with python-requests.")
8690 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
8691 (license license:asl2.0)))
8692
8693 (define-public python-click-threading
8694 (package
8695 (name "python-click-threading")
8696 (version "0.2.0")
8697 (source (origin
8698 (method url-fetch)
8699 (uri (string-append
8700 "https://pypi.python.org/packages/"
8701 "fe/b7/e7f609d18a2a351cb71616adcf54df1acd82f83cb9b5936935a4d20e2c23/"
8702 "click-threading-" version ".tar.gz"))
8703 (sha256
8704 (base32
8705 "18bcqikxwb3drb8rf60cclxkxw52521b38ax3byah6j8cn8y9p4j"))))
8706 (build-system python-build-system)
8707 (propagated-inputs
8708 `(("python-click" ,python-click)))
8709 (synopsis "Utilities for multithreading in Click")
8710 (description "This package provides utilities for multithreading in Click
8711 applications.")
8712 (home-page "https://github.com/click-contrib/click-threading")
8713 (license license:expat)))
8714
8715 (define-public python-click-log
8716 (package
8717 (name "python-click-log")
8718 (version "0.1.8")
8719 (source (origin
8720 (method url-fetch)
8721 (uri (pypi-uri "click-log" version))
8722 (sha256
8723 (base32
8724 "14ikfjfgnzf21mjniq9lfk2igzykgzfvwwrk85nw2b9fq44109sp"))))
8725 (build-system python-build-system)
8726 (propagated-inputs
8727 `(("python-click" ,python-click)))
8728 (synopsis "Logging for click applications")
8729 (description "This package provides a Python library for logging Click
8730 applications.")
8731 (home-page "https://github.com/click-contrib/click-log")
8732 (license license:expat)))
8733
8734 (define-public python-apipkg
8735 (package
8736 (name "python-apipkg")
8737 (version "1.4")
8738 (source (origin
8739 (method url-fetch)
8740 (uri (pypi-uri "apipkg" version))
8741 (sha256
8742 (base32
8743 "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
8744 (build-system python-build-system)
8745 (native-inputs
8746 `(("python-pytest" ,python-pytest)))
8747 (synopsis "Namespace control and lazy-import mechanism")
8748 (description "With apipkg you can control the exported namespace of a Python
8749 package and greatly reduce the number of imports for your users. It is a small
8750 pure Python module that works on virtually all Python versions.")
8751 (home-page "https://bitbucket.org/hpk42/apipkg")
8752 (license license:expat)))
8753
8754 (define-public python2-apipkg
8755 (package-with-python2 python-apipkg))
8756
8757 (define-public python-execnet
8758 (package
8759 (name "python-execnet")
8760 (version "1.4.1")
8761 (source (origin
8762 (method url-fetch)
8763 (uri (pypi-uri "execnet" version))
8764 (sha256
8765 (base32
8766 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
8767 (build-system python-build-system)
8768 (arguments
8769 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
8770 ;; The two test failures are caused by the lack of an `ssh` executable.
8771 ;; The test suite can be run with pytest after the 'install' phase.
8772 #:tests? #f))
8773 (native-inputs
8774 `(("python-pytest" ,python-pytest)
8775 ("python-setuptools-scm" ,python-setuptools-scm)))
8776 (propagated-inputs
8777 `(("python-apipkg" ,python-apipkg)))
8778 (synopsis "Rapid multi-Python deployment")
8779 (description "Execnet provides a share-nothing model with
8780 channel-send/receive communication for distributing execution across many
8781 Python interpreters across version, platform and network barriers. It has a
8782 minimal and fast API targeting the following uses:
8783 @enumerate
8784 @item distribute tasks to (many) local or remote CPUs
8785 @item write and deploy hybrid multi-process applications
8786 @item write scripts to administer multiple environments
8787 @end enumerate")
8788 (home-page "http://codespeak.net/execnet/")
8789 (license license:expat)))
8790
8791 (define-public python2-execnet
8792 (package-with-python2 python-execnet))
8793
8794 (define-public python-trollius-redis
8795 (package
8796 (name "python-trollius-redis")
8797 (version "0.1.4")
8798 (source
8799 (origin
8800 (method url-fetch)
8801 (uri (pypi-uri "trollius_redis" version))
8802 (sha256
8803 (base32
8804 "0k3vypszmgmaipgw9xscvgm79h2zd6p6ci8gdp5sxl6g5kbqr9fy"))))
8805 (build-system python-build-system)
8806 ;; TODO: Tests require packaging 'hiredis'.
8807 (arguments '(#:tests? #f))
8808 (home-page "https://github.com/benjolitz/trollius-redis")
8809 (synopsis "Port of asyncio-redis to trollius")
8810 (description "@code{trollius-redis} is a Redis client for Python
8811 trollius. It is an asynchronious IO (PEP 3156) implementation of the
8812 Redis protocol.")
8813 (license license:bsd-2)))
8814
8815 (define-public python2-trollius-redis
8816 (package-with-python2 python-trollius-redis))
8817
8818 ;;; The software provided by this package was integrated into pytest 2.8.
8819 (define-public python-pytest-cache
8820 (package
8821 (name "python-pytest-cache")
8822 (version "1.0")
8823 (source (origin
8824 (method url-fetch)
8825 (uri (pypi-uri "pytest-cache" version))
8826 (sha256
8827 (base32
8828 "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
8829 (build-system python-build-system)
8830 (propagated-inputs
8831 `(("python-apipkg" ,python-apipkg)
8832 ("python-execnet" ,python-execnet)
8833 ("python-py" ,python-py)
8834 ("python-pytest" ,python-pytest)))
8835 (synopsis "Py.test plugin with mechanisms for caching across test runs")
8836 (description "The pytest-cache plugin provides tools to rerun failures from
8837 the last py.test invocation.")
8838 (home-page "https://bitbucket.org/hpk42/pytest-cache/")
8839 (license license:expat)))
8840
8841 (define-public python2-pytest-cache
8842 (package-with-python2 python-pytest-cache))
8843
8844 (define-public python-pytest-localserver
8845 (package
8846 (name "python-pytest-localserver")
8847 (version "0.3.5")
8848 (source (origin
8849 (method url-fetch)
8850 (uri (pypi-uri "pytest-localserver" version))
8851 (sha256
8852 (base32
8853 "0dvqspjr6va55zwmnnc2mmpqc7mm65kxig9ya44x1z8aadzxpa4p"))))
8854 (build-system python-build-system)
8855 (arguments
8856 `(#:phases (modify-phases %standard-phases
8857 (replace 'check
8858 (lambda _
8859 (zero? (system* "py.test" "--genscript=runtests.py"))
8860 (zero? (system* "py.test")))))))
8861 (native-inputs
8862 `(("python-pytest" ,python-pytest)
8863 ("python-requests" ,python-requests)
8864 ("python-six" ,python-six)))
8865 (propagated-inputs
8866 `(("python-werkzeug" ,python-werkzeug)))
8867 (synopsis "Py.test plugin to test server connections locally")
8868 (description "Pytest-localserver is a plugin for the pytest testing
8869 framework which enables you to test server connections locally.")
8870 (home-page "https://pypi.python.org/pypi/pytest-localserver")
8871 (license license:expat)))
8872
8873 (define-public python-wsgi-intercept
8874 (package
8875 (name "python-wsgi-intercept")
8876 (version "1.2.2")
8877 (source (origin
8878 (method url-fetch)
8879 (uri (string-append
8880 "https://pypi.python.org/packages/"
8881 "38/76/ebcbc24d0cb77db34520a3ca6ed1bd43ace17d182bbd8dd7d976f1c176fb/"
8882 "wsgi_intercept-" version ".tar.gz"))
8883 (sha256
8884 (base32
8885 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
8886 (build-system python-build-system)
8887 (propagated-inputs
8888 `(("python-six" ,python-six)))
8889 (native-inputs
8890 `(("python-pytest" ,python-pytest)
8891 ("python-httplib2" ,python-httplib2)
8892 ("python-requests" ,python-requests)
8893 ("python-urllib3" ,python-urllib3)))
8894 (synopsis "Puts a WSGI application in place of a real URI for testing")
8895 (description "Wsgi_intercept installs a WSGI application in place of a real
8896 URI for testing. Testing a WSGI application normally involves starting a
8897 server at a local host and port, then pointing your test code to that address.
8898 Instead, this library lets you intercept calls to any specific host/port
8899 combination and redirect them into a WSGI application importable by your test
8900 program. Thus, you can avoid spawning multiple processes or threads to test
8901 your Web app.")
8902 (home-page "https://github.com/cdent/wsgi-intercept")
8903 (license license:expat)))
8904
8905 (define-public python-pytest-xprocess
8906 (package
8907 (name "python-pytest-xprocess")
8908 (version "0.9.1")
8909 (source (origin
8910 (method url-fetch)
8911 (uri (pypi-uri "pytest-xprocess" version))
8912 (sha256
8913 (base32
8914 "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
8915 (build-system python-build-system)
8916 (propagated-inputs
8917 `(("python-pytest" ,python-pytest)
8918 ("python-pytest-cache" ,python-pytest-cache)
8919 ("python-psutil" ,python-psutil)))
8920 (synopsis "Pytest plugin to manage external processes across test runs")
8921 (description "Pytest-xprocess is an experimental py.test plugin for managing
8922 processes across test runs.")
8923 (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess")
8924 (license license:expat)))
8925
8926 (define-public python-icalendar
8927 (package
8928 (name "python-icalendar")
8929 (version "3.11.4")
8930 (source (origin
8931 (method url-fetch)
8932 (uri (pypi-uri "icalendar" version))
8933 (sha256
8934 (base32
8935 "0ix3xxykz8hs8mx4f2063djawmd888y3vsl75fbvbfqvg67v35jn"))))
8936 (build-system python-build-system)
8937 (propagated-inputs
8938 `(("python-dateutil" ,python-dateutil)
8939 ("python-pytz" ,python-pytz)))
8940 (synopsis "Python library for parsing iCalendar files")
8941 (description "The icalendar package is a parser/generator of iCalendar
8942 files for use with Python.")
8943 (home-page "https://github.com/collective/icalendar")
8944 (license license:bsd-2)))
8945
8946 (define-public python-sphinxcontrib-newsfeed
8947 (package
8948 (name "python-sphinxcontrib-newsfeed")
8949 (version "0.1.4")
8950 (source (origin
8951 (method url-fetch)
8952 (uri (pypi-uri "sphinxcontrib-newsfeed" version))
8953 (sha256
8954 (base32
8955 "1d7gam3mn8v4in4p16yn3v10vps7nnaz6ilw99j4klij39dqd37p"))))
8956 (arguments '(#:tests? #f)) ; No tests.
8957 (build-system python-build-system)
8958 (propagated-inputs
8959 `(("python-sphinx" ,python-sphinx)))
8960 (synopsis "News Feed extension for Sphinx")
8961 (description "Sphinxcontrib-newsfeed is an extension for adding a simple
8962 Blog, News or Announcements section to a Sphinx website.")
8963 (home-page "https://bitbucket.org/prometheus/sphinxcontrib-newsfeed")
8964 (license license:bsd-2)))
8965
8966 (define-public python-args
8967 (package
8968 (name "python-args")
8969 (version "0.1.0")
8970 (source (origin
8971 (method url-fetch)
8972 (uri (pypi-uri "args" version))
8973 (sha256
8974 (base32
8975 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
8976 (build-system python-build-system)
8977 (home-page "https://github.com/kennethreitz/args")
8978 (synopsis "Command-line argument parser")
8979 (description
8980 "This library provides a Python module to parse command-line arguments.")
8981 (license license:bsd-3)))
8982
8983 (define-public python2-args
8984 (package-with-python2 python-args))
8985
8986 (define-public python-clint
8987 (package
8988 (name "python-clint")
8989 (version "0.5.1")
8990 (source (origin
8991 (method url-fetch)
8992 (uri (pypi-uri "clint" version))
8993 (sha256
8994 (base32
8995 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
8996 (build-system python-build-system)
8997 (arguments
8998 '(#:phases
8999 (modify-phases %standard-phases
9000 (replace 'check
9001 (lambda _
9002 (zero? (system* "py.test" "-v")))))))
9003 (native-inputs
9004 `(("python-pytest" ,python-pytest)))
9005 (propagated-inputs
9006 `(("python-args" ,python-args)))
9007 (home-page "https://github.com/kennethreitz/clint")
9008 (synopsis "Command-line interface tools")
9009 (description
9010 "Clint is a Python module filled with a set of tools for developing
9011 command-line applications, including tools for colored and indented
9012 output, progress bar display, and pipes.")
9013 (license license:isc)))
9014
9015 (define-public python2-clint
9016 (package-with-python2 python-clint))
9017
9018 (define-public python-astor
9019 (package
9020 (name "python-astor")
9021 (version "0.5")
9022 (source (origin
9023 (method url-fetch)
9024 (uri (pypi-uri "astor" version))
9025 (sha256
9026 (base32
9027 "1fdafq5hkis1fxqlmhw0sn44zp2ar46nxhbc22cvwg7hsd8z5gsa"))))
9028 (build-system python-build-system)
9029 (home-page "https://github.com/berkerpeksag/astor")
9030 (synopsis "Read and write Python ASTs")
9031 (description
9032 "Astor is designed to allow easy manipulation of Python source via the
9033 Abstract Syntax Tree.")
9034 (license license:bsd-3)))
9035
9036 (define-public python2-astor
9037 (package-with-python2 python-astor))
9038
9039 (define-public python-rply
9040 (package
9041 (name "python-rply")
9042 (version "0.7.4")
9043 (source (origin
9044 (method url-fetch)
9045 (uri (pypi-uri "rply" version))
9046 (sha256
9047 (base32
9048 "12rp1d9ba7nvd5rhaxi6xzx1rm67r1k1ylsrkzhpwnphqpb06cvj"))))
9049 (build-system python-build-system)
9050 (propagated-inputs
9051 `(("python-appdirs" ,python-appdirs)))
9052 (home-page "https://github.com/alex/rply")
9053 (synopsis "Parser generator for Python")
9054 (description
9055 "This package provides a pure Python based parser generator, that also
9056 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9057 with a new public API, and RPython support.")
9058 (license license:bsd-3)))
9059
9060 (define-public python2-rply
9061 (package-with-python2 python-rply))
9062
9063 (define-public python-hy
9064 (package
9065 (name "python-hy")
9066 (version "0.11.1")
9067 (source (origin
9068 (method url-fetch)
9069 (uri (pypi-uri "hy" version))
9070 (sha256
9071 (base32
9072 "1msqv747iz12r73mz4qvsmlwkddwjvrahlrk7ysrcz07h7dsscxs"))))
9073 (build-system python-build-system)
9074 (arguments
9075 '(#:phases
9076 (modify-phases %standard-phases
9077 (replace 'check
9078 (lambda _
9079 ;; Tests require write access to HOME.
9080 (setenv "HOME" "/tmp")
9081 (zero? (system* "nosetests")))))))
9082 (native-inputs
9083 `(("python-coverage" ,python-coverage)
9084 ("python-nose" ,python-nose)))
9085 (propagated-inputs
9086 `(("python-astor" ,python-astor)
9087 ("python-clint" ,python-clint)
9088 ("python-rply" ,python-rply)))
9089 (home-page "http://hylang.org/")
9090 (synopsis "Lisp frontend to Python")
9091 (description
9092 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9093 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9094 Python at your fingertips, in Lisp form.")
9095 (license license:expat)))
9096
9097 (define-public python2-hy
9098 (package-with-python2 python-hy))
9099
9100 (define-public python-rauth
9101 (package
9102 (name "python-rauth")
9103 (version "0.7.3")
9104 (source
9105 (origin
9106 (method url-fetch)
9107 (uri (pypi-uri "rauth" version))
9108 (sha256
9109 (base32
9110 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
9111 (build-system python-build-system)
9112 (arguments
9113 `(#:test-target "check"))
9114 (propagated-inputs
9115 `(("python-requests" ,python-requests)))
9116 (home-page "https://github.com/litl/rauth")
9117 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
9118 (description
9119 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
9120 provides service wrappers for convenient connection initialization and
9121 authenticated session objects providing things like keep-alive.")
9122 (license license:expat)
9123 (properties `((python2-variant . ,(delay python2-rauth))))))
9124
9125 (define-public python2-rauth
9126 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
9127 (package
9128 (inherit base)
9129 (native-inputs `(("python2-unittest2" ,python2-unittest2)
9130 ,@(package-native-inputs base))))))
9131
9132 (define-public python2-functools32
9133 (package
9134 (name "python2-functools32")
9135 (version "3.2.3-2")
9136 (source
9137 (origin
9138 (method url-fetch)
9139 (uri (pypi-uri "functools32" version))
9140 (sha256
9141 (base32
9142 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9143 (build-system python-build-system)
9144 (arguments
9145 `(#:python ,python-2
9146 #:tests? #f)) ; no test target
9147 (home-page "https://github.com/MiCHiLU/python-functools32")
9148 (synopsis
9149 "Backport of the functools module from Python 3.2.3")
9150 (description
9151 "This package is a backport of the @code{functools} module from Python
9152 3.2.3 for use with older versions of Python and PyPy.")
9153 (license license:expat)))
9154
9155 (define-public python2-subprocess32
9156 (package
9157 (name "python2-subprocess32")
9158 (version "3.2.7")
9159 (source (origin
9160 (method url-fetch)
9161 (uri (pypi-uri "subprocess32" version))
9162 (sha256
9163 (base32
9164 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9165 (patches
9166 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9167 (build-system python-build-system)
9168 (arguments
9169 `(#:python ,python-2
9170 #:phases
9171 (modify-phases %standard-phases
9172 (add-after 'unpack 'patch-/bin/sh
9173 (lambda _
9174 (substitute* '("subprocess32.py"
9175 "test_subprocess32.py")
9176 (("/bin/sh") (which "sh")))
9177 #t))
9178 (delete 'check)
9179 (add-after 'install 'check
9180 (lambda* (#:key inputs outputs #:allow-other-keys)
9181 ;; For some reason this package fails to import
9182 ;; _posixsubprocess.so when PYTHONPATH is set to the build
9183 ;; directory. Running tests after install is easier.
9184 (add-installed-pythonpath inputs outputs)
9185 (zero? (system* "python" "test_subprocess32.py")))))))
9186 (home-page "https://github.com/google/python-subprocess32")
9187 (synopsis "Backport of the subprocess module from Python 3.2")
9188 (description
9189 "This is a backport of the @code{subprocess} standard library module
9190 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9191 new features. On POSIX systems it is guaranteed to be reliable when used
9192 in threaded applications. It includes timeout support from Python 3.3 but
9193 otherwise matches 3.2’s API.")
9194 (license license:psfl)))
9195
9196 (define-public python2-futures
9197 (package
9198 (name "python2-futures")
9199 (version "3.0.5")
9200 (source
9201 (origin
9202 (method url-fetch)
9203 (uri (pypi-uri "futures" version))
9204 (sha256
9205 (base32
9206 "1pw1z4329xvlabdpwqa6b7v2fxf7hl64m4cgr22ckbym8m8m4hh5"))))
9207 (build-system python-build-system)
9208 (arguments `(#:python ,python-2))
9209 (home-page "https://github.com/agronholm/pythonfutures")
9210 (synopsis
9211 "Backport of the concurrent.futures package from Python 3.2")
9212 (description
9213 "The concurrent.futures module provides a high-level interface for
9214 asynchronously executing callables. This package backports the
9215 concurrent.futures package from Python 3.2")
9216 (license license:bsd-3)))
9217
9218 (define-public python-promise
9219 (package
9220 (name "python-promise")
9221 (version "0.4.2")
9222 (source
9223 (origin
9224 (method url-fetch)
9225 (uri (pypi-uri "promise" version))
9226 (sha256
9227 (base32
9228 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9229 (build-system python-build-system)
9230 ;; Tests wants python-futures, which is a python2 only program, and
9231 ;; can't be found by python-promise at test time.
9232 (arguments `(#:tests? #f))
9233 (home-page "https://github.com/syrusakbary/promise")
9234 (synopsis "Promises/A+ implementation for Python")
9235 (description
9236 "Promises/A+ implementation for Python")
9237 (properties `((python2-variant . ,(delay python2-promise))))
9238 (license license:expat)))
9239
9240 (define-public python2-promise
9241 (let ((promise (package-with-python2
9242 (strip-python2-variant python-promise))))
9243 (package (inherit promise)
9244 (arguments (substitute-keyword-arguments (package-arguments promise)
9245 ((#:tests? _) #t)))
9246 (native-inputs
9247 `(("python2-futures" ,python2-futures)
9248 ("python2-pytest" ,python2-pytest)
9249 ,@(package-native-inputs promise))))))
9250
9251 (define-public python-urllib3
9252 (package
9253 (name "python-urllib3")
9254 (version "1.18.1")
9255 (source
9256 (origin
9257 (method url-fetch)
9258 (uri (pypi-uri "urllib3" version))
9259 (sha256
9260 (base32
9261 "1wb8aqnq53vzh2amrv8kc66f3h6fx217y0q62y6n30a64p2yqmam"))))
9262 (build-system python-build-system)
9263 (arguments `(#:tests? #f))
9264 (native-inputs
9265 `(;; some packages for tests
9266 ("python-nose" ,python-nose)
9267 ("python-mock" ,python-mock)
9268 ("python-tornado" ,python-tornado)))
9269 (propagated-inputs
9270 `(;; extra packages for https security
9271 ("python-certifi" ,python-certifi)
9272 ("python-ndg-httpsclient" ,python-ndg-httpsclient)
9273 ("python-pyasn1" ,python-pyasn1)
9274 ("python-pyopenssl" ,python-pyopenssl)))
9275 (home-page "https://urllib3.readthedocs.org/")
9276 (synopsis "HTTP library with thread-safe connection pooling")
9277 (description
9278 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9279 can reuse the same socket connection for multiple requests, it can POST files,
9280 supports url redirection and retries, and also gzip and deflate decoding.")
9281 (license license:expat)))
9282
9283 (define-public python2-urllib3
9284 (package-with-python2 python-urllib3))
9285
9286 (define-public python-colorama
9287 (package
9288 (name "python-colorama")
9289 (version "0.3.7")
9290 (source
9291 (origin
9292 (method url-fetch)
9293 (uri (pypi-uri "colorama" version))
9294 (sha256
9295 (base32
9296 "0avqkn6362v7k2kg3afb35g4sfdvixjgy890clip4q174p9whhz0"))))
9297 (build-system python-build-system)
9298 (synopsis "Colored terminal text rendering for Python")
9299 (description "Colorama is a Python library for rendering colored terminal
9300 text.")
9301 (home-page "https://pypi.python.org/pypi/colorama")
9302 (license license:bsd-3)))
9303
9304 (define-public python2-colorama
9305 (package-with-python2 python-colorama))
9306
9307 (define-public python-rsa
9308 (package
9309 (name "python-rsa")
9310 (version "3.4.2")
9311 (source
9312 (origin
9313 (method url-fetch)
9314 (uri (pypi-uri "rsa" version))
9315 (sha256
9316 (base32
9317 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9318 (build-system python-build-system)
9319 (propagated-inputs
9320 `(("python-pyasn1" ,python-pyasn1)))
9321 (synopsis "Pure-Python RSA implementation")
9322 (description "Python-RSA is a pure-Python RSA implementation. It supports
9323 encryption and decryption, signing and verifying signatures, and key
9324 generation according to PKCS#1 version 1.5. It can be used as a Python
9325 library as well as on the command line.")
9326 (home-page "http://stuvel.eu/rsa")
9327 (license license:asl2.0)))
9328
9329 (define-public python2-rsa
9330 (package-with-python2 python-rsa))
9331
9332 (define-public python-pluggy
9333 (package
9334 (name "python-pluggy")
9335 (version "0.3.1")
9336 (source
9337 (origin
9338 (method url-fetch)
9339 (uri (pypi-uri "pluggy" version))
9340 (sha256
9341 (base32
9342 "18qfzfm40bgx672lkg8q9x5hdh76n7vax99aank7vh2nw21wg70m"))))
9343 (build-system python-build-system)
9344 (synopsis "Plugin and hook calling mechanism for Python")
9345 (description "Pluggy is an extraction of the plugin manager as used by
9346 Pytest but stripped of Pytest specific details.")
9347 (home-page "https://pypi.python.org/pypi/pluggy")
9348 (license license:expat)))
9349
9350 (define-public python2-pluggy
9351 (package-with-python2 python-pluggy))
9352
9353 (define-public python-tox
9354 (package
9355 (name "python-tox")
9356 (version "2.3.1")
9357 (source
9358 (origin
9359 (method url-fetch)
9360 (uri (pypi-uri "tox" version))
9361 (sha256
9362 (base32
9363 "1vj73ar4rimq3fwy5r2z3jv4g9qbh8rmpmncsc00g0k310acqzxz"))))
9364 (build-system python-build-system)
9365 (arguments
9366 ;; FIXME: Tests require pytest-timeout, which itself requires
9367 ;; pytest>=2.8.0 for installation.
9368 '(#:tests? #f))
9369 (propagated-inputs
9370 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
9371 ("python-py" ,python-py)
9372 ("python-virtualenv" ,python-virtualenv)))
9373 (native-inputs
9374 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
9375 ("python-pytest" ,python-pytest))) ; >= 2.3.5
9376 (home-page "http://tox.testrun.org/")
9377 (synopsis "Virtualenv-based automation of test activities")
9378 (description "Tox is a generic virtualenv management and test command line
9379 tool. It can be used to check that a package installs correctly with
9380 different Python versions and interpreters, or run tests in each type of
9381 supported environment, or act as a frontend to continuous integration
9382 servers.")
9383 (license license:expat)))
9384
9385 (define-public python2-tox
9386 (package-with-python2 python-tox))
9387
9388 (define-public python-jmespath
9389 (package
9390 (name "python-jmespath")
9391 (version "0.9.0")
9392 (source
9393 (origin
9394 (method url-fetch)
9395 (uri (pypi-uri "jmespath" version))
9396 (sha256
9397 (base32
9398 "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8"))))
9399 (build-system python-build-system)
9400 (native-inputs
9401 `(("python-nose" ,python-nose)))
9402 (synopsis "JSON Matching Expressions")
9403 (description "JMESPath (pronounced “james path”) is a Python library that
9404 allows one to declaratively specify how to extract elements from a JSON
9405 document.")
9406 (home-page "https://github.com/jmespath/jmespath.py")
9407 (license license:expat)))
9408
9409 (define-public python2-jmespath
9410 (package-with-python2 python-jmespath))
9411
9412 (define-public python-botocore
9413 (package
9414 (name "python-botocore")
9415 (version "1.5.26")
9416 (source
9417 (origin
9418 (method url-fetch)
9419 (uri (pypi-uri "botocore" version))
9420 (sha256
9421 (base32
9422 "1b7l48hr88galrrc5q6k21z3sdadzxc87ppzs7k9fz4p1w8bfnvb"))))
9423 (build-system python-build-system)
9424 (arguments
9425 ;; FIXME: Many tests are failing.
9426 '(#:tests? #f))
9427 (propagated-inputs
9428 `(("python-dateutil" ,python-dateutil)
9429 ("python-docutils" ,python-docutils)
9430 ("python-jmespath" ,python-jmespath)))
9431 (native-inputs
9432 `(("python-mock" ,python-mock)
9433 ("python-nose" ,python-nose)
9434 ("behave" ,behave)
9435 ("python-tox" ,python-tox)
9436 ("python-wheel" ,python-wheel)))
9437 (home-page "https://github.com/boto/botocore")
9438 (synopsis "Low-level interface to AWS")
9439 (description "Botocore is a Python library that provides a low-level
9440 interface to the Amazon Web Services (AWS) API.")
9441 (license license:asl2.0)))
9442
9443 (define-public python2-botocore
9444 (package-with-python2 python-botocore))
9445
9446 (define-public awscli
9447 (package
9448 (name "awscli")
9449 (version "1.11.63")
9450 (source
9451 (origin
9452 (method url-fetch)
9453 (uri (pypi-uri name version))
9454 (sha256
9455 (base32
9456 "1r8aqv8w27k76lcsfk83w6qw9lz8gk2ibzwacp5wjhpp2gik911m"))))
9457 (build-system python-build-system)
9458 (propagated-inputs
9459 `(("python-colorama" ,python-colorama)
9460 ("python-botocore" ,python-botocore)
9461 ("python-s3transfer" ,python-s3transfer)
9462 ("python-docutils" ,python-docutils)
9463 ("python-pyyaml" ,python-pyyaml)
9464 ("python-rsa" ,python-rsa)))
9465 (arguments
9466 ;; FIXME: The 'pypi' release does not contain tests.
9467 '(#:tests? #f))
9468 (home-page "https://aws.amazon.com/cli/")
9469 (synopsis "Command line client for AWS")
9470 (description "AWS CLI provides a unified command line interface to the
9471 Amazon Web Services (AWS) API.")
9472 (license license:asl2.0)))
9473
9474 (define-public python-hypothesis
9475 (package
9476 (name "python-hypothesis")
9477 (version "3.1.0")
9478 (source (origin
9479 (method url-fetch)
9480 (uri (pypi-uri "hypothesis" version))
9481 (sha256
9482 (base32
9483 "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
9484 (build-system python-build-system)
9485 (native-inputs
9486 `(("python-flake8" ,python-flake8)
9487 ("python-pytest" ,python-pytest)))
9488 (synopsis "Library for property based testing")
9489 (description "Hypothesis is a library for testing your Python code against a
9490 much larger range of examples than you would ever want to write by hand. It’s
9491 based on the Haskell library, Quickcheck, and is designed to integrate
9492 seamlessly into your existing Python unit testing work flow.")
9493 (home-page "https://github.com/DRMacIver/hypothesis")
9494 (license license:mpl2.0)
9495 (properties `((python2-variant . ,(delay python2-hypothesis))))))
9496
9497 (define-public python2-hypothesis
9498 (let ((hypothesis (package-with-python2
9499 (strip-python2-variant python-hypothesis))))
9500 (package (inherit hypothesis)
9501 (native-inputs
9502 `(("python2-enum34" ,python2-enum34)
9503 ,@(package-native-inputs hypothesis))))))
9504
9505 (define-public python-pytest-subtesthack
9506 (package
9507 (name "python-pytest-subtesthack")
9508 (version "0.1.1")
9509 (source (origin
9510 (method url-fetch)
9511 (uri (pypi-uri "pytest-subtesthack" version))
9512 (sha256
9513 (base32
9514 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
9515 (build-system python-build-system)
9516 (propagated-inputs
9517 `(("python-pytest" ,python-pytest)))
9518 (synopsis "Set-up and tear-down fixtures for unit tests")
9519 (description "This plugin allows you to set up and tear down fixtures within
9520 unit test functions that use @code{py.test}. This is useful for using
9521 @command{hypothesis} inside py.test, as @command{hypothesis} will call the test
9522 function multiple times, without setting up or tearing down fixture state as is
9523 normally the case.")
9524 (home-page "https://github.com/untitaker/pytest-subtesthack/")
9525 (license license:unlicense)))
9526
9527 (define-public python2-pytest-subtesthack
9528 (package-with-python2 python-pytest-subtesthack))
9529
9530 (define-public python-xdo
9531 (package
9532 (name "python-xdo")
9533 (version "0.3")
9534 (source (origin
9535 (method url-fetch)
9536 (uri (string-append
9537 "http://http.debian.net/debian/pool/main/p/python-xdo/"
9538 "python-xdo_" version ".orig.tar.gz"))
9539 (sha256
9540 (base32
9541 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
9542 (build-system python-build-system)
9543 (arguments
9544 '(#:phases
9545 (modify-phases %standard-phases
9546 (add-before 'install 'patch-libxdo-path
9547 ;; Hardcode the path of dynamically loaded libxdo library.
9548 (lambda* (#:key inputs #:allow-other-keys)
9549 (let ((libxdo (string-append
9550 (assoc-ref inputs "xdotool")
9551 "/lib/libxdo.so")))
9552 (substitute* "xdo/_xdo.py"
9553 (("find_library\\(\"xdo\"\\)")
9554 (simple-format #f "\"~a\"" libxdo)))
9555 #t))))
9556 #:tests? #f)) ; no tests provided
9557 (propagated-inputs
9558 `(("python-six" ,python-six)))
9559 (inputs
9560 `(("xdotool" ,xdotool)
9561 ("libX11" ,libx11)))
9562 (home-page "https://tracker.debian.org/pkg/python-xdo")
9563 (synopsis "Python library for simulating X11 keyboard/mouse input")
9564 (description "Provides bindings to libxdo for manipulating X11 via simulated
9565 input. (Note that this is mostly a legacy library; you may wish to look at
9566 python-xdo for newer bindings.)")
9567 (license license:bsd-3)))
9568
9569 (define-public python2-xdo
9570 (package-with-python2 python-xdo))
9571
9572 (define-public python-wtforms
9573 (package
9574 (name "python-wtforms")
9575 (version "2.1")
9576 (source
9577 (origin
9578 (method url-fetch)
9579 (uri (pypi-uri "WTForms" version ".zip"))
9580 (sha256
9581 (base32
9582 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
9583 (build-system python-build-system)
9584 (arguments
9585 '(#:phases
9586 (modify-phases %standard-phases
9587 (add-after 'unpack 'remove-django-test
9588 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
9589 (lambda _
9590 (substitute*
9591 "tests/runtests.py"
9592 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
9593 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
9594 #t)))))
9595 (native-inputs
9596 `(("unzip" ,unzip)))
9597 (home-page "http://wtforms.simplecodes.com/")
9598 (synopsis
9599 "Form validation and rendering library for Python web development")
9600 (description
9601 "WTForms is a flexible forms validation and rendering library
9602 for Python web development. It is very similar to the web form API
9603 available in Django, but is a standalone package.")
9604 (license license:bsd-3)))
9605
9606 (define-public python2-wtforms
9607 (package-with-python2 python-wtforms))
9608
9609 (define-public python-mako
9610 (package
9611 (name "python-mako")
9612 (version "1.0.6")
9613 (source
9614 (origin
9615 (method url-fetch)
9616 (uri (pypi-uri "Mako" version))
9617 (sha256
9618 (base32
9619 "03dyxgjknp4ffsv7vwfd28l5bbpzi0ylp20543wpg3iahyyrwma8"))))
9620 (build-system python-build-system)
9621 (propagated-inputs
9622 `(("python-markupsafe" ,python-markupsafe)))
9623 (native-inputs
9624 `(("python-mock" ,python-mock)
9625 ("python-nose" ,python-nose)
9626 ("python-pytest" ,python-pytest)))
9627 (home-page "http://www.makotemplates.org/")
9628 (synopsis "Templating language for Python")
9629 (description "Mako is a templating language for Python that compiles
9630 templates into Python modules.")
9631 (license license:expat)))
9632
9633 (define-public python2-mako
9634 (package-with-python2 python-mako))
9635
9636 (define-public python-waitress
9637 (package
9638 (name "python-waitress")
9639 (version "0.8.10")
9640 (source
9641 (origin
9642 (method url-fetch)
9643 (uri (pypi-uri "waitress" version))
9644 (sha256
9645 (base32
9646 "017n9ra6vvmq9d5sfhdzyzr1mg15x2hj2dhm4pdlw98c1ypw2h3w"))))
9647 (build-system python-build-system)
9648 (home-page "https://github.com/Pylons/waitress")
9649 (synopsis "Waitress WSGI server")
9650 (description "Waitress is meant to be a production-quality pure-Python WSGI
9651 server with very acceptable performance.")
9652 (license license:zpl2.1)))
9653
9654 (define-public python2-waitress
9655 (package-with-python2 python-waitress))
9656
9657 (define-public python-wsgiproxy2
9658 (package
9659 (name "python-wsgiproxy2")
9660 (version "0.4.2")
9661 (source
9662 (origin
9663 (method url-fetch)
9664 (uri (pypi-uri "WSGIProxy2" version ".zip"))
9665 (sha256
9666 (base32
9667 "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4"))))
9668 (build-system python-build-system)
9669 (arguments
9670 '(;; Wsgiproxy2's test suite requires Restkit, which does not yet fully
9671 ;; support Python 3:
9672 ;; https://github.com/benoitc/restkit/issues/140
9673 #:tests? #f))
9674 (native-inputs
9675 `(("unzip" ,unzip)
9676 ("python-nose" ,python-nose)
9677 ("python-coverage" ,python-coverage)))
9678 (propagated-inputs
9679 `(("python-six" ,python-six)
9680 ("python-webob" ,python-webob)))
9681 (home-page
9682 "https://github.com/gawel/WSGIProxy2/")
9683 (synopsis "WSGI Proxy with various http client backends")
9684 (description "WSGI turns HTTP requests into WSGI function calls.
9685 WSGIProxy turns WSGI function calls into HTTP requests.
9686 It also includes code to sign requests and pass private data,
9687 and to spawn subprocesses to handle requests.")
9688 (license license:expat)))
9689
9690 (define-public python2-wsgiproxy2
9691 (package-with-python2 python-wsgiproxy2))
9692
9693 (define-public python-pastedeploy
9694 (package
9695 (name "python-pastedeploy")
9696 (version "1.5.2")
9697 (source
9698 (origin
9699 (method url-fetch)
9700 (uri (pypi-uri "PasteDeploy" version))
9701 (sha256
9702 (base32
9703 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
9704 (build-system python-build-system)
9705 (native-inputs
9706 `(("python-nose" ,python-nose)))
9707 (home-page "http://pythonpaste.org/deploy/")
9708 (synopsis
9709 "Load, configure, and compose WSGI applications and servers")
9710 (description
9711 "This tool provides code to load WSGI applications and servers from URIs;
9712 these URIs can refer to Python Eggs for INI-style configuration files. Paste
9713 Script provides commands to serve applications based on this configuration
9714 file.")
9715 (license license:expat)))
9716
9717 (define-public python2-pastedeploy
9718 (package-with-python2 python-pastedeploy))
9719
9720 (define-public python-paste
9721 (package
9722 (name "python-paste")
9723 (version "2.0.3")
9724 (source
9725 (origin
9726 (method url-fetch)
9727 (uri (pypi-uri "Paste" version))
9728 (sha256
9729 (base32
9730 "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3"))
9731 (patches (search-patches "python-paste-remove-website-test.patch"
9732 "python-paste-remove-timing-test.patch"))))
9733 (build-system python-build-system)
9734 (native-inputs
9735 `(("python-nose" ,python-nose)))
9736 (propagated-inputs
9737 `(("python-six" ,python-six)))
9738 (home-page "http://pythonpaste.org")
9739 (synopsis
9740 "Python web development tools, focusing on WSGI")
9741 (description
9742 "Paste provides a variety of web development tools and middleware which
9743 can be nested together to build web applications. Paste's design closely
9744 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
9745 (license license:expat)))
9746
9747 (define-public python2-paste
9748 (package-with-python2 python-paste))
9749
9750 (define-public python-pastescript
9751 (package
9752 (name "python-pastescript")
9753 (version "2.0.2")
9754 (source
9755 (origin
9756 (method url-fetch)
9757 (uri (pypi-uri "PasteScript" version))
9758 (sha256
9759 (base32
9760 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
9761 (build-system python-build-system)
9762 (native-inputs
9763 `(("python-nose" ,python-nose)))
9764 (propagated-inputs
9765 `(("python-paste" ,python-paste)
9766 ("python-pastedeploy" ,python-pastedeploy)))
9767 (home-page "http://pythonpaste.org/script/")
9768 (arguments
9769 '(;; Unfortunately, this requires the latest unittest2,
9770 ;; but that requires traceback2 which requires linecache2 which requires
9771 ;; unittest2. So we're skipping tests for now.
9772 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
9773 ;; so in theory we could get around this situation somehow.)
9774 #:tests? #f))
9775 (synopsis
9776 "Pluggable command line tool for serving web applications and more")
9777 (description
9778 "PasteScript is a plugin-friendly command line tool which provides a
9779 variety of features, from launching web applications to bootstrapping project
9780 layouts.")
9781 (license license:expat)))
9782
9783 (define-public python2-pastescript
9784 (package-with-python2 python-pastescript))
9785
9786 (define-public python-pyquery
9787 (package
9788 (name "python-pyquery")
9789 (version "1.2.17")
9790 (source
9791 (origin
9792 (method url-fetch)
9793 (uri (pypi-uri "pyquery" version))
9794 (sha256
9795 (base32
9796 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
9797 (build-system python-build-system)
9798 (native-inputs
9799 `(("python-webob" ,python-webob)
9800 ("python-webtest" ,python-webtest)))
9801 (propagated-inputs
9802 `(("python-lxml" ,python-lxml)
9803 ("python-cssselect" ,python-cssselect)))
9804 (home-page "https://github.com/gawel/pyquery")
9805 (synopsis "Make jQuery-like queries on xml documents")
9806 (description "pyquery allows you to make jQuery queries on xml documents.
9807 The API is as much as possible the similar to jQuery. pyquery uses lxml for
9808 fast xml and html manipulation.")
9809 (license license:bsd-3)))
9810
9811 (define-public python2-pyquery
9812 (package-with-python2 python-pyquery))
9813
9814 (define-public python-webtest
9815 (package
9816 (name "python-webtest")
9817 (version "2.0.20")
9818 (source
9819 (origin
9820 (method url-fetch)
9821 (uri (pypi-uri "WebTest" version))
9822 (sha256
9823 (base32
9824 "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv"))))
9825 (build-system python-build-system)
9826 (arguments
9827 `(;; Unfortunately we have to disable tests!
9828 ;; This release of WebTest is pinned to python-nose < 1.3,
9829 ;; but older versions of python-nose are plagued with the following
9830 ;; bug(s), which rears its ugly head during test execution:
9831 ;; https://github.com/nose-devs/nose/issues/759
9832 ;; https://github.com/nose-devs/nose/pull/811
9833 #:tests? #f))
9834 ;; Commented out code is no good, but in this case, once tests
9835 ;; are ready to be enabled again, we should put the following
9836 ;; in place:
9837 ;; (native-inputs
9838 ;; `(("python-nose" ,python-nose) ; technially < 1.3,
9839 ;; ; but see above comment
9840 ;; ("python-coverage" ,python-coverage)
9841 ;; ("python-mock" ,python-mock)
9842 ;; ("python-pastedeploy" ,python-pastedeploy)
9843 ;; ("python-wsgiproxy2" ,python-wsgiproxy2)
9844 ;; ("python-pyquery" ,python-pyquery)))
9845 (propagated-inputs
9846 `(("python-waitress" ,python-waitress)
9847 ("python-webob" ,python-webob)
9848 ("python-six" ,python-six)
9849 ("python-beautifulsoup4" ,python-beautifulsoup4)))
9850 (home-page "http://webtest.pythonpaste.org/")
9851 (synopsis "Helper to test WSGI applications")
9852 (description "Webtest allows you to test your Python web applications
9853 without starting an HTTP server. It supports anything that supports the
9854 minimum of WSGI.")
9855 (license license:expat)))
9856
9857 (define-public python2-webtest
9858 (package-with-python2 python-webtest))
9859
9860 (define-public python-anyjson
9861 (package
9862 (name "python-anyjson")
9863 (version "0.3.3")
9864 (source
9865 (origin
9866 (method url-fetch)
9867 (uri (pypi-uri "anyjson" version))
9868 (sha256
9869 (base32
9870 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
9871 (build-system python-build-system)
9872 (arguments
9873 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
9874 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
9875 ;; whatever) so this transformation needs to be done before the tests
9876 ;; can be run. Maybe we could add a build step to transform beforehand
9877 ;; but it could be annoying/difficult.
9878 ;; We can enable tests for the Python 2 version, though, and do below.
9879 #:tests? #f))
9880 (home-page "http://bitbucket.org/runeh/anyjson/")
9881 (synopsis
9882 "Wraps best available JSON implementation in a common interface")
9883 (description
9884 "Anyjson loads whichever is the fastest JSON module installed
9885 and provides a uniform API regardless of which JSON implementation is used.")
9886 (license license:bsd-3)
9887 (properties `((python2-variant . ,(delay python2-anyjson))))))
9888
9889 (define-public python2-anyjson
9890 (let ((anyjson (package-with-python2
9891 (strip-python2-variant python-anyjson))))
9892 (package
9893 (inherit anyjson)
9894 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
9895 #:tests? #t
9896 ,@(package-arguments anyjson)))
9897 (native-inputs `(("python2-nose" ,python2-nose))))))
9898
9899 (define-public python-amqp
9900 (package
9901 (name "python-amqp")
9902 (version "1.4.9")
9903 (source
9904 (origin
9905 (method url-fetch)
9906 (uri (pypi-uri "amqp" version))
9907 (sha256
9908 (base32
9909 "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid"))))
9910 (build-system python-build-system)
9911 (native-inputs
9912 `(("python-nose" ,python-nose)
9913 ("python-mock" ,python-mock)))
9914 (home-page "https://github.com/celery/py-amqp")
9915 (synopsis
9916 "Low-level AMQP client for Python (fork of amqplib)")
9917 (description
9918 "This is a fork of amqplib which was originally written by Barry Pederson.
9919 It is maintained by the Celery project, and used by kombu as a pure python
9920 alternative when librabbitmq is not available.")
9921 (license license:lgpl2.1+)
9922 (properties `((python2-variant . ,(delay python2-amqp))))))
9923
9924 (define-public python2-amqp
9925 (let ((amqp (package-with-python2
9926 (strip-python2-variant python-amqp))))
9927 (package
9928 (inherit amqp)
9929 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
9930 ;; unmaintained. Weirdly, does not do this on the python 3
9931 ;; version?
9932 #:tests? #f
9933 ,@(package-arguments amqp))))))
9934
9935 (define-public python-kombu
9936 (package
9937 (name "python-kombu")
9938 (version "3.0.37")
9939 (source
9940 (origin
9941 (method url-fetch)
9942 (uri (pypi-uri "kombu" version))
9943 (sha256
9944 (base32
9945 "0l16chb314gpq2v7fh94a22c30lcv6w3ylmhsa60bldlcq6a0r70"))))
9946 (build-system python-build-system)
9947 (native-inputs
9948 `(("python-mock" ,python-mock)
9949 ("python-nose" ,python-nose)))
9950 (propagated-inputs
9951 `(("python-anyjson" ,python-anyjson)
9952 ("python-amqp" ,python-amqp)
9953 ("python-redis" ,python-redis)))
9954 (home-page "http://kombu.readthedocs.org")
9955 (synopsis "Message passing library for Python")
9956 (description "The aim of Kombu is to make messaging in Python as easy as
9957 possible by providing an idiomatic high-level interface for the AMQ protocol,
9958 and also provide proven and tested solutions to common messaging problems.
9959 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
9960 message orientation, queuing, routing, reliability and security, for which the
9961 RabbitMQ messaging server is the most popular implementation.")
9962 (license license:bsd-3)
9963 (properties `((python2-variant . ,(delay python2-kombu))))))
9964
9965 (define-public python2-kombu
9966 (let ((kombu (package-with-python2
9967 (strip-python2-variant python-kombu))))
9968 (package
9969 (inherit kombu)
9970 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
9971 ;; It works fine on the python3 variant.
9972 #:tests? #f
9973 ,@(package-arguments kombu)))
9974 (native-inputs `(("python2-unittest2" ,python2-unittest2)
9975 ,@(package-native-inputs kombu))))))
9976
9977 (define-public python-billiard
9978 (package
9979 (name "python-billiard")
9980 (version "3.3.0.23")
9981 (source
9982 (origin
9983 (method url-fetch)
9984 (uri (pypi-uri "billiard" version))
9985 (sha256
9986 (base32
9987 "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"))))
9988 (build-system python-build-system)
9989 (native-inputs
9990 `(("python-nose" ,python-nose)))
9991 (home-page "https://github.com/celery/billiard")
9992 (synopsis
9993 "Python multiprocessing fork with improvements and bugfixes")
9994 (description
9995 "Billiard is a fork of the Python 2.7 multiprocessing package. The
9996 multiprocessing package itself is a renamed and updated version of R Oudkerk's
9997 pyprocessing package. This standalone variant is intended to be compatible with
9998 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
9999 (license license:bsd-3)
10000 (properties `((python2-variant . ,(delay python2-billiard))))))
10001
10002 (define-public python2-billiard
10003 (let ((billiard (package-with-python2
10004 (strip-python2-variant python-billiard))))
10005 (package
10006 (inherit billiard)
10007 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10008 ("python2-mock" ,python2-mock)
10009 ,@(package-native-inputs billiard))))))
10010
10011 (define-public python-celery
10012 (package
10013 (name "python-celery")
10014 (version "3.1.24")
10015 (source
10016 (origin
10017 (method url-fetch)
10018 (uri (pypi-uri "celery" version))
10019 (sha256
10020 (base32
10021 "0yh2prhdnx2dgkb67a5drj12hh2zvzx5f611p7mqqg01ydghif4r"))))
10022 (build-system python-build-system)
10023 (arguments
10024 `(#:phases
10025 (modify-phases %standard-phases
10026 ;; These tests break with Python 3.5:
10027 ;; https://github.com/celery/celery/issues/2897#issuecomment-253066295
10028 (replace 'check
10029 (lambda _
10030 (zero?
10031 (system* "nosetests" "--exclude=^test_safe_to_remove.*")))))))
10032 (native-inputs
10033 `(("python-nose" ,python-nose)))
10034 (propagated-inputs
10035 `(("python-pytz" ,python-pytz)
10036 ("python-billiard" ,python-billiard)
10037 ("python-kombu" ,python-kombu)))
10038 (home-page "http://celeryproject.org")
10039 (synopsis "Distributed Task Queue")
10040 (description "Celery is an asynchronous task queue/job queue based on
10041 distributed message passing. It is focused on real-time operation, but
10042 supports scheduling as well. The execution units, called tasks, are executed
10043 concurrently on a single or more worker servers using multiprocessing,
10044 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10045 synchronously (wait until ready).")
10046 (license license:bsd-3)
10047 (properties `((python2-variant . ,(delay python2-celery))))))
10048
10049 (define-public python2-celery
10050 (let ((celery (package-with-python2
10051 (strip-python2-variant python-celery))))
10052 (package
10053 (inherit celery)
10054 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10055 ("python2-mock" ,python2-mock)
10056 ,@(package-native-inputs celery))))))
10057
10058 (define-public python-translitcodec
10059 (package
10060 (name "python-translitcodec")
10061 (version "0.4.0")
10062 (source
10063 (origin
10064 (method url-fetch)
10065 (uri (pypi-uri "translitcodec" version))
10066 (sha256
10067 (base32
10068 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10069 (build-system python-build-system)
10070 (arguments
10071 `(#:tests? #f)) ; no tests provided
10072 (home-page
10073 "https://github.com/claudep/translitcodec")
10074 (synopsis
10075 "Unicode to 8-bit charset transliteration codec")
10076 (description
10077 "This package contains codecs for transliterating ISO 10646 texts into
10078 best-effort representations using smaller coded character sets (ASCII,
10079 ISO 8859, etc.).")
10080 (license license:expat)))
10081
10082 (define-public python2-translitcodec
10083 (package-with-python2 python-translitcodec))
10084
10085 (define-public python-editor
10086 (package
10087 (name "python-editor")
10088 (version "0.5")
10089 (source
10090 (origin
10091 (method url-fetch)
10092 (uri (pypi-uri "python-editor" version))
10093 (sha256
10094 (base32
10095 "1ypnpgvzpkbwsg4rdvy4sy51j28b5xq9v8pnkwxncn07vqz06p7n"))))
10096 (build-system python-build-system)
10097 (home-page
10098 "https://github.com/fmoo/python-editor")
10099 (synopsis
10100 "Programmatically open an editor, capture the result")
10101 (description
10102 "python-editor is a library that provides the editor module for
10103 programmatically interfacing with your system's $EDITOR.")
10104 (license license:asl2.0)))
10105
10106 (define-public python2-editor
10107 (package-with-python2 python-editor))
10108
10109 (define-public python-sphinxcontrib-programoutput
10110 (package
10111 (name "python-sphinxcontrib-programoutput")
10112 (version "0.10")
10113 (source (origin
10114 (method url-fetch)
10115 (uri (pypi-uri "sphinxcontrib-programoutput" version))
10116 (sha256
10117 (base32
10118 "153hhnlbx4688zj9wd64819ps5znc2jlyp5crkgzvn5hxgy99vpx"))))
10119 (build-system python-build-system)
10120 (arguments
10121 ;; FIXME: Many tests are failing and the upstream is gone.
10122 '(#:tests? #f))
10123 (propagated-inputs
10124 `(("python-sphinx" ,python-sphinx)))
10125 (synopsis "Sphinx extension to include program output")
10126 (description "A Sphinx extension to literally insert the output of arbitrary
10127 commands into documents, helping you to keep your command examples up to date.")
10128 (home-page "https://github.com/lunaryorn/sphinxcontrib-programoutput")
10129 (license license:bsd-2)))
10130
10131 (define-public python2-sphinxcontrib-programoutput
10132 (package-with-python2 python-sphinxcontrib-programoutput))
10133
10134 (define-public python-sphinx-repoze-autointerface
10135 (package
10136 (name "python-sphinx-repoze-autointerface")
10137 (version "0.8")
10138 (source (origin
10139 (method url-fetch)
10140 (uri (pypi-uri "repoze.sphinx.autointerface" version))
10141 (sha256
10142 (base32
10143 "08ycivzf7bh4a1zcyp31hbyqs1b2c9r26raa3vxjwwmbfqr3iw4f"))))
10144 (build-system python-build-system)
10145 (arguments '(#:tests? #f)) ; No tests.
10146 (propagated-inputs
10147 `(("python-sphinx" ,python-sphinx)
10148 ("python-zope-interface" ,python-zope-interface)))
10149 (synopsis "Auto-generate Sphinx API docs from Zope interfaces")
10150 (description "This package defines an extension for the Sphinx documentation
10151 system. The extension allows generation of API documentation by
10152 introspection of @code{zope.interface} instances in code.")
10153 (home-page "https://github.com/repoze/repoze.sphinx.autointerface")
10154 (license license:repoze)))
10155
10156 (define-public python2-sphinx-repoze-autointerface
10157 (package-with-python2 python-sphinx-repoze-autointerface))
10158
10159 (define-public python-psycopg2
10160 (package
10161 (name "python-psycopg2")
10162 (version "2.6.2")
10163 (source
10164 (origin
10165 (method url-fetch)
10166 (uri (pypi-uri "psycopg2" version))
10167 (sha256
10168 (base32
10169 "0p60z2gwfcal30y2w8gprflchp1kcg9qblc5rn782p4wxl90wjbh"))))
10170 (build-system python-build-system)
10171 (arguments
10172 ;; Tests would require a postgresql database "psycopg2_test"
10173 ;; and a running postgresql database management service.
10174 `(#:tests? #f)) ; TODO re-enable after providing a test-db.
10175 (inputs
10176 `(("postgresql" ,postgresql))) ; libpq
10177 (home-page "http://initd.org/psycopg/")
10178 (synopsis "Python PostgreSQL adapter")
10179 (description
10180 "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API 2.0. ")
10181 (license license:lgpl3+)))
10182
10183 (define-public python2-psycopg2
10184 (package-with-python2 python-psycopg2))
10185
10186 (define-public python-vobject
10187 (package
10188 (name "python-vobject")
10189 (version "0.9.2")
10190 (source (origin
10191 (method url-fetch)
10192 (uri (pypi-uri "vobject" version))
10193 (sha256
10194 (base32
10195 "1qfnwlx8qwkgr6nf5wvl6ff1r3kll53dh3z6nyp173nmlhhhqccb"))))
10196 (build-system python-build-system)
10197 (arguments
10198 '(;; The test suite relies on some non-portable Windows interfaces.
10199 #:tests? #f))
10200 (propagated-inputs
10201 `(("python-dateutil" ,python-dateutil)
10202 ("python-pyicu" ,python-pyicu)))
10203 (synopsis "Parse and generate vCard and vCalendar files")
10204 (description "Vobject is intended to be a full featured Python package for
10205 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10206 are supported and well tested. vCard 3.0 files are supported, and all data
10207 should be imported, but only a few components are understood in a sophisticated
10208 way.")
10209 (home-page "http://eventable.github.io/vobject/")
10210 (license license:asl2.0)))
10211
10212 (define-public python2-vobject
10213 (package-with-python2 python-vobject))
10214
10215 (define-public python-munkres
10216 (package
10217 (name "python-munkres")
10218 (version "1.0.8")
10219 (source (origin
10220 (method url-fetch)
10221 (uri (pypi-uri "munkres" version))
10222 (sha256
10223 (base32
10224 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10225 (build-system python-build-system)
10226 (arguments
10227 '(#:tests? #f)) ; no test suite
10228 (home-page "http://software.clapper.org/munkres/")
10229 (synopsis "Implementation of the Munkres algorithm")
10230 (description "The Munkres module provides an implementation of the Munkres
10231 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10232 useful for solving the Assignment Problem.")
10233 (license license:bsd-3)))
10234
10235 (define-public python2-munkres
10236 (package-with-python2 python-munkres))
10237
10238 (define-public python-flask
10239 (package
10240 (name "python-flask")
10241 (version "0.11.1")
10242 (source (origin
10243 (method url-fetch)
10244 (uri (pypi-uri "Flask" version))
10245 (sha256
10246 (base32
10247 "03kbfll4sj3v5z7r31c7bhfpi11r1np076d4p1k2kg4yzcmkywdl"))))
10248 (build-system python-build-system)
10249 (propagated-inputs
10250 `(("python-itsdangerous" ,python-itsdangerous)
10251 ("python-jinja2" ,python-jinja2)
10252 ("python-click" ,python-click)
10253 ("python-werkzeug" ,python-werkzeug)))
10254 (home-page "https://github.com/mitsuhiko/flask/")
10255 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
10256 (description "Flask is a micro web framework based on the Werkzeug toolkit
10257 and Jinja2 template engine. It is called a micro framework because it does not
10258 presume or force a developer to use a particular tool or library.")
10259 (license license:bsd-3)))
10260
10261 (define-public python2-flask
10262 (package-with-python2 python-flask))
10263
10264 (define-public python-flask-wtf
10265 (package
10266 (name "python-flask-wtf")
10267 (version "0.13.1")
10268 (source
10269 (origin
10270 (method url-fetch)
10271 (uri (pypi-uri "Flask-WTF" version))
10272 (sha256
10273 (base32
10274 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
10275 (build-system python-build-system)
10276 (arguments
10277 '(#:phases
10278 (modify-phases %standard-phases
10279 (add-before 'check 'drop-failing-test
10280 (lambda _
10281 ;; FIXME: This file tries resolving an external server, which
10282 ;; fails. Try to patch out the offending section instead of
10283 ;; deleting the whole thing.
10284 (delete-file "tests/test_recaptcha.py")
10285 #t)))))
10286 (propagated-inputs
10287 `(("python-flask-babel" ,python-flask-babel)
10288 ("python-babel" ,python-babel)
10289 ("python-wtforms" ,python-wtforms)))
10290 (native-inputs
10291 `(("python-nose" ,python-nose)))
10292 (home-page "https://github.com/lepture/flask-wtf")
10293 (synopsis "Simple integration of Flask and WTForms")
10294 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
10295 upload, and reCAPTCHA.")
10296 (license license:bsd-3)))
10297
10298 (define-public python2-flask-wtf
10299 (package-with-python2 python-flask-wtf))
10300
10301 (define-public python-flask-multistatic
10302 (package
10303 (name "python-flask-multistatic")
10304 (version "1.0")
10305 (source
10306 (origin
10307 (method url-fetch)
10308 (uri (pypi-uri "flask-multistatic" version))
10309 (sha256
10310 (base32
10311 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
10312 (build-system python-build-system)
10313 (propagated-inputs
10314 `(("python-flask" ,python-flask)))
10315 (home-page "https://pagure.io/flask-multistatic")
10316 (synopsis "Flask plugin to allow overriding static files")
10317 (description "@code{flask-multistatic} is a flask plugin that adds support
10318 for overriding static files.")
10319 (license license:gpl3+)))
10320
10321 (define-public python2-flask-multistatic
10322 (package-with-python2 python-flask-multistatic))
10323
10324 (define-public python-cookies
10325 (package
10326 (name "python-cookies")
10327 (version "2.2.1")
10328 (source (origin
10329 (method url-fetch)
10330 (uri (pypi-uri "cookies" version))
10331 (sha256
10332 (base32
10333 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
10334 (build-system python-build-system)
10335 (arguments
10336 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
10337 #:tests? #f))
10338 (native-inputs
10339 `(("python-pytest" ,python2-pytest)))
10340 (synopsis "HTTP cookie parser and renderer")
10341 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
10342 Python.")
10343 (home-page "https://gitlab.com/sashahart/cookies")
10344 (license license:expat)))
10345
10346 (define-public python2-cookies
10347 (package-with-python2 python-cookies))
10348
10349 (define-public python-responses
10350 (package
10351 (name "python-responses")
10352 (version "0.5.1")
10353 (source (origin
10354 (method url-fetch)
10355 (uri (pypi-uri "responses" version))
10356 (sha256
10357 (base32
10358 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
10359 (build-system python-build-system)
10360 (arguments
10361 `(;; Test suite is not distributed:
10362 ;; https://github.com/getsentry/responses/issues/38
10363 #:tests? #f))
10364 (native-inputs
10365 `(("python-mock" ,python-mock)))
10366 (propagated-inputs
10367 `(("python-requests" ,python-requests)
10368 ("python-cookies" ,python-cookies)
10369 ("python-six" ,python-six)))
10370 (home-page "https://github.com/getsentry/responses")
10371 (synopsis "Utility for mocking out the `requests` Python library")
10372 (description "A utility library for mocking out the `requests` Python
10373 library.")
10374 (license license:asl2.0)))
10375
10376 (define-public python2-responses
10377 (package-with-python2 python-responses))
10378
10379 (define-public python-whoosh
10380 (package
10381 (name "python-whoosh")
10382 (version "2.7.4")
10383 (source
10384 (origin
10385 (method url-fetch)
10386 (uri (pypi-uri "Whoosh" version))
10387 (sha256
10388 (base32
10389 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10390 (build-system python-build-system)
10391 (native-inputs
10392 `(("python-pytest" ,python-pytest)))
10393 (home-page "http://bitbucket.org/mchaput/whoosh")
10394 (synopsis "Full text indexing, search, and spell checking library")
10395 (description
10396 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10397 checking library.")
10398 (license license:bsd-2)))
10399
10400 (define-public python2-whoosh
10401 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10402 (package (inherit whoosh)
10403 (propagated-inputs
10404 `(("python2-backport-ssl-match-hostname"
10405 ,python2-backport-ssl-match-hostname)
10406 ,@(package-propagated-inputs whoosh))))))
10407
10408 (define-public python-pathlib
10409 (package
10410 (name "python-pathlib")
10411 (version "1.0.1")
10412 (source (origin
10413 (method url-fetch)
10414 (uri (pypi-uri "pathlib" version))
10415 (sha256
10416 (base32
10417 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10418 (build-system python-build-system)
10419 ;; The tests depend on the internal "test" module, which does not provide
10420 ;; a stable interface.
10421 (arguments `(#:tests? #f))
10422 (home-page "https://pathlib.readthedocs.org/")
10423 (synopsis "Object-oriented file system paths")
10424 (description "Pathlib offers a set of classes to handle file system paths.
10425 It offers the following advantages over using string objects:
10426
10427 @enumerate
10428 @item No more cumbersome use of os and os.path functions. Everything can
10429 be done easily through operators, attribute accesses, and method calls.
10430 @item Embodies the semantics of different path types. For example,
10431 comparing Windows paths ignores casing.
10432 @item Well-defined semantics, eliminating any inconsistencies or
10433 ambiguities (forward vs. backward slashes, etc.).
10434 @end enumerate
10435
10436 Note: In Python 3.4, pathlib is now part of the standard library. For other
10437 Python versions please consider python-pathlib2 instead, which tracks the
10438 standard library module. This module (python-pathlib) isn't maintained
10439 anymore.")
10440 (license license:expat)))
10441
10442 (define-public python2-pathlib
10443 (package-with-python2 python-pathlib))
10444
10445 (define-public python2-pathlib2
10446 (package
10447 (name "python2-pathlib2")
10448 (version "2.1.0")
10449 (source (origin
10450 (method url-fetch)
10451 (uri (pypi-uri "pathlib2" version))
10452 (sha256
10453 (base32
10454 "0p050msg5c8d0kadv702jnfshaxrb0il765cpkgnhn6mq5hakcyy"))))
10455 (build-system python-build-system)
10456 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10457 ;; version is 3.4 which already includes this package as part of the
10458 ;; standard library.
10459 (arguments
10460 `(#:python ,python-2))
10461 (native-inputs
10462 `(("python2-six" ,python2-six)))
10463 (home-page "http://pypi.python.org/pypi/pathlib2/")
10464 (synopsis "Object-oriented file system paths - backport of standard
10465 pathlib module")
10466 (description "The goal of pathlib2 is to provide a backport of standard
10467 pathlib module which tracks the standard library module, so all the newest
10468 features of the standard pathlib can be used also on older Python versions.
10469
10470 Pathlib offers a set of classes to handle file system paths. It offers the
10471 following advantages over using string objects:
10472
10473 @enumerate
10474 @item No more cumbersome use of os and os.path functions. Everything can
10475 be done easily through operators, attribute accesses, and method calls.
10476 @item Embodies the semantics of different path types. For example,
10477 comparing Windows paths ignores casing.
10478 @item Well-defined semantics, eliminating any inconsistencies or
10479 ambiguities (forward vs. backward slashes, etc.).
10480 @end enumerate")
10481 (license license:expat)))
10482
10483 (define-public python-jellyfish
10484 (package
10485 (name "python-jellyfish")
10486 (version "0.5.6")
10487 (source (origin
10488 (method url-fetch)
10489 (uri (pypi-uri "jellyfish" version))
10490 (sha256
10491 (base32
10492 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10493 (build-system python-build-system)
10494 (native-inputs
10495 `(("python-pytest" ,python-pytest)))
10496 (home-page "https://github.com/jamesturk/jellyfish")
10497 (synopsis "Approximate and phonetic matching of strings")
10498 (description "Jellyfish uses a variety of string comparison and phonetic
10499 encoding algorithms to do fuzzy string matching.")
10500 (license license:bsd-2)
10501 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10502
10503 (define-public python2-jellyfish
10504 (let ((jellyfish (package-with-python2
10505 (strip-python2-variant python-jellyfish))))
10506 (package (inherit jellyfish)
10507 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10508 ,@(package-native-inputs jellyfish))))))
10509
10510 (define-public python2-unicodecsv
10511 (package
10512 (name "python2-unicodecsv")
10513 (version "0.14.1")
10514 (source (origin
10515 (method url-fetch)
10516 ;; The test suite is not included in the PyPi release.
10517 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10518 (uri (string-append "https://github.com/jdunck/python-unicodecsv/"
10519 "archive/" version ".tar.gz"))
10520 (file-name (string-append name "-" version ".tar.gz"))
10521 (sha256
10522 (base32
10523 "087nqanfcyp6mlfbbr5lva5f3w6iz1bybls9xlrb8icmc474wh4w"))))
10524 (build-system python-build-system)
10525 (arguments
10526 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10527 #:python ,python-2))
10528 (native-inputs
10529 `(("python2-unittest2" ,python2-unittest2)))
10530 (home-page "https://github.com/jdunck/python-unicodecsv")
10531 (synopsis "Unicode CSV module for Python 2")
10532 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10533 module, adding support for Unicode strings.")
10534 (license license:bsd-2)))
10535
10536 (define-public python-rarfile
10537 (package
10538 (name "python-rarfile")
10539 (version "2.8")
10540 (source (origin
10541 (method url-fetch)
10542 (uri (pypi-uri "rarfile" version))
10543 (sha256
10544 (base32
10545 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10546 (build-system python-build-system)
10547 (arguments
10548 '(#:phases
10549 (modify-phases %standard-phases
10550 (replace 'check
10551 ;; Many tests fail, but the installation proceeds.
10552 (lambda _ (zero? (system* "make" "-C" "test" "test")))))))
10553 (native-inputs
10554 `(("which" ,which))) ; required for tests
10555 (propagated-inputs
10556 `(("libarchive" ,libarchive)))
10557 (home-page "https://github.com/markokr/rarfile")
10558 (synopsis "RAR archive reader for Python")
10559 (description "This is Python module for RAR archive reading. The interface
10560 is made as zipfile like as possible.")
10561 (license license:isc)))
10562
10563 (define-public python2-rarfile
10564 (package-with-python2 python-rarfile))
10565
10566 (define-public python-magic
10567 (package
10568 (name "python-magic")
10569 (version "0.4.3")
10570 (source
10571 (origin
10572 (method url-fetch)
10573 (uri (string-append "https://github.com/ahupp/python-magic/archive/"
10574 version ".tar.gz"))
10575 (sha256
10576 (base32
10577 "17bgy92i7sb021f2s4mw1dcvpm6p1mi9jihridwy1pyn8mzvpjgk"))
10578 (file-name (string-append name "-" version "-checkout"))))
10579 (build-system python-build-system)
10580 (arguments
10581 ;; The tests are unreliable, so don't run them. The tests fail
10582 ;; under Python3 because they were written for Python2 and
10583 ;; contain import statements that do not work in Python3. One of
10584 ;; the tests fails under Python2 because its assertions are
10585 ;; overly stringent; it relies on comparing output strings which
10586 ;; are brittle and can change depending on the version of
10587 ;; libmagic being used and the system on which the test is
10588 ;; running. In my case, under GuixSD 0.10.0, only one test
10589 ;; failed, and it seems to have failed only because the version
10590 ;; of libmagic that is packaged in Guix outputs a slightly
10591 ;; different (but not wrong) string than the one that the test
10592 ;; expected.
10593 '(#:tests? #f
10594 #:phases (modify-phases %standard-phases
10595 ;; Replace a specific method call with a hard-coded
10596 ;; path to the necessary libmagic.so file in the
10597 ;; store. If we don't do this, then the method call
10598 ;; will fail to find the libmagic.so file, which in
10599 ;; turn will cause any application using
10600 ;; python-magic to fail.
10601 (add-before 'build 'hard-code-path-to-libmagic
10602 (lambda* (#:key inputs #:allow-other-keys)
10603 (let ((file (assoc-ref inputs "file")))
10604 (substitute* "magic.py"
10605 (("ctypes.util.find_library\\('magic'\\)")
10606 (string-append "'" file "/lib/libmagic.so'")))
10607 #t)))
10608 (add-before 'install 'disable-egg-compression
10609 (lambda _
10610 (let ((port (open-file "setup.cfg" "a")))
10611 (display "\n[easy_install]\nzip_ok = 0\n"
10612 port)
10613 (close-port port)
10614 #t))))))
10615 (inputs
10616 ;; python-magic needs to be able to find libmagic.so.
10617 `(("file" ,file)))
10618 (home-page "https://github.com/ahupp/python-magic")
10619 (synopsis "File type identification using libmagic")
10620 (description
10621 "This module uses ctypes to access the libmagic file type
10622 identification library. It makes use of the local magic database and
10623 supports both textual and MIME-type output. Note that this module and
10624 the python-file module both provide a \"magic.py\" file; these two
10625 modules, which are different and were developed separately, both serve
10626 the same purpose: to provide Python bindings for libmagic.")
10627 (license license:expat)))
10628
10629 (define-public python2-magic
10630 (package-with-python2 python-magic))
10631
10632 (define-public python2-s3cmd
10633 (package
10634 (name "python2-s3cmd")
10635 (version "1.6.1")
10636 (source
10637 (origin
10638 (method url-fetch)
10639 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10640 "s3cmd-" version ".tar.gz"))
10641 (sha256
10642 (base32
10643 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10644 (build-system python-build-system)
10645 (arguments
10646 ;; s3cmd is written for python2 only and contains no tests.
10647 `(#:python ,python-2
10648 #:tests? #f))
10649 (propagated-inputs
10650 `(("python2-dateutil" ,python2-dateutil)
10651 ;; The python-file package also provides a magic.py module.
10652 ;; This is an unfortunate state of affairs; however, s3cmd
10653 ;; fails to install if it cannot find specifically the
10654 ;; python-magic package. Thus we include it, instead of using
10655 ;; python-file. Ironically, s3cmd sometimes works better
10656 ;; without libmagic bindings at all:
10657 ;; https://github.com/s3tools/s3cmd/issues/198
10658 ("python2-magic" ,python2-magic)))
10659 (home-page "http://s3tools.org/s3cmd")
10660 (synopsis "Command line tool for S3-compatible storage services")
10661 (description
10662 "S3cmd is a command line tool for uploading, retrieving and managing data
10663 in storage services that are compatible with the Amazon Simple Storage
10664 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10665 GnuPG encryption, and more. It also supports management of Amazon's
10666 CloudFront content delivery network.")
10667 (license license:gpl2+)))
10668
10669 (define-public python-pkgconfig
10670 (package
10671 (name "python-pkgconfig")
10672 (version "1.1.0")
10673 (source
10674 (origin
10675 (method url-fetch)
10676 (uri (pypi-uri "pkgconfig" version))
10677 (sha256
10678 (base32
10679 "1pw0kmvc57sjmaxi6c54fqsnihqj6hvhc9y1vaz36axafzqam7bh"))))
10680 (build-system python-build-system)
10681 (native-inputs
10682 `(("python-nose" ,python-nose)))
10683 (inputs
10684 `(("pkg-config" ,pkg-config)))
10685 (arguments
10686 `(;; Tests fail with "ValueError: _type_ 'v' not supported" on Python 3,
10687 ;; and on Python 2 they need the dl module deprecated since Python 2.6.
10688 #:tests? #f
10689 ;; Hard-code the path to pkg-config.
10690 #:phases
10691 (modify-phases %standard-phases
10692 (add-before
10693 'build 'patch
10694 (lambda _
10695 (substitute* "pkgconfig/pkgconfig.py"
10696 (("cmd = 'pkg-config")
10697 (string-append "cmd = '" (which "pkg-config"))))
10698 #t)))))
10699 (home-page "https://github.com/matze/pkgconfig")
10700 (synopsis "Python interface for pkg-config")
10701 (description "This module provides a Python interface to pkg-config. It
10702 can be used to find all pkg-config packages, check if a package exists,
10703 check if a package meets certain version requirements, query CFLAGS and
10704 LDFLAGS and parse the output to build extensions with setup.py.")
10705 (license license:expat)))
10706
10707 (define-public python2-pkgconfig
10708 (package-with-python2 python-pkgconfig))
10709
10710 (define-public python-bz2file
10711 (package
10712 (name "python-bz2file")
10713 (version "0.98")
10714 (source
10715 (origin
10716 (method url-fetch)
10717 (uri (pypi-uri "bz2file" version))
10718 (sha256
10719 (base32
10720 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10721 (build-system python-build-system)
10722 (arguments
10723 `(#:tests? #f)) ; Tests use deprecated python modules.
10724 (home-page "https://github.com/nvawda/bz2file")
10725 (synopsis "Read and write bzip2-compressed files")
10726 (description
10727 "Bz2file is a Python library for reading and writing bzip2-compressed
10728 files. It contains a drop-in replacement for the I/O interface in the
10729 standard library's @code{bz2} module, including features from the latest
10730 development version of CPython that are not available in older releases.")
10731 (license license:asl2.0)
10732 (properties `((python2-variant . ,(delay python2-bz2file))))))
10733
10734 (define-public python2-bz2file
10735 (let ((base (package-with-python2
10736 (strip-python2-variant python-bz2file))))
10737 (package
10738 (inherit base)
10739 (arguments
10740 `(#:python ,python-2
10741 #:phases
10742 (modify-phases %standard-phases
10743 ;; 'python setup.py test' does not work as of 0.98.
10744 ;; There is only the one test file, so we run it directly.
10745 (replace 'check
10746 (lambda _ (zero? (system* "python"
10747 "test_bz2file.py"))))))))))
10748
10749 (define-public python-future
10750 (package
10751 (name "python-future")
10752 (version "0.16.0")
10753 (source
10754 (origin
10755 (method url-fetch)
10756 (uri (pypi-uri "future" version))
10757 (sha256
10758 (base32
10759 "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773"))))
10760 (build-system python-build-system)
10761 ;; Many tests connect to the network or are otherwise flawed.
10762 ;; https://github.com/PythonCharmers/python-future/issues/210
10763 (arguments
10764 `(#:tests? #f))
10765 (home-page "http://python-future.org")
10766 (synopsis "Single-source support for Python 3 and 2")
10767 (description
10768 "@code{python-future} is the missing compatibility layer between Python 2 and
10769 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
10770 to support both Python 2 and Python 3 with minimal overhead.")
10771 (license license:expat)))
10772
10773 (define-public python2-future
10774 (package-with-python2 python-future))
10775
10776 (define-public python-cysignals
10777 (package
10778 (name "python-cysignals")
10779 (version "1.1.0")
10780 (source
10781 (origin
10782 (method url-fetch)
10783 (uri (pypi-uri "cysignals" version ".tar.bz2"))
10784 (sha256
10785 (base32
10786 "14cbyd9znlz6cxy1s3g6v6dv5jj45hn27pywkidd9b1zanaysqc6"))))
10787 (build-system python-build-system)
10788 (native-inputs
10789 `(("python-cython" ,python-cython)
10790 ("python-sphinx" ,python-sphinx)))
10791 (inputs
10792 `(("pari-gp" ,pari-gp)))
10793 (arguments
10794 `(#:modules ((guix build python-build-system)
10795 ((guix build gnu-build-system) #:prefix gnu:)
10796 (guix build utils))
10797 ;; FIXME: Tests are executed after installation and currently fail
10798 ;; when not installing into standard locations; the author is working
10799 ;; on a fix.
10800 #:tests? #f
10801 #:phases
10802 (modify-phases %standard-phases
10803 (add-before
10804 'build 'configure
10805 (assoc-ref gnu:%standard-phases 'configure)))))
10806 (home-page
10807 "https://github.com/sagemath/cysignals")
10808 (synopsis
10809 "Handling of interrupts and signals for Cython")
10810 (description
10811 "The cysignals package provides mechanisms to handle interrupts (and
10812 other signals and errors) in Cython code, using two related approaches,
10813 for mixed Cython/Python code or external C libraries and pure Cython code,
10814 respectively.")
10815 (license license:lgpl3+)))
10816
10817 (define-public python2-cysignals
10818 (package-with-python2 python-cysignals))
10819
10820 (define-public python2-shedskin
10821 (package
10822 (name "python2-shedskin")
10823 (version "0.9.4")
10824 (source
10825 (origin
10826 (method url-fetch)
10827 (uri (string-append "https://github.com/shedskin/shedskin/"
10828 "releases/download/v" version
10829 "/shedskin-" version ".tgz"))
10830 (sha256
10831 (base32
10832 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
10833 (build-system python-build-system)
10834 (arguments
10835 `(#:python ,python-2
10836 #:phases (modify-phases %standard-phases
10837 (add-after 'unpack 'fix-resulting-include-libs
10838 (lambda* (#:key inputs #:allow-other-keys)
10839 (let ((libgc (assoc-ref inputs "libgc"))
10840 (pcre (assoc-ref inputs "pcre")))
10841 (substitute* "shedskin/makefile.py"
10842 (("variable == 'CCFLAGS':[ ]*")
10843 (string-append "variable == 'CCFLAGS':\n"
10844 " line += ' -I " pcre "/include"
10845 " -I " libgc "/include'"))
10846 (("variable == 'LFLAGS':[ ]*")
10847 (string-append "variable == 'LFLAGS':\n"
10848 " line += ' -L" pcre "/lib"
10849 " -L " libgc "/lib'")))
10850 #t))))))
10851 (inputs `(("pcre" ,pcre)
10852 ("libgc" ,libgc)))
10853 (home-page "https://shedskin.github.io/")
10854 (synopsis "Experimental Python-2 to C++ Compiler")
10855 (description (string-append "This is an experimental compiler for a subset of
10856 Python. It generates C++ code and a Makefile."))
10857 (license (list license:gpl3 license:bsd-3 license:expat))))
10858
10859 (define-public python2-rope
10860 (package
10861 (name "python2-rope")
10862 (version "0.10.3")
10863 (source
10864 (origin
10865 (method url-fetch)
10866 (uri (pypi-uri "rope" version))
10867 (sha256
10868 (base32
10869 "18k5znhpwvrfck3yp0jmhd5j8r0f0s8bk1zh5yhs2cfgmfhbwigb"))))
10870 (arguments
10871 ;; Rope is currently python-2 only.
10872 ;; https://github.com/python-rope/rope/issues/57
10873 `(#:python ,python-2))
10874 (build-system python-build-system)
10875 (native-inputs
10876 `(("python2-unittest2" ,python2-unittest2)))
10877 (home-page "https://github.com/python-rope/rope")
10878 (synopsis "Refactoring library for Python")
10879 (description "Rope is a refactoring library for Python. It facilitates
10880 the renaming, moving and extracting of attributes, functions, modules, fields
10881 and parameters in Python 2 source code. These refactorings can also be applied
10882 to occurrences in strings and comments.")
10883 (license license:gpl2)))
10884
10885 (define-public python-py3status
10886 (package
10887 (name "python-py3status")
10888 (version "3.1")
10889 (source
10890 (origin
10891 (method url-fetch)
10892 (uri (pypi-uri "py3status" version))
10893 (sha256
10894 (base32
10895 "0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
10896 (build-system python-build-system)
10897 (arguments
10898 '(#:tests? #f)) ; TODO: Requires many libraries not in Guix.
10899 (home-page "https://github.com/ultrabug/py3status")
10900 (synopsis "Extensible i3status wrapper written in Python")
10901 (description "py3status is an i3status wrapper which extends i3status
10902 functionality in a modular way, allowing you to extend your panel with your
10903 own code, responding to click events and updating clock every second.")
10904 (license license:bsd-3)))
10905
10906 (define-public python-tblib
10907 (package
10908 (name "python-tblib")
10909 (version "1.3.0")
10910 (source (origin
10911 (method url-fetch)
10912 (uri (pypi-uri "tblib" version))
10913 (sha256 (base32
10914 "02iahfkfa927hb4jq2bak36ldihwapzacfiq5lyxg8llwn98a1yi"))))
10915 (build-system python-build-system)
10916 (arguments
10917 `(#:phases
10918 (modify-phases %standard-phases
10919 (replace 'check
10920 (lambda _
10921 ;; Upstream runs tests after installation and the package itself
10922 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
10923 ;; found.
10924 (setenv "PYTHONPATH"
10925 (string-append (getcwd) "/build/lib:"
10926 (getenv "PYTHONPATH")))
10927 (zero? (system* "py.test" "-vv" "tests" "README.rst")))))))
10928 (native-inputs
10929 `(("python-pytest" ,python-pytest)
10930 ("python-six" ,python-six)))
10931 (home-page "https://github.com/ionelmc/python-tblib")
10932 (synopsis "Traceback serialization library")
10933 (description
10934 "Traceback serialization allows you to:
10935
10936 @enumerate
10937 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
10938 different processes. This allows better error handling when running code over
10939 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
10940
10941 @item Parse traceback strings and raise with the parsed tracebacks.
10942 @end enumerate\n")
10943 (license license:bsd-3)))
10944
10945 (define-public python2-tblib
10946 (package-with-python2 python-tblib))
10947
10948 (define-public python-sqlparse
10949 (package
10950 (name "python-sqlparse")
10951 (version "0.1.19")
10952 (source (origin
10953 (method url-fetch)
10954 (uri (pypi-uri "sqlparse" version))
10955 (sha256
10956 (base32
10957 "1s2fvaxgh9kqzrd6iwy5h7i61ckn05plx9np13zby93z3hdbx5nq"))))
10958 (build-system python-build-system)
10959 (arguments
10960 `(#:phases
10961 (modify-phases %standard-phases
10962 (replace 'check
10963 (lambda* _
10964 ;; setup.py-integrated 2to3 only affects the build files, but
10965 ;; py.test is using the source files. So we need to convert them
10966 ;; manually.
10967 (when (zero? (system* "python3"))
10968 (system* "2to3" "--no-diff" "-wn" "sqlparse" "tests"))
10969 (zero? (system* "py.test")))))))
10970 (native-inputs
10971 `(("python-pytest" ,python-pytest)))
10972 (home-page "https://github.com/andialbrecht/sqlparse")
10973 (synopsis "Non-validating SQL parser")
10974 (description "Sqlparse is a non-validating SQL parser for Python. It
10975 provides support for parsing, splitting and formatting SQL statements.")
10976 (license license:bsd-3)))
10977
10978 (define-public python2-sqlparse
10979 (package-with-python2 python-sqlparse))
10980
10981 (define-public python-greenlet
10982 (package
10983 (name "python-greenlet")
10984 (version "0.4.11")
10985 (source (origin
10986 (method url-fetch)
10987 (uri (pypi-uri "greenlet" version))
10988 (sha256
10989 (base32
10990 "1xhik26j4f3kc4qw9xmj0c567rb5h1zryb4ijwqnqwwjvfhbv59h"))))
10991 (build-system python-build-system)
10992 (home-page "https://greenlet.readthedocs.io/")
10993 (synopsis "Lightweight in-process concurrent programming")
10994 (description
10995 "Greenlet package is a spin-off of Stackless, a version of CPython
10996 that supports micro-threads called \"tasklets\". Tasklets run
10997 pseudo-concurrently (typically in a single or a few OS-level threads) and
10998 are synchronized with data exchanges on \"channels\".")
10999 (license (list license:psfl license:expat))))
11000
11001 (define-public python2-greenlet
11002 (package-with-python2 python-greenlet))
11003
11004 (define-public python-gevent
11005 (package
11006 (name "python-gevent")
11007 (version "1.1.1")
11008 (source (origin
11009 (method url-fetch)
11010 (uri (pypi-uri "gevent" version))
11011 (sha256
11012 (base32
11013 "1smf3kvidpdiyi2c81alal74p2zm0clrm6xbyy6y1k9a3f2vkrbf"))
11014 (modules '((guix build utils)))
11015 (snippet
11016 '(begin
11017 ;; unbunding libev and c-ares
11018 (for-each delete-file-recursively '("libev" "c-ares"))
11019 ;; fixing testsuite
11020 (call-with-output-file "greentest/__init__.py" noop)
11021 (substitute* "greentest/testrunner.py"
11022 (("import util") "from . import util")
11023 (("from util import log") "from .util import log"))))))
11024 (build-system python-build-system)
11025 (propagated-inputs
11026 `(("python-greenlet" ,python-greenlet)))
11027 (native-inputs
11028 `(("python-six" ,python-six)))
11029 (inputs
11030 `(("c-ares" ,c-ares)
11031 ("libev" ,libev)))
11032 (home-page "http://www.gevent.org/")
11033 (synopsis "Coroutine-based network library")
11034 (description
11035 "gevent is a coroutine-based Python networking library that uses greenlet
11036 to provide a high-level synchronous API on top of the libev event loop.")
11037 (license license:expat)))
11038
11039 (define-public python2-gevent
11040 (package-with-python2 python-gevent))
11041
11042 (define-public python-geventhttpclient
11043 (package
11044 (name "python-geventhttpclient")
11045 (version "1.3.1")
11046 (source (origin
11047 (method url-fetch)
11048 (uri (pypi-uri "geventhttpclient" version))
11049 (sha256
11050 (base32
11051 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
11052 (modules '((guix build utils)))
11053 (snippet
11054 '(begin
11055 ;; Delete pre-compiled files.
11056 (for-each delete-file (find-files "src/geventhttpclient"
11057 ".*\\.pyc"))
11058 #t))))
11059 (build-system python-build-system)
11060 (arguments
11061 '(#:phases
11062 (modify-phases %standard-phases
11063 (add-after 'unpack 'delete-network-tests
11064 (lambda _
11065 (delete-file "src/geventhttpclient/tests/test_client.py")
11066 #t))
11067 (delete 'check)
11068 (add-after 'install 'check
11069 (lambda* (#:key inputs outputs #:allow-other-keys)
11070 (add-installed-pythonpath inputs outputs)
11071 (zero? (system* "py.test" "src/geventhttpclient/tests" "-v")))))))
11072 (native-inputs
11073 `(("python-pytest" ,python-pytest)))
11074 (propagated-inputs
11075 `(("python-certifi" ,python-certifi)
11076 ("python-gevent" ,python-gevent)
11077 ("python-six" ,python-six)))
11078 (home-page "https://github.com/gwik/geventhttpclient")
11079 (synopsis "HTTP client library for gevent")
11080 (description "@code{python-geventhttpclient} is a high performance,
11081 concurrent HTTP client library for python using @code{gevent}.")
11082 (license license:expat)))
11083
11084 (define-public python2-geventhttpclient
11085 (package-with-python2 python-geventhttpclient))
11086
11087 (define-public python-fastimport
11088 (package
11089 (name "python-fastimport")
11090 (version "0.9.6")
11091 (source
11092 (origin
11093 (method url-fetch)
11094 (uri (pypi-uri "fastimport" version))
11095 (sha256
11096 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11097 (build-system python-build-system)
11098 (home-page "https://github.com/jelmer/python-fastimport")
11099 (synopsis "VCS fastimport parser and generator in Python")
11100 (description "This package provides a parser for and generator of the Git
11101 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11102 format.")
11103 (license license:gpl2+)))
11104
11105 (define-public python2-fastimport
11106 (package-with-python2 python-fastimport))
11107
11108 (define-public python-twisted
11109 (package
11110 (name "python-twisted")
11111 (version "16.2.0")
11112 (source (origin
11113 (method url-fetch)
11114 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11115 (sha256
11116 (base32
11117 "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450"))))
11118 (build-system python-build-system)
11119 (arguments
11120 '(#:tests? #f)) ; FIXME: Some tests are failing.
11121 ;; #:phases
11122 ;; (modify-phases %standard-phases
11123 ;; (replace 'check
11124 ;; (lambda _
11125 ;; (zero? (system* "./bin/trial" "twisted")))))
11126 (propagated-inputs
11127 `(("python-zope-interface" ,python-zope-interface)))
11128 (home-page "https://twistedmatrix.com/")
11129 (synopsis "Asynchronous networking framework written in Python")
11130 (description
11131 "Twisted is an extensible framework for Python programming, with special
11132 focus on event-based network programming and multiprotocol integration.")
11133 (license license:expat)))
11134
11135 (define-public python2-twisted
11136 (package-with-python2 python-twisted))
11137
11138 (define-public python-pika
11139 (package
11140 (name "python-pika")
11141 (version "0.10.0")
11142 (source
11143 (origin
11144 (method url-fetch)
11145 (uri (pypi-uri "pika" version))
11146 (sha256
11147 (base32
11148 "0nb4h08di432lv7dy2v9kpwgk0w92f24sqc2hw2s9vwr5b8v8xvj"))))
11149 (build-system python-build-system)
11150 (native-inputs
11151 `(("python-pyev" ,python-pyev)
11152 ("python-tornado" ,python-tornado)
11153 ("python-twisted" ,python-twisted)))
11154 (home-page "https://pika.readthedocs.org")
11155 (synopsis "Pure Python AMQP Client Library")
11156 (description
11157 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11158 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11159 network support library.")
11160 (license license:bsd-3)))
11161
11162 (define-public python2-pika
11163 (package-with-python2 python-pika))
11164
11165 (define-public python-ply
11166 (package
11167 (name "python-ply")
11168 (version "3.9")
11169 (source
11170 (origin
11171 (method url-fetch)
11172 (uri (pypi-uri "ply" version))
11173 (sha256
11174 (base32
11175 "0gpl0yli3w03ipyqfrp3w5nf0iawhsq65anf5wwm2wf5p502jzhd"))))
11176 (build-system python-build-system)
11177 (home-page "http://www.dabeaz.com/ply/")
11178 (synopsis "Python Lex & Yacc")
11179 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11180 It uses LR parsing and does extensive error checking.")
11181 (license license:bsd-3)))
11182
11183 (define-public python2-ply
11184 (package-with-python2 python-ply))
11185
11186 (define-public python-tabulate
11187 (package
11188 (name "python-tabulate")
11189 (version "0.7.7")
11190 (source (origin
11191 (method url-fetch)
11192 (uri (pypi-uri "tabulate" version))
11193 (sha256
11194 (base32
11195 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11196 (build-system python-build-system)
11197 (arguments
11198 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11199 ;; and the latest release is not tagged in the upstream repository.
11200 '(#:tests? #f))
11201 (home-page "https://bitbucket.org/astanin/python-tabulate")
11202 (synopsis "Pretty-print tabular data")
11203 (description
11204 "Tabulate is a library and command-line utility to pretty-print tabular
11205 data in Python.")
11206 (license license:expat)))
11207
11208 (define-public python2-tabulate
11209 (package-with-python2 python-tabulate))
11210
11211 (define-public python-kazoo
11212 (package
11213 (name "python-kazoo")
11214 (version "2.2.1")
11215 (source
11216 (origin
11217 (method url-fetch)
11218 (uri (pypi-uri "kazoo" version))
11219 (sha256
11220 (base32
11221 "10pb864if9qi2pq9lfb9m8f7z7ss6rml80gf1d9h64lap5crjnjj"))))
11222 (build-system python-build-system)
11223 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11224 (propagated-inputs
11225 `(("python-six" ,python-six)))
11226 (home-page "https://kazoo.readthedocs.org")
11227 (synopsis "High-level Zookeeper client library")
11228 (description
11229 "Kazoo is a Python client library for the Apache Zookeeper distributed
11230 application service. It is designed to be easy to use and to avoid common
11231 programming errors.")
11232 (license license:asl2.0)))
11233
11234 (define-public python2-kazoo
11235 (package-with-python2 python-kazoo))
11236
11237 (define-public python-pykafka
11238 (package
11239 (name "python-pykafka")
11240 (version "2.4.0")
11241 (source (origin
11242 (method url-fetch)
11243 (uri (string-append
11244 "https://pypi.python.org/packages/8b/3e/"
11245 "384eeff406b06315738b62483fd2126c6e4f544167116b17cc04ea7d2a59/"
11246 "pykafka-" version ".tar.gz"))
11247 (sha256
11248 (base32
11249 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11250 (build-system python-build-system)
11251 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11252 (propagated-inputs
11253 `(("python-gevent" ,python-gevent)
11254 ("python-kazoo" ,python-kazoo)
11255 ("python-tabulate" ,python-tabulate)))
11256 (inputs
11257 `(("librdkafka" ,librdkafka)))
11258 (home-page "https://pykafka.readthedocs.io/")
11259 (synopsis "Apache Kafka client for Python")
11260 (description
11261 "PyKafka is a client for the Apache Kafka distributed messaging system.
11262 It includes Python implementations of Kafka producers and consumers, which
11263 are optionally backed by a C extension built on librdkafka.")
11264 (license license:asl2.0)))
11265
11266 (define-public python2-pykafka
11267 (package-with-python2 python-pykafka))
11268
11269 (define-public python-wcwidth
11270 (package
11271 (name "python-wcwidth")
11272 (version "0.1.7")
11273 (source
11274 (origin
11275 (method url-fetch)
11276 (uri (pypi-uri "wcwidth" version))
11277 (sha256
11278 (base32
11279 "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"))))
11280 (build-system python-build-system)
11281 (home-page "https://github.com/jquast/wcwidth")
11282 (synopsis "Measure number of terminal column cells of wide-character codes")
11283 (description "Wcwidth measures the number of terminal column cells of
11284 wide-character codes. It is useful for those implementing a terminal emulator,
11285 or programs that carefully produce output to be interpreted by one. It is a
11286 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11287 specified in POSIX.1-2001 and POSIX.1-2008.")
11288 (license license:expat)))
11289
11290 (define-public python2-wcwidth
11291 (package-with-python2 python-wcwidth))
11292
11293 (define-public python2-jsonrpclib
11294 (package
11295 (name "python2-jsonrpclib")
11296 (version "0.1.7")
11297 (source (origin
11298 (method url-fetch)
11299 (uri (string-append
11300 "https://pypi.python.org/packages/source/j/jsonrpclib/"
11301 "jsonrpclib-" version ".tar.gz"))
11302 (sha256
11303 (base32
11304 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11305 (build-system python-build-system)
11306 (arguments
11307 `(#:tests? #f
11308 #:python ,python-2))
11309 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11310 (synopsis "Implementation of JSON-RPC specification for Python")
11311 (description
11312 "This library is an implementation of the JSON-RPC specification.
11313 It supports both the original 1.0 specification, as well as the
11314 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11315 etc.")
11316 (license license:asl2.0)))
11317
11318 (define-public python-chai
11319 (package
11320 (name "python-chai")
11321 (version "1.1.1")
11322 (source (origin
11323 (method url-fetch)
11324 (uri (pypi-uri "chai" version))
11325 (sha256
11326 (base32
11327 "016kf3irrclpkpvcm7q0gmkfibq7jgy30a9v73pp42bq9h9a32bl"))))
11328 (build-system python-build-system)
11329 (home-page "https://github.com/agoragames/chai")
11330 (synopsis "Mocking framework for Python")
11331 (description
11332 "Chai provides an api for mocking, stubbing and spying your python
11333 objects, patterned after the Mocha library for Ruby.")
11334 (license license:bsd-3)))
11335
11336 (define-public python2-chai
11337 (package-with-python2 python-chai))
11338
11339 (define-public python-arrow
11340 (package
11341 (name "python-arrow")
11342 (version "0.8.0")
11343 (source (origin
11344 (method url-fetch)
11345 (uri (pypi-uri "arrow" version))
11346 (sha256
11347 (base32
11348 "1bz7hkdgpqcjs866y58z8jywpy7al0f4rxdr00bh2l5qddyw245j"))))
11349 (build-system python-build-system)
11350 (native-inputs
11351 `(;; For testing
11352 ("python-chai" ,python-chai)
11353 ("python-simplejson" ,python-simplejson)))
11354 (propagated-inputs
11355 `(("python-dateutil" ,python-dateutil)))
11356 (home-page "https://github.com/crsmithdev/arrow/")
11357 (synopsis "Dates and times for Python")
11358 (description
11359 "Arrow is a Python library to creating, manipulating, formatting and
11360 converting dates, times, and timestamps. It implements and updates the
11361 datetime type.")
11362 (license license:asl2.0)))
11363
11364 (define-public python2-arrow
11365 (package-with-python2 python-arrow))
11366
11367 (define-public python-inflection
11368 (package
11369 (name "python-inflection")
11370 (version "0.3.1")
11371 (source
11372 (origin (method url-fetch)
11373 (uri (pypi-uri "inflection" version))
11374 (sha256
11375 (base32
11376 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11377 (build-system python-build-system)
11378 (native-inputs
11379 `(("python-pytest" ,python-pytest)))
11380 (home-page "https://github.com/jpvanhal/inflection")
11381 (synopsis "Python string transformation library")
11382 (description
11383 "Inflection is a string transformation library. It singularizes
11384 and pluralizes English words, and transforms strings from CamelCase to
11385 underscored string.")
11386 (license license:expat)))
11387
11388 (define-public python2-inflection
11389 (package-with-python2 python-inflection))
11390
11391 (define-public python-pylev
11392 (package
11393 (name "python-pylev")
11394 (version "1.3.0")
11395 (source (origin
11396 (method url-fetch)
11397 (uri (pypi-uri "pylev" version))
11398 (sha256
11399 (base32
11400 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11401 (build-system python-build-system)
11402 (home-page "https://github.com/toastdriven/pylev")
11403 (synopsis "Levenshtein distance implementation in Python")
11404 (description "Pure Python Levenshtein implementation, based off the
11405 Wikipedia code samples at
11406 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11407 (license license:bsd-3)))
11408
11409 (define-public python2-pylev
11410 (package-with-python2 python-pylev))
11411
11412 (define-public python-cleo
11413 (package
11414 (name "python-cleo")
11415 (version "0.4.1")
11416 (source (origin
11417 (method url-fetch)
11418 (uri (pypi-uri "cleo" version))
11419 (sha256
11420 (base32
11421 "1k2dcl6mqpn5bljyl6w42rqyd9mb3y9kh2mg7m2x3kfjwvg0rpva"))))
11422 (build-system python-build-system)
11423 (native-inputs
11424 `(;; For testing
11425 ("python-mock" ,python-mock)
11426 ("python-pytest" ,python-pytest)))
11427 (propagated-inputs
11428 `(("python-psutil" ,python-psutil)
11429 ("python-pylev" ,python-pylev)))
11430 (home-page "https://github.com/sdispater/cleo")
11431 (synopsis "Command-line arguments library for Python")
11432 (description
11433 "Cleo allows you to create command-line commands with signature in
11434 docstring and colored output.")
11435 (license license:expat)))
11436
11437 (define-public python2-cleo
11438 (package-with-python2 python-cleo))
11439
11440 (define-public python-lazy-object-proxy
11441 (package
11442 (name "python-lazy-object-proxy")
11443 (version "1.2.2")
11444 (source (origin
11445 (method url-fetch)
11446 (uri (pypi-uri "lazy-object-proxy" version))
11447 (sha256
11448 (base32
11449 "0s22aqqkdscyh8sjspyyax7qa1aiz8p4midrnyf39717fhfczm6x"))))
11450 (build-system python-build-system)
11451 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11452 (synopsis "Lazy object proxy for python")
11453 (description
11454 "Lazy object proxy is an object that wraps a callable but defers the call
11455 until the object is actually required, and caches the result of said call.")
11456 (license license:bsd-2)))
11457
11458 (define-public python2-lazy-object-proxy
11459 (package-with-python2 python-lazy-object-proxy))
11460
11461 (define-public python-dnspython
11462 (package
11463 (name "python-dnspython")
11464 (version "1.15.0")
11465 (source (origin
11466 (method url-fetch)
11467 (uri (string-append "http://www.dnspython.org/kits/"
11468 version "/dnspython-" version ".tar.gz"))
11469 (sha256
11470 (base32
11471 "0jr4v2pd90i6l1xxbss2m05psbjaxvyvvvpq44wycijpfgjqln8i"))))
11472 (build-system python-build-system)
11473 (arguments '(#:tests? #f)) ; XXX: requires internet access
11474 (home-page "http://www.dnspython.org")
11475 (synopsis "DNS toolkit for Python")
11476 (description
11477 "dnspython is a DNS toolkit for Python. It supports almost all record
11478 types. It can be used for queries, zone transfers, and dynamic updates.
11479 It supports TSIG authenticated messages and EDNS0.")
11480 (license license:expat)))
11481
11482 (define-public python2-dnspython
11483 (package-with-python2 python-dnspython))
11484
11485 (define-public python-email-validator
11486 (package
11487 (name "python-email-validator")
11488 (version "1.0.2")
11489 (source
11490 (origin (method url-fetch)
11491 (uri (pypi-uri "email_validator" version))
11492 (sha256
11493 (base32
11494 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
11495 (build-system python-build-system)
11496 (arguments
11497 '(#:phases
11498 (modify-phases %standard-phases
11499 (add-before 'build 'use-dnspython
11500 (lambda _
11501 (substitute* "setup.py"
11502 (("dnspython3") "dnspython"))
11503 #t)))))
11504 (propagated-inputs
11505 `(("python-dnspython" ,python-dnspython)
11506 ("python-idna" ,python-idna)))
11507 (home-page "https://github.com/JoshData/python-email-validator")
11508 (synopsis "Email address validation library for Python")
11509 (description
11510 "This library validates email address syntax and deliverability.")
11511 (license license:cc0)))
11512
11513 (define-public python2-email-validator
11514 (package-with-python2 python-email-validator))
11515
11516 (define-public python-ukpostcodeparser
11517 (package
11518 (name "python-ukpostcodeparser")
11519 (version "1.0.3")
11520 (source (origin
11521 (method url-fetch)
11522 (uri (pypi-uri "UkPostcodeParser" version))
11523 (sha256
11524 (base32
11525 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
11526 (build-system python-build-system)
11527 (home-page "https://github.com/hamstah/ukpostcodeparser")
11528 (synopsis "UK Postcode parser for Python")
11529 (description
11530 "This library provides the @code{parse_uk_postcode} function for
11531 parsing UK postcodes.")
11532 (license license:expat)))
11533
11534 (define-public python2-ukpostcodeparser
11535 (package-with-python2 python-ukpostcodeparser))
11536
11537 (define-public python-faker
11538 (package
11539 (name "python-faker")
11540 (version "0.7.9")
11541 (source (origin
11542 (method url-fetch)
11543 (uri (pypi-uri "Faker" version))
11544 (sha256
11545 (base32
11546 "1fh2p2yz0fsdr4fqwxgddwbvfb6qn6vp8yx0qwqzra27yq5d1wsm"))
11547 (patches
11548 (search-patches "python-faker-fix-build-32bit.patch"))
11549 (modules '((guix build utils)))
11550 (snippet
11551 '(begin
11552 (for-each delete-file (find-files "." "\\.pyc$"))
11553 #t))))
11554 (build-system python-build-system)
11555 (arguments
11556 '(#:phases
11557 (modify-phases %standard-phases
11558 (replace 'check
11559 (lambda _
11560 (zero? (system* "python" "-m" "unittest" "-v" "tests")))))))
11561 (native-inputs
11562 `(;; For testing
11563 ("python-email-validator" ,python-email-validator)
11564 ("python-mock" ,python-mock)
11565 ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
11566 (propagated-inputs
11567 `(("python-dateutil" ,python-dateutil)
11568 ("python-six" ,python-six)))
11569 (home-page "https://github.com/joke2k/faker")
11570 (synopsis "Python package that generates fake data")
11571 (description
11572 "Faker is a Python package that generates fake data such as names,
11573 addresses, and phone numbers.")
11574 (license license:expat)
11575 (properties `((python2-variant . ,(delay python2-faker))))))
11576
11577 (define-public python2-faker
11578 (let ((base (package-with-python2 (strip-python2-variant
11579 python-faker))))
11580 (package
11581 (inherit base)
11582 (propagated-inputs
11583 `(("python2-ipaddress" ,python2-ipaddress)
11584 ,@(package-propagated-inputs base))))))
11585
11586 (define-public python-fake-factory
11587 (package
11588 (name "python-fake-factory")
11589 (version "0.7.2")
11590 (source (origin
11591 (method url-fetch)
11592 (uri (pypi-uri "fake-factory" version))
11593 (sha256
11594 (base32
11595 "0vs0dkmg0dlaxf8w6q2i3k0i03gmp56ablldv7ci9x3nbadkn71g"))
11596 (patches
11597 (search-patches
11598 "python-fake-factory-fix-build-32bit.patch"))))
11599 (build-system python-build-system)
11600 (arguments
11601 '(#:phases
11602 (modify-phases %standard-phases
11603 (replace 'check
11604 (lambda _
11605 (zero? (system* "python" "-m" "unittest" "-v" "faker.tests")))))))
11606 (native-inputs
11607 `(;; For testing
11608 ("python-email-validator" ,python-email-validator)
11609 ("python-mock" ,python-mock)
11610 ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
11611 (propagated-inputs
11612 `(("python-dateutil" ,python-dateutil)
11613 ("python-six" ,python-six)))
11614 (home-page "https://github.com/joke2k/faker")
11615 (synopsis "Python package that generates fake data")
11616 (description
11617 "Faker is a Python package that generates fake data such as names,
11618 addresses, and phone numbers.")
11619 (license license:expat)
11620 (properties `((python2-variant . ,(delay python2-fake-factory))
11621 (superseded . ,python-faker)))))
11622
11623 (define-public python2-fake-factory
11624 (let ((base (package-with-python2 (strip-python2-variant
11625 python-fake-factory))))
11626 (package
11627 (inherit base)
11628 (properties `((superseded . ,python2-faker)))
11629 (propagated-inputs
11630 `(("python2-ipaddress" ,python2-ipaddress)
11631 ,@(package-propagated-inputs base))))))
11632
11633 (define-public python-pyaml
11634 (package
11635 (name "python-pyaml")
11636 (version "15.8.2")
11637 (source (origin
11638 (method url-fetch)
11639 (uri (pypi-uri "pyaml" version))
11640 (sha256
11641 (base32
11642 "1f5m28vkh4ksq3d80d8mmd2z8wxvc3mgy2pmrv2751dm2xgznm4w"))))
11643 (build-system python-build-system)
11644 (native-inputs
11645 `(("python-unidecode" ,python-unidecode)))
11646 (propagated-inputs
11647 `(("python-pyyaml" ,python-pyyaml)))
11648 (home-page "https://github.com/mk-fg/pretty-yaml")
11649 (synopsis "YAML pretty-print library for Python")
11650 (description
11651 "pyaml is a PyYAML based python module to produce pretty and readable
11652 YAML-serialized data.")
11653 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/"))))
11654
11655 (define-public python2-pyaml
11656 (package-with-python2 python-pyaml))
11657
11658 (define-public python-flexmock
11659 (package
11660 (name "python-flexmock")
11661 (version "0.10.2")
11662 (source (origin
11663 (method url-fetch)
11664 (uri (pypi-uri "flexmock" version))
11665 (sha256
11666 (base32
11667 "0arc6njvs6i9v9hgvzk5m50296g7zy5m9d7pyb43vdsdgxrci5gy"))))
11668 (build-system python-build-system)
11669 (home-page "https://flexmock.readthedocs.org")
11670 (synopsis "Testing library for Python")
11671 (description
11672 "flexmock is a testing library for Python that makes it easy to create
11673 mocks, stubs and fakes.")
11674 (license license:bsd-3)))
11675
11676 (define-public python2-flexmock
11677 (package-with-python2 python-flexmock))
11678
11679 (define-public python-orator
11680 (package
11681 (name "python-orator")
11682 (version "0.8.2")
11683 (source (origin
11684 (method url-fetch)
11685 (uri (pypi-uri "orator" version))
11686 (sha256
11687 (base32
11688 "1li49irsqha17nrda4nsb48biyy0rarp9pphf0jpqwm5zr8hv569"))))
11689 (build-system python-build-system)
11690 (arguments '(#:tests? #f)) ; no tests
11691 (propagated-inputs
11692 `(("python-arrow" ,python-arrow)
11693 ("python-blinker" ,python-blinker)
11694 ("python-cleo" ,python-cleo)
11695 ("python-faker" ,python-faker)
11696 ("python-inflection" ,python-inflection)
11697 ("python-lazy-object-proxy" ,python-lazy-object-proxy)
11698 ("python-pyaml" ,python-pyaml)
11699 ("python-simplejson" ,python-simplejson)
11700 ("python-wrapt" ,python-wrapt)))
11701 (home-page "https://orator-orm.com/")
11702 (synopsis "ActiveRecord ORM for Python")
11703 (description
11704 "Orator provides a simple ActiveRecord-like Object Relational Mapping
11705 implementation for Python.")
11706 (license license:expat)
11707 (properties `((python2-variant . ,(delay python2-orator))))))
11708
11709 (define-public python2-orator
11710 (let ((base (package-with-python2 (strip-python2-variant python-orator))))
11711 (package
11712 (inherit base)
11713 (propagated-inputs
11714 `(("python2-ipaddress" ,python2-ipaddress)
11715 ,@(package-propagated-inputs base))))))
11716
11717 (define-public python-prompt-toolkit
11718 (package
11719 (name "python-prompt-toolkit")
11720 (version "1.0.9")
11721 (source
11722 (origin
11723 (method url-fetch)
11724 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
11725 (sha256
11726 (base32
11727 "172r15k9kwdw2lnajvpz1632dd16nqz1kcal1p0lq5ywdarj6rfd"))))
11728 (build-system python-build-system)
11729 (arguments
11730 '(#:tests? #f)) ; The test suite uses some Windows-specific data types.
11731 (propagated-inputs
11732 `(("python-wcwidth" ,python-wcwidth)
11733 ("python-six" ,python-six)
11734 ("python-pygments" ,python-pygments)))
11735 (home-page "https://github.com/jonathanslenders/python-prompt-toolkit")
11736 (synopsis "Library for building command line interfaces in Python")
11737 (description
11738 "Prompt-Toolkit is a library for building interactive command line
11739 interfaces in Python. It's like GNU Readline but it also features syntax
11740 highlighting while typing, out-of-the-box multi-line input editing, advanced
11741 code completion, incremental search, support for Chinese double-width
11742 characters, mouse support, and auto suggestions.")
11743 (license license:bsd-3)))
11744
11745 (define-public python2-prompt-toolkit
11746 (package-with-python2 python-prompt-toolkit))
11747
11748 (define-public python-jedi
11749 (package
11750 (name "python-jedi")
11751 (version "0.9.0")
11752 (source
11753 (origin
11754 (method url-fetch)
11755 (uri (pypi-uri "jedi" version))
11756 (sha256
11757 (base32
11758 "0c8x962ynpx001fdvp07m2q5jk4igkxbj3rmnydavphvlgxijk1v"))))
11759 (build-system python-build-system)
11760 (arguments
11761 ;; FIXME: One test fails (use "py.test" instead of 'setup.py test').
11762 '(#:tests? #f))
11763 (native-inputs
11764 `(("python-pytest" ,python-pytest)))
11765 (home-page "https://github.com/davidhalter/jedi")
11766 (synopsis
11767 "Autocompletion for Python that can be used for text editors")
11768 (description
11769 "Jedi is an autocompletion tool for Python that can be used for text editors.")
11770 (license license:expat)))
11771
11772 (define-public python2-jedi
11773 (package-with-python2 python-jedi))
11774
11775 (define-public ptpython
11776 (package
11777 (name "ptpython")
11778 (version "0.34")
11779 (source (origin
11780 (method url-fetch)
11781 (uri (pypi-uri "ptpython" version))
11782 (sha256
11783 (base32
11784 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
11785 (build-system python-build-system)
11786 (arguments
11787 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
11788 (propagated-inputs
11789 `(("python-docopt" ,python-docopt)
11790 ("python-jedi" ,python-jedi)
11791 ("python-prompt-toolkit" ,python-prompt-toolkit)
11792 ("python-pygments" ,python-pygments)))
11793 (home-page "https://github.com/jonathanslenders/ptpython")
11794 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
11795 (description
11796 "ptpython is a Python read-eval-print loop with IDE-like features.
11797 It supports syntax highlighting, multiline editing, autocompletion, mouse,
11798 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
11799 etc.")
11800 (license license:bsd-3)
11801 (properties `((python2-variant . ,(delay ptpython-2))))))
11802
11803 (define-public ptpython-2
11804 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
11805 (package
11806 (inherit base)
11807 (name "ptpython2"))))
11808
11809 (define-public python-requests-oauthlib
11810 (package
11811 (name "python-requests-oauthlib")
11812 (version "0.6.2")
11813 (source
11814 (origin
11815 (method url-fetch)
11816 (uri (pypi-uri "requests-oauthlib" version))
11817 (sha256
11818 (base32
11819 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
11820 (build-system python-build-system)
11821 (arguments
11822 `(#:phases
11823 (modify-phases %standard-phases
11824 ;; removes tests that require network access
11825 (add-before 'check 'pre-check
11826 (lambda _
11827 (delete-file "tests/test_core.py")
11828 #t)))))
11829 (native-inputs
11830 `(("python-requests-mock" ,python-requests-mock)
11831 ("python-mock" ,python-mock)))
11832 (propagated-inputs
11833 `(("python-oauthlib" ,python-oauthlib)
11834 ("python-requests" ,python-requests)))
11835 (home-page
11836 "https://github.com/requests/requests-oauthlib")
11837 (synopsis
11838 "OAuthlib authentication support for Requests")
11839 (description
11840 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
11841 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
11842 (license license:isc)))
11843
11844 (define-public python2-requests-oauthlib
11845 (package-with-python2 python-requests-oauthlib))
11846
11847 (define-public python-stem
11848 (package
11849 (name "python-stem")
11850 (version "1.5.4")
11851 (source
11852 (origin
11853 (method url-fetch)
11854 (uri (pypi-uri "stem" version))
11855 (sha256
11856 (base32
11857 "1j7pnblrn0yr6jmxvsq6y0ihmxmj5x50jl2n2606w67f6wq16j9n"))))
11858 (build-system python-build-system)
11859 (arguments
11860 `(#:phases
11861 (modify-phases %standard-phases
11862 (replace 'check
11863 (lambda _
11864 (zero? (system* "./run_tests.py" "--unit")))))))
11865 (native-inputs
11866 `(("python-mock" ,python-mock)
11867 ("python-pep8" ,python-pep8)
11868 ("python-pyflakes" ,python-pyflakes)))
11869 (home-page "https://stem.torproject.org/")
11870 (synopsis
11871 "Python controller library that allows applications to interact with Tor")
11872 (description
11873 "Stem is a Python controller library for Tor. With it you can use Tor's
11874 control protocol to script against the Tor process and read descriptor data
11875 relays publish about themselves.")
11876 (license license:lgpl3)))
11877
11878 (define-public python2-stem
11879 (package-with-python2 python-stem))
11880
11881 (define-public python-pyserial
11882 (package
11883 (name "python-pyserial")
11884 (version "3.1.1")
11885 (source
11886 (origin
11887 (method url-fetch)
11888 (uri (pypi-uri "pyserial" version))
11889 (sha256
11890 (base32
11891 "0k1nfdrxxkdlv4zgaqsdv8li0pj3gbh2pyxw8q2bsg6f9490amyn"))))
11892 (build-system python-build-system)
11893 (arguments
11894 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
11895 ;; #:phases
11896 ;; (modify-phases %standard-phases
11897 ;; (replace 'check
11898 ;; (lambda _
11899 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
11900 (home-page
11901 "https://github.com/pyserial/pyserial")
11902 (synopsis "Python Serial Port Bindings")
11903 (description "@code{pyserial} provide serial port bindings for Python. It
11904 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
11905 and/or Xon/Xoff. The port is accessed in RAW mode.")
11906 (license license:bsd-3)))
11907
11908 (define-public python2-pyserial
11909 (package-with-python2 python-pyserial))
11910
11911 (define-public python-kivy
11912 (package
11913 (name "python-kivy")
11914 (version "1.9.1")
11915 (source
11916 (origin
11917 (method url-fetch)
11918 (uri (pypi-uri "kivy" version))
11919 (file-name (string-append name "-" version ".tar.gz"))
11920 (sha256
11921 (base32
11922 "0zk3g1j1z0lzcm9d0k1lprrs95zr8n8k5pdg3p5qlsn26jz4bg19"))))
11923 (build-system python-build-system)
11924 (arguments
11925 `(#:tests? #f ; Tests require many optional packages
11926 #:phases
11927 (modify-phases %standard-phases
11928 (replace 'build (lambda _ (zero? (system* "make" "force"))))
11929 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
11930 (lambda* (#:key inputs #:allow-other-keys)
11931 (setenv "KIVY_SDL2_PATH"
11932 (string-append (assoc-ref inputs "sdl-union")
11933 "/include/SDL2"))
11934 #t)))))
11935 (native-inputs
11936 `(("pkg-config" ,pkg-config)
11937 ("python-cython" ,python-cython)))
11938 (inputs
11939 `(("gstreamer" ,gstreamer)
11940 ("mesa" ,mesa)
11941 ("sdl-union"
11942 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
11943 (home-page "http://kivy.org")
11944 (synopsis
11945 "Multitouch application framework")
11946 (description
11947 "A software library for rapid development of
11948 hardware-accelerated multitouch applications.")
11949 (license license:expat)))
11950
11951 (define-public python2-kivy
11952 (package-with-python2 python-kivy))
11953
11954 (define-public python-kivy-next
11955 (let ((commit "a988c5e7a47da56263ff39514264a3de516ef2fe")
11956 (revision "1"))
11957 (package (inherit python-kivy)
11958 (name "python-kivy-next")
11959 (version (string-append "1.9.1-" revision "."
11960 (string-take commit 7)))
11961 (source
11962 (origin
11963 (method git-fetch)
11964 (uri (git-reference
11965 (url "https://github.com/kivy/kivy")
11966 (commit commit)))
11967 (file-name (string-append name "-" version "-checkout"))
11968 (sha256
11969 (base32
11970 "0jk92b4a8l7blkvkgkjihk171s0dfnq582cckff5srwc8kal5m0p")))))))
11971
11972 (define-public python2-kivy-next
11973 (package-with-python2 python-kivy-next))
11974
11975 (define-public python-binaryornot
11976 (package
11977 (name "python-binaryornot")
11978 (version "0.4.0")
11979 (source (origin
11980 (method url-fetch)
11981 (uri (pypi-uri "binaryornot" version))
11982 (sha256
11983 (base32
11984 "1j4f51dxic39mdwf6alj7gd769wy6mhk916v031wjali51xkh3xb"))))
11985 (build-system python-build-system)
11986 (propagated-inputs
11987 `(("python-chardet" ,python-chardet)
11988 ("python-hypothesis" ,python-hypothesis)))
11989 (home-page "https://github.com/audreyr/binaryornot")
11990 (synopsis "Package to check if a file is binary or text")
11991 (description "Ultra-lightweight pure Python package to check if a file is
11992 binary or text.")
11993 (license license:bsd-3)
11994 (properties `((python2-variant . ,(delay python2-binaryornot))))))
11995
11996 (define-public python2-binaryornot
11997 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
11998 (package (inherit base)
11999 (propagated-inputs
12000 `(("python2-enum34" ,python2-enum34)
12001 ,@(package-propagated-inputs base))))))
12002
12003 (define-public python-nltk
12004 (package
12005 (name "python-nltk")
12006 (version "3.2.1")
12007 (source (origin
12008 (method url-fetch)
12009 (uri (pypi-uri "nltk" version))
12010 (sha256
12011 (base32
12012 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12013 (build-system python-build-system)
12014 (arguments
12015 '(;; The tests require some extra resources to be downloaded.
12016 ;; TODO Try packaging these resources.
12017 #:tests? #f))
12018 (home-page "http://nltk.org/")
12019 (synopsis "Natural Language Toolkit")
12020 (description "It provides interfaces to over 50 corpora and lexical
12021 resources such as WordNet, along with a suite of text processing libraries
12022 for classification, tokenization, stemming, tagging, parsing, and semantic
12023 reasoning, wrappers for natural language processing libraries.")
12024 (license license:asl2.0)))
12025
12026 (define-public python2-nltk
12027 (package-with-python2 python-nltk))
12028
12029 (define-public python-pymongo
12030 (package
12031 (name "python-pymongo")
12032 (version "3.3.0")
12033 (source (origin
12034 (method url-fetch)
12035 (uri (pypi-uri "pymongo" version))
12036 (sha256
12037 (base32
12038 "07mra6w86wjqy4lx5fvimidjhhfzd562gfjn8grsnbv2q8pk0i9x"))))
12039 (build-system python-build-system)
12040 (propagated-inputs
12041 `(("python-certifi" ,python-certifi)))
12042 (home-page "https://github.com/mongodb/mongo-python-driver")
12043 (synopsis "Python driver for MongoDB")
12044 (description "Python driver for MongoDB.")
12045 (license license:asl2.0)))
12046
12047 (define-public python2-pymongo
12048 (package-with-python2 python-pymongo))
12049
12050 (define-public python-sh
12051 (package
12052 (name "python-sh")
12053 (version "1.11")
12054 (source (origin
12055 (method url-fetch)
12056 (uri (pypi-uri "sh" version))
12057 (sha256
12058 (base32
12059 "192r0mpv6dmkysjzhc43ddffiwb5g7c76bgr1mb1z2xz9awbj3sr"))))
12060 (build-system python-build-system)
12061 (arguments
12062 `(#:tests? #f)) ; no tests
12063 (home-page "https://github.com/amoffat/sh")
12064 (synopsis "Python subprocess interface")
12065 (description "Abstracts process invocation by providing a function
12066 interface for programs.")
12067 (license license:expat)))
12068
12069 (define-public python2-sh
12070 (package-with-python2 python-sh))
12071
12072 (define-public python-consul
12073 (package
12074 (name "python-consul")
12075 (version "0.6.1")
12076 (source
12077 (origin
12078 (method url-fetch)
12079 (uri (pypi-uri "python-consul" version))
12080 (sha256
12081 (base32
12082 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12083 (build-system python-build-system)
12084 (native-inputs
12085 `(("python-pytest" ,python-pytest)))
12086 (propagated-inputs
12087 `(("python-requests" ,python-requests)
12088 ("python-six" ,python-six)))
12089 (home-page "https://github.com/cablehead/python-consul")
12090 (synopsis "Python client for Consul")
12091 (description
12092 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12093 discovery, monitoring and configuration.")
12094 (license license:expat)))
12095
12096 (define-public python2-consul
12097 (package-with-python2 python-consul))
12098
12099 (define-public python-schematics
12100 (package
12101 (name "python-schematics")
12102 (version "1.1.1")
12103 (source
12104 (origin
12105 (method url-fetch)
12106 (uri (string-append
12107 "https://github.com/schematics/schematics/archive/v" version ".tar.gz"))
12108 (file-name (string-append name "-" version ".tar.gz"))
12109 (sha256
12110 (base32
12111 "19v1i69bf3bzarfxmbv0v6ivpcn758x3shvbiy9l2hy0lvqwnp6l"))))
12112 (build-system python-build-system)
12113 (propagated-inputs
12114 `(("python-six" ,python-six)))
12115 (arguments
12116 `(#:tests? #f)) ; requires a bunch of not very nice packages with fixed
12117 ; version requirements (eg python-coveralls)
12118 (home-page "https://github.com/schematics/schematics")
12119 (synopsis "Python Data Structures for Humans")
12120 (description "Python Data Structures for Humans.")
12121 (license license:bsd-3)))
12122
12123 (define-public python2-schematics
12124 (package-with-python2 python-schematics))
12125
12126 (define-public python-publicsuffix
12127 (package
12128 (name "python-publicsuffix")
12129 (version "1.1.0")
12130 (source (origin
12131 (method url-fetch)
12132 (uri (pypi-uri "publicsuffix" version))
12133 (sha256
12134 (base32
12135 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
12136 (build-system python-build-system)
12137 (arguments
12138 `(#:tests? #f)) ; tests use the internet
12139 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
12140 (synopsis "Get suffix for a domain name")
12141 (description "Get a public suffix for a domain name using the Public Suffix
12142 List.")
12143 (license license:expat)))
12144
12145 (define-public python2-publicsuffix
12146 (package-with-python2 python-publicsuffix))
12147
12148 (define-public python-publicsuffix2
12149 (package
12150 (name "python-publicsuffix2")
12151 (version "2.20160818")
12152 (source
12153 (origin
12154 (method url-fetch)
12155 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
12156 (sha256
12157 (base32
12158 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
12159 (build-system python-build-system)
12160 (arguments
12161 '(#:tests? #f)) ; The test suite requires network access.
12162 (home-page "https://github.com/pombredanne/python-publicsuffix2")
12163 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
12164 (description "Get a public suffix for a domain name using the Public Suffix
12165 List. Forked from and using the same API as the publicsuffix package.")
12166 (license (list license:expat license:mpl2.0))))
12167
12168 (define-public python2-publicsuffix2
12169 (package-with-python2 python-publicsuffix2))
12170
12171 (define-public python-url
12172 (package
12173 (name "python-url")
12174 (version "0.2.0")
12175 (source (origin
12176 (method url-fetch)
12177 (uri (pypi-uri "url" version))
12178 (sha256
12179 (base32
12180 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
12181 (build-system python-build-system)
12182 (propagated-inputs
12183 `(("python-publicsuffix" ,python-publicsuffix)))
12184 (native-inputs
12185 `(("python-coverage" ,python-coverage)
12186 ("python-nose" ,python-nose)))
12187 (arguments
12188 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
12189 (home-page "https://github.com/seomoz/url-py")
12190 (synopsis "URL Parsing")
12191 (description "Library for parsing urls.")
12192 (license license:expat)
12193 (properties `((python2-variant . ,(delay python2-url))))))
12194
12195 (define-public python2-url
12196 (let ((base (package-with-python2 (strip-python2-variant python-url))))
12197 (package (inherit base)
12198 (propagated-inputs
12199 `(("python2-publicsuffix" ,python2-publicsuffix))))))
12200
12201 (define-public python-freezegun
12202 (package
12203 (name "python-freezegun")
12204 (version "0.3.8")
12205 (source
12206 (origin
12207 (method url-fetch)
12208 (uri (pypi-uri "freezegun" version))
12209 (sha256
12210 (base32
12211 "1sf38d3ibv1jhhvr52x7dhrsiyqk1hm165dfv8w8wh0fhmgxg151"))))
12212 (build-system python-build-system)
12213 (native-inputs
12214 `(("python-mock" ,python-mock)
12215 ("python-nose" ,python-nose)
12216 ("python-coverage" ,python-coverage)))
12217 (propagated-inputs
12218 `(("python-six" ,python-six)
12219 ("python-dateutil" ,python-dateutil)))
12220 (arguments
12221 `(#:phases (modify-phases %standard-phases
12222 ;; The tests are normally executed via `make test`, but the PyPi
12223 ;; package does not include the Makefile.
12224 (replace 'check
12225 (lambda _
12226 (zero? (system* "nosetests" "./tests/")))))))
12227 (home-page "https://github.com/spulec/freezegun")
12228 (synopsis "Test utility for mocking the datetime module")
12229 (description
12230 "FreezeGun is a library that allows your python tests to travel through
12231 time by mocking the datetime module.")
12232 (license license:asl2.0)))
12233
12234 (define-public python2-freezegun
12235 (package-with-python2 python-freezegun))
12236
12237
12238 (define-public python-odfpy
12239 (package
12240 (name "python-odfpy")
12241 (version "1.3.3")
12242 (source (origin
12243 (method url-fetch)
12244 (uri (pypi-uri "odfpy" version))
12245 (sha256
12246 (base32
12247 "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
12248 (arguments
12249 `(#:modules ((srfi srfi-1)
12250 (guix build python-build-system)
12251 (guix build utils))
12252 #:phases
12253 (modify-phases %standard-phases
12254 (replace 'check
12255 ;; The test runner invokes python2 and python3 for test*.py.
12256 ;; To avoid having both in inputs, we replicate it here.
12257 (lambda _
12258 (every (lambda (test-file)
12259 (zero? (system* "python" test-file)))
12260 (find-files "tests" "^test.*\\.py$")))))))
12261 (build-system python-build-system)
12262 (home-page "https://github.com/eea/odfpy")
12263 (synopsis "Python API and tools to manipulate OpenDocument files")
12264 (description "Collection of libraries and utility programs written in
12265 Python to manipulate OpenDocument 1.2 files.")
12266 (license
12267 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12268 ;; number of files with other licenses.
12269 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12270
12271 (define-public python2-odfpy
12272 (package-with-python2 python-odfpy))
12273
12274 (define-public python-cachecontrol
12275 (package
12276 (name "python-cachecontrol")
12277 (version "0.11.6")
12278 (source
12279 (origin
12280 (method url-fetch)
12281 ;; Pypi does not have tests.
12282 (uri (string-append
12283 "https://github.com/ionrock/cachecontrol/archive/v"
12284 version ".tar.gz"))
12285 (file-name (string-append name "-" version ".tar.gz"))
12286 (sha256
12287 (base32
12288 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
12289 (build-system python-build-system)
12290 (arguments
12291 `(#:phases
12292 (modify-phases %standard-phases
12293 (replace 'check
12294 (lambda _
12295 ;; Drop test that requires internet access.
12296 (delete-file "tests/test_regressions.py")
12297 (setenv "PYTHONPATH"
12298 (string-append (getcwd) "/build/lib:"
12299 (getenv "PYTHONPATH")))
12300 (zero? (system* "py.test" "-vv")))))))
12301 (native-inputs
12302 `(("python-pytest" ,python-pytest)
12303 ("python-redis" ,python-redis)
12304 ("python-webtest" ,python-webtest)
12305 ("python-mock" ,python-mock)))
12306 (propagated-inputs
12307 `(("python-requests" ,python-requests)
12308 ("python-lockfile" ,python-lockfile)))
12309 (home-page "https://github.com/ionrock/cachecontrol")
12310 (synopsis "The httplib2 caching algorithms for use with requests")
12311 (description "CacheControl is a port of the caching algorithms in
12312 @code{httplib2} for use with @code{requests} session objects.")
12313 (license license:asl2.0)))
12314
12315 (define-public python2-cachecontrol
12316 (package-with-python2 python-cachecontrol))
12317
12318 (define-public python-lit
12319 (package
12320 (name "python-lit")
12321 (version "0.5.0")
12322 (source
12323 (origin
12324 (method url-fetch)
12325 (uri (pypi-uri "lit" version))
12326 (sha256
12327 (base32
12328 "135m2b9cwih85g66rjggavck328z7lj37srgpq3jxszbg0g2b91y"))))
12329 (build-system python-build-system)
12330 (home-page "http://llvm.org/")
12331 (synopsis "LLVM Software Testing Tool")
12332 (description "@code{lit} is a portable tool for executing LLVM and Clang
12333 style test suites, summarizing their results, and providing indication of
12334 failures.")
12335 (license license:ncsa)))
12336
12337 (define-public python2-lit
12338 (package-with-python2 python-lit))
12339
12340 (define-public python-pytest-pep8
12341 (package
12342 (name "python-pytest-pep8")
12343 (version "1.0.6")
12344 (source (origin
12345 (method url-fetch)
12346 (uri (pypi-uri "pytest-pep8" version))
12347 (sha256
12348 (base32
12349 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
12350 (build-system python-build-system)
12351 (arguments
12352 `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
12353 (native-inputs
12354 `(("python-pytest" ,python-pytest)))
12355 (propagated-inputs
12356 `(("python-pep8" ,python-pep8)))
12357 (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
12358 (synopsis "Py.test plugin to check PEP8 requirements")
12359 (description "Pytest plugin for checking PEP8 compliance.")
12360 (license license:expat)))
12361
12362 (define-public python2-pytest-pep8
12363 (package-with-python2 python-pytest-pep8))
12364
12365 (define-public python-pytest-flakes
12366 (package
12367 (name "python-pytest-flakes")
12368 (version "1.0.1")
12369 (source (origin
12370 (method url-fetch)
12371 (uri (pypi-uri "pytest-flakes" version))
12372 (sha256
12373 (base32
12374 "0flag3n33kbhyjrhzmq990rvg4yb8hhhl0i48q9hw0ll89jp28lw"))))
12375 (build-system python-build-system)
12376 (arguments
12377 `(#:phases
12378 (modify-phases %standard-phases
12379 (delete 'check)
12380 (add-after 'install 'check
12381 (lambda* (#:key outputs inputs #:allow-other-keys)
12382 ;; It's easier to run tests after install.
12383 ;; Make installed package available for running the tests
12384 (add-installed-pythonpath inputs outputs)
12385 (zero? (system* "py.test" "-vv")))))))
12386 (native-inputs
12387 `(("python-coverage" ,python-coverage)
12388 ("python-pytest" ,python-pytest)
12389 ("python-pytest-cache" ,python-pytest-cache)
12390 ("python-pytest-pep8" ,python-pytest-pep8)))
12391 (propagated-inputs
12392 `(("python-pyflakes" ,python-pyflakes)))
12393 (home-page "https://github.com/fschulze/pytest-flakes")
12394 (synopsis "Py.test plugin to check source code with pyflakes")
12395 (description "Pytest plugin for checking Python source code with pyflakes.")
12396 (license license:expat)))
12397
12398 (define-public python2-pytest-flakes
12399 (package-with-python2 python-pytest-flakes))
12400
12401 (define-public python-natsort
12402 (package
12403 (name "python-natsort")
12404 (version "5.0.2")
12405 (source (origin
12406 (method url-fetch)
12407 (uri (pypi-uri "natsort" version))
12408 (sha256
12409 (base32
12410 "0bh6j0l8iapjnsgg3bs6q075cnzjl6zw1vlgqyv3qrygm2cxypkn"))))
12411 (build-system python-build-system)
12412 (arguments
12413 `(#:phases
12414 (modify-phases %standard-phases
12415 (add-before 'check 'set-cachedir
12416 ;; Tests require write access to $HOME by default
12417 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
12418 (native-inputs
12419 `(("python-hypothesis" ,python-hypothesis)
12420 ("python-pytest-cache" ,python-pytest-cache)
12421 ("python-pytest-cov" ,python-pytest-cov)
12422 ("python-pytest-flakes" ,python-pytest-flakes)
12423 ("python-pytest-pep8" ,python-pytest-pep8)))
12424 (propagated-inputs ; TODO: Add python-fastnumbers.
12425 `(("python-pyicu" ,python-pyicu)))
12426 (home-page "https://github.com/SethMMorton/natsort")
12427 (synopsis "Natural sorting for python and shell")
12428 (description
12429 "Natsort lets you apply natural sorting on lists instead of
12430 lexicographical. If you use the built-in @code{sorted} method in python
12431 on a list such as @code{['a20', 'a9', 'a1', 'a4', 'a10']}, it would be
12432 returned as @code{['a1', 'a10', 'a20', 'a4', 'a9']}. Natsort provides a
12433 function @code{natsorted} that identifies numbers and sorts them separately
12434 from strings. It can also sort version numbers, real numbers, mixed types
12435 and more, and comes with a shell command @command{natsort} that exposes this
12436 functionality in the command line.")
12437 (license license:expat)
12438 (properties `((python2-variant . ,(delay python2-natsort))))))
12439
12440 (define-public python2-natsort
12441 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12442 (package (inherit base)
12443 (native-inputs
12444 `(("python2-pathlib" ,python2-pathlib)
12445 ("python2-mock" ,python2-mock)
12446 ("python2-enum34" ,python2-enum34)
12447 ,@(package-native-inputs base))))))
12448
12449 (define-public python-glances
12450 (package
12451 (name "python-glances")
12452 (version "2.7.1")
12453 (source
12454 (origin
12455 (method url-fetch)
12456 (uri (pypi-uri "Glances" version))
12457 (sha256
12458 (base32
12459 "11jbq40g8alsbirnd4kiagznqg270247i0m8qhi48ldf2i5xppxg"))))
12460 (build-system python-build-system)
12461 (propagated-inputs
12462 `(("python-psutil" ,python-psutil)))
12463 (home-page
12464 "https://github.com/nicolargo/glances")
12465 (synopsis
12466 "A cross-platform curses-based monitoring tool")
12467 (description
12468 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12469 Glances uses the PsUtil library to get information from your system. It monitors
12470 CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12471 (license license:lgpl3+)))
12472
12473 (define-public python2-glances
12474 (package-with-python2 python-glances))
12475
12476 (define-public python-graphql-core
12477 (package
12478 (name "python-graphql-core")
12479 (version "0.5.3")
12480 (source
12481 (origin
12482 (method url-fetch)
12483 (uri (pypi-uri "graphql-core" version))
12484 (sha256
12485 (base32
12486 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12487 (build-system python-build-system)
12488 (arguments
12489 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12490 #:phases
12491 (modify-phases %standard-phases
12492 (add-after 'unpack 'patch-hardcoded-version
12493 (lambda _ (substitute*
12494 "setup.py"
12495 (("'gevent==1.1rc1'") "'gevent'"))
12496 #t)))))
12497 (native-inputs
12498 `(("python-gevent" ,python-gevent)
12499 ("python-mock" ,python-mock)
12500 ("python-pytest-mock" ,python-pytest-mock)))
12501 (propagated-inputs
12502 `(("python-promise" ,python-promise)
12503 ("python-six" ,python-six)))
12504 (home-page "https://github.com/graphql-python/graphql-core")
12505 (synopsis "GraphQL implementation for Python")
12506 (description
12507 "GraphQL implementation for Python. GraphQL is a data query language and
12508 runtime designed and used to request and deliver data to mobile and web apps.
12509 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12510 to Python.")
12511 (license license:expat)))
12512
12513 (define-public python2-graphql-core
12514 (package-with-python2 python-graphql-core))
12515
12516 (define-public python-graphql-relay
12517 (package
12518 (name "python-graphql-relay")
12519 (version "0.4.5")
12520 (source
12521 (origin
12522 (method url-fetch)
12523 (uri (pypi-uri "graphql-relay" version))
12524 (sha256
12525 (base32
12526 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12527 (build-system python-build-system)
12528 (native-inputs
12529 `(("python-pytest" ,python-pytest)))
12530 (propagated-inputs
12531 `(("python-graphql-core" ,python-graphql-core)
12532 ("python-promise" ,python-promise)
12533 ("python-six" ,python-six)))
12534 (home-page "https://github.com/graphql-python/graphql-relay-py")
12535 (synopsis "Relay implementation for Python")
12536 (description
12537 "This is a library to allow the easy creation of Relay-compliant servers
12538 using the GraphQL Python reference implementation of a GraphQL server. It
12539 should be noted that the code is a exact port of the original
12540 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12541 from Facebook.")
12542 (license license:expat)))
12543
12544 (define-public python2-graphql-relay
12545 (package-with-python2 python-graphql-relay))
12546
12547 (define-public python-graphene
12548 (package
12549 (name "python-graphene")
12550 (version "0.10.2")
12551 (source
12552 (origin
12553 (method url-fetch)
12554 (uri (pypi-uri "graphene" version))
12555 (sha256
12556 (base32
12557 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12558 (build-system python-build-system)
12559 (native-inputs
12560 `(("python-django-filter" ,python-django-filter)
12561 ("python-mock" ,python-mock)
12562 ("python-psycopg2" ,python-psycopg2)
12563 ("python-pytest-django" ,python-pytest-django)
12564 ("python-sqlalchemy-utils" ,python-sqlalchemy-utils)))
12565 (propagated-inputs
12566 `(("python-graphql-core" ,python-graphql-core)
12567 ("python-graphql-relay" ,python-graphql-relay)
12568 ("python-iso8601" ,python-iso8601)
12569 ("python-promise" ,python-promise)
12570 ("python-six" ,python-six)))
12571 (home-page "http://graphene-python.org/")
12572 (synopsis "GraphQL Framework for Python")
12573 (description
12574 "Graphene is a Python library for building GraphQL schemas/types.
12575 A GraphQL schema describes your data model, and provides a GraphQL server
12576 with an associated set of resolve methods that know how to fetch data.")
12577 (properties `((python2-variant . ,(delay python2-graphene))))
12578 (license license:expat)))
12579
12580 (define-public python2-graphene
12581 (let ((base (package-with-python2
12582 (strip-python2-variant python-graphene))))
12583 (package (inherit base)
12584 (native-inputs
12585 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12586 ,@(package-native-inputs base))))))
12587
12588 (define-public python-nautilus
12589 (package
12590 (name "python-nautilus")
12591 (version "0.4.9")
12592 (source
12593 (origin
12594 (method url-fetch)
12595 (uri (pypi-uri "nautilus" version))
12596 (sha256
12597 (base32
12598 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12599 (build-system python-build-system)
12600 (arguments `(#:tests? #f)) ; fails to import test modules
12601 (propagated-inputs
12602 `(("python-bcrypt" ,python-bcrypt)
12603 ("python-click" ,python-click)
12604 ("python-consul" ,python-consul)
12605 ("python-graphene" ,python-graphene)
12606 ("python-jinja2" ,python-jinja2)
12607 ("python-peewee" ,python-peewee)
12608 ("python-pika" ,python-pika)
12609 ("python-tornado" ,python-tornado)
12610 ("python-wtforms" ,python-wtforms)))
12611 (native-inputs
12612 `(("python-nose2" ,python-nose2)))
12613 (home-page "https://github.com/AlecAivazis/nautilus")
12614 (synopsis "Library for creating microservice applications")
12615 (description
12616 "Nautilus is a framework for flux based microservices that looks to
12617 provide extendible implementations of common aspects of a cloud so that you can
12618 focus on building massively scalable web applications.")
12619 (license license:expat)))
12620
12621 (define-public python-snowballstemmer
12622 (package
12623 (name "python-snowballstemmer")
12624 (version "1.2.1")
12625 (source (origin
12626 (method url-fetch)
12627 (uri (pypi-uri "snowballstemmer" version))
12628 (sha256
12629 (base32
12630 "0a0idq4y5frv7qsg2x62jd7rd272749xk4x99misf5rcifk2d7wi"))))
12631 (build-system python-build-system)
12632 (arguments
12633 `(;; No tests exist
12634 #:tests? #f))
12635 (home-page "https://github.com/shibukawa/snowball_py")
12636 (synopsis "Snowball stemming library collection for Python")
12637 (description "This package provides 16 word stemmer algorithms generated
12638 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12639 English stemmer.")
12640 (license license:bsd-3)))
12641
12642 (define-public python2-snowballstemmer
12643 (package-with-python2 python-snowballstemmer))
12644
12645 (define-public python-sphinx-cloud-sptheme
12646 (package
12647 (name "python-sphinx-cloud-sptheme")
12648 (version "1.8.0")
12649 (source (origin
12650 (method url-fetch)
12651 (uri (pypi-uri "cloud_sptheme" version))
12652 (sha256
12653 (base32
12654 "1dniqb6a39yh786f86c4jn666rwnyi1jvzn4616zhcchb7sfdshd"))))
12655 (build-system python-build-system)
12656 ;; FIXME: The 'pypi' release archive does not contain tests.
12657 (arguments '(#:tests? #f))
12658 (native-inputs
12659 `(("python-sphinx" ,python-sphinx)))
12660 (home-page "https://bitbucket.org/ecollins/cloud_sptheme")
12661 (synopsis "'Cloud' theme for Sphinx documenter")
12662 (description "This package contains the \"Cloud\" theme for Sphinx and some
12663 related extensions.")
12664 (license license:bsd-3)))
12665
12666 (define-public python2-sphinx-cloud-sptheme
12667 (package-with-python2 python-sphinx-cloud-sptheme))
12668
12669 (define-public python-sphinx-alabaster-theme
12670 (package
12671 (name "python-sphinx-alabaster-theme")
12672 (version "0.7.9")
12673 (source (origin
12674 (method url-fetch)
12675 (uri (pypi-uri "alabaster" version))
12676 (sha256
12677 (base32
12678 "027anxzcb951gjlcc43y3rbn9qrw36d16vj9wd2smv5410xx9bs7"))))
12679 (build-system python-build-system)
12680 (propagated-inputs
12681 `(("python-pygments" ,python-pygments)))
12682 (home-page "https://alabaster.readthedocs.io/")
12683 (synopsis "Configurable sidebar-enabled Sphinx theme")
12684 (description "Alabaster is a visually (c)lean, responsive, configurable
12685 theme for the Sphinx documentation system. It's the default theme of Sphinx.")
12686 (license license:bsd-3)))
12687
12688 (define-public python2-sphinx-alabaster-theme
12689 (package-with-python2 python-sphinx-alabaster-theme))
12690
12691 (define-public python-betamax
12692 (package
12693 (name "python-betamax")
12694 (version "0.8.0")
12695 (source
12696 (origin
12697 (method url-fetch)
12698 (uri (pypi-uri "betamax" version))
12699 (sha256
12700 (base32
12701 "18f8v5gng3j773jlbbzx4rg1i4y2zw3m2l1zpmbvp8bh5a2q1i42"))))
12702 (build-system python-build-system)
12703 (arguments
12704 '(;; Many tests fail because they require networking.
12705 #:tests? #f))
12706 (propagated-inputs
12707 `(("python-requests" ,python-requests)))
12708 (home-page "https://github.com/sigmavirus24/betamax")
12709 (synopsis "Record HTTP interactions with python-requests")
12710 (description "Betamax will record your test suite's HTTP interactions and
12711 replay them during future tests. It is designed to work with python-requests.")
12712 (license license:expat)))
12713
12714 (define-public python2-betamax
12715 (package-with-python2 python-betamax))
12716
12717 (define-public python-s3transfer
12718 (package
12719 (name "python-s3transfer")
12720 (version "0.1.10")
12721 (source (origin
12722 (method url-fetch)
12723 (uri (pypi-uri "s3transfer" version))
12724 (sha256
12725 (base32
12726 "1h8g9bknvxflxkpbnxyfxmk8pvgykbbk9ljdvhqh6z4vjc2926ms"))))
12727 (build-system python-build-system)
12728 (arguments
12729 `(#:phases
12730 (modify-phases %standard-phases
12731 (replace 'check
12732 (lambda _
12733 ;; 7 of the 'integration' tests require network access or login
12734 ;; credentials.
12735 (zero? (system* "nosetests" "--exclude=integration")))))))
12736 (native-inputs
12737 `(("python-docutils" ,python-docutils)
12738 ("python-mock" ,python-mock)
12739 ("python-nose" ,python-nose)))
12740 (propagated-inputs
12741 `(("python-botocore" ,python-botocore)))
12742 (synopsis "Amazon S3 Transfer Manager")
12743 (description "S3transfer is a Python library for managing Amazon S3
12744 transfers.")
12745 (home-page "https://github.com/boto/s3transfer")
12746 (license license:asl2.0)
12747 (properties `((python2-variant . ,(delay python2-s3transfer))))))
12748
12749 (define-public python2-s3transfer
12750 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
12751 (package
12752 (inherit base)
12753 (native-inputs
12754 `(("python2-futures" ,python2-futures)
12755 ,@(package-native-inputs base))))))
12756
12757 (define-public python-setproctitle
12758 (package
12759 (name "python-setproctitle")
12760 (version "1.1.10")
12761 (source
12762 (origin
12763 (method url-fetch)
12764 (uri (pypi-uri "setproctitle" version))
12765 (sha256
12766 (base32
12767 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12768 (build-system python-build-system)
12769 (arguments
12770 '(#:phases
12771 (modify-phases %standard-phases
12772 (add-before 'check 'patch-Makefile
12773 ;; Stricly this is only required for the python2 variant.
12774 ;; But adding a phase in an inherited package seems to be
12775 ;; cumbersum. So we patch even for python3.
12776 (lambda _
12777 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12778 (when nose
12779 (substitute* "Makefile"
12780 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12781 (string-append nose "/bin/nosetests "))))
12782 #t)))
12783 (replace 'check
12784 (lambda _
12785 (setenv "PYTHON" (or (which "python3") (which "python")))
12786 (setenv "PYCONFIG" (or (which "python3-config")
12787 (which "python-config")))
12788 (setenv "CC" "gcc")
12789 ;; No need to extend PYTHONPATH to find the built package, since
12790 ;; the Makefile will build anyway
12791 (zero? (system* "make" "check")))))))
12792 (native-inputs
12793 `(("procps" ,procps))) ; required for tests
12794 (home-page
12795 "https://github.com/dvarrazzo/py-setproctitle")
12796 (synopsis
12797 "Setproctitle implementation for Python to customize the process title")
12798 (description "The library allows a process to change its title (as displayed
12799 by system tools such as ps and top).
12800
12801 Changing the title is mostly useful in multi-process systems, for
12802 example when a master process is forked: changing the children's title
12803 allows to identify the task each process is busy with. The technique
12804 is used by PostgreSQL and the OpenSSH Server for example.")
12805 (license license:bsd-3)
12806 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12807
12808 (define-public python2-setproctitle
12809 (let ((base (package-with-python2
12810 (strip-python2-variant python-setproctitle))))
12811 (package
12812 (inherit base)
12813 (native-inputs `(("python2-nose" ,python2-nose)
12814 ,@(package-native-inputs base))))))
12815
12816 (define-public python-validictory
12817 (package
12818 (name "python-validictory")
12819 (version "1.0.1")
12820 (source
12821 (origin
12822 (method url-fetch)
12823 (uri (pypi-uri "validictory" version))
12824 (sha256
12825 (base32
12826 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12827 (build-system python-build-system)
12828 (arguments
12829 '(#:phases
12830 (modify-phases %standard-phases
12831 (add-after 'unpack 'bootstrap
12832 ;; Move the tests out of the package directory to avoid
12833 ;; packaging them.
12834 (lambda* _
12835 (rename-file "validictory/tests" "tests")
12836 (delete-file "tests/__init__.py")))
12837 (replace 'check
12838 (lambda _
12839 ;; Extend PYTHONPATH so the built package will be found.
12840 (setenv "PYTHONPATH"
12841 (string-append (getcwd) "/build/lib:"
12842 (getenv "PYTHONPATH")))
12843 (zero? (system* "py.test" "-vv" )))))))
12844 (native-inputs
12845 `(("python-pytest" ,python-pytest)))
12846 (home-page
12847 "https://github.com/jamesturk/validictory")
12848 (synopsis "General purpose Python data validator")
12849 (description "It allows validation of arbitrary Python data structures.
12850
12851 The schema format is based on the JSON Schema
12852 proposal (http://json-schema.org), so combined with json the library is also
12853 useful as a validator for JSON data.")
12854 (license license:expat)))
12855
12856 (define-public python2-validictory
12857 (package-with-python2 python-validictory))
12858
12859 (define-public python-aniso8601
12860 (package
12861 (name "python-aniso8601")
12862 (version "1.1.0")
12863 (source
12864 (origin
12865 (method url-fetch)
12866 (uri (pypi-uri "aniso8601" version))
12867 (sha256
12868 (base32
12869 "1k5mjg9iqbjfslb5prrsfz7dhlvi6s35p1jxq8dm87w1b7dn5i2g"))))
12870 (build-system python-build-system)
12871 (propagated-inputs
12872 `(("python-dateutil" ,python-dateutil)))
12873 (home-page
12874 "https://bitbucket.org/nielsenb/aniso8601")
12875 (synopsis
12876 "Python library for parsing ISO 8601 strings")
12877 (description
12878 "This package contains a library for parsing ISO 8601 datetime strings.")
12879 (license license:bsd-3)))
12880
12881 (define-public python-flask-restful
12882 (package
12883 (name "python-flask-restful")
12884 (version "0.3.5")
12885 (source
12886 (origin
12887 (method url-fetch)
12888 (uri (pypi-uri "Flask-RESTful" version))
12889 (sha256
12890 (base32
12891 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
12892 (build-system python-build-system)
12893 (propagated-inputs
12894 `(("python-aniso8601" ,python-aniso8601)
12895 ("python-flask" ,python-flask)
12896 ("python-pycrypto" ,python-pycrypto)
12897 ("python-pytz" ,python-pytz)))
12898 (native-inputs
12899 `(;; Optional dependency of Flask. Tests need it.
12900 ("python-blinker" ,python-blinker)
12901 ("python-mock" ,python-mock) ; For tests
12902 ("python-nose" ,python-nose) ; For tests
12903 ("python-sphinx" ,python-sphinx)))
12904 (home-page
12905 "https://www.github.com/flask-restful/flask-restful/")
12906 (synopsis
12907 "Flask module for creating REST APIs")
12908 (description
12909 "This package contains a Flask module for creating REST APIs.")
12910 (license license:bsd-3)))
12911
12912 (define-public python-flask-basicauth
12913 (package
12914 (name "python-flask-basicauth")
12915 (version "0.2.0")
12916 (source
12917 (origin
12918 (method url-fetch)
12919 (uri (pypi-uri "Flask-BasicAuth" version))
12920 (sha256
12921 (base32
12922 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
12923 (build-system python-build-system)
12924 (propagated-inputs
12925 `(("python-flask" ,python-flask)))
12926 (home-page
12927 "https://github.com/jpvanhal/flask-basicauth")
12928 (synopsis
12929 "HTTP basic access authentication for Flask")
12930 (description
12931 "This package provides HTTP basic access authentication for Flask.")
12932 (license license:bsd-3)))
12933
12934 (define-public python-flask-sqlalchemy
12935 (package
12936 (name "python-flask-sqlalchemy")
12937 (version "2.1")
12938 (source
12939 (origin
12940 (method url-fetch)
12941 (uri (pypi-uri "Flask-SQLAlchemy" version))
12942 (sha256
12943 (base32
12944 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
12945 (build-system python-build-system)
12946 (propagated-inputs
12947 `(("python-flask" ,python-flask)
12948 ("python-sqlalchemy" ,python-sqlalchemy)))
12949 (home-page
12950 "https://github.com/mitsuhiko/flask-sqlalchemy")
12951 (synopsis
12952 "Module adding SQLAlchemy support to your Flask application")
12953 (description
12954 "This package adds SQLAlchemy support to your Flask application.")
12955 (license license:bsd-3)))
12956
12957 (define-public python-pyev
12958 (package
12959 (name "python-pyev")
12960 (version "0.9.0")
12961 (source
12962 (origin
12963 (method url-fetch)
12964 (uri (pypi-uri "pyev" version))
12965 (sha256
12966 (base32
12967 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
12968 (build-system python-build-system)
12969 (arguments
12970 `(#:tests? #f ; no test suite
12971 #:phases
12972 (modify-phases %standard-phases
12973 (add-after 'unpack 'patch
12974 (lambda* (#:key inputs #:allow-other-keys)
12975 (let ((libev (string-append (assoc-ref inputs "libev")
12976 "/lib/libev.so.4")))
12977 (substitute* "setup.py"
12978 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
12979 (string-append "libev_dll_name = \"" libev "\"")))))))))
12980 (inputs
12981 `(("libev" ,libev)))
12982 (home-page "http://pythonhosted.org/pyev/")
12983 (synopsis "Python libev interface")
12984 (description "Pyev provides a Python interface to libev.")
12985 (license license:gpl3)))
12986
12987 (define-public python2-pyev
12988 (package-with-python2 python-pyev))
12989
12990 (define-public python-imagesize
12991 (package
12992 (name "python-imagesize")
12993 (version "0.7.1")
12994 (source
12995 (origin
12996 (method url-fetch)
12997 (uri (pypi-uri "imagesize" version))
12998 (sha256
12999 (base32
13000 "0qk07k0z4241lkzzjji7z4da04pcvg7bfc4xz1934zlqhwmwdcha"))))
13001 (build-system python-build-system)
13002 (arguments
13003 '(;; Test files are not distributed on PyPi:
13004 ;; https://github.com/shibukawa/imagesize_py/issues/7
13005 #:tests? #f))
13006 (home-page "https://github.com/shibukawa/imagesize_py")
13007 (synopsis "Gets image size of files in variaous formats in Python")
13008 (description
13009 "This package allows determination of image size from
13010 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13011 (license license:expat)))
13012
13013 (define-public python2-imagesize
13014 (package-with-python2 python-imagesize))
13015
13016 (define-public python-axolotl-curve25519
13017 (package
13018 (name "python-axolotl-curve25519")
13019 (version "0.1")
13020 (source
13021 (origin
13022 (method git-fetch)
13023 (uri (git-reference
13024 (url "git://github.com/tgalal/python-axolotl-curve25519")
13025 (commit "e4a9c4de0eae27223200579c58d1f8f6d20637e2")))
13026 (file-name (string-append name "-" version "-checkout"))
13027 (sha256
13028 (base32
13029 "0agap5q0hmvf6cwzjqc05kw53pjgf6942pcivpazksmg1vk400ra"))))
13030 (build-system python-build-system)
13031 (arguments
13032 `(;; Prevent creation of the egg. This works around
13033 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
13034 #:configure-flags '("--root=/")))
13035 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
13036 (synopsis "Python wrapper for curve25519 library")
13037 (description "This is a python wrapper for the curve25519 library
13038 with ed25519 signatures. The C code was pulled from
13039 libaxolotl-android. At the moment this wrapper is meant for use by
13040 python-axolotl.")
13041 (license (list license:gpl3 ; Most files
13042 license:bsd-3)))) ; curve/curve25519-donna.c
13043
13044 (define-public python2-axolotl-curve25519
13045 (package-with-python2 python-axolotl-curve25519))
13046
13047 (define-public python-axolotl
13048 (package
13049 (name "python-axolotl")
13050 (version "0.1.35")
13051 (source
13052 (origin
13053 (method url-fetch)
13054 (uri (string-append
13055 "https://github.com/tgalal/python-axolotl/archive/"
13056 version ".tar.gz"))
13057 (file-name (string-append name "-" version ".tar.gz"))
13058 (sha256
13059 (base32 "1z8d89p7v40p4bwywjm9h4z28fdvra79ddw06azlkrfjbl7dxmz8"))))
13060 (build-system python-build-system)
13061 (arguments
13062 `(#:phases
13063 (modify-phases %standard-phases
13064 ;; Don't install tests
13065 (add-before 'install 'remove-tests
13066 (lambda _
13067 (for-each delete-file-recursively
13068 '("axolotl/tests" "build/lib/axolotl/tests"))
13069 #t)))))
13070 (propagated-inputs
13071 `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
13072 ("python-dateutil" ,python-dateutil)
13073 ("python-protobuf" ,python-protobuf)
13074 ("python-pycrypto" ,python-pycrypto)))
13075 (home-page "https://github.com/tgalal/python-axolotl")
13076 (synopsis "Python port of libaxolotl-android")
13077 (description "This is a python port of libaxolotl-android. This
13078 is a ratcheting forward secrecy protocol that works in synchronous and
13079 asynchronous messaging environments.")
13080 (license license:gpl3)))
13081
13082 (define-public python2-axolotl
13083 (package-with-python2 python-axolotl))
13084
13085 (define-public python-termstyle
13086 (package
13087 (name "python-termstyle")
13088 (version "0.1.11")
13089 (source
13090 (origin
13091 (method url-fetch)
13092 (uri (pypi-uri "termstyle" version))
13093 (sha256
13094 (base32
13095 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13096 (build-system python-build-system)
13097 (arguments
13098 '(#:phases
13099 (modify-phases %standard-phases
13100 (replace 'check
13101 (lambda _
13102 (zero? (system* "python" "test3.py")))))))
13103 (home-page "https://github.com/gfxmonk/termstyle")
13104 (synopsis "Console text coloring for Python")
13105 (description "This package provides console text coloring for Python.")
13106 (license license:bsd-3)))
13107
13108 (define-public python-rednose
13109 (package
13110 (name "python-rednose")
13111 (version "1.2.1")
13112 (source
13113 (origin
13114 (method url-fetch)
13115 (uri (pypi-uri "rednose" version))
13116 (sha256
13117 (base32
13118 "0b0bsna217lr1nykyhl5fgjly15zhdvqd4prg4wy1zrgfv7al6m0"))))
13119 (build-system python-build-system)
13120 (arguments
13121 `(#:phases
13122 (modify-phases %standard-phases
13123 (add-after 'unpack 'fix-deps
13124 (lambda _
13125 ;; See <https://github.com/JBKahn/rednose/issues/12>
13126 (substitute* "setup.py"
13127 (("python-termstyle") "termstyle"))
13128 #t)))))
13129 (propagated-inputs
13130 `(("python-colorama" ,python-colorama)
13131 ("python-termstyle" ,python-termstyle)))
13132 (native-inputs
13133 `(("python-six" ,python-six)
13134 ("python-nose" ,python-nose)))
13135 (home-page "https://github.com/JBKahn/rednose")
13136 (synopsis "Colored output for Python nosetests")
13137 (description "This package provides colored output for the
13138 @command{nosetests} command of the Python Nose unit test framework.")
13139 (license license:bsd-3)))
13140
13141 (define-public python-flask-restplus
13142 (package
13143 (name "python-flask-restplus")
13144 (version "0.9.2")
13145 (source
13146 (origin
13147 (method url-fetch)
13148 (uri (pypi-uri "flask-restplus" version))
13149 (sha256
13150 (base32
13151 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
13152 (build-system python-build-system)
13153 (arguments
13154 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
13155 ;; #:phases
13156 ;; (modify-phases %standard-phases
13157 ;; (replace 'check
13158 ;; (lambda _
13159 ;; (zero? (system* "nosetests")))))))
13160 (propagated-inputs
13161 `(("python-aniso8601" ,python-aniso8601)
13162 ("python-flask" ,python-flask)
13163 ("python-jsonschema" ,python-jsonschema)
13164 ("python-pytz" ,python-pytz)
13165 ("python-six" ,python-six)))
13166 (native-inputs
13167 `(("python-tzlocal" ,python-tzlocal)
13168 ("python-blinker" ,python-blinker)
13169 ("python-nose" ,python-nose)
13170 ("python-rednose" ,python-rednose)))
13171 (home-page "https://github.com/noirbizarre/flask-restplus")
13172 (synopsis "Framework for documented API development with Flask")
13173 (description "This package provides a framework for API development with
13174 the Flask web framework in Python. It is similar to package
13175 @code{python-flask-restful} but supports the @code{python-swagger}
13176 documentation builder.")
13177 (license license:expat)))
13178
13179 (define-public python-sadisplay
13180 (package
13181 (name "python-sadisplay")
13182 (version "0.4.6")
13183 (source
13184 (origin
13185 (method url-fetch)
13186 (uri (pypi-uri "sadisplay" version))
13187 (sha256
13188 (base32
13189 "0zqad2fl7q26p090qmqgmxbm6iwgf9zij1w8da1g3wdgjj72ql05"))))
13190 (build-system python-build-system)
13191 (propagated-inputs
13192 `(("python-sqlalchemy" ,python-sqlalchemy)))
13193 (native-inputs
13194 `(("python-nose" ,python-nose)))
13195 (home-page "https://bitbucket.org/estin/sadisplay")
13196 (synopsis "SQLAlchemy schema displayer")
13197 (description "This package provides a program to build Entity
13198 Relationship diagrams from a SQLAlchemy model (or directly from the
13199 database).")
13200 (license license:bsd-3)))
13201
13202 (define-public python2-sadisplay
13203 (package-with-python2 python-sadisplay))
13204
13205 (define-public python-flask-restful-swagger
13206 (package
13207 (name "python-flask-restful-swagger")
13208 (version "0.19")
13209 (source
13210 (origin
13211 (method url-fetch)
13212 (uri (pypi-uri "flask-restful-swagger" version))
13213 (sha256
13214 (base32
13215 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
13216 (build-system python-build-system)
13217 (propagated-inputs
13218 `(("python-flask-restful" ,python-flask-restful)))
13219 (home-page "https://github.com/rantav/flask-restful-swagger")
13220 (synopsis "Extract Swagger specs from Flask-Restful projects")
13221 (description "This package lets you extract Swagger API documentation
13222 specs from your Flask-Restful projects.")
13223 (license license:expat)))
13224
13225 (define-public python2-flask-restful-swagger
13226 (package-with-python2 python-flask-restful-swagger))
13227
13228 (define-public python-argcomplete
13229 (package
13230 (name "python-argcomplete")
13231 (version "1.7.0")
13232 (source
13233 (origin
13234 (method url-fetch)
13235 (uri (pypi-uri "argcomplete" version))
13236 (sha256
13237 (base32
13238 "11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x"))))
13239 (build-system python-build-system)
13240 (native-inputs
13241 `(("python-pexpect" ,python-pexpect)
13242 ("tcsh" ,tcsh)))
13243 (home-page "https://github.com/kislyuk/argcomplete")
13244 (synopsis "Shell tab completion for Python argparse")
13245 (description "argcomplete provides extensible command line tab completion
13246 of arguments and options for Python scripts using @code{argparse}. It's
13247 particularly useful for programs with many options or sub-parsers that can
13248 dynamically suggest completions; for example, when browsing resources over the
13249 network.")
13250 (license license:asl2.0)))
13251
13252 (define-public python2-argcomplete
13253 (package-with-python2 python-argcomplete))
13254
13255 (define-public python-xopen
13256 (package
13257 (name "python-xopen")
13258 (version "0.1.1")
13259 (source
13260 (origin
13261 (method url-fetch)
13262 (uri (pypi-uri "xopen" version))
13263 (sha256
13264 (base32
13265 "1wx6mylzcsyhjl19ycb83qq6iqpmr927lz62njfsar6ldsj0qcni"))
13266 (file-name (string-append name "-" version ".tar.gz"))))
13267 (build-system python-build-system)
13268 (home-page "https://github.com/marcelm/xopen/")
13269 (synopsis "Open compressed files transparently")
13270 (description "This module provides an @code{xopen} function that works like
13271 Python's built-in @code{open} function, but can also deal with compressed files.
13272 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13273 recognized by their file extensions. The focus is on being as efficient as
13274 possible on all supported Python versions.")
13275 (license license:expat)))
13276
13277 (define-public python2-xopen
13278 (package-with-python2 python-xopen))
13279
13280 (define-public python2-cheetah
13281 (package
13282 (name "python2-cheetah")
13283 (version "2.4.4")
13284 (source
13285 (origin
13286 (method url-fetch)
13287 (uri (pypi-uri "Cheetah" version))
13288 (sha256
13289 (base32
13290 "0l5mm4lnysjkzpjr95q5ydm9xc8bv43fxmr79ypybrf1y0lq4c5y"))))
13291 (build-system python-build-system)
13292 (arguments
13293 `(#:python ,python-2))
13294 (propagated-inputs
13295 `(("python2-markdown" ,python2-markdown)))
13296 (home-page "https://pythonhosted.org/Cheetah/")
13297 (synopsis "Template engine")
13298 (description "Cheetah is a text-based template engine and Python code
13299 generator.
13300
13301 Cheetah can be used as a standalone templating utility or referenced as
13302 a library from other Python applications. It has many potential uses,
13303 but web developers looking for a viable alternative to ASP, JSP, PHP and
13304 PSP are expected to be its principle user group.
13305
13306 Features:
13307 @enumerate
13308 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13309 text-based format.
13310 @item Cleanly separates content, graphic design, and program code.
13311 @item Blends the power and flexibility of Python with a simple template language
13312 that non-programmers can understand.
13313 @item Gives template writers full access to any Python data structure, module,
13314 function, object, or method in their templates.
13315 @item Makes code reuse easy by providing an object-orientated interface to
13316 templates that is accessible from Python code or other Cheetah templates.
13317 One template can subclass another and selectively reimplement sections of it.
13318 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13319 improve the performance of a dynamic website.
13320 @item Compiles templates into optimized, yet readable, Python code.
13321 @end enumerate")
13322 (license (license:x11-style "file://LICENSE"))))
13323
13324 (define-public python-dulwich
13325 (package
13326 (name "python-dulwich")
13327 (version "0.16.3")
13328 (source
13329 (origin
13330 (method url-fetch)
13331 (uri (list (string-append "https://www.dulwich.io/releases/"
13332 "dulwich-" version ".tar.gz")
13333 (pypi-uri "dulwich" version)))
13334 (sha256
13335 (base32 "0fl47vzfgc3w3rmhn8naii905cjqcp0vc68iyvymxp7567hh6als"))))
13336 (build-system python-build-system)
13337 (arguments
13338 `(#:phases
13339 (modify-phases %standard-phases
13340 (add-before 'check 'fix-tests
13341 (lambda* (#:key inputs #:allow-other-keys)
13342 ;; The tests use Popen with a custom environment which doesn't
13343 ;; include PATH.
13344 (substitute* "dulwich/tests/compat/utils.py"
13345 (("'git'") (string-append "'"
13346 (which "git")
13347 "'")))
13348 (substitute* '("dulwich/tests/test_repository.py"
13349 "dulwich/tests/test_hooks.py")
13350 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13351 (setenv "TEST_RUNNER" "unittest")
13352 (setenv "PYTHONHASHSEED" "random")
13353 #t)))))
13354 (propagated-inputs
13355 `(("python-fastimport" ,python-fastimport)))
13356 (native-inputs
13357 `(("python-mock" ,python-mock)
13358 ("python-geventhttpclient" ,python-geventhttpclient)
13359 ("git" ,git)))
13360 (home-page "https://www.dulwich.io/")
13361 (synopsis "Git implementation in Python")
13362 (description "Dulwich is an implementation of the Git file formats and
13363 protocols written in pure Python.")
13364 ;; Can be used with either license.
13365 (license (list license:asl2.0 license:gpl2+))))
13366
13367 (define-public python2-dulwich
13368 (package-with-python2 python-dulwich))
13369
13370 (define-public python-pbkdf2
13371 (package
13372 (name "python-pbkdf2")
13373 (version "1.3")
13374 (source
13375 (origin
13376 (method url-fetch)
13377 (uri (pypi-uri "pbkdf2" version))
13378 (sha256
13379 (base32
13380 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13381 (build-system python-build-system)
13382 (arguments
13383 '(#:phases
13384 (modify-phases %standard-phases
13385 (replace 'check
13386 (lambda _
13387 (setenv "PYTHONPATH"
13388 (string-append (getcwd) "/build/lib:"
13389 (getenv "PYTHONPATH")))
13390 (zero? (system* "python" "test/test_pbkdf2.py")))))))
13391 (propagated-inputs
13392 `(("python-pycrypto" ,python-pycrypto))) ; optional
13393 (home-page "http://www.dlitz.net/software/python-pbkdf2/")
13394 (synopsis "Password-based key derivation")
13395 (description "This module implements the password-based key derivation
13396 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13397
13398 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13399 is part of the RSA Public Key Cryptography Standards series. The provided
13400 implementation takes a password or a passphrase and a salt value (and
13401 optionally a iteration count, a digest module, and a MAC module) and provides
13402 a file-like object from which an arbitrarly-sized key can be read.")
13403 (license license:expat)))
13404
13405 (define-public python2-pbkdf2
13406 (package-with-python2 python-pbkdf2))
13407
13408 (define-public python-qrcode
13409 (package
13410 (name "python-qrcode")
13411 (version "5.3")
13412 (source
13413 (origin
13414 (method url-fetch)
13415 (uri (pypi-uri "qrcode" version))
13416 (sha256
13417 (base32
13418 "0kljfrfq0c2rmxf8am57333ia41kd0snbm2rnqbdy816hgpcq5a1"))))
13419 (build-system python-build-system)
13420 (arguments
13421 ;; FIXME: Tests require packaging 'pymaging'.
13422 '(#:tests? #f))
13423 (propagated-inputs
13424 `(("python-lxml" ,python-lxml) ; for SVG output
13425 ("python-pillow" ,python-pillow) ; for PNG output
13426 ("python-six" ,python-six)))
13427 (home-page "https://github.com/lincolnloop/python-qrcode")
13428 (synopsis "QR Code image generator")
13429 (description "This package provides a pure Python QR Code generator
13430 module. It uses the Python Imaging Library (PIL) to allow for the generation
13431 of QR Codes.
13432
13433 In addition this package provides a command line tool to generate QR codes and
13434 either write these QR codes to a file or do the output as ascii art at the
13435 console.")
13436 (license license:bsd-3)))
13437
13438 (define-public python2-qrcode
13439 (package-with-python2 python-qrcode))
13440
13441 ;; SlowAES isn't compatible with Python 3.
13442 (define-public python2-slowaes
13443 (package
13444 (name "python2-slowaes")
13445 (version "0.1a1")
13446 (source
13447 (origin
13448 (method url-fetch)
13449 (uri (pypi-uri "slowaes" version))
13450 (sha256
13451 (base32
13452 "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
13453 (build-system python-build-system)
13454 (arguments `(#:python ,python-2))
13455 (home-page "http://code.google.com/p/slowaes/")
13456 (synopsis "Implementation of AES in Python")
13457 (description "This package contains an implementation of AES in Python.
13458 This implementation is slow (hence the project name) but still useful when
13459 faster ones are not available.")
13460 (license license:asl2.0)))
13461
13462 (define-public python-rst2ansi
13463 (package
13464 (name "python-rst2ansi")
13465 (version "0.1.5")
13466 (source
13467 (origin
13468 (method url-fetch)
13469 (uri (pypi-uri "rst2ansi" version))
13470 (sha256
13471 (base32
13472 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13473 (build-system python-build-system)
13474 (propagated-inputs
13475 `(("python-docutils" ,python-docutils)))
13476 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13477 (synopsis "Convert RST to ANSI-decorated console output")
13478 (description
13479 "Python module dedicated to rendering RST (reStructuredText) documents
13480 to ansi-escaped strings suitable for display in a terminal.")
13481 (license license:expat)))
13482
13483 (define-public python-ansi2html
13484 (package
13485 (name "python-ansi2html")
13486 (version "1.2.0")
13487 (source
13488 (origin
13489 (method url-fetch)
13490 (uri (pypi-uri "ansi2html" version))
13491 (sha256
13492 (base32
13493 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13494 (build-system python-build-system)
13495 (native-inputs
13496 `(("python-mock" ,python-mock)
13497 ("python-nose" ,python-nose)))
13498 (propagated-inputs
13499 `(("python-six" ,python-six)))
13500 (home-page "http://github.com/ralphbean/ansi2html")
13501 (synopsis "Convert ANSI-decorated console output to HTML")
13502 (description
13503 "@command{ansi2html} is a Python library and command line utility for
13504 convering text with ANSI color codes to HTML or LaTeX.")
13505 (license license:gpl3+)))
13506
13507 (define-public python2-ansi2html
13508 (package-with-python2 python-ansi2html))
13509
13510 (define-public python-ddt
13511 (package
13512 (name "python-ddt")
13513 (version "1.1.1")
13514 (source
13515 (origin
13516 (method url-fetch)
13517 (uri (pypi-uri "ddt" version))
13518 (sha256
13519 (base32
13520 "1c00ikkxr7lha97c81k938bzhgd4pbwamkjn0h4nkhr3xk00zp6n"))))
13521 (build-system python-build-system)
13522 (native-inputs
13523 `(("python-mock" ,python-mock)
13524 ("python-nose" ,python-nose)))
13525 (propagated-inputs
13526 `(("python-six" ,python-six)
13527 ("python-pyyaml" ,python-pyyaml)))
13528 (home-page "https://github.com/txels/ddt")
13529 (synopsis "Data-Driven Tests")
13530 (description
13531 "DDT (Data-Driven Tests) allows you to multiply one test case by running
13532 it with different test data, and make it appear as multiple test cases.")
13533 (license license:expat)))
13534
13535 (define-public python2-ddt
13536 (package-with-python2 python-ddt))
13537
13538 (define-public python-pycosat
13539 (package
13540 (name "python-pycosat")
13541 (version "0.6.1")
13542 (source
13543 (origin
13544 (method url-fetch)
13545 (uri (pypi-uri "pycosat" version))
13546 (sha256
13547 (base32
13548 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13549 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13550 (build-system python-build-system)
13551 (home-page "https://github.com/ContinuumIO/pycosat")
13552 (synopsis "Bindings to picosat (a SAT solver)")
13553 (description
13554 "This package provides efficient Python bindings to @code{picosat} on
13555 the C level. When importing pycosat, the @code{picosat} solver becomes part
13556 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13557 Problem} (SAT) solver.")
13558 (license license:expat)))
13559
13560 (define-public python2-pycosat
13561 (package-with-python2 python-pycosat))
13562
13563 (define-public python2-ruamel.ordereddict
13564 (package
13565 (name "python2-ruamel.ordereddict")
13566 (version "0.4.9")
13567 (source
13568 (origin
13569 (method url-fetch)
13570 (uri (pypi-uri "ruamel.ordereddict" version))
13571 (sha256
13572 (base32
13573 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13574 (build-system python-build-system)
13575 (arguments
13576 `(#:python ,python-2
13577 #:phases
13578 (modify-phases %standard-phases
13579 (delete 'check)
13580 (add-after 'install 'check
13581 (lambda* (#:key inputs outputs #:allow-other-keys)
13582 (add-installed-pythonpath inputs outputs)
13583 (zero? (system* "python" "test/testordereddict.py")))))))
13584 (home-page "https://bitbucket.org/ruamel/ordereddict")
13585 (synopsis "Version of dict that keeps keys in insertion order")
13586 (description
13587 "This is an implementation of an ordered dictionary with @dfn{Key
13588 Insertion Order} (KIO: updates of values do not affect the position of the
13589 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13590 removed and put at the back). The standard library module @code{OrderedDict},
13591 implemented later, implements a subset of @code{ordereddict} functionality.
13592 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13593 Order} (KSO, no sorting function can be specified, but a transform can be
13594 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13595 (license license:expat)))
13596
13597 (define-public python-pypeg2
13598 (package
13599 (name "python-pypeg2")
13600 (version "2.15.2")
13601 (source
13602 (origin
13603 (method url-fetch)
13604 (uri (pypi-uri "pyPEG2" version))
13605 (sha256
13606 (base32
13607 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13608 (build-system python-build-system)
13609 (propagated-inputs `(("python-lxml" ,python-lxml)))
13610 (arguments
13611 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13612 '(#:tests? #f))
13613 (home-page "https://fdik.org/pyPEG/")
13614 (synopsis "Parsering Expression Grammars in Python")
13615 (description "PyPEG is an intrinsic parser interpreter framework for
13616 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13617 parse many formal languages.")
13618 (license license:gpl2)))
13619
13620 (define-public python2-cliapp
13621 (package
13622 (name "python2-cliapp")
13623 (version "1.20160724")
13624 (source
13625 (origin
13626 (method url-fetch)
13627 (uri (string-append
13628 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13629 version ".tar.gz"))
13630 (sha256
13631 (base32
13632 "025cyi75vxyghbm4hav8dz4fzwksshddavy9g9fwr440awcvw74f"))))
13633 (build-system python-build-system)
13634 (arguments
13635 `(#:python ,python-2))
13636 (propagated-inputs
13637 `(("python2-pyaml" ,python2-pyaml)))
13638 (home-page "https://liw.fi/cliapp/")
13639 (synopsis "Python framework for command line programs")
13640 (description "@code{python2-cliapp} is a python framework for
13641 command line programs. It contains the typical stuff such programs
13642 need to do, such as parsing the command line for options, and
13643 iterating over input files.")
13644 (license license:gpl2+)))
13645
13646 (define-public python2-ttystatus
13647 (package
13648 (name "python2-ttystatus")
13649 (version "0.32")
13650 (source
13651 (origin
13652 (method url-fetch)
13653 (uri (string-append
13654 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13655 version ".tar.gz"))
13656 (sha256
13657 (base32
13658 "0b5g889jj23r2w1hi300cdldx6jvspanp0ybf5n1qvdvl150aamf"))))
13659 (build-system python-build-system)
13660 (arguments
13661 `(#:python ,python-2))
13662 (home-page "https://liw.fi/ttystatus/")
13663 (synopsis "Python library for showing progress reporting and
13664 status updates on terminals")
13665 (description "@code{python2-ttystatus} is a python library for
13666 showing progress reporting and status updates on terminals, for
13667 command line programs. Output is automatically adapted to the width
13668 of the terminal: truncated if it does not fit, and resized if the
13669 terminal size changes.")
13670 (license license:gpl3+)))
13671
13672 (define-public python2-tracing
13673 (package
13674 (name "python2-tracing")
13675 (version "0.10")
13676 (source
13677 (origin
13678 (method url-fetch)
13679 (uri (string-append
13680 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13681 version ".tar.gz"))
13682 (sha256
13683 (base32
13684 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13685 (build-system python-build-system)
13686 (arguments
13687 `(#:python ,python-2))
13688 (home-page "https://liw.fi/tracing/")
13689 (synopsis "Python debug logging helper")
13690 (description "@code{python2-tracing} is a python library for
13691 logging debug messages. It provides a way to turn debugging messages
13692 on and off, based on the filename they occur in. It is much faster
13693 than using @code{logging.Filter} to accomplish the same thing, which
13694 matters when code is run in production mode. The actual logging still
13695 happens using the @code{logging} library.")
13696 (license license:gpl3+)))
13697
13698 (define-public python2-larch
13699 (package
13700 (name "python2-larch")
13701 (version "1.20151025")
13702 (source
13703 (origin
13704 (method url-fetch)
13705 (uri (string-append
13706 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13707 version ".tar.gz"))
13708 (sha256
13709 (base32
13710 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13711 (build-system python-build-system)
13712 (arguments
13713 `(#:python ,python-2))
13714 (propagated-inputs
13715 `(("python2-tracing" ,python2-tracing)))
13716 (home-page "https://liw.fi/larch/")
13717 (synopsis "Python copy-on-write B-tree library")
13718 (description "@code{python2-larch} is an implementation of
13719 particular kind of B-tree, based on research by Ohad Rodeh. See
13720 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13721 on the data structure.
13722
13723 The distinctive feature of this B-tree is that a node is never
13724 (conceptually) modified. Instead, all updates are done by
13725 copy-on-write. This makes it easy to clone a tree, and modify only the
13726 clone, while other processes access the original tree.")
13727 (license license:gpl3+)))
13728
13729 (define-public python-htmlmin
13730 (package
13731 (name "python-htmlmin")
13732 (version "0.1.10")
13733 (source
13734 (origin
13735 (method url-fetch)
13736 (uri (pypi-uri "htmlmin" version))
13737 (sha256
13738 (base32
13739 "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
13740 (arguments
13741 `(#:tests? #f)) ;htmlmin has no tests
13742 (build-system python-build-system)
13743 (home-page "https://htmlmin.readthedocs.org/en/latest/")
13744 (synopsis "HTML minifier")
13745 (description "@code{htmlmin} is an HTML minifier that just works.
13746 It comes with safe defaults and easily configurable options.")
13747 (license license:bsd-3)))
13748
13749 (define-public python2-htmlmin
13750 (package-with-python2 python-htmlmin))
13751
13752 (define-public python-flask-htmlmin
13753 (package
13754 (name "python-flask-htmlmin")
13755 (version "1.2")
13756 (source
13757 (origin
13758 (method url-fetch)
13759 (uri (pypi-uri "Flask-HTMLmin" version))
13760 (sha256
13761 (base32
13762 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
13763 (propagated-inputs
13764 `(("python-flask" ,python-flask)
13765 ("python-htmlmin" ,python-htmlmin)))
13766 (build-system python-build-system)
13767 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
13768 (synopsis "HTML response minifier for Flask")
13769 (description
13770 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
13771 (license license:bsd-3)))
13772
13773 (define-public python2-flask-htmlmin
13774 (package-with-python2 python-flask-htmlmin))
13775
13776 (define-public python-flask-login
13777 (package
13778 (name "python-flask-login")
13779 (version "0.4.0")
13780 (source
13781 (origin
13782 (method url-fetch)
13783 (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
13784 version ".tar.gz"))
13785 (file-name (string-append name "-" version ".tar.gz"))
13786 (sha256
13787 (base32
13788 "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
13789 (arguments
13790 ;; Tests fail PEP8 compliance. See:
13791 ;; https://github.com/maxcountryman/flask-login/issues/340
13792 `(#:tests? #f))
13793 (build-system python-build-system)
13794 (home-page "https://github.com/maxcountryman/flask-login")
13795 (synopsis "User session management for Flask")
13796 (description
13797 "@code{Flask-Login} provides user session management for Flask. It
13798 handles the common tasks of logging in, logging out, and remembering your
13799 users' sessions over extended periods of time.")
13800 (license license:expat)))
13801
13802 (define-public python2-flask-login
13803 (package-with-python2 python-flask-login))
13804
13805 (define-public python-astroid
13806 (package
13807 (name "python-astroid")
13808 (version "1.4.9")
13809 (source
13810 (origin
13811 (method url-fetch)
13812 (uri (string-append
13813 "https://github.com/PyCQA/astroid/archive/astroid-"
13814 version ".tar.gz"))
13815 (sha256
13816 (base32
13817 "0j0wgy54d13a470vm4b9rdjk99n1hmdxpf34x9k3pbmi9w9b566z"))))
13818 (build-system python-build-system)
13819 (propagated-inputs
13820 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13821 ("python-six" ,python-six)
13822 ("python-wrapt" ,python-wrapt)))
13823 (arguments
13824 `(#:phases
13825 (modify-phases %standard-phases
13826 (replace 'check
13827 (lambda _
13828 (zero? (system* "python" "-m" "unittest" "discover"
13829 "-p" "unittest*.py")))))))
13830 (home-page "https://github.com/PyCQA/astroid")
13831 (synopsis "Common base representation of python source code for pylint and
13832 other projects")
13833 (description "@code{python-astroid} provides a common base representation
13834 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13835
13836 It provides a compatible representation which comes from the _ast module. It
13837 rebuilds the tree generated by the builtin _ast module by recursively walking
13838 down the AST and building an extended ast. The new node classes have
13839 additional methods and attributes for different usages. They include some
13840 support for static inference and local name scopes. Furthermore, astroid
13841 builds partial trees by inspecting living objects.")
13842 (license license:lgpl2.1+)))
13843
13844 (define-public python2-astroid
13845 (package-with-python2 python-astroid))
13846
13847 (define-public python-isort
13848 (package
13849 (name "python-isort")
13850 (version "4.2.5")
13851 (source
13852 (origin
13853 (method url-fetch)
13854 (uri (string-append
13855 "https://github.com/timothycrosley/isort/archive/"
13856 version ".tar.gz"))
13857 (file-name (string-append name "-" version ".tar.gz"))
13858 (sha256
13859 (base32
13860 "0zsrgkb0krn5476yncy5dd56k7dk34zqb4bnlvwy44ixgilyjmfh"))))
13861 (build-system python-build-system)
13862 (native-inputs
13863 `(("python-mock" ,python-mock)
13864 ("python-pytest" ,python-pytest)))
13865 (home-page "https://github.com/timothycrosley/isort")
13866 (synopsis "Python utility/library to sort python imports")
13867 (description "@code{python-isort} is a python utility/library to sort
13868 imports alphabetically, and automatically separated into sections. It
13869 provides a command line utility, a python library and plugins for various
13870 editors.")
13871 (license license:expat)))
13872
13873 (define-public python2-isort
13874 (package-with-python2 python-isort))
13875
13876 (define-public python2-backports-functools-lru-cache
13877 (package
13878 (name "python2-backports-functools-lru-cache")
13879 (version "1.3")
13880 (source
13881 (origin
13882 (method url-fetch)
13883 ;; only the pypi tarballs contain the necessary metadata
13884 (uri (pypi-uri "backports.functools_lru_cache" version))
13885 (sha256
13886 (base32
13887 "158ysf2hb0q4p4695abfiym9x1ywg0dgh8a3apd7gqaaxjy22jj4"))))
13888 (build-system python-build-system)
13889 (native-inputs
13890 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
13891 (arguments
13892 `(#:python ,python-2))
13893 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
13894 (synopsis "Backport of functools.lru_cache from Python 3.3")
13895 (description "@code{python2-backports-functools-lru-cache} is a backport
13896 of @code{functools.lru_cache} from python 3.3.")
13897 (license license:expat)))
13898
13899 (define-public python-configparser
13900 (package
13901 (name "python-configparser")
13902 (version "3.5.0")
13903 (source
13904 (origin
13905 (method url-fetch)
13906 (uri (string-append
13907 "https://bitbucket.org/ambv/configparser/get/"
13908 version ".tar.bz2"))
13909 (file-name (string-append name "-" version ".tar.gz"))
13910 (sha256
13911 (base32
13912 "0waq40as14abwzbb321hfz4vr1fi363nscy32ga14qvfygrg96wa"))))
13913 (build-system python-build-system)
13914 (home-page "http://docs.python.org/py3k/library/configparser.html")
13915 (synopsis "Backport of configparser from python 3.5")
13916 (description "@code{python-configparser} is a backport of
13917 @code{configparser} from Python 3.5 so that it can be used directly
13918 in other versions.")
13919 (license license:expat)))
13920
13921 (define-public python2-configparser
13922 (package-with-python2 python-configparser))
13923
13924 (define-public python2-coverage-test-runner
13925 (package
13926 (name "python2-coverage-test-runner")
13927 (version "1.11")
13928 (source
13929 (origin
13930 (method url-fetch)
13931 (uri (string-append
13932 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/"
13933 "coverage-test-runner/snapshot/coverage-test-runner-"
13934 version ".tar.gz"))
13935 (sha256
13936 (base32
13937 "0y1m7z3dl63kmhcmydl1mwg0hacnf6ghrx9dah17j9iasssfa3g7"))))
13938 (build-system python-build-system)
13939 (arguments
13940 `(#:python ,python-2
13941 #:phases
13942 (modify-phases %standard-phases
13943 (replace 'check
13944 (lambda _
13945 (zero? (system* "./testrun")))))))
13946 (propagated-inputs
13947 `(("python2-coverage" ,python2-coverage)))
13948 (home-page "https://liw.fi/coverage-test-runner/")
13949 (synopsis "Python module for running unit tests")
13950 (description "@code{CoverageTestRunner} is a python module for running
13951 unit tests and failing them if the unit test module does not exercise all
13952 statements in the module it tests.")
13953 (license license:gpl3+)))
13954
13955 (define-public python-pylint
13956 (package
13957 (name "python-pylint")
13958 (version "1.6.5")
13959 (source
13960 (origin
13961 (method url-fetch)
13962 (uri (string-append
13963 "https://github.com/PyCQA/pylint/archive/pylint-"
13964 version ".tar.gz"))
13965 (sha256
13966 (base32
13967 "08pmgflmq2zrzrn9nkfadzwa5vybz46wvwxhrsd2mjlcgsh4rzbm"))))
13968 (build-system python-build-system)
13969 (native-inputs
13970 `(("python-tox" ,python-tox)))
13971 (propagated-inputs
13972 `(("python-astroid" ,python-astroid)
13973 ("python-isort" ,python-isort)
13974 ("python-mccabe" ,python-mccabe)
13975 ("python-six" ,python-six)))
13976 (arguments
13977 `(#:phases
13978 (modify-phases %standard-phases
13979 (replace 'check
13980 (lambda _
13981 ;; Somehow, tests for python2-pylint
13982 ;; fail if run from the build directory
13983 (let ((work "/tmp/work"))
13984 (mkdir-p work)
13985 (setenv "PYTHONPATH"
13986 (string-append (getenv "PYTHONPATH") ":" work))
13987 (copy-recursively "." work)
13988 (with-directory-excursion "/tmp"
13989 (zero? (system* "python" "-m" "unittest" "discover"
13990 "-s" (string-append work "/pylint/test")
13991 "-p" "*test_*.py")))))))))
13992 (home-page "https://github.com/PyCQA/pylint")
13993 (synopsis "Python source code analyzer which looks for coding standard
13994 errors")
13995 (description "Pylint is a Python source code analyzer which looks
13996 for programming errors, helps enforcing a coding standard and sniffs
13997 for some code smells (as defined in Martin Fowler's Refactoring book).
13998
13999 Pylint has many rules enabled by default, way too much to silence them
14000 all on a minimally sized program. It's highly configurable and handle
14001 pragmas to control it from within your code. Additionally, it is
14002 possible to write plugins to add your own checks.")
14003 (license license:gpl2+)))
14004
14005 (define-public python2-pylint
14006 (let ((pylint (package-with-python2 python-pylint)))
14007 (package (inherit pylint)
14008 (propagated-inputs
14009 `(("python2-backports-functools-lru-cache"
14010 ,python2-backports-functools-lru-cache)
14011 ("python2-configparser" ,python2-configparser)
14012 ,@(package-propagated-inputs pylint))))))
14013
14014 (define-public python-paramunittest
14015 (package
14016 (name "python-paramunittest")
14017 (version "0.2")
14018 (source
14019 (origin
14020 (method url-fetch)
14021 (uri (pypi-uri "ParamUnittest" version))
14022 (sha256
14023 (base32
14024 "0kp793hws5xv1wvycxq7jw2pwy36f35k39jg8hx5qikij5a0jid1"))))
14025 (build-system python-build-system)
14026 (home-page
14027 "https://github.com/rik0/ParamUnittest")
14028 (synopsis
14029 "Simple extension to have parametrized unit tests")
14030 (description
14031 "This package allows to create parametrized unit-tests that work with the standard
14032 unittest package. A parametrized test case is automatically converted to multiple test
14033 cases. Since they are TestCase subclasses, they work with other test suites that
14034 recognize TestCases.")
14035 (license license:bsd-2)))
14036
14037 (define-public python2-python-paramunittest
14038 (package-with-python2 python-paramunittest))
14039
14040 (define-public python-mando
14041 (package
14042 (name "python-mando")
14043 (version "0.5")
14044 (source
14045 (origin
14046 (method url-fetch)
14047 (uri (pypi-uri "mando" version))
14048 (sha256
14049 (base32
14050 "0q05h66439gqdmlk4jqm6xrwrzfdgs4mwk70barxhr2y83qbbdc0"))))
14051 (build-system python-build-system)
14052 (propagated-inputs
14053 `(("python-rst2ansi" ,python-rst2ansi)))
14054 (native-inputs
14055 `(("python-sphinx" ,python-sphinx-1.5.3)
14056 ("python-paramunittest" ,python-paramunittest)))
14057 (home-page "https://mando.readthedocs.org/")
14058 (synopsis
14059 "Wrapper around argparse, allowing creation of complete CLI applications")
14060 (description
14061 "This package is a wrapper around argparse, allowing you to write complete CLI
14062 applications in seconds while maintaining all the flexibility.")
14063 (license license:expat)))
14064
14065 (define-public python2-mando
14066 (package-with-python2 python-mando))
14067
14068 (define-public python-mando-0.3.1
14069 ;; python-radon (version 1.5.0) has a requirement
14070 ;; for mando<0.4,>=0.3
14071 (package
14072 (inherit python-mando)
14073 (name "python-mando")
14074 (version "0.3.1")
14075 (source
14076 (origin
14077 (method url-fetch)
14078 (uri (string-append "https://github.com/rubik/mando/archive/v"
14079 version
14080 ".tar.gz"))
14081 (sha256
14082 (base32
14083 "17jlkdpqw22z1nyml5ybslilqkzmnk0dxxjml8bfghav1l5hbwd2"))))))
14084
14085 (define-public python-fudge
14086 (package
14087 (name "python-fudge")
14088 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14089 ;; package, which is currently the only use of this package.
14090 (version "0.9.6")
14091 (source
14092 (origin
14093 (method url-fetch)
14094 (uri (pypi-uri "fudge" version))
14095 (sha256
14096 (base32
14097 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14098 (build-system python-build-system)
14099 (arguments
14100 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14101 (home-page "https://github.com/fudge-py/fudge")
14102 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14103 (description
14104 "Fudge is a Python module for using fake objects (mocks and stubs) to
14105 test real ones.
14106
14107 In readable Python code, you declare the methods available on your fake object
14108 and how they should be called. Then you inject that into your application and
14109 start testing. This declarative approach means you don’t have to record and
14110 playback actions and you don’t have to inspect your fakes after running code.
14111 If the fake object was used incorrectly then you’ll see an informative
14112 exception message with a traceback that points to the culprit.")
14113 (license license:expat)))
14114
14115 (define-public python2-fudge
14116 (package-with-python2 python-fudge))
14117
14118 (define-public python-oauth2client
14119 (package
14120 (name "python-oauth2client")
14121 (version "4.0.0")
14122 (source
14123 (origin
14124 (method url-fetch)
14125 (uri (pypi-uri "oauth2client" version))
14126 (sha256
14127 (base32
14128 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
14129 (build-system python-build-system)
14130 (arguments
14131 `(#:tests? #f))
14132 (propagated-inputs
14133 `(("python-httplib2" ,python-httplib2)
14134 ("python-pyasn1" ,python-pyasn1)
14135 ("python-pyasn1-modules" ,python-pyasn1-modules)
14136 ("python-rsa" ,python-rsa)
14137 ("python-six" ,python-six)))
14138 (home-page "http://github.com/google/oauth2client/")
14139 (synopsis "OAuth 2.0 client library")
14140 (description "@code{python-oauth2client} provides an OAuth 2.0 client
14141 library for Python")
14142 (license license:asl2.0)))
14143
14144 (define-public python-flask-oidc
14145 (package
14146 (name "python-flask-oidc")
14147 (version "1.1.1")
14148 (source
14149 (origin
14150 (method url-fetch)
14151 (uri (pypi-uri "flask-oidc" version))
14152 (sha256
14153 (base32
14154 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
14155 (build-system python-build-system)
14156 (propagated-inputs
14157 `(("python-flask" ,python-flask)
14158 ("python-itsdangerous" ,python-itsdangerous)
14159 ("python-oauth2client" ,python-oauth2client)
14160 ("python-six" ,python-six)))
14161 (native-inputs
14162 `(("python-nose" ,python-nose)
14163 ("python-mock" ,python-mock)))
14164 (home-page "https://github.com/puiterwijk/flask-oidc")
14165 (synopsis "OpenID Connect extension for Flask")
14166 (description "@code{python-flask-oidc} provides an OpenID Connect extension
14167 for Flask.")
14168 (license license:bsd-2)))
14169
14170 (define-public python-mwclient
14171 (package
14172 (name "python-mwclient")
14173 (version "0.8.4")
14174 (source
14175 (origin
14176 (method url-fetch)
14177 ;; The PyPI version wouldn't contain tests.
14178 (uri (string-append "https://github.com/mwclient/mwclient/archive/"
14179 "v" version ".tar.gz"))
14180 (sha256
14181 (base32
14182 "1jj0yhilkjir00719fc7w133x7hdyhkxhk6xblla4asig45klsfv"))))
14183 (build-system python-build-system)
14184 (propagated-inputs
14185 `(("python-requests" ,python-requests)
14186 ("python-requests-oauthlib"
14187 ,python-requests-oauthlib)
14188 ("python-six" ,python-six)))
14189 (native-inputs
14190 `(("python-mock" ,python-mock)
14191 ("python-pytest" ,python-pytest)
14192 ("python-pytest-pep8" ,python-pytest-pep8)
14193 ("python-pytest-cache" ,python-pytest-cache)
14194 ("python-pytest-cov" ,python-pytest-cov)
14195 ("python-responses" ,python-responses)))
14196 (home-page "https://github.com/btongminh/mwclient")
14197 (synopsis "MediaWiki API client")
14198 (description "This package provides a MediaWiki API client.")
14199 (license license:expat)))
14200
14201 (define-public python2-mwclient
14202 (package-with-python2 python-mwclient))
14203
14204 (define-public python-pytest-warnings
14205 (package
14206 (name "python-pytest-warnings")
14207 (version "0.2.0")
14208 (source
14209 (origin
14210 (method url-fetch)
14211 (uri (pypi-uri "pytest-warnings" version))
14212 (sha256
14213 (base32
14214 "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
14215 (build-system python-build-system)
14216 (propagated-inputs
14217 `(("pytest" ,python-pytest-3.0)))
14218 (home-page "https://github.com/fschulze/pytest-warnings")
14219 (synopsis "Pytest plugin to list Python warnings in pytest report")
14220 (description
14221 "Python-pytest-warnings is a pytest plugin to list Python warnings in
14222 pytest report.")
14223 (license license:expat)))
14224
14225 (define-public python2-pytest-warnings
14226 (package-with-python2 python-pytest-warnings))
14227
14228 (define-public python-pytest-catchlog
14229 (package
14230 (name "python-pytest-catchlog")
14231 (version "1.2.2")
14232 (source
14233 (origin
14234 (method url-fetch)
14235 (uri (pypi-uri "pytest-catchlog" version ".zip"))
14236 (sha256
14237 (base32
14238 "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
14239 (build-system python-build-system)
14240 (native-inputs
14241 `(("unzip" ,unzip)))
14242 (propagated-inputs
14243 `(("pytest" ,python-pytest-3.0)))
14244 (home-page "https://github.com/eisensheng/pytest-catchlog")
14245 (synopsis "Pytest plugin to catch log messages")
14246 (description
14247 "Python-pytest-catchlog is a pytest plugin to catch log messages. This is
14248 a fork of pytest-capturelog.")
14249 (license license:expat)))
14250
14251 (define-public python2-pytest-catchlog
14252 (package-with-python2 python-pytest-catchlog))
14253
14254 (define-public python-utils
14255 (package
14256 (name "python-utils")
14257 (version "2.1.0")
14258 (source (origin
14259 (method url-fetch)
14260 (uri (pypi-uri "python-utils" version))
14261 (sha256
14262 (base32
14263 "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
14264 (build-system python-build-system)
14265 (native-inputs
14266 `(("pytest-runner" ,python-pytest-runner)
14267 ("pytest" ,python-pytest)
14268 ("six" ,python-six)))
14269 (home-page "https://github.com/WoLpH/python-utils")
14270 (synopsis "Convenient utilities not included with the standard Python install")
14271 (description
14272 "Python Utils is a collection of small Python functions and classes which
14273 make common patterns shorter and easier.")
14274 (license license:bsd-2)))
14275
14276 (define-public python2-utils
14277 (package-with-python2 python-utils))
14278
14279 (define-public python-webassets
14280 (package
14281 (name "python-webassets")
14282 (version "0.12.1")
14283 (source
14284 (origin
14285 (method url-fetch)
14286 (uri (pypi-uri "webassets" version))
14287 (sha256
14288 (base32
14289 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
14290 (build-system python-build-system)
14291 (native-inputs
14292 `(("python-jinja2" ,python-jinja2)
14293 ("python-mock" ,python-mock)
14294 ("python-nose" ,python-nose)
14295 ("python-pytest" ,python-pytest)))
14296 (home-page "https://github.com/miracle2k/webassets")
14297 (synopsis "Media asset management")
14298 (description "Merges, minifies and compresses Javascript and CSS files,
14299 supporting a variety of different filters, including YUI, jsmin, jspacker or
14300 CSS tidy. Also supports URL rewriting in CSS files.")
14301 (license license:bsd-2)))
14302
14303 (define-public python-sphinx-me
14304 (package
14305 (name "python-sphinx-me")
14306 (version "0.3")
14307 (source
14308 (origin
14309 (method url-fetch)
14310 (uri (pypi-uri "sphinx-me" version))
14311 (sha256
14312 (base32
14313 "06jzgp213zihnvpcy2y5jy3ykid3apc2ncp2pg6a2g05lhiziglq"))))
14314 (build-system python-build-system)
14315 (home-page "https://github.com/stephenmcd/sphinx-me")
14316 (synopsis "Create a Sphinx documentation shell")
14317 (description
14318 "Create a Sphinx documentation shell for your project and include the
14319 README file as the documentation index. It handles extracting the required
14320 meta data such as the project name, author and version from your project for
14321 use in your Sphinx docs.")
14322 (license license:bsd-2)))
14323
14324 (define-public python2-sphinx-me
14325 (package-with-python2 python-sphinx-me))
14326
14327 (define-public python-cssmin
14328 (package
14329 (name "python-cssmin")
14330 (version "0.2.0")
14331 (source
14332 (origin
14333 (method url-fetch)
14334 (uri (pypi-uri "cssmin" version))
14335 (sha256
14336 (base32
14337 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
14338 (build-system python-build-system)
14339 (home-page "https://github.com/zacharyvoase/cssmin")
14340 (synopsis "Python port of the YUI CSS Compressor")
14341 (description "Python port of the YUI CSS Compressor.")
14342 (license (list license:expat license:bsd-3))))
14343
14344 (define-public python2-cssmin
14345 (package-with-python2 python-cssmin))
14346
14347 (define-public python-diff-match-patch
14348 (package
14349 (name "python-diff-match-patch")
14350 (version "20121119")
14351 (source
14352 (origin
14353 (method url-fetch)
14354 (uri (pypi-uri "diff-match-patch" version))
14355 (sha256
14356 (base32
14357 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14358 (build-system python-build-system)
14359 (home-page "https://code.google.com/p/google-diff-match-patch")
14360 (synopsis "Synchronize plain text")
14361 (description "Diff Match and Patch libraries offer robust algorithms to
14362 perform the operations required for synchronizing plain text.")
14363 (license license:asl2.0)))
14364
14365 (define-public python2-diff-match-patch
14366 (package-with-python2 python-diff-match-patch))
14367
14368 (define-public python-dirsync
14369 (package
14370 (name "python-dirsync")
14371 (version "2.2.2")
14372 (source
14373 (origin
14374 (method url-fetch)
14375 (uri (pypi-uri "dirsync" version ".zip"))
14376 (sha256
14377 (base32
14378 "1hcdvmkwd5512zbxpin0k7bx5bkgzy3swjx7d0kj1y45af6r75v2"))))
14379 (build-system python-build-system)
14380 (native-inputs
14381 `(("unzip" ,unzip)))
14382 (propagated-inputs
14383 `(("six" ,python-six)))
14384 (home-page "https://bitbucket.org/tkhyn/dirsync")
14385 (synopsis "Advanced directory tree synchronisation tool")
14386 (description "Advanced directory tree synchronisation tool.")
14387 (license license:expat)))
14388
14389 (define-public python2-dirsync
14390 (package-with-python2 python-dirsync))
14391
14392 (define-public python-nosexcover
14393 (package
14394 (name "python-nosexcover")
14395 (version "1.0.11")
14396 (source (origin
14397 (method url-fetch)
14398 (uri (pypi-uri "nosexcover" version))
14399 (sha256
14400 (base32
14401 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
14402 (build-system python-build-system)
14403 (propagated-inputs
14404 `(("python-coverage" ,python-coverage)
14405 ("python-nose" ,python-nose)))
14406 (home-page "http://github.com/cmheisel/nose-xcover")
14407 (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
14408 (description "Nose-xcover is a companion to the built-in
14409 @code{nose.plugins.cover}. This plugin will write out an XML coverage report
14410 to a file named coverage.xml.
14411
14412 It will honor all the options you pass to the Nose coverage plugin,
14413 especially -cover-package.")
14414 (license license:expat)))
14415
14416 (define-public python2-nosexcover
14417 (package-with-python2 python-nosexcover))
14418
14419 (define-public python-elasticsearch
14420 (package
14421 (name "python-elasticsearch")
14422 (version "1.0.0")
14423 (source
14424 (origin
14425 (method url-fetch)
14426 (uri (pypi-uri "elasticsearch" version))
14427 (sha256
14428 (base32
14429 "1sdw1r05cw7ihnmng8ra9v968fj7bq6sji8i1dikymsnkcpgc69g"))))
14430 (build-system python-build-system)
14431 (native-inputs
14432 `(("python-mock" ,python-mock)
14433 ("python-nosexcover" ,python-nosexcover)
14434 ("python-pyaml" ,python-pyaml)
14435 ("python-requests" ,python-requests)))
14436 (propagated-inputs
14437 `(("urllib3" ,python-urllib3)))
14438 (arguments
14439 ;; tests require the test_elasticsearch module but it is not distributed.
14440 `(#:tests? #f))
14441 (home-page "https://github.com/elastic/elasticsearch-py")
14442 (synopsis "Low-level client for Elasticsearch")
14443 (description "Official low-level client for Elasticsearch. Its goal is to
14444 provide common ground for all Elasticsearch-related code in Python; because of
14445 this it tries to be opinion-free and very extendable.")
14446 (license license:expat)))
14447
14448 (define-public python2-elasticsearch
14449 (package-with-python2 python-elasticsearch))
14450
14451 (define-public python-levenshtein
14452 (package
14453 (name "python-levenshtein")
14454 (version "0.12.0")
14455 (source
14456 (origin
14457 (method url-fetch)
14458 (uri (pypi-uri "python-Levenshtein" version))
14459 (sha256
14460 (base32
14461 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14462 (build-system python-build-system)
14463 (home-page "https://github.com/ztane/python-Levenshtein")
14464 (synopsis "Fast computation of Levenshtein distance and string similarity")
14465 (description
14466 "The Levenshtein Python C extension module contains functions for fast computation of
14467 @enumerate
14468 @item Levenshtein (edit) distance, and edit operations
14469 @item string similarity
14470 @item approximate median strings, and generally string averaging
14471 @item string sequence and set similarity
14472 @end enumerate
14473 It supports both normal and Unicode strings.")
14474 (license license:gpl2+)))
14475
14476 (define-public python2-levenshtein
14477 (package-with-python2 python-levenshtein))
14478
14479 (define-public python-scandir
14480 (package
14481 (name "python-scandir")
14482 (version "1.4")
14483 (source
14484 (origin
14485 (method url-fetch)
14486 (uri (pypi-uri "scandir" version))
14487 (sha256
14488 (base32 "0yjrgp0mxp3d8bjkq2m1ac2ys8n76wykksvgyjrnil9gr3fx7a5d"))))
14489 (build-system python-build-system)
14490 (home-page "https://github.com/benhoyt/scandir")
14491 (synopsis "Directory iteration function")
14492 (description
14493 "Directory iteration function like os.listdir(), except that instead of
14494 returning a list of bare filenames, it yields DirEntry objects that include
14495 file type and stat information along with the name. Using scandir() increases
14496 the speed of os.walk() by 2-20 times (depending on the platform and file
14497 system) by avoiding unnecessary calls to os.stat() in most cases.")
14498 (license license:bsd-3)))
14499
14500 (define-public python2-scandir
14501 (package-with-python2 python-scandir))
14502
14503 (define-public python2-stemming
14504 (package
14505 (name "python2-stemming")
14506 (version "1.0.1")
14507 (source
14508 (origin
14509 (method url-fetch)
14510 (uri (pypi-uri "stemming" version))
14511 (sha256
14512 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14513 (build-system python-build-system)
14514 (arguments
14515 `(#:python ,python-2))
14516 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14517 (synopsis "Python implementations of various stemming algorithms")
14518 (description
14519 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14520 stemming algorithms for English. These implementations are straightforward and
14521 efficient, unlike some Python versions of the same algorithms available on the
14522 Web. This package is an extraction of the stemming code included in the Whoosh
14523 search engine.")
14524 (license license:public-domain)))
14525
14526 (define-public python-factory-boy
14527 (package
14528 (name "python-factory-boy")
14529 (version "2.8.1")
14530 (source
14531 (origin
14532 (method url-fetch)
14533 (uri (pypi-uri "factory_boy" version))
14534 (sha256
14535 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14536 (build-system python-build-system)
14537 (arguments
14538 ;; Tests are not included in the tarball.
14539 `(#:tests? #f))
14540 (propagated-inputs
14541 `(("faker" ,python-faker)))
14542 (home-page "https://github.com/benhoyt/scandir")
14543 (synopsis "Versatile test fixtures replacement")
14544 (description
14545 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14546
14547 As a fixtures replacement tool, it aims to replace static, hard to maintain
14548 fixtures with easy-to-use factories for complex object.
14549
14550 Instead of building an exhaustive test setup with every possible combination
14551 of corner cases, factory_boy allows you to use objects customized for the
14552 current test, while only declaring the test-specific fields")
14553 (license license:expat)))
14554
14555 (define-public python2-factory-boy
14556 (package-with-python2 python-factory-boy))
14557
14558 (define-public python-translate-toolkit
14559 (package
14560 (name "python-translate-toolkit")
14561 (version "2.1.0")
14562 (source
14563 (origin
14564 (method url-fetch)
14565 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14566 (sha256
14567 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14568 (build-system python-build-system)
14569 (native-inputs
14570 `(("python-pytest" ,python-pytest)
14571 ("python-sphinx" ,python-sphinx)))
14572 (propagated-inputs
14573 `(("python-babel" ,python-babel)
14574 ("python-beautifulsoup4" ,python-beautifulsoup4)
14575 ("python-chardet" ,python-chardet)
14576 ("python-diff-match-patch" ,python-diff-match-patch)
14577 ("python-levenshtein" ,python-levenshtein)
14578 ("python-lxml" ,python-lxml)
14579 ("python-six" ,python-six)
14580 ("python-vobject" ,python-vobject)
14581 ("python-pyyaml" ,python-pyyaml)))
14582 (arguments
14583 ;; TODO: tests are not run, because they end with
14584 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14585 ;; 'parse_funcs'
14586 ;; during test setup.
14587 `(#:tests? #f))
14588 (home-page "http://toolkit.translatehouse.org")
14589 (synopsis "Tools and API for translation and localization engineering")
14590 (description
14591 "Tools and API for translation and localization engineering. It contains
14592 several utilities, as well as an API for building localization tools.")
14593 (license license:gpl2+)))
14594
14595 (define-public python2-translate-toolkit
14596 (package-with-python2 python-translate-toolkit))
14597
14598 (define-public python-mysqlclient
14599 (package
14600 (name "python-mysqlclient")
14601 (version "1.3.10")
14602 (source
14603 (origin
14604 (method url-fetch)
14605 (uri (pypi-uri "mysqlclient" version))
14606 (sha256
14607 (base32
14608 "0qkj570x4rbsblji6frvsvp2v1ap32dqzj1lq62zp9515ffsyaj5"))))
14609 (build-system python-build-system)
14610 (native-inputs
14611 `(("mariadb" ,mariadb)
14612 ("nose" ,python-nose)
14613 ("mock" ,python-mock)
14614 ("py.test" ,python-pytest)))
14615 (inputs
14616 `(("mysql" ,mysql)
14617 ("libz" ,zlib)
14618 ("openssl" ,openssl)))
14619 (home-page "https://github.com/PyMySQL/mysqlclient-python")
14620 (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
14621 (description "MySQLdb is an interface to the popular MySQL database server
14622 for Python. The design goals are:
14623 @enumerate
14624 @item Compliance with Python database API version 2.0 [PEP-0249],
14625 @item Thread-safety,
14626 @item Thread-friendliness (threads will not block each other).
14627 @end enumerate")
14628 (license license:gpl2)))
14629
14630 (define-public python2-mysqlclient
14631 (package-with-python2 python-mysqlclient))
14632
14633 (define-public python-hiredis
14634 (package
14635 (name "python-hiredis")
14636 (version "0.2.0")
14637 (source
14638 (origin
14639 (method url-fetch)
14640 (uri (pypi-uri "hiredis" version))
14641 (sha256
14642 (base32
14643 "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
14644 (build-system python-build-system)
14645 (arguments
14646 ;; no tests
14647 `(#:tests? #f))
14648 (home-page "https://github.com/redis/hiredis-py")
14649 (synopsis "Python extension that wraps protocol parsing code in hiredis")
14650 (description "Python-hiredis is a python extension that wraps protocol
14651 parsing code in hiredis. It primarily speeds up parsing of multi bulk replies.")
14652 (license license:bsd-3)))
14653
14654 (define-public python2-hiredis
14655 (package-with-python2 python-hiredis))
14656
14657 (define-public python-fakeredis
14658 (package
14659 (name "python-fakeredis")
14660 (version "0.8.2")
14661 (source
14662 (origin
14663 (method url-fetch)
14664 (uri (pypi-uri "fakeredis" version))
14665 (sha256
14666 (base32
14667 "0zncahj3byyasyfx9i7k991ph0n0lq8v3a21pqri5qxn9564bk9r"))))
14668 (build-system python-build-system)
14669 (arguments
14670 ;; no tests
14671 `(#:tests? #f))
14672 (home-page "https://github.com/jamesls/fakeredis")
14673 (synopsis "Fake implementation of redis API for testing purposes")
14674 (description "Fakeredis is a pure python implementation of the redis-py
14675 python client that simulates talking to a redis server. This was created for a
14676 single purpose: to write unittests. Setting up redis is not hard, but many time
14677 you want to write unittests that do not talk to an external server (such as
14678 redis). This module now allows tests to simply use this module as a reasonable
14679 substitute for redis.")
14680 (license license:bsd-3)))
14681
14682 (define-public python2-fakeredis
14683 (package-with-python2 python-fakeredis))
14684
14685 (define-public python-behave-web-api
14686 (package
14687 (name "python-behave-web-api")
14688 (version "1.0.6")
14689 (source
14690 (origin
14691 (method url-fetch)
14692 (uri (pypi-uri "behave-web-api" version))
14693 (sha256
14694 (base32
14695 "03kpq2xsy1gab3jy0dccbxlsg7vwfy4lagss0qldwmx3xz6b3i19"))))
14696 (build-system python-build-system)
14697 (arguments
14698 `(#:phases
14699 (modify-phases %standard-phases
14700 (add-after 'unpack 'fix-dependencies
14701 (lambda _
14702 (substitute* "setup.py"
14703 (("'wheel'") "") ; We don't use it.
14704 (("'ordereddict==1.1'") ""))))))) ; Python >= 2.7 has it built-in.
14705 (propagated-inputs
14706 `(("behave" ,behave)
14707 ("python-requests" ,python-requests)))
14708 (home-page "https://github.com/jefersondaniel/behave-web-api")
14709 (synopsis "Provides testing for JSON APIs with Behave for Python")
14710 (description "This package provides testing utility modules for testing
14711 JSON APIs with Behave.")
14712 (license license:expat)))
14713
14714 (define-public python2-behave-web-api
14715 (package-with-python2 python-behave-web-api))
14716
14717 (define-public python-flask-script
14718 (package
14719 (name "python-flask-script")
14720 (version "2.0.5")
14721 (source
14722 (origin
14723 (method url-fetch)
14724 (uri (pypi-uri "Flask-Script" version))
14725 (sha256
14726 (base32
14727 "0zqh2yq8zk7m9b4xw1ryqmrljkdigfb3hk5155a3b5hkfnn6xxyf"))))
14728 (build-system python-build-system)
14729 (propagated-inputs
14730 `(("python-flask" ,python-flask)
14731 ("python-argcomplete" ,python-argcomplete)
14732 ("python-werkzeug" ,python-werkzeug)))
14733 (native-inputs
14734 `(("python-pytest" ,python-pytest)))
14735 (home-page
14736 "http://github.com/smurfix/flask-script")
14737 (synopsis "Scripting support for Flask")
14738 (description "The Flask-Script extension provides support for writing
14739 external scripts in Flask. This includes running a development server,
14740 a customised Python shell, scripts to set up your database, cronjobs,
14741 and other command-line tasks that belong outside the web application
14742 itself.")
14743 (license license:bsd-3)))
14744
14745 (define-public python2-flask-script
14746 (package-with-python2 python-flask-script))
14747
14748 (define-public python-flask-migrate
14749 (package
14750 (name "python-flask-migrate")
14751 (version "2.0.3")
14752 (source
14753 (origin
14754 (method url-fetch)
14755 (uri (pypi-uri "Flask-Migrate" version))
14756 (sha256
14757 (base32
14758 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
14759 (build-system python-build-system)
14760 (propagated-inputs
14761 `(("python-flask" ,python-flask)
14762 ("python-alembic" ,python-alembic)
14763 ("python-sqlalchemy" ,python-sqlalchemy)
14764 ("python-flask-script" ,python-flask-script)
14765 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
14766 (home-page "http://github.com/miguelgrinberg/flask-migrate/")
14767 (synopsis "SQLAlchemy database migrations for Flask programs using
14768 Alembic")
14769 (description "This package contains SQLAlchemy database migration tools
14770 for Flask programs that are using @code{python-alembic}.")
14771 (license license:expat)))
14772
14773 (define-public python2-flask-migrate
14774 (package-with-python2 python-flask-migrate))
14775
14776 (define-public python-packaging
14777 (package
14778 (name "python-packaging")
14779 (version "16.8")
14780 (source
14781 (origin
14782 (method url-fetch)
14783 (uri (pypi-uri "packaging" version))
14784 (sha256
14785 (base32
14786 "17k1xbjshackwvbsnxqixbph8rbqhz4bf4g3al5xyzhavxgq6l2x"))))
14787 (build-system python-build-system)
14788 (native-inputs
14789 `(("python-pretend" ,python-pretend)
14790 ("python-pytest" ,python-pytest)))
14791 (propagated-inputs
14792 `(("python-pyparsing" ,python-pyparsing)
14793 ("python-six" ,python-six)))
14794 (home-page "https://github.com/pypa/packaging")
14795 (synopsis "Core utilities for Python packages")
14796 (description "Packaging is a Python module for dealing with Python packages.
14797 It offers an interface for working with package versions, names, and dependency
14798 information.")
14799 ;; From 'LICENSE': This software is made available under the terms of
14800 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14801 ;; Contributions to this software is made under the terms of *both* these
14802 ;; licenses.
14803 (license (list license:asl2.0 license:bsd-2))))
14804
14805 (define-public python2-packaging
14806 (package-with-python2 python-packaging))
14807
14808 (define-public python-sql
14809 (package
14810 (name "python-sql")
14811 (version "0.9")
14812 (source
14813 (origin
14814 (method url-fetch)
14815 (uri (pypi-uri "python-sql" version))
14816 (sha256
14817 (base32
14818 "0p6kaqj02vz0habmdx37zjk6hjxdfm8aw737zs059vvpr70ird87"))))
14819 (build-system python-build-system)
14820 (home-page "https://python-sql.tryton.org/")
14821 (synopsis "Library to write SQL queries in a pythonic way")
14822 (description "@code{python-sql} is a library to write SQL queries, that
14823 transforms idiomatic python function calls to well-formed SQL queries.")
14824 (license license:bsd-3)))
14825
14826 (define-public python2-sql
14827 (package-with-python2 python-sql))
14828
14829 (define-public python-genshi
14830 (package
14831 (name "python-genshi")
14832 (version "0.7")
14833 (source
14834 (origin
14835 (method url-fetch)
14836 (uri (string-append
14837 "https://ftp.edgewall.org/pub/genshi/Genshi-"
14838 version ".tar.gz"))
14839 (patches
14840 (search-patches
14841 ;; The first 4 patches are in the master branch upstream.
14842 ;; See this as a reference https://genshi.edgewall.org/ticket/582
14843 ;; The last 2 are NOT in any branch.
14844 ;; They were sent as attachments to a ticket opened at
14845 ;; https://genshi.edgewall.org/ticket/602#no1
14846 "python-genshi-stripping-of-unsafe-script-tags.patch"
14847 "python-genshi-disable-speedups-on-python-3.3.patch"
14848 "python-genshi-isstring-helper.patch"
14849 "python-genshi-add-support-for-python-3.4-AST.patch"
14850 "python-genshi-fix-tests-on-python-3.5.patch"
14851 "python-genshi-buildable-on-python-2.7.patch"))
14852 (sha256
14853 (base32
14854 "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
14855 (build-system python-build-system)
14856 (home-page "https://genshi.edgewall.org/")
14857 (synopsis "Toolkit for generation of output for the web")
14858 (description "Genshi is a Python library that provides an integrated set
14859 of components for parsing, generating, and processing HTML, XML or other
14860 textual content for output generation on the web.")
14861 (license license:bsd-3)))
14862
14863 ;; The linter here claims that patch file names should start with the package
14864 ;; name. But, in this case the patches are inherited from python-genshi with
14865 ;; the "python-genshi-" prefix instead of "python2-genshi-".
14866 (define-public python2-genshi
14867 (package-with-python2 python-genshi))
14868
14869 (define-public python-relatorio
14870 (package
14871 (name "python-relatorio")
14872 (version "0.6.4")
14873 (source
14874 (origin
14875 (method url-fetch)
14876 (uri (pypi-uri "relatorio" version))
14877 (sha256
14878 (base32
14879 "0lincq79mzgazwd9gh41dybjh9c3n87r83pl8nk3j79aihyfk84z"))))
14880 (build-system python-build-system)
14881 (propagated-inputs
14882 `(("python-lxml" ,python-lxml)
14883 ("python-genshi" ,python-genshi)))
14884 (home-page "https://relatorio.tryton.org/")
14885 (synopsis "Templating library able to output ODT and PDF files")
14886 (description "Relatorio is a templating library which provides a way to
14887 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14888 for more filetypes can be easily added by creating plugins for them.")
14889 (license license:gpl3+)))
14890
14891 (define-public python2-relatorio
14892 (package-with-python2 python-relatorio))
14893
14894 (define-public python-radon
14895 (package
14896 (name "python-radon")
14897 (version "1.5.0")
14898 (source
14899 (origin
14900 (method url-fetch)
14901 (uri (pypi-uri "radon" version))
14902 (sha256
14903 (base32
14904 "1h6jv36am0i827182a04ki6291lyx4kp957xfr5njgprj4nd0qsl"))))
14905 (build-system python-build-system)
14906 (propagated-inputs
14907 `(("python-colorama" ,python-colorama)
14908 ("python-flake8-polyfill" ,python-flake8-polyfill)
14909 ("python-mando" ,python-mando-0.3.1)))
14910 (native-inputs
14911 `(("python-flake8" ,python-flake8)
14912 ("python-tox" ,python-tox)
14913 ("python-pytest" ,python-pytest)
14914 ("python-paramunittest" ,python-paramunittest)))
14915 (home-page "https://radon.readthedocs.org/")
14916 (synopsis "Code Metrics in Python")
14917 (description "Radon is a Python tool which computes various code metrics.
14918 Supported metrics are:
14919 @itemize @bullet
14920 @item raw metrics: SLOC, comment lines, blank lines, &c.
14921 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14922 @item Halstead metrics (all of them)
14923 @item the Maintainability Index (a Visual Studio metric)
14924 @end itemize")
14925 (license license:expat)))
14926
14927 (define-public python2-radon
14928 (package-with-python2 python-radon))
14929
14930 (define-public python-sure
14931 (package
14932 (name "python-sure")
14933 (version "1.4.6")
14934 (source
14935 (origin
14936 (method url-fetch)
14937 (uri (pypi-uri "sure" version))
14938 (sha256
14939 (base32
14940 "1iyqsy2d6radi88g1qf0lziy5b39h5cpb3g5jiqyb4xi46ig3x1z"))))
14941 (build-system python-build-system)
14942 (propagated-inputs
14943 `(("python-mock" ,python-mock)
14944 ("python-six" ,python-six)))
14945 (native-inputs
14946 `(("python-nose" ,python-nose)))
14947 (home-page "https://github.com/gabrielfalcao/sure")
14948 (synopsis "Automated testing library in python for python")
14949 (description
14950 "Sure is a python library that leverages a DSL for writing assertions.
14951 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14952 (license license:gpl3+)))
14953
14954 (define-public python2-sure
14955 (package-with-python2 python-sure))
14956
14957 (define-public python2-couleur
14958 ;; This package does not seem to support python3 at all, hence,
14959 ;; only the python2 variant definition is provided.
14960 (package
14961 (name "python2-couleur")
14962 (version "0.6.2")
14963 (source
14964 (origin
14965 (method url-fetch)
14966 (uri (pypi-uri "couleur" version))
14967 (sha256
14968 (base32
14969 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14970 (build-system python-build-system)
14971 (arguments
14972 `(#:python ,python-2))
14973 (home-page "https://github.com/gabrielfalcao/couleur")
14974 (synopsis
14975 "ANSI terminal tool for python, colored shell and other handy fancy features")
14976 (description
14977 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14978 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14979 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14980 ;; https://github.com/gabrielfalcao/couleur/issues/11
14981 (license license:lgpl3+)))
14982
14983 (define-public python-misaka
14984 (package
14985 (name "python-misaka")
14986 (version "2.1.0")
14987 (source
14988 (origin
14989 (method url-fetch)
14990 (uri (pypi-uri "misaka" version))
14991 (sha256
14992 (base32
14993 "1yqrq3a5rracirmvk52n28nn6ckdaz897gnigv89a9gmyn87sqw7"))))
14994 (build-system python-build-system)
14995 (arguments
14996 `(;; Line 37 of setup.py calls self.run_command('develop')
14997 ;; in the 'check' phase. This command seems to be trying
14998 ;; to write to
14999 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
15000 ;; for which it does not have the permission to write.
15001 #:tests? #f))
15002 (propagated-inputs
15003 `(("python-cffi" ,python-cffi)))
15004 (home-page "https://github.com/FSX/misaka")
15005 (synopsis "Python binding for Hoedown")
15006 (description
15007 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
15008 library written in C. It features a fast HTML renderer and functionality to make custom
15009 renderers (e.g. man pages or LaTeX).")
15010 (license license:expat)))
15011
15012 (define-public python2-misaka
15013 (package-with-python2 python-misaka))
15014
15015 (define-public python2-steadymark
15016 ;; This is forced into being a python2 only variant
15017 ;; due to its dependence on couleur that has no support
15018 ;; for python3
15019 (package
15020 (name "python2-steadymark")
15021 (version "0.7.3")
15022 (source
15023 (origin
15024 (method url-fetch)
15025 (uri (pypi-uri "steadymark" version))
15026 (sha256
15027 (base32
15028 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
15029 (build-system python-build-system)
15030 (native-inputs
15031 `(("python-couleur" ,python2-couleur)
15032 ("python-sure" ,python2-sure)
15033 ("python-misaka" ,python2-misaka)))
15034 (arguments
15035 `(#:python ,python-2
15036 #:phases
15037 (modify-phases %standard-phases
15038 (add-before 'build 'patch-setup-py
15039 (lambda _
15040 ;; Update requirements from dependency==version
15041 ;; to dependency>=version
15042 (substitute* "setup.py"
15043 (("==") ">="))
15044 #t)))))
15045 (home-page "https://github.com/gabrielfalcao/steadymark")
15046 (synopsis "Markdown-based test runner for python")
15047 (description
15048 "@code{Steadymark} allows documentation to be written in github-flavoured
15049 markdown. The documentation may contain snippets of code surrounded by python
15050 code blocks and @code{Steadymark} will find these snippets and run them, making
15051 sure that there are no old malfunctional examples in the documentation examples.")
15052 (license license:expat)))
15053
15054 (define-public python-nose-randomly
15055 (package
15056 (name "python-nose-randomly")
15057 (version "1.2.5")
15058 (source
15059 (origin
15060 (method url-fetch)
15061 (uri (pypi-uri "nose-randomly" version))
15062 (sha256
15063 (base32
15064 "1cw9dlr1zh3w4i438kin7z0rm8092ki52hayisyc43h9pcplq7rn"))))
15065 (build-system python-build-system)
15066 (native-inputs
15067 `(("python-nose" ,python-nose)
15068 ("python-numpy" ,python-numpy)))
15069 (home-page "https://github.com/adamchainz/nose-randomly")
15070 (synopsis
15071 "Nose plugin to randomly order tests and control random.seed")
15072 (description
15073 "This is a @code{Nose} plugin to randomly order tests which can be quite
15074 powerful in discovering hidden flaws in the tests themselves, while helping to
15075 reduce inter-test dependencies. It also helps in controlling @code{random.seed},
15076 by resetting it to a repeatable number for each test, enabling the tests to
15077 create data based on random numbers and yet remain repeatable.")
15078 (license license:bsd-3)))
15079
15080 (define-public python2-nose-randomly
15081 (package-with-python2 python-nose-randomly))
15082
15083 (define-public python-jsonpointer
15084 (package
15085 (name "python-jsonpointer")
15086 (version "1.10")
15087 (source
15088 (origin
15089 (method url-fetch)
15090 (uri (pypi-uri "jsonpointer" version))
15091 (sha256
15092 (base32
15093 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
15094 (build-system python-build-system)
15095 (home-page "https://github.com/stefankoegl/python-json-pointer")
15096 (synopsis "Identify specific nodes in a JSON document")
15097 (description "@code{jsonpointer} allows you to access specific nodes
15098 by path in a JSON document (see RFC 6901).")
15099 (license license:bsd-3)))
15100
15101 (define-public python2-jsonpointer
15102 (package-with-python2 python-jsonpointer))
15103
15104 (define-public python-rfc3987
15105 (package
15106 (name "python-rfc3987")
15107 (version "1.3.7")
15108 (source
15109 (origin
15110 (method url-fetch)
15111 (uri (pypi-uri "rfc3987" version))
15112 (sha256
15113 (base32
15114 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
15115 (build-system python-build-system)
15116 (home-page "http://pypi.python.org/pypi/rfc3987")
15117 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
15118 (description "@code{rfc3987} provides routines for parsing and
15119 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
15120 (license license:gpl3+)))
15121
15122 (define-public python2-rfc3987
15123 (package-with-python2 python-rfc3987))
15124
15125 (define-public python-validate-email
15126 (package
15127 (name "python-validate-email")
15128 (version "1.3")
15129 (source
15130 (origin
15131 (method url-fetch)
15132 (uri (pypi-uri "validate_email" version))
15133 (sha256
15134 (base32
15135 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
15136 (build-system python-build-system)
15137 (home-page "http://github.com/syrusakbary/validate_email")
15138 (synopsis "Verifies if an email address is valid and really exists")
15139 (description "@code{validate_email} can be used to verify if an email
15140 address is valid and really exists.")
15141 (license license:lgpl3+)))
15142
15143 (define-public python2-validate-email
15144 (package-with-python2 python-validate-email))
15145
15146 (define-public python-flex
15147 (package
15148 (name "python-flex")
15149 (version "6.10.0")
15150 (source
15151 (origin
15152 (method url-fetch)
15153 (uri (pypi-uri "flex" version))
15154 (sha256
15155 (base32
15156 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
15157 (build-system python-build-system)
15158 (propagated-inputs
15159 `(("python-click" ,python-click)
15160 ("python-iso8601" ,python-iso8601)
15161 ("python-jsonpointer" ,python-jsonpointer)
15162 ("python-pyyaml" ,python-pyyaml)
15163 ("python-requests" ,python-requests)
15164 ("python-rfc3987" ,python-rfc3987)
15165 ("python-six" ,python-six)
15166 ("python-validate-email" ,python-validate-email)))
15167 (home-page "https://github.com/pipermerriam/flex")
15168 (synopsis "Validates Swagger schemata")
15169 (description "@code{flex} can be used to validate Swagger schemata.")
15170 (license license:bsd-3)))
15171
15172 (define-public python2-flex
15173 (package-with-python2 python-flex))
15174
15175 (define-public python-marshmallow
15176 (package
15177 (name "python-marshmallow")
15178 (version "3.0.0b2")
15179 (source
15180 (origin
15181 (method url-fetch)
15182 (uri (pypi-uri "marshmallow" version))
15183 (sha256
15184 (base32
15185 "11bnpvfdbczr74177p295zbkdrax2cahvbj5bqhhlprgz2xxi5d9"))))
15186 (build-system python-build-system)
15187 (propagated-inputs
15188 `(("python-dateutil" ,python-dateutil)
15189 ("python-simplejson" ,python-simplejson)))
15190 (native-inputs
15191 `(("python-pytest-3.0" ,python-pytest-3.0)
15192 ("python-pytz" ,python-pytz)))
15193 (home-page "https://github.com/marshmallow-code/marshmallow")
15194 (synopsis "Convert complex datatypes to and from native
15195 Python datatypes.")
15196 (description "@code{marshmallow} provides a library for converting
15197 complex datatypes to and from native Python datatypes.")
15198 (license license:expat)))
15199
15200 (define-public python2-marshmallow
15201 (package-with-python2 python-marshmallow))
15202
15203 (define-public python-bottle
15204 (package
15205 (name "python-bottle")
15206 (version "0.12.13")
15207 (source
15208 (origin
15209 (method url-fetch)
15210 (uri (pypi-uri "bottle" version))
15211 (sha256
15212 (base32
15213 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
15214 (build-system python-build-system)
15215 (home-page "http://bottlepy.org/")
15216 (synopsis "WSGI framework for small web-applications.")
15217 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
15218 (license license:expat)))
15219
15220 (define-public python2-bottle
15221 (package-with-python2 python-bottle))
15222
15223 (define-public python-apispec
15224 (package
15225 (name "python-apispec")
15226 (version "0.22.0")
15227 (source
15228 (origin
15229 (method url-fetch)
15230 (uri (pypi-uri "apispec" version))
15231 (sha256
15232 (base32
15233 "0y3jxmgp2d24am3hxl40f5rw9abb0r8037sagax3dv64h4n1azwq"))))
15234 (build-system python-build-system)
15235 (propagated-inputs
15236 `(("python-pyyaml" ,python-pyyaml)))
15237 (native-inputs
15238 `(("python-pytest-3.0" ,python-pytest-3.0)
15239 ("python-flask" ,python-flask)
15240 ("python-marshmallow" ,python-marshmallow)
15241 ("python-tornado" ,python-tornado)
15242 ("python-bottle" ,python-bottle)
15243 ("python-mock" ,python-mock)))
15244 (home-page "https://github.com/marshmallow-code/apispec")
15245 (synopsis "Swagger 2.0 API specification generator")
15246 (description "@code{python-apispec} is a pluggable API specification
15247 generator. Currently supports the OpenAPI specification (f.k.a.
15248 Swagger 2.0).")
15249 (license license:expat)))
15250
15251 (define-public python2-apispec
15252 (package-with-python2 python-apispec))
15253
15254 (define-public python-flasgger
15255 (package
15256 (name "python-flasgger")
15257 (version "0.6.3")
15258 (source
15259 (origin
15260 (method url-fetch)
15261 (uri (string-append "https://github.com/rochacbruno/flasgger/archive/"
15262 version ".tar.gz"))
15263 (file-name (string-append name "-" version ".tar.gz"))
15264 (sha256
15265 (base32
15266 "1gqzlm0rb55fdpsy5ipkganlx9cnpi454fqyycr03jm22zql14ay"))))
15267 (build-system python-build-system)
15268 (arguments
15269 `(#:phases
15270 (modify-phases %standard-phases
15271 (replace 'check
15272 (lambda* (#:key inputs outputs #:allow-other-keys)
15273 (substitute* "Makefile"
15274 (("flake8 flasgger --ignore=F403")
15275 "flake8 flasgger --ignore=E731,F403"))
15276 (setenv "PYTHONPATH" (string-append (getcwd)
15277 ":"
15278 (getenv "PYTHONPATH")))
15279 (zero? (system* "py.test")))))))
15280 (propagated-inputs
15281 `(("python-flask" ,python-flask)
15282 ("python-pyyaml" ,python-pyyaml)
15283 ("python-jsonschema" ,python-jsonschema)
15284 ("python-mistune" ,python-mistune)
15285 ("python-six" ,python-six)))
15286 (native-inputs
15287 `(("python-decorator" ,python-decorator)
15288 ("python-flake8" ,python-flake8)
15289 ("python-flask-restful" ,python-flask-restful)
15290 ("python-flex" ,python-flex)
15291 ("python-pytest-3.0" ,python-pytest-3.0)
15292 ("python-pytest-cov" ,python-pytest-cov)
15293 ("python-marshmallow" ,python-marshmallow)
15294 ("python-apispec" ,python-apispec)))
15295 (home-page "https://github.com/rochacbruno/flasgger/")
15296 (synopsis "Extract Swagger specs from your Flask project")
15297 (description "@code{python-flasgger} allows extracting Swagger specs
15298 from your Flask project. It is a fork of Flask-Swagger.")
15299 (license license:expat)))
15300
15301 (define-public python2-flasgger
15302 (package-with-python2 python-flasgger))