about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/python-modules
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/python-modules')
-rw-r--r--nixpkgs/pkgs/development/python-modules/Nikola/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/XlsxWriter/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/accupy/default.nix62
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiozeroconf/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/amqp/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/annoy/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/ansible/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/applicationinsights/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/apprise/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/argcomplete/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asciimatics/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aspy.yaml/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asttokens/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/asynctest/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/avro/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/awkward/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aws-lambda-builders/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bjoern/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/boto3/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/botocore/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/braintree/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/breathe/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bugwarrior/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cachelib/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/certifi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cgen/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/cld2-cffi/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/cntk/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/cupy/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/curio/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/datasette/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/datatable/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/deluge-client/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/distlib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/distributed/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-cors-headers/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django/2_2.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/django_classytags/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django_silk/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/dynd/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/elasticsearch-curator/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/elasticsearch-dsl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/eve/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/factory_boy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/faker/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/fasteners/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/fire/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-marshmallow/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-swagger/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/folium/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/fonttools/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/gcovr/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/genpy/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/gprof2dot/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/gsd/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/h11/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hetzner/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/hmmlearn/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/html5-parser/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/intelhex/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/ipyparallel/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/isbnlib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/islpy/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupytext/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/kitchen/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/klaus/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/klein/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/lark-parser/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/libarcus/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/libsavitar/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/livereload/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/loo-py/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/markdown/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/markdownsuperscript/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mautrix-appservice/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mpi4py/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/mxnet/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/mypy/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/nibabel/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nuitka/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/numericalunits/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/packet-python/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pc-ble-driver-py/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/pelican/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/perfplot/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/persistent/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/pex/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/pglast/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/piccata/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/pipdate/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/portalocker/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/pybindgen/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pychromecast/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyenchant/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyfma/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyglet/default.nix56
-rw-r--r--nixpkgs/pkgs/development/python-modules/pygtk/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyicu/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylint/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylru/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymbolic/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymystem3/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyspinel/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysptk/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-axolotl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-daemon/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-stdnum/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyutilib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/rasterio/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/rfc3987/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/rl-coach/default.nix98
-rw-r--r--nixpkgs/pkgs/development/python-modules/roboschool/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/rpmfluff/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/rpyc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/setproctitle/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/sh/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/sniffio/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/sparse/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder/default.nix59
-rw-r--r--nixpkgs/pkgs/development/python-modules/ssdp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/stravalib/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/streamz/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/strict-rfc3339/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/stripe/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/symengine/default.nix52
-rw-r--r--nixpkgs/pkgs/development/python-modules/tld/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/trezor/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/twilio/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/typesentry/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/uncertainties/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/units/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/uranium/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/weasyprint/default.nix67
-rw-r--r--nixpkgs/pkgs/development/python-modules/weasyprint/library-paths.patch38
-rw-r--r--nixpkgs/pkgs/development/python-modules/xgboost/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/xgboost/lib-path-for-python.patch21
-rw-r--r--nixpkgs/pkgs/development/python-modules/xhtml2pdf/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/zxcvbn-python/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/zxcvbn/default.nix27
148 files changed, 1992 insertions, 355 deletions
diff --git a/nixpkgs/pkgs/development/python-modules/Nikola/default.nix b/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
index 2577711c5259..c6548f1b5984 100644
--- a/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
@@ -58,6 +58,12 @@ buildPythonPackage rec {
     sha256 = "1a5y1qriy76hl4yxvbf365b1ggsxybm06mi1pwb5jkgbkwk2gkrf";
   };
 
+  patchPhase = ''
+    # upstream added bound so that requires.io doesn't send mails about update
+    # nikola should work with markdown 3.0: https://github.com/getnikola/nikola/pull/3175#issue-220147596
+    sed -i 's/Markdown>.*/Markdown/' requirements.txt
+  '';
+
   checkPhase = ''
     LANG="en_US.UTF-8" LC_ALL="en_US.UTF-8" py.test .
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/XlsxWriter/default.nix b/nixpkgs/pkgs/development/python-modules/XlsxWriter/default.nix
index 096dfb6a7799..678141f394f9 100644
--- a/nixpkgs/pkgs/development/python-modules/XlsxWriter/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/XlsxWriter/default.nix
@@ -3,7 +3,7 @@
 buildPythonPackage rec {
 
   pname = "XlsxWriter";
-  version = "1.1.7";
+  version = "1.1.8";
 
   # PyPI release tarball doesn't contain tests so let's use GitHub. See:
   # https://github.com/jmcnamara/XlsxWriter/issues/327
@@ -11,7 +11,7 @@ buildPythonPackage rec {
     owner = "jmcnamara";
     repo = pname;
     rev = "RELEASE_${version}";
-    sha256 = "1zv5222bymfr7046ps5512x1kk7ipcx46jjxylaap1p6llqj7zlj";
+    sha256 = "19qhdcycaiamd3bp8v2z9rpirxsr4c29fgs219k2766fpmfrgx40";
   };
 
   meta = {
diff --git a/nixpkgs/pkgs/development/python-modules/accupy/default.nix b/nixpkgs/pkgs/development/python-modules/accupy/default.nix
new file mode 100644
index 000000000000..9cc3403370f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/accupy/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, mpmath
+, numpy
+, pipdate
+, pybind11
+, pyfma
+, eigen
+, pytest
+, matplotlib
+, perfplot
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "accupy";
+  version = "0.1.4";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2a67f2a778b824fb24eb338fed8e0b61c1af93369d57ff8132f5d602d60f0543";
+  };
+
+  buildInputs = [
+    pybind11 eigen
+  ];
+
+  propagatedBuildInputs = [
+    mpmath
+    numpy
+    pipdate
+    pyfma
+  ];
+
+  checkInputs = [
+    pytest
+    matplotlib
+    perfplot
+  ];
+
+  postConfigure = ''
+   substituteInPlace setup.py \
+     --replace "/usr/include/eigen3/" "${eigen}/include/eigen3/"
+  '';
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  checkPhase = ''
+    pytest test
+  '';
+
+  meta = with lib; {
+    description = "Accurate sums and dot products for Python";
+    homepage = https://github.com/nschloe/accupy;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiozeroconf/default.nix b/nixpkgs/pkgs/development/python-modules/aiozeroconf/default.nix
new file mode 100644
index 000000000000..4dc9401d5306
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiozeroconf/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, netifaces
+, isPy27
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "aiozeroconf";
+  version = "0.1.8";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "074plydm7sd113p3k0siihwwz62d3r42q3g83vqaffp569msknqh";
+  };
+
+  propagatedBuildInputs = [ netifaces ];
+
+  meta = with stdenv.lib; {
+    description = "A pure python implementation of multicast DNS service discovery";
+    homepage = https://github.com/jstasiak/python-zeroconf;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/amqp/default.nix b/nixpkgs/pkgs/development/python-modules/amqp/default.nix
index 29fd1f592f30..bf008df3832f 100644
--- a/nixpkgs/pkgs/development/python-modules/amqp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/amqp/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "amqp";
-  version = "2.4.2";
+  version = "2.5.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "043beb485774ca69718a35602089e524f87168268f0d1ae115f28b88d27f92d7";
+    sha256 = "1j1046gcriidsfha0hvrw6hwcm0wrhbvg0prjjji5inaadyzidnb";
   };
 
   checkInputs = [ pytest case pytest-sugar ];
diff --git a/nixpkgs/pkgs/development/python-modules/annoy/default.nix b/nixpkgs/pkgs/development/python-modules/annoy/default.nix
new file mode 100644
index 000000000000..ce7d9940bf2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/annoy/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  version = "1.15.2";
+  pname = "annoy";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1i5bkf8mwd1pyrbhfwncir2r8yq8s9qz5j13vv2qz92n9g57sr3m";
+  };
+
+  checkInputs = [
+    nose
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk";
+    homepage = https://github.com/spotify/annoy;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ timokau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/ansible/default.nix b/nixpkgs/pkgs/development/python-modules/ansible/default.nix
index dff12fcaf92c..e6e7b4532764 100644
--- a/nixpkgs/pkgs/development/python-modules/ansible/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ansible/default.nix
@@ -18,11 +18,11 @@
 
 buildPythonPackage rec {
   pname = "ansible";
-  version = "2.7.9";
+  version = "2.8.1";
 
   src = fetchurl {
     url = "https://releases.ansible.com/ansible/${pname}-${version}.tar.gz";
-    sha256 = "19vyf60zfmnv7frwm96bzqzvia69dysy9apk8bl84vr03ib9vrbf";
+    sha256 = "0ia4x17ywym3r1m96ar4h0wc2xlylhbjp6x4wzwkh4p2i0x1vmg1";
   };
 
   prePatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/applicationinsights/default.nix b/nixpkgs/pkgs/development/python-modules/applicationinsights/default.nix
new file mode 100644
index 000000000000..10f66b24d14f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/applicationinsights/default.nix
@@ -0,0 +1,24 @@
+{ buildPythonPackage
+, lib
+, fetchPypi
+, portalocker
+}:
+
+buildPythonPackage rec {
+  version = "0.11.9";
+  pname = "applicationinsights";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1hyjdv6xnswgqvip8y164piwfach9hjkbp7vc2qzhd7amjpim89h";
+  };
+
+  propagatedBuildInputs = [ portalocker ];
+
+  meta = with lib; {
+    description = "This project extends the Application Insights API surface to support Python";
+    homepage = https://github.com/Microsoft/ApplicationInsights-Python;
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/apprise/default.nix b/nixpkgs/pkgs/development/python-modules/apprise/default.nix
new file mode 100644
index 000000000000..632600a8fe34
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/apprise/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi
+, Babel, decorator, requests, requests_oauthlib, oauthlib, urllib3, six, click, markdown, pyyaml
+, pytestrunner, coverage, flake8, mock, pytest, pytestcov, tox
+}:
+
+buildPythonPackage rec {
+  pname = "apprise";
+  version = "0.7.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c3c7922f7b80107620f541a6c16435485e7045771b3ecfb998deacee0eb90753";
+  };
+
+  nativeBuildInputs = [ Babel ];
+
+  propagatedBuildInputs = [
+    decorator requests requests_oauthlib oauthlib urllib3 six click markdown pyyaml
+  ];
+
+  checkInputs = [
+    pytestrunner coverage flake8 mock pytest pytestcov tox
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/caronc/apprise";
+    description = "Push Notifications that work with just about every platform!";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/argcomplete/default.nix b/nixpkgs/pkgs/development/python-modules/argcomplete/default.nix
index 5e45aeb09799..efc4c824a395 100644
--- a/nixpkgs/pkgs/development/python-modules/argcomplete/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/argcomplete/default.nix
@@ -3,11 +3,11 @@
 }:
 buildPythonPackage rec {
   pname = "argcomplete";
-  version = "1.9.5";
+  version = "1.10.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "94423d1a56cdec2ef47699e02c9a48cf8827b9c4465b836c0cefb30afe85e59a";
+    sha256 = "1hdysr9z28sgwv47mivf4iyr1sg19hgfz349dghgdlk3rkl6v0s5";
   };
 
   doCheck = false; # bash-completion test fails with "compgen: command not found".
diff --git a/nixpkgs/pkgs/development/python-modules/asciimatics/default.nix b/nixpkgs/pkgs/development/python-modules/asciimatics/default.nix
index d83e2fdbf443..d71f0b640f9d 100644
--- a/nixpkgs/pkgs/development/python-modules/asciimatics/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asciimatics/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "asciimatics";
-  version = "1.10.0";
+  version = "1.11.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9101b0b6885542f324980bbe13a772475cd6a12678f601228eaaea412db919ab";
+    sha256 = "132y3gc0dj9vmgajmzz2fyc3icrrgsvynwfl0g31bylm7h9p220x";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/aspy.yaml/default.nix b/nixpkgs/pkgs/development/python-modules/aspy.yaml/default.nix
index c6d06772c9ba..1a9103382327 100644
--- a/nixpkgs/pkgs/development/python-modules/aspy.yaml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aspy.yaml/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "aspy.yaml";
-  version = "1.1.2";
+  version = "1.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5eaaacd0886e8b581f0e4ff383fb6504720bb2b3c7be17307724246261a41adf";
+    sha256 = "0i9z2jm2hjwdxdv4vw4kbs70h2ciz49rv8w73zbawb7z5qw45iz7";
   };
 
   propagatedBuildInputs = [ pyyaml ];
diff --git a/nixpkgs/pkgs/development/python-modules/asttokens/default.nix b/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
index 3aba3a37c9e1..8c8a1b76b1a0 100644
--- a/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchPypi, buildPythonPackage, astroid, six, coverage
+{ lib, fetchPypi, buildPythonPackage, fetchpatch, astroid, six, coverage
 , lazy-object-proxy, nose, wrapt
 }:
 
@@ -11,6 +11,14 @@ buildPythonPackage rec {
     sha256 = "1vd4djlxmgznz84gzakkv45avnrcpgl1kir92l1pxyp0z5c0dh2m";
   };
 
+  patches = [
+    # Fix tests for astroid 2.2 in python 3. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/gristlabs/asttokens/commit/21caaaa74105c410b3d84c3d8ff0dc2f612aac9a.patch";
+      sha256 = "182xfr0cx4pxx0dv1l50a1c281h8ywir8vvd1zh5iicflivim1nv";
+    })
+  ];
+
   propagatedBuildInputs = [ lazy-object-proxy six wrapt astroid ];
 
   checkInputs = [ coverage nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/asynctest/default.nix b/nixpkgs/pkgs/development/python-modules/asynctest/default.nix
index b38ce7c91ce1..a9c012ba8314 100644
--- a/nixpkgs/pkgs/development/python-modules/asynctest/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asynctest/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "asynctest";
-  version = "0.12.4";
+  version = "0.13.0";
 
-  disabled = pythonOlder "3.4";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ade427a711d18016f35fb0c5d412f0ed63fb074a6084b67ff2dad48f50b0d6ca";
+    sha256 = "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/avro/default.nix b/nixpkgs/pkgs/development/python-modules/avro/default.nix
index 045790b9bc2d..97ecb5a1127f 100644
--- a/nixpkgs/pkgs/development/python-modules/avro/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/avro/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "avro";
-  version = "1.8.2";
+  version = "1.9.0";
   disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8f9ee40830b70b5fb52a419711c9c4ad0336443a6fba7335060805f961b04b59";
+    sha256 = "0af72fcql34v30cvjqm9nmz68rl35znn5qbd4k3b9ks02xzy3b2y";
   };
 
   meta = with stdenv.lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/awkward/default.nix b/nixpkgs/pkgs/development/python-modules/awkward/default.nix
index 057f20fce526..5de1f9fa8488 100644
--- a/nixpkgs/pkgs/development/python-modules/awkward/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/awkward/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "awkward";
-  version = "0.9.0";
+  version = "0.10.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "140fdncibnlpdqr6hk8lhgkv7m2v8786rips5qp92r05agfzbhs0";
+    sha256 = "0vq27db5k8cc5jpbdrl531gjhig0f9iy0i7z6ks81lz1a2mkvjik";
   };
 
   nativeBuildInputs = [ pytestrunner ];
diff --git a/nixpkgs/pkgs/development/python-modules/aws-lambda-builders/default.nix b/nixpkgs/pkgs/development/python-modules/aws-lambda-builders/default.nix
index 16f5e19b7866..4554fe98c1b7 100644
--- a/nixpkgs/pkgs/development/python-modules/aws-lambda-builders/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aws-lambda-builders/default.nix
@@ -10,14 +10,14 @@
 
 buildPythonPackage rec {
   pname = "aws-lambda-builders";
-  version = "0.2.1";
+  version = "0.3.0";
 
   # No tests available in PyPI tarball
   src = fetchFromGitHub {
     owner = "awslabs";
     repo = "aws-lambda-builders";
     rev = "v${version}";
-    sha256 = "1pbi6572q1nqs2wd7jx9d5vgf3rqdsqlaz4v8fqvl23wfb2c4vpd";
+    sha256 = "1c3r3iz29s68mlmdsxbl65x5zqx25b89d40rir6729ck4gll4dyd";
   };
 
   # Package is not compatible with Python 3.5
diff --git a/nixpkgs/pkgs/development/python-modules/bjoern/default.nix b/nixpkgs/pkgs/development/python-modules/bjoern/default.nix
index 4a4a4a86d5ec..ddbb2f0d27e8 100644
--- a/nixpkgs/pkgs/development/python-modules/bjoern/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bjoern/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "bjoern";
-  version = "2.2.3";
+  version = "3.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1lbwqmqrl32jlfzhffxsb1fm7xbbjgbhjr21imk656agvpib2wx2";
+    sha256 = "1ajmmfzr6fm8h8s7m69f2ffx0wk6snjvdx527hhj00bzn7zybnmn";
   };
 
   buildInputs = [ libev ];
diff --git a/nixpkgs/pkgs/development/python-modules/boto3/default.nix b/nixpkgs/pkgs/development/python-modules/boto3/default.nix
index e62936a92884..203ef9a4355d 100644
--- a/nixpkgs/pkgs/development/python-modules/boto3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/boto3/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname =  "boto3";
-  version = "1.9.96"; # N.B: if you change this, change botocore too
+  version = "1.9.160"; # N.B: if you change this, change botocore too
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c103241394d396ee08548b03d5d1f0f89a7ad1dfa7ccca88a47131f329cca093";
+    sha256 = "1qxhdmv58k2ipk47fbnpdg6jmbp7dca86s6c6gdm3d79aw17391f";
   };
 
   propagatedBuildInputs = [ botocore jmespath s3transfer ] ++ lib.optionals (!isPy3k) [ futures ];
diff --git a/nixpkgs/pkgs/development/python-modules/botocore/default.nix b/nixpkgs/pkgs/development/python-modules/botocore/default.nix
index 801977a96206..e3bbdf22ddf1 100644
--- a/nixpkgs/pkgs/development/python-modules/botocore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/botocore/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "botocore";
-  version = "1.12.96"; # N.B: if you change this, change boto3 and awscli to a matching version
+  version = "1.12.160"; # N.B: if you change this, change boto3 and awscli to a matching version
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "55c1594041e6716847d5a8b38181e3cc44e245edbf4598ae2b99e3040073b2cf";
+    sha256 = "18jhc6v2xcd20hlq69ykapmxgd9k7szjbp1ndmgxi4g8w37fvcqp";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/braintree/default.nix b/nixpkgs/pkgs/development/python-modules/braintree/default.nix
index 393285636b60..2d1ca0d5f787 100644
--- a/nixpkgs/pkgs/development/python-modules/braintree/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/braintree/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "braintree";
-  version = "3.53.0";
+  version = "3.54.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "026apwkjn83la7jm0azz3qajg26nza3gh49zd37j0rsp6cgmfa24";
+    sha256 = "09dbj04r55hnm8zvfz8wbnxkxb1pfy7g43pzcgs4hhh5xh45ppfd";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/breathe/default.nix b/nixpkgs/pkgs/development/python-modules/breathe/default.nix
index 453a046c54f2..9a4a26e18b03 100644
--- a/nixpkgs/pkgs/development/python-modules/breathe/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/breathe/default.nix
@@ -1,12 +1,12 @@
 { lib, fetchPypi, buildPythonPackage, docutils, six, sphinx, isPy3k }:
 
 buildPythonPackage rec {
-  version = "4.12.0";
+  version = "4.13.0";
   pname = "breathe";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1wmxppzyvfd5gab72qi3gainibrdk4xi8nsfp5z5h49xgzi84mnq";
+    sha256 = "08xs1cqpvcv7735j19c35br34gbwzfn89rkg12n2yfz4af0x3xfp";
   };
 
   propagatedBuildInputs = [ docutils six sphinx ];
diff --git a/nixpkgs/pkgs/development/python-modules/bugwarrior/default.nix b/nixpkgs/pkgs/development/python-modules/bugwarrior/default.nix
index b2b10671f2b9..74df8a6b628f 100644
--- a/nixpkgs/pkgs/development/python-modules/bugwarrior/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bugwarrior/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "bugwarrior";
-  version = "1.6.0";
+  version = "1.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cfa4fac19b4f4638928347b8fe192315f72813c3e8ed668867e5891338c7e4ec";
+    sha256 = "1pmznka5dxcdjfak0p1yh7lhfbfazmx8g9ysv57lsrkqy4n61qks";
   };
 
   buildInputs = [ mock unittest2 nose /* jira megaplan */ ];
diff --git a/nixpkgs/pkgs/development/python-modules/cachelib/default.nix b/nixpkgs/pkgs/development/python-modules/cachelib/default.nix
new file mode 100644
index 000000000000..703f3797d1bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/cachelib/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "cachelib";
+  version = "0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "13dfv0a4ahgx0wmpqv8jqhshim4229p9c1c7gcsra81pkm89p24b";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/pallets/cachelib";
+    description = "Collection of cache libraries in the same API interface";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/certifi/default.nix b/nixpkgs/pkgs/development/python-modules/certifi/default.nix
index 8ccfd2e9efb7..07dc701f3b1b 100644
--- a/nixpkgs/pkgs/development/python-modules/certifi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/certifi/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "certifi";
-  version = "2018.11.29";
+  version = "2019.3.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1dvccavd2fzq4j37w0sznylp92ps14zi6gvlxzm23in0yhzciya7";
+    sha256 = "1bnpw7hrf9i1l9gfxjnzi45hkrvzz0pyn9ia8m4mw7sxhgb08qdj";
   };
 
   meta = {
diff --git a/nixpkgs/pkgs/development/python-modules/cgen/default.nix b/nixpkgs/pkgs/development/python-modules/cgen/default.nix
new file mode 100644
index 000000000000..e0317249fe9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/cgen/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytools
+, numpy
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "cgen";
+  version = "2017.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a04525d51ee975d37d590d6d82bf80a46e77f75187cccfd2248a89616a778795";
+  };
+
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [
+    pytools
+    numpy
+  ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "C/C++ source generation from an AST";
+    homepage = https://github.com/inducer/cgen;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/cld2-cffi/default.nix b/nixpkgs/pkgs/development/python-modules/cld2-cffi/default.nix
index c54b962a8f6c..a38d4c0866e0 100644
--- a/nixpkgs/pkgs/development/python-modules/cld2-cffi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cld2-cffi/default.nix
@@ -13,7 +13,7 @@ buildPythonPackage rec {
   checkInputs = [ nose ];
 
   # gcc doesn't approve of this code, so disable -Werror
-  NIX_CFLAGS_COMPILE = "-w";
+  NIX_CFLAGS_COMPILE = [ "-w" ] ++ stdenv.lib.optional stdenv.cc.isClang "-Wno-error=c++11-narrowing";
 
   checkPhase = "nosetests -v";
 
diff --git a/nixpkgs/pkgs/development/python-modules/cntk/default.nix b/nixpkgs/pkgs/development/python-modules/cntk/default.nix
index cfc16063cf73..564116bc6755 100644
--- a/nixpkgs/pkgs/development/python-modules/cntk/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cntk/default.nix
@@ -1,32 +1,49 @@
 { stdenv
+, lib
 , buildPythonPackage
 , pkgs
 , numpy
 , scipy
+, openmpi
 , enum34
 , protobuf
 , pip
 , python
+, swig
 }:
 
+let
+  cntk = pkgs.cntk;
+in
 buildPythonPackage rec {
-  inherit (pkgs.cntk) name version src;
+  inherit (cntk) name version src;
 
-  nativeBuildInputs = [ pkgs.swig pkgs.openmpi ];
-  buildInputs = [ pkgs.cntk pkgs.openmpi ];
+  nativeBuildInputs = [ swig openmpi ];
+  buildInputs = [ cntk openmpi ];
   propagatedBuildInputs = [ numpy scipy enum34 protobuf pip ];
 
-  CNTK_LIB_PATH = "${pkgs.cntk}/lib";
-  CNTK_COMPONENT_VERSION = pkgs.cntk.version;
+  CNTK_LIB_PATH = "${cntk}/lib";
+  CNTK_COMPONENT_VERSION = cntk.version;
+  CNTK_VERSION = cntk.version;
+  CNTK_VERSION_BANNER = cntk.version;
 
   postPatch = ''
     cd bindings/python
-    sed -i 's,"libmpi.so.12","${pkgs.openmpi}/lib/libmpi.so",g' cntk/train/distributed.py
+    sed -i 's,"libmpi.so.12","${openmpi}/lib/libmpi.so",g' cntk/train/distributed.py
+
+    # Remove distro and libs checks; they aren't compatible with NixOS and besides we guarantee
+    # compatibility by providing a package.
+    cat <<EOF > cntk/cntk_py_init.py
+    def cntk_check_distro_info():
+      pass
+    def cntk_check_libs():
+      pass
+    EOF
   '';
 
   postInstall = ''
     rm -rf $out/${python.sitePackages}/cntk/libs
-    ln -s ${pkgs.cntk}/lib $out/${python.sitePackages}/cntk/libs
+    ln -s ${cntk}/lib $out/${python.sitePackages}/cntk/libs
     # It's not installed for some reason.
     cp cntk/cntk_py.py $out/${python.sitePackages}/cntk
   '';
@@ -38,10 +55,8 @@ buildPythonPackage rec {
   '';
 
   meta = {
-    inherit (pkgs.cntk.meta) homepage description license maintainers;
-    # broken in CNTK 2.4 starting with python-3.7
-    # ("ImportError: cannot import name 'GenericMeta' from 'typing'")
-    broken = stdenv.lib.versionAtLeast python.version "3.7";
-
+    inherit (cntk.meta) homepage description license maintainers platforms;
+    # doesn't support Python 3.7
+    broken = lib.versionAtLeast python.version "3.7";
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/cupy/default.nix b/nixpkgs/pkgs/development/python-modules/cupy/default.nix
index d23d5bef0e49..2b38f4a9e36e 100644
--- a/nixpkgs/pkgs/development/python-modules/cupy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cupy/default.nix
@@ -1,16 +1,16 @@
 { stdenv, buildPythonPackage
-, fetchPypi, isPy3k, linuxPackages, gcc5
+, fetchPypi, isPy3k, linuxPackages
 , fastrlock, numpy, six, wheel, pytest, mock
 , cudatoolkit, cudnn, nccl
 }:
 
 buildPythonPackage rec {
   pname = "cupy";
-  version = "5.2.0";
+  version = "5.4.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "664acff0e1094f0135acca8899318d300258b704e049b1ef0c59154912da53b2";
+    sha256 = "1qms1kmzr543hz30jmcmx20cf9xbgzl97a9k44xizsk785dwakbn";
   };
 
   checkInputs = [
@@ -18,10 +18,6 @@ buildPythonPackage rec {
     mock
   ];
 
-  nativeBuildInputs = [
-    gcc5
-  ];
-
   propagatedBuildInputs = [
     cudatoolkit
     cudnn
diff --git a/nixpkgs/pkgs/development/python-modules/curio/default.nix b/nixpkgs/pkgs/development/python-modules/curio/default.nix
new file mode 100644
index 000000000000..b60025a91b03
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/curio/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, pytest
+, sphinx
+}:
+
+buildPythonPackage rec {
+  pname = "curio";
+  version = "0.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "51d1a7b49b4f8dd1486ac785c72d522962e93ccfdcfc1f818f5c7553a307b5ef";
+  };
+
+  disabled = !isPy3k;
+
+  checkInputs = [ pytest sphinx ];
+
+  # test_aside_basic times out,
+  # test_aside_cancel fails because modifies PYTHONPATH and cant find pytest
+  checkPhase = ''
+    # __pycache__ was packaged accidentally, https://github.com/dabeaz/curio/issues/301
+    rm -r tests/__pycache__
+    pytest --deselect tests/test_task.py::test_aside_basic --deselect tests/test_task.py::test_aside_cancel
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/dabeaz/curio";
+    description = "Library for performing concurrent I/O with coroutines in Python 3";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/datasette/default.nix b/nixpkgs/pkgs/development/python-modules/datasette/default.nix
index f8c66c429fe7..48de7e86b92e 100644
--- a/nixpkgs/pkgs/development/python-modules/datasette/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/datasette/default.nix
@@ -11,19 +11,20 @@
 , pytest
 , pytestrunner
 , pytest-asyncio
+, black
 , aiohttp
 , beautifulsoup4
 }:
 
 buildPythonPackage rec {
   pname = "datasette";
-  version = "0.27";
+  version = "0.28";
 
   src = fetchFromGitHub {
     owner = "simonw";
     repo = "datasette";
     rev = version;
-    sha256 = "02k1kk6bw034rs74w0viwzapxz684lqgjvw5q5j5xgr0i4kynylp";
+    sha256 = "1m2s03gyq0ghjc3s0b5snpinisddywpgii2f0zqa3v4ljmzanx7h";
   };
 
   buildInputs = [ pytestrunner ];
@@ -43,24 +44,23 @@ buildPythonPackage rec {
     pytest-asyncio
     aiohttp
     beautifulsoup4
+    black
   ];
 
   postConfigure = ''
     substituteInPlace setup.py \
-      --replace "click==6.7" "click" \
       --replace "click-default-group==1.2" "click-default-group" \
       --replace "Sanic==0.7.0" "Sanic" \
       --replace "hupper==1.0" "hupper" \
       --replace "pint==0.8.1" "pint" \
-      --replace "Jinja2==2.10" "Jinja2"
+      --replace "Jinja2==2.10.1" "Jinja2"
   '';
 
   # many tests require network access
   checkPhase = ''
     pytest --ignore tests/test_api.py \
            --ignore tests/test_csv.py \
-           --ignore tests/test_html.py \
-           --ignore tests/test_publish_heroku.py
+           --ignore tests/test_html.py
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/datatable/default.nix b/nixpkgs/pkgs/development/python-modules/datatable/default.nix
new file mode 100644
index 000000000000..3ea926ac23be
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/datatable/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, llvm
+, typesentry
+, blessed
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "datatable";
+  version = "0.8.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1s8z81zffrckvdwrrl0pkjc7gsdvjxw59xgg6ck81dl7gkh5grjk";
+  };
+
+  disabled = pythonOlder "3.5";
+
+  propagatedBuildInputs = [ typesentry blessed ];
+  buildInputs = [ llvm ];
+  checkInputs = [ pytest ];
+
+  LLVM = llvm;
+
+  checkPhase = ''
+    # py.test adds local datatable to path, which doesn't contain built native library.
+    mv datatable datatable.hidden
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "data.table for Python";
+    homepage = "https://github.com/h2oai/datatable";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/deluge-client/default.nix b/nixpkgs/pkgs/development/python-modules/deluge-client/default.nix
index 477468a0eb39..6f82adc94ca1 100644
--- a/nixpkgs/pkgs/development/python-modules/deluge-client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/deluge-client/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "deluge-client";
-  version = "1.7.0";
+  version = "1.7.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7c2bb6baa3183f039125fc490f47f8c6699312c3e69fcada89e9e70f63c6e092";
+    sha256 = "1ragmpihjr9p6n27hw7gy83qyc68csqpn18m9kvwsby1vi7mgdy8";
   };
 
   # it will try to connect to a running instance
diff --git a/nixpkgs/pkgs/development/python-modules/distlib/default.nix b/nixpkgs/pkgs/development/python-modules/distlib/default.nix
index bdc31856f338..73bc143beeb6 100644
--- a/nixpkgs/pkgs/development/python-modules/distlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/distlib/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "distlib";
-  version = "0.2.8";
+  version = "0.2.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "068zqb3w7nyqiv2hpy0zcpz2xd6xwhq5chigqrp9h9zav7bpr5sp";
+    sha256 = "1z9c4ig19hjk18agwljv5ib3pphicg50w9z5zsnqn97q7vnv17gm";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/distributed/default.nix b/nixpkgs/pkgs/development/python-modules/distributed/default.nix
index ae309b49ccc5..2fd6829bc464 100644
--- a/nixpkgs/pkgs/development/python-modules/distributed/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/distributed/default.nix
@@ -28,12 +28,12 @@
 
 buildPythonPackage rec {
   pname = "distributed";
-  version = "1.27.1";
+  version = "1.28.1";
 
   # get full repository need conftest.py to run tests
   src = fetchPypi {
     inherit pname version;
-    sha256 = "117q16ha03m8y9ydxg5svwx2cv1r2703hcy4a0zgjh5nhx4rfhiy";
+    sha256 = "12n487qn66jkgq4nd3vgyc9hfqw4i7zwr4dyybsqm4xmgs5kzn1v";
   };
 
   checkInputs = [ pytest pytest-repeat pytest-faulthandler pytest-timeout mock joblib ];
diff --git a/nixpkgs/pkgs/development/python-modules/django-cors-headers/default.nix b/nixpkgs/pkgs/development/python-modules/django-cors-headers/default.nix
index bc635461f528..24146306af71 100644
--- a/nixpkgs/pkgs/development/python-modules/django-cors-headers/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-cors-headers/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "django-cors-headers";
-  version = "2.5.3";
+  version = "3.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ljyfbpg34n7b8k31xc4q9c922p836km9wxh0algdxxfkam7z667";
+    sha256 = "0b11nkcviwv5dqnlmv63bgzciczb51wairm8b6wr6sda4p7y5wzb";
   };
 
   propagatedBuildInputs = [ django ];
diff --git a/nixpkgs/pkgs/development/python-modules/django/2_2.nix b/nixpkgs/pkgs/development/python-modules/django/2_2.nix
new file mode 100644
index 000000000000..8f3065633a1d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/django/2_2.nix
@@ -0,0 +1,38 @@
+{ stdenv, buildPythonPackage, fetchPypi, substituteAll,
+  isPy3k,
+  geos, gdal, pytz, sqlparse,
+  withGdal ? false
+}:
+
+buildPythonPackage rec {
+  pname = "Django";
+  version = "2.2.1";
+
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1spa701phl8ha7qmfr89hwpa43kf52zbrs3xyc0rlvxianykrk3g";
+  };
+
+  patches = stdenv.lib.optional withGdal
+    (substituteAll {
+      src = ./1.10-gis-libs.template.patch;
+      geos = geos;
+      gdal = gdal;
+      extension = stdenv.hostPlatform.extensions.sharedLibrary;
+    })
+  ;
+
+  propagatedBuildInputs = [ pytz sqlparse ];
+
+  # too complicated to setup
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A high-level Python Web framework";
+    homepage = https://www.djangoproject.com/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ georgewhewell lsix ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/django_classytags/default.nix b/nixpkgs/pkgs/development/python-modules/django_classytags/default.nix
index d3ed0fd18410..62efa6678002 100644
--- a/nixpkgs/pkgs/development/python-modules/django_classytags/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django_classytags/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "django-classy-tags";
-  version = "0.8.0";
+  version = "0.9.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f2dc9rq8v9sc4kv4x9hmbzp5c4amdxjkz5nzas5abg2s1hr2bvr";
+    sha256 = "0axzsigvmb17ha5mnr3xf6c851kwinjpkxksxwprwjakh1m59d1q";
   };
 
   propagatedBuildInputs = [ django ];
diff --git a/nixpkgs/pkgs/development/python-modules/django_silk/default.nix b/nixpkgs/pkgs/development/python-modules/django_silk/default.nix
index e8c44efdc409..6bb2b1d43f15 100644
--- a/nixpkgs/pkgs/development/python-modules/django_silk/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django_silk/default.nix
@@ -1,6 +1,7 @@
 { stdenv
 , buildPythonPackage
-, fetchPypi
+, python
+, fetchFromGitHub
 , django
 , pygments
 , simplejson
@@ -12,26 +13,50 @@
 , pytz
 , pillow
 , mock
+, gprof2dot
+, freezegun
+, contextlib2
+, networkx
+, pydot
+, factory_boy
 }:
 
 buildPythonPackage rec {
   pname = "django-silk";
   version = "3.0.2";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "8dd5b78531360bd8c3d571384f9f4f82ef03e1764e30dd4621c5638f5c973a1d";
+  # pypi tarball doesn't include test project
+  src = fetchFromGitHub {
+    owner = "jazzband";
+    repo = "django-silk";
+    rev = version;
+    sha256 = "1fbaafc2gx01gscdalp6hj6bz4b0cmq59lgmvsydw7jkds4mps7c";
   };
-
-  doCheck = false;
+  # "test_time_taken" tests aren't suitable for reproducible execution, but django's
+  # test runner doesn't have an easy way to ignore tests - so instead prevent it from picking
+  # them up as tests
+  postPatch = ''
+    substituteInPlace project/tests/test_silky_profiler.py \
+      --replace "def test_time_taken" "def _test_time_taken"
+  '';
 
   buildInputs = [ mock ];
-  propagatedBuildInputs = [ django pygments simplejson dateutil requests sqlparse jinja2 autopep8 pytz pillow ];
+  propagatedBuildInputs = [
+    django pygments simplejson dateutil requests
+    sqlparse jinja2 autopep8 pytz pillow gprof2dot
+  ];
+
+  checkInputs = [ freezegun contextlib2 networkx pydot factory_boy ];
+  checkPhase = ''
+    cd project
+    DB=sqlite3 DB_NAME=db.sqlite3 ${python.interpreter} manage.py test
+  '';
 
   meta = with stdenv.lib; {
     description = "Silky smooth profiling for the Django Framework";
     homepage = https://github.com/mtford90/silk;
     license = licenses.mit;
+    maintainers = with maintainers; [ ris ];
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/dynd/default.nix b/nixpkgs/pkgs/development/python-modules/dynd/default.nix
index 8d8fbf7a7cef..337763afbd46 100644
--- a/nixpkgs/pkgs/development/python-modules/dynd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dynd/default.nix
@@ -30,7 +30,8 @@ buildPythonPackage rec {
   # Python 3 works but has a broken import test that I couldn't
   # figure out.
   doCheck = !isPy3k;
-  buildInputs = [ pkgs.cmake pkgs.libdynd.dev cython ];
+  nativeBuildInputs = [ pkgs.cmake ];
+  buildInputs = [ pkgs.libdynd.dev cython ];
   propagatedBuildInputs = [ numpy pkgs.libdynd ];
 
   meta = with stdenv.lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/elasticsearch-curator/default.nix b/nixpkgs/pkgs/development/python-modules/elasticsearch-curator/default.nix
index b65e524346f0..d517af949d47 100644
--- a/nixpkgs/pkgs/development/python-modules/elasticsearch-curator/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/elasticsearch-curator/default.nix
@@ -17,11 +17,11 @@
 
 buildPythonPackage rec {
   pname   = "elasticsearch-curator";
-  version = "5.6.0";
+  version = "5.7.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0r4p229233ivprxnvp33hilkgczijmyvi33wivxhhj6q3kkywpyq";
+    sha256 = "0a6q7jcqwcqf8cv76lzldf90hnj2x8gha754x515dq10zsi9sjms";
   };
 
   # The test hangs so we disable it.
diff --git a/nixpkgs/pkgs/development/python-modules/elasticsearch-dsl/default.nix b/nixpkgs/pkgs/development/python-modules/elasticsearch-dsl/default.nix
index 805bacbd716a..1ca8c9b55ff2 100644
--- a/nixpkgs/pkgs/development/python-modules/elasticsearch-dsl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/elasticsearch-dsl/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "elasticsearch-dsl";
-  version = "6.3.1";
+  version = "7.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1gh8a0shqi105k325hgwb9avrpdjh0mc6mxwfg9ba7g6lssb702z";
+    sha256 = "08kgpcf6lp8gjan6dvdx35340i4yqa77klapk8j7165svfjc5v9a";
   };
 
   propagatedBuildInputs = [ elasticsearch python-dateutil six ]
diff --git a/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix b/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
index 6c5ab07db191..a909d2589427 100644
--- a/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage (rec {
   pname = "elasticsearch";
-  version = "6.3.1";
+  version = "7.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "aada5cfdc4a543c47098eb3aca6663848ef5d04b4324935ced441debc11ec98b";
+    sha256 = "0ax00k6xi7g419azjdn8g19zad304xmxw62pcfp3njawqnlnwp24";
   };
 
   # Check is disabled because running them destroy the content of the local cluster!
diff --git a/nixpkgs/pkgs/development/python-modules/eve/default.nix b/nixpkgs/pkgs/development/python-modules/eve/default.nix
index 4d85add4e3e5..e23821a48e46 100644
--- a/nixpkgs/pkgs/development/python-modules/eve/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/eve/default.nix
@@ -1,13 +1,13 @@
 { stdenv, buildPythonPackage, fetchPypi, flask, events
-, pymongo, simplejson, cerberus }:
+, pymongo, simplejson, cerberus, werkzeug }:
 
 buildPythonPackage rec {
   pname = "Eve";
-  version = "0.8.1";
+  version = "0.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "88105080e8a2567a1a8d50a5cded0d7d95e95f704b310c8107ef2ff7696f5316";
+    sha256 = "18shfaxa1vqshnyiqx3jqsri2wxz9ibip3mdxaz8pljmk734r4b1";
   };
 
   propagatedBuildInputs = [
@@ -16,14 +16,16 @@ buildPythonPackage rec {
     flask
     pymongo
     simplejson
+    werkzeug
   ];
 
   # tests call a running mongodb instance
   doCheck = false;
 
   meta = with stdenv.lib; {
-    homepage = "http://python-eve.org/";
+    homepage = "https://python-eve.org/";
     description = "Open source Python REST API framework designed for human beings";
     license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/factory_boy/default.nix b/nixpkgs/pkgs/development/python-modules/factory_boy/default.nix
index 0bb1e00778a6..0c87f309489e 100644
--- a/nixpkgs/pkgs/development/python-modules/factory_boy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/factory_boy/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "factory_boy";
-  version = "2.11.1";
+  version = "2.12.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6f25cc4761ac109efd503f096e2ad99421b1159f01a29dbb917359dcd68e08ca";
+    sha256 = "0w53hjgag6ad5i2vmrys8ysk54agsqvgbjy9lg8g0d8pi9h8vx7s";
   };
 
   propagatedBuildInputs = [ faker ];
diff --git a/nixpkgs/pkgs/development/python-modules/faker/default.nix b/nixpkgs/pkgs/development/python-modules/faker/default.nix
index b79999bba41f..2204c25e6bce 100644
--- a/nixpkgs/pkgs/development/python-modules/faker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/faker/default.nix
@@ -16,23 +16,23 @@ assert pythonOlder "3.3" -> ipaddress != null;
 
 buildPythonPackage rec {
   pname = "Faker";
-  version = "1.0.5";
+  version = "1.0.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3f2f4570df28df2eb8f39b00520eb610081d6552975e926c6a2cbc64fd89c4c1";
+    sha256 = "1jins8jlqyxjwx6i2h2jknwwfpi0bpz1qggvw6xnbxl0g9spyiv0";
   };
 
   buildInputs = [ pytestrunner ];
   checkInputs = [
     email_validator
     freezegun
-    mock
-    more-itertools
     pytest
     random2
     ukpostcodeparser
-  ];
+  ]
+  ++ lib.optionals (pythonOlder "3.3") [ mock ]
+  ++ lib.optionals (pythonOlder "3.0") [ more-itertools ];
 
   propagatedBuildInputs = [
     dateutil
diff --git a/nixpkgs/pkgs/development/python-modules/fasteners/default.nix b/nixpkgs/pkgs/development/python-modules/fasteners/default.nix
index 77a6f9b04088..50a6dbf40df6 100644
--- a/nixpkgs/pkgs/development/python-modules/fasteners/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fasteners/default.nix
@@ -4,30 +4,30 @@
 , six
 , monotonic
 , testtools
-, python
 , isPy3k
+, nose
+, futures
 }:
 
 buildPythonPackage rec {
   pname = "fasteners";
-  version = "0.14.1";
+  version = "0.15";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22";
+    sha256 = "3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef";
   };
 
-  propagatedBuildInputs = [ six monotonic testtools ];
+  propagatedBuildInputs = [ six monotonic ];
+
+  checkInputs = [ testtools nose ] ++ stdenv.lib.optionals (!isPy3k) [ futures ];
 
   checkPhase = ''
-    ${python.interpreter} -m unittest discover
+    nosetests
   '';
 
-  # Tests are written for Python 3.x only (concurrent.futures)
-  doCheck = isPy3k;
-
   meta = with stdenv.lib; {
-    description = "Fasteners";
+    description = "A python package that provides useful locks";
     homepage = https://github.com/harlowja/fasteners;
     license = licenses.asl20;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/fire/default.nix b/nixpkgs/pkgs/development/python-modules/fire/default.nix
index 70538407f2ee..c44083e4c29a 100644
--- a/nixpkgs/pkgs/development/python-modules/fire/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fire/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub, six, hypothesis, mock
+{ stdenv, buildPythonPackage, fetchFromGitHub, fetchpatch, six, hypothesis, mock
 , python-Levenshtein, pytest }:
 
 buildPythonPackage rec {
@@ -20,6 +20,13 @@ buildPythonPackage rec {
     py.test
   '';
 
+  patches = [
+    # Add Python 3.7 support. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/google/python-fire/commit/668007ae41391f5964870b4597e41493a936a11e.patch";
+      sha256 = "0rf7yzv9qx66zfmdggfz478z37fi4rwx4hlh3dk1065sx5rfksi0";
+    })
+  ];
 
   meta = with stdenv.lib; {
     description = "A library for automatically generating command line interfaces";
diff --git a/nixpkgs/pkgs/development/python-modules/flask-marshmallow/default.nix b/nixpkgs/pkgs/development/python-modules/flask-marshmallow/default.nix
index 92e4542bfef7..b03f3307d085 100644
--- a/nixpkgs/pkgs/development/python-modules/flask-marshmallow/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flask-marshmallow/default.nix
@@ -4,7 +4,7 @@
 
 buildPythonPackage rec {
   pname = "flask-marshmallow";
-  version = "0.10.0";
+  version = "0.10.1";
 
   meta = {
     homepage = "https://github.com/marshmallow-code/flask-marshmallow";
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1xvk289628l3pp56gidwhmd54cgdczpsxhxfw0bfcsd120k1svfv";
+    sha256 = "0hbp0lrdlzpcdjv1jn2hk98z9gg624nswcm0hi48k4rk28x9xsb9";
   };
 
   propagatedBuildInputs = [ flask marshmallow ];
diff --git a/nixpkgs/pkgs/development/python-modules/flask-swagger/default.nix b/nixpkgs/pkgs/development/python-modules/flask-swagger/default.nix
new file mode 100644
index 000000000000..c690e4e64ae5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/flask-swagger/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildPythonPackage, fetchPypi
+, flask, pyyaml }:
+
+buildPythonPackage rec {
+  version = "0.2.14";
+  pname = "flask-swagger";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "b4085f5bc36df4c20b6548cd1413adc9cf35719b0f0695367cd542065145294d";
+  };
+
+  # No Tests
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    flask
+    pyyaml
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/gangverk/flask-swagger";
+    license = licenses.mit;
+    description = "Extract swagger specs from your flask project";
+    maintainers = with maintainers; [ vanschelven ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/folium/default.nix b/nixpkgs/pkgs/development/python-modules/folium/default.nix
index 4664e095d26c..c8eca2ac60cb 100644
--- a/nixpkgs/pkgs/development/python-modules/folium/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/folium/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, pythonOlder
 , pytest
 , numpy
 , nbconvert
@@ -8,21 +9,22 @@
 , mock
 , jinja2
 , branca
-, six
 , requests
 }:
 
 buildPythonPackage rec {
   pname = "folium";
-  version = "0.8.3";
+  version = "0.9.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b7a1e907caac6ddaf0614555f58ba9af2ed65356ccc77f6ba6fc3df202d8f146";
+    sha256 = "66901483808839ed895a685ca7bc4731379f4a627d73a83b77f0df1847b14892";
   };
 
+  disabled = pythonOlder "3.5";
+
   checkInputs = [ pytest nbconvert pandas mock ];
-  propagatedBuildInputs = [ jinja2 branca six requests numpy ];
+  propagatedBuildInputs = [ jinja2 branca requests numpy ];
 
   # No tests in archive
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/fonttools/default.nix b/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
index 7efe996ddf8d..4e83955db55c 100644
--- a/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "fonttools";
-  version = "3.41.0";
+  version = "3.42.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f3q9sadwy6krsjicrgjsl1w2dfd97j4l645lnl1f5y3y1jkj4fh";
+    sha256 = "0w0ncs61821bnc2smfllnhfw5b8fwz972yqcgb64lr5qiwxkj2y0";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/gcovr/default.nix b/nixpkgs/pkgs/development/python-modules/gcovr/default.nix
index 4788112ebef9..e6f45a2b4c69 100644
--- a/nixpkgs/pkgs/development/python-modules/gcovr/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gcovr/default.nix
@@ -1,6 +1,7 @@
 { stdenv
 , buildPythonPackage
 , fetchPypi
+, jinja2
 }:
 
 buildPythonPackage rec {
@@ -12,10 +13,19 @@ buildPythonPackage rec {
     sha256 = "ca94c337f2d9a70db177ec4330534fad7b2b772beda625c1ec071fbcf1361e22";
   };
 
+  propagatedBuildInputs = [
+    jinja2
+  ];
+
+  # There are no unit tests in the pypi tarball. Most of the unit tests on the
+  # github repository currently only work with gcc5, so we just disable them.
+  # See also: https://github.com/gcovr/gcovr/issues/206
+  doCheck = false;
+
   meta = with stdenv.lib; {
     description = "A Python script for summarizing gcov data";
     license = licenses.bsd0;
-    homepage = http://gcovr.com/;
+    homepage = https://www.gcovr.com/;
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/genpy/default.nix b/nixpkgs/pkgs/development/python-modules/genpy/default.nix
new file mode 100644
index 000000000000..0a8344f8b924
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/genpy/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytools
+, numpy
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "genpy";
+  version = "2016.1.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1c11726f1e8ace8bbdfc87816403c9a59f53a8c3d45c99187ae17c9725d87a91";
+  };
+
+  propagatedBuildInputs = [
+    pytools
+    numpy
+  ];
+
+  meta = with lib; {
+    description = "C/C++ source generation from an AST";
+    homepage = https://github.com/inducer/genpy;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix b/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
index 291d038258fb..d59bc5a70b89 100644
--- a/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "google-api-python-client";
-  version = "1.7.8";
+  version = "1.7.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0n18frf0ghmwf5lxmkyski4b5h1rsx93ibq3iw0k3s2wxl371406";
+    sha256 = "1v551xaavqff085gplinnnrz2sk6sikmm7j47gi0wf34hpba1384";
   };
 
   # No tests included in archive
diff --git a/nixpkgs/pkgs/development/python-modules/gprof2dot/default.nix b/nixpkgs/pkgs/development/python-modules/gprof2dot/default.nix
index ed48842496c0..48abf5058dfe 100644
--- a/nixpkgs/pkgs/development/python-modules/gprof2dot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gprof2dot/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchFromGitHub, buildPythonApplication }:
+{ lib, fetchFromGitHub, buildPythonApplication, python, graphviz }:
 
 buildPythonApplication {
   name = "gprof2dot-2017-09-19";
@@ -10,11 +10,13 @@ buildPythonApplication {
     sha256 = "1b5wvjv5ykbhz7aix7l3y7mg1hxi0vgak4a49gr92sdlz8blj51v";
   };
 
+  checkInputs = [ graphviz ];
+  checkPhase = "${python.interpreter} tests/test.py";
+
   meta = with lib; {
     homepage = https://github.com/jrfonseca/gprof2dot;
     description = "Python script to convert the output from many profilers into a dot graph";
     license = licenses.lgpl3Plus;
-    platforms = platforms.linux;
     maintainers = [ maintainers.pmiddend ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/gsd/default.nix b/nixpkgs/pkgs/development/python-modules/gsd/default.nix
index 38826a9b3f29..567cc6f8930d 100644
--- a/nixpkgs/pkgs/development/python-modules/gsd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gsd/default.nix
@@ -5,12 +5,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.6.2";
+  version = "1.7.0";
   pname = "gsd";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "58a6669f2375936810d74c3ee7e62c5616acf9e15aa32603701e55ab6fada5f5";
+    sha256 = "0fpk69wachyydpk9cbs901m7hkwrrvq24ykxsrz62km9ql8lr2vp";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/h11/default.nix b/nixpkgs/pkgs/development/python-modules/h11/default.nix
index ecfb37eeda5a..42ebf1b81da7 100644
--- a/nixpkgs/pkgs/development/python-modules/h11/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/h11/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "h11";
-  version = "0.8.1";
+  version = "0.9.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208";
+    sha256 = "1qfad70h59hya21vrzz8dqyyaiqhac0anl2dx3s3k80gpskvrm1k";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/hetzner/default.nix b/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
index ccf4e1a5ba7f..2909d2c2a6c5 100644
--- a/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "hetzner";
-  version = "0.8.1";
+  version = "0.8.2";
 
   src = fetchFromGitHub {
     repo = "hetzner";
     owner = "aszlig";
     rev = "v${version}";
-    sha256 = "1xd1klvjskv0pg8ginih597jkk491a55b8dq80dsm61m5sbsx3vq";
+    sha256 = "152fklxff08s71v0b78yp5ajwpqyszm3sd7j0qsrwa2x9ik4968h";
   };
 
   meta = with stdenv.lib; {
@@ -20,5 +20,4 @@ buildPythonPackage rec {
     license = licenses.bsd3;
     maintainers = with maintainers; [ aszlig ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/hmmlearn/default.nix b/nixpkgs/pkgs/development/python-modules/hmmlearn/default.nix
index db8ff5726ab9..9938d4053879 100644
--- a/nixpkgs/pkgs/development/python-modules/hmmlearn/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hmmlearn/default.nix
@@ -1,18 +1,22 @@
-{ lib, fetchurl, buildPythonPackage, numpy, scikitlearn }:
+{ lib, fetchurl, buildPythonPackage, numpy, scikitlearn, setuptools_scm, cython, pytest }:
 
 buildPythonPackage rec {
   pname = "hmmlearn";
-  version = "0.2.1";
+  version = "0.2.2";
   name = pname + "-" + version;
 
   src = fetchurl {
     url = "mirror://pypi/h/hmmlearn/${name}.tar.gz";
-    sha256 = "d43f5b25f9019ef5d01914d0972a5fa0594e82ab75d2c6aec26d682e47bd553c";
+    sha256 = "081c53xs5wn5vikwslallwdv0am09w9cbbggl5dbkqpnic9zx4h4";
   };
 
+  buildInputs = [ setuptools_scm cython ];
   propagatedBuildInputs = [ numpy scikitlearn ];
+  checkInputs = [ pytest ];
 
-  doCheck = false;
+  checkPhase = ''
+    pytest --doctest-modules --pyargs hmmlearn
+  '';
 
   meta = with lib; {
     description = "Hidden Markov Models in Python with scikit-learn like API";
diff --git a/nixpkgs/pkgs/development/python-modules/html5-parser/default.nix b/nixpkgs/pkgs/development/python-modules/html5-parser/default.nix
index 63c7188f03ac..2c24d7b9d6a6 100644
--- a/nixpkgs/pkgs/development/python-modules/html5-parser/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/html5-parser/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "html5-parser";
-  version = "0.4.5";
+  version = "0.4.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "01mx33sx4dhl4kj6wc48nj6jz7ry60rkhjv0s6k8h5xmjf5yy0x9";
+    sha256 = "0pxcwk5lc8ljil77xqywr0bq1xxj11z92lpfj185ac72d2b1sma5";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/nixpkgs/pkgs/development/python-modules/intelhex/default.nix b/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
index 82b5880f4658..6ed21597aff0 100644
--- a/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
@@ -1,22 +1,24 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 , fetchurl
 }:
 
 buildPythonPackage rec {
   pname = "intelhex";
-  version = "2.1";
+  version = "2.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0k5l1mn3gv1vb0jd24ygxksx8xqr57y1ivgyj37jsrwpzrp167kw";
+    sha256 = "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780";
   };
 
   patches = [
-    (fetchurl {
-      url = https://github.com/bialix/intelhex/commit/f251aef214daa2116e15ff7f7dcec1639eb12d5b.patch;
-      sha256 = "02i15qjmcz7mwbwvyj3agl5y7098rag2iwypdilkaadhbslsl9b9";
+    # patch the tests to check for the correct version string (2.2.1)
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/bialix/intelhex/pull/26.patch";
+      sha256 = "1f3f2cyf9ipb9zdifmjs8rqhg028dhy91vabxxn3l7br657s8r2l";
     })
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/ipyparallel/default.nix b/nixpkgs/pkgs/development/python-modules/ipyparallel/default.nix
index 7ce312287054..3fa1acb875ab 100644
--- a/nixpkgs/pkgs/development/python-modules/ipyparallel/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ipyparallel/default.nix
@@ -16,11 +16,11 @@
 
 buildPythonPackage rec {
   pname = "ipyparallel";
-  version = "6.2.3";
+  version = "6.2.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1k9701r120gv0an0wxvcjrbmhns8lq3zj6px5y2izly56j2dafqy";
+    sha256 = "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn";
   };
 
   buildInputs = [ nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/isbnlib/default.nix b/nixpkgs/pkgs/development/python-modules/isbnlib/default.nix
index 10d57d7264b6..319bf7f24a2f 100644
--- a/nixpkgs/pkgs/development/python-modules/isbnlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/isbnlib/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "isbnlib";
-  version = "3.9.6";
+  version = "3.9.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d4ae098cb31d6c678a6eac074a24f8ba4adfe7df65db13b0b2ab7355f28d6e3b";
+    sha256 = "ca27dc15763759d038a22f4e05d849acc121ffcb8ffe008768f09a0d844f7172";
   };
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/islpy/default.nix b/nixpkgs/pkgs/development/python-modules/islpy/default.nix
new file mode 100644
index 000000000000..6274da95b32f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/islpy/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isl
+, pytest
+, cffi
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "islpy";
+  version = "2018.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "be422a53b576210a0bb9775866abb6580b1e568222fc3e4e39d9e82f6d1d7253";
+  };
+
+  postConfigure = ''
+    substituteInPlace setup.py \
+      --replace "\"pytest>=2\"," ""
+  '';
+
+  buildInputs = [ isl ];
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [
+    cffi
+    six
+  ];
+
+  checkPhase = ''
+    pytest test
+  '';
+
+  meta = with lib; {
+    description = "Python wrapper around isl, an integer set library";
+    homepage = https://github.com/inducer/islpy;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/jupytext/default.nix b/nixpkgs/pkgs/development/python-modules/jupytext/default.nix
index 5622ee1669df..f7ac30c28c51 100644
--- a/nixpkgs/pkgs/development/python-modules/jupytext/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupytext/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "jupytext";
-  version = "0.8.6";
+  version = "1.1.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1m35m9z4vy480d2200nd4lk9n5s4z3zcnq0d9rdlh4yv5264mrgf";
+    sha256 = "1klcx333kpgb5gbaasmz07brqjxvls3l5dpj0kv9cfsd76cq17yh";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/kitchen/default.nix b/nixpkgs/pkgs/development/python-modules/kitchen/default.nix
index 2e8abf0da525..494a4f8fc063 100644
--- a/nixpkgs/pkgs/development/python-modules/kitchen/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/kitchen/default.nix
@@ -1,11 +1,11 @@
 { stdenv, buildPythonPackage, fetchPypi }:
 buildPythonPackage rec {
   pname = "kitchen";
-  version = "1.2.5";
+  version = "1.2.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "af9fbb60f68cbdb2ead402beb8fa7c7edadbe2aa7b5a70138b7c4b0fa88153fd";
+    sha256 = "0g5hq2icnng9vy4www5hnr3r5srisfwp0wxw1sv5c5dxy61gak5q";
   };
 
   meta = with stdenv.lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/klaus/default.nix b/nixpkgs/pkgs/development/python-modules/klaus/default.nix
index 1629c55a439e..687798735d3e 100644
--- a/nixpkgs/pkgs/development/python-modules/klaus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/klaus/default.nix
@@ -2,13 +2,13 @@
 
 python.pkgs.buildPythonPackage rec {
   pname = "klaus";
-  version = "1.3.0";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "jonashaag";
     repo = pname;
     rev = version;
-    sha256 = "04zjvrpx66x2c0v74nvmq8x7s7c8994cv1zwd5hfn9alq82hqcgr";
+    sha256 = "041l5dpymi9h0yyr55r6m0skp0m2ags3miay0s1bgfcp469k0l20";
   };
 
   prePatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/klein/default.nix b/nixpkgs/pkgs/development/python-modules/klein/default.nix
index 3dfbb4e17db2..9b96ae038ca5 100644
--- a/nixpkgs/pkgs/development/python-modules/klein/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/klein/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi
+{ lib, buildPythonPackage, fetchPypi, fetchpatch
 , six, twisted, werkzeug, incremental
 , mock }:
 
@@ -11,9 +11,17 @@ buildPythonPackage rec {
     sha256 = "30aaf0d78a987d5dbfe0968a07367ad0c73e02823cc8eef4c54f80ab848370d0";
   };
 
+  patches = [
+    (fetchpatch {
+      name = "tests-expect-werkzeug-308.patch";
+      url = https://github.com/twisted/klein/commit/e2a5835b83e37a2bc5faefbfe1890c529b18b9c6.patch;
+      sha256 = "03j0bj3l3hnf7f96rb27i4bzy1iih79ll5bcah7gybdi1wpznh8w";
+    })
+  ];
+
   propagatedBuildInputs = [ six twisted werkzeug incremental ];
 
-  checkInputs = [ mock ];
+  checkInputs = [ mock twisted ];
 
   checkPhase = ''
     trial klein
diff --git a/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix b/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
index 33965221cec7..08c9e8b763dc 100644
--- a/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
@@ -6,13 +6,13 @@
 
 buildPythonPackage rec {
   pname = "lark-parser";
-  version = "0.7.0";
+  version = "0.7.1";
 
   src = fetchFromGitHub {
     owner = "lark-parser";
     repo = "lark";
     rev = version;
-    sha256 = "1zynj09w361yvbxr4hir681dfnlq1hzniws9dzgmlkvd6jnhjgx3";
+    sha256 = "17h7s0yc8jyjmlcwsaw93ijl982ws3p8nxif2dc3rv01dqhf0xx1";
   };
 
   # tests of Nearley support require js2py
diff --git a/nixpkgs/pkgs/development/python-modules/libarcus/default.nix b/nixpkgs/pkgs/development/python-modules/libarcus/default.nix
index 671949669492..add1957dd6df 100644
--- a/nixpkgs/pkgs/development/python-modules/libarcus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libarcus/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub
+{ stdenv, buildPythonPackage, python, fetchFromGitHub
 , cmake, sip, protobuf, pythonOlder }:
 
 buildPythonPackage rec {
   pname = "libarcus";
-  version = "4.0.0";
+  version = "4.1.0";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "libArcus";
     rev = version;
-    sha256 = "14c62bsc2cynhaajpdidcqpq2vqwshrdkqyzwvpsjjbfmlx3b1ay";
+    sha256 = "1x06daijxbrqj0dlxmi2zn7ap74zf6hih3krmkwhvarm2nr052g4";
   };
 
   disabled = pythonOlder "3.4.0";
@@ -20,8 +20,7 @@ buildPythonPackage rec {
   buildInputs = [ protobuf ];
 
   postPatch = ''
-    # To workaround buggy SIP detection which overrides PYTHONPATH
-    sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
+    sed -i 's#''${Python3_SITELIB}#${placeholder "out"}/${python.sitePackages}#' cmake/SIPMacros.cmake
   '';
 
   meta = with stdenv.lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/libsavitar/default.nix b/nixpkgs/pkgs/development/python-modules/libsavitar/default.nix
index dc783ba8f33a..f0fbcf5f3116 100644
--- a/nixpkgs/pkgs/development/python-modules/libsavitar/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libsavitar/default.nix
@@ -1,20 +1,19 @@
-{ stdenv, buildPythonPackage, pythonOlder, fetchFromGitHub, cmake, sip }:
+{ stdenv, buildPythonPackage, python, pythonOlder, fetchFromGitHub, cmake, sip }:
 
 buildPythonPackage rec {
   pname = "libsavitar";
-  version = "4.0.0";
+  version = "4.1.0";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "libSavitar";
     rev = version;
-    sha256 = "1q70l37qafzfkpw8vlagmpd2w576b6jc1xmxp3wf3qfq45j8kya0";
+    sha256 = "132bgcvjkr61pzf244hwz8gxzpg1i50na4bkcipwnyxdravdkkgf";
   };
 
   postPatch = ''
-    # To workaround buggy SIP detection which overrides PYTHONPATH
-    sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
+    sed -i 's#''${Python3_SITELIB}#${placeholder "out"}/${python.sitePackages}#' cmake/SIPMacros.cmake
   '';
 
   nativeBuildInputs = [ cmake ];
diff --git a/nixpkgs/pkgs/development/python-modules/livereload/default.nix b/nixpkgs/pkgs/development/python-modules/livereload/default.nix
index a3c084cc8c6f..e329f36a7169 100644
--- a/nixpkgs/pkgs/development/python-modules/livereload/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/livereload/default.nix
@@ -5,34 +5,26 @@
 , django
 , tornado
 , six
-, pytest
 }:
 
 buildPythonPackage rec {
   pname = "livereload";
-  version = "2.6.0";
+  version = "2.6.1";
 
   src = fetchFromGitHub {
     owner = "lepture";
     repo = "python-livereload";
     rev = "v${version}";
-    sha256 = "0p3yvvr1iv3fv3pwc2qfzl3mi3b5zv6dh7kmfm1k7krxvganj87n";
+    sha256 = "15v2a0af897ijnsfjh2r8f7l5zi5i2jdm6z0xzlyyvp9pxd6mpfm";
   };
 
-  buildInputs = [ nose django ];
+  buildInputs = [ django ];
 
   propagatedBuildInputs = [ tornado six ];
 
-  # Remove this patch when PR merged
-  # https://github.com/lepture/python-livereload/pull/173
-  postPatch = ''
-   substituteInPlace tests/test_watcher.py \
-     --replace 'watcher.watch(filepath, add_count)' \
-               'add_count.repr_str = "add_count test task"; watcher.watch(filepath, add_count)'
-  '';
-
-  checkInputs = [ pytest ];
-  checkPhase = "pytest tests";
+  checkInputs = [ nose ];
+  # TODO: retry running all tests after v2.6.1
+  checkPhase = "NOSE_EXCLUDE=test_watch_multiple_dirs nosetests -s";
 
   meta = {
     description = "Runs a local server that reloads as you develop";
diff --git a/nixpkgs/pkgs/development/python-modules/loo-py/default.nix b/nixpkgs/pkgs/development/python-modules/loo-py/default.nix
new file mode 100644
index 000000000000..fe765f5ff0a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/loo-py/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytools
+, pymbolic
+, genpy
+, cgen
+, islpy
+, six
+, colorama
+, mako
+, pyopencl
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "loo-py";
+  version = "2017.2";
+
+  src = fetchPypi {
+    pname = "loo.py";
+    inherit version;
+    sha256 = "c656992de48b328cdaccd7d1f14eb522b9dd5a1d0d15f54623f4ab18fd219abc";
+  };
+
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [
+    pytools
+    pymbolic
+    genpy
+    cgen
+    islpy
+    six
+    colorama
+    mako
+    pyopencl
+  ];
+
+  # pyopencl._cl.LogicError: clGetPlatformIDs failed: PLATFORM_NOT_FOUND_KHR
+  doCheck = false;
+  checkPhase = ''
+    HOME=$(mktemp -d) pytest test
+  '';
+
+  meta = with lib; {
+    description = "A code generator for array-based code on CPUs and GPUs";
+    homepage = https://mathema.tician.de/software/loopy;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/markdown/default.nix b/nixpkgs/pkgs/development/python-modules/markdown/default.nix
index f2397138771e..364fa4d81be2 100644
--- a/nixpkgs/pkgs/development/python-modules/markdown/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/markdown/default.nix
@@ -7,22 +7,18 @@
 
 buildPythonPackage rec {
   pname = "Markdown";
-  version = "2.6.10";
+  version = "3.1.1";
 
   src = fetchPypi {
-    extension = "zip";
     inherit pname version;
-    sha256 = "cfa536d1ee8984007fcecc5a38a493ff05c174cb74cb2341dafd175e6bc30851";
+    sha256 = "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a";
   };
 
-  # error: invalid command 'test'
-#   doCheck = false;
-
   checkInputs = [ nose pyyaml ];
 
   meta = {
-    description = "A Python implementation of John Gruber’s Markdown with Extension support";
-    homepage = https://github.com/Python-Markdown/markdown;
+    description = "A Python implementation of John Gruber's Markdown with Extension support";
+    homepage = "https://github.com/Python-Markdown/markdown";
     license = lib.licenses.bsd3;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/markdownsuperscript/default.nix b/nixpkgs/pkgs/development/python-modules/markdownsuperscript/default.nix
index 62bf7a93098e..1212651aec81 100644
--- a/nixpkgs/pkgs/development/python-modules/markdownsuperscript/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/markdownsuperscript/default.nix
@@ -1,4 +1,5 @@
-{ stdenv, buildPythonPackage, fetchPypi, markdown }:
+{ stdenv, buildPythonPackage, fetchPypi, markdown,
+  pytest, pytestrunner, pytestcov, coverage }:
 
 buildPythonPackage rec {
   pname = "MarkdownSuperscript";
@@ -11,7 +12,15 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ markdown ];
 
-  doCheck = false; # See https://github.com/NixOS/nixpkgs/pull/26985
+  postPatch = ''
+    # remove version bounds for Markdown dependency
+    sed 's/\["Markdown.*"\]/["Markdown"]/' -i setup.py
+
+    # remove version bounds for test dependencies
+    sed 's/=.*//' -i requirements/*.txt
+  '';
+
+  checkInputs = [ pytest pytestrunner pytestcov coverage ];
 
   meta = {
     description = "An extension to the Python Markdown package enabling superscript text";
diff --git a/nixpkgs/pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix b/nixpkgs/pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix
index 6412e04f93d3..01f80473feef 100644
--- a/nixpkgs/pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix
@@ -4,7 +4,7 @@
 
 buildPythonPackage rec {
   pname = "marshmallow-sqlalchemy";
-  version = "0.16.2";
+  version = "0.16.3";
 
   meta = {
     homepage = "https://github.com/marshmallow-code/marshmallow-sqlalchemy";
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "755e6e930c1ffe3430f62091085f0a51e0817b240986d931014f03b3556fff34";
+    sha256 = "0qzpl53r58fk328cn41365c6jkliwmj41v16zkyjxb9d4s2mvn14";
   };
 
   propagatedBuildInputs = [ marshmallow sqlalchemy ];
diff --git a/nixpkgs/pkgs/development/python-modules/mautrix-appservice/default.nix b/nixpkgs/pkgs/development/python-modules/mautrix-appservice/default.nix
index f181b5f4f996..8f59d7ce7b5e 100644
--- a/nixpkgs/pkgs/development/python-modules/mautrix-appservice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mautrix-appservice/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "mautrix-appservice";
-  version = "0.3.8";
+  version = "0.3.10.dev1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b5752c6d84bf952698aec500b16542f6d2aacea37efd5be59087b5d9ea38c98f";
+    sha256 = "ed827ff2a50b43f8125268145991d51b4a32ea4fbdd95b589ea15019b72a0bc3";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix b/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
index 5984f2bcb7cf..f003a04e55ea 100644
--- a/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
@@ -13,6 +13,12 @@ buildPythonPackage rec {
     inherit mpi;
   };
 
+  patches = [ ( fetchpatch {
+    # Upstream patch to ensure compatibility with openmpi-4.0.1
+    url = "https://github.com/mpi4py/mpi4py/commit/42f5e35a6a90454516c11131549a08cd766edbb0.patch";
+    sha256 = "1dm0i3amwj1cddzz1m9ssd7qp655c8rv1wzjs9ww3kzd90fm4w72";
+  })];
+
   postPatch = ''
     substituteInPlace test/test_spawn.py --replace \
                       "unittest.skipMPI('openmpi(<3.0.0)')" \
diff --git a/nixpkgs/pkgs/development/python-modules/mxnet/default.nix b/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
index 2c8ea30345f3..f2e38a0e9b3b 100644
--- a/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
@@ -21,7 +21,7 @@ buildPythonPackage rec {
   postPatch = ''
     substituteInPlace python/setup.py \
       --replace "graphviz<0.9.0," "graphviz" \
-      --replace "numpy<=1.15.0," "numpy" \
+      --replace "numpy<=1.15.2," "numpy" \
       --replace "requests<2.19.0," "requests"
   '';
 
diff --git a/nixpkgs/pkgs/development/python-modules/mypy/default.nix b/nixpkgs/pkgs/development/python-modules/mypy/default.nix
index 093d0d39ddd3..c5ca8e1f4b57 100644
--- a/nixpkgs/pkgs/development/python-modules/mypy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mypy/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchPypi, buildPythonPackage, lxml, typed-ast, psutil, isPy3k
+{ stdenv, fetchPypi, buildPythonPackage, typed-ast, psutil, isPy3k
 ,mypy_extensions }:
 
 buildPythonPackage rec {
   pname = "mypy";
-  version = "0.700";
+  version = "0.701";
 
   # Tests not included in pip package.
   doCheck = false;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1zxfi5s9hxrz0hbaj4n513az17l44pxl80r62ipjc0bsmbcic2xi";
+    sha256 = "05479r3gbq17r22hyhxjg49smx5q864pgx8ayy23rsdj4w6z2r2p";
   };
 
   disabled = !isPy3k;
 
-  propagatedBuildInputs = [ lxml typed-ast psutil mypy_extensions ];
+  propagatedBuildInputs = [ typed-ast psutil mypy_extensions ];
 
   meta = with stdenv.lib; {
     description = "Optional static typing for Python";
diff --git a/nixpkgs/pkgs/development/python-modules/nibabel/default.nix b/nixpkgs/pkgs/development/python-modules/nibabel/default.nix
index da664d9a8d0f..76494c70b2ea 100644
--- a/nixpkgs/pkgs/development/python-modules/nibabel/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nibabel/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "nibabel";
-  version = "2.3.3";
+  version = "2.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b6366634c65b04464e62f3a9a8df1faa172f780ed7f1af1c6818b3dc2f1202c3";
+    sha256 = "f165ff1cb4464902d6594eb2694e2cfb6f8b9fe233b856c976c3cff623ee0e17";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/nuitka/default.nix b/nixpkgs/pkgs/development/python-modules/nuitka/default.nix
index 57b48f991891..bf5ca3d55830 100644
--- a/nixpkgs/pkgs/development/python-modules/nuitka/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nuitka/default.nix
@@ -13,13 +13,13 @@ let
   # Therefore we create a separate env for it.
   scons = pkgs.python27.withPackages(ps: [ pkgs.scons ]);
 in buildPythonPackage rec {
-  version = "0.6.3";
+  version = "0.6.3.1";
   pname = "Nuitka";
 
   # Latest version is not yet on PyPi
   src = fetchurl {
     url = "https://github.com/kayhayen/Nuitka/archive/${version}.tar.gz";
-    sha256 = "0nzk6r724dyai33fi7xmc6jn57pkcwqm553vlv0r11blvc92d7pp";
+    sha256 = "0h05krv871ymz55k6lrdlfyqndck6lwyy69dk5v4sakgfd5iawqf";
   };
 
   checkInputs = [ vmprof pyqt4 ];
diff --git a/nixpkgs/pkgs/development/python-modules/numericalunits/default.nix b/nixpkgs/pkgs/development/python-modules/numericalunits/default.nix
index 1212bf0039c9..41b4c1a8f318 100644
--- a/nixpkgs/pkgs/development/python-modules/numericalunits/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/numericalunits/default.nix
@@ -4,12 +4,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.16";
+  version = "1.23";
   pname = "numericalunits";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "71ae8e236c7a223bccefffb670dca68be476dd63b7b9009641fc64099455da25";
+    sha256 = "1q1jrzxx0k7j82c5q061hd10mp965ra8813vb09ji326fbxzn2gy";
   };
 
   # no tests
diff --git a/nixpkgs/pkgs/development/python-modules/packet-python/default.nix b/nixpkgs/pkgs/development/python-modules/packet-python/default.nix
index 5811d510dff9..61d387590480 100644
--- a/nixpkgs/pkgs/development/python-modules/packet-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/packet-python/default.nix
@@ -3,36 +3,36 @@
 , fetchPypi
 , requests
 , python
-, fetchpatch
+
+# For tests/setup.py
+, pytest
+, pytestrunner
+, requests-mock
 }:
 
 buildPythonPackage rec {
   pname = "packet-python";
-  version = "1.37.1";
+  version = "1.38.2";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "316941d2473c0f42ac17ac89e9aa63a023bb96f35cf8eafe9e091ea424892778";
+    sha256 = "1lh97la51fa3nxjl4ngsanrxw6qq5jwwn0dxj2f0946m043200xl";
   };
+  nativeBuildInputs = [ pytestrunner ];
   propagatedBuildInputs = [ requests ];
+  checkInputs = [
+    pytest
+    pytestrunner
+    requests-mock
+  ];
 
   checkPhase = ''
-    ${python.interpreter} -m unittest discover -s test
+    ${python.interpreter} setup.py test
   '';
 
-  patches = [
-    (fetchpatch {
-      url = https://github.com/packethost/packet-python/commit/361ad0c60d0bfce2a992eefd17e917f9dcf36400.patch;
-      sha256 = "1cmzyq0302y4cqmim6arnvn8n620qysq458g2w5aq4zj1vz1q9g1";
-    })
-  ];
-
-  # Not all test files are included in archive
-  doCheck = false;
-
   meta = {
     description = "A Python client for the Packet API.";
     homepage    = "https://github.com/packethost/packet-python";
     license     = lib.licenses.lgpl3;
     maintainers = with lib.maintainers; [ dipinhora ];
   };
-}
\ No newline at end of file
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pc-ble-driver-py/default.nix b/nixpkgs/pkgs/development/python-modules/pc-ble-driver-py/default.nix
new file mode 100644
index 000000000000..d21d9d07150d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pc-ble-driver-py/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, buildPythonPackage, fetchpatch, fetchFromGitHub,
+  python, cmake, git, swig, boost, udev,
+  setuptools, enum34, wrapt, future }:
+
+buildPythonPackage rec {
+  pname = "pc-ble-driver-py";
+  version = "0.11.4";
+  disabled = python.isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "NordicSemiconductor";
+    repo = "pc-ble-driver-py";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "0lgmcnrlcivmawmlcwnn4pdp6afdbnf3fyfgq22xzs6v72m9gp81";
+  };
+
+  nativeBuildInputs = [ cmake swig git setuptools ];
+  buildInputs = [ boost udev ];
+  propagatedBuildInputs = [ enum34 wrapt future ];
+
+  patches = [
+    # build system expects case-insensitive file system
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/NordicSemiconductor/pc-ble-driver-py/pull/84.patch";
+      sha256 = "0ibx5g2bndr5h9sfnx51bk9b62q4jvpdwhxadbnj3da8kvcz13cy";
+    })
+  ];
+
+  postPatch = ''
+    # do not force static linking of boost
+    sed -i /Boost_USE_STATIC_LIBS/d pc-ble-driver/cmake/*.cmake
+
+    cd python
+  '';
+
+  preBuild = ''
+    pushd ../build
+    cmake ..
+    make -j $NIX_BUILD_CORES
+    popd
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bluetooth Low Energy nRF5 SoftDevice serialization";
+    homepage = "https://github.com/NordicSemiconductor/pc-ble-driver-py";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pelican/default.nix b/nixpkgs/pkgs/development/python-modules/pelican/default.nix
index 19d9b7853495..ee38d5a7a84c 100644
--- a/nixpkgs/pkgs/development/python-modules/pelican/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pelican/default.nix
@@ -42,6 +42,11 @@ buildPythonPackage rec {
   postPatch= ''
     substituteInPlace pelican/tests/test_pelican.py \
       --replace "'git'" "'${git}/bin/git'"
+
+    # Markdown-3.1 changed footnote separator to colon
+    # https://github.com/getpelican/pelican/issues/2493#issuecomment-491723744
+    sed -i '/test_article_with_footnote/i\
+        @unittest.skip("")' pelican/tests/test_readers.py
   '';
 
   LC_ALL="en_US.UTF-8";
diff --git a/nixpkgs/pkgs/development/python-modules/perfplot/default.nix b/nixpkgs/pkgs/development/python-modules/perfplot/default.nix
new file mode 100644
index 000000000000..4e451e816c0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/perfplot/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, matplotlib
+, numpy
+, pipdate
+, tqdm
+, pytest
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "perfplot";
+  version = "0.5.0";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "nschloe";
+    repo = "perfplot";
+    rev = "v${version}";
+    sha256 = "16aj5ryjic1k3qn8xhpw6crczvxcs691vs5kv4pvb1zdx69g1xbv";
+  };
+
+  propagatedBuildInputs = [
+    matplotlib
+    numpy
+    pipdate
+    tqdm
+  ];
+
+  checkInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+   HOME=$(mktemp -d) pytest test/perfplot_test.py
+  '';
+
+  meta = with lib; {
+    description = "Performance plots for Python code snippets";
+    homepage = https://github.com/nschloe/perfplot;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/persistent/default.nix b/nixpkgs/pkgs/development/python-modules/persistent/default.nix
index bc4c4b20aa4a..88008cd9530a 100644
--- a/nixpkgs/pkgs/development/python-modules/persistent/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/persistent/default.nix
@@ -1,23 +1,25 @@
-{ buildPythonPackage
+{ lib
+, buildPythonPackage
 , fetchPypi
-, zope_interface
+, zope_interface, cffi
 , sphinx, manuel
 }:
 
 buildPythonPackage rec {
   pname = "persistent";
-  version = "4.4.3";
+  version = "4.5.0";
 
   nativeBuildInputs = [ sphinx manuel ];
-  propagatedBuildInputs = [ zope_interface ];
+  propagatedBuildInputs = [ zope_interface cffi ];
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "05hi8yfvxl5ns7y7xhbgbqp78ydaxabjp5b64r4nmrfdfsqylrb7";
+    sha256 = "0slbvq1m3rilgyhj6i522rsyv592xv9pmvm61mrmgkgf40kfnz69";
   };
 
   meta = {
     description = "Automatic persistence for Python objects";
-    homepage = http://www.zope.org/Products/ZODB;
+    homepage = "http://www.zodb.org/";
+    license = lib.licenses.zpl21;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pex/default.nix b/nixpkgs/pkgs/development/python-modules/pex/default.nix
index 9f87d8a16cb0..4d064af18fa7 100644
--- a/nixpkgs/pkgs/development/python-modules/pex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pex/default.nix
@@ -1,20 +1,19 @@
 { stdenv
 , buildPythonPackage
 , fetchPypi
+, setuptools
 }:
 
 buildPythonPackage rec {
   pname = "pex";
-  version = "1.6.6";
+  version = "1.6.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ca887bedc9c6e0eab72fcb4c20eda8fff975d06b75993a85ee1dfc763ba38e86";
+    sha256 = "1hg30y8b4b96r4skhz2qmsp7li1izcg8854q3fi48rks0kcfx5fw";
   };
 
-  prePatch = ''
-    substituteInPlace setup.py --replace 'SETUPTOOLS_REQUIREMENT,' '"setuptools"'
-  '';
+  nativeBuildInputs = [ setuptools ];
 
   # A few more dependencies I don't want to handle right now...
   doCheck = false;
@@ -24,7 +23,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/pantsbuild/pex";
     license = licenses.asl20;
     maintainers = with maintainers; [ copumpkin ];
-    broken = true;
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pglast/default.nix b/nixpkgs/pkgs/development/python-modules/pglast/default.nix
new file mode 100644
index 000000000000..bfa6c301a7ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pglast/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, pythonOlder
+, aenum
+, pytest
+, pytestcov
+}:
+
+buildPythonPackage rec {
+  pname = "pglast";
+  version = "1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1442ae2cfc6427e9a8fcc2dc18d9ecfcaa1b16eba237fdcf0b2b13912eab9a86";
+  };
+
+  disabled = !isPy3k;
+
+  propagatedBuildInputs = lib.optionals (pythonOlder "3.6") [ aenum ];
+
+  checkInputs = [ pytest pytestcov ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/lelit/pglast";
+    description = "PostgreSQL Languages AST and statements prettifier";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/piccata/default.nix b/nixpkgs/pkgs/development/python-modules/piccata/default.nix
new file mode 100644
index 000000000000..bd00b2f6d557
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/piccata/default.nix
@@ -0,0 +1,19 @@
+{ buildPythonPackage, fetchPypi, lib, ipaddress }:
+
+buildPythonPackage rec {
+  pname = "piccata";
+  version = "1.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "45f6c98c2ea809d445040888117f99bc3ee843490d86fecc5805ff5ea41508f7";
+  };
+
+  propagatedBuildInputs = [ ipaddress ];
+
+  meta = {
+    description = "Simple CoAP (RFC7252) toolkit";
+    homepage = "https://github.com/NordicSemiconductor/piccata";
+    maintainers = with lib.maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pipdate/default.nix b/nixpkgs/pkgs/development/python-modules/pipdate/default.nix
new file mode 100644
index 000000000000..8628705ed4d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pipdate/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, appdirs
+, requests
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "pipdate";
+  version = "0.3.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a27f64d13269adfd8594582f5a62c9f2151b426e701afdfc3b4f4019527b4121";
+  };
+
+  propagatedBuildInputs = [
+    appdirs
+    requests
+  ];
+
+  checkInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+    HOME=$(mktemp -d) pytest test/test_pipdate.py
+  '';
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "pip update helpers";
+    homepage = https://github.com/nschloe/pipdate;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/portalocker/default.nix b/nixpkgs/pkgs/development/python-modules/portalocker/default.nix
new file mode 100644
index 000000000000..c9f44dbccebc
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/portalocker/default.nix
@@ -0,0 +1,37 @@
+{ buildPythonPackage
+, fetchPypi
+, lib
+, sphinx
+, flake8
+, pytest
+, pytestcov
+, pytest-flakes
+, pytestpep8
+}:
+
+buildPythonPackage rec {
+  version = "1.4.0";
+  pname = "portalocker";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gwjnalfwl1mb9a04m9h3hrds75xmc9na666aiz2cgz0m545dcrz";
+  };
+
+  checkInputs = [
+    sphinx
+    flake8
+    pytest
+    pytestcov
+    pytest-flakes
+    pytestpep8
+  ];
+
+  meta = with lib; {
+    description = "A library to provide an easy API to file locking";
+    homepage = https://github.com/WoLpH/portalocker;
+    license = licenses.psfl;
+    maintainers = with maintainers; [ jonringer ];
+    platforms = platforms.unix; # Windows has a dependency on pypiwin32
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pybindgen/default.nix b/nixpkgs/pkgs/development/python-modules/pybindgen/default.nix
index 9b5991a424c9..4d8d0589edae 100644
--- a/nixpkgs/pkgs/development/python-modules/pybindgen/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pybindgen/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchPypi, buildPythonPackage, setuptools_scm, pygccxml }:
+{ stdenv, fetchPypi, buildPythonPackage, isPy3k, setuptools_scm, pygccxml }:
 buildPythonPackage rec {
   pname = "PyBindGen";
   version = "0.19.0";
@@ -11,6 +11,7 @@ buildPythonPackage rec {
   buildInputs = [ setuptools_scm ];
 
   checkInputs = [ pygccxml ];
+  doCheck = (!isPy3k); # Fails to import module 'cxxfilt' from pygccxml on Py3k
 
   meta = with stdenv.lib; {
     homepage = https://github.com/gjcarneiro/pybindgen;
@@ -19,5 +20,3 @@ buildPythonPackage rec {
     maintainers = with maintainers; [ teto ];
   };
 }
-
-
diff --git a/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix b/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
index ff4059d862ee..ef5996f32c78 100644
--- a/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "PyChromecast";
-  version = "3.2.1";
+  version = "3.2.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e1e71e30581e1021b6bdd50a80cfcdcfa86d9082171fdd719c5ca6a77b8a9699";
+    sha256 = "17l7nlnpqjgnrw4hzs52lbzmdxa1vm3v51mm33l4c43c1md5m2ns";
   };
 
   disabled = !isPy3k;
diff --git a/nixpkgs/pkgs/development/python-modules/pyenchant/default.nix b/nixpkgs/pkgs/development/python-modules/pyenchant/default.nix
index 6b49c65faae0..8c240261463a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyenchant/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyenchant/default.nix
@@ -13,10 +13,10 @@ buildPythonPackage rec {
     sha256 = "fc31cda72ace001da8fe5d42f11c26e514a91fa8c70468739216ddd8de64e2a0";
   };
 
-  propagatedBuildInputs = [ pkgs.enchant ];
+  propagatedBuildInputs = [ pkgs.enchant1 ];
 
   patchPhase = let
-    path_hack_script = "s|LoadLibrary(e_path)|LoadLibrary('${pkgs.enchant}/lib/' + e_path)|";
+    path_hack_script = "s|LoadLibrary(e_path)|LoadLibrary('${pkgs.enchant1}/lib/' + e_path)|";
   in ''
     sed -i "${path_hack_script}" enchant/_enchant.py
 
@@ -31,6 +31,7 @@ buildPythonPackage rec {
     description = "pyenchant: Python bindings for the Enchant spellchecker";
     homepage = https://pythonhosted.org/pyenchant/;
     license = licenses.lgpl21;
+    badPlatforms = [ "x86_64-darwin" ];
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyfma/default.nix b/nixpkgs/pkgs/development/python-modules/pyfma/default.nix
new file mode 100644
index 000000000000..d9aab0b8faed
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyfma/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pybind11
+, numpy
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "pyfma";
+  version = "0.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "79514717f8e632a0fb165e3d61222ed61202bea7b0e082f7b41c91e738f1fbc9";
+  };
+
+  buildInputs = [
+    pybind11
+  ];
+
+  checkInputs = [
+    numpy
+    pytest
+  ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  checkPhase = ''
+    pytest test
+  '';
+
+  meta = with lib; {
+    description = "Fused multiply-add for Python";
+    homepage = https://github.com/nschloe/pyfma;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyglet/default.nix b/nixpkgs/pkgs/development/python-modules/pyglet/default.nix
index 4bc1cd0608c5..1b00e1264ffc 100644
--- a/nixpkgs/pkgs/development/python-modules/pyglet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyglet/default.nix
@@ -1,5 +1,14 @@
-{ stdenv, buildPythonPackage, fetchPypi
-, libGLU_combined, xorg, freetype, fontconfig, future}:
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, libGLU_combined
+, xorg
+, future
+, pytest
+, glibc
+, gtk2-x11
+, gdk_pixbuf
+}:
 
 buildPythonPackage rec {
   version = "1.3.2";
@@ -10,14 +19,49 @@ buildPythonPackage rec {
     sha256 = "b00570e7cdf6971af8953b6ece50d83d13272afa5d1f1197c58c0f478dd17743";
   };
 
+  # find_library doesn't reliably work with nix (https://github.com/NixOS/nixpkgs/issues/7307).
+  # Even naively searching `LD_LIBRARY_PATH` won't work since `libc.so` is a linker script and
+  # ctypes.cdll.LoadLibrary cannot deal with those. Therefore, just hardcode the paths to the
+  # necessary libraries.
   postPatch = let
-    libs = [ libGLU_combined xorg.libX11 freetype fontconfig ];
-    paths = builtins.concatStringsSep "," (map (l: "\"${l}/lib\"") libs);
-  in "sed -i -e 's|directories\.extend.*lib[^]]*|&,${paths}|' pyglet/lib.py";
+    ext = stdenv.hostPlatform.extensions.sharedLibrary;
+  in ''
+    cat > pyglet/lib.py <<EOF
+    import ctypes
+    def load_library(*names, **kwargs):
+        for name in names:
+            path = None
+            if name == 'GL':
+                path = '${libGLU_combined}/lib/libGL${ext}'
+            elif name == 'GLU':
+                path = '${libGLU_combined}/lib/libGLU${ext}'
+            elif name == 'c':
+                path = '${glibc}/lib/libc${ext}.6'
+            elif name == 'X11':
+                path = '${xorg.libX11}/lib/libX11${ext}'
+            elif name == 'gdk-x11-2.0':
+                path = '${gtk2-x11}/lib/libgdk-x11-2.0${ext}'
+            elif name == 'gdk_pixbuf-2.0':
+                path = '${gdk_pixbuf}/lib/libgdk_pixbuf-2.0${ext}'
+            if path is not None:
+                return ctypes.cdll.LoadLibrary(path)
+        raise Exception("Could not load library {}".format(names))
+    EOF
+  '';
 
+  propagatedBuildInputs = [ future ];
+
+  # needs an X server. Keep an eye on
+  # https://bitbucket.org/pyglet/pyglet/issues/219/egl-support-headless-rendering
   doCheck = false;
 
-  propagatedBuildInputs = [ future ];
+  checkInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+    py.test tests/unit tests/integration
+  '';
 
   meta = with stdenv.lib; {
     homepage = "http://www.pyglet.org/";
diff --git a/nixpkgs/pkgs/development/python-modules/pygtk/default.nix b/nixpkgs/pkgs/development/python-modules/pygtk/default.nix
index 42127de2f244..c6f939d319ab 100644
--- a/nixpkgs/pkgs/development/python-modules/pygtk/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pygtk/default.nix
@@ -4,18 +4,16 @@
 buildPythonPackage rec {
   pname = "pygtk";
   version = "2.24.0";
-  name = pname + "-" + version;
 
   disabled = isPy3k;
 
   src = fetchurl {
-    url = "mirror://gnome/sources/pygtk/2.24/${name}.tar.bz2";
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
     sha256 = "04k942gn8vl95kwf0qskkv6npclfm31d78ljkrkgyqxxcni1w76d";
   };
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ ]
-    ++ stdenv.lib.optional (libglade != null) libglade;
+  buildInputs = stdenv.lib.optional (libglade != null) libglade;
 
   propagatedBuildInputs = [ gtk2 pygobject2 pycairo ];
 
@@ -50,6 +48,13 @@ buildPythonPackage rec {
     rm $out/bin/pygtk-codegen-2.0
     ln -s ${pygobject2}/bin/pygobject-codegen-2.0  $out/bin/pygtk-codegen-2.0
     ln -s ${pygobject2}/lib/${python.libPrefix}/site-packages/pygobject-${pygobject2.version}.pth \
-                  $out/lib/${python.libPrefix}/site-packages/${name}.pth
+                  $out/lib/${python.libPrefix}/site-packages/${pname}-${version}.pth
   '';
+
+  meta = with stdenv.lib; {
+    description = "GTK+-2 bindings";
+    homepage = "https://gitlab.gnome.org/Archive/pygtk";
+    platforms = platforms.all;
+    license = with licenses; [ lgpl21Plus ];
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix b/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
index 83796da5f96b..c2fb9612e9c5 100644
--- a/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "pyhomematic";
-  version = "0.1.58";
+  version = "0.1.59";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b390400169a4d57b3ddc3bf2123d71f2c9ef9042a50906e13253aa67311f5183";
+    sha256 = "4406d9bf49d570ef0ba80be9cf8eb4bd75c08a2909369ebd90b8e94ff07f116e";
   };
 
   # PyPI tarball does not include tests/ directory
diff --git a/nixpkgs/pkgs/development/python-modules/pyicu/default.nix b/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
index 6eba02e59ce2..a9523826b110 100644
--- a/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
@@ -9,16 +9,17 @@
 
 buildPythonPackage rec {
   pname = "PyICU";
-  version = "2.0.3";
+  version = "2.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0pzss3l0b0vcsyr7wlqdd6pkcqldspajfgd9k2iijf6r152d2ln4";
+    sha256 = "ddb2b453853b4c25db382bc5e8c4cde09b3f4696ef1e1494f8294e174f459cf4";
   };
 
   patches = [
     (fetchpatch {
-      url = https://sources.debian.org/data/main/p/pyicu/2.0.3-1/debian/patches/icu_test.patch;
+      url = "https://salsa.debian.org/python-team/modules/pyicu/raw/debian/2.2-2/"
+            + "debian/patches/icu_test.patch";
       sha256 = "1iavdkyqixm9i753svl17barla93b7jzgkw09dn3hnggamx7zwx9";
     })
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/pylint/default.nix b/nixpkgs/pkgs/development/python-modules/pylint/default.nix
index 8f1f4378a394..64259872ce32 100644
--- a/nixpkgs/pkgs/development/python-modules/pylint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pylint/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, buildPythonPackage, fetchPypi, python, pythonOlder, astroid,
-  isort, mccabe, pytest, pytestrunner, pyenchant }:
+  isort, mccabe, pytest, pytestrunner }:
 
 buildPythonPackage rec {
   pname = "pylint";
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ pytestrunner ];
 
-  checkInputs = [ pytest pyenchant ];
+  checkInputs = [ pytest ];
 
   propagatedBuildInputs = [ astroid isort mccabe ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pylru/default.nix b/nixpkgs/pkgs/development/python-modules/pylru/default.nix
index b0fd4f4003a4..8ca565834d4a 100644
--- a/nixpkgs/pkgs/development/python-modules/pylru/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pylru/default.nix
@@ -2,15 +2,15 @@
 
 buildPythonPackage rec {
   pname = "pylru";
-  version = "1.1.0";
+  version = "1.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e03a3d354eb8fdfa11638698e8a1f06cd3b3a214ebc0a120c603a79290d9ebec";
+    sha256 = "492f934bb98dc6c8b2370c02c95c65516ddc08c8f64d27f70087eb038621d297";
   };
 
   meta = with lib; {
-    homepage = https://github.com/jlhutch/pylru;
+    homepage = "https://github.com/jlhutch/pylru";
     description = "A least recently used (LRU) cache implementation";
     license = licenses.gpl2;
     maintainers = with maintainers; [ abbradar ];
diff --git a/nixpkgs/pkgs/development/python-modules/pymbolic/default.nix b/nixpkgs/pkgs/development/python-modules/pymbolic/default.nix
new file mode 100644
index 000000000000..0d13b377b13e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymbolic/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytools
+, pytest
+, six
+, sympy
+, pexpect
+, symengine
+}:
+
+buildPythonPackage rec {
+  pname = "pymbolic";
+  version = "2018.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a47d5524d6a3cdc8a028079ce632eeb45ceea7243272d234f250622087688207";
+  };
+
+  postConfigure = ''
+    substituteInPlace setup.py \
+      --replace "\"pytest>=2.3\"," ""
+  '';
+
+  checkInputs = [ sympy pexpect symengine pytest ];
+  propagatedBuildInputs = [
+    pytools
+    six
+  ];
+
+  # too many tests fail
+  doCheck = false;
+  checkPhase = ''
+    pytest test
+  '';
+
+  meta = with lib; {
+    description = "A package for symbolic computation";
+    homepage = https://mathema.tician.de/software/pymbolic;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymystem3/default.nix b/nixpkgs/pkgs/development/python-modules/pymystem3/default.nix
new file mode 100644
index 000000000000..5311d9817528
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymystem3/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchPypi
+, buildPythonPackage
+, requests
+, flake8
+, mock
+, pytest
+, mystem
+}:
+
+buildPythonPackage rec {
+  pname = "pymystem3";
+  version = "0.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15gv78m17g958gfka6rr3rg230g6b5ssgk8bfpsp7k2iajhxdbhs";
+  };
+
+  propagatedBuildInputs = [ requests ];
+  checkInputs = [ flake8 mock pytest ];
+
+  postPatch = ''
+    sed -i 's#^_mystem_info = .*#_mystem_info = ["${mystem}/bin", "${mystem}/bin/mystem"]#' pymystem3/constants.py
+  '';
+
+  meta = with lib; {
+    description = "Python wrapper for the Yandex MyStem 3.1 morpholocial analyzer of the Russian language";
+    homepage = https://github.com/nlpub/pymystem3;
+    license = licenses.mit;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyspinel/default.nix b/nixpkgs/pkgs/development/python-modules/pyspinel/default.nix
new file mode 100644
index 000000000000..990e2b28bd89
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyspinel/default.nix
@@ -0,0 +1,21 @@
+{ buildPythonPackage, fetchPypi, lib, future, pyserial, ipaddress }:
+
+buildPythonPackage rec {
+  pname = "pyspinel";
+  version = "1.0.0a3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0914a662d57a14bce9df21f22711b5c9b2fef37cf461be54ed35c6e229060fd4";
+  };
+
+  propagatedBuildInputs = [ pyserial ipaddress future ];
+
+  doCheck = false;
+
+  meta = {
+    description = "Interface to the OpenThread Network Co-Processor (NCP)";
+    homepage = "https://github.com/openthread/pyspinel";
+    maintainers = with lib.maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pysptk/default.nix b/nixpkgs/pkgs/development/python-modules/pysptk/default.nix
new file mode 100644
index 000000000000..46864632964a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pysptk/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage, fetchPypi
+, numpy, scipy, cython, six, decorator
+}:
+
+buildPythonPackage rec {
+  pname = "pysptk";
+  version = "0.1.17";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "aa8bd2ae84bfe72e9015ccb69eb3b687bc64fad6139ae0b327fe07918e1e28ff";
+  };
+
+  PYSPTK_BUILD_VERSION = 0;
+
+  nativeBuildInputs = [
+    cython
+  ];
+
+  propagatedBuildInputs = [
+    numpy
+    scipy
+    six
+    decorator
+  ];
+
+  # No tests in the PyPI tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A python wrapper for Speech Signal Processing Toolkit (SPTK)";
+    homepage = https://pysptk.readthedocs.io/en/latest/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ hyphon81 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
index c03590f8de88..a5c351502683 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "pytest-tornado";
-  version = "0.7.0";
+  version = "0.8.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0jv7jhq6ddhsmnz67vc76r4kwac9k5a142968zppyw9av6qalbl4";
+    sha256 = "0ncaq7icijls6qh66kv19w3i9av2wnmaycfr4yadyybajr8yvffz";
   };
 
   # package has no tests
diff --git a/nixpkgs/pkgs/development/python-modules/python-axolotl/default.nix b/nixpkgs/pkgs/development/python-modules/python-axolotl/default.nix
index 8c4936532994..55a0a355a9e6 100644
--- a/nixpkgs/pkgs/development/python-modules/python-axolotl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-axolotl/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "python-axolotl";
-  version = "0.2.2";
+  version = "0.2.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1had4dq4n26c3hp62rbmhvs1dj3j3z2jhcbddnbsmqmiky8dqs39";
+    sha256 = "1bwdp24fmriffwx91aigs9k162albb51iskp23nc939z893q23py";
   };
 
   propagatedBuildInputs = [ cryptography python-axolotl-curve25519 protobuf ];
diff --git a/nixpkgs/pkgs/development/python-modules/python-daemon/default.nix b/nixpkgs/pkgs/development/python-modules/python-daemon/default.nix
index f4704c30b5dd..93c051064049 100644
--- a/nixpkgs/pkgs/development/python-modules/python-daemon/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-daemon/default.nix
@@ -17,7 +17,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Library to implement a well-behaved Unix daemon process";
-    homepage = https://alioth.debian.org/projects/python-daemon/;
+    homepage = "https://pagure.io/python-daemon/";
     license = [ licenses.gpl3Plus licenses.asl20 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/python-stdnum/default.nix b/nixpkgs/pkgs/development/python-modules/python-stdnum/default.nix
index 582192113243..06577249a02d 100644
--- a/nixpkgs/pkgs/development/python-modules/python-stdnum/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-stdnum/default.nix
@@ -1,14 +1,19 @@
-{ lib, fetchPypi, buildPythonPackage, isPy3k }:
+{ lib, fetchPypi, buildPythonPackage, nose }:
 
 buildPythonPackage rec {
-  version = "1.10";
+  version = "1.11";
   pname = "python-stdnum";
-  # Failing tests and dependency issue on Py3k
-  disabled = isPy3k;
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0prs63q8zdgwr5cxc5a43zvsm66l0gf9jk19qdf85m6isnp5186a";
+    sha256 = "d5f0af1bee9ddd9a20b398b46ce062dbd4d41fcc9646940f2667256a44df3854";
   };
+
+  checkInputs = [ nose ];
+
+  checkPhase = ''
+    nosetests
+  '';
+
   meta = {
     homepage = https://arthurdejong.org/python-stdnum/;
     description = "Python module to handle standardized numbers and codes";
diff --git a/nixpkgs/pkgs/development/python-modules/pyutilib/default.nix b/nixpkgs/pkgs/development/python-modules/pyutilib/default.nix
index 4227a255ad3d..0e19b971a16c 100644
--- a/nixpkgs/pkgs/development/python-modules/pyutilib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyutilib/default.nix
@@ -7,12 +7,12 @@
 
 buildPythonPackage rec {
   pname = "pyutilib";
-  version = "5.6.5";
+  version = "5.7.0";
 
   src = fetchPypi {
     pname = "PyUtilib";
     inherit version;
-    sha256 = "4730084624be98f2c326da88f3852831c6aa919e11babab2c34b0299c8f5ce2a";
+    sha256 = "086fzgjb2mjgkfhg1hvc2gcyam2ab28mijygwica5fg4zz6rn32l";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/rasterio/default.nix b/nixpkgs/pkgs/development/python-modules/rasterio/default.nix
index f5a563545a10..5d825f7579e2 100644
--- a/nixpkgs/pkgs/development/python-modules/rasterio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rasterio/default.nix
@@ -1,22 +1,22 @@
-{ buildPythonPackage, lib, fetchFromGitHub
+{ buildPythonPackage, lib, fetchFromGitHub, isPy3k
 , cython
 , numpy, affine, attrs, cligj, click-plugins, snuggs, gdal
-, pytest, pytestcov, packaging, hypothesis, boto3
+, pytest, pytestcov, packaging, hypothesis, boto3, mock
 }:
 
 buildPythonPackage rec {
   pname = "rasterio";
-  version = "1.0.22";
+  version = "1.0.23";
 
   # Pypi doesn't ship the tests, so we fetch directly from GitHub
   src = fetchFromGitHub {
     owner = "mapbox";
     repo = "rasterio";
     rev = version;
-    sha256 = "1gx48qjiahlwflmjlkndp3ricd03jmzfx7i9ffgq7a2i6gcm36zp";
+    sha256 = "1xypc86prwkv6ypy87g6r1p5y6d6c51vfxd3z6hjd1hv2ks7zjs1";
   };
 
-  checkInputs = [ boto3 pytest pytestcov packaging hypothesis ];
+  checkInputs = [ boto3 pytest pytestcov packaging hypothesis ] ++ lib.optional (!isPy3k) mock;
   nativeBuildInputs = [ cython gdal ];
   propagatedBuildInputs = [ gdal numpy attrs affine cligj click-plugins snuggs ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/rfc3987/default.nix b/nixpkgs/pkgs/development/python-modules/rfc3987/default.nix
new file mode 100644
index 000000000000..6488dfdd8ce5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/rfc3987/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "rfc3987";
+  version = "1.3.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733";
+  };
+
+  doCheck = false;
+  meta = with stdenv.lib; {
+    homepage = "https://pypi.python.org/pypi/rfc3987";
+    license = licenses.gpl3Plus;
+    description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)";
+    maintainers = with maintainers; [ vanschelven ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rl-coach/default.nix b/nixpkgs/pkgs/development/python-modules/rl-coach/default.nix
new file mode 100644
index 000000000000..0dd5d58fc8cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/rl-coach/default.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, tensorflow
+, annoy
+, pillow
+, matplotlib
+, numpy
+, pandas
+, pygame
+, pyopengl
+, scipy
+, scikitimage
+, gym
+, bokeh
+, kubernetes
+, redis
+, minio
+, pytest
+, psutil
+}:
+
+buildPythonPackage rec {
+  version = "0.12.0";
+  pname = "rl-coach";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0kfm699rsy63726hpz3fyppl7zbl0fzf0vk2kkfgg718mcjxmdnh";
+  };
+
+  propagatedBuildInputs = [
+    tensorflow
+    annoy
+    pillow
+    matplotlib
+    numpy
+    pandas
+    pygame
+    pyopengl
+    scipy
+    scikitimage
+    gym
+    bokeh
+    kubernetes
+    redis
+    minio
+    psutil
+  ];
+
+  checkInputs = [
+    pytest
+  ];
+
+  # run only some tests that do not need any optional dependencies
+  # available tests: https://github.com/NervanaSystems/coach/tree/master/rl_coach/tests
+  testsToRun = [
+    # test only the tensorflow backend (not mxnet)
+    "architectures/tensorflow_components"
+    "agents"
+    "exploration_policies"
+    "filters"
+    "memories"
+    "utils"
+  ];
+  checkPhase = let
+    fullTestPaths = map (testfile: "rl_coach/tests/${testfile}") testsToRun;
+    escapedPaths = map lib.escapeShellArg fullTestPaths;
+    pytestArgs = builtins.concatStringsSep " " escapedPaths;
+  in
+  ''
+    pytest ${pytestArgs}
+  '';
+
+  postPatch = ''
+    # pinned to 8.0.1 for unknown reason, at least basic functionallity seems to work without it
+    # https://github.com/NervanaSystems/coach/pull/149#issuecomment-495915804
+    sed -i '/kubernetes/d' requirements.txt
+
+    # this is just an "intel-optimized" version of tensorflow, e.g. an implementation detail
+    sed -i 's/intel-tensorflow/tensorflow/g' setup.py
+
+    # backports of python3 features not needed
+    # https://github.com/NervanaSystems/coach/issues/324
+    sed -i '/futures/d' requirements.txt
+  '';
+
+  disabled = pythonOlder "3.5"; # minimum required version
+
+  meta = with stdenv.lib; {
+    description = "Enables easy experimentation with state of the art Reinforcement Learning algorithms";
+    homepage = "https://nervanasystems.github.io/coach/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ timokau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/roboschool/default.nix b/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
index 8aa45966bd20..a86e17e921b6 100644
--- a/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, isPy3k
 , python
 , fetchFromGitHub
 , fetchpatch
@@ -23,6 +24,9 @@ buildPythonPackage rec {
     sha256 = "1s7rp5bbiglnrfm33wf7x7kqj0ks3b21bqyz18c5g6vx39rxbrmh";
   };
 
+  # fails to find boost_python for some reason
+  disabled = !isPy3k;
+
   propagatedBuildInputs = [
     gym
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/rpmfluff/default.nix b/nixpkgs/pkgs/development/python-modules/rpmfluff/default.nix
index bdbc3629ec71..76fc508a5d82 100644
--- a/nixpkgs/pkgs/development/python-modules/rpmfluff/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rpmfluff/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "rpmfluff";
-  version = "0.5.6";
+  version = "0.5.7.1";
 
   src = fetchurl {
   url = "https://releases.pagure.org/${pname}/${pname}-${version}.tar.xz";
-    sha256 = "0bhh8mv2kddhv3fiswg3zdl91d7vh93b33jlh1dmyz63z94rm88l";
+    sha256 = "19vnlzma8b0aghdiixk0q3wc10y6306hsnic0qvswaaiki94fss1";
   };
 
   LC_ALL="en_US.utf-8";
diff --git a/nixpkgs/pkgs/development/python-modules/rpyc/default.nix b/nixpkgs/pkgs/development/python-modules/rpyc/default.nix
index 982fd7fcf59b..b69bf1851a8b 100644
--- a/nixpkgs/pkgs/development/python-modules/rpyc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rpyc/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "rpyc";
-  version = "4.0.2";
+  version = "4.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a0d87cbad152f25e3702a03cb7fd67f6b10c87680a60ec3aea8dca5a56307c10";
+    sha256 = "1pz90h21f74n8i3cx5ndxm4r3rismkx5qbw1c0cmfci9a3009rq5";
   };
 
   propagatedBuildInputs = [ nose plumbum ];
diff --git a/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix b/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
index 958962bda2ae..afd915ed8407 100644
--- a/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "salmon-mail";
-  version = "3.1.0";
+  version = "3.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cb2f9c3bf2b9f8509453ca8bc06f504350e19488eb9d3d6a4b9e4b8c160b527d";
+    sha256 = "0ddd9nwdmiibk3jaampznm8nai5b7zalp0f8c65l71674300bqnw";
   };
 
   checkInputs = [ nose jinja2 mock ];
diff --git a/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix b/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix
new file mode 100644
index 000000000000..503b899ec22d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, buildPythonPackage, fetchPypi, urllib3, certifi }:
+
+buildPythonPackage rec {
+  pname = "sentry-sdk";
+  version = "0.8.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f5819df450d7b0696be69a0c6d70a09e4890a3844ee8ccb7a461794135bd5965";
+  };
+
+  propagatedBuildInputs = [ urllib3 certifi ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/getsentry/sentry-python";
+    description = "New Python SDK for Sentry.io";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix b/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
index d70abe1f95fd..c6795f172064 100644
--- a/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
@@ -29,6 +29,10 @@ buildPythonPackage rec {
     pytest tests/unit
   '';
 
+  postPatch = ''
+    substituteInPlace setup.py --replace "pyyaml~=3.12" "pyyaml~=5.1"
+  '';
+
   meta = with lib; {
     homepage = https://github.com/awslabs/aws-serverlessrepo-python;
     description = "Helpers for working with the AWS Serverless Application Repository";
diff --git a/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix b/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
index 3aea75e3de82..e45638edd101 100644
--- a/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
@@ -4,12 +4,12 @@
 }:
 
 buildPythonPackage rec {
-  pname = "python-setproctitle";
-  version = "1.1.9";
+  pname = "setproctitle";
+  version = "1.1.10";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1mqadassxcm0m9r1l02m5vr4bbandn48xz8gifvxmb4wiz8i8d0w";
+    sha256 = "6283b7a58477dd8478fbb9e76defb37968ee4ba47b05ec1c053cb39638bd7398";
   };
 
   meta = with stdenv.lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/sh/default.nix b/nixpkgs/pkgs/development/python-modules/sh/default.nix
index 964386564e45..aa18f07e49e5 100644
--- a/nixpkgs/pkgs/development/python-modules/sh/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchPypi, python, coverage, lsof, glibcLocales }:
+{ stdenv, buildPythonPackage, fetchPypi, fetchpatch, python, coverage, lsof, glibcLocales }:
 
 buildPythonPackage rec {
   pname = "sh";
@@ -9,9 +9,17 @@ buildPythonPackage rec {
     sha256 = "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm";
   };
 
-  # Disable tests that fail on Darwin
-  # Some of the failures are due to Nix using GNU coreutils
-  patches = [ ./disable-broken-tests-darwin.patch ];
+  patches = [
+    # Disable tests that fail on Darwin
+    # Some of the failures are due to Nix using GNU coreutils
+    ./disable-broken-tests-darwin.patch
+    # Fix tests for Python 3.7. See: https://github.com/amoffat/sh/pull/468
+    (fetchpatch {
+      url = "https://github.com/amoffat/sh/commit/b6202f75706473f02084d819e0765056afa43664.patch";
+      sha256 = "1kzxyxcc88zhgn2kmfg9yrbs4n405b2jq7qykb453l52hy10vi94";
+      excludes = [ ".travis.yml" ];
+    })
+  ];
 
   postPatch = ''
     sed -i 's#/usr/bin/env python#${python.interpreter}#' test.py
diff --git a/nixpkgs/pkgs/development/python-modules/sniffio/default.nix b/nixpkgs/pkgs/development/python-modules/sniffio/default.nix
index 9893bc5828a0..f5674c09e021 100644
--- a/nixpkgs/pkgs/development/python-modules/sniffio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sniffio/default.nix
@@ -1,26 +1,27 @@
 { buildPythonPackage, lib, fetchPypi, glibcLocales, isPy3k, contextvars
-, pythonOlder
+, pythonOlder, pytest, curio
 }:
 
 buildPythonPackage rec {
   pname = "sniffio";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1dzb0nx3m1hpjgsv6s6w5ac2jcmywcz6gqnfkw8rwz1vkr1836rf";
+    sha256 = "8e3810100f69fe0edd463d02ad407112542a11ffdc29f67db2bf3771afb87a21";
   };
 
-  # breaks with the following error:
-  # > TypeError: 'encoding' is an invalid keyword argument for this function
   disabled = !isPy3k;
 
   buildInputs = [ glibcLocales ];
 
   propagatedBuildInputs = lib.optionals (pythonOlder "3.7") [ contextvars ];
 
-  # no tests distributed with PyPI
-  doCheck = false;
+  checkInputs = [ pytest curio ];
+
+  checkPhase = ''
+    pytest
+  '';
 
   meta = with lib; {
     homepage = https://github.com/python-trio/sniffio;
diff --git a/nixpkgs/pkgs/development/python-modules/sparse/default.nix b/nixpkgs/pkgs/development/python-modules/sparse/default.nix
index f08d8c47c826..168c491f7ef8 100644
--- a/nixpkgs/pkgs/development/python-modules/sparse/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sparse/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, isPy3k
 , numpy
 , scipy
 , numba
@@ -11,6 +12,8 @@ buildPythonPackage rec {
   pname = "sparse";
   version = "0.7.0";
 
+  disabled = !isPy3k;
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "0ija4pl8wg36ldsdv5jmqr5i75qi17vijcwwf2jdn1k15kqg35j4";
diff --git a/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix b/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix
new file mode 100644
index 000000000000..a3aaa942a9be
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildPythonPackage, fetchPypi, cloudpickle, ipykernel, wurlitzer,
+  jupyter_client, pyzmq }:
+
+buildPythonPackage rec {
+  pname = "spyder-kernels";
+  version = "0.4.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0g3754s71cnh7kygps6gbzrhs5gb47p3pblr7hcvxk1mzl3xw94r";
+  };
+
+  propagatedBuildInputs = [
+    cloudpickle
+    ipykernel
+    wurlitzer
+    jupyter_client
+    pyzmq
+  ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Jupyter kernels for Spyder's console";
+    homepage = "https://github.com/spyder-ide/spyder-kernels";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/spyder/default.nix b/nixpkgs/pkgs/development/python-modules/spyder/default.nix
new file mode 100644
index 000000000000..406cd6e8627f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/spyder/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, buildPythonPackage, fetchPypi, makeDesktopItem, jedi, pycodestyle,
+  psutil, pyflakes, rope, numpy, scipy, matplotlib, pylint, keyring, numpydoc,
+  qtconsole, qtawesome, nbconvert, mccabe, pyopengl, cloudpickle, pygments,
+  spyder-kernels, qtpy, pyzmq, chardet }:
+
+buildPythonPackage rec {
+  pname = "spyder";
+  version = "3.3.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1fa5yhw0sjk5qydydp76scyxd8lvyciknq0vajnq0mxhhvfig3ra";
+  };
+
+  propagatedBuildInputs = [
+    jedi pycodestyle psutil pyflakes rope numpy scipy matplotlib pylint keyring
+    numpydoc qtconsole qtawesome nbconvert mccabe pyopengl cloudpickle spyder-kernels
+    pygments qtpy pyzmq chardet
+  ];
+
+  # There is no test for spyder
+  doCheck = false;
+
+  desktopItem = makeDesktopItem {
+    name = "Spyder";
+    exec = "spyder";
+    icon = "spyder";
+    comment = "Scientific Python Development Environment";
+    desktopName = "Spyder";
+    genericName = "Python IDE";
+    categories = "Application;Development;Editor;IDE;";
+  };
+
+  postPatch = ''
+    # remove dependency on pyqtwebengine
+    # this is still part of the pyqt 5.11 version we have in nixpkgs
+    sed -i /pyqtwebengine/d setup.py
+  '';
+
+  # Create desktop item
+  postInstall = ''
+    mkdir -p $out/share/icons
+    cp spyder/images/spyder.svg $out/share/icons
+    cp -r $desktopItem/share/applications/ $out/share
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scientific python development environment";
+    longDescription = ''
+      Spyder (previously known as Pydee) is a powerful interactive development
+      environment for the Python language with advanced editing, interactive
+      testing, debugging and introspection features.
+    '';
+    homepage = "https://github.com/spyder-ide/spyder/";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/ssdp/default.nix b/nixpkgs/pkgs/development/python-modules/ssdp/default.nix
new file mode 100644
index 000000000000..36cf33d8c252
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ssdp/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, pbr
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "ssdp";
+  version = "1.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0yhjqs9jyvwmba8fi72xfi9k8pxy11wkz4iywayrg71ka3la49bk";
+  };
+
+  buildInputs = [ pbr ];
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [ ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/codingjoe/ssdp;
+    description = "Python asyncio library for Simple Service Discovery Protocol (SSDP).";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/stravalib/default.nix b/nixpkgs/pkgs/development/python-modules/stravalib/default.nix
new file mode 100644
index 000000000000..e8e4eb4bf35b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/stravalib/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, nose
+, arrow
+, requests
+, units
+, pytz
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "stravalib";
+  version = "0.10.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "76db248b24cbd6c51cf93b475d8a8df04ec4b6c6287dca244e47f37a433276d7";
+  };
+
+  checkInputs = [
+    nose
+  ];
+
+  propagatedBuildInputs = [
+    arrow
+    requests
+    units
+    pytz
+    six
+  ];
+
+  # tests require network access
+  # testing strava api
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python library for interacting with Strava v3 REST API";
+    homepage = https://github.com/hozn/stravalib;
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/streamz/default.nix b/nixpkgs/pkgs/development/python-modules/streamz/default.nix
index 87de719025dc..5360b951de26 100644
--- a/nixpkgs/pkgs/development/python-modules/streamz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/streamz/default.nix
@@ -31,7 +31,8 @@ buildPythonPackage rec {
 
   # Disable test_tcp_async because fails on sandbox build
   checkPhase = ''
-    pytest --deselect=streamz/tests/test_sources.py::test_tcp_async
+    pytest --deselect=streamz/tests/test_sources.py::test_tcp_async \
+      --deselect=streamz/tests/test_sources.py::test_tcp
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/strict-rfc3339/default.nix b/nixpkgs/pkgs/development/python-modules/strict-rfc3339/default.nix
new file mode 100644
index 000000000000..7f45f326903a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/strict-rfc3339/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "strict-rfc3339";
+  version = "0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/danielrichman/strict-rfc3339";
+    license = licenses.gpl3;
+    description = "Strict, simple, lightweight RFC3339 functions";
+    maintainers = with maintainers; [ vanschelven ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/stripe/default.nix b/nixpkgs/pkgs/development/python-modules/stripe/default.nix
index e69414735888..180ff7580806 100644
--- a/nixpkgs/pkgs/development/python-modules/stripe/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/stripe/default.nix
@@ -1,9 +1,8 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k
-, unittest2, mock, requests, simplejson }:
+{ lib, buildPythonPackage, fetchPypi, requests, toml, pytest, pytestcov, pytest-mock, pytest_xdist }:
 
 buildPythonPackage rec {
   pname = "stripe";
-  version = "2.27.0";
+  version = "2.29.3";
 
   # Tests require network connectivity and there's no easy way to disable
   # them. ~ C.
@@ -11,12 +10,16 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0pvypngbmiji92nfs28bmiyl7brsm6cj18d9vhnwyydnzn3nlkl1";
+    sha256 = "73f9af72ef8125e0d1c713177d006f1cbe95602beb3e10cb0b0a4ae358d1ae86";
   };
 
-  checkInputs = [ unittest2 mock ];
+  postPatch = ''
+    substituteInPlace setup.py --replace "toml>=0.9,<0.10" "toml>=0.9"
+  '';
 
-  propagatedBuildInputs = [ requests ] ++ lib.optional (!isPy3k) simplejson;
+  propagatedBuildInputs = [ toml requests ];
+
+  checkInputs = [ pytest pytestcov pytest-mock pytest_xdist ];
 
   meta = with lib; {
     description = "Stripe Python bindings";
diff --git a/nixpkgs/pkgs/development/python-modules/symengine/default.nix b/nixpkgs/pkgs/development/python-modules/symengine/default.nix
new file mode 100644
index 000000000000..a2c0578f0c7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/symengine/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, cython
+, cmake
+, symengine
+, pytest
+, sympy
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "symengine";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "symengine";
+    repo = "symengine.py";
+    rev = "v${version}";
+    sha256 = "07i9rwxphi4zgwc7y6f6qvq73iym2cx4k1bpd7rmd3wkpgrrfxqx";
+  };
+
+  postConfigure = ''
+    substituteInPlace setup.py \
+      --replace "\"cmake\"" "\"${cmake}/bin/cmake\""
+
+    substituteInPlace cmake/FindCython.cmake \
+      --replace "SET(CYTHON_BIN cython" "SET(CYTHON_BIN ${cython}/bin/cython"
+  '';
+
+  buildInputs = [ cython cmake ];
+
+  checkInputs = [ pytest sympy ];
+
+  setupPyBuildFlags = [
+    "--symengine-dir=${symengine}/"
+    "--define=\"CYTHON_BIN=${cython}/bin/cython\""
+  ];
+
+  checkPhase = ''
+    mkdir empty
+    cd empty
+    ${python.interpreter} ../bin/test_python.py
+  '';
+
+  meta = with lib; {
+    description = "Python library providing wrappers to SymEngine";
+    homepage = https://github.com/symengine/symengine.py;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/tld/default.nix b/nixpkgs/pkgs/development/python-modules/tld/default.nix
new file mode 100644
index 000000000000..3a21ce57fe7a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tld/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchPypi, python }:
+
+python.pkgs.buildPythonPackage rec {
+  pname   = "tld";
+  version = "0.9.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0i0prgwrmm157h6fa5bx9wm0m70qq2nhzp743374a94p9s766rpp";
+  };
+
+  propagatedBuildInputs = with python.pkgs; [ six ];
+  checkInputs = with python.pkgs; [ factory_boy faker pytest pytestcov tox ];
+
+  # https://github.com/barseghyanartur/tld/issues/54
+  disabledTests = stdenv.lib.concatMapStringsSep " and " (s: "not " + s) ([
+    "test_1_update_tld_names"
+    "test_1_update_tld_names_command"
+    "test_2_update_tld_names_module"
+  ]);
+
+  checkPhase = ''
+      export PATH="$PATH:$out/bin"
+      py.test -k '${disabledTests}'
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/barseghyanartur/tld;
+    description = "Extracts the top level domain (TLD) from the URL given";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ genesis ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/python-modules/trezor/default.nix b/nixpkgs/pkgs/development/python-modules/trezor/default.nix
index 4a2920418f1c..589878d69f52 100644
--- a/nixpkgs/pkgs/development/python-modules/trezor/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/trezor/default.nix
@@ -14,13 +14,13 @@
 
 buildPythonPackage rec {
   pname = "trezor";
-  version = "0.11.2";
+  version = "0.11.3";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a6f4b47b37a21247535fc43411cb70a8c61ef0a5a2dfee668bd05611e2741fb8";
+    sha256 = "c79a500e90d003073c8060d319dceb042caaba9472f13990c77ed37d04a82108";
   };
 
   propagatedBuildInputs = [ typing-extensions protobuf hidapi ecdsa mnemonic requests pyblake2 click construct libusb1 rlp ];
@@ -43,6 +43,6 @@ buildPythonPackage rec {
     description = "Python library for communicating with TREZOR Bitcoin Hardware Wallet";
     homepage = https://github.com/trezor/python-trezor;
     license = lib.licenses.gpl3;
-    maintainers = with lib.maintainers; [ np prusnak ];
+    maintainers = with lib.maintainers; [ np prusnak mmahut ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/twilio/default.nix b/nixpkgs/pkgs/development/python-modules/twilio/default.nix
index f8fbf8e49f4a..d6fed4b9007f 100644
--- a/nixpkgs/pkgs/development/python-modules/twilio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/twilio/default.nix
@@ -3,13 +3,13 @@
 
 buildPythonPackage rec {
   pname = "twilio";
-  version = "6.26.2";
+  version = "6.27.1";
   # tests not included in PyPi, so fetch from github instead
   src = fetchFromGitHub {
     owner = "twilio";
     repo = "twilio-python";
     rev = version;
-    sha256 = "0z0ahbckh5calwgkmd493znixclhjjrly8jfymhwlw6g0g79kavw";
+    sha256 = "1yd4cpl4y01d3a956gsdg13vx02rb176wyh7mzr0aznkp38nyw5w";
   };
 
   buildInputs = [ nose mock ];
diff --git a/nixpkgs/pkgs/development/python-modules/typesentry/default.nix b/nixpkgs/pkgs/development/python-modules/typesentry/default.nix
new file mode 100644
index 000000000000..3aeb84113c2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/typesentry/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, colorama
+, pytest
+, pytestcov
+}:
+
+buildPythonPackage rec {
+  pname = "typesentry";
+  version = "0.2.7";
+
+  # Only wheel distribution is available on PyPi.
+  src = fetchFromGitHub {
+    owner = "h2oai";
+    repo = "typesentry";
+    rev = "0ca8ed0e62d15ffe430545e7648c9a9b2547b49c";
+    sha256 = "0z615f9dxaab3bay3v27j7q99qm6l6q8xv872yvsp87sxj7apfki";
+  };
+
+  propagatedBuildInputs = [ colorama ];
+  checkInputs = [ pytest pytestcov ];
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Python 2.7 & 3.5+ runtime type-checker";
+    homepage = "https://github.com/h2oai/typesentry";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/uncertainties/default.nix b/nixpkgs/pkgs/development/python-modules/uncertainties/default.nix
index 2d7fdaa7eca5..6e357f307e3a 100644
--- a/nixpkgs/pkgs/development/python-modules/uncertainties/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uncertainties/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "uncertainties";
-  version = "3.0.3";
+  version = "3.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1hp00k10d5n69s446flss8b4rd02wq8dscvakv7ylfyf2p8y564s";
+    sha256 = "18b184110cbe31303d25a7bc7f73d51b9cb4e15563cb9aa25ccfbd0ebe07d448";
   };
 
   buildInputs = [ nose numpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/units/default.nix b/nixpkgs/pkgs/development/python-modules/units/default.nix
new file mode 100644
index 000000000000..02a3fc940aee
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/units/default.nix
@@ -0,0 +1,21 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "units";
+  version = "0.07";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "43eb3e073e1b11289df7b1c3f184b5b917ccad178b717b03933298716f200e14";
+  };
+
+  meta = with lib; {
+    description = "Python support for quantities with units";
+    homepage = https://bitbucket.org/adonohue/units/;
+    license = licenses.psfl;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/uranium/default.nix b/nixpkgs/pkgs/development/python-modules/uranium/default.nix
index b4081870fbe6..6365846bd263 100644
--- a/nixpkgs/pkgs/development/python-modules/uranium/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uranium/default.nix
@@ -2,7 +2,7 @@
 , pyqt5, numpy, scipy, shapely, libarcus, doxygen, gettext, pythonOlder }:
 
 buildPythonPackage rec {
-  version = "4.0.0";
+  version = "4.1.0";
   pname = "uranium";
   format = "other";
 
@@ -10,7 +10,7 @@ buildPythonPackage rec {
     owner = "Ultimaker";
     repo = "Uranium";
     rev = version;
-    sha256 = "1dzn064np76q0xpypcwsa7k7arzihg79xw1pgcvdizk9kzc6rw3y";
+    sha256 = "0vjlir9rd3xdlb8icdcr51qjmnh8nny6ajycria9idccriaqficj";
   };
 
   disabled = pythonOlder "3.5.0";
diff --git a/nixpkgs/pkgs/development/python-modules/weasyprint/default.nix b/nixpkgs/pkgs/development/python-modules/weasyprint/default.nix
new file mode 100644
index 000000000000..7dc09d58aad6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/weasyprint/default.nix
@@ -0,0 +1,67 @@
+{ buildPythonPackage,
+  fetchPypi,
+  cairosvg,
+  pyphen,
+  cffi,
+  cssselect,
+  lxml,
+  html5lib,
+  tinycss,
+  pygobject2,
+  glib,
+  pango,
+  fontconfig,
+  stdenv,
+  pytest,
+  pytestrunner,
+  pytest-isort,
+  pytest-flake8,
+  pytestcov,
+  isPy3k,
+  substituteAll
+}:
+
+buildPythonPackage rec {
+  pname = "weasyprint";
+  version = "47";
+  disabled = !isPy3k;
+
+  # ignore failing pytest
+  checkPhase = "pytest -k 'not test_font_stretch'";
+
+  # ignore failing flake8-test
+  prePatch = ''
+    substituteInPlace setup.cfg \
+        --replace '[tool:pytest]' '[tool:pytest]\nflake8-ignore = E501'
+  '';
+
+  checkInputs = [ pytest pytestrunner pytest-isort pytest-flake8 pytestcov ];
+
+  FONTCONFIG_FILE = "${fontconfig.out}/etc/fonts/fonts.conf";
+
+  propagatedBuildInputs = [ cairosvg pyphen cffi cssselect lxml html5lib tinycss pygobject2 ];
+
+  patches = [
+    (substituteAll {
+      src = ./library-paths.patch;
+      fontconfig = "${fontconfig.lib}/lib/libfontconfig${stdenv.hostPlatform.extensions.sharedLibrary}";
+      pangoft2 = "${pango.out}/lib/libpangoft2-1.0${stdenv.hostPlatform.extensions.sharedLibrary}";
+      gobject = "${glib.out}/lib/libgobject-2.0${stdenv.hostPlatform.extensions.sharedLibrary}";
+      pango = "${pango.out}/lib/libpango-1.0${stdenv.hostPlatform.extensions.sharedLibrary}";
+      pangocairo = "${pango.out}/lib/libpangocairo-1.0${stdenv.hostPlatform.extensions.sharedLibrary}";
+    })
+  ];
+
+  src = fetchPypi {
+    inherit version;
+    pname = "WeasyPrint";
+    sha256 = "0hd1zwrkfnj7g0jaaf6jvarlj6l5imar6ar78zxdgv17a3s3k3dg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://weasyprint.org/;
+    description = "Converts web documents to PDF";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/weasyprint/library-paths.patch b/nixpkgs/pkgs/development/python-modules/weasyprint/library-paths.patch
new file mode 100644
index 000000000000..eabbdbdcd6ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/weasyprint/library-paths.patch
@@ -0,0 +1,38 @@
+diff --git a/weasyprint/fonts.py b/weasyprint/fonts.py
+index 377716c1..2016e01c 100644
+--- a/weasyprint/fonts.py
++++ b/weasyprint/fonts.py
+@@ -48,11 +48,8 @@ else:
+     # with OSError: dlopen() failed to load a library: cairo / cairo-2
+     # So let's hope we find the same file as cairo already did ;)
+     # Same applies to pangocairo requiring pangoft2
+-    fontconfig = dlopen(ffi, 'fontconfig', 'libfontconfig',
+-                        'libfontconfig-1.dll',
+-                        'libfontconfig.so.1', 'libfontconfig-1.dylib')
+-    pangoft2 = dlopen(ffi, 'pangoft2-1.0', 'libpangoft2-1.0-0',
+-                      'libpangoft2-1.0.so', 'libpangoft2-1.0.dylib')
++    fontconfig = dlopen(ffi, '@fontconfig@')
++    pangoft2 = dlopen(ffi, '@pangoft2@')
+ 
+     ffi.cdef('''
+         // FontConfig
+diff --git a/weasyprint/text.py b/weasyprint/text.py
+index 035074e9..08e40395 100644
+--- a/weasyprint/text.py
++++ b/weasyprint/text.py
+@@ -243,12 +243,9 @@ def dlopen(ffi, *names):
+     return ffi.dlopen(names[0])  # pragma: no cover
+ 
+ 
+-gobject = dlopen(ffi, 'gobject-2.0', 'libgobject-2.0-0', 'libgobject-2.0.so',
+-                 'libgobject-2.0.dylib')
+-pango = dlopen(ffi, 'pango-1.0', 'libpango-1.0-0', 'libpango-1.0.so',
+-               'libpango-1.0.dylib')
+-pangocairo = dlopen(ffi, 'pangocairo-1.0', 'libpangocairo-1.0-0',
+-                    'libpangocairo-1.0.so', 'libpangocairo-1.0.dylib')
++gobject = dlopen(ffi, '@gobject@')
++pango = dlopen(ffi, '@pango@')
++pangocairo = dlopen(ffi, '@pangocairo@')
+ 
+ gobject.g_type_init()
+ 
diff --git a/nixpkgs/pkgs/development/python-modules/xgboost/default.nix b/nixpkgs/pkgs/development/python-modules/xgboost/default.nix
index d9b8fc892c16..559789149736 100644
--- a/nixpkgs/pkgs/development/python-modules/xgboost/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/xgboost/default.nix
@@ -1,9 +1,15 @@
 { stdenv
 , buildPythonPackage
+, pytest
 , nose
 , scipy
+, scikitlearn
 , xgboost
 , substituteAll
+, pandas
+, matplotlib
+, graphviz
+, datatable
 }:
 
 buildPythonPackage rec {
@@ -21,7 +27,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ scipy ];
   buildInputs = [ xgboost ];
-  checkInputs = [ nose ];
+  checkInputs = [ nose pytest scikitlearn pandas matplotlib graphviz datatable ];
 
   checkPhase = ''
     ln -sf ../demo .
diff --git a/nixpkgs/pkgs/development/python-modules/xgboost/lib-path-for-python.patch b/nixpkgs/pkgs/development/python-modules/xgboost/lib-path-for-python.patch
index 68b39dee53e9..86c628c694bf 100644
--- a/nixpkgs/pkgs/development/python-modules/xgboost/lib-path-for-python.patch
+++ b/nixpkgs/pkgs/development/python-modules/xgboost/lib-path-for-python.patch
@@ -1,24 +1,3 @@
-diff --git a/python-package/setup.py b/python-package/setup.py
-index e6c3386f..4ed0a8bd 100644
---- a/python-package/setup.py
-+++ b/python-package/setup.py
-@@ -16,8 +16,6 @@ libpath_py = os.path.join(CURRENT_DIR, 'xgboost/libpath.py')
- libpath = {'__file__': libpath_py}
- exec(compile(open(libpath_py, "rb").read(), libpath_py, 'exec'), libpath, libpath)
- 
--LIB_PATH = [os.path.relpath(libfile, CURRENT_DIR) for libfile in libpath['find_lib_path']()]
--print("Install libxgboost from: %s" % LIB_PATH)
- # Please use setup_pip.py for generating and deploying pip installation
- # detailed instruction in setup_pip.py
- setup(name='xgboost',
-@@ -35,7 +33,6 @@ setup(name='xgboost',
-       # this will use MANIFEST.in during install where we specify additional files,
-       # this is the golden line
-       include_package_data=True,
--      data_files=[('xgboost', LIB_PATH)],
-       license='Apache-2.0',
-       classifiers=['License :: OSI Approved :: Apache Software License'],
-       url='https://github.com/dmlc/xgboost')
 diff --git a/python-package/xgboost/libpath.py b/python-package/xgboost/libpath.py
 index d87922c0..859a30fb 100644
 --- a/python-package/xgboost/libpath.py
diff --git a/nixpkgs/pkgs/development/python-modules/xhtml2pdf/default.nix b/nixpkgs/pkgs/development/python-modules/xhtml2pdf/default.nix
new file mode 100644
index 000000000000..d5a666856464
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/xhtml2pdf/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pillow
+, html5lib
+, pypdf2
+, reportlab
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "xhtml2pdf";
+  version = "0.2.3";
+
+  propagatedBuildInputs = [pillow html5lib pypdf2 reportlab six];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "10kg8cmn7zgql2lb6cfmqj94sa0jkraksv3lc4kvpn58sxw7x8w6";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A PDF generator using HTML and CSS";
+    homepage = https://github.com/xhtml2pdf/xhtml2pdf;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/python-modules/zxcvbn-python/default.nix b/nixpkgs/pkgs/development/python-modules/zxcvbn-python/default.nix
deleted file mode 100644
index 94e8fc977e06..000000000000
--- a/nixpkgs/pkgs/development/python-modules/zxcvbn-python/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, pytest_3 }:
-
-buildPythonPackage rec {
-  pname = "zxcvbn-python";
-  version = "4.4.27";
-
-  src = fetchFromGitHub {
-    owner = "dwolfhub";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "0w0sx9ssjks8da973cdv5xi87yjsf038jqxmzj2y26xvpyjsg2v2";
-  };
-
-  checkInputs = [
-    pytest_3
-  ];
-
-  meta = {
-    description = "Python implementation of Dropbox's realistic password strength estimator, zxcvbn";
-    homepage = https://github.com/dwolfhub/zxcvbn-python;
-    license = with lib.licenses; [ mit ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/zxcvbn/default.nix b/nixpkgs/pkgs/development/python-modules/zxcvbn/default.nix
new file mode 100644
index 000000000000..8c9a0af142cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/zxcvbn/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildPythonPackage, fetchFromGitHub, pytest }:
+
+buildPythonPackage rec {
+  pname = "zxcvbn";
+  version = "4.4.28";
+
+  # no tests included in PyPI tarball
+  src = fetchFromGitHub {
+    owner = "dwolfhub";
+    repo = "zxcvbn-python";
+    rev = "45afdf0d3dd8477bc7e457629bb4bc9680794cd7"; # not tagged in repository
+    sha256 = "0w0sx9ssjks8da973cdv5xi87yjsf038jqxmzj2y26xvpyjsg2v2";
+  };
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Python implementation of Dropbox's realistic password strength estimator";
+    homepage = "https://github.com/dwolfhub/zxcvbn-python";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}