guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: Merge branch 'master' into core-updates


From: Marius Bakke
Subject: 01/01: Merge branch 'master' into core-updates
Date: Sun, 19 Nov 2017 09:05:05 -0500 (EST)

mbakke pushed a commit to branch core-updates
in repository guix.

commit 2dd12924cf4a30a96262b6d392fcde58c9f10d4b
Merge: 259b4f3 a93447b
Author: Marius Bakke <address@hidden>
Date:   Sun Nov 19 15:01:00 2017 +0100

    Merge branch 'master' into core-updates

 Makefile.am                                        |    8 +-
 build-aux/hydra/gnu-system.scm                     |   34 +-
 doc/contributing.texi                              |   12 +-
 doc/guix.texi                                      |  241 +-
 gnu.scm                                            |  100 +-
 gnu/build/linux-boot.scm                           |   43 +-
 gnu/local.mk                                       |   23 +-
 gnu/packages.scm                                   |   10 +-
 gnu/packages/accessibility.scm                     |    2 +-
 gnu/packages/admin.scm                             |   17 +-
 gnu/packages/aidc.scm                              |    7 +-
 gnu/packages/android.scm                           |    1 +
 gnu/packages/aspell.scm                            |    2 +
 gnu/packages/audio.scm                             |  100 +-
 gnu/packages/autotools.scm                         |    2 +-
 .../{4.13-x86_64.conf => 4.14-arm.conf}            | 7397 +++++++++-----------
 .../linux-libre/{4.13-i686.conf => 4.14-i686.conf} |  324 +-
 .../{4.13-x86_64.conf => 4.14-x86_64.conf}         |  330 +-
 gnu/packages/backup.scm                            |    8 +-
 gnu/packages/benchmark.scm                         |    4 +-
 gnu/packages/bioinformatics.scm                    | 1136 ++-
 gnu/packages/bittorrent.scm                        |   15 +-
 gnu/packages/bootloaders.scm                       |   29 +-
 gnu/packages/calendar.scm                          |    2 +
 gnu/packages/certs.scm                             |    4 +-
 gnu/packages/check.scm                             | 1437 +++-
 gnu/packages/compression.scm                       |  260 +-
 gnu/packages/cran.scm                              |  325 +-
 gnu/packages/crypto.scm                            |  101 +-
 gnu/packages/cups.scm                              |   36 +
 gnu/packages/cyrus-sasl.scm                        |    2 +-
 gnu/packages/databases.scm                         |  661 +-
 gnu/packages/dav.scm                               |    4 +-
 gnu/packages/django.scm                            |    7 +-
 gnu/packages/docker.scm                            |    3 +-
 gnu/packages/ebook.scm                             |   14 +-
 gnu/packages/emacs.scm                             |   82 +-
 gnu/packages/engineering.scm                       |  314 +-
 gnu/packages/enlightenment.scm                     |    2 +-
 gnu/packages/file-systems.scm                      |  118 +
 gnu/packages/finance.scm                           |   34 +-
 gnu/packages/firmware.scm                          |    6 +-
 gnu/packages/fontutils.scm                         |    4 +-
 gnu/packages/freedesktop.scm                       |    6 +-
 gnu/packages/game-development.scm                  |   10 +-
 gnu/packages/games.scm                             |    2 +
 gnu/packages/gcc.scm                               |    1 +
 gnu/packages/glib.scm                              |    9 +-
 gnu/packages/gnome.scm                             |  154 +-
 gnu/packages/gnucash.scm                           |   13 +-
 gnu/packages/gnupg.scm                             |  127 +-
 gnu/packages/gnuzilla.scm                          |   63 +-
 gnu/packages/graph.scm                             |    4 +-
 gnu/packages/graphviz.scm                          |   28 +
 gnu/packages/guile.scm                             |    6 +-
 gnu/packages/haskell-check.scm                     |  728 ++
 gnu/packages/haskell-crypto.scm                    |  530 ++
 gnu/packages/haskell-web.scm                       |  845 +++
 gnu/packages/haskell.scm                           | 2183 +-----
 gnu/packages/ibus.scm                              |    9 +-
 gnu/packages/idris.scm                             |    2 +
 gnu/packages/image-viewers.scm                     |   13 +-
 gnu/packages/image.scm                             |    1 +
 gnu/packages/imagemagick.scm                       |    4 +-
 gnu/packages/irc.scm                               |    7 +-
 gnu/packages/iso-codes.scm                         |    4 +-
 gnu/packages/java.scm                              |  766 +-
 gnu/packages/javascript.scm                        |   34 +
 gnu/packages/jrnl.scm                              |    5 +-
 gnu/packages/kde-frameworks.scm                    |  534 +-
 gnu/packages/kde.scm                               |    6 +-
 gnu/packages/kodi.scm                              |   60 +
 gnu/packages/language.scm                          |    1 +
 gnu/packages/ldc.scm                               |    1 +
 gnu/packages/libffi.scm                            |    1 +
 gnu/packages/libreoffice.scm                       |   48 +-
 gnu/packages/libupnp.scm                           |    8 +-
 gnu/packages/libusb.scm                            |    2 +-
 gnu/packages/linux.scm                             |  105 +-
 gnu/packages/logging.scm                           |    1 +
 gnu/packages/machine-learning.scm                  |   56 +-
 gnu/packages/mail.scm                              |   13 +-
 gnu/packages/markup.scm                            |    2 +-
 gnu/packages/maths.scm                             |   11 +-
 gnu/packages/mc.scm                                |    2 +-
 gnu/packages/medical.scm                           |    1 +
 gnu/packages/mes.scm                               |   10 +-
 gnu/packages/messaging.scm                         |   58 +-
 gnu/packages/mingw.scm                             |    6 +-
 gnu/packages/mp3.scm                               |    5 +-
 gnu/packages/mpd.scm                               |    1 +
 gnu/packages/mpi.scm                               |    8 +-
 gnu/packages/music.scm                             |   43 +-
 gnu/packages/nano.scm                              |    4 +-
 gnu/packages/networking.scm                        |    1 +
 gnu/packages/nutrition.scm                         |    1 +
 gnu/packages/nvi.scm                               |    3 +-
 gnu/packages/ocaml.scm                             |    2 +-
 gnu/packages/openstack.scm                         |   44 +-
 gnu/packages/package-management.scm                |   34 +-
 gnu/packages/parallel.scm                          |    9 +-
 gnu/packages/password-utils.scm                    |   22 +-
 .../audacity-build-with-system-portaudio.patch     |   64 +
 .../patches/gcc-4-compile-with-gcc-5.patch         |   65 +
 gnu/packages/patches/icecat-bug-1348660-pt5.patch  |  727 ++
 gnu/packages/patches/icecat-bug-1415133.patch      |   40 +
 ...ktexteditor-5.39.0-autotests-dependencies.patch |   49 +
 .../patches/libetonyek-build-with-mdds-1.2.patch   |   74 -
 gnu/packages/patches/libvisio-fix-tests.patch      |   35 -
 gnu/packages/patches/mupdf-CVE-2017-15587.patch    |   10 +-
 gnu/packages/patches/netsurf-system-utf8proc.patch |   51 +-
 .../patches/owncloud-disable-updatecheck.patch     |   49 +
 gnu/packages/patches/psm-arch.patch                |   13 +
 gnu/packages/patches/psm-ldflags.patch             |   13 +
 gnu/packages/patches/psm-repro.patch               |   14 +
 .../python-networkx2-reproducible-build.patch      |   29 +
 gnu/packages/patches/qemu-CVE-2017-15038.patch     |   51 +
 gnu/packages/patches/qemu-CVE-2017-15268.patch     |   62 +
 gnu/packages/patches/qemu-CVE-2017-15289.patch     |   66 +
 gnu/packages/pdf.scm                               |   58 +-
 gnu/packages/perl-check.scm                        | 1169 ++++
 gnu/packages/perl.scm                              | 1141 +--
 gnu/packages/python-crypto.scm                     |  637 ++
 gnu/packages/python-web.scm                        | 2444 +++++++
 gnu/packages/python.scm                            | 5666 +--------------
 gnu/packages/qt.scm                                |    2 +-
 gnu/packages/rdf.scm                               |    3 +
 gnu/packages/regex.scm                             |    4 +-
 gnu/packages/rust.scm                              |    2 +-
 gnu/packages/samba.scm                             |   12 +-
 gnu/packages/sdl.scm                               |   18 +-
 gnu/packages/sssd.scm                              |    4 +
 gnu/packages/statistics.scm                        |  198 +-
 gnu/packages/storage.scm                           |    1 +
 gnu/packages/suckless.scm                          |    2 +-
 gnu/packages/sync.scm                              |    6 +-
 gnu/packages/syncthing.scm                         |   66 +-
 gnu/packages/synergy.scm                           |   28 +-
 gnu/packages/tcl.scm                               |    2 +-
 gnu/packages/terminals.scm                         |    6 +-
 gnu/packages/tex.scm                               |   81 +-
 gnu/packages/time.scm                              |  280 +-
 gnu/packages/tls.scm                               |   51 +
 gnu/packages/tor.scm                               |    2 +
 gnu/packages/tryton.scm                            |    4 +
 gnu/packages/version-control.scm                   |   10 +-
 gnu/packages/video.scm                             |   18 +-
 gnu/packages/vim.scm                               |    6 +-
 gnu/packages/virtualization.scm                    |    6 +-
 gnu/packages/vpn.scm                               |    1 +
 gnu/packages/w3m.scm                               |    6 +-
 gnu/packages/web-browsers.scm                      |    3 +-
 gnu/packages/web.scm                               |  104 +-
 gnu/packages/webkit.scm                            |    4 +-
 gnu/packages/wget.scm                              |   61 +
 gnu/packages/wm.scm                                |   13 +-
 gnu/packages/xdisorg.scm                           |   38 +
 gnu/packages/xml.scm                               |    1 +
 gnu/packages/xorg.scm                              |   33 +-
 gnu/services.scm                                   |   20 +-
 gnu/services/admin.scm                             |    6 +
 gnu/services/audio.scm                             |    1 +
 gnu/services/avahi.scm                             |    7 +-
 gnu/services/base.scm                              |   12 +-
 gnu/services/ssh.scm                               |    7 +
 gnu/services/telephony.scm                         |  305 +
 gnu/services/xorg.scm                              |    9 +-
 gnu/system.scm                                     |    5 +-
 gnu/system/install.scm                             |   47 +-
 gnu/system/linux-initrd.scm                        |    5 +-
 gnu/system/vm.scm                                  |    8 +-
 gnu/tests/install.scm                              |    4 +-
 guix/build-system/go.scm                           |    2 +
 guix/build-system/r.scm                            |    9 +-
 guix/build/compile.scm                             |   28 +-
 guix/build/download.scm                            |   61 +-
 guix/build/go-build-system.scm                     |   60 +-
 guix/build/graft.scm                               |    1 +
 guix/build/pull.scm                                |   61 +-
 guix/build/texlive-build-system.scm                |    2 +-
 guix/cve.scm                                       |   94 +-
 guix/download.scm                                  |   40 +-
 guix/ftp-client.scm                                |   11 +-
 guix/git.scm                                       |   10 +-
 guix/http-client.scm                               |   13 +-
 guix/i18n.scm                                      |   51 +
 guix/import/cran.scm                               |   91 +-
 guix/import/utils.scm                              |   28 +-
 guix/licenses.scm                                  |   10 +-
 guix/records.scm                                   |   18 +-
 guix/scripts/refresh.scm                           |    3 +-
 guix/ui.scm                                        |  120 +-
 guix/utils.scm                                     |   17 +
 guix/workers.scm                                   |   28 +-
 nix/scripts/list-runtime-roots.in                  |   94 +-
 po/guix/POTFILES.in                                |    1 +
 tests/guix-build.sh                                |    2 +-
 tests/guix-gc.sh                                   |   10 +-
 tests/guix-package.sh                              |    2 +-
 tests/guix-system.sh                               |   32 +-
 tests/services.scm                                 |   10 +-
 tests/workers.scm                                  |   26 +
 202 files changed, 19726 insertions(+), 15166 deletions(-)

diff --cc gnu/local.mk
index d8b8b14,2fbafe1..eb61fe8
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@@ -535,7 -542,10 +543,8 @@@ dist_patch_DATA =                                 
        
    %D%/packages/patches/ath9k-htc-firmware-binutils.patch      \
    %D%/packages/patches/ath9k-htc-firmware-gcc.patch           \
    %D%/packages/patches/ath9k-htc-firmware-objcopy.patch               \
+   %D%/packages/patches/audacity-build-with-system-portaudio.patch \
    %D%/packages/patches/automake-skip-amhello-tests.patch      \
 -  %D%/packages/patches/automake-regexp-syntax.patch           \
 -  %D%/packages/patches/automake-test-gzip-warning.patch               \
    %D%/packages/patches/avahi-localstatedir.patch              \
    %D%/packages/patches/avidemux-install-to-lib.patch          \
    %D%/packages/patches/awesome-reproducible-png.patch         \
@@@ -629,10 -641,11 +638,11 @@@
    %D%/packages/patches/gawk-shell.patch                               \
    %D%/packages/patches/gcc-arm-bug-71399.patch                        \
    %D%/packages/patches/gcc-arm-link-spec-fix.patch            \
 -  %D%/packages/patches/gcc-asan-powerpc-missing-include.patch \
    %D%/packages/patches/gcc-cross-environment-variables.patch  \
 +  %D%/packages/patches/gcc-fix-texi2pod.patch                 \
    %D%/packages/patches/gcc-libvtv-runpath.patch                       \
    %D%/packages/patches/gcc-strmov-store-file-names.patch      \
+   %D%/packages/patches/gcc-4-compile-with-gcc-5.patch          \
    %D%/packages/patches/gcc-4.6-gnu-inline.patch                       \
    %D%/packages/patches/gcc-4.9.3-mingw-gthr-default.patch     \
    %D%/packages/patches/gcc-5.0-libvtv-runpath.patch           \
@@@ -730,6 -746,11 +740,8 @@@
    %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
    %D%/packages/patches/hydra-disable-darcs-test.patch         \
    %D%/packages/patches/icecat-avoid-bundled-libraries.patch   \
+   %D%/packages/patches/icecat-bug-1348660-pt5.patch           \
+   %D%/packages/patches/icecat-bug-1415133.patch                       \
 -  %D%/packages/patches/icu4c-CVE-2017-7867-CVE-2017-7868.patch        \
 -  %D%/packages/patches/icu4c-CVE-2017-14952.patch             \
 -  %D%/packages/patches/icu4c-reset-keyword-list-iterator.patch        \
    %D%/packages/patches/id3lib-CVE-2007-4460.patch                     \
    %D%/packages/patches/ilmbase-fix-tests.patch                        \
    %D%/packages/patches/intltool-perl-compatibility.patch      \
@@@ -986,8 -1022,10 +1002,11 @@@
    %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
    %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch        \
    %D%/packages/patches/python2-subprocess32-disable-input-test.patch  \
 -  %D%/packages/patches/python2-unittest2-remove-argparse.patch \
 +  %D%/packages/patches/python-unittest2-python3-compat.patch  \
 +  %D%/packages/patches/python-unittest2-remove-argparse.patch \
+   %D%/packages/patches/qemu-CVE-2017-15038.patch              \
+   %D%/packages/patches/qemu-CVE-2017-15268.patch              \
+   %D%/packages/patches/qemu-CVE-2017-15289.patch              \
    %D%/packages/patches/qt4-ldflags.patch                      \
    %D%/packages/patches/qtscript-disable-tests.patch           \
    %D%/packages/patches/quagga-reproducible-build.patch          \
diff --cc gnu/packages/check.scm
index 1d2ac20,5a926eb..7e713c6
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@@ -332,3 -352,1418 +352,1390 @@@ for every Python test framework.  It su
  
  (define-public python2-parameterized
    (package-with-python2 python-parameterized))
+ 
+ (define-public python-mock
+   (package
+     (name "python-mock")
 -    (version "1.0.1")
++    (version "2.0.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mock" version))
+        (sha256
+         (base32
 -         "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq"))))
++         "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i"))))
++    (propagated-inputs
++     `(("python-pbr" ,python-pbr-minimal)
++       ("python-six" ,python-six)))
+     (build-system python-build-system)
 -    (arguments '(#:test-target "check"))
++    (native-inputs
++     `(("python-unittest2" ,python-unittest2)))
++    (arguments
++     `(#:phases
++       (modify-phases %standard-phases
++         (replace 'check
++           (lambda _
++             (zero? (system* "unit2")))))))
+     (home-page "https://github.com/testing-cabal/mock";)
+     (synopsis "Python mocking and patching library for testing")
+     (description
+      "Mock is a library for testing in Python.  It allows you to replace parts
+ of your system under test with mock objects and make assertions about how they
+ have been used.")
++    (properties `((python2-variant . ,(delay python2-mock))))
+     (license license:expat)))
+ 
+ (define-public python2-mock
 -  (package-with-python2 python-mock))
 -
 -;;; Some packages (notably, certbot and python-acme) rely on this newer 
version
 -;;; of python-mock. However, a large number of packages fail to build with
 -;;; address@hidden, so we add a new variable for now. Also, there may be a 
dependency
 -;;; cycle between mock and six, so we avoid creating address@hidden for now.
 -(define-public python-mock-2
 -  (package
 -    (inherit python-mock)
 -    (version "2.0.0")
 -    (source
 -      (origin
 -        (method url-fetch)
 -        (uri (pypi-uri "mock" version))
 -        (sha256
 -         (base32
 -          "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i"))))
 -    (propagated-inputs
 -     `(("python-pbr" ,python-pbr-minimal)
 -       ,@(package-propagated-inputs python-mock)))))
++  (let ((base (package-with-python2
++               (strip-python2-variant python-mock))))
++    (package (inherit base)
++      (propagated-inputs
++       `(("python2-functools32" ,python2-functools32)
++         ("python2-funcsigs" ,python2-funcsigs)
++         ,@(package-propagated-inputs base))))))
+ 
+ (define-public python-nose
+   (package
+     (name "python-nose")
+     (version "1.3.7")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "nose" version))
+         (sha256
+           (base32
+             "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
+     (build-system python-build-system)
+     (arguments
+      '(#:tests? #f)) ; FIXME: test suite fails
+     (home-page "http://readthedocs.org/docs/nose/";)
+     (synopsis "Python testing library")
+     (description
+      "Nose extends the unittest library to make testing easier.")
+     (license license:lgpl2.0+)))
+ 
+ (define-public python2-nose
+   (package-with-python2 python-nose))
+ 
+ (define-public python-nose2
+   (package
+     (name "python-nose2")
+     (version "0.6.5")
+       (source
+         (origin
+           (method url-fetch)
+           (uri (pypi-uri "nose2" version))
+           (sha256
+            (base32
+             "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
+     (build-system python-build-system)
+     (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
+     (propagated-inputs
+      `(("python-cov-core" ,python-cov-core)
+        ("python-pytest-cov" ,python-pytest-cov)
+        ("python-six" ,python-six)))
+     (home-page "https://github.com/nose-devs/nose2";)
+     (synopsis "Next generation of nicer testing for Python")
+     (description
+      "Nose2 is the next generation of nicer testing for Python, based on the
+ plugins branch of unittest2.  Nose2 aims to improve on nose by providing a
+ better plugin api, being easier for users to configure, and simplifying 
internal
+ interfaces and processes.")
+     (license license:bsd-2)))
+ 
+ (define-public python2-nose2
+   (package-with-python2 python-nose2))
+ 
+ (define-public python-unittest2
+   (package
+     (name "python-unittest2")
 -    (version "0.5.1")
++    (version "1.1.0")
+     (source
+      (origin
+        (method url-fetch)
 -       (uri (string-append
 -             
"https://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-";
 -             version ".tar.gz"))
++       (uri (pypi-uri "unittest2" version))
++       (patches
++        (search-patches "python-unittest2-python3-compat.patch"
++                        "python-unittest2-remove-argparse.patch"))
+        (sha256
+         (base32
 -         "00yl6lskygcrddx5zspkhr0ibgvpknl4678kkm6s626539grq93q"))))
++         "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))))
+     (build-system python-build-system)
++    (arguments
++     '(#:phases
++       (modify-phases %standard-phases
++         (replace 'check
++           (lambda _
++             (zero? (system* "python" "-m" "unittest2" "discover" 
"--verbose")))))))
++    (propagated-inputs
++     `(("python-six" ,python-six)
++       ("python-traceback2" ,python-traceback2)))
+     (home-page "http://pypi.python.org/pypi/unittest2";)
+     (synopsis "Python unit testing library")
+     (description
+      "Unittest2 is a replacement for the unittest module in the Python
+ standard library.")
+     (license license:psfl)))
+ 
+ (define-public python2-unittest2
 -  (package (inherit python-unittest2)
 -    (name "python2-unittest2")
 -    (version "1.1.0")
 -    (source
 -     (origin
 -       (method url-fetch)
 -       (uri (string-append
 -             "https://pypi.python.org/packages/source/u/unittest2/unittest2-";
 -             version ".tar.gz"))
 -       (sha256
 -        (base32
 -         "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))
 -       (patches
 -        (search-patches "python2-unittest2-remove-argparse.patch"))))
 -    (propagated-inputs
 -     `(("python2-six" ,python2-six)
 -       ("python2-traceback2" ,python2-traceback2)))
 -    (arguments
 -     `(#:python ,python-2
 -       #:tests? #f)))) ; no setup.py test command
++  (package-with-python2 python-unittest2))
+ 
+ (define-public python-pytest
+   (package
+     (name "python-pytest")
 -    (version "2.7.3")
++    (version "3.2.3")
+     (source
+      (origin
+        (method url-fetch)
 -       (uri (string-append
 -             "https://pypi.python.org/packages/source/p/pytest/pytest-";
 -             version ".tar.gz"))
++       (uri (pypi-uri "pytest" version))
+        (sha256
+         (base32
 -         "1z4yi986f9n0p8qmzmn21m21m8j1x78hk3505f89baqm6pdw7afm"))
 -       (modules '((guix build utils)))
 -       (snippet
 -        ;; One of the tests involves the /usr directory, so it fails.
 -        '(substitute* "testing/test_argcomplete.py"
 -           (("def test_remove_dir_prefix\\(self\\):")
 -            "@pytest.mark.xfail\n    def test_remove_dir_prefix(self):")))))
++         "0g6w86ks73fnrnsyib9ii2rbyx830vn7aglsjqz9v1n2xwbndyi7"))))
+     (build-system python-build-system)
++    (arguments
++     `(#:phases
++       (modify-phases %standard-phases
++         (add-before 'check 'disable-invalid-tests
++           (lambda _
++             ;; Some tests involves the /usr directory, and fails.
++             (substitute* "testing/test_argcomplete.py"
++               (("def test_remove_dir_prefix\\(self\\):")
++                "@pytest.mark.xfail\n    def test_remove_dir_prefix(self):"))
++             (substitute* "testing/test_argcomplete.py"
++               (("def test_remove_dir_prefix" line)
++                (string-append "@pytest.mark.skip"
++                               "(reason=\"Assumes that /usr exists.\")\n    "
++                               line)))
++             #t)))))
+     (propagated-inputs
+      `(("python-py" ,python-py)))
+     (native-inputs
+      `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
+        ("bash" ,bash)
++       ("python-hypothesis" ,python-hypothesis)
+        ("python-nose" ,python-nose)
 -       ("python-mock" ,python-mock)))
++       ("python-mock" ,python-mock)
++       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (home-page "http://pytest.org";)
+     (synopsis "Python testing library")
+     (description
+      "Pytest is a testing tool that provides auto-discovery of test modules
+ and functions, detailed info on failing assert statements, modular fixtures,
+ and many external plugins.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest
+   (package-with-python2 python-pytest))
+ 
 -;; Some packages require a newer pytest.
 -(define-public python-pytest-3.0
++(define-public python-pytest-bootstrap
+   (package
+     (inherit python-pytest)
 -    (name "python-pytest")
 -    (version "3.0.7")
 -    (source (origin
 -              (method url-fetch)
 -              (uri (pypi-uri "pytest" version))
 -              (sha256
 -               (base32
 -                "1asc4b2nd2a4f0g3r12y97rslq5wliji7b73wwkvdrm5s7mrc1mp"))))
 -    (arguments
 -     `(#:phases
 -       (modify-phases %standard-phases
 -         (add-before 'check 'disable-invalid-test
 -           (lambda _
 -             (substitute* "testing/test_argcomplete.py"
 -               (("def test_remove_dir_prefix" line)
 -                (string-append "@pytest.mark.skip"
 -                               "(reason=\"Assumes that /usr exists.\")\n    "
 -                               line)))
 -             #t)))))
 -    (native-inputs
 -     `(("python-hypothesis" ,python-hypothesis)
 -       ,@(package-native-inputs python-pytest)))
 -    (properties `((python2-variant . ,(delay python2-pytest-3.0))))))
++    (name "python-pytest-bootstrap")
++    (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
++    (arguments `(#:tests? #f))))
+ 
 -(define-public python2-pytest-3.0
 -  (let ((base (package-with-python2
 -                (strip-python2-variant python-pytest-3.0))))
 -    (package (inherit base)
 -      (native-inputs
 -        `(("python2-enum34" ,python2-enum34)
 -          ,@(package-native-inputs base))))))
++(define-public python2-pytest-bootstrap
++  (package-with-python2 python-pytest-bootstrap))
+ 
+ (define-public python-pytest-cov
+   (package
+     (name "python-pytest-cov")
+     (version "2.4.0")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "pytest-cov" version))
+         (sha256
+          (base32
+           "03c2qc42r4bczyw93gd7n0qi1h1jfhw7fnbhi33c3vp1hs81gm2k"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+           (lambda _
+             ;; options taken from tox.ini
+             ;; TODO: make "--restructuredtext" tests pass. They currently fail
+             ;; with "Duplicate implicit target name"
+             (zero? (system* "python" "./setup.py" "check"
+                             "--strict" "--metadata")))))))
+     (propagated-inputs
+      `(("python-coverage" ,python-coverage)
+        ("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/pytest-dev/pytest-cov";)
+     (synopsis "Pytest plugin for measuring coverage")
+     (description
+      "Pytest-cov produces coverage reports.  It supports centralised testing 
and
+ distributed testing in both @code{load} and @code{each} modes.  It also
+ supports coverage of subprocesses.")
+   (license license:expat)))
+ 
+ (define-public python2-pytest-cov
+   (package-with-python2 python-pytest-cov))
+ 
+ (define-public python-pytest-runner
+   (package
+     (name "python-pytest-runner")
+     (version "2.11.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-runner" version))
+        (sha256
+         (base32
+          "1cw978kqqcq916b9gfns1qjqvg33c5ail5jhw9054dsynkm32flq"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          ;; The fancy way of setting the version with setuptools_scm does not
+          ;; seem to work here.
+          (add-after 'unpack 'set-version
+           (lambda _
+             (substitute* "docs/conf.py"
+               (("version = setuptools_scm\\.get_version\\(root='\\.\\.')")
+                (string-append "version = \"" ,version "\"")))
+             #t)))))
+     (native-inputs
 -     `(("python-pytest" ,python-pytest)
++     `(("python-pytest" ,python-pytest-bootstrap)
+        ("python-setuptools-scm" ,python-setuptools-scm)))
+     (home-page "https://github.com/pytest-dev/pytest-runner";)
+     (synopsis "Invoke py.test as a distutils command")
+     (description
+      "This package provides a @command{pytest-runner} command that
+ @file{setup.py} files can use to run tests.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-runner
+   (package-with-python2 python-pytest-runner))
+ 
+ (define-public python-pytest-mock
+   (package
+     (name "python-pytest-mock")
+     (version "1.2")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "pytest-mock" version ".zip"))
+         (sha256
+          (base32
+           "03zxar5drzm7ksqyrwypjaza3cri6wqvpr6iam92djvg6znp32gp"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("unzip" ,unzip)))
+     (propagated-inputs
+      `(("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/pytest-dev/pytest-mock/";)
+     (synopsis "Thin-wrapper around the mock package for easier use with 
py.test")
+     (description
+      "This plugin installs a @code{mocker} fixture which is a thin-wrapper
+ around the patching API provided by the @code{mock} package, but with the
+ benefit of not having to worry about undoing patches at the end of a test.
+ The mocker fixture has the same API as @code{mock.patch}, supporting the
+ same arguments.")
+     (properties `((python2-variant . ,(delay python2-pytest-mock))))
+     (license license:expat)))
+ 
+ (define-public python2-pytest-mock
+   (let ((base (package-with-python2
+                 (strip-python2-variant python-pytest-mock))))
+     (package (inherit base)
+       (propagated-inputs
+        `(("python2-mock" ,python2-mock)
+          ,@(package-propagated-inputs base))))))
+ 
+ (define-public python-pytest-xdist
+   (package
+     (name "python-pytest-xdist")
+     (version "1.14")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-xdist" version ".zip"))
+        (sha256
+         (base32
+          "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; Remove pre-compiled .pyc files from source.
+            (for-each delete-file-recursively
+                      (find-files "." "__pycache__" #:directories? #t))
+            (for-each delete-file (find-files "." "\\.pyc$"))
+            #t))))
+     (build-system python-build-system)
+     (arguments
+      '(#:tests? #f)) ;FIXME: Some tests are failing.
+        ;; #:phases
+        ;; (modify-phases %standard-phases
+        ;;   (delete 'check)
+        ;;   (add-after 'install 'check
+        ;;     (lambda* (#:key inputs outputs #:allow-other-keys)
+        ;;       (add-installed-pythonpath inputs outputs)
+        ;;       (zero? (system* "py.test" "-v")))))
+     (native-inputs
+      `(("unzip" ,unzip)
+        ("python-setuptools-scm" ,python-setuptools-scm)))
+     (propagated-inputs
+      `(("python-execnet" ,python-execnet)
+        ("python-pytest" ,python-pytest)
+        ("python-py" ,python-py)))
+     (home-page
+      "https://github.com/pytest-dev/pytest-xdist";)
+     (synopsis
+      "Plugin for py.test with distributed testing and loop-on-failing modes")
+     (description
+      "The pytest-xdist plugin extends py.test with some unique test execution
+ modes: parallelization, running tests in boxed subprocesses, the ability
+ to run tests repeatedly when failed, and the ability to run tests on multiple
+ Python interpreters or platforms.  It uses rsync to copy the existing
+ program code to a remote location, executes there, and then syncs the
+ result back.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-xdist
+   (package-with-python2 python-pytest-xdist))
+ 
+ (define-public python-scripttest
+   (package
+     (name "python-scripttest")
+     (version "1.3")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              
"https://pypi.python.org/packages/source/s/scripttest/scripttest-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-pytest" ,python-pytest)))
+     (home-page "http://pythonpaste.org/scripttest/";)
+     (synopsis "Python library to test command-line scripts")
+     (description "Scripttest is a Python helper library for testing
+ interactive command-line applications.  With it you can run a script in a
+ subprocess and see the output as well as any file modifications.")
+     (license license:expat)))
+ 
+ (define-public python2-scripttest
+   (package-with-python2 python-scripttest))
+ 
+ (define-public python-testtools
+   (package
+     (name "python-testtools")
+     (version "1.4.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "testtools" version))
+        (sha256
+         (base32
+          "1vw8yljnd75d396hhw6s2hrf4cclzy845ifd5am0lxsl235z3i8c"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'fix-module-imports
+            (lambda _
+              (substitute* "setup.py"
+                (("'unittest2>=0.8.0',") ""))
+              (substitute* '("testtools/testcase.py"
+                             "testtools/testsuite.py"
+                             "testtools/run.py"
+                             "testtools/tests/test_run.py"
+                             "testtools/tests/test_testsuite.py"
+                             "testtools/tests/test_deferredruntest.py")
+                ;; unittest2 is a backport of Python2.7 features to Python 2.4.
+                (("import unittest2 as unittest") "import unittest")
+                (("import unittest2") "import unittest as unittest2")
+                (("from unittest2 import") "from unittest import"))
+              (substitute* "testtools/tests/test_testresult.py"
+                ;; NUL in source code is not allowed (raises ValueError).
+                (("\\x00\\x04") "\\x04"))
+              #t)))))
+     (propagated-inputs
+      `(("python-mimeparse" ,python-mimeparse)
+        ("python-extras" ,python-extras)))
+     (home-page "https://github.com/testing-cabal/testtools";)
+     (synopsis
+      "Extensions to the Python standard library unit testing framework")
+     (description
+      "Testtools extends the Python standard library unit testing framework to
+ provide matchers, more debugging information, and cross-Python
+ compatibility.")
+     (license license:psfl)))
+ 
+ (define-public python2-testtools
+   (package-with-python2 python-testtools))
+ 
+ (define-public python-testscenarios
+   (package
+     (name "python-testscenarios")
+     (version "0.4")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              
"https://pypi.python.org/packages/source/t/testscenarios/testscenarios-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-testtools" ,python-testtools)))
+     (home-page "https://launchpad.net/testscenarios";)
+     (synopsis "Pyunit extension for dependency injection")
+     (description
+      "Testscenarios provides clean dependency injection for Python unittest
+ style tests.")
+     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
+ 
+ (define-public python2-testscenarios
+   (package-with-python2 python-testscenarios))
+ 
+ (define-public python-testresources
+   (package
+     (name "python-testresources")
+     (version "0.2.7")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              
"https://pypi.python.org/packages/source/t/testresources/testresources-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "0cbj3plbllyz42c4b5xxgwaa7mml54lakslrn4kkhinxhdri22md"))))
+     (build-system python-build-system)
+     (home-page "https://launchpad.net/testresources";)
+     (synopsis
+      "Pyunit extension for managing test resources")
+     (description
+      "Testresources is an extension to Python's unittest to allow declarative
+ use of resources by test cases.")
+     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
+ 
+ (define-public python2-testresources
+   (package-with-python2 python-testresources))
+ 
+ (define-public python-subunit
+   (package
+     (name "python-subunit")
+     (version "0.0.21")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              
"https://pypi.python.org/packages/source/p/python-subunit/python-subunit-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "1nkw9wfbvizmpajbj3in8ns07g7lwkiv8hip14jjlwk3cacls6jv"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-extras" ,python-extras)
+        ("python-mimeparse" ,python-mimeparse)))
+     (native-inputs
+      `(("python-testscenarios" ,python-testscenarios)))
+     (home-page "http://launchpad.net/subunit";)
+     (synopsis "Python implementation of the subunit protocol")
+     (description
+      "Python-subunit is a Python implementation of the subunit test streaming
+ protocol.")
+     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
+ 
+ (define-public python2-subunit
+   (package-with-python2 python-subunit))
+ 
+ (define-public python-fixtures
+   (package
+     (name "python-fixtures")
+     (version "1.4.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "fixtures" version))
+        (sha256
+         (base32
+          "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
+     (build-system python-build-system)
+     (arguments
+      '(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda _
+              (zero? (system* "python" "-m" "testtools.run"
+                              "fixtures.test_suite")))))))
+     (propagated-inputs
+      `(("python-six" ,python-six)))
+     (native-inputs
+      `(("python-mock" ,python-mock)
+        ("python-pbr-minimal" ,python-pbr-minimal)
+        ("python-testtools" ,python-testtools)))
+     (home-page "https://launchpad.net/python-fixtures";)
+     (synopsis "Python test fixture library")
+     (description
+      "Fixtures provides a way to create reusable state, useful when writing
+ Python tests.")
+     (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+ 
+ (define-public python2-fixtures
+   (package-with-python2 python-fixtures))
+ 
+ (define-public python-testrepository
+   (package
+     (name "python-testrepository")
+     (version "0.0.20")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              
"https://pypi.python.org/packages/source/t/testrepository/testrepository-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
+     (build-system python-build-system)
+     (arguments
+      ;; FIXME: Many tests are failing.
+      '(#:tests? #f))
+     (propagated-inputs
+      `(("python-fixtures" ,python-fixtures)
+        ("python-subunit" ,python-subunit)
+        ("python-testtools" ,python-testtools)))
+     (native-inputs
+      `(("python-pbr-minimal" ,python-pbr-minimal) ;; same as for building 
fixture
+        ("python-mimeparse" ,python-mimeparse)))
+     (home-page "https://launchpad.net/testrepository";)
+     (synopsis "Database for Python test results")
+     (description "Testrepository provides a database of test results which can
+ be used as part of a developer's workflow to check things such as what tests
+ have failed since the last commit or what tests are currently failing.")
+     (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+ 
+ (define-public python2-testrepository
+   (package-with-python2 python-testrepository))
+ 
+ (define-public python-coverage
+   (package
+     (name "python-coverage")
 -    (version "4.1")
++    (version "4.4.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "coverage" version))
+        (sha256
+         (base32
 -         "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1"))))
++         "097l4s3ssxm1vncsn0nw3a1pbzah28773q36c1ab9wz01r04973s"))))
+     (build-system python-build-system)
+     (arguments
+      ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
+      '(#:tests? #f))
+     (home-page "http://nedbatchelder.com/code/coverage";)
+     (synopsis "Code coverage measurement for Python")
+     (description
+      "Coverage measures code coverage, typically during test execution.  It
+ uses the code analysis tools and tracing hooks provided in the Python standard
+ library to determine which lines are executable, and which have been
+ executed.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-coverage
+   (package-with-python2 python-coverage))
+ 
+ (define-public python-cov-core
+   (package
+     (name "python-cov-core")
+     (version "1.15.0")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "cov-core" version))
+         (sha256
+          (base32
+           "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-coverage" ,python-coverage)))
+     (home-page "https://github.com/schlamar/cov-core";)
+     (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
+     (description
+      "This is a library package for use by @code{pytest-cov}, @code{nose-cov}
+ and @code{nose2-cov}.  It is useful for developing coverage plugins for these
+ testing frameworks.")
+     (license license:expat)))
+ 
+ (define-public python2-cov-core
+  (package-with-python2 python-cov-core))
+ 
+ (define-public python-testpath
+   (package
+     (name "python-testpath")
+     (version "0.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/jupyter/testpath/archive/";
+                            version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "04kh3fgvmqz6cfcw79q70qwjz7ib7lxm27cc548iy2rpr33qqf55"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:tests? #f ; this package does not even have a setup.py
+        #:modules ((guix build python-build-system)
+                   (guix build utils)
+                   (srfi srfi-1))
+        #:imported-modules (,@%python-build-system-modules
+                            (srfi srfi-1))
+        #:phases
+        (modify-phases %standard-phases
+          (delete 'install)
+          (replace 'build
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((version (last
+                               (string-split (assoc-ref inputs "python") #\-)))
+                     (x.y (string-join (take (string-split version #\.) 2)
+                                         "."))
+                     (dir (string-append
+                           (assoc-ref outputs "out")
+                           "/lib/python" x.y "/site-packages/testpath")))
+                (mkdir-p dir)
+                (copy-recursively "testpath" dir))
+              #t)))))
+     (home-page "https://github.com/takluyver/testpath";)
+     (synopsis "Test utilities for code working with files and commands")
+     (description
+      "Testpath is a collection of utilities for Python code working with files
+ and commands.  It contains functions to check things on the filesystem, and
+ tools for mocking system commands and recording calls to those.")
+     (license license:expat)))
+ 
+ (define-public python2-testpath
+   (package-with-python2 python-testpath))
+ 
+ (define-public python-testlib
+   (package
+     (name "python-testlib")
+     (version "0.6.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://pypi.python.org/packages/source/t/testlib/testlib-";
+              version ".zip"))
+        (sha256
+         (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("unzip" ,unzip)))  ; for unpacking the source
+     (synopsis "Python micro test suite harness")
+     (description "A micro unittest suite harness for Python.")
+     (home-page "https://github.com/trentm/testlib";)
+     (license license:expat)))
+ 
+ (define-public python2-testlib
+   (package-with-python2 python-testlib))
+ 
+ ;;; The software provided by this package was integrated into pytest 2.8.
+ (define-public python-pytest-cache
+   (package
+     (name "python-pytest-cache")
+     (version "1.0")
+     (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-cache" version))
+              (sha256
+               (base32
+                "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-apipkg" ,python-apipkg)
+        ("python-execnet" ,python-execnet)
+        ("python-py" ,python-py)
+        ("python-pytest" ,python-pytest)))
+     (synopsis "Py.test plugin with mechanisms for caching across test runs")
+     (description "The pytest-cache plugin provides tools to rerun failures 
from
+ the last py.test invocation.")
+     (home-page "https://bitbucket.org/hpk42/pytest-cache/";)
+     (license license:expat)))
+ 
+ (define-public python2-pytest-cache
+   (package-with-python2 python-pytest-cache))
+ 
+ (define-public python-pytest-localserver
+   (package
+     (name "python-pytest-localserver")
+     (version "0.3.5")
+     (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-localserver" version))
+              (sha256
+               (base32
+                "0dvqspjr6va55zwmnnc2mmpqc7mm65kxig9ya44x1z8aadzxpa4p"))))
+     (build-system python-build-system)
+     (arguments
+       `(#:phases (modify-phases %standard-phases
+          (replace 'check
+            (lambda _
+              (zero? (system* "py.test" "--genscript=runtests.py"))
+              (zero? (system* "py.test")))))))
+     (native-inputs
+      `(("python-pytest" ,python-pytest)
+        ("python-requests" ,python-requests)
+        ("python-six" ,python-six)))
+     (propagated-inputs
+      `(("python-werkzeug" ,python-werkzeug)))
+     (synopsis "Py.test plugin to test server connections locally")
+     (description "Pytest-localserver is a plugin for the pytest testing
+ framework which enables you to test server connections locally.")
+     (home-page "https://pypi.python.org/pypi/pytest-localserver";)
+     (license license:expat)))
+ 
+ (define-public python-pytest-xprocess
+   (package
+     (name "python-pytest-xprocess")
+     (version "0.9.1")
+     (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-xprocess" version))
+              (sha256
+               (base32
+                "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-pytest" ,python-pytest)
+        ("python-pytest-cache" ,python-pytest-cache)
+        ("python-psutil" ,python-psutil)))
+     (synopsis "Pytest plugin to manage external processes across test runs")
+     (description "Pytest-xprocess is an experimental py.test plugin for 
managing
+ processes across test runs.")
+     (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess";)
+     (license license:expat)))
+ 
+ (define-public python-pytest-subtesthack
+   (package
+     (name "python-pytest-subtesthack")
+     (version "0.1.1")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "pytest-subtesthack" version))
+               (sha256
+                (base32
+                 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-pytest" ,python-pytest)))
+     (synopsis "Set-up and tear-down fixtures for unit tests")
+     (description "This plugin allows you to set up and tear down fixtures 
within
+ unit test functions that use @code{py.test}. This is useful for using
+ @command{hypothesis} inside py.test, as @command{hypothesis} will call the 
test
+ function multiple times, without setting up or tearing down fixture state as 
is
+ normally the case.")
+     (home-page "https://github.com/untitaker/pytest-subtesthack/";)
+     (license license:unlicense)))
+ 
+ (define-public python2-pytest-subtesthack
+   (package-with-python2 python-pytest-subtesthack))
+ 
+ (define-public python-hypothesis
+   (package
+     (name "python-hypothesis")
+     (version "3.1.0")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "hypothesis" version))
+               (sha256
+                (base32
+                 "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-flake8" ,python-flake8)
 -       ("python-pytest" ,python-pytest)))
++       ("python-pytest" ,python-pytest-bootstrap)))
+     (synopsis "Library for property based testing")
+     (description "Hypothesis is a library for testing your Python code 
against a
+ much larger range of examples than you would ever want to write by hand.  It’s
+ based on the Haskell library, Quickcheck, and is designed to integrate
+ seamlessly into your existing Python unit testing work flow.")
+     (home-page "https://github.com/DRMacIver/hypothesis";)
+     (license license:mpl2.0)
+     (properties `((python2-variant . ,(delay python2-hypothesis))))))
+ 
+ (define-public python2-hypothesis
+   (let ((hypothesis (package-with-python2
+                      (strip-python2-variant python-hypothesis))))
+     (package (inherit hypothesis)
+       (propagated-inputs
+        `(("python2-enum34" ,python2-enum34)
+          ,@(package-propagated-inputs hypothesis))))))
+ 
+ (define-public python-lit
+   (package
+     (name "python-lit")
+     (version "0.5.0")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "lit" version))
+         (sha256
+          (base32
+           "135m2b9cwih85g66rjggavck328z7lj37srgpq3jxszbg0g2b91y"))))
+     (build-system python-build-system)
+     (home-page "http://llvm.org/";)
+     (synopsis "LLVM Software Testing Tool")
+     (description "@code{lit} is a portable tool for executing LLVM and Clang
+ style test suites, summarizing their results, and providing indication of
+ failures.")
+     (license license:ncsa)))
+ 
+ (define-public python2-lit
+   (package-with-python2 python-lit))
+ 
+ (define-public python-pytest-pep8
+   (package
+     (name "python-pytest-pep8")
+     (version "1.0.6")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "pytest-pep8" version))
+               (sha256
+                (base32
+                 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues 
#8 and #12.
+     (native-inputs
+      `(("python-pytest" ,python-pytest)))
+     (propagated-inputs
+      `(("python-pep8" ,python-pep8)))
+     (home-page "https://bitbucket.org/pytest-dev/pytest-pep8";)
+     (synopsis "Py.test plugin to check PEP8 requirements")
+     (description "Pytest plugin for checking PEP8 compliance.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-pep8
+   (package-with-python2 python-pytest-pep8))
+ 
+ (define-public python-pytest-flakes
+   (package
+     (name "python-pytest-flakes")
+     (version "1.0.1")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "pytest-flakes" version))
+               (sha256
+                (base32
+                 "0flag3n33kbhyjrhzmq990rvg4yb8hhhl0i48q9hw0ll89jp28lw"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key outputs inputs #:allow-other-keys)
+              ;; It's easier to run tests after install.
+              ;; Make installed package available for running the tests
+              (add-installed-pythonpath inputs outputs)
+              (zero? (system* "py.test" "-vv")))))))
+     (native-inputs
+      `(("python-coverage" ,python-coverage)
+        ("python-pytest" ,python-pytest)
+        ("python-pytest-cache" ,python-pytest-cache)
+        ("python-pytest-pep8" ,python-pytest-pep8)))
+     (propagated-inputs
+      `(("python-pyflakes" ,python-pyflakes)))
+     (home-page "https://github.com/fschulze/pytest-flakes";)
+     (synopsis "Py.test plugin to check source code with pyflakes")
+     (description "Pytest plugin for checking Python source code with 
pyflakes.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-flakes
+   (package-with-python2 python-pytest-flakes))
+ 
+ (define-public python2-coverage-test-runner
+   (package
+     (name "python2-coverage-test-runner")
+     (version "1.11")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/";
+              "coverage-test-runner/snapshot/coverage-test-runner-"
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "0y1m7z3dl63kmhcmydl1mwg0hacnf6ghrx9dah17j9iasssfa3g7"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:python ,python-2
+        #:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda _
+              (zero? (system* "./testrun")))))))
+     (propagated-inputs
+      `(("python2-coverage" ,python2-coverage)))
+     (home-page "https://liw.fi/coverage-test-runner/";)
+     (synopsis "Python module for running unit tests")
+     (description "@code{CoverageTestRunner} is a python module for running
+ unit tests and failing them if the unit test module does not exercise all
+ statements in the module it tests.")
+     (license license:gpl3+)))
+ 
+ (define-public python-pylint
+   (package
+     (name "python-pylint")
+     (version "1.7.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://github.com/PyCQA/pylint/archive/pylint-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "0mzn1czhf1mgr2wiqfihb274sja02h899b85kywdpivppa9nwrmp"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-pytest" ,python-pytest)
+        ("python-pytest-runner" ,python-pytest-runner)
+        ("python-tox" ,python-tox)))
+     (propagated-inputs
+      `(("python-astroid" ,python-astroid)
+        ("python-isort" ,python-isort)
+        ("python-mccabe" ,python-mccabe)
+        ("python-six" ,python-six)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+                   (lambda _
+                     ;; Somehow, tests for python2-pylint
+                     ;; fail if run from the build directory
+                     (let ((work "/tmp/work"))
+                       (mkdir-p work)
+                       (setenv "PYTHONPATH"
+                               (string-append (getenv "PYTHONPATH") ":" work))
+                       (copy-recursively "." work)
+                       (with-directory-excursion "/tmp"
+                         (zero? (system* "python" "-m" "unittest" "discover"
+                                         "-s" (string-append work 
"/pylint/test")
+                                         "-p" "*test_*.py")))))))))
+     (home-page "https://github.com/PyCQA/pylint";)
+     (synopsis "Python source code analyzer which looks for coding standard
+ errors")
+     (description "Pylint is a Python source code analyzer which looks
+ for programming errors, helps enforcing a coding standard and sniffs
+ for some code smells (as defined in Martin Fowler's Refactoring book).
+ 
+ Pylint has many rules enabled by default, way too much to silence them
+ all on a minimally sized program.  It's highly configurable and handle
+ pragmas to control it from within your code.  Additionally, it is
+ possible to write plugins to add your own checks.")
+     (properties `((python2-variant . ,(delay python2-pylint))))
+     (license license:gpl2+)))
+ 
+ (define-public python2-pylint
+   (let ((pylint (package-with-python2
+                   (strip-python2-variant python-pylint))))
+     (package (inherit pylint)
+              (propagated-inputs
+               `(("python2-backports-functools-lru-cache"
+                  ,python2-backports-functools-lru-cache)
+                 ("python2-configparser" ,python2-configparser)
+                 ,@(package-propagated-inputs pylint))))))
+ 
+ (define-public python-paramunittest
+   (package
+     (name "python-paramunittest")
+     (version "0.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "ParamUnittest" version))
+        (sha256
+         (base32
+          "0kp793hws5xv1wvycxq7jw2pwy36f35k39jg8hx5qikij5a0jid1"))))
+     (build-system python-build-system)
+     (home-page
+      "https://github.com/rik0/ParamUnittest";)
+     (synopsis
+      "Simple extension to have parametrized unit tests")
+     (description
+      "This package allows to create parametrized unit-tests that work with 
the standard
+ unittest package.  A parametrized test case is automatically converted to 
multiple test
+ cases.  Since they are TestCase subclasses, they work with other test suites 
that
+ recognize TestCases.")
+     (license license:bsd-2)))
+ 
+ (define-public python2-python-paramunittest
+   (package-with-python2 python-paramunittest))
+ 
+ (define-public python-pytest-warnings
+   (package
+     (name "python-pytest-warnings")
+     (version "0.2.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-warnings" version))
+        (sha256
+         (base32
+          "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
+     (build-system python-build-system)
+     (propagated-inputs
 -     `(("pytest" ,python-pytest-3.0)))
++     `(("pytest" ,python-pytest)))
+     (home-page "https://github.com/fschulze/pytest-warnings";)
+     (synopsis "Pytest plugin to list Python warnings in pytest report")
+     (description
+      "Python-pytest-warnings is a pytest plugin to list Python warnings in
+ pytest report.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-warnings
+   (package-with-python2 python-pytest-warnings))
+ 
+ (define-public python-pytest-capturelog
+   (package
+     (name "python-pytest-capturelog")
+     (version "0.7")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-capturelog" version ".tar.gz"))
+        (sha256
+         (base32
+          "038049nyjl7di59ycnxvc9nydivc5m8np3hqq84j2iirkccdbs5n"))))
+     (build-system python-build-system)
+     (propagated-inputs
 -     `(("pytest" ,python-pytest-3.0)))
++     `(("pytest" ,python-pytest)))
+     (home-page "http://bitbucket.org/memedough/pytest-capturelog/overview";)
+     (synopsis "Pytest plugin to catch log messages")
+     (description
+      "Python-pytest-catchlog is a pytest plugin to catch log messages.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-capturelog
+   (package-with-python2 python-pytest-capturelog))
+ 
+ (define-public python-pytest-catchlog
+   (package
+     (name "python-pytest-catchlog")
+     (version "1.2.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-catchlog" version ".zip"))
+        (sha256
+         (base32
+          "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("unzip" ,unzip)))
+     (propagated-inputs
 -     `(("pytest" ,python-pytest-3.0)))
++     `(("pytest" ,python-pytest)))
+     (home-page "https://github.com/eisensheng/pytest-catchlog";)
+     (synopsis "Pytest plugin to catch log messages")
+     (description
+      "Python-pytest-catchlog is a pytest plugin to catch log messages.  This 
is
+ a fork of pytest-capturelog.")
+     (license license:expat)))
+ 
+ (define-public python2-pytest-catchlog
+   (package-with-python2 python-pytest-catchlog))
+ 
+ (define-public python-nosexcover
+   (package
+     (name "python-nosexcover")
+     (version "1.0.11")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "nosexcover" version))
+               (sha256
+                (base32
+                 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-coverage" ,python-coverage)
+        ("python-nose" ,python-nose)))
+     (home-page "http://github.com/cmheisel/nose-xcover";)
+     (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
+     (description "Nose-xcover is a companion to the built-in
+ @code{nose.plugins.cover}.  This plugin will write out an XML coverage report
+ to a file named coverage.xml.
+ 
+ It will honor all the options you pass to the Nose coverage plugin,
+ especially -cover-package.")
+     (license license:expat)))
+ 
+ (define-public python2-nosexcover
+   (package-with-python2 python-nosexcover))
+ 
+ (define-public python-discover
+   (package
+     (name "python-discover")
+     (version "0.4.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://pypi.python.org/packages/source/d/discover/discover-";
+              version ".tar.gz"))
+        (sha256
+         (base32
+          "0y8d0zwiqar51kxj8lzmkvwc3b8kazb04gk5zcb4nzg5k68zmhq5"))))
+     (build-system python-build-system)
+     (home-page "http://pypi.python.org/pypi/discover/";)
+     (synopsis
+      "Python test discovery for unittest")
+     (description
+      "Discover provides test discovery for unittest, a feature that has been
+ backported from Python 2.7 for Python 2.4+.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-discover
+   (package-with-python2 python-discover))
+ 
+ (define-public behave
+   (package
+     (name "behave")
+     (version "1.2.5")
+     (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "behave" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-six" ,python-six)
+        ("python-parse" ,python-parse)
+        ("python-parse-type" ,python-parse-type)))
+     (arguments `(#:tests? #f))          ;TODO: tests require nose>=1.3 and
+                                         ;PyHamcrest>=1.8
+     (home-page "https://github.com/behave/behave";)
+     (synopsis "Python behavior-driven development")
+     (description
+      "Behave is a tool for behavior-driven development in python.
+ Behavior-driven development (or BDD) is an agile software development
+ technique that encourages collaboration between developers, QA and
+ non-technical or business participants in a software project.  Behave uses
+ tests written in a natural language style, backed up by Python code.")
+     (license license:x11)))
+ 
+ (define-public python-behave-web-api
+   (package
+     (name "python-behave-web-api")
+     (version "1.0.6")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "behave-web-api" version))
+        (sha256
+         (base32
+          "03kpq2xsy1gab3jy0dccbxlsg7vwfy4lagss0qldwmx3xz6b3i19"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'fix-dependencies
+            (lambda _
+              (substitute* "setup.py"
+                (("'wheel'") "")                ; We don't use it.
+                (("'ordereddict==1.1'") ""))))))) ; Python >= 2.7 has it 
built-in.
+     (propagated-inputs
+      `(("behave" ,behave)
+        ("python-requests" ,python-requests)))
+     (home-page "https://github.com/jefersondaniel/behave-web-api";)
+     (synopsis "Provides testing for JSON APIs with Behave for Python")
+     (description "This package provides testing utility modules for testing
+ JSON APIs with Behave.")
+     (license license:expat)))
+ 
+ (define-public python2-behave-web-api
+   (package-with-python2 python-behave-web-api))
+ 
+ (define-public python-rednose
+   (package
+     (name "python-rednose")
+     (version "1.2.1")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "rednose" version))
+         (sha256
+           (base32
+             "0b0bsna217lr1nykyhl5fgjly15zhdvqd4prg4wy1zrgfv7al6m0"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'fix-deps
+            (lambda _
+              ;; See <https://github.com/JBKahn/rednose/issues/12>
+              (substitute* "setup.py"
+                (("python-termstyle") "termstyle"))
+              #t)))))
+     (propagated-inputs
+      `(("python-colorama" ,python-colorama)
+        ("python-termstyle" ,python-termstyle)))
+     (native-inputs
+      `(("python-six" ,python-six)
+        ("python-nose" ,python-nose)))
+     (home-page "https://github.com/JBKahn/rednose";)
+     (synopsis "Colored output for Python nosetests")
+     (description "This package provides colored output for the
+ @command{nosetests} command of the Python Nose unit test framework.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-rednose
+   (package-with-python2 python-rednose))
+ 
+ (define-public python-nose-randomly
+   (package
+     (name "python-nose-randomly")
+     (version "1.2.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "nose-randomly" version))
+        (sha256
+         (base32
+          "1cw9dlr1zh3w4i438kin7z0rm8092ki52hayisyc43h9pcplq7rn"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-nose" ,python-nose)
+        ("python-numpy" ,python-numpy)))
+     (home-page "https://github.com/adamchainz/nose-randomly";)
+     (synopsis
+      "Nose plugin to randomly order tests and control random.seed")
+     (description
+      "This is a @code{Nose} plugin to randomly order tests which can be quite
+ powerful in discovering hidden flaws in the tests themselves, while helping to
+ reduce inter-test dependencies.  It also helps in controlling 
@code{random.seed},
+ by resetting it to a repeatable number for each test, enabling the tests to
+ create data based on random numbers and yet remain repeatable.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-nose-randomly
+   (package-with-python2 python-nose-randomly))
+ 
+ (define-public python-nose-timer
+   (package
+     (name "python-nose-timer")
+     (version "0.7.0")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "nose-timer" version))
+         (patches
+          (search-patches
+           ;; This patch will not be needed in the next version.
+           ;; It is taken from the master branch.
+           "python-nose-timer-drop-ordereddict.patch"))
+         (sha256
+           (base32
+             "1s32ymsnby8lz2qk55ifj9zi50dqcg6swnj5cz2rmwxg2jsslsxp"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-nose" ,python-nose)
+        ("python-termcolor" ,python-termcolor)))
+     (home-page "https://github.com/mahmoudimus/nose-timer";)
+     (synopsis "Timer plugin for nosetests")
+     (description "Shows how much time was needed to run individual tests.")
+     (license license:expat)))
+ 
+ (define-public python2-nose-timer
+   (package-with-python2 python-nose-timer))
+ 
+ (define-public python-freezegun
+   (package
+     (name "python-freezegun")
+     (version "0.3.8")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "freezegun" version))
+        (sha256
+         (base32
+          "1sf38d3ibv1jhhvr52x7dhrsiyqk1hm165dfv8w8wh0fhmgxg151"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-mock" ,python-mock)
+        ("python-nose" ,python-nose)
+        ("python-coverage" ,python-coverage)))
+     (propagated-inputs
+      `(("python-six" ,python-six)
+        ("python-dateutil" ,python-dateutil)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          ;; The tests are normally executed via `make test`, but the PyPi
+          ;; package does not include the Makefile.
+          (replace 'check
+            (lambda _
+              (zero? (system* "nosetests" "./tests/")))))))
+     (home-page "https://github.com/spulec/freezegun";)
+     (synopsis "Test utility for mocking the datetime module")
+     (description
+      "FreezeGun is a library that allows your python tests to travel through
+ time by mocking the datetime module.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-freezegun
+   (package-with-python2 python-freezegun))
+ 
+ (define-public python-flexmock
+   (package
+     (name "python-flexmock")
+     (version "0.10.2")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "flexmock" version))
+               (sha256
+                (base32
+                 "0arc6njvs6i9v9hgvzk5m50296g7zy5m9d7pyb43vdsdgxrci5gy"))))
+     (build-system python-build-system)
+     (home-page "https://flexmock.readthedocs.org";)
+     (synopsis "Testing library for Python")
+     (description
+      "flexmock is a testing library for Python that makes it easy to create
+ mocks, stubs and fakes.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-flexmock
+   (package-with-python2 python-flexmock))
+ 
+ (define-public python-flaky
+   (package
+     (name "python-flaky")
+     (version "3.4.0")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "flaky" version))
+               (sha256
+                (base32
+                 "18pkmf79rfkfpy1d2rrx3v55nxj762ilyk9rvd6s6dccxw58imsa"))))
+     (build-system python-build-system)
+     (arguments
+      ;; TODO: Tests require 'coveralls' and 'genty' which are not in Guix yet.
+      '(#:tests? #f))
+     (home-page "https://github.com/box/flaky";)
+     (synopsis "Automatically rerun flaky tests")
+     (description
+      "Flaky is a plugin for @code{nose} or @code{py.test} that automatically
+ reruns flaky tests.
+ 
+ Ideally, tests reliably pass or fail, but sometimes test fixtures must rely
+ on components that aren't 100% reliable.  With flaky, instead of removing
+ those tests or marking them to @code{@@skip}, they can be automatically
+ retried.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-flaky
+   (package-with-python2 python-flaky))
diff --cc gnu/packages/databases.scm
index 7fcef3f,b825a24..4f34141
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@@ -1866,3 -1928,577 +1928,578 @@@ and web services platform functionality
      ;; configure: error: ... can only be build on 64bit platforms
      (supported-systems '("x86_64-linux" "mips64el-linux" "aarch64-linux"))
      (license license:gpl2)))
+ 
+ (define-public r-rmysql
+   (package
+     (name "r-rmysql")
+     (version "0.10.13")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "RMySQL" version))
+        (sha256
+         (base32
+          "1j0vr2l4s02cg2hzgr3pla96pjj4h85sxw28lidy58rg5awnsf82"))))
+     (properties `((upstream-name . "RMySQL")))
+     (build-system r-build-system)
+     (native-inputs
+      `(("pkg-config" ,pkg-config)))
+     (inputs
+      `(("mariadb" ,mariadb)
+        ("zlib" ,zlib)))
+     (propagated-inputs
+      `(("r-dbi" ,r-dbi)))
+     (home-page "https://github.com/r-dbi/RMySQL";)
+     (synopsis "Database interface and MySQL driver for R")
+     (description
+      "This package provides a DBI interface to MySQL / MariaDB.  The RMySQL
+ package contains an old implementation based on legacy code from S-PLUS which
+ is being phased out.  A modern MySQL client based on Rcpp is available from
+ the RMariaDB package.")
+     (license license:gpl2)))
+ 
+ (define-public python-ccm
+   (package
+     (name "python-ccm")
+     (version "2.1.6")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "ccm" version))
+        (sha256
+         (base32
+          "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-pyyaml" ,python-pyyaml)
+        ;; Not listed in setup.py, but used in ccmlib/node.py for full
+        ;; functionality
+        ("python-psutil" ,python-psutil)
+        ("python-six" ,python-six)))
+     (home-page "https://github.com/pcmanus/ccm";)
+     (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
+ localhost")
+     (description "Cassandra Cluster Manager is a development tool for testing
+ local Cassandra clusters. It creates, launches and removes Cassandra clusters
+ on localhost.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-ccm
+   (package-with-python2 python-ccm))
+ 
+ (define-public python2-pysqlite
+   (package
+     (name "python2-pysqlite")
+     (version "2.8.3")
+     (source
+      (origin
+       (method url-fetch)
+       (uri (pypi-uri "pysqlite" version))
+       (sha256
+        (base32
+         "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
+     (build-system python-build-system)
+     (inputs
+      `(("sqlite" ,sqlite)))
+     (arguments
+      `(#:python ,python-2 ; incompatible with Python 3
+        #:tests? #f)) ; no test target
+     (home-page "https://github.com/ghaering/pysqlite";)
+     (synopsis "SQLite bindings for Python")
+     (description
+      "Pysqlite provides SQLite bindings for Python that comply to the
+ Database API 2.0T.")
+     (license license:zlib)))
+ 
+ (define-public python-sqlalchemy
+   (package
+     (name "python-sqlalchemy")
+     (version "1.0.12")
+     (source
+      (origin
+       (method url-fetch)
+       (uri (string-append "https://pypi.python.org/packages/source/S/";
+                           "SQLAlchemy/SQLAlchemy-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1l8qclhd0s90w3pvwhi5mjxdwr5j7gw7cjka2fx6f2vqmq7f4yb6"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-cython" ,python-cython) ;for c extensions
+        ("python-pytest" ,python-pytest)
+        ("python-mock"   ,python-mock))) ;for tests
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda _ (zero? (system* "py.test")))))))
+     (home-page "http://www.sqlalchemy.org";)
+     (synopsis "Database abstraction library")
+     (description
+      "SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
+ gives application developers the full power and flexibility of SQL.  It
+ provides a full suite of well known enterprise-level persistence patterns,
+ designed for efficient and high-performing database access, adapted into a
+ simple and Pythonic domain language.")
+     (license license:x11)))
+ 
+ (define-public python2-sqlalchemy
+   (package-with-python2 python-sqlalchemy))
+ 
+ (define-public python-sqlalchemy-utils
+   (package
+     (name "python-sqlalchemy-utils")
+     (version "0.32.13")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "SQLAlchemy-Utils" version))
+         (sha256
+          (base32
+           "0vsib7gidjamzsz6w4s5pdhxzxsrkghjnm4sqwk94igjrl3i5ixj"))))
+     (build-system python-build-system)
+     (arguments
+      '(#:tests? #f)) ; FIXME: Many tests require a running database server.
+        ;; #:phases
+        ;; (modify-phases %standard-phases
+        ;;   (replace 'check
+        ;;     (lambda _
+        ;;       (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
+     (propagated-inputs
+      `(("python-six" ,python-six)
+        ("python-sqlalchemy" ,python-sqlalchemy)))
+     (native-inputs
+      `(("python-dateutil" ,python-dateutil)
+        ("python-flexmock" ,python-flexmock)
+        ("python-psycopg2" ,python-psycopg2)
+        ("python-pytest" ,python-pytest)
+        ("python-pytz" ,python-pytz)))
+     (home-page "https://github.com/kvesteri/sqlalchemy-utils";)
+     (synopsis "Various utility functions for SQLAlchemy")
+     (description
+      "SQLAlchemy-utils provides various utility functions and custom data 
types
+ for SQLAlchemy.  SQLAlchemy is an SQL database abstraction library for Python.
+ 
+ You might also want to install the following optional dependencies:
+ @enumerate
+ @item @code{python-passlib}
+ @item @code{python-babel}
+ @item @code{python-cryptography}
+ @item @code{python-pytz}
+ @item @code{python-psycopg2}
+ @item @code{python-furl}
+ @item @code{python-flask-babel}
+ @end enumerate
+ ")
+     (license license:bsd-3)))
+ 
+ (define-public python2-sqlalchemy-utils
+   (package-with-python2 python-sqlalchemy-utils))
+ 
+ (define-public python-alembic
+   (package
+     (name "python-alembic")
+     (version "0.9.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "alembic" version))
+        (sha256
+         (base32
+          "01gx2syqbaxh4hr9pf7pxhlb6p36qaf99140dy19lsx1paxb9p4b"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-mock" ,python-mock)
+        ("python-pytest-cov" ,python-pytest-cov)))
+     (propagated-inputs
+      `(("python-dateutil" ,python-dateutil)
+        ("python-sqlalchemy" ,python-sqlalchemy)
+        ("python-mako" ,python-mako)
+        ("python-editor" ,python-editor)))
+     (home-page "http://bitbucket.org/zzzeek/alembic";)
+     (synopsis
+      "Database migration tool for SQLAlchemy")
+     (description
+      "Alembic is a lightweight database migration tool for usage with the
+ SQLAlchemy Database Toolkit for Python.")
+     (license license:expat)))
+ 
+ (define-public python2-alembic
+   (package-with-python2 python-alembic))
+ 
+ (define-public python-pickleshare
+   (package
+     (name "python-pickleshare")
+     (version "0.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://pypi.python.org/packages/source/p/";
+                            "pickleshare/pickleshare-" version ".tar.gz"))
+        (sha256
+         (base32 "11ljr90j3p6qswdrbl7p4cjb2i93f6vn0vx9anzpshsx0d2mggn0"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-pathpy" ,python-pathpy)))
+     (home-page "https://github.com/vivainio/pickleshare";)
+     (synopsis "Tiny key value database with concurrency support")
+     (description
+      "PickleShare is a small ‘shelve’-like datastore with concurrency support.
+ Like shelve, a PickleShareDB object acts like a normal dictionary.  Unlike
+ shelve, many processes can access the database simultaneously.  Changing a
+ value in database is immediately visible to other processes accessing the same
+ database.  Concurrency is possible because the values are stored in separate
+ files.  Hence the “database” is a directory where all files are governed by
+ PickleShare.")
+     (license license:expat)))
+ 
+ (define-public python2-pickleshare
+   (package-with-python2 python-pickleshare))
+ 
+ (define-public python-apsw
+   (package
+     (name "python-apsw")
 -    (version "3.9.2-r1")
++    (version "3.20.1-r1")
+     (source
+       (origin
+         (method url-fetch)
 -        (uri (pypi-uri "apsw" version))
++        (uri (string-append "https://github.com/rogerbinns/apsw/archive/";
++                            version ".tar.gz"))
+         (sha256
+           (base32
 -           "0w4jb0wpx785qw42r3h4fh7gl5w2968q48i7gygybsfxck8nzffs"))))
++           "00ai7m2pqi26qaflhz314d8k5i3syw7xzr145fhfl0crhyh6adz2"))))
+     (build-system python-build-system)
+     (inputs
+       `(("sqlite" ,sqlite)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (replace 'build
+            (lambda _
+              (zero?
+               (system* "python" "setup.py" "build" 
"--enable-all-extensions"))))
+          (add-after 'build 'build-test-helper
+            (lambda _
+              (zero?
+               (system
+                (string-append "gcc -fPIC -shared -o ./testextension.sqlext "
+                               "-I. -Isqlite3 src/testextension.c") ))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (add-installed-pythonpath inputs outputs)
+              (zero? (system* "python" "setup.py" "test")))))))
+     (home-page "https://github.com/rogerbinns/apsw/";)
+     (synopsis "Another Python SQLite Wrapper")
+     (description "APSW is a Python wrapper for the SQLite
+ embedded relational database engine.  In contrast to other wrappers such as
+ pysqlite it focuses on being a minimal layer over SQLite attempting just to
+ translate the complete SQLite API into Python.")
+     (license license:zlib)))
+ 
+ (define-public python2-apsw
+   (package-with-python2 python-apsw))
+ 
+ (define-public python2-neo4j-driver
+   (package
+     (name "python2-neo4j-driver")
+     ;; NOTE: When upgrading to 1.5.0, please add a python3 variant.
+     (version "1.4.0")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "neo4j-driver" version))
+               (sha256
+                (base32
+                 "011r1vh182p8mm83d8dz9rfnc3l7rf7fd00cyrbyfzi71jmc4g98"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:python ,python-2))
+     (home-page "https://neo4j.com/developer/python/";)
+     (synopsis "Neo4j driver code written in Python")
+     (description "This package provides the Neo4j Python driver that connects
+ to the database using Neo4j's binary protocol.  It aims to be minimal, while
+ being idiomatic to Python.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-py2neo
+   (package
+     (name "python2-py2neo")
+     (version "3.1.2")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "py2neo" version))
+               (sha256
+                (base32
+                 "1f1q95vqcvlc3nsc33p841swnjdcjazddlq2dzi3qfnjqjrajxw1"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:python ,python-2))
+     (home-page "http://py2neo.org";)
+     (synopsis "Library and toolkit for working with Neo4j in Python")
+     (description "This package provides a client library and toolkit for
+ working with Neo4j from within Python applications and from the command
+ line.  The core library has no external dependencies and has been carefully
+ designed to be easy and intuitive to use.")
+     (license license:asl2.0)))
+ 
+ (define-public python-psycopg2
+   (package
+     (name "python-psycopg2")
+     (version "2.7.3.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "psycopg2" version))
+        (sha256
+         (base32
+          "0rda1j02ds6s28752fhmpwg761sh6jsxi1gpczqkrd28cki1cywv"))))
+     (build-system python-build-system)
+     (arguments
+      ;; Tests would require a postgresql database "psycopg2_test"
+      ;; and a running postgresql database management service.
+      `(#:tests? #f)) ; TODO re-enable after providing a test-db.
+     (inputs
+      `(("postgresql" ,postgresql))) ; libpq
+     (home-page "http://initd.org/psycopg/";)
+     (synopsis "Python PostgreSQL adapter")
+     (description
+      "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API 
2.0. ")
+     (license license:lgpl3+)))
+ 
+ (define-public python2-psycopg2
+   (package-with-python2 python-psycopg2))
+ 
+ (define-public python-sadisplay
+   (package
+     (name "python-sadisplay")
+     (version "0.4.6")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "sadisplay" version))
+       (sha256
+         (base32
+           "0zqad2fl7q26p090qmqgmxbm6iwgf9zij1w8da1g3wdgjj72ql05"))))
+     (build-system python-build-system)
+     (propagated-inputs
+       `(("python-sqlalchemy" ,python-sqlalchemy)))
+     (native-inputs
+       `(("python-nose" ,python-nose)))
+     (home-page "https://bitbucket.org/estin/sadisplay";)
+     (synopsis "SQLAlchemy schema displayer")
+     (description "This package provides a program to build Entity
+ Relationship diagrams from a SQLAlchemy model (or directly from the
+ database).")
+     (license license:bsd-3)))
+ 
+ (define-public python2-sadisplay
+   (package-with-python2 python-sadisplay))
+ 
+ (define-public python-mysqlclient
+   (package
+     (name "python-mysqlclient")
+     (version "1.3.10")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mysqlclient" version))
+        (sha256
+         (base32
+          "0qkj570x4rbsblji6frvsvp2v1ap32dqzj1lq62zp9515ffsyaj5"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("mariadb" ,mariadb)
+        ("nose" ,python-nose)
+        ("mock" ,python-mock)
+        ("py.test" ,python-pytest)))
+     (inputs
+      `(("mysql" ,mysql)
+        ("libz" ,zlib)
+        ("openssl" ,openssl)))
+     (home-page "https://github.com/PyMySQL/mysqlclient-python";)
+     (synopsis "MySQLdb is an interface to the popular MySQL database server 
for Python")
+     (description "MySQLdb is an interface to the popular MySQL database server
+ for Python.  The design goals are:
+ @enumerate
+ @item Compliance with Python database API version 2.0 [PEP-0249],
+ @item Thread-safety,
+ @item Thread-friendliness (threads will not block each other).
+ @end enumerate")
+     (license license:gpl2)))
+ 
+ (define-public python2-mysqlclient
+   (package-with-python2 python-mysqlclient))
+ 
+ (define-public python-hiredis
+   (package
+     (name "python-hiredis")
+     (version "0.2.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "hiredis" version))
+        (sha256
+         (base32
+          "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
+     (build-system python-build-system)
+     (arguments
+      ;; no tests
+      `(#:tests? #f))
+     (home-page "https://github.com/redis/hiredis-py";)
+     (synopsis "Python extension that wraps protocol parsing code in hiredis")
+     (description "Python-hiredis is a python extension that wraps protocol
+ parsing code in hiredis.  It primarily speeds up parsing of multi bulk 
replies.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-hiredis
+   (package-with-python2 python-hiredis))
+ 
+ (define-public python-fakeredis
+   (package
+     (name "python-fakeredis")
+     (version "0.8.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "fakeredis" version))
+        (sha256
+         (base32
+          "0zncahj3byyasyfx9i7k991ph0n0lq8v3a21pqri5qxn9564bk9r"))))
+     (build-system python-build-system)
+     (arguments
+      ;; no tests
+      `(#:tests? #f))
+     (home-page "https://github.com/jamesls/fakeredis";)
+     (synopsis "Fake implementation of redis API for testing purposes")
+     (description "Fakeredis is a pure python implementation of the redis-py
+ python client that simulates talking to a redis server.  This was created for 
a
+ single purpose: to write unittests.  Setting up redis is not hard, but many 
time
+  you want to write unittests that do not talk to an external server (such as
+ redis).  This module now allows tests to simply use this module as a 
reasonable
+ substitute for redis.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-fakeredis
+   (package-with-python2 python-fakeredis))
+ 
+ (define-public python-redis
+   (package
+     (name "python-redis")
+     (version "2.10.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "redis" version))
+        (sha256
+         (base32 "0csmrkxb29x7xs9b51zplwkkq2hwnbh9jns1g85dykn5rxmaxysx"))))
+     (build-system python-build-system)
+     ;; Tests require a running Redis server
+     (arguments '(#:tests? #f))
+     ;; As long as we are not running test, we do not need this input :-)
+     ;;(native-inputs
+     ;; `(("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/andymccurdy/redis-py";)
+     (synopsis "Redis Python client")
+     (description
+      "This package provides a Python interface to the Redis key-value store.")
+     (license license:expat)))
+ 
+ (define-public python2-redis
+   (package-with-python2 python-redis))
+ 
+ (define-public python-rq
+   (package
+     (name "python-rq")
+     (version "0.7.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "rq" version))
+        (sha256
+         (base32 "0gaq5pnh0zy46r8jvygi0ifbvz3pq6i7xla78ijcgjw0x77qzsdh"))))
+     (build-system python-build-system)
+     (propagated-inputs
+      `(("python-click" ,python-click)
+        ("python-redis" ,python-redis)))
+     (home-page "http://python-rq.org/";)
+     (synopsis "Simple job queues for Python")
+     (description
+      "RQ (Redis Queue) is a simple Python library for queueing jobs and
+ processing them in the background with workers.  It is backed by Redis and it
+ is designed to have a low barrier to entry.")
+     (license license:bsd-2)))
+ 
+ (define-public python2-rq
+   (package-with-python2 python-rq))
+ 
+ (define-public python-trollius-redis
+   (package
+     (name "python-trollius-redis")
+     (version "0.1.4")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "trollius_redis" version))
+         (sha256
+          (base32
+           "0k3vypszmgmaipgw9xscvgm79h2zd6p6ci8gdp5sxl6g5kbqr9fy"))))
+     (build-system python-build-system)
+     ;; TODO: Tests require packaging 'hiredis'.
+     (arguments '(#:tests? #f))
+     (home-page "https://github.com/benjolitz/trollius-redis";)
+     (synopsis "Port of asyncio-redis to trollius")
+     (description "@code{trollius-redis} is a Redis client for Python
+   trollius.  It is an asynchronious IO (PEP 3156) implementation of the
+   Redis protocol.")
+     (license license:bsd-2)))
+ 
+ (define-public python2-trollius-redis
+   (package-with-python2 python-trollius-redis))
+ 
+ (define-public python-sqlparse
+   (package
+     (name "python-sqlparse")
+     (version "0.2.4")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "sqlparse" version))
+               (sha256
+                (base32
+                 "1v3xh0bkfhb262dbndgzhivpnhdwavdzz8jjhx9vx0xbrx2880nf"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda _ (zero? (system* "py.test")))))))
+     (native-inputs
+      `(("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/andialbrecht/sqlparse";)
+     (synopsis "Non-validating SQL parser")
+     (description "Sqlparse is a non-validating SQL parser for Python.  It
+ provides support for parsing, splitting and formatting SQL statements.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-sqlparse
+   (package-with-python2 python-sqlparse))
+ 
+ (define-public python-sql
+   (package
+     (name "python-sql")
+     (version "0.9")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "python-sql" version))
+        (sha256
+         (base32
+          "0p6kaqj02vz0habmdx37zjk6hjxdfm8aw737zs059vvpr70ird87"))))
+     (build-system python-build-system)
+     (home-page "https://python-sql.tryton.org/";)
+     (synopsis "Library to write SQL queries in a pythonic way")
+     (description "@code{python-sql} is a library to write SQL queries, that
+ transforms idiomatic python function calls to well-formed SQL queries.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-sql
+   (package-with-python2 python-sql))
diff --cc gnu/packages/django.scm
index f983b1a,bbf231a..e118143
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@@ -151,7 -154,7 +154,7 @@@ with arguments to the field constructor
       `(("python-django" ,python-django)
         ("python-setuptools-scm" ,python-setuptools-scm)))
      (propagated-inputs
--     `(("python-pytest" ,python-pytest-3.0)))
++     `(("python-pytest" ,python-pytest)))
      (home-page "http://pytest-django.readthedocs.org/";)
      (synopsis "Django plugin for py.test")
      (description "Pytest-django is a plugin for py.test that provides a set of
diff --cc gnu/packages/gcc.scm
index a4d181c,79e159f..dab2f99
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@@ -136,10 -136,10 +136,11 @@@ where the OS part is overloaded to deno
                 (method url-fetch)
                 (uri (string-append "mirror://gnu/gcc/gcc-"
                                     version "/gcc-" version ".tar.bz2"))
+                (patches (search-patches "gcc-4-compile-with-gcc-5.patch"))
                 (sha256
                  (base32
 -                 "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj"))))
 +                 "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj"))
 +               (patches (search-patches "gcc-fix-texi2pod.patch"))))
        (build-system gnu-build-system)
  
        ;; Separate out the run-time support libraries because all the
diff --cc gnu/packages/package-management.scm
index cd81888,1570992..7c1d42c
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@@ -35,7 -35,7 +35,8 @@@
    #:use-module (gnu packages guile)
    #:use-module (gnu packages file)
    #:use-module (gnu packages backup)
 +  #:use-module (gnu packages bootstrap)          ;for 'bootstrap-guile-origin'
+   #:use-module (gnu packages check)
    #:use-module (gnu packages compression)
    #:use-module (gnu packages gnupg)
    #:use-module (gnu packages databases)
diff --cc gnu/packages/python-crypto.scm
index 0000000,77409d8..98a869d
mode 000000,100644..100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@@ -1,0 -1,637 +1,637 @@@
+ ;;; GNU Guix --- Functional package management for GNU
+ ;;; Copyright © 2015 Eric Dvorsak <address@hidden>
+ ;;; Copyright © 2015, 2016, 2017 Efraim Flashner <address@hidden>
+ ;;; Copyright © 2015, 2016, 2017 Leo Famulari <address@hidden>
+ ;;; Copyright © 2016, 2017 Marius Bakke <address@hidden>
+ ;;; Copyright © 2017 Ben Sturmfels <address@hidden>
+ ;;; Copyright © 2016 Sou Bunnbu <address@hidden>
+ ;;; Copyright © 2015 Cyril Roelandt <address@hidden>
+ ;;; Copyright © 2014, 2017 Eric Bavier <address@hidden>
+ ;;; Copyright © 2015, 2016 David Thompson <address@hidden>
+ ;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <address@hidden>
+ ;;; Copyright © 2016, 2017 ng0 <address@hidden>
+ ;;; Copyright © 2014, 2015 Mark H Weaver <address@hidden>
+ ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <address@hidden>
+ ;;; Copyright © 2016 Danny Milosavljevic <address@hidden>
+ ;;; Copyright © 2016, 2017 Arun Isaac <address@hidden>
+ ;;; Copyright © 2017 Carlo Zancanaro <address@hidden>
+ ;;;
+ ;;; This file is part of GNU Guix.
+ ;;;
+ ;;; GNU Guix is free software; you can redistribute it and/or modify it
+ ;;; under the terms of the GNU General Public License as published by
+ ;;; the Free Software Foundation; either version 3 of the License, or (at
+ ;;; your option) any later version.
+ ;;;
+ ;;; GNU Guix is distributed in the hope that it will be useful, but
+ ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;;; GNU General Public License for more details.
+ ;;;
+ ;;; You should have received a copy of the GNU General Public License
+ ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ (define-module (gnu packages python-crypto)
+   #:use-module (guix packages)
+   #:use-module (guix download)
+   #:use-module (guix git-download)
+   #:use-module (guix build-system python)
+   #:use-module (gnu packages)
+   #:use-module (gnu packages check)
+   #:use-module (gnu packages crypto)
+   #:use-module (gnu packages libffi)
+   #:use-module (gnu packages multiprecision)
+   #:use-module (gnu packages protobuf)
+   #:use-module (gnu packages python)
+   #:use-module (gnu packages time)
+   #:use-module (gnu packages tls)
+   #:use-module ((guix licenses) #:prefix license:)
+   #:use-module (srfi srfi-1))
+ 
+ (define-public python-passlib
+   (package
+     (name "python-passlib")
+     (version "1.7.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "passlib" version))
+        (sha256
+         (base32
+          "1q2khqpj9rlcgdmkypjdq1kswvhjf72bq0zk2cv669cc2dj8z51x"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-nose" ,python-nose)))
+     (propagated-inputs
+      `(("python-py-bcrypt" ,python-py-bcrypt)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'set-PYTHON_EGG_CACHE
+            ;; some tests require access to "$HOME/.cython"
+            (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
+     (home-page "https://bitbucket.org/ecollins/passlib";)
+     (synopsis
+      "Comprehensive password hashing framework")
+     (description
+      "Passlib is a password hashing library for Python 2 & 3, which provides
+ cross-platform implementations of over 30 password hashing algorithms, as well
+ as a framework for managing existing password hashes.  It's designed to be
+ useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
+ to providing full-strength password hashing for multi-user application.")
+     (license license:bsd-3)))
+ 
+ (define-public python2-passlib
+   (package-with-python2 python-passlib))
+ 
+ (define-public python-py-bcrypt
+   (package
+     (name "python-py-bcrypt")
+     (version "0.4")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-";
+              version
+              ".tar.gz"))
+        (sha256
+         (base32
+          "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
+     (build-system python-build-system)
+     (home-page "https://code.google.com/p/py-bcrypt";)
+     (synopsis
+      "Bcrypt password hashing and key derivation")
+     (description
+      "A python wrapper of OpenBSD's Blowfish password hashing code.  This
+ system hashes passwords using a version of Bruce Schneier's Blowfish block
+ cipher with modifications designed to raise the cost of off-line password
+ cracking and frustrate fast hardware implementation.  The computation cost of
+ the algorithm is parametised, so it can be increased as computers get faster.
+ The intent is to make a compromise of a password database less likely to
+ result in an attacker gaining knowledge of the plaintext passwords (e.g. using
+ John the Ripper).")
+     ;; "sha2.c" is under BSD-3;
+     ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
+     ;; the rest is under ISC.
+     (license (list license:isc license:bsd-3 license:bsd-4))))
+ 
+ (define-public python2-py-bcrypt
+   (package-with-python2 python-py-bcrypt))
+ 
+ (define-public python-paramiko
+   (package
+     (name "python-paramiko")
+     (version "2.1.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "paramiko" version))
+        (sha256
+         (base32
+          "04734n0wy3hxk6rij4fr29in5jmr70nxpc7pqi2ksbjysfz4kbjz"))))
+     (build-system python-build-system)
+     (arguments
+      '(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda _
+              (zero? (system* "python" "test.py")))))))
+     (propagated-inputs
+      `(("python-pyasn1" ,python-pyasn1)
+        ("python-cryptography" ,python-cryptography)))
+     (home-page "http://www.paramiko.org/";)
+     (synopsis "SSHv2 protocol library")
+     (description "Paramiko is a python implementation of the SSHv2 protocol,
+ providing both client and server functionality.  While it leverages a Python C
+ extension for low level cryptography (PyCrypto), Paramiko itself is a pure
+ Python interface around SSH networking concepts.")
+     (license license:lgpl2.1+)))
+ 
+ (define-public python2-paramiko
+   (package-with-python2 python-paramiko))
+ 
+ (define-public python-ecdsa
+   (package
+     (name "python-ecdsa")
+     (version "0.13")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://pypi.python.org/packages/source/e/ecdsa/ecdsa-";
+              version
+              ".tar.gz"))
+        (sha256
+         (base32
+          "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4"))))
+     (build-system python-build-system)
+     (inputs
+      `(("openssl" ,openssl)))
+     (home-page
+      "https://github.com/warner/python-ecdsa";)
+     (synopsis
+      "ECDSA cryptographic signature library (pure python)")
+     (description
+      "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
+ Curve Digital Signature Algorithm), implemented purely in Python.  With this
+ library, you can quickly create keypairs (signing key and verifying key), sign
+ messages, and verify the signatures.  The keys and signatures are very short,
+ making them easy to handle and incorporate into other protocols.")
+     (license license:expat)))
+ 
+ (define-public python2-ecdsa
+   (package-with-python2 python-ecdsa))
+ 
+ ;;; Pycrypto is abandoned upstream:
+ ;;;
+ ;;; https://github.com/dlitz/pycrypto/issues/173
+ ;;;
+ ;;; TODO Remove this package from GNU Guix.
+ (define-public python-pycrypto
+   (package
+     (name "python-pycrypto")
+     (version "2.6.1")
+     (source
+      (origin
+       (method url-fetch)
+       (uri (pypi-uri "pycrypto" version))
+       (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"))
+       (sha256
+        (base32
+         "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
+     (build-system python-build-system)
+     (inputs
+      `(("python" ,python)
+        ("gmp" ,gmp)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-before 'build 'set-build-env
+            ;; pycrypto runs an autoconf configure script behind the scenes
+            (lambda _ (setenv "CONFIG_SHELL" (which "bash")) #t)))))
+     (home-page "http://www.pycrypto.org/";)
+     (synopsis "Cryptographic modules for Python")
+     (description
+      "Pycrypto is a collection of both secure hash functions (such as SHA256
+ and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
+ etc.).  The package is structured to make adding new modules easy.")
+     (license license:public-domain)))
+ 
+ (define-public python2-pycrypto
+   (let ((pycrypto (package-with-python2 python-pycrypto)))
+     (package (inherit pycrypto)
+       (inputs
+        `(("python" ,python-2)
+          ,@(alist-delete
+             "python"
+             (package-inputs pycrypto)))))))
+ 
+ (define-public python-keyring
+   (package
+     (name "python-keyring")
+     (version "8.7")
+     (source
+      (origin
+       (method url-fetch)
+       (uri (pypi-uri "keyring" version))
+       (sha256
+        (base32
+         "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
+     (build-system python-build-system)
+     (native-inputs
+      `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (propagated-inputs
+      `(("python-pycrypto" ,python-pycrypto)))
+     (arguments
+      `(#:tests? #f))                      ;TODO: tests require pytest
+     (home-page "https://github.com/jaraco/keyring";)
+     (synopsis "Store and access your passwords safely")
+     (description
+      "The Python keyring lib provides a easy way to access the system keyring
+ service from python.  It can be used in any application that needs safe
+ password storage.")
+     ;; "MIT" and PSF dual license
+     (license license:x11)))
+ 
+ (define-public python2-keyring
+   (package-with-python2 python-keyring))
+ 
+ (define-public python-certifi
+   (package
+     (name "python-certifi")
+     (version "2017.1.23")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "certifi" version))
+               (sha256
+                (base32
+                 "1klrzl3hgvcf2mjk00g0k3kk1p2z27vzwnxivwar4vhjmjvpz1w1"))))
+     (build-system python-build-system)
+     (home-page "https://certifi.io/";)
+     (synopsis "Python CA certificate bundle")
+     (description
+      "Certifi is a Python library that contains a CA certificate bundle, which
+ is used by the Requests library to verify HTTPS requests.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-certifi
+   (package-with-python2 python-certifi))
+ 
+ (define-public python-cryptography-vectors
+   (package
+     (name "python-cryptography-vectors")
+     (version "2.0.3")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "cryptography_vectors" version))
+        (sha256
+         (base32
+          "1qa117fs1yd50zn2cfxh7d9l999ds0z4h83m9m7j4fk6ffm33f5y"))))
+     (build-system python-build-system)
+     (home-page "https://github.com/pyca/cryptography";)
+     (synopsis "Test vectors for the cryptography package")
+     (description
+       "This package contains test vectors for the cryptography package.")
+     ;; Distributed under either BSD-3 or ASL2.0
+     (license (list license:bsd-3 license:asl2.0))))
+ 
+ (define-public python2-cryptography-vectors
+   (package-with-python2 python-cryptography-vectors))
+ 
+ (define-public python-cryptography
+   (package
+     (name "python-cryptography")
+     (version "2.0.3")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "cryptography" version))
+        (sha256
+         (base32
+          "0fnck37zyvbzmccbp7w3jy27jgmij1992j5wyy3gxhw6a11b4jyh"))))
+     (build-system python-build-system)
+     (inputs
+      `(("openssl" ,openssl)))
+     (propagated-inputs
+      `(("python-asn1crypto" ,python-asn1crypto)
+        ("python-cffi" ,python-cffi)
+        ("python-six" ,python-six)
+        ("python-idna" ,python-idna)
+        ("python-iso8601" ,python-iso8601)))
+     (native-inputs
+      `(("python-cryptography-vectors" ,python-cryptography-vectors)
+        ("python-hypothesis" ,python-hypothesis)
+        ("python-pretend" ,python-pretend)
+        ("python-pytz" ,python-pytz)
 -       ("python-pytest" ,python-pytest-3.0)))
++       ("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/pyca/cryptography";)
+     (synopsis "Cryptographic recipes and primitives for Python")
+     (description
+       "cryptography is a package which provides cryptographic recipes and
+ primitives to Python developers.  It aims to be the “cryptographic standard
+ library” for Python.  The package includes both high level recipes, and low
+ level interfaces to common cryptographic algorithms such as symmetric ciphers,
+ message digests and key derivation functions.")
+     ;; Distributed under either BSD-3 or ASL2.0
+     (license (list license:bsd-3 license:asl2.0))
+     (properties `((python2-variant . ,(delay python2-cryptography))))))
+ 
+ (define-public python2-cryptography
+   (let ((crypto (package-with-python2
+                  (strip-python2-variant python-cryptography))))
+     (package (inherit crypto)
+       (propagated-inputs
+        `(("python2-ipaddress" ,python2-ipaddress)
+          ("python2-backport-ssl-match-hostname"
+           ,python2-backport-ssl-match-hostname)
+          ("python2-enum34" ,python2-enum34)
+          ,@(package-propagated-inputs crypto))))))
+ 
+ (define-public python-pyopenssl
+   (package
+     (name "python-pyopenssl")
+     (version "17.3.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pyOpenSSL" version))
+        (sha256
+         (base32
+          "0xkc1wfnpg6abzllivg3ylhc63npjdy1v81f4kc08bm8cj80nqr9"))))
+     (build-system python-build-system)
+     (arguments
+      '(#:phases
+        (modify-phases %standard-phases
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (add-installed-pythonpath inputs outputs)
+              (zero? (system* "py.test" "-v" "-k"
+                              (string-append
+                               ;; This test tries to look up certificates from
+                               ;; the compiled-in default path in OpenSSL, 
which
+                               ;; does not exist in the build environment.
+                               "not test_fallback_default_verify_paths "
+                               ;; This test attempts to make a connection to
+                               ;; an external web service.
+                               "and not test_set_default_verify_paths"))))))))
+     (propagated-inputs
+      `(("python-cryptography" ,python-cryptography)
+        ("python-six" ,python-six)))
+     (inputs
+      `(("openssl" ,openssl)))
+     (native-inputs
+      `(("python-flaky" ,python-flaky)
+        ("python-pretend" ,python-pretend)
 -       ("python-pytest" ,python-pytest-3.0)))
++       ("python-pytest" ,python-pytest)))
+     (home-page "https://github.com/pyca/pyopenssl";)
+     (synopsis "Python wrapper module around the OpenSSL library")
+     (description
+       "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
+ library.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-pyopenssl
+   (package-with-python2 python-pyopenssl))
+ 
+ (define-public python-axolotl-curve25519
+   (package
+     (name "python-axolotl-curve25519")
+     (version "0.1")
+     (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/tgalal/python-axolotl-curve25519";)
+              (commit "e4a9c4de0eae27223200579c58d1f8f6d20637e2")))
+        (file-name (string-append name "-" version "-checkout"))
+        (sha256
+         (base32
+          "0agap5q0hmvf6cwzjqc05kw53pjgf6942pcivpazksmg1vk400ra"))))
+     (build-system python-build-system)
+     (arguments
+      `(;; Prevent creation of the egg. This works around
+        ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
+        #:configure-flags '("--root=/")))
+     (home-page "https://github.com/tgalal/python-axolotl-curve25519";)
+     (synopsis "Python wrapper for curve25519 library")
+     (description "This is a python wrapper for the curve25519 library
+ with ed25519 signatures.  The C code was pulled from
+ libaxolotl-android.  At the moment this wrapper is meant for use by
+ python-axolotl.")
+     (license (list license:gpl3    ; Most files
+                    license:bsd-3)))) ; curve/curve25519-donna.c
+ 
+ (define-public python2-axolotl-curve25519
+   (package-with-python2 python-axolotl-curve25519))
+ 
+ (define-public python-axolotl
+   (package
+     (name "python-axolotl")
+     (version "0.1.35")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://github.com/tgalal/python-axolotl/archive/";
+              version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "1z8d89p7v40p4bwywjm9h4z28fdvra79ddw06azlkrfjbl7dxmz8"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          ;; Don't install tests
+          (add-before 'install 'remove-tests
+            (lambda _
+              (for-each delete-file-recursively
+                        '("axolotl/tests" "build/lib/axolotl/tests"))
+              #t)))))
+     (propagated-inputs
+      `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
+        ("python-dateutil" ,python-dateutil)
+        ("python-protobuf" ,python-protobuf)
+        ("python-pycrypto" ,python-pycrypto)))
+     (home-page "https://github.com/tgalal/python-axolotl";)
+     (synopsis "Python port of libaxolotl-android")
+     (description "This is a python port of libaxolotl-android.  This
+ is a ratcheting forward secrecy protocol that works in synchronous and
+ asynchronous messaging environments.")
+     (license license:gpl3)))
+ 
+ (define-public python2-axolotl
+   (package-with-python2 python-axolotl))
+ 
+ ;; SlowAES isn't compatible with Python 3.
+ (define-public python2-slowaes
+   (package
+     (name "python2-slowaes")
+     (version "0.1a1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "slowaes" version))
+        (sha256
+         (base32
+          "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
+     (build-system python-build-system)
+     (arguments `(#:python ,python-2))
+     (home-page "http://code.google.com/p/slowaes/";)
+     (synopsis "Implementation of AES in Python")
+     (description "This package contains an implementation of AES in Python.
+ This implementation is slow (hence the project name) but still useful when
+ faster ones are not available.")
+     (license license:asl2.0)))
+ 
+ (define-public python-pyaes
+   (package
+     (name "python-pyaes")
+     (version "1.6.0")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pyaes" version))
+        (sha256
+         (base32
+          "0bp9bjqy1n6ij1zb86wz9lqa1dhla8qr1d7w2kxyn7jbj56sbmcw"))))
+     (build-system python-build-system)
+     (home-page "https://github.com/ricmoo/pyaes";)
+     (synopsis "Implementation of AES in Python")
+     (description "This package contains a pure-Python implementation of the
+ AES block cipher algorithm and the common modes of operation (CBC, CFB, CTR,
+ ECB and OFB).")
+     (license license:expat)))
+ 
+ (define-public python2-pyaes
+   (package-with-python2 python-pyaes))
+ 
+ (define-public python-asn1crypto
+   (package
+     (name "python-asn1crypto")
+     (version "0.22.0")
+     (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://github.com/wbond/asn1crypto/archive/";
+                             version ".tar.gz"))
+         (sha256
+          (base32
+           "1kn910896l3knmilla1c9ly20q181s43w1ah08lzkbm1h3j6pcz0"))))
+     (build-system python-build-system)
+     (home-page "https://github.com/wbond/asn1crypto";)
+     (synopsis "ASN.1 parser and serializer in Python")
+     (description "asn1crypto is an ASN.1 parser and serializer with 
definitions
+ for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7,
+ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
+     (license license:expat)))
+ 
+ (define-public python2-asn1crypto
+   (package-with-python2 python-asn1crypto))
+ 
+ (define-public python-pynacl
+   (package
+     (name "python-pynacl")
+     (version "1.1.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "PyNaCl" version))
+        (modules '((guix build utils)))
+        ;; Remove bundled libsodium
+        (snippet '(delete-file-recursively "src/libsodium"))
+        (sha256
+         (base32
+          "135gz0020fqx8fbr9izpwyq49aww202nkqacq0cw61xz99sjpx9j"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-before 'build 'use-system-sodium
+            (lambda _
+              (setenv "SODIUM_INSTALL" "system")
+              #t)))))
+     (native-inputs
+      `(("python-pytest" ,python-pytest)))
+     (propagated-inputs
+      `(("python-cffi" ,python-cffi)
+        ("python-six" ,python-six)
+        ("libsodium" ,libsodium)))
+     (home-page "https://github.com/pyca/pynacl/";)
+     (synopsis "Python bindings to libsodium")
+     (description
+      "PyNaCl is a Python binding to libsodium, which is a fork of the
+ Networking and Cryptography library.  These libraries have a stated goal
+ of improving usability, security and speed.")
+     (license license:asl2.0)))
+ 
+ (define-public python2-pgpdump
+   (package
+     (name "python2-pgpdump")
+     (version "1.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pgpdump" version))
+        (sha256
+         (base32
+          "0s4nh8h7qsdj2yf29bspjs1zvxd4lcd11r6g11dp7fppgf2h0iqw"))))
+     (build-system python-build-system)
+ 
+     ;; Currently fails to build with Python 3.
+     (arguments `(#:python ,python-2))
+ 
+     (home-page "https://github.com/toofishes/python-pgpdump";)
+     (synopsis "Python library for parsing PGP packets")
+     (description
+      "Python-pgpdump is an OpenPGP packet parser based on
+ @uref{http://www.mew.org/~kazu/proj/pgpdump/, pgpdump}.  It notably supports:
+ 
+ @itemize
+ @item signature packets;
+ @item public key packets;
+ @item secret key packets;
+ @item trust, user ID, and user attribute packets;
+ @item ASCII-armor decoding and CRC check.
+ @end itemize\n")
+     (license license:bsd-3)))
+ 
+ (define-public python2-roca-detect
+   (package
+     (name "python2-roca-detect")
+     (version "1.0.8")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "roca-detect" version))
+        (sha256
+         (base32
+          "1di4akyw2lf5r8zfwvyhkilz8jv8g4b66rgaqwfabmjwma6gnw27"))))
+     (build-system python-build-system)
+     (native-inputs
+      ;; TODO: apk_parse_ph4, pyjks
+      `(("python2-dateutil" ,python2-dateutil)
+        ("python2-six" ,python2-six)
+        ("python2-cryptography" ,python2-cryptography)
+        ("python2-future" ,python2-future)
+        ("python2-coloredlogs" ,python2-coloredlogs)
+        ("python2-pgpdump" ,python2-pgpdump)))
+     (arguments
+      `(;; Basic testing routine is quite simple and works with Py3
+        ;; but the rest of the code that processes the different
+        ;; key formats and extracts the modulus for inspection is
+        ;; not yet fully py3 ready.
+        #:python ,python-2))
+     (home-page "https://github.com/crocs-muni/roca";)
+     (synopsis "ROCA detection tool")
+     (description
+      "This tool is related to the paper entitled @i{Return of the
+ Coppersmith’s Attack: Practical Factorization of Widely Used RSA Moduli}.  It
+ enables you to test public RSA keys for a presence of the described
+ vulnerability.  Currently the tool supports the following key formats: X.509
+ Certificate (DER encoded, PEM encoded), RSA PEM (encoded private key, public
+ key), SSH public key, ASC-encoded OpenPGP key, APK Android application, LDIFF
+ file, and more.")
+     (license license:gpl3)))
diff --cc gnu/packages/python.scm
index d257d48,d461197..3f8dea4
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@@ -1904,137 -1448,30 +1477,75 @@@ matching them against a list of media-r
  (define-public python2-mimeparse
    (package-with-python2 python-mimeparse))
  
- (define-public python-nose
+ (define-public python-pafy
    (package
-     (name "python-nose")
-     (version "1.3.7")
+     (name "python-pafy")
+     (version "0.5.3.1")
      (source
-       (origin
-         (method url-fetch)
-         (uri (pypi-uri "nose" version))
-         (sha256
-           (base32
-             "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pafy" version))
+        (sha256
+         (base32
+          "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
      (build-system python-build-system)
      (arguments
-      '(#:tests? #f)) ; FIXME: test suite fails
-     (home-page "http://readthedocs.org/docs/nose/";)
-     (synopsis "Python testing library")
-     (description
-      "Nose extends the unittest library to make testing easier.")
-     (license license:lgpl2.0+)))
- 
- (define-public python2-nose
-   (package-with-python2 python-nose))
- 
- (define-public python-nose2
-   (package
-     (name "python-nose2")
-     (version "0.6.5")
-       (source
-         (origin
-           (method url-fetch)
-           (uri (pypi-uri "nose2" version))
-           (sha256
-            (base32
-             "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
-     (build-system python-build-system)
-     (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
+      `(#:tests? #f)) ; Currently pafy can not find itself in the tests
      (propagated-inputs
-      `(("python-cov-core" ,python-cov-core)
-        ("python-pytest-cov" ,python-pytest-cov)
-        ("python-six" ,python-six)))
-     (home-page "https://github.com/nose-devs/nose2";)
-     (synopsis "Next generation of nicer testing for Python")
+      ;; Youtube-dl is a python package which is imported in the file
+      ;; "backend_youtube_dl.py", therefore it needs to be propagated.
+      `(("youtube-dl" ,youtube-dl)))
+     (home-page "https://np1.github.io/pafy/";)
+     (synopsis "Retrieve YouTube content and metadata")
      (description
-      "Nose2 is the next generation of nicer testing for Python, based on the
- plugins branch of unittest2.  Nose2 aims to improve on nose by providing a
- better plugin api, being easier for users to configure, and simplifying 
internal
- interfaces and processes.")
-     (license license:bsd-2)))
- 
- (define-public python2-nose2
-   (package-with-python2 python-nose2))
+      "@code{pafy} is a python library to retrieve YouTube content and 
metadata.")
+     (license license:lgpl3+)))
  
 +(define-public python2-funcsigs
 +  (package
 +    (name "python2-funcsigs")
 +    (version "1.0.2")
 +    (source (origin
 +              (method url-fetch)
 +              (uri (pypi-uri "funcsigs" version))
 +              (sha256
 +               (base32
 +                "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
 +    (build-system python-build-system)
 +    (arguments
 +     `(#:python ,python-2))
 +    (native-inputs
 +     `(("python2-unittest2" ,python2-unittest2)))
 +    (home-page "http://funcsigs.readthedocs.org";)
 +    (synopsis "Python function signatures from PEP362")
 +    (description
 +     "Backport of @code{funcsigs} which was introduced in Python 3.3.")
 +    (license license:asl2.0)))
 +
- (define-public python-unittest2
++(define-public python-pafy
 +  (package
-     (name "python-unittest2")
-     (version "1.1.0")
++    (name "python-pafy")
++    (version "0.5.3.1")
 +    (source
 +     (origin
 +       (method url-fetch)
-        (uri (pypi-uri "unittest2" version))
-        (patches
-         (search-patches "python-unittest2-python3-compat.patch"
-                         "python-unittest2-remove-argparse.patch"))
-        (sha256
-         (base32
-          "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))))
-     (build-system python-build-system)
-     (arguments
-      '(#:phases
-        (modify-phases %standard-phases
-          (replace 'check
-            (lambda _
-              (zero? (system* "python" "-m" "unittest2" "discover" 
"--verbose")))))))
-     (propagated-inputs
-      `(("python-six" ,python-six)
-        ("python-traceback2" ,python-traceback2)))
-     (home-page "http://pypi.python.org/pypi/unittest2";)
-     (synopsis "Python unit testing library")
-     (description
-      "Unittest2 is a replacement for the unittest module in the Python
- standard library.")
-     (license license:psfl)))
- 
- (define-public python2-unittest2
-   (package-with-python2 python-unittest2))
- 
- (define-public python-pafy
-   (package
-     (name "python-pafy")
-     (version "0.5.3.1")
-     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "pafy" version))
++       (uri (pypi-uri "pafy" version))
 +       (sha256
 +        (base32
 +         "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
 +    (build-system python-build-system)
 +    (arguments
 +     `(#:tests? #f)) ; Currently pafy can not find itself in the tests
 +    (propagated-inputs
 +     ;; Youtube-dl is a python package which is imported in the file
 +     ;; "backend_youtube_dl.py", therefore it needs to be propagated.
 +     `(("youtube-dl" ,youtube-dl)))
 +    (home-page "https://np1.github.io/pafy/";)
 +    (synopsis "Retrieve YouTube content and metadata")
 +    (description
 +     "@code{pafy} is a python library to retrieve YouTube content and 
metadata.")
 +    (license license:lgpl3+)))
 +
  (define-public python-py
    (package
      (name "python-py")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]