summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederik Rietdijk <freddyrietdijk@fridh.nl>2018-02-22 09:17:40 +0000
committerGitHub <noreply@github.com>2018-02-22 09:17:40 +0000
commit743a33a6be74e759e049dd6706a25fd095973310 (patch)
tree42a191a014d9e2652f9e9edb22fd9266c5775197
parent54ac74c5586e6ab75727e8f1415ae232ca96a3fa (diff)
parent198bdf39b6b61e86cc9a50507e47e575aaf93e82 (diff)
downloadnixlib-743a33a6be74e759e049dd6706a25fd095973310.tar
nixlib-743a33a6be74e759e049dd6706a25fd095973310.tar.gz
nixlib-743a33a6be74e759e049dd6706a25fd095973310.tar.bz2
nixlib-743a33a6be74e759e049dd6706a25fd095973310.tar.lz
nixlib-743a33a6be74e759e049dd6706a25fd095973310.tar.xz
nixlib-743a33a6be74e759e049dd6706a25fd095973310.tar.zst
nixlib-743a33a6be74e759e049dd6706a25fd095973310.zip
Merge pull request #35198 from dotlambda/python
python: updates and fixes
-rw-r--r--pkgs/applications/misc/pytrainer/default.nix16
-rw-r--r--pkgs/development/python-modules/asgiref/default.nix22
-rw-r--r--pkgs/development/python-modules/bibtexparser/default.nix25
-rw-r--r--pkgs/development/python-modules/binaryornot/default.nix27
-rw-r--r--pkgs/development/python-modules/cram/default.nix16
-rw-r--r--pkgs/development/python-modules/curtsies/default.nix8
-rw-r--r--pkgs/development/python-modules/daphne/default.nix26
-rw-r--r--pkgs/development/python-modules/dbf/default.nix9
-rw-r--r--pkgs/development/python-modules/ecpy/default.nix5
-rw-r--r--pkgs/development/python-modules/faker/default.nix8
-rw-r--r--pkgs/development/python-modules/green/default.nix26
-rw-r--r--pkgs/development/python-modules/konfig/default.nix48
-rw-r--r--pkgs/development/python-modules/natsort/default.nix8
-rw-r--r--pkgs/development/python-modules/networkx/default.nix16
-rw-r--r--pkgs/development/python-modules/pomegranate/default.nix5
-rw-r--r--pkgs/development/python-modules/prov/default.nix16
-rw-r--r--pkgs/development/python-modules/pytest-mock/default.nix7
-rw-r--r--pkgs/development/python-modules/pytest-xdist/default.nix4
-rw-r--r--pkgs/development/python-modules/rednose/default.nix24
-rw-r--r--pkgs/development/python-modules/termstyle/default.nix20
-rw-r--r--pkgs/development/python-modules/text-unidecode/default.nix23
-rw-r--r--pkgs/development/python-modules/xdot/default.nix21
-rw-r--r--pkgs/top-level/python-packages.nix150
23 files changed, 313 insertions, 217 deletions
diff --git a/pkgs/applications/misc/pytrainer/default.nix b/pkgs/applications/misc/pytrainer/default.nix
index ecc4c341a686..8605801dea16 100644
--- a/pkgs/applications/misc/pytrainer/default.nix
+++ b/pkgs/applications/misc/pytrainer/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, perl, python2Packages, sqlite, gpsbabel
+{ stdenv, fetchFromGitHub, perl, python, sqlite, gpsbabel
 , withWebKit ? false }:
 
 let
 
   # Pytrainer needs a matplotlib with GTK backend. Also ensure we are
   # using the pygtk with glade support as needed by pytrainer.
-  matplotlibGtk = python2Packages.matplotlib.override {
+  matplotlibGtk = python.pkgs.matplotlib.override {
     enableGtk2 = true;
-    pygtk = python2Packages.pyGtkGlade;
+    pygtk = python.pkgs.pyGtkGlade;
   };
 
 in
 
-python2Packages.buildPythonApplication rec {
-  name = "pytrainer-${version}";
+python.pkgs.buildPythonApplication rec {
+  pname = "pytrainer";
   version = "1.11.0";
 
   src = fetchFromGitHub {
@@ -35,7 +35,7 @@ python2Packages.buildPythonApplication rec {
     ./pytrainer-webkit.patch
   ];
 
-  propagatedBuildInputs = with python2Packages; [
+  propagatedBuildInputs = with python.pkgs; [
     dateutil lxml matplotlibGtk pyGtkGlade sqlalchemy_migrate
   ] ++ stdenv.lib.optional withWebKit [ pywebkitgtk ];
 
@@ -45,6 +45,10 @@ python2Packages.buildPythonApplication rec {
   dontPatchELF = true;
   dontStrip = true;
 
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
   meta = with stdenv.lib; {
     homepage = https://github.com/pytrainer/pytrainer/wiki;
     description = "Application for logging and graphing sporting excursions";
diff --git a/pkgs/development/python-modules/asgiref/default.nix b/pkgs/development/python-modules/asgiref/default.nix
index 223f53698e95..2b3be05d0608 100644
--- a/pkgs/development/python-modules/asgiref/default.nix
+++ b/pkgs/development/python-modules/asgiref/default.nix
@@ -1,15 +1,23 @@
-{ stdenv, buildPythonPackage, fetchurl, six }:
+{ stdenv, buildPythonPackage, fetchFromGitHub, async-timeout, pytest, pytest-asyncio }:
 buildPythonPackage rec {
-  version = "2.1.5";
+  version = "2.1.6";
   pname = "asgiref";
-  name = "${pname}-${version}";
 
-  src = fetchurl {
-    url = "mirror://pypi/a/asgiref/${name}.tar.gz";
-    sha256 = "1a46196df28c67e046a54cc537ce5a8f6a59eb68649f54680d7e4fc3b113ab1b";
+  # PyPI tarball doesn't include tests directory
+  src = fetchFromGitHub {
+    owner = "django";
+    repo = pname;
+    rev = version;
+    sha256 = "12p1i2ai03x2hx6b3i7xgicyfi2x11is6pkbdac4jpz7fmbz3zlh";
   };
 
-  propagatedBuildInputs = [ six ];
+  propagatedBuildInputs = [ async-timeout ];
+
+  checkInputs = [ pytest pytest-asyncio ];
+
+  checkPhase = ''
+    py.test
+  '';
 
   meta = with stdenv.lib; {
     description = "Reference ASGI adapters and channel layers";
diff --git a/pkgs/development/python-modules/bibtexparser/default.nix b/pkgs/development/python-modules/bibtexparser/default.nix
index 50e389a9e14b..06d7c689e659 100644
--- a/pkgs/development/python-modules/bibtexparser/default.nix
+++ b/pkgs/development/python-modules/bibtexparser/default.nix
@@ -1,20 +1,31 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
+, pyparsing
+, future
+, nose
+, glibcLocales
 }:
 
 buildPythonPackage rec {
   pname = "bibtexparser";
   version = "1.0.1";
-  name = "${pname}-${version}";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "cc41cdd8332c2bf44b97daf1f135f4f267c3b744c33976655cd270b66f964c0a";
+  # PyPI tarball does not ship tests
+  src = fetchFromGitHub {
+    owner = "sciunto-org";
+    repo = "python-${pname}";
+    rev = "v${version}";
+    sha256 = "0lmlarkfbq2hp1wa04a62245jr2mqizqsdlgilj5aq6vy92gr6ai";
   };
 
-  # No tests in archive
-  doCheck = false;
+  propagatedBuildInputs = [ pyparsing future ];
+
+  checkInputs = [ nose glibcLocales ];
+
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" nosetests
+  '';
 
   meta = {
     description = "Bibtex parser for python 2.7 and 3.3 and newer";
diff --git a/pkgs/development/python-modules/binaryornot/default.nix b/pkgs/development/python-modules/binaryornot/default.nix
new file mode 100644
index 000000000000..2f0b01a5c23d
--- /dev/null
+++ b/pkgs/development/python-modules/binaryornot/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildPythonPackage, fetchPypi, chardet, hypothesis }:
+
+buildPythonPackage rec {
+  pname = "binaryornot";
+  version = "0.4.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061";
+  };
+
+  prePatch = ''
+    # See https://github.com/audreyr/binaryornot/issues/40
+    substituteInPlace tests/test_check.py \
+      --replace "average_size=512" "average_size=128"
+  '';
+
+  propagatedBuildInputs = [ chardet ];
+
+  checkInputs = [ hypothesis ];
+
+  meta = with lib; {
+    homepage = https://github.com/audreyr/binaryornot;
+    description = "Ultra-lightweight pure Python package to check if a file is binary or text";
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/cram/default.nix b/pkgs/development/python-modules/cram/default.nix
index c0fc5b177e0a..232a4a19fd85 100644
--- a/pkgs/development/python-modules/cram/default.nix
+++ b/pkgs/development/python-modules/cram/default.nix
@@ -1,11 +1,10 @@
-{stdenv, lib, buildPythonPackage, fetchPypi, coverage, bash, which, writeText}:
+{stdenv, lib, buildPythonPackage, fetchPypi, bash, which, writeText}:
 
 buildPythonPackage rec {
-  name = "${pname}-${version}";
   version = "0.7";
   pname = "cram";
 
-  buildInputs = [ coverage which ];
+  checkInputs = [ which ];
 
   src = fetchPypi {
     inherit pname version;
@@ -13,20 +12,13 @@ buildPythonPackage rec {
   };
 
   postPatch = ''
+    patchShebangs scripts/cram
     substituteInPlace tests/test.t \
       --replace "/bin/bash" "${bash}/bin/bash"
   '';
 
-  # This testing is copied from Makefile. Simply using `make test` doesn't work
-  # because it uses the unpatched `scripts/cram` executable which has a bad
-  # shebang. Also, for some reason, coverage fails on one file so let's just
-  # ignore that one.
   checkPhase = ''
-    # scripts/cram tests
-    #COVERAGE=${coverage}/bin/coverage $out/bin/cram tests
-    #${coverage}/bin/coverage report --fail-under=100
-    COVERAGE=coverage $out/bin/cram tests
-    coverage report --fail-under=100 --omit="*/_encoding.py,*/__main__.py"
+    scripts/cram tests
   '';
 
   meta = {
diff --git a/pkgs/development/python-modules/curtsies/default.nix b/pkgs/development/python-modules/curtsies/default.nix
index 8d6052c5299f..d29ad1d64745 100644
--- a/pkgs/development/python-modules/curtsies/default.nix
+++ b/pkgs/development/python-modules/curtsies/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchPypi, blessings, mock, nose, pyte, pytest, wcwidth }:
+{ stdenv, buildPythonPackage, fetchPypi, blessings, mock, nose, pyte, wcwidth, typing }:
 
 buildPythonPackage rec {
   pname = "curtsies";
@@ -8,12 +8,12 @@ buildPythonPackage rec {
     sha256 = "89c802ec051d01dec6fc983e9856a3706e4ea8265d2940b1f6d504a9e26ed3a9";
   };
 
-  propagatedBuildInputs = [ blessings wcwidth pyte ];
+  propagatedBuildInputs = [ blessings wcwidth typing ];
 
-  checkInputs = [ nose mock pytest ];
+  checkInputs = [ mock pyte nose ];
 
   checkPhase = ''
-    py.test
+    nosetests tests
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/daphne/default.nix b/pkgs/development/python-modules/daphne/default.nix
index 86b00ca74085..7fafee56b422 100644
--- a/pkgs/development/python-modules/daphne/default.nix
+++ b/pkgs/development/python-modules/daphne/default.nix
@@ -1,19 +1,31 @@
-{ stdenv, buildPythonPackage, fetchPypi,
-  asgiref, autobahn, twisted, hypothesis
+{ stdenv, buildPythonPackage, isPy3k, fetchFromGitHub
+, asgiref, autobahn, twisted, pytestrunner
+, hypothesis, pytest, pytest-asyncio
 }:
 buildPythonPackage rec {
   pname = "daphne";
-  name = "${pname}-${version}";
   version = "2.0.3";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "bb2075ce35ca00f2e5440cc034dfebd5c00d346de62ea45f099db089b868c31f";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "django";
+    repo = pname;
+    rev = version;
+    sha256 = "1rdnzpgyk5cnx4xc3c7k11v2x9xpihgjpq14fib80jfpcqggw687";
   };
 
-  buildInputs = [ hypothesis ];
+  nativeBuildInputs = [ pytestrunner ];
+
   propagatedBuildInputs = [ asgiref autobahn twisted ];
 
+  checkInputs = [ hypothesis pytest pytest-asyncio ];
+
+  checkPhase = ''
+    # Other tests fail, seems to be due to filesystem access
+    py.test -k "test_cli or test_utils"
+  '';
+
   meta = with stdenv.lib; {
     description = "Django ASGI (HTTP/WebSocket) server";
     license = licenses.bsd3;
diff --git a/pkgs/development/python-modules/dbf/default.nix b/pkgs/development/python-modules/dbf/default.nix
index 2343ea2918b1..ac8087be63ed 100644
--- a/pkgs/development/python-modules/dbf/default.nix
+++ b/pkgs/development/python-modules/dbf/default.nix
@@ -1,21 +1,24 @@
-{ stdenv, fetchPypi, buildPythonPackage, aenum, isPy3k }:
+{ stdenv, fetchPypi, buildPythonPackage, aenum, isPy3k, pythonOlder, enum34, python }:
 
 buildPythonPackage rec {
     pname = "dbf";
     version = "0.96.8";
-    name = "${pname}-${version}";
 
     src = fetchPypi {
       inherit pname version;
       sha256 = "1z8n7s4cka6x9ybh4qpfhj51v2qrk38h2f06npizzhm0hmn6r3v1";
     };
 
-    propagatedBuildInputs = [ aenum ];
+    propagatedBuildInputs = [ aenum ] ++ stdenv.lib.optional (pythonOlder "3.4") [ enum34 ];
 
     doCheck = !isPy3k;
     # tests are not yet ported.
     # https://groups.google.com/forum/#!topic/python-dbase/96rx2xmCG4w
 
+    checkPhase = ''
+      ${python.interpreter} dbf/test.py
+    '';
+
     meta = with stdenv.lib; {
       description = "Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro .dbf files";
       homepage    = "https://pypi.python.org/pypi/dbf";
diff --git a/pkgs/development/python-modules/ecpy/default.nix b/pkgs/development/python-modules/ecpy/default.nix
index 84830e7f2b83..277a5cece567 100644
--- a/pkgs/development/python-modules/ecpy/default.nix
+++ b/pkgs/development/python-modules/ecpy/default.nix
@@ -1,12 +1,13 @@
-{ stdenv, fetchPypi, buildPythonPackage, hidapi
+{ stdenv, fetchPypi, buildPythonPackage, isPy3k, hidapi
 , pycrypto, pillow, protobuf, future, ecpy
 }:
 
 buildPythonPackage rec {
-  name = "${pname}-${version}";
   pname = "ECPy";
   version = "0.8.3";
 
+  disabled = !isPy3k;
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "ef3d95419d53368f52fb7d4b883b8df0dfc2dd19a76243422d24981c3e5f27bd";
diff --git a/pkgs/development/python-modules/faker/default.nix b/pkgs/development/python-modules/faker/default.nix
index 2d459d625d0a..55750f5bf3b4 100644
--- a/pkgs/development/python-modules/faker/default.nix
+++ b/pkgs/development/python-modules/faker/default.nix
@@ -1,6 +1,6 @@
 { lib, buildPythonPackage, fetchPypi, pythonOlder,
   # Build inputs
-  dateutil, six, ipaddress ? null,
+  dateutil, six, text-unidecode, ipaddress ? null,
   # Test inputs
   email_validator, nose, mock, ukpostcodeparser }:
 
@@ -8,12 +8,11 @@ assert pythonOlder "3.3" -> ipaddress != null;
 
 buildPythonPackage rec {
   pname = "Faker";
-  version = "0.8.8";
-  name = "${pname}-${version}";
+  version = "0.8.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e928cf853ef69d7471421f2a3716a1239e43de0fa9855f4016ee0c9f1057328a";
+    sha256 = "126kdy6lj10rwgchzz0lzjabx0zcyskamhn0qib67k69fcksjmq8";
   };
 
   checkInputs = [
@@ -26,6 +25,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     dateutil
     six
+    text-unidecode
   ] ++ lib.optional (pythonOlder "3.3") ipaddress;
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/green/default.nix b/pkgs/development/python-modules/green/default.nix
new file mode 100644
index 000000000000..fa09e4ded214
--- /dev/null
+++ b/pkgs/development/python-modules/green/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k, colorama, coverage, termstyle, unidecode, mock, backports_shutil_get_terminal_size }:
+
+buildPythonPackage rec {
+  pname = "green";
+  version = "2.12.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "8cdd2934eff754c9664f373ee0d77cb1cb35dbbf3b719b8ae3b059718db875df";
+  };
+
+  prePatch = ''
+    # See https://github.com/CleanCut/green/pull/182
+    substituteInPlace setup.py --replace python-termstyle termstyle
+  '';
+
+  propagatedBuildInputs = [
+    colorama coverage termstyle unidecode
+  ] ++ lib.optionals (!isPy3k) [ mock backports_shutil_get_terminal_size ];
+
+  meta = with lib; {
+    description = "Python test runner";
+    homepage = https://github.com/CleanCut/green;
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/development/python-modules/konfig/default.nix b/pkgs/development/python-modules/konfig/default.nix
new file mode 100644
index 000000000000..e7062bad5ee7
--- /dev/null
+++ b/pkgs/development/python-modules/konfig/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, writeText, configparser, six, pytest, glibcLocales }:
+
+buildPythonPackage rec {
+  pname = "konfig";
+  version = "1.1";
+
+  # konfig unconditionaly depend on configparser, even if it is part of
+  # the standard library in python 3.2 or above.
+  disabled = isPy3k;
+
+  # PyPI tarball is missing utf8.ini, required for tests
+  src = fetchFromGitHub {
+    owner = "mozilla-services";
+    repo = pname;
+    rev = version;
+    sha256 = "1h780fbrv275dcik4cs3rincza805z6q726b48r4a0qmh5d8160c";
+  };
+
+  propagatedBuildInputs = [ configparser six ];
+
+  patches = [ (writeText "konfig.patch" ''
+    diff --git a/setup.py b/setup.py
+    index 96fd858..bb4db06 100644
+    --- a/setup.py
+    +++ b/setup.py
+    @@ -20,7 +20,7 @@ setup(name='konfig',
+           author_email="tarek@mozilla.com",
+           include_package_data=True,
+           install_requires = [
+    -        'configparser', 'argparse', 'six'
+    +        'configparser', 'six'
+           ],
+           zip_safe=False,
+           classifiers=classifiers,
+  '') ];
+
+  checkInputs = [ pytest glibcLocales ];
+
+  checkPhase = ''
+    LC_ALL=en_US.utf8 pytest -v konfig/tests
+  '';
+
+  meta = with lib; {
+    description = "Yet Another Config Parser";
+    homepage    = "https://github.com/mozilla-services/konfig";
+    license     = licenses.mpl20;
+  };
+}
diff --git a/pkgs/development/python-modules/natsort/default.nix b/pkgs/development/python-modules/natsort/default.nix
index a5940ed6c9f6..3e4b0d1368b7 100644
--- a/pkgs/development/python-modules/natsort/default.nix
+++ b/pkgs/development/python-modules/natsort/default.nix
@@ -1,12 +1,9 @@
 { lib
 , buildPythonPackage
 , pythonOlder
-, isPy35
-, isPy36
 , fetchPypi
 , hypothesis
 , pytestcache
-, pytestcov
 , pytestflakes
 , pytestpep8
 , pytest
@@ -19,10 +16,9 @@ buildPythonPackage rec {
   pname = "natsort";
   version = "5.2.0";
 
-  buildInputs = [
+  checkInputs = [
     hypothesis
     pytestcache
-    pytestcov
     pytestflakes
     pytestpep8
     pytest
@@ -41,7 +37,7 @@ buildPythonPackage rec {
   # testing based on project's tox.ini
   checkPhase = ''
     pytest --doctest-modules natsort
-    pytest --flakes --pep8 --cov natsort --cov-report term-missing
+    pytest --flakes --pep8
   '';
 
   meta = {
diff --git a/pkgs/development/python-modules/networkx/default.nix b/pkgs/development/python-modules/networkx/default.nix
index f6fc4139c858..3388aef9cef1 100644
--- a/pkgs/development/python-modules/networkx/default.nix
+++ b/pkgs/development/python-modules/networkx/default.nix
@@ -3,32 +3,24 @@
 , fetchPypi
 , nose
 , decorator
-, isPy36
-, isPyPy
 }:
 
 buildPythonPackage rec {
   pname = "networkx";
-  version = "1.11";
-
-  # Currently broken on PyPy.
-  # https://github.com/networkx/networkx/pull/1361
-  disabled = isPyPy;
+  version = "2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f74s56xb4ggixiq0vxyfxsfk8p20c7a099lpcf60izv1php03hd";
+    extension = "zip";
+    sha256 = "64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1";
   };
 
   checkInputs = [ nose ];
   propagatedBuildInputs = [ decorator ];
 
-  # 17 failures with 3.6 https://github.com/networkx/networkx/issues/2396#issuecomment-304437299
-  doCheck = !(isPy36);
-
   meta = {
     homepage = "https://networkx.github.io/";
     description = "Library for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks";
     license = lib.licenses.bsd3;
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/development/python-modules/pomegranate/default.nix b/pkgs/development/python-modules/pomegranate/default.nix
index 77b373de259a..e611e2ea5b10 100644
--- a/pkgs/development/python-modules/pomegranate/default.nix
+++ b/pkgs/development/python-modules/pomegranate/default.nix
@@ -3,7 +3,6 @@
 buildPythonPackage rec {
   pname = "pomegranate";
   version = "0.8.1";
-  name  = "${pname}-${version}";
   
   src = fetchFromGitHub {
     repo = pname;
@@ -21,5 +20,9 @@ buildPythonPackage rec {
     homepage = https://github.com/jmschrei/pomegranate;
     license = licenses.mit;
     maintainers = with maintainers; [ rybern ];
+
+    # "pomegranate does not yet work with networkx 2.0"
+    # see https://github.com/jmschrei/pomegranate/issues/209
+    broken = true; 
   };
 }
diff --git a/pkgs/development/python-modules/prov/default.nix b/pkgs/development/python-modules/prov/default.nix
index 8866382ea8f2..f5f5b719b060 100644
--- a/pkgs/development/python-modules/prov/default.nix
+++ b/pkgs/development/python-modules/prov/default.nix
@@ -7,6 +7,8 @@
 , six
 , pydotplus
 , rdflib
+, pydot
+, glibcLocales
 }:
 
 buildPythonPackage rec {
@@ -18,6 +20,10 @@ buildPythonPackage rec {
     sha256 = "640dc158d931403bc6c1a0ad80702caae71f810bac21f90ec605865c8444b7bb";
   };
 
+  prePatch = ''
+    substituteInPlace setup.py --replace "six==1.10.0" "six>=1.10.0"
+  '';
+
   propagatedBuildInputs = [
     lxml
     networkx
@@ -26,7 +32,15 @@ buildPythonPackage rec {
     pydotplus
     rdflib
   ];
-  doCheck = false; # takes ~60 mins
+
+  checkInputs = [
+    pydot
+    glibcLocales
+  ];
+
+  preCheck = ''
+    export LC_ALL="en_US.utf-8"
+  '';
 
   meta = with stdenv.lib; {
     description = "A Python library for W3C Provenance Data Model (PROV)";
diff --git a/pkgs/development/python-modules/pytest-mock/default.nix b/pkgs/development/python-modules/pytest-mock/default.nix
index 51ec2a1f4cbc..6b852583c7ed 100644
--- a/pkgs/development/python-modules/pytest-mock/default.nix
+++ b/pkgs/development/python-modules/pytest-mock/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k, pytest, mock, setuptools_scm }:
+{ lib, buildPythonPackage, fetchPypi, fetchpatch, isPy3k, pytest, mock, setuptools_scm }:
 
 buildPythonPackage rec {
   pname = "pytest-mock";
@@ -9,6 +9,11 @@ buildPythonPackage rec {
     sha256 = "8ed6c9ac6b7565b226b4da2da48876c9198d76401ec8d9c5e4c69b45423e33f8";
   };
 
+  patches = fetchpatch {
+    url = "${meta.homepage}/pull/107.patch";
+    sha256 = "07p7ra6lilfv04wyxc855zmfwxvnpmi9s0v6vh5bx769cj9jwxck";
+  };
+
   propagatedBuildInputs = [ pytest ] ++ lib.optional (!isPy3k) mock;
   nativeBuildInputs = [ setuptools_scm ];
 
diff --git a/pkgs/development/python-modules/pytest-xdist/default.nix b/pkgs/development/python-modules/pytest-xdist/default.nix
index 596ce38ed0ab..27aed12c3384 100644
--- a/pkgs/development/python-modules/pytest-xdist/default.nix
+++ b/pkgs/development/python-modules/pytest-xdist/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytest-xdist";
-  version = "1.22.0";
+  version = "1.22.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "65228a859191f2c74ee68c127317eefe35eedd3d43fc1431f19240663b0cafcd";
+    sha256 = "fcd6f36bab93b0b24ec45ca12f798b9b3af71da826db0b0794b358d2f5c038de";
   };
 
   nativeBuildInputs = [ setuptools_scm ];
diff --git a/pkgs/development/python-modules/rednose/default.nix b/pkgs/development/python-modules/rednose/default.nix
new file mode 100644
index 000000000000..d9736dcb6f39
--- /dev/null
+++ b/pkgs/development/python-modules/rednose/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi, nose, six, colorama, termstyle }:
+
+buildPythonPackage rec {
+  pname = "rednose";
+  version = "1.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "6da77917788be277b70259edc0bb92fc6f28fe268b765b4ea88206cc3543a3e1";
+  };
+
+  prePatch = ''
+    substituteInPlace setup.py --replace "six==1.10.0" "six>=1.10.0"
+  '';
+
+  checkInputs = [ six ];
+  propagatedBuildInputs = [ nose colorama termstyle ];
+
+  meta = with lib; {
+    description = "A python nose plugin adding color to console results";
+    homepage = https://github.com/JBKahn/rednose;
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/development/python-modules/termstyle/default.nix b/pkgs/development/python-modules/termstyle/default.nix
new file mode 100644
index 000000000000..0a1c4e764129
--- /dev/null
+++ b/pkgs/development/python-modules/termstyle/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "termstyle";
+  version = "0.1.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "ef74b83698ea014112040cf32b1a093c1ab3d91c4dd18ecc03ec178fd99c9f9f";
+  };
+
+  # Only manual tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Console colouring for python";
+    homepage = "https://pypi.python.org/pypi/python-termstyle/0.1.10";
+    license = licenses.bsdOriginal;
+  };
+}
diff --git a/pkgs/development/python-modules/text-unidecode/default.nix b/pkgs/development/python-modules/text-unidecode/default.nix
new file mode 100644
index 000000000000..79ee34c733bc
--- /dev/null
+++ b/pkgs/development/python-modules/text-unidecode/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonPackage, fetchPypi, pytest }:
+
+buildPythonPackage rec {
+  pname = "text-unidecode";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1l081m1w8ibbx684ca71ibdy68iwqsivy6rf6yqvysdclzldbbyh";
+  };
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with lib; {
+    description = "The most basic Text::Unidecode port";
+    homepage = https://github.com/kmike/text-unidecode;
+    license = licenses.artistic1;
+  };
+}
diff --git a/pkgs/development/python-modules/xdot/default.nix b/pkgs/development/python-modules/xdot/default.nix
new file mode 100644
index 000000000000..526376a41632
--- /dev/null
+++ b/pkgs/development/python-modules/xdot/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildPythonPackage, fetchPypi
+, wrapGAppsHook, gobjectIntrospection, pygobject3, graphviz, gnome3 }:
+
+buildPythonPackage rec {
+  pname = "xdot";
+  version = "0.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01v9vmgdxz1q2m2vq2b4aqx4ycw7grc0l4is673ygvyg9rk02dx3";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  propagatedBuildInputs = [ gobjectIntrospection pygobject3 graphviz gnome3.gtk ];
+
+  meta = with lib; {
+    description = "xdot.py is an interactive viewer for graphs written in Graphviz's dot";
+    homepage = https://github.com/jrfonseca/xdot.py;
+    license = licenses.lgpl3Plus;
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 8c2317ffa0eb..1551973296af 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -1671,27 +1671,7 @@ in {
     };
   };
 
-
-  binaryornot = buildPythonPackage rec {
-    name = "binaryornot-${version}";
-    version = "0.4.0";
-
-    src = pkgs.fetchurl {
-      url ="mirror://pypi/b/binaryornot/${name}.tar.gz";
-      sha256 = "1j4f51dxic39mdwf6alj7gd769wy6mhk916v031wjali51xkh3xb";
-    };
-
-    buildInputs = with self; [ hypothesis ];
-
-    propagatedBuildInputs = with self; [ chardet ];
-
-    meta = {
-      homepage = https://github.com/audreyr/binaryornot;
-      description = "Ultra-lightweight pure Python package to check if a file is binary or text";
-      license = licenses.bsd3;
-    };
-  };
-
+  binaryornot = callPackage ../development/python-modules/binaryornot { };
 
   bitbucket_api = buildPythonPackage rec {
     name = "bitbucket-api-0.4.4";
@@ -9442,44 +9422,7 @@ in {
     };
   };
 
-  konfig = buildPythonPackage rec {
-    name = "konfig-${version}";
-    version = "1.1";
-
-    # konfig unconditionaly depend on configparser, even if it is part of
-    # the standard library in python 3.2 or above.
-    disabled = isPy3k;
-
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/konfig.git;
-      rev = "refs/tags/${version}";
-      sha256 = "1h780fbrv275dcik4cs3rincza805z6q726b48r4a0qmh5d8160c";
-    };
-
-    propagatedBuildInputs = with self; [ configparser six ];
-
-    patches = [ (pkgs.writeText "konfig.patch" ''
-      diff --git a/setup.py b/setup.py
-      index 96fd858..bb4db06 100644
-      --- a/setup.py
-      +++ b/setup.py
-      @@ -20,7 +20,7 @@ setup(name='konfig',
-             author_email="tarek@mozilla.com",
-             include_package_data=True,
-             install_requires = [
-      -        'configparser', 'argparse', 'six'
-      +        'configparser', 'six'
-             ],
-             zip_safe=False,
-             classifiers=classifiers,
-    '') ];
-
-    meta = {
-      description = "Yet Another Config Parser";
-      homepage    = "https://github.com/mozilla-services/konfig";
-      license     = licenses.mpl20;
-    };
-  };
+  konfig = callPackage ../development/python-modules/konfig { };
 
   kitchen = callPackage ../development/python-modules/kitchen/default.nix { };
 
@@ -10871,24 +10814,6 @@ in {
 
   mysql-connector = callPackage ../development/python-modules/mysql-connector { };
 
-  mysql_connector_repackaged = buildPythonPackage rec {
-    name = "mysql-connector-repackaged-0.3.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mysql-connector-repackaged/${name}.tar.gz";
-      sha256 = "170fbf11c54def1b5fcc919be0a890b760bb2eca81f56123a5dda0c69b5b099e";
-    };
-
-    # Judging from SyntaxError
-    disabled = isPy3k;
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.linux;
-    };
-  };
-
-
   namebench = buildPythonPackage (rec {
     name = "namebench-1.3.1";
     disabled = isPy3k || isPyPy;
@@ -15048,22 +14973,7 @@ in {
 
   redis = callPackage ../development/python-modules/redis { };
 
-  rednose = buildPythonPackage rec {
-    name = "rednose-${version}";
-    version = "1.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rednose/${name}.tar.gz";
-      sha256 = "0b0bsna217lr1nykyhl5fgjly15zhdvqd4prg4wy1zrgfv7al6m0";
-    };
-
-    meta = {
-      description = "A python nose plugin adding color to console results.";
-    };
-
-    buildInputs = with self; [ nose six ];
-    propagatedBuildInputs = with self; [ colorama termstyle ];
-  };
+  rednose = callPackage ../development/python-modules/rednose { };
 
   reikna = callPackage ../development/python-modules/reikna { };
 
@@ -16008,6 +15918,8 @@ in {
 
   stevedore = callPackage ../development/python-modules/stevedore {};
 
+  text-unidecode = callPackage ../development/python-modules/text-unidecode { };
+
   Theano = callPackage ../development/python-modules/Theano rec {
     cudaSupport = pkgs.config.cudaSupport or false;
     cudnnSupport = cudaSupport;
@@ -18355,23 +18267,7 @@ EOF
 
   persistent = callPackage ../development/python-modules/persistent {};
 
-  xdot = buildPythonPackage rec {
-    name = "xdot-0.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xdot/${name}.tar.gz";
-      sha256 = "01v9vmgdxz1q2m2vq2b4aqx4ycw7grc0l4is673ygvyg9rk02dx3";
-    };
-
-    nativeBuildInputs = with pkgs; [ wrapGAppsHook ];
-    propagatedBuildInputs = with self; [ pkgs.gobjectIntrospection pygobject3 pkgs.graphviz pkgs.gnome3.gtk ];
-
-    meta = {
-      description = "xdot.py is an interactive viewer for graphs written in Graphviz's dot";
-      homepage = https://github.com/jrfonseca/xdot.py;
-      license = licenses.lgpl3Plus;
-    };
-  };
+  xdot = callPackage ../development/python-modules/xdot { };
 
   zetup = callPackage ../development/python-modules/zetup { };
 
@@ -20979,39 +20875,9 @@ EOF
     };
   };
 
-  termstyle = buildPythonPackage rec {
-    name = "python-termstyle-${version}";
-    version = "0.1.10";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-termstyle/${name}.tar.gz";
-      sha256 = "1qllzkx1alf14zcfapppf8w87si4cpa7lgjmdp3f5idzdyqnnapl";
-    };
-
-    meta = {
-      description = "Console colouring for python";
-      homepage = "https://pypi.python.org/pypi/python-termstyle/0.1.10";
-      license = licenses.bsdOriginal;
-    };
-
-  };
-
-  green = buildPythonPackage rec {
-    name = "green-${version}";
-    version = "2.3.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/green/${name}.tar.gz";
-      sha256 = "1888khfl9yxb8yfxq9b48dxwplqlxx8s0l530z5j7c6bx74v08b4";
-    };
-
-    propagatedBuildInputs = with self; [ termstyle colorama ];
-    buildInputs = with self; [ mock ];
+  termstyle = callPackage ../development/python-modules/termstyle { };
 
-    meta = {
-      description = "Python test runner";
-      homepage = "https://github.com/CleanCut/green";
-      license = licenses.mit;
-    };
-  };
+  green = callPackage ../development/python-modules/green { };
 
   topydo = throw "python3Packages.topydo was moved to topydo"; # 2017-09-22