summary refs log tree commit diff
path: root/pkgs/development/python-modules
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2018-07-14 18:12:49 +0200
committerVladimír Čunát <vcunat@gmail.com>2018-07-14 18:15:30 +0200
commit0f01215203e3886d1a57ced4cd49b54475c66f85 (patch)
tree3cca5bbb2d7f79724f211d476d6a3e14d0ddf92d /pkgs/development/python-modules
parent4bd4e3ef5c13c97ad829d18d8fe99dd753b33da5 (diff)
parent6d0578934fb076050b3dcc1b924a90b275f3b27c (diff)
downloadnixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar.gz
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar.bz2
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar.lz
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar.xz
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.tar.zst
nixpkgs-0f01215203e3886d1a57ced4cd49b54475c66f85.zip
Merge branch 'master' into staging-next
Hydra: ?compare=1468896
Diffstat (limited to 'pkgs/development/python-modules')
-rw-r--r--pkgs/development/python-modules/Cython/default.nix2
-rw-r--r--pkgs/development/python-modules/agate/default.nix49
-rw-r--r--pkgs/development/python-modules/alembic/default.nix4
-rw-r--r--pkgs/development/python-modules/asyncssh/default.nix7
-rw-r--r--pkgs/development/python-modules/asyncssh/mock_getnameinfo.patch159
-rw-r--r--pkgs/development/python-modules/authres/default.nix28
-rw-r--r--pkgs/development/python-modules/boto3/default.nix4
-rw-r--r--pkgs/development/python-modules/botocore/default.nix4
-rw-r--r--pkgs/development/python-modules/celery/default.nix9
-rw-r--r--pkgs/development/python-modules/credstash/default.nix12
-rw-r--r--pkgs/development/python-modules/cypari2/default.nix6
-rw-r--r--pkgs/development/python-modules/cysignals/default.nix5
-rw-r--r--pkgs/development/python-modules/django-extensions/default.nix34
-rw-r--r--pkgs/development/python-modules/djmail/default.nix11
-rw-r--r--pkgs/development/python-modules/dkimpy/default.nix35
-rw-r--r--pkgs/development/python-modules/dogtail/default.nix58
-rw-r--r--pkgs/development/python-modules/dogtail/nix-support.patch35
-rw-r--r--pkgs/development/python-modules/eve/default.nix5
-rw-r--r--pkgs/development/python-modules/eve/setup.patch21
-rw-r--r--pkgs/development/python-modules/events/default.nix17
-rw-r--r--pkgs/development/python-modules/flask-autoindex/default.nix15
-rw-r--r--pkgs/development/python-modules/flask-restful/default.nix28
-rw-r--r--pkgs/development/python-modules/geojson/default.nix8
-rw-r--r--pkgs/development/python-modules/google-api-python-client/default.nix4
-rw-r--r--pkgs/development/python-modules/grpcio-tools/default.nix25
-rw-r--r--pkgs/development/python-modules/grpcio/default.nix2
-rw-r--r--pkgs/development/python-modules/guessit/2.0.nix31
-rw-r--r--pkgs/development/python-modules/keyutils/default.nix16
-rw-r--r--pkgs/development/python-modules/klaus/default.nix6
-rw-r--r--pkgs/development/python-modules/kombu/default.nix25
-rw-r--r--pkgs/development/python-modules/libvirt/default.nix4
-rw-r--r--pkgs/development/python-modules/matrix-client/default.nix14
-rw-r--r--pkgs/development/python-modules/pdfx/default.nix33
-rw-r--r--pkgs/development/python-modules/python-prctl/default.nix26
-rw-r--r--pkgs/development/python-modules/python-prctl/skip_bad_tests.patch34
-rw-r--r--pkgs/development/python-modules/scikitlearn/default.nix4
-rw-r--r--pkgs/development/python-modules/scikitlearn/n_iter-should-be-less-than-max_iter-using-lbgfs.patch73
-rw-r--r--pkgs/development/python-modules/sounddevice/default.nix14
-rw-r--r--pkgs/development/python-modules/sounddevice/fix-portaudio-library-path.patch34
-rw-r--r--pkgs/development/python-modules/vobject/default.nix4
40 files changed, 551 insertions, 354 deletions
diff --git a/pkgs/development/python-modules/Cython/default.nix b/pkgs/development/python-modules/Cython/default.nix
index 1c391d3495d..124e8b80ba0 100644
--- a/pkgs/development/python-modules/Cython/default.nix
+++ b/pkgs/development/python-modules/Cython/default.nix
@@ -44,7 +44,7 @@ in buildPythonPackage rec {
 
   checkPhase = ''
     export HOME="$NIX_BUILD_TOP"
-    ${python.interpreter} runtests.py \
+    ${python.interpreter} runtests.py -j$NIX_BUILD_CORES \
       ${stdenv.lib.optionalString (builtins.length excludedTests != 0)
         ''--exclude="(${builtins.concatStringsSep "|" excludedTests})"''}
   '';
diff --git a/pkgs/development/python-modules/agate/default.nix b/pkgs/development/python-modules/agate/default.nix
index 57a34268df8..b0992141faa 100644
--- a/pkgs/development/python-modules/agate/default.nix
+++ b/pkgs/development/python-modules/agate/default.nix
@@ -1,26 +1,37 @@
-{ stdenv, fetchPypi, buildPythonPackage, isPy3k,
-  discid, six, parsedatetime, isodate, Babel, pytimeparse,
-  leather, python-slugify }:
+{ lib, fetchFromGitHub, buildPythonPackage, isPy3k
+, six, pytimeparse, parsedatetime, Babel
+, isodate, python-slugify, leather
+, glibcLocales, nose, lxml, cssselect, unittest2 }:
 
 buildPythonPackage rec {
-    pname = "agate";
-    version = "1.6.1";
+  pname = "agate";
+  version = "1.6.1";
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "c93aaa500b439d71e4a5cf088d0006d2ce2c76f1950960c8843114e5f361dfd3";
-    };
+  # PyPI tarball does not include all test files
+  # https://github.com/wireservice/agate/pull/716
+  src = fetchFromGitHub {
+    owner = "wireservice";
+    repo = pname;
+    rev = version;
+    sha256 = "077zj8xad8hsa3nqywvf7ircirmx3krxdipl8wr3dynv3l3khcpl";
+  };
 
-    propagatedBuildInputs = [ discid six parsedatetime
-         isodate Babel pytimeparse leather python-slugify ];
+  propagatedBuildInputs = [
+    six pytimeparse parsedatetime Babel
+    isodate python-slugify leather
+  ];
 
-    doCheck = !isPy3k;
-    # (only) on python3 unittest loader (loadTestsFromModule) fails
+  checkInputs = [ glibcLocales nose lxml cssselect ]
+    ++ lib.optional (!isPy3k) unittest2;
 
-    meta = with stdenv.lib; {
-      description = "A Python data analysis library that is optimized for humans instead of machines";
-      homepage    = https://github.com/wireservice/agate;
-      license     = with licenses; [ mit ];
-      maintainers = with maintainers; [ vrthra ];
-    };
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" nosetests tests
+  '';
+
+  meta = with lib; {
+    description = "A Python data analysis library that is optimized for humans instead of machines";
+    homepage    = https://github.com/wireservice/agate;
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ vrthra ];
+  };
 }
diff --git a/pkgs/development/python-modules/alembic/default.nix b/pkgs/development/python-modules/alembic/default.nix
index 3fcf0973e7a..7becf1cffc4 100644
--- a/pkgs/development/python-modules/alembic/default.nix
+++ b/pkgs/development/python-modules/alembic/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "alembic";
-  version = "0.9.9";
+  version = "0.9.10";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "85bd3ea7633024e4930900bc64fb58f9742dedbc6ebb6ecf25be2ea9a3c1b32e";
+    sha256 = "1cd32df9a3b8c1749082ef60ffbe05ff16617b6afadfdabc680dcb9344af33d7";
   };
 
   buildInputs = [ pytest pytestcov mock coverage ];
diff --git a/pkgs/development/python-modules/asyncssh/default.nix b/pkgs/development/python-modules/asyncssh/default.nix
index 76b863e24fb..6308b1a170f 100644
--- a/pkgs/development/python-modules/asyncssh/default.nix
+++ b/pkgs/development/python-modules/asyncssh/default.nix
@@ -4,17 +4,14 @@
 
 buildPythonPackage rec {
   pname = "asyncssh";
-  version = "1.13.1";
+  version = "1.13.2";
   disabled = pythonOlder "3.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a44736830741e2bb9c4e3992819288b77ac4af217a46d12f415bb57c18ed9c22";
+    sha256 = "e4c07577d021c68d4c8e6d1897987424cc25b58e0726f31ff72476a34ddb6deb";
   };
 
-  # See https://github.com/ronf/asyncssh/commit/6a92930e00f3bbc67d9cdf66816917e64f2450e9#r29559647
-  patches = ./mock_getnameinfo.patch;
-
   propagatedBuildInputs = [ 
     bcrypt
     cryptography
diff --git a/pkgs/development/python-modules/asyncssh/mock_getnameinfo.patch b/pkgs/development/python-modules/asyncssh/mock_getnameinfo.patch
deleted file mode 100644
index 5e8f475445e..00000000000
--- a/pkgs/development/python-modules/asyncssh/mock_getnameinfo.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-diff --git a/tests/server.py b/tests/server.py
-index fbd7e37..e7542dc 100644
---- a/tests/server.py
-+++ b/tests/server.py
-@@ -208,12 +208,10 @@ class ServerTestCase(AsyncTestCase):
-         cls._server = yield from cls.start_server()
- 
-         sock = cls._server.sockets[0]
--        cls._client_host, _ = yield from cls.loop.getnameinfo(('127.0.0.1', 0))
-         cls._server_addr = '127.0.0.1'
-         cls._server_port = sock.getsockname()[1]
- 
--        host = '[%s]:%d,%s ' % (cls._server_addr, cls._server_port,
--                                cls._client_host)
-+        host = '[%s]:%d,localhost ' % (cls._server_addr, cls._server_port)
- 
-         with open('known_hosts', 'w') as known_hosts:
-             known_hosts.write(host)
-diff --git a/tests/test_auth_keys.py b/tests/test_auth_keys.py
-index 1d625ef..72a49f7 100644
---- a/tests/test_auth_keys.py
-+++ b/tests/test_auth_keys.py
-@@ -13,13 +13,13 @@
- """Unit tests for matching against authorized_keys file"""
- 
- import unittest
--from unittest.mock import patch
- 
- import asyncssh
- 
--from .util import TempDirTestCase, x509_available
-+from .util import TempDirTestCase, patch_getnameinfo, x509_available
- 
- 
-+@patch_getnameinfo
- class _TestAuthorizedKeys(TempDirTestCase):
-     """Unit tests for auth_keys module"""
- 
-@@ -69,36 +69,22 @@ class _TestAuthorizedKeys(TempDirTestCase):
-     def match_keys(self, tests, x509=False):
-         """Match against authorized keys"""
- 
--        def getnameinfo(sockaddr, flags):
--            """Mock reverse DNS lookup of client address"""
--
--            # pylint: disable=unused-argument
--
--            host, port = sockaddr
--
--            if host == '127.0.0.1':
--                return ('localhost', port)
--            else:
--                return sockaddr
--
--        with patch('socket.getnameinfo', getnameinfo):
--            for keys, matches in tests:
--                auth_keys = self.build_keys(keys, x509)
--                for (msg, keynum, client_addr,
--                     cert_principals, match) in matches:
--                    with self.subTest(msg, x509=x509):
--                        if x509:
--                            result, trusted_cert = auth_keys.validate_x509(
--                                self.imported_certlist[keynum], client_addr)
--                            if (trusted_cert and trusted_cert.subject !=
--                                    self.imported_certlist[keynum].subject):
--                                result = None
--                        else:
--                            result = auth_keys.validate(
--                                self.imported_keylist[keynum], client_addr,
--                                cert_principals, keynum == 1)
--
--                        self.assertEqual(result is not None, match)
-+        for keys, matches in tests:
-+            auth_keys = self.build_keys(keys, x509)
-+            for (msg, keynum, client_addr, cert_principals, match) in matches:
-+                with self.subTest(msg, x509=x509):
-+                    if x509:
-+                        result, trusted_cert = auth_keys.validate_x509(
-+                            self.imported_certlist[keynum], client_addr)
-+                        if (trusted_cert and trusted_cert.subject !=
-+                                self.imported_certlist[keynum].subject):
-+                            result = None
-+                    else:
-+                        result = auth_keys.validate(
-+                            self.imported_keylist[keynum], client_addr,
-+                            cert_principals, keynum == 1)
-+
-+                    self.assertEqual(result is not None, match)
- 
-     def test_matches(self):
-         """Test authorized keys matching"""
-diff --git a/tests/test_connection_auth.py b/tests/test_connection_auth.py
-index 3da8a5b..ff3e3cc 100644
---- a/tests/test_connection_auth.py
-+++ b/tests/test_connection_auth.py
-@@ -23,8 +23,8 @@ from asyncssh.packet import String
- from asyncssh.public_key import CERT_TYPE_USER, CERT_TYPE_HOST
- 
- from .server import Server, ServerTestCase
--from .util import asynctest, gss_available, patch_gss, make_certificate
--from .util import x509_available
-+from .util import asynctest, gss_available, patch_getnameinfo, patch_gss
-+from .util import make_certificate, x509_available
- 
- 
- class _FailValidateHostSSHServerConnection(asyncssh.SSHServerConnection):
-@@ -455,6 +455,7 @@ class _TestGSSFQDN(ServerTestCase):
-         yield from conn.wait_closed()
- 
- 
-+@patch_getnameinfo
- class _TestHostBasedAuth(ServerTestCase):
-     """Unit tests for host-based authentication"""
- 
-@@ -579,7 +580,7 @@ class _TestHostBasedAuth(ServerTestCase):
-         """Test stripping of trailing dot from client host"""
- 
-         with (yield from self.connect(username='user', client_host_keys='skey',
--                                      client_host=self._client_host + '.',
-+                                      client_host='localhost.',
-                                       client_username='user')) as conn:
-             pass
- 
-@@ -667,6 +668,7 @@ class _TestHostBasedAsyncServerAuth(_TestHostBasedAuth):
-                                     client_username='user')
- 
- 
-+@patch_getnameinfo
- class _TestLimitedHostBasedSignatureAlgs(ServerTestCase):
-     """Unit tests for limited host key signature algorithms"""
- 
-diff --git a/tests/util.py b/tests/util.py
-index 42bb596..4d92ec3 100644
---- a/tests/util.py
-+++ b/tests/util.py
-@@ -84,6 +84,24 @@ def asynctest35(func):
-     return async_wrapper
- 
- 
-+def patch_getnameinfo(cls):
-+    """Decorator for patching socket.getnameinfo"""
-+
-+    def getnameinfo(sockaddr, flags):
-+        """Mock reverse DNS lookup of client address"""
-+
-+        # pylint: disable=unused-argument
-+
-+        host, port = sockaddr
-+
-+        if host == '127.0.0.1':
-+            return ('localhost', port)
-+        else:
-+            return sockaddr
-+
-+    return patch('socket.getnameinfo', getnameinfo)(cls)
-+
-+
- def patch_gss(cls):
-     """Decorator for patching GSSAPI classes"""
diff --git a/pkgs/development/python-modules/authres/default.nix b/pkgs/development/python-modules/authres/default.nix
new file mode 100644
index 00000000000..b5aad787dfb
--- /dev/null
+++ b/pkgs/development/python-modules/authres/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchPypi, buildPythonPackage, python }:
+
+buildPythonPackage rec {
+  pname = "authres";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1mcllhrwr23hwa2jn3m15k29ks1205ymwafjzchh8ma664hnzv6v";
+  };
+
+  checkPhase = ''
+    # run doctests
+    ${python.interpreter} -m authres
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Email Authentication-Results Headers generation and parsing for Python/Python3";
+    longDescription = ''
+      Python module that implements various internet RFC's: 5451/7001/7601
+      Authentication-Results Headers generation and parsing for
+      Python/Python3.
+    '';
+    homepage = https://launchpad.net/authres;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/pkgs/development/python-modules/boto3/default.nix b/pkgs/development/python-modules/boto3/default.nix
index b3a15ba0868..dca7844dec9 100644
--- a/pkgs/development/python-modules/boto3/default.nix
+++ b/pkgs/development/python-modules/boto3/default.nix
@@ -13,13 +13,13 @@
 
 buildPythonPackage rec {
   pname =  "boto3";
-  version = "1.7.48";
+  version = "1.7.57";
 
   src = fetchFromGitHub {
     owner = "boto";
     repo  = "boto3";
     rev   = version;
-    sha256 = "0pag37yy6693k8xvlyx4f06asab52i89xljy2ip121i60ih3jfw4";
+    sha256 = "0rp3vclx7mvfl6isa47m7dzlrf33qb9vj53p0gj4cw3mgl14cnbl";
   };
 
   propagatedBuildInputs = [ botocore jmespath s3transfer ] ++ lib.optionals (!isPy3k) [ futures ];
diff --git a/pkgs/development/python-modules/botocore/default.nix b/pkgs/development/python-modules/botocore/default.nix
index fada751968b..70a5af97fda 100644
--- a/pkgs/development/python-modules/botocore/default.nix
+++ b/pkgs/development/python-modules/botocore/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "botocore";
-  version = "1.10.48";
+  version = "1.10.57";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1432drc7482nwrppwkk1i6ars3wz9w2g9rsxkz5nlxmyf9qm260j";
+    sha256 = "0mif7c12643hac6zxq89gv0wjf4r3vqlmm01bm68psljaj40jnpi";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/celery/default.nix b/pkgs/development/python-modules/celery/default.nix
index 3a357282c16..71911da08f4 100644
--- a/pkgs/development/python-modules/celery/default.nix
+++ b/pkgs/development/python-modules/celery/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchPypi, iana-etc, libredirect,
+{ stdenv, buildPythonPackage, fetchPypi, fetchpatch, iana-etc, libredirect,
   pytest, case, kombu, billiard, pytz, anyjson, amqp, eventlet
 }:
 
@@ -11,6 +11,13 @@ buildPythonPackage rec {
     sha256 = "ff727c115533edbc7b81b2b4ba1ec88d1c2fc4836e1e2f4c3c33a76ff53e5d7f";
   };
 
+  # Skip test_RedisBackend.test_timeouts_in_url_coerced
+  # See https://github.com/celery/celery/pull/4847
+  patches = fetchpatch {
+    url = https://github.com/celery/celery/commit/b2668607c909c61becd151905b4525190c19ff4a.patch;
+    sha256 = "11w0z2ycyh8kccj4y69zb7bxppiipcwwigg6jn1q9yrcsvz170jq";
+  };
+
   # make /etc/protocols accessible to fix socket.getprotobyname('tcp') in sandbox
   preCheck = stdenv.lib.optionalString stdenv.isLinux ''
     export NIX_REDIRECTS=/etc/protocols=${iana-etc}/etc/protocols \
diff --git a/pkgs/development/python-modules/credstash/default.nix b/pkgs/development/python-modules/credstash/default.nix
index 8be1780aa99..e19850be8ce 100644
--- a/pkgs/development/python-modules/credstash/default.nix
+++ b/pkgs/development/python-modules/credstash/default.nix
@@ -1,19 +1,15 @@
-{ stdenv, buildPythonPackage, fetchPypi, fetchpatch, cryptography, boto3, pyyaml, docutils }:
+{ stdenv, buildPythonPackage, fetchPypi, fetchpatch, cryptography, boto3, pyyaml, docutils, nose }:
 
 buildPythonPackage rec {
   pname = "credstash";
-  version = "1.14.0";
+  version = "1.15.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "718b337f7a6fa001e014386071f05c59900525d0507009126d2fe8d75fe0761d";
+    sha256 = "814560f99ae2409e2c6d906d878f9dadada5d1d0a950aafb6b2c0d535291bdfb";
   };
 
-  patches = fetchpatch {
-    url = https://github.com/fugue/credstash/pull/178.patch;
-    sha256 = "15ih4h5v63g7qfmqdl4zca147wkcrx8vnsh4ns33001dipcfb5sc";
-    excludes = [ ".travis.yml" ];
-  };
+  nativeBuildInputs = [ nose ];
 
   propagatedBuildInputs = [ cryptography boto3 pyyaml docutils ];
 
diff --git a/pkgs/development/python-modules/cypari2/default.nix b/pkgs/development/python-modules/cypari2/default.nix
index fc3c311a506..6df19e4c94b 100644
--- a/pkgs/development/python-modules/cypari2/default.nix
+++ b/pkgs/development/python-modules/cypari2/default.nix
@@ -7,16 +7,15 @@
 , gmp
 , cython
 , cysignals
-, six
 }:
 
 buildPythonPackage rec {
   pname = "cypari2";
-  version = "1.1.4"; # remove six dependency on upgrade to >1.1.4
+  version = "1.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0n0mp8qmvvzmfaawg39d3mkyzf65q2zkz7bnqyk4sfjbz4xwc6mb";
+    sha256 = "0v2kikwf0advq8j76nwzhlacwj1yys9cvajm4fqgmasjdsnf1q4k";
   };
 
   # This differs slightly from the default python installPhase in that it pip-installs
@@ -39,7 +38,6 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     cysignals
     cython
-    six # after 1.1.4: will not be needed
   ];
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/cysignals/default.nix b/pkgs/development/python-modules/cysignals/default.nix
index dc88c4d94f7..8908f6ea9d5 100644
--- a/pkgs/development/python-modules/cysignals/default.nix
+++ b/pkgs/development/python-modules/cysignals/default.nix
@@ -9,11 +9,11 @@ assert pariSupport -> pari != null;
 
 buildPythonPackage rec {
   pname = "cysignals";
-  version = "1.7.1";
+  version = "1.7.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "15nky8siwlc7s8v23vv4m0mnxa1z6jcs2qfr26m2mkw9j9g2na2j";
+    sha256 = "0rzwd9bjw6bj01xcmimqfim1g0njjyyyal0f93frm1la4hcmq96v";
   };
 
   # explicit check:
@@ -23,6 +23,7 @@ buildPythonPackage rec {
   ];
 
   # currently fails, probably because of formatting changes in gdb 8.0
+  # https://trac.sagemath.org/ticket/24692
   doCheck = false;
 
   preCheck = ''
diff --git a/pkgs/development/python-modules/django-extensions/default.nix b/pkgs/development/python-modules/django-extensions/default.nix
index 18fd685f3c2..3548e930ab3 100644
--- a/pkgs/development/python-modules/django-extensions/default.nix
+++ b/pkgs/development/python-modules/django-extensions/default.nix
@@ -1,24 +1,36 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub
-, vobject, mock, tox, pytestcov, pytest-django, pytest, shortuuid
-, django, six
+{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
+, six, typing
+, django, shortuuid, python-dateutil, pytest
+, pytest-django, pytestcov, mock, vobject
+, werkzeug, glibcLocales
 }:
 
 buildPythonPackage rec {
   pname = "django-extensions";
-  version = "1.8.1";
+  version = "2.0.7";
 
   src = fetchFromGitHub {
-    owner = "${pname}";
-    repo = "${pname}";
-    rev = "${version}";
-    sha256 = "08rd9zswvjb9dixzyd3p3l3hw3wwhqkgyjvid65niybzjl1xdb5h";
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "1xf84wq7ab1zfb3nmf4qgw6mjf5xafjwr3175dyrqrrn6cpvcr4a";
   };
 
-  buildInputs = [ vobject mock tox pytestcov pytest-django pytest shortuuid ];
+  postPatch = ''
+    substituteInPlace setup.py --replace "'tox'," ""
+  '';
 
-  propagatedBuildInputs = [ django six ];
+  propagatedBuildInputs = [ six ] ++ lib.optional (pythonOlder "3.5") typing;
 
-  meta = with stdenv.lib; {
+  checkInputs = [
+    django shortuuid python-dateutil pytest
+    pytest-django pytestcov mock vobject
+    werkzeug glibcLocales
+  ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  meta = with lib; {
     description = "A collection of custom extensions for the Django Framework";
     homepage = https://github.com/django-extensions/django-extensions;
     license = licenses.mit;
diff --git a/pkgs/development/python-modules/djmail/default.nix b/pkgs/development/python-modules/djmail/default.nix
index aaea8175f72..1659d46abbc 100644
--- a/pkgs/development/python-modules/djmail/default.nix
+++ b/pkgs/development/python-modules/djmail/default.nix
@@ -1,5 +1,6 @@
-{ lib, buildPythonPackage, fetchPypi,
-  celery, django, psycopg2
+{ lib, buildPythonPackage, fetchPypi
+, glibcLocales
+, celery, django, psycopg2
 }:
 
 buildPythonPackage rec {
@@ -7,7 +8,7 @@ buildPythonPackage rec {
   version = "1.1.0";
 
   meta = {
-    description = "Simple, powerfull and nonobstructive django email middleware.";
+    description = "Simple, powerfull and nonobstructive django email middleware";
     homepage = https://github.com/bameda/djmail;
     license = lib.licenses.bsd3;
   };
@@ -17,6 +18,10 @@ buildPythonPackage rec {
     sha256 = "87d2a8b4bdf67ae9b312e127ccc873a53116cf297ec786460d782ce82eaa76b5";
   };
 
+  nativeBuildInputs = [ glibcLocales ];
+
+  LC_ALL = "en_US.UTF-8";
+
   propagatedBuildInputs = [ celery django psycopg2 ];
 
   # django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
diff --git a/pkgs/development/python-modules/dkimpy/default.nix b/pkgs/development/python-modules/dkimpy/default.nix
index 01224515d92..dabc3244592 100644
--- a/pkgs/development/python-modules/dkimpy/default.nix
+++ b/pkgs/development/python-modules/dkimpy/default.nix
@@ -1,38 +1,25 @@
-{ stdenv, fetchurl, openssl, makeWrapper, buildPythonApplication
-, pytest, dnspython }:
+{ stdenv, fetchPypi, openssl, makeWrapper, buildPythonPackage
+, pytest, dnspython, pynacl, authres, python }:
 
-let
-  majorversion = "0.6";
-  minorversion = "2";
-in buildPythonApplication rec {
+buildPythonPackage rec {
   pname = "dkimpy";
-  version = "${majorversion}.${minorversion}";
+  version = "0.8.1";
 
-  src = fetchurl {
-    url = "https://launchpad.net/${pname}/${majorversion}/${majorversion}.${minorversion}/+download/${pname}-${version}.tar.gz";
-    sha256 = "1hagz8qk0v4ijfbcdq4z28bpgr2mkpr498z76i1vam2d50chmakl";
-  };
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "125xakqg2j5jp4k5kafpnpazh9d97ysgayrsgpvm3nkdj4g8hw1j";
+};
 
   checkInputs = [ pytest ];
-  propagatedBuildInputs =  [ openssl dnspython ];
+  propagatedBuildInputs =  [ openssl dnspython pynacl authres ];
 
   patchPhase = ''
-    substituteInPlace dknewkey.py --replace \
+    substituteInPlace dkim/dknewkey.py --replace \
       /usr/bin/openssl ${openssl}/bin/openssl
   '';
 
   checkPhase = ''
-    python ./test.py
-  '';
-
-  postInstall = ''
-    mkdir -p $out/bin $out/libexec
-    mv $out/bin/*.py $out/libexec
-    makeWrapper "$out/libexec/dkimverify.py" $out/bin/dkimverify
-    makeWrapper "$out/libexec/dkimsign.py" $out/bin/dkimsign
-    makeWrapper "$out/libexec/arcverify.py" $out/bin/arcverify
-    makeWrapper "$out/libexec/arcsign.py" $out/bin/arcsign
-    makeWrapper "$out/libexec/dknewkey.py" $out/bin/dknewkey
+    ${python.interpreter} ./test.py
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/dogtail/default.nix b/pkgs/development/python-modules/dogtail/default.nix
new file mode 100644
index 00000000000..2d193616e5f
--- /dev/null
+++ b/pkgs/development/python-modules/dogtail/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildPythonPackage
+, python
+, pygobject3
+, pyatspi
+, pycairo
+, at-spi2-core
+, gobjectIntrospection
+, gtk3
+, gsettings-desktop-schemas
+, fetchurl
+, dbus
+, xvfb_run
+# , fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "dogtail";
+  version = "0.9.10";
+
+  # https://gitlab.com/dogtail/dogtail/issues/1
+  # src = fetchPypi {
+  #   inherit pname version;
+  #   sha256 = "0p5wfssvzr9w0bvhllzbbd8fnp4cca2qxcpcsc33dchrmh5n552x";
+  # };
+  src = fetchurl {
+    url = https://gitlab.com/dogtail/dogtail/raw/released/dogtail-0.9.10.tar.gz;
+    sha256 = "14sycidl8ahj3fwlhpwlpnyd43c302yqr7nqg2hj39pyj7kgk15b";
+  };
+
+  patches = [
+    ./nix-support.patch
+  ];
+
+  nativeBuildInputs = [ gobjectIntrospection dbus xvfb_run ]; # for setup hooks
+  propagatedBuildInputs = [ at-spi2-core gtk3 pygobject3 pyatspi pycairo ];
+
+  checkPhase = ''
+    runHook preCheck
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:$XDG_DATA_DIRS
+    # export NO_AT_BRIDGE=1
+    gsettings set org.gnome.desktop.interface toolkit-accessibility true
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      ${python.interpreter} nix_run_setup test
+    runHook postCheck
+  '';
+
+  # TODO: Tests require accessibility
+  doCheck = false;
+
+  meta = {
+    description = "GUI test tool and automation framework that uses Accessibility technologies to communicate with desktop applications";
+    homepage = https://gitlab.com/dogtail/dogtail;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ jtojnar ];
+  };
+}
diff --git a/pkgs/development/python-modules/dogtail/nix-support.patch b/pkgs/development/python-modules/dogtail/nix-support.patch
new file mode 100644
index 00000000000..e8a65bbc87b
--- /dev/null
+++ b/pkgs/development/python-modules/dogtail/nix-support.patch
@@ -0,0 +1,35 @@
+--- a/dogtail/distro.py
++++ b/dogtail/distro.py
+@@ -233,6 +233,11 @@
+         PackageDb.__init__(self)
+ 
+ 
++class _NixPackageDb(PackageDb):  # pragma: no cover
++    def __init__(self):
++        PackageDb.__init__(self)
++
++
+ class JhBuildPackageDb(PackageDb):  # pragma: no cover
+     def __init__(self):
+         PackageDb.__init__(self)
+@@ -324,6 +329,11 @@
+         self.packageDb = _SolarisPackageDb()
+ 
+ 
++class Nix(Distro):  # pragma: no cover
++    def __init__(self):
++        self.packageDb = _NixPackageDb()
++
++
+ class JHBuild(Distro):  # pragma: no cover
+     def __init__(self):
+         self.packageDb = JhBuildPackageDb()
+@@ -358,6 +368,8 @@
+     elif os.path.exists("/etc/release") and \
+             re.match(".*Solaris", open("/etc/release").readline()):  # pragma: no cover
+         distro = Solaris()  # pragma: no cover
++    elif os.path.exists("/nix/store"):  # pragma: no cover
++        distro = Nix()  # pragma: no cover
+     elif os.path.exists("/etc/os-release") and \
+             re.match(".*GNOME-Continuous", open("/etc/os-release").readline()):  # pragma: no cover
+         distro = GnomeContinuous()  # pragma: no cover
diff --git a/pkgs/development/python-modules/eve/default.nix b/pkgs/development/python-modules/eve/default.nix
index deed6536fe7..b8daa5304c7 100644
--- a/pkgs/development/python-modules/eve/default.nix
+++ b/pkgs/development/python-modules/eve/default.nix
@@ -4,17 +4,12 @@
 buildPythonPackage rec {
   pname = "Eve";
   version = "0.8";
-  name  = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "9f926c715f88c7a92dc2b950ccc09cccd91f72fe0e93cde806b85d25b947df2f";
   };
 
-  patches = [
-    ./setup.patch
-  ];
-
   propagatedBuildInputs = [
     cerberus
     events
diff --git a/pkgs/development/python-modules/eve/setup.patch b/pkgs/development/python-modules/eve/setup.patch
deleted file mode 100644
index 8e5ca27757e..00000000000
--- a/pkgs/development/python-modules/eve/setup.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git i/setup.py w/setup.py
-index 0176467..2b74988 100755
---- i/setup.py
-+++ w/setup.py
-@@ -9,11 +9,11 @@ install_requires = [
-     'cerberus>=0.9.2,<0.10',
-     'events>=0.2.1,<0.3',
-     'simplejson>=3.3.0,<4.0',
--    'werkzeug>=0.9.4,<=0.11.15',
--    'markupsafe>=0.23,<1.0',
--    'jinja2>=2.8,<3.0',
--    'itsdangerous>=0.24,<1.0',
--    'flask>=0.10.1,<=0.12',
-+    'werkzeug>=0.9.4',
-+    'markupsafe>=0.23',
-+    'jinja2>=2.8',
-+    'itsdangerous>=0.24',
-+    'flask>=0.10.1',
-     'pymongo>=3.4',
-     'flask-pymongo>=0.4',
- ]
diff --git a/pkgs/development/python-modules/events/default.nix b/pkgs/development/python-modules/events/default.nix
new file mode 100644
index 00000000000..28e7726a829
--- /dev/null
+++ b/pkgs/development/python-modules/events/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "Events";
+  version = "0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f4d9c41a5c160ce504278f219fe56f44242ca63794a0ad638b52d1e087ac2a41";
+  };
+
+  meta = with lib; {
+    homepage = http://events.readthedocs.org;
+    description = "Bringing the elegance of C# EventHanlder to Python";
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/flask-autoindex/default.nix b/pkgs/development/python-modules/flask-autoindex/default.nix
index f36d7fbca1c..0c353a34c38 100644
--- a/pkgs/development/python-modules/flask-autoindex/default.nix
+++ b/pkgs/development/python-modules/flask-autoindex/default.nix
@@ -1,6 +1,6 @@
 { stdenv
 , buildPythonPackage
-, fetchFromGitHub
+, fetchPypi
 , flask
 , flask-silk
 , future
@@ -8,16 +8,11 @@
 
 buildPythonPackage rec {
   pname = "Flask-AutoIndex";
-  version = "2018-06-28";
+  version = "0.6.1";
 
-  # master fixes various issues (binary generation, flask syntax) and has no
-  # major changes
-  # new release requested: https://github.com/sublee/flask-autoindex/issues/38
-  src = fetchFromGitHub {
-    owner = "sublee";
-    repo = "flask-autoindex";
-    rev = "e3d449a89d56bf4c171c7c8d90af028e579782cf";
-    sha256 = "0bwq2nid4h8vrxspggk064vra4wd804cl2ryyx4j2d1dyywmgjgy";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0v87sa073hmj64f47sazbiw08kyxsxay100bd5084jwq7c1y92d7";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/flask-restful/default.nix b/pkgs/development/python-modules/flask-restful/default.nix
index a57823a0987..41735c4d1c6 100644
--- a/pkgs/development/python-modules/flask-restful/default.nix
+++ b/pkgs/development/python-modules/flask-restful/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchPypi, isPy3k
+{ lib, buildPythonPackage, fetchPypi, fetchpatch, isPy3k
 , nose, mock, blinker
 , flask, six, pytz, aniso8601, pycrypto
 }:
@@ -12,19 +12,27 @@ buildPythonPackage rec {
     sha256 = "01rlvl2iq074ciyn4schmjip7cyplkwkysbb8f610zil06am35ap";
   };
 
-# TypeError: Only byte strings can be passed to C code
-  patchPhase = if isPy3k then ''
+  patches = [
+    (fetchpatch {
+      url = https://github.com/flask-restful/flask-restful/commit/54979f0a49b2217babc53c5b65b5df10b6de8e05.patch;
+      sha256 = "11s6ag6l42g61ccg5jw9j1f26hwgjfa3sp890cbl5r4hy5ycpyr5";
+    })
+    (fetchpatch {
+      url = https://github.com/flask-restful/flask-restful/commit/f45e81a45ed03922fd225afe27006315811077e6.patch;
+      sha256 = "16avd369j5r08d1l23mwbba26zjwnmfqvfvnfz02am3gr5l6p3gl";
+    })
+  ];
+
+  postPatch = lib.optionalString isPy3k ''
+    # TypeError: Only byte strings can be passed to C code
     rm tests/test_crypto.py tests/test_paging.py
-    '' else null;
-# Disable test broken with aniso > 3.0.0, can be removed when updating to a flask-restful version with commit 54979f0
-  preCheck = ''
-  substituteInPlace "./tests/test_inputs.py" --replace "test_bad_isointervals" "disabled_bad_isointervals"
   '';
-  buildInputs = [ nose mock blinker ];
+
+  checkInputs = [ nose mock blinker ];
+
   propagatedBuildInputs = [ flask six pytz aniso8601 pycrypto ];
-  PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://flask-restful.readthedocs.io/";
     description = "REST API building blocks for Flask";
     license = licenses.bsd3;
diff --git a/pkgs/development/python-modules/geojson/default.nix b/pkgs/development/python-modules/geojson/default.nix
index 902d1b26653..faf55773539 100644
--- a/pkgs/development/python-modules/geojson/default.nix
+++ b/pkgs/development/python-modules/geojson/default.nix
@@ -2,11 +2,13 @@
 
 buildPythonPackage rec {
   pname = "geojson";
-  version = "2.3.0";
+  version = "2.4.0";
+
+  format = "wheel";
 
   src = fetchPypi {
-    inherit pname version;
-    sha256 = "06ihcb8839zzgk5jcv18kc6nqld4hhj3nk4f3drzcr8n8893v1y8";
+    inherit pname version format;
+    sha256 = "0r9pc8hgnc5hf5rq98vinbrncn08v4kgzdfmfs14rfypvacsmfpj";
   };
 
   LC_ALL = "en_US.UTF-8";
diff --git a/pkgs/development/python-modules/google-api-python-client/default.nix b/pkgs/development/python-modules/google-api-python-client/default.nix
index 72172c4a258..7f71a4ed3ef 100644
--- a/pkgs/development/python-modules/google-api-python-client/default.nix
+++ b/pkgs/development/python-modules/google-api-python-client/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage, fetchPypi
-, httplib2, six, google-auth-httplib2, uritemplate }:
+, httplib2, google_auth, google-auth-httplib2, six, uritemplate, oauth2client }:
 
 buildPythonPackage rec {
   pname = "google-api-python-client";
@@ -13,7 +13,7 @@ buildPythonPackage rec {
   # No tests included in archive
   doCheck = false;
 
-  propagatedBuildInputs = [ httplib2 google-auth-httplib2 six uritemplate ];
+  propagatedBuildInputs = [ httplib2 google_auth google-auth-httplib2 six uritemplate oauth2client ];
 
   meta = with lib; {
     description = "The core Python library for accessing Google APIs";
diff --git a/pkgs/development/python-modules/grpcio-tools/default.nix b/pkgs/development/python-modules/grpcio-tools/default.nix
new file mode 100644
index 00000000000..8d4c925acf8
--- /dev/null
+++ b/pkgs/development/python-modules/grpcio-tools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildPythonPackage, fetchPypi, lib, grpc, grpcio}:
+
+buildPythonPackage rec {
+  pname = "grpcio-tools";
+  version = "1.13.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ck6818kb4nb6skm9lqg492brqs7kfk65f4hh2c7h7c8pkbrpcw1";
+  };
+
+  enableParallelBuilding = true;
+
+  propagatedBuildInputs = [ grpc grpcio ];
+
+  # no tests in the package
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Protobuf code generator for gRPC";
+    license = lib.licenses.asl20;
+    homepage = "https://grpc.io/grpc/python/";
+    maintainers = with maintainers; [ vanschelven ];
+  };
+}
diff --git a/pkgs/development/python-modules/grpcio/default.nix b/pkgs/development/python-modules/grpcio/default.nix
index 7dd2d6bb25b..1846c7bcd89 100644
--- a/pkgs/development/python-modules/grpcio/default.nix
+++ b/pkgs/development/python-modules/grpcio/default.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
 
   meta = with stdenv.lib; {
     description = "HTTP/2-based RPC framework";
-    license = lib.licenses.bsd3;
+    license = lib.licenses.asl20;
     homepage = "https://grpc.io/grpc/python/";
     maintainers = with maintainers; [ vanschelven ];
   };
diff --git a/pkgs/development/python-modules/guessit/2.0.nix b/pkgs/development/python-modules/guessit/2.0.nix
deleted file mode 100644
index d95d0880adf..00000000000
--- a/pkgs/development/python-modules/guessit/2.0.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchPypi
-, pytestrunner
-, dateutil
-, babelfish
-, rebulk
-}:
-
-buildPythonPackage rec {
-  pname = "guessit";
-  version = "3.0.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "bf17e78783cf13bf903750770de4c3bb6c9ca89baafedb1612794660b6ebe32b";
-  };
-
-  # Tests require more packages.
-  doCheck = false;
-  buildInputs = [ pytestrunner ];
-  propagatedBuildInputs = [
-    dateutil babelfish rebulk
-  ];
-
-  meta = {
-    homepage = https://pypi.python.org/pypi/guessit;
-    license = lib.licenses.lgpl3;
-    description = "A library for guessing information from video files";
-  };
-}
diff --git a/pkgs/development/python-modules/keyutils/default.nix b/pkgs/development/python-modules/keyutils/default.nix
index b07dd4abd0d..907af4d250b 100644
--- a/pkgs/development/python-modules/keyutils/default.nix
+++ b/pkgs/development/python-modules/keyutils/default.nix
@@ -1,17 +1,19 @@
-{ lib, buildPythonPackage, fetchPypi, keyutils, pytestrunner }:
+{ lib, buildPythonPackage, fetchFromGitHub, keyutils, pytestrunner, pytest }:
 
 buildPythonPackage rec {
   pname = "keyutils";
   version = "0.5";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "0dskys71vkn59vlsfs1ljli0qnzk7b10iv4pawxawnk2hvyjrf10";
+  # github version comes bundled with tests
+  src = fetchFromGitHub {
+    owner = "sassoftware";
+    repo = "python-keyutils";
+    rev = "v${version}";
+    sha256 = "1gga60w8sb3r5bxa0bfp7d7wzg6s3db5y7aizr14p2pvp92d8bdi";
   };
 
-  checkInputs = [ keyutils pytestrunner ];
-
-  doCheck = false;
+  buildInputs = [ keyutils ];
+  checkInputs = [ pytest pytestrunner ];
 
   meta = {
     description = "A set of python bindings for keyutils";
diff --git a/pkgs/development/python-modules/klaus/default.nix b/pkgs/development/python-modules/klaus/default.nix
index 0740cfa84bb..1629c55a439 100644
--- a/pkgs/development/python-modules/klaus/default.nix
+++ b/pkgs/development/python-modules/klaus/default.nix
@@ -2,13 +2,13 @@
 
 python.pkgs.buildPythonPackage rec {
   pname = "klaus";
-  version = "1.2.2";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "jonashaag";
     repo = pname;
     rev = version;
-    sha256 = "0hkl1ycyd5ccijmknr3yfp3ga43y01m7390xnibqqgaisfvcm9wp";
+    sha256 = "04zjvrpx66x2c0v74nvmq8x7s7c8994cv1zwd5hfn9alq82hqcgr";
   };
 
   prePatch = ''
@@ -35,6 +35,6 @@ python.pkgs.buildPythonPackage rec {
     description = "The first Git web viewer that Just Works";
     homepage    = https://github.com/jonashaag/klaus;
     license     = licenses.isc;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ pSub ];
   };
 }
diff --git a/pkgs/development/python-modules/kombu/default.nix b/pkgs/development/python-modules/kombu/default.nix
new file mode 100644
index 00000000000..7620ee94441
--- /dev/null
+++ b/pkgs/development/python-modules/kombu/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchPypi, pytest, case, pytz, amqp }:
+
+buildPythonPackage rec {
+    pname = "kombu";
+    version = "4.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "86adec6c60f63124e2082ea8481bbe4ebe04fde8ebed32c177c7f0cd2c1c9082";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements/test.txt --replace "pytest-sugar" ""
+  '';
+
+  checkInputs = [ pytest case pytz ];
+
+  propagatedBuildInputs = [ amqp ];
+
+  meta = with lib; {
+    description = "Messaging library for Python";
+    homepage    = https://github.com/celery/kombu;
+    license     = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/libvirt/default.nix b/pkgs/development/python-modules/libvirt/default.nix
index 65e8f3c7ba6..a99d4542ba5 100644
--- a/pkgs/development/python-modules/libvirt/default.nix
+++ b/pkgs/development/python-modules/libvirt/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "libvirt";
-  version = "4.4.0";
+  version = "4.5.0";
 
   src = assert version == libvirt.version; fetchgit {
     url = git://libvirt.org/libvirt-python.git;
     rev = "v${version}";
-    sha256 = "01kwwwacbq7kbsslb2ac3wwfs4r8nsv7jhn0df2mmff30izbhq34";
+    sha256 = "0w2rzkxv7jsq4670m0j5c6p4hpyi0r0ja6wd3wdvixcwc6hhx407";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/python-modules/matrix-client/default.nix b/pkgs/development/python-modules/matrix-client/default.nix
index 34ec95b866f..19c4baca8b2 100644
--- a/pkgs/development/python-modules/matrix-client/default.nix
+++ b/pkgs/development/python-modules/matrix-client/default.nix
@@ -2,26 +2,22 @@
 , buildPythonPackage
 , fetchPypi
 , requests
-, tox, pytest, flake8, responses
+, pytest, pytestrunner, responses
 }:
 
 buildPythonPackage rec {
-  pname = "matrix-client";
-  version = "0.2.0";
+  pname = "matrix_client";
+  version = "0.3.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b96e87adf1bc2270166b2a4cff1320d2ef283779ea8b3c4edd0d9051fc7b7924";
+    sha256 = "1mgjd0ymf9mvqjkvgx3xjhxap7rzdmpa21wfy0cxbw2xcswcrqyw";
   };
 
-  checkInputs = [ tox pytest flake8 responses ];
+  checkInputs = [ pytest pytestrunner responses ];
 
   propagatedBuildInputs = [ requests ];
 
-  checkPhase = ''
-    pytest
-  '';
-
   meta = with stdenv.lib; {
     description = "Matrix Client-Server SDK";
     homepage = https://github.com/matrix-org/matrix-python-sdk;
diff --git a/pkgs/development/python-modules/pdfx/default.nix b/pkgs/development/python-modules/pdfx/default.nix
new file mode 100644
index 00000000000..d2397fb5c82
--- /dev/null
+++ b/pkgs/development/python-modules/pdfx/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, buildPythonPackage, fetchFromGitHub, pdfminer, chardet, pytest }:
+
+buildPythonPackage rec {
+  pname = "pdfx";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "metachris";
+    repo = "pdfx";
+    rev = "v${version}";
+    sha256 = "1183k4h5qdf8y0imbir9ja3yzzsvdmqgbv3bi6dnkgr1wy2xfr0v";
+  };
+
+  # Remove after https://github.com/metachris/pdfx/pull/28
+  prePatch = ''
+    sed -i -e "s|pdfminer2|pdfminer.six|" setup.py
+  '';
+
+  propagatedBuildInputs = [ pdfminer chardet ];
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Extract references (pdf, url, doi, arxiv) and metadata from a PDF";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-prctl/default.nix b/pkgs/development/python-modules/python-prctl/default.nix
new file mode 100644
index 00000000000..5d092f5e6ea
--- /dev/null
+++ b/pkgs/development/python-modules/python-prctl/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, libcap
+}:
+
+buildPythonPackage rec {
+  pname = "python-prctl";
+  version = "1.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1njgixnavmwq45r3gpkhn1y760sax204clagg4gzwvvdc5bdbssp";
+  };
+
+  patches = [ ./skip_bad_tests.patch ];
+  buildInputs = [ libcap ];
+
+  meta = {
+    description = "Python(ic) interface to the linux prctl syscall";
+    homepage = https://github.com/seveas/python-prctl;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ catern ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch b/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch
new file mode 100644
index 00000000000..19d70f234a9
--- /dev/null
+++ b/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch
@@ -0,0 +1,34 @@
+--- ./test_prctl.py	2018-01-26 16:02:52.000000000 -0500
++++ ./test_prctl.py	2018-06-21 18:26:43.370065009 -0400
+@@ -154,6 +154,7 @@
+         prctl.set_keepcaps(False)
+         self.assertEqual(prctl.get_keepcaps(), False)
+ 
++    @unittest.skip("No access to /proc in the Nix build sandbox")
+     @require('set_mce_kill')
+     def test_mce_kill(self):
+         """Test the MCE_KILL setting"""
+@@ -173,6 +174,7 @@
+         prctl.set_name(name)
+         self.assertEqual(prctl.get_name(), name[:15])
+ 
++    @unittest.skip("The Nix build sandbox has no_new_privs already enabled")
+     @require('get_no_new_privs')
+     def test_no_new_privs(self):
+         """Test the no_new_privs function"""
+@@ -189,6 +191,7 @@
+                 self.assertNotEqual(sp.returncode, 0)
+             os._exit(0)
+ 
++    @unittest.skip("No access to /proc in the Nix build sandbox")
+     def test_proctitle(self):
+         """Test setting the process title, including too long titles"""
+         title = "This is a test!"
+@@ -225,6 +228,7 @@
+             os._exit(0)
+         self.assertRaises(OSError, prctl.set_ptracer, new_pid)
+ 
++    @unittest.skip("The Nix build sandbox has seccomp already enabled")
+     @require('get_seccomp')
+     def test_seccomp(self):
+         """Test manipulation of the seccomp setting"""
diff --git a/pkgs/development/python-modules/scikitlearn/default.nix b/pkgs/development/python-modules/scikitlearn/default.nix
index dc63fe7d104..edaf7cd90cc 100644
--- a/pkgs/development/python-modules/scikitlearn/default.nix
+++ b/pkgs/development/python-modules/scikitlearn/default.nix
@@ -14,6 +14,10 @@ buildPythonPackage rec {
     sha256 = "5ca0ad32ee04abe0d4ba02c8d89d501b4e5e0304bdf4d45c2e9875a735b323a0";
   };
 
+  # basically https://github.com/scikit-learn/scikit-learn/pull/10723,
+  # but rebased onto 0.19.1
+  patches = [ ./n_iter-should-be-less-than-max_iter-using-lbgfs.patch ];
+
   buildInputs = [ nose pillow gfortran glibcLocales ];
   propagatedBuildInputs = [ numpy scipy numpy.blas ];
 
diff --git a/pkgs/development/python-modules/scikitlearn/n_iter-should-be-less-than-max_iter-using-lbgfs.patch b/pkgs/development/python-modules/scikitlearn/n_iter-should-be-less-than-max_iter-using-lbgfs.patch
new file mode 100644
index 00000000000..67309a673d0
--- /dev/null
+++ b/pkgs/development/python-modules/scikitlearn/n_iter-should-be-less-than-max_iter-using-lbgfs.patch
@@ -0,0 +1,73 @@
+diff --git a/sklearn/linear_model/huber.py b/sklearn/linear_model/huber.py
+index e17dc1e..665654d 100644
+--- a/sklearn/linear_model/huber.py
++++ b/sklearn/linear_model/huber.py
+@@ -181,7 +181,11 @@ class HuberRegressor(LinearModel, RegressorMixin, BaseEstimator):
+ 
+     n_iter_ : int
+         Number of iterations that fmin_l_bfgs_b has run for.
+-        Not available if SciPy version is 0.9 and below.
++
++        .. versionchanged:: 0.20
++
++            In SciPy <= 1.0.0 the number of lbfgs iterations may exceed
++            ``max_iter``. ``n_iter_`` will now report at most ``max_iter``.
+ 
+     outliers_ : array, shape (n_samples,)
+         A boolean mask which is set to True where the samples are identified
+@@ -272,7 +276,9 @@ class HuberRegressor(LinearModel, RegressorMixin, BaseEstimator):
+             raise ValueError("HuberRegressor convergence failed:"
+                              " l-BFGS-b solver terminated with %s"
+                              % dict_['task'].decode('ascii'))
+-        self.n_iter_ = dict_.get('nit', None)
++        # In scipy <= 1.0.0, nit may exceed maxiter.
++        # See https://github.com/scipy/scipy/issues/7854.
++        self.n_iter_ = min(dict_.get('nit', None), self.max_iter)
+         self.scale_ = parameters[-1]
+         if self.fit_intercept:
+             self.intercept_ = parameters[-2]
+diff --git a/sklearn/linear_model/logistic.py b/sklearn/linear_model/logistic.py
+index 8646c9a..c72a7d9 100644
+--- a/sklearn/linear_model/logistic.py
++++ b/sklearn/linear_model/logistic.py
+@@ -718,7 +718,9 @@ def logistic_regression_path(X, y, pos_class=None, Cs=10, fit_intercept=True,
+                 warnings.warn("lbfgs failed to converge. Increase the number "
+                               "of iterations.")
+             try:
+-                n_iter_i = info['nit'] - 1
++                # In scipy <= 1.0.0, nit may exceed maxiter.
++                # See https://github.com/scipy/scipy/issues/7854.
++                n_iter_i = min(info['nit'], max_iter)
+             except:
+                 n_iter_i = info['funcalls'] - 1
+         elif solver == 'newton-cg':
+@@ -1115,6 +1117,11 @@ class LogisticRegression(BaseEstimator, LinearClassifierMixin,
+         it returns only 1 element. For liblinear solver, only the maximum
+         number of iteration across all classes is given.
+ 
++        .. versionchanged:: 0.20
++
++            In SciPy <= 1.0.0 the number of lbfgs iterations may exceed
++            ``max_iter``. ``n_iter_`` will now report at most ``max_iter``.
++
+     See also
+     --------
+     SGDClassifier : incrementally trained logistic regression (when given
+diff --git a/sklearn/linear_model/tests/test_huber.py b/sklearn/linear_model/tests/test_huber.py
+index 08f4fdf..ca1092f 100644
+--- a/sklearn/linear_model/tests/test_huber.py
++++ b/sklearn/linear_model/tests/test_huber.py
+@@ -42,6 +42,13 @@ def test_huber_equals_lr_for_high_epsilon():
+     assert_almost_equal(huber.intercept_, lr.intercept_, 2)
+ 
+ 
++def test_huber_max_iter():
++    X, y = make_regression_with_outliers()
++    huber = HuberRegressor(max_iter=1)
++    huber.fit(X, y)
++    assert huber.n_iter_ == huber.max_iter
++
++
+ def test_huber_gradient():
+     # Test that the gradient calculated by _huber_loss_and_gradient is correct
+     rng = np.random.RandomState(1)
diff --git a/pkgs/development/python-modules/sounddevice/default.nix b/pkgs/development/python-modules/sounddevice/default.nix
index 6d467a57c60..5b8c4a46b2b 100644
--- a/pkgs/development/python-modules/sounddevice/default.nix
+++ b/pkgs/development/python-modules/sounddevice/default.nix
@@ -4,15 +4,16 @@
 , cffi
 , numpy
 , portaudio
+, substituteAll
 }:
 
 buildPythonPackage rec {
   pname = "sounddevice";
-  version = "0.3.9";
+  version = "0.3.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1c9e833f8c8ccc67c0291c3448b29e9acc548fe56d15ee6f7fdd7037e00319f8";
+    sha256 = "0pfcbgbl77nggchxb2i5rb78m7hpgn65aqpz99yfx1fgfbmy9yg1";
   };
 
   propagatedBuildInputs = [ cffi numpy portaudio ];
@@ -20,9 +21,12 @@ buildPythonPackage rec {
   # No tests included nor upstream available.
   doCheck = false;
 
-  prePatch = ''
-    substituteInPlace src/sounddevice.py --replace "'portaudio'" "'${portaudio}/lib/libportaudio.so.2'"
-  '';
+  patches = [
+    (substituteAll {
+      src = ./fix-portaudio-library-path.patch;
+      portaudio = "${portaudio}/lib/libportaudio.so.2";
+    })
+  ];
 
   meta = {
     description = "Play and Record Sound with Python";
diff --git a/pkgs/development/python-modules/sounddevice/fix-portaudio-library-path.patch b/pkgs/development/python-modules/sounddevice/fix-portaudio-library-path.patch
new file mode 100644
index 00000000000..5be786ee0f5
--- /dev/null
+++ b/pkgs/development/python-modules/sounddevice/fix-portaudio-library-path.patch
@@ -0,0 +1,34 @@
+diff --git a/sounddevice.py b/sounddevice.py
+index f03476c..5745b6e 100644
+--- a/sounddevice.py
++++ b/sounddevice.py
+@@ -58,28 +58,7 @@ from ctypes.util import find_library as _find_library
+ from _sounddevice import ffi as _ffi
+
+
+-try:
+-    for _libname in (
+-            'portaudio',  # Default name on POSIX systems
+-            'bin\\libportaudio-2.dll',  # DLL from conda-forge
+-            ):
+-        _libname = _find_library(_libname)
+-        if _libname is not None:
+-            break
+-    else:
+-        raise OSError('PortAudio library not found')
+-    _lib = _ffi.dlopen(_libname)
+-except OSError:
+-    if _platform.system() == 'Darwin':
+-        _libname = 'libportaudio.dylib'
+-    elif _platform.system() == 'Windows':
+-        _libname = 'libportaudio' + _platform.architecture()[0] + '.dll'
+-    else:
+-        raise
+-    import _sounddevice_data
+-    _libname = _os.path.join(
+-        next(iter(_sounddevice_data.__path__)), 'portaudio-binaries', _libname)
+-    _lib = _ffi.dlopen(_libname)
++_lib = _ffi.dlopen('@portaudio@')
+
+ _sampleformats = {
+     'float32': _lib.paFloat32,
diff --git a/pkgs/development/python-modules/vobject/default.nix b/pkgs/development/python-modules/vobject/default.nix
index 8d52f65d498..3c0b8a1f593 100644
--- a/pkgs/development/python-modules/vobject/default.nix
+++ b/pkgs/development/python-modules/vobject/default.nix
@@ -1,12 +1,12 @@
 { lib, buildPythonPackage, fetchPypi, isPyPy, python, dateutil }:
 
 buildPythonPackage rec {
-  version = "0.9.5";
+  version = "0.9.6";
   pname = "vobject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0f56cae196303d875682b9648b4bb43ffc769d2f0f800958e0a506af867b1243";
+    sha256 = "cd9ede4363f83c06ba8d8f1541c736efa5c46f9a431430002b2f84f4f4e674d8";
   };
 
   disabled = isPyPy;