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/archspec/default.nix6
-rwxr-xr-xpkgs/development/python-modules/atlassian-python-api/default.nix4
-rw-r--r--pkgs/development/python-modules/boiboite-opener-framework/default.nix79
-rw-r--r--pkgs/development/python-modules/bqplot/default.nix53
-rw-r--r--pkgs/development/python-modules/bqscales/default.nix48
-rw-r--r--pkgs/development/python-modules/bx-py-utils/default.nix8
-rw-r--r--pkgs/development/python-modules/captcha/default.nix37
-rw-r--r--pkgs/development/python-modules/chiapos/default.nix5
-rw-r--r--pkgs/development/python-modules/dashing/default.nix27
-rw-r--r--pkgs/development/python-modules/dsnap/default.nix69
-rw-r--r--pkgs/development/python-modules/energyzero/default.nix4
-rw-r--r--pkgs/development/python-modules/eth-hash/default.nix7
-rw-r--r--pkgs/development/python-modules/flask-session-captcha/default.nix38
-rw-r--r--pkgs/development/python-modules/flask-sessionstore/default.nix35
-rw-r--r--pkgs/development/python-modules/gitignore-parser/default.nix37
-rw-r--r--pkgs/development/python-modules/google-cloud-bigtable/default.nix4
-rw-r--r--pkgs/development/python-modules/httpie/default.nix4
-rw-r--r--pkgs/development/python-modules/ipyxact/default.nix31
-rw-r--r--pkgs/development/python-modules/manifest-ml/default.nix4
-rw-r--r--pkgs/development/python-modules/matplotlib/default.nix2
-rw-r--r--pkgs/development/python-modules/mypy-boto3-ebs/default.nix39
-rw-r--r--pkgs/development/python-modules/nvidia-ml-py/default.nix4
-rw-r--r--pkgs/development/python-modules/okonomiyaki/default.nix47
-rw-r--r--pkgs/development/python-modules/pwntools/default.nix12
-rw-r--r--pkgs/development/python-modules/py-pdf-parser/default.nix56
-rw-r--r--pkgs/development/python-modules/pyTelegramBotAPI/default.nix4
-rw-r--r--pkgs/development/python-modules/pygame_sdl2/default.nix2
-rw-r--r--pkgs/development/python-modules/pyglet/default.nix4
-rw-r--r--pkgs/development/python-modules/pysimplegui/default.nix4
-rw-r--r--pkgs/development/python-modules/python-libnmap/default.nix43
-rw-r--r--pkgs/development/python-modules/python-mystrom/default.nix4
-rw-r--r--pkgs/development/python-modules/qtile-extras/default.nix4
-rw-r--r--pkgs/development/python-modules/qtile/default.nix99
-rw-r--r--pkgs/development/python-modules/qtile/fix-restart.patch22
-rw-r--r--pkgs/development/python-modules/qtile/wrapper.nix8
-rw-r--r--pkgs/development/python-modules/rdkit/default.nix6
-rw-r--r--pkgs/development/python-modules/scancode-toolkit/default.nix7
-rw-r--r--pkgs/development/python-modules/scikit-fmm/default.nix4
-rw-r--r--pkgs/development/python-modules/simplesat/default.nix48
-rw-r--r--pkgs/development/python-modules/single-source/default.nix49
-rw-r--r--pkgs/development/python-modules/trimesh/default.nix4
-rw-r--r--pkgs/development/python-modules/wheezy-captcha/default.nix27
-rw-r--r--pkgs/development/python-modules/word2vec/default.nix55
-rw-r--r--pkgs/development/python-modules/wordcloud/default.nix7
-rw-r--r--pkgs/development/python-modules/wordfreq/default.nix23
-rw-r--r--pkgs/development/python-modules/xiaomi-ble/default.nix4
-rw-r--r--pkgs/development/python-modules/zipfile2/default.nix27
-rw-r--r--pkgs/development/python-modules/zipfile2/no-setuid.patch15
48 files changed, 1013 insertions, 117 deletions
diff --git a/pkgs/development/python-modules/archspec/default.nix b/pkgs/development/python-modules/archspec/default.nix
index 85772c41cb2c3..5be16a16771f9 100644
--- a/pkgs/development/python-modules/archspec/default.nix
+++ b/pkgs/development/python-modules/archspec/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "archspec";
-  version = "0.2.0";
+  version = "0.2.1";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -20,7 +20,7 @@ buildPythonPackage rec {
     repo = pname;
     rev = "refs/tags/v${version}";
     fetchSubmodules = true;
-    hash = "sha256-Zu7/zx3FTVJVGpAdRDdnLBokeodspZg6ou/GBaqz4XY=";
+    hash = "sha256-2rMsxSAnPIVqvsbAUtBbHLb3AvrZFjGzxYO6A/1qXnY=";
   };
 
   nativeBuildInputs = [
@@ -43,7 +43,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Library for detecting, labeling, and reasoning about microarchitectures";
     homepage = "https://archspec.readthedocs.io/";
-    changelog = "https://github.com/archspec/archspec/releases/tag/v0.2.0";
+    changelog = "https://github.com/archspec/archspec/releases/tag/v0.2.1";
     license = with licenses; [ mit asl20 ];
     maintainers = with maintainers; [ atila ];
   };
diff --git a/pkgs/development/python-modules/atlassian-python-api/default.nix b/pkgs/development/python-modules/atlassian-python-api/default.nix
index 1663830fa1f43..47d3741fa618f 100755
--- a/pkgs/development/python-modules/atlassian-python-api/default.nix
+++ b/pkgs/development/python-modules/atlassian-python-api/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "atlassian-python-api";
-  version = "3.36.0";
+  version = "3.37.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "atlassian-api";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-9xKGA9F3RLijjiEnb01QjmWA9CnN7FZGEEFEWZU4A+A=";
+    hash = "sha256-+lhDivbw30Oa3aB0TprRhBzv/c72IzNltFZA87LY2nM=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/boiboite-opener-framework/default.nix b/pkgs/development/python-modules/boiboite-opener-framework/default.nix
new file mode 100644
index 0000000000000..e7a0b017f405f
--- /dev/null
+++ b/pkgs/development/python-modules/boiboite-opener-framework/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, packaging
+, pytestCheckHook
+, pythonOlder
+, pythonRelaxDepsHook
+, scapy
+}:
+
+buildPythonPackage rec {
+  pname = "boiboite-opener-framework";
+  version = "1.2.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "Orange-Cyberdefense";
+    repo = "bof";
+    rev = "refs/tags/${version}";
+    hash = "sha256-atKqHRX24UjF/9Dy0aYXAN+80nBJKCd07FmaR5Vl1q4=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "scapy==2.5.0rc1" "scapy"
+  '';
+
+  propagatedBuildInputs = [
+    packaging
+    scapy
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "bof"
+  ];
+
+  disabledTests = [
+    # Tests are using netcat and cat to do UDP connections
+    "test_0101_knxnet_instantiate"
+    "test_0101_modbusnet_instantiate"
+    "test_0102_knxnet_connect"
+    "test_0102_modbusnet_connect"
+    "test_0201_knxnet_send_knxpacket"
+    "test_0201_modbus_send_modbuspacket"
+    "test_0201_udp_send_str_bytes"
+    "test_0202_knxnet_send_knxpacket"
+    "test_0202_modbus_send_modbuspacket"
+    "test_0202_udp_send_receive"
+    "test_0203_knxnet_send_raw"
+    "test_0203_modbus_send_raw"
+    "test_0203_send_receive_timeout"
+    "test_0204_knxnet_receive"
+    "test_0204_modbus_receive"
+    "test_0204_multicast_error_handling"
+    "test_0205_broadcast_error_handling"
+    "test_0301_pndcp_device_raise"
+    "test_0301_tcp_instantiate"
+    "test_0302_tcp_connect"
+    "test_0303_tcp_connect_bad_addr"
+    "test_0304_tcp_connect_bad_port"
+    "test_0401_tcp_send_str_bytes"
+    "test_0402_tcp_send_receive"
+    "test_0802_search_valid"
+  ];
+
+  meta = with lib; {
+    description = "Testing framework for industrial protocols implementations and devices";
+    homepage = "https://github.com/Orange-Cyberdefense/bof";
+    changelog = "https://github.com/Orange-Cyberdefense/bof/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/bqplot/default.nix b/pkgs/development/python-modules/bqplot/default.nix
new file mode 100644
index 0000000000000..967b0a15fcf64
--- /dev/null
+++ b/pkgs/development/python-modules/bqplot/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, jupyter-packaging
+, bqscales
+, ipywidgets
+, numpy
+, pandas
+, traitlets
+, traittypes
+}:
+
+buildPythonPackage rec {
+  pname = "bqplot";
+  version = "0.12.36";
+
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-alU+Vf28xPYuBWeb10slSdHvvkPhIK07C8sDplx5Ia8=";
+  };
+
+  nativeBuildInputs = [
+    jupyter-packaging
+  ];
+
+  propagatedBuildInputs = [
+    bqscales
+    ipywidgets
+    numpy
+    pandas
+    traitlets
+    traittypes
+  ];
+
+  # no tests in PyPI dist, and not obvious to me how to build the js files from GitHub
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "bqplot"
+    "bqplot.pyplot"
+  ];
+
+  meta = {
+    description = "2D plotting library for Jupyter based on Grammar of Graphics";
+    homepage = "https://bqplot.github.io/bqplot";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bcdarwin ];
+  };
+}
diff --git a/pkgs/development/python-modules/bqscales/default.nix b/pkgs/development/python-modules/bqscales/default.nix
new file mode 100644
index 0000000000000..3bd015a58f67a
--- /dev/null
+++ b/pkgs/development/python-modules/bqscales/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, hatchling
+, jupyter-packaging
+, ipywidgets
+, numpy
+, traitlets
+, traittypes
+}:
+
+buildPythonPackage rec {
+  pname = "bqscales";
+  version = "0.3.1";
+
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-C+/GLpqYpePngbn5W0MwvpdmVgFZF7aGHyKMgO5XM90=";
+  };
+
+  nativeBuildInputs = [
+    hatchling
+    jupyter-packaging
+  ];
+
+  propagatedBuildInputs = [
+    ipywidgets
+    numpy
+    traitlets
+    traittypes
+  ];
+
+  # no tests in PyPI dist
+  doCheck = false;
+
+  pythonImportsCheck = [ "bqscales" ];
+
+  meta = {
+    description = "Grammar of Graphics scales for bqplot and other Jupyter widgets libraries";
+    homepage = "https://github.com/bqplot/bqscales";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bcdarwin ];
+  };
+}
diff --git a/pkgs/development/python-modules/bx-py-utils/default.nix b/pkgs/development/python-modules/bx-py-utils/default.nix
index c2db1cd1108f5..f6a70a3adecf8 100644
--- a/pkgs/development/python-modules/bx-py-utils/default.nix
+++ b/pkgs/development/python-modules/bx-py-utils/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "bx-py-utils";
-  version = "78";
+  version = "80";
 
   disabled = pythonOlder "3.9";
 
@@ -23,9 +23,13 @@ buildPythonPackage rec {
     owner = "boxine";
     repo = "bx_py_utils";
     rev = "refs/tags/v${version}";
-    hash = "sha256-dMcbv/qf+8Qzu47MVFU2QUviT/vjKsHp+45F/6NOlWo=";
+    hash = "sha256-ih0tqT+3fTTgncXz4bneo4OGT0jVhybdADTy1de5VqI=";
   };
 
+  postPatch = ''
+    rm bx_py_utils_tests/publish.py
+  '';
+
   nativeBuildInputs = [
     poetry-core
   ];
diff --git a/pkgs/development/python-modules/captcha/default.nix b/pkgs/development/python-modules/captcha/default.nix
new file mode 100644
index 0000000000000..d040c2e7bf760
--- /dev/null
+++ b/pkgs/development/python-modules/captcha/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, nose
+, pillow
+, wheezy-captcha
+}:
+
+buildPythonPackage rec {
+  pname = "captcha";
+  version = "0.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "lepture";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-uxUjoACN65Cx5LMKpT+bZhKpf2JRSaEyysnYUgZntp8=";
+  };
+
+  propagatedBuildInputs = [ pillow ];
+
+  pythonImportsCheck = [ "captcha" ];
+
+  nativeCheckInputs = [ nose wheezy-captcha ];
+
+  checkPhase = ''
+    nosetests -s
+  '';
+
+  meta = with lib; {
+    description = "A captcha library that generates audio and image CAPTCHAs";
+    homepage = "https://github.com/lepture/captcha";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/development/python-modules/chiapos/default.nix b/pkgs/development/python-modules/chiapos/default.nix
index ea7aa3b0ff549..501a8f543b2b5 100644
--- a/pkgs/development/python-modules/chiapos/default.nix
+++ b/pkgs/development/python-modules/chiapos/default.nix
@@ -43,6 +43,11 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
+  # A fix for cxxopts >=3.1
+  postPatch = ''
+    substituteInPlace src/cli.cpp \
+      --replace "cxxopts::OptionException" "cxxopts::exceptions::exception"
+  '';
 
   # CMake needs to be run by setuptools rather than by its hook
   dontConfigure = true;
diff --git a/pkgs/development/python-modules/dashing/default.nix b/pkgs/development/python-modules/dashing/default.nix
new file mode 100644
index 0000000000000..e4c57679966a8
--- /dev/null
+++ b/pkgs/development/python-modules/dashing/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, python3
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "dashing";
+  version = "0.1.0";
+  format = "setuptools";
+
+  disabled = python3.pythonOlder "3.7";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    hash = "sha256-JRRgjg8pp3Xb0bERFWEhnOg9U8+kuqL+QQH6uE/Vbxs=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    blessed
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/FedericoCeratto/dashing";
+    description = "Terminal dashboards for Python";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ juliusrickert ];
+  };
+}
diff --git a/pkgs/development/python-modules/dsnap/default.nix b/pkgs/development/python-modules/dsnap/default.nix
new file mode 100644
index 0000000000000..0525f4d861198
--- /dev/null
+++ b/pkgs/development/python-modules/dsnap/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, aws-sam-cli
+, boto3
+, buildPythonPackage
+, cfn-lint
+, fetchFromGitHub
+, mock
+, moto
+, mypy-boto3-ebs
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+, typer
+, urllib3
+}:
+
+buildPythonPackage rec {
+  pname = "dsnap";
+  version = "1.0.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "RhinoSecurityLabs";
+    repo = "dsnap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-yKch+tKjFhvZfzloazMH378dkERF8gnZEX1Som+d670=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    boto3
+    urllib3
+  ];
+
+  passthru.optional-dependencies = {
+    cli = [
+      typer
+    ];
+    scannerd = [
+      aws-sam-cli
+      cfn-lint
+    ];
+  };
+
+  nativeCheckInputs = [
+    mock
+    moto
+    mypy-boto3-ebs
+    pytestCheckHook
+  ] ++ lib.flatten (builtins.attrValues passthru.optional-dependencies);
+
+  pythonImportsCheck = [
+    "dsnap"
+  ];
+
+  meta = with lib; {
+    description = "Utility for downloading and mounting EBS snapshots using the EBS Direct API's";
+    homepage = "https://github.com/RhinoSecurityLabs/dsnap";
+    changelog = "https://github.com/RhinoSecurityLabs/dsnap/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/energyzero/default.nix b/pkgs/development/python-modules/energyzero/default.nix
index 7b6150e46ecf9..21a14e2fff56b 100644
--- a/pkgs/development/python-modules/energyzero/default.nix
+++ b/pkgs/development/python-modules/energyzero/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "energyzero";
-  version = "0.4.1";
+  version = "0.4.2";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "klaasnicolaas";
     repo = "python-energyzero";
     rev = "refs/tags/v${version}";
-    hash = "sha256-qBtsNqmGLCUGTYJ8iPL/Ie3yGX7Ocs4e+yp0tRAhK8g=";
+    hash = "sha256-sqkpbvsMd/8y6QSrMZHJeHl9GTes8TUoZ7RKePJsREs=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/eth-hash/default.nix b/pkgs/development/python-modules/eth-hash/default.nix
index f1b22597f2c32..aabd3b38f429e 100644
--- a/pkgs/development/python-modules/eth-hash/default.nix
+++ b/pkgs/development/python-modules/eth-hash/default.nix
@@ -1,6 +1,7 @@
 { lib
 , fetchFromGitHub
 , buildPythonPackage
+, pythonAtLeast
 , pythonOlder
 , pytest
 , safe-pysha3
@@ -22,10 +23,14 @@ buildPythonPackage rec {
   nativeCheckInputs = [
     pytest
   ] ++ passthru.optional-dependencies.pycryptodome
-  ++ passthru.optional-dependencies.pysha3;
+  # eth-hash can use either safe-pysha3 or pycryptodome;
+  # safe-pysha3 requires Python 3.9+ while pycryptodome does not.
+  # https://github.com/ethereum/eth-hash/issues/46#issuecomment-1314029211
+  ++ lib.optional (pythonAtLeast "3.9") passthru.optional-dependencies.pysha3;
 
   checkPhase = ''
     pytest tests/backends/pycryptodome/
+  '' + lib.optionalString (pythonAtLeast "3.9") ''
     pytest tests/backends/pysha3/
   '';
 
diff --git a/pkgs/development/python-modules/flask-session-captcha/default.nix b/pkgs/development/python-modules/flask-session-captcha/default.nix
new file mode 100644
index 0000000000000..a720d2a4b555e
--- /dev/null
+++ b/pkgs/development/python-modules/flask-session-captcha/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, flask
+, flask-sessionstore
+, flask-sqlalchemy
+, captcha
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "flask-session-captcha";
+  version = "1.3.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "Tethik";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-V0f3mXCfqwH2l3OtJKOHGdrlKAFxs2ynqXvNve7Amkc=";
+  };
+
+  propagatedBuildInputs = [ flask flask-sessionstore captcha ];
+
+  pythonImportsCheck = [ "flask_session_captcha" ];
+
+  nativeCheckInputs = [ flask-sqlalchemy pytestCheckHook ];
+
+  # RuntimeError: Working outside of application context.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A captcha implemention for flask";
+    homepage = "https://github.com/Tethik/flask-session-captcha";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/development/python-modules/flask-sessionstore/default.nix b/pkgs/development/python-modules/flask-sessionstore/default.nix
new file mode 100644
index 0000000000000..12f3ff51b425c
--- /dev/null
+++ b/pkgs/development/python-modules/flask-sessionstore/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchPypi
+, buildPythonPackage
+, flask
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "flask-sessionstore";
+  version = "0.4.5";
+  format = "setuptools";
+
+  src = fetchPypi {
+    pname = "Flask-Sessionstore";
+    inherit version;
+    hash = "sha256-AQ3jWrnw2UI8L3nFEx4AhDwGP4R8Tr7iBMsDS5jLQPQ=";
+  };
+
+  propagatedBuildInputs = [ flask ];
+
+  pythonImportsCheck = [ "flask_sessionstore" ];
+
+  nativeCheckInputs = [ nose ];
+
+  checkPhase = ''
+    nosetests -s
+  '';
+
+  meta = with lib; {
+    description = "Session Storage Backends for Flask";
+    homepage = "https://github.com/mcrowson/flask-sessionstore";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/development/python-modules/gitignore-parser/default.nix b/pkgs/development/python-modules/gitignore-parser/default.nix
new file mode 100644
index 0000000000000..f9758e38c2d79
--- /dev/null
+++ b/pkgs/development/python-modules/gitignore-parser/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, unittestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "gitignore-parser";
+  version = "0.1.2";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "mherrmann";
+    repo = "gitignore_parser";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-F1ZQQ33naOO7KNuSdlo0JN8i50lLty+eGSJAzVJL730=";
+  };
+
+  nativeCheckInputs = [
+    unittestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "gitignore_parser"
+  ];
+
+  meta = with lib; {
+    description = "A spec-compliant gitignore parser";
+    homepage = "https://github.com/mherrmann/gitignore_parser";
+    changelog = "https://github.com/mherrmann/gitignore_parser/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/google-cloud-bigtable/default.nix b/pkgs/development/python-modules/google-cloud-bigtable/default.nix
index 660dd96cfe8ae..69be7cdf735b7 100644
--- a/pkgs/development/python-modules/google-cloud-bigtable/default.nix
+++ b/pkgs/development/python-modules/google-cloud-bigtable/default.nix
@@ -15,14 +15,14 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-bigtable";
-  version = "2.17.0";
+  version = "2.18.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-wysLs0seCRDadYj9aRowebq6+kMi7RZp/DITC4lqsVY=";
+    hash = "sha256-Qdb3AnwHS2nho3ld0oehVkORAy+F3xzEqHuSJQb18OI=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/httpie/default.nix b/pkgs/development/python-modules/httpie/default.nix
index b226ee1690cd1..04add67c8c848 100644
--- a/pkgs/development/python-modules/httpie/default.nix
+++ b/pkgs/development/python-modules/httpie/default.nix
@@ -26,14 +26,14 @@
 
 buildPythonPackage rec {
   pname = "httpie";
-  version = "3.2.1";
+  version = "3.2.2";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = "httpie";
     repo = "httpie";
     rev = version;
-    hash = "sha256-WEe8zSlNckl7bPBi6u8mHQ1/xPw3kE81F8Xr15TchgM=";
+    hash = "sha256-hPsjEpvT6tnPm68AUB2Tv3Gon4DfSzO2VYCGqP8ozSI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/ipyxact/default.nix b/pkgs/development/python-modules/ipyxact/default.nix
new file mode 100644
index 0000000000000..7ddaf432d1284
--- /dev/null
+++ b/pkgs/development/python-modules/ipyxact/default.nix
@@ -0,0 +1,31 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, lib
+, pyyaml
+, six
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "ipyxact";
+  version = "0.3.2";
+
+  propagatedBuildInputs = [ pyyaml ];
+  checkInputs = [ six lxml ];
+
+  src = fetchFromGitHub {
+    owner = "olofk";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-myD+NnqcxxaSAV7qZa8xqeciaiFqFePqIzd7sb/2GXA=";
+  };
+
+  pythonImportsCheck = [ "ipyxact" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/olofk/ipyxact";
+    description = "IP-XACT parser";
+    maintainers = with maintainers; [ genericnerdyusername ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/development/python-modules/manifest-ml/default.nix b/pkgs/development/python-modules/manifest-ml/default.nix
index e0f908b3fd4f9..e93b18c46c9df 100644
--- a/pkgs/development/python-modules/manifest-ml/default.nix
+++ b/pkgs/development/python-modules/manifest-ml/default.nix
@@ -27,7 +27,7 @@
 
 buildPythonPackage rec {
   pname = "manifest-ml";
-  version = "0.1.5";
+  version = "0.1.7";
   format = "setuptools";
 
   disalbed = pythonOlder "3.8";
@@ -36,7 +36,7 @@ buildPythonPackage rec {
     owner = "HazyResearch";
     repo = "manifest";
     rev = "refs/tags/v${version}";
-    hash = "sha256-WKibIJv4eJ0IOCRgTl02Zusf0XNTPLBIyme6HMANr8I=";
+    hash = "sha256-wrslrzMAPBVAlb4ieB+DcLfWjZdlaUBnGXbzcMhlf34=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/matplotlib/default.nix b/pkgs/development/python-modules/matplotlib/default.nix
index 1fd70739b4c80..4df554f891604 100644
--- a/pkgs/development/python-modules/matplotlib/default.nix
+++ b/pkgs/development/python-modules/matplotlib/default.nix
@@ -80,7 +80,7 @@ buildPythonPackage rec {
   pname = "matplotlib";
   format = "pyproject";
 
-  disabled = pythonOlder "3.9";
+  disabled = pythonOlder "3.8";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/mypy-boto3-ebs/default.nix b/pkgs/development/python-modules/mypy-boto3-ebs/default.nix
new file mode 100644
index 0000000000000..228ceab3134d7
--- /dev/null
+++ b/pkgs/development/python-modules/mypy-boto3-ebs/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, boto3
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, typing-extensions
+}:
+
+buildPythonPackage rec {
+  pname = "mypy-boto3-ebs";
+  version = "1.26.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-w15SM5F1IFtX4qDrMv5B7PItaTnXOOABg0aUU24onBk=";
+  };
+
+  propagatedBuildInputs = [
+    boto3
+    typing-extensions
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "mypy_boto3_ebs"
+  ];
+
+  meta = with lib; {
+    description = "Type annotations for boto3.s3";
+    homepage = "https://github.com/youtype/mypy_boto3_builder";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/nvidia-ml-py/default.nix b/pkgs/development/python-modules/nvidia-ml-py/default.nix
index a7309398def44..218b623307115 100644
--- a/pkgs/development/python-modules/nvidia-ml-py/default.nix
+++ b/pkgs/development/python-modules/nvidia-ml-py/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "nvidia-ml-py";
-  version = "11.525.84";
+  version = "11.525.112";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
     extension = "tar.gz";
-    hash = "sha256-WckO3WyKdkWL3JVFrLDc+Iv4igrYi2A3v8wFZDqkvVU=";
+    hash = "sha256-xk5HOVO2XsDMx2zzYBwxMKCsgGC7yuqRLMAPqOTJho0=";
   };
 
   patches = [
diff --git a/pkgs/development/python-modules/okonomiyaki/default.nix b/pkgs/development/python-modules/okonomiyaki/default.nix
new file mode 100644
index 0000000000000..f1699e2096662
--- /dev/null
+++ b/pkgs/development/python-modules/okonomiyaki/default.nix
@@ -0,0 +1,47 @@
+{ buildPythonPackage
+, stdenv
+, fetchFromGitHub
+, lib
+, attrs
+, distro
+, jsonschema
+, six
+, zipfile2
+, hypothesis
+, mock
+, packaging
+, testfixtures
+}:
+
+buildPythonPackage rec {
+  pname = "okonomiyaki";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "enthought";
+    repo = pname;
+    rev = version;
+    hash = "sha256-eWCOuGtdjBGThAyu15aerclkSWC593VGDPHJ98l30iY=";
+  };
+
+  propagatedBuildInputs = [ distro attrs jsonschema six zipfile2 ];
+
+  preCheck = ''
+    substituteInPlace okonomiyaki/runtimes/tests/test_runtime.py \
+      --replace 'runtime_info = PythonRuntime.from_running_python()' 'raise unittest.SkipTest() #'
+   '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace okonomiyaki/platforms/tests/test_pep425.py \
+      --replace 'self.assertEqual(platform_tag, self.tag.platform)' 'raise unittest.SkipTest()'
+  '';
+
+  checkInputs = [ hypothesis mock packaging testfixtures ];
+
+  pythonImportsCheck = [ "okonomiyaki" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/enthought/okonomiyaki";
+    description = "An experimental library aimed at consolidating a lot of low-level code used for Enthought's eggs";
+    maintainers = with maintainers; [ genericnerdyusername ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/pwntools/default.nix b/pkgs/development/python-modules/pwntools/default.nix
index 42cd7035cb747..8e3df0360de5b 100644
--- a/pkgs/development/python-modules/pwntools/default.nix
+++ b/pkgs/development/python-modules/pwntools/default.nix
@@ -28,20 +28,15 @@ let
   debuggerName = lib.strings.getName debugger;
 in
 buildPythonPackage rec {
-  version = "4.9.0";
   pname = "pwntools";
+  version = "4.10.0";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-7qZ9GC+RcEiDkpmNmy8d67dYiTgFBVAfB3B2RfrH5xI=";
+    hash = "sha256-WI6J6meFJ8C1tsru7n524xNS544vHPPdp7yaz1JuRG0=";
   };
 
   postPatch = ''
-    # Upstream has set an upper bound on unicorn because of https://github.com/Gallopsled/pwntools/issues/1538,
-    # but since that is a niche use case and it requires extra work to get unicorn 1.0.2rc3 to work we relax
-    # the bound here. Check if this is still necessary when updating!
-    sed -i 's/unicorn>=1.0.2rc1,<1.0.2rc4/unicorn>=1.0.2rc1/' setup.py
-
     # Upstream hardcoded the check for the command `gdb-multiarch`;
     # Forcefully use the provided debugger, as `gdb` (hence `pwndbg`) is built with multiarch in `nixpkgs`.
     sed -i 's/gdb-multiarch/${debuggerName}/' pwnlib/gdb.py
@@ -84,8 +79,9 @@ buildPythonPackage rec {
   '';
 
   meta = with lib; {
-    homepage = "https://pwntools.com";
     description = "CTF framework and exploit development library";
+    homepage = "https://pwntools.com";
+    changelog = "https://github.com/Gallopsled/pwntools/releases/tag/${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ bennofs kristoff3r pamplemousse ];
   };
diff --git a/pkgs/development/python-modules/py-pdf-parser/default.nix b/pkgs/development/python-modules/py-pdf-parser/default.nix
new file mode 100644
index 0000000000000..b5d9ef6806c38
--- /dev/null
+++ b/pkgs/development/python-modules/py-pdf-parser/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildPythonPackage
+, docopt
+, fetchPypi
+, pdfminer-six
+, pythonOlder
+, pythonRelaxDepsHook
+, setuptools
+, wand
+}:
+
+buildPythonPackage rec {
+  pname = "py-pdf-parser";
+  version = "0.10.2";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-F12uDAjG9P3eVyaXqVSHNFrEGnOzLlJERDwOiWSq1ZY=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    docopt
+    pdfminer-six
+    wand
+  ];
+
+  pythonRelaxDeps = [
+    "docopt"
+    "pdfminer.six"
+    "wand"
+  ];
+
+  # needs pyvoronoi, which isn't packaged yet
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "py_pdf_parser"
+    "py_pdf_parser.loaders"
+  ];
+
+  meta = with lib; {
+    description = "A tool to help extracting information from structured PDFs";
+    homepage = "https://github.com/jstockwin/py-pdf-parser";
+    changelog = "https://github.com/jstockwin/py-pdf-parser/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyTelegramBotAPI/default.nix b/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
index 95e892d215123..6d9ea5ddf2edc 100644
--- a/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
+++ b/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
@@ -18,7 +18,7 @@
 
 buildPythonPackage rec {
   pname = "pytelegrambotapi";
-  version = "4.11.0";
+  version = "4.12.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -27,7 +27,7 @@ buildPythonPackage rec {
     owner = "eternnoir";
     repo = "pyTelegramBotAPI";
     rev = "refs/tags/${version}";
-    hash = "sha256-K81B8cNQ5Vvu8nH8kiroeffwRaUIKpwnpX2Jq7xPjB0=";
+    hash = "sha256-cW9IQy4D2iaoQ6oHQ07f27YQR7q9DBv2JkoukUtPBRQ=";
   };
 
   passthru.optional-dependencies = {
diff --git a/pkgs/development/python-modules/pygame_sdl2/default.nix b/pkgs/development/python-modules/pygame_sdl2/default.nix
index 444fe10dfea3f..318683f048159 100644
--- a/pkgs/development/python-modules/pygame_sdl2/default.nix
+++ b/pkgs/development/python-modules/pygame_sdl2/default.nix
@@ -9,7 +9,7 @@ buildPythonPackage rec {
 
   src = fetchurl {
     url = "https://www.renpy.org/dl/${renpy_version}/pygame_sdl2-${version}-for-renpy-${renpy_version}.tar.gz";
-    hash = "sha256-BpETor1dz8qdMM8iYijlthnsrPF0FS8b1FDvuXxFB9s=";
+    hash = "sha256-smJsOVavMvy0aO3C5PC050LlOy5bsG45uWSMbbFMQ+I=";
   };
 
   # force rebuild of headers needed for install
diff --git a/pkgs/development/python-modules/pyglet/default.nix b/pkgs/development/python-modules/pyglet/default.nix
index 2c7ba46d0aba2..29d3bab48ab19 100644
--- a/pkgs/development/python-modules/pyglet/default.nix
+++ b/pkgs/development/python-modules/pyglet/default.nix
@@ -18,13 +18,13 @@
 }:
 
 buildPythonPackage rec {
-  version = "2.0.6";
+  version = "2.0.7";
   pname = "pyglet";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-b5PyvebfgYCH4bXZEDMIbLL7aJwSILYyxG0fxKZoWgA=";
+    hash = "sha256-koL5SXwcDNyyzDnYwFCQz2ht7bnrvvSo3kmvIqCuDo8=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/pysimplegui/default.nix b/pkgs/development/python-modules/pysimplegui/default.nix
index 827c3ececf5e8..c5c71810a9382 100644
--- a/pkgs/development/python-modules/pysimplegui/default.nix
+++ b/pkgs/development/python-modules/pysimplegui/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "pysimplegui";
-  version = "4.60.4";
+  version = "4.60.5";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -15,7 +15,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     pname = "PySimpleGUI";
     inherit version;
-    hash = "sha256-+IyCwwGlGuo1vmBdwGC8zrDctmguFigFRIhHAatLI7o=";
+    hash = "sha256-MQFNHMXu8Tc9fpNWT/JgRmJkXMd0qTmx8BqiU+f514s=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/python-libnmap/default.nix b/pkgs/development/python-modules/python-libnmap/default.nix
new file mode 100644
index 0000000000000..a6acf665ee855
--- /dev/null
+++ b/pkgs/development/python-modules/python-libnmap/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, defusedxml
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "python-libnmap";
+  version = "0.7.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "savon-noir";
+    repo = "python-libnmap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cI8wdOvTmRy2cxLBkJn7vXRBRvewDMNl/tkIiRGhZJ8=";
+  };
+
+  passthru.optional-dependencies = {
+    defusedxml = [
+      defusedxml
+    ];
+  };
+
+  # We don't want the nmap binary being present
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "libnmap"
+  ];
+
+  meta = with lib; {
+    description = "Library to run nmap scans, parse and diff scan results";
+    homepage = "https://github.com/savon-noir/python-libnmap";
+    changelog = "https://github.com/savon-noir/python-libnmap/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-mystrom/default.nix b/pkgs/development/python-modules/python-mystrom/default.nix
index e269ccc121da0..16b634999c894 100644
--- a/pkgs/development/python-modules/python-mystrom/default.nix
+++ b/pkgs/development/python-modules/python-mystrom/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "python-mystrom";
-  version = "2.1.0";
+  version = "2.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-Kqv5rUdwkynOzssID77gVYyzs0CDR/bUWh6zpt5zOP8=";
+    hash = "sha256-VFsTA/isBw0H7qXQhOX6K2p1QcVxO7q5TIzf8YivVgc=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/qtile-extras/default.nix b/pkgs/development/python-modules/qtile-extras/default.nix
index 3ba8f9487d58f..44e6a2dcc906c 100644
--- a/pkgs/development/python-modules/qtile-extras/default.nix
+++ b/pkgs/development/python-modules/qtile-extras/default.nix
@@ -6,7 +6,7 @@
 , xorgserver
 , pulseaudio
 , pytest-asyncio
-, qtile-unwrapped
+, qtile
 , keyring
 , requests
 , stravalib
@@ -34,7 +34,7 @@ buildPythonPackage rec {
   ];
   checkInputs = [
     pytest-asyncio
-    qtile-unwrapped
+    qtile
     pulseaudio
     keyring
     requests
diff --git a/pkgs/development/python-modules/qtile/default.nix b/pkgs/development/python-modules/qtile/default.nix
new file mode 100644
index 0000000000000..bf3f59dcb3bbd
--- /dev/null
+++ b/pkgs/development/python-modules/qtile/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, cairocffi
+, dbus-next
+, dbus-python
+, glib
+, libinput
+, libxkbcommon
+, mpd2
+, mypy
+, pango
+, pkg-config
+, psutil
+, pulseaudio
+, pygobject3
+, python-dateutil
+, pywayland
+, pywlroots
+, pyxdg
+, setuptools
+, setuptools-scm
+, wayland
+, wlroots
+, xcbutilcursor
+, xcffib
+, xkbcommon
+}:
+
+buildPythonPackage rec {
+  pname = "qtile";
+  version = "0.22.1";
+
+  src = fetchFromGitHub {
+    owner = "qtile";
+    repo = "qtile";
+    rev = "v${version}";
+    hash = "sha256-HOyExVKOqZ4OeNM1/AiXQeiUV+EbSJLEjWEibm07ff8=";
+  };
+
+  patches = [
+    ./fix-restart.patch # https://github.com/NixOS/nixpkgs/issues/139568
+  ];
+
+  postPatch = ''
+    substituteInPlace libqtile/pangocffi.py \
+      --replace libgobject-2.0.so.0 ${glib.out}/lib/libgobject-2.0.so.0 \
+      --replace libpangocairo-1.0.so.0 ${pango.out}/lib/libpangocairo-1.0.so.0 \
+      --replace libpango-1.0.so.0 ${pango.out}/lib/libpango-1.0.so.0
+    substituteInPlace libqtile/backend/x11/xcursors.py \
+      --replace libxcb-cursor.so.0 ${xcbutilcursor.out}/lib/libxcb-cursor.so.0
+  '';
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    pkg-config
+    setuptools-scm
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    xcffib
+    (cairocffi.override { withXcffib = true; })
+    python-dateutil
+    dbus-python
+    dbus-next
+    mpd2
+    psutil
+    pyxdg
+    pygobject3
+    pywayland
+    pywlroots
+    xkbcommon
+    pulseaudio
+  ];
+
+  buildInputs = [
+    libinput
+    wayland
+    wlroots
+    libxkbcommon
+  ];
+
+  # for `qtile check`, needs `stubtest` and `mypy` commands
+  makeWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ mypy ]}"
+  ];
+
+  doCheck = false; # Requires X server #TODO this can be worked out with the existing NixOS testing infrastructure.
+
+  meta = with lib; {
+    homepage = "http://www.qtile.org/";
+    license = licenses.mit;
+    description = "A small, flexible, scriptable tiling window manager written in Python";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kamilchm arjan-s ];
+  };
+}
diff --git a/pkgs/development/python-modules/qtile/fix-restart.patch b/pkgs/development/python-modules/qtile/fix-restart.patch
new file mode 100644
index 0000000000000..eca4f0866342f
--- /dev/null
+++ b/pkgs/development/python-modules/qtile/fix-restart.patch
@@ -0,0 +1,22 @@
+diff --git a/libqtile/core/lifecycle.py b/libqtile/core/lifecycle.py
+index 0d4d119d..c37d1799 100644
+--- a/libqtile/core/lifecycle.py
++++ b/libqtile/core/lifecycle.py
+@@ -25,7 +25,7 @@ class LifeCycle:
+ 
+     def _atexit(self) -> None:
+         if self.behavior is Behavior.RESTART:
+-            argv = [sys.executable] + sys.argv
++            argv = sys.argv
+             if "--no-spawn" not in argv:
+                 argv.append("--no-spawn")
+             argv = [s for s in argv if not s.startswith("--with-state")]
+@@ -33,7 +33,7 @@ class LifeCycle:
+                 argv.append("--with-state=" + self.state_file)
+             logger.warning("Restarting Qtile with os.execv(...)")
+             # No other code will execute after the following line does
+-            os.execv(sys.executable, argv)
++            os.execv(sys.argv[0], argv)
+         elif self.behavior is Behavior.TERMINATE:
+             logger.warning("Qtile will now terminate")
+         elif self.behavior is Behavior.NONE:
diff --git a/pkgs/development/python-modules/qtile/wrapper.nix b/pkgs/development/python-modules/qtile/wrapper.nix
new file mode 100644
index 0000000000000..b4f6e4c2e23b2
--- /dev/null
+++ b/pkgs/development/python-modules/qtile/wrapper.nix
@@ -0,0 +1,8 @@
+{ python3 }:
+
+(python3.withPackages (_: [ python3.pkgs.qtile ])).overrideAttrs (_: {
+  # restore some qtile attrs, beautify name
+  inherit (python3.pkgs.qtile) pname version meta;
+  name = with python3.pkgs.qtile; "${pname}-${version}";
+  passthru.unwrapped = python3.pkgs.qtile;
+})
diff --git a/pkgs/development/python-modules/rdkit/default.nix b/pkgs/development/python-modules/rdkit/default.nix
index 07c18b5463a86..470cc1e22e8c4 100644
--- a/pkgs/development/python-modules/rdkit/default.nix
+++ b/pkgs/development/python-modules/rdkit/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchFromGitHub
 , cmake
@@ -15,6 +16,7 @@
 , numpy
 , pandas
 , pillow
+, memorymappingHook
 }:
 let
   external = {
@@ -82,6 +84,8 @@ buildPythonPackage rec {
   buildInputs = [
     boost
     cairo
+  ] ++ lib.optionals (stdenv.system == "x86_64-darwin") [
+    memorymappingHook
   ];
 
   propagatedBuildInputs = [
@@ -149,7 +153,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Open source toolkit for cheminformatics";
-    maintainers = [ maintainers.rmcgibbo ];
+    maintainers = with maintainers; [ rmcgibbo natsukium ];
     license = licenses.bsd3;
     homepage = "https://www.rdkit.org";
   };
diff --git a/pkgs/development/python-modules/scancode-toolkit/default.nix b/pkgs/development/python-modules/scancode-toolkit/default.nix
index 4dc74dcbf6a13..bc25094c3d7f6 100644
--- a/pkgs/development/python-modules/scancode-toolkit/default.nix
+++ b/pkgs/development/python-modules/scancode-toolkit/default.nix
@@ -61,13 +61,13 @@
 
 buildPythonPackage rec {
   pname = "scancode-toolkit";
-  version = "31.2.4";
+  version = "31.2.6";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-08C3T4CoQm/6s8ERbq/m1t513zYuzVJoexlRkCvv3UY=";
+    hash = "sha256-VvhgXZpV58DHeY5+7nPbrbTTVuHkawFw5akbm4hPnBY=";
   };
 
   dontConfigure = true;
@@ -169,7 +169,8 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Tool to scan code for license, copyright, package and their documented dependencies and other interesting facts";
     homepage = "https://github.com/nexB/scancode-toolkit";
+    changelog = "https://github.com/nexB/scancode-toolkit/blob/v${version}/CHANGELOG.rst";
     license = with licenses; [ asl20 cc-by-40 ];
-    maintainers = [ ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/scikit-fmm/default.nix b/pkgs/development/python-modules/scikit-fmm/default.nix
index ba507803fa848..2915e68767e90 100644
--- a/pkgs/development/python-modules/scikit-fmm/default.nix
+++ b/pkgs/development/python-modules/scikit-fmm/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "scikit-fmm";
-  version = "2022.8.15";
+  version = "2023.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-BgDmxoB1QzZ/DlqIB0m66Km+fbAo5RcpjmX0BZ9985w=";
+    hash = "sha256-14ccR/ggdyq6kvJWUe8U5NJ96M45PArjwCqzxuJCPAs=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/simplesat/default.nix b/pkgs/development/python-modules/simplesat/default.nix
new file mode 100644
index 0000000000000..406283fc8b09d
--- /dev/null
+++ b/pkgs/development/python-modules/simplesat/default.nix
@@ -0,0 +1,48 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, writeText
+, lib
+, attrs
+, six
+, okonomiyaki
+}:
+
+let
+  version = "0.8.2";
+
+  versionFile = writeText "simplesat_ver" ''
+    version = '${version}'
+    full_version = '${version}'
+    git_revision = '0000000000000000000000000000000000000000'
+    is_released = True
+    msi_version = '${version}.000'
+    version_info = (${lib.versions.major version}, ${lib.versions.minor version}, ${lib.versions.patch version}, 'final', 0)
+  '';
+
+in buildPythonPackage rec {
+  pname = "simplesat";
+  inherit version;
+
+  propagatedBuildInputs = [ attrs six okonomiyaki ];
+
+  src = fetchFromGitHub {
+    owner = "enthought";
+    repo = "sat-solver";
+    rev = "v${version}";
+    hash = "sha256-6BQn1W2JGrMmNqgxi+sXx06XzNMcvwqYGMkpD0SSpT8=";
+  };
+
+  preConfigure = ''
+    cp ${versionFile} simplesat/_version.py
+  '';
+  dontUseSetuptoolsCheck = true;
+
+  pythonImportsCheck = [ "simplesat" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/enthought/sat-solver";
+    description = "Prototype for SAT-based dependency handling";
+    maintainers = with maintainers; [ genericnerdyusername ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/single-source/default.nix b/pkgs/development/python-modules/single-source/default.nix
new file mode 100644
index 0000000000000..3bf2ff810d507
--- /dev/null
+++ b/pkgs/development/python-modules/single-source/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, importlib-metadata
+, poetry-core
+, pytest-mock
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "single-source";
+  version = "0.3.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "rabbit72";
+    repo = "single-source";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-bhfMRIeJUd5JhN2tPww7fdbmHQ7ypcsZrYSa55v0+W8=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    importlib-metadata
+  ];
+
+  nativeCheckInputs = [
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "single_source"
+  ];
+
+  meta = with lib; {
+    description = "Access to the project version in Python code for PEP 621-style projects";
+    homepage = "https://github.com/rabbit72/single-source";
+    changelog = "https://github.com/rabbit72/single-source/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/pkgs/development/python-modules/trimesh/default.nix b/pkgs/development/python-modules/trimesh/default.nix
index 8eb1af7c01ed9..0dcaaa4cbef7f 100644
--- a/pkgs/development/python-modules/trimesh/default.nix
+++ b/pkgs/development/python-modules/trimesh/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "trimesh";
-  version = "3.21.6";
+  version = "3.21.7";
   format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-+gFqZAbGLoNDdOmbxElKwb0QY7BJfOUZVD7888T6eU8=";
+    hash = "sha256-wtGt3PUCUiSIiQRA3NxO1nPE35XQDipWfrwSKdDBhtE=";
   };
 
   nativeBuildInputs = [ setuptools ];
diff --git a/pkgs/development/python-modules/wheezy-captcha/default.nix b/pkgs/development/python-modules/wheezy-captcha/default.nix
new file mode 100644
index 0000000000000..4006bedf14e1f
--- /dev/null
+++ b/pkgs/development/python-modules/wheezy-captcha/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pillow
+}:
+
+buildPythonPackage rec {
+  pname = "wheezy.captcha";
+  version = "3.0.2";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-PdtOhoVOopQsX2raPqh0P8meM8/MysgKsIe27HNtl3s=";
+  };
+
+  propagatedBuildInputs = [ pillow ];
+
+  pythonImportsCheck = [ "wheezy.captcha" ];
+
+  meta = with lib; {
+    homepage = "https://wheezycaptcha.readthedocs.io/en/latest/";
+    description = "A lightweight CAPTCHA library";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/development/python-modules/word2vec/default.nix b/pkgs/development/python-modules/word2vec/default.nix
deleted file mode 100644
index 58d513adcc47a..0000000000000
--- a/pkgs/development/python-modules/word2vec/default.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ stdenv
-, lib
-, buildPythonPackage
-, fetchPypi
-, fetchzip
-, cython
-, numpy
-, scikit-learn
-, six
-, setuptools-scm
-, gcc
-, pytest
-, pytest-cov
-, isPy27
-}:
-let
-  testData = fetchzip {
-    url = "http://mattmahoney.net/dc/text8.zip";
-    sha256 = "0w3l64bww9znmmvd9cqbfmh3dddnlrjicz43y5qq6fhi9cfqjfar";
-  };
-in
-buildPythonPackage rec {
-  pname = "word2vec";
-  version = "0.11.1";
-  disabled = isPy27;
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "222d8ffb47f385c43eba45e3f308e605fc9736b2b7137d74979adf1a31e7c8b4";
-  };
-
-  nativeBuildInputs = [ setuptools-scm gcc ];
-
-  propagatedBuildInputs = [ cython numpy scikit-learn six ];
-
-  nativeCheckInputs = [ pytest pytest-cov ];
-
-  # Checks require test data downloaded separately
-  # See project source Makefile:test-data rule for reference
-  checkPhase = ''
-    PATH=$PATH:$out/bin
-    mkdir data
-    head -c 100000 ${testData}/text8 > data/text8-small
-    pytest
-  '';
-
-  meta = with lib; {
-    broken = stdenv.isDarwin;
-    description = "Tool for computing continuous distributed representations of words";
-    homepage = "https://github.com/danielfrg/word2vec";
-    license = licenses.asl20;
-    maintainers = with maintainers; [ NikolaMandic ];
-  };
-
-}
diff --git a/pkgs/development/python-modules/wordcloud/default.nix b/pkgs/development/python-modules/wordcloud/default.nix
index 9886f2db1cb44..bf71a5a14cd3e 100644
--- a/pkgs/development/python-modules/wordcloud/default.nix
+++ b/pkgs/development/python-modules/wordcloud/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , cython
 , fetchFromGitHub
-, fetchpatch
 , matplotlib
 , mock
 , numpy
@@ -13,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "wordcloud";
-  version = "unstable-2023-01-04";
+  version = "1.9.1.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -21,8 +20,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "amueller";
     repo = "word_cloud";
-    rev = "dbf7ab7753a36e1c12c0e1b36aeeece5023f39f9";
-    hash = "sha256-ogSkVcPUth7bh7mxwdDmF/Fc2ySDxbLA8ArmBNnPvw8=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-Tcle9otT1eBN/RzajwKZDUq8xX0Lhi2t74OvhUrvHZE=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/wordfreq/default.nix b/pkgs/development/python-modules/wordfreq/default.nix
index 6adc8b1538e50..5f77c34f98ade 100644
--- a/pkgs/development/python-modules/wordfreq/default.nix
+++ b/pkgs/development/python-modules/wordfreq/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, poetry-core
 , regex
 , langcodes
 , ftfy
@@ -7,21 +8,27 @@
 , mecab-python3
 , jieba
 , pytestCheckHook
-, isPy27
+, pythonOlder
 , fetchFromGitHub
 }:
 
 buildPythonPackage rec {
   pname = "wordfreq";
   version = "3.0.2";
-  disabled = isPy27;
+  format = "pyproject";
 
-   src = fetchFromGitHub {
-    owner = "LuminosoInsight";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "rspeer";
     repo = "wordfreq";
     rev = "refs/tags/v${version}";
     hash = "sha256-ANOBbQWLB35Vz6oil6QZDpsNpKHeKUJnDKA5Q9JRVdE=";
-   };
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
 
   propagatedBuildInputs = [
     regex
@@ -32,10 +39,6 @@ buildPythonPackage rec {
     jieba
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py --replace "regex ==" "regex >="
-  '';
-
   nativeCheckInputs = [ pytestCheckHook ];
   disabledTests = [
     # These languages require additional dictionaries that aren't packaged
@@ -46,7 +49,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "A library for looking up the frequencies of words in many languages, based on many sources of data";
-    homepage =  "https://github.com/LuminosoInsight/wordfreq/";
+    homepage =  "https://github.com/rspeer/wordfreq/";
     license = licenses.mit;
     maintainers = with maintainers; [ ixxie ];
   };
diff --git a/pkgs/development/python-modules/xiaomi-ble/default.nix b/pkgs/development/python-modules/xiaomi-ble/default.nix
index 22fe3f178b27c..bdb5888f352b4 100644
--- a/pkgs/development/python-modules/xiaomi-ble/default.nix
+++ b/pkgs/development/python-modules/xiaomi-ble/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "xiaomi-ble";
-  version = "0.17.0";
+  version = "0.17.1";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "Bluetooth-Devices";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-sXmwLXbFNckw9lCZ4V5hyZyDnStTp2x4InmoBz3c++w=";
+    hash = "sha256-CioXmv5VJBiJx97k69Sp5kaeD59p+OSL14RVse/gYUA=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/zipfile2/default.nix b/pkgs/development/python-modules/zipfile2/default.nix
new file mode 100644
index 0000000000000..fc733e6cdbd48
--- /dev/null
+++ b/pkgs/development/python-modules/zipfile2/default.nix
@@ -0,0 +1,27 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, lib
+}:
+
+buildPythonPackage rec {
+  pname = "zipfile2";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "cournape";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BwcEgW4XrQqz0Jmtbyxf8q0mWTJXv2dL3Tk7N/IYuMI=";
+  };
+
+  patches = [ ./no-setuid.patch ];
+
+  pythonImportsCheck = [ "zipfile2" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/cournape/zipfile2";
+    description = "A backwards-compatible improved zipfile class";
+    maintainers = with maintainers; [ genericnerdyusername ];
+    license = licenses.psfl;
+  };
+}
diff --git a/pkgs/development/python-modules/zipfile2/no-setuid.patch b/pkgs/development/python-modules/zipfile2/no-setuid.patch
new file mode 100644
index 0000000000000..951358585a770
--- /dev/null
+++ b/pkgs/development/python-modules/zipfile2/no-setuid.patch
@@ -0,0 +1,15 @@
+diff --git a/zipfile2/tests/test__zipfile.py b/zipfile2/tests/test__zipfile.py
+index 60f2ed2..db6e5bc 100644
+--- a/zipfile2/tests/test__zipfile.py
++++ b/zipfile2/tests/test__zipfile.py
+@@ -585,8 +585,8 @@ class TestsPermissionExtraction(unittest.TestCase):
+                         if index & 1 << order:
+                             mode |= permissions[permgroup][order]
+                     for order in range(3):
+-                        if specialindex & 1 << order:
+-                            mode |= permissions['special'][order]
++                        if specialindex & 1 << order and order == 0:
++                            raise unittest.SkipTest("The nix build process doesn't allow you to use the setuid bit")
+                     os.chmod(path, mode)
+                     real_permission = os.stat(path).st_mode & 0xFFF
+                     self.files.append((path, real_permission))