about summary refs log tree commit diff
path: root/pkgs/development/python-modules
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules')
-rw-r--r--pkgs/development/python-modules/Theano/default.nix44
-rw-r--r--pkgs/development/python-modules/asana/default.nix11
-rw-r--r--pkgs/development/python-modules/asgiref/default.nix8
-rw-r--r--pkgs/development/python-modules/cli-helpers/default.nix59
-rw-r--r--pkgs/development/python-modules/docrep/default.nix33
-rw-r--r--pkgs/development/python-modules/fire/default.nix47
-rw-r--r--pkgs/development/python-modules/ipython/5.nix11
-rw-r--r--pkgs/development/python-modules/jupyterlab/default.nix6
-rw-r--r--pkgs/development/python-modules/libvirt/default.nix4
-rw-r--r--pkgs/development/python-modules/marionette-harness/mozlog.nix2
-rw-r--r--pkgs/development/python-modules/mozterm/default.nix4
-rw-r--r--pkgs/development/python-modules/pyfxa/default.nix32
-rw-r--r--pkgs/development/python-modules/pymysql/default.nix27
-rw-r--r--pkgs/development/python-modules/pysrim/default.nix30
-rw-r--r--pkgs/development/python-modules/python-language-server/default.nix45
-rw-r--r--pkgs/development/python-modules/pytidylib/default.nix34
-rw-r--r--pkgs/development/python-modules/robotframework/default.nix10
-rw-r--r--pkgs/development/python-modules/robotsuite/default.nix9
-rw-r--r--pkgs/development/python-modules/scapy/default.nix26
-rw-r--r--pkgs/development/python-modules/selenium/default.nix11
-rw-r--r--pkgs/development/python-modules/singledispatch/default.nix27
-rw-r--r--pkgs/development/python-modules/sortedcontainers/default.nix24
-rw-r--r--pkgs/development/python-modules/tensorflow-tensorboard/default.nix9
-rw-r--r--pkgs/development/python-modules/tensorflow/bin.nix24
-rw-r--r--pkgs/development/python-modules/tensorflow/prefetcher.sh3
-rw-r--r--pkgs/development/python-modules/tensorflow/tf1.9.0-hashes.nix34
-rw-r--r--pkgs/development/python-modules/tokenserver/default.nix47
27 files changed, 511 insertions, 110 deletions
diff --git a/pkgs/development/python-modules/Theano/default.nix b/pkgs/development/python-modules/Theano/default.nix
index e2b31cdda794..793488f0b136 100644
--- a/pkgs/development/python-modules/Theano/default.nix
+++ b/pkgs/development/python-modules/Theano/default.nix
@@ -1,8 +1,8 @@
 { stdenv
+, runCommandCC
 , lib
 , fetchPypi
 , gcc
-, writeScriptBin
 , buildPythonPackage
 , isPyPy
 , pythonOlder
@@ -24,19 +24,24 @@ assert cudaSupport -> nvidia_x11 != null
                    && cudnn != null;
 
 let
-  extraFlags =
-    lib.optionals cudaSupport [ "-I ${cudatoolkit}/include" "-L ${cudatoolkit}/lib" ]
-    ++ lib.optionals cudnnSupport [ "-I ${cudnn}/include" "-L ${cudnn}/lib" ]
-    ++ lib.optionals cudaSupport [ "-I ${libgpuarray}/include" "-L ${libgpuarray}/lib" ];
+  wrapped = command: buildTop: buildInputs:
+    runCommandCC "${command}-wrapped" { inherit buildInputs; } ''
+      type -P '${command}' || { echo '${command}: not found'; exit 1; }
+      cat > "$out" <<EOF
+      #!$(type -P bash)
+      $(declare -xp | sed -e '/^[^=]\+="\('"''${NIX_STORE//\//\\/}"'\|[^\/]\)/!d')
+      declare -x NIX_BUILD_TOP="${buildTop}"
+      $(type -P '${command}') "\$@"
+      EOF
+      chmod +x "$out"
+    '';
 
-  gcc_ = writeScriptBin "g++" ''
-    #!${stdenv.shell}
-    export NIX_CC_WRAPPER_${stdenv.cc.infixSalt}_TARGET_HOST=1
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE ${toString extraFlags}"
-    exec ${gcc}/bin/g++ "$@"
-  '';
+  # Theano spews warnings and disabled flags if the compiler isn't named g++
+  cxx_compiler = wrapped "g++" "\\$HOME/.theano"
+    (    stdenv.lib.optional cudaSupport libgpuarray_
+      ++ stdenv.lib.optional cudnnSupport cudnn );
 
-  libgpuarray_ = libgpuarray.override { inherit cudaSupport; };
+  libgpuarray_ = libgpuarray.override { inherit cudaSupport cudatoolkit; };
 
 in buildPythonPackage rec {
   pname = "Theano";
@@ -50,12 +55,15 @@ in buildPythonPackage rec {
   };
 
   postPatch = ''
-    sed -i 's,g++,${gcc_}/bin/g++,g' theano/configdefaults.py
-  '' + lib.optionalString cudnnSupport ''
-    sed -i \
-      -e "s,ctypes.util.find_library('cudnn'),'${cudnn}/lib/libcudnn.so',g" \
-      -e "s/= _dnn_check_compile()/= (True, None)/g" \
-      theano/gpuarray/dnn.py
+    substituteInPlace theano/configdefaults.py \
+      --replace 'StrParam(param, is_valid=warn_cxx)' 'StrParam('\'''${cxx_compiler}'\''', is_valid=warn_cxx)' \
+      --replace 'rc == 0 and config.cxx != ""' 'config.cxx != ""'
+  '' + stdenv.lib.optionalString cudaSupport ''
+    substituteInPlace theano/configdefaults.py \
+      --replace 'StrParam(get_cuda_root)' 'StrParam('\'''${cudatoolkit}'\''')'
+  '' + stdenv.lib.optionalString cudnnSupport ''
+    substituteInPlace theano/configdefaults.py \
+      --replace 'StrParam(default_dnn_base_path)' 'StrParam('\'''${cudnn}'\''')'
   '';
 
   preCheck = ''
diff --git a/pkgs/development/python-modules/asana/default.nix b/pkgs/development/python-modules/asana/default.nix
index 2fbe4932beda..19140925595b 100644
--- a/pkgs/development/python-modules/asana/default.nix
+++ b/pkgs/development/python-modules/asana/default.nix
@@ -4,22 +4,21 @@
 
 buildPythonPackage rec {
   pname = "asana";
-  version = "0.7.0";
+  version = "0.7.1";
 
   src = fetchFromGitHub {
     owner = "asana";
     repo = "python-asana";
     rev = "v${version}";
-    sha256 = "0786y3wxqxxhsb0kkpx4bfzif3dhvv3dmm6vnq58iyj94862kpxf";
+    sha256 = "0vmpy4j1n54gkkg0l8bhw0xf4yby5kqzxnsv07cjc2w38snj5vy1";
   };
 
   checkInputs = [ pytest responses ];
   propagatedBuildInputs = [ requests requests_oauthlib six ];
 
-  patchPhase = ''
-    echo > requirements.txt
-    sed -i "s/requests~=2.9.1/requests >=2.9.1/" setup.py
-    sed -i "s/requests_oauthlib~=0.6.1/requests_oauthlib >=0.6.1/" setup.py
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "requests_oauthlib >= 0.8.0, == 0.8.*" "requests_oauthlib>=0.8.0<2.0"
   '';
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/asgiref/default.nix b/pkgs/development/python-modules/asgiref/default.nix
index a556cd3c87f2..155ddf8c9f8b 100644
--- a/pkgs/development/python-modules/asgiref/default.nix
+++ b/pkgs/development/python-modules/asgiref/default.nix
@@ -1,14 +1,16 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub, async-timeout, pytest, pytest-asyncio }:
+{ stdenv, buildPythonPackage, pythonOlder, fetchFromGitHub, async-timeout, pytest, pytest-asyncio }:
 buildPythonPackage rec {
-  version = "2.2.0";
+  version = "2.3.2";
   pname = "asgiref";
 
+  disabled = pythonOlder "3.5";
+
   # PyPI tarball doesn't include tests directory
   src = fetchFromGitHub {
     owner = "django";
     repo = pname;
     rev = version;
-    sha256 = "0jsdkgwzswm1jbfm6d100yfvfzpic8v6ysydcnn798bbpwclj8ip";
+    sha256 = "1ljymmcscyp3bz33kjbhf99k04fbama87vg4069gbgj6lnxjpzav";
   };
 
   propagatedBuildInputs = [ async-timeout ];
diff --git a/pkgs/development/python-modules/cli-helpers/default.nix b/pkgs/development/python-modules/cli-helpers/default.nix
new file mode 100644
index 000000000000..69b811a94f4f
--- /dev/null
+++ b/pkgs/development/python-modules/cli-helpers/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, terminaltables
+, tabulate
+, backports_csv
+, wcwidth
+, pytest
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "cli_helpers";
+  version = "1.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1z5rqm8pznj6bvivm2al8rsxm82rai8hc9bqrgh3ksnbzg2kfy7p";
+  };
+
+  propagatedBuildInputs = [
+    terminaltables
+    tabulate
+    wcwidth
+  ] ++ (lib.optionals isPy27 [ backports_csv ]);
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with lib; {
+    description = "Python helpers for common CLI tasks";
+    longDescription = ''
+      CLI Helpers is a Python package that makes it easy to perform common
+      tasks when building command-line apps. It's a helper library for
+      command-line interfaces.
+
+      Libraries like Click and Python Prompt Toolkit are amazing tools that
+      help you create quality apps. CLI Helpers complements these libraries by
+      wrapping up common tasks in simple interfaces.
+
+      CLI Helpers is not focused on your app's design pattern or framework --
+      you can use it on its own or in combination with other libraries. It's
+      lightweight and easy to extend.
+
+      What's included in CLI Helpers?
+
+      - Prettyprinting of tabular data with custom pre-processing
+      - [in progress] config file reading/writing
+
+      Read the documentation at http://cli-helpers.rtfd.io
+    '';
+    homepage = https://cli-helpers.readthedocs.io/en/stable/;
+    license = licenses.bsd3 ;
+    maintainers = [ maintainers.kalbasit ];
+  };
+}
diff --git a/pkgs/development/python-modules/docrep/default.nix b/pkgs/development/python-modules/docrep/default.nix
new file mode 100644
index 000000000000..e2bde245a678
--- /dev/null
+++ b/pkgs/development/python-modules/docrep/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytest
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "docrep";
+  version = "0.2.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7d195b6dfcf4efe5cb65402b6c6f6d7e6db77ce255887fae32c9a8288a022659";
+  };
+
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [ six ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  # tests not packaged with PyPi download
+  doCheck = false;
+
+  meta = {
+    description = "Python package for docstring repetition";
+    homepage = https://github.com/Chilipp/docrep;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/fire/default.nix b/pkgs/development/python-modules/fire/default.nix
new file mode 100644
index 000000000000..70538407f2ee
--- /dev/null
+++ b/pkgs/development/python-modules/fire/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, buildPythonPackage, fetchFromGitHub, six, hypothesis, mock
+, python-Levenshtein, pytest }:
+
+buildPythonPackage rec {
+  pname = "fire";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "python-fire";
+    rev = "v${version}";
+    sha256 = "0kdcmzr3sgzjsw5fmvdylgrn8akqjbs433jbgqzp498njl9cc6qx";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  checkInputs = [ hypothesis mock python-Levenshtein pytest ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+
+  meta = with stdenv.lib; {
+    description = "A library for automatically generating command line interfaces";
+    longDescription = ''
+      Python Fire is a library for automatically generating command line
+      interfaces (CLIs) from absolutely any Python object.
+
+      * Python Fire is a simple way to create a CLI in Python.
+
+      * Python Fire is a helpful tool for developing and debugging
+        Python code.
+
+      * Python Fire helps with exploring existing code or turning other
+        people's code into a CLI.
+
+      * Python Fire makes transitioning between Bash and Python easier.
+
+      * Python Fire makes using a Python REPL easier by setting up the
+        REPL with the modules and variables you'll need already imported
+        and created.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/pkgs/development/python-modules/ipython/5.nix b/pkgs/development/python-modules/ipython/5.nix
index f2066fee2a4a..36f581c98afb 100644
--- a/pkgs/development/python-modules/ipython/5.nix
+++ b/pkgs/development/python-modules/ipython/5.nix
@@ -2,6 +2,7 @@
 , stdenv
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 # Build dependencies
 , glibcLocales
 # Test dependencies
@@ -36,6 +37,16 @@ buildPythonPackage rec {
     substituteInPlace setup.py --replace "'gnureadline'" " "
   '';
 
+  patches = [
+    # improve cython support, needed by sage, accepted upstream
+    # https://github.com/ipython/ipython/pull/11139
+    (fetchpatch {
+      name = "signature-use-inspect.patch";
+      url = "https://github.com/ipython/ipython/commit/8d399b98d3ed5c765835594100c4d36fb2f739dc.patch";
+      sha256 = "1r7v9clwwbskmj4y160vcj6g0vzqbvnj4y1bm2n4bskafapm42g0";
+    })
+  ];
+
   buildInputs = [ glibcLocales ];
 
   checkInputs = [ nose pygments testpath ] ++ lib.optional isPy27 mock;
diff --git a/pkgs/development/python-modules/jupyterlab/default.nix b/pkgs/development/python-modules/jupyterlab/default.nix
index 64485085d1a8..e47fdfa15ba2 100644
--- a/pkgs/development/python-modules/jupyterlab/default.nix
+++ b/pkgs/development/python-modules/jupyterlab/default.nix
@@ -1,12 +1,12 @@
 { lib, buildPythonPackage, isPy3k, fetchPypi, ipython_genutils, jupyterlab_launcher, notebook }:
 buildPythonPackage rec {
   pname = "jupyterlab";
-  version = "0.32.1";
+  version = "0.33.7";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "88290656a2db2e38ef913a257ec283f3b5bd99144ed3d52899c9af7030077554";
+    sha256 = "ab9f7bcbc3b4e107897f368aa0527cdc1b4ccf0c370e218ae03ac1d75fac261c";
   };
 
   propagatedBuildInputs = [
@@ -26,6 +26,6 @@ buildPythonPackage rec {
     description = "Jupyter lab environment notebook server extension.";
     license = with licenses; [ bsd3 ];
     homepage = "http://jupyter.org/";
-    maintainers = with maintainers; [ zimbatm ];
+    maintainers = with maintainers; [ zimbatm costrouc ];
   };
 }
diff --git a/pkgs/development/python-modules/libvirt/default.nix b/pkgs/development/python-modules/libvirt/default.nix
index 26b42020fc34..71e9adf11d2d 100644
--- a/pkgs/development/python-modules/libvirt/default.nix
+++ b/pkgs/development/python-modules/libvirt/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "libvirt";
-  version = "4.5.0";
+  version = "4.6.0";
 
   src = assert version == libvirt.version; fetchgit {
     url = git://libvirt.org/libvirt-python.git;
     rev = "v${version}";
-    sha256 = "0w2rzkxv7jsq4670m0j5c6p4hpyi0r0ja6wd3wdvixcwc6hhx407";
+    sha256 = "0yrgibd5c9wy82ak8g9ykar6fma1wf7xzmmc47657lzm70m5av68";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/python-modules/marionette-harness/mozlog.nix b/pkgs/development/python-modules/marionette-harness/mozlog.nix
index ce24fd48dd4b..b8d0c077d664 100644
--- a/pkgs/development/python-modules/marionette-harness/mozlog.nix
+++ b/pkgs/development/python-modules/marionette-harness/mozlog.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "af3a3252bc58f8642a641601ba59096c22e4aa49cdc1ed4b0df2314f4f027f0d";
+    sha256 = "00x28z6diw06gakb5isbfha5z2n63yyncv4za303nsgzxvlihmx0";
   };
 
   propagatedBuildInputs = [ blessings mozterm six ];
diff --git a/pkgs/development/python-modules/mozterm/default.nix b/pkgs/development/python-modules/mozterm/default.nix
index 358b21893fa6..c7f2b4cbc349 100644
--- a/pkgs/development/python-modules/mozterm/default.nix
+++ b/pkgs/development/python-modules/mozterm/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k }:
+{ lib, buildPythonPackage, fetchPypi, isPy3k, six }:
 
 buildPythonPackage rec {
   pname = "mozterm";
@@ -7,6 +7,8 @@ buildPythonPackage rec {
   # name 'unicode' is not defined
   disabled = isPy3k;
 
+  propagatedBuildInputs = [six];
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "b1e91acec188de07c704dbb7b0100a7be5c1e06567b3beb67f6ea11d00a483a4";
diff --git a/pkgs/development/python-modules/pyfxa/default.nix b/pkgs/development/python-modules/pyfxa/default.nix
new file mode 100644
index 000000000000..93a74114af19
--- /dev/null
+++ b/pkgs/development/python-modules/pyfxa/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonPackage, fetchPypi
+, requests, cryptography, pybrowserid, hawkauthlib, six
+, grequests, mock, responses, unittest2 }:
+
+buildPythonPackage rec {
+  pname = "PyFxA";
+  version = "0.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d511b6f43a9445587c609a138636d378de76661561116e1f4259fcec9d09b42b";
+  };
+
+  postPatch = ''
+    # Requires network access
+    rm fxa/tests/test_core.py
+  '';
+
+  propagatedBuildInputs = [
+    requests cryptography pybrowserid hawkauthlib six
+  ];
+
+  checkInputs = [
+    grequests mock responses unittest2
+  ];
+
+  meta = with lib; {
+    description = "Firefox Accounts client library for Python";
+    homepage = https://github.com/mozilla/PyFxA;
+    license = licenses.mpl20;
+  };
+}
diff --git a/pkgs/development/python-modules/pymysql/default.nix b/pkgs/development/python-modules/pymysql/default.nix
new file mode 100644
index 000000000000..b440df309977
--- /dev/null
+++ b/pkgs/development/python-modules/pymysql/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, cryptography
+}:
+
+buildPythonPackage rec {
+  pname = "PyMySQL";
+  version = "0.9.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gvi63f1zq1bbd30x28kqyx351hal1yc323ckp0mihainb5n1iwy";
+  };
+
+  propagatedBuildInputs = [ cryptography ];
+
+  # Wants to connect to MySQL
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Pure Python MySQL Client";
+    homepage = https://github.com/PyMySQL/PyMySQL;
+    license = licenses.mit;
+    maintainers = [ maintainers.kalbasit ];
+  };
+}
diff --git a/pkgs/development/python-modules/pysrim/default.nix b/pkgs/development/python-modules/pysrim/default.nix
new file mode 100644
index 000000000000..90dfc1f56045
--- /dev/null
+++ b/pkgs/development/python-modules/pysrim/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchPypi
+, buildPythonPackage
+, pytestrunner
+, numpy
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "pysrim";
+  version = "0.5.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "6c297b4ea6f037946c72e94ddd9a7624cf2fd97c488acbee9409001c970754f1";
+  };
+
+  buildInputs = [ pytestrunner ];
+  propagatedBuildInputs = [ numpy pyyaml ];
+
+  # Tests require git lfs download of repository
+  doCheck = false;
+
+  meta = {
+    description = "Srim Automation of Tasks via Python";
+    homepage = https://gitlab.com/costrouc/pysrim;
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-language-server/default.nix b/pkgs/development/python-modules/python-language-server/default.nix
index c2df1f85325c..800c9eba2abb 100644
--- a/pkgs/development/python-modules/python-language-server/default.nix
+++ b/pkgs/development/python-modules/python-language-server/default.nix
@@ -1,45 +1,60 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, isPy27
+{ stdenv, buildPythonPackage, fetchFromGitHub, pythonOlder, isPy27
 , configparser, futures, future, jedi, pluggy
 , pytest, mock, pytestcov, coverage
-# The following packages are optional and
-# can be overwritten with null as your liking.
-# This also requires to disable tests.
-, rope ? null
+, # Allow building a limited set of providers, e.g. ["pycodestyle"].
+  providers ? ["*"]
+  # The following packages are optional and
+  # can be overwritten with null as your liking.
+, autopep8 ? null
 , mccabe ? null
-, pyflakes ? null
 , pycodestyle ? null
-, autopep8 ? null
-, yapf ? null
 , pydocstyle ? null
+, pyflakes ? null
+, rope ? null
+, yapf ? null
 }:
 
+let
+  withProvider = p: builtins.elem "*" providers || builtins.elem p providers;
+in
+
 buildPythonPackage rec {
   pname = "python-language-server";
-  version = "0.18.0";
+  version = "0.19.0";
 
   src = fetchFromGitHub {
     owner = "palantir";
     repo = "python-language-server";
     rev = version;
-    sha256 = "0ig34bc0qm6gdj8xakmm3877lmf8ms7qg0xj8hay9gpgf8cz894s";
+    sha256 = "0glnhnjmsnnh1vs73n9dglknfkhcgp03nkjbpz0phh1jlqrkrwm6";
   };
 
+  # The tests require all the providers, disable otherwise.
+  doCheck = providers == ["*"];
+
   checkInputs = [
     pytest mock pytestcov coverage
     # rope is technically a dependency, but we don't add it by default since we
     # already have jedi, which is the preferred option
     rope
   ];
+
   checkPhase = ''
     HOME=$TEMPDIR pytest
   '';
 
-  propagatedBuildInputs = [
-    jedi pluggy mccabe pyflakes pycodestyle yapf pydocstyle future autopep8
-  ] ++ lib.optional (isPy27) [ configparser ]
-    ++ lib.optional (pythonOlder "3.2") [ futures ];
+  propagatedBuildInputs = [ jedi pluggy future ]
+    ++ stdenv.lib.optional (withProvider "autopep8") autopep8
+    ++ stdenv.lib.optional (withProvider "mccabe") mccabe
+    ++ stdenv.lib.optional (withProvider "pycodestyle") pycodestyle
+    ++ stdenv.lib.optional (withProvider "pydocstyle") pydocstyle
+    ++ stdenv.lib.optional (withProvider "pyflakes") pyflakes
+    ++ stdenv.lib.optional (withProvider "rope") rope
+    ++ stdenv.lib.optional (withProvider "yapf") yapf
+    ++ stdenv.lib.optional isPy27 configparser
+    ++ stdenv.lib.optional (pythonOlder "3.2") futures;
 
-  meta = with lib; {
+  meta = with stdenv.lib; {
     homepage = https://github.com/palantir/python-language-server;
     description = "An implementation of the Language Server Protocol for Python";
     license = licenses.mit;
diff --git a/pkgs/development/python-modules/pytidylib/default.nix b/pkgs/development/python-modules/pytidylib/default.nix
new file mode 100644
index 000000000000..4ece6fb41343
--- /dev/null
+++ b/pkgs/development/python-modules/pytidylib/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildPythonPackage, fetchPypi, python, html-tidy }:
+
+buildPythonPackage rec {
+  pname = "pytidylib";
+  version = "0.3.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "22b1c8d75970d8064ff999c2369e98af1d0685417eda4c829a5c9f56764b0af3";
+  };
+
+  postPatch = ''
+    # Patch path to library
+    substituteInPlace tidylib/tidy.py \
+      --replace "load_library(name)" \
+        "load_library('${html-tidy}/lib/libtidy${stdenv.hostPlatform.extensions.sharedLibrary}')"
+
+    # Test fails
+    substituteInPlace tests/test_docs.py \
+      --replace "    def test_large_document(self):" \
+        $'    @unittest.skip("")\n    def test_large_document(self):'
+  '';
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Python wrapper for HTML Tidy (tidylib) on Python 2 and 3";
+    homepage = https://countergram.github.io/pytidylib/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ layus ];
+  };
+}
diff --git a/pkgs/development/python-modules/robotframework/default.nix b/pkgs/development/python-modules/robotframework/default.nix
index f07d0208167c..6d19feed3fb7 100644
--- a/pkgs/development/python-modules/robotframework/default.nix
+++ b/pkgs/development/python-modules/robotframework/default.nix
@@ -1,13 +1,11 @@
-{ stdenv, fetchurl, buildPythonPackage, isPy3k }:
+{ stdenv, fetchPypi, buildPythonPackage }:
 
 buildPythonPackage rec {
-  version = "3.0.4";
   pname = "robotframework";
-  disabled = isPy3k;
-  name = pname + "-" + version;
+  version = "3.0.4";
 
-  src = fetchurl {
-    url = "mirror://pypi/r/robotframework/${name}.tar.gz";
+  src = fetchPypi {
+    inherit pname version;
     sha256 = "ab94257cbd848dfca7148e092d233a12853cc7e840ce8231af9cbb5e7f51aa47";
   };
 
diff --git a/pkgs/development/python-modules/robotsuite/default.nix b/pkgs/development/python-modules/robotsuite/default.nix
index 9fcced49b925..59ef766adf11 100644
--- a/pkgs/development/python-modules/robotsuite/default.nix
+++ b/pkgs/development/python-modules/robotsuite/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, buildPythonPackage, fetchPypi, unittest2, robotframework, lxml }:
+{ stdenv, buildPythonPackage, fetchPypi
+, unittest2, lxml, robotframework
+}:
 
 buildPythonPackage rec {
   pname = "robotsuite";
@@ -12,6 +14,11 @@ buildPythonPackage rec {
   buildInputs = [ unittest2 ];
   propagatedBuildInputs = [ robotframework lxml ];
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace robotframework-python3 robotframework
+  '';
+
   meta = with stdenv.lib; {
     description = "Python unittest test suite for Robot Framework";
     homepage = https://github.com/collective/robotsuite/;
diff --git a/pkgs/development/python-modules/scapy/default.nix b/pkgs/development/python-modules/scapy/default.nix
index c24592ef9650..393f8c2c1108 100644
--- a/pkgs/development/python-modules/scapy/default.nix
+++ b/pkgs/development/python-modules/scapy/default.nix
@@ -1,6 +1,14 @@
-{ stdenv, lib, buildPythonPackage, fetchFromGitHub, isPyPy, isPy3k, pythonOlder
-, matplotlib, pycrypto, ecdsa
+{ buildPythonPackage, fetchFromGitHub, lib, isPyPy, isPy3k, pythonOlder
+, pycrypto, ecdsa # TODO
 , enum34, mock
+, withOptionalDeps ? true, tcpdump, ipython
+, withCryptography ? true, cryptography
+, withVoipSupport ? true, sox
+, withPlottingSupport ? true, matplotlib
+, withGraphicsSupport ? false, pyx, texlive, graphviz, imagemagick
+, withManufDb ? false, wireshark
+# 2D/3D graphics and graphs TODO: VPython
+# TODO: nmap, numpy
 }:
 
 buildPythonPackage rec {
@@ -19,15 +27,23 @@ buildPythonPackage rec {
   # TODO: Temporary workaround
   patches = [ ./fix-version-1.patch ./fix-version-2.patch ];
 
-  propagatedBuildInputs =
-    [ matplotlib pycrypto ecdsa ]
+  postPatch = lib.optionalString withManufDb ''
+    substituteInPlace scapy/data.py --replace "/opt/wireshark" "${wireshark}"
+  '';
+
+  propagatedBuildInputs = [ pycrypto ecdsa ]
+    ++ lib.optional withOptionalDeps [ tcpdump ipython ]
+    ++ lib.optional withCryptography [ cryptography ]
+    ++ lib.optional withVoipSupport [ sox ]
+    ++ lib.optional withPlottingSupport [ matplotlib ]
+    ++ lib.optional withGraphicsSupport [ pyx texlive.combined.scheme-minimal graphviz imagemagick ]
     ++ lib.optional (isPy3k && pythonOlder "3.4") [ enum34 ]
     ++ lib.optional doCheck [ mock ];
 
   # Tests fail with Python 3.6 (seems to be an upstream bug, I'll investigate)
   doCheck = if isPy3k then false else true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Powerful interactive network packet manipulation program";
     homepage = https://scapy.net/;
     license = licenses.gpl2;
diff --git a/pkgs/development/python-modules/selenium/default.nix b/pkgs/development/python-modules/selenium/default.nix
index 1661dd2cf3aa..cd4a6389a351 100644
--- a/pkgs/development/python-modules/selenium/default.nix
+++ b/pkgs/development/python-modules/selenium/default.nix
@@ -1,6 +1,6 @@
 { lib
 , stdenv
-, fetchurl
+, fetchPypi
 , fetchFromGitHub
 , buildPythonPackage
 , geckodriver
@@ -22,12 +22,11 @@ in
 
 buildPythonPackage rec {
   pname = "selenium";
-  version = "3.6.0";
-  name = pname + "-" + version;
+  version = "3.8.1";
 
-  src = fetchurl {
-    url = "mirror://pypi/s/selenium/${name}.tar.gz";
-    sha256 = "15qpvz0bdwjvpcj11fm0rw6r5inr66sqw89ww50l025sbhf04qwm";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1lqm2md84g11g7lqi94xqb5lydm93vgmlznfhf27g6sy9ayjvgcs";
   };
 
   buildInputs = [xorg.libX11];
diff --git a/pkgs/development/python-modules/singledispatch/default.nix b/pkgs/development/python-modules/singledispatch/default.nix
new file mode 100644
index 000000000000..e0b207735dfa
--- /dev/null
+++ b/pkgs/development/python-modules/singledispatch/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "singledispatch";
+  version = "3.4.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  # pypi singledispatch tarbal does not contain tests
+  doCheck = false;
+
+  meta = {
+    description = "This library brings functools.singledispatch from Python 3.4 to Python 2.6-3.3.";
+    homepage = https://docs.python.org/3/library/functools.html;
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/sortedcontainers/default.nix b/pkgs/development/python-modules/sortedcontainers/default.nix
new file mode 100644
index 000000000000..1252c676646d
--- /dev/null
+++ b/pkgs/development/python-modules/sortedcontainers/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "sortedcontainers";
+  version = "2.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "607294c6e291a270948420f7ffa1fb3ed47384a4c08db6d1e9c92d08a6981982";
+  };
+
+  # pypi tarball does not come with tests
+  doCheck = false;
+
+  meta = {
+    description = "Python Sorted Container Types: SortedList, SortedDict, and SortedSet";
+    homepage = http://www.grantjenks.com/docs/sortedcontainers/;
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/tensorflow-tensorboard/default.nix b/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
index 0d8085395736..5cd0e9266022 100644
--- a/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
+++ b/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
@@ -1,5 +1,4 @@
 { stdenv, lib, fetchPypi, buildPythonPackage, isPy3k
-, bleach_1_5_0
 , numpy
 , werkzeug
 , protobuf
@@ -14,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "tensorflow-tensorboard";
-  version = "1.7.0";
+  version = "1.9.0";
   format = "wheel";
 
   src = fetchPypi ({
@@ -23,13 +22,13 @@ buildPythonPackage rec {
     format = "wheel";
   } // (if isPy3k then {
     python = "py3";
-    sha256 = "1aa42rl3fkpllqch09d311gk1j281qry6nn07ywgbs6j0kwr6isc";
+    sha256 = "42a04637a636e16054b065907c81396b83a9702948ecd14218f19dc5cf85de98";
   } else {
     python = "py2";
-    sha256 = "1vcdkyvw22kpljmj4gxb8m1q54ry02iwvw54w8v8hmdigvc77a7k";
+    sha256 = "97661706fbe857c372405e0f5bd7c3db2197b5e70cec88f6924b726fde65c2c1";
   }));
 
-  propagatedBuildInputs = [ bleach_1_5_0 numpy werkzeug protobuf markdown grpcio ] ++ lib.optional (!isPy3k) futures;
+  propagatedBuildInputs = [ numpy werkzeug protobuf markdown grpcio ] ++ lib.optional (!isPy3k) futures;
 
   meta = with stdenv.lib; {
     description = "TensorFlow's Visualization Toolkit";
diff --git a/pkgs/development/python-modules/tensorflow/bin.nix b/pkgs/development/python-modules/tensorflow/bin.nix
index 42e35df7497a..b09da2d4cecf 100644
--- a/pkgs/development/python-modules/tensorflow/bin.nix
+++ b/pkgs/development/python-modules/tensorflow/bin.nix
@@ -10,6 +10,7 @@
 , termcolor
 , protobuf
 , absl-py
+, grpcio
 , mock
 , backports_weakref
 , enum34
@@ -38,38 +39,31 @@ let
 
 in buildPythonPackage rec {
   pname = "tensorflow";
-  version = "1.7.1";
+  version = "1.9.0";
   format = "wheel";
 
   src = let
     pyVerNoDot = lib.strings.stringAsChars (x: if x == "." then "" else x) "${python.majorVersion}";
-    version = if stdenv.isDarwin then builtins.substring 0 1 pyVerNoDot else pyVerNoDot;
+    pyver = if stdenv.isDarwin then builtins.substring 0 1 pyVerNoDot else pyVerNoDot;
     platform = if stdenv.isDarwin then "mac" else "linux";
     unit = if cudaSupport then "gpu" else "cpu";
-    key = "${platform}_py_${version}_${unit}";
-    dls = import ./tf1.7.1-hashes.nix;
+    key = "${platform}_py_${pyver}_${unit}";
+    dls = import ./tf1.9.0-hashes.nix;
   in fetchurl dls.${key};
 
-  propagatedBuildInputs = [ numpy six protobuf absl-py astor gast termcolor ]
+  propagatedBuildInputs = [  protobuf numpy termcolor grpcio six astor absl-py gast tensorflow-tensorboard ]
                  ++ lib.optional (!isPy3k) mock
-                 ++ lib.optionals (pythonOlder "3.4") [ backports_weakref enum34 ]
-                 ++ lib.optional (pythonOlder "3.6") tensorflow-tensorboard;
-
-  # tensorflow depends on tensorflow_tensorboard, which cannot be
-  # built at the moment (some of its dependencies do not build
-  # [htlm5lib9999999 (seven nines) -> tensorboard], and it depends on an old version of
-  # bleach) Hence we disable dependency checking for now.
-  installFlags = lib.optional isPy36 "--no-dependencies";
-
+                 ++ lib.optionals (pythonOlder "3.4") [ backports_weakref enum34 ];
 
   # Upstream has a pip hack that results in bin/tensorboard being in both tensorflow
   # and the propageted input tensorflow-tensorboard which causes environment collisions.
-  #
+  # another possibility would be to have tensorboard only in the buildInputs
   # https://github.com/tensorflow/tensorflow/blob/v1.7.1/tensorflow/tools/pip_package/setup.py#L79
   postInstall = ''
     rm $out/bin/tensorboard
   '';
 
+  installFlags = "--no-dependencies"; # tensorflow wants setuptools 39, can't allow that.
   # Note that we need to run *after* the fixup phase because the
   # libraries are loaded at runtime. If we run in preFixup then
   # patchelf --shrink-rpath will remove the cuda libraries.
diff --git a/pkgs/development/python-modules/tensorflow/prefetcher.sh b/pkgs/development/python-modules/tensorflow/prefetcher.sh
index ba9aa0bdf356..6b98ece974eb 100644
--- a/pkgs/development/python-modules/tensorflow/prefetcher.sh
+++ b/pkgs/development/python-modules/tensorflow/prefetcher.sh
@@ -1,4 +1,4 @@
-version=1.7.1
+version=1.9.0
 hashfile=tf${version}-hashes.nix
 rm -f $hashfile
 echo "{" >> $hashfile
@@ -27,3 +27,4 @@ for sys in "linux" "mac"; do
         done
     done
 done
+echo "}" >> $hashfile
diff --git a/pkgs/development/python-modules/tensorflow/tf1.9.0-hashes.nix b/pkgs/development/python-modules/tensorflow/tf1.9.0-hashes.nix
new file mode 100644
index 000000000000..504ed7b5b957
--- /dev/null
+++ b/pkgs/development/python-modules/tensorflow/tf1.9.0-hashes.nix
@@ -0,0 +1,34 @@
+{
+linux_py_27_cpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.9.0-cp27-none-linux_x86_64.whl";
+  sha256 = "1dvmajv5ddgzrazdnxpfhk9dkj0lfiviw4jmvk00d4q5v68z6ihg";
+};
+linux_py_35_cpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.9.0-cp35-cp35m-linux_x86_64.whl";
+  sha256 = "07ilrxbhz9p3xwqhl2p8c40y1gsq68x10f34pzayrvcg2i52bvpv";
+};
+linux_py_36_cpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl";
+  sha256 = "0x2l64ab7i8nr0dzvsryblhn869qyjb85xkhy69nwahqswb68hxl";
+};
+linux_py_27_gpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp27-none-linux_x86_64.whl";
+  sha256 = "0q7i82jgy0mzn2mw8i1z0pvv7ssi6m7zqkkjg2i4zxpk8djg8k6z";
+};
+linux_py_35_gpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp35-cp35m-linux_x86_64.whl";
+  sha256 = "0nhq2s8fanm095x1sc9h40dvqcv9bc2aj47crv3c2sajbj7dn43g";
+};
+linux_py_36_gpu = {
+  url = "https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp36-cp36m-linux_x86_64.whl";
+  sha256 = "1m4b9cd8ghghqxaqrlzq7j9499ddidgr78bx0c20pgyrzg38jiz1";
+};
+mac_py_2_cpu = {
+  url = "https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.9.0-py2-none-any.whl";
+  sha256 = "1djj0xahzrmxhfc6kyjx1lkyfh7jhq3ix0gz9j3iq4smb3ca9z01";
+};
+mac_py_3_cpu = {
+  url = "https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.9.0-py3-none-any.whl";
+  sha256 = "0igffy7r0d8mhkn4pybp19jmc25alfpfl4k4fxh2s3rvgii8gk22";
+};
+}
diff --git a/pkgs/development/python-modules/tokenserver/default.nix b/pkgs/development/python-modules/tokenserver/default.nix
index 44fcb9b46ff9..a07da568dca4 100644
--- a/pkgs/development/python-modules/tokenserver/default.nix
+++ b/pkgs/development/python-modules/tokenserver/default.nix
@@ -1,32 +1,35 @@
-{ buildPythonPackage
-, fetchgit
-, testfixtures
-, cornice
-, mozsvc
-, pybrowserid
-, tokenlib
-, pymysql
-, umemcache
-, hawkauthlib
-, alembic
-, pymysqlsa
-, paste
-, boto
+{ lib, buildPythonPackage, fetchFromGitHub
+, alembic, boto, cornice, hawkauthlib, mozsvc, paste, pybrowserid, pyfxa
+, pymysql, pymysqlsa, sqlalchemy, testfixtures, tokenlib, umemcache
+, mock, nose, unittest2, webtest
 }:
 
 buildPythonPackage rec {
   pname = "tokenserver";
-  version = "1.2.27";
+  version = "1.3.1";
 
-  src = fetchgit {
-    url = https://github.com/mozilla-services/tokenserver.git;
-    rev = "refs/tags/${version}";
-    sha256 = "0il3bgjld495g9gxvvrm56kpan5swaizzg216qz3zxmb6w9ly3fm";
+  src = fetchFromGitHub {
+    owner = "mozilla-services";
+    repo = pname;
+    rev = version;
+    sha256 = "04z0r8xzrmhvh04y8ggdz9gs8qa8lv3qr7kasf6lm63fixsfgrlp";
   };
 
+  propagatedBuildInputs = [
+    alembic boto cornice hawkauthlib mozsvc paste pybrowserid pyfxa
+    pymysql pymysqlsa sqlalchemy testfixtures tokenlib umemcache
+  ];
+
+  checkInputs = [
+    mock nose unittest2 webtest
+  ];
+
+  # Requires virtualenv, MySQL, ...
   doCheck = false;
-  checkInputs = [ testfixtures ];
-  propagatedBuildInputs = [ cornice mozsvc pybrowserid tokenlib
-    pymysql umemcache hawkauthlib alembic pymysqlsa paste boto ];
 
+  meta = with lib; {
+    description = "The Mozilla Token Server";
+    homepage = https://github.com/mozilla-services/tokenserver;
+    license = licenses.mpl20;
+  };
 }