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/amaranth-boards/default.nix6
-rw-r--r--pkgs/development/python-modules/amaranth-soc/default.nix2
-rw-r--r--pkgs/development/python-modules/amaranth/default.nix2
-rw-r--r--pkgs/development/python-modules/b2sdk/default.nix7
-rw-r--r--pkgs/development/python-modules/birch/default.nix6
-rw-r--r--pkgs/development/python-modules/cachier/default.nix4
-rw-r--r--pkgs/development/python-modules/domeneshop/default.nix9
-rw-r--r--pkgs/development/python-modules/ffmpy/default.nix2
-rw-r--r--pkgs/development/python-modules/flynt/default.nix42
-rw-r--r--pkgs/development/python-modules/frozendict/default.nix7
-rw-r--r--pkgs/development/python-modules/govee-local-api/default.nix27
-rw-r--r--pkgs/development/python-modules/gradio-pdf/default.nix2
-rw-r--r--pkgs/development/python-modules/gradio/client.nix2
-rw-r--r--pkgs/development/python-modules/gradio/default.nix2
-rw-r--r--pkgs/development/python-modules/hdf5plugin/default.nix2
-rw-r--r--pkgs/development/python-modules/langchain-community/default.nix4
-rw-r--r--pkgs/development/python-modules/langchain-core/default.nix4
-rw-r--r--pkgs/development/python-modules/langsmith/default.nix4
-rw-r--r--pkgs/development/python-modules/milksnake/default.nix10
-rw-r--r--pkgs/development/python-modules/mpi4py/default.nix4
-rw-r--r--pkgs/development/python-modules/numba-scipy/default.nix4
-rw-r--r--pkgs/development/python-modules/parsedmarc/default.nix19
-rw-r--r--pkgs/development/python-modules/pdoc/default.nix2
-rw-r--r--pkgs/development/python-modules/pygame-ce/default.nix123
-rw-r--r--pkgs/development/python-modules/pygame-ce/fix-dependency-finding.patch41
-rw-r--r--pkgs/development/python-modules/pygame-ce/skip-surface-tests.patch26
-rw-r--r--pkgs/development/python-modules/pygame/default.nix8
-rw-r--r--pkgs/development/python-modules/pymongo-inmemory/default.nix6
-rw-r--r--pkgs/development/python-modules/pyrender/default.nix11
-rw-r--r--pkgs/development/python-modules/pytikz-allefeld/default.nix9
-rw-r--r--pkgs/development/python-modules/pyunpack/default.nix4
-rw-r--r--pkgs/development/python-modules/pyvis/default.nix9
-rw-r--r--pkgs/development/python-modules/pyvista/default.nix4
-rw-r--r--pkgs/development/python-modules/remi/default.nix15
-rw-r--r--pkgs/development/python-modules/sanix/default.nix42
-rw-r--r--pkgs/development/python-modules/snaptime/default.nix9
-rw-r--r--pkgs/development/python-modules/spyder/default.nix14
-rw-r--r--pkgs/development/python-modules/strct/default.nix4
-rw-r--r--pkgs/development/python-modules/stripe/default.nix4
-rw-r--r--pkgs/development/python-modules/trimesh/default.nix6
-rw-r--r--pkgs/development/python-modules/uart-devices/default.nix48
-rw-r--r--pkgs/development/python-modules/upb-lib/default.nix40
42 files changed, 481 insertions, 115 deletions
diff --git a/pkgs/development/python-modules/amaranth-boards/default.nix b/pkgs/development/python-modules/amaranth-boards/default.nix
index 01f5dde3b562..2475c93f8c61 100644
--- a/pkgs/development/python-modules/amaranth-boards/default.nix
+++ b/pkgs/development/python-modules/amaranth-boards/default.nix
@@ -9,7 +9,7 @@
 buildPythonPackage rec {
   pname = "amaranth-boards";
   version = "0-unstable-2023-12-13";
-  format = "setuptools";
+  pyproject = true;
   # python setup.py --version
   realVersion = "0.1.dev202+g${lib.substring 0 7 src.rev}";
 
@@ -20,8 +20,8 @@ buildPythonPackage rec {
     hash = "sha256-dwZCKMJnEY9RjzkcJ9r3TEC7W+Wfi/P7Hjl4/d60/qo=";
   };
 
-  nativeBuildInputs = [ setuptools-scm ];
-  propagatedBuildInputs = [ setuptools amaranth ];
+  nativeBuildInputs = [ setuptools setuptools-scm ];
+  dependencies = [ setuptools amaranth ];
 
   preBuild = ''
     export SETUPTOOLS_SCM_PRETEND_VERSION="${realVersion}"
diff --git a/pkgs/development/python-modules/amaranth-soc/default.nix b/pkgs/development/python-modules/amaranth-soc/default.nix
index b509ec551cf8..0742055e9cf2 100644
--- a/pkgs/development/python-modules/amaranth-soc/default.nix
+++ b/pkgs/development/python-modules/amaranth-soc/default.nix
@@ -20,7 +20,7 @@ buildPythonPackage rec {
   };
 
   nativeBuildInputs = [ pdm-backend ];
-  propagatedBuildInputs = [ amaranth ];
+  dependencies = [ amaranth ];
 
   preBuild = ''
     export PDM_BUILD_SCM_VERSION="${realVersion}"
diff --git a/pkgs/development/python-modules/amaranth/default.nix b/pkgs/development/python-modules/amaranth/default.nix
index a0e2675a0099..5f2f072558df 100644
--- a/pkgs/development/python-modules/amaranth/default.nix
+++ b/pkgs/development/python-modules/amaranth/default.nix
@@ -34,7 +34,7 @@ buildPythonPackage rec {
     pdm-backend
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     jinja2
     pyvcd
   ] ++
diff --git a/pkgs/development/python-modules/b2sdk/default.nix b/pkgs/development/python-modules/b2sdk/default.nix
index 9c00f0c49cc9..266443af70f0 100644
--- a/pkgs/development/python-modules/b2sdk/default.nix
+++ b/pkgs/development/python-modules/b2sdk/default.nix
@@ -21,7 +21,7 @@
 
 buildPythonPackage rec {
   pname = "b2sdk";
-  version = "2.0.0";
+  version = "2.1.0";
   pyproject = true;
 
   disabled = pythonOlder "3.7";
@@ -30,7 +30,7 @@ buildPythonPackage rec {
     owner = "Backblaze";
     repo = "b2-sdk-python";
     rev = "refs/tags/v${version}";
-    hash = "sha256-0/UC4O19oO8SpboiPIhvkWBA8XHpc279fl377MooK54=";
+    hash = "sha256-/TuPT+Y0asGGtfRNxxvpX0WkS4O4asFmIuqSdQ4I9fQ=";
   };
 
   build-system = [ pdm-backend ];
@@ -60,6 +60,9 @@ buildPythonPackage rec {
     # requires aws s3 auth
     "test/integration/test_download.py"
     "test/integration/test_upload.py"
+
+    # Requires backblaze auth
+    "test/integration/test_bucket.py"
   ];
 
   disabledTests = [
diff --git a/pkgs/development/python-modules/birch/default.nix b/pkgs/development/python-modules/birch/default.nix
index 1dd4848427e5..56c95e415c31 100644
--- a/pkgs/development/python-modules/birch/default.nix
+++ b/pkgs/development/python-modules/birch/default.nix
@@ -31,20 +31,20 @@ buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace pytest.ini \
-      --replace  \
+      --replace-fail  \
         "--cov" \
         "#--cov"
 
     # configure correct version, which fails due to missing .git
     substituteInPlace versioneer.py birch/_version.py \
-      --replace '"0+unknown"' '"${version}"'
+      --replace-fail '"0+unknown"' '"${version}"'
   '';
 
   nativeBuildInputs = [
     setuptools
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     strct
   ];
 
diff --git a/pkgs/development/python-modules/cachier/default.nix b/pkgs/development/python-modules/cachier/default.nix
index 037f02b4d3ee..e8fe51d4ded7 100644
--- a/pkgs/development/python-modules/cachier/default.nix
+++ b/pkgs/development/python-modules/cachier/default.nix
@@ -35,14 +35,14 @@ buildPythonPackage rec {
     setuptools
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     watchdog
     portalocker
   ];
 
   preCheck = ''
     substituteInPlace pyproject.toml \
-      --replace  \
+      --replace-fail  \
         '"--cov' \
         '#"--cov'
   '';
diff --git a/pkgs/development/python-modules/domeneshop/default.nix b/pkgs/development/python-modules/domeneshop/default.nix
index b266412219b4..ab01424c0940 100644
--- a/pkgs/development/python-modules/domeneshop/default.nix
+++ b/pkgs/development/python-modules/domeneshop/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
+, setuptools
 , urllib3
 , pyopenssl
 , cryptography
@@ -12,7 +13,7 @@
 buildPythonPackage rec {
   pname = "domeneshop";
   version = "0.4.3";
-  format = "setuptools";
+  pyproject = true;
 
   disabled = pythonOlder "3.4";
 
@@ -21,7 +22,11 @@ buildPythonPackage rec {
     hash = "sha256-kL0X1mEsmVWqnq5NgsMBxeAu48zjmi3muhZYryTCOMo=";
   };
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  dependencies = [
     certifi
     urllib3
   ];
diff --git a/pkgs/development/python-modules/ffmpy/default.nix b/pkgs/development/python-modules/ffmpy/default.nix
index 8e00a4678ebf..974e2bcd8fda 100644
--- a/pkgs/development/python-modules/ffmpy/default.nix
+++ b/pkgs/development/python-modules/ffmpy/default.nix
@@ -25,7 +25,7 @@ buildPythonPackage rec {
   postPatch = ''
     # default to store ffmpeg
     substituteInPlace ffmpy.py \
-      --replace 'executable="ffmpeg",' 'executable="${ffmpeg-headless}/bin/ffmpeg",'
+      --replace-fail 'executable="ffmpeg",' 'executable="${ffmpeg-headless}/bin/ffmpeg",'
 
     #  The tests test a mock that does not behave like ffmpeg. If we default to the nix-store ffmpeg they fail.
     for fname in tests/*.py; do
diff --git a/pkgs/development/python-modules/flynt/default.nix b/pkgs/development/python-modules/flynt/default.nix
index 0e0b73d20f4e..24112171ffe7 100644
--- a/pkgs/development/python-modules/flynt/default.nix
+++ b/pkgs/development/python-modules/flynt/default.nix
@@ -1,34 +1,48 @@
-{ lib
-, buildPythonPackage
-, pythonOlder
-, fetchFromGitHub
-, astor
-, pytestCheckHook
+{
+  astor,
+  buildPythonPackage,
+  fetchFromGitHub,
+  hatchling,
+  lib,
+  pytestCheckHook,
+  pythonOlder,
+  tomli,
 }:
 
 buildPythonPackage rec {
   pname = "flynt";
-  version = "0.66";
-  format = "setuptools";
+  version = "1.0.1";
+  pyproject = true;
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "ikamensh";
     repo = "flynt";
-    rev = version;
-    hash = "sha256-DV433wqLjF5k4g8J7rj5gZfaw+Y4/TDOoFKo3eKDjZ4=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-UHY4UDBHcP3ARikktIehSUD3Dx8A0xpOnfKWWrLCsOY=";
   };
 
-  propagatedBuildInputs = [ astor ];
+  build-system = [ hatchling ];
+
+  propagatedBuildInputs = [ astor ] ++ lib.optionals (pythonOlder "3.11") [ tomli ];
 
   nativeCheckInputs = [ pytestCheckHook ];
 
+  pythonImportsCheck = [ "flynt" ];
+
+  disabledTests = [
+    # AssertionError
+    "test_fstringify"
+    "test_mixed_quote_types_unsafe"
+  ];
+
   meta = with lib; {
-    description = "command line tool to automatically convert a project's Python code from old format style strings into Python 3.6+'s f-strings";
-    mainProgram = "flynt";
+    description = "Tool to automatically convert old string literal formatting to f-strings";
     homepage = "https://github.com/ikamensh/flynt";
+    changelog = "https://github.com/ikamensh/flynt/blob/${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "flynt";
   };
 }
diff --git a/pkgs/development/python-modules/frozendict/default.nix b/pkgs/development/python-modules/frozendict/default.nix
index e1ded2da5f9b..5405e570ed8d 100644
--- a/pkgs/development/python-modules/frozendict/default.nix
+++ b/pkgs/development/python-modules/frozendict/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, setuptools
 , pytestCheckHook
 , pythonAtLeast
 , pythonOlder
@@ -9,7 +10,7 @@
 buildPythonPackage rec {
   pname = "frozendict";
   version = "2.4.2";
-  format = "setuptools";
+  pyproject = true;
 
   disabled = pythonOlder "3.6";
 
@@ -32,6 +33,10 @@ buildPythonPackage rec {
     fi
   '';
 
+  nativeBuildInputs = [
+    setuptools
+  ];
+
   nativeCheckInputs = [
     pytestCheckHook
   ];
diff --git a/pkgs/development/python-modules/govee-local-api/default.nix b/pkgs/development/python-modules/govee-local-api/default.nix
index 03501fa0cbcf..6cf2fa9b29c2 100644
--- a/pkgs/development/python-modules/govee-local-api/default.nix
+++ b/pkgs/development/python-modules/govee-local-api/default.nix
@@ -1,10 +1,11 @@
-{ lib
-, buildPythonPackage
-, fetchFromGitHub
-, poetry-core
-, poetry-dynamic-versioning
-, pytestCheckHook
-, pythonOlder
+{
+  lib,
+  buildPythonPackage,
+  fetchFromGitHub,
+  poetry-core,
+  poetry-dynamic-versioning,
+  pytestCheckHook,
+  pythonOlder,
 }:
 
 buildPythonPackage rec {
@@ -21,21 +22,17 @@ buildPythonPackage rec {
     hash = "sha256-J4SG4n6LIZ/G6pEXAzliV7uTWzqsH7rtFe3Y7BJ2dWE=";
   };
 
-  nativeBuildInputs = [
+  build-system = [
     poetry-core
     poetry-dynamic-versioning
   ];
 
-  nativeCheckInputs = [
-    pytestCheckHook
-  ];
+  nativeCheckInputs = [ pytestCheckHook ];
 
-  pythonImportsCheck = [
-    "govee_local_api"
-  ];
+  pythonImportsCheck = [ "govee_local_api" ];
 
   meta = with lib; {
-    description = "";
+    description = "Library to communicate with Govee local API";
     homepage = "https://github.com/Galorhallen/govee-local-api";
     changelog = "https://github.com/Galorhallen/govee-local-api/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/development/python-modules/gradio-pdf/default.nix b/pkgs/development/python-modules/gradio-pdf/default.nix
index caa3ddbaa6b8..4a5128455e6d 100644
--- a/pkgs/development/python-modules/gradio-pdf/default.nix
+++ b/pkgs/development/python-modules/gradio-pdf/default.nix
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     hatchling
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     gradio-client
   ];
 
diff --git a/pkgs/development/python-modules/gradio/client.nix b/pkgs/development/python-modules/gradio/client.nix
index 2c3abd4c0e78..96c293d399c5 100644
--- a/pkgs/development/python-modules/gradio/client.nix
+++ b/pkgs/development/python-modules/gradio/client.nix
@@ -59,7 +59,7 @@ buildPythonPackage rec {
     pythonRelaxDepsHook
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     setuptools # needed for 'pkg_resources'
     fsspec
     httpx
diff --git a/pkgs/development/python-modules/gradio/default.nix b/pkgs/development/python-modules/gradio/default.nix
index 69e57b821a69..6c735123aca1 100644
--- a/pkgs/development/python-modules/gradio/default.nix
+++ b/pkgs/development/python-modules/gradio/default.nix
@@ -99,7 +99,7 @@ buildPythonPackage rec {
     hatch-fancy-pypi-readme
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     setuptools # needed for 'pkg_resources'
     aiofiles
     altair
diff --git a/pkgs/development/python-modules/hdf5plugin/default.nix b/pkgs/development/python-modules/hdf5plugin/default.nix
index c2cfe5843c42..7d4019d28ce2 100644
--- a/pkgs/development/python-modules/hdf5plugin/default.nix
+++ b/pkgs/development/python-modules/hdf5plugin/default.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     hash = "sha256-MnqY1PyGzo31H696J9CekiA2rJrUYzUMDC3UJMZaFLA=";
   };
 
-  propagatedBuildInputs = [
+  dependencies = [
     h5py
   ];
 
diff --git a/pkgs/development/python-modules/langchain-community/default.nix b/pkgs/development/python-modules/langchain-community/default.nix
index 452f79f7794d..af29f6068b04 100644
--- a/pkgs/development/python-modules/langchain-community/default.nix
+++ b/pkgs/development/python-modules/langchain-community/default.nix
@@ -18,7 +18,7 @@
 
 buildPythonPackage rec {
   pname = "langchain-community";
-  version = "0.0.34";
+  version = "0.0.36";
   pyproject = true;
 
   disabled = pythonOlder "3.8";
@@ -26,7 +26,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     pname = "langchain_community";
     inherit version;
-    hash = "sha256-lumoB9m0d3gg31qXCZb2vzrVYyE3vw9NhjvYMr3rKw8=";
+    hash = "sha256-l76dAM8RnJYeA+0ibgTmcPUbXUL1sF/8NRhZj6bSDHQ=";
   };
 
   build-system = [ poetry-core ];
diff --git a/pkgs/development/python-modules/langchain-core/default.nix b/pkgs/development/python-modules/langchain-core/default.nix
index 72ce1715493f..3c0b42156449 100644
--- a/pkgs/development/python-modules/langchain-core/default.nix
+++ b/pkgs/development/python-modules/langchain-core/default.nix
@@ -17,7 +17,7 @@
 
 buildPythonPackage rec {
   pname = "langchain-core";
-  version = "0.1.46";
+  version = "0.1.48";
   pyproject = true;
 
   disabled = pythonOlder "3.8";
@@ -25,7 +25,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     pname = "langchain_core";
     inherit version;
-    hash = "sha256-F8QWNJ9cepgI5w43JXSaOi31CI8ezKBFyIOHGqlfnJ4=";
+    hash = "sha256-8KmwqPIvIZ72/YTisdkqgBToRRTAobVTNw/UApaBPBY=";
   };
 
   pythonRelaxDeps = [
diff --git a/pkgs/development/python-modules/langsmith/default.nix b/pkgs/development/python-modules/langsmith/default.nix
index 32330e496a6f..9bf32dc7a158 100644
--- a/pkgs/development/python-modules/langsmith/default.nix
+++ b/pkgs/development/python-modules/langsmith/default.nix
@@ -22,7 +22,7 @@
 
 buildPythonPackage rec {
   pname = "langsmith";
-  version = "0.1.51";
+  version = "0.1.52";
   pyproject = true;
 
   disabled = pythonOlder "3.8";
@@ -31,7 +31,7 @@ buildPythonPackage rec {
     owner = "langchain-ai";
     repo = "langsmith-sdk";
     rev = "refs/tags/v${version}";
-    hash = "sha256-31DC5SqI2V7d3iC5LlZgU5xB0Lh6GrBFFF3A+HEbUKg=";
+    hash = "sha256-kTl+H1odRYDZc1KEuopZV9PvOQBd4QioWMhb3pD6xKE=";
   };
 
   sourceRoot = "${src.name}/python";
diff --git a/pkgs/development/python-modules/milksnake/default.nix b/pkgs/development/python-modules/milksnake/default.nix
index 72115444ffa2..567305b194e8 100644
--- a/pkgs/development/python-modules/milksnake/default.nix
+++ b/pkgs/development/python-modules/milksnake/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, cffi }:
+{ lib, buildPythonPackage, fetchPypi, fetchpatch, cffi }:
 
 buildPythonPackage rec {
   pname = "milksnake";
@@ -11,6 +11,14 @@ buildPythonPackage rec {
     sha256 = "120nprd8lqis7x7zy72536gk2j68f7gxm8gffmx8k4ygifvl7kfz";
   };
 
+  patches = [
+    (fetchpatch {
+      name = "fix-regex-python-311.patch";
+      url = "https://github.com/getsentry/milksnake/commit/421cc1ffab4d76d01366240c087ffb30d63b744c.diff";
+      hash = "sha256-U/C4CCX8SEOzVXNpOf4hVy2V3Lh6fUrFkz5z+h191C8=";
+    })
+  ];
+
   propagatedBuildInputs = [
    cffi
   ];
diff --git a/pkgs/development/python-modules/mpi4py/default.nix b/pkgs/development/python-modules/mpi4py/default.nix
index b5f4e403ab38..9119db8a204b 100644
--- a/pkgs/development/python-modules/mpi4py/default.nix
+++ b/pkgs/development/python-modules/mpi4py/default.nix
@@ -4,12 +4,12 @@
 
 buildPythonPackage rec {
   pname = "mpi4py";
-  version = "3.1.5";
+  version = "3.1.6";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-pwbnbbklUTXC+10e9Uy097DkrZ4zy62n3idiYgXyoVM=";
+    hash = "sha256-yPpiXg+SsILvlVv7UvGfpmkdKSc9fXETXSlaoUPe5ss=";
   };
 
   passthru = {
diff --git a/pkgs/development/python-modules/numba-scipy/default.nix b/pkgs/development/python-modules/numba-scipy/default.nix
index c4c37b7ad333..22e3db22f302 100644
--- a/pkgs/development/python-modules/numba-scipy/default.nix
+++ b/pkgs/development/python-modules/numba-scipy/default.nix
@@ -11,14 +11,14 @@
 
 buildPythonPackage rec {
   pname = "numba-scipy";
-  version = "0.3.1";
+  version = "0.4.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-cApTGH5GJZH/RbkRjKhL3injvixD5kvfaS49FjrPA2U=";
+    hash = "sha256-RDZF1mNcZnrcOzjQpjbZq8yXHnjeLAeAjYmvzXvFhEQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/parsedmarc/default.nix b/pkgs/development/python-modules/parsedmarc/default.nix
index a5c59338fcdc..b9d4df1d58ee 100644
--- a/pkgs/development/python-modules/parsedmarc/default.nix
+++ b/pkgs/development/python-modules/parsedmarc/default.nix
@@ -24,11 +24,12 @@
 , mailsuite
 , msgraph-core
 , nixosTests
+, opensearch-py
 , publicsuffixlist
 , pythonOlder
+, pythonRelaxDepsHook
 , requests
 , tqdm
-, urllib3
 , xmltodict
 }:
 
@@ -50,14 +51,14 @@ buildPythonPackage rec {
     hash = "sha256-tK/cxOw50awcDAGRDTQ+Nxb9aJl2+zLZHuJq88xNmXM=";
   };
 
-  postPatch = ''
-    substituteInPlace pyproject.toml \
-      --replace "elasticsearch<7.14.0" "elasticsearch" \
-      --replace "elasticsearch-dsl==7.4.0" "elasticsearch-dsl"
-  '';
-
   nativeBuildInputs = [
     hatchling
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "elasticsearch"
+    "elasticsearch-dsl"
   ];
 
   propagatedBuildInputs = [
@@ -84,8 +85,8 @@ buildPythonPackage rec {
     publicsuffixlist
     requests
     tqdm
-    urllib3
     xmltodict
+    opensearch-py
   ];
 
   # no tests on PyPI, no tags on GitHub
@@ -108,5 +109,7 @@ buildPythonPackage rec {
     license = licenses.asl20;
     maintainers = with maintainers; [ talyz ];
     mainProgram = "parsedmarc";
+    # https://github.com/domainaware/parsedmarc/issues/464
+    broken = lib.versionAtLeast msgraph-core.version "1.0.0";
   };
 }
diff --git a/pkgs/development/python-modules/pdoc/default.nix b/pkgs/development/python-modules/pdoc/default.nix
index d1356c9a9940..c6ebbc72f5ce 100644
--- a/pkgs/development/python-modules/pdoc/default.nix
+++ b/pkgs/development/python-modules/pdoc/default.nix
@@ -30,7 +30,7 @@ buildPythonPackage rec {
     setuptools
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     jinja2
     pygments
     markupsafe
diff --git a/pkgs/development/python-modules/pygame-ce/default.nix b/pkgs/development/python-modules/pygame-ce/default.nix
new file mode 100644
index 000000000000..a476ecd58b85
--- /dev/null
+++ b/pkgs/development/python-modules/pygame-ce/default.nix
@@ -0,0 +1,123 @@
+{ stdenv
+, lib
+, substituteAll
+, fetchFromGitHub
+, buildPythonPackage
+, pythonOlder
+, python
+, pkg-config
+, setuptools
+, cython
+
+, AppKit
+, fontconfig
+, freetype
+, libjpeg
+, libpng
+, libX11
+, portmidi
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+buildPythonPackage rec {
+  pname = "pygame-ce";
+  version = "2.4.1";
+  pyproject = true;
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "pygame-community";
+    repo = "pygame-ce";
+    rev = "refs/tags/${version}";
+    hash = "sha256-4Ky+QEUsQ0odcwEETk0yGECs7CcJQthhavboOnMDvF8=";
+    # Unicode file cause different checksums on HFS+ vs. other filesystems
+    postFetch = "rm -rf $out/docs/reST";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-dependency-finding.patch;
+      buildinputs_include = builtins.toJSON (builtins.concatMap (dep: [
+        "${lib.getDev dep}/"
+        "${lib.getDev dep}/include"
+        "${lib.getDev dep}/include/SDL2"
+      ]) buildInputs);
+      buildinputs_lib = builtins.toJSON (builtins.concatMap (dep: [
+        "${lib.getLib dep}/"
+        "${lib.getLib dep}/lib"
+      ]) buildInputs);
+    })
+    # Skip tests that should be disabled without video driver
+    ./skip-surface-tests.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace buildconfig/config_{unix,darwin}.py \
+      --replace-fail 'from distutils' 'from setuptools._distutils'
+    substituteInPlace src_py/sysfont.py \
+      --replace-fail 'path="fc-list"' 'path="${fontconfig}/bin/fc-list"' \
+      --replace-fail /usr/X11/bin/fc-list ${fontconfig}/bin/fc-list
+  '' + lib.optionalString stdenv.isDarwin ''
+    # flaky
+    rm test/system_test.py
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cython
+    setuptools
+  ];
+
+  buildInputs = [
+    freetype
+    libX11
+    libjpeg
+    libpng
+    portmidi
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+  ];
+
+  preConfigure = ''
+    ${python.pythonOnBuildForHost.interpreter} buildconfig/config.py
+  '';
+
+  env = {
+    SDL_CONFIG = "${SDL2.dev}/bin/sdl2-config";
+  } // lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-function-pointer-types";
+  };
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    # No audio or video device in test environment
+    export SDL_VIDEODRIVER=dummy
+    export SDL_AUDIODRIVER=disk
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    ${python.interpreter} -m pygame.tests -v --exclude opengl,timing --time_out 300
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [
+    "pygame"
+  ];
+
+  meta = with lib; {
+    description = "Pygame Community Edition (CE) - library for multimedia application built on SDL";
+    homepage = "https://pyga.me/";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ pbsds ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/development/python-modules/pygame-ce/fix-dependency-finding.patch b/pkgs/development/python-modules/pygame-ce/fix-dependency-finding.patch
new file mode 100644
index 000000000000..5e39dff13575
--- /dev/null
+++ b/pkgs/development/python-modules/pygame-ce/fix-dependency-finding.patch
@@ -0,0 +1,41 @@
+diff --git a/buildconfig/config_darwin.py b/buildconfig/config_darwin.py
+index 9503ea70..d0d3ab6e 100644
+--- a/buildconfig/config_darwin.py
++++ b/buildconfig/config_darwin.py
+@@ -140,16 +140,8 @@ def main(auto_config=False):
+     ])
+ 
+     print('Hunting dependencies...')
+-    incdirs = ['/usr/local/include', '/opt/homebrew/include']
+-    incdirs.extend(['/usr/local/include/SDL2', '/opt/homebrew/include/SDL2', '/opt/local/include/SDL2'])
+-
+-    incdirs.extend([
+-       #'/usr/X11/include',
+-       '/opt/local/include',
+-       '/opt/local/include/freetype2/freetype']
+-    )
+-    #libdirs = ['/usr/local/lib', '/usr/X11/lib', '/opt/local/lib']
+-    libdirs = ['/usr/local/lib', '/opt/local/lib', '/opt/homebrew/lib']
++    incdirs = @buildinputs_include@
++    libdirs = @buildinputs_lib@
+ 
+     for d in DEPS:
+         if isinstance(d, (list, tuple)):
+diff --git a/buildconfig/config_unix.py b/buildconfig/config_unix.py
+index 3eba5b5c..53cc6233 100644
+--- a/buildconfig/config_unix.py
++++ b/buildconfig/config_unix.py
+@@ -240,11 +240,8 @@ def main(auto_config=False):
+     if not DEPS[0].found:
+         raise RuntimeError('Unable to run "sdl-config". Please make sure a development version of SDL is installed.')
+ 
+-    incdirs = []
+-    libdirs = []
+-    for extrabase in extrabases:
+-        incdirs += [extrabase + d for d in origincdirs]
+-        libdirs += [extrabase + d for d in origlibdirs]
++    incdirs = @buildinputs_include@
++    libdirs = @buildinputs_lib@
+ 
+     for arg in DEPS[0].cflags.split():
+         if arg[:2] == '-I':
diff --git a/pkgs/development/python-modules/pygame-ce/skip-surface-tests.patch b/pkgs/development/python-modules/pygame-ce/skip-surface-tests.patch
new file mode 100644
index 000000000000..21d9c9060f3b
--- /dev/null
+++ b/pkgs/development/python-modules/pygame-ce/skip-surface-tests.patch
@@ -0,0 +1,26 @@
+diff --git a/test/surface_test.py b/test/surface_test.py
+index 5ce78b6e..8b8f7ed5 100644
+--- a/test/surface_test.py
++++ b/test/surface_test.py
+@@ -1091,6 +1091,10 @@ class GeneralSurfaceTests(unittest.TestCase):
+         finally:
+             pygame.display.quit()
+ 
++    @unittest.skipIf(
++        os.environ.get("SDL_VIDEODRIVER") == "dummy",
++        'requires a non-"dummy" SDL_VIDEODRIVER',
++    )
+     def test_convert_init(self):
+         """Ensure initialization exceptions are raised
+         for surf.convert()."""
+@@ -1118,6 +1122,10 @@ class GeneralSurfaceTests(unittest.TestCase):
+         finally:
+             pygame.display.quit()
+ 
++    @unittest.skipIf(
++        os.environ.get("SDL_VIDEODRIVER") == "dummy",
++        'requires a non-"dummy" SDL_VIDEODRIVER',
++    )
+     def test_convert_alpha_init(self):
+         """Ensure initialization exceptions are raised
+         for surf.convert_alpha()."""
diff --git a/pkgs/development/python-modules/pygame/default.nix b/pkgs/development/python-modules/pygame/default.nix
index a219804f34b8..fca187c8cc58 100644
--- a/pkgs/development/python-modules/pygame/default.nix
+++ b/pkgs/development/python-modules/pygame/default.nix
@@ -1,6 +1,7 @@
 { stdenv
 , lib
 , substituteAll
+, fetchpatch
 , fetchFromGitHub
 , buildPythonPackage
 , pythonOlder
@@ -61,6 +62,13 @@ buildPythonPackage rec {
     })
     # Skip tests that should be disabled without video driver
     ./skip-surface-tests.patch
+
+    # removes distutils unbreaking py312, part of https://github.com/pygame/pygame/pull/4211
+    (fetchpatch {
+      name = "remove-distutils.patch";
+      url = "https://github.com/pygame/pygame/commit/6038e7d6583a7a25fcc6e15387cf6240e427e5a7.patch";
+      hash = "sha256-HxcYjjhsu/Y9HiK9xDvY4X5dgWPP4XFLxdYGXC6tdWM=";
+    })
   ];
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/pymongo-inmemory/default.nix b/pkgs/development/python-modules/pymongo-inmemory/default.nix
index 604f0c1c3cd3..6447b0a7ffe9 100644
--- a/pkgs/development/python-modules/pymongo-inmemory/default.nix
+++ b/pkgs/development/python-modules/pymongo-inmemory/default.nix
@@ -25,13 +25,13 @@ buildPythonPackage rec {
   postPatch = ''
     # move cache location from nix store to home
     substituteInPlace pymongo_inmemory/context.py \
-      --replace \
+      --replace-fail \
         'CACHE_FOLDER = path.join(path.dirname(__file__), "..", ".cache")' \
         'CACHE_FOLDER = os.environ.get("XDG_CACHE_HOME", os.environ["HOME"] + "/.cache") + "/pymongo-inmemory"'
 
     # fix a broken assumption arising from the above fix
     substituteInPlace pymongo_inmemory/_utils.py \
-      --replace \
+      --replace-fail \
         'os.mkdir(current_path)' \
         'os.makedirs(current_path)'
   '';
@@ -40,7 +40,7 @@ buildPythonPackage rec {
     poetry-core
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     pymongo
   ];
 
diff --git a/pkgs/development/python-modules/pyrender/default.nix b/pkgs/development/python-modules/pyrender/default.nix
index eb1d5d17ee47..41214174ae78 100644
--- a/pkgs/development/python-modules/pyrender/default.nix
+++ b/pkgs/development/python-modules/pyrender/default.nix
@@ -3,6 +3,7 @@
 , pythonOlder
 , fetchFromGitHub
 , fetchpatch
+, setuptools
 , freetype-py
 , imageio
 , networkx
@@ -19,7 +20,7 @@
 buildPythonPackage rec {
   pname = "pyrender";
   version = "0.1.45";
-  format = "setuptools";
+  pyproject = true;
 
   disabled = pythonOlder "3.5";
 
@@ -45,12 +46,16 @@ buildPythonPackage rec {
   # the commit does not apply as a patch when cherry picked, hence the substituteInPlace
   postPatch = ''
     substituteInPlace tests/unit/test_meshes.py \
-      --replace \
+      --replace-fail \
         "bm = trimesh.load('tests/data/WaterBottle.glb').dump()[0]" \
         'bm = trimesh.load("tests/data/WaterBottle.glb").geometry["WaterBottle"]'
   '';
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  dependencies = [
     freetype-py
     imageio
     networkx
diff --git a/pkgs/development/python-modules/pytikz-allefeld/default.nix b/pkgs/development/python-modules/pytikz-allefeld/default.nix
index fe59dc0a5208..9dd0bdb2bbe6 100644
--- a/pkgs/development/python-modules/pytikz-allefeld/default.nix
+++ b/pkgs/development/python-modules/pytikz-allefeld/default.nix
@@ -3,6 +3,7 @@
 , fetchFromGitHub
 , buildPythonPackage
 , pythonOlder
+, setuptools
 , pymupdf
 , numpy
 , ipython
@@ -12,7 +13,7 @@
 buildPythonPackage rec {
   pname = "pytikz-allefeld"; # "pytikz" on pypi is a different module
   version = "unstable-2022-11-01";
-  format = "setuptools";
+  pyproject = true;
 
   disabled = pythonOlder "3.5";
 
@@ -23,7 +24,11 @@ buildPythonPackage rec {
     hash = "sha256-G59UUkpjttJKNBN0MB/A9CftO8tO3nv8qlTxt3/fKHk=";
   };
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  dependencies = [
     pymupdf
     numpy
     ipython
diff --git a/pkgs/development/python-modules/pyunpack/default.nix b/pkgs/development/python-modules/pyunpack/default.nix
index ea7ad7d416a3..631c9706f0df 100644
--- a/pkgs/development/python-modules/pyunpack/default.nix
+++ b/pkgs/development/python-modules/pyunpack/default.nix
@@ -23,14 +23,14 @@ buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace pyunpack/__init__.py \
-      --replace \
+      --replace-fail \
        '_exepath("patool")' \
        '"${lib.getBin patool}/bin/.patool-wrapped"'
   '';
 
   nativeBuildInputs = [ setuptools ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     easyprocess
     entrypoint2
   ];
diff --git a/pkgs/development/python-modules/pyvis/default.nix b/pkgs/development/python-modules/pyvis/default.nix
index a9fea2dc6830..cb39d67192c9 100644
--- a/pkgs/development/python-modules/pyvis/default.nix
+++ b/pkgs/development/python-modules/pyvis/default.nix
@@ -2,6 +2,7 @@
 , fetchFromGitHub
 , fetchpatch
 , buildPythonPackage
+, setuptools
 , networkx
 , jinja2
 , ipython
@@ -13,7 +14,7 @@
 buildPythonPackage rec {
   pname = "pyvis";
   version = "0.3.2";
-  format = "setuptools";
+  pyproject = true;
 
   src = fetchFromGitHub {
     owner = "WestHealth";
@@ -22,7 +23,11 @@ buildPythonPackage rec {
     hash = "sha256-eo9Mk2c0hrBarCrzwmkXha3Qt4Bl1qR7Lhl9EkUx96E=";
   };
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  dependencies = [
     jinja2
     networkx
     ipython
diff --git a/pkgs/development/python-modules/pyvista/default.nix b/pkgs/development/python-modules/pyvista/default.nix
index c961904a0c5b..e0bfb1246f52 100644
--- a/pkgs/development/python-modules/pyvista/default.nix
+++ b/pkgs/development/python-modules/pyvista/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "pyvista";
-  version = "0.43.5";
+  version = "0.43.6";
   pyproject = true;
 
   disabled = pythonOlder "3.8";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-twcsOG/iHZGMBrGcpF5jEJB8CoKIBcO711t7sXJT214=";
+    hash = "sha256-EhhnX7r8yHynEVahMSB6LxCAquQcUF4cI0S4oW+IZ/Y=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/remi/default.nix b/pkgs/development/python-modules/remi/default.nix
index b1f28e269099..64b6a7066974 100644
--- a/pkgs/development/python-modules/remi/default.nix
+++ b/pkgs/development/python-modules/remi/default.nix
@@ -2,6 +2,7 @@
 , lib
 , buildPythonPackage
 , fetchFromGitHub
+, setuptools
 , pytestCheckHook
 , matplotlib
 , python-snap7
@@ -11,7 +12,7 @@
 buildPythonPackage rec {
   pname = "remi";
   version = "2022.7.27";
-  format = "setuptools";
+  pyproject = true;
 
   src = fetchFromGitHub {
     owner = "rawpython";
@@ -23,23 +24,27 @@ buildPythonPackage rec {
   preCheck = ''
     # for some reason, REMI already deal with these using try blocks, but they fail
     substituteInPlace test/test_widget.py \
-      --replace \
+      --replace-fail \
         "from html_validator import " \
         "from .html_validator import "
     substituteInPlace test/test_examples_app.py \
-      --replace \
+      --replace-fail \
         "from mock_server_and_request import " \
         "from .mock_server_and_request import " \
-      --replace \
+      --replace-fail \
         "from html_validator import " \
         "from .html_validator import "
     # Halves number of warnings
     substituteInPlace test/test_*.py \
-      --replace \
+      --replace-quiet \
         "self.assertEquals(" \
         "self.assertEqual("
   '';
 
+  nativeBuildInputs = [
+    setuptools
+  ];
+
   nativeCheckInputs = [
     pytestCheckHook
     python-snap7
diff --git a/pkgs/development/python-modules/sanix/default.nix b/pkgs/development/python-modules/sanix/default.nix
new file mode 100644
index 000000000000..64fd15074556
--- /dev/null
+++ b/pkgs/development/python-modules/sanix/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, requests
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "sanix";
+  version = "1.0.6";
+  pyproject = true;
+
+  disabled = pythonOlder "3.10";
+
+  src = fetchFromGitHub {
+    owner = "tomaszsluszniak";
+    repo = "sanix_py";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-D2w3hmL8ym63liWOYdZS4ry3lJ0utbbYGagWoOTT1TQ=";
+  };
+
+  build-system = [
+    setuptools
+  ];
+
+  dependencies = [
+    requests
+  ];
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "sanix" ];
+
+  meta = with lib; {
+    description = "Module to get measurements data from Sanix devices";
+    homepage = "https://github.com/tomaszsluszniak/sanix_py";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/snaptime/default.nix b/pkgs/development/python-modules/snaptime/default.nix
index 8555e3640d55..8f148eba4e68 100644
--- a/pkgs/development/python-modules/snaptime/default.nix
+++ b/pkgs/development/python-modules/snaptime/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, setuptools
 , python-dateutil
 , pytz
 }:
@@ -8,14 +9,18 @@
 buildPythonPackage rec {
   pname = "snaptime";
   version = "0.2.4";
-  format = "setuptools";
+  pyproject = true;
 
   src = fetchPypi {
     inherit pname version;
     hash = "sha256-4/HriQQ9WNMHIauYy2UCPxpMJ0DjsZdwQpixY8ktUIs=";
   };
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  dependencies = [
     python-dateutil
     pytz
   ];
diff --git a/pkgs/development/python-modules/spyder/default.nix b/pkgs/development/python-modules/spyder/default.nix
index fb28f0bf6207..edefde907e2c 100644
--- a/pkgs/development/python-modules/spyder/default.nix
+++ b/pkgs/development/python-modules/spyder/default.nix
@@ -15,6 +15,7 @@
 , nbconvert
 , numpy
 , numpydoc
+, pickleshare
 , psutil
 , pygments
 , pylint-venv
@@ -33,6 +34,7 @@
 , rope
 , rtree
 , scipy
+, setuptools
 , spyder-kernels
 , textdistance
 , three-merge
@@ -41,25 +43,26 @@
 
 buildPythonPackage rec {
   pname = "spyder";
-  version = "5.5.3";
-  format = "setuptools";
+  version = "5.5.4";
+  pyproject = true;
 
   disabled = pythonOlder "3.8";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-i3OEKbiELfEmgff3EQfr6xGc74f1kMx1e+PbbXprkis=";
+    hash = "sha256-UiIyoFREfd3gV0uhSgZ8TVFQiP3yprrBZDOm3+8Dge0=";
   };
 
   patches = [
     ./dont-clear-pythonpath.patch
   ];
 
-  nativeBuildInputs = [
+  build-system = [
     pyqtwebengine.wrapQtAppsHook
+    setuptools
   ];
 
-  propagatedBuildInputs = [
+  dependencies = [
     atomicwrites
     chardet
     cloudpickle
@@ -73,6 +76,7 @@ buildPythonPackage rec {
     nbconvert
     numpy
     numpydoc
+    pickleshare
     psutil
     pygments
     pylint-venv
diff --git a/pkgs/development/python-modules/strct/default.nix b/pkgs/development/python-modules/strct/default.nix
index 061e2a90c07c..c5f9bc2f994b 100644
--- a/pkgs/development/python-modules/strct/default.nix
+++ b/pkgs/development/python-modules/strct/default.nix
@@ -30,13 +30,13 @@ buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace pytest.ini \
-      --replace  \
+      --replace-fail  \
         "--cov" \
         "#--cov"
 
     # configure correct version, which fails due to missing .git
     substituteInPlace versioneer.py strct/_version.py \
-      --replace '"0+unknown"' '"${version}"'
+      --replace-fail '"0+unknown"' '"${version}"'
   '';
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/stripe/default.nix b/pkgs/development/python-modules/stripe/default.nix
index b23e68aa2c27..fe31361a65be 100644
--- a/pkgs/development/python-modules/stripe/default.nix
+++ b/pkgs/development/python-modules/stripe/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "stripe";
-  version = "8.9.0";
+  version = "9.4.0";
   pyproject = true;
 
   disabled = pythonOlder "3.8";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-cffBvdoPPlaKop0nWRChSDQRWliuIesEebOyZ0WHXQ4=";
+    hash = "sha256-D94cu/Re4Nd71/vYVhiG37bawPNuWp5T/cpKc4biPsw=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/trimesh/default.nix b/pkgs/development/python-modules/trimesh/default.nix
index abcc25faafdb..bd3a9f8d762d 100644
--- a/pkgs/development/python-modules/trimesh/default.nix
+++ b/pkgs/development/python-modules/trimesh/default.nix
@@ -10,19 +10,19 @@
 
 buildPythonPackage rec {
   pname = "trimesh";
-  version = "4.3.1";
+  version = "4.3.2";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-SFD+nZVNb90+UVdWmZwnGEGF21zKhE7mfFPn2HluizE=";
+    hash = "sha256-FFDb0aro3YJe3dVsWn19GzXK1+/Cxj1TXhlWlXfCWRY=";
   };
 
   nativeBuildInputs = [ setuptools ];
 
-  propagatedBuildInputs = [ numpy ];
+  dependencies = [ numpy ];
 
   nativeCheckInputs = [ lxml pytestCheckHook ];
 
diff --git a/pkgs/development/python-modules/uart-devices/default.nix b/pkgs/development/python-modules/uart-devices/default.nix
new file mode 100644
index 000000000000..7859d5ce32d1
--- /dev/null
+++ b/pkgs/development/python-modules/uart-devices/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-asyncio
+, pythonOlder
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "uart-devices";
+  version = "0.1.0";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "bdraco";
+    repo = "uart-devices";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rmOWyTdOwnlr8Rwsvd2oeZq79LuGVJDAkIW2/9gGrKQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail "-Wdefault --cov=uart_devices --cov-report=term-missing:skip-covered" ""
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  nativeCheckInputs = [
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "uart_devices" ];
+
+  meta = with lib; {
+    description = "UART Devices for Linux";
+    homepage = "https://github.com/bdraco/uart-devices";
+    changelog = "https://github.com/bdraco/uart-devices/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/development/python-modules/upb-lib/default.nix b/pkgs/development/python-modules/upb-lib/default.nix
index ea00a6c97e81..da85053a7d18 100644
--- a/pkgs/development/python-modules/upb-lib/default.nix
+++ b/pkgs/development/python-modules/upb-lib/default.nix
@@ -1,37 +1,51 @@
 { lib
 , buildPythonPackage
+, fetchFromGitHub
+, pyserial-asyncio-fast
+, pytestCheckHook
 , pythonOlder
-, fetchPypi
-, pyserial-asyncio
 , pytz
+, poetry-core
 }:
 
 buildPythonPackage rec {
   pname = "upb-lib";
-  version = "0.5.4";
-  format = "setuptools";
+  version = "0.5.6";
+  pyproject = true;
 
-  disabled = pythonOlder "3.7";
+  disabled = pythonOlder "3.11";
 
-  src = fetchPypi {
-    pname = "upb_lib";
-    inherit version;
-    hash = "sha256-KEnSADj+sQtz37Xbi6fXoe2TN+F5Z9SYnlvCgXtxVnk=";
+  src = fetchFromGitHub {
+    owner = "gwww";
+    repo = "upb-lib";
+    rev = "refs/tags/${version}";
+    hash = "sha256-e8LYywKA5lNZ4UYFZTwcfePDWB4cTNz38Tiy4xzOxOs=";
   };
 
-  propagatedBuildInputs = [
-    pyserial-asyncio
+  build-system = [
+    poetry-core
+  ];
+
+  dependencies = [
+    pyserial-asyncio-fast
     pytz
   ];
 
-  # no tests on PyPI, no tags on GitHub
-  doCheck = false;
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
 
   pythonImportsCheck = [ "upb_lib" ];
 
+  disabledTests = [
+    # AssertionError
+    "test_create_control_word_all"
+  ];
+
   meta = with lib; {
     description = "Library for interacting with UPB PIM";
     homepage = "https://github.com/gwww/upb-lib";
+    changelog = "https://github.com/gwww/upb-lib/releases/tag/${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda ];
   };